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