From 19aff1ac87030b21d2b01cdca5d5604c840ba7c0 Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期一, 21 七月 2025 21:36:31 +0800 Subject: [PATCH] 维修工单 --- src/views/system/modules/UserModal.vue | 379 ++++++++++++++++++++++++----------------------------- 1 files changed, 172 insertions(+), 207 deletions(-) diff --git a/src/views/system/modules/UserModal.vue b/src/views/system/modules/UserModal.vue index 0bb2e81..8761b63 100644 --- a/src/views/system/modules/UserModal.vue +++ b/src/views/system/modules/UserModal.vue @@ -1,14 +1,5 @@ <template> - <a-drawer - :title="title" - :maskClosable="true" - :width="drawerWidth" - placement="right" - :closable="true" - @close="handleCancel" - :visible="visible" - style="height: 100%;overflow: auto;padding-bottom: 53px;" - > + <a-drawer :title="title" :maskClosable="true" :width="drawerWidth" placement="right" :closable="true" @close="handleCancel" :visible="visible" style="height: 100%;overflow: auto;padding-bottom: 53px;"> <template slot="title"> <div style="width: 100%;"> @@ -25,104 +16,42 @@ </template> <a-spin :spinning="confirmLoading"> - <a-form-model - ref="form" - :model="model" - :rules="validatorRules" - > + <a-form-model ref="form" :model="model" :rules="validatorRules"> - <a-form-model-item - label="鐢ㄦ埛璐﹀彿" - :labelCol="labelCol" - :wrapperCol="wrapperCol" - prop="username" - > - <a-input - placeholder="璇疯緭鍏ョ敤鎴疯处鍙�" - v-model="model.username" - :readOnly="!!model.id" - autocomplete="off" - /> + <a-form-model-item label="鐢ㄦ埛璐﹀彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="username"> + <a-input placeholder="璇疯緭鍏ョ敤鎴疯处鍙�" v-model="model.username" :readOnly="!!model.id" autocomplete="off"/> </a-form-model-item> <template v-if="!model.id"> - <a-form-model-item - label="鐧诲綍瀵嗙爜" - :labelCol="labelCol" - :wrapperCol="wrapperCol" - prop="password" - > - <a-input - type="password" - placeholder="璇疯緭鍏ョ櫥褰曞瘑鐮�" - v-model="model.password" - autocomplete="off" - /> + <a-form-model-item label="鐧诲綍瀵嗙爜" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="password"> + <a-input type="password" placeholder="璇疯緭鍏ョ櫥褰曞瘑鐮�" v-model="model.password" autocomplete="off"/> </a-form-model-item> - <a-form-model-item - label="纭瀵嗙爜" - :labelCol="labelCol" - :wrapperCol="wrapperCol" - prop="confirmpassword" - > - <a-input - type="password" - @blur="handleConfirmBlur" - placeholder="璇烽噸鏂拌緭鍏ョ櫥褰曞瘑鐮�" - v-model="model.confirmpassword" - /> + <a-form-model-item label="纭瀵嗙爜" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmpassword"> + <a-input type="password" @blur="handleConfirmBlur" placeholder="璇烽噸鏂拌緭鍏ョ櫥褰曞瘑鐮�" v-model="model.confirmpassword"/> </a-form-model-item> </template> - <a-form-model-item - label="鐢ㄦ埛濮撳悕" - :labelCol="labelCol" - :wrapperCol="wrapperCol" - prop="realname" - > - <a-input - placeholder="璇疯緭鍏ョ敤鎴峰鍚�" - v-model="model.realname" - /> + <a-form-model-item label="鐢ㄦ埛濮撳悕" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="realname"> + <a-input placeholder="璇疯緭鍏ョ敤鎴峰鍚�" v-model="model.realname"/> </a-form-model-item> - <a-form-model-item - label="宸ュ彿" - :labelCol="labelCol" - :wrapperCol="wrapperCol" - prop="workNo" - > - <a-input - placeholder="璇疯緭鍏ュ伐鍙�" - v-model="model.workNo" - /> + <a-form-model-item label="宸ュ彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workNo"> + <a-input placeholder="璇疯緭鍏ュ伐鍙�" v-model="model.workNo"/> </a-form-model-item> - <a-form-model-item - label="瑙掕壊鍒嗛厤" - :labelCol="labelCol" - :wrapperCol="wrapperCol" - v-show="!roleDisabled" - > - <j-multi-select-tag - :disabled="disableSubmit" - v-model="model.selectedroles" - :options="rolesOptions" - placeholder="璇烽�夋嫨瑙掕壊" - > + <a-form-model-item label="瑙掕壊鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!roleDisabled"> + <j-multi-select-tag :disabled="disableSubmit" v-model="model.selectedroles" :options="rolesOptions" placeholder="璇烽�夋嫨瑙掕壊"> </j-multi-select-tag> </a-form-model-item> - <a-form-model-item - label="棣栭〉鏉冮檺" - :labelCol="labelCol" - :wrapperCol="wrapperCol" - > - <a-radio-group - v-model="model.userType" - :defaultValue="0" - > + <a-form-model-item label="宀椾綅" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <!-- <j-select-position placeholder="璇烽�夋嫨宀椾綅" :multiple="false" v-model="model.post"/>--> + <j-dict-select-tag placeholder="璇烽�夋嫨宀椾綅" dict-code="sys_position, name, code" v-model="model.post" /> + </a-form-model-item> + + <a-form-model-item label="棣栭〉鏉冮檺" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-radio-group v-model="model.userType" :defaultValue="0"> <a-radio :value="4">鍏徃绾�</a-radio> <a-radio :value="3">杞﹂棿绾�</a-radio> <a-radio :value="2">宸ユ绾�</a-radio> @@ -132,129 +61,48 @@ </a-form-model-item> <!--閮ㄩ棬鍒嗛厤--> - <a-form-model-item - v-if="isDepartType== 0" - label="閮ㄩ棬鍒嗛厤" - :labelCol="labelCol" - :wrapperCol="wrapperCol" - v-show="!departDisabled" - > - <j-select-depart - v-model="model.selecteddeparts" - :multi="true" - @back="backDepartInfo" - :backDepart="true" - :treeOpera="true" - >> - </j-select-depart> + <a-form-model-item v-if="isDepartType== 0" label="閮ㄩ棬鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!departDisabled"> + <j-select-depart v-model="model.selecteddeparts" :multi="true" @back="backDepartInfo" :backDepart="true" :treeOpera="true"/> </a-form-model-item> <!--MDC杞﹂棿鍒嗛厤--> - <a-form-model-item - label="MDC杞﹂棿鍒嗛厤" - :labelCol="labelCol" - :wrapperCol="wrapperCol" - v-show="!productionDisabled" - > - <j-select-production - v-model="model.selectedProduction" - :multi="true" - @back="backProductionInfo" - :backProduction="true" - :treeProductOpera="true" - ></j-select-production> + <a-form-model-item label="MDC杞﹂棿鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!productionDisabled"> + <j-select-production v-model="model.selectedProduction" :multi="true" @back="backProductionInfo" :backProduction="true" :treeProductOpera="true"/> </a-form-model-item> - <a-form-model-item - label="MDC璁惧鍒嗛厤" - :labelCol="labelCol" - :wrapperCol="wrapperCol" - v-show="!productionDisabled" - > - <a-input-search - :readOnly="true" - v-model="model.equipmentIds" - @search="deviceSearch" - enter-button - placeholder="璇烽�夋嫨璁惧" - :disabled="!model.selectedProduction" - /> + <a-form-model-item label="MDC璁惧鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!productionDisabled"> + <a-input-search :readOnly="true" v-model="model.equipmentIds" @search="deviceSearch" enter-button placeholder="璇烽�夋嫨璁惧" :disabled="!model.selectedProduction"/> </a-form-model-item> - <a-form-model-item - label="EAM涓績鍒嗛厤" - :labelCol="labelCol" - :wrapperCol="wrapperCol" - prop="areaId" - > - <j-multi-select-tag - :triggerChange="true" - v-model="model.eamFactoryIds" - dictCode="mom_base_area,name,id,del_flag = 0 and type = 1" - placeholder="璇风淮鎶や腑蹇�" - > - </j-multi-select-tag> + <a-form-model-item label="EAM涓績鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="eamFactoryIds"> + <JSelectBaseFactory v-model="model.selectedBaseFactory" :multi="true" @back="backBaseFactoryInfo" :backProduction="true" :treeProductOpera="true"/> </a-form-model-item> - <a-form-model-item - label="EAM璁惧鍒嗛厤" - :labelCol="labelCol" - :wrapperCol="wrapperCol" - v-show="!productionDisabled" - > - <a-input-search - :readOnly="true" - v-model="model.eamEquipmentIds" - @search="deviceSearch" - enter-button - placeholder="璇烽�夋嫨璁惧" - :disabled="!model.selectedProduction" - /> + <a-form-model-item label="EAM璁惧鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!productionDisabled"> + <a-input-search :readOnly="true" v-model="model.eamEquipmentIds" @search="eamDeviceSearch" enter-button placeholder="璇烽�夋嫨EAM璁惧" :disabled="!model.selectedBaseFactory"/> </a-form-model-item> +<!-- <a-form-model-item label="缁翠慨閮ㄩ棬/鐝粍鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!repairDepartDisabled">--> +<!-- <j-select-repair-depart v-model="model.selectedRepairDeparts" :multi="true" @back="backRepairDepartInfo" :backRepairDepart="true" :treeRepairDepartOpera="true"/>--> +<!-- </a-form-model-item>--> - <a-form-model-item - label="璐熻矗閮ㄩ棬" - :labelCol="labelCol" - :wrapperCol="wrapperCol" - v-if="departIdShow==true" - > - <j-multi-select-tag - :disabled="disableSubmit" - v-model="model.departIds" - :options="nextDepartOptions" - placeholder="璇烽�夋嫨璐熻矗閮ㄩ棬" - > - </j-multi-select-tag> + <a-form-model-item label="璐熻矗閮ㄩ棬" :labelCol="labelCol" :wrapperCol="wrapperCol" v-if="departIdShow==true"> + <j-multi-select-tag :disabled="disableSubmit" v-model="model.departIds" :options="nextDepartOptions" placeholder="璇烽�夋嫨璐熻矗閮ㄩ棬"/> </a-form-model-item> </a-form-model> </a-spin> - <div - class="drawer-bottom-button" - v-show="!disableSubmit" - > - <a-popconfirm - title="纭畾鏀惧純缂栬緫锛�" - @confirm="handleCancel" - okText="纭畾" - cancelText="鍙栨秷" - > + <div class="drawer-bottom-button" v-show="!disableSubmit"> + <a-popconfirm title="纭畾鏀惧純缂栬緫锛�" @confirm="handleCancel" okText="纭畾" cancelText="鍙栨秷"> <a-button style="margin-right: .8rem">鍙栨秷</a-button> </a-popconfirm> - <a-button - @click="handleSubmit" - type="primary" - :loading="confirmLoading" - >鎻愪氦 - </a-button> + <a-button @click="handleSubmit" type="primary" :loading="confirmLoading">鎻愪氦</a-button> </div> - <select-device-modal - ref="selectDeviceModal" - @selectFinished="selectOK" - :title="'閫夋嫨璁惧'" - /> + <select-device-modal ref="selectDeviceModal" @selectFinished="selectOK" :title="'閫夋嫨璁惧'"/> + + <select-eam-device-modal ref="selectEamDeviceModal" @selectFinished="selectEamOK" :title="'閫夋嫨EAM璁惧'"/> + </a-drawer> </template> @@ -267,21 +115,28 @@ import { disabledAuthFilter } from '@/utils/authFilter' import { duplicateCheck } from '@/api/api' import JSelectProduction from '../../../components/jeecgbiz/JSelectProduction' + // import JSelectRepairDepart from '../../../components/jeecgbiz/JSelectRepairDepart' import { mapActions } from 'vuex' import { ajaxGetDictItems, getDictItemsFromCache } from '@/api/api' import SelectDeviceModal from './SelectDeviceModal' + import SelectEamDeviceModal from './SelectEamDeviceModal' + import JSelectBaseFactory from "@comp/jeecgbiz/JSelectBaseFactory.vue"; export default { name: 'UserModal', components: { + JSelectBaseFactory, SelectDeviceModal, - JSelectProduction + JSelectProduction, + // JSelectRepairDepart, + SelectEamDeviceModal }, data() { return { departDisabled: false, //鏄惁鏄垜鐨勯儴闂ㄨ皟鐢ㄨ椤甸潰 productionDisabled: false, //鏄惁鏄垜鐨勮溅闂磋皟鐢ㄨ椤甸潰 roleDisabled: false, //鏄惁鏄鑹茬淮鎶よ皟鐢ㄨ椤甸潰 + // repairDepartDisabled: false, //鏄惁鏄垜鐨勭淮淇儴闂ㄧ彮缁勮皟鐢ㄨ椤甸潰 modalWidth: 800, drawerWidth: 700, modaltoggleFlag: true, @@ -292,12 +147,12 @@ validatorRules: { username: [{ required: true, message: '璇疯緭鍏ョ敤鎴疯处鍙�!' }, { validator: this.validateUsername }], - password: [{ - required: true, - pattern: /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/, - message: '瀵嗙爜鐢�8浣嶆暟瀛椼�佸ぇ灏忓啓瀛楁瘝鍜岀壒娈婄鍙风粍鎴�!' - }, - { validator: this.validateToNextPassword, trigger: 'change' }], + // password: [{ + // required: true, + // pattern: /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/, + // message: '瀵嗙爜鐢�8浣嶆暟瀛椼�佸ぇ灏忓啓瀛楁瘝鍜岀壒娈婄鍙风粍鎴�!' + // }, + // { validator: this.validateToNextPassword, trigger: 'change' }], confirmpassword: [{ required: true, message: '璇烽噸鏂拌緭鍏ョ櫥褰曞瘑鐮�!' }, { validator: this.compareToFirstPassword }], realname: [{ required: true, message: '璇疯緭鍏ョ敤鎴峰悕绉�!' }], @@ -331,15 +186,22 @@ userProductionList: '/sys/user/userProductionList', userId: '/sys/user/generateUserId', // 寮曞叆鐢熸垚娣诲姞鐢ㄦ埛鎯呭喌涓嬬殑url syncUserByUserName: '/act/process/extActProcess/doSyncUserByUserName',//鍚屾鐢ㄦ埛鍒板伐浣滄祦 - queryTenantList: '/sys/tenant/queryList' + queryTenantList: '/sys/tenant/queryList', + userRepairDepartList: '/sys/user/userRepairDepartList', + userBaseFactoryList: '/sys/user/userBaseFactoryList', + repairDepartTreeList: '/eam/eamBaseRepairDepart/queryTreeList' }, tenantsOptions: [], rolesOptions: [], nextDepartOptions: [], nextProductionOptions: [], + nextBaseFactoryOptions:[], + nextRepairDepartOptions: [], isDepartType: '', model: { - selectedProduction: '' + selectedProduction: '', + // selectedRepairDeparts: '', + selectedBaseFactory:'', } } }, @@ -359,6 +221,17 @@ // 濡傛灉娓呯┖杞﹂棿鍊煎垯閲嶇疆閫夋嫨璁惧 if (newVal === '') this.model.equipmentIds = '' } + }, + 'model.selectedBaseFactory': { + handler(newVal, oldVal) { + if (newVal && this.$refs.selectEamDeviceModal) { + // 濡傛灉杞﹂棿閫夋嫨鍓嶅悗涓嶄竴鑷村垯閲嶇疆閫夋嫨璁惧 + if ((oldVal && newVal !== oldVal)) this.model.eamEquipmentIds = '' + this.$refs.selectEamDeviceModal.queryTreeData(newVal) + } + // 濡傛灉娓呯┖杞﹂棿鍊煎垯閲嶇疆閫夋嫨璁惧 + if (newVal === '') this.model.eamEquipmentIds = '' + } } }, created() { @@ -367,6 +240,7 @@ this.initRoleList() this.initTenantList() this.queryTreeData() + this.getRepairDepartTreeDataByApi() }, computed: { uploadAction: function() { @@ -389,6 +263,20 @@ }).finally(() => { }) }, + // 鑾峰彇缁翠慨鐝粍鏍� + getRepairDepartTreeDataByApi() { + getAction(this.url.repairDepartTreeList) + .then(res => { + if (res.success) { + this.repairDepartTreeData = res.result + } else { + this.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }) + }, add() { this.refresh() this.edit({ @@ -397,7 +285,9 @@ userIdentity: 1, selectedroles: '', selecteddeparts: '', - selectedProduction: '' + selectedProduction: '', + selectedBaseFactory:'', + // selectedRepairDeparts: '' }) }, edit(record) { @@ -418,6 +308,9 @@ if (record.hasOwnProperty('id')) { that.getUserRoles(record.id) that.getUserDeparts(record.id) + that.getUserProductions(record.id) + that.getUserRepairDeparts(record.id) + this.getUserBaseFactorys(record.id) } }, isDisabledAuth(code) { @@ -490,7 +383,9 @@ that.nextDepartOptions = departOptions } }) - + }, + getUserProductions(userid) { + let that = this // 鑾峰彇杞﹂棿鍒嗛厤 getAction(that.url.userProductionList, { userId: userid }).then((res) => { if (res.success) { @@ -509,7 +404,48 @@ that.nextProductionOptions = ProductionOptions } }) - //杞﹂棿鐨剈rl + }, + // getUserRepairDeparts(userid) { + // let that = this + // // 鑾峰彇缁翠慨閮ㄩ棬/鐝粍鍒嗛厤 + // getAction(that.url.userRepairDepartList, { userId: userid }).then((res) => { + // if (res.success) { + // let repairDepartOptions = [] + // let selectedRepairDepartKeys = [] + // for (let i = 0; i < res.result.length; i++) { + // selectedRepairDepartKeys.push(res.result[i].key) + // //鏂板璐熻矗缁翠慨閮ㄩ棬/鐝粍閫夋嫨涓嬫媺妗� + // repairDepartOptions.push({ + // value: res.result[i].key, + // label: res.result[i].title + // }) + // } + // + // this.$set(this.model, 'selectedRepairDeparts', selectedRepairDepartKeys.join(',')) + // that.nextRepairDepartOptions = repairDepartOptions + // } + // }) + // }, + getUserBaseFactorys(userid) { + let that = this + // 鑾峰彇EAM涓績/宸ュ尯/宸ユ鍒嗛厤 + getAction(that.url.userBaseFactoryList, { userId: userid }).then((res) => { + if (res.success) { + let BaseFactoryOptions = [] + let selectedBaseFactoryOptionsKeys = [] + for (let i = 0; i < res.result.length; i++) { + selectedBaseFactoryOptionsKeys.push(res.result[i].key) + //鏂板璐熻矗缁翠慨閮ㄩ棬/鐝粍閫夋嫨涓嬫媺妗� + BaseFactoryOptions.push({ + value: res.result[i].key, + label: res.result[i].title + }) + } + + this.$set(this.model, 'selectedBaseFactory', selectedBaseFactoryOptionsKeys.join(',')) + that.nextBaseFactoryOptions = BaseFactoryOptions + } + }) }, backDepartInfo(info) { this.model.departIds = this.model.selecteddeparts @@ -525,11 +461,27 @@ return c }) }, + backBaseFactoryInfo(info) { + this.model.eamFactoryIds = this.model.selectedBaseFactory + this.nextBaseFactoryOptions = info.map((item, index, arr) => { + let c = { label: item.text, value: item.value + '' } + return c + }) + }, + // backRepairDepartInfo(info) { + // this.model.repairDepartIds = this.model.selectedRepairDeparts + // this.nextRepairDepartOptions = info.map((item, index, arr) => { + // let c = { label: item.text, value: item.value + '' } + // return c + // }) + // }, refresh() { this.userId = '' this.nextDepartOptions = [] this.nextProductionOptions = [] + this.nextBaseFactoryOptions = [] + this.nextRepairDepartOptions = [] this.departIdShow = false }, close() { @@ -538,6 +490,8 @@ this.disableSubmit = false this.nextDepartOptions = [] this.nextProductionOptions = [] + this.nextProductionOptions = [] + this.nextRepairDepartOptions = [] this.departIdShow = false this.$refs.form.resetFields() }, @@ -714,6 +668,13 @@ this.$refs.selectDeviceModal.checkedKeys = this.model.equipmentIds ? this.model.equipmentIds.split(',') : [] }, + eamDeviceSearch(){ + this.$refs.selectEamDeviceModal.visible = true + this.$refs.selectEamDeviceModal.selectedRowKeys = [] + this.$refs.selectEamDeviceModal.selectedRows = [] + this.$refs.selectEamDeviceModal.checkedKeys = this.model.eamEquipmentIds ? this.model.eamEquipmentIds.split(',') : [] + }, + /** * 閫夋嫨宸叉湁璁惧鍚庣偣鍑荤‘瀹氭椂瑙﹀彂 * @param data 宸查�夋嫨鐨勮澶囨暟缁� @@ -721,6 +682,10 @@ selectOK(data) { console.log('data=', data) this.$set(this.model, 'equipmentIds', data.join(',')) + }, + selectEamOK(data) { + console.log('data=', data) + this.$set(this.model, 'eamEquipmentIds', data.join(',')) } } } -- Gitblit v1.9.3