DNC模块:
1、解决点击tabs栏空白处出现空内容组件问题
2、新增树内容搜索时若清空内容后还原为搜索前展开的树节点的功能
产品结构树:
1、工艺和工步层级开放其他文档列表的展示
2、零件层级下新增工艺规程版本层级,并实现工艺规程版本层级的相应功能(增删改)
3、解决因设备结构树数据未加载完成就跳转至产品结构树页面导致接口获取到的前页面方法影响后页面从而出现混乱问题
已添加2个文件
已修改11个文件
547 ■■■■ 文件已修改
src/views/dnc/base/modules/DeviceStructure/DeviceStructureMain.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainBottom.vue 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainTop.vue 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Part/PartModal.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Process/ProcessModal.vue 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProcessSpecVersion/ProcessSpecVersionModal.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProcessSpecVersion/ProcessSpecVersionModalForm.vue 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepModalForm.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProductStructureMainBottom.vue 75 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProductStructureTree.vue 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProductStructureTreeContextMenu.vue 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/DeviceStructure/DeviceStructureMain.vue
@@ -37,7 +37,7 @@
      DeviceStructureMainBottom
    },
    created() {
      this.$bus.$on('sendCurrentTreeNodeInfo', this.receiveCurrentTreeNodeInfo)
      this.$bus.$on('sendDeviceTreeNodeInfo', this.receiveCurrentTreeNodeInfo)
    },
    data() {
      return {
@@ -58,7 +58,6 @@
            if (this.$refs.mainTopRef) this.$refs.mainTopRef.releaseLoadDocumentListApi()
          })
        }
        console.log('currentTreeNodeInfo------------------', this.currentTreeNodeInfo)
      }
    }
  }
src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainBottom.vue
@@ -1,30 +1,31 @@
<template>
  <a-tabs style="height: 100%" v-model="activeTabKey" @change="handleTabChange">
    <a-tab-pane :key="1" tab="设备属性" v-if="currentTreeNodeInfo.type===2&&!currentDocumentInfo.docId">
      <DeviceInfo :currentLevelDetails="currentTreeNodeInfo.entity" :size="containerSize"/>
    </a-tab-pane>
    <template v-if="currentDocumentInfo.docId">
      <a-tab-pane :key="1" tab="文档属性">
        <DocumentInfo :currentLevelDetails="currentDocumentInfo" :size="containerSize"/>
  <div>
    <a-tabs v-model="activeTabKey" @change="handleTabChange">
      <a-tab-pane :key="1" tab="设备属性" v-if="currentTreeNodeInfo.type===2&&!currentDocumentInfo.docId">
        <DeviceInfo :currentLevelDetails="currentTreeNodeInfo.entity" :size="containerSize"/>
      </a-tab-pane>
      <a-tab-pane :key="2" tab="预览">
        <FilePreview ref="filePreviewRef" :currentDocumentInfo="currentDocumentInfo"/>
      </a-tab-pane>
      <template v-if="currentDocumentInfo.docId">
        <a-tab-pane :key="1" tab="文档属性">
          <DocumentInfo :currentLevelDetails="currentDocumentInfo" :size="containerSize"/>
        </a-tab-pane>
      <a-tab-pane :key="3" tab="文档版本">
        <DocumentVersionTableList ref="documentVersionTableRef" :currentDocumentInfo="currentDocumentInfo"
                                  @handleTableContextMenuOpen="handleTableContextMenuOpen"
                                  @releaseFilePreviewApi="releaseFilePreviewApi"
                                  :size="containerSize"/>
      </a-tab-pane>
    </template>
        <a-tab-pane :key="2" tab="预览">
          <FilePreview ref="filePreviewRef" :currentDocumentInfo="currentDocumentInfo"/>
        </a-tab-pane>
        <a-tab-pane :key="3" tab="文档版本">
          <DocumentVersionTableList ref="documentVersionTableRef" :currentDocumentInfo="currentDocumentInfo"
                                    @handleTableContextMenuOpen="handleTableContextMenuOpen"
                                    @releaseFilePreviewApi="releaseFilePreviewApi"
                                    :size="containerSize"/>
        </a-tab-pane>
      </template>
    </a-tabs>
    <TableContextMenu :tableRowInfo="currentRightClickedTableRowInfo" ref="tableContextMenuRef"/>
  </a-tabs>
  </div>
