|
@@ -5,54 +5,56 @@
|
|
|
is-close
|
|
|
@close="drawerClose"
|
|
|
>
|
|
|
- <hc-body split>
|
|
|
+ <hc-body split :options="splitOptions">
|
|
|
<template #left>
|
|
|
- <hc-card scrollbar>
|
|
|
- <template #header>
|
|
|
- <hc-search-input
|
|
|
- v-model="searchTreeName"
|
|
|
- placeholder="请输入关键字"
|
|
|
- @search="searchTreeNameClick"
|
|
|
- />
|
|
|
- </template>
|
|
|
- <template v-if="isTreeMode === 1">
|
|
|
- <hc-lazy-tree
|
|
|
- v-if="isShow"
|
|
|
- ref="treeRef1"
|
|
|
- is-load-menu
|
|
|
- :h-props="treeProps"
|
|
|
- tree-key="id"
|
|
|
- @load-menu="treeMenu"
|
|
|
- @load="treeLoadNode"
|
|
|
- @node-tap="treeNodeTap"
|
|
|
- @menu-tap="treeMenuClick"
|
|
|
- >
|
|
|
- <template #name="{ data }">
|
|
|
- <span class="text-16px font-400">{{
|
|
|
- data.title
|
|
|
- }}</span>
|
|
|
- </template>
|
|
|
- </hc-lazy-tree>
|
|
|
- </template>
|
|
|
- <template v-if="isTreeMode === 2">
|
|
|
- <hc-data-tree
|
|
|
- ref="treeRef2"
|
|
|
- is-load-menu
|
|
|
- :h-props="treeProps"
|
|
|
- tree-key="id"
|
|
|
- :datas="treeData"
|
|
|
- @load-menu="treeMenu"
|
|
|
- @node-tap="treeNodeTap"
|
|
|
- @menu-tap="treeMenuClick"
|
|
|
- >
|
|
|
- <template #name="{ data }">
|
|
|
- <span class="text-16px font-400">{{
|
|
|
- data.title
|
|
|
- }}</span>
|
|
|
- </template>
|
|
|
- </hc-data-tree>
|
|
|
- </template>
|
|
|
- </hc-card>
|
|
|
+ <hc-tab-card :tabs="tabsData1" :tab-key="tabsKey1">
|
|
|
+ <hc-card scrollbar>
|
|
|
+ <template #header>
|
|
|
+ <hc-search-input
|
|
|
+ v-model="searchTreeName"
|
|
|
+ placeholder="请输入关键字"
|
|
|
+ @search="searchTreeNameClick"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ <template v-if="isTreeMode === 1">
|
|
|
+ <hc-lazy-tree
|
|
|
+ v-if="isShow"
|
|
|
+ ref="treeRef1"
|
|
|
+ is-load-menu
|
|
|
+ :h-props="treeProps"
|
|
|
+ tree-key="id"
|
|
|
+ @load-menu="treeMenu"
|
|
|
+ @load="treeLoadNode"
|
|
|
+ @node-tap="treeNodeTap"
|
|
|
+ @menu-tap="treeMenuClick"
|
|
|
+ >
|
|
|
+ <template #name="{ data }">
|
|
|
+ <span class="text-16px font-400">{{
|
|
|
+ data.title
|
|
|
+ }}</span>
|
|
|
+ </template>
|
|
|
+ </hc-lazy-tree>
|
|
|
+ </template>
|
|
|
+ <template v-if="isTreeMode === 2">
|
|
|
+ <hc-data-tree
|
|
|
+ ref="treeRef2"
|
|
|
+ is-load-menu
|
|
|
+ :h-props="treeProps"
|
|
|
+ tree-key="id"
|
|
|
+ :datas="treeData"
|
|
|
+ @load-menu="treeMenu"
|
|
|
+ @node-tap="treeNodeTap"
|
|
|
+ @menu-tap="treeMenuClick"
|
|
|
+ >
|
|
|
+ <template #name="{ data }">
|
|
|
+ <span class="text-16px font-400">{{
|
|
|
+ data.title
|
|
|
+ }}</span>
|
|
|
+ </template>
|
|
|
+ </hc-data-tree>
|
|
|
+ </template>
|
|
|
+ </hc-card>
|
|
|
+ </hc-tab-card>
|
|
|
</template>
|
|
|
<hc-tab-card
|
|
|
:tabs="tabsData"
|
|
@@ -61,15 +63,15 @@
|
|
|
>
|
|
|
<template v-if="tabsKey === 'second'">
|
|
|
<div class="hc-flex mb-10px">
|
|
|
- <el-button type="primary" plain @click="setClick(1)"
|
|
|
- >设置为最高并卷层级</el-button
|
|
|
- >
|
|
|
- <el-button type="primary" plain @click="setClick(2)"
|
|
|
- >设置为分类卷并卷</el-button
|
|
|
- >
|
|
|
- <el-button type="primary" plain @click="setClick(3)"
|
|
|
- >设置为独立组卷</el-button
|
|
|
- >
|
|
|
+ <el-button type="primary" plain @click="setClick(1)">
|
|
|
+ 设置为最高并卷层级
|
|
|
+ </el-button>
|
|
|
+ <el-button type="primary" plain @click="setClick(2)">
|
|
|
+ 设置为分类卷并卷
|
|
|
+ </el-button>
|
|
|
+ <el-button type="primary" plain @click="setClick(3)">
|
|
|
+ 设置为独立组卷
|
|
|
+ </el-button>
|
|
|
</div>
|
|
|
<div class="hc-tab-scroll-class-second">
|
|
|
<el-scrollbar v-loading="secondTreeLoad">
|
|
@@ -89,14 +91,14 @@
|
|
|
<template
|
|
|
v-if="
|
|
|
Number(
|
|
|
- data.archiveAutoGroupSelect
|
|
|
+ data.archiveAutoGroupSelect,
|
|
|
) === 1
|
|
|
"
|
|
|
>
|
|
|
<div
|
|
|
v-if="
|
|
|
- Number(data.archiveAutoType) ===
|
|
|
- 1
|
|
|
+ Number(data.archiveAutoType)
|
|
|
+ === 1
|
|
|
"
|
|
|
class="config_type"
|
|
|
>
|
|
@@ -104,8 +106,8 @@
|
|
|
</div>
|
|
|
<div
|
|
|
v-if="
|
|
|
- Number(data.archiveAutoType) ===
|
|
|
- 2
|
|
|
+ Number(data.archiveAutoType)
|
|
|
+ === 2
|
|
|
"
|
|
|
class="config_type"
|
|
|
>
|
|
@@ -113,8 +115,8 @@
|
|
|
</div>
|
|
|
<div
|
|
|
v-if="
|
|
|
- Number(data.archiveAutoType) ===
|
|
|
- 3
|
|
|
+ Number(data.archiveAutoType)
|
|
|
+ === 3
|
|
|
"
|
|
|
class="config_type"
|
|
|
>
|
|
@@ -131,10 +133,10 @@
|
|
|
</template>
|
|
|
<template v-if="tabsKey === 'first'">
|
|
|
<entryConfig
|
|
|
- :rightData="secondTreeData"
|
|
|
- :projectId="dataInfo.id"
|
|
|
- :tabKey="tabsKey"
|
|
|
- ></entryConfig>
|
|
|
+ :right-data="secondTreeData"
|
|
|
+ :project-id="dataInfo.id"
|
|
|
+ :tab-key="tabsKey"
|
|
|
+ />
|
|
|
</template>
|
|
|
</hc-tab-card>
|
|
|
</hc-body>
|
|
@@ -169,19 +171,19 @@
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
<hc-data-tree
|
|
|
+ ref="configtree"
|
|
|
:datas="configInfo.data"
|
|
|
tree-key="id"
|
|
|
:h-props="configTreeProps"
|
|
|
show-checkbox
|
|
|
:check-strictly="true"
|
|
|
:default-checked-keys="checkedKeys"
|
|
|
- :autoExpandKeys="checkedKeys"
|
|
|
- ref="configtree"
|
|
|
+ :auto-expand-keys="checkedKeys"
|
|
|
@check="configCheckChange"
|
|
|
- ></hc-data-tree>
|
|
|
+ />
|
|
|
</template>
|
|
|
</div>
|
|
|
- <div style="text-align: center; font-size: 22px" v-else>
|
|
|
+ <div v-else style="text-align: center; font-size: 22px">
|
|
|
该节点尚未配置
|
|
|
</div>
|
|
|
|
|
@@ -191,14 +193,15 @@
|
|
|
v-if="configInfo && configInfo.type == 2"
|
|
|
type="primary"
|
|
|
@click="changeConfig"
|
|
|
- >确认修改配置</el-button
|
|
|
>
|
|
|
+ 确认修改配置
|
|
|
+ </el-button>
|
|
|
</template>
|
|
|
</hc-dialog>
|
|
|
<!-- 设置最高层级 -->
|
|
|
<hc-dialog
|
|
|
- :title="titleName"
|
|
|
v-model="highVisible"
|
|
|
+ :title="titleName"
|
|
|
@save="setRecordsHandle"
|
|
|
@close="highVisible = false"
|
|
|
>
|
|
@@ -208,7 +211,7 @@
|
|
|
:label="node.pathName"
|
|
|
:value="node.id"
|
|
|
style="margin-bottom: 10px"
|
|
|
- ></el-checkbox>
|
|
|
+ />
|
|
|
</div>
|
|
|
</el-checkbox-group>
|
|
|
</hc-dialog>
|
|
@@ -216,251 +219,258 @@
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import { ref, watch } from "vue";
|
|
|
-import { HcDelMsg, HcFirmMsg } from "hc-vue3-ui";
|
|
|
-import { getArrValue, isNullES } from "js-fast-way";
|
|
|
-import HcTreeNodeForm from "./tree-form.vue";
|
|
|
-import HcTreeNodeSort from "./tree-sort.vue";
|
|
|
-import mainApi from "~api/project/tree";
|
|
|
-import archiveApi from "~api/desk/archive-tree";
|
|
|
-import entryConfig from "../../desk/wbs/entry-config.vue";
|
|
|
+import { ref, watch } from 'vue'
|
|
|
+import { HcDelMsg, HcFirmMsg } from 'hc-vue3-ui'
|
|
|
+import { getArrValue, isNullES } from 'js-fast-way'
|
|
|
+import HcTreeNodeForm from './tree-form.vue'
|
|
|
+import HcTreeNodeSort from './tree-sort.vue'
|
|
|
+import mainApi from '~api/project/tree'
|
|
|
+import archiveApi from '~api/desk/archive-tree'
|
|
|
+import entryConfig from '../../desk/wbs/entry-config.vue'
|
|
|
const props = defineProps({
|
|
|
data: {
|
|
|
type: Object,
|
|
|
default: () => ({}),
|
|
|
},
|
|
|
-});
|
|
|
+})
|
|
|
|
|
|
//事件
|
|
|
-const emit = defineEmits(["close"]);
|
|
|
+const emit = defineEmits(['close'])
|
|
|
|
|
|
//双向绑定
|
|
|
-const isShow = defineModel("modelValue", {
|
|
|
+const isShow = defineModel('modelValue', {
|
|
|
default: false,
|
|
|
-});
|
|
|
+})
|
|
|
|
|
|
//监听数据
|
|
|
-const dataInfo = ref(props.data);
|
|
|
+const dataInfo = ref(props.data)
|
|
|
watch(
|
|
|
() => props.data,
|
|
|
(data) => {
|
|
|
- dataInfo.value = data;
|
|
|
+ dataInfo.value = data
|
|
|
},
|
|
|
- { immediate: true, deep: true }
|
|
|
-);
|
|
|
+ { immediate: true, deep: true },
|
|
|
+)
|
|
|
|
|
|
//监听显示
|
|
|
watch(isShow, (val) => {
|
|
|
- if (val) getDataApi();
|
|
|
-});
|
|
|
+ if (val) getDataApi()
|
|
|
+})
|
|
|
|
|
|
//处理相关数据
|
|
|
const getDataApi = () => {
|
|
|
- getTreeAllData();
|
|
|
- getSecondTreeData();
|
|
|
-};
|
|
|
+ getTreeAllData()
|
|
|
+ getSecondTreeData()
|
|
|
+}
|
|
|
|
|
|
//树搜索
|
|
|
-const isTreeMode = ref(1); //1懒加载,2全加载
|
|
|
-const searchTreeName = ref("");
|
|
|
+const isTreeMode = ref(1) //1懒加载,2全加载
|
|
|
+const searchTreeName = ref('')
|
|
|
const searchTreeNameClick = async () => {
|
|
|
if (isNullES(searchTreeName.value)) {
|
|
|
- isTreeMode.value = 1;
|
|
|
+ isTreeMode.value = 1
|
|
|
} else {
|
|
|
- isTreeMode.value = 2;
|
|
|
- await getTreeAllData();
|
|
|
- treeRef2.value?.treeRef?.filter(searchTreeName.value);
|
|
|
+ isTreeMode.value = 2
|
|
|
+ await getTreeAllData()
|
|
|
+ treeRef2.value?.treeRef?.filter(searchTreeName.value)
|
|
|
}
|
|
|
-};
|
|
|
+}
|
|
|
|
|
|
//树配置
|
|
|
-const treeRef1 = ref(null);
|
|
|
-const treeRef2 = ref(null);
|
|
|
+const treeRef1 = ref(null)
|
|
|
+const treeRef2 = ref(null)
|
|
|
const treeProps = {
|
|
|
- label: "title",
|
|
|
- children: "children",
|
|
|
- isLeaf: "hasChildren",
|
|
|
-};
|
|
|
+ label: 'title',
|
|
|
+ children: 'children',
|
|
|
+ isLeaf: 'hasChildren',
|
|
|
+}
|
|
|
|
|
|
//懒加载树的菜单
|
|
|
const treeMenu = ({ level }, resolve) => {
|
|
|
- let newMenu = [];
|
|
|
+ let newMenu = []
|
|
|
if (level !== 1) {
|
|
|
- newMenu.push({ icon: "add-circle", label: "新增", key: "add" });
|
|
|
- newMenu.push({ icon: "draft", label: "编辑", key: "edit" });
|
|
|
- newMenu.push({ icon: "arrow-up-down", label: "排序", key: "rank" });
|
|
|
- newMenu.push({ icon: "delete-bin", label: "删除", key: "del" });
|
|
|
+ newMenu.push({ icon: 'add-circle', label: '新增', key: 'add' })
|
|
|
+ newMenu.push({ icon: 'draft', label: '编辑', key: 'edit' })
|
|
|
+ newMenu.push({ icon: 'arrow-up-down', label: '排序', key: 'rank' })
|
|
|
+ newMenu.push({ icon: 'delete-bin', label: '删除', key: 'del' })
|
|
|
}
|
|
|
- newMenu.push({ icon: "refresh", label: "同步", key: "sync" });
|
|
|
- resolve(newMenu);
|
|
|
-};
|
|
|
+ newMenu.push({ icon: 'refresh', label: '同步', key: 'sync' })
|
|
|
+ resolve(newMenu)
|
|
|
+}
|
|
|
|
|
|
//菜单被点击
|
|
|
const treeMenuClick = ({ key, data, node }) => {
|
|
|
- if (key === "add") {
|
|
|
+ if (key === 'add') {
|
|
|
if (Number(data.isStorageNode) !== 1) {
|
|
|
- treeFormType.value = "新增";
|
|
|
- treeFormData.value = data;
|
|
|
- treeFormNode.value = node;
|
|
|
- isTreeFormShow.value = true;
|
|
|
+ treeFormType.value = '新增'
|
|
|
+ treeFormData.value = data
|
|
|
+ treeFormNode.value = node
|
|
|
+ isTreeFormShow.value = true
|
|
|
} else {
|
|
|
- window.$message.warning("该节点下不允许新增节点");
|
|
|
+ window.$message.warning('该节点下不允许新增节点')
|
|
|
}
|
|
|
- } else if (key === "edit") {
|
|
|
- treeFormType.value = "编辑";
|
|
|
- treeFormData.value = data;
|
|
|
- treeFormNode.value = node;
|
|
|
- isTreeFormShow.value = true;
|
|
|
- } else if (key === "rank") {
|
|
|
- treeSortData.value = data;
|
|
|
- isTreeSortShow.value = true;
|
|
|
- } else if (key === "del") {
|
|
|
- delTreeNode(data.id);
|
|
|
- } else if (key === "sync") {
|
|
|
- syncTreeNode(data.id);
|
|
|
+ } else if (key === 'edit') {
|
|
|
+ treeFormType.value = '编辑'
|
|
|
+ treeFormData.value = data
|
|
|
+ treeFormNode.value = node
|
|
|
+ isTreeFormShow.value = true
|
|
|
+ } else if (key === 'rank') {
|
|
|
+ treeSortData.value = data
|
|
|
+ isTreeSortShow.value = true
|
|
|
+ } else if (key === 'del') {
|
|
|
+ delTreeNode(data.id)
|
|
|
+ } else if (key === 'sync') {
|
|
|
+ syncTreeNode(data.id)
|
|
|
}
|
|
|
-};
|
|
|
+}
|
|
|
|
|
|
//树节点新增/编辑
|
|
|
-const isTreeFormShow = ref(false);
|
|
|
-const treeFormData = ref({});
|
|
|
-const treeFormNode = ref({});
|
|
|
-const treeFormType = ref("新增");
|
|
|
+const isTreeFormShow = ref(false)
|
|
|
+const treeFormData = ref({})
|
|
|
+const treeFormNode = ref({})
|
|
|
+const treeFormType = ref('新增')
|
|
|
|
|
|
//树节点排序
|
|
|
-const isTreeSortShow = ref(false);
|
|
|
-const treeSortData = ref({});
|
|
|
+const isTreeSortShow = ref(false)
|
|
|
+const treeSortData = ref({})
|
|
|
|
|
|
//删除树节点
|
|
|
const delTreeNode = (id) => {
|
|
|
HcDelMsg(async (resolve) => {
|
|
|
- const { isRes } = await mainApi.removeTree(id);
|
|
|
- if (!isRes) return;
|
|
|
- window.$message.success("删除成功");
|
|
|
- resolve(); //关闭弹窗的回调
|
|
|
- pseudoRefresh();
|
|
|
- });
|
|
|
-};
|
|
|
+ const { isRes } = await mainApi.removeTree(id)
|
|
|
+ if (!isRes) return
|
|
|
+ window.$message.success('删除成功')
|
|
|
+ resolve() //关闭弹窗的回调
|
|
|
+ pseudoRefresh()
|
|
|
+ })
|
|
|
+}
|
|
|
|
|
|
//同步树节点
|
|
|
const syncTreeNode = (id) => {
|
|
|
- HcFirmMsg({ text: "是否同步该节点?" }, async (resolve) => {
|
|
|
- const { isRes } = await mainApi.syncProjectTree({ id });
|
|
|
- resolve(); //关闭弹窗的回调
|
|
|
- if (!isRes) return;
|
|
|
- window.$message.success("操作成功");
|
|
|
- pseudoRefresh();
|
|
|
- });
|
|
|
-};
|
|
|
+ HcFirmMsg({ text: '是否同步该节点?' }, async (resolve) => {
|
|
|
+ const { isRes } = await mainApi.syncProjectTree({ id })
|
|
|
+ resolve() //关闭弹窗的回调
|
|
|
+ if (!isRes) return
|
|
|
+ window.$message.success('操作成功')
|
|
|
+ pseudoRefresh()
|
|
|
+ })
|
|
|
+}
|
|
|
|
|
|
//伪刷新
|
|
|
const pseudoRefresh = () => {
|
|
|
- const val = isTreeMode.value;
|
|
|
- isTreeMode.value = 4;
|
|
|
- treeFormData.value = {};
|
|
|
- treeFormNode.value = {};
|
|
|
- treeFormType.value = "";
|
|
|
- treeSortData.value = {};
|
|
|
+ const val = isTreeMode.value
|
|
|
+ isTreeMode.value = 4
|
|
|
+ treeFormData.value = {}
|
|
|
+ treeFormNode.value = {}
|
|
|
+ treeFormType.value = ''
|
|
|
+ treeSortData.value = {}
|
|
|
setTimeout(() => {
|
|
|
- isTreeMode.value = val;
|
|
|
- }, 300);
|
|
|
-};
|
|
|
+ isTreeMode.value = val
|
|
|
+ }, 300)
|
|
|
+}
|
|
|
|
|
|
//全加载树
|
|
|
-const treeData = ref([]);
|
|
|
+const treeData = ref([])
|
|
|
const getTreeAllData = async () => {
|
|
|
const { data } = await mainApi.allTree({
|
|
|
projectId: dataInfo.value.id,
|
|
|
- });
|
|
|
- treeData.value = getArrValue(data);
|
|
|
-};
|
|
|
+ })
|
|
|
+ treeData.value = getArrValue(data)
|
|
|
+}
|
|
|
|
|
|
//立卷规则树
|
|
|
const getSecondTreeData = async () => {
|
|
|
- secondTreeLoad.value = true;
|
|
|
+ secondTreeLoad.value = true
|
|
|
const { data } = await mainApi.allTree({
|
|
|
projectId: dataInfo.value.id,
|
|
|
- });
|
|
|
- secondTreeLoad.value = false;
|
|
|
- secondTreeData.value = getArrValue(data);
|
|
|
-};
|
|
|
+ })
|
|
|
+ secondTreeLoad.value = false
|
|
|
+ secondTreeData.value = getArrValue(data)
|
|
|
+}
|
|
|
|
|
|
//懒加载树
|
|
|
const treeLoadNode = async ({ item, level }, resolve) => {
|
|
|
- const parentId = level === 0 ? 0 : item.id;
|
|
|
+ const parentId = level === 0 ? 0 : item.id
|
|
|
if (level === 0) {
|
|
|
- const arr = await lazyNodeTree(parentId);
|
|
|
+ const arr = await lazyNodeTree(parentId)
|
|
|
if (arr.length) {
|
|
|
- resolve(arr);
|
|
|
+ resolve(arr)
|
|
|
} else {
|
|
|
- resolve(await archiveTreeInit());
|
|
|
+ resolve(await archiveTreeInit())
|
|
|
}
|
|
|
} else {
|
|
|
- resolve(await lazyNodeTree(parentId));
|
|
|
+ resolve(await lazyNodeTree(parentId))
|
|
|
}
|
|
|
-};
|
|
|
+}
|
|
|
|
|
|
//懒加载树接口
|
|
|
const lazyNodeTree = async (id) => {
|
|
|
const { data } = await mainApi.lazyTree({
|
|
|
parentId: id,
|
|
|
projectId: dataInfo.value.id,
|
|
|
- });
|
|
|
- const res = getArrValue(data);
|
|
|
+ })
|
|
|
+ const res = getArrValue(data)
|
|
|
for (let i = 0; i < res.length; i++) {
|
|
|
- res[i].hasChildren = !res[i].hasChildren;
|
|
|
+ res[i].hasChildren = !res[i].hasChildren
|
|
|
}
|
|
|
- return res;
|
|
|
-};
|
|
|
+ return res
|
|
|
+}
|
|
|
|
|
|
//初始化根节点
|
|
|
const archiveTreeInit = async () => {
|
|
|
const { data } = await mainApi.treeInit({
|
|
|
projectId: dataInfo.value.id,
|
|
|
- });
|
|
|
- const res = getArrValue(data);
|
|
|
+ })
|
|
|
+ const res = getArrValue(data)
|
|
|
for (let i = 0; i < res.length; i++) {
|
|
|
- res[i].hasChildren = !res[i].hasChildren;
|
|
|
+ res[i].hasChildren = !res[i].hasChildren
|
|
|
}
|
|
|
- return res;
|
|
|
-};
|
|
|
+ return res
|
|
|
+}
|
|
|
|
|
|
//树节点被点击
|
|
|
-const nodeInfo = ref({});
|
|
|
+const nodeInfo = ref({})
|
|
|
const treeNodeTap = ({ data }) => {
|
|
|
- nodeInfo.value = data;
|
|
|
-};
|
|
|
-
|
|
|
+ nodeInfo.value = data
|
|
|
+}
|
|
|
+//页面分割
|
|
|
+const splitOptions = { sizes: [50, 50], snapOffset: 0, minSize: [300, 300] }
|
|
|
+//左边选项卡
|
|
|
+const tabsKey1 = ref('1')
|
|
|
+const tabsData1 = ref([
|
|
|
+{ key: '1', name: '竣工档案目录' },
|
|
|
+{ key: '2', name: '文书档案目录' },
|
|
|
+])
|
|
|
//右边选项卡
|
|
|
-const tabsKey = ref("second");
|
|
|
+const tabsKey = ref('second')
|
|
|
const tabsData = ref([
|
|
|
- { key: "second", name: "立卷规则" },
|
|
|
- { key: "first", name: "工程文件入口配置" },
|
|
|
-]);
|
|
|
+ { key: 'second', name: '立卷规则' },
|
|
|
+ { key: 'first', name: '工程文件入口配置' },
|
|
|
+])
|
|
|
const tabsChange = ({ key }) => {
|
|
|
- tabsKey.value = key;
|
|
|
- getSecondTreeData();
|
|
|
-};
|
|
|
+ tabsKey.value = key
|
|
|
+ getSecondTreeData()
|
|
|
+}
|
|
|
|
|
|
//立卷规则树
|
|
|
-const secondTreeLoad = ref(false);
|
|
|
-const secondTree = ref(null);
|
|
|
-const secondTreeData = ref([]);
|
|
|
+const secondTreeLoad = ref(false)
|
|
|
+const secondTree = ref(null)
|
|
|
+const secondTreeData = ref([])
|
|
|
const secondTreeProps = {
|
|
|
- label: "title",
|
|
|
-};
|
|
|
+ label: 'title',
|
|
|
+}
|
|
|
|
|
|
//立卷规则树右键菜单
|
|
|
const secondTreeMenu = (_, resolve) => {
|
|
|
resolve([
|
|
|
- { icon: "eye", label: "查看配置", key: "rank" },
|
|
|
- { icon: "delete-bin", label: "删除", key: "del" },
|
|
|
- ]);
|
|
|
-};
|
|
|
+ { icon: 'eye', label: '查看配置', key: 'rank' },
|
|
|
+ { icon: 'delete-bin', label: '删除', key: 'del' },
|
|
|
+ ])
|
|
|
+}
|
|
|
|
|
|
const secondTreeMenuClick = async ({ key, data, node }) => {
|
|
|
- if (key === "rank") {
|
|
|
- configInfo.value = null;
|
|
|
+ if (key === 'rank') {
|
|
|
+ configInfo.value = null
|
|
|
const {
|
|
|
data: res,
|
|
|
code,
|
|
@@ -470,165 +480,165 @@ const secondTreeMenuClick = async ({ key, data, node }) => {
|
|
|
iswbsNode: data.iswbsNode, //是否是wbs节点
|
|
|
projectId: dataInfo.value.id, // 系统级为0 项目级为项目id
|
|
|
wbsNode2ArchiveTreeNodeId: data.wbsNode2ArchiveTreeNodeId, // 这个树节点里面有(iswbsNode为true需传)
|
|
|
- });
|
|
|
- console.log(res, "res");
|
|
|
+ })
|
|
|
+ console.log(res, 'res')
|
|
|
|
|
|
- if (code == 200 && msg == "操作成功") {
|
|
|
+ if (code == 200 && msg == '操作成功') {
|
|
|
if (res.type) {
|
|
|
- configInfo.value = res;
|
|
|
+ configInfo.value = res
|
|
|
} else if (res.archiveAutoType) {
|
|
|
configInfo.value = {
|
|
|
type: 2,
|
|
|
data: res.tree,
|
|
|
- };
|
|
|
+ }
|
|
|
|
|
|
- checkedKeys.value = res?.selectNodeIds.split(",");
|
|
|
+ checkedKeys.value = res?.selectNodeIds.split(',')
|
|
|
} else {
|
|
|
- configInfo.value = {};
|
|
|
+ configInfo.value = {}
|
|
|
}
|
|
|
- console.log(configInfo.value, "configInfo.value ");
|
|
|
+ console.log(configInfo.value, 'configInfo.value ')
|
|
|
|
|
|
- configVisible.value = true;
|
|
|
+ configVisible.value = true
|
|
|
}
|
|
|
- } else if (key === "del") {
|
|
|
+ } else if (key === 'del') {
|
|
|
HcDelMsg(async (resolve) => {
|
|
|
const { code } = await archiveApi.removeArchiveAutoRule({
|
|
|
nodeId: data.id,
|
|
|
iswbsNode: data.iswbsNode, //是否是wbs节点 flase 不是 true 是 (先false,具体怎么区分后面再看)
|
|
|
projectId: dataInfo.value.id, // 系统级为0 项目级为项目id
|
|
|
- });
|
|
|
- resolve(); //关闭弹窗的回调
|
|
|
- if (code !== 200) return;
|
|
|
- window.$message.success("删除成功");
|
|
|
- getSecondTreeData();
|
|
|
- }).then();
|
|
|
+ })
|
|
|
+ resolve() //关闭弹窗的回调
|
|
|
+ if (code !== 200) return
|
|
|
+ window.$message.success('删除成功')
|
|
|
+ getSecondTreeData()
|
|
|
+ }).then()
|
|
|
}
|
|
|
-};
|
|
|
+}
|
|
|
|
|
|
//设置为最高并卷层级
|
|
|
//获取树节点名字路径
|
|
|
const getTreeNodePath = (node, refName) => {
|
|
|
- let nodeInfo = secondTree.value.treeRef.getNode(node.id);
|
|
|
- let pathArr = [];
|
|
|
+ let nodeInfo = secondTree.value.treeRef.getNode(node.id)
|
|
|
+ let pathArr = []
|
|
|
while (nodeInfo.parent) {
|
|
|
- pathArr.push(nodeInfo.data.title);
|
|
|
- nodeInfo = nodeInfo.parent;
|
|
|
+ pathArr.push(nodeInfo.data.title)
|
|
|
+ nodeInfo = nodeInfo.parent
|
|
|
}
|
|
|
- return pathArr.reverse().join("/");
|
|
|
-};
|
|
|
+ return pathArr.reverse().join('/')
|
|
|
+}
|
|
|
|
|
|
const setRecordsHandle = async () => {
|
|
|
const { code, msg } = await archiveApi.saveArchiveAutoRule({
|
|
|
archiveAutoType: archiveAutoType.value, //最高1 分类2 独立3
|
|
|
- selectNodeIds: checkList.value.join(","), //鼠标选择的节点ID(只要鼠标选择的节点,选择节点的下级子节点那种不要),逗号拼接
|
|
|
+ selectNodeIds: checkList.value.join(','), //鼠标选择的节点ID(只要鼠标选择的节点,选择节点的下级子节点那种不要),逗号拼接
|
|
|
iswbsNode: nodesList.value[0]?.iswbsNode, //是否是wbs节点
|
|
|
projectId: dataInfo.value.id, // 系统级为0 项目级为项目id
|
|
|
- });
|
|
|
+ })
|
|
|
|
|
|
- if (code == 200 && msg == "操作成功") {
|
|
|
+ if (code == 200 && msg == '操作成功') {
|
|
|
window.$message({
|
|
|
- type: "success",
|
|
|
- message: "设置成功",
|
|
|
- });
|
|
|
+ type: 'success',
|
|
|
+ message: '设置成功',
|
|
|
+ })
|
|
|
|
|
|
- highVisible.value = false;
|
|
|
- getSecondTreeData();
|
|
|
+ highVisible.value = false
|
|
|
+ getSecondTreeData()
|
|
|
}
|
|
|
-};
|
|
|
+}
|
|
|
const setClick = (type) => {
|
|
|
- const treeRef = secondTree.value?.getRef(); //树的原始ref
|
|
|
- const nodes = treeRef.getCheckedNodes(); //获取选中的节点
|
|
|
- console.log(nodes, "nodes");
|
|
|
+ const treeRef = secondTree.value?.getRef() //树的原始ref
|
|
|
+ const nodes = treeRef.getCheckedNodes() //获取选中的节点
|
|
|
+ console.log(nodes, 'nodes')
|
|
|
|
|
|
if (nodes.length < 1) {
|
|
|
window.$message({
|
|
|
- message: "请先勾选节点,再进行设置",
|
|
|
- type: "warning",
|
|
|
- });
|
|
|
- return false;
|
|
|
+ message: '请先勾选节点,再进行设置',
|
|
|
+ type: 'warning',
|
|
|
+ })
|
|
|
+ return false
|
|
|
}
|
|
|
- let ids = [];
|
|
|
+ let ids = []
|
|
|
nodes.forEach((element) => {
|
|
|
- element.pathName = getTreeNodePath(element, "secondTree");
|
|
|
- ids.push(element.id);
|
|
|
- });
|
|
|
- console.log(nodes, "nodes");
|
|
|
- checkList.value = ids;
|
|
|
- nodesList.value = nodes;
|
|
|
- setName(type);
|
|
|
- highVisible.value = true;
|
|
|
-};
|
|
|
-const titleName = ref("");
|
|
|
-const archiveAutoType = ref(1);
|
|
|
-const highVisible = ref(false);
|
|
|
-const checkList = ref([]);
|
|
|
-const nodesList = ref([]);
|
|
|
+ element.pathName = getTreeNodePath(element, 'secondTree')
|
|
|
+ ids.push(element.id)
|
|
|
+ })
|
|
|
+ console.log(nodes, 'nodes')
|
|
|
+ checkList.value = ids
|
|
|
+ nodesList.value = nodes
|
|
|
+ setName(type)
|
|
|
+ highVisible.value = true
|
|
|
+}
|
|
|
+const titleName = ref('')
|
|
|
+const archiveAutoType = ref(1)
|
|
|
+const highVisible = ref(false)
|
|
|
+const checkList = ref([])
|
|
|
+const nodesList = ref([])
|
|
|
const setName = (type) => {
|
|
|
switch (type) {
|
|
|
case 1:
|
|
|
- archiveAutoType.value = 1;
|
|
|
- titleName.value = "设置最高并卷层级";
|
|
|
- break;
|
|
|
+ archiveAutoType.value = 1
|
|
|
+ titleName.value = '设置最高并卷层级'
|
|
|
+ break
|
|
|
case 2:
|
|
|
- archiveAutoType.value = 2;
|
|
|
- titleName.value = "设置分类并卷层级";
|
|
|
- break;
|
|
|
+ archiveAutoType.value = 2
|
|
|
+ titleName.value = '设置分类并卷层级'
|
|
|
+ break
|
|
|
case 3:
|
|
|
- archiveAutoType.value = 3;
|
|
|
- titleName.value = "设置单独并卷层级";
|
|
|
- break;
|
|
|
+ archiveAutoType.value = 3
|
|
|
+ titleName.value = '设置单独并卷层级'
|
|
|
+ break
|
|
|
}
|
|
|
-};
|
|
|
+}
|
|
|
//查看配置
|
|
|
-const configtree = ref(null);
|
|
|
-const configVisible = ref(false);
|
|
|
-const configInfo = ref({});
|
|
|
-const checkedKeys = ref([]);
|
|
|
+const configtree = ref(null)
|
|
|
+const configVisible = ref(false)
|
|
|
+const configInfo = ref({})
|
|
|
+const checkedKeys = ref([])
|
|
|
const configTreeProps = {
|
|
|
- label: "nodeName",
|
|
|
- children: "children",
|
|
|
- isLeaf: "hasChildren",
|
|
|
-};
|
|
|
+ label: 'nodeName',
|
|
|
+ children: 'children',
|
|
|
+ isLeaf: 'hasChildren',
|
|
|
+}
|
|
|
const configCheckChange = (_, { checkedNodes }) => {
|
|
|
- let array = checkedNodes;
|
|
|
+ let array = checkedNodes
|
|
|
for (let index = 1; index < array.length; index++) {
|
|
|
- const element = array[index];
|
|
|
+ const element = array[index]
|
|
|
if (element.iswbsNode !== array[0].iswbsNode) {
|
|
|
//取消勾选
|
|
|
- configtree.value.treeRef.setChecked(data.id, false, false);
|
|
|
+ configtree.value.treeRef.setChecked(data.id, false, false)
|
|
|
window.$message({
|
|
|
- message: "非wbs节点不能和wbs节点一起设置规则",
|
|
|
- type: "warning",
|
|
|
- });
|
|
|
- return;
|
|
|
+ message: '非wbs节点不能和wbs节点一起设置规则',
|
|
|
+ type: 'warning',
|
|
|
+ })
|
|
|
+ return
|
|
|
}
|
|
|
}
|
|
|
-};
|
|
|
+}
|
|
|
const changeConfig = async () => {
|
|
|
- let keys = configtree.value.treeRef.getCheckedKeys();
|
|
|
- let nodes = configtree.value.treeRef.getCheckedNodes();
|
|
|
- console.log(nodes);
|
|
|
+ let keys = configtree.value.treeRef.getCheckedKeys()
|
|
|
+ let nodes = configtree.value.treeRef.getCheckedNodes()
|
|
|
+ console.log(nodes)
|
|
|
const { code, msg } = await archiveApi.updateArchiveAutoRules({
|
|
|
archiveAutoType: 2, //最高1 分类2 独立3
|
|
|
archiveAutoGroupId: configInfo.value.data.archiveAutoGroupId,
|
|
|
- selectNodeIds: keys.join(","), //鼠标选择的节点ID(只要鼠标选择的节点,选择节点的下级子节点那种不要),逗号拼接
|
|
|
+ selectNodeIds: keys.join(','), //鼠标选择的节点ID(只要鼠标选择的节点,选择节点的下级子节点那种不要),逗号拼接
|
|
|
iswbsNode: nodes[0]?.iswbsNode, //是否是wbs节点
|
|
|
projectId: dataInfo.value.id, // 系统级为0 项目级为项目id
|
|
|
- });
|
|
|
+ })
|
|
|
|
|
|
if (code == 200) {
|
|
|
window.$message({
|
|
|
- type: "success",
|
|
|
+ type: 'success',
|
|
|
message: msg,
|
|
|
- });
|
|
|
- configVisible.value = false;
|
|
|
+ })
|
|
|
+ configVisible.value = false
|
|
|
}
|
|
|
-};
|
|
|
+}
|
|
|
//关闭抽屉
|
|
|
const drawerClose = () => {
|
|
|
- isShow.value = false;
|
|
|
- emit("close");
|
|
|
-};
|
|
|
+ isShow.value = false
|
|
|
+ emit('close')
|
|
|
+}
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|