From ab7007a57d36f2a9cb2f419195e5728349c73497 Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期二, 08 七月 2025 17:39:51 +0800 Subject: [PATCH] 技术鉴定规范页面功能开发 --- src/views/eam/base/modules/EamTechnicalStatusEvaluationStandardModal.vue | 455 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 367 insertions(+), 88 deletions(-) diff --git a/src/views/eam/base/modules/EamTechnicalStatusEvaluationStandardModal.vue b/src/views/eam/base/modules/EamTechnicalStatusEvaluationStandardModal.vue index c6ea154..7673464 100644 --- a/src/views/eam/base/modules/EamTechnicalStatusEvaluationStandardModal.vue +++ b/src/views/eam/base/modules/EamTechnicalStatusEvaluationStandardModal.vue @@ -1,130 +1,409 @@ <template> - <j-modal - :title="title" - :width="800" - :visible="visible" - :confirmLoading="confirmLoading" - switchFullscreen - @ok="handleOk" - @cancel="handleCancel" - cancelText="鍏抽棴"> + <j-modal :title="title" :width="1200" :visible="visible" :confirmLoading="confirmLoading" switchFullscreen centered + @ok="handleOk" @cancel="handleCancel" cancelText="鍏抽棴"> + <a-spin :spinning="spinning"> + <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-row> + <a-col :span="8"> + <a-form-model-item label="瑙勮寖缂栫爜"> + <a-input placeholder="瑙勮寖缂栫爜鑷姩鐢熸垚" v-model="model.standardCode" disabled/> + </a-form-model-item> + </a-col> - <a-spin :spinning="confirmLoading"> - <a-form-model ref="form" :model="model" :rules="validatorRules"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardName" label="瑙勮寖鍚嶇О"> - <a-input placeholder="璇疯緭鍏ヨ鑼冨悕绉�" v-model="model.standardName" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode" label="瑙勮寖缂栫爜"> - <a-input placeholder="璇疯緭鍏ヨ鑼冪紪鐮�" v-model="model.standardCode" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="evaluationPeriod" label="閴村畾鍛ㄦ湡(骞�)"> - <a-input-number v-model="model.evaluationPeriod"/> - </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="hasSafetyEquipmentCheck" label="鏄惁鏈夊畨鍏ㄨ缃鏌�"> - <j-dict-select-tag dict-code="yn " type="radio" v-model="model.hasSafetyEquipmentCheck"/> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="hasPrecisionCheck" label="鏄惁鏈夎澶囩簿搴︽鏌�"> - <j-dict-select-tag dict-code="yn " type="radio" v-model="model.hasPrecisionCheck"/> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="hasOtherCheck" label="鏄惁鏈夊叾浠栨鏌�"> - <j-dict-select-tag dict-code="yn " type="radio" v-model="model.hasOtherCheck"/> - </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-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-row> + <a-col :span="8"> + <a-form-model-item label="閴村畾鍛ㄦ湡(骞�)"> + <a-input-number v-model="model.evaluationPeriod" :min="1" placeholder="璇疯緭鍏ラ壌瀹氬懆鏈�(骞�)" style="width: 100%"/> + </a-form-model-item> + </a-col> + </a-row> + + <a-row> + <!--<a-col :span="8">--> + <!--<a-form-model-item label="瀹夊叏瑁呯疆妫�鏌�">--> + <!--<j-dict-select-tag @change="handleCheckListChange($event,1)" dict-code="yn " type="radio"--> + <!--:disabled="model.hasPrecisionCheck=='0'&&model.hasOtherCheck=='0'"--> + <!--v-model="model.hasSafetyEquipmentCheck"/>--> + <!--</a-form-model-item>--> + <!--</a-col>--> + + <!--<a-col :span="8">--> + <!--<a-form-model-item label="璁惧绮惧害妫�鏌�">--> + <!--<j-dict-select-tag @change="handleCheckListChange($event,2)" dict-code="yn " type="radio"--> + <!--:disabled="model.hasSafetyEquipmentCheck=='0'&&model.hasOtherCheck=='0'"--> + <!--v-model="model.hasPrecisionCheck"/>--> + <!--</a-form-model-item>--> + <!--</a-col>--> + + <!--<a-col :span="8">--> + <!--<a-form-model-item label="鍏朵粬妫�鏌�">--> + <!--<j-dict-select-tag @change="handleCheckListChange($event,3)" dict-code="yn " type="radio"--> + <!--:disabled="model.hasPrecisionCheck=='0'&&model.hasSafetyEquipmentCheck=='0'"--> + <!--v-model="model.hasOtherCheck"/>--> + <!--</a-form-model-item>--> + <!--</a-col>--> + + <a-col :span="8" v-for="item in checkList"> + <a-form-model-item :label="item.label"> + <j-dict-select-tag @change="handleCheckListChange($event,item.key)" dict-code="yn" type="radio" + :disabled="checkList.filter(i=>i.key!=item.key).every(i=>i.value=='0')" + v-model="model[item.key]"/> + </a-form-model-item> + </a-col> + </a-row> + + <a-row> + <a-col :span="24"> + <a-form-model-item :labelCol="{span:2}" :wrapperCol="{span:21}" label="澶囨敞"> + <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.remark"/> + </a-form-model-item> + </a-col> + </a-row> </a-form-model> + + <a-tabs :activeKey="activeTabKey" @change="handleTabChange"> + <a-tab-pane tab="瀹夊叏瑁呯疆妫�鏌�" :key="1" v-if="+model.hasSafetyEquipmentCheck"> + <j-vxe-table ref="editableDetailTable1" rowNumber rowSelection bordered alwaysEdit toolbar + :toolbarConfig="detail.toolbarConfig" keep-source + :height="300" :dataSource="detail.safetyEquipmentCheckList" :columns="detail.columns"> + </j-vxe-table> + </a-tab-pane> + + <a-tab-pane tab="璁惧绮惧害妫�鏌�" :key="2" v-if="+model.hasPrecisionCheck" forceRender> + <j-vxe-table ref="editableDetailTable2" rowNumber rowSelection bordered alwaysEdit toolbar + :toolbarConfig="detail.toolbarConfig" keep-source + :height="300" :dataSource="detail.precisionCheckList" :columns="detail.precisionCheckColumns"> + </j-vxe-table> + </a-tab-pane> + + <a-tab-pane tab="鍏朵粬妫�鏌�" :key="3" v-if="+model.hasOtherCheck" forceRender> + <j-vxe-table ref="editableDetailTable3" rowNumber rowSelection bordered alwaysEdit toolbar + :toolbarConfig="detail.toolbarConfig" keep-source + :height="300" :dataSource="detail.otherCheckList" :columns="detail.columns"> + </j-vxe-table> + </a-tab-pane> + </a-tabs> </a-spin> </j-modal> </template> <script> -import { httpAction } from '@/api/manage' + import { httpAction, getAction } from '@/api/manage' + import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue' + import { JVXETypes } from '@/components/jeecg/JVxeTable' + import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js' -export default { - name: "EamTechnicalStatusEvaluationStandardModal", - data () { + export default { + name: 'EamTechnicalStatusEvaluationStandardModal', + components: { + LxSearchEquipmentSelect + }, + mixins: [JVxeTableModelMixin], + data() { return { - title:"鎿嶄綔", + title: '鎿嶄綔', visible: false, model: {}, labelCol: { xs: { span: 24 }, - sm: { span: 5 }, + sm: { span: 6 } }, wrapperCol: { xs: { span: 24 }, - sm: { span: 16 }, + sm: { span: 15 } }, - + spinning: false, confirmLoading: false, - validatorRules:{ + editable: true, + validatorRules: { + standardName: [{ required: true, message: '璇疯緭鍏ヨ鑼冨悕绉�', trigger: 'change' }], + equipmentId: [{ required: true, message: '璇疯緭鍏ョ粺涓�缂栫爜鎴栧悕绉版悳绱�', trigger: 'change' }] + }, + checkList: [ + { + label: '瀹夊叏瑁呯疆妫�鏌�', + dictValue: 'SAFETY_EQUIPMENT_CHECK', + key: 'hasSafetyEquipmentCheck', + value: '1', + order: 1 + }, + { + label: '璁惧绮惧害妫�鏌�', + dictValue: 'PRECISION_CHECK', + key: 'hasPrecisionCheck', + value: '1', + order: 2 + }, + { + label: '鍏朵粬妫�鏌�', + dictValue: 'OTHER_CHECK', + key: 'hasOtherCheck', + value: '1', + order: 3 + } + ], + activeTabKey: 1, + upgradeFlag: false, + detail: { + safetyEquipmentCheckList: [], + precisionCheckList: [], + otherCheckList: [], + columns: [ + { + title: 'ID', + key: 'id', + type: JVXETypes.hidden + }, + { + title: 'standardId', + key: 'standardId', + type: JVXETypes.hidden + }, + { + title: '椤圭洰搴忓彿', + key: 'itemCode', + type: JVXETypes.inputNumber, + align: 'center', + placeholder: '璇疯緭鍏ラ」鐩簭鍙�', + width: 150, + validateRules: [ + { required: true, message: '璇疯緭鍏�${title}' }, + { unique: true, message: '${title}涓嶈兘閲嶅' } + ] + }, + { + title: '妫�鏌ラ」鐩�', + key: 'itemName', + placeholder: '璇疯緭鍏�${title}', + type: JVXETypes.textarea, + align: 'center', + validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }] + } + ], + precisionCheckColumns: [ + { + title: 'ID', + key: 'id', + type: JVXETypes.hidden + }, + { + title: 'standardId', + key: 'standardId', + type: JVXETypes.hidden + }, + { + title: '椤圭洰搴忓彿', + key: 'itemCode', + type: JVXETypes.inputNumber, + align: 'center', + placeholder: '璇疯緭鍏ラ」鐩簭鍙�', + width: 150, + validateRules: [ + { required: true, message: '璇疯緭鍏�${title}' }, + { unique: true, message: '${title}涓嶈兘閲嶅' } + ] + }, + { + title: '妫�鏌ラ」鐩�', + key: 'itemName', + placeholder: '璇疯緭鍏�${title}', + type: JVXETypes.textarea, + align: 'center', + validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }] + }, + { + title: '妫�鏌ュ瓙椤圭洰', + key: 'subItemName', + placeholder: '璇疯緭鍏�${title}', + type: JVXETypes.textarea, + align: 'center', + validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }] + }, + { + title: '鍏佸樊鍊�', + key: 'toleranceValue', + placeholder: '璇疯緭鍏�${title}', + type: JVXETypes.input, + align: 'center', + validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }] + } + ], + toolbarConfig: { + // prefix 鍓嶇紑锛泂uffix 鍚庣紑 + slot: ['prefix', 'suffix'], + // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳 + btn: ['add', 'remove', 'clearSelection'] + } }, url: { - add: "/eam/eamTechnicalStatusEvaluationStandard/add", - edit: "/eam/eamTechnicalStatusEvaluationStandard/edit", - }, + add: '/eam/eamTechnicalStatusEvaluationStandard/add', + edit: '/eam/eamTechnicalStatusEvaluationStandard/edit', + upgrade: '/eam/eamTechnicalStatusEvaluationStandard/upgrade', + detail: '/eam/eamTechnicalStatusEvaluationStandardDetail/queryList' + } } }, - created () { - }, methods: { - add () { + add() { + this.editable = true //鍒濆鍖栭粯璁ゅ�� - this.edit({}); + this.edit({ + hasSafetyEquipmentCheck: '1', + hasPrecisionCheck: '1', + hasOtherCheck: '1' + }) }, - edit (record) { - this.model = Object.assign({}, record); - this.visible = true; + + /** + * 琛岃褰曠紪杈戞椂瑙﹀彂 + * @param record 椤甸潰琛ㄦ牸琛岃褰� + */ + edit(record, upgradeFlag = false) { + this.upgradeFlag = upgradeFlag + console.log('upgradeFlag', this.upgradeFlag) + this.detail.safetyEquipmentCheckList = this.detail.precisionCheckList = this.detail.otherCheckList = [] + this.model = Object.assign({}, record) + this.hasCheckedCheckList = [] + this.checkList.forEach(item => { + if (+this.model[item.key]) this.hasCheckedCheckList.push(item) + }) + this.activeTabKey = this.hasCheckedCheckList[0].order + this.visible = true + if (record.id) { + this.editable = false + this.loadDetail(record.id) + } }, - close () { - this.$emit('close'); - this.visible = false; - this.$refs.form.clearValidate(); + + /** + * 妫�鏌ラ�夋嫨鍙戠敓鏀瑰彉鍚庤Е鍙� + * @param value 妫�鏌ラ�夋嫨鍊� 0涓哄惁 1涓烘槸 + * @param key 妫�鏌ラ�夋嫨瀵瑰簲鏍囩key + */ + handleCheckListChange(value, key) { + this.checkList.find(item => item.key == key).value = value + if (+value) this.hasCheckedCheckList.push(this.checkList.find(item => item.key == key)) + else { + this.hasCheckedCheckList = this.hasCheckedCheckList.filter(item => item.key != key) + if (!this.hasCheckedCheckList.some(item => item.key == key)) this.activeTabKey = this.hasCheckedCheckList.sort((x, y) => x.order - y.order)[0].order + } }, - handleOk () { - const that = this; - // 瑙﹀彂琛ㄥ崟楠岃瘉 - 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'; + + loadDetail(standardId) { + this.spinning = true + getAction(this.url.detail, { standardId }) + .then(res => { + console.log('res', res) + if (res.success) { + this.detail.safetyEquipmentCheckList = res.result.filter(item => item.checkCategory == 'SAFETY_EQUIPMENT_CHECK') + this.detail.precisionCheckList = res.result.filter(item => item.checkCategory == 'PRECISION_CHECK') + this.detail.otherCheckList = res.result.filter(item => item.checkCategory == 'OTHER_CHECK') } - 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(() => { + this.spinning = false + }) + }, + + /** + * 鏍囩鍒囨崲鏃惰Е鍙� + * @param key 鍒囨崲鍚庣殑鏍囩key + * @returns {Promise<boolean>} + */ + async handleTabChange(key) { + let errMap = await this.$refs['editableDetailTable' + this.activeTabKey].validateTable() + if (errMap) return false + this.activeTabKey = key + }, + + async handleOk() { + // 鍏堟牎楠屽綋鍓峵ab涓嬬殑琛ㄦ牸 + let errMap = await this.$refs['editableDetailTable' + this.activeTabKey].validateTable() + if (errMap) return false + + // 鏍¢獙宸查�夋嫨鐨勬鏌ラ」琛ㄦ牸涓虹┖ + let allTableData = [] + const hasCheckedCheckList = this.hasCheckedCheckList.sort((x, y) => x.order - y.order) + for (let index = 0; index < hasCheckedCheckList.length; index++) { + let tableData = this.$refs['editableDetailTable' + hasCheckedCheckList[index].order].getTableData() + if (tableData.length == 0) { + this.$notification.warning({ + message: '娑堟伅', + description: hasCheckedCheckList[index].label + '蹇呭~椤逛笉鑳戒负绌�' + }) + return + } + tableData = tableData.map(item => { + return { + ...item, + checkCategory: hasCheckedCheckList[index].dictValue + } + }) + allTableData = [...allTableData, ...tableData] + } + const that = this + // 瑙﹀彂琛ㄥ崟楠岃瘉 + 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 { + if (!this.upgradeFlag) httpUrl += this.url.edit + else httpUrl += this.url.upgrade + method = 'put' + } + this.model.tableDetailList = allTableData + httpAction(httpUrl, this.model, method).then((res) => { + if (res.success) { + that.$notification.success({ + message: '娑堟伅', + description: res.message + }) + that.$emit('ok') + } else { + that.$notification.warning({ + message: '娑堟伅', + description: res.message + }) } }).finally(() => { - that.confirmLoading = false; - that.close(); + that.confirmLoading = false + that.close() }) - }else{ - return false; + } else { + return false } }) }, - handleCancel () { + + handleCancel() { this.close() }, + + close() { + this.$emit('close') + this.visible = false + this.$refs.form.clearValidate() + } } } -</script> - -<style lang="less" scoped> - -</style> \ No newline at end of file +</script> \ No newline at end of file -- Gitblit v1.9.3