</template>
<script>
  import DeviceInfo from './Device/DeviceInfo'
  import DocumentInfo from '../../../common/DocumentInfo'
src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainTop.vue
@@ -1,22 +1,24 @@
<template>
  <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="发送">
      <HasSentDocumentTableList ref="hasSentDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo"
                                @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/>
    </a-tab-pane>
  <div>
    <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="发送">
        <HasSentDocumentTableList ref="hasSentDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo"
                                  @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/>
      </a-tab-pane>
    <a-tab-pane :key="2" tab="接收">
      <HasReceivedDocumentTableList ref="hasReceivedDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo"
                                    @handleTableContextMenuOpen="handleTableContextMenuOpen"
                                    :size="tableContainerSize"/>
    </a-tab-pane>
      <a-tab-pane :key="2" tab="接收">
        <HasReceivedDocumentTableList ref="hasReceivedDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo"
                                      @handleTableContextMenuOpen="handleTableContextMenuOpen"
                                      :size="tableContainerSize"/>
      </a-tab-pane>
    </a-tabs>
    <TableContextMenu :tableRowInfo="currentRightClickedTableRowInfo" ref="tableContextMenuRef"/>
    <DocumentBatchDeleteModal :currentDocumentInfo="currentRightClickedTableRowInfo" :size="tableContainerSize"
                              @reloadDocumentListData="reloadDocumentListData" ref="documentBatchDeleteModalRef"/>
  </a-tabs>
  </div>
</template>
<script>
src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue
@@ -59,6 +59,7 @@
        treeDataSource: [],
        selectedKeys: [],
        expandedKeys: [],
        beforeSearchExpandedKeys: [],
        searchValue: '',
        dataList: [],
        autoExpandParent: true,
@@ -88,8 +89,8 @@
              this.allTreeKeys = []
              this.treeDataSource = res.result
              this.generateList(this.treeDataSource)
              this.expandedKeys = this.allTreeKeys
              this.$bus.$emit('sendCurrentTreeNodeInfo', this.treeDataSource[0])
              this.expandedKeys = this.beforeSearchExpandedKeys = this.allTreeKeys
              this.$bus.$emit('sendDeviceTreeNodeInfo', this.treeDataSource[0])
            } else {
              this.$message.warn(res.message)
            }
