已添加7个文件
已修改22个文件
1720 ■■■■■ 文件已修改
src/api/dnc.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/DeviceCustomTypeManagement.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/DeviceCustomTypeManagement/DeviceCustomTypeManagementModal.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentTableList.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/DeviceStructure/Document/HasSentDocumentTableList.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Cutter/CutterModal.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Cutter/CutterModalForm.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Cutter/CutterTableList.vue 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/DeviceCustomType/DeviceCustomTypeModalForm.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/DeviceCustomType/DeviceCustomTypeTableList.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Document/NcDocumentSearchNcModal.vue 543 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/Document/NcDocumentTableList.vue 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/GuideCardBatch/GuideCardBatchEditForm.vue 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/GuideCardBatch/GuideCardBatchForm.vue 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/GuideCardBatch/GuideCardBatchList.vue 250 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/GuideCardBatch/GuideCardBatchModal.Style#Drawer.vue 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/GuideCardBatch/GuideCardBatchModal.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProductStructureMainBottom.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProductStructureTree.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/ProductStructure/ProductStructureTreeContextMenu.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/common/DocumentInfo.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/common/DocumentInfoFlow.vue 205 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/common/DocumentModalForm.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/common/DocumentVersionTableList.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/common/TableContextMenu.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/FlowLedger.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/assignFileStream/AssignFileStreamHandle.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/assignFileStream/AssignFileStreamXq.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/dispatchFile/DispatchFileXq.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/dnc.js
@@ -27,6 +27,8 @@
  getDocumentAssignDeviceTreeApi: ({ attributionType, attributionId }) => getAction(`/nc/device/load/depart/tree/${attributionType}/${attributionId}`),
  // æŒ‡æ´¾æ–‡æ¡£åˆ°è®¾å¤‡
  assignDocumentToDeviceApi: params => postAction('/nc/activit/assign/file/apply', params),
  // æå–刀具
  extractToolsApi: ({ docId,attributionType, attributionId}) => getAction(`/nc/cutter/extractCutterInfo/${docId}/${attributionType}/${attributionId}`),
  // ä¸‹è½½æ–‡æ¡£
  downloadDocumentApi: ({ docId, docName }) => requestGetDownLoad(`/nc/doc/download/${docId}`, docName),
  // åˆ é™¤æ–‡æ¡£
src/views/dnc/base/DeviceCustomTypeManagement.vue
@@ -16,8 +16,8 @@
          </a-col>
          <a-col :md="4" :sm="4">
            <a-form-item label="设备类名称">
              <a-input placeholder="请输入设备类名称" v-model="queryParam.deviceManagementName"></a-input>
            <a-form-item label="数控系统类别">
              <a-input placeholder="请输入数控系统类别" v-model="queryParam.deviceManagementName"></a-input>
            </a-form-item>
          </a-col>
