From 86c49515065de7729e5b2aa17f1e260d3c4f3669 Mon Sep 17 00:00:00 2001 From: zhangherong <571457620@qq.com> Date: 星期四, 03 四月 2025 17:08:39 +0800 Subject: [PATCH] art: 设备管理-周保-基础代码提交 --- src/views/eam/equipment/modules/MaintenanceEquipmentSelect.vue | 1 src/views/eam/maintenance/modules/EamWeekMaintenanceOrderModal.vue | 291 ++++++++++++++++++++++++++++++++ src/views/system/modules/SysBusinessCodeRuleModal.vue | 10 src/views/eam/maintenance/EamWeekMaintenanceOrderList.vue | 208 +++++++++++++++++++++++ 4 files changed, 507 insertions(+), 3 deletions(-) diff --git a/src/views/eam/equipment/modules/MaintenanceEquipmentSelect.vue b/src/views/eam/equipment/modules/MaintenanceEquipmentSelect.vue index 733d4f6..55c9a6a 100644 --- a/src/views/eam/equipment/modules/MaintenanceEquipmentSelect.vue +++ b/src/views/eam/equipment/modules/MaintenanceEquipmentSelect.vue @@ -93,6 +93,7 @@ label: res.result[0].text } this.selectedAsyncValue = { ...obj } + this.$emit('autocompleteForm', res.result[0]) } this.options = res.result } diff --git a/src/views/eam/maintenance/EamWeekMaintenanceOrderList.vue b/src/views/eam/maintenance/EamWeekMaintenanceOrderList.vue new file mode 100644 index 0000000..612ae38 --- /dev/null +++ b/src/views/eam/maintenance/EamWeekMaintenanceOrderList.vue @@ -0,0 +1,208 @@ +<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.orderNum"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="璁惧缂栧彿"> + <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" v-model="queryParam.equipmentId"></lx-search-equipment-select> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="淇濆吇鏃ユ湡"> + <a-date-picker placeholder="璇烽�夋嫨淇濆吇鏃ユ湡" v-model="queryParam.maintenanceDate" format="YYYY-MM-DD" style="width: 100%"/> + </a-form-item> + </a-col> + <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> + </span> + </a-col> + + </a-row> + </a-form> + </div> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> + <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> + + <!-- table鍖哄煙-begin --> + <div> + <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> + </div> + + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + class="j-table-force-nowrap" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" + @change="handleTableChange"> + + <span slot="action" slot-scope="text, record"> + <a @click="handleEdit(record)">缂栬緫</a> + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + + </a-table> + </div> + <!-- table鍖哄煙-end --> + + <!-- 琛ㄥ崟鍖哄煙 --> + <eamWeekMaintenanceOrder-modal ref="modalForm" @ok="modalFormOk"></eamWeekMaintenanceOrder-modal> + </a-card> +</template> + +<script> +import '@/assets/less/TableExpand.less' +import EamWeekMaintenanceOrderModal from './modules/EamWeekMaintenanceOrderModal' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue' + +export default { + name: 'EamWeekMaintenanceOrderList', + mixins: [JeecgListMixin], + components: { + LxSearchEquipmentSelect, + EamWeekMaintenanceOrderModal + }, + data() { + return { + description: '鍛ㄤ繚宸ュ崟绠$悊椤甸潰', + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + } + }, + { + title: '宸ュ崟鍙�', + align: 'center', + dataIndex: 'orderNum' + }, + { + title: '璁惧ID', + align: 'center', + dataIndex: 'equipmentId' + }, + { + title: '鏍囧噯ID', + align: 'center', + dataIndex: 'standardId' + }, + { + title: '璁″垝鎵ц鏃ユ湡', + align: 'center', + dataIndex: 'maintenanceDate' + }, + { + title: '瀹為檯寮�濮嬫椂闂�', + align: 'center', + dataIndex: 'actualStartTime' + }, + { + title: '瀹為檯缁撴潫鏃堕棿', + align: 'center', + dataIndex: 'actualEndTime' + }, + { + title: '淇濆吇浜�', + align: 'center', + dataIndex: 'operator' + }, + { + title: '淇濆吇鐘舵��', + align: 'center', + dataIndex: 'maintenanceStatus' + }, + { + title: '鍒涘缓鏂瑰紡', + align: 'center', + dataIndex: 'creationMethod' + }, + { + title: '纭浜�', + align: 'center', + dataIndex: 'confirmUser' + }, + { + title: '纭鏃堕棿', + align: 'center', + dataIndex: 'confirmTime' + }, + { + title: '淇濆吇鎵ц鍥剧墖;id浠ラ�楀彿鍒嗛殧', + align: 'center', + dataIndex: 'imageFiles' + }, + { + title: '澶囨敞', + align: 'center', + dataIndex: 'remark' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align: 'center', + scopedSlots: { customRender: 'action' } + } + ], + url: { + list: '/eam/weekMaintenanceOrder/list', + delete: '/eam/weekMaintenanceOrder/delete', + deleteBatch: '/eam/weekMaintenanceOrder/deleteBatch' + } + } + }, + computed: {}, + methods: {} +} +</script> +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/eam/maintenance/modules/EamWeekMaintenanceOrderModal.vue b/src/views/eam/maintenance/modules/EamWeekMaintenanceOrderModal.vue new file mode 100644 index 0000000..8dee667 --- /dev/null +++ b/src/views/eam/maintenance/modules/EamWeekMaintenanceOrderModal.vue @@ -0,0 +1,291 @@ +<template> + <j-modal + :title="title" + :width="1200" + :visible="visible" + :confirmLoading="confirmLoading" + switchFullscreen + @ok="handleOk" + @cancel="handleCancel" + cancelText="鍏抽棴"> + + <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="orderNum" label="宸ュ崟鍙�"> + <a-input placeholder="宸ュ崟鍙风郴缁熻嚜鍔ㄧ敓鎴�" v-model="model.orderNum" disabled /> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧缂栫爜"> + <maintenance-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" v-model="model.equipmentId" + :maintenanceCategory="maintenanceCategory" + @autocompleteForm="autocompleteForm"></maintenance-equipment-select> + </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" 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="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 :labelCol="labelCol" :wrapperCol="wrapperCol" prop="operator" label="淇濆吇浜�"> + <j-dict-select-tag v-model="model.operator" placeholder="璇烽�夋嫨淇濆吇浜�" + dictCode="sys_user,realname,username,username!='admin' order by create_time" /> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" 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"> + <j-vxe-table + ref="editableDetailTable" + :rowNumber="true" + :rowSelection="true" + :bordered="true" + :alwaysEdit="true" + :toolbar="true" + :toolbarConfig="detail.toolbarConfig" + keep-source + :height="300" + :loading="detail.loading" + :dataSource="detail.dataSource" + :columns="detail.columns" + style="margin-top: 8px;" /> + </a-row> + </a-form-model> + </a-spin> + </j-modal> +</template> + +<script> +import { getAction, httpAction } from '@/api/manage' +import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js' +import { JVXETypes } from '@comp/jeecg/JVxeTable' +import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect' + +export default { + name: 'EamWeekMaintenanceOrderModal', + mixins: [JVxeTableModelMixin], + components: { + MaintenanceEquipmentSelect + }, + data() { + return { + title: '鎿嶄綔', + visible: false, + editable: false, + model: {}, + maintenanceCategory: 'WEEK_MAINTENANCE', + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + }, + labelColLong: { + xs: { span: 24 }, + sm: { span: 2 } + }, + wrapperColLong: { + xs: { span: 24 }, + sm: { span: 21 } + }, + confirmLoading: false, + validatorRules: { + equipmentId: [ + {} + ] + }, + url: { + add: '/eam/weekMaintenanceOrder/add', + edit: '/eam/weekMaintenanceOrder/edit', + standardDetail: '/eam/eamMaintenanceStandardDetail/queryList', + detail: '/eam/weekMaintenanceOrderDetail/queryList', + }, + 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: 'itemName', + type: JVXETypes.textarea, + width: '20%', + align: 'center', + validateRules: [ + { required: true, message: '淇濆吇椤逛笉鑳戒负绌猴紒' } + ] + }, + { + title: '瀛愪繚鍏婚」', + key: 'subItemName', + type: JVXETypes.textarea, + width: '25%', + align: 'center' + }, + { + 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() { + //鍒濆鍖栭粯璁ゅ�� + this.model = {}; + this.visible = true; + this.editable = false; + this.detail.dataSource = []; + }, + 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() + }, + 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) { + debugger + 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') + that.close() + } else { + that.$message.warning(res.message) + } + }).finally(() => { + that.confirmLoading = false + }) + } else { + return false + } + }) + }, + handleCancel() { + this.close() + }, + autocompleteForm(selectObj) { + this.model.standardName = selectObj.standardName + this.model.maintenancePeriod = selectObj.maintenancePeriod + this.model.standardId = selectObj.id + this.loadStandardDetail(selectObj.id); + }, + //鍔犺浇璇︽儏鏁版嵁 + loadStandardDetail(standardId) { + if (standardId) { + getAction(this.url.standardDetail, { standardId: standardId }).then(res => { + if (res.success) { + this.detail.dataSource = res.result.map(item => ({ + itemCode: item.itemCode, + itemName: item.itemName, + subItemName: item.subItemName, + itemDemand: item.itemDemand + })) + } + }) + } + }, + //鏍囧噯閫夋嫨鍙樺寲 + loadDetail(orderId) { + if (orderId) { + getAction(this.url.detail, { orderId: orderId }).then(res => { + if (res.success) { + this.detail.dataSource = [...res.result] + } + }) + } + } + + } +} +</script> + +<style lang="less" scoped> + +</style> \ No newline at end of file diff --git a/src/views/system/modules/SysBusinessCodeRuleModal.vue b/src/views/system/modules/SysBusinessCodeRuleModal.vue index d7a6b51..af61492 100644 --- a/src/views/system/modules/SysBusinessCodeRuleModal.vue +++ b/src/views/system/modules/SysBusinessCodeRuleModal.vue @@ -15,7 +15,7 @@ <a-input placeholder="璇疯緭鍏ヤ笟鍔″悕绉�" v-model="model.businessName" /> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="businessCode" label="涓氬姟缂栫爜"> - <a-input placeholder="璇疯緭鍏ヤ笟鍔$紪鐮�" v-model="model.businessCode" /> + <a-input placeholder="璇疯緭鍏ヤ笟鍔$紪鐮�" v-model="model.businessCode" :disabled="editable" /> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="prefix" label="缂栫爜鍓嶇紑"> <a-input placeholder="璇疯緭鍏ョ紪鐮佸墠缂�" v-model="model.prefix" /> @@ -47,6 +47,7 @@ return { title: '鎿嶄綔', visible: false, + editable: false, model: {}, labelCol: { xs: { span: 24 }, @@ -79,10 +80,13 @@ }, methods: { add() { - //鍒濆鍖栭粯璁ゅ�� - this.edit({ seqLength: 4 }) + this.model = {}; + this.model.seqLength = 4; + this.editable = false; + this.visible = true }, edit(record) { + this.editable = true; this.model = Object.assign({}, record) this.visible = true }, -- Gitblit v1.9.3