|
@@ -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>
|
|
|
|