Ver código fonte

文件题名修改

duy 6 meses atrás
pai
commit
d111cd8d9a
2 arquivos alterados com 260 adições e 88 exclusões
  1. 110 74
      src/api/modules/wbs/private.js
  2. 150 14
      src/views/project/list/file-title-dialog.vue

+ 110 - 74
src/api/modules/wbs/private.js

@@ -1,182 +1,218 @@
-import { HcApi } from "../../request/index";
+import { HcApi } from '../../request/index'
 
 export default {
     async getLazytree(form) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/lazy-tree",
-            method: "get",
+            url: '/api/blade-manager/wbsPrivate/lazy-tree',
+            method: 'get',
             params: form,
-        });
+        })
     },
     async detail(form) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/detail",
-            method: "get",
+            url: '/api/blade-manager/wbsPrivate/detail',
+            method: 'get',
             params: form,
-        });
+        })
     },
     async submit(form) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/submit",
-            method: "post",
+            url: '/api/blade-manager/wbsPrivate/submit',
+            method: 'post',
             data: form,
-        });
+        })
     },
     async del(pKeyId) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/remove",
-            method: "post",
+            url: '/api/blade-manager/wbsPrivate/remove',
+            method: 'post',
             params: { pKeyId },
-        });
+        })
     },
     async removeTableByCondition(form) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/remove-table",
-            method: "get",
+            url: '/api/blade-manager/wbsPrivate/remove-table',
+            method: 'get',
             params: form,
-        });
+        })
     },
     async findNodeTableByCondition(form) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/get-node-tables",
-            method: "get",
+            url: '/api/blade-manager/wbsPrivate/get-node-tables',
+            method: 'get',
             params: form,
-        });
+        })
     },
     async wbsTreePrivateTableSort(data) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/submit-table-sort",
-            method: "post",
+            url: '/api/blade-manager/wbsPrivate/submit-table-sort',
+            method: 'post',
             data: data,
-        });
+        })
     },
     async getNodeTabAndParam(form) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/get-node-table-param",
-            method: "get",
+            url: '/api/blade-manager/wbsPrivate/get-node-table-param',
+            method: 'get',
             params: form,
-        });
+        })
     },
     async privateSubmitFullName(form) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/submit-full-name",
-            method: "post",
+            url: '/api/blade-manager/wbsPrivate/submit-full-name',
+            method: 'post',
             params: form,
-        });
+        })
     },
     async syncNodeParam(form) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/sync-node-param",
-            method: "post",
+            url: '/api/blade-manager/wbsPrivate/sync-node-param',
+            method: 'post',
             params: form,
-        });
+        })
     },
     //同步电签默认信息
     async syncProjecteVisa(form) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/sync-project-eVisa",
-            method: "post",
+            url: '/api/blade-manager/wbsPrivate/sync-project-eVisa',
+            method: 'post',
             params: form,
-        });
+        })
     },
     async syncNodeTable(primaryKeyId) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/sync-node-table",
-            method: "post",
+            url: '/api/blade-manager/wbsPrivate/sync-node-table',
+            method: 'post',
             params: { primaryKeyId },
-        });
+        })
     },
     //同步项目基础信息到合同段接口sync-node-info
     async syncNodeinfo(pKeyId) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/sync-node-info",
-            method: "post",
+            url: '/api/blade-manager/wbsPrivate/sync-node-info',
+            method: 'post',
             params: { pKeyId },
-        });
+        })
     },
     //同步元素表单排序到合同段
     async syncContractTabSort(projectId) {
         return HcApi({
-            url: "/api/blade-manager/wbsTreeContract/syncContractTabSort",
-            method: "get",
+            url: '/api/blade-manager/wbsTreeContract/syncContractTabSort',
+            method: 'get',
             params: { projectId },
-        });
+        })
     },
     //清表树
     async tabTypeLazyTree(form) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/tab-Type-lazy-tree",
-            method: "get",
+            url: '/api/blade-manager/wbsPrivate/tab-Type-lazy-tree',
+            method: 'get',
             params: form,
