From 96f4f79d2f3cf2aca5de27eefe5203679ba78d90 Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期五, 04 七月 2025 19:49:30 +0800 Subject: [PATCH] 1、保养规范页面按照新需求进行调整并开发 2、点检工单页面调整字段展示名称 --- src/views/eam/base/modules/EamMaintenanceStandardModal.vue | 450 +++++++++++++++++++++++++++++++++---------------------- 1 files changed, 271 insertions(+), 179 deletions(-) diff --git a/src/views/eam/base/modules/EamMaintenanceStandardModal.vue b/src/views/eam/base/modules/EamMaintenanceStandardModal.vue index a25d747..0ece138 100644 --- a/src/views/eam/base/modules/EamMaintenanceStandardModal.vue +++ b/src/views/eam/base/modules/EamMaintenanceStandardModal.vue @@ -8,75 +8,67 @@ @ok="handleOk" @cancel="handleCancel" cancelText="鍏抽棴"> + <a-spin :spinning="spinning"> + <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-row :gutter="24"> + <a-col :span="8"> + <a-form-model-item prop="standardCode" label="瑙勮寖缂栫爜"> + <a-input placeholder="缂栫爜绯荤粺鑷姩鐢熸垚" v-model="model.standardCode" disabled/> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item prop="standardName" label="瑙勮寖鍚嶇О"> + <a-input placeholder="璇疯緭鍏ヨ鑼冨悕绉�" v-model="model.standardName"/> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item prop="equipmentId" label="缁熶竴缂栫爜"> + <lx-search-equipment-select placeholder="璇疯緭鍏ョ粺涓�缂栫爜鎴栧悕绉版悳绱�" v-model="model.equipmentId" :disabled="!editable"/> + </a-form-model-item> + </a-col> + </a-row> - <a-spin :spinning="confirmLoading"> - <a-form-model ref="form" :model="model" :rules="validatorRules"> <a-row :gutter="24"> <a-col :span="8"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode" label="鏍囧噯缂栫爜"> - <a-input placeholder="缂栫爜绯荤粺鑷姩鐢熸垚" v-model="model.standardCode" disabled /> + <a-form-model-item prop="maintenanceCategory" label="淇濆吇鍒嗙被"> + <j-dict-select-tag dict-code="maintenance_category" placeholder="璇烽�夋嫨淇濆吇鍒嗙被" + @change="handleMaintenanceCategoryChange" + v-model="model.maintenanceCategory" :disabled="!editable"/> </a-form-model-item> </a-col> <a-col :span="8"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardName" label="鏍囧噯鍚嶇О"> - <a-input placeholder="璇疯緭鍏ユ爣鍑嗗悕绉�" v-model="model.standardName" /> + <a-form-model-item label="淇濆吇鍛ㄦ湡鍗曚綅"> + <a-input readOnly v-model="model.periodUnit" placeholder="鏍规嵁淇濆吇鍒嗙被鑷姩甯﹀嚭"/> </a-form-model-item> </a-col> <a-col :span="8"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenanceCategory" label="淇濆吇鍒嗙被"> - <j-dict-select-tag dict-code="maintenance_category" placeholder="璇烽�夋嫨淇濆吇鍒嗙被" v-model="model.maintenanceCategory" :disabled="editable" /> + <a-form-model-item prop="maintenancePeriod" label="淇濆吇鍛ㄦ湡"> + <a-input-number v-model="model.maintenancePeriod" placeholder="璇疯緭鍏ヤ繚鍏诲懆鏈�" :min="1" :precision="0" + style="width: 100%"/> </a-form-model-item> </a-col> </a-row> + <a-row :gutter="24"> <a-col :span="8"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fileCode" label="鏂囦欢缂栧彿"> - <a-input placeholder="璇疯緭鍏ヤ繚鍏绘爣鍑嗘枃浠剁紪鍙�" v-model="model.fileCode"/> + <a-form-model-item prop="initialDate" label="鍒濆鏃ユ湡"> + <a-date-picker placeholder="璇烽�夋嫨鍒濆鏃ユ湡" v-model="model.initialDate" value-format="YYYY-MM-DD" + style="width: 100%"/> </a-form-model-item> </a-col> <a-col :span="8"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="initialDate" label="鍒濆鏃ユ湡"> - <a-date-picker placeholder="璇烽�夋嫨鍒濆鏃ユ湡" v-model="model.initialDate" format="YYYY-MM-DD" style="width: 100%" :disabled="editable"/> + <a-form-model-item label="瑙勮寖鐘舵��"> + <j-dict-select-tag dict-code="maintenance_standard_status" placeholder="鏍规嵁娴佺▼杩涘害鑷姩甯﹀嚭" + v-model="model.standardStatus" disabled/> </a-form-model-item> </a-col> <a-col :span="8"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenancePeriod" label="淇濆吇鍛ㄦ湡"> - <a-input-number v-model="model.maintenancePeriod" :min="1" :precision="0" style="width: 100%"/> + <a-form-model-item label="瑙勮寖鐗堟湰"> + <a-input-number v-model="model.standardVersion" placeholder="鏍规嵁娴佺▼杩涘害鑷姩甯﹀嚭" style="width: 100%" disabled/> </a-form-model-item> </a-col> </a-row> - <a-row :gutter="24"> - <a-col :span="8"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧缂栧彿"> - <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" v-model="model.equipmentId" :disabled="editable"></lx-search-equipment-select> - </a-form-model-item> - </a-col> - <a-col :span="8"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardStatus" label="鏍囧噯鐘舵��"> - <j-dict-select-tag dict-code="maintenance_standard_status" v-model="model.standardStatus" disabled/> - </a-form-model-item> - </a-col> - <a-col :span="8"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardVersion" label="鏍囧噯鐗堟湰"> - <a-input-number v-model="model.standardVersion" style="width: 100%" disabled/> - </a-form-model-item> - </a-col> - </a-row> - <a-row :gutter="24"> - <a-col :span="8"> - <a-form-model-item - label="鍙傝�冩枃浠�" - :labelCol="labelCol" - :wrapperCol="wrapperCol" - prop="fileList"> - <lx-upload :returnUrl="false" - :multiple="false" - v-model="model.fileList" - biz="EamMaintenanceStandard"> - </lx-upload> - </a-form-model-item> - </a-col> - </a-row> + <a-row :gutter="24"> <j-vxe-table ref="editableDetailTable" @@ -91,7 +83,20 @@ :loading="detail.loading" :dataSource="detail.dataSource" :columns="detail.columns" - style="margin-top: 8px;"/> + style="margin-top: 8px;"> + <template v-slot:itemPart="props"> + <a-textarea v-model="props.row.itemPart" allowClear @change="$refs.editableDetailTable.validateTable()" + :placeholder="model.maintenanceCategory!='THIRD_MAINTENANCE'?'浠呬笁淇濋渶瑕佺淮鎶�':'璇疯緭鍏ラ儴浣�'" :rows="1" + autoSize :disabled="model.maintenanceCategory!='THIRD_MAINTENANCE'"/> + </template> + + <template v-slot:itemCategory="props"> + <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" + @change="$refs.editableDetailTable.validateTable()" + :placeholder="getItemCategoryPlaceholder" + :disabled="!Boolean(model.maintenanceCategory)||model.maintenanceCategory=='THIRD_MAINTENANCE'"/> + </template> + </j-vxe-table> </a-row> </a-form-model> </a-spin> @@ -99,55 +104,56 @@ </template> <script> -import { getAction, httpAction } from '@/api/manage' + import { getAction, httpAction } from '@/api/manage' import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js' import { JVXETypes } from '@/components/jeecg/JVxeTable' import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect' export default { - name: "EamMaintenanceStandardModal", + name: 'EamMaintenanceStandardModal', mixins: [JVxeTableModelMixin], components: { - LxSearchEquipmentSelect, + LxSearchEquipmentSelect }, - data () { + data() { return { - title:"鎿嶄綔", + title: '鎿嶄綔', visible: false, model: {}, - editable: false, + editable: true, upgradeFlag: false, labelCol: { xs: { span: 24 }, - sm: { span: 5 }, + sm: { span: 7 } }, wrapperCol: { xs: { span: 24 }, - sm: { span: 16 }, + sm: { span: 16 } }, confirmLoading: false, + spinning: false, validatorRules: { standardName: [ - { required: true, message: '璇疯緭鍏ユ爣鍑嗗悕绉�!' } + { required: true, message: '璇疯緭鍏ヨ鑼冨悕绉�', trigger: 'change' } ], maintenanceCategory: [ - { required: true, message: '璇烽�夋嫨淇濆吇鍒嗙被!' } + { required: true, message: '璇烽�夋嫨淇濆吇鍒嗙被', trigger: 'change' } ], initialDate: [ - { required: true, message: '璇烽�夋嫨鍒濆鏃ユ湡!' } + { required: true, message: '璇烽�夋嫨鍒濆鏃ユ湡', trigger: 'change' } ], maintenancePeriod: [ - { required: true, message: '璇疯緭鍏ヤ繚鍏诲懆鏈燂紝鍗曚綅锛氬ぉ!' } + { required: true, message: '璇疯緭鍏ヤ繚鍏诲懆鏈�', trigger: 'change' } ], equipmentId: [ - { required: true, message: '璇烽�夋嫨璁惧!' } + { required: true, message: '璇疯緭鍏ョ粺涓�缂栫爜鎴栧悕绉版悳绱�', trigger: 'change' } ] }, url: { - add: "/eam/maintenanceStandard/add", - edit: "/eam/maintenanceStandard/edit", - detail: "/eam/eamMaintenanceStandardDetail/queryList", - upgrade: '/eam/maintenanceStandard/upgrade', + add: '/eam/maintenanceStandard/add', + edit: '/eam/maintenanceStandard/edit', + detail: '/eam/eamMaintenanceStandardDetail/queryList', + upgrade: '/eam/maintenanceStandard/upgrade' }, detail: { loading: false, @@ -156,169 +162,249 @@ { title: 'ID', key: 'id', - type: JVXETypes.hidden, + type: JVXETypes.hidden }, { title: 'standardId', key: 'standardId', - type: JVXETypes.hidden, + type: JVXETypes.hidden }, { - title: '搴忓彿', + title: '椤圭洰搴忓彿', key: 'itemCode', type: JVXETypes.inputNumber, - align:"center", - width: 100, + align: 'center', + placeholder: '璇疯緭鍏ラ」鐩簭鍙�', + width: 150, validateRules: [ - {required : true, unique: true, message: '搴忓彿涓嶈兘閲嶅'} + { required: true, message: '璇疯緭鍏ラ」鐩簭鍙�' }, + { unique: true, message: '椤圭洰搴忓彿涓嶈兘閲嶅' } ] }, { title: '閮ㄤ綅', key: 'itemPart', - type: JVXETypes.textarea, - align:"center", + type: JVXETypes.slot, + slotName: 'itemPart', + placeholder: '璇疯緭鍏ラ儴浣�', + align: 'center', + validateRules: [{ handler: this.itemPartValidate }] }, { - title: '淇濆吇椤�', + title: '淇濆吇椤瑰垎绫�', + key: 'itemCategory', + type: JVXETypes.slot, + slotName: 'itemCategory', + align: 'center', + validateRules: [{ handler: this.itemCategoryValidate }] + }, + { + title: '淇濆吇椤圭洰', key: 'itemName', + placeholder: '璇疯緭鍏ヤ繚鍏婚」鐩�', type: JVXETypes.textarea, - align:"center", + align: 'center', validateRules: [ - {required : true, message: '淇濆吇椤逛笉鑳戒负绌猴紒'} + { required: true, message: '璇疯緭鍏ヤ繚鍏婚」鐩�' } ] }, { - title: '淇濆吇瑕佹眰', - key: 'itemDemandAlias', - type: JVXETypes.textarea, - align:"center", - }, - { - title: '妫�鏌ユ爣鍑嗘垨瑕佹眰', + title: '淇濆吇瑙勮寖鎴栬姹�', key: 'itemDemand', + placeholder: '璇疯緭鍏ヤ繚鍏昏鑼冩垨瑕佹眰', type: JVXETypes.textarea, - align:"center", + align: 'center', validateRules: [ - {required : true, message: "淇濆吇瑕佹眰涓嶈兘涓虹┖锛�"} + { required: true, message: '璇疯緭鍏ヤ繚鍏昏鑼冩垨瑕佹眰' } ] - }, - { - title: '妫�鏌ユ柟娉�', - key: 'checkMethod', - type: JVXETypes.textarea, - align:"center", - }, + } ], toolbarConfig: { // prefix 鍓嶇紑锛泂uffix 鍚庣紑 slot: ['prefix', 'suffix'], // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳 btn: ['add', 'remove', 'clearSelection'] - }, + } } } }, - created () { + computed: { + getItemCategoryPlaceholder() { + if (!Boolean(this.model.maintenanceCategory)) return '璇烽�夋嫨淇濆吇鍒嗙被' + else { + if (this.model.maintenanceCategory != 'THIRD_MAINTENANCE') return '璇烽�夋嫨淇濆吇椤瑰垎绫�' + else return '涓変繚鏃犻渶缁存姢' + } + }, + + encodedDictCode() { + let suffix + if (!Boolean(this.model.maintenanceCategory) || this.model.maintenanceCategory === 'THIRD_MAINTENANCE') return + else suffix = this.model.maintenanceCategory.split('_')[1] + + const dictCode = `sys_dict_item,item_text,item_value,item_value like '%${suffix}' and dict_id='1940598438685134850'` + return encodeURIComponent(dictCode) + } }, methods: { - add () { - this.model = {}; - this.visible = true; - this.editable = false; - this.upgradeFlag = false; - this.detail.dataSource = []; + add() { + this.model = {} + this.visible = true + this.editable = true + this.upgradeFlag = false + this.detail.dataSource = [] }, - edit (record) { - this.model = Object.assign({}, record); - this.visible = true; - this.editable = true; - this.upgradeFlag = false; - this.detail.dataSource = []; - if(record && record.referenceFile) { - let obj = JSON.parse(record.referenceFile); - this.model.fileList = [obj]; - }else { - this.model.fieldList = []; - } - this.loadDetail(record.id); - }, - upgrade(record) { - this.model = Object.assign({}, record); - this.visible = true; - this.editable = true; - this.upgradeFlag = true; - this.detail.dataSource = []; - if(record && record.referenceFile) { - let obj = JSON.parse(record.referenceFile); - this.model.fileList = [obj]; - }else { - this.model.fieldList = []; - } - this.loadDetail(record.id); - }, - close () { - this.$emit('close'); - this.visible = false; - this.$refs.form.clearValidate(); - }, - async handleOk () { - const that = this; - let errMap = await that.$refs.editableDetailTable.validateTable(); - if(errMap){ - this.$message.warning("鏁版嵁鏍¢獙澶辫触锛�"); - return; - } - // 瑙﹀彂琛ㄥ崟楠岃瘉 - this.$refs.form.validate(valid => { - if (valid) { - let tableData = that.$refs.editableDetailTable.getTableData(); - let removeData = that.$refs.editableDetailTable.getDeleteData(); - that.model.tableDetailList = [...tableData]; - that.model.removeDetailList = [...removeData]; - that.confirmLoading = true; - let httpurl = ''; - let method = ''; - if(!this.model.id){ - httpurl+=this.url.add; - method = 'post'; - }else{ - if(this.upgradeFlag) { - httpurl+=this.url.upgrade; - }else { - httpurl+=this.url.edit; + edit(record) { + this.model = Object.assign({}, record) + this.visible = true + this.editable = false + this.upgradeFlag = false + this.detail.dataSource = [] + this.loadDetail(record.id) + }, + + upgrade(record) { + this.model = Object.assign({}, record) + this.visible = true + this.editable = false + this.upgradeFlag = true + this.detail.dataSource = [] + this.loadDetail(record.id) + }, + + /** + * 淇濆吇鍒嗙被鍊兼敼鍙樻椂鍚屾椂鏀瑰彉淇濆吇鍛ㄦ湡鍗曚綅浠ュ強淇濆吇椤瑰垎绫� + * @param value 淇濆吇鍒嗙被鍊� + */ + handleMaintenanceCategoryChange(value) { + switch (value) { + case 'THIRD_MAINTENANCE': + this.model.periodUnit = '骞�' + break + case 'SECOND_MAINTENANCE': + this.model.periodUnit = '鏈�' + break + case 'POINT_INSPECTION': + this.model.periodUnit = '澶�' + break + default: + delete this.model.periodUnit + } + + const tableData = this.$refs.editableDetailTable.getTableData() + tableData.forEach(item => { + if (value !== 'THIRD_MAINTENANCE') delete item.itemPart + delete item.itemCategory + }) + this.detail.dataSource = [...tableData] + console.log('tableData', tableData) + }, + + /** + * 淇濆吇閮ㄤ綅鏍¢獙 + * @param cellValue 杈撳叆鍊� + * @param callback 鍥炶皟鍑芥暟 + */ + itemPartValidate({ cellValue }, callback) { + if (this.model.maintenanceCategory === 'THIRD_MAINTENANCE') { + if (cellValue) callback(true) + else callback(false, '璇烽�夋嫨${title}') + } else { + callback(true) + } + }, + + /** + * 淇濆吇椤瑰垎绫绘牎楠� + * @param cellValue 杈撳叆鍊� + * @param callback 鍥炶皟鍑芥暟 + */ + itemCategoryValidate({ cellValue }, callback) { + if (this.model.maintenanceCategory === 'THIRD_MAINTENANCE') { + callback(true) + } else { + if (cellValue) callback(true) + else callback(false, '璇烽�夋嫨${title}') + } + }, + + // 鎻愪氦浜嬩欢 + async handleOk() { + const that = this + let errMap = await that.$refs.editableDetailTable.validateTable() + if (errMap) return false + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + let tableData = that.$refs.editableDetailTable.getTableData() + let removeData = that.$refs.editableDetailTable.getDeleteData() + that.model.tableDetailList = [...tableData] + that.model.removeDetailList = [...removeData] + + that.confirmLoading = that.spinning = true + let httpUrl = '' + let method = '' + if (!this.model.id) { + httpUrl += this.url.add + method = 'post' + } else { + if (this.upgradeFlag) { + httpUrl += this.url.upgrade + } else { + httpUrl += this.url.edit } - method = 'put'; + method = 'put' } - httpAction(httpurl,this.model,method).then((res)=>{ - if(res.success){ - that.$message.success(res.message); - that.$emit('ok'); - that.close(); - }else{ - that.$message.warning(res.message); - } - }).finally(() => { - that.confirmLoading = false; - }) - }else{ - return false; + httpAction(httpUrl, this.model, method) + .then((res) => { + if (res.success) { + that.$notification.success({ + message: '娑堟伅', + description: res.message + }) + that.$emit('ok') + that.close() + } else { + that.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }) + .finally(() => { + that.confirmLoading = that.spinning = false + }) + } else { + return false } }) }, - handleCancel () { + + handleCancel() { this.close() }, + + close() { + this.$emit('close') + this.visible = false + this.$refs.form.clearValidate() + }, + //鍔犺浇璇︽儏鏁版嵁 loadDetail(standardId) { - this.detail.dataSource = []; + this.spinning = true + this.detail.dataSource = [] if (standardId) { - getAction(this.url.detail, { standardId: standardId }).then(res => { - if (res.success) { - this.detail.dataSource = [...res.result]; - } - }) + getAction(this.url.detail, { standardId }) + .then(res => { + if (res.success) { + this.detail.dataSource = [...res.result] + } + }) + .finally(() => { + this.spinning = false + }) } } @@ -326,6 +412,12 @@ } </script> -<style lang="less" scoped> +<style scoped lang="less"> + /deep/ .ant-select-dropdown-menu { + text-align: left; + } + /deep/ textarea.ant-input { + resize: none; + } </style> \ No newline at end of file -- Gitblit v1.9.3