From 09891cea3bd0c4c6182a786c302dc20921f07ccd Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期二, 11 二月 2025 18:01:50 +0800
Subject: [PATCH] 设备结构树: 1、实现点击设备关联NC程序展示文档详细信息、文件内容预览以及文档内容对比功能 2、实现设备层级导入已接收NC程序功能 全局: 1、解决类似文档出库弹窗在路由跳转后点击后会同时出现多个问题

---
 src/views/dnc/common/TableContextMenu.vue                                            |   22 +++
 src/views/dnc/base/modules/ProductStructure/ProductStructureTree.vue                 |   11 +
 src/views/dnc/base/modules/ProductStructure/ProductStructureTreeContextMenu.vue      |   22 ++
 src/views/dnc/base/modules/ProductStructure/Document/NcDocumentTableList.vue         |    8 +
 src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainBottom.vue             |   12 +
 src/views/dnc/base/modules/DeviceStructure/DeviceStructureTreeContextMenu.vue        |    7 
 src/views/dnc/common/ImportFileModal.vue                                             |   31 +++
 src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentTableList.vue |   18 +
 src/views/dnc/base/modules/DeviceStructure/Document/HasSentDocumentTableList.vue     |   10 +
 src/views/dnc/base/modules/ProductStructure/Document/OtherDocumentTableList.vue      |   14 +
 /dev/null                                                                            |  133 -------------------
 src/views/dnc/common/DocumentModalForm.vue                                           |   15 -
 src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainTop.vue                |   50 +++++-
 src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue                   |   24 ++
 src/views/dnc/base/modules/DeviceStructure/DeviceStructureMain.vue                   |    4 
 15 files changed, 197 insertions(+), 184 deletions(-)

diff --git a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMain.vue b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMain.vue
index 81ecbcd..fe7a04a 100644
--- a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMain.vue
+++ b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMain.vue
@@ -53,9 +53,9 @@
       receiveCurrentTreeNodeInfo(treeNodeInfo) {
         // 浠庢爲缁勪欢鎺ュ彈鏍戣妭鐐逛俊鎭悗浠庣埗缁勪欢娴佸叆瀛愮粍浠�
         this.currentTreeNodeInfo = treeNodeInfo
-        if (treeNodeInfo.equipmentId) {
+        if (treeNodeInfo.type === 2) {
           this.$nextTick(() => {
-            if (this.$refs.mainTopRef) this.$refs.mainTopRef.loadHasSentDocumentListData()
+            if (this.$refs.mainTopRef) this.$refs.mainTopRef.releaseLoadDocumentListApi()
           })
         }
         console.log('currentTreeNodeInfo------------------', this.currentTreeNodeInfo)
diff --git a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainBottom.vue b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainBottom.vue
index 308ce66..5de5c43 100644
--- a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainBottom.vue
+++ b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainBottom.vue
@@ -1,10 +1,10 @@
 <template>
   <a-tabs style="height: 100%" v-model="activeTabKey" @change="handleTabChange">
-    <a-tab-pane :key="1" tab="璁惧灞炴��" v-if="currentTreeNodeInfo.equipmentId">
+    <a-tab-pane :key="1" tab="璁惧灞炴��" v-if="currentTreeNodeInfo.type===2&&!currentDocumentInfo.docId">
       <DeviceInfo :currentLevelDetails="currentTreeNodeInfo.entity" :size="containerSize"/>
     </a-tab-pane>
 
-    <template v-else>
+    <template v-if="currentDocumentInfo.docId">
       <a-tab-pane :key="1" tab="鏂囨。灞炴��">
         <DocumentInfo :currentLevelDetails="currentDocumentInfo" :size="containerSize"/>
       </a-tab-pane>
@@ -55,6 +55,14 @@
         hasLoadedDataTabKeyArray: []
       }
     },
