|
@@ -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 = () => {
|