From accebdce93486d3b4f26e55ffdea047549cce20c Mon Sep 17 00:00:00 2001 From: cuijian <cuijian@xalxzn.com> Date: 星期一, 28 七月 2025 21:12:38 +0800 Subject: [PATCH] Merge branch 'master' of http://125.76.225.53:18448/r/xhj/vue_mdc_xhj --- src/views/mdc/base/modules/EquipmentList/EquipmentModal.vue | 553 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 553 insertions(+), 0 deletions(-) diff --git a/src/views/mdc/base/modules/EquipmentList/EquipmentModal.vue b/src/views/mdc/base/modules/EquipmentList/EquipmentModal.vue new file mode 100644 index 0000000..ce4eb25 --- /dev/null +++ b/src/views/mdc/base/modules/EquipmentList/EquipmentModal.vue @@ -0,0 +1,553 @@ +<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;"> + + <template slot="title"> + <div style="width: 100%;"> + <span>{{ title }}</span> + <span style="display:inline-block;width:calc(100% - 51px);padding-right:10px;text-align: right"> + <a-button @click="toggleScreen" icon="appstore" style="height:20px;width:20px;border:0px"></a-button> + </span> + </div> + + </template> + + <a-spin :spinning="confirmLoading"> + <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"/> + </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" /> + </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> + </template> + + <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> + + <!--<a-form-model-item label="鑱屽姟" :labelCol="labelCol" :wrapperCol="wrapperCol">--> + <!--<j-select-position placeholder="璇烽�夋嫨鑱屽姟" :multiple="false" v-model="model.post"/>--> + <!--</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="璇烽�夋嫨瑙掕壊"> + </j-multi-select-tag> + </a-form-model-item> + + <!--閮ㄩ棬鍒嗛厤--> + <a-form-model-item 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> + + <!--杞﹂棿鍒嗛厤--> + <a-form-model-item label="杞﹂棿鍒嗛厤" :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> + + <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> + + <a-form-model-item label="澶村儚" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <j-image-upload class="avatar-uploader" text="涓婁紶" v-model="model.avatar" ></j-image-upload> + </a-form-model-item> + + <a-form-model-item label="鐢熸棩" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-date-picker + style="width: 100%" + placeholder="璇烽�夋嫨鐢熸棩" + v-model="model.birthday" + :format="dateFormat" + :getCalendarContainer="node => node.parentNode"/> + </a-form-model-item> + + <a-form-model-item label="鎬у埆" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-select v-model="model.sex" placeholder="璇烽�夋嫨鎬у埆" :getPopupContainer= "(target) => target.parentNode"> + <a-select-option :value="1">鐢�</a-select-option> + <a-select-option :value="2">濂�</a-select-option> + </a-select> + </a-form-model-item> + + <a-form-model-item label="閭" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="email"> + <a-input placeholder="璇疯緭鍏ラ偖绠�" v-model="model.email" /> + </a-form-model-item> + + <a-form-model-item label="鎵嬫満鍙风爜" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="phone"> + <a-input placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" v-model="model.phone" /> + </a-form-model-item> + + <a-form-model-item label="搴ф満" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="telephone"> + <a-input placeholder="璇疯緭鍏ュ骇鏈�" v-model="model.telephone" /> + </a-form-model-item> + + <!--<a-form-model-item label="宸ヤ綔娴佸紩鎿�" :labelCol="labelCol" :wrapperCol="wrapperCol">--> + <!--<j-dict-select-tag v-model="model.activitiSync" placeholder="璇烽�夋嫨鏄惁鍚屾宸ヤ綔娴佸紩鎿�" :type="'radio'" dictCode="activiti_sync"/>--> + <!--</a-form-model-item>--> + + </a-form-model> + </a-spin> + + + <div class="drawer-bootom-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> + </div> + </a-drawer> +</template> + +<script> + import moment from 'moment' + import Vue from 'vue' + import { ACCESS_TOKEN } from "@/store/mutation-types" + import { getAction } from '@/api/manage' + import { addUser,editUser,queryUserRole,queryall } from '@/api/api' + import { disabledAuthFilter } from "@/utils/authFilter" + import { duplicateCheck } from '@/api/api' + import JSelectProduction from '../../../../../components/jeecgbiz/JSelectProduction' + + export default { + name: "EquipmentModal", + components: { + JSelectProduction + }, + data () { + return { + departDisabled: false, //鏄惁鏄垜鐨勯儴闂ㄨ皟鐢ㄨ椤甸潰 + productionDisabled: false, //鏄惁鏄垜鐨勮溅闂磋皟鐢ㄨ椤甸潰 + roleDisabled: false, //鏄惁鏄鑹茬淮鎶よ皟鐢ㄨ椤甸潰 + modalWidth:800, + drawerWidth:700, + modaltoggleFlag:true, + confirmDirty: false, + userId:"", //淇濆瓨鐢ㄦ埛id + disableSubmit:false, + dateFormat:"YYYY-MM-DD", + validatorRules:{ + username:[{required: true, message: '璇疯緭鍏ョ敤鎴疯处鍙�!'}, + {validator: this.validateUsername,}], + 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: '璇疯緭鍏ョ敤鎴峰悕绉�!' }], + phone: [{required: false, message: '璇疯緭鍏ユ墜鏈哄彿!'}, {validator: this.validatePhone}], + email: [{validator: this.validateEmail}], + roles:{}, + workNo:[ { required: true, message: '璇疯緭鍏ュ伐鍙�' }, + { validator: this.validateWorkNo }], + telephone: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '璇疯緭鍏ユ纭殑搴ф満鍙风爜' },] + }, + departIdShow:false, + title:"鎿嶄綔", + visible: false, + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 }, + }, + uploadLoading:false, + confirmLoading: false, + headers:{}, + url: { + fileUpload: window._CONFIG['domianURL']+"/sys/common/upload", + userWithDepart: "/sys/user/userDepartList", // 寮曞叆涓烘寚瀹氱敤鎴锋煡鐪嬮儴闂ㄤ俊鎭渶瑕佺殑url + //寮曞叆涓烘寚瀹氱敤鎴锋煡鐪嬭溅闂翠俊鎭渶瑕佺殑url + userProductionList: '/sys/user/userProductionList', + userId:"/sys/user/generateUserId", // 寮曞叆鐢熸垚娣诲姞鐢ㄦ埛鎯呭喌涓嬬殑url + syncUserByUserName:"/act/process/extActProcess/doSyncUserByUserName",//鍚屾鐢ㄦ埛鍒板伐浣滄祦 + queryTenantList: '/sys/tenant/queryList' + }, + tenantsOptions: [], + rolesOptions:[], + nextDepartOptions:[], + nextProductionOptions:[] + } + }, + created () { + const token = Vue.ls.get(ACCESS_TOKEN); + this.headers = {"X-Access-Token":token} + this.initRoleList() + this.initTenantList() + }, + computed:{ + uploadAction:function () { + return this.url.fileUpload; + } + }, + methods: { + add () { + this.refresh(); + this.edit({activitiSync:'1',userIdentity:1}); + }, + edit (record) { + let that = this; + that.visible = true; + //鏍规嵁灞忓箷瀹藉害鑷�傚簲鎶藉眽瀹藉害 + this.resetScreenSize(); + that.userId = record.id; + that.model = Object.assign({},{selectedroles:'',selecteddeparts:''}, record); + that.model = Object.assign({},{selectedroles:'',selectedProduction:''}, record); + + //韬唤涓轰笂绾ф樉绀鸿礋璐i儴闂紝鍚﹀垯涓嶆樉绀� + if(this.model.userIdentity==2){ + this.departIdShow=true; + }else{ + this.departIdShow=false; + } + + if(record.hasOwnProperty("id")){ + that.getUserRoles(record.id); + that.getUserDeparts(record.id); + } + console.log('that.model=',that.model) + }, + isDisabledAuth(code){ + return disabledAuthFilter(code); + }, + //绐楀彛鏈�澶у寲鍒囨崲 + toggleScreen(){ + if(this.modaltoggleFlag){ + this.modalWidth = window.innerWidth; + }else{ + this.modalWidth = 800; + } + this.modaltoggleFlag = !this.modaltoggleFlag; + }, + // 鏍规嵁灞忓箷鍙樺寲,璁剧疆鎶藉眽灏哄 + resetScreenSize(){ + let screenWidth = document.body.clientWidth; + if(screenWidth < 500){ + this.drawerWidth = screenWidth; + }else{ + this.drawerWidth = 700; + } + }, + //鍒濆鍖栫鎴峰瓧鍏� + initTenantList(){ + getAction(this.url.queryTenantList).then(res=>{ + if(res.success){ + this.tenantsOptions = res.result.map((item,index,arr)=>{ + let c = {label:item.name, value: item.id+""} + return c; + }) + console.log('this.tenantsOptions: ',this.tenantsOptions) + } + }) + }, + //鍒濆鍖栬鑹插瓧鍏� + initRoleList(){ + queryall().then((res)=>{ + if(res.success){ + this.rolesOptions = res.result.map((item,index,arr)=>{ + let c = {label:item.roleName, value:item.id} + return c; + }) + console.log('this.rolesOptions: ',this.rolesOptions) + } + }); + }, + getUserRoles(userid){ + queryUserRole({userid:userid}).then((res)=>{ + if(res.success){ + this.model.selectedroles = res.result.join(","); + console.log('that.model.selectedroles=',this.model.selectedroles) + } + }); + }, + getUserDeparts(userid){ + let that = this; + //閮ㄩ棬鐨剈rl + getAction(that.url.userWithDepart,{userId:userid}).then((res)=>{ + if(res.success){ + let departOptions=[]; + let selectDepartKeys=[] + for (let i = 0; i < res.result.length; i++) { + selectDepartKeys.push(res.result[i].key); + //鏂板璐熻矗閮ㄩ棬閫夋嫨涓嬫媺妗� + departOptions.push({ + value: res.result[i].key, + label: res.result[i].title + }) + } + + that.model.selecteddeparts = selectDepartKeys.join(",") + that.model.selectedProduction = selectDepartKeys.join(",") + + that.nextDepartOptions=departOptions; + console.log('that.nextDepartOptions=',that.nextDepartOptions) + } + }) + + getAction(that.url.userProductionList,{userId:userid}).then((res)=>{ + if(res.success){ + let ProductionOptions=[]; + let selectProductKeys=[] + for (let i = 0; i < res.result.length; i++) { + selectProductKeys.push(res.result[i].key); + //鏂板璐熻矗閮ㄩ棬閫夋嫨涓嬫媺妗� + ProductionOptions.push({ + value: res.result[i].key, + label: res.result[i].title + }) + } + + that.model.selectedProduction = selectProductKeys.join(",") + + that.nextProductionOptions=ProductionOptions; + console.log('that.nextProductionOptions=',that.nextProductionOptions) + } + }) + //杞﹂棿鐨剈rl + }, + backDepartInfo(info) { + this.model.departIds = this.model.selecteddeparts; + this.nextDepartOptions = info.map((item,index,arr)=>{ + let c = {label:item.text, value: item.value+""} + return c; + }) + }, + backProductionInfo(info) { + this.model.productionIds = this.model.selectedProduction; + this.nextProductionOptions = info.map((item,index,arr)=>{ + let c = {label:item.text, value: item.value+""} + return c; + }) + }, + + + + refresh () { + this.userId="" + this.nextDepartOptions=[]; + this.nextProductionOptions = []; + this.departIdShow=false; + }, + close () { + this.$emit('close'); + this.visible = false; + this.disableSubmit = false; + this.nextDepartOptions=[]; + this.nextProductionOptions = [] + this.departIdShow=false; + this.$refs.form.resetFields(); + }, + moment, + handleSubmit () { + const that = this; + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = true; + //濡傛灉鏄笂绾ф嫨浼犲叆departIds,鍚﹀垯涓虹┖ + if(this.model.userIdentity!==2){ + this.model.departIds=""; + } + let obj; + if(!this.model.id){ + this.model.id = this.userId; + obj=addUser(this.model); + }else{ + obj=editUser(this.model); + } + obj.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(); + }) + }else{ + return false; + } + }) + }, + handleCancel () { + this.close() + }, + validateToNextPassword (rule, value, callback) { + const confirmpassword=this.model.confirmpassword; + if (value && confirmpassword && value !== confirmpassword) { + callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒'); + } + if (value && this.confirmDirty) { + this.$refs.form.validateField(['confirmpassword']); + } + callback(); + }, + compareToFirstPassword (rule, value, callback) { + if (value && value !== this.model.password) { + callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒'); + } else { + callback() + } + }, + validatePhone(rule, value, callback){ + if(!value){ + callback() + }else{ + if(new RegExp(/^1[3|4|5|7|8|9][0-9]\d{8}$/).test(value)){ + var params = { + tableName: 'sys_user', + fieldName: 'phone', + fieldVal: value, + dataId: this.userId + }; + duplicateCheck(params).then((res) => { + if (res.success) { + callback() + } else { + callback("鎵嬫満鍙峰凡瀛樺湪!") + } + }) + }else{ + callback("璇疯緭鍏ユ纭牸寮忕殑鎵嬫満鍙风爜!"); + } + } + }, + validateEmail(rule, value, callback){ + if(!value){ + callback() + }else{ + if(new RegExp(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/).test(value)){ + var params = { + tableName: 'sys_user', + fieldName: 'email', + fieldVal: value, + dataId: this.userId + }; + duplicateCheck(params).then((res) => { + console.log(res) + if (res.success) { + callback() + } else { + callback("閭宸插瓨鍦�!") + } + }) + }else{ + callback("璇疯緭鍏ユ纭牸寮忕殑閭!") + } + } + }, + validateUsername(rule, value, callback){ + var params = { + tableName: 'sys_user', + fieldName: 'username', + fieldVal: value, + dataId: this.userId + }; + duplicateCheck(params).then((res) => { + if (res.success) { + callback() + } else { + callback("鐢ㄦ埛鍚嶅凡瀛樺湪!") + } + }) + }, + validateWorkNo(rule, value, callback){ + var params = { + tableName: 'sys_user', + fieldName: 'work_no', + fieldVal: value, + dataId: this.userId + }; + duplicateCheck(params).then((res) => { + if (res.success) { + callback() + } else { + callback("宸ュ彿宸插瓨鍦�!") + } + }) + }, + handleConfirmBlur(e) { + const value = e.target.value; + this.confirmDirty = this.confirmDirty || !!value + }, + beforeUpload: function(file){ + var fileType = file.type; + if(fileType.indexOf('image')<0){ + this.$message.warning('璇蜂笂浼犲浘鐗�'); + return false; + } + //TODO 楠岃瘉鏂囦欢澶у皬 + }, + identityChange(e){ + if(e.target.value===1){ + this.departIdShow=false; + }else{ + this.departIdShow=true; + } + } + } + } +</script> + +<style scoped> + .avatar-uploader > .ant-upload { + width:104px; + height:104px; + } + .ant-upload-select-picture-card i { + font-size: 49px; + color: #999; + } + + .ant-upload-select-picture-card .ant-upload-text { + margin-top: 8px; + color: #666; + } + + .ant-table-tbody .ant-table-row td{ + padding-top:10px; + padding-bottom:10px; + } + + .drawer-bootom-button { + position: absolute; + bottom: -8px; + width: 100%; + border-top: 1px solid #e8e8e8; + padding: 10px 16px; + text-align: right; + left: 0; + background: #fff; + border-radius: 0 0 2px 2px; + } +</style> \ No newline at end of file -- Gitblit v1.9.3