+    watch: {
+      currentTreeNodeInfo: {
+        handler(value) {
+          this.currentDocumentInfo = {}
+        },
+        immediate: true
+      }
+    },
     created() {
       this.$bus.$on('sendCurrentClickedDocumentInfo', this.receiveCurrentDocumentInfo)
       this.$bus.$on('reloadMainBottomTableData', this.reloadMainBottomTableData)
diff --git a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainTop.vue b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainTop.vue
index d5ae553..b56ba33 100644
--- a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainTop.vue
+++ b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainTop.vue
@@ -1,15 +1,15 @@
 <template>
-  <a-tabs v-model="activeTabKey" @contextmenu.native="e=>e.preventDefault()"
+  <a-tabs v-model="activeTabKey" @change="handleTabChange" @contextmenu.native="e=>e.preventDefault()"
           v-if="Object.keys(currentTreeNodeInfo).length!==0">
     <a-tab-pane :key="1" tab="鍙戦��">
-      <!--<NcDocumentTableList ref="ncDocumentTableListRef" />-->
       <HasSentDocumentTableList ref="hasSentDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo"
                                 @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/>
     </a-tab-pane>
 
     <a-tab-pane :key="2" tab="鎺ユ敹">
-      <!--<OtherDocumentTableList ref="otherDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo"-->
-      <!--@handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/>-->
+      <HasReceivedDocumentTableList ref="hasReceivedDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo"
+                                    @handleTableContextMenuOpen="handleTableContextMenuOpen"
+                                    :size="tableContainerSize"/>
     </a-tab-pane>
 
     <TableContextMenu :tableRowInfo="currentRightClickedTableRowInfo" ref="tableContextMenuRef"/>
@@ -19,11 +19,12 @@
 <script>
   import dncApi from '@/api/dnc'
   import TableContextMenu from '../../../common/TableContextMenu'
-  import HasSentDocumentTableList from './HasSentDocumentTableList'
+  import HasSentDocumentTableList from './Document/HasSentDocumentTableList'
+  import HasReceivedDocumentTableList from './Document/HasReceivedDocumentTableList'
 
   export default {
     name: 'DeviceStructureMainTop',
-    components: { HasSentDocumentTableList, TableContextMenu },
+    components: { HasReceivedDocumentTableList, HasSentDocumentTableList, TableContextMenu },
     props: {
       currentTreeNodeInfo: {
         type: Object
@@ -33,7 +34,8 @@
       return {
         activeTabKey: 1,
         tableContainerSize: 'small',
-        currentRightClickedTableRowInfo: {}
+        currentRightClickedTableRowInfo: {},
+        hasLoadedDataTabKeyArray: []
       }
     },
     created() {
@@ -61,8 +63,31 @@
        */
       loadHasSentDocumentListData(treeNodeInfo) {
         this.$nextTick(() => {
-          if (this.$refs.hasSentDocumentTableListRef) this.$refs.hasSentDocumentTableListRef.loadData(1)
+          if (this.$refs.hasSentDocumentTableListRef) {
+            this.$refs.hasSentDocumentTableListRef.loadData(1)
+            this.hasLoadedDataTabKeyArray.push(this.activeTabKey)
+          }
         })
+      },
+
+      /**
+       * tab鏍囩鍒囨崲鏃惰Е鍙�
+       * @param activeTabKey 褰撳墠宸叉縺娲籺ab鐨刱ey
+       */
+      handleTabChange(activeTabKey) {
+        this.$bus.$emit('handleSwitchDeviceDocClassCode', activeTabKey)
+        if (activeTabKey && !this.hasLoadedDataTabKeyArray.includes(activeTabKey)) {
+          if (activeTabKey === 1) {
+            this.$nextTick(() => {
+              if (this.$refs.hasSentDocumentTableListRef) this.$refs.hasSentDocumentTableListRef.loadData(1)
+            })
+          } else {
+            this.$nextTick(() => {
+              if (this.$refs.hasReceivedDocumentTableListRef) this.$refs.hasReceivedDocumentTableListRef.loadData(1)
+            })
+          }
+          this.hasLoadedDataTabKeyArray.push(activeTabKey)
+        }
       },
 
       /**
@@ -75,6 +100,8 @@
         if (this.currentTreeNodeInfo.key !== attributionId) return
         if (docClassCode === 'SEND') {
           if (this.$refs.hasSentDocumentTableListRef) this.$refs.hasSentDocumentTableListRef.loadData(1)
+        } else {
+          if (this.$refs.hasReceivedDocumentTableListRef) this.$refs.hasReceivedDocumentTableListRef.loadData(1)
         }
       },
 
@@ -223,7 +250,6 @@
         })
       },
 
-
       /**
        * 鐐瑰嚮鍙戝竷鏃惰Е鍙戝綋鍓嶆枃妗e彂甯�
        * @param menuLabel
@@ -357,6 +383,12 @@
         })
       },
 
+      // 閲嶇疆tabKey骞朵笖閲婃斁鍔犺浇鏂囨。鍒楄〃鐨勬帴鍙�
+      releaseLoadDocumentListApi() {
+        this.hasLoadedDataTabKeyArray = []
+        this.handleTabChange(this.activeTabKey)
+      },
+
       // 鎺у埗鍙抽敭鑿滃崟鍏抽棴
       handleMenuClose() {
         this.$refs.tableContextMenuRef.menuVisible = false
diff --git a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue
index 56c7ec9..f2bb570 100644
--- a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue
+++ b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue
@@ -22,9 +22,9 @@
           <a-tree blockNode show-icon :expandedKeys.sync="expandedKeys"
                   :selectedKeys="selectedKeys" :treeData="treeDataSource" :autoExpandParent="autoExpandParent"
                   @select="handleTreeSelect" @expand="handleTreeExpand" @rightClick="handleTreeRightClick">
-            <template slot="title" slot-scope="{ title, parentId, entity, key:treeKey,equipmentId}">
+            <template slot="title" slot-scope="{ title, parentId, entity, key:treeKey,equipmentId,type}">
               <DeviceStructureTreeContextMenu ref="contextMenuRef"
-                                              :treeParams="{title,treeKey,searchValue,equipmentId,entity}"/>
+                                              :treeParams="{title,treeKey,searchValue,equipmentId,entity,type,param:currentDeviceDocClassCode}"/>
             </template>
 
             <a-icon slot="switcherIcon" type="down"/>
@@ -62,6 +62,7 @@
         allTreeKeys: [],
         currentSelected: {},
         rightClickSelected: {},
+        currentDeviceDocClassCode: 'SEND',
         url: {
           delete: '/nc/product/delete'
         }
@@ -70,6 +71,7 @@
     created() {
       this.getTreeDataByApi()
       this.$bus.$on('treeMenuItemMethodTrigger', this.triggerCorrespondingMethod)
+      this.$bus.$on('handleSwitchDeviceDocClassCode', this.setCurrentDeviceDocClassCode)
     },
     methods: {
       ...mapActions(['QueryProduction']),
@@ -94,6 +96,11 @@
         })
       },
 
+      setCurrentDeviceDocClassCode(documentActiveTabKey) {
+        if (documentActiveTabKey === 1) this.currentDeviceDocClassCode = 'SEND'
+        else this.currentDeviceDocClassCode = 'REC'
+      },
+
       /**
        * 鏍戣妭鐐归�変腑鏃惰Е鍙�
        * @param selectedKeys 閫変腑鑺傜偣key
@@ -114,24 +121,25 @@
        */
       handleTreeRightClick({ event, node }) {
         const record = node.dataRef
+        // 鑻ュ彸閿椂褰撳墠鍙充晶灞曠ず灞傜骇涓鸿澶囧眰绾т笖褰撳墠鍙抽敭鏍戝眰绾у悓涓鸿澶囧眰绾ф椂鍒欏湪瑙﹀彂鍙抽敭鑿滃崟鍔熻兘鏃跺悓鏃惰Е鍙戝乏閿�変腑鍔熻兘
+        if (this.currentSelected.type === 2 && record.type === 2) this.handleTreeSelect([record.key], { node })
         this.rightClickSelected = Object.assign({}, record)
       },
 
       // 鏍戣妭鐐瑰彸閿崟鍑昏彍鍗曚腑鍒犻櫎鎸夐挳鏃惰Е鍙�
       handleDelete() {
-        this.$confirm({
+        const that = this
+        that.$confirm({
           title: '鎻愮ず',
           content: '纭鍒犻櫎姝ゆ潯璁板綍鍚楋紵',
           okText: '纭',
           okType: 'danger',
           cancelText: '鍙栨秷',
           onOk: () => {
-            console.log('this.rightClickSelected.id', this.rightClickSelected.id)
             if (!this.url.delete) {
               this.$message.error('璇疯缃畊rl.delete灞炴��!')
               return
             }
-            const that = this
             deleteAction(that.url.delete, { id: this.rightClickSelected.id })
               .then((res) => {
                 if (res.success) {
@@ -147,6 +155,12 @@
                   })
                 }
               })
+              .finally(() => {
+                that.$destroyAll()
+              })
+          },
+          onCancel: () => {
+            that.$destroyAll()
           }
         })
       },
diff --git a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTreeContextMenu.vue b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTreeContextMenu.vue
index 001b2db..61f72e4 100644
--- a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTreeContextMenu.vue
+++ b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTreeContextMenu.vue
@@ -48,8 +48,11 @@
     methods: {
       onContextMenuClick(treeKey, menuKey) {
         const level = this.getCurrentMenuLevel
-        const treeNodeInfo = Object.assign({}, this.treeParams)
-        if (treeNodeInfo.equipmentId) treeNodeInfo.type = 4
+        const { param } = this.treeParams
+        const treeNodeInfo = Object.assign({}, this.treeParams, { param })
+        console.log('treeNodeInfo++++++++++++++++++++++++++++', treeNodeInfo)
+        if (treeNodeInfo.type === 2) treeNodeInfo.type = 4
+        // 璁惧缁撴瀯鏍戣妭鐐逛腑鐨勮澶囧眰绾т负2锛屼絾鍦ㄤ骇鍝佺粨鏋勬爲涓皢璁惧灞傜骇鐨則ype璁剧疆涓�4锛屼负淇濊瘉涓や釜缁撴瀯鏍戝叡鐢ㄧ殑鏂规硶鑳芥甯歌繍琛岋紝鍥犳鍦ㄦ澶勫悓鏍疯缃负4
         const menuKeyArray = menuKey.split('_')
         const isCommonMethod = this.defaultContextMenuList[level].find(item => item.code === menuKey).isCommonMethod
         // product_add => handleAdd 瑙﹀彂瀵瑰簲缁勪欢浜嬩欢
diff --git a/src/views/dnc/base/modules/DeviceStructure/HasReceivedDocumentTableList.vue b/src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentTableList.vue
similarity index 89%
copy from src/views/dnc/base/modules/DeviceStructure/HasReceivedDocumentTableList.vue
copy to src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentTableList.vue
index fa63c2f..b4d946f 100644
--- a/src/views/dnc/base/modules/DeviceStructure/HasReceivedDocumentTableList.vue
+++ b/src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentTableList.vue
@@ -12,10 +12,10 @@
 <script>
   import { getAction } from '@/api/manage'
   import { JeecgListMixin } from '@/mixins/JeecgListMixin'
-  import DocumentModal from '../../../common/DocumentModal.vue'
+  import DocumentModal from '../../../../common/DocumentModal.vue'
 
   export default {
-    name: 'HasSentDocumentTableList',
+    name: 'HasReceivedDocumentTableList',
     components: { DocumentModal },
     mixins: [JeecgListMixin],
     props: {
@@ -55,6 +55,14 @@
         }
       }
     },
+    watch: {
+      currentTreeNodeInfo: {
+        handler(value) {
+          this.currentClickedDocumentInfo = {}
+        },
+        immediate: true
+      }
+    },
     created() {
       this.$bus.$on('tableMenuItemMethodTrigger', this.triggerCorrespondingMethod)
     },
@@ -70,7 +78,7 @@
         console.log('currentTreeNodeInfo', this.currentTreeNodeInfo)
         params.attributionId = this.currentTreeNodeInfo.key
         params.attributionType = 4
-        params.docClassCode = 'SEND'
+        params.docClassCode = 'REC'
         if (!params) return false
         this.dataSource = []
         this.loading = true
@@ -95,7 +103,7 @@
           on: {
             contextmenu: event => {
               event.preventDefault()
-              this.currentRightClickedDocumentInfo = Object.assign({ param: 'SEND' }, record)
+              this.currentRightClickedDocumentInfo = Object.assign({ param: 'REC' }, record)
               this.$emit('handleTableContextMenuOpen', this.currentRightClickedDocumentInfo)
             },
             click: () => {
@@ -122,7 +130,7 @@
       },
 
       triggerCorrespondingMethod({ methodName, level, modalTitle, tableRowInfo }) {
-        if (this[methodName] && tableRowInfo.param === 'SEND') this[methodName](tableRowInfo, modalTitle)
+        if (this[methodName] && tableRowInfo.param === 'REC') this[methodName](tableRowInfo, modalTitle)
       }
     }
   }
diff --git a/src/views/dnc/base/modules/DeviceStructure/HasReceivedDocumentTableList.vue b/src/views/dnc/base/modules/DeviceStructure/Document/HasSentDocumentTableList.vue
similarity index 94%
rename from src/views/dnc/base/modules/DeviceStructure/HasReceivedDocumentTableList.vue
rename to src/views/dnc/base/modules/DeviceStructure/Document/HasSentDocumentTableList.vue
index fa63c2f..4272858 100644
--- a/src/views/dnc/base/modules/DeviceStructure/HasReceivedDocumentTableList.vue
+++ b/src/views/dnc/base/modules/DeviceStructure/Document/HasSentDocumentTableList.vue
@@ -12,7 +12,7 @@
 <script>
   import { getAction } from '@/api/manage'
   import { JeecgListMixin } from '@/mixins/JeecgListMixin'
-  import DocumentModal from '../../../common/DocumentModal.vue'
+  import DocumentModal from '../../../../common/DocumentModal.vue'
 
   export default {
     name: 'HasSentDocumentTableList',
@@ -55,6 +55,14 @@
         }
       }
     },
+    watch: {
+      currentTreeNodeInfo: {
+        handler(value) {
+          this.currentClickedDocumentInfo = {}
+        },
+        immediate: true
+      }
+    },
     created() {
       this.$bus.$on('tableMenuItemMethodTrigger', this.triggerCorrespondingMethod)
     },
diff --git a/src/views/dnc/base/modules/DeviceStructure/Document/NcDocumentTableList.vue b/src/views/dnc/base/modules/DeviceStructure/Document/NcDocumentTableList.vue
deleted file mode 100644
index 1e80a84..0000000
--- a/src/views/dnc/base/modules/DeviceStructure/Document/NcDocumentTableList.vue
+++ /dev/null
@@ -1,126 +0,0 @@
-<template>
-  <div>
-    <a-table :columns="columns" :data-source="dataSource" bordered :pagination="ipagination"
-             :scroll="{y:189}" :customRow="customRow" :size="size" rowKey="docId" @change="handleTableChange"/>
-
-    <DocumentModal ref="modalForm" @ok="modalFormOk"/>
-  </div>
-</template>
-
-<script>
-  import { getAction } from '@/api/manage'
-  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
-  import DocumentModal from '../../../../common/DocumentModal'
-
-  export default {
-    name: 'NcDocumentTableList',
-    components: {  DocumentModal },
-    mixins: [JeecgListMixin],
-    props: {
-      currentTreeNodeInfo: {
-        type: Object
-      },
-      size: {
-        type: String
-      }
-    },
-    data() {
-      return {
-        disableMixinCreated: true,
-        columns: [
-          {
-            title: '搴忓彿',
-            dataIndex: 'rowIndex',
-            key: 'rowIndex',
-            width: 65,
-            align: 'center',
-            customRender: function(t, r, index) {
-              return parseInt(index) + 1
-            }
-          },
-          { title: '鏂囦欢鍚嶇О', dataIndex: 'docName', align: 'center' },
-          { title: '浠g爜鐗堟湰', dataIndex: 'docAlias', align: 'center' },
-          { title: '鍑哄簱鐘舵��', dataIndex: 'pullStatus_dictText', align: 'center' },
-          { title: '鐘�  鎬�', dataIndex: 'docStatus_dictText', align: 'center' },
-          { title: '绯荤粺鎸囧畾鐗堟湰', dataIndex: 'publishVersion', align: 'center' },
-          { title: '涓婁紶鏃堕棿', dataIndex: 'createTime', align: 'center' }
-        ],
-        dataSource: [],
-        currentRightClickedDocumentInfo: {},
-        currentClickedDocumentInfo: {},
-        url: {
-          list: '/nc/doc/find/page'
-        }
-      }
-    },
-    created() {
-      this.$bus.$on('tableMenuItemMethodTrigger', this.triggerCorrespondingMethod)
-    },
-    methods: {
-      loadData(arg) {
-        if (!this.url.list) {
-          this.$message.error('璇疯缃畊rl.list灞炴��!')
-          return
-        }
-        //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭
-        if (arg === 1) this.ipagination.current = 1
-        var params = this.getQueryParams()//鏌ヨ鏉′欢
-        params.attributionId = this.currentTreeNodeInfo.id
-        params.attributionType = this.currentTreeNodeInfo.type
-        params.docClassCode = 'NC'
-        if (!params) return false
-        this.dataSource = []
-        this.loading = true
-        getAction(this.url.list + `/${this.ipagination.current}/${this.ipagination.pageSize}`, params).then((res) => {
-          if (res.success) {
-            this.dataSource = res.result.records
-            if (res.result.total) {
-              this.ipagination.total = res.result.total
-            } else {
-              this.ipagination.total = 0
-            }
-          } else {
-            this.$message.warning(res.message)
-          }
-        }).finally(() => {
-          this.loading = false
-        })
-      },
-
-      customRow(record) {
-        return {
-          on: {
-            contextmenu: event => {
-              event.preventDefault()
-              this.currentRightClickedDocumentInfo = Object.assign({ param: 'NC' }, record)
-              this.$emit('handleTableContextMenuOpen', this.currentRightClickedDocumentInfo)
-            },
-            click: () => {
-              if (this.currentClickedDocumentInfo.docId === record.docId) return
-              this.currentClickedDocumentInfo = Object.assign({}, record)
-              this.$bus.$emit('sendCurrentClickedDocumentInfo', record)
-            }
-          }
-        }
-      },
-
-      handleDocumentEdit(record, modalTitle) {
-        this.$refs.modalForm.edit(record)
-        this.$refs.modalForm.title = modalTitle
-      },
-
-      handleDocumentAssign(record, modalTitle) {
-        this.$refs.documentAssignModalRef.title = modalTitle
-        this.$refs.documentAssignModalRef.visible = true
-      },
-
-      triggerCorrespondingMethod({ methodName, level, modalTitle, tableRowInfo }) {
-        if (this[methodName]) this[methodName](tableRowInfo, modalTitle)
-      }
-    }
-  }
-</script>
-
-<style scoped>
-
-</style>
\ No newline at end of file
diff --git a/src/views/dnc/base/modules/DeviceStructure/Document/OtherDocumentTableList.vue b/src/views/dnc/base/modules/DeviceStructure/Document/OtherDocumentTableList.vue
deleted file mode 100644
index 242ec75..0000000
--- a/src/views/dnc/base/modules/DeviceStructure/Document/OtherDocumentTableList.vue
+++ /dev/null
@@ -1,121 +0,0 @@
-<template>
-  <div>
-    <a-table :columns="columns" :data-source="dataSource" bordered :pagination="ipagination"
-             :scroll="{y:189}" :customRow="customRow" :size="size" rowKey="docId" @change="handleTableChange">
-
-    </a-table>
-
-    <DocumentModal ref="modalForm" @ok="modalFormOk"/>
-  </div>
-</template>
-
-<script>
-  import { getAction } from '@/api/manage'
-  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
-  import DocumentModal from '../../../../common/DocumentModal'
-
-  export default {
-    name: 'OtherDocumentTableList',
-    components: { DocumentModal },
-    mixins: [JeecgListMixin],
-    props: {
-      currentTreeNodeInfo: {
-        type: Object
-      },
-      size: {
-        type: String
-      }
-    },
-    data() {
-      return {
-        disableMixinCreated: true,
-        columns: [
-          {
-            title: '搴忓彿',
-            dataIndex: 'rowIndex',
-            key: 'rowIndex',
-            width: 65,
-            align: 'center',
-            customRender: function(t, r, index) {
-              return parseInt(index) + 1
-            }
-          },
-          { title: '鏂囦欢鍚嶇О', dataIndex: 'docName', align: 'center' },
-          { title: '璁惧缂栧彿', dataIndex: 'docCode', align: 'center' },
-          { title: '鍑哄簱鐘舵��', dataIndex: 'pullStatus_dictText', align: 'center' },
-          { title: '鐘�  鎬�', dataIndex: 'docStatus_dictText', align: 'center' },
-          { title: '绯荤粺鎸囧畾鐗堟湰', dataIndex: 'publishVersion', align: 'center' },
-          { title: '涓婁紶鏃堕棿', dataIndex: 'createTime', align: 'center' }
-        ],
-        dataSource: [],
-        currentDocumentInfo: {},
-        url: {
-          list: '/nc/doc/find/page'
-        }
-      }
-    },
-    created() {
-      this.$bus.$on('tableMenuItemMethodTrigger', this.triggerCorrespondingMethod)
-    },
-    methods: {
-      loadData(arg) {
-        if (!this.url.list) {
-          this.$message.error('璇疯缃畊rl.list灞炴��!')
-          return
-        }
-        //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭
-        if (arg === 1) this.ipagination.current = 1
-        var params = this.getQueryParams()//鏌ヨ鏉′欢
-        params.attributionId = this.currentTreeNodeInfo.id
-        params.attributionType = this.currentTreeNodeInfo.type
-        params.docClassCode = 'OTHER'
-        if (!params) return false
-        this.dataSource = []
-        this.loading = true
-        getAction(this.url.list + `/${this.ipagination.current}/${this.ipagination.pageSize}`, params).then((res) => {
-          if (res.success) {
-            this.dataSource = res.result.records
-            if (res.result.total) {
-              this.ipagination.total = res.result.total
-            } else {
-              this.ipagination.total = 0
-            }
-          } else {
-            this.$message.warning(res.message)
-          }
-        }).finally(() => {
-          this.loading = false
-        })
-      },
-
-      customRow(record) {
-        return {
-          on: {
-            contextmenu: event => {
-              event.preventDefault()
-              this.$emit('handleTableContextMenuOpen', { ...record, param: 'OTHER' })
-            },
-            click: () => {
-              if (this.currentDocumentInfo.docId === record.docId) return
-              this.currentDocumentInfo = Object.assign({}, record)
-              this.$bus.$emit('sendCurrentClickedDocumentInfo', record)
-            }
-          }
-        }
-      },
-
-      handleDocumentEdit(record, modalTitle) {
-        this.$refs.modalForm.edit(record)
-        this.$refs.modalForm.title = modalTitle
-      },
-
-      triggerCorrespondingMethod({ methodName, level, modalTitle, tableRowInfo }) {
-        if (this[methodName] && tableRowInfo.attributionType === 1) this[methodName](tableRowInfo, modalTitle)
-      }
-    }
-  }
-</script>
-
-<style scoped>
-
-</style>
\ No newline at end of file
diff --git a/src/views/dnc/base/modules/DeviceStructure/HasSentDocumentTableList.vue b/src/views/dnc/base/modules/DeviceStructure/HasSentDocumentTableList.vue
deleted file mode 100644
index fa63c2f..0000000
--- a/src/views/dnc/base/modules/DeviceStructure/HasSentDocumentTableList.vue
+++ /dev/null
@@ -1,133 +0,0 @@
-<template>
-  <div>
-    <a-table :columns="columns" :data-source="dataSource" bordered :pagination="ipagination"
-             :scroll="{y:189}" :customRow="customRow" :size="size" rowKey="docId" @change="handleTableChange">
-
-    </a-table>
-
-    <DocumentModal ref="modalForm" @ok="modalFormOk"/>
-  </div>
-</template>
-
-<script>
-  import { getAction } from '@/api/manage'
-  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
-  import DocumentModal from '../../../common/DocumentModal.vue'
-
-  export default {
-    name: 'HasSentDocumentTableList',
-    components: { DocumentModal },
-    mixins: [JeecgListMixin],
-    props: {
-      currentTreeNodeInfo: {
-        type: Object
-      },
-      size: {
-        type: String
-      }
-    },
-    data() {
-      return {
-        disableMixinCreated: true,
-        columns: [
-          {
-            title: '搴忓彿',
-            dataIndex: 'rowIndex',
-            key: 'rowIndex',
-            width: 65,
-            align: 'center',
-            customRender: function(t, r, index) {
-              return parseInt(index) + 1
-            }
-          },
-          { title: '鏂囦欢鍚嶇О', dataIndex: 'docName', align: 'center' },
-          { title: '浠g爜鐗堟湰', dataIndex: 'docAlias', align: 'center' },
-          { title: '鍑哄簱鐘舵��', dataIndex: 'pullStatus_dictText', align: 'center' },
-          { title: '鐘�  鎬�', dataIndex: 'docStatus_dictText', align: 'center' },
-          { title: '绯荤粺鎸囧畾鐗堟湰', dataIndex: 'publishVersion', align: 'center' },
-          { title: '涓婁紶鏃堕棿', dataIndex: 'createTime', align: 'center' }
-        ],
-        dataSource: [],
-        currentRightClickedDocumentInfo: {},
-        currentClickedDocumentInfo: {},
-        url: {
-          list: '/nc/doc/find/page/device'
-        }
-      }
-    },
-    created() {
-      this.$bus.$on('tableMenuItemMethodTrigger', this.triggerCorrespondingMethod)
-    },
-    methods: {
-      loadData(arg) {
-        if (!this.url.list) {
-          this.$message.error('璇疯缃畊rl.list灞炴��!')
-          return
-        }
-        //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭
-        if (arg === 1) this.ipagination.current = 1
-        var params = this.getQueryParams()//鏌ヨ鏉′欢
-        console.log('currentTreeNodeInfo', this.currentTreeNodeInfo)
-        params.attributionId = this.currentTreeNodeInfo.key
-        params.attributionType = 4
-        params.docClassCode = 'SEND'
-        if (!params) return false
-        this.dataSource = []
-        this.loading = true
-        getAction(this.url.list + `/${this.ipagination.current}/${this.ipagination.pageSize}`, params).then((res) => {
-          if (res.success) {
-            this.dataSource = res.result.records
-            if (res.result.total) {
-              this.ipagination.total = res.result.total
-            } else {
-              this.ipagination.total = 0
-            }
-          } else {
-            this.$message.warning(res.message)
-          }
-        }).finally(() => {
-          this.loading = false
-        })
-      },
-
-      customRow(record) {
-        return {
-          on: {
-            contextmenu: event => {
-              event.preventDefault()
-              this.currentRightClickedDocumentInfo = Object.assign({ param: 'SEND' }, record)
-              this.$emit('handleTableContextMenuOpen', this.currentRightClickedDocumentInfo)
-            },
-            click: () => {
-              if (this.currentClickedDocumentInfo.docId === record.docId) return
-              this.currentClickedDocumentInfo = Object.assign({}, record)
-              this.$bus.$emit('sendCurrentClickedDocumentInfo', record)
-            }
-          }
-        }
-      },
-
-      handleDocumentEdit(record, modalTitle) {
-        this.$refs.modalForm.edit(record)
-        this.$refs.modalForm.title = modalTitle
-      },
-
-      handleDocumentAssign(record, modalTitle) {
-        this.$refs.documentAssignModalRef.title = modalTitle
-        this.$refs.documentAssignModalRef.visible = true
-      },
-
-      handleDelete() {
-        // 姝ゅ鍑芥暟涓哄睆钄絤ixins涓殑鍚屽悕鍑芥暟锛岄�氱敤鍑芥暟鍐欏湪鐖剁骇涓�
-      },
-
-      triggerCorrespondingMethod({ methodName, level, modalTitle, tableRowInfo }) {
-        if (this[methodName] && tableRowInfo.param === 'SEND') this[methodName](tableRowInfo, modalTitle)
-      }
-    }
-  }
-</script>
-
-<style scoped>
-
-</style>
\ No newline at end of file
diff --git a/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentTableList.vue b/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentTableList.vue
index d3cd229..ab19d41 100644
--- a/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentTableList.vue
+++ b/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentTableList.vue
@@ -59,6 +59,14 @@
         }
       }
     },