@@ -115,7 +116,7 @@
        this.currentSelected = Object.assign({}, record)
        this.selectedKeys = selectedKeys
        // å‘右侧父级组件发送当前选中树节点信息
        this.$bus.$emit('sendCurrentTreeNodeInfo', this.currentSelected)
        this.$bus.$emit('sendDeviceTreeNodeInfo', this.currentSelected)
      },
      /**
@@ -135,27 +136,37 @@
       * @param expandedKeys å±•开项key
       */
      handleTreeExpand(expandedKeys) {
        this.expandedKeys = expandedKeys
        this.expandedKeys = this.beforeSearchExpandedKeys = expandedKeys
        console.log('beforeSearchExpandedKeys', this.beforeSearchExpandedKeys)
        this.autoExpandParent = false
      },
      /* è¾“入查询内容变化时触发 */
      handleSearchInputChange() {
        let search = this.searchInput
        let expandedKeys = this.dataList
          .map(item => {
            if (item.title != null) {
              if (item.title.indexOf(search) > -1) {
                return this.getParentKey(item.key, this.treeDataSource)
        let expandedKeys
        let autoExpandParent
        if (search !== '') {
          expandedKeys = this.dataList
            .map(item => {
              if (item.title != null) {
                if (item.title.indexOf(search) > -1) {
                  return this.getParentKey(item.key, this.treeDataSource)
                }
                return null
              }
              return null
            }
          })
          .filter((item, i, self) => item && self.indexOf(item) === i)
            })
            .filter((item, i, self) => item && self.indexOf(item) === i)
          autoExpandParent = true
        } else {
          expandedKeys = this.beforeSearchExpandedKeys
          autoExpandParent = false
        }
        Object.assign(this, {
          expandedKeys,
          searchValue: search,
          autoExpandParent: true
          autoExpandParent
        })
      },
src/views/dnc/base/modules/ProductStructure/Part/PartModal.vue
@@ -62,8 +62,8 @@
        this.$nextTick(() => {
          if (this.$refs.realForm) {
            this.$refs.realForm.add({
              productId: this.currentTreeNodeInfo.productId,
              componentId: this.currentTreeNodeInfo.componentId
              productId: this.currentTreeNodeInfo.entity.productId,
              componentId: this.currentTreeNodeInfo.entity.componentId
            })
          }
        })
src/views/dnc/base/modules/ProductStructure/Process/ProcessModal.vue
@@ -69,24 +69,6 @@
        })
      },
      /**
       * ç‚¹å‡»é›¶ä»¶åˆ›å»ºé›¶ä»¶ä¸‹çº§å·¥åº
       */
      handlePartsAddRelative() {
        this.isAddNextLevel = true
        this.visible = true
        this.$nextTick(() => {
          if (this.$refs.realForm) {
            this.$refs.realForm.add({
              productId: this.currentTreeNodeInfo.entity.productId,
              componentId: this.currentTreeNodeInfo.entity.componentId,
              partsId: this.currentTreeNodeInfo.entity.partsId
            })
          }
        })
      },
      /**
       * ç‚¹å‡»å·¥åºæ·»åŠ åŒçº§å·¥åº
       */
@@ -104,6 +86,22 @@
        })
      },
      // åˆ›å»ºå·¥è‰ºè§„程版本下级工序
      handleVersionAddChild() {
        this.isAddNextLevel = true
        this.visible = true
        this.$nextTick(() => {
          if (this.$refs.realForm) {
            this.$refs.realForm.add({
              productId: this.currentTreeNodeInfo.entity.productId,
              componentId: this.currentTreeNodeInfo.entity.componentId,
              partsId: this.currentTreeNodeInfo.entity.partsId,
              psvId: this.currentTreeNodeInfo.id
            })
          }
        })
      },
      /**
       * ç¼–辑工序信息
       */
src/views/dnc/base/modules/ProductStructure/ProcessSpecVersion/ProcessSpecVersionModal.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,106 @@
<template>
  <j-modal
    :title="title"
    :width="width"
    :visible="visible"
    switchFullscreen
    :maskClosable="false"
    @ok="handleOk"
    @cancel="handleCancel"
    cancelText="关闭">
    <ProcessSpecVersionModalForm ref="realForm" @ok="submitCallback" :allDeviceList="allDeviceList"/>
  </j-modal>
