iZaiZaiA 2 жил өмнө
parent
commit
8d498554dc

+ 10 - 3
src/global/components/hc-table/index.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="hc-table-ref-box" :class="ui">
-        <el-table ref="tableRef" hc :data="tableData" height="100%" v-loading="isLoading" stripe :row-key="rowKey" @selection-change="tableSelectionChange"
+        <el-table ref="tableRef" hc :data="tableData" height="100%" v-loading="isLoading" stripe :row-key="rowKey" :border="isBorder" @selection-change="tableSelectionChange"
                   @row-click="tableRowClick" @row-dblclick="tableRowDblClick" @row-contextmenu="tableRowContextmenu"
                   @cell-click="tableCellClick" @cell-dblclick="tableCellDblClick" @cell-contextmenu="tableCellContextmenu">
             <el-table-column type="selection" width="50" v-if="isCheck"/>
@@ -47,6 +47,10 @@ const props = defineProps({
         type: String,
         default: 'id'
     },
+    border: {
+        type: Boolean,
+        default: false
+    },
 })
 
 //初始变量
@@ -54,14 +58,17 @@ const tableRef = ref(null)
 const columns = ref(props.column)
 const tableData = ref(props.datas)
 const isLoading = ref(props.loading)
+const isBorder = ref(props.border)
 
 //监听
 watch(() => [
     props.datas,
-    props.loading
-], ([datas, loading]) => {
+    props.loading,
+    props.border,
+], ([datas, loading, border]) => {
     tableData.value = datas;
     isLoading.value = loading;
+    isBorder.value = border;
 })
 
 //监听表头

+ 6 - 1
src/styles/app/element.scss

@@ -164,7 +164,6 @@
 
 //表格
 .el-table[hc] {
-    border: 1px solid #e9e9e9;
     --el-table-bg-color: initial;
     --el-table-header-bg-color: #DAE8F3;
     --el-table-header-text-color: #50545E;
@@ -191,6 +190,12 @@
             top: 7px;
         }
     }
