产品结构树:
1、工序和工步层级新增加工设备型号和加工设备类型字段
2、各层级详细信息调整创建人及修改人字段
3、指派到设备窗口布局完成100%
已修改19个文件
1257 ■■■■■ 文件已修改
src/api/dnc.js 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Component/ComponentInfo.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Document/DocumentInfo.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Document/DocumentVersionTableList.vue 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue 937 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Document/NcDocumentTableList.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Document/OtherDocumentTableList.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Part/PartInfo.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Process/ProcessInfo.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Process/ProcessModal.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Process/ProcessModalForm.vue 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepInfo.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepModal.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepModalForm.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Product/ProductInfo.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProductStructureMainBottom.vue 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProductStructureTree.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/common/ImportFileModal.vue 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/dnc.js
@@ -12,14 +12,17 @@
export default {
  //-------------------------产品结构树------------------------------------------------
  // 获取产品结构树
  getProductStructureTreeApi: () => getAction('/nc/product/load/tree'),
  // 获取所有设备的列表
  getAllDeviceListApi: (type) => getAction('/nc/device/list/all'),
  // 导入NC程序/文档
  importDocumentFromLocalApi: ({ params, formData }) => {
    const paramsStringify = querystring.stringify(params)
    return uploadAction(`/nc/doc/add?${paramsStringify}`, formData)
  },
  // 获取指派到设备中的设备树
  getDocumentAssignDeviceTreeApi: ({ attributionType, attributionId }) => getAction(`/nc/device/load/depart/tree/${attributionType}/${attributionId}`),
  // 下载文档
  downloadDocumentApi: ({ id, docName }) => downloadFile(`/nc/doc/download/${id}`, docName),
  // 文档出库
src/views/dnc/base/modules/ProductStructure/Component/ComponentInfo.vue
@@ -11,9 +11,9 @@
    <a-descriptions-item label="处理类型    ">{{currentLevelDetails.processType}}</a-descriptions-item>
    <a-descriptions-item label="结构类型    ">{{currentLevelDetails.structureType}}</a-descriptions-item>
    <a-descriptions-item label="重量" :span="2">{{currentLevelDetails.componentWeight}}</a-descriptions-item>
    <a-descriptions-item label="创建人">{{currentLevelDetails.createUser_dicText}}</a-descriptions-item>
    <a-descriptions-item label="创建人">{{currentLevelDetails.createName}}</a-descriptions-item>
    <a-descriptions-item label="创建时间" :span="2">{{currentLevelDetails.createTime}}</a-descriptions-item>
    <a-descriptions-item label="修改人">{{currentLevelDetails.updateUser_dicText}}</a-descriptions-item>
    <a-descriptions-item label="修改人">{{currentLevelDetails.updateName}}</a-descriptions-item>
    <a-descriptions-item label="修改时间" :span="2">{{currentLevelDetails.updateTime}}</a-descriptions-item>
    <a-descriptions-item label="描述" :span="3">{{currentLevelDetails.description}}</a-descriptions-item>
  </a-descriptions>
src/views/dnc/base/modules/ProductStructure/Document/DocumentInfo.vue
@@ -7,7 +7,11 @@
    <a-descriptions-item label="文档状态">{{currentLevelDetails.docStatus_dictText}}</a-descriptions-item>
    <a-descriptions-item label="系统指定版本">{{currentLevelDetails.publishVersion}}</a-descriptions-item>
    <a-descriptions-item label="出库状态">{{currentLevelDetails.pullStatus_dictText}}</a-descriptions-item>
    <a-descriptions-item label="出库人" :span="2">{{currentLevelDetails.pullUser}}</a-descriptions-item>
    <a-descriptions-item label="出库人" :span="2">{{currentLevelDetails.pullUser_dictText}}</a-descriptions-item>
    <a-descriptions-item label="创建人">{{currentLevelDetails.createBy_dictText}}</a-descriptions-item>
    <a-descriptions-item label="创建时间" :span="2">{{currentLevelDetails.createTime}}</a-descriptions-item>
    <a-descriptions-item label="修改人">{{currentLevelDetails.updateBy_dictText}}</a-descriptions-item>
    <a-descriptions-item label="修改时间" :span="2">{{currentLevelDetails.updateTime}}</a-descriptions-item>
    <a-descriptions-item label="描述" :span="3">{{currentLevelDetails.description}}</a-descriptions-item>
  </a-descriptions>
</template>
src/views/dnc/base/modules/ProductStructure/Document/DocumentVersionTableList.vue
@@ -1,39 +1,87 @@
<template>
  <a-table :columns="columns" :data-source="dataSource" bordered :pagination="false">
  <a-table :columns="columns" :data-source="dataSource" bordered :pagination="false" :size="size" rowKey="fileId">
    <template slot="rowIndex" slot-scope="text,record,index">
      <span :style="{color:setCurrentVersionColor(record.publishFlag)}">{{parseInt(index) + 1}}</span>
    </template>
    <template slot="fileName" slot-scope="text,record,index">
      <span :style="{color:setCurrentVersionColor(record.publishFlag)}">
        {{text}}.{{record.fileSuffix}}
        <span v-if="record.publishFlag">[当前版本]</span>
      </span>
    </template>
    <template slot="docVersion" slot-scope="text,record">
      <span :style="{color:setCurrentVersionColor(record.publishFlag)}">{{text}}</span>
    </template>
    <template slot="fileSize" slot-scope="text,record">
      <span :style="{color:setCurrentVersionColor(record.publishFlag)}">{{(text/1024).toFixed(2)}}KB</span>
    </template>
  </a-table>
</template>
<script>
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import { getAction } from '@/api/manage'
  export default {
    name: 'DocumentVersionTableList',
    mixins: [JeecgListMixin],
    components: {},
    props: {
      currentDocumentInfo: {
        type: Object
      },
      size: {
        type: String
      }
    },
    data() {
      return {
        disableMixinCreated: true,
        queryParams: {},
        columns: [
          {
            title: '序号',
            dataIndex: 'rowIndex',
            key: 'rowIndex',
            width: 65,
            align: 'center',
            customRender: function(t, r, index) {
              return parseInt(index) + 1
            }
          },
          { title: '文件名称', dataIndex: 'fileName', align: 'center' },
          { title: '版本号', dataIndex: 'docVersion', align: 'center' },
          { title: '文件大小', dataIndex: 'fileSize', align: 'center' }
          { title: '序号', dataIndex: 'rowIndex', width: 65, align: 'center', scopedSlots: { customRender: 'rowIndex' } },
          { title: '文件名称', dataIndex: 'fileName', align: 'center', scopedSlots: { customRender: 'fileName' } },
          { title: '版本号', dataIndex: 'docVersion', align: 'center', scopedSlots: { customRender: 'docVersion' } },
          { title: '文件大小', dataIndex: 'fileSize', align: 'center', scopedSlots: { customRender: 'fileSize' } }
        ],
        url: {
          list: ''
          list: '/nc/file/find/list'
        }
      }
    },
    methods: {}
    methods: {
      loadData() {
        this.dataSource = []
        if (!this.url.list) {
          this.$message.error('请设置url.list属性!')
          return
        }
        var params = this.getQueryParams()//查询条件
        params.docId = this.currentDocumentInfo.docId
        if (!params) {
          return false
        }
        this.loading = true
        getAction(this.url.list, params).then((res) => {
          if (res.success) {
            this.dataSource = res.list
          } else {
            this.$message.warning(res.message)
          }
        }).finally(() => {
          this.loading = false
        })
      },
      /**
       * 设置表格中为当前版本的文件表格行颜色标识
       * @param publishFlag 是否为当前版本
       * @returns {string} 颜色标识
       */
      setCurrentVersionColor(publishFlag) {
        return publishFlag ? '#DB9538' : ''
      }
    }
  }
</script>
src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue
@@ -1,5 +1,6 @@
<template>
  <a-modal width="75%" :title="title" :visible="visible" @cancel="visible=false" :maskClosable="false" centered>
  <a-modal width="75%" :title="title" :visible="visible" @cancel="visible=false" :maskClosable="false" centered
           @ok="handleAssignDocumentToDevice">
    <div class="tabs-container">
      <div style="width: 72%">
        <a-tabs>
@@ -27,8 +28,9 @@
            </div>
            <a-table :columns="columns" :data-source="dataSource" bordered :pagination="false"
                     :scroll="{y:440}" :size="size" rowKey="docId">
            <a-table :columns="columns" :data-source="dataSource" bordered :pagination="false" :loading="loading"
                     :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
                     :scroll="{y:456}" :size="size" rowKey="docId">
            </a-table>
          </a-tab-pane>
@@ -38,7 +40,44 @@
      <div style="width: 25%">
        <a-tabs>
          <a-tab-pane tab="设备列表">
            <a-spin :spinning="spinning">
              <div style="display: flex;flex-direction: column;">
                <div style="display: flex">
                  <a-input placeholder="输入关键字进行搜索" allowClear v-model="searchInput"
                           @change="handleSearchInputChange"/>
                  <a-dropdown :trigger="['click']" placement="bottomCenter" style="margin: 0 8px">
                    <a-menu slot="overlay">
                      <a-menu-item key="1" @click="expandedKeys = allTreeKeys">展开所有</a-menu-item>
                      <a-menu-item key="2" @click="expandedKeys = []">合并所有</a-menu-item>
                    </a-menu>
                    <a-button>
                      <a-icon type="bars"/>
                    </a-button>
                  </a-dropdown>
                </div>
                <!--产品结构树-->
                <div style="overflow:auto;margin-top: 10px;height: 400px">
                  <a-tree ref="tree" checkable :checkedKeys="checkedKeys" :expandedKeys.sync="expandedKeys"
                          :autoExpandParent="autoExpandParent"
                          :treeData="treeDataSource" @check="handleTreeNodeCheck" @expand="handleTreeExpand">
                    <template slot="title" slot-scope="{ label, parentId, entity, key:treeKey,type}">
                     <span v-if="label.indexOf(searchValue) > -1">{{ label.substr(0, label.indexOf(searchValue)) }}<span
                       class="replaceSearch">{{ searchValue }}</span>{{ label.substr(label.indexOf(searchValue) + searchValue.length) }}</span>
                      <span v-else>{{ label }}</span>
                    </template>
                  </a-tree>
                </div>
                <div>
                  <a-form>
                    <a-form-item label="指派原因">
                      <a-textarea v-model="queryParam.applyReason" rows="3" style="resize: none"></a-textarea>
                    </a-form-item>
                  </a-form>
                </div>
              </div>
            </a-spin>
          </a-tab-pane>
        </a-tabs>
      </div>
@@ -47,13 +86,19 @@
</template>
<script>
  import { getAction } from '@/api/manage'
  import dncApi from '@/api/dnc'
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import ATextarea from 'ant-design-vue/es/input/TextArea'
  export default {
    name: 'NcDocumentAssignModal',
    components: {},
    components: { ATextarea },
    mixins: [JeecgListMixin],
    props: {
      currentDocumentInfo: {
        type: Object
      },
      size: {
        type: String
      }
@@ -76,736 +121,194 @@
          },
          { title: '文件名称', dataIndex: 'docName', align: 'center', width: 300 },
          { title: '设备编号', dataIndex: 'docCode', align: 'center' },
          { title: '出库状态', dataIndex: 'pullStatus', align: 'center' },
          { title: '状  态', dataIndex: 'docStatus', align: 'center' },
          { title: '出库状态', dataIndex: 'pullStatus_dictText', align: 'center' },
          { title: '状  态', dataIndex: 'docStatus_dictText', align: 'center' },
          { title: '上传时间', dataIndex: 'createTime', align: 'center', width: 200 }
        ],
        dataSource: [
          {
            'docId': '1872116579179859971',
            'docName': 'api-ms-win-core-heap-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116579423129601',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:50',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116579179859972',
            'docName': 'api-ms-win-core-libraryloader-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116579423129606',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:50',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116581352509442',
            'docName': 'api-ms-win-core-processthreads-l1-1-1.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116581453172737',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:50',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116581352509441',
            'docName': 'api-ms-win-core-profile-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116581453172738',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:50',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116581398646787',
            'docName': 'api-ms-win-core-processenvironment-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116581499310083',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:50',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116581394452482',
            'docName': 'api-ms-win-core-processthreads-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116581499310082',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:50',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116581398646786',
            'docName': 'api-ms-win-core-namedpipe-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116581503504385',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:50',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116581398646791',
            'docName': 'api-ms-win-core-rtlsupport-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116581503504386',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:50',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116583265112065',
            'docName': 'api-ms-win-core-synch-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116583357386754',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:50',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116583298666502',
            'docName': 'api-ms-win-core-timezone-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116583386746881',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:50',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116583298666498',
            'docName': 'api-ms-win-core-sysinfo-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116583399329795',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:50',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116583298666499',
            'docName': 'api-ms-win-core-util-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116583399329794',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:50',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116585123188739',
            'docName': 'api-ms-win-crt-convert-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116585219657730',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:51',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116585123188738',
            'docName': 'api-ms-win-crt-heap-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116585219657729',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:51',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116585131577347',
            'docName': 'api-ms-win-crt-environment-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116585223852035',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:51',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116585131577350',
            'docName': 'api-ms-win-crt-conio-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116585223852036',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:51',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116585131577346',
            'docName': 'api-ms-win-crt-locale-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116585223852034',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:51',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116585139965954',
            'docName': 'api-ms-win-crt-filesystem-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116585232240641',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:51',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116587392307203',
            'docName': 'api-ms-win-crt-stdio-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116587505553412',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:52',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116587392307207',
            'docName': 'api-ms-win-crt-process-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116587505553409',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:51',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116587379724289',
            'docName': 'api-ms-win-crt-multibyte-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116587497164802',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:51',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116587388112901',
            'docName': 'api-ms-win-crt-private-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116587497164801',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:52',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116587388112899',
            'docName': 'api-ms-win-crt-runtime-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116587505553410',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:51',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116587392307205',
            'docName': 'api-ms-win-crt-math-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116587505553411',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:51',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116589451710466',
            'docName': 'api-ms-win-crt-string-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116589644648450',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:52',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116589472681986',
            'docName': 'api-ms-win-crt-time-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116589653037060',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:52',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116589472681987',
            'docName': 'api-ms-win-crt-utility-l1-1-0.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116589653037058',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:52',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116589472681985',
            'docName': 'chrome_100_qq.pak',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'pak',
            'docStatus': 1,
            'publishFileId': '1872116589653037059',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:52',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116589787254785',
            'docName': 'chrome_200_qq.pak',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'pak',
            'docStatus': 1,
            'publishFileId': '1872116589896306690',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:52',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116590152159233',
            'docName': 'd3dcompiler_47.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116590277988354',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:52',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1872116591695663106',
            'docName': 'ffmpeg.dll',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'dll',
            'docStatus': 1,
            'publishFileId': '1872116591783743489',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2024-12-26 11:05:52',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          },
          {
            'docId': '1878649744767254529',
            'docName': 'avatar2.jpg',
            'docAlias': null,
            'docCode': null,
            'docSuffix': 'jpg',
            'docStatus': 1,
            'publishFileId': '1878649744901472258',
            'publishVersion': 'a.1',
            'description': null,
            'createTime': '2025-01-13 11:46:18',
            'updateTime': null,
            'createUser': '1254966905669160962',
            'updateUser': null,
            'docClassCode': null,
            'pullStatus': 1,
            'pullUser': null,
            'attributionType': 5,
            'attributionId': '1327523708556668930',
            'classificationId': '1257965381181095938',
            'syncStatus': null
          }
        ],
        queryParam: {},
        searchValue: '',
        searchInput: '',
        spinning: false,
        treeDataSource: [],
        allTreeKeys: [],
        checkedKeys: [],
        expandedKeys: [],
        autoExpandParent: true,
        url: {
          list: ''
          list: '/nc/doc/find/list'
        }
      }
    },
    watch: {
      visible: {
        handler(value) {
          if (value) this.loadData(1)
          if (value) {
            this.resetData()
            this.loadData()
            this.getDocumentAssignDeviceTreeByApi()
          }
        }
      }
    },
    methods: {}
    methods: {
      loadData() {
        this.dataSource = []
        if (!this.url.list) {
          this.$message.error('请设置url.list属性!')
          return
        }
        var params = this.getQueryParams()//查询条件
        if (!params) {
          return false
        }
        const { attributionType, attributionId, param } = this.currentDocumentInfo
        console.log('currentDocumentInfo', this.currentDocumentInfo)
        params.attributionType = attributionType
        params.attributionId = attributionId
        params.docClassCode = param
        console.log('params', params)
        this.loading = true
        getAction(this.url.list, params).then((res) => {
          if (res.success) this.dataSource = res.result
          else this.$message.warning(res.message)
        }).finally(() => {
          this.loading = false
        })
      },
      getDocumentAssignDeviceTreeByApi() {
        this.spinning = true
        this.treeDataSource = []
        dncApi.getDocumentAssignDeviceTreeApi(this.currentDocumentInfo)
          .then(res => {
            if (res.success) {
              this.dataList = []
              this.allTreeKeys = []
              this.treeDataSource = res.list
              this.generateList(this.treeDataSource)
            } else {
              this.$message.warn(res.message)
            }
          })
          .finally(() => {
            this.spinning = false
          })
      },
      handleAssignDocumentToDevice() {
        const param = {}
        console.log('table', this.selectedRowKeys)
        const treeCheckedDeviceKeys = []
        this.checkedKeys.forEach(checkedKey => {
          const deviceId = this.dataList.find(item => item.key === checkedKey && item.type === 2)
          if (deviceId) treeCheckedDeviceKeys.push(deviceId.key)
        })
        console.log('treeCheckedDeviceKeys', treeCheckedDeviceKeys)
      },
      /* 输入查询内容变化时触发 */
      handleSearchInputChange() {
        let search = this.searchInput
        console.log('data', this.dataList)
        console.log('search', search)
        let expandedKeys = this.dataList
          .map(item => {
            if (item.title != null) {
              if (item.title.indexOf(search) > -1) {
                return this.getParentKey(item.key, this.treeDataSource)
              }
              return null
            }
          })
          .filter((item, i, self) => item && self.indexOf(item) === i)
        Object.assign(this, {
          expandedKeys,
          searchValue: search,
          autoExpandParent: true
        })
      },
      /**
       * 树节点展开合并时触发
       * @param expandedKeys 展开项key
       */
      handleTreeExpand(expandedKeys) {
        this.expandedKeys = expandedKeys
        this.autoExpandParent = false
      },
      /**
       * 树节点复选框选中时触发
       * @param selectedKeys 选中节点key
       * @param {node} node 节点对象
       */
      handleTreeNodeCheck(checkedKeys, { node }) {
        let record = node.dataRef
        this.checkedKeys = checkedKeys
      },
      /**
       * 递归获得输入项的父级key
       * @param key 子项key
       * @param tree 子项
       */
      getParentKey(key, tree) {
        let parentKey
        for (let i = 0; i < tree.length; i++) {
          const node = tree[i]
          if (node.children) {
            if (node.children.some(item => item.key === key)) {
              parentKey = node.key
              console.log('parentKey', parentKey)
            } else if (
              this.getParentKey(key, node.children)) {
              parentKey = this.getParentKey(key, node.children)
            }
          }
        }
        return parentKey
      },
      /**
       * 递归获得所有树节点key
       * @param data
       */
      generateList(data) {
        for (let i = 0; i < data.length; i++) {
          data[i].key = data[i].id
          const node = data[i]
          const key = node.id
          const title = node.label
          const type = node.type
          this.dataList.push({ key, title, type })
          this.allTreeKeys.push(key)
          if (node.children) this.generateList(node.children)
        }
      },
      resetData() {
        this.searchInput = ''
        this.expandedKeys = []
        this.selectedRowKeys = []
        this.checkedKeys = []
      }
    }
  }