</template>
<script>
  import dncApi from '@/api/dnc'
  import ProcessSpecVersionModalForm from './ProcessSpecVersionModalForm.vue'
  export default {
    name: 'ProcessSpecVersionModal',
    components: {
      ProcessSpecVersionModalForm
    },
    props: {
      currentTreeNodeInfo: {
        type: Object
      }
    },
    data() {
      return {
        title: '',
        width: 500,
        visible: false,
        allDeviceList: [],
        isAddNextLevel: false // æ˜¯å¦ä¸ºæ·»åŠ ä¸‹çº§ï¼Œä½œä¸ºæ ‘èŠ‚ç‚¹æ˜¯å¦å±•å¼€çš„åˆ¤æ–­
      }
    },
    created() {
      this.$bus.$on('treeMenuItemMethodTrigger', this.triggerCorrespondingMethod)
    },
    methods: {
      handleOk() {
        this.$refs.realForm.submitForm()
      },
      // åˆ›å»ºé›¶ä»¶ä¸‹çº§å·¥è‰ºè§„程版本
      handlePartsAddRelative() {
        this.isAddNextLevel = true
        this.visible = true
        this.$nextTick(() => {
          if (this.$refs.realForm) {
            this.$refs.realForm.add({
              productId: this.currentTreeNodeInfo.entity.productId,
              componentId: this.currentTreeNodeInfo.entity.componentId,
              partsId: this.currentTreeNodeInfo.entity.partsId
            })
          }
        })
      },
      // åˆ›å»ºåŒçº§å·¥è‰ºè§„程版本
      handleVersionAdd() {
        this.isAddNextLevel = false
        this.visible = true
        this.$nextTick(() => {
          if (this.$refs.realForm) {
            this.$refs.realForm.add({
              productId: this.currentTreeNodeInfo.entity.productId,
              componentId: this.currentTreeNodeInfo.entity.componentId,
              partsId: this.currentTreeNodeInfo.entity.partsId
            })
          }
        })
      },
      // ç¼–辑工艺规程版本
      handleVersionEdit() {
        this.isAddNextLevel = false
        this.visible = true
        this.$nextTick(() => {
          if (this.$refs.realForm) {
            this.$refs.realForm.edit({ id: this.currentTreeNodeInfo.id, ...this.currentTreeNodeInfo.entity })
          }
        })
      },
      submitCallback() {
        this.$emit('submitSuccess', this.isAddNextLevel)
        this.visible = false
      },
      handleCancel() {
        this.$emit('close')
        this.visible = false
      },
      triggerCorrespondingMethod({ methodName, modalTitle }) {
        if (this[methodName]) {
          this[methodName]()
          this.title = modalTitle
        }
      }
    }
  }
</script>
src/views/dnc/base/modules/ProductStructure/ProcessSpecVersion/ProcessSpecVersionModalForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,108 @@
<template>
  <a-spin :spinning="confirmLoading">
    <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
      <a-row>
        <a-col :span="24">
          <a-form-model-item label="工艺规程版本号">
            <a-input v-model="model.processSpecVersionCode" placeholder="请输入工艺规程版本号"/>
          </a-form-model-item>
        </a-col>
        <a-col :span="24">
          <a-form-model-item label="工艺规程名称">
            <a-input v-model="model.processSpecVersionName" placeholder="请输入工艺规程名称"/>
          </a-form-model-item>
        </a-col>
        <a-col :span="24">
          <a-form-model-item label="描述">
            <a-textarea v-model="model.description" placeholder="请输入描述"/>
          </a-form-model-item>
        </a-col>
      </a-row>
    </a-form-model>
  </a-spin>
</template>
<script>
  import { httpAction, getAction } from '@/api/manage'
  export default {
    name: 'ProcessSpecVersionModalForm',
    components: {},
    data() {
      return {
        model: {},
        labelColLong: {
          xs: { span: 24 },
          sm: { span: 6 }
        },
        wrapperColLong: {
          xs: { span: 24 },
          sm: { span: 18 }
        },
        confirmLoading: false,
        validatorRules: {
          processCode: [
            { required: true, message: '请输入工序号!' }
          ],
          processName: [
            { required: true, message: '请输入工序名称!' }
          ]
        },
        url: {
          add: '/nc/processSpecVersion/add',
          edit: '/nc/processSpecVersion/edit'
        }
      }
    },
    created() {
      //备份model原始值
      this.modelDefault = JSON.parse(JSON.stringify(this.model))
    },
    methods: {
      add(params) {
        this.edit({ ...this.modelDefault, ...params })
      },
      edit(record) {
        this.model = Object.assign({}, record)
        console.log('model', this.model)
      },
      submitForm() {
        const that = this
        // è§¦å‘表单验证
        this.$refs.form.validate(valid => {
          if (valid) {
            that.confirmLoading = true
            let httpUrl = ''
            let method = ''
            if (!this.model.id) {
              httpUrl += this.url.add
              method = 'post'
            } else {
              httpUrl += this.url.edit + `/${this.model.id}`
              method = 'put'
            }
            httpAction(httpUrl, this.model, method).then((res) => {
              if (res.success) {
                that.$notification.success({
                  message: '消息',
                  description: res.message
                })
                that.$emit('ok')
              } else {
                that.$notification.warning({
                  message: '消息',
                  description: res.message
                })
              }
            }).finally(() => {
              that.confirmLoading = false
            })
          }
        })
      }
    }
  }