+    watch: {
+      currentTreeNodeInfo: {
+        handler(value) {
+          this.currentClickedDocumentInfo = {}
+        },
+        immediate: true
+      }
+    },
     created() {
       this.$bus.$on('tableMenuItemMethodTrigger', this.triggerCorrespondingMethod)
     },
diff --git a/src/views/dnc/base/modules/ProductStructure/Document/OtherDocumentTableList.vue b/src/views/dnc/base/modules/ProductStructure/Document/OtherDocumentTableList.vue
index d305e4e..e73697e 100644
--- a/src/views/dnc/base/modules/ProductStructure/Document/OtherDocumentTableList.vue
+++ b/src/views/dnc/base/modules/ProductStructure/Document/OtherDocumentTableList.vue
@@ -48,10 +48,18 @@
           { title: '涓婁紶鏃堕棿', dataIndex: 'createTime', align: 'center' }
         ],
         dataSource: [],
-        currentDocumentInfo: {},
+        currentClickedDocumentInfo: {},
         url: {
           list: '/nc/doc/find/page'
         }
+      }
+    },
+    watch: {
+      currentTreeNodeInfo: {
+        handler(value) {
+          this.currentClickedDocumentInfo = {}
+        },
+        immediate: true
       }
     },
     created() {
@@ -97,8 +105,8 @@
               this.$emit('handleTableContextMenuOpen', { ...record, param: 'OTHER' })
             },
             click: () => {
-              if (this.currentDocumentInfo.docId === record.docId) return
-              this.currentDocumentInfo = Object.assign({}, record)
+              if (this.currentClickedDocumentInfo.docId === record.docId) return
+              this.currentClickedDocumentInfo = Object.assign({}, record)
               this.$bus.$emit('sendCurrentClickedDocumentInfo', record)
             }
           }