</script>
<style scoped>
<style scoped lang="less">
  /deep/ .ant-modal {
  .tabs-container {
    display: flex;
    justify-content: space-between;
      .replaceSearch {
        color: #40a9ff;
        font-weight: bold;
        background-color: rgb(204, 204, 204);
  }
    }
  }
</style>
src/views/dnc/base/modules/ProductStructure/Document/NcDocumentTableList.vue
@@ -1,13 +1,14 @@
<template>
  <div>
    <a-table :columns="columns" :data-source="dataSource" bordered :pagination="ipagination"
             :scroll="{y:189}" :customRow="customRow" :size="size" rowKey="docId">
             :scroll="{y:189}" :customRow="customRow" :size="size" rowKey="docId" @change="handleTableChange">
    </a-table>
    <DocumentModal ref="modalForm" @ok="modalFormOk"/>
    <NcDocumentAssignModal :size="size" ref="documentAssignModalRef"/>
    <NcDocumentAssignModal :size="size" ref="documentAssignModalRef"
                           :currentDocumentInfo="currentRightClickedDocumentInfo"/>
  </div>
</template>
@@ -51,6 +52,8 @@
          { title: '上传时间', dataIndex: 'createTime', align: 'center' }
        ],
        dataSource: [],
        currentRightClickedDocumentInfo: {},
        currentClickedDocumentInfo: {},
        url: {
          list: '/nc/doc/find/page'
        }