</script>
src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepModalForm.vue
@@ -4,12 +4,12 @@
      <a-row>
        <a-col :span="12">
          <a-form-model-item label="工步号" prop="stepCode">
            <a-input v-model="model.stepCode" placeholder="请输入工序号"></a-input>
            <a-input v-model="model.stepCode" placeholder="请输入工步号"></a-input>
          </a-form-model-item>
        </a-col>
        <a-col :span="12">
          <a-form-model-item label="工步名称" prop="stepName">
            <a-input v-model="model.stepName" placeholder="请输入工序名称"></a-input>
            <a-input v-model="model.stepName" placeholder="请输入工步名称"></a-input>
          </a-form-model-item>
        </a-col>
      </a-row>
src/views/dnc/base/modules/ProductStructure/ProductStructureMainBottom.vue
@@ -1,50 +1,51 @@
<template>
  <a-tabs style="height: 100%" v-model="activeTabKey" v-if="Object.keys(currentLevelInfo).length>0"
          @change="handleTabChange">
    <a-tab-pane :key="1" tab="属性信息" v-if="currentLevelInfo.type===1">
      <ProductInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/>
    </a-tab-pane>
    <a-tab-pane :key="1" tab="属性信息" v-if="currentLevelInfo.type===2">
      <ComponentInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/>
    </a-tab-pane>
    <a-tab-pane :key="1" tab="零件属性" v-if="currentLevelInfo.type===3">
      <PartInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/>
    </a-tab-pane>
    <a-tab-pane :key="1" tab="工序属性" v-if="currentLevelInfo.type===5">
      <ProcessInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/>
    </a-tab-pane>
    <a-tab-pane :key="1" tab="工步属性" v-if="currentLevelInfo.type===6">
      <ProcessStepInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/>
    </a-tab-pane>
    <template v-if="currentLevelInfo.hasOwnProperty('attributionType')">
      <a-tab-pane :key="1" tab="文档属性">
        <DocumentInfo :currentLevelDetails="currentLevelInfo" :size="containerSize"/>
  <div v-if="currentLevelInfo.type!==4">
    <a-tabs v-model="activeTabKey" v-if="Object.keys(currentLevelInfo).length>0" @change="handleTabChange">
      <a-tab-pane :key="1" tab="属性信息" v-if="currentLevelInfo.type===1">
        <ProductInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/>
      </a-tab-pane>
      <a-tab-pane :key="2" tab="预览">
        <FilePreview ref="filePreviewRef" :currentDocumentInfo="currentLevelInfo"/>
      <a-tab-pane :key="1" tab="属性信息" v-if="currentLevelInfo.type===2">
        <ComponentInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/>
      </a-tab-pane>
      <a-tab-pane :key="3" tab="文档版本">
        <DocumentVersionTableList ref="documentVersionTableRef" :currentDocumentInfo="currentLevelInfo"
                                  @handleTableContextMenuOpen="handleTableContextMenuOpen"
                                  @releaseFilePreviewApi="releaseFilePreviewApi"
                                  :size="containerSize"/>
      <a-tab-pane :key="1" tab="零件属性" v-if="currentLevelInfo.type===3">
        <PartInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/>
      </a-tab-pane>
      <a-tab-pane :key="4" tab="使用设备" v-if="currentLevelInfo.attributionType===5">
        <UseDocumentEquipmentTableList ref="useDocumentEquipmentTableRef" :currentDocumentInfo="currentLevelInfo"
                                       :size="containerSize"/>
      <a-tab-pane :key="1" tab="工序属性" v-if="currentLevelInfo.type===5">
        <ProcessInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/>
      </a-tab-pane>
    </template>
      <a-tab-pane :key="1" tab="工步属性" v-if="currentLevelInfo.type===6">
        <ProcessStepInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/>
      </a-tab-pane>
      <template v-if="currentLevelInfo.hasOwnProperty('attributionType')">
        <a-tab-pane :key="1" tab="文档属性">
          <DocumentInfo :currentLevelDetails="currentLevelInfo" :size="containerSize"/>
        </a-tab-pane>
        <a-tab-pane :key="2" tab="预览">
          <FilePreview ref="filePreviewRef" :currentDocumentInfo="currentLevelInfo"/>
        </a-tab-pane>
        <a-tab-pane :key="3" tab="文档版本">
          <DocumentVersionTableList ref="documentVersionTableRef" :currentDocumentInfo="currentLevelInfo"
                                    @handleTableContextMenuOpen="handleTableContextMenuOpen"
                                    @releaseFilePreviewApi="releaseFilePreviewApi"
                                    :size="containerSize"/>
        </a-tab-pane>
        <a-tab-pane :key="4" tab="使用设备" v-if="currentLevelInfo.attributionType===5">
          <UseDocumentEquipmentTableList ref="useDocumentEquipmentTableRef" :currentDocumentInfo="currentLevelInfo"
                                         :size="containerSize"/>
        </a-tab-pane>
      </template>
    </a-tabs>
    <TableContextMenu :tableRowInfo="currentRightClickedTableRowInfo" ref="tableContextMenuRef"/>
  </a-tabs>
  </div>
