From 19aff1ac87030b21d2b01cdca5d5604c840ba7c0 Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期一, 21 七月 2025 21:36:31 +0800 Subject: [PATCH] 维修工单 --- src/views/eam/repair/modules/EamReportRepairList/EamReportRepairModal.vue | 461 ++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 311 insertions(+), 150 deletions(-) diff --git a/src/views/eam/repair/modules/EamReportRepairList/EamReportRepairModal.vue b/src/views/eam/repair/modules/EamReportRepairList/EamReportRepairModal.vue index 038abde..183bbde 100644 --- a/src/views/eam/repair/modules/EamReportRepairList/EamReportRepairModal.vue +++ b/src/views/eam/repair/modules/EamReportRepairList/EamReportRepairModal.vue @@ -1,86 +1,173 @@ <template> - <j-modal - :title="title" - :width="800" - :visible="visible" - :confirmLoading="confirmLoading" - switchFullscreen - @ok="handleOk" - @cancel="close" - :mask-closable="false" - cancelText="鍏抽棴"> + <j-modal :title="title" fullscreen :visible="visible" :confirmLoading="confirmLoading" + :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" @ok="handleOk" @cancel="handleCancel" + cancelText="鍏抽棴"> <a-spin :spinning="confirmLoading"> - <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol"> - <a-row> - <a-col :span="12"> - <a-form-model-item prop="equipmentId" label="璁惧缂栧彿"> - <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" v-model="model.equipmentId"/> - </a-form-model-item> - </a-col> + <j-form-container :disabled="disableSubmit"> + <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" + :wrapperCol="wrapperCol" slot="detail"> + <a-row> + <a-col :span="customSpan"> + <a-form-model-item prop="equipmentId" label="缁熶竴缂栫爜"> + <lx-search-equipment-select placeholder="璇疯緭鍏ョ粺涓�缂栫爜鎴栧悕绉版悳绱�" v-model="model.equipmentId" :allowClear="false"/> + </a-form-model-item> + </a-col> + </a-row> - <a-col :span="12"> - <a-form-model-item prop="faultName" label="鏁呴殰绠�绉�"> - <a-select placeholder="璇烽�夋嫨鏁呴殰绠�绉�" v-model="model.faultName" @change="handleFaultNameChange"> - <a-select-option v-for="item in faultReasonList" :key="item.faultName"> - {{ item.faultName }} - </a-select-option> - </a-select> - </a-form-model-item> - </a-col> - </a-row> + <a-row> + <a-col :span="customSpan"> + <a-form-model-item label="鏄惁鍋滄満"> + <j-dict-select-tag type="radio" dict-code="yn" placeholder="璇烽�夋嫨鏄惁鍋滄満" v-model="model.breakdownFlag"/> + </a-form-model-item> + </a-col> + <a-col :span="customSpan"> + <a-form-model-item label="鏁呴殰寮�濮嬫椂闂�" prop="faultStartTime"> + <a-date-picker v-model="model.faultStartTime" :allowClear="false" value-format="YYYY-MM-DD" + style="width:100%"/> + </a-form-model-item> + </a-col> - <a-row> - <a-col :span="12"> - <a-form-model-item label="鏁呴殰鍒嗙被"> - <a-input placeholder="璇疯緭鍏ユ晠闅滃垎绫�" v-model="model.faultType_dictText" readOnly/> - </a-form-model-item> - </a-col> - </a-row> + <a-col :span="12"> + <a-form-model-item label="鏁呴殰鐜拌薄" prop="faultDescription" :labelCol="labelColLong" + :wrapperCol="wrapperColLong"> + <a-textarea placeholder="璇疯緭鍏ユ晠闅滅幇璞�" v-model="model.faultDescription"/> + </a-form-model-item> + </a-col> + </a-row> - <a-row> - <a-col :span="24"> - <a-form-model-item label="鏁呴殰鎻忚堪" prop="faultDescription" :labelCol="labelColLong" - :wrapperCol="wrapperColLong"> - <a-textarea placeholder="璇疯緭鍏ユ晠闅滄弿杩�" v-model="model.faultDescription"/> - </a-form-model-item> - </a-col> - </a-row> + <a-row> + <a-col :span="customSpan"> + <a-form-model-item label="鏄惁鍔犲伐"> + <j-dict-select-tag dict-code="yn" type="radio" v-model="model.isProcessed" + @change="handleRadioChange($event,'batchNumber,processingPart,quantity')"/> + </a-form-model-item> + </a-col> + <a-col :span="customSpan"> + <a-form-model-item label="鎵规鍙�" prop="batchNumber"> + <a-input :disabled="!Boolean(+model.isProcessed)" placeholder="璇疯緭鍏ユ壒娆″彿" v-model="model.batchNumber"/> + </a-form-model-item> + </a-col> + <a-col :span="customSpan"> + <a-form-model-item label="鍔犲伐闆朵欢鍙�" prop="processingPart"> + <a-input :disabled="!Boolean(+model.isProcessed)" placeholder="璇疯緭鍏ュ姞宸ラ浂浠跺彿" + v-model="model.processingPart"/> + </a-form-model-item> + </a-col> + <a-col :span="customSpan"> + <a-form-model-item label="浠舵暟" prop="quantity"> + <a-input-number :disabled="!Boolean(+model.isProcessed)" placeholder="璇疯緭鍏ヤ欢鏁�" v-model="model.quantity" + :min="0" style="width: 100%"/> + </a-form-model-item> + </a-col> + </a-row> - <a-row> - <a-col :span="12"> - <a-form-model-item prop="faultStartTime" label="鏁呴殰寮�濮嬫椂闂�"> - <a-date-picker showTime placeholder="璇烽�夋嫨鏁呴殰寮�濮嬫椂闂�" v-model="model.faultStartTime" - :allow-clear="false" value-format="YYYY-MM-DD HH:mm:ss" :disabledDate="disabledDate" - :disabledTime="disabledTime"/> - </a-form-model-item> - </a-col> + <a-row> + <a-col :span="customSpan"> + <a-form-model-item label="璁惧浜嬫晠"> + <j-dict-select-tag dict-code="yn" type="radio" placeholder="璇烽�夋嫨璁惧浜嬫晠" + v-model="model.isAccidentsRegister" @change="handleRadioChange($event,'scrapPartNumber,scrapPartQuantity,' + + 'scrapPartValue,operationCertificate,powerOffRestart,batchFirstPiece,variableFactors,variableFactorsValue,'+ + 'executeNc,accidentPhenomenon,measure,causingResults')"/> + </a-form-model-item> + </a-col> + <a-col :span="customSpan"> + <a-form-model-item label="搴熷搧浠跺彿" prop="scrapPartNumber"> + <a-input placeholder="璇疯緭鍏ュ簾鍝佷欢鍙�" :disabled="!Boolean(+model.isAccidentsRegister)" + v-model="model.scrapPartNumber"/> + </a-form-model-item> + </a-col> + <a-col :span="customSpan"> + <a-form-model-item label="搴熷搧浠舵暟" prop="scrapPartQuantity"> + <a-input-number placeholder="璇疯緭鍏ュ簾鍝佷欢鏁�" :disabled="!Boolean(+model.isAccidentsRegister)" + v-model="model.scrapPartQuantity" :min="0" style="width: 100%"/> + </a-form-model-item> + </a-col> + <a-col :span="customSpan"> + <a-form-model-item label="搴熷搧浠峰��" prop="scrapPartValue"> + <a-input-number placeholder="璇疯緭鍏ュ簾鍝佷环鍊�" :disabled="!Boolean(+model.isAccidentsRegister)" + v-model="model.scrapPartValue" style="width: 100%"/> + </a-form-model-item> + </a-col> + </a-row> - <a-col :span="12"> - <a-form-model-item prop="breakdownFlag" label="鏄惁鍋滄満"> - <a-radio-group v-model="model.breakdownFlag"> - <a-radio v-for="item in breakdownFlagList" :value="item.value">{{ item.label }}</a-radio> - </a-radio-group> - </a-form-model-item> - </a-col> - </a-row> + <a-row> + <a-col :span="customSpan"> + <a-form-model-item label="鏄惁鏈夎澶囨搷浣滆瘉"> + <j-dict-select-tag dict-code="yn" type="radio" :disabled="!Boolean(+model.isAccidentsRegister)" + placeholder="璇烽�夋嫨鏄惁鏈夎澶囨搷浣滆瘉" + v-model="model.operationCertificate"/> + </a-form-model-item> + </a-col> + <a-col :span="customSpan"> + <a-form-model-item label="鏄惁鏂數閲嶅惎"> + <j-dict-select-tag dict-code="yn" type="radio" :disabled="!Boolean(+model.isAccidentsRegister)" + placeholder="璇烽�夋嫨鏄惁鏂數閲嶅惎" v-model="model.powerOffRestart"/> + </a-form-model-item> + </a-col> + <a-col :span="customSpan"> + <a-form-model-item label="鏄惁涓烘壒娆¢浠�"> + <j-dict-select-tag dict-code="yn" type="radio" :disabled="!Boolean(+model.isAccidentsRegister)" + placeholder="璇烽�夋嫨鏄惁涓烘壒娆¢浠�" + v-model="model.batchFirstPiece"/> + </a-form-model-item> + </a-col> + <a-col :span="customSpan"> + <a-form-model-item label="鍙樺姩鍥犵礌" prop="variableFactors"> + <j-dict-select-tag type="radio" dict-code="yn" :disabled="!Boolean(+model.isAccidentsRegister)" + placeholder="璇烽�夋嫨鍙樺姩鍥犵礌" v-model="model.variableFactors" + @change="handleRadioChange($event,'variableFactorsValue')"/> + </a-form-model-item> + </a-col> + </a-row> - <a-row> - <a-col :span="24"> - <a-form-model-item prop="imageFiles" label="鎶ヤ慨鍥剧墖" :labelCol="labelColLong" :wrapperCol="wrapperColLong"> - <lx-upload :returnUrl="false" :isMultiple="true" file-type="image" :number="3" - v-model="model.imageFilesResult"/> - </a-form-model-item> - </a-col> - </a-row> + <a-row> + <a-col :span="customSpan"> + <a-form-model-item label="鍙樺姩鍥犵礌鍐呭" prop="variableFactorsValue"> + <j-dict-select-tag dict-code="variable_factors_value" :disabled="!Boolean(+model.variableFactors)" + placeholder="璇烽�夋嫨鍙樺姩鍥犵礌鍐呭" + v-model="model.variableFactorsValue"/> + </a-form-model-item> + </a-col> + <a-col :span="customSpan"> + <a-form-model-item label="鎵ц绋嬪簭"> + <a-input placeholder="璇疯緭鍏ユ墽琛岀▼搴�" v-model="model.executeNc" + :disabled="!Boolean(+model.isAccidentsRegister)"/> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="浜嬫晠鐜拌薄" prop="accidentPhenomenon" :labelCol="labelColLong" + :wrapperCol="wrapperColLong"> + <a-textarea placeholder="璇疯緭鍏ヤ簨鏁呯幇璞�" v-model="model.accidentPhenomenon" + :disabled="!Boolean(+model.isAccidentsRegister)"/> + </a-form-model-item> + </a-col> + </a-row> - <a-row> - <a-col :span="24"> - <a-form-model-item prop="remark" label="澶囨敞" :labelCol="labelColLong" :wrapperCol="wrapperColLong"> - <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.remark"/> - </a-form-model-item> - </a-col> - </a-row> - </a-form-model> + <a-row> + <a-col :span="12"> + <a-form-model-item label="閲囧彇鎺柦" prop="measure" :labelCol="labelColLong" :wrapperCol="wrapperColLong"> + <a-textarea placeholder="璇疯緭鍏ラ噰鍙栨帾鏂�" v-model="model.measure" + :disabled="!Boolean(+model.isAccidentsRegister)"/> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="閫犳垚缁撴灉" prop="causingResults" :labelCol="labelColLong" + :wrapperCol="wrapperColLong"> + <a-textarea placeholder="璇疯緭鍏ラ�犳垚缁撴灉" v-model="model.causingResults" + :disabled="!Boolean(+model.isAccidentsRegister)"/> + </a-form-model-item> + </a-col> + </a-row> + + <a-row> + <a-col :span="12"> + <a-form-model-item label="澶囨敞" :labelCol="labelColLong" :wrapperCol="wrapperColLong"> + <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.remark"/> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </j-form-container> </a-spin> </j-modal> </template> @@ -88,24 +175,18 @@ <script> import { httpAction } from '@/api/manage' import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue' - import moment from 'moment' export default { name: 'EamReportRepairModal', components: { LxSearchEquipmentSelect }, - props: { - breakdownFlagList: { - type: Array - }, - faultReasonList: { - type: Array - } - }, data() { return { title: '鎿嶄綔', visible: false, + //璇︽儏鎺у埗 + disableSubmit: false, model: {}, + customSpan: 6, labelCol: { xs: { span: 24 }, sm: { span: 8 } @@ -124,21 +205,60 @@ }, confirmLoading: false, validatorRules: { - faultStartTime: [ - { required: true, message: '璇烽�夋嫨鏁呴殰寮�濮嬫椂闂�' } - ], - breakdownFlag: [ - { required: true, message: '璇烽�夋嫨鏄惁鍋滄満' } - ], - equipmentId: [ - { required: true, message: '璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储' } - ], - faultName: [ - { required: true, message: '璇烽�夋嫨鏁呴殰绠�绉�' } - ], - faultDescription: [ - { required: true, message: '璇疯緭鍏ユ晠闅滄弿杩�' } - ] + equipmentId: [{ required: true, message: '璇疯緭鍏ョ粺涓�缂栫爜鎴栧悕绉版悳绱�', trigger: 'change' }], + faultStartTime: [{ required: true, message: '璇烽�夋嫨鏁呴殰寮�濮嬫椂闂�', trigger: 'change' }], + faultDescription: [{ required: true, message: '璇疯緭鍏ユ晠闅滅幇璞�', trigger: 'change' }], + batchNumber: [{ + validator: this.isProcessedRelatedValidator, + message: '璇疯緭鍏ユ壒娆″彿', + trigger: 'change' + }], + processingPart: [{ + validator: this.isProcessedRelatedValidator, + message: '璇疯緭鍏ュ姞宸ラ浂浠跺彿', + trigger: 'change' + }], + quantity: [{ + validator: this.isProcessedRelatedValidator, + message: '璇疯緭鍏ヤ欢鏁�', + trigger: 'change' + }], + scrapPartNumber: [{ + validator: this.isAccidentsRegisterRelatedValidator, + message: '璇疯緭鍏ュ簾鍝佷欢鍙�', + trigger: 'change' + }], + scrapPartQuantity: [{ + validator: this.isAccidentsRegisterRelatedValidator, + message: '璇疯緭鍏ュ簾鍝佷欢鏁�', + trigger: 'change' + }], + scrapPartValue: [{ + validator: this.isAccidentsRegisterRelatedValidator, + message: '璇疯緭鍏ュ簾鍝佷环鍊�', + trigger: 'change' + }], + variableFactors: [{ + validator: this.isAccidentsRegisterRelatedValidator, + message: '璇烽�夋嫨鍙樺姩鍥犵礌', + trigger: 'change' + }], + variableFactorsValue: [{ + validator: this.variableFactorsValueValidator, + message: '璇烽�夋嫨鍙樺姩鍥犵礌鍐呭', + trigger: 'change' + }], + accidentPhenomenon: [{ + validator: this.isAccidentsRegisterRelatedValidator, + message: '璇疯緭鍏ヤ簨鏁呯幇璞�', + trigger: 'change' + }], + measure: [{ validator: this.isAccidentsRegisterRelatedValidator, message: '璇疯緭鍏ラ噰鍙栨帾鏂�', trigger: 'change' }], + causingResults: [{ + validator: this.isAccidentsRegisterRelatedValidator, + message: '璇疯緭鍏ラ�犳垚缁撴灉', + trigger: 'change' + }] }, url: { add: '/eam/eamReportRepair/add', @@ -148,23 +268,19 @@ }, methods: { add() { + this.editable = true //鍒濆鍖栭粯璁ゅ�� - this.edit({ - faultDescription: '', - breakdownFlag: this.breakdownFlagList.find(item => item.label === '鍚�').value - }) - }, - - edit(record) { - this.model = Object.assign({}, record, { imageFilesResult: record.imageFiles && this.isJSON(record.imageFiles) ? JSON.parse(record.imageFiles) : null }) + this.model = { + breakdownFlag: '1', + isProcessed: '0', + isAccidentsRegister: '0' + } this.visible = true }, - handleFaultNameChange(value) { - const faultReasonItem = this.faultReasonList.find(item => item.faultName === value) - this.model.faultType = faultReasonItem.faultCategory - this.model.faultType_dictText = faultReasonItem.faultCategory_dictText - this.model.faultDescription = faultReasonItem.faultDescription + edit(record) { + this.model = Object.assign({}, record) + this.visible = true }, handleOk() { @@ -183,59 +299,101 @@ 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) - } - }).finally(() => { - that.confirmLoading = false - that.close() - }) + 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 = false + }) } else { return false } }) }, - // 鍒ゆ柇鏄笉鏄疛SON瀛楃涓� - isJSON(str) { - try { - JSON.parse(str) - return true // 濡傛灉杩欓噷娌℃湁鎶涘嚭寮傚父锛岃鏄庢槸JSON鏍煎紡鐨勫瓧绗︿覆 - } catch (e) { - return false // 濡傛灉鎶涘嚭寮傚父锛岃鏄庝笉鏄疛SON鏍煎紡鐨勫瓧绗︿覆 + /**\ + * 鍗曢�夋鍊煎彂鐢熸敼鍙樻椂瑙﹀彂 + * @param value 鍗曢�夋鍊� + * @param key 鍗曢�夋鍏宠仈瀛楁 + */ + handleRadioChange(value, key) { + //key鍖呭惈,璇存槑鏄閫夋 + if (key.includes(',')) { + const keys = key.split(',') + keys.forEach(key => { + if (value != '1') delete this.model[key] + this.$refs.form.clearValidate(key) + }) + } else { + if (value != '1') delete this.model[key] + this.$refs.form.clearValidate(key) } }, /** - * 绂佺敤鏃ユ湡 - * @params current 琚鐢ㄧ殑鏃堕棿 + * 鏍规嵁鏄惁鍔犲伐瀛楁鏍¢獙鐩稿叧瀛楁 + * @param rule + * @param value 鐩稿叧瀛楁鍊� + * @param callback 缁撴灉鍥炶皟鍑芥暟 */ - disabledDate(current) { - // Can not select days after today - return current > moment().endOf('day') - }, - - /** - * 绂佺敤鏃ユ湡涓殑鏃堕棿 - * @returns {{disabledHours: (function(): Array), disabledMinutes: (function(): Array)}} - */ - disabledTime() { - function range(start, end) { - const result = [] - for (let i = start; i < end; i++) { - result.push(i) + isProcessedRelatedValidator(rule, value, callback) { + if (this.model.isProcessed == '1') { + if (!value) { + callback(new Error()) + } else { + callback() } - return result + } else { + callback() } + }, - return { - disabledHours: () => range(moment().hour() + 1, 24), - disabledMinutes: () => range(moment().minute() + 1, 60), - disabledSeconds: () => range(moment().second() + 1, 60) + /** + * 鏍规嵁璁惧浜嬫晠瀛楁鏍¢獙鐩稿叧瀛楁 + * @param rule + * @param value 鐩稿叧瀛楁鍊� + * @param callback 缁撴灉鍥炶皟鍑芥暟 + */ + isAccidentsRegisterRelatedValidator(rule, value, callback) { + if (this.model.isAccidentsRegister == '1') { + if (!value) { + callback(new Error()) + } else { + callback() + } + } else { + callback() + } + }, + + /** + * 鍙樺姩鍥犵礌鍐呭鏍¢獙 + * @param rule + * @param value 鍙樺姩鍥犵礌鍐呭瀛楁鍊� + * @param callback 缁撴灉鍥炶皟鍑芥暟 + */ + variableFactorsValueValidator(rule, value, callback) { + if (this.model.variableFactors == '1') { + if (!value) { + callback(new Error()) + } else { + callback() + } + } else { + callback() } }, @@ -243,6 +401,9 @@ this.$emit('close') this.visible = false if (this.$refs.form) this.$refs.form.clearValidate() + }, + handleCancel() { + this.close() } } } -- Gitblit v1.9.3