@@ -96,10 +99,13 @@
          on: {
            contextmenu: event => {
              event.preventDefault()
              this.$emit('handleTableContextMenuOpen', { ...record, param: 'NC' })
              this.currentRightClickedDocumentInfo = Object.assign({ param: 'NC' }, record)
              this.$emit('handleTableContextMenuOpen', this.currentRightClickedDocumentInfo)
            },
            click: () => {
              this.$bus.$emit('sendCurrentLevelInfo', record)
              if (this.currentClickedDocumentInfo.docId === record.docId) return
              this.currentClickedDocumentInfo = Object.assign({}, record)
              this.$bus.$emit('sendCurrentClickedDocumentInfo', record)
            }
          }
        }
src/views/dnc/base/modules/ProductStructure/Document/OtherDocumentTableList.vue
@@ -1,7 +1,7 @@
<template>
  <div>
    <a-table :columns="columns" :data-source="dataSource" bordered :pagination="ipagination"
             :scroll="{y:189}" :customRow="customRow" :size="size" rowKey="docId">
             :scroll="{y:189}" :customRow="customRow" :size="size" rowKey="docId" @change="handleTableChange">
    </a-table>
@@ -48,6 +48,7 @@
          { title: '上传时间', dataIndex: 'createTime', align: 'center' }
        ],
        dataSource: [],
        currentDocumentInfo: {},
        url: {
          list: '/nc/doc/find/page'
        }
