Explorar o código

节点划分接口调用

duy hai 5 meses
pai
achega
5a2013a156

+ 112 - 74
src/views/data-fill/components/divisionDialog.vue

@@ -11,8 +11,9 @@
                                 tree-key="id"
                                 show-checkbox 
                                 is-type
+                                check-strictly
                                 :is-color="false"
-                                @check="treeNodeCheck"
+                                @check="leftTreeNodeCheckChange"
                                 @load="treeLoadNode"
                                 @node-loading="treeNodeLoading"
                             />
@@ -33,8 +34,9 @@
                                 show-checkbox 
                                 is-type
                                 :is-color="false"
-                                @check="treeNodeCheckRight"
-                                @load="treeLoadNode"
+                                @check="addTreeNodeCheckChange"
+                                @load="rightTreeLoadNode"
+                                @node-tap="rightElTreeClick"
                             >
                                 <template #name="{ node, data }">
                                     <div class="custom-tree-node">
@@ -81,29 +83,26 @@ import { nextTick, ref, watch } from 'vue'
 import { getArrValue, getObjValue } from 'js-fast-way'
 import { useAppStore } from '~src/store'
 
-
+import samplingApi from '~api/tentative/material/sampling'
 import queryApi from '~api/data-fill/query'
+import wbsApi from '~api/data-fill/wbs'
+import { getStoreValue } from '~uti/storage'
 const props = defineProps({
     linkModal: {
         type: Boolean,
         default: false,
     },
-    isCheckId:{
-        type: Number,
-        default: 1,
-    },
-    checkIds:{
-        type: [Number, String],
-        default: '',
-    },
-    rightTreeCheck:{
-        type: Array,
-        default: () => ([]),
-    },
+
+ 
+  
     classifyType:{
         type: String,
         default: 1,
     },
+    treeItemInfo:{
+        type: Object,
+        default: () => ({}),
+    },
   
 })
 //事件
@@ -111,8 +110,8 @@ const emit = defineEmits(['close', 'save'])
 const useAppState = useAppStore()
 const contractId = ref(useAppState.getContractId)
 const projectId = ref(useAppState.getProjectId)
-const isCheckId = ref(props.isCheckId)
 
