lyh
8 天以前 76f83ad33466ea704eec9a121d2e0a22c1828a84
src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue
@@ -1,18 +1,32 @@
<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===5||currentTreeNodeInfo.type===6">
      <NcDocumentTableList ref="ncDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo"
                           @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="1" tab="其他文档" v-else>
      <OtherDocumentTableList ref="otherDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo"
                              @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>
@@ -20,31 +34,122 @@
  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 },
    components: {
      DeviceCustomTypeTableList,
      DocumentBatchDeleteModal,
      TableContextMenu,
      OtherDocumentTableList,
      NcDocumentTableList
    },
    data() {
      return {
        activeTabKey: 1,
        activeTabKey: 2,
        tableContainerSize: 'small',
        isProcessHasDeviceTypeList: false,
        isProcessStepHasDeviceTypeList: false,
        currentRightClickedTableRowInfo: {},
        currentTreeNodeInfo: {}
        currentTreeNodeInfo: {},
        currentClickedTypeInfo: {},
        currentNCDocumentAttributionInfo: {},//当前NC文档的所属级即父级的详细信息(引入设备类后NC挂载至设备类下反之则挂载在工序和工步下)
        hasLoadedDataTabKeyArray: []
      }
    },
    created() {
      this.$bus.$on('sendCurrentTreeNodeInfo', this.receiveCurrentTreeNodeInfo)
      this.$bus.$on('importFileSuccess', this.reloadDocumentListData)
      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 各层级展示权限key
       * @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) {
        const { id, type, autoClickedLevelInfo } = treeNodeInfo
        // 从树组件接受树节点信息后从父组件流入子组件并重置数据
        this.currentClickedTypeInfo = this.currentRightClickedTableRowInfo = {}
        this.currentTreeNodeInfo = treeNodeInfo
        this.currentNCDocumentAttributionInfo = Object.assign({}, {
          attributionId: id,
          attributionType: type,
          docClassCode: 'NC',
          autoClickedLevelInfo
        })
        this.hasLoadedDataTabKeyArray = []
        if (+type === 5 || +type === 6) {
          this.activeTabKey = 1
          this.$nextTick(() => {
            if (this.$refs.deviceCustomTypeTableList) {
              this.$refs.deviceCustomTypeTableList.setQueryParamAndLoadData()
              // 切换树之后清空NC程序列表
              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
        const { autoClickedLevelInfo } = this.currentTreeNodeInfo
        this.currentClickedTypeInfo = Object.assign({}, record)
        this.currentNCDocumentAttributionInfo = Object.assign({}, {
          attributionId: id,
          attributionType,
          docClassCode: 'NC',
          autoClickedLevelInfo
        })
        this.$nextTick(() => {
          if (this.$refs.ncDocumentTableListRef) this.$refs.ncDocumentTableListRef.loadData(1)
        })
      },
      /**
       * 控制右键菜单开启
       * @param record 当前表格行信息
       */
      handleTableContextMenuOpen(record) {
        this.currentRightClickedTableRowInfo = Object.assign({}, record)
        console.log('currentRightClickedTableRowInfo', this.currentRightClickedTableRowInfo)
        this.$refs.tableContextMenuRef.currentMenuLevel = record.param
        this.$refs.tableContextMenuRef.menuStyle.top = event.clientY + 'px'
        this.$refs.tableContextMenuRef.menuStyle.left = event.clientX + 'px'
@@ -53,48 +158,58 @@
      },
      /**
       * 接收树组件传来的当前选中的树节点信息
       * @param treeNodeInfo 树节点信息
       * tab栏切换时触发
       * @param activeTabKey 切换后的tabKey
       */
      receiveCurrentTreeNodeInfo(treeNodeInfo) {
        // 从树组件接受树节点信息后从父组件流入子组件
        this.currentTreeNodeInfo = treeNodeInfo
        // 清空上一节点已经加载过得文档列表tabKey
        if (treeNodeInfo.type === 5 || treeNodeInfo.type === 6) {
          this.$nextTick(() => {
            if (this.$refs.ncDocumentTableListRef) this.$refs.ncDocumentTableListRef.loadData(1)
          })
        } else {
      handleTabChange(activeTabKey) {
        if (!this.hasLoadedDataTabKeyArray.includes(activeTabKey)) {
          this.$nextTick(() => {
            if (this.$refs.otherDocumentTableListRef) this.$refs.otherDocumentTableListRef.loadData(1)
          })
          // 阻止接口在同一文档一次点击内多次触发
          this.hasLoadedDataTabKeyArray.push(activeTabKey)
        }
      },
      /**
       * 文档以及NC程序导入/出库/入库成功后触发重新加载文档列表
       * 文档以及NC程序导入/出库/入库/取消出库/发布/归档成功后触发重新加载文档列表
       * @param docClassCode 文档类别
       * @param attributionId 节点Id
       * @param attributionType 文档父级type类型
       * @param attributionId 文档父级Id
       */
      reloadDocumentListData({ docClassCode, attributionId }) {
        // 如果上传的文档不是所属于当前所展示节点的文档则不重新获取文档列表
        if (this.currentTreeNodeInfo.id !== attributionId) return
      reloadDocumentListData({ docClassCode, attributionType, attributionId }) {
        console.log('docClassCode, attributionType, attributionId', docClassCode, attributionType, attributionId)
        // 在此处设备NC文档父级参数是可此方法是结构树以及设备类两种不同导入方式的共同出口
        this.currentNCDocumentAttributionInfo = Object.assign({}, { docClassCode, attributionId, attributionType })
        // 判断当前右侧展示的文档的所属是否是当前左键选中树节点或设备类,若不是当前左键选中的则在导入后不刷新右侧的文档列表(避免无效刷新)
        // 判断是否是在文档列表中进行出库/入库/发布/归档等操作,若是在文档列表中操作则操作成功后直接刷新文档列表
        if (!this.currentRightClickedTableRowInfo.hasOwnProperty('docId')) {
          if (this.currentRightClickedTableRowInfo.hasOwnProperty('deviceManagementId')) {
            // 此种情况是在引入设备类并在设备类列表中进行NC文档导入
            if (this.currentClickedTypeInfo.id !== attributionId) return
          } else {
            // 此种情况是在结构树节点上进行文档导入
            if (this.currentTreeNodeInfo.id !== attributionId) return
          }
        }
        if (docClassCode === 'NC') {
          if (this.$refs.ncDocumentTableListRef) this.$refs.ncDocumentTableListRef.loadData(1)
          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({ id: docId, docName })
        dncApi.downloadDocumentApi({ docId, docName })
          .then(res => {
            if (res && !res.success) {
            if (!res.success) {
              that.$notification.error({
                message: '消息',
                description: res.message
@@ -109,24 +224,68 @@
          })
      },
      // 删除当前右键选中文档
      handleDelete() {
        const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo
        const that = this
        that.$confirm({
          title: '提示',
          content: `删除后不可取消,确认删除吗?`,
          okText: '确认',
          cancelText: '取消',
          onOk: () => {
            dncApi.deleteDocumentApi({ docId, attributionType, attributionId })
              .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 } = this.currentRightClickedTableRowInfo
        this.$confirm({
        const { docId, docName, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo
        that.$confirm({
          title: '提示',
          content: `确认${menuLabel}吗?`,
          okText: '确认',
          cancelText: '取消',
          onOk: () => {
            dncApi.documentOutboundApi({ id: docId, docName })
            dncApi.documentOutboundApi({ docId, docName })
              .then(res => {
                console.log('res------------------', res)
                if (res.success) {
                  this.reloadDocumentListData({ docClassCode: param, attributionId })
                  that.reloadDocumentListData({ docClassCode: param, attributionId, attributionType })
                  that.$notification.success({
                    message: '消息',
                    description: `${menuLabel}成功`
@@ -144,18 +303,24 @@
                  description: err.message
                })
              })
              .finally(() => {
                that.$destroyAll()
              })
          },
          onCancel: () => {
            that.$destroyAll()
          }
        })
      },
      /**
       * 点击取消出库时触发当前文档取消出库
       * 取消出库当前右键选中文档
       * @param menuLabel
       */
      handleCancelPull(menuLabel) {
        const that = this
        const { docId, param, attributionId } = this.currentRightClickedTableRowInfo
        this.$confirm({
        const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo
        that.$confirm({
          title: '提示',
          content: `确认${menuLabel}吗?`,
          okText: '确认',
@@ -164,7 +329,7 @@
            dncApi.documentCancelOutboundApi(docId)
              .then(res => {
                if (res.success) {
                  this.reloadDocumentListData({ docClassCode: param, attributionId })
                  this.reloadDocumentListData({ docClassCode: param, attributionId, attributionType })
                  that.$notification.success({
                    message: '消息',
                    description: res.message
@@ -182,19 +347,24 @@
                  description: err.message
                })
              })
              .finally(() => {
                that.$destroyAll()
              })
          },
          onCancel() {
            that.$destroyAll()
          }
        })
      },
      /**
       * 点击发布时触发当前文档发布
       * 发布当前右键选中文档
       * @param menuLabel
       */
      handlePublish(menuLabel) {
        const that = this
        const { docId, param, attributionId } = this.currentRightClickedTableRowInfo
        this.$confirm({
        const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo
        that.$confirm({
          title: '提示',
          content: `确认${menuLabel}吗?`,
          okText: '确认',
@@ -203,7 +373,8 @@
            dncApi.documentPublishApi(docId)
              .then(res => {
                if (res.success) {
                  this.reloadDocumentListData({ docClassCode: param, attributionId })
                  this.reloadDocumentListData({ docClassCode: param, attributionId, attributionType })
                  this.$bus.$emit('reloadMainBottomTableData', 'documentVersion')
                  that.$notification.success({
                    message: '消息',
                    description: res.message
@@ -221,18 +392,24 @@
                  description: err.message
                })
              })
              .finally(() => {
                that.$destroyAll()
              })
          },
          onCancel() {
            that.$destroyAll()
          }
        })
      },
      /**
       * 点击重新发布时触发当前文档重新发布退回上一版本
       * 重新发布当前右键选中文档并重新发布退回上一文档版本
       * @param menuLabel
       */
      handleRepublish(menuLabel) {
        const that = this
        const { docId, param, attributionId } = this.currentRightClickedTableRowInfo
        this.$confirm({
        const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo
        that.$confirm({
          title: '提示',
          content: `确认${menuLabel}吗?`,
          okText: '确认',
@@ -241,7 +418,7 @@
            dncApi.documentRepublishApi(docId)
              .then(res => {
                if (res.success) {
                  this.reloadDocumentListData({ docClassCode: param, attributionId })
                  this.reloadDocumentListData({ docClassCode: param, attributionId, attributionType })
                  that.$notification.success({
                    message: '消息',
                    description: res.message
@@ -259,18 +436,24 @@
                  description: err.message
                })
              })
              .finally(() => {
                that.$destroyAll()
              })
          },
          onCancel() {
            that.$destroyAll()
          }
        })
      },
      /**
       * 点击归档时触发当前文档归档且后续无法继续发布或归档
       * 归档当前右键选中文档且后续无法继续发布或归档
       * @param menuLabel
       */
      handlePigeonhole(menuLabel) {
        const that = this
        const { docId, param, attributionId } = this.currentRightClickedTableRowInfo
        this.$confirm({
        const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo
        that.$confirm({
          title: '提示',
          content: `${menuLabel}后不可取消,确认${menuLabel}吗?`,
          okText: '确认',
@@ -279,7 +462,7 @@
            dncApi.documentPigeonholeApi(docId)
              .then(res => {
                if (res.success) {
                  this.reloadDocumentListData({ docClassCode: param, attributionId })
                  this.reloadDocumentListData({ docClassCode: param, attributionId, attributionType })
                  that.$notification.success({
                    message: '消息',
                    description: res.message
@@ -297,13 +480,17 @@
                  description: err.message
                })
              })
              .finally(() => {
                that.$destroyAll()
              })
          },
          onCancel() {
            that.$destroyAll()
          }
        })
      },
      /**
       * 控制右键菜单点击关闭
       */
      // 控制右键菜单关闭
      handleMenuClose() {
        this.$refs.tableContextMenuRef.menuVisible = false
        document.body.removeEventListener('click', this.handleMenuClose)