@@ -96,7 +97,9 @@
              this.$emit('handleTableContextMenuOpen', { ...record, param: 'OTHER' })
            },
            click: () => {
              this.$bus.$emit('sendCurrentLevelInfo', record)
              if (this.currentDocumentInfo.docId === record.docId) return
              this.currentDocumentInfo = Object.assign({}, record)
              this.$bus.$emit('sendCurrentClickedDocumentInfo', record)
            }
          }
        }
src/views/dnc/base/modules/ProductStructure/Part/PartInfo.vue
@@ -11,9 +11,9 @@
    <a-descriptions-item label="处理类型    ">{{currentLevelDetails.processType}}</a-descriptions-item>
    <a-descriptions-item label="结构类型    ">{{currentLevelDetails.structureType}}</a-descriptions-item>
    <a-descriptions-item label="重量" :span="2">{{currentLevelDetails.partsWeight}}</a-descriptions-item>
    <a-descriptions-item label="创建人">{{currentLevelDetails.createUser_dicText}}</a-descriptions-item>
    <a-descriptions-item label="创建人">{{currentLevelDetails.createName}}</a-descriptions-item>
    <a-descriptions-item label="创建时间" :span="2">{{currentLevelDetails.createTime}}</a-descriptions-item>
    <a-descriptions-item label="修改人">{{currentLevelDetails.updateUser_dicText}}</a-descriptions-item>
    <a-descriptions-item label="修改人">{{currentLevelDetails.updateName}}</a-descriptions-item>
    <a-descriptions-item label="修改时间" :span="2">{{currentLevelDetails.updateTime}}</a-descriptions-item>
    <a-descriptions-item label="描述" :span="3">{{currentLevelDetails.description}}</a-descriptions-item>
  </a-descriptions>
