From 8fbfac872e852a0ad0dbe04f2b7b69e4cff3c85c Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期三, 19 三月 2025 11:26:24 +0800
Subject: [PATCH] 1、MDC零件加工管理和OEE页面开发100% 2、DNC结构树取消搜索框侧边下拉菜单改为树组件空白处右键菜单

---
 src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue |  544 ++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 488 insertions(+), 56 deletions(-)

diff --git a/src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue b/src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue
index e6bb019..bfff7df 100644
--- a/src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue
+++ b/src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue
@@ -1,75 +1,507 @@
 <template>
-  <a-tabs v-model="activeTabKey" @contextmenu.native="e=>e.preventDefault()"
-          v-if="Object.keys(currentTreeNodeInfo).length!==0">
-    <a-tab-pane :key="1" tab="NC鏂囨。" v-if="currentTreeNodeInfo.type!==1">
-      <NcDocumentTableList @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/>
-    </a-tab-pane>
+  <div>
+    <a-tabs v-model="activeTabKey" @contextmenu.native="e=>e.preventDefault()" @change="handleTabChange"
+            v-if="Object.keys(currentTreeNodeInfo).length!==0">
+      <a-tab-pane :key="1" tab="NC绠$悊" v-if="+currentTreeNodeInfo.type===5||+currentTreeNodeInfo.type===6">
+        <div style="display: flex;">
+          <!--绯荤粺鍙傛暟閰嶇疆涓嫢鍙傛暟涓�1鏃舵墠灞曠ず瀵瑰簲灞傜骇鐨勮澶囩被鍒楄〃-->
+          <DeviceCustomTypeTableList
+            v-if="+currentTreeNodeInfo.type===5&&isProcessHasDeviceTypeList||+currentTreeNodeInfo.type===6&&isProcessStepHasDeviceTypeList"
+            ref="deviceCustomTypeTableList" :currentTreeNodeInfo="currentTreeNodeInfo"
+            @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/>
 
-    <a-tab-pane :key="2" tab="鍏朵粬鏂囨。">
-      <OtherDocumentTableList @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/>
-    </a-tab-pane>
+          <NcDocumentTableList ref="ncDocumentTableListRef"
+                               :currentNCDocumentAttributionInfo="currentNCDocumentAttributionInfo"
+                               @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/>
+        </div>
+      </a-tab-pane>
+
+      <a-tab-pane :key="2" tab="鍏朵粬鏂囨。">
+        <OtherDocumentTableList ref="otherDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo"
+                                @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/>
+      </a-tab-pane>
+    </a-tabs>
 
     <TableContextMenu :tableRowInfo="currentRightClickedTableRowInfo" ref="tableContextMenuRef"/>
-  </a-tabs>
+
+    <DocumentBatchDeleteModal :currentDocumentInfo="currentRightClickedTableRowInfo" :size="tableContainerSize"
+                              @reloadDocumentListData="reloadDocumentListData" ref="documentBatchDeleteModalRef"/>
+  </div>
 </template>
 
 <script>
-  import NcDocumentTableList from './Document/NcDocumentTableList'
-  import OtherDocumentTableList from './Document/OtherDocumentTableList'
-  import TableContextMenu from '../../../common/TableContextMenu'
+import dncApi from '@/api/dnc'
+import NcDocumentTableList from './Document/NcDocumentTableList'
+import OtherDocumentTableList from './Document/OtherDocumentTableList'
+import TableContextMenu from '../../../common/TableContextMenu'
+import DocumentBatchDeleteModal from '../../../common/DocumentBatchDeleteModal'
+import DeviceCustomTypeTableList
+  from '@views/dnc/base/modules/ProductStructure/DeviceCustomType/DeviceCustomTypeTableList.vue'
+import { getAction } from '@api/manage'
 
