iZaiZaiA il y a 3 ans
Parent
commit
6b2e8b4a3f

+ 8 - 8
src/api/modules/data-fill/division.js

@@ -1,20 +1,20 @@
 import {httpApi} from "../../request/httpApi";
 
 export default {
-    //新增或删除 合同段划分树首件关联
-    async wbsTreeFirstSave(form, msg = true) {
+    //获取关联的合同段树
+    async getContractInfoTree(form, msg = true) {
         return httpApi({
-            url: '/api/blade-business/treeContractFirst/saveOrDelete',
-            method: 'post',
+            url: '/api/blade-manager/contractInfo/tree',
+            method: 'get',
             params: form
         },msg);
     },
-    //修改树节点
-    async wbsTreeUpdateNode(form, msg = true) {
+    //未识别合同段划分节点 手动关联
+    async setImportRelation(form, msg = true) {
         return httpApi({
-            url: '/api/blade-business/informationWriteQuery/updateContractNodeParameter',
+            url: '/api/blade-manager/wbsTreeContract/import-relation',
             method: 'post',
-            params: form
+            data: form
         },msg);
     },
 }

+ 8 - 113
src/views/data-fill/components/division/DivisionTree.vue

@@ -1,148 +1,43 @@
 <template>
-    <ElTree class="hc-tree-node tree-line" ref="ElTreeRef" :props="ElTreeProps" :load="ElTreeLoadNode" lazy highlight-current accordion node-key="primaryKeyId"
-            show-checkbox :default-expanded-keys="defaultExpandedCids" @node-click="ElTreeClick" :indent="0">
+    <ElTree class="hc-tree-node tree-line" ref="ElTreeRef" :props="ElTreeProps" :data="datas" highlight-current accordion node-key="primaryKeyId" :indent="0" @node-click="ElTreeClick">
         <template #default="{ node, data }">
             <div class="data-custom-tree-node" :id="`${idPrefix}${data['primaryKeyId']}`">
-                <div class="label division" :class="node.level === 1?'level-name':node.level">{{ node.label }}</div>
+                <div class="label" :class="node.level === 1?'level-name':''">{{ node.label }}</div>
             </div>
         </template>
     </ElTree>
 </template>
 
 <script setup>
-import {ref,nextTick,watch} from "vue";
-import dataFillQuery from '~api/data-fill/query';
-import {isItem,getArrValue,getObjValue} from "vue-utils-plus"
-
+import { ref } from "vue";
 //参数
 const props = defineProps({
-    projectId: {
-        type: [String,Number],
-        default: ''
-    },
-    contractId: {
-        type: [String,Number],
-        default: ''
-    },
-    autoExpandKeys: {
+    datas: {
         type: Array,
         default: () => ([])
     },
     idPrefix: {
         type: String,
-        default: 'division-tree-'
-    },
-    isAutoClick: {
-        type: Boolean,
-        default: true
+        default: 'division-tree-data2-'
     }
 })
 
 //变量
 const ElTreeRef = ref(null)
 const ElTreeProps = ref({
-    label: 'title',
-    children: 'children',
-    isLeaf: 'notExsitChild'
-})
-const TreeExpandKey = ref(props.autoExpandKeys)
-const projectId = ref(props.projectId);
-const contractId = ref(props.contractId);
-const idPrefix = ref(props.idPrefix);
-
-//监听
-watch(() => [
-    props.autoExpandKeys,
-    props.projectId,
-    props.contractId,
-    props.idPrefix,
-], ([expandKeys, UserProjectId, UserContractId,UserIdPrefix]) => {
-    TreeExpandKey.value = expandKeys
-    projectId.value = UserProjectId
-    contractId.value = UserContractId
-    idPrefix.value = UserIdPrefix
+    label: 'fullName',
+    children: 'children'
 })
 
 //事件
-const emit = defineEmits(['nodeTap', 'nodeLoading', 'relationTap'])
-
-//树形结构异步加载数据
-const defaultExpandedCids = ref([])
-const ElTreeLoadNode = async (node, resolve) => {
-    let contractIdRelation = '', parentId = '', primaryKeyId = '';
-    if (node.level !== 0) {
-        const nodeData = getObjValue(node?.data);
-        contractIdRelation = nodeData?.contractIdRelation || ''
-        parentId = contractIdRelation ? nodeData?.primaryKeyId : nodeData?.id
-        primaryKeyId = nodeData?.id || ''
-    }
-    //获取数据
-    const {error, code, data} = await dataFillQuery.queryWbsTreeData({
-        contractId: contractId.value || '',
-        contractIdRelation,
-        primaryKeyId,
-        parentId
-    })
-    //处理数据
-    if (!error && code === 200) {
-        let clickKey = '', defaultExpandedArr = [];
-        const keys = TreeExpandKey.value || []
-        const resData = getArrValue(data)
-        if (keys.length > 0) {
-            let lastKey = keys[keys.length-1];
-            for (const item of resData) {
-                //自动展开
-                if (isItem(keys,item?.primaryKeyId)) {
-                    defaultExpandedArr.push(item?.primaryKeyId)
-                }
-                //最后一个,选中点击
-                if (item?.primaryKeyId === lastKey) {
-                    clickKey = item?.primaryKeyId
-                }
-            }
-        } else if (node.level === 0) {
-            defaultExpandedArr.push(resData[0]?.primaryKeyId)
-        }
-        //自动展开
-        defaultExpandedCids.value = defaultExpandedArr
-        if (node.level === 0) {
-            emit('nodeLoading')
-        }
-        resolve(resData)
-        //最后一个,执行点击
-        if (props.isAutoClick && clickKey) {
-            await nextTick(() => {
-                document.getElementById(`${idPrefix.value}${clickKey}`)?.click()
-            })
-        }
-    } else {
-        if (node.level === 0) {
-            emit('nodeLoading')
-        }
-        resolve([])
-    }
-}
+const emit = defineEmits(['nodeTap'])
 
 //节点被点击
 const ElTreeClick = async (data,node) => {
     emit('nodeTap', {node, data})
 }
-
-//鼠标右键事件
-const ElTreeRelationClick = (e,data,node) => {
-    if (node.level !== 1) {
-        e.preventDefault();
-        emit('relationTap', {node, data})
-    }
-}
-
 </script>
 
 <style lang="scss" scoped>
 @import "../../../../styles/app/tree.scss";
 </style>
-<style lang="scss">
-.hc-tree-node .el-tree-node__label {
-    flex: 1;
-}
-</style>

+ 56 - 10
src/views/data-fill/division.vue

@@ -223,9 +223,9 @@
         </HcDialog>
 
         <!--替换并关联节点-->
-        <HcDialog :show="relationModal" title="替换并关联节点" widths="47rem" ui="hc-modal-table" @close="relationModal = false">
+        <HcDialog :show="relationModal" title="替换并关联节点" widths="47rem" ui="hc-modal-table" saveText="确认关联" :loading="relationLoading" @close="relationModal = false" @save="relationSaveClick">
             <el-scrollbar>
-                <DivisionTree :projectId="projectId" :contractId="contractId" line/>
+                <DivisionTree :datas="unmatchedTreeData" @nodeTap="divisionTreeClick"/>
             </el-scrollbar>
         </HcDialog>
 
@@ -247,7 +247,9 @@ import {getStoreData, setStoreData} from '~src/utils/storage'
 import {HcIsButton} from "~src/plugins/IsButtons";
 import {getDictionary} from "~api/other"
 import wbsApi from "~api/data-fill/wbs";
+import divisionApi from "~api/data-fill/division";
 import Draggable from "vuedraggable";
+import queryApi from "~api/data-fill/query";
 
 //初始变量
 const router = useRouter()
@@ -276,6 +278,7 @@ onMounted(() => {
     setElTreeMenu()
     getWbsNodeTypeApi()
     getMajorDataTypeApi()
+    getContractInfoTreeApi()
 })
 
 //获取节点类型
@@ -786,20 +789,63 @@ const importTempFolder = () => {
 }
 
 //关联被点击
-const unmatchedTreeTap = ({node, data}) => {
-
+const relationModal = ref(false)
+const relationItemInfo = ref({})
+const unmatchedTreeTap = ({data}) => {
+    relationItemInfo.value = data
+    relationModal.value = true
 }
 
+//获取导入树
+const unmatchedTreeData = ref([])
+const getContractInfoTreeApi = async () => {
+    const {error, code, data} = await divisionApi.getContractInfoTree({
+        projectId: projectId.value,
+        contractId: contractId.value,
+        wbsId: ''
+    })
+    //判断状态
+    if (!error && code === 200) {
+        unmatchedTreeData.value = getArrValue(data)
+    } else {
+        unmatchedTreeData.value = []
+    }
+}
 
+//关联树
+const divisionTreeItemInfo = ref({})
+const divisionTreeClick = ({data}) => {
+    divisionTreeItemInfo.value = data
+}
 
-
-//关联节点
-const ElTreeRelationClick = ({node, data}) => {
-    console.log({node, data})
-    relationModal.value = true
+//确认关联
+const relationLoading = ref(false)
+const relationSaveClick = () => {
+    const item = relationItemInfo.value
+    const info = divisionTreeItemInfo.value
+    const primaryKeyId = info?.primaryKeyId ?? ''
+    if (!primaryKeyId) {
+        window?.$message?.warning('请先选择一个树节点')
+    } else {
+        setImportRelationApi({
+            pKeyIdOld: info?.primaryKeyId,
+            wbsTreeContractVO: {
+                ...item,
+                id: ''
+            }
+        })
+    }
 }
 
-const relationModal = ref(false)
+const setImportRelationApi = async (form) => {
+    relationLoading.value = true
+    const { error, code } = await divisionApi.setImportRelation(form)
+    relationLoading.value = false
+    if (!error && code === 200) {
+        window.$message?.success('关联成功')
+        relationModal.value = false
+    }
+}
 
 //下载模板
 const downloadXlsx = () => {