src/views/dnc/base/modules/ProductStructure/Process/ProcessInfo.vue
@@ -5,10 +5,14 @@
    <a-descriptions-item label="工艺编号    ">{{currentLevelDetails.craftNo}}</a-descriptions-item>
    <a-descriptions-item label="工序类型">{{currentLevelDetails.processType}}</a-descriptions-item>
    <a-descriptions-item label="加工设备型号">{{currentLevelDetails.processingEquipmentModel}}</a-descriptions-item>
    <!--<a-descriptions-item label="加工设备类型">{{currentLevelDetails.processingEquipmentOs}}</a-descriptions-item>-->
    <a-descriptions-item label="加工设备类型">{{currentLevelDetails.processingEquipmentOs}}</a-descriptions-item>
    <a-descriptions-item label="加工设备编号">{{currentLevelDetails.processingEquipmentCode}}</a-descriptions-item>
    <a-descriptions-item label="工装编号">{{currentLevelDetails.assembleStep}}</a-descriptions-item>
    <a-descriptions-item label="工装名称    ">{{currentLevelDetails.assembleName}}</a-descriptions-item>
    <a-descriptions-item label="创建人">{{currentLevelDetails.createName}}</a-descriptions-item>
    <a-descriptions-item label="创建时间" :span="2">{{currentLevelDetails.createTime}}</a-descriptions-item>
    <a-descriptions-item label="修改人">{{currentLevelDetails.updateName}}</a-descriptions-item>
    <a-descriptions-item label="修改时间" :span="2">{{currentLevelDetails.updateTime}}</a-descriptions-item>
    <a-descriptions-item label="描述" :span="3">{{currentLevelDetails.description}}</a-descriptions-item>
  </a-descriptions>
</template>
src/views/dnc/base/modules/ProductStructure/Process/ProcessModal.vue
@@ -8,11 +8,12 @@
    @ok="handleOk"
    @cancel="handleCancel"
    cancelText="关闭">
    <ProcessModalForm ref="realForm" @ok="submitCallback"/>
    <ProcessModalForm ref="realForm" @ok="submitCallback" :allDeviceList="allDeviceList"/>
  </j-modal>
