设备结构树:
1、实现点击设备关联NC程序展示文档详细信息、文件内容预览以及文档内容对比功能
2、实现设备层级导入已接收NC程序功能
全局:
1、解决类似文档出库弹窗在路由跳转后点击后会同时出现多个问题
已重命名1个文件
已修改12个文件
已复制1个文件
已删除3个文件
626 ■■■■■ 文件已修改
src/views/dnc/base/modules/DeviceStructure/DeviceStructureMain.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainBottom.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainTop.vue 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/DeviceStructure/DeviceStructureTreeContextMenu.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentTableList.vue 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/DeviceStructure/Document/HasSentDocumentTableList.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/DeviceStructure/Document/NcDocumentTableList.vue 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/DeviceStructure/Document/OtherDocumentTableList.vue 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/DeviceStructure/HasSentDocumentTableList.vue 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Document/NcDocumentTableList.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Document/OtherDocumentTableList.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProductStructureTree.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProductStructureTreeContextMenu.vue 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/common/DocumentModalForm.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/common/ImportFileModal.vue 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/common/TableContextMenu.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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)
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)
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)
            this.hasLoadedDataTabKeyArray.push(this.activeTabKey)
          }
        })
      },
      /**
       * tab标签切换时触发
       * @param activeTabKey å½“前已激活tab的key
       */
      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 @@
        })
      },
      /**
       * ç‚¹å‡»å‘布时触发当前文档发布
       * @param menuLabel
@@ -357,6 +383,12 @@
        })
      },
      // é‡ç½®tabKey并且释放加载文档列表的接口
      releaseLoadDocumentListApi() {
        this.hasLoadedDataTabKeyArray = []
        this.handleTabChange(this.activeTabKey)
      },
      // æŽ§åˆ¶å³é”®èœå•关闭
      handleMenuClose() {
        this.$refs.tableContextMenuRef.menuVisible = false
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('请设置url.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()
          }
        })
      },
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,但在产品结构树中将设备层级的type设置为4,为保证两个结构树共用的方法能正常运行,因此在此处同样设置为4
        const menuKeyArray = menuKey.split('_')
        const isCommonMethod = this.defaultContextMenuList[level].find(item => item.code === menuKey).isCommonMethod
        // product_add => handleAdd è§¦å‘对应组件事件
src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentTableList.vue
copy from src/views/dnc/base/modules/DeviceStructure/HasReceivedDocumentTableList.vue copy to src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentTableList.vue
Îļþ´Ó src/views/dnc/base/modules/DeviceStructure/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)
      }
    }
  }
src/views/dnc/base/modules/DeviceStructure/Document/HasSentDocumentTableList.vue
ÎļþÃû´Ó src/views/dnc/base/modules/DeviceStructure/HasReceivedDocumentTableList.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)
    },
src/views/dnc/base/modules/DeviceStructure/Document/NcDocumentTableList.vue
ÎļþÒÑɾ³ý
src/views/dnc/base/modules/DeviceStructure/Document/OtherDocumentTableList.vue
ÎļþÒÑɾ³ý
src/views/dnc/base/modules/DeviceStructure/HasSentDocumentTableList.vue
ÎļþÒÑɾ³ý
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)
    },
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)
            }
          }
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('请设置url.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()
          }
        })
      },
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 })
      }
    }
  }
src/views/dnc/common/DocumentModalForm.vue
@@ -58,10 +58,10 @@
        validatorRules: {
          docName: [
            { required: true, message: '请输入文档原名称!' }
          ],
          ]
        },
        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: '消息',
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 @@
       * ç‚¹å‡»å¯¼å…¥æ–‡æ¡£æˆ–NC程序时触发
       * @param treeNodeInfo ç‚¹å‡»æ ‘节点右键菜单导入程序时传入树节点信息
       * @param tableRowInfo å³é”®è¡¨æ ¼è¡Œæ—¶ä¼ å…¥è¡Œä¿¡æ¯
       * @param modalTitle å¼¹çª—标题
       */
      handleImport(treeNodeInfo, tableRowInfo) {
      handleImport(treeNodeInfo, tableRowInfo, modalTitle) {
        this.isUploadMultiple = true
        let attributionId // æ–‡æ¡£æ‰€å±žå±‚级Id
        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)
        }
      }
    }
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 },//文件-指定当前版本