-        });
+        })
     },
     async tabTypeLazyTreeAll(form) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/tab-Type-lazy-tree-all",
-            method: "get",
+            url: '/api/blade-manager/wbsPrivate/tab-Type-lazy-tree-all',
+            method: 'get',
             params: form,
-        });
+        })
     },
     async projecttabInfo(form) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/add-projecttab-info",
-            method: "post",
+            url: '/api/blade-manager/wbsPrivate/add-projecttab-info',
+            method: 'post',
             params: form,
-        });
+        })
     },
     //后管-删除元素表
     async delTabInfoAll(pKeyId) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/del-tab-info-all",
-            method: "post",
+            url: '/api/blade-manager/wbsPrivate/del-tab-info-all',
+            method: 'post',
             params: { pKeyId },
-        });
+        })
     },
     //后管-删除项目表单
     async delAprojectTab(form) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/del-aprojecttab-info",
-            method: "post",
+            url: '/api/blade-manager/wbsPrivate/del-aprojecttab-info',
+            method: 'post',
             params: form,
-        });
+        })
     },
     //新增元素业务时间表
     async saveTabusstime(form) {
         return HcApi({
-            url: "/api/blade-manager/tabbusstimeinfo/save-tabusstime-info",
-            method: "post",
+            url: '/api/blade-manager/tabbusstimeinfo/save-tabusstime-info',
+            method: 'post',
             data: form,
-        });
+        })
     },
     //删除元素业务时间表
     async removeTabusstime(ids) {
         return HcApi({
-            url: "/api/blade-manager/tabbusstimeinfo/remove",
-            method: "post",
+            url: '/api/blade-manager/tabbusstimeinfo/remove',
+            method: 'post',
             params: { ids },
-        });
+        })
     },
     //后管独立表单库表单同步到合同段所有选择的节点下
     async syncFormToContractNode(form) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/syncFormToContractNode",
-            method: "get",
+            url: '/api/blade-manager/wbsPrivate/syncFormToContractNode',
+            method: 'get',
             params: form,
-        });
+        })
     },
     //私有wbs关联节点
     async LinekNodeTreelist(form) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/getlinek-node-treelist",
-            method: "post",
+            url: '/api/blade-manager/wbsPrivate/getlinek-node-treelist',
+            method: 'post',
             params: form,
-        });
+        })
     },
     async LinekNodeTree(form) {
         return HcApi({
-            url: "/api/blade-manager/wbsPrivate/link-node-tree",
-            method: "post",
+            url: '/api/blade-manager/wbsPrivate/link-node-tree',
+            method: 'post',
             params: form,
-        });
+        })
     },
-};
+
+    //获取文件题名规则
+    async GetNameRule(params) {
+        return HcApi({
+            url: '/api/blade-manager/wbsPrivate/getNameRule',
+            method: 'get',
+            params,
+        })
+    },
+
+    //获取获取文件题名范围
+    async getTitleRange(params) {
+        return HcApi({
+            url: '/api/blade-manager/wbsPrivate/getTitleRange',
+            method: 'get',
+            params,
+        })
+    },
+
+    // 新增或修改文件题名规则
+    async saveOrUpdateNameRule(row) {
+        return HcApi({
+            url: '/api/blade-manager/wbsPrivate/saveOrUpdateNameRule',
+            method: 'post',
+            data: row,
+        })
+    },
+
+    // 删除文件题名规则
+    async deleteNameRule(params) {
+        return HcApi({
+            url: '/api/blade-manager/wbsPrivate/deletedNameRule',
+            method: 'get',
+            params,
+        })
+    },
+}

+ 150 - 14
src/views/project/list/file-title-dialog.vue

@@ -23,7 +23,7 @@
       
         <div style="height: calc(100% - 60px);">
             <hc-table
-                v-loading="fileTableLoading"
+                :loading="fileTableLoading"
                 :datas="fileTableData"
                 :column="tableColumn"
           
@@ -51,17 +51,17 @@
                     </span>
                 </template>
 
-                <template #ruleSize="{ row }">
+                <template #ruleSize="{ row, index }">
                     <div v-if="isShowSize">
