From ba77fdc6a30c9ad0941e40319f8c4f6fe6fdf9f1 Mon Sep 17 00:00:00 2001
From: cuilei <ray_tsu1@163.com>
Date: 星期四, 07 八月 2025 10:30:42 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
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..344325b
--- /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.selectedFactory" :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:'',selectedFactory:''}, 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.selectedFactory = 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.selectedFactory = 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.selectedFactory;
+ 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