|
@@ -3,10 +3,10 @@
|
|
v-model="isShow"
|
|
v-model="isShow"
|
|
title="分配WBS"
|
|
title="分配WBS"
|
|
widths="56rem"
|
|
widths="56rem"
|
|
- isTable
|
|
|
|
|
|
+ is-table
|
|
|
|
+ :loading="submitLoading"
|
|
@close="dialogClose"
|
|
@close="dialogClose"
|
|
@save="submitClick"
|
|
@save="submitClick"
|
|
- :loading="submitLoading"
|
|
|
|
>
|
|
>
|
|
<div v-loading="treeLoading">
|
|
<div v-loading="treeLoading">
|
|
<el-scrollbar>
|
|
<el-scrollbar>
|
|
@@ -16,8 +16,8 @@
|
|
lazy
|
|
lazy
|
|
accordion
|
|
accordion
|
|
highlight-current
|
|
highlight-current
|
|
- @node-click="treeClick"
|
|
|
|
:default-checked-keys="checkedLinkNodesKeys"
|
|
:default-checked-keys="checkedLinkNodesKeys"
|
|
|
|
+ @node-click="treeClick"
|
|
>
|
|
>
|
|
<template #default="{ node, data }">
|
|
<template #default="{ node, data }">
|
|
<span
|
|
<span
|
|
@@ -26,11 +26,10 @@
|
|
>
|
|
>
|
|
<span>
|
|
<span>
|
|
<el-checkbox
|
|
<el-checkbox
|
|
- v-model="data.checked"
|
|
|
|
v-if="!data.hasChildren"
|
|
v-if="!data.hasChildren"
|
|
|
|
+ v-model="data.checked"
|
|
@change="handleCheckChange($event, data)"
|
|
@change="handleCheckChange($event, data)"
|
|
- ></el-checkbox
|
|
|
|
- ></span>
|
|
|
|
|
|
+ /></span>
|
|
{{ node.label }}
|
|
{{ node.label }}
|
|
</span>
|
|
</span>
|
|
</template>
|
|
</template>
|
|
@@ -39,32 +38,26 @@
|
|
</div>
|
|
</div>
|
|
</hc-dialog>
|
|
</hc-dialog>
|
|
</template>
|
|
</template>
|
|
|
|
+
|
|
<script setup>
|
|
<script setup>
|
|
-import { ref, watch, nextTick } from "vue";
|
|
|
|
-import mainApi from "~api/desk/wbs";
|
|
|
|
-import privateApi from "~api/wbs/private";
|
|
|
|
-import { arrToId, getArrValue, getObjValue } from "js-fast-way";
|
|
|
|
-import { useAppStore } from "~src/store";
|
|
|
|
|
|
+import { nextTick, ref, watch } from 'vue'
|
|
|
|
+import mainApi from '~api/desk/wbs'
|
|
|
|
+import privateApi from '~api/wbs/private'
|
|
|
|
+import { arrToId, getArrValue, getObjValue } from 'js-fast-way'
|
|
|
|
+import { useAppStore } from '~src/store'
|
|
|
|
|
|
-//事件
|
|
|
|
-const emit = defineEmits(["close"]);
|
|
|
|
-//双向绑定
|
|
|
|
-// eslint-disable-next-line no-undef
|
|
|
|
-const isShow = defineModel("modelValue", {
|
|
|
|
- default: false,
|
|
|
|
-});
|
|
|
|
const props = defineProps({
|
|
const props = defineProps({
|
|
projectId: {
|
|
projectId: {
|
|
type: String,
|
|
type: String,
|
|
- default: "",
|
|
|
|
|
|
+ default: '',
|
|
},
|
|
},
|
|
wbsType: {
|
|
wbsType: {
|
|
type: [String, Number],
|
|
type: [String, Number],
|
|
- default: "",
|
|
|
|
|
|
+ default: '',
|
|
},
|
|
},
|
|
wbsId: {
|
|
wbsId: {
|
|
type: [String, Number],
|
|
type: [String, Number],
|
|
- default: "",
|
|
|
|
|
|
+ default: '',
|
|
},
|
|
},
|
|
data: {
|
|
data: {
|
|
type: Object,
|
|
type: Object,
|
|
@@ -72,74 +65,81 @@ const props = defineProps({
|
|
},
|
|
},
|
|
type: {
|
|
type: {
|
|
type: [String, Number],
|
|
type: [String, Number],
|
|
- default: "0", //私有wbs为1,独立表单库为0
|
|
|
|
|
|
+ default: '0', //私有wbs为1,独立表单库为0
|
|
},
|
|
},
|
|
-});
|
|
|
|
-const store = useAppStore();
|
|
|
|
-const userInfo = ref(store.getUserInfo);
|
|
|
|
|
|
+})
|
|
|
|
+//事件
|
|
|
|
+const emit = defineEmits(['close'])
|
|
|
|
+//双向绑定
|
|
|
|
+// eslint-disable-next-line no-undef
|
|
|
|
+const isShow = defineModel('modelValue', {
|
|
|
|
+ default: false,
|
|
|
|
+})
|
|
|
|
+const store = useAppStore()
|
|
|
|
+const userInfo = ref(store.getUserInfo)
|
|
watch(
|
|
watch(
|
|
() => store.getUserInfo,
|
|
() => store.getUserInfo,
|
|
(info) => {
|
|
(info) => {
|
|
- userInfo.value = info;
|
|
|
|
|
|
+ userInfo.value = info
|
|
},
|
|
},
|
|
- { immediate: true, deep: true }
|
|
|
|
-);
|
|
|
|
-const projectId = ref(props.projectId);
|
|
|
|
-const wbsId = ref(props.wbsId);
|
|
|
|
-const wbsType = ref(props.wbsType);
|
|
|
|
-const dataInfo = ref(props.data);
|
|
|
|
-const type = ref(props.type);
|
|
|
|
|
|
+ { immediate: true, deep: true },
|
|
|
|
+)
|
|
|
|
+const projectId = ref(props.projectId)
|
|
|
|
+const wbsId = ref(props.wbsId)
|
|
|
|
+const wbsType = ref(props.wbsType)
|
|
|
|
+const dataInfo = ref(props.data)
|
|
|
|
+const type = ref(props.type)
|
|
//监听数据
|
|
//监听数据
|
|
watch(
|
|
watch(
|
|
() => [props.projectId, props.wbsId, props.wbsType, props.data, props.type],
|
|
() => [props.projectId, props.wbsId, props.wbsType, props.data, props.type],
|
|
([pid, wid, wtype, info, tpe]) => {
|
|
([pid, wid, wtype, info, tpe]) => {
|
|
- projectId.value = pid;
|
|
|
|
- wbsId.value = wid;
|
|
|
|
- wbsType.value = wtype;
|
|
|
|
- dataInfo.value = info;
|
|
|
|
- type.value = tpe;
|
|
|
|
|
|
+ projectId.value = pid
|
|
|
|
+ wbsId.value = wid
|
|
|
|
+ wbsType.value = wtype
|
|
|
|
+ dataInfo.value = info
|
|
|
|
+ type.value = tpe
|
|
},
|
|
},
|
|
- { deep: true }
|
|
|
|
-);
|
|
|
|
|
|
+ { deep: true },
|
|
|
|
+)
|
|
//监听显示
|
|
//监听显示
|
|
watch(isShow, (val) => {
|
|
watch(isShow, (val) => {
|
|
- selectData.value = [];
|
|
|
|
|
|
+ selectData.value = []
|
|
if (val) {
|
|
if (val) {
|
|
if (type.value === 1) {
|
|
if (type.value === 1) {
|
|
- getLinekNodeTreelistData();
|
|
|
|
|
|
+ getLinekNodeTreelistData()
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- emit("close");
|
|
|
|
|
|
+ emit('close')
|
|
}
|
|
}
|
|
-});
|
|
|
|
|
|
+})
|
|
//获取关联的节点
|
|
//获取关联的节点
|
|
-const checkedLinkNodesKeys = ref([]);
|
|
|
|
|
|
+const checkedLinkNodesKeys = ref([])
|
|
const getLinekNodeTreelistData = async () => {
|
|
const getLinekNodeTreelistData = async () => {
|
|
const { data } = await privateApi.LinekNodeTreelist({
|
|
const { data } = await privateApi.LinekNodeTreelist({
|
|
pkeyid: dataInfo.value.pkeyId,
|
|
pkeyid: dataInfo.value.pkeyId,
|
|
- });
|
|
|
|
- checkedLinkNodesKeys.value = getArrValue(data);
|
|
|
|
-};
|
|
|
|
|
|
+ })
|
|
|
|
+ checkedLinkNodesKeys.value = getArrValue(data)
|
|
|
|
+}
|
|
//关闭弹窗
|
|
//关闭弹窗
|
|
const dialogClose = () => {
|
|
const dialogClose = () => {
|
|
- selectData.value = [];
|
|
|
|
- isShow.value = false;
|
|
|
|
- emit("close");
|
|
|
|
-};
|
|
|
|
|
|
+ selectData.value = []
|
|
|
|
+ isShow.value = false
|
|
|
|
+ emit('close')
|
|
|
|
+}
|
|
//树
|
|
//树
|
|
const treeProps = {
|
|
const treeProps = {
|
|
- label: "title",
|
|
|
|
|
|
+ label: 'title',
|
|
isLeaf: (item) => {
|
|
isLeaf: (item) => {
|
|
- return !item.hasChildren;
|
|
|
|
|
|
+ return !item.hasChildren
|
|
},
|
|
},
|
|
-};
|
|
|
|
|
|
+}
|
|
|
|
|
|
//懒加载树
|
|
//懒加载树
|
|
-const treeLoading = ref(false);
|
|
|
|
|
|
+const treeLoading = ref(false)
|
|
const treeLoad = async (node, resolve) => {
|
|
const treeLoad = async (node, resolve) => {
|
|
- const { tenant_id } = getObjValue(userInfo.value);
|
|
|
|
- treeLoading.value = true;
|
|
|
|
- const parentId = node.level === 0 ? 0 : node.data.id;
|
|
|
|
|
|
+ const { tenant_id } = getObjValue(userInfo.value)
|
|
|
|
+ treeLoading.value = true
|
|
|
|
+ const parentId = node.level === 0 ? 0 : node.data.id
|
|
|
|
|
|
const { data } = await privateApi.getLazytree({
|
|
const { data } = await privateApi.getLazytree({
|
|
parentId: parentId,
|
|
parentId: parentId,
|
|
@@ -147,53 +147,53 @@ const treeLoad = async (node, resolve) => {
|
|
tenantId: tenant_id,
|
|
tenantId: tenant_id,
|
|
projectId: projectId.value,
|
|
projectId: projectId.value,
|
|
wbsType: wbsType.value,
|
|
wbsType: wbsType.value,
|
|
- });
|
|
|
|
- treeLoading.value = false;
|
|
|
|
- resolve(getArrValue(data));
|
|
|
|
-};
|
|
|
|
|
|
+ })
|
|
|
|
+ treeLoading.value = false
|
|
|
|
+ resolve(getArrValue(data))
|
|
|
|
+}
|
|
|
|
|
|
//树节点被点击
|
|
//树节点被点击
|
|
|
|
|
|
-const treeClick = ({ id, type, nodeName }) => {};
|
|
|
|
-const selectData = ref([]);
|
|
|
|
|
|
+const treeClick = ({ id, type, nodeName }) => {}
|
|
|
|
+const selectData = ref([])
|
|
const handleCheckChange = (isCheck, data) => {
|
|
const handleCheckChange = (isCheck, data) => {
|
|
if (isCheck) {
|
|
if (isCheck) {
|
|
- selectData.value.push(data);
|
|
|
|
|
|
+ selectData.value.push(data)
|
|
} else {
|
|
} else {
|
|
- const index = selectData.value.indexOf(data);
|
|
|
|
|
|
+ const index = selectData.value.indexOf(data)
|
|
if (index !== -1) {
|
|
if (index !== -1) {
|
|
- selectData.value.splice(index, 1);
|
|
|
|
|
|
+ selectData.value.splice(index, 1)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-};
|
|
|
|
-const submitLoading = ref(false);
|
|
|
|
|
|
+}
|
|
|
|
+const submitLoading = ref(false)
|
|
const submitClick = async () => {
|
|
const submitClick = async () => {
|
|
- const nodesIdArray = selectData.value.map((obj) => obj.primaryKeyId);
|
|
|
|
- const commaSeparatedIds = nodesIdArray.join(","); // 使用逗号连接数组中的所有元素
|
|
|
|
|
|
+ const nodesIdArray = selectData.value.map((obj) => obj.primaryKeyId)
|
|
|
|
+ const commaSeparatedIds = nodesIdArray.join(',') // 使用逗号连接数组中的所有元素
|
|
|
|
|
|
if (type.value === 1) {
|
|
if (type.value === 1) {
|
|
- submitLoading.value = true;
|
|
|
|
|
|
+ submitLoading.value = true
|
|
const { code, error, msg } = await privateApi.LinekNodeTree({
|
|
const { code, error, msg } = await privateApi.LinekNodeTree({
|
|
nodeids: commaSeparatedIds,
|
|
nodeids: commaSeparatedIds,
|
|
pkeyid: dataInfo.value.id,
|
|
pkeyid: dataInfo.value.id,
|
|
- });
|
|
|
|
- submitLoading.value = false;
|
|
|
|
|
|
+ })
|
|
|
|
+ submitLoading.value = false
|
|
if (!error && code === 200) {
|
|
if (!error && code === 200) {
|
|
- window.$message.success(msg);
|
|
|
|
- dialogClose();
|
|
|
|
|
|
+ window.$message.success(msg)
|
|
|
|
+ dialogClose()
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- submitLoading.value = true;
|
|
|
|
|
|
+ submitLoading.value = true
|
|
const { code, error, msg } = await privateApi.syncFormToContractNode({
|
|
const { code, error, msg } = await privateApi.syncFormToContractNode({
|
|
nodeIds: commaSeparatedIds,
|
|
nodeIds: commaSeparatedIds,
|
|
projectId: projectId.value,
|
|
projectId: projectId.value,
|
|
primaryKeyId: dataInfo.value.id,
|
|
primaryKeyId: dataInfo.value.id,
|
|
- });
|
|
|
|
- submitLoading.value = false;
|
|
|
|
|
|
+ })
|
|
|
|
+ submitLoading.value = false
|
|
if (!error && code === 200) {
|
|
if (!error && code === 200) {
|
|
- window.$message.success(msg);
|
|
|
|
- dialogClose();
|
|
|
|
|
|
+ window.$message.success(msg)
|
|
|
|
+ dialogClose()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-};
|
|
|
|
|
|
+}
|
|
</script>
|
|
</script>
|