-                        <span v-if="row.type === 1" :class="{ orange: row.isEdit }" @click="chooseFile(row)">所有节点</span>
+                        <span v-if="row.type === 1" :class="{ orange: row.isEdit }" @click="chooseFile(row, index)">所有节点</span>
                         <div v-else>
-                            <el-link v-if="!row.ruleSizeVal" type="warning" @click="chooseFile(row)">选择题名范围</el-link>
-                            <span v-else :class="{ orange: row.isEdit }" @click="chooseFile(row)">{{ row.ruleSizeVal }}</span>
+                            <el-link v-if="!row.ruleSizeVal" type="warning" @click="chooseFile(row, index)">选择题名范围</el-link>
+                            <span v-else :class="{ orange: row.isEdit }" @click="chooseFile(row, index)">{{ row.ruleSizeVal }}</span>
                         </div>
                     </div>
                 </template>
 
-                <template #action="{ row }">
+                <template #action="{ row, index }">
                     <el-link
                         v-if="!row.isEdit"
                         type="primary"
@@ -79,8 +79,8 @@
                         保存
                     </el-link>
                     <el-link
+                        v-del-com:[delRow]="{ row, index }"
                         type="danger"
-                        @click="delRow(row)"
                     >
                         删除
                     </el-link>
@@ -94,6 +94,45 @@
                 保存
             </el-button>
         </template>
+
+
+        <!-- 选择题名范围i -->
+        <hc-dialog
+            v-model="chooseFileVisible"
+            title="选择题名范围"
+        >
+            <el-form ref="fileTitleRef" label-position="left" label-width="80px" :model="fileTitleModel" :rules="fileTitleRules">
+                <el-form-item label="题名范围" prop="type">
+                    <div>
+                        <el-radio v-model="fileTitleModel.type" :value="1" @input="changeRadio">所有节点</el-radio><br>
+                        <el-radio v-model="fileTitleModel.type" :value="2" @input="changeRadio">部分节点</el-radio>
+                    </div>
+                </el-form-item>
+            </el-form>
+          
+            <div>
+                <el-scrollbar v-if="fileTitleModel.type === 2" v-loading="fileTreeLoading" class="h-100p" style="height: 400px;">
+                    <el-tree
+                        :data="fileTreeData"
+                        :props="fileDefaultProps"
+                        :expand-on-click-node="false"
+                        highlight-current
+                        node-key="id"
+                        show-checkbox
+                        :default-checked-keys="deCheckTreeKeys"
+                        @check="checkFileSize"
+                    />
+                </el-scrollbar>
+            </div>
+            <template #footer>
+                <div class="dialog-footer">
+                    <el-button @click="chooseFileVisible = false">取消</el-button>
+                    <el-button type="primary" @click="saveFileSize">
+                        保存
+                    </el-button>
+                </div>
+            </template>
+        </hc-dialog>
     </hc-dialog>
 </template>
 