diff --git a/src/views/dnc/base/modules/ProductStructure/ProductStructureTree.vue b/src/views/dnc/base/modules/ProductStructure/ProductStructureTree.vue
index c19f1d8..0a5eee6 100644
--- a/src/views/dnc/base/modules/ProductStructure/ProductStructureTree.vue
+++ b/src/views/dnc/base/modules/ProductStructure/ProductStructureTree.vue
@@ -151,19 +151,18 @@
 
       // 鏍戣妭鐐瑰彸閿崟鍑昏彍鍗曚腑鍒犻櫎鎸夐挳鏃惰Е鍙�
       handleDelete() {
-        this.$confirm({
+        const that = this
+        that.$confirm({
           title: '鎻愮ず',
           content: '纭鍒犻櫎姝ゆ潯璁板綍鍚楋紵',
           okText: '纭',
           okType: 'danger',
           cancelText: '鍙栨秷',
           onOk: () => {
-            console.log('this.rightClickSelected.id', this.rightClickSelected.id)
             if (!this.url.delete) {
               this.$message.error('璇疯缃畊rl.delete灞炴��!')
               return
             }
-            const that = this
             deleteAction(that.url.delete, { id: this.rightClickSelected.id })
               .then((res) => {
                 if (res.success) {
@@ -179,6 +178,12 @@
                   })
                 }
               })
+              .finally(() => {
+                that.$destroyAll()
+              })
+          },
+          onCancel: () => {
+            that.$destroyAll()
           }
         })
       },
