iZaiZaiA 2 éve
szülő
commit
02457234b5

+ 20 - 0
src/api/modules/data-fill/division.js

@@ -0,0 +1,20 @@
+import {httpApi} from "../../request/httpApi";
+
+export default {
+    //新增或删除 合同段划分树首件关联
+    async wbsTreeFirstSave(form, msg = true) {
+        return httpApi({
+            url: '/api/blade-business/treeContractFirst/saveOrDelete',
+            method: 'post',
+            params: form
+        },msg);
+    },
+    //修改树节点
+    async wbsTreeUpdateNode(form, msg = true) {
+        return httpApi({
+            url: '/api/blade-business/informationWriteQuery/updateContractNodeParameter',
+            method: 'post',
+            params: form
+        },msg);
+    },
+}

+ 3 - 3
src/config/index.js

@@ -17,9 +17,9 @@ export default {
     statusWhiteList: [],    //http的status默认放行列表
     ossUrl: 'https://bladex-test-info.oss-cn-chengdu.aliyuncs.com', //oss地址
     smsPhone: '',  //测试接受短信验证码的手机号
-    dev_version: '202209281118',    //开发版本号
+    dev_version: '202209281540',    //开发版本号
     prod_host: 'http://47.110.251.215:8090',  //线上
-    dev_host: 'http://192.168.4.6', //黄键楠
+    //dev_host: 'http://192.168.4.6', //黄键楠
     //dev_host: 'http://192.168.3.13', //祝炜
-    //dev_host: 'http://192.168.3.44', //刘依程
+    dev_host: 'http://192.168.0.155', //刘依程
 }

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

@@ -1,180 +0,0 @@
-<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 division" :class="node.level === 1?'level-name':node.level">{{ node.label }}</div>
-                <div class="menu-icon">
-                    <div class="cu-tree-node-popover-menu-icon" @click.prevent.stop="ElTreeRelationClick($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-'
-    },
-    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 TreeExpandKey = ref(props.autoExpandKeys)
-const projectId = ref(props.projectId);
-const contractId = ref(props.contractId);
-const idPrefix = ref(props.idPrefix);
-
-//监听
-watch(() => [
-    props.autoExpandKeys,
-    props.projectId,
-    props.contractId,
-    props.idPrefix,
-], ([expandKeys, UserProjectId, UserContractId,UserIdPrefix]) => {
-    TreeExpandKey.value = expandKeys
-    projectId.value = UserProjectId
-    contractId.value = UserContractId
-    idPrefix.value = UserIdPrefix
-})
-
-//事件
-const emit = defineEmits(['nodeTap', 'nodeLoading', 'relationTap'])
-
-//树形结构异步加载数据
-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) => {
-    emit('nodeTap', {node, data})
-}
-
-//鼠标右键事件
-const ElTreeRelationClick = (e,data,node) => {
-    if (node.level !== 1) {
-        e.preventDefault();
-        emit('relationTap', {node, data})
-    }
-}
-
-</script>
-
-<style lang="scss" scoped>
-@import "../../../styles/app/tree.scss";
-.data-custom-tree-node {
-    .menu-icon {
-        position: absolute;
-        pointer-events: none;
-        transition: opacity 0.2s;
-        opacity: 0;
-        right: 20px;
-        cursor: pointer;
-        background: rgba(255, 255, 255, 0.9);
-        border-radius: 2px;
-        padding: 2px 14px;
-        .cu-tree-node-popover-menu-icon {
-            display: flex;
-            align-items: center;
-            justify-content: center;
-            color: var(--el-color-primary);
-            cursor: pointer;
-        }
-    }
-    &:hover .menu-icon {
-        opacity: 1;
-        pointer-events: all;
-        cursor: pointer;
-    }
-}
-</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.division {
-    font-size: 22px;
-    font-weight: bold;
-    color: var(--el-color-primary);
-}
-</style>

+ 2 - 1
src/views/data-fill/components/ListItem.vue

@@ -20,7 +20,8 @@
                                     </el-button>
                                 </HcTooltip>
                                 <HcTooltip keys="wbs_preview_table">
-                                    <el-button type="primary" plain :disabled="item['isBussShow'] === 2 || item['isTabPdf'] === 1" @click.stop="previewClick(item,index)">预览</el-button>
+                                    <el-button type="info" plain disabled v-if="item['isBussShow'] === 2 || item['isTabPdf'] === 1">预览</el-button>
+                                    <el-button type="primary" plain @click.stop="previewClick(item,index)" v-else>预览</el-button>
                                 </HcTooltip>
                                 <HcTooltip keys="wbs_upload_table">
                                     <el-button :type="item['tabFileType'] === 2?'success':'primary'" plain :disabled="item['isBussShow'] === 2" @click.stop="uploadClick(item,index)">