+    &.el-table--border {
+        --el-table-border-color: #e9e9e9;
+    }
+}
+.el-table[hc]:not([class*='el-table--border']) {
+    border: 1px solid #e9e9e9;
     .el-table__inner-wrapper::before {
         background-color: transparent;
     }

+ 165 - 0
src/styles/data-fill/division.scss

@@ -0,0 +1,165 @@
+.hc-page-content-box.hc-division-page {
+    display: flex;
+    flex-direction: column;
+    .basic-info {
+        position: relative;
+        margin-bottom: 24px;
+    }
+    .project-info {
+        flex: auto;
+        position: relative;
+        margin-bottom: 24px;
+    }
+    .footer-box {
+        position: relative;
+        height: 80px;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        padding: 20px 24px;
+        overflow: hidden;
+        background: #f1f5f8;
+        border-radius: 10px;
+        box-shadow: -2px 0px 10px 0px rgba(32,37,50,0.03), 0px 10px 21px 20px rgba(32,37,50,0.03);
+    }
+}
+
+.lr-dialog-footer {
+    position: relative;
+    display: flex;
+    align-items: flex-end;
+    justify-content: space-between;
+    .left {
+        .el-button + .el-button {
+            margin-left: 10px;
+        }
+    }
+}
+
+.copy-node-many-box {
+    position: relative;
+    height: 53vh;
+    display: flex;
+    margin-top: 24px;
+    margin-bottom: -30px;
+    border-top: 1px solid #efeff5;
+    .copy-node-many-tree {
+        position: relative;
+        flex: 1;
+        height: 100%;
+        padding: 20px 20px 20px 0;
+        border-right: 1px solid #efeff5;
+    }
+    .copy-node-many-table {
+        position: relative;
+        flex: 1;
+        height: 100%;
+        padding: 20px 0 20px 20px;
+    }
+}
+
+.sort-node-body-box.list-group {
+    position: relative;
+    min-height: 20px;
+    border: 1px solid #EEEEEE;
+    .list-group-item {
+        position: relative;
+        display: flex;
+        align-items: center;
+        padding: 6px 15px;
+        cursor: move;
+        transition: background 0.2s;
+        .index-box {
+            position: relative;
+            width: 50px;
+        }
+        .title-box {
+            position: relative;
+            padding-right: 24px;
+            flex: 1;
+        }
+        .icon-box {
+            position: relative;
+            font-size: 18px;
+            display: flex;
+            align-items: center;
+            .icon {
+                cursor: pointer;
+                display: flex;
+                align-items: center;
+            }
+        }
+        &:first-child .icon-box i:last-child,
+        &:last-child .icon-box i:first-child {
+            cursor: default;
+            color: #aaaaaa;
+        }
+        &:hover {
+            background: var(--el-color-primary-light-9);
+        }
+    }
+    .list-group-item + .list-group-item {
+        border-top: 1px solid #EEEEEE;
+    }
+    &.header {
+        border-bottom: 0;
+        .list-group-item {
+            cursor: default;
+            padding: 8px 15px;
+            background-color: #F8F8F8;
+            .index-box, .title-box, .icon-box {
+                font-size: 14px;
+            }
+        }
+    }
+}
+.flip-list-move {
+    transition: transform 0.5s;
+}
+.no-move {
+    transition: transform 0s;
+}
+
+.hc-import-temp-box {
+    position: relative;
+    height: 100%;
+    overflow: hidden;
+    .hc-choose-type-box {
+        position: relative;
+        height: 60px;
+        margin-bottom: 20px;
+        .hc-type-box .el-radio-group .el-radio {
+            margin-right: 24px;
+        }
+    }
+    .hc-import-node-tree-box {
+        position: relative;
+        height: calc(100% - 80px);
+        overflow: hidden;
+        display: flex;
+        .import-node-tree-box {
+            position: relative;
+            height: 100%;
+            flex: 1;
+            border: 1px solid #EEEEEE;
+            border-radius: 4px;
+            overflow: hidden;
+            margin-right: 10px;
+            .hc-tree-title-box {
+                text-align: center;
+                font-weight: bold;
+                padding: 12px 0;
+                border-bottom: 1px solid #EEEEEE;
+            }
+            .hc-tree-bar-box {
+                position: relative;
+                height: calc(100% - 60px);
+                overflow: hidden;
+            }
+        }
+        .import-node-tree-box + .import-node-tree-box {
+            margin-left: 10px;
+            margin-right: 0;
+        }
+    }
+}

+ 319 - 0
src/views/data-fill/components/DivisionTree.vue

@@ -0,0 +1,319 @@
+<template>
+    <ElTree class="hc-tree-node page-division-tree tree-line" ref="ElTreeRef" :props="ElTreeProps" :load="ElTreeLoadNode" lazy highlight-current accordion node-key="primaryKeyId"
+            :default-expanded-keys="defaultExpandedCids" @node-click="ElTreeClick" :indent="0">
+        <template #default="{ node, data }">
+            <div class="data-custom-tree-node" :id="`${idPrefix}${data['primaryKeyId']}`">
+                <div class="label" :class="node.level === 1?'level-name':''">
+                    <span :class="data?.colorStatus === 2?'text-blue':data?.colorStatus === 3?'text-orange':data?.colorStatus === 4?'text-green':''" v-if="isColor">{{ node.label }}</span>
+                    <span v-else>{{ node.label }}</span>
+                </div>
+                <div class="menu-icon" :class="node.showTreeMenu?'show':''" v-if="node.level !== 1">
+                    <div class="cu-tree-node-popover-menu-icon" @click.prevent.stop="ElTreeLabelContextMenu($event,data,node)">关联</div>
+                </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"
+
+//参数
+const props = defineProps({
+    projectId: {
+        type: [String,Number],
+        default: ''
+    },
+    contractId: {
+        type: [String,Number],
+        default: ''
+    },
+    autoExpandKeys: {
+        type: Array,
+        default: () => ([])
+    },
+    idPrefix: {
+        type: String,
+        default: 'division-tree-'
+    },
+    isAutoKeys: {
+        type: Boolean,
+        default: true
+    },
+    isAutoClick: {
+        type: Boolean,
+        default: true
+    }
+})
+
+//变量
+const ElTreeRef = ref(null)
+const treeRefNode = ref(null)
+const treeRefData = ref(null)
+const ElTreeProps = ref({
+    label: 'title',
+    children: 'children',
+    isLeaf: 'notExsitChild'
+})
+const isAutoKeys = ref(props.isAutoKeys)
+const TreeExpandKey = ref(props.autoExpandKeys)
+const projectId = ref(props.projectId);
+const contractId = ref(props.contractId);
+const idPrefix = ref(props.idPrefix);
+
+//监听
+watch(() => [
+    props.menus,
+    props.isMark,
+    props.isAutoKeys,
+    props.autoExpandKeys,
+    props.projectId,
+    props.contractId,
+    props.idPrefix,
+], ([menus, isMark, AutoKeys, expandKeys, UserProjectId, UserContractId,UserIdPrefix]) => {
+    menusData.value = menus
+    menuMark.value = isMark
+    isAutoKeys.value = AutoKeys
+    TreeExpandKey.value = expandKeys
+    projectId.value = UserProjectId
+    contractId.value = UserContractId
+    idPrefix.value = UserIdPrefix
+})
+
+//事件
+const emit = defineEmits(['menuTap','nodeTap', 'nodeLoading'])
+
+//树形结构异步加载数据
+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 ElTreeClick = async (data,node) => {
+    if (isAutoKeys.value) {
+        let autoKeysArr = []
+        await getNodeExpandKeys(node, autoKeysArr)
+        const autoKeys = autoKeysArr.reverse()
+        emit('nodeTap', {node, data, keys: autoKeys})
+    } else {
+        emit('nodeTap', {node, data, keys: []})
+    }
+}
+
+//处理自动展开的节点KEY
+const getNodeExpandKeys = async (node, newKeys) => {
+    const parent = node?.parent ?? []
+    const primaryKeyId = node?.data?.primaryKeyId ?? ''
+    if (primaryKeyId) {
+        newKeys.push(primaryKeyId)
+        await getNodeExpandKeys(parent, newKeys)
+    }
+}
+
+//鼠标右键事件
+const contextMenuRef = ref(null)
+const ElTreeLabelContextMenu = (e,data,node) => {
+    const rows = menusData.value || [];
+    if (node.level !== 1 && rows.length > 0) {
+        e.preventDefault();
+        treeRefNode.value = node;
+        treeRefData.value = data;
+        //展开菜单
+        contextMenuRef.value?.showMenu(e)
+    }
+}
+
+//鼠标右键菜单被点击
+const handleMenuSelect = ({key}) => {
+    const node = treeRefNode.value;
+    const data = treeRefData.value;
+    //如果为标记菜单
+    if (key === 'mark' && menuMark.value) {
+        if (data.isFirst === true) {
+            emit('menuTap', {key: 'cancel_mark', node, data})
+        } else {
+            emit('menuTap', {key: 'mark', node, data})
+        }
+    } else {
+        emit('menuTap', {key, node, data})
+    }
+}
+
+//设置树菜单的标记数据
+const setElTreeMenuMark = (keys,isFirst) => {
+    keys.forEach(item => {
+        //根据 data 或者 key 拿到 Tree 组件中的 node
+        let node = ElTreeRef.value.getNode(item)
+        if (!!node) node.data.isFirst = isFirst;
+    })
+}
+
+//设置树菜单的标记数据
+const removeElTreeNode = (key) => {
+    //根据 data 或者 key 拿到 Tree 组件中的 node
+    let node = ElTreeRef.value.getNode(key)
+    //删除 Tree 中的一个节点,使用此方法必须设置 node-key 属性
+    ElTreeRef.value.remove(node)
+}
+
+// 暴露出去
+defineExpose({
+    setElTreeMenuMark,
+    removeElTreeNode
+})
+</script>
+
+<style lang="scss" scoped>
+.data-custom-tree-node {
+    position: relative;
+    display: flex;
+    align-items: center;
+    width: 100%;
+    color: var(--ui-TC);
+    .label {
+        flex: auto;
+        font-size: 16px;
+    }
+    .label.level-name {
+        font-size: 18px;
+        font-weight: bold;
+    }
+    .menu-icon {
+        position: absolute;
+        pointer-events: none;
+        transition: opacity 0.2s;
+        opacity: 0;
+        right: 0;
+        background: rgba(255, 255, 255, 0.25);
+        border-radius: 2px;
+        .cu-tree-node-popover-menu-icon {
+            display: flex;
+            align-items: center;
+            justify-content: center;
+        }
+    }
+    &:hover {
+        .menu-icon {
+            opacity: 1;
+            pointer-events: all;
+            cursor: context-menu;
+        }
+    }
+    .menu-icon.show {
+        opacity: 1;
+        pointer-events: all;
+        cursor: context-menu;
+    }
+}
+
+// 树样式
+.tree-line {
+    :deep(.el-tree-node) {
+        position: relative;
+        padding-left: 16px; // 缩进量
+    }
+    :deep(.el-tree-node__children) {
+        padding-left: 16px; // 缩进量
+    }
+    // 竖线
+    :deep(.el-tree-node::before) {
+        content:"";
+        height: 100%;
+        width: 1px;
+        position: absolute;
+        left: -3px;
+        top: -26px;
+        border-width: 1px;
+        border-left: 1px dashed #ccc;
+    }
+    // 当前层最后⼀个节点的竖线⾼度固定
+    :deep(.el-tree-node:last-child::before) {
+        height: 38px; // 可以⾃⼰调节到合适数值
+    }
+    // 横线
+    :deep(.el-tree-node::after) {
+        content:"";
+        width: 24px;
+        height: 20px;
+        position: absolute;
+        left: -3px;
+        top: 12px;
+        border-width: 1px;
+        border-top: 1px dashed #ccc;
+    }
+    // 去掉最顶层的虚线,放最下⾯样式才不会被上⾯的覆盖了
+    & > :deep(.el-tree-node::after) {
+        border-top: none;
+    }
+    & > :deep(.el-tree-node::before) {
+        border-left: none;
+    }
+    // 展开关闭的icon
+    :deep(.el-tree-node__expand-icon) {
+        font-size: 16px;
+        &.is-leaf {
+            color: transparent;
+            font-size: 0px;
+        }
+    }
+}
+</style>
+<style lang="scss">
+.hc-tree-node .el-tree-node__label {
+    flex: 1;
+}
+</style>

+ 18 - 13
src/views/data-fill/components/ListItem.vue

@@ -91,10 +91,10 @@
     <HcDialog :show="IDVFModal" title="插入设计值/频率" widths="600px" saveText="确认插入" @close="IDVFModal = false" @save="IDVFModalSaveClick">
         <el-alert title="填写完设计值和频率,系统自动计算实测值" type="warning" :closable="false"/>
         <el-form ref="formIDVFRef" :model="formIDVFModel" :rules="formIDVFRules" label-width="auto" size="large">
-            <el-form-item label="设计值" prop="design">
+            <el-form-item label="设计值">
                 <el-input v-model="formIDVFModel.design" placeholder="请输入设计值"/>
             </el-form-item>
-            <el-form-item label="频率" prop="size">
+            <el-form-item label="频率">
                 <el-input v-model="formIDVFModel.size" placeholder="请输入频率"/>
             </el-form-item>
         </el-form>
@@ -190,7 +190,10 @@ const setFormDataNum = (datas) => {
     ActiveKey.value = ''
     let newArr = [];
     for (let i = 0; i < datas.length; i++) {
-        newArr.push(getFormDataInit(datas[i], datas[i].pkeyId))
+        newArr.push({
+            ...getFormDataInit(datas[i], datas[i].pkeyId),
+            isCollapseLoad: false,
+        })
     }
     formData.value = newArr
 }
@@ -209,8 +212,6 @@ const CollapseChange = (name) => {
         if (!item.isTableFormRender) {
             //渲染表单
             getExcelHtml(item,index)
-            //获取已填写的数据
-            getBussDataInfo(item,item.pkeyId, index)
         }
     } else {
         getOffsetTop()
@@ -226,6 +227,8 @@ const getExcelHtml = async (item,index) => {
         const resData = isString(data) ? data || '' : ''
         if (!error && code === 200 && resData) {
             item.isTableForm = true
+            //获取已填写的数据
+            getBussDataInfo(item,item.pkeyId, index)
             //渲染表单
             HTableForm.createForm({
                 template: resData,
@@ -264,9 +267,9 @@ const getBussDataInfo = async (item,pkeyId, index) => {
         if (!error && code === 200 && resData) {
             HTableForm.setPickerKey(resData)
             const InitObj = getFormDataInit(item, pkeyId) //有数据,关联数据
-            formData.value[index] = { ...resData, ...InitObj}
+            formData.value[index] = {...resData, ...InitObj, isCollapseLoad: true}
         } else {
-            formData.value[index] = getFormDataInit(item, pkeyId)
+            formData.value[index] = {...getFormDataInit(item, pkeyId), isCollapseLoad: true}
         }
     } else {
         window?.$message?.warning('pkeyId为空')
@@ -294,14 +297,13 @@ const saveExcelBussData = async (item, index, showTip = true) => {
     const {error, code, data} = await wbsApi.saveExcelBussData({
         ...formData.value[index],
         ...InitObj
-    }, false)
+    })
     //处理数据
     tableFormSaveLoading.value = false
     if (!error && code === 200) {
         if(showTip) window?.$message?.success('保存成功')
         return true
     } else {
-        if(showTip) window?.$message?.warning(data.msg || '保存失败')
         return false
     }
 }
@@ -568,9 +570,10 @@ const CTDModal = ref(false)
 const IDVFModalSaveClick = async () => {
     const {pkeyId, KeyName} = tableFormItemNode.value
     if (pkeyId) {
-        const {data} = await wbsApi.queryFormulaRange({
+        const { design, size } = formIDVFModel.value
+        const { data } = await wbsApi.queryFormulaRange({
             ...formIDVFModel.value,
-            dev: '±5',
+            dev: (!design && !size) ? '±5': '',
             key: KeyName,
             pkId: pkeyId
         })
@@ -602,9 +605,11 @@ const renewData = () => {
 //获取表单数据
 const getFormData = () => {
     const formArr = deepClone(formData.value);
-    return formArr.filter((item) => {
-        return (item.pkeyId??'') !== '';
+    let xxx = formArr.filter((item) => {
+        return (item.pkeyId??'') !== '' && item.isCollapseLoad;
     })
+    console.log(xxx)
+    return xxx
 }
 
 // 暴露出去

+ 63 - 3
src/views/data-fill/components/WbsTree.vue

@@ -1,6 +1,6 @@
 <template>
-    <ElTree class="hc-tree-node" ref="ElTreeRef" :props="ElTreeProps" :load="ElTreeLoadNode" lazy highlight-current accordion node-key="primaryKeyId"
-            :default-expanded-keys="defaultExpandedCids" @node-click="ElTreeClick" @node-contextmenu="ElTreeLabelContextMenu">
+    <ElTree class="hc-tree-node" :class="[line?'tree-line':'',ui]" ref="ElTreeRef" :props="ElTreeProps" :load="ElTreeLoadNode" lazy highlight-current accordion node-key="primaryKeyId"
+            :default-expanded-keys="defaultExpandedCids" @node-click="ElTreeClick" @node-contextmenu="ElTreeLabelContextMenu" :indent="0">
         <template #default="{ node, data }">
             <div class="data-custom-tree-node" :id="`${idPrefix}${data['primaryKeyId']}`">
                 <!--树组件,节点名称-->
@@ -73,7 +73,15 @@ const props = defineProps({
     isColor: {
         type: Boolean,
         default: false
-    }
+    },
+    line: {
+        type: Boolean,
+        default: false
+    },
+    ui: {
+        type: String,
+        default: ''
+    },
 })
 
 //变量
@@ -289,6 +297,58 @@ defineExpose({
         cursor: context-menu;
     }
 }
+
+// 树样式
+.tree-line {
+    :deep(.el-tree-node) {
+        position: relative;
+        padding-left: 16px; // 缩进量
+    }
+    :deep(.el-tree-node__children) {
+        padding-left: 16px; // 缩进量
+    }
+    // 竖线
+    :deep(.el-tree-node::before) {
+        content:"";
+        height: 100%;
+        width: 1px;
+        position: absolute;
+        left: -3px;
+        top: -26px;
+        border-width: 1px;
+        border-left: 1px dashed #ccc;
+    }
+    // 当前层最后⼀个节点的竖线⾼度固定
+    :deep(.el-tree-node:last-child::before) {
+        height: 38px; // 可以⾃⼰调节到合适数值
+    }
+    // 横线
+    :deep(.el-tree-node::after) {
+        content:"";
+        width: 24px;
+        height: 20px;
+        position: absolute;
+        left: -3px;
+        top: 12px;
+        border-width: 1px;
+        border-top: 1px dashed #ccc;
+    }
+    // 去掉最顶层的虚线,放最下⾯样式才不会被上⾯的覆盖了
+    & > :deep(.el-tree-node::after) {
+        border-top: none;
+    }
+    & > :deep(.el-tree-node::before) {
+        border-left: none;
+    }
+    // 展开关闭的icon
+    :deep(.el-tree-node__expand-icon) {
+        font-size: 16px;
+        &.is-leaf {
+            color: transparent;
+            font-size: 0px;
+        }
+    }
+}
 </style>
 <style lang="scss">
 .hc-tree-node .el-tree-node__label {

+ 622 - 18
src/views/data-fill/division.vue

@@ -12,7 +12,7 @@
             </div>
             <div class="hc-tree-box">
                 <el-scrollbar>
-                    <WbsTree :menus="ElTreeMenu" :autoExpandKeys="treeAutoExpandKeys" :projectId="projectId" :contractId="contractId" isColor @nodeTap="wbsElTreeClick" @menuTap="ElTreeMenuClick"/>
+                    <WbsTree ui="page-division-tree" :menus="ElTreeMenu" :autoExpandKeys="treeAutoExpandKeys" :projectId="projectId" :contractId="contractId" line isColor @nodeTap="wbsElTreeClick" @menuTap="ElTreeMenuClick"/>
                 </el-scrollbar>
             </div>
             <!--左右拖动-->
@@ -21,15 +21,206 @@
         <div class="hc-page-content-box hc-division-page">
             <div class="basic-info">
                 <HcCard title="当前节点基础信息">
-                    123456
+                    <HcTable :column="tableBasicColumn" :datas="tableBasicData" :isIndex="false" border>
+                        <template #type="{row}">{{getRowType(row['type'])}}</template>
+                    </HcTable>
                 </HcCard>
             </div>
             <div class="project-info">
                 <HcCard title="当前节点工程用表信息">
-                    123456
+                    <HcTable :column="tableProjectColumn" :datas="tableProjectData" :isIndex="false" border/>
                 </HcCard>
             </div>
+            <div class="footer-box">
+                <el-button hc-btn>
+                    <HcIcon name="download-2"/>
+                    <span>下载导入划分模板</span>
+                </el-button>
+                <el-button type="primary" hc-btn>
+                    <HcIcon name="folder-upload"/>
+                    <span>导入划分模板</span>
+                </el-button>
+                <el-button hc-btn @click="toBackClick">
+                    <HcIcon name="arrow-go-back"/>
+                    <span>返回</span>
+                </el-button>
+            </div>
         </div>
+
+        <!--编辑节点-->
+        <HcDialog :show="editNodeModal" title="编辑节点" widths="600px" :loading="editNodeLoading" @close="editNodeModal = false" @save="editNodeClick">
+            <el-form ref="formEditNodeRef" :model="formEditNodeModel" :rules="formEditNodeRules" label-width="auto" size="large">
+                <el-form-item label="节点名称" prop="title">
+                    <el-input v-model="formEditNodeModel.title"  placeholder="请输入节点名称"/>
+                </el-form-item>
+                <el-form-item label="上级节点">
+                    <el-input v-model="formEditNodeModel.parent.title" disabled/>
+                </el-form-item>
+                <el-form-item label="节点类型">
+                    <el-select v-model="formEditNodeModel.type" block disabled>
+                        <el-option v-for="item in nodeTypeData" :label="item.label" :value="item.value"/>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="划分编号">
+                    <el-input v-model="formEditNodeModel.partitionCode" placeholder="请输入划分编号"/>
+                </el-form-item>
+            </el-form>
+        </HcDialog>
+
+        <!--复制节点-->
+        <HcDialog :show="copyNodeModal" title="复制节点" :widths="copyNodeTabKey === '1'?'600px':'1200px'" @close="copyNodeModal = false">
+            <el-form ref="formCopyNodeModelRef" :model="formCopyNodeModel" :rules="formCopyNodeModelRules" label-width="auto" size="large" v-if="copyNodeTabKey !== '3'">
+                <el-form-item label="节点名称" prop="title" style="margin-bottom: 0;">
+                    <el-input v-model="formCopyNodeModel.title" placeholder="请输入节点名称"/>
+                </el-form-item>
+            </el-form>
+            <div class="copy-node-many-box" v-if="copyNodeTabKey !== '1'">
+                <div class="copy-node-many-tree">
+                    <el-scrollbar>
+                        <WbsTree :autoExpandKeys="treeAutoExpandKeys" :projectId="projectId" :contractId="contractId" idPrefix="tree-node-copy-" :isAutoClick="false" :isAutoKeys="false" @nodeTap="copyNodeElTreeClick"/>
+                    </el-scrollbar>
+                </div>
+                <div class="copy-node-many-table">
+                    <el-scrollbar>
+                        <el-table :data="copyNodeTable" border stripe>
+                            <el-table-column prop="title" label="复制到的位置"/>
+                            <el-table-column prop="nodeName" label="节点名称" v-if="copyNodeTabKey === '2'">
+                                <template #default="{row}">
+                                    <el-form ref="copyNodeTableRef" :model="row" :rules="copyNodeTableRules" label-width="0" size="large">
+                                        <el-form-item prop="nodeName" style="margin-bottom: 0;">
+                                            <el-input v-model="row.nodeName" placeholder="请输入节点名称"/>
+                                        </el-form-item>
+                                    </el-form>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="action" label="操作" width="120" align="center">
+                                <template #default="{_,$index}">
+                                    <el-button type="danger" plain @click="copyNodeTableDel($index)">删除</el-button>
+                                </template>
+                            </el-table-column>
+                        </el-table>
+                    </el-scrollbar>
+                </div>
+            </div>
+            <template #footer>
+                <div class="lr-dialog-footer">
+                    <div class="left">
+                        <template v-for="item in copyNodeTab">
+                            <el-button size="large" type="primary" plain v-if="item?.key === copyNodeTabKey" @click="copyNodeTabChange(item?.key)">{{item.name}}</el-button>
+                            <el-button size="large" text bg @click="copyNodeTabChange(item?.key)" v-else>{{item.name}}</el-button>
+                        </template>
+                    </div>
+                    <div class="right">
+                        <el-button size="large" @click="copyNodeModal = false">取消</el-button>
+                        <el-button type="primary" hc-btn :loading="copyNodeLoading" @click="copyNodeClick">提交</el-button>
+                    </div>
+                </div>
+            </template>
+        </HcDialog>
+
+        <!--新增子节点-->
+        <HcDialog :show="addNodeModal" title="新增子节点" widths="720px" @close="addNodeModal = false">
+            <el-alert title="双击节点,可编辑节点名称,编辑完成后,请按回车或输入框消失后,再点提交" type="warning" :closable="false"/>
+            <HcTreeNode :projectId="projectId" :nodeId="addTreeNodeId" :oldId="addTreeNodeOldId" @check-change="addTreeNodeCheckChange" v-if="addTreeNodeType === '1'"/>
+            <HcTreeNode :projectId="projectId" :nodeId="addTreeNodeId" :oldId="addTreeNodeOldId" strictly @check-change="addTreeNodeCheckChange" v-if="addTreeNodeType === '2'"/>
+            <template #footer>
+                <div class="lr-dialog-footer">
+                    <div class="left flex items-center">
+                        <div class="mr-4">选中方式:</div>
+                        <el-radio-group v-model="addTreeNodeType">
+                            <el-radio label="1">当前及子节点</el-radio>
+                            <el-radio label="2" class="ml-4">仅当前节点</el-radio>
+                        </el-radio-group>
+                    </div>
+                    <div class="right">
+                        <el-button size="large" @click="addNodeModal = false">取消</el-button>
+                        <el-button type="primary" hc-btn :loading="addNodeLoading" @click="addNodeClick">提交</el-button>
+                    </div>
+                </div>
+            </template>
+        </HcDialog>
+
+        <!--调整排序-->
+        <HcDialog :show="sortNodeModal" title="调整排序" widths="700px" :loading="sortNodeLoading" @close="sortNodeModal = false" @save="sortNodeClick">
+            <el-alert title="可拖动排序,也可在后面点击图标,切换排序" type="warning" :closable="false"/>
+            <div class="sort-node-body-box list-group header">
+                <div class="list-group-item">
+                    <div class="index-box">序号</div>
+                    <div class="title-box">节点名称</div>
+                    <div class="icon-box">排序</div>
+                </div>
+            </div>
+            <Draggable class="sort-node-body-box list-group" ghost-class="ghost" :list="sortNodeData" item-key="id" @start="sortNodeDrag = true" @end="sortNodeDrag = false">
+                <template #item="{element, index}">
+                    <div class="list-group-item">
+                        <div class="index-box">{{index + 1}}</div>
+                        <div class="title-box">{{element.title}}</div>
+                        <div class="icon-box">
+                            <span class="icon" @click="downSortClick(index)">
+                                <HcIcon name="arrow-down" ui="text-lg"/>
+                            </span>
+                            <span class="icon" @click="upSortClick(index)">
+                                <HcIcon name="arrow-up" ui="text-lg"/>
+                            </span>
+                        </div>
+                    </div>
+                </template>
+            </Draggable>
+        </HcDialog>
+
+        <!--导入划分模板-->
+        <HcDialog :show="importTempModal" title="导入划分模板" widths="86%" ui="hc-modal-table" @close="importTempModal = false">
+            <div class="hc-import-temp-box">
+                <div class="hc-choose-type-box">
+                    <div class="text-title text-orange">请选择需要导入的工程类别:</div>
+                    <div class="hc-type-box">
+                        <el-radio-group v-model="importRadio" size="large">
+                            <el-radio v-for="item in importRadioData" :label="item.key">{{item.name}}</el-radio>
+                        </el-radio-group>
+                    </div>
+                </div>
+                <div class="hc-import-node-tree-box">
+                    <div class="import-node-tree-box">
+                        <div class="hc-tree-title-box">导入并识别成功</div>
+                        <div class="hc-tree-bar-box">
+                            <el-scrollbar>
+                                <WbsTree :projectId="projectId" :contractId="contractId" line @nodeTap="wbsElTreeClick"/>
+                            </el-scrollbar>
+                        </div>
+                    </div>
+                    <div class="import-node-tree-box">
+                        <div class="hc-tree-title-box">未被系统识别:手动关联</div>
+                        <div class="hc-tree-bar-box">
+                            <el-scrollbar>
+                                <DivisionTree :projectId="projectId" :contractId="contractId" line @nodeTap="wbsElTreeClick"/>
+                            </el-scrollbar>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <template #footer>
+                <div class="lr-dialog-footer">
+                    <div class="left">
+                        <el-button type="primary" hc-btn>
+                            <HcIcon name="file-add"/>
+                            <span>选择文件</span>
+                        </el-button>
+                        <span class="ml-4 text-main">文件名.xsl</span>
+                    </div>
+                    <div class="right">
+                        <el-button size="large" @click="importTempModal = false">
+                            <HcIcon name="close"/>
+                            <span>取消</span>
+                        </el-button>
+                        <el-button type="primary" hc-btn>
+                            <HcIcon name="folder-upload"/>
+                            <span>导入模板</span>
+                        </el-button>
+                    </div>
+                </div>
+            </template>
+        </HcDialog>
+
     </div>
 </template>
 
@@ -38,10 +229,14 @@ import {ref,watch,onMounted} from "vue";
 import {useAppStore} from "~src/store";
 import {useRouter, useRoute} from 'vue-router'
 import WbsTree from "./components/WbsTree.vue"
-import {isType, downloadBlob} from "vue-utils-plus"
+import DivisionTree from "./components/WbsTree.vue"
+import HcTreeNode from "./components/HcTreeNode.vue"
+import {isType, getIndex, downloadBlob, deepClone, formValidate} from "vue-utils-plus"
 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 Draggable from "vuedraggable";
 
 //初始变量
 const router = useRouter()
@@ -68,13 +263,68 @@ const treeAutoExpandKeys = ref(getStoreData('wbsTreeExpandKeys') || [])
 //渲染完成
 onMounted(() => {
     setElTreeMenu()
+    getDictionaryApi()
 })
 
+//获取节点类型
+const nodeTypeData = ref([])
+const getDictionaryApi = async () => {
+    const { data } = await getDictionary({
+        code: 'wbs_node_type'
+    })
+    //处理数据
+    let newArr = []
+    const newData = getArrValue(data)
+    for (let i = 0; i < newData.length; i++) {
+        newArr.push({
+            label: newData[i]['dictValue'],
+            value: Number(newData[i]['dictKey']),
+        })
+    }
+    nodeTypeData.value = newArr
+}
+
+//获取类型名称
+const getRowType = (type) => {
+    const nodeData = nodeTypeData.value
+    const index = getIndex(nodeData, 'value', type)
+    return nodeData[index]?.label ?? type
+}
+
 //树被点击
+const treeItemInfo = ref({})
+const treeNodeInfo = ref({})
 const wbsElTreeClick = ({node, data, keys}) => {
-
+    console.log(data)
+    treeNodeInfo.value = node
+    treeItemInfo.value = data
+    tableBasicData.value = [data]
+    setStoreData('wbsTreeExpandKeys',keys)
+    treeAutoExpandKeys.value = keys || []
 }
 
+//当前节点基础信息
+const tableBasicColumn = ref([
+    {key:'title', name: '节点名称'},
+    {key:'partitionCode', name: '划分编号'},
+    {key:'type', name: '节点类型'},
+    {key:'reportNumber', name: '资料类型'}
+])
+const tableBasicData = ref([])
+
+
+//当前节点工程用表信息
+const tableProjectColumn = ref([
+    {key:'name', name: '工程用表名称'},
+    {key:'startTime', name: '用表类型'},
+    {key:'taskStatusStr', name: '用表单位'},
+    {key:'reportNumber', name: '填报完整率'}
+])
+const tableProjectData = ref([])
+
+
+
+
 //树菜单配置
 const ElTreeMenu = ref([])
 const setElTreeMenu = () => {
@@ -99,11 +349,369 @@ const setElTreeMenu = () => {
 
 //树菜单被点击
 const ElTreeMenuClick = async ({key,node,data}) => {
-    //nodeItemInfo.value = node
-    //nodeDataInfo.value = data
-    //setTreeMenuDataClick({key,node,data})
+    treeNodeInfo.value = node
+    treeItemInfo.value = data
+    if (key === 'add') {
+        addTreeNodeId.value = data?.id
+        addTreeNodeOldId.value = data?.oldId
+        addNodeLoading.value = false
+        addNodeModal.value = true
+    } else if (key === 'copy') {
+        const parent = deepClone(node?.parent?.data || {})
+        formCopyNodeModel.value = {...deepClone(data), parent: parent}
+        copyNodeTabKey.value = '1'
+        copyNodeTable.value = []
+        copyNodeLoading.value = false
+        copyNodeModal.value = true
+    } else if (key === 'edit') {
+        const parent = deepClone(node?.parent?.data || {})
+        formEditNodeModel.value = {...deepClone(data), parent: parent}
+        editNodeModal.value = true
+    } else if (key === 'sort') {
+        let nodes = [], childNodes = []
+        childNodes = node?.parent?.childNodes || []
+        for (let i = 0; i < childNodes.length; i++) {
+            const res = childNodes[i]?.data
+            nodes.push({
+                id: res?.primaryKeyId,
+                title: res?.title
+            })
+        }
+        sortNodeData.value = nodes
+        sortNodeModal.value = true
+    } else if (key === 'del') {
+        delModalClick()
+    }
+}
+
+//编辑节点
+const editNodeModal = ref(false)
+
+const formEditNodeRef = ref(null)
+const formEditNodeModel = ref({})
+const formEditNodeRules = {
+    title: {
+        required: true,
+        trigger: 'blur',
+        message: "请输入节点名称"
+    },
+}
+const editNodeLoading = ref(false)
+//保存编辑节点数据
+const editNodeClick = async () => {
+    const validate = await formValidate(formEditNodeRef.value)
+    if (validate) {
+        //发起请求
+        editNodeLoading.value = true
+        const { primaryKeyId, title, partitionCode } = formEditNodeModel.value
+        const { error, code } = await wbsApi.wbsTreeUpdateNode({
+            nodeName: title || '',
+            pKeyId: primaryKeyId || '',
+            partitionCode: partitionCode || ''
+        })
+        //处理数据
+        editNodeLoading.value = false
+        if (!error && code === 200) {
+            window?.$message?.success('修改成功')
+            treeItemInfo.value['title'] = title || ''
+            treeItemInfo.value['partitionCode'] = partitionCode || ''
+            editNodeModal.value = false
+            window?.location?.reload()  //刷新页面
+        }
+    }
 }
 
+//复制节点
+const copyNodeModal = ref(false)
+
+//复制节点类型tab数据和相关处理
+const copyNodeTabKey = ref('1')
+const copyNodeTab = ref([
+    {key:'1',  name: '单份复制'},
+    {key:'2', name: '多份复制'},
+    {key:'3', name: '复制数据'}
+]);
+const copyNodeTabChange = (key) => {
+    if (key !== copyNodeTabKey.value) {
+        copyNodeTabKey.value = key;
+        copyNodeTable.value = []
+        copyNodeLoading.value = false
+    }
+}
+
+//复制节点变量
+const copyNodeLoading = ref(false)
+const formCopyNodeModel = ref({})
+const copyNodeTable = ref([])
+
+//复制树被点击
+const copyNodeElTreeClick = ({data}) => {
+    const TabKey = copyNodeTabKey.value;
+    const {title, type} = formCopyNodeModel.value;
+    if (TabKey === '2') {
+        //1 单位工程,2 分部工程,3 子分部工程,4 分项工程, 5 子分项工程,6 工序
+        if (type === 6 && (data['type'] === 4 || data['type'] === 5 || data['type'] === 6)) {
+            setCopyNodeTable(data, title)
+        }
+        if (type === 5 && data['type'] === 4) {
+            setCopyNodeTable(data, title)
+        }
+        if (type === 4 && (data['type'] === 2 || data['type'] === 3)) {
+            setCopyNodeTable(data, title)
+        }
+        if (type === 3 && data['type'] === 2) {
+            setCopyNodeTable(data, title)
+        }
+        if (type === 2 && data['type'] === 1) {
+            setCopyNodeTable(data, title)
+        }
+        if (type === 1 && data['type'] === 1) {
+            setCopyNodeTable(data, title)
+        }
+    } else if (TabKey === '3') {
+        if (data['notExsitChild']) {
+            setCopyNodeTable(data, data?.title)
+        }
+    }
+}
+
+const setCopyNodeTable = (data, title) => {
+    copyNodeTable.value.push({
+        title: data?.title || '',
+        nodeName: title || '',
+        primaryKeyId: data?.primaryKeyId || ''
+    })
+}
+
+//节点表单
+const formCopyNodeModelRef = ref(null)
+const formCopyNodeModelRules = {
+    title: {
+        required: true,
+        trigger: "blur",
+        message: "请输入节点名称"
+    }
+}
+//表格节点表单
+const copyNodeTableRef = ref(null)
+const copyNodeTableRules = {
+    nodeName: {
+        required: true,
+        trigger: "blur",
+        message: "请输入节点名称"
+    }
+}
+//删除选中的节点
+const copyNodeTableDel = (index) => {
+    copyNodeTable.value.splice(index,1)
+}
+//复制节点
+const copyNodeClick = async () => {
+    const type = copyNodeTabKey.value
+    const form = formCopyNodeModel.value
+    const table = copyNodeTable.value
+    //效验数据
+    if (type === '1') {
+        const validate = await formValidate(formCopyNodeModelRef.value)
+        if (validate) await copyContractTreeNode(type, form,[])
+    } else if (type === '2') {
+        if (table.length > 0) {
+            const validate = await formValidate(copyNodeTableRef.value)
+            if (validate) await copyContractTreeNode(type, form,table)
+        } else {
+            window?.$message?.warning('请先在左侧选择要复制到的节点')
+        }
+    } else if (type === '3') {
+        if (table.length > 0) {
+            await copyContractNodeSubmitBusinessData(form,table)
+        } else {
+            window?.$message?.warning('请先在左侧选择要复制的节点')
+        }
+    }
+}
+//单个复制、多份复制请求
+const copyContractTreeNode = async (type, form,table) => {
+    copyNodeLoading.value = true
+    const {error, code} = await wbsApi.copyContractTreeNode({
+        copyType: type,
+        needCopyNodeName: form?.title || '',
+        needCopyPrimaryKeyId: form?.primaryKeyId || '',
+        parentPrimaryKeyId: form?.parent?.primaryKeyId || '',
+        copyBatchToPaths: table
+    })
+    //判断状态
+    if (!error && code === 200) {
+        window?.$message?.success('复制成功')
+        copyNodeLoading.value = false
+        copyNodeModal.value = false
+        window?.location?.reload()  //刷新页面
+    }
+}
+//复制数据
+const copyContractNodeSubmitBusinessData = async (form,table) => {
+    copyNodeLoading.value = true
+    const {error, code} = await wbsApi.copyContractNodeSubmitBusinessData({
+        needCopyPrimaryKeyId: form?.primaryKeyId || '',
+        copyBatchToPaths: table
+    })
+    //判断状态
+    if (!error && code === 200) {
+        window?.$message?.success('复制成功')
+        copyNodeLoading.value = false
+        copyNodeModal.value = false
+        window?.location?.reload()  //刷新页面
+    }
+}
+
+//新增节点
+const addNodeModal = ref(false)
+const addTreeNodeId = ref('')
+const addTreeNodeOldId = ref('')
+const addTreeNodeType = ref('1')
+
+//选中的节点
+const allSelectedList = ref([])
+const halfSelectedList = ref([])
+const addTreeNodeCheckChange = (nodes) => {
+    let NodesArr = [], halfArr = []
+    //全选数据
+    const keys = nodes.checkedNodes || []
+    for (let i = 0; i < keys.length; i++) {
+        NodesArr.push({
+            nodeName: keys[i].title,
+            primaryKeyId: keys[i].primaryKeyId
+        })
+    }
+    allSelectedList.value = NodesArr
+    //半选数据
+    const halfNodes = nodes.halfCheckedNodes || []
+    for (let i = 0; i < halfNodes.length; i++) {
+        halfArr.push({
+            nodeName: halfNodes[i].title,
+            primaryKeyId: halfNodes[i].primaryKeyId
+        })
+    }
+    halfSelectedList.value = halfArr
+}
+
+//新增节点
+const addNodeLoading = ref(false)
+const addNodeClick = async () => {
+    const keys = allSelectedList.value || []
+    if (keys.length <= 0) {
+        window?.$message?.warning('请先选择节点')
+    } else {
+        //发起请求
+        addNodeLoading.value = true
+        const primaryKeyId = nodeDataInfo.value?.primaryKeyId || ''
+        const {error, code} = await wbsApi.saveContractTreeNode({
+            projectId: projectId.value,
+            contractId: contractId.value,
+            saveType: addTreeNodeType.value,
+            allSelectedList: allSelectedList.value,
+            halfSelectedList: halfSelectedList.value,
+            currentNodePrimaryKeyId: primaryKeyId
+        })
+        //判断状态
+        addNodeLoading.value = false
+        if (!error && code === 200) {
+            window?.$message?.success('新增成功')
+            addNodeModal.value = false
+            window?.location?.reload()  //刷新页面
+        }
+    }
+}
+
+//删除节点
+const delModalClick  = () => {
+    window?.$messageBox?.alert('请谨慎考虑后,确认是否需要删除?', '删除节点', {
+        showCancelButton: true,
+        confirmButtonText: '确认删除',
+        cancelButtonText: '取消',
+        callback: (action) => {
+            if (action === 'confirm') {
+                removeContractTreeNode()
+            }
+        }
+    })
+}
+const removeContractTreeNode = async () => {
+    const {error, code} = await wbsApi.removeContractTreeNode({
+        ids: treeItemInfo.value?.primaryKeyId || ''
+    })
+    if (!error && code === 200) {
+        window?.$message?.success('删除成功')
+        window?.location?.reload()  //刷新页面
+    }
+}
+
+//调整排序
+const sortNodeModal = ref(false)
+const sortNodeLoading = ref(false)
+const sortNodeData = ref([])
+const sortNodeDrag = ref(false)
+//向下
+const downSortClick = (index) => {
+    const indexs = index + 1
+    const data = sortNodeData.value || []
+    if(indexs !== data.length) {
+        const tmp = data.splice(indexs,1);
+        sortNodeData.value.splice(index,0,tmp[0]);
+    } else {
+        window?.$message?.warning('已经处于置底,无法下移')
+    }
+}
+//向上
+const upSortClick = (index) => {
+    const data = sortNodeData.value || []
+    if(index !== 0) {
+        const tmp = data.splice(index - 1,1);
+        sortNodeData.value.splice(index,0,tmp[0]);
+    } else {
+        window?.$message?.warning('已经处于置顶,无法上移')
+    }
+}
+//确认排序
+const sortNodeClick = async () => {
+    const sortList = [];
+    const nodes = sortNodeData.value || []
+    nodes.forEach(item => {
+        sortList.push(item?.id)
+    })
+    //发起请求
+    sortNodeLoading.value = true
+    const { error, code } = await wbsApi.diySortTreeNode({sortList})
+    sortNodeLoading.value = false
+    //判断状态
+    if (!error && code === 200) {
+        window?.$message?.success('保存成功')
+        sortNodeModal.value = false
+        window?.location?.reload()  //刷新页面
+    }
+}
+
+//导入模板
+const importTempModal = ref(true)
+const importRadio = ref(1)
+const importRadioData = ref([
+    {key: 1, name: '路基工程'},
+    {key: 2, name: '路面工程'},
+    {key: 3, name: '桥梁工程'},
+    {key: 4, name: '机电工程'},
+    {key: 5, name: '绿化工程'},
+    {key: 6, name: '隧道工程'},
+    {key: 7, name: '声屏障工程'},
+    {key: 8, name: '交通与安全工程'},
+    {key: 9, name: '特大斜拉桥、特大悬索桥'},
+])
+
+
+
+
+//返回上页
+const toBackClick = () => {
+    router.push({path: '/data-fill/wbs'})
+}
 
 //左右拖动,改变树形结构宽度
 const leftWidth = ref(382);
@@ -123,16 +731,12 @@ const onmousedown = () => {
 </script>
 
 <style lang="scss" scoped>
-.hc-page-content-box.hc-division-page {
-    .basic-info {
-
-    }
-    .project-info {
-
-    }
-}
+@import "../../styles/data-fill/division.scss";
 </style>
 
 <style lang="scss">
-
+.hc-tree-node.page-division-tree.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content .el-tree-node__label .data-custom-tree-node .label {
+    font-size: 22px;
+    font-weight: bold;
+}
 </style>

+ 6 - 4
src/views/data-fill/wbs.vue

@@ -310,6 +310,7 @@
                 </template>
             </Draggable>
         </HcDialog>
+
         <!--批量上报审批-->
         <HcReportModal  title="批量上报审批" url="informationWriteQuery/taskOne" :show="showReportModal" :projectId="projectId" :contractId="contractId"
                         :taskName="reportTaskName" :ids="reportIds" :addition="reportAddition" @hide="showReportModal = false" @finish="showReportFinish"/>
@@ -1101,16 +1102,17 @@ const tableFormSaveClick = async () => {
     } else {
         FormData = ListItemRef.value.getFormData()
     }
-    tableFormSaveLoading.value = true
+    console.log(FormData)
+    /*tableFormSaveLoading.value = true
     const {error, code} = await wbsApi.saveExcelBussData({
         dataInfo: {orderList: FormData}
     })
-    tableFormSaveLoading.value = false
-    if (!error && code === 200) {
+    tableFormSaveLoading.value = false*/
+    /*if (!error && code === 200) {
         window?.$message?.success('保存成功')
         bussPdfsClick()
         getTableDataAll()
-    }
+    }*/
 }
 
 //多表预览