@@ -119,13 +119,13 @@
          dataIndex: 'productionId_dictText'
        },
        {
          title: '设备类',
          title: '轴数',
          align: 'center',
          width: 200,
          dataIndex: 'deviceManagementCode'
        },
        {
          title: '设备类名称',
          title: '数控系统类别',
          align: 'center',
          width: 200,
          dataIndex: 'deviceManagementName'
src/views/dnc/base/modules/DeviceCustomTypeManagement/DeviceCustomTypeManagementModal.vue
@@ -23,8 +23,8 @@
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="设备类" prop="deviceManagementCode">
              <a-input allow-clear placeholder="请输入设备类" :readOnly="disabledEdit"
            <a-form-model-item label="轴数" prop="deviceManagementCode">
              <a-input allow-clear placeholder="请输入轴数" :readOnly="disabledEdit"
                       v-model="model.deviceManagementCode"/>
            </a-form-model-item>
          </a-col>
@@ -32,8 +32,8 @@
        <a-row :gutter="24">
          <a-col :span="12">
            <a-form-model-item label="设备类名称" prop="deviceManagementName">
              <a-input allow-clear placeholder="请输入设备类名称" :readOnly="disabledEdit"
            <a-form-model-item label="数控系统类别" prop="deviceManagementName">
              <a-input allow-clear placeholder="请输入数控系统类别" :readOnly="disabledEdit"
                       v-model="model.deviceManagementName"/>
            </a-form-model-item>
          </a-col>
@@ -88,12 +88,12 @@
        ],
        deviceManagementCode: [
          {
            required: true, message: '请输入设备类!'
            required: true, message: '请输入轴数!'
          }
        ],
        deviceManagementName: [
          {
            required: true, message: '请输入设备类名称!'
            required: true, message: '请输入数控系统类别!'
          }
        ],
        equipmentIds: [
src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentTableList.vue
@@ -51,7 +51,6 @@
            width: 300,
            sorter: true
          },
          { title: '代码版本', dataIndex: 'docAlias', align: 'center' },
          {
            title: '出库状态',
            dataIndex: 'pullStatus_dictText',
src/views/dnc/base/modules/DeviceStructure/Document/HasSentDocumentTableList.vue
@@ -51,7 +51,6 @@
            width: 300,
            sorter: true
          },
          { title: '代码版本', dataIndex: 'docAlias', align: 'center' },
          {
            title: '出库状态',
            dataIndex: 'pullStatus_dictText',
src/views/dnc/base/modules/ProductStructure/Cutter/CutterModal.vue
@@ -37,13 +37,14 @@
  methods: {
    // æ·»åŠ æ‰€ç”¨åˆ€å…·
    handleCutterAdd() {
      const { id, type } = this.currentTreeNodeInfo
      const { attributionId, attributionType, docId } = this.currentTreeNodeInfo
      this.visible = true
      this.$nextTick(() => {
        if (this.$refs.realForm) {
          this.$refs.realForm.add({
            attributionId: id,
            attributionType: type
            attributionId: attributionId,
            attributionType: attributionType,
            docId: docId
          })
        }
      })
src/views/dnc/base/modules/ProductStructure/Cutter/CutterModalForm.vue
@@ -3,7 +3,7 @@
    <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
      <a-row>
        <a-col :span="12">
          <a-form-model-item label="刀具编号" prop="cutterCode">
          <a-form-model-item label="刀具编号">
            <a-input v-model="model.cutterCode" placeholder="请输入刀具编号" :readOnly="disableSubmit"/>
          </a-form-model-item>
        </a-col>
@@ -16,9 +16,8 @@
      <a-row>
        <a-col :span="12">
          <a-form-model-item label="刀具类型">
            <j-dict-select-tag v-model="model.cutterType" placeholder="请选择刀具类型" dictCode="cutter_type"
                               :disabled="disableSubmit"/>
          <a-form-model-item label="刀具简称" prop="cutterType">
            <a-input v-model="model.cutterType" placeholder="请输入刀具简称" :readOnly="disableSubmit"/>
          </a-form-model-item>
        </a-col>
        <a-col :span="12">
@@ -31,7 +30,7 @@
      <a-row>
        <a-col :span="12">
          <a-form-model-item label="刀位">
          <a-form-model-item label="刀位" prop="cutterSpacing">
            <a-input v-model="model.cutterSpacing" placeholder="请输入刀位" :readOnly="disableSubmit"/>
          </a-form-model-item>
        </a-col>
@@ -88,11 +87,14 @@
      },
      confirmLoading: false,
      validatorRules: {
        cutterCode: [
          { required: true, message: '请输入刀具编号!' }
        cutterType: [
          { required: true, message: '请输入刀具简称!' }
        ],
        cutterName: [
          { required: true, message: '请输入刀具名称!' }
        ],
        cutterSpacing: [
          { required: true, message: '请输入刀位!' }
        ]
      },
      url: {
src/views/dnc/base/modules/ProductStructure/Cutter/CutterTableList.vue
@@ -20,11 +20,7 @@
            <a-space>
              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
              <a-button type="primary" @click="handleAdd" icon="plus" v-has="'cutter_add'">新增</a-button>
              <a-button type="primary" @click="handleExportXls('刀具列表')" icon="export">导出</a-button>
              <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader"
                        :action="importExcelUrl" @change="handleImportExcel">
                <a-button type="primary" icon="import">导入</a-button>
              </a-upload>
              <a-button type="primary" @click="handleAdd()" icon="export">发送刀具系统</a-button>
            </a-space>
          </a-col>
        </a-row>
@@ -34,7 +30,8 @@
    <a-table :columns="columns" :data-source="dataSource" bordered :pagination="ipagination" :size="size" rowKey="id"
             @change="handleTableChange" :scroll="{y:189}">
      <template slot="action" slot-scope="text, record">
        <a @click="handleEdit(record)">编辑</a>
        <a @click="handleEdit(record)">选择刀具</a>
        <a-divider type="vertical"/>
@@ -92,12 +89,14 @@
            return parseInt(index) + 1
          }
        },
        { title: '刀具编号', dataIndex: 'cutterCode', align: 'center' },
        { title: '刀具名称', dataIndex: 'cutterName', align: 'center' },
        { title: '刀具类型', dataIndex: 'cutterType_dictText', align: 'center' },
        { title: '刀具编号', dataIndex: 'cutterCode', width: 100, align: 'center' },
        { title: '刀具名称', dataIndex: 'cutterName', width: 100, align: 'center' },
        { title: '刀具简称', dataIndex: 'cutterType', width: 80, align: 'center' },
        { title: '刀具规格', dataIndex: 'cutterSpec', align: 'center' },
        { title: '额定寿命', dataIndex: 'lifetime', width: 150, align: 'center' },
        { title: '刀位', dataIndex: 'cutterSpacing', width: 150, align: 'center' },
        { title: '刀具数量', dataIndex: 'quantity', width: 150, align: 'center' },
        { title: '刀位', dataIndex: 'cutterSpacing', width: 50, align: 'center' },
        { title: '刀具数量', dataIndex: 'quantity', width: 80, align: 'center' },
        { title: '描述', dataIndex: 'description', width: 200, align: 'center' },
        { title: '操作', dataIndex: 'action', scopedSlots: { customRender: 'action' }, align: 'center', width: 150 }
      ],
      url: {
@@ -115,8 +114,33 @@
  },
  methods: {
    setQueryParamAndLoadData(pageNo = 1) {
      const { id, type } = this.currentLevelInfo
      this.queryParam = Object.assign({}, { attributionId: id, attributionType: type })
      if (this.currentLevelInfo.classificationId_dictText==='nc'){
        const {docId,attributionType,attributionId} = this.currentLevelInfo
        this.queryParam = Object.assign({}, { docId:docId,attributionType:attributionType,attributionId:attributionId })
      }
      if (this.currentLevelInfo.deviceManagementId !== null && this.currentLevelInfo.deviceManagementId !== undefined){
        const {attributionType,id} = this.currentLevelInfo
        this.queryParam = Object.assign({}, {attributionType:attributionType,attributionId:id })
      }
      if (this.currentLevelInfo.id !== null && this.currentLevelInfo.type !== null && this.currentLevelInfo.type !== undefined && this.currentLevelInfo.id !== undefined){
        const { id, type } = this.currentLevelInfo
        this.queryParam = Object.assign({}, { attributionId: id, attributionType: type })
      }
      this.loadData(pageNo)
    },
    searchQuery(pageNo = 1) {
      if (this.currentLevelInfo.classificationId_dictText==='nc'){
        const {docId,attributionType,attributionId} = this.currentLevelInfo
        this.queryParam = Object.assign({}, { docId:docId,attributionType:attributionType,attributionId:attributionId })
      }
      if (this.currentLevelInfo.deviceManagementId !== null && this.currentLevelInfo.deviceManagementId !== undefined){
        const {attributionType,id} = this.currentLevelInfo
        this.queryParam = Object.assign({}, {attributionType:attributionType,attributionId:id })
      }
      if (this.currentLevelInfo.id !== null && this.currentLevelInfo.type !== null && this.currentLevelInfo.type !== undefined && this.currentLevelInfo.id !== undefined){
        const { id, type } = this.currentLevelInfo
        this.queryParam = Object.assign({}, { attributionId: id, attributionType: type })
      }
      this.loadData(pageNo)
    },
src/views/dnc/base/modules/ProductStructure/DeviceCustomType/DeviceCustomTypeModalForm.vue
@@ -26,7 +26,7 @@
      <a-row>
        <a-col :span="12">
          <a-form-model-item label="设备类名称">
          <a-form-model-item label="数控系统类别">
            <a-input v-model="model.deviceManagementId_dictText" placeholder="请选择设备类" readOnly/>
          </a-form-model-item>
        </a-col>
@@ -94,7 +94,7 @@
    },
    /**
     * è®¾å¤‡ç±»é€‰æ‹©æ”¹å˜åŽè§¦å‘填充设备类对应设备类名称
     * è®¾å¤‡ç±»é€‰æ‹©æ”¹å˜åŽè§¦å‘填充设备类对应数控系统类别
     * @param value
     */
    handleCodeSelectChange(value) {
src/views/dnc/base/modules/ProductStructure/DeviceCustomType/DeviceCustomTypeTableList.vue
@@ -34,12 +34,12 @@
        //   align: 'center'
        // },
        {
          title: '设备类',
          title: '轴数',
          dataIndex: 'deviceManagementCode_dictText',
          align: 'center'
        },
        {
          title: '设备类名称',
          title: '数控系统类别',
          dataIndex: 'deviceManagementId_dictText',
          align: 'center'
        }
src/views/dnc/base/modules/ProductStructure/Document/NcDocumentSearchNcModal.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,543 @@
<!--
 Description: æ£€ç´¢ç”µå­æ ·æ¿List
 Author: ä½œè€… liuyh
 Date:   2025-02-27
-->
<template>
  <a-modal width="95%" :title="title" :visible="visible" @cancel="visible=false" :maskClosable="false" centered
           @ok="handleAssignDocumentToDevice">
    <div class="tabs-container">
      <div style="width: 72%">
        <a-tabs>
          <a-tab-pane tab="文档列表">
            <div class="table-page-search-wrapper">
              <a-form layout="inline" @keyup.enter.native="searchQuery">
                <a-row :gutter="24">
                  <a-col :md="7" :sm="7">
                    <a-form-item label="文件名称">
                      <a-input placeholder="请输入文件名称" v-model="queryParam.docName" allow-clear></a-input>
                    </a-form-item>
                  </a-col>
                  <a-col :md="7" :sm="7">
                    <a-form-item label="数控系统类别">
                      <a-input placeholder="请输入数控系统类别" v-model="queryParam.deviceManagementName" allow-clear></a-input>
                    </a-form-item>
                  </a-col>
                  <a-col :md="7" :sm="7">
                    <a-form-item label="轴数">
                      <a-input placeholder="请输入轴数" v-model="queryParam.deviceManagementCode" allow-clear></a-input>
                    </a-form-item>
                  </a-col>
                  <a-col :md="7" :sm="7">
                    <a-form-item label="节点名称">
                      <a-input placeholder="请输入节点名称" v-model="queryParam.treeName" allow-clear></a-input>
                    </a-form-item>
                  </a-col>
                  <a-col :md="7" :sm="7">
                    <a-form-item label="节点代号">
                      <a-input placeholder="请输入节点代号" v-model="queryParam.treeCode" allow-clear></a-input>
                    </a-form-item>
                  </a-col>
                  <a-col :md="7" :sm="7">
                    <a-form-item label="材质">
                      <a-input placeholder="请输入材质" v-model="queryParam.structureType" allow-clear></a-input>
                    </a-form-item>
                  </a-col>
                  <a-col :md="11" :sm="11">
                    <a-form-item label="上传时间">
                      <a-range-picker v-model="date" value-format="YYYY-MM-DD"
                                      @change="handleDateChange" allow-clear></a-range-picker>
                    </a-form-item>
                  </a-col>
                  <a-col :md="4" :sm="4">
                    <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
                  </a-col>
                </a-row>
              </a-form>
            </div>
            <a-table :columns="columns" :data-source="dataSource" bordered :pagination="false" :loading="loading"
                     :rowSelection="{selectedRowKeys: selectedRowKeys,selectedRows:selectionRows, onChange: onSelectChange}"
                     @change="handleTableChange"
                     :scroll="{y:456}" :size="size" rowKey="docId">
            </a-table>
          </a-tab-pane>
        </a-tabs>
      </div>
      <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-button type="primary" @click="isExpandAllTreeNode=!isExpandAllTreeNode" style="margin: 0 8px">
                    å±•å¼€/折叠
                  </a-button>
                </div>
                <!--产品结构树-->
                <div style="overflow:auto;margin-top: 10px;height: 400px">
                  <a-tree blockNode checkable :checkedKeys="checkedKeys" :expandedKeys.sync="expandedKeys"
                          :autoExpandParent="autoExpandParent" @select="handleTreeNodeSelect"
                          :treeData="treeDataSource" @check="handleTreeNodeCheck" @expand="handleTreeNodeExpand">
                    <template slot="title" slot-scope="{ title, parentId, entity, key:treeKey,type}">
                     <span v-if="title.indexOf(searchValue) > -1">{{ title.substr(0, title.indexOf(searchValue)) }}<span
                       class="replaceSearch">{{
                         searchValue
                       }}</span>{{ title.substr(title.indexOf(searchValue) + searchValue.length) }}</span>
                      <span v-else>{{ title }}</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>
    </div>
  </a-modal>
</template>
<script>
import { getAction } from '@/api/manage'
import dncApi from '@/api/dnc'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
export default {
  name: 'NcDocumentSearchNcModal',
  components: {},
  mixins: [JeecgListMixin],
  props: {
    currentDocumentInfo: {
      type: Object
    },
    size: {
      type: String
    }
  },
  data() {
    return {
      disableMixinCreated: true,
      visible: false,
      title: '',
      columns: [
        {
          title: '序号',
          dataIndex: 'rowIndex',
          key: 'rowIndex',
          width: 50,
          align: 'center',
          customRender: function(t, r, index) {
            return parseInt(index) + 1
          }
        },
        {
          title: '节点名称',
          dataIndex: 'nodeName',
          align: 'center',
          width: 80,
          sorter: false
        },
        {
          title: '节点代号',
          dataIndex: 'nodeCode',
          align: 'center',
          width: 80,
          sorter: false
        },
        {
          title: '数控系统类别',
          dataIndex: 'deviceName',
          align: 'center',
          width: 80,
          sorter: false
        },
        {
          title: '轴数',
          dataIndex: 'deviceCode',
          align: 'center',
          width: 80,
          sorter: false
        },
        {
          title: '文件名称',
          dataIndex: 'docName',
          key: 'docName',
          align: 'center',
          width: 200,
          sorter: true
        },
        {
          title: '出库状态',
          dataIndex: 'pullStatus_dictText',
          key: 'pullStatus',
          align: 'center',
          width: 100,
          filters: [
            { text: '未出库', value: 1 },
            { text: '已出库', value: 2 }
          ]
        },
        {
          title: '状  æ€',
          dataIndex: 'docDispatchStatus_dictText',
          key: 'docDispatchStatus',
          align: 'center',
          width: 60,
          filters: [
            { text: '编制', value: 1 },
            { text: '校对', value: 2 },
            { text: '批准', value: 3 },
            { text: '试切', value: 4 },
            { text: '定型', value: 5 }
          ]
        },
        {
          title: '创建时间',
          dataIndex: 'createTime',
          align: 'center',
          width: 150,
          sorter: true
        }
      ],
      searchValue: '',
      searchInput: '',
      spinning: false,
      treeDataSource: [],
      allTreeKeys: [],
      checkedKeys: [],
      expandedKeys: [],
      autoExpandParent: true,
      isExpandAllTreeNode: true,
      date: [],
      url: {
        list: '/nc/product/query/nc'
      }
    }
  },
  watch: {
    visible: {
      handler(value) {
        if (value) {
          this.resetData()
          this.loadData()
          this.getDocumentAssignDeviceTreeByApi()
        }
      }
    },
    isExpandAllTreeNode: {
      handler(value) {
        if (value) this.expandedKeys = this.allTreeKeys
        else this.expandedKeys = []
      }
    }
  },
  created() {
    this.$bus.$on('treeMenuItemMethodTrigger', this.triggerCorrespondingMethod)
  },
  methods: {
    handleSearchNc() {
      this.visible = true
    },
    // èŽ·å–å½“å‰å¯¹åº”æ–‡æ¡£åˆ—è¡¨
    loadData() {
      this.dataSource = []
      if (!this.url.list) {
        this.$message.error('请设置url.list属性!')
        return
      }
      var params = this.getQueryParams()//查询条件
      if (!params) return false
      params.attributionType = this.currentDocumentInfo.type
      params.attributionId = this.currentDocumentInfo.key
      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
      })
    },
    // èŽ·å–DNC设备树
    getDocumentAssignDeviceTreeByApi() {
      this.spinning = true
      this.treeDataSource = []
      dncApi.getDeviceTreeDataApi()
        .then(res => {
          if (res.success) {
            this.dataList = []
            this.allTreeKeys = []
            this.treeDataSource = res.result
            this.generateList(this.treeDataSource)
            this.expandedKeys = this.allTreeKeys
          } else {
            this.$message.warn(res.message)
          }
        })
        .finally(() => {
          this.spinning = false
        })
    },
    // æ—¶é—´é€‰æ‹©å™¨é€‰æ‹©å®ŒæˆåŽè§¦å‘
    handleDateChange(value) {
      this.queryParam.startTime = value[0]
      this.queryParam.endTime = value[1]
    },
    /**
     * è¡¨æ ¼åˆ†é¡µã€æŽ’序改变、筛选时触发
     * @param pagination åˆ†é¡µå™¨é€‰é¡¹
     * @param filters ç­›é€‰é€‰é¡¹
     * @param sorter æŽ’序选项
     */
    handleTableChange(pagination, filters, sorter) {
      if (sorter.order) {
        this.isorter.column = sorter.field
        this.isorter.order = sorter.order === 'ascend' ? 'asc' : 'desc'
      } else {
        this.isorter.column = 'createTime'
        this.isorter.order = 'desc'
      }
      for (let key in filters) {
        this.filters[key] = filters[key].join(',')
      }
      this.loadData()
    },
    // æŒ‡æ´¾åˆ°è®¾å¤‡çª—口点击确定指派设备后触发
    handleAssignDocumentToDevice() {
      const {
        checkedKeys,
        selectedRowKeys,
        selectionRows,
        dataList,
        $confirm,
        $notification,
        currentDocumentInfo,
        queryParam: { applyReason },
        $destroyAll,
        $bus
      } = this
      const { attributionId, attributionType } = currentDocumentInfo
      const paramsArray = []
      // è¿‡æ»¤è½¦é—´key仅放入设备key
      const treeCheckedDeviceKeys = []
      checkedKeys.forEach(checkedKey => {
        const device = dataList.find(item => item.key === checkedKey && item.type === 2)
        if (device) treeCheckedDeviceKeys.push(device.key)
      })
      if (treeCheckedDeviceKeys.length === 0 || selectedRowKeys.length === 0) {
        $notification.warning({
          message: '消息',
          description: '请选择设备或文档'
        })
        return
      }
      $confirm({
        title: '提示',
        content: `确认提交吗?`,
        okText: '确认',
        cancelText: '取消',
        onOk: () => {
          // åŒé‡å¾ªçŽ¯ç¡®å®šæ¯ä¸€ç»„è®¾å¤‡ä¸Žæ–‡æ¡£çš„å‚æ•°
          treeCheckedDeviceKeys.forEach(deviceId => {
            selectionRows.forEach(({ docId, publishFileId ,attributionId,attributionType}) => {
              paramsArray.push({
                docId,
                deviceId,
                fileId: publishFileId,
                attributionId,
                attributionType,
                applyReason
              })
            })
          })
          paramsArray.forEach(item => {
            dncApi.assignDocumentToDeviceApi(item)
              .then(res => {
                if (res.success) {
                  $bus.$emit('reloadMainBottomTableData', 'useDocumentEquipment')
                  $notification.success({
                    message: '消息',
                    description: res.message
                  })
                } else {
                  $notification.error({
                    message: '消息',
                    description: res.message
                  })
                }
              })
              .catch(err => {
                $notification.error({
                  message: '消息',
                  description: err.message
                })
              })
              .finally(() => {
                $destroyAll()
              })
          })
        },
        onCancel: () => {
          $destroyAll()
        }
      })
    },
    /* è¾“入查询内容变化时触发 */
    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
     */
    handleTreeNodeExpand(expandedKeys) {
      this.expandedKeys = expandedKeys
      this.autoExpandParent = false
    },
    /**
     * æ ‘节点复选框选中时触发
     * @param selectedKeys é€‰ä¸­èŠ‚ç‚¹key
     * @param {node} node èŠ‚ç‚¹å¯¹è±¡
     */
    handleTreeNodeCheck(checkedKeys, { node }) {
      let record = node.dataRef
      this.checkedKeys = checkedKeys
    },
    /**
     * æ ‘节点选中时触发(模拟树节点复选框选中时的效果)
     * @param selectedKeys é€‰ä¸­èŠ‚ç‚¹key
     * @param {node} node èŠ‚ç‚¹å¯¹è±¡
     */
    handleTreeNodeSelect(selectedKeys, { node }) {
      node.$el.childNodes[1].click()
    },
    /**
     * é€’归获得输入项的父级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++) {
        const node = data[i]
        const key = node.key
        const title = node.title
        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.selectionRows = {}
      this.checkedKeys = []
      this.filters = {}
      this.isorter = Object.assign({}, this.defaultSorter)
    },
    handleDelete() {
      // æ­¤å¤„函数为屏蔽mixins中的同名函数,通用函数写在父级中
    },
    triggerCorrespondingMethod({ methodName, modalTitle }) {
      if (this[methodName]) {
        this[methodName]()
        this.title = modalTitle
      }
    }
  }
}
</script>
<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);
    }
  }
}
::-webkit-scrollbar {
  width: 8px;
}
</style>
src/views/dnc/base/modules/ProductStructure/Document/NcDocumentTableList.vue
@@ -17,6 +17,7 @@
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import DocumentModal from '../../../../common/DocumentModal'
import NcDocumentAssignModal from './NcDocumentAssignModal'
import dncApi from '@api/dnc'
export default {
  name: 'NcDocumentTableList',
@@ -38,7 +39,7 @@
          title: '序号',
          dataIndex: 'rowIndex',
          key: 'rowIndex',
          width: 65,
          width: 50,
          align: 'center',
          customRender: function(t, r, index) {
            return parseInt(index) + 1
@@ -49,10 +50,10 @@
          dataIndex: 'docName',
          key: 'docName',
          align: 'center',
          width: 300,
          scopedSlots: {customRender: 'docName'},
          width: 500,
          sorter: true
        },
        { title: '代码版本', dataIndex: 'docAlias', align: 'center' },
        {
          title: '出库状态',
          dataIndex: 'pullStatus_dictText',
@@ -61,10 +62,11 @@
          filters: [
            { text: '未出库', value: 1 },
            { text: '已出库', value: 2 }
          ]
          ],
          width: 100
        },
        {
          title: '状  æ€',
          title: '状态',
          dataIndex: 'docDispatchStatus_dictText',
          key: 'docDispatchStatus',
          align: 'center',
@@ -74,14 +76,15 @@
            { text: '批准', value: 3 },
            { text: '试切', value: 4 },
            { text: '定型', value: 5 }
          ]
          ],
          width: 70
        },
        { title: '系统指定版本', dataIndex: 'publishVersion', align: 'center', width: 200 },
        { title: '系统指定版本', dataIndex: 'publishVersion', align: 'center', width: 120 },
        {
          title: '创建时间',
          dataIndex: 'createTime',
          align: 'center',
          width: 200,
          width: 150,
          sorter: true
        }
      ],
@@ -190,6 +193,45 @@
      this.$refs.documentAssignModalRef.visible = true
    },
    handleDocumentExtract(record){
      const that = this
      const { docId,attributionId, attributionType } = record
      that.$confirm({
        title: '提示',
        content: `确认提取刀具吗?`,
        okText: '确认',
        cancelText: '取消',
        onOk: () => {
          dncApi.extractToolsApi({ docId, attributionId, attributionType })
            .then(res => {
              if (res.success) {
                that.$notification.success({
                  message: '消息',
                  description: `提取成功`
                })
              } else {
                that.$notification.error({
                  message: '消息',
                  description: res.message
                })
              }
            })
            .catch(err => {
              that.$notification.error({
                message: '消息',
                description: err.message
              })
            })
            .finally(() => {
              that.$destroyAll()
            })
        },
        onCancel: () => {
          that.$destroyAll()
        }
      })
    },
    handleDelete() {
      // æ­¤å¤„函数为屏蔽mixins中的同名函数,通用函数写在父级中
    },
src/views/dnc/base/modules/ProductStructure/GuideCardBatch/GuideCardBatchEditForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,121 @@
<template>
  <a-spin :spinning="confirmLoading">
    <j-form-container :disabled="formDisabled">
      <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
        <a-row>
          <a-col :span="24">
            <a-form-model-item label="夹具" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fixtureInformation">
              <a-input v-model="model.fixtureInformation" placeholder="请输入夹具"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="图片" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="picture">
              <j-image-upload isMultiple :number="1" v-model="model.picture" ></j-image-upload>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="说明信息" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remake">
              <a-textarea v-model="model.remake" rows="4" placeholder="请输入说明信息" />
            </a-form-model-item>
          </a-col>
        </a-row>
      </a-form-model>
    </j-form-container>
  </a-spin>
</template>
<script>
  import { httpAction, getAction } from '@api/manage'
  import { validateDuplicateValue } from '@/utils/util'
  export default {
    name: 'GuideCardBatchForm',
    components: {
    },
    props: {
      //表单禁用
      disabled: {
        type: Boolean,
        default: false,
        required: false
      }
    },
    data () {
      return {
        model:{
         },
        labelCol: {
          xs: { span: 24 },
          sm: { span: 5 },
        },
        wrapperCol: {
          xs: { span: 24 },
          sm: { span: 16 },
        },
        confirmLoading: false,
        validatorRules: {
           fixtureInformation: [
              { required: true, message: '请输入夹具!'},
           ],
           picture: [
              { required: true, message: '请输入图片!'},
           ],
           remake: [
              { required: true, message: '请输入说明信息!'},
           ],
        },
        url: {
          edit: "/dnc/guideCardBatch/edit",
        }
      }
    },
    computed: {
      formDisabled(){
        return this.disabled
      },
    },
    created () {
       //备份model原始值
      this.modelDefault = JSON.parse(JSON.stringify(this.model));
    },
    methods: {
      add () {
        this.edit(this.modelDefault);
      },
      edit (record) {
        this.model = Object.assign({}, record);
        this.visible = true;
      },
      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;
               method = 'put';
            }
            httpAction(httpurl,this.model,method).then((res)=>{
              if(res.success){
                that.$message.success(res.message);
                that.$emit('ok');
              }else{
                that.$message.warning(res.message);
              }
            }).finally(() => {
              that.confirmLoading = false;
            })
          }
        })
      },
    }
  }
</script>
src/views/dnc/base/modules/ProductStructure/GuideCardBatch/GuideCardBatchForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,213 @@
<template>
  <a-spin :spinning="confirmLoading">
    <j-form-container :disabled="formDisabled">
      <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
        <a-row>
          <a-col :span="24">
            <a-form-model-item label="流水号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="serialNumber">
              <a-input v-model="model.serialNumber" placeholder="请输入流水号"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="单位" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="unit">
              <a-input v-model="model.unit" placeholder="请输入单位"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="程序文件名" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="docName">
              <a-input v-model="model.docName" placeholder="请输入程序文件名"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="零件图号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="partsCode">
              <a-input v-model="model.partsCode" placeholder="请输入零件图号"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="零件名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="partsName">
              <a-input v-model="model.partsName" placeholder="请输入零件名称"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="零件材料" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materielDesp">
              <a-input v-model="model.materielDesp" placeholder="请输入零件材料"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="夹具" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fixtureInformation">
              <a-input v-model="model.fixtureInformation" placeholder="请输入夹具"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="工序(工步号)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="processWorkCode">
              <a-input v-model="model.processWorkCode" placeholder="请输入工序(工步号)"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="加工批次" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="processingBatch">
              <a-input v-model="model.processingBatch" placeholder="请输入加工批次"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="加工数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="processingQuantity">
              <a-input v-model="model.processingQuantity" placeholder="请输入加工数量"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="加工设备" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="processingEquipment">
              <a-input v-model="model.processingEquipment" placeholder="请输入加工设备"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="图片" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="picture">
              <j-image-upload isMultiple  v-model="model.picture" ></j-image-upload>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="说明信息" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remake">
              <a-textarea v-model="model.remake" rows="4" placeholder="请输入说明信息" />
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="编写人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="compiler">
              <a-input v-model="model.compiler" placeholder="请输入编写人"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="编写日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="compilerTime">
              <j-date placeholder="请选择编写日期" v-model="model.compilerTime"  style="width: 100%" />
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="校对人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="proofreader">
              <a-input v-model="model.proofreader" placeholder="请输入校对人"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="校对日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="proofreaderTime">
              <j-date placeholder="请选择校对日期" v-model="model.proofreaderTime"  style="width: 100%" />
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="操作者" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="operator">
              <a-input v-model="model.operator" placeholder="请输入操作者"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="首检日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inspectionTime">
              <j-date placeholder="请选择首检日期" v-model="model.inspectionTime"  style="width: 100%" />
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="审批人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approver">
              <a-input v-model="model.approver" placeholder="请输入审批人"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="审批日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approverTime">
              <j-date placeholder="请选择审批日期" v-model="model.approverTime"  style="width: 100%" />
            </a-form-model-item>
          </a-col>
        </a-row>
      </a-form-model>
    </j-form-container>
  </a-spin>
</template>
<script>
  import { httpAction, getAction } from '@api/manage'
  import { validateDuplicateValue } from '@/utils/util'
  export default {
    name: 'GuideCardBatchForm',
    components: {
    },
    props: {
      //表单禁用
      disabled: {
        type: Boolean,
        default: false,
        required: false
      }
    },
    data () {
      return {
        model:{
         },
        labelCol: {
          xs: { span: 24 },
          sm: { span: 5 },
        },
        wrapperCol: {
          xs: { span: 24 },
          sm: { span: 16 },
        },
        confirmLoading: false,
        validatorRules: {
           fixtureInformation: [
              { required: true, message: '请输入夹具!'},
           ],
           picture: [
              { required: true, message: '请输入图片!'},
           ],
           remake: [
              { required: true, message: '请输入说明信息!'},
           ],
        },
        url: {
          add: "/dnc/guideCardBatch/add",
          edit: "/dnc/guideCardBatch/edit",
          queryById: "/dnc/guideCardBatch/queryById"
        }
      }
    },
    computed: {
      formDisabled(){
        return this.disabled
      },
    },
    created () {
       //备份model原始值
      this.modelDefault = JSON.parse(JSON.stringify(this.model));
    },
    methods: {
      add () {
        this.edit(this.modelDefault);
      },
      edit (record) {
        this.model = Object.assign({}, record);
        this.visible = true;
      },
      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;
               method = 'put';
            }
            httpAction(httpurl,this.model,method).then((res)=>{
              if(res.success){
                that.$message.success(res.message);
                that.$emit('ok');
              }else{
                that.$message.warning(res.message);
              }
            }).finally(() => {
              that.confirmLoading = false;
            })
          }
        })
      },
    }
  }
</script>
src/views/dnc/base/modules/ProductStructure/GuideCardBatch/GuideCardBatchList.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,250 @@
<template>
  <a-card :bordered="false">
    <!-- æŸ¥è¯¢åŒºåŸŸ -->
    <div class="table-page-search-wrapper">
      <a-form layout="inline" @keyup.enter.native="searchQuery">
        <a-row :gutter="24">
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="流水号">
              <a-input placeholder="请输入流水号" v-model="queryParam.serialNumber"></a-input>
            </a-form-item>
          </a-col>
            <a-col :xl="6" :lg="7" :md="8" :sm="24">
              <a-form-item label="夹具">
                <a-input placeholder="请输入夹具" v-model="queryParam.fixtureInformation"></a-input>
              </a-form-item>
            </a-col>
            <a-col :xl="6" :lg="7" :md="8" :sm="24">
              <a-form-item label="加工批次">
                <a-input placeholder="请输入加工批次" v-model="queryParam.processingBatch"></a-input>
              </a-form-item>
            </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
            </span>
          </a-col>
        </a-row>
      </a-form>
    </div>
    <!-- æŸ¥è¯¢åŒºåŸŸ-END -->
    <!-- table区域-begin -->
    <div>
      <a-table
        ref="table"
        size="middle"
        :scroll="{x:true}"
        bordered
        rowKey="id"
        :columns="columns"
        :dataSource="dataSource"
        :pagination="ipagination"
        :loading="loading"
        class="j-table-force-nowrap"
        @change="handleTableChange">
        <template slot="htmlSlot" slot-scope="text">
          <div v-html="text"></div>
        </template>
        <template slot="imgSlot" slot-scope="text,record">
          <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
          <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
        </template>
        <template slot="fileSlot" slot-scope="text">
          <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
          <a-button
            v-else
            :ghost="true"
            type="primary"
            icon="download"
            size="small"
            @click="downloadFile(text)">
            ä¸‹è½½
          </a-button>
        </template>
        <span slot="action" slot-scope="text, record">
          <a @click="handleEdit(record)">上传/修改信息</a>
          <a-divider type="vertical" />
          <a @click="handleDetail(record)">生成数控加工程序确认表</a>
          <a-divider type="vertical" />
          <a @click="handleDetail(record)">发起流程</a>
          <a-divider type="vertical" />
          <a @click="handleDetail(record)">详情</a>
        </span>
      </a-table>
    </div>
    <guide-card-batch-modal ref="modalForm" @ok="modalFormOk"></guide-card-batch-modal>
    <GuideCardBatchModalDrawer  ref="modalEditForm" @ok="modalFormOk"></GuideCardBatchModalDrawer>
  </a-card>
</template>
<script>
  import '@assets/less/TableExpand.less'
  import { mixinDevice } from '@/utils/mixin'
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import GuideCardBatchModal from './GuideCardBatchModal'
  import GuideCardBatchModalDrawer from './GuideCardBatchModal.Style#Drawer.vue'
  import { getAction } from '@api/manage'
  export default {
    name: 'GuideCardBatchList',
    mixins:[JeecgListMixin, mixinDevice],
    props: {
      guideCardBatchInfo: {
        type: Object
      },
      size: {
        type: String
      }
    },
    components: {
      GuideCardBatchModal,
      GuideCardBatchModalDrawer
    },
    data () {
      return {
        description: 'nc文件对应数控程序加工确认表管理页面',
        // è¡¨å¤´
        columns: [
          {
            title: '#',
            dataIndex: '',
            key:'rowIndex',
            width:60,
            align:"center",
            customRender:function (t,r,index) {
              return parseInt(index)+1;
            }
          },
          {
            title:'流水号',
            align:"center",
            dataIndex: 'serialNumber'
          },
          {
            title:'夹具',
            align:"center",
            dataIndex: 'fixtureInformation'
          },
          {
            title:'加工批次',
            align:"center",
            dataIndex: 'processingBatch'
          },
          {
            title:'加工数量',
            align:"center",
            dataIndex: 'processingQuantity'
          },
          {
            title:'加工设备',
            align:"center",
            dataIndex: 'processingEquipment'
          },
          {
            title: '操作',
            dataIndex: 'action',
            align:"center",
            fixed:"right",
            width:147,
            scopedSlots: { customRender: 'action' }
          }
        ],
        url: {
          list: "/dnc/guideCardBatch/list",
          delete: "/dnc/guideCardBatch/delete",
          deleteBatch: "/dnc/guideCardBatch/deleteBatch",
          exportXlsUrl: "/dnc/guideCardBatch/exportXls",
          importExcelUrl: "dnc/guideCardBatch/importExcel",
        },
        dictOptions:{},
        superFieldList:[],
      }
    },
    created() {
    this.getSuperFieldList();
    },
    computed: {
      importExcelUrl: function(){
        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
      },
    },
    methods: {
      initDictConfig(){
      },
      getGuideCardBatchList(){
        console.log('currentDocumentInfo', this.guideCardBatchInfo)
        let params
        params.docId=this.guideCardBatchInfo.docId;
        params.serialNumber=this.queryParam.serialNumber;
        params.fixtureInformation=this.guideCardBatchInfo.fixtureInformation;
        params.processingBatch=this.guideCardBatchInfo.processingBatch;
        this.loading = true
        getAction(this.url.list,params).then((res) => {
          if (res.success) {
            this.dataSource = res.result.records||res.result;
            if(res.result.total)
            {
              this.ipagination.total = res.result.total;
            }else{
              this.ipagination.total = 0;
            }
          }else{
            this.$message.warning(res.message)
          }
        }).finally(() => {
          this.loading = false
        })
      },
      getSuperFieldList(){
        let fieldList=[];
        fieldList.push({type:'string',value:'serialNumber',text:'流水号',dictCode:''})
        fieldList.push({type:'string',value:'unit',text:'单位',dictCode:''})
        fieldList.push({type:'string',value:'docName',text:'程序文件名',dictCode:''})
        fieldList.push({type:'string',value:'partsCode',text:'零件图号',dictCode:''})
        fieldList.push({type:'string',value:'partsName',text:'零件名称',dictCode:''})
        fieldList.push({type:'string',value:'materielDesp',text:'零件材料',dictCode:''})
        fieldList.push({type:'string',value:'fixtureInformation',text:'夹具',dictCode:''})
        fieldList.push({type:'string',value:'processWorkCode',text:'工序(工步号)',dictCode:''})
        fieldList.push({type:'string',value:'processingBatch',text:'加工批次',dictCode:''})
        fieldList.push({type:'string',value:'processingQuantity',text:'加工数量',dictCode:''})
        fieldList.push({type:'string',value:'processingEquipment',text:'加工设备',dictCode:''})
        fieldList.push({type:'Text',value:'picture',text:'图片',dictCode:''})
        fieldList.push({type:'string',value:'remake',text:'说明信息',dictCode:''})
        fieldList.push({type:'string',value:'compiler',text:'编写人',dictCode:''})
        fieldList.push({type:'date',value:'compilerTime',text:'编写日期'})
        fieldList.push({type:'string',value:'proofreader',text:'校对人',dictCode:''})
        fieldList.push({type:'date',value:'proofreaderTime',text:'校对日期'})
        fieldList.push({type:'string',value:'operator',text:'操作者',dictCode:''})
        fieldList.push({type:'date',value:'inspectionTime',text:'首检日期'})
        fieldList.push({type:'string',value:'approver',text:'审批人',dictCode:''})
        fieldList.push({type:'date',value:'approverTime',text:'审批日期'})
        this.superFieldList = fieldList
      },
      handleEdit(record) {
        this.$refs.modalEditForm.edit(record);
        this.$refs.modalEditForm.title = "上传/修改信息";
        this.$refs.modalEditForm.disableSubmit = false;
      },
    }
  }
</script>
<style scoped>
  @import '~@assets/less/common.less';
</style>
src/views/dnc/base/modules/ProductStructure/GuideCardBatch/GuideCardBatchModal.Style#Drawer.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
<template>
  <a-drawer
    :title="title"
    :width="width"
    placement="right"
    :closable="false"
    @close="close"
    destroyOnClose
    :visible="visible">
    <GuideCardBatchEditForm ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></GuideCardBatchEditForm>
    <div class="drawer-footer">
      <a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
      <a-button v-if="!disableSubmit"  @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
    </div>
  </a-drawer>
</template>
<script>
  import GuideCardBatchEditForm from './GuideCardBatchEditForm.vue'
  export default {
    name: 'GuideCardBatchModal',
    components: {
      GuideCardBatchEditForm
    },
    data () {
      return {
        title:"操作",
        width:800,
        visible: false,
        disableSubmit: false
      }
    },
    methods: {
      add () {
        this.visible=true
        this.$nextTick(()=>{
          this.$refs.realForm.add();
        })
      },
      edit (record) {
        this.visible=true
        this.$nextTick(()=>{
          this.$refs.realForm.edit(record);
        });
      },
      close () {
        this.$emit('close');
        this.visible = false;
      },
      submitCallback(){
        this.$emit('ok');
        this.visible = false;
      },
      handleOk () {
        this.$refs.realForm.submitForm();
      },
      handleCancel () {
        this.close()
      }
    }
  }
</script>
<style lang="less" scoped>
/** Button按钮间距 */
  .ant-btn {
    margin-left: 30px;
    margin-bottom: 30px;
    float: right;
  }
  .drawer-footer{
    position: absolute;
    bottom: -8px;
    width: 100%;
    border-top: 1px solid #e8e8e8;
    padding: 10px 16px;
    text-align: right;
    left: 0;
    background: #fff;
    border-radius: 0 0 2px 2px;
  }
</style>
src/views/dnc/base/modules/ProductStructure/GuideCardBatch/GuideCardBatchModal.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
<template>
  <j-modal
    :title="title"
    :width="width"
    :visible="visible"
    switchFullscreen
    @ok="handleOk"
    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
    @cancel="handleCancel"
    cancelText="关闭">
    <guide-card-batch-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></guide-card-batch-form>
  </j-modal>
</template>
<script>
  import GuideCardBatchForm from './GuideCardBatchForm'
  export default {
    name: 'GuideCardBatchModal',
    components: {
      GuideCardBatchForm
    },
    data () {
      return {
        title:'',
        width:800,
        visible: false,
        disableSubmit: false
      }
    },
    methods: {
      add () {
        this.visible=true
        this.$nextTick(()=>{
          this.$refs.realForm.add();
        })
      },
      edit (record) {
        this.visible=true
        this.$nextTick(()=>{
          this.$refs.realForm.edit(record);
        })
      },
      close () {
        this.$emit('close');
        this.visible = false;
      },
      handleOk () {
        this.$refs.realForm.submitForm();
      },
      submitCallback(){
        this.$emit('ok');
        this.visible = false;
      },
      handleCancel () {
        this.close()
      }
    }
  }
</script>
src/views/dnc/base/modules/ProductStructure/ProductStructureMainBottom.vue
@@ -31,12 +31,6 @@
                                               :currentLevelDetails="currentLevelInfo" :size="containerSize"/>
      </a-tab-pane>
      <!--系统参数配置中若参数为1时才展示对应层级的刀具列表-->
      <a-tab-pane :key="2" tab="刀具列表"
                  v-if="+currentLevelInfo.type===5&&isProcessHasCutterList||+currentLevelInfo.type===6&&isProcessStepHasCutterList">
        <CutterTableList ref="cutterTableListRef" :currentLevelInfo="currentLevelInfo" :size="containerSize"/>
      </a-tab-pane>
      <template v-if="currentLevelInfo.hasOwnProperty('docId')">
        <a-tab-pane :key="1" tab="文档属性">
          <DocumentInfo :currentLevelDetails="currentLevelInfo" :size="containerSize"/>
@@ -57,6 +51,20 @@
          <UseDocumentEquipmentTableList ref="useDocumentEquipmentTableRef" :currentDocumentInfo="currentLevelInfo"
                                         :size="containerSize"/>
        </a-tab-pane>
        <a-tab-pane :key="5" tab="刀具列表">
          <CutterTableList ref="cutterTableListRef" :currentLevelInfo="currentLevelInfo" :size="containerSize"/>
        </a-tab-pane>
        <a-tab-pane :key="6" tab="审签详情">
          <DocumentInfoFlow ref="flowTableListRef" :currentLevelDetails="currentLevelInfo" :size="containerSize"/>
        </a-tab-pane>
        <a-tab-pane :key="7" tab="批次列表">
          <GuideCardBatchList ref="guideCardBatchInfoRef" :guideCardBatchInfo="currentLevelInfo" :size="containerSize"/>
        </a-tab-pane>
      </template>
    </a-tabs>
@@ -72,6 +80,7 @@
import ProcessStepInfo from './ProcessStep/ProcessStepInfo'
import CutterTableList from './Cutter/CutterTableList'
import DocumentInfo from '../../../common/DocumentInfo'
import DocumentInfoFlow from '../../../common/DocumentInfoFlow.vue'
import DocumentVersionTableList from '../../../common/DocumentVersionTableList'
import UseDocumentEquipmentTableList from './Document/UseNcDocumentEquipmentTableList'
import FilePreview from '../../../common/FilePreview'
@@ -81,10 +90,12 @@
import ProcessSpecVersionInfo
  from '@views/dnc/base/modules/ProductStructure/ProcessSpecVersion/ProcessSpecVersionInfo.vue'
import { getAction } from '@/api/manage'
import GuideCardBatchList from '@views/dnc/base/modules/ProductStructure/GuideCardBatch/GuideCardBatchList.vue'
export default {
  name: 'ProductStructureMainBottom',
  components: {
    GuideCardBatchList,
    ProcessSpecVersionInfo,
    UseDeviceCustomTypeEquipmentTableList,
    CutterTableList,
@@ -94,6 +105,7 @@
    UseDocumentEquipmentTableList,
    DocumentVersionTableList,
    DocumentInfo,
    DocumentInfoFlow,
    ProcessInfo,
    PartInfo,
    ProductInfo,
@@ -170,6 +182,14 @@
          case 4:
            this.$nextTick(() => this.$refs.useDocumentEquipmentTableRef.loadData())
            break
          case 5:
            this.$nextTick(() => this.$refs.cutterTableListRef.setQueryParamAndLoadData(1))
            break
          case 6:
            this.$nextTick(() => this.$refs.flowTableListRef.getAllApproveData())
            break
          case 7:
            this.$nextTick(() => this.$refs.guideCardBatchInfoRef.getGuideCardBatchList())
          default:
        }
        // é˜»æ­¢æŽ¥å£åœ¨åŒä¸€æ–‡æ¡£ä¸€æ¬¡ç‚¹å‡»å†…多次触发
src/views/dnc/base/modules/ProductStructure/ProductStructureTree.vue
@@ -63,6 +63,8 @@
    <AssignPermissionModal :currentTreeNodeInfo="rightClickSelected" @submitSuccess="modalFormSubmitSuccess" />
    <!--检索电子模板弹窗-->
    <NcDocumentSearchModal :currentDocumentInfo="rightClickSelected" @submitSuccess="modalFormSubmitSuccess" />
    <!--检索NC文件弹窗-->
    <NcDocumentSearchNcModal :currentDocumentInfo="rightClickSelected" @submitSuccess="modalFormSubmitSuccess" />
    <!--引用部件-->
    <NcComponentBorrowModal :currentBorrowInfo="rightClickSelected" @submitSuccess="modalFormSubmitSuccess" />
    <!--产品结构树基本右键菜单(空白处触发)-->
@@ -85,6 +87,7 @@
import ProductStructureBaseContextMenu
  from '@views/dnc/base/modules/ProductStructure/ProductStructureBaseContextMenu.vue'
import NcDocumentSearchModal from '@views/dnc/base/modules/ProductStructure/Document/NcDocumentSearchModal.vue'
import NcDocumentSearchNcModal from '@views/dnc/base/modules/ProductStructure/Document/NcDocumentSearchNcModal.vue'
import NcComponentBorrowModal from '@views/dnc/base/modules/ProductStructure/Document/NcComponentBorrowModal.vue'
export default {
@@ -101,6 +104,7 @@
    ProductModal,
    ProductStructureTreeContextMenu,
    NcDocumentSearchModal,
    NcDocumentSearchNcModal,
    NcComponentBorrowModal
  },
  data() {
src/views/dnc/base/modules/ProductStructure/ProductStructureTreeContextMenu.vue
@@ -41,6 +41,7 @@
          // {  label: '导出文档', code: 'product_export', icon: 'export', isCommonMethod: true },
          { label: '导入其他文档', code: 'product_other_import', icon: 'import', isCommonMethod: true },
          { label: '检索电子样板', code: 'product_search', icon: 'search', isCommonMethod: true },
          { label: '检索NC文件', code: 'product_search_nc', icon: 'search', isCommonMethod: true },
          { label: '删除', code: 'product_delete', icon: 'delete', isCommonMethod: true },
          { label: '权限配置', code: 'public_assign_permission', icon: 'idcard', isCommonMethod: true }
        ],
@@ -53,6 +54,7 @@
          // {  label: '导出文档', code: 'component_export', icon: 'export', isCommonMethod: true },
          { label: '导入其他文档', code: 'component_other_import', icon: 'import', isCommonMethod: true },
          { label: '检索电子样板', code: 'component_search', icon: 'search', isCommonMethod: true },
          { label: '检索NC文件', code: 'component_search_nc', icon: 'search', isCommonMethod: true },
          { label: '引用部件',code: 'component_borrow',icon: 'plus',isCommonMethod: false},
          { label: '删除', code: 'component_delete', icon: 'delete', isCommonMethod: true },
          { label: '权限配置', code: 'public_assign_permission', icon: 'idcard', isCommonMethod: true }
@@ -66,6 +68,7 @@
          // {  label: '导出文档', code: 'parts_export', icon: 'export', isCommonMethod: true },
          { label: '导入其他文档', code: 'parts_other_import', icon: 'import', isCommonMethod: true },
          { label: '检索电子样板', code: 'parts_search', icon: 'search', isCommonMethod: true },
          { label: '检索NC文件', code: 'parts_search_nc', icon: 'search', isCommonMethod: true },
          { label: '删除', code: 'parts_delete', icon: 'delete', isCommonMethod: true },
          { label: '权限配置', code: 'public_assign_permission', icon: 'idcard', isCommonMethod: true }
        ],
@@ -76,6 +79,7 @@
          { label: '编辑工艺规程版本信息', code: 'version_edit', icon: 'edit', isCommonMethod: false },
          { label: '导入其他文档', code: 'version_other_import', icon: 'import', isCommonMethod: true },
          { label: '检索电子样板', code: 'version_search', icon: 'search', isCommonMethod: true },
          { label: '检索NC文件', code: 'version_search_nc', icon: 'search', isCommonMethod: true },
          { label: '删除', code: 'version_delete', icon: 'delete', isCommonMethod: true },
          { label: '权限配置', code: 'public_assign_permission', icon: 'idcard', isCommonMethod: true }
        ],
@@ -89,6 +93,8 @@
          // {  label: '导出NC程序', code: 'process_export', icon: 'export', isCommonMethod: true },
          { label: '导入NC程序', code: 'process_nc_import', icon: 'import', isCommonMethod: true },
          { label: '导入其他文档', code: 'process_other_import', icon: 'import', isCommonMethod: true },
          { label: '检索电子样板', code: 'process_search', icon: 'search', isCommonMethod: true },
          { label: '检索NC文件', code: 'process_search_nc', icon: 'search', isCommonMethod: true },
          { label: '权限配置', code: 'public_assign_permission', icon: 'idcard', isCommonMethod: true }
        ],
        //工步
@@ -100,6 +106,8 @@
          // {  label: '导出NC程序', code: 'processStep_export', icon: 'import', isCommonMethod: true },
          { label: '导入NC程序', code: 'processStep_nc_import', icon: 'import', isCommonMethod: true },
          { label: '导入其他文档', code: 'processStep_other_import', icon: 'import', isCommonMethod: true },
          { label: '检索电子样板', code: 'processStep_search', icon: 'search', isCommonMethod: true },
          { label: '检索NC文件', code: 'processStep_search_nc', icon: 'search', isCommonMethod: true },
          { label: '权限配置', code: 'public_assign_permission', icon: 'idcard', isCommonMethod: true }
        ]
      }
src/views/dnc/common/DocumentInfo.vue
@@ -1,7 +1,6 @@
<template>
  <a-descriptions bordered :size="size" :column="4">
    <a-descriptions-item label="文档名称">{{currentLevelDetails.docName}}</a-descriptions-item>
    <a-descriptions-item label="代码版本">{{currentLevelDetails.docAlias}}</a-descriptions-item>
    <a-descriptions-item label="设备编号">{{currentLevelDetails.docCode}}</a-descriptions-item>
    <a-descriptions-item label="文档后缀">{{currentLevelDetails.docSuffix}}</a-descriptions-item>
    <a-descriptions-item label="文档状态">{{currentLevelDetails.docDispatchStatus_dictText}}</a-descriptions-item>
src/views/dnc/common/DocumentInfoFlow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,205 @@
<!--
 Description: å·¥ä½œæµ-指派设备详情页面 List
 Author: ä½œè€… liuyh
 Date:   2025-02-27
-->
<template>
    <a-card :bordered="false">
      <div>
        <a-timeline style="padding:0 1% 0 12%" >
          <a-timeline-item color='white' v-for="(item,index1) in hitaskDataSource" :key="index1">
            <div class="bottom">
              <p>处理人:{{item.assignee_dictText}}</p>
              <p v-if="index1 !==0">处理时长:{{item.duration}}</p>
              <p v-if="item.name !== '提交申请'">处理类型:{{item.sequenceFlowName}}</p>
              <p v-if="item.description != null">处理意见:{{item.description}}</p>
              <div class="left_qiu"><span>{{item.taskName}}</span></div>
            </div>
          </a-timeline-item>
        </a-timeline>
      </div>
    </a-card>
</template>
<script>
import '@assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { getAction, deleteAction, postAction, downFile, httpAction } from '@api/manage'
export default {
  name: 'FlowShenPi',
  mixins: [mixinDevice],
  props: {
    currentLevelDetails: {
      type: Object
    },
    size: {
      type: String
    }
  },
  data() {
    return {
      form: this.$form.createForm(this),
      span: 12,
      span1: 8,
      coldisabled: true,
      spinning: false,
      tableRowRecord: {},
      assignFileStream:{},
      tableDataSource: [],
      usageDataSource: [],
      hitaskDataSource:[],
      bomForm: {},
      approveContent:"",
      imageSrc: null,
      drawerVisible: true,
      labelCol: {
        xs: { span: 24 },
        sm: { span: 5 }
      },
      wrapperCol: {
        xs: { span: 30 },
        sm: { span: 16 }
      },
      validatorRules: {
        version: {
          rules: [
            { required: true, message: '请输入文档版本!'},
          ]
        },
        applyUser: {
          rules: [
            { required: true, message: '请选择申请人!'},
          ]
        },
        approveContent: {
          rules: [
            { required: true, message: '请输入审批意见!'},
          ]
        },
        docName: {
          rules: [
            { required: true, message: '请输入文档名称!'},
          ]
        },
        status: {
          rules: [
            { required: true, message: '请选择审批状态!'},
          ]
        },
      },
      approveData: {},
      flowData: {},
      title: '详情页面',
      width: 1000,
      visible: false,
      // è¡¨å¤´
      url: {
        queryHisTaskList:'/dncFlow/dispatchFile/queryDispatchDocFile',
      },
      dictOptions: {},
      superFieldList: [],
      workflowSource: []
    }
  },
  created() {
  },
  computed: {},
  methods: {
    callback() {
    },
    handCancel() {
      this.visible = false
    },
    getAllApproveData() {
      console.log('currentLevelDetails----->', this.currentLevelDetails)
      let parmhis={
        'attributionId': this.currentLevelDetails.attributionId,
        'attributionType': this.currentLevelDetails.attributionType,
        'docId': this.currentLevelDetails.docId
      }
      getAction(this.url.queryHisTaskList,parmhis).then(res=>{
        this.hitaskDataSource=res.result
      }).finally(
        this.visible = true,
        console.log('this.approveData---->', this.approveData)
      )
    }
  }
}
</script>
<style scoped>
.shallow-hr {
  border: 0;
  height: 1px; /* åˆ†ç•Œçº¿çš„高度 */
  background-color: rgba(0, 0, 0, 0.1); /* ä½¿ç”¨ RGBA é¢œè‰²ï¼Œå¹¶è®¾ç½®è¾ƒä½Žçš„透明度 */
  margin: 20px 0; /* åˆ†ç•Œçº¿ä¸Šä¸‹çš„外边距 */
}
.btn-custom {
  background-color: #4CAF50; /* ç»¿è‰²èƒŒæ™¯ */
  color: white; /* ç™½è‰²æ–‡å­— */
  border: none; /* æ— è¾¹æ¡† */
  padding: 5px 15px; /* å†…边距 */
  text-align: center; /* æ–‡å­—居中 */
  text-decoration: none; /* æ— ä¸‹åˆ’线 */
  display: inline-block; /* è¡Œå†…块元素 */
  font-size: 12px; /* å­—体大小 */
  margin: 4px 2px; /* å¤–边距 */
  cursor: pointer; /* é¼ æ ‡æ‚¬åœæ—¶æ˜¾ç¤ºæ‰‹åž‹ */
  border-radius: 4px; /* åœ†è§’边框 */
}
.bold-large-label {
  font-weight: bold;
  font-size: 20px; /* æˆ–你需要的任何大小 */
}
.left_qiu{
  position: absolute;
  left: -74px;
  top: 0;
  width:54px;
  border-radius: 50%;
  height:54px;
  font-size: 13px;
  margin: auto;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  background: #0099ff;
  transform: translate(0, 0);
}
/deep/ .ant-timeline-item-tail{
  left: -29px !important;
}
.left_qiu span{
  width: 3em;
  display: block;
  color: #fff;
  text-align: center;
}
.img{
  width: 75%;
}
.wrap{
  clear: both;
  width: 100%;
  display: flex;
  height: 50px;
  border: 1px solid #ccc;
  /* background-color: aqua; */
}
.box{
  width:21%;
  height:50px;
  border-right: 1px solid #ccc;
  line-height: 50px;
  /* background: red; */
  text-align:center;
  margin: auto;
}
@import '~@assets/less/common.less';
</style>
src/views/dnc/common/DocumentModalForm.vue
@@ -20,14 +20,6 @@
      <a-row>
        <a-col :span="24">
          <a-form-model-item label="代码版本">
            <a-input v-model="model.docAlias" placeholder="请输入代码版本"></a-input>
          </a-form-model-item>
        </a-col>
      </a-row>
      <a-row>
        <a-col :span="24">
          <a-form-model-item label="描述">
            <a-textarea v-model="model.description" placeholder="请输入文档描述"></a-textarea>
          </a-form-model-item>