</template>
<script>
  import dncApi from '@/api/dnc'
  import ProcessModalForm from './ProcessModalForm.vue'
  export default {
@@ -30,13 +31,28 @@
        title: '',
        width: 700,
        visible: false,
        allDeviceList: [],
        isAddNextLevel: false // 是否为添加下级,作为树节点是否展开的判断
      }
    },
    watch: {
      visible: {
        handler(value) {
          if (value) this.getAllDeviceListByApi()
        }
      }
    },
    created() {
      this.$bus.$on('treeMenuItemMethodTrigger', this.triggerCorrespondingMethod)
    },
    methods: {
      getAllDeviceListByApi() {
        dncApi.getAllDeviceListApi()
          .then(res => {
            if (res.success) this.allDeviceList = res.list
          })
      },
      /**
       * 点击部件创建部件下级工序
       */
src/views/dnc/base/modules/ProductStructure/Process/ProcessModalForm.vue
@@ -17,7 +17,24 @@
      <a-row>
        <a-col :span="24">
          <a-form-model-item label="加工设备编号" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
            <a-select v-model="model.processingEquipmentCode" placeholder="请选择加工设备编号"></a-select>
            <a-select v-model="model.processingEquipmentCode" placeholder="请选择加工设备编号">
              <a-select-option v-for="item in allDeviceList" :key="item.deviceId">
                {{item.deviceId}}
              </a-select-option>
            </a-select>
          </a-form-model-item>
        </a-col>
      </a-row>
      <a-row>
        <a-col :span="12">
          <a-form-model-item label="加工设备型号">
            <a-input v-model="model.processingEquipmentModel" placeholder="请输入加工设备型号"></a-input>
          </a-form-model-item>
        </a-col>
        <a-col :span="12">
          <a-form-model-item label="加工设备类型">
            <a-input v-model="model.processingEquipmentOs" placeholder="请输入加工设备类型"></a-input>
          </a-form-model-item>
        </a-col>
      </a-row>
@@ -70,6 +87,11 @@
  export default {
    name: 'ProcessModalForm',
    components: {},
    props: {
      allDeviceList: {
        type: Array
      }
    },
    data() {
      return {
        model: {
@@ -109,6 +131,7 @@
    created() {
      //备份model原始值
      this.modelDefault = JSON.parse(JSON.stringify(this.model))
      this.$bus.$on('sendAllDeviceList', deviceList => this.deviceList = deviceList)
    },
    methods: {
      add(params) {
src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepInfo.vue
@@ -2,11 +2,16 @@
  <a-descriptions bordered :size="size">
    <a-descriptions-item label="工步名称">{{currentLevelDetails.stepName}}</a-descriptions-item>
    <a-descriptions-item label="工步号">{{currentLevelDetails.stepCode}}</a-descriptions-item>
    <a-descriptions-item label="工艺编号    ">{{currentLevelDetails.craftNo}}</a-descriptions-item>
    <a-descriptions-item label="工步类型">{{currentLevelDetails.stepType}}</a-descriptions-item>
    <a-descriptions-item label="加工设备型号">{{currentLevelDetails.processingEquipmentModel}}</a-descriptions-item>
    <a-descriptions-item label="加工设备类型">{{currentLevelDetails.processingEquipmentOs}}</a-descriptions-item>
    <a-descriptions-item label="加工设备编号">{{currentLevelDetails.deviceNo}}</a-descriptions-item>
    <a-descriptions-item label="工装编号">{{currentLevelDetails.assembleStep}}</a-descriptions-item>
    <a-descriptions-item label="工装名称    ">{{currentLevelDetails.assembleName}}</a-descriptions-item>
    <a-descriptions-item label="工装名称    " :span="2">{{currentLevelDetails.assembleName}}</a-descriptions-item>
    <a-descriptions-item label="创建人">{{currentLevelDetails.createName}}</a-descriptions-item>
    <a-descriptions-item label="创建时间" :span="2">{{currentLevelDetails.createTime}}</a-descriptions-item>
    <a-descriptions-item label="修改人">{{currentLevelDetails.updateName}}</a-descriptions-item>
    <a-descriptions-item label="修改时间" :span="2">{{currentLevelDetails.updateTime}}</a-descriptions-item>
    <a-descriptions-item label="描述" :span="3">{{currentLevelDetails.description}}</a-descriptions-item>
  </a-descriptions>
</template>
src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepModal.vue
@@ -8,11 +8,12 @@
    @ok="handleOk"
    @cancel="handleCancel"
    cancelText="关闭">
    <ProcessStepModalForm ref="realForm" @ok="submitCallback"/>
    <ProcessStepModalForm ref="realForm" @ok="submitCallback" :allDeviceList="allDeviceList"/>
  </j-modal>
</template>
<script>
  import dncApi from '@/api/dnc'
  import ProcessStepModalForm from './ProcessStepModalForm.vue'
  export default {
@@ -25,11 +26,19 @@
        type: Object
      }
    },
    watch: {
      visible: {
        handler(value) {
          if (value) this.getAllDeviceListByApi()
        }
      }
    },
    data() {
      return {
        title: '',
        width: 700,
        visible: false,
        allDeviceList: [],
        isAddNextLevel: false // 是否为添加下级,作为树节点是否展开的判断
      }
    },
@@ -37,6 +46,13 @@
      this.$bus.$on('treeMenuItemMethodTrigger', this.triggerCorrespondingMethod)
    },
    methods: {
      getAllDeviceListByApi() {
        dncApi.getAllDeviceListApi()
          .then(res => {
            if (res.success) this.allDeviceList = res.list
          })
      },
      /**
       * 点击工序创建工序下级工步
       */
src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepModalForm.vue
@@ -17,23 +17,28 @@
      <a-row>
        <a-col :span="24">
          <a-form-model-item label="加工设备编号" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
            <a-select v-model="model.deviceNo" placeholder="请选择加工设备编号"></a-select>
            <a-select v-model="model.deviceNo" placeholder="请选择加工设备编号">
              <a-select-option v-for="item in allDeviceList" :key="item.deviceId">
                {{item.deviceId}}
              </a-select-option>
            </a-select>
          </a-form-model-item>
        </a-col>
      </a-row>
      <a-row>
        <a-col :span="12">
          <a-form-model-item label="工艺编号">
            <a-input v-model="model.craftNo" placeholder="请输入工艺编号"></a-input>
          <a-form-model-item label="加工设备型号">
            <a-input v-model="model.processingEquipmentModel" placeholder="请输入加工设备型号"></a-input>
          </a-form-model-item>
        </a-col>
        <a-col :span="12">
          <a-form-model-item label="工艺规程版本">
            <a-input v-model="model.craftVersion" placeholder="请输入工艺规程版本"></a-input>
          <a-form-model-item label="加工设备类型">
            <a-input v-model="model.processingEquipmentOs" placeholder="请输入加工设备类型"></a-input>
          </a-form-model-item>
        </a-col>
      </a-row>
      <a-row>
        <a-col :span="12">
@@ -70,6 +75,11 @@
  export default {
    name: 'ProcessStepModalForm',
    components: {},
    props: {
      allDeviceList: {
        type: Array
      }
    },
    data() {
      return {
        model: {
src/views/dnc/base/modules/ProductStructure/Product/ProductInfo.vue
@@ -3,9 +3,9 @@
    <a-descriptions-item label="产品名称">{{currentLevelDetails.productName}}</a-descriptions-item>
    <a-descriptions-item label="产品型号">{{currentLevelDetails.productModel}}</a-descriptions-item>
    <a-descriptions-item label="产品代码    ">{{currentLevelDetails.productNo}}</a-descriptions-item>
    <a-descriptions-item label="创建人">{{currentLevelDetails.createUser_dicText}}</a-descriptions-item>
    <a-descriptions-item label="创建人">{{currentLevelDetails.createName}}</a-descriptions-item>
    <a-descriptions-item label="创建时间" :span="2">{{currentLevelDetails.createTime}}</a-descriptions-item>
    <a-descriptions-item label="修改人">{{currentLevelDetails.updateUser_dicText}}</a-descriptions-item>
    <a-descriptions-item label="修改人">{{currentLevelDetails.updateName}}</a-descriptions-item>
    <a-descriptions-item label="修改时间" :span="2">{{currentLevelDetails.updateTime}}</a-descriptions-item>
  </a-descriptions>
</template>
src/views/dnc/base/modules/ProductStructure/ProductStructureMainBottom.vue
@@ -1,28 +1,29 @@
<template>
  <a-tabs style="height: 100%" v-model="activeTabKey" v-if="Object.keys(currentLevelInfo).length>0">
  <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="descriptionsContainerSize"/>
      <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="descriptionsContainerSize"/>
      <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="descriptionsContainerSize"/>
      <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="descriptionsContainerSize"/>
      <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="descriptionsContainerSize"/>
      <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="descriptionsContainerSize"/>
        <DocumentInfo :currentLevelDetails="currentLevelInfo" :size="containerSize"/>
      </a-tab-pane>
      <a-tab-pane :key="2" tab="预览">
@@ -30,11 +31,12 @@
      </a-tab-pane>
      <a-tab-pane :key="3" tab="文档版本">
        <DocumentVersionTableList/>
        <DocumentVersionTableList ref="documentVersionTableRef" :currentDocumentInfo="currentLevelInfo"
                                  :size="containerSize"/>
      </a-tab-pane>
      <a-tab-pane :key="4" tab="使用设备" v-if="currentLevelInfo.attributionType===5">
        <UseDocumentEquipmentTableList/>
        <UseDocumentEquipmentTableList ref="useDocumentEquipmentTableRef"/>
      </a-tab-pane>
    </template>
  </a-tabs>
@@ -65,13 +67,15 @@
    data() {
      return {
        activeTabKey: 1,
        descriptionsContainerSize: 'small',
        currentLevelInfo: {}
        containerSize: 'small',
        currentLevelInfo: {},
        hasLoadedDataTabKeyArray: []
      }
    },
    created() {
      this.$bus.$on('sendCurrentLevelInfo', this.receiveCurrentLevelInfo)
      this.$bus.$on('sendCurrentClickedDocumentInfo', this.receiveCurrentLevelInfo)
      this.$bus.$on('sendCurrentTreeNodeInfo', this.receiveCurrentLevelInfo)
      this.$bus.$on('reloadMainBottomTableData', this.reloadMainBottomTableData)
    },
    methods: {
      /**
@@ -80,7 +84,23 @@
       */
      receiveCurrentLevelInfo(levelInfo) {
        this.currentLevelInfo = levelInfo
        if (levelInfo.attributionType) this.activeTabKey = 1
        this.activeTabKey = 1
        this.hasLoadedDataTabKeyArray = []
      },
      handleTabChange(activeTabKey) {
        if (!this.hasLoadedDataTabKeyArray.includes(activeTabKey)) {
          if (activeTabKey === 3) {
            this.$nextTick(() => this.$refs.documentVersionTableRef.loadData())
          } else if (activeTabKey === 4) {
            this.$nextTick(() => this.$refs.useDocumentEquipmentTableRef.loadData())
          }
          this.hasLoadedDataTabKeyArray.push(activeTabKey)
        }
      },
      reloadMainBottomTableData(tableName) {
        if (this.$refs[tableName + 'TableRef']) this.$refs[tableName + 'TableRef'].loadData()
      }
    }
  }
src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue
@@ -34,7 +34,7 @@
    },
    created() {
      this.$bus.$on('sendCurrentTreeNodeInfo', this.receiveCurrentTreeNodeInfo)
      this.$bus.$on('importFileSuccess', this.reloadDocumentListData)
      this.$bus.$on('reloadDocumentListData', this.reloadDocumentListData)
      this.$bus.$on('tableMenuItemMethodTrigger', this.triggerCorrespondingMethod)
    },
    methods: {
@@ -204,6 +204,7 @@
              .then(res => {
                if (res.success) {
                  this.reloadDocumentListData({ docClassCode: param, attributionId })
                  this.$bus.$emit('reloadMainBottomTableData', 'documentVersion')
                  that.$notification.success({
                    message: '消息',
                    description: res.message
src/views/dnc/base/modules/ProductStructure/ProductStructureTree.vue
@@ -23,8 +23,8 @@
        </div>
        <!--产品结构树-->
        <div class="" style="flex: 1;overflow:auto;margin-top: 10px">
          <a-tree ref="tree" show-icon :checkStrictly="checkStrictly" :expandedKeys.sync="expandedKeys"
        <div style="flex: 1;overflow:auto;margin-top: 10px">
          <a-tree ref="tree" show-icon :expandedKeys.sync="expandedKeys"
                  :selectedKeys="selectedKeys" :treeData="treeDataSource" :autoExpandParent="autoExpandParent"
                  @select="handleTreeSelect" @expand="handleTreeExpand" @rightClick="handleTreeRightClick">
            <template slot="title" slot-scope="{ label, parentId, entity, key:treeKey,type}">
@@ -106,7 +106,6 @@
        this.loading = true
        this.cardLoading = true
        dncApi.getProductStructureTreeApi().then(res => {
          console.log('res', res)
          if (res.success) {
            this.dataList = []
            this.allTreeKeys = []
src/views/dnc/common/ImportFileModal.vue
@@ -49,7 +49,7 @@
      /**
       * 点击导入文档或NC程序时触发
       * @param treeNodeInfo 点击树节点右键菜单导入程序时传入树节点信息
       * @param tableRowInfo 点击表格行右键菜单导入程序时传入行信息
       * @param tableRowInfo 右键表格行时传入行信息
       */
      handleImport(treeNodeInfo, tableRowInfo) {
        this.isUploadMultiple = true
@@ -69,6 +69,11 @@
        this.visible = true
      },
      /**
       * 点击文档生命周期的入库时触发
       * @param _
       * @param tableRowInfo 右键表格行时传入行信息
       */
      handlePush(_, tableRowInfo) {
        this.isUploadMultiple = false
        console.log('tableRowInfo', tableRowInfo)
@@ -80,22 +85,21 @@
        this.visible = true
      },
      handleRemove(file) {
        const index = this.fileList.indexOf(file)
        const newFileList = this.fileList.slice()
        newFileList.splice(index, 1)
        this.fileList = newFileList
      },
      /**
       * 选择好文件点击确定后
       * @param file 文件对象
       */
      beforeUpload(file) {
        if (this.isUploadMultiple) {
          if (!this.fileList.find(item => item.name === file.name)) this.fileList = [...this.fileList, file]
        } else {
          this.fileList.splice(0, 1, file)
        }
        else this.fileList.splice(0, 1, file)
        return false
      },
      /**
       * 点击上传至服务器按钮时触发
       */
      handleUpload() {
        const { fileList, $notification, isUploadMultiple, uploadParams, $bus } = this
        this.uploading = true
@@ -144,8 +148,11 @@
              if (uploadedFileCount === fileList.length) {
                // 至少有一个文件上传成功后就需要重新加载文档列表
                if (uploadSuccessFileCount > 0) {
                  $bus.$emit('importFileSuccess', uploadParams)
                  if (!isUploadMultiple) this.visible = false //无法连续入库多个版本因此入库成功后即可退出窗口
                  $bus.$emit('reloadDocumentListData', uploadParams)
                  if (!isUploadMultiple) {
                    $bus.$emit('reloadMainBottomTableData', 'documentVersion')
                    this.visible = false //无法连续入库多个版本因此入库成功后即可退出窗口
                  }
                }
                this.uploading = false
              }
@@ -154,6 +161,17 @@
      },
      /**
       * 删除文件列表项时触发
       * @param file 文件对象
       */
      handleRemove(file) {
        const index = this.fileList.indexOf(file)
        const newFileList = this.fileList.slice()
        newFileList.splice(index, 1)
        this.fileList = newFileList
      },
      /**
       * 控制文件上传窗口关闭并清空文件列表
       */
      handleModalClose() {