+const treeItemInfo = ref(props.treeItemInfo)
 const classifyType = ref(props.classifyType)
 
 const linkModal = defineModel('modelValue', {
@@ -120,6 +119,7 @@ const linkModal = defineModel('modelValue', {
 })
 const closeModal = ()=>{
     linkModal.value = false
+    leftPid.value = ''
     emit('close')
 }
 //获取两棵树的数据
@@ -136,11 +136,10 @@ const treeNodeLoading = () => {
 
 
 
-const defaultCheckedKeys = ref([])
-const rightKeys = ref([])
+
 
  const meterIds = ref('')
-const wbsIds = ref('')
+
 const rightTree = ref(null)
 
 //监听
@@ -150,47 +149,73 @@ props.linkModal,
 
 
 props.classifyType,
-], ([link, type]) => {
+props.treeItemInfo,
+], ([link, type, treeItemIn]) => {
     linkModal.value = link
     classifyType.value = type
+    treeItemInfo.value = treeItemIn
 }, { immediate: true })
 
-
-const sureLoading = ref(false)
-const sureClick = async (type)=>{
-
-    if (!meterIds.value || !wbsIds.value) {
-        window.$message.warning('请先选择需要关联的节点')
-        return
+//选中的节点
+const allSelectedList = ref([])
+const halfSelectedList = ref([])
+const addTreeNodeCheckChange = (_, { checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys }) => {
+    console.log(checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys, 'nodes')
+    
+    let NodesArr = [],
+        halfArr = []
+    //全选数据
+    const keys = checkedNodes || []
+    console.log(keys, 'keys')
+    for (let i = 0; i < keys.length; i++) {
+        NodesArr.push({
+            nodeName: keys[i].title,
+            primaryKeyId: keys[i].primaryKeyId,
+            
+        })
     }
-    sureLoading.value = true
-    const { error, code, data, msg } = await unitApi.LinkMeterTreeAndWbsTree({
-        projectId:projectId.value,
-       contractId:contractId.value,
-       meterIds:meterIds.value,
-       wbsIds:wbsIds.value,
-  
-    })
-    sureLoading.value = false
-    if (!error && code === 200) {
-     window.$message.success(msg)
-   if (type === 1) {
-    linkModal.value = false
-    emit('save')
-   } else {
-    if (isCheckId.value === 1) {
-        nextTick(()=>{
-      
-            defaultCheckedKeys.value = []
-            rightKeys.value = []
-            wbsIds.value = ''
-            meterIds.value = ''
-            leftTree.value.treeRef.setCheckedKeys([])
-            rightTree.value.treeRef.setCheckedKeys([])
-            })
+    allSelectedList.value = NodesArr
+    console.log(allSelectedList.value, ' allSelectedList.value')
+    //半选数据
+    const halfNodes = halfCheckedNodes || []
+    for (let i = 0; i < halfNodes.length; i++) {
+        halfArr.push({
+            nodeName: halfNodes[i].title,
+            primaryKeyId: halfNodes[i].primaryKeyId,
+           
+        })
     }
-   }
-    
+    halfSelectedList.value = halfArr
+    console.log(halfSelectedList.value, ' halfSelectedList.value')
+}
+const sureLoading = ref(false)
+const sureClick = async (type) => {
+    const keys = allSelectedList.value || []
+    if (keys.length <= 0 || leftPid.value.length <= 0) {
+        window?.$message?.warning('请先选择节点')
+    } else {
+        //发起请求
+        sureLoading.value = true
+        const primaryKeyId = rightObj.value.primaryKeyId || ''
+        const { error, code, msg } = await wbsApi.saveContractTreeNode({
+            projectId: projectId.value,
+            contractId: contractId.value,
+            saveType: 2, //仅当前节点
+            allSelectedList: allSelectedList.value,
+            halfSelectedList: halfSelectedList.value,
+            currentNodePrimaryKeyId: primaryKeyId,
+            isImportTree: 1,
+        })
+        //判断状态
+        sureLoading.value = false
+        if (!error && code === 200) {
+            window?.$message?.success(msg)
+            emit('save')
+            // type=1时关闭弹窗,type=2时保持打开
+            if (type === 1) {
+                closeModal()
+            }
+        }
     }
 }
 
@@ -218,6 +243,19 @@ const treeLoadNode = async ({ node, item, level }, resolve) => {
     resolve(getArrValue(data))
     treeLoading.value = false
 }
+const leftPid = ref('')
+
+const leftTreeNodeCheckChange = (_, { checkedNodes }) => {
+    if (checkedNodes && checkedNodes.length > 0) {
+        const lastCheckedNode = checkedNodes[checkedNodes.length - 1]
+        leftPid.value = lastCheckedNode.primaryKeyId 
+        nextTick(() => {
+            leftTree.value?.treeRef.setCheckedKeys([lastCheckedNode.id])
+        })
+    } else {
+        leftPid.value = ''
+    }
+}
 //更改节点名称
 const ElTreeDblClick = (item) => {
     item.isInputName = true
@@ -237,27 +275,27 @@ const ElTreeBtnClick = (item) => {
         // ElTreeCheckedKeys()
     }
 }
-const treeNodeCheck = (_, { checkedNodes }) => {
-    console.log(checkedNodes, 'checkedNodes')
-    let arr = []
-    checkedNodes.forEach(ele => {
-        if (!ele.hasChild) {
-            arr.push(ele.id)
-        }
-    })
-  
-    meterIds.value = arr.join(',')
-}
 
-const treeNodeCheckRight = (_, { checkedNodes }) => {
-    let arr = []
-    checkedNodes.forEach(ele => {
-        if (!ele.hasChild) {
-            arr.push(ele.pkeyId)
-        }
+
+const rightTreeLoadNode = async ({ node, item, level }, resolve) => {
+    let parentId = '0'
+    if (level !== 0) {
+        parentId = item?.id
+    }
+    //获取数据
+    const { data } = await samplingApi.queryLazyTree({
+        wbsId: treeItemInfo.value.wbsTempId,
+        tenantId: getStoreValue('tenantId') || '',
+        projectId: projectId.value,
+        parentId,
+        wbsType: treeItemInfo.value.wbsType,
     })
-  
-    wbsIds.value = arr.join(',')
+    resolve(getArrValue(data))
+   
+}
+const rightObj = ref(null)
+const rightElTreeClick = ({ data }) => {
+    rightObj.value = data   
 }
 </script>
 

+ 8 - 3
src/views/data-fill/division.vue

@@ -39,7 +39,7 @@
             <div class="horizontal-drag-line" @mousedown="onmousedown" />
         </div>
         <div class="hc-page-content-box hc-division-page">
-            <!-- <div style="height: 50px" class="mb-2">
+            <div style="height: 50px" class="mb-2">
                 <hc-card class="text-right">
                     <el-button
                         hc-btn
@@ -59,7 +59,7 @@
                         <span>节点导入</span>
                     </el-button>
                 </hc-card>
-            </div> -->
+            </div>
             <div class="basic-info">
                 <HcNewCard title="当前节点基础信息">
                     <template #extra>
@@ -1022,7 +1022,7 @@
         </hc-dialog>
 
         <!-- 节点划分 -->
-        <divisionDialog v-model="divisionDialogShow" :classify-type="classifyType" />
+        <divisionDialog v-model="divisionDialogShow" :classify-type="classifyType" :tree-item-info="treeItemInfo" @save="divisionSaveClick" />
         <!-- 节点命名配置 -->
         <hc-dialog v-model="nodeNameDialogShow" title="文件题名(全局)" widths="800px">
             <div class="mb-4 text-orange">
@@ -1063,6 +1063,7 @@ import HcTreeData1 from './components/division/HcTreeData1.vue'
 import DivisionTree from './components/division/DivisionTree.vue'
 import HcTreeNode from './components/HcTreeNode.vue'
 import divisionDialog from './components/divisionDialog.vue'
+import samplingApi from '~api/tentative/material/sampling'
 import {
     arrIndex,
     arrToId,
@@ -2600,6 +2601,10 @@ const divisionDialogShow = ref(false)
 const divisionClick = ()=>{
     divisionDialogShow.value = true
 }
+const divisionSaveClick = ()=>{
+    divisionDialogShow.value = false
+    window?.location?.reload() //刷新页面
+}
 //节点导入
 const divisionImportDialog = ref(false)
 //上传文件