diff --git a/src/views/dnc/base/modules/ProductStructure/ProductStructureTreeContextMenu.vue b/src/views/dnc/base/modules/ProductStructure/ProductStructureTreeContextMenu.vue
index 8f3ff1d..68fa9e7 100644
--- a/src/views/dnc/base/modules/ProductStructure/ProductStructureTreeContextMenu.vue
+++ b/src/views/dnc/base/modules/ProductStructure/ProductStructureTreeContextMenu.vue
@@ -94,12 +94,30 @@
           case 6:
             return 'processStep'
         }
+      },
+      getCurrentDocClassCode() {
+        switch (this.treeParams.type) {
+          case 1:
+            return 'OTHER'
+          case 2:
+            return 'OTHER'
+          case 3:
+            return 'OTHER'
+          case 5:
+            return 'NC'
+          case 6:
+            return 'NC'
+        }
       }
     },
     methods: {
       onContextMenuClick(treeKey, menuKey) {
         const level = this.getCurrentMenuLevel
+        const param = this.getCurrentDocClassCode
         console.log('level---------------------', level)
+        console.log('param---------------------', param)
+        const treeNodeInfo = Object.assign({}, this.treeParams, { param })
+        console.log('treeNodeInfo******************', treeNodeInfo)
         const menuKeyArray = menuKey.split('_')
         const isCommonMethod = this.defaultContextMenuList[level].find(item => item.code === menuKey).isCommonMethod
         // product_add => handleAdd 瑙﹀彂瀵瑰簲缁勪欢浜嬩欢
@@ -110,10 +128,8 @@
         } else {
           methodName = 'handle' + menuKeyArray.map(item => item[0].toUpperCase() + item.slice(1)).join('')
         }
-        console.log('methodName------------------------------------', methodName)
-        console.log('treeParams------------------------------------', this.treeParams)
         const modalTitle = this.defaultContextMenuList[level].find(item => item.code === menuKey).label
-        this.$bus.$emit('treeMenuItemMethodTrigger', { methodName, modalTitle, treeNodeInfo: this.treeParams })
+        this.$bus.$emit('treeMenuItemMethodTrigger', { methodName, modalTitle, treeNodeInfo })
       }
     }
   }