</template>
<script>
src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue
@@ -1,21 +1,23 @@
<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 v-if="currentTreeNodeInfo.type!==4">
    <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">
        <NcDocumentTableList ref="ncDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo"
                             @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/>
      </a-tab-pane>
    <a-tab-pane :key="1" tab="其他文档" v-else>
      <OtherDocumentTableList ref="otherDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo"
                              @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/>
    </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"/>
    <DocumentBatchDeleteModal :currentDocumentInfo="currentRightClickedTableRowInfo" :size="tableContainerSize"
                              @reloadDocumentListData="reloadDocumentListData" ref="documentBatchDeleteModalRef"/>
  </a-tabs>
  </div>
</template>
<script>
@@ -30,10 +32,11 @@
    components: { DocumentBatchDeleteModal, TableContextMenu, OtherDocumentTableList, NcDocumentTableList },
    data() {
      return {
        activeTabKey: 1,
        activeTabKey: 2,
        tableContainerSize: 'small',
        currentRightClickedTableRowInfo: {},
        currentTreeNodeInfo: {}
        currentTreeNodeInfo: {},
        hasLoadedDataTabKeyArray: []
      }
    },
    created() {
@@ -64,18 +67,35 @@
        // ä»Žæ ‘组件接受树节点信息后从父组件流入子组件
        this.currentTreeNodeInfo = treeNodeInfo
        // æ¸…空上一节点已经加载过得文档列表tabKey
        this.hasLoadedDataTabKeyArray = []
        if (treeNodeInfo.type === 5 || treeNodeInfo.type === 6) {
          this.activeTabKey = 1
          this.$nextTick(() => {
            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)
      },
      /**
       * 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)
        }
      },
      /**
       * æ–‡æ¡£ä»¥åŠNC程序导入/出库/入库成功后触发重新加载文档列表
       * @param docClassCode æ–‡æ¡£ç±»åˆ«
       * @param attributionId èŠ‚ç‚¹Id
src/views/dnc/base/modules/ProductStructure/ProductStructureTree.vue
@@ -36,6 +36,7 @@
            <a-icon slot="product" type="shopping"/>
            <a-icon slot="component" type="camera"/>
            <a-icon slot="part" type="hdd"/>
            <a-icon slot="processSpecVersion" type="tag"/>
            <a-icon slot="process" type="apartment"/>
            <a-icon slot="processStep" type="tool"/>
          </a-tree>
@@ -50,6 +51,8 @@
    <ComponentModal :currentTreeNodeInfo="rightClickSelected" @submitSuccess="modalFormSubmitSuccess"/>
    <!--零件弹窗-->
    <PartModal :currentTreeNodeInfo="rightClickSelected" @submitSuccess="modalFormSubmitSuccess"/>
    <!--工艺规程版本弹窗-->
    <ProcessSpecVersionModal :currentTreeNodeInfo="rightClickSelected" @submitSuccess="modalFormSubmitSuccess"/>
    <!--工序弹窗-->
    <ProcessModal :currentTreeNodeInfo="rightClickSelected" @submitSuccess="modalFormSubmitSuccess"/>
    <!--工步弹窗-->
@@ -66,6 +69,7 @@
  import ProductModal from './Product/ProductModal'
  import ComponentModal from './Component/ComponentModal'
  import PartModal from './Part/PartModal'
  import ProcessSpecVersionModal from './ProcessSpecVersion/ProcessSpecVersionModal'
  import ProcessModal from './Process/ProcessModal'
  import ProcessStepModal from './ProcessStep/ProcessStepModal'
  import AssignPermissionModal from './Permission/AssignPermissionModal'
@@ -76,6 +80,7 @@
      AssignPermissionModal,
      ProcessStepModal,
      ProcessModal,
      ProcessSpecVersionModal,
      PartModal,
      ComponentModal,
      ProductModal,
@@ -89,6 +94,7 @@
        treeDataSource: [],
        selectedKeys: [],
        expandedKeys: [],
        beforeSearchExpandedKeys: [],
        searchValue: '',
        dataList: [],
        autoExpandParent: true,
@@ -116,7 +122,7 @@
            this.treeDataSource = res.list
            this.generateList(this.treeDataSource)
            // this.expandedKeys = this.allTreeKeys
            if (this.expandedKeys.length === 0) this.expandedKeys = [this.treeDataSource[0].id]
            if (this.expandedKeys.length === 0) this.expandedKeys = this.beforeSearchExpandedKeys = [this.treeDataSource[0].id]
          } else {
            this.$message.warn(res.message)
          }
@@ -203,27 +209,36 @@
       * @param expandedKeys å±•开项key
       */
      handleTreeExpand(expandedKeys) {
        this.expandedKeys = expandedKeys
        this.expandedKeys = this.beforeSearchExpandedKeys = expandedKeys
        this.autoExpandParent = false
      },
      /* è¾“入查询内容变化时触发 */
      handleSearchInputChange() {
        let search = this.searchInput
        let expandedKeys = this.dataList
          .map(item => {
            if (item.title != null) {
              if (item.title.indexOf(search) > -1) {
                return this.getParentKey(item.key, this.treeDataSource)
        let expandedKeys
        let autoExpandParent
        if (search !== '') {
          expandedKeys = this.dataList
            .map(item => {
              if (item.title != null) {
                if (item.title.indexOf(search) > -1) {
                  return this.getParentKey(item.key, this.treeDataSource)
                }
                return null
              }
              return null
            }
          })
          .filter((item, i, self) => item && self.indexOf(item) === i)
            })
            .filter((item, i, self) => item && self.indexOf(item) === i)
          autoExpandParent = true
        } else {
          expandedKeys = this.beforeSearchExpandedKeys
          autoExpandParent = false
        }
        Object.assign(this, {
          expandedKeys,
          searchValue: search,
          autoExpandParent: true
          autoExpandParent
        })
      },
@@ -284,6 +299,9 @@
          case 3:
            treeNode.slots = { icon: 'part' }
            break
          case 4:
            treeNode.slots = { icon: 'processSpecVersion' }
            break
          case 5:
            treeNode.slots = { icon: 'process' }
            break
src/views/dnc/base/modules/ProductStructure/ProductStructureTreeContextMenu.vue
@@ -51,11 +51,20 @@
          //零件
          part: [
            { label: '添加零件', code: 'parts_add', icon: 'plus', isCommonMethod: false },
            { label: '创建工序', code: 'parts_add_relative', icon: 'plus', isCommonMethod: false },
            { label: '创建工艺规程版本', code: 'parts_add_relative', icon: 'plus', isCommonMethod: false },
            // { label: '创建工序', code: 'parts_add_relative', icon: 'plus', isCommonMethod: false },
            { label: '编辑零件信息', code: 'parts_edit', icon: 'edit', isCommonMethod: false },
            // {  label: '导出文档', code: 'parts_export', icon: 'export', isCommonMethod: true },
            { label: '导入其他文档', code: 'parts_import', icon: 'import', isCommonMethod: true },
            { label: '删除', code: 'parts_delete', icon: 'delete', isCommonMethod: true },
            { label: '权限配置', code: 'public_assign_permission', icon: 'idcard', isCommonMethod: true }
          ],
          //工艺规程版本
          processSpecVersion: [
            { label: '创建工艺规程版本', code: 'version_add', icon: 'plus', isCommonMethod: false },
            { label: '创建工序', code: 'version_add_child', icon: 'plus', isCommonMethod: false },
            { label: '编辑工艺规程版本信息', code: 'version_edit', icon: 'edit', isCommonMethod: false },
            { label: '删除', code: 'version_delete', icon: 'delete', isCommonMethod: true },
            { label: '权限配置', code: 'public_assign_permission', icon: 'idcard', isCommonMethod: true }
          ],
          //工序
@@ -64,8 +73,8 @@
            { label: '创建工步', code: 'process_add_child', icon: 'plus', isCommonMethod: false },
            { label: '编辑工序信息', code: 'process_edit', icon: 'edit', isCommonMethod: false },
            { label: '删除', code: 'process_delete', icon: 'delete', isCommonMethod: true },
            // {  label: '导出NC程序', code: 'process_export', icon: 'import', isCommonMethod: true },
            { label: '导入NC程序', code: 'process_import', icon: 'export', isCommonMethod: true },
            // {  label: '导出NC程序', code: 'process_export', icon: 'export', isCommonMethod: true },
            { label: '导入NC程序', code: 'process_import', icon: 'import', isCommonMethod: true },
            { label: '权限配置', code: 'public_assign_permission', icon: 'idcard', isCommonMethod: true }
          ],
          //工步
@@ -74,7 +83,7 @@
            { label: '编辑工步信息', code: 'processStep_edit', icon: 'edit', isCommonMethod: false },
            { label: '删除', code: 'processStep_delete', icon: 'delete', isCommonMethod: true },
            // {  label: '导出NC程序', code: 'processStep_export', icon: 'import', isCommonMethod: true },
            { label: '导入NC程序', code: 'processStep_import', icon: 'export', isCommonMethod: true },
            { label: '导入NC程序', code: 'processStep_import', icon: 'import', isCommonMethod: true },
            { label: '权限配置', code: 'public_assign_permission', icon: 'idcard', isCommonMethod: true }
          ]
        }
@@ -89,6 +98,8 @@
            return 'component'
          case 3:
            return 'part'
          case 4:
            return 'processSpecVersion'
          case 5:
            return 'process'
          case 6: