From 4a96df3ea2c19216bd49f2dfa4a41decd16a1486 Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期一, 23 六月 2025 09:52:12 +0800
Subject: [PATCH] 1、设备结构树页面接收NC文件列表新增指派到产品NC文件功能 2、设备TEEP页面故障率数据展示格式调整

---
 src/api/dnc.js                                                                         |   10 
 src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentAssignModal.vue |  543 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue         |    4 
 src/views/dnc/common/TableContextMenu.vue                                              |    5 
 src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue                         |    2 
 src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentTableList.vue   |   19 +
 6 files changed, 570 insertions(+), 13 deletions(-)

diff --git a/src/api/dnc.js b/src/api/dnc.js
index aae51bc..c10c525 100644
--- a/src/api/dnc.js
+++ b/src/api/dnc.js
@@ -28,13 +28,13 @@
   // 鎸囨淳鏂囨。鍒拌澶�
   assignDocumentToDeviceApi: params => postAction('/nc/activit/assign/file/apply', params),
   // 鎻愬彇鍒�鍏�
-  extractToolsApi: ({ docId,attributionType, attributionId}) => getAction(`/nc/cutter/extractCutterInfo/${docId}/${attributionType}/${attributionId}`),
+  extractToolsApi: ({ docId, attributionType, attributionId }) => getAction(`/nc/cutter/extractCutterInfo/${docId}/${attributionType}/${attributionId}`),
   // 鍙戦�佸垁鍏风郴缁�
-  sendToolsApi: ({ docId,attributionType, attributionId}) => getAction(`/nc/cutter/sendCutterInfo/${docId}/${attributionType}/${attributionId}`),
+  sendToolsApi: ({ docId, attributionType, attributionId }) => getAction(`/nc/cutter/sendCutterInfo/${docId}/${attributionType}/${attributionId}`),
   // 涓嬭浇鏂囨。
   downloadDocumentApi: ({ docId, docName }) => requestGetDownLoad(`/nc/doc/download/${docId}`, docName),
   // 鍒犻櫎鏂囨。
-  deleteDocumentApi: ({ docId,attributionType, attributionId}) => deleteAction(`/nc/doc/delete/${docId}/${attributionType}/${attributionId}`),
+  deleteDocumentApi: ({ docId, attributionType, attributionId }) => deleteAction(`/nc/doc/delete/${docId}/${attributionType}/${attributionId}`),
   // 鏂囨。鍑哄簱
   documentOutboundApi: ({ docId, docName }) => requestGetDownLoad(`/nc/doc/pull/${docId}`, docName),
   // 鏂囨。鍙栨秷鍑哄簱
@@ -85,6 +85,10 @@
   //-------------------------璁惧缁撴瀯鏍�------------------------------------------------
   // 鑾峰彇璁惧鏍�
   getDeviceTreeDataApi: () => getAction('/nc/device/queryTreeListByProduction'),
+  // 鑾峰彇浜у搧缁撴瀯鏍戝畬鏁村眰绾у埌NC鏂囦欢
+  getAllProductTreeDataApi: () => getAction('/nc/product/getAllTree'),
+  // 鎸囨淳鍒颁骇鍝�
+  assignNcToProductApi: params => postAction('/dncFlow/assignEquipmentFileStream/savaFlow', params),
   // 鍒犻櫎鏂囨。
   deleteDeviceRelativeDocumentApi: ({ docId, attributionId }) => deleteAction(`doc/relative/delete/device/${docId}/${attributionId}`),
   // 鑾峰彇鏈夋潈闄愮殑鐢ㄦ埛鍒楄〃
diff --git a/src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentAssignModal.vue b/src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentAssignModal.vue
new file mode 100644
index 0000000..f640e40
--- /dev/null
+++ b/src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentAssignModal.vue
@@ -0,0 +1,543 @@
+<template>
+  <j-modal width="85%" :title="title" :visible="visible" @cancel="handleCancel" :maskClosable="false" centered
+           @ok="handleAssignDocumentToDevice" :confirmLoading="confirmLoading">
+    <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="9" :sm="9">
+                    <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,type:'radio'}"
+                     @change="handleTableChange" :customRow="customRow"
+                     :scroll="{y:456}" :size="size" rowKey="docId">
+
+              <!-- 瀛楃涓茶秴闀挎埅鍙栫渷鐣ュ彿鏄剧ず-->
+              <span slot="docName" slot-scope="text">
+                <j-ellipsis :value="text"/>
+              </span>
+            </a-table>
+          </a-tab-pane>
+        </a-tabs>
+      </div>
+
+      <div style="width: 26%">
+        <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" checkStrictly
+                          :treeData="treeDataSource" @check="handleTreeNodeCheck" @expand="handleTreeNodeExpand">
+                    <template slot="title" slot-scope="{ label, parentId, entity, key:treeKey,type}">
+                      <a-tooltip :title="label" v-if="type==99">
+                          <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>
+                      </a-tooltip>
+                      <template v-else>
+                         <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>
+                    </template>
+                  </a-tree>
+                </div>
+
+                <a-form-model ref="form" :rules="validateRules" :model="queryParam">
+                  <a-form-model-item label="鎸囨淳鍘熷洜" prop="applyReason">
+                    <a-textarea placeholder="璇疯緭鍏ユ寚娲惧師鍥�" v-model="queryParam.applyReason" rows="3" style="resize: none"/>
+                  </a-form-model-item>
+                </a-form-model>
+              </div>
+            </a-spin>
+          </a-tab-pane>
+        </a-tabs>
+      </div>
+    </div>
+  </j-modal>
+</template>
+
+<script>
+  import { getAction } from '@/api/manage'
+  import dncApi from '@/api/dnc'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+  export default {
+    name: 'HasReceivedDocumentAssignModal',
+    components: {},
+    mixins: [JeecgListMixin],
+    props: {
+      currentDocumentInfo: {
+        type: Object
+      },
+      currentTreeNodeInfo: {
+        type: Object
+      },
+      size: {
+        type: String
+      }
+    },
+    data() {
+      return {
+        disableMixinCreated: true,
+        visible: false,
+        title: '',
+        columns: [
+          {
+            title: '搴忓彿',
+            dataIndex: 'rowIndex',
+            key: 'rowIndex',
+            width: 65,
+            align: 'center',
+            customRender: function(t, r, index) {
+              return parseInt(index) + 1
+            }
+          },
+          {
+            title: '鏂囦欢鍚嶇О',
+            dataIndex: 'docName',
+            key: 'docName',
+            align: 'center',
+            scopedSlots: { customRender: 'docName' },
+            sorter: true
+          },
+          { title: '璁惧缂栧彿', dataIndex: 'docCode', align: 'center' },
+          {
+            title: '鍑哄簱鐘舵��',
+            dataIndex: 'pullStatus_dictText',
+            key: 'pullStatus',
+            align: 'center',
+            filters: [
+              { text: '鏈嚭搴�', value: 1 },
+              { text: '宸插嚭搴�', value: 2 }
+            ]
+          },
+          {
+            title: '鐘�  鎬�',
+            dataIndex: 'docDispatchStatus_dictText',
+            key: 'docDispatchStatus',
+            align: 'center',
+            filters: [
+              { text: '缂栧埗', value: 1 },
+              { text: '鏍″', value: 2 },
+              { text: '鎵瑰噯', value: 3 },
+              { text: '璇曞垏', value: 4 },
+              { text: '瀹氬瀷', value: 5 }
+            ]
+          },
+          {
+            title: '鍒涘缓鏃堕棿',
+            dataIndex: 'createTime',
+            align: 'center',
+            width: 200,
+            sorter: true
+          }
+        ],
+        validateRules: {
+          applyReason: [
+            { required: true, message: '璇疯緭鍏ユ寚娲惧師鍥�' }
+          ]
+        },
+        searchValue: '',
+        searchInput: '',
+        spinning: false,
+        treeDataSource: [],
+        allTreeKeys: [],
+        checkedKeys: [],
+        expandedKeys: [],
+        autoExpandParent: true,
+        isExpandAllTreeNode: false,
+        confirmLoading: false,
+        date: [],
+        url: {
+          list: '/nc/doc/find/list'
+        }
+      }
+    },
+    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)
+    },
+    beforeDestroy() {
+      this.$bus.$off('treeMenuItemMethodTrigger', this.triggerCorrespondingMethod)
+    },
+    methods: {
+      // 璁惧鏍戝彸閿彍鍗曟寚娲惧埌浜у搧寮圭獥
+      handleDeviceRecAssign() {
+        this.visible = true
+      },
+
+      // 鑾峰彇褰撳墠宸ュ簭鎴栧伐姝ュ搴旀枃妗e垪琛�
+      loadData() {
+        this.dataSource = []
+        if (!this.url.list) {
+          this.$message.error('璇疯缃畊rl.list灞炴��!')
+          return
+        }
+        var params = this.getQueryParams()//鏌ヨ鏉′欢
+        if (!params) return false
+        let paramType, paramId
+        if (this.currentTreeNodeInfo) {
+          const { key, type } = this.currentTreeNodeInfo
+          paramType = type
+          paramId = key
+        } else if (this.currentDocumentInfo) {
+          const { attributionType, attributionId } = this.currentDocumentInfo
+          paramType = attributionType
+          paramId = attributionId
+        }
+
+        params.attributionType = paramType
+        params.attributionId = paramId
+        params.docClassCode = 'REC'
+        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
+        })
+      },
+
+      /**
+       * 鑷畾涔夎〃鏍艰
+       * @param record 琛ㄦ牸琛岃褰�
+       */
+      customRow(record) {
+        return {
+          style: {
+            cursor: 'pointer'
+          },
+          on: {
+            click: () => {
+              this.onSelectChange([record.docId], [record])
+            }
+          }
+        }
+      },
+
+      // 鑾峰彇DNC浜у搧鏍�
+      getDocumentAssignDeviceTreeByApi() {
+        this.spinning = true
+        this.treeDataSource = []
+        dncApi.getAllProductTreeDataApi()
+          .then(res => {
+            if (res.success) {
+              this.dataList = []
+              this.allTreeKeys = []
+              this.treeDataSource = res.result
+              console.log('treeDataSource', res.result)
+              this.generateList(this.treeDataSource)
+              this.expandedKeys = [this.treeDataSource[0].id]
+            } 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()
+      },
+
+      // 鎸囨淳鍒颁骇鍝佺獥鍙g偣鍑荤‘瀹氭寚娲捐澶囧悗瑙﹀彂
+      handleAssignDocumentToDevice() {
+        const { checkedKeys, selectionRows, selectedRowKeys, $confirm, $notification, queryParam: { applyReason }, $destroyAll, handleCancel } = this
+
+        if (checkedKeys.length === 0 || selectedRowKeys.length === 0) {
+          $notification.warning({
+            message: '娑堟伅',
+            description: '璇烽�夋嫨璁惧鎴栨枃妗�'
+          })
+          return
+        }
+
+        const that = this
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            const { docId, attributionId, publishFileId } = selectionRows[0]
+            const params = {
+              docId: checkedKeys[0],
+              equipmentDocId: docId,
+              equipmentId: attributionId,
+              equipmentFileId: publishFileId,
+              applyReason
+            }
+
+            $confirm({
+              title: '鎻愮ず',
+              content: `纭鎻愪氦鍚楋紵`,
+              okText: '纭',
+              cancelText: '鍙栨秷',
+              onOk: () => {
+                that.confirmLoading = true
+                dncApi.assignNcToProductApi(params)
+                  .then(res => {
+                    if (res.success) {
+                      handleCancel()
+                      $notification.success({
+                        message: '娑堟伅',
+                        description: res.message
+                      })
+                    } else {
+                      $notification.error({
+                        message: '娑堟伅',
+                        description: res.message
+                      })
+                    }
+                  })
+                  .finally(() => {
+                    $destroyAll()
+                    that.confirmLoading = false
+                  })
+              },
+              onCancel: () => {
+                $destroyAll()
+              }
+            })
+          } else {
+            return false
+          }
+        })
+      },
+
+      /* 杈撳叆鏌ヨ鍐呭鍙樺寲鏃惰Е鍙� */
+      handleSearchInputChange() {
+        let search = this.searchInput
+        let expandedKeys = this.dataList
+          .map(item => {
+            if (item.title != null) {
+              if (item.title.indexOf(search) > -1) {
+                return this.getParentKey(item.key, this.treeDataSource)
+              }
+              return null
+            }
+          })
+          .filter((item, i, self) => item && self.indexOf(item) === i)
+        Object.assign(this, {
+          expandedKeys,
+          searchValue: search,
+          autoExpandParent: true
+        })
+      },
+
+      /**
+       * 鏍戣妭鐐瑰睍寮�鍚堝苟鏃惰Е鍙�
+       * @param expandedKeys 灞曞紑椤筴ey
+       */
+      handleTreeNodeExpand(expandedKeys) {
+        this.expandedKeys = expandedKeys
+        this.autoExpandParent = false
+      },
+
+      /**
+       * 鏍戣妭鐐瑰閫夋閫変腑鏃惰Е鍙�
+       * @param selectedKeys 閫変腑鑺傜偣key
+       * @param {node} node 鑺傜偣瀵硅薄
+       */
+      handleTreeNodeCheck(checkedObj, { node }) {
+        console.log('checkedObj', checkedObj)
+        console.log('node', node.dataRef)
+        let record = node.dataRef
+        if (record.type !== 99) return
+        this.checkedKeys = checkedObj.checked.slice(-1)
+      },
+
+      /**
+       * 鏍戣妭鐐归�変腑鏃惰Е鍙戯紙妯℃嫙鏍戣妭鐐瑰閫夋閫変腑鏃剁殑鏁堟灉锛�
+       * @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
+            } 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
+          this.dataList.push({ key, title })
+          this.allTreeKeys.push(key)
+          this.setTreeNodeIcon(node)
+          if (node.children) this.generateList(node.children)
+        }
+      },
+
+      /**
+       * 璁剧疆鏍戣妭鐐瑰浘鏍�
+       * @param treeNode
+       */
+      setTreeNodeIcon(treeNode) {
+        switch (+treeNode.type) {
+          case 1:
+            treeNode.slots = { icon: 'product' }
+            break
+          case 2:
+            treeNode.slots = { icon: 'component' }
+            break
+          case 3:
+            treeNode.slots = { icon: 'part' }
+            break
+          case 4:
+            treeNode.slots = { icon: 'processSpecVersion' }
+            break
+          case 5:
+            treeNode.slots = { icon: 'process' }
+            break
+          case 6:
+            treeNode.slots = { icon: 'processStep' }
+            break
+          default:
+        }
+      },
+
+      resetData() {
+        this.searchInput = this.searchValue = ''
+        this.expandedKeys = []
+        this.selectedRowKeys = []
+        this.selectionRows = {}
+        this.checkedKeys = []
+        this.filters = {}
+        this.isorter = Object.assign({}, this.defaultSorter)
+      },
+
+      handleCancel() {
+        this.visible = false
+      },
+
+      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>
\ No newline at end of file
diff --git a/src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentTableList.vue b/src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentTableList.vue
index 2fad9dd..e8efdee 100644
--- a/src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentTableList.vue
+++ b/src/views/dnc/base/modules/DeviceStructure/Document/HasReceivedDocumentTableList.vue
@@ -9,6 +9,9 @@
     </a-table>
 
     <DocumentModal ref="modalForm" @ok="modalFormOk"/>
+
+    <has-received-document-assign-modal :size="size" ref="documentAssignModalRef"
+                                        :currentDocumentInfo="currentRightClickedDocumentInfo"/>
   </div>
 </template>
 
@@ -16,17 +19,18 @@
   import { getAction } from '@/api/manage'
   import { JeecgListMixin } from '@/mixins/JeecgListMixin'
   import DocumentModal from '../../../../common/DocumentModal.vue'
+  import HasReceivedDocumentAssignModal from './HasReceivedDocumentAssignModal'
 
   export default {
     name: 'HasReceivedDocumentTableList',
-    components: { DocumentModal },
+    components: { HasReceivedDocumentAssignModal, DocumentModal },
     mixins: [JeecgListMixin],
     props: {
       currentTreeNodeInfo: {
         type: Object
       },
-      currentTypeOfDevice:{
-        type:Number
+      currentTypeOfDevice: {
+        type: Number
       },
       size: {
         type: String
@@ -51,7 +55,7 @@
             dataIndex: 'docName',
             key: 'docName',
             align: 'center',
-            scopedSlots: {customRender: 'docName'},
+            scopedSlots: { customRender: 'docName' },
             width: 300,
             sorter: true
           },
@@ -185,7 +189,12 @@
         this.$refs.modalForm.title = modalTitle
       },
 
-      handleDocumentAssign(record, modalTitle) {
+      /**
+       * 鎺у埗鎸囨淳鍒颁骇鍝佸脊绐�
+       * @param record 琛ㄦ牸琛屼俊鎭�
+       * @param modalTitle 寮圭獥鏍囬
+       */
+      handleDocumentRecAssign(record, modalTitle) {
         this.$refs.documentAssignModalRef.title = modalTitle
         this.$refs.documentAssignModalRef.visible = true
       },
diff --git a/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue b/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue
index a46a233..0788c06 100644
--- a/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue
+++ b/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue
@@ -56,7 +56,7 @@
                   </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"
@@ -436,7 +436,7 @@
     },
 
     resetData() {
-      this.searchInput = ''
+      this.searchInput = this.searchValue = ''
       this.expandedKeys = []
       this.selectedRowKeys = []
       this.selectionRows = {}
diff --git a/src/views/dnc/common/TableContextMenu.vue b/src/views/dnc/common/TableContextMenu.vue
index 544e46d..60d8ecc 100644
--- a/src/views/dnc/common/TableContextMenu.vue
+++ b/src/views/dnc/common/TableContextMenu.vue
@@ -42,10 +42,10 @@
         currentMenuLevel: '',
         defaultContextMenuList: {
           //璁惧绫�
-          deviceCustomType:[
+          deviceCustomType: [
             { label: '缂栬緫璁惧绫讳俊鎭�', code: 'type_edit', subMenu: [], icon: 'edit', isCommonMethod: false },
             { label: '鍒犻櫎', code: 'type_delete', subMenu: [], icon: 'delete', isCommonMethod: false },
-            { label: '瀵煎叆NC绋嬪簭', code: 'type_nc_import', subMenu: [], icon: 'import', isCommonMethod: true },
+            { label: '瀵煎叆NC绋嬪簭', code: 'type_nc_import', subMenu: [], icon: 'import', isCommonMethod: true }
           ],
           //NC鏂囨。
           NC: [
@@ -117,6 +117,7 @@
             { label: '涓嬭浇', code: 'document_download', subMenu: [], icon: 'download', isCommonMethod: true },
             { label: '鍒犻櫎', code: 'document_delete', subMenu: [], icon: 'delete', isCommonMethod: true },
             { label: '鎵归噺鍒犻櫎', code: 'document_batch_remove', subMenu: [], icon: 'delete', isCommonMethod: true },
+            { label: '鎸囨淳鍒颁骇鍝�', code: 'document_rec_assign', subMenu: [], icon: 'cluster', isCommonMethod: false },
             {
               label: '鐢熷懡鍛ㄦ湡',
               subMenu: [
diff --git a/src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue b/src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue
index 011b86f..390d213 100644
--- a/src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue
+++ b/src/views/mdc/base/modules/efficiencyReport/EfficiencyList.vue
@@ -189,7 +189,7 @@
                     {{tableHead.openRate | numFilter}}
                   </td>
                   <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('gzl') > -1">
-                    {{tableHead.faultRate | numFilter}}
+                    {{tableHead.faultRate }}
                   </td>
                   <td :style="{background:tableHead.color }" v-if="checkedList.indexOf('kjsj') > -1">
                     {{tableHead.openLong | getFormattedTime}}

--
Gitblit v1.9.3