src/views/dnc/common/DocumentVersionTableList.vue
@@ -47,9 +47,9 @@
            return parseInt(index) + 1
          }
        },
        { title: '文件名称', dataIndex: 'fileName', align: 'center', scopedSlots: { customRender: 'fileName' } },
        { title: '版本号', dataIndex: 'docVersion', align: 'center' },
        { title: '文件大小', dataIndex: 'fileSize', align: 'center' }
        { title: '文件名称', dataIndex: 'fileName', align: 'center', scopedSlots: { customRender: 'fileName' },width: 500},
        { title: '版本号', dataIndex: 'docVersion', align: 'center' ,width: 200},
        { title: '文件大小', dataIndex: 'fileSize', align: 'center' ,width: 150}
      ],
      url: {
        list: '/nc/file/find/list'
src/views/dnc/common/TableContextMenu.vue
@@ -51,6 +51,7 @@
          NC: [
            { label: '编辑文档信息', code: 'document_edit', subMenu: [], icon: 'edit', isCommonMethod: false },
            { label: '指派到设备', code: 'document_assign', subMenu: [], icon: 'cluster', isCommonMethod: false },
            { label: '提取刀具', code: 'document_extract', subMenu: [], icon: 'tool', isCommonMethod: false },
            { label: '导入NC程序', code: 'document_nc_import', subMenu: [], icon: 'import', isCommonMethod: true },
            { label: '下载', code: 'document_download', subMenu: [], icon: 'download', isCommonMethod: true },
            { label: '删除', code: 'document_delete', subMenu: [], icon: 'delete', isCommonMethod: true },
src/views/flowable/workflow/FlowLedger.vue
@@ -200,15 +200,15 @@
        console.log('approcesstype--->', approcesstype)
        switch (approcesstype) {
          case 'drApproval':
            item.description=item.title
            item.description=item.description
            this.handDrDetial(item)
            break
          case 'ggApproval':
            item.description=item.title
            item.description=item.description
            this.handDispatchFileDetial(item)
            break
          case 'sbdjApproval':
            item.description = item.title
            item.description = item.description
            this.handInspectionOrderDetail(item)
            break
          default:
@@ -230,6 +230,11 @@
      },
      handDispatchFileDetial(item){
        this.selectDispatchFileXqData = item
        this.selectDispatchFileXqData.assignee_dictText=item.todoUsers_dictText
        this.selectDispatchFileXqData.createTime=item.startTime
        this.selectDispatchFileXqData.procInstId=item.processInstanceId
src/views/flowable/workflow/assignFileStream/AssignFileStreamHandle.vue
@@ -76,12 +76,12 @@
                  </a-row>
                  <a-row>
                    <a-col :span='span'>
                      <a-form-model-item label='设备类名称' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='deviceManagementCode'>
                      <a-form-model-item label='数控系统类别' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='deviceManagementCode'>
                        <a-input :disabled='coldisabled' v-model='tableRowRecord.deviceManagementCode'></a-input>
                      </a-form-model-item>
                    </a-col>
                    <a-col :span='span'>
                      <a-form-model-item label='设备类名称' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='deviceManagementName'>
                      <a-form-model-item label='数控系统类别' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='deviceManagementName'>
                        <a-input :disabled='coldisabled' v-model='tableRowRecord.deviceManagementName'></a-input>
                      </a-form-model-item>
                    </a-col>
src/views/flowable/workflow/assignFileStream/AssignFileStreamXq.vue
@@ -76,12 +76,12 @@
                  </a-row>
                  <a-row>
                    <a-col :span='span'>
                      <a-form-model-item label='设备类名称' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='deviceManagementCode'>
                      <a-form-model-item label='数控系统类别' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='deviceManagementCode'>
                        <a-input :disabled='coldisabled' v-model='tableRowRecord.deviceManagementCode'></a-input>
                      </a-form-model-item>
                    </a-col>
                    <a-col :span='span'>
                      <a-form-model-item label='设备类名称' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='deviceManagementName'>
                      <a-form-model-item label='数控系统类别' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='deviceManagementName'>
                        <a-input :disabled='coldisabled' v-model='tableRowRecord.deviceManagementName'></a-input>
                      </a-form-model-item>
                    </a-col>
src/views/flowable/workflow/dispatchFile/DispatchFileXq.vue
@@ -13,7 +13,7 @@
  >
    <a-card :bordered="false">
      <div>
        <b>{{ selectShenpiData.title }}</b>
        <b>{{ selectShenpiData.description }}</b>
        <br>
        <br>
        <a-tag color="blue">