diff --git a/src/views/dnc/common/DocumentModalForm.vue b/src/views/dnc/common/DocumentModalForm.vue
index 804181d..d6e34da 100644
--- a/src/views/dnc/common/DocumentModalForm.vue
+++ b/src/views/dnc/common/DocumentModalForm.vue
@@ -58,10 +58,10 @@
         validatorRules: {
           docName: [
             { required: true, message: '璇疯緭鍏ユ枃妗e師鍚嶇О!' }
-          ],
+          ]
         },
         url: {
-          edit: '/mdc/mdcPartProcessInfo/edit'
+          edit: '/nc/doc/edit'
         }
       }
     },
@@ -86,14 +86,9 @@
         this.$refs.form.validate(valid => {
           if (valid) {
             that.confirmLoading = true
-            let httpUrl = ''
-            let method = 'post'
-            if (!this.model.id) {
-              httpUrl += this.url.add
-            } else {
-              httpUrl += this.url.edit
-            }
-            httpAction(httpUrl, this.model, method).then((res) => {
+            let httpUrl = this.url.edit
+            let method = 'put'
+            httpAction(httpUrl + `/${that.model.docId}`, this.model, method).then((res) => {
               if (res.success) {
                 that.$notification.success({
                   message: '娑堟伅',
diff --git a/src/views/dnc/common/ImportFileModal.vue b/src/views/dnc/common/ImportFileModal.vue
index b058e42..e9ae1a0 100644
--- a/src/views/dnc/common/ImportFileModal.vue
+++ b/src/views/dnc/common/ImportFileModal.vue
@@ -38,7 +38,9 @@
         fileList: [],
         uploadParams: {},
         uploading: false,
-        isUploadMultiple: true
+        isUploadMultiple: true,
+        currentDeviceDocClassCode: 'SEND',
+        currentTitleAfterClass: ''
       }
     },
     created() {
@@ -50,8 +52,9 @@
        * 鐐瑰嚮瀵煎叆鏂囨。鎴朜C绋嬪簭鏃惰Е鍙�
        * @param treeNodeInfo 鐐瑰嚮鏍戣妭鐐瑰彸閿彍鍗曞鍏ョ▼搴忔椂浼犲叆鏍戣妭鐐逛俊鎭�
        * @param tableRowInfo 鍙抽敭琛ㄦ牸琛屾椂浼犲叆琛屼俊鎭�
+       * @param modalTitle 寮圭獥鏍囬
        */
-      handleImport(treeNodeInfo, tableRowInfo) {
+      handleImport(treeNodeInfo, tableRowInfo, modalTitle) {
         this.isUploadMultiple = true
         let attributionId // 鏂囨。鎵�灞炲眰绾d
         let attributionType  // 鏂囨。鎵�灞炲眰绾х被鍨�
@@ -59,15 +62,15 @@
         if (treeNodeInfo) {
           attributionId = treeNodeInfo.treeKey
           attributionType = treeNodeInfo.type
-          if (attributionType === 5 || attributionType === 6) docClassCode = 'NC'
-          else if (attributionType === 4) docClassCode = 'SEND'
-          else docClassCode = 'OTHER'
+          docClassCode = treeNodeInfo.param
         } else {
           attributionId = tableRowInfo.attributionId
           attributionType = tableRowInfo.attributionType
           docClassCode = tableRowInfo.param
         }
+        this.setModalTitle(modalTitle, docClassCode)
         this.uploadParams = Object.assign({}, { attributionId, attributionType, docClassCode })
+        console.log('uploadParams=====================', this.uploadParams)
         this.visible = true
       },
 
@@ -177,10 +180,26 @@
         this.fileList = []
       },
 
+      /**
+       * 璁剧疆寮圭獥鏍囬
+       * @param modalTitle 寮圭獥鏍囬
+       * @param docClassCode 鏂囨。绫诲瀷
+       */
+      setModalTitle(modalTitle, docClassCode) {
+        switch (docClassCode) {
+          case 'SEND':
+            this.title = modalTitle + '锛堝彂閫侊級'
+            break
+          case 'REC':
+            this.title = modalTitle + '锛堟帴鏀讹級'
+            break
+        }
+      },
+
       triggerCorrespondingMethod({ methodName, modalTitle, treeNodeInfo, tableRowInfo }) {
         if (this[methodName]) {
-          this[methodName](treeNodeInfo, tableRowInfo)
           this.title = modalTitle
+          this[methodName](treeNodeInfo, tableRowInfo, modalTitle)
         }
       }
     }
diff --git a/src/views/dnc/common/TableContextMenu.vue b/src/views/dnc/common/TableContextMenu.vue
index 6a6385e..9e5b1ec 100644
--- a/src/views/dnc/common/TableContextMenu.vue
+++ b/src/views/dnc/common/TableContextMenu.vue
@@ -62,6 +62,7 @@
               icon: 'hourglass'
             }
           ],
+          //鍏跺畠鏂囨。
           OTHER: [
             { label: '缂栬緫鏂囨。淇℃伅', code: 'document_edit', subMenu: [], icon: 'edit', isCommonMethod: false },
             { label: '瀵煎叆鏂囨。', code: 'document_import', subMenu: [], icon: 'import', isCommonMethod: true },
@@ -81,6 +82,7 @@
               icon: 'hourglass'
             }
           ],
+          //宸插彂閫佹枃妗�
           SEND: [
             { label: '缂栬緫鏂囨。淇℃伅', code: 'document_edit', subMenu: [], icon: 'edit', isCommonMethod: false },
             { label: '瀵煎叆NC绋嬪簭', code: 'document_import', subMenu: [], icon: 'import', isCommonMethod: true },
@@ -100,6 +102,26 @@
               icon: 'hourglass'
             }
           ],
+          //宸叉帴鏀舵枃妗�
+          REC: [
+            { label: '缂栬緫鏂囨。淇℃伅', code: 'document_edit', subMenu: [], icon: 'edit', isCommonMethod: false },
+            { label: '瀵煎叆NC绋嬪簭', code: 'document_import', subMenu: [], icon: 'import', isCommonMethod: true },
+            { label: '涓嬭浇', code: 'document_download', subMenu: [], icon: 'download', isCommonMethod: true },
+            { label: '鍒犻櫎', code: 'document_delete', subMenu: [], icon: 'delete', isCommonMethod: true },
+            { label: '鎵归噺鍒犻櫎', code: 'document_batch_remove', subMenu: [], icon: 'delete', isCommonMethod: false },
+            {
+              label: '鐢熷懡鍛ㄦ湡',
+              subMenu: [
+                { label: '鍑哄簱', code: 'document_pull', icon: 'export', isCommonMethod: true },
+                { label: '鍙栨秷鍑哄簱', code: 'document_cancel_pull', icon: 'stop', isCommonMethod: true },
+                { label: '鍏ュ簱', code: 'document_push', icon: 'import', isCommonMethod: true },
+                { label: '鍙戝竷', code: 'document_publish', icon: 'flag', isCommonMethod: true },
+                { label: '閲嶆柊鍙戝竷', code: 'document_republish', icon: 'reload', isCommonMethod: true },
+                { label: '褰掓。', code: 'document_pigeonhole', icon: 'database', isCommonMethod: true }
+              ],
+              icon: 'hourglass'
+            }
+          ],
           //鏂囦欢
           file: [
             { label: '鎸囧畾褰撳墠鐗堟湰', code: 'file_assign', subMenu: [], icon: 'highlight', isCommonMethod: false },//鏂囦欢-鎸囧畾褰撳墠鐗堟湰

--
Gitblit v1.9.3