From a1615e0c7d06ee3fdf4ab776a2b07ca3f264a5bd Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期二, 01 四月 2025 16:04:26 +0800 Subject: [PATCH] 1、设备台账页面新增设备履历功能(未与后端进行联调) 2、设备台账页面新增点击设备展示对应保养标准功能并完成与后端联调 --- src/views/eam/equipment/modules/ResumeDrawer.vue | 98 ++++++++++++++ src/views/eam/base/EamMaintenanceStandardList.vue | 200 ++++++++++++++-------------- src/views/eam/base/modules/EamMaintenanceStandardDetailList.vue | 1 src/views/eam/equipment/EamEquipmentList.vue | 107 ++++++++++++--- 4 files changed, 286 insertions(+), 120 deletions(-) diff --git a/src/views/eam/base/EamMaintenanceStandardList.vue b/src/views/eam/base/EamMaintenanceStandardList.vue index 7afe258..9e1bad4 100644 --- a/src/views/eam/base/EamMaintenanceStandardList.vue +++ b/src/views/eam/base/EamMaintenanceStandardList.vue @@ -1,71 +1,74 @@ <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.standardCode"></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.standardName"></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.equipmentCode"></a-input> - </a-form-item> - </a-col> - <template v-if="toggleSearchStatus"> + <template v-if="isDisplayOperation"> + <!-- 鏌ヨ鍖哄煙 --> + <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.maintenanceCategory"></a-input> + <a-form-item label="鏍囧噯缂栫爜"> + <a-input placeholder="璇疯緭鍏ユ爣鍑嗙紪鐮�" v-model="queryParam.standardCode"></a-input> </a-form-item> </a-col> - </template> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鏍囧噯鍚嶇О"> + <a-input placeholder="璇疯緭鍏ユ爣鍑嗗悕绉�" v-model="queryParam.standardName"></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.equipmentId"></a-input> + </a-form-item> + </a-col> + <template v-if="toggleSearchStatus"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="淇濆吇鍒嗙被"> + <a-input placeholder="璇疯緭鍏ヤ繚鍏诲垎绫�" v-model="queryParam.maintenanceCategory"></a-input> + </a-form-item> + </a-col> + </template> + <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="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }} - <a-icon :type="toggleSearchStatus ? 'up' : 'down'" /> + <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> </a> </span> - </a-col> + </a-col> - </a-row> - </a-form> - </div> + </a-row> + </a-form> + </div> - <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> - <div class="table-operator"> - <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> - <a-button type="primary" icon="download" @click="handleExportXls('淇濆吇鏍囧噯')">瀵煎嚭</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-dropdown v-if="selectedRowKeys.length > 0"> - <a-menu slot="overlay"> - <a-menu-item key="1" @click="batchDel"> - <a-icon type="delete" /> - 鍒犻櫎 - </a-menu-item> - </a-menu> - <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 - <a-icon type="down" /> - </a-button> - </a-dropdown> - </div> + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> + <a-button type="primary" icon="download" @click="handleExportXls('淇濆吇鏍囧噯')">瀵煎嚭</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-dropdown v-if="selectedRowKeys.length > 0"> + <a-menu slot="overlay"> + <a-menu-item key="1" @click="batchDel"> + <a-icon type="delete"/> + 鍒犻櫎 + </a-menu-item> + </a-menu> + <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 + <a-icon type="down"/> + </a-button> + </a-dropdown> + </div> + </template> + <!-- table鍖哄煙-begin --> <div> - <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;" v-if="isDisplayOperation"> <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> @@ -85,14 +88,14 @@ :customRow='clickThenSelect' @change="handleTableChange"> <template slot="referenceFile" slot-scope="text, record, index"> - <a v-if="text && text !== ''" @click="handlePreview(record)">棰勮</a> + <a v-if="text && text !== ''" @click.stop="handlePreview(record)">棰勮</a> </template> <span slot="action" slot-scope="text, record"> - <a @click="handleEdit(record)">缂栬緫</a> + <a @click.stop="handleEdit(record)">缂栬緫</a> - <a-divider type="vertical" /> + <a-divider type="vertical"/> <a-dropdown> - <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> + <a class="ant-dropdown-link">鏇村 <a-icon type="down"/></a> <a-menu slot="overlay"> <a-menu-item> <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> @@ -106,15 +109,9 @@ </a-table> <a-tabs defaultActiveKey="1"> - <a-tab-pane - tab='淇濆吇鏍囧噯鏄庣粏椤�' - key="1" - > - <div - class="table-operator" - style="margin:-16px" - > - <eam-maintenance-standard-detail-list :standardId="standardId" /> + <a-tab-pane tab='淇濆吇鏍囧噯鏄庣粏椤�' key="1"> + <div class="table-operator" style="margin:-16px"> + <eam-maintenance-standard-detail-list ref="standardDetailRef" :standardId="standardId"/> </div> </a-tab-pane> @@ -138,6 +135,12 @@ export default { name: 'EamMaintenanceStandardList', mixins: [JeecgListMixin], + props: { + isDisplayOperation: { + type: Boolean, + default: true + } + }, components: { EamMaintenanceStandardModal, EamMaintenanceStandardDetailList @@ -145,18 +148,9 @@ data() { return { description: '淇濆吇鏍囧噯绠$悊椤甸潰', + disableMixinCreated: true, // 琛ㄥご columns: [ - { - title: '#', - dataIndex: '', - key: 'rowIndex', - width: 60, - align: 'center', - customRender: function(t, r, index) { - return parseInt(index) + 1 - } - }, { title: '鏍囧噯缂栫爜', align: 'center', @@ -207,12 +201,6 @@ align: 'center', dataIndex: 'referenceFile', scopedSlots: { customRender: 'referenceFile' } - }, - { - title: '鎿嶄綔', - dataIndex: 'action', - align: 'center', - scopedSlots: { customRender: 'action' } } ], url: { @@ -223,7 +211,7 @@ importExcelUrl: 'eam/maintenanceStandard/importExcel' }, fileUrl: '', - standardId: '-1', + standardId: '-1' } }, computed: { @@ -231,22 +219,38 @@ return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` } }, + created() { + if (!this.isDisplayOperation) { + return + } + const operationColumn = { + title: '鎿嶄綔', + dataIndex: 'action', + align: 'center', + scopedSlots: { customRender: 'action' } + } + this.columns = [...this.columns, operationColumn] + this.loadData(1) + }, methods: { - handlePreview: function (record) { - if(record.referenceFile) { + handlePreview: function(record) { + if (record.referenceFile) { try { - let file = JSON.parse(record.referenceFile); - this.$refs.lxFilePreview.preview(file.filePath); - }catch (e) { - console.error(e); - this.$message.error(e.message); + let file = JSON.parse(record.referenceFile) + this.$refs.lxFilePreview.preview(file.filePath) + } catch (e) { + console.error(e) + this.$message.error(e.message) } - }else { - this.$message.warning("鍙傝�冩枃浠朵负绌猴紒"); + } else { + this.$message.warning('鍙傝�冩枃浠朵负绌猴紒') } }, clickThenSelect(record) { return { + style: { + cursor: 'pointer' + }, on: { click: () => { this.onSelectChange(record.id.split(','), [record]) @@ -255,24 +259,24 @@ } }, onClearSelected() { - this.selectedRowKeys = []; - this.selectionRows = []; - this.standardId = '-1'; + this.selectedRowKeys = [] + this.selectionRows = [] + this.standardId = '-1' }, onSelectChange(selectedRowKeys, selectionRows) { - this.selectedRowKeys = selectedRowKeys; - this.selectionRows = selectionRows; + this.selectedRowKeys = selectedRowKeys + this.selectionRows = selectionRows if (selectedRowKeys.length === 1) { - this.standardId = selectionRows[0]['id'] + this.standardId = selectedRowKeys[0] } else { this.standardId = '-1' } }, searchReset() { - this.standardId = '-1'; + this.standardId = '-1' this.queryParam = {} - this.loadData(1); - }, + this.loadData(1) + } } } </script> diff --git a/src/views/eam/base/modules/EamMaintenanceStandardDetailList.vue b/src/views/eam/base/modules/EamMaintenanceStandardDetailList.vue index 86e2d18..84e35ef 100644 --- a/src/views/eam/base/modules/EamMaintenanceStandardDetailList.vue +++ b/src/views/eam/base/modules/EamMaintenanceStandardDetailList.vue @@ -12,7 +12,6 @@ :pagination="ipagination" :loading="loading" class="j-table-force-nowrap" - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" @change="handleTableChange"> </a-table> </div> diff --git a/src/views/eam/equipment/EamEquipmentList.vue b/src/views/eam/equipment/EamEquipmentList.vue index 802b6ca..d8ed389 100644 --- a/src/views/eam/equipment/EamEquipmentList.vue +++ b/src/views/eam/equipment/EamEquipmentList.vue @@ -101,7 +101,7 @@ <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� - <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + <a style="margin-left: 24px" @click="onSelectChange([])">娓呯┖</a> </div> <a-table @@ -115,7 +115,9 @@ :loading="loading" :scroll="{ x: 'max-content' }" :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" - @change="handleTableChange"> + @change="handleTableChange" + :customRow="customTableRow" + > <span slot="equipmentImportance" slot-scope="text"> <lx-switch v-model="text" disabled checked-children="鏄�" un-checked-children="鍚�"/> </span> @@ -132,7 +134,7 @@ <lx-switch v-model="text" disabled checked-children="鏄�" un-checked-children="鍚�"/> </span> <span slot="action" slot-scope="text, record"> - <a @click="handleEdit(record)">缂栬緫</a> + <a @click.stop="handleEdit(record)">缂栬緫</a> <a-divider type="vertical"/> <a-dropdown> @@ -140,6 +142,9 @@ <a-menu slot="overlay"> <a-menu-item> <a href="javascript:;" @click="handleOpenNameplateModal(record)">閾墝</a> + </a-menu-item> + <a-menu-item> + <a href="javascript:;" @click="handleOpenResumeDrawer(record)">灞ュ巻</a> </a-menu-item> <a-menu-item> <a href="javascript:;" @click="handleDetail(record)">璇︽儏</a> @@ -157,10 +162,18 @@ </div> <!-- table鍖哄煙-end --> + <a-tabs v-model="activeTabKey"> + <a-tab-pane tab="淇濆吇鏍囧噯" :key="1"> + <eam-maintenance-standard-list ref="tabPaneTableListRef" :isDisplayOperation="false"/> + </a-tab-pane> + </a-tabs> + <!-- 琛ㄥ崟鍖哄煙 --> <eamEquipment-modal ref="modalForm" @ok="modalFormOk"></eamEquipment-modal> <!--閾墝寮圭獥--> <nameplate-modal ref="nameplateModalRef"/> + <!--灞ュ巻寮圭獥--> + <resume-drawer ref="resumeDrawerRef"/> </a-card> </template> @@ -171,11 +184,15 @@ import { getAction, templateXlsDownload } from '@api/manage' import NameplateModal from '@views/eam/equipment/modules/NameplateModal.vue' import { getSystemConfigValue } from '@api/api' +import ResumeDrawer from '@views/eam/equipment/modules/ResumeDrawer.vue' +import EamMaintenanceStandardList from '@views/eam/base/EamMaintenanceStandardList.vue' export default { name: 'EamEquipmentList', mixins: [JeecgListMixin], components: { + EamMaintenanceStandardList, + ResumeDrawer, NameplateModal, EamEquipmentModal }, @@ -270,7 +287,7 @@ { title: '璁惧鍨嬪彿', align: 'center', - width: 100, + width: 200, dataIndex: 'equipmentModel' }, { @@ -393,23 +410,23 @@ }, { title: '鍒涘缓浜�', - align: "center", + align: 'center', dataIndex: 'createBy_dictText' }, { title: '鍒涘缓鏃堕棿', - align: "center", - dataIndex: 'createTime', + align: 'center', + dataIndex: 'createTime' }, { title: '鏇存柊浜�', - align: "center", + align: 'center', dataIndex: 'updateBy_dictText' }, { title: '鏇存柊鏃堕棿', - align: "center", - dataIndex: 'updateTime', + align: 'center', + dataIndex: 'updateTime' }, { title: '澶囨敞', @@ -433,10 +450,11 @@ exportXlsUrl: 'eam/equipment/exportXls', importExcelUrl: 'eam/equipment/importExcel', loadProductionOptions: '/mdc/mdcProduction/loadProductionTreeOptions', - templateXlsDownloadUrl: '瀵煎叆妯℃澘/璁惧鍙拌处瀵煎叆妯℃澘_v1.0.xlsx', + templateXlsDownloadUrl: '瀵煎叆妯℃澘/璁惧鍙拌处瀵煎叆妯℃澘_v1.0.xlsx' }, treeData: [], - appHomeUrl: '', + activeTabKey: 1, + appHomeUrl: '' } }, computed: { @@ -445,8 +463,8 @@ } }, created() { - this.loadAllProductionTree(); - this.loadAppHomeUrlConfigValue(); + this.loadAllProductionTree() + this.loadAppHomeUrlConfigValue() }, methods: { loadAllProductionTree() { @@ -462,25 +480,72 @@ /** * 寮�鍚摥鐗屽脊绐� - * @param record + * @param record 琛ㄦ牸琛屼俊鎭� */ handleOpenNameplateModal(record) { this.$refs.nameplateModalRef.model = Object.assign({}, record) - this.$refs.nameplateModalRef.httpUrl = this.appHomeUrl + record.equipmentCode; + this.$refs.nameplateModalRef.httpUrl = this.appHomeUrl + record.equipmentCode this.$refs.nameplateModalRef.visible = true + }, + /** + * 寮�鍚饱鍘嗘娊灞� + * @param record + */ + handleOpenResumeDrawer(record) { + this.$refs.resumeDrawerRef.visible = true }, - handleTemplateXlsDownload(){ - templateXlsDownload(this.url.templateXlsDownloadUrl); + + /** + * 鑷畾涔夎澶囧彴璐﹁〃鏍艰 + * @param record 琛ㄦ牸琛屼俊鎭� + * @returns {{style: {cursor: string}, on: {click: *}}} 鏍峰紡瀵硅薄涓庝簨浠舵柟娉� + */ + customTableRow(record) { + return { + style: { + cursor: 'pointer' + }, + on: { + click: () => { + this.onSelectChange([record.id]) + } + } + } }, + + /** + * 鍔犺浇椤电琛ㄦ牸鏁版嵁 + * @param id 璁惧鍙拌处琛岃褰旾d + */ + loadTabPaneTableData(id) { + this.$refs.tabPaneTableListRef.queryParam.equipmentId = id + this.$refs.tabPaneTableListRef.loadData(1) + }, + + /** + * 璁惧鍙拌处琛ㄦ牸澶氶�夋鐘舵�佹敼鍙樻椂瑙﹀彂 + * @param selectedRowKeys 宸查�夋嫨鐨剅owKey闆嗗悎 + */ + onSelectChange(selectedRowKeys) { + this.selectedRowKeys = selectedRowKeys + this.$refs.tabPaneTableListRef.dataSource = [] + this.$refs.tabPaneTableListRef.onClearSelected() + if (selectedRowKeys.length === 1) this.loadTabPaneTableData(selectedRowKeys[0]) + }, + + handleTemplateXlsDownload() { + templateXlsDownload(this.url.templateXlsDownloadUrl) + }, + loadAppHomeUrlConfigValue() { - let params = {settingKey: 'app_home_url'}; + let params = { settingKey: 'app_home_url' } getSystemConfigValue(params).then(res => { if (res.success) { - this.appHomeUrl = res.result.settingValue; + this.appHomeUrl = res.result.settingValue } }) - }, + } } } </script> diff --git a/src/views/eam/equipment/modules/ResumeDrawer.vue b/src/views/eam/equipment/modules/ResumeDrawer.vue new file mode 100644 index 0000000..4178982 --- /dev/null +++ b/src/views/eam/equipment/modules/ResumeDrawer.vue @@ -0,0 +1,98 @@ +<template> + <a-drawer title="璁惧灞ュ巻" placement="right" :width="500" :closable="false" :visible="visible" @close="onClose"> + <a-timeline mode="alternate"> + <a-timeline-item>Create a services site 2015-09-01</a-timeline-item> + <a-timeline-item color="green"> + Solve initial network problems 2015-09-01 + </a-timeline-item> + <a-timeline-item> + <a-icon slot="dot" type="clock-circle-o" style="font-size: 16px;"/> + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque + laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto + beatae vitae dicta sunt explicabo. + </a-timeline-item> + <a-timeline-item color="red"> + Network problems being solved 2015-09-01 + </a-timeline-item> + <a-timeline-item>Create a services site 2015-09-01</a-timeline-item> + <a-timeline-item> + <a-icon slot="dot" type="clock-circle-o" style="font-size: 16px;"/> + Technical testing 2015-09-01 + </a-timeline-item> + <a-timeline-item>Create a services site 2015-09-01</a-timeline-item> + <a-timeline-item color="green"> + Solve initial network problems 2015-09-01 + </a-timeline-item> + <a-timeline-item> + <a-icon slot="dot" type="clock-circle-o" style="font-size: 16px;"/> + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque + laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto + beatae vitae dicta sunt explicabo. + </a-timeline-item> + <a-timeline-item color="red"> + Network problems being solved 2015-09-01 + </a-timeline-item> + <a-timeline-item>Create a services site 2015-09-01</a-timeline-item> + <a-timeline-item> + <a-icon slot="dot" type="clock-circle-o" style="font-size: 16px;"/> + Technical testing 2015-09-01 + </a-timeline-item> + <a-timeline-item>Create a services site 2015-09-01</a-timeline-item> + <a-timeline-item color="green"> + Solve initial network problems 2015-09-01 + </a-timeline-item> + <a-timeline-item> + <a-icon slot="dot" type="clock-circle-o" style="font-size: 16px;"/> + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque + laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto + beatae vitae dicta sunt explicabo. + </a-timeline-item> + <a-timeline-item color="red"> + Network problems being solved 2015-09-01 + </a-timeline-item> + <a-timeline-item>Create a services site 2015-09-01</a-timeline-item> + <a-timeline-item> + <a-icon slot="dot" type="clock-circle-o" style="font-size: 16px;"/> + Technical testing 2015-09-01 + </a-timeline-item> + </a-timeline> + </a-drawer> +</template> + +<script> +export default { + name: 'ResumeDrawer', + data() { + return { + visible: false + } + }, + methods: { + getEquipmentResumeByApi() { + + }, + + onClose() { + this.visible = false + } + } +} +</script> + +<style scoped lang="less"> +/deep/ .ant-drawer-wrapper-body { + overflow: hidden; + display: flex; + flex-direction: column; + + ::-webkit-scrollbar { + width: 8px; + height: 8px; + } + + .ant-drawer-body { + flex: 1; + overflow: auto; + } +} +</style> \ No newline at end of file -- Gitblit v1.9.3