@@ -136,9 +175,11 @@ const getNodeTypelist = async () => {
 }
 //获取文件题名规则
 const getFileTableData = async () => {
+    fileTableLoading.value = true
     const { data } = await privateApi.GetNameRule(
         { projectId:projectId.value },
     )
+    fileTableLoading.value = false
     fileTableData.value = getArrValue(data)
     fileTableData.value.forEach((element) => {
             element.roleNameVal = element.nameRule.split(',')
@@ -185,6 +226,7 @@ const addRow = () => {
 // 刷新
 const refreshRow = () => {
     // TODO: 实现刷新逻辑
+    getFileTableData()
 }
 
 // 编辑行
@@ -193,26 +235,108 @@ const editRow = (row) => {
 }
 
 // 保存行
-const saveRow = (row) => {
+const saveRow = async (row) => {
     row.isEdit = false
     row.roleNameVal = row.ruleName.map(key => {
         const item = nodeTypelist.value.find(i => i.dictKey === key)
         return item?.dictValue || key
     })
+    if (row.ruleName.length < 1) {
+        window.$message.warning('请选择文件题名规则')
+        return
+      }
+      if (!row.type) {
+        window.$message.warning('请选择文件题名范围')
+        return
+      }
+    row.isEdit = false
+    row.isEdit1 = false
+      const ruleName = row.ruleName.join('-')
+      let ruleSizeVal = ''
+      if (row.type == 1) {
+        ruleSizeVal = ''
+      } else {
+         ruleSizeVal = row.ruleSizeValId.join(',')
+      }
+     
+      let nameRuleDtos = {
+        nameId:row.nameId,
+        nameRule:ruleName,
+        nodeId:ruleSizeVal,
+        projectId:projectId.value,
+        type:fileTitleModel.value.type,
+      }
+
+    const { data, code, msg } = await privateApi.saveOrUpdateNameRule([nameRuleDtos])
+    if (code === 200) {
+        window.$message.success(msg)
+        getFileTableData()
+    }
 }
 
 // 删除行
-const delRow = (row) => {
-    const index = fileTableData.value.indexOf(row)
-    if (index > -1) {
-        fileTableData.value.splice(index, 1)
-    }
+const delRow = async ({ item }, resolve) => {
+    const { row, index } = item
+    if (!item.nameId) {
+       fileTableData.value.splice(index, 1)
+      }
+    const { isRes } = await privateApi.deleteNameRule({
+        nameId:row.nameId,
+    })
+    resolve() //关闭弹窗
+    if (!isRes) return
+    window.$message.success('删除成功')
+    getFileTableData().then()
 }
 
 // 选择文件
-const chooseFile = (row) => {
+const chooseFileVisible = ref(false)
+const chooseFileIndex = ref(0)
+const deCheckTreeKeys = ref([])
+const fileTreeData = ref([])
+const fileTreeLoading = ref(false)
+const fileDefaultProps = ref({
+    children: 'children',
+    label: 'nodeName',
+})
+const checkFileSize = (data, { checkedNodes, checkedKeys }) => {
+    let checkedTitles = checkedNodes.map(node => node.nodeName).join('、')
+      fileTableData.value[chooseFileIndex.value].isEdit1 = false
+      const fileItem = fileTableData.value[chooseFileIndex.value]
+      fileItem.ruleSizeVal = checkedTitles
+      fileItem.ruleSizeValId = checkedKeys
+     
+}
+const fileTitleRef = ref(null)
+const fileTitleModel = ref({
+   
+})
+const fileTitleRules = ref({
+    type: [{ required: true, message: '请选择文件题名范围', trigger: 'change' }],
+})
+const chooseFile = (row, index) => {
     if (!row.isEdit) return
     // TODO: 实现选择文件逻辑
+    const { ruleName } = row
+      if (ruleName && ruleName.length > 0) {
+        chooseFileVisible.value = true
+        chooseFileIndex.value = index
+        deCheckTreeKeys.value = row.ruleSizeValId
+            getTitleRangeData()
+      } else {
+      window.$message.warning('请先选择文件题名规则')
+      }
+}
+const getTitleRangeData = async () => {
+    fileTreeLoading.value = true
+    const { data, code, error } = await privateApi.getTitleRange({
+        projectId: projectId.value,
+    })
+    fileTreeLoading.value = false
+   if (!error && code === 200 ) {
+    fileTreeData.value = getArrValue(data)
+    deCheckTreeKeys.value = fileTreeData.value.filter(node => node.status === 11).map(node => node.id)
+   }
 }
 
 // 改变规则名称
@@ -224,6 +348,18 @@ const changeRoleName = (value, row) => {
 const batchsaveFileSize = () => {
     // TODO: 实现批量保存逻辑
 }
+const saveFileSize = () => {
+    // TODO: 实现保存逻辑
+    chooseFileVisible.value = false
+    if ( fileTableData.value.length > 0) {
+        fileTableData.value[chooseFileIndex.value].type = fileTitleModel.value.type
+    }
+}
+const changeRadio = (val) => {
+    const fileItem = fileTableData.value[chooseFileIndex.value]
+    fileItem.type = val
+
+}
 
 defineExpose({
     show,