+ 1 - 1
src/views/data-fill/components/DivisionTree1.vue → src/views/data-fill/components/division/DivisionTree.vue

@@ -139,7 +139,7 @@ const ElTreeRelationClick = (e,data,node) => {
 </script>
 
 <style lang="scss" scoped>
-@import "../../../styles/app/tree.scss";
+@import "../../../../styles/app/tree.scss";
 </style>
 <style lang="scss">
 .hc-tree-node .el-tree-node__label {

+ 43 - 0
src/views/data-fill/components/division/HcTreeData.vue

@@ -0,0 +1,43 @@
+<template>
+    <ElTree class="hc-tree-node tree-line" ref="ElTreeRef" :props="ElTreeProps" :data="datas" highlight-current accordion node-key="primaryKeyId" :indent="0" @node-click="ElTreeClick">
+        <template #default="{ node, data }">
+            <div class="data-custom-tree-node" :id="`${idPrefix}${data['primaryKeyId']}`">
+                <div class="label" :class="node.level === 1?'level-name':''">{{ node.label }}</div>
+            </div>
+        </template>
+    </ElTree>
+</template>
+
+<script setup>
+import { ref } from "vue";
+//参数
+const props = defineProps({
+    datas: {
+        type: Array,
+        default: () => ([])
+    },
+    idPrefix: {
+        type: String,
+        default: 'division-tree-data-'
+    }
+})
+
+//变量
+const ElTreeRef = ref(null)
+const ElTreeProps = ref({
+    label: 'nodeName',
+    children: 'children'
+})
+
+//事件
+const emit = defineEmits(['nodeTap'])
+
+//节点被点击
+const ElTreeClick = async (data,node) => {
+    emit('nodeTap', {node, data})
+}
+</script>
+
+<style lang="scss" scoped>
+@import "../../../../styles/app/tree.scss";
+</style>

+ 87 - 0
src/views/data-fill/components/division/HcTreeData1.vue

@@ -0,0 +1,87 @@
+<template>
+    <ElTree class="hc-tree-node tree-line page-division-tree" ref="ElTreeRef" :props="ElTreeProps" :data="datas" highlight-current accordion node-key="primaryKeyId" :indent="0" @node-click="ElTreeClick">
+        <template #default="{ node, data }">
+            <div class="data-custom-tree-node" :id="`${idPrefix}${data['primaryKeyId']}`">
+                <div class="label division" :class="node.level === 1?'level-name':''">{{ node.label }}</div>
+                <div class="menu-icon" :class="data['isImportIdentificationNode'] === 0?'show':''">
+                    <div class="cu-tree-node-popover-menu-icon" @click.prevent.stop="treeRelationClick($event,data,node)">关联</div>
+                </div>
+            </div>
+        </template>
+    </ElTree>
+</template>
+
+<script setup>
+import { ref } from "vue";
+//参数
+const props = defineProps({
+    datas: {
+        type: Array,
+        default: () => ([])
+    },
+    idPrefix: {
+        type: String,
+        default: 'division-tree-data1-'
+    }
+})
+
+//变量
+const ElTreeRef = ref(null)
+const ElTreeProps = ref({
+    label: 'nodeName',
+    children: 'children'
+})
+
+//事件
+const emit = defineEmits(['nodeTap', 'relationTap'])
+
+//节点被点击
+const ElTreeClick = async (data,node) => {
+    emit('nodeTap', {node, data})
+}
+
+//关联按钮被点击
+const treeRelationClick = (e,data,node) => {
+    if (node.level !== 1) {
+        e.preventDefault();
+        emit('relationTap', {node, data})
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "../../../../styles/app/tree.scss";
+.data-custom-tree-node {
+    .menu-icon {
+        position: absolute;
+        pointer-events: none;
+        transition: opacity 0.2s;
+        opacity: 0;
+        right: 20px;
+        cursor: pointer;
+        background: rgba(255, 255, 255, 0.9);
+        border-radius: 2px;
+        padding: 2px 14px;
+        .cu-tree-node-popover-menu-icon {
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            color: var(--el-color-primary);
+            cursor: pointer;
+        }
+    }
+    .menu-icon.show {
+        opacity: 1;
+        pointer-events: all;
+        cursor: pointer;
+    }
+}
+</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.division {
+    font-size: 22px;
+    font-weight: bold;
+    color: var(--el-color-primary);
+}
+</style>

+ 159 - 0
src/views/data-fill/components/division/HcUpload.vue

@@ -0,0 +1,159 @@
+<template>
+    <el-upload ref="uploadRef" class="hc-division-upload" :headers="getTokenHeader()" :data="uploadData" :action="action" :accept="accept" :limit="1" :disabled="uploadDisabled"
+               :before-upload="beforeUpload" :on-exceed="uploadExceed" :on-progress="uploadprogress" :on-success="uploadSuccess" :on-error="uploadError" :on-change="uploadChange" :auto-upload="false">
+        <template #trigger>
+            <el-button type="primary" hc-btn :disabled="uploadDisabled" :loading="uploadDisabled">
+                <HcIcon name="file-add"/>
+                <span>选择文件</span>
+            </el-button>
+        </template>
+    </el-upload>
+</template>
+
+<script setup>
+import {ref,watch,onMounted} from "vue";
+import {getTokenHeader} from '~src/api/request/header';
+import {genFileId} from 'element-plus'
+import {isSize,getObjValue} from "vue-utils-plus"
+const props = defineProps({
+    contractId: {
+        type: [String,Number],
+        default: ''
+    },
+    type: {
+        type: [Number,String],
+        default: 0
+    },
+    isSplicingNumber: {
+        type: [Number,String],
+        default: 0
+    },
+})
+
+//变量
+const uploadRef = ref(null)
+const uploadData = ref({})
+const uploadDisabled = ref(false)
+
+const action = '/api/blade-manager/wbsTreeContract/import-wbs-contract';
+const accept = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel';
+
+//监听
+watch(() => [
+    props.contractId,
+    props.type,
+    props.isSplicingNumber,
+], ([contractId, type, isSplicingNumber]) => {
+    setUploadData(contractId, type, isSplicingNumber)
+})
+
+//渲染完成
+onMounted(()=> {
+    setUploadData(props.contractId, props.type, props.isSplicingNumber)
+})
+
+//设置附加参数
+const setUploadData = (contractId, type, isSplicingNumber) => {
+    uploadData.value = {contractId, type, isSplicingNumber}
+}
+
+
+//事件
+const emit = defineEmits(['progress', 'finished', 'change'])
+
+//上传前
+const beforeUpload = async (file) => {
+    if (isSize(file?.size,60)) {
+        return true;
+    } else {
+        window?.$message?.warning('文件大小, 不能过60M!');
+        return false;
+    }
+}
+
+//超出限制时
+const uploadExceed = (files) => {
+    uploadRef.value?.clearFiles()
+    const file = files[0]
+    file.uid = genFileId()
+    uploadRef.value?.handleStart(file)
+}
+
+//上传中
+const uploadprogress = () => {
+    uploadDisabled.value = true
+    emit('progress', true)
+}
+
+//上传完成
+const uploadSuccess = (res) => {
+    uploadDisabled.value = false
+    emit('progress', false)
+    emit('finished', {
+        type: 'success',
+        data: getObjValue(res?.data)
+    })
+}
+
+//上传失败
+const uploadError = (res) => {
+    uploadDisabled.value = false
+    emit('progress', false)
+    emit('finished', {
+        type: 'error',
+        data: getObjValue(res?.data)
+    })
+    window?.$message?.error('导入失败');
+}
+
+//文件改变时
+const uploadChange = (file) => {
+    console.log(file)
+    emit('change', file)
+}
+
+const submit = () => {
+    uploadRef.value?.submit()
+}
+
+const clearFiles = () => {
+    uploadRef.value?.clearFiles()
+}
+
+// 暴露出去
+defineExpose({
+    submit,
+    clearFiles
+})
+</script>
+
+<style lang="scss">
+.hc-division-upload {
+    position: relative;
+    display: flex;
+    align-items: center;
+    .el-upload-list {
+        margin: 0;
+        .el-upload-list__item {
+            margin: 0;
+            font-size: 16px;
+            color: var(--el-color-primary);
+            .el-upload-list__item-info {
+                width: 100%;
+                margin-left: 20px;
+                .el-upload-list__item-name {
+                    padding: 0;
+                    color: inherit;
+                    font-size: inherit;
+                    .el-icon {
+                        display: none !important;
+                    }
+                }
+            }
+            .el-upload-list__item-status-label, .el-icon--close, .el-icon--close-tip {
+                display: none !important;
+            }
+        }
+    }
+}
+</style>

+ 101 - 23
src/views/data-fill/division.vue

@@ -23,6 +23,7 @@
                 <HcCard title="当前节点基础信息">
                     <HcTable :column="tableBasicColumn" :datas="tableBasicData" :isIndex="false" border>
                         <template #type="{row}">{{getRowType(row['type'])}}</template>
+                        <template #majorDataType="{row}">{{getRowMajorType(row['majorDataType'])}}</template>
                     </HcTable>
                 </HcCard>
             </div>
@@ -32,7 +33,7 @@
                 </HcCard>
             </div>
             <div class="footer-box">
-                <el-button hc-btn>
+                <el-button hc-btn @click="downloadXlsx">
                     <HcIcon name="download-2"/>
                     <span>下载导入划分模板</span>
                 </el-button>
@@ -58,7 +59,7 @@
                 </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-option v-for="item in nodeTypeData" :label="item['label']" :value="item['value']"/>
                     </el-select>
                 </el-form-item>
                 <el-form-item label="划分编号">
@@ -169,7 +170,7 @@
         </HcDialog>
 
         <!--导入划分模板-->
-        <HcDialog :show="importTempModal" title="导入划分模板" widths="86%" ui="hc-modal-table" @close="importTempModal = false">
+        <HcDialog :show="importTempModal" title="导入划分模板" widths="84%" 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>
@@ -184,7 +185,7 @@
                         <div class="hc-tree-title-box">导入并识别成功</div>
                         <div class="hc-tree-bar-box">
                             <el-scrollbar>
-                                <WbsTree :projectId="projectId" :contractId="contractId" @nodeTap="wbsElTreeClick"/>
+                                <HcTreeData :datas="matchedData"/>
                             </el-scrollbar>
                         </div>
                     </div>
@@ -192,7 +193,7 @@
                         <div class="hc-tree-title-box">未被系统识别:手动关联</div>
                         <div class="hc-tree-bar-box">
                             <el-scrollbar>
-                                <DivisionTree :projectId="projectId" :contractId="contractId" @relationTap="ElTreeRelationClick"/>
+                                <HcTreeData1 :datas="unmatchedData" @relationTap="unmatchedTreeTap"/>
                             </el-scrollbar>
                         </div>
                     </div>
@@ -201,18 +202,18 @@
             <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>
+                        <HcUpload ref="uploadRef" :contractId="contractId" :type="importRadio" :isSplicingNumber="isSplicingNumber" @change="uploadChange" @progres="uploadprogress" @finished="uploadFinished"/>
                     </div>
-                    <div class="right">
-                        <el-button size="large" @click="importTempModal = false">
+                    <div class="right flex">
+                        <div class="mr-6">
+                            <span class="text-grey">是否拼接划分编号:</span>
+                            <el-switch v-model="isSplicingNumber" inline-prompt :active-value="1" active-text="是" :inactive-value="0" inactive-text="否" size="large"/>
+                        </div>
+                        <el-button size="large" @click="importTempModalClose">
                             <HcIcon name="close"/>
                             <span>取消</span>
                         </el-button>
-                        <el-button type="primary" hc-btn>
+                        <el-button type="primary" hc-btn :disabled="uploadLoading" :loading="uploadLoading" @click="importTempFolder">
                             <HcIcon name="folder-upload"/>
                             <span>导入模板</span>
                         </el-button>
@@ -224,7 +225,7 @@
         <!--替换并关联节点-->
         <HcDialog :show="relationModal" title="替换并关联节点" widths="47rem" ui="hc-modal-table" @close="relationModal = false">
             <el-scrollbar>
-                <DivisionTree1 :projectId="projectId" :contractId="contractId" line/>
+                <DivisionTree :projectId="projectId" :contractId="contractId" line/>
             </el-scrollbar>
         </HcDialog>
 
@@ -236,10 +237,12 @@ import {ref,watch,onMounted} from "vue";
 import {useAppStore} from "~src/store";
 import {useRouter, useRoute} from 'vue-router'
 import WbsTree from "./components/WbsTree.vue"
-import DivisionTree from "./components/DivisionTree.vue"
-import DivisionTree1 from "./components/DivisionTree1.vue"
+import HcUpload from "./components/division/HcUpload.vue"
+import HcTreeData from "./components/division/HcTreeData.vue"
+import HcTreeData1 from "./components/division/HcTreeData1.vue"
+import DivisionTree from "./components/division/DivisionTree.vue"
 import HcTreeNode from "./components/HcTreeNode.vue"
-import {isType, getIndex, downloadBlob, deepClone, formValidate} from "vue-utils-plus"
+import {isType, getIndex, deepClone, formValidate} from "vue-utils-plus"
 import {getStoreData, setStoreData} from '~src/utils/storage'
 import {HcIsButton} from "~src/plugins/IsButtons";
 import {getDictionary} from "~api/other"
@@ -271,12 +274,13 @@ const treeAutoExpandKeys = ref(getStoreData('wbsTreeExpandKeys') || [])
 //渲染完成
 onMounted(() => {
     setElTreeMenu()
-    getDictionaryApi()
+    getWbsNodeTypeApi()
+    getMajorDataTypeApi()
 })
 
 //获取节点类型
 const nodeTypeData = ref([])
-const getDictionaryApi = async () => {
+const getWbsNodeTypeApi = async () => {
     const { data } = await getDictionary({
         code: 'wbs_node_type'
     })
@@ -299,6 +303,25 @@ const getRowType = (type) => {
     return nodeData[index]?.label ?? type
 }
 
+//获取资料类型
+const majorDataTypeData = ref([])
+const getMajorDataTypeApi = async () => {
+    const { data } = await getDictionary({
+        code: 'major_data_type'
+    })
+    //处理数据
+    majorDataTypeData.value = getArrValue(data)
+}
+
+//获取资料类型名称
+const getRowMajorType = (type) => {
+    if (type) {
+        const nodeData = majorDataTypeData.value
+        const index = getIndex(nodeData, 'dictKey', type)
+        return nodeData[index]?.dictValue ?? type
+    }
+}
+
 //树被点击
 const treeItemInfo = ref({})
 const treeNodeInfo = ref({})
@@ -316,7 +339,7 @@ const tableBasicColumn = ref([
     {key:'title', name: '节点名称'},
     {key:'partitionCode', name: '划分编号'},
     {key:'type', name: '节点类型'},
-    {key:'reportNumber', name: '资料类型'}
+    {key:'majorDataType', name: '资料类型'}
 ])
 const tableBasicData = ref([])
 
@@ -331,8 +354,6 @@ const tableProjectColumn = ref([
 const tableProjectData = ref([])
 
 
-
-
 //树菜单配置
 const ElTreeMenu = ref([])
 const setElTreeMenu = () => {
@@ -699,6 +720,7 @@ const sortNodeClick = async () => {
 }
 
 //导入模板
+const uploadRef = ref(null)
 const importTempModal = ref(false)
 const toImportTempClick = () => {
     importTempModal.value = true
@@ -717,6 +739,59 @@ const importRadioData = ref([
     {key: 8, name: '交通与安全工程'},
     {key: 9, name: '特大斜拉桥、特大悬索桥'},
 ])
+const isSplicingNumber = ref(0)
+
+//上传文件被改变
+const uploadFile = ref(null)
+const uploadChange = (file) => {
+    uploadFile.value = file
+}
+
+//上传中
+const uploadLoading = ref(false)
+const uploadprogress = (state) => {
+    uploadLoading.value = state
+}
+
+//上传完成
+const matchedData = ref([])
+const unmatchedData = ref([])
+const uploadFinished = ({type, data}) => {
+    uploadRef.value?.clearFiles()
+    if (type === 'success') {
+        uploadFile.value = null
+        window?.$message?.success('导入成功');
+        matchedData.value = getArrValue(data['matchedData'])
+        unmatchedData.value = getArrValue(data['unmatchedData'])
+    } else {
+        uploadFile.value = null
+        matchedData.value = []
+        unmatchedData.value = []
+    }
+}
+
+//关闭导入弹窗
+const importTempModalClose = () => {
+    uploadFile.value = null
+    importTempModal.value = false
+}
+
+//确认导入
+const importTempFolder = () => {
+    if (uploadFile.value) {
+        uploadRef.value?.submit()
+    } else {
+        window?.$message?.warning('请先选择文件');
+    }
+}
+
+//关联被点击
+const unmatchedTreeTap = ({node, data}) => {
+
+}
+
+
+
 
 //关联节点
 const ElTreeRelationClick = ({node, data}) => {
@@ -726,7 +801,10 @@ const ElTreeRelationClick = ({node, data}) => {
 
 const relationModal = ref(false)
 
-
+//下载模板
+const downloadXlsx = () => {
+    window.open('https://bladex-test-info.oss-cn-chengdu.aliyuncs.com//upload/20220928/46c85506c6719b70cfbd192f59fe95b6.xlsx','_blank')
+}
 
 //返回上页
 const toBackClick = () => {

+ 3 - 1
src/views/schedule/hc-table.vue

@@ -96,7 +96,9 @@ const loadData = async (row, treeNode, resolve) => {
 
 //返回上级
 const toBackClick = () => {
-    router.push({path: '/schedule/hc-data'})
+    router.push({
+        path: '/schedule/data'
+    })
 }
 </script>