-  export default {
-    name: 'ProductStructureMainTop',
-    components: { TableContextMenu, OtherDocumentTableList, NcDocumentTableList },
-    data() {
-      return {
-        activeTabKey: '1',
-        tableContainerSize: 'small',
-        currentRightClickedTableRowInfo: {},
-        currentTreeNodeInfo: {}
+export default {
+  name: 'ProductStructureMainTop',
+  components: {
+    DeviceCustomTypeTableList,
+    DocumentBatchDeleteModal,
+    TableContextMenu,
+    OtherDocumentTableList,
+    NcDocumentTableList
+  },
+  data() {
+    return {
+      activeTabKey: 2,
+      tableContainerSize: 'small',
+      isProcessHasDeviceTypeList: false,
+      isProcessStepHasDeviceTypeList: false,
+      currentRightClickedTableRowInfo: {},
+      currentTreeNodeInfo: {},
+      currentClickedTypeInfo: {},
+      currentNCDocumentAttributionInfo: {},//褰撳墠NC鏂囨。鐨勬墍灞炵骇鍗崇埗绾х殑璇︾粏淇℃伅锛堝紩鍏ヨ澶囩被鍚嶯C鎸傝浇鑷宠澶囩被涓嬪弽涔嬪垯鎸傝浇鍦ㄥ伐搴忓拰宸ユ涓嬶級
+      hasLoadedDataTabKeyArray: []
+    }
+  },
+  created() {
+    this.$bus.$on('sendCurrentTreeNodeInfo', this.receiveCurrentTreeNodeInfo)
+    this.$bus.$on('sendCurrentClickedTypeInfo', this.receiveCurrentClickedTypeInfo)
+    this.$bus.$on('reloadDocumentListData', this.reloadDocumentListData)
+    this.$bus.$on('tableMenuItemMethodTrigger', this.triggerCorrespondingMethod)
+    this.getDeviceTypeListDisplayPermission('dnc_device_type_process', 'isProcessHasDeviceTypeList')
+    this.getDeviceTypeListDisplayPermission('dnc_device_type_step', 'isProcessStepHasDeviceTypeList')
+  },
+  beforeDestroy() {
+    this.$bus.$off('sendCurrentTreeNodeInfo', this.receiveCurrentTreeNodeInfo)
+    this.$bus.$off('sendCurrentClickedTypeInfo', this.receiveCurrentClickedTypeInfo)
+    this.$bus.$off('reloadDocumentListData', this.reloadDocumentListData)
+    this.$bus.$off('tableMenuItemMethodTrigger', this.triggerCorrespondingMethod)
+  },
+  methods: {
+    /**
+     * 鑾峰彇璁惧绫诲瀷鍒楄〃鍦ㄥ伐搴忓拰宸ユ灞傜骇鐨勫睍绀烘潈闄�
+     * @param settingKey 鍚勫眰绾у睍绀烘潈闄恔ey
+     * @param dataProperty 缁勪欢data涓殑灞炴�у�肩敤鏉ユ帶鍒舵槸鍚﹀睍绀�
+     */
+    getDeviceTypeListDisplayPermission(settingKey, dataProperty) {
+      getAction(`/system/sysParams/query/by/settingKey?settingKey=${settingKey}`).then(res => {
+        if (res.success) {
+          this[dataProperty] = res.result.settingValue === '1'
+        }
+      })
+    },
+
+    /**
+     * 鎺ユ敹鏍戠粍浠朵紶鏉ョ殑褰撳墠閫変腑鐨勬爲鑺傜偣淇℃伅
+     * @param treeNodeInfo 鏍戣妭鐐逛俊鎭�
+     */
+    receiveCurrentTreeNodeInfo(treeNodeInfo) {
+      console.log('treeNodeInfo', treeNodeInfo)
+      const { id, type } = treeNodeInfo
+      // 浠庢爲缁勪欢鎺ュ彈鏍戣妭鐐逛俊鎭悗浠庣埗缁勪欢娴佸叆瀛愮粍浠跺苟閲嶇疆鏁版嵁
+      this.currentClickedTypeInfo = this.currentRightClickedTableRowInfo = {}
+      this.currentTreeNodeInfo = treeNodeInfo
+      this.currentNCDocumentAttributionInfo = Object.assign({}, {
+        attributionId: id,
+        attributionType: type,
+        docClassCode: 'NC'
+      })
+      this.hasLoadedDataTabKeyArray = []
+
+      if (+type === 5 || +type === 6) {
+        this.activeTabKey = 1
+        this.$nextTick(() => {
+          if (this.$refs.deviceCustomTypeTableList) {
+            this.$refs.deviceCustomTypeTableList.setQueryParamAndLoadData()
+            // 鍒囨崲鏍戜箣鍚庢竻绌篘C绋嬪簭鍒楄〃
+            if (this.$refs.ncDocumentTableListRef && this.$refs.ncDocumentTableListRef.dataSource.length > 0) this.$refs.ncDocumentTableListRef.dataSource = []
+          } else if (this.$refs.ncDocumentTableListRef) this.$refs.ncDocumentTableListRef.loadData(1)
+        })
+      } else {
+        this.activeTabKey = 2
+        this.$nextTick(() => {
+          if (this.$refs.otherDocumentTableListRef) this.$refs.otherDocumentTableListRef.loadData(1)
+        })
+      }
+      this.hasLoadedDataTabKeyArray.push(this.activeTabKey)
+    },
+
+    /**
+     * 鎺ュ彈褰撳墠鐐瑰嚮鐨勮澶囩被淇℃伅
+     * @param record 褰撳墠鐐瑰嚮鐨勮澶囩被琛屼俊鎭�
+     */
+    receiveCurrentClickedTypeInfo(record) {
+      const { id, attributionType } = record
+      this.currentClickedTypeInfo = Object.assign({}, record)
+      this.currentNCDocumentAttributionInfo = Object.assign({}, {
+        attributionId: id,
+        attributionType,
+        docClassCode: 'NC'
+      })
+      this.$nextTick(() => {
+        if (this.$refs.ncDocumentTableListRef) this.$refs.ncDocumentTableListRef.loadData(1)
+      })
+    },
+
+    /**
+     * 鎺у埗鍙抽敭鑿滃崟寮�鍚�
+     * @param record 褰撳墠琛ㄦ牸琛屼俊鎭�
+     */
+    handleTableContextMenuOpen(record) {
+      this.currentRightClickedTableRowInfo = Object.assign({}, record)
+      this.$refs.tableContextMenuRef.currentMenuLevel = record.param
+      this.$refs.tableContextMenuRef.menuStyle.top = event.clientY + 'px'
+      this.$refs.tableContextMenuRef.menuStyle.left = event.clientX + 'px'
+      this.$refs.tableContextMenuRef.menuVisible = true
+      document.body.addEventListener('click', this.handleMenuClose)
+    },
+
+    /**
+     * tab鏍忓垏鎹㈡椂瑙﹀彂
+     * @param activeTabKey 鍒囨崲鍚庣殑tabKey
+     */
+    handleTabChange(activeTabKey) {
+      if (!this.hasLoadedDataTabKeyArray.includes(activeTabKey)) {
+        this.$nextTick(() => {
+          if (this.$refs.otherDocumentTableListRef) this.$refs.otherDocumentTableListRef.loadData(1)
+        })
+        // 闃绘鎺ュ彛鍦ㄥ悓涓�鏂囨。涓�娆$偣鍑诲唴澶氭瑙﹀彂
+        this.hasLoadedDataTabKeyArray.push(activeTabKey)
       }
     },
-    created() {
-      this.$bus.$on('sendCurrentTreeNodeInfo', this.receiveCurrentTreeNodeInfo)
-    },
-    methods: {
-      /**
-       * 鎺у埗鍙抽敭鑿滃崟寮�鍚�
-       * @param record 褰撳墠琛ㄦ牸琛屼俊鎭�
-       */
-      handleTableContextMenuOpen(record) {
-        this.currentRightClickedTableRowInfo = Object.assign({}, record)
-        this.$refs.tableContextMenuRef.currentMenuLevel = record.param
-        this.$refs.tableContextMenuRef.menuStyle.top = event.clientY + 'px'
-        this.$refs.tableContextMenuRef.menuStyle.left = event.clientX + 'px'
-        this.$refs.tableContextMenuRef.menuVisible = true
-        document.body.addEventListener('click', this.handleMenuClose)
-      },
 
-      /**
-       * 鎺ユ敹鏍戠粍浠朵紶鏉ョ殑褰撳墠閫変腑鐨勬爲鑺傜偣淇℃伅
-       * @param treeNodeInfo
-       */
-      receiveCurrentTreeNodeInfo(treeNodeInfo) {
-        // 浠庢爲缁勪欢鎺ュ彈鏍戣妭鐐逛俊鎭悗浠庣埗缁勪欢娴佸叆瀛愮粍浠�
-        this.currentTreeNodeInfo = treeNodeInfo
-        if (treeNodeInfo.type !== 1) this.activeTabKey = 1
-        else this.activeTabKey = 2
-      },
+    /**
+     * 鏂囨。浠ュ強NC绋嬪簭瀵煎叆/鍑哄簱/鍏ュ簱/鍙栨秷鍑哄簱/鍙戝竷/褰掓。鎴愬姛鍚庤Е鍙戦噸鏂板姞杞芥枃妗e垪琛�
+     * @param docClassCode 鏂囨。绫诲埆
+     * @param attributionType 鏂囨。鐖剁骇type绫诲瀷
+     * @param attributionId 鏂囨。鐖剁骇Id
+     */
+    reloadDocumentListData({ docClassCode, attributionType, attributionId }) {
+      console.log('docClassCode, attributionType, attributionId', docClassCode, attributionType, attributionId)
+      // 鍦ㄦ澶勮澶嘚C鏂囨。鐖剁骇鍙傛暟鏄彲姝ゆ柟娉曟槸缁撴瀯鏍戜互鍙婅澶囩被涓ょ涓嶅悓瀵煎叆鏂瑰紡鐨勫叡鍚屽嚭鍙�
+      this.currentNCDocumentAttributionInfo = Object.assign({}, { docClassCode, attributionId, attributionType })
 
-      /**
-       * 鎺у埗鍙抽敭鑿滃崟鐐瑰嚮鍏抽棴
-       */
-      handleMenuClose() {
-        this.$refs.tableContextMenuRef.menuVisible = false
-        document.body.removeEventListener('click', this.handleMenuClose)
+      // 鍒ゆ柇褰撳墠鍙充晶灞曠ず鐨勬枃妗g殑鎵�灞炴槸鍚︽槸褰撳墠宸﹂敭閫変腑鏍戣妭鐐规垨璁惧绫伙紝鑻ヤ笉鏄綋鍓嶅乏閿�変腑鐨勫垯鍦ㄥ鍏ュ悗涓嶅埛鏂板彸渚х殑鏂囨。鍒楄〃(閬垮厤鏃犳晥鍒锋柊)
+      // 鍒ゆ柇鏄惁鏄湪鏂囨。鍒楄〃涓繘琛屽嚭搴�/鍏ュ簱/鍙戝竷/褰掓。绛夋搷浣�,鑻ユ槸鍦ㄦ枃妗e垪琛ㄤ腑鎿嶄綔鍒欐搷浣滄垚鍔熷悗鐩存帴鍒锋柊鏂囨。鍒楄〃
+      if (!this.currentRightClickedTableRowInfo.hasOwnProperty('docId')) {
+        if (this.currentRightClickedTableRowInfo.hasOwnProperty('deviceManagementId')) {
+          // 姝ょ鎯呭喌鏄湪寮曞叆璁惧绫诲苟鍦ㄨ澶囩被鍒楄〃涓繘琛孨C鏂囨。瀵煎叆
+          if (this.currentClickedTypeInfo.id !== attributionId) return
+        } else {
+          // 姝ょ鎯呭喌鏄湪缁撴瀯鏍戣妭鐐逛笂杩涜鏂囨。瀵煎叆
+          if (this.currentTreeNodeInfo.id !== attributionId) return
+        }
       }
+
+      if (docClassCode === 'NC') {
+        this.$nextTick(() => {
+          if (this.$refs.ncDocumentTableListRef) this.$refs.ncDocumentTableListRef.loadData(1)
+        })
+      } else {
+        if (this.$refs.otherDocumentTableListRef) this.$refs.otherDocumentTableListRef.loadData(1)
+      }
+    },
+
+    // 涓嬭浇褰撳墠鍙抽敭閫変腑鏂囨。
+    handleDownload() {
+      const that = this
+      const { docId, docName } = this.currentRightClickedTableRowInfo
+      dncApi.downloadDocumentApi({ docId, docName })
+        .then(res => {
+          if (!res.success) {
+            that.$notification.error({
+              message: '娑堟伅',
+              description: res.message
+            })
+          }
+        })
+        .catch(err => {
+          that.$notification.error({
+            message: '娑堟伅',
+            description: err.message
+          })
+        })
+    },
+
+    // 鍒犻櫎褰撳墠鍙抽敭閫変腑鏂囨。
+    handleDelete() {
+      const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo
+      const that = this
+      that.$confirm({
+        title: '鎻愮ず',
+        content: `鍒犻櫎鍚庝笉鍙彇娑堬紝纭鍒犻櫎鍚楋紵`,
+        okText: '纭',
+        cancelText: '鍙栨秷',
+        onOk: () => {
+          dncApi.deleteDocumentApi(docId)
+            .then((res) => {
+              if (res.success) {
+                that.$notification.success({
+                  message: '娑堟伅',
+                  description: res.message
+                })
+                that.reloadDocumentListData({ docClassCode: param, attributionId, attributionType })
+              } else {
+                that.$notification.warning({
+                  message: '娑堟伅',
+                  description: res.message
+                })
+              }
+            })
+            .finally(() => {
+              that.$destroyAll()
+            })
+        },
+        onCancel: () => {
+          that.$destroyAll()
+        }
+      })
+    },
+
+    /**
+     * 鐐瑰嚮鎵归噺鍒犻櫎鍚庡嚭鐜板脊绐�
+     * @param modalTitle 寮圭獥鏍囬
+     */
+    handleBatchRemove(modalTitle) {
+      if (!this.$refs.documentBatchDeleteModalRef) return
+      this.$refs.documentBatchDeleteModalRef.title = modalTitle
+      this.$refs.documentBatchDeleteModalRef.visible = true
+    },
+
+    /**
+     * 鍑哄簱褰撳墠鍙抽敭閫変腑鏂囨。
+     * @param menuLabel
+     */
+    handlePull(menuLabel) {
+      const that = this
+      const { docId, docName, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo
+      that.$confirm({
+        title: '鎻愮ず',
+        content: `纭${menuLabel}鍚楋紵`,
+        okText: '纭',
+        cancelText: '鍙栨秷',
+        onOk: () => {
+          dncApi.documentOutboundApi({ docId, docName })
+            .then(res => {
+              if (res.success) {
+                that.reloadDocumentListData({ docClassCode: param, attributionId, attributionType })
+                that.$notification.success({
+                  message: '娑堟伅',
+                  description: `${menuLabel}鎴愬姛`
+                })
+              } else {
+                that.$notification.error({
+                  message: '娑堟伅',
+                  description: res.message
+                })
+              }
+            })
+            .catch(err => {
+              that.$notification.error({
+                message: '娑堟伅',
+                description: err.message
+              })
+            })
+            .finally(() => {
+              that.$destroyAll()
+            })
+        },
+        onCancel: () => {
+          that.$destroyAll()
+        }
+      })
+    },
+
+    /**
+     * 鍙栨秷鍑哄簱褰撳墠鍙抽敭閫変腑鏂囨。
+     * @param menuLabel
+     */
+    handleCancelPull(menuLabel) {
+      const that = this
+      const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo
+      that.$confirm({
+        title: '鎻愮ず',
+        content: `纭${menuLabel}鍚楋紵`,
+        okText: '纭',
+        cancelText: '鍙栨秷',
+        onOk: () => {
+          dncApi.documentCancelOutboundApi(docId)
+            .then(res => {
+              if (res.success) {
+                this.reloadDocumentListData({ docClassCode: param, attributionId, attributionType })
+                that.$notification.success({
+                  message: '娑堟伅',
+                  description: res.message
+                })
+              } else {
+                that.$notification.error({
+                  message: '娑堟伅',
+                  description: res.message
+                })
+              }
+            })
+            .catch(err => {
+              that.$notification.error({
+                message: '娑堟伅',
+                description: err.message
+              })
+            })
+            .finally(() => {
+              that.$destroyAll()
+            })
+        },
+        onCancel() {
+          that.$destroyAll()
+        }
+      })
+    },
+
+    /**
+     * 鍙戝竷褰撳墠鍙抽敭閫変腑鏂囨。
+     * @param menuLabel
+     */
+    handlePublish(menuLabel) {
+      const that = this
+      const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo
+      that.$confirm({
+        title: '鎻愮ず',
+        content: `纭${menuLabel}鍚楋紵`,
+        okText: '纭',
+        cancelText: '鍙栨秷',
+        onOk: () => {
+          dncApi.documentPublishApi(docId)
+            .then(res => {
+              if (res.success) {
+                this.reloadDocumentListData({ docClassCode: param, attributionId, attributionType })
+                this.$bus.$emit('reloadMainBottomTableData', 'documentVersion')
+                that.$notification.success({
+                  message: '娑堟伅',
+                  description: res.message
+                })
+              } else {
+                that.$notification.error({
+                  message: '娑堟伅',
+                  description: res.message
+                })
+              }
+            })
+            .catch(err => {
+              that.$notification.error({
+                message: '娑堟伅',
+                description: err.message
+              })
+            })
+            .finally(() => {
+              that.$destroyAll()
+            })
+        },
+        onCancel() {
+          that.$destroyAll()
+        }
+      })
+    },
+
+    /**
+     * 閲嶆柊鍙戝竷褰撳墠鍙抽敭閫変腑鏂囨。骞堕噸鏂板彂甯冮��鍥炰笂涓�鏂囨。鐗堟湰
+     * @param menuLabel
+     */
+    handleRepublish(menuLabel) {
+      const that = this
+      const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo
+      that.$confirm({
+        title: '鎻愮ず',
+        content: `纭${menuLabel}鍚楋紵`,
+        okText: '纭',
+        cancelText: '鍙栨秷',
+        onOk: () => {
+          dncApi.documentRepublishApi(docId)
+            .then(res => {
+              if (res.success) {
+                this.reloadDocumentListData({ docClassCode: param, attributionId, attributionType })
+                that.$notification.success({
+                  message: '娑堟伅',
+                  description: res.message
+                })
+              } else {
+                that.$notification.error({
+                  message: '娑堟伅',
+                  description: res.message
+                })
+              }
+            })
+            .catch(err => {
+              that.$notification.error({
+                message: '娑堟伅',
+                description: err.message
+              })
+            })
+            .finally(() => {
+              that.$destroyAll()
+            })
+        },
+        onCancel() {
+          that.$destroyAll()
+        }
+      })
+    },
+
+    /**
+     * 褰掓。褰撳墠鍙抽敭閫変腑鏂囨。涓斿悗缁棤娉曠户缁彂甯冩垨褰掓。
+     * @param menuLabel
+     */
+    handlePigeonhole(menuLabel) {
+      const that = this
+      const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo
+      that.$confirm({
+        title: '鎻愮ず',
+        content: `${menuLabel}鍚庝笉鍙彇娑堬紝纭${menuLabel}鍚楋紵`,
+        okText: '纭',
+        cancelText: '鍙栨秷',
+        onOk: () => {
+          dncApi.documentPigeonholeApi(docId)
+            .then(res => {
+              if (res.success) {
+                this.reloadDocumentListData({ docClassCode: param, attributionId, attributionType })
+                that.$notification.success({
+                  message: '娑堟伅',
+                  description: res.message
+                })
+              } else {
+                that.$notification.error({
+                  message: '娑堟伅',
+                  description: res.message
+                })
+              }
+            })
+            .catch(err => {
+              that.$notification.error({
+                message: '娑堟伅',
+                description: err.message
+              })
+            })
+            .finally(() => {
+              that.$destroyAll()
+            })
+        },
+        onCancel() {
+          that.$destroyAll()
+        }
+      })
+    },
+
+    // 鎺у埗鍙抽敭鑿滃崟鍏抽棴
+    handleMenuClose() {
+      this.$refs.tableContextMenuRef.menuVisible = false
+      document.body.removeEventListener('click', this.handleMenuClose)
+    },
+
+    triggerCorrespondingMethod({ methodName, modalTitle }) {
+      if (this[methodName]) this[methodName](modalTitle)
     }
   }
+}
 </script>
 
 <style scoped>
-  /deep/ .ant-table-tbody .ant-table-row {
-    cursor: pointer;
-  }
+/deep/ .ant-table-tbody .ant-table-row {
+  cursor: pointer;
+}
 </style>
\ No newline at end of file

--
Gitblit v1.9.3