From 44c6f1e1c8d0a20b1a2e54acdf80dc07842393d0 Mon Sep 17 00:00:00 2001 From: zhangherong <571457620@qq.com> Date: 星期三, 14 五月 2025 17:44:00 +0800 Subject: [PATCH] art: 设备管理-二保-新增,编辑功能 --- src/views/eam/maintenance/modules/EamSecondMaintenanceOrderModal.vue | 372 ++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 280 insertions(+), 92 deletions(-) diff --git a/src/views/eam/maintenance/modules/EamSecondMaintenanceOrderModal.vue b/src/views/eam/maintenance/modules/EamSecondMaintenanceOrderModal.vue index 5879629..07af5c0 100644 --- a/src/views/eam/maintenance/modules/EamSecondMaintenanceOrderModal.vue +++ b/src/views/eam/maintenance/modules/EamSecondMaintenanceOrderModal.vue @@ -1,148 +1,336 @@ <template> <j-modal :title="title" - :width="800" + :width="1200" :visible="visible" :confirmLoading="confirmLoading" switchFullscreen + :mask-closable="false" @ok="handleOk" @cancel="handleCancel" cancelText="鍏抽棴"> - - <a-spin :spinning="confirmLoading"> - <a-form-model ref="form" :model="model" :rules="validatorRules"> - - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="delFlag" label="鍒犻櫎鏍囪"> - <a-input-number v-model="model.delFlag"/> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderNum" label="宸ュ崟鍙�"> - <a-input placeholder="璇疯緭鍏ュ伐鍗曞彿" v-model="model.orderNum" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧ID"> - <a-input placeholder="璇疯緭鍏ヨ澶嘔D" v-model="model.equipmentId" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardId" label="鏍囧噯ID"> - <a-input placeholder="璇疯緭鍏ユ爣鍑咺D" v-model="model.standardId" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planStartTime" label="璁″垝寮�濮嬫椂闂�"> - <a-input placeholder="璇疯緭鍏ヨ鍒掑紑濮嬫椂闂�" v-model="model.planStartTime" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planEndTime" label="璁″垝缁撴潫鏃堕棿"> - <a-input placeholder="璇疯緭鍏ヨ鍒掔粨鏉熸椂闂�" v-model="model.planEndTime" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="actualStartTime" label="瀹為檯寮�濮嬫椂闂�"> - <a-input placeholder="璇疯緭鍏ュ疄闄呭紑濮嬫椂闂�" v-model="model.actualStartTime" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="actualEndTime" label="瀹為檯缁撴潫鏃堕棿"> - <a-input placeholder="璇疯緭鍏ュ疄闄呯粨鏉熸椂闂�" v-model="model.actualEndTime" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="operator" label="淇濆吇浜�"> - <a-input placeholder="璇疯緭鍏ヤ繚鍏讳汉" v-model="model.operator" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenanceStatus" label="淇濆吇鐘舵��"> - <a-input placeholder="璇疯緭鍏ヤ繚鍏荤姸鎬�" v-model="model.maintenanceStatus" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="creationMethod" label="鍒涘缓鏂瑰紡"> - <a-input placeholder="璇疯緭鍏ュ垱寤烘柟寮�" v-model="model.creationMethod" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmUser" label="璁惧绠$悊鍛樼‘璁�"> - <a-input placeholder="璇疯緭鍏ヨ澶囩鐞嗗憳纭" v-model="model.confirmUser" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmTime" label="纭鏃堕棿"> - <a-input placeholder="璇疯緭鍏ョ‘璁ゆ椂闂�" v-model="model.confirmTime" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="imageFiles" label="鐓х墖鏂囦欢ids;id浠ラ�楀彿鍒嗛殧"> - <a-input placeholder="璇疯緭鍏ョ収鐗囨枃浠秈ds;id浠ラ�楀彿鍒嗛殧" v-model="model.imageFiles" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark" label="澶囨敞"> - <a-input placeholder="璇疯緭鍏ュ娉�" v-model="model.remark" /> - </a-form-model-item> - + + <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="orderNum" label="宸ュ崟鍙�"> + <a-input placeholder="宸ュ崟鍙风郴缁熻嚜鍔ㄧ敓鎴�" v-model="model.orderNum" disabled/> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item prop="equipmentId" label="璁惧缂栫爜"> + <maintenance-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" v-model="model.equipmentId" + :maintenanceCategory="maintenanceCategory" + @autocompleteForm="autocompleteForm" + :disabled="editable"></maintenance-equipment-select> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item prop="standardName" label="鏍囧噯鍚嶇О"> + <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" v-model="model.standardName" disabled/> + </a-form-model-item> + </a-col> + </a-row> + <a-row :gutter="24"> + <a-col :span="8"> + <a-form-model-item prop="maintenanceDate" label="淇濆吇鏃ユ湡"> + <a-date-picker placeholder="璇烽�夋嫨璁″垝淇濆吇鏃ユ湡" v-model="model.maintenanceDate" format="YYYY-MM-DD" + style="width: 100%"/> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item prop="operator" label="淇濆吇浜�"> + <j-search-select-tag v-model="model.operator" placeholder="璇烽�夋嫨淇濆吇浜�" :disabled="!model.equipmentId" + :dictOptions="maintenanceOperatorOptions"/> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item prop="maintenancePeriod" label="淇濆吇鍛ㄦ湡"> + <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" v-model="model.maintenancePeriod" disabled/> + </a-form-model-item> + </a-col> + </a-row> + <a-row :gutter="24"> + <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="remark" label="澶囨敞"> + <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.remark"/> + </a-form-model-item> + </a-row> + <a-row :gutter="24"> + <a-spin :spinning="detail.loading"> + <j-vxe-table + ref="editableDetailTable" + :rowNumber="true" + :rowSelection="true" + :bordered="true" + :alwaysEdit="true" + :toolbar="true" + :toolbarConfig="detail.toolbarConfig" + keep-source + :height="300" + :dataSource="detail.dataSource" + :columns="detail.columns" + style="margin-top: 8px;"/> + </a-spin> + </a-row> </a-form-model> </a-spin> </j-modal> </template> <script> - import { httpAction } from '@/api/manage' - import moment from "moment" +import { getAction, httpAction } from '@/api/manage' +import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect.vue' +import { JVXETypes } from '@comp/jeecg/JVxeTable' - export default { +export default { name: "EamSecondMaintenanceOrderModal", + components: { MaintenanceEquipmentSelect }, data () { return { title:"鎿嶄綔", visible: false, + editable: false, model: {}, + maintenanceCategory: 'SECOND_MAINTENANCE', labelCol: { xs: { span: 24 }, - sm: { span: 5 }, + sm: { span: 6 } }, wrapperCol: { xs: { span: 24 }, - sm: { span: 16 }, + sm: { span: 16 } }, - + labelColLong: { + xs: { span: 24 }, + sm: { span: 2 } + }, + wrapperColLong: { + xs: { span: 24 }, + sm: { span: 21 } + }, confirmLoading: false, + spinning: false, validatorRules:{ + equipmentId: [ + { required: true, message: '璇烽�夋嫨璁惧!' } + ], + maintenanceDate: [ + { required: true, message: '璇烽�夋嫨璁″垝淇濆吇鏃ユ湡!' } + ] }, url: { - add: "/eam/eamSecondMaintenanceOrder/add", - edit: "/eam/eamSecondMaintenanceOrder/edit", + add: "/eam/secondMaintenanceOrder/add", + edit: "/eam/secondMaintenanceOrder/edit", + standardDetail: '/eam/eamMaintenanceStandardDetail/queryList', + detail: '/eam/secondMaintenanceOrderDetail/queryList', + userSelect: '/eam/user_select/list' }, + detail: { + loading: false, + dataSource: [], + columns: [ + { + title: 'ID', + key: 'id', + type: JVXETypes.hidden + }, + { + title: 'orderId', + key: 'orderId', + type: JVXETypes.hidden + }, + { + title: '搴忓彿', + key: 'itemCode', + type: JVXETypes.inputNumber, + width: '10%', + align: 'center', + validateRules: [ + { required: true, unique: true, message: '搴忓彿涓嶈兘閲嶅' } + ] + }, + { + title: '閮ㄤ綅', + key: 'itemPart', + type: JVXETypes.textarea, + width: '25%', + align: 'center' + }, + { + title: '淇濆吇椤�', + key: 'itemName', + type: JVXETypes.textarea, + width: '20%', + align: 'center', + validateRules: [ + { required: true, message: '淇濆吇椤逛笉鑳戒负绌猴紒' } + ] + }, + { + title: '淇濆吇瑕佹眰', + key: 'itemDemand', + type: JVXETypes.textarea, + width: '30%', + align: 'center', + validateRules: [ + { required: true, message: '淇濆吇瑕佹眰涓嶈兘涓虹┖锛�' } + ] + } + ], + toolbarConfig: { + // prefix 鍓嶇紑锛泂uffix 鍚庣紑 + slot: ['prefix', 'suffix'], + // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳 + btn: ['add', 'remove', 'clearSelection'] + } + } } }, created () { }, methods: { - add () { + add() { //鍒濆鍖栭粯璁ゅ�� - this.edit({}); + this.model = {} + this.visible = true + this.editable = false + this.detail.dataSource = [] }, - edit (record) { - this.model = Object.assign({}, record); - this.visible = true; + edit(record) { + this.model = Object.assign({}, record) + this.visible = true + this.editable = true + this.detail.dataSource = [] + this.loadDetail(record.id) }, - close () { - this.$emit('close'); - this.visible = false; - this.$refs.form.clearValidate(); + close() { + this.$emit('close') + this.visible = false + this.$refs.form.clearValidate() }, - handleOk () { - const that = this; + async handleOk() { + const that = this + let errMap = await that.$refs.editableDetailTable.validateTable() + if (errMap) { + this.$message.warning('鏁版嵁鏍¢獙澶辫触锛�') + return + } // 瑙﹀彂琛ㄥ崟楠岃瘉 - this.$refs.form.validate(valid => { + 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'; + 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 { + 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); + 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; - that.close(); + that.confirmLoading = false }) - }else{ - return false; + } else { + return false } }) }, - handleCancel () { + handleCancel() { this.close() }, - + autocompleteForm(selectObj) { + //鏍囧噯鍚嶇О锛屼繚鍏诲懆鏈熶笉鍒锋柊瑙e喅鍔炴硶 + //鍔炴硶涓� validatorRules equipmentId 杩樻槸鏈夐棶棰� + // const newObj = { + // standardName: selectObj.standardName, + // maintenancePeriod: selectObj.maintenancePeriod, + // standardId : selectObj.id, + // equipmentId: selectObj.equipmentId, + // }; + // this.model = Object.assign({}, newObj, this.model) + //鍔炴硶浜� + this.$set(this.model, 'standardName', selectObj.standardName) + this.$set(this.model, 'maintenancePeriod', selectObj.maintenancePeriod) + this.$set(this.model, 'standardId', selectObj.id) + this.$set(this.model, 'equipmentId', selectObj.equipmentId) + // console.log('model', this.model) + if (!this.model.equipmentId) delete this.model.operator + if (!this.model.id) { + this.loadStandardDetail(selectObj.id) + } + this.loadMaintenanceOperatorList(this.model.equipmentId) + }, + //鍔犺浇璇︽儏鏁版嵁 + loadStandardDetail(standardId) { + this.detail.dataSource = [] + if (standardId) { + this.spinning = true + getAction(this.url.standardDetail, { standardId: standardId }) + .then(res => { + if (res.success) { + this.detail.dataSource = res.result.map(item => ({ + itemCode: item.itemCode, + itemName: item.itemName, + itemPart: item.itemPart, + itemDemand: item.itemDemand + })) + } + }) + .finally(() => { + this.spinning = false + }) + } + }, + //鏍囧噯閫夋嫨鍙樺寲 + loadDetail(orderId) { + if (orderId) { + getAction(this.url.detail, { orderId: orderId }).then(res => { + if (res.success) { + this.detail.dataSource = [...res.result] + } + }) + } + }, + loadMaintenanceOperatorList(equipmentId) { + this.maintenanceOperatorOptions = [] + let params = { positionCode: 'PCR0001' } + if (equipmentId) { + params.equipmentId = equipmentId + } + else return + const that = this + getAction(this.url.userSelect, params) + .then(res => { + if (res.success) { + that.maintenanceOperatorOptions = res.result.map(item => ({ + key: item.id, + value: item.username, + text: item.realname + })) + if (!that.maintenanceOperatorOptions.find(item => item.value === that.model.operator)) delete that.model.operator + } else { + if (that.model.operator) delete that.model.operator + } + }) + .catch(err => { + if (that.model.operator) delete that.model.operator + }) + } } } -- Gitblit v1.9.3