From 4f6cdee3d3a9967b6955aacc354bf557430c0643 Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: 星期一, 05 八月 2024 17:05:16 +0800
Subject: [PATCH] 批改

---
 src/views/onlineEducation/systemManage/user/components/userDialog.vue |  435 +++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 335 insertions(+), 100 deletions(-)

diff --git a/src/views/onlineEducation/systemManage/user/components/userDialog.vue b/src/views/onlineEducation/systemManage/user/components/userDialog.vue
index 2c8a5a8..3337214 100644
--- a/src/views/onlineEducation/systemManage/user/components/userDialog.vue
+++ b/src/views/onlineEducation/systemManage/user/components/userDialog.vue
@@ -5,13 +5,21 @@
         :title="state.title"
         width="700px"
         :before-close="handleClose"
+        :close-on-press-escape="false"
+        :close-on-click-modal="false"
     >
       <el-form :model="state.form" size="default" ref="superRef" :rules="state.formRules" label-width="150px" >
         <el-form-item label="用户名:"  prop="username" v-if="state.title !== '修改密码'">
           <el-input v-model.trim="state.form.username" :disabled="state.title =='编辑' || state.title =='查看'" placeholder="请输入用户名" ></el-input>
         </el-form-item>
         <el-form-item label="名称:"  prop="name" v-if="state.title !== '修改密码'">
-          <el-input v-model.trim="state.form.name" :disabled="state.title =='编辑' || state.title =='查看'" placeholder="请输入公司、部门或者车间岗位名"></el-input>
+          <el-input v-model.trim="state.form.name" :disabled="disabled" placeholder="请输入公司、部门或者车间岗位名"></el-input>
+        </el-form-item>
+        <el-form-item label="性别:"  prop="sex" v-if="state.title !== '修改密码'">
+          <el-radio-group v-model="state.form.sex"  :disabled="disabled">
+            <el-radio :label="0">男</el-radio>
+            <el-radio :label="1">女</el-radio>
+          </el-radio-group>
         </el-form-item>
         <el-form-item label="密码:" prop="password" v-if="state.title == '新增' || state.title == '修改密码'">
           <el-input v-model.trim="state.form.password" type="password" show-password placeholder="请输入密码"></el-input>
@@ -22,24 +30,39 @@
         <el-form-item label="手机号:" prop="phone" v-if="state.title !== '修改密码'" >
           <el-input v-model.trim="state.form.phone" :maxlength="11" :disabled="disabled" placeholder="请输入手机号"></el-input>
         </el-form-item>
-        <el-form-item label="用户类型:" v-if="state.title !== '修改密码'">
-          <el-radio-group v-model="state.form.userType"  :disabled="disabled">
-            <el-radio :label="0">管理员</el-radio>
-            <el-radio :label="1">企业级</el-radio>
-            <el-radio :label="2">部门级</el-radio>
-            <el-radio :label="3">车间(岗位)级</el-radio>
-            <el-radio :label="4">其他</el-radio>
+        <el-form-item label="用户类型:" v-if="state.title !== '修改密码'" prop="userType">
+          <el-radio-group v-model="state.form.userType"  :disabled="disabled" @change="changeType" v-if="state.title == '新增'">
+            <el-radio :label="0" v-if="state.currentUserType == 0">管理员</el-radio>
+            <el-radio :label="1" v-if="state.currentUserType == 0 ">企业级</el-radio>
+            <el-radio :label="2" v-if="state.currentUserType == 1 ">部门级</el-radio>
+            <el-radio :label="3" v-if="!state.isAdmin">车间(岗位)级</el-radio>
+            <el-radio :label="4" v-if="state.currentUserType == 0">其他</el-radio>
           </el-radio-group>
+          <span v-else-if="state.title == '查看'">{{state.currentUserType === 0 ? '管理员' : state.currentUserType === 1 ? '企业级' : state.currentUserType === 2 ? '部门级' : state.currentUserType === 3 ? '车间级' :'其他'}}</span>
+          <span v-else-if="state.title == '编辑'">{{state.form.userType === 0 ? '管理员' : state.form.userType === 1 ? '企业级' : state.form.userType === 2 ? '部门级' : state.form.userType === 3 ? '车间级' :'其他'}}</span>
+          <!--          <el-radio-group v-model="state.form.userType"  :disabled="disabled" @change="changeType" v-else-if="state.title == '编辑'">-->
+<!--            <el-radio :label="0" v-if="state.currentUserType == 0">管理员</el-radio>-->
+<!--            <el-radio :label="1" >企业级</el-radio>-->
+<!--            <el-radio :label="2" >部门级</el-radio>-->
+<!--            <el-radio :label="3" >车间(岗位)级</el-radio>-->
+<!--            <el-radio :label="4" >其他</el-radio>-->
+<!--          </el-radio-group>-->
         </el-form-item>
-        <el-form-item label="选择所属父级账号:" prop="companyId" v-if="state.title !== '修改密码'">
+        <el-form-item label="所属企业:" prop="companyName" v-if="state.title !== '修改密码' && showCompany">
           <el-select
-               v-model="state.form.companyName"
-               @change="selectValue"
-               style="width: 45%"
-               v-loadMore="loadMore"
-               class="m-2"
-               placeholder="请选择所属企业"
-               popper-class="more_select_dropdown"
+              clearable
+              v-if="state.isAdmin"
+              v-model="state.form.companyName"
+              filterable
+              :disabled="disabled || state.title =='编辑'"
+              remote
+              @change="selectValue"
+              reserve-keyword
+              placeholder="请输入企业名称"
+              remote-show-suffix
+              :remote-method="getCompanyList"
+              :loading="loading"
+              style="width: 240px"
           >
             <el-option
                 v-for="item in state.companyList"
@@ -48,22 +71,41 @@
                 :value="item.name"
             />
           </el-select>
-          <el-select
-              v-if="state.form.userType === 2 || state.form.userType === 3 "
-              v-model="state.form.userName"
-              @change="selectValueUser"
-              style="width: 45%;margin-left: 10px"
-              class="m-2"
-              placeholder="请选择所属上级账号"
-              popper-class="more_select_dropdown"
-          >
-            <el-option
-                v-for="item in state.userList"
-                :key="item.id"
-                :label="item.name"
-                :value="item.name"
-            />
-          </el-select>
+          <el-input v-else disabled style="width: 45%" v-model="state.form.companyName"></el-input>
+<!--            <el-select-->
+<!--                v-if="state.isAdmin"-->
+<!--                v-model="state.form.companyName"-->
+<!--                @change="selectValue"-->
+<!--                style="width: 45%"-->
+<!--                v-loadMore="loadMore"-->
+<!--                class="m-2"-->
+<!--                placeholder="请选择所属企业"-->
+<!--                popper-class="more_select_dropdown"-->
+<!--            >-->
+<!--              <el-option-->
+<!--                  v-for="item in state.companyList"-->
+<!--                  :key="item.id"-->
+<!--                  :label="item.name"-->
+<!--                  :value="item.name"-->
+<!--              />-->
+<!--            </el-select>-->
+
+
+        </el-form-item>
+        <el-form-item label="所属上级账号:" prop="companyName" v-if="showChild">
+          <scorllSelect
+              :disabled="disabled || state.title =='编辑'"
+              ref="scrollRef"
+              v-model="state.form.parentName"
+              @getval = "getSelectUser"
+              placeholder="请选择"
+              clearable
+              style="width: 45%;"
+              filterable
+              remote
+              searchKey="username"
+              :methods="getUser">
+          </scorllSelect>
         </el-form-item>
       </el-form>
       <template #footer v-if="state.title !='查看'">
@@ -76,22 +118,27 @@
   </div>
 </template>
 <script setup>
-import {reactive, ref, toRefs, defineEmits, nextTick} from 'vue'
+import {reactive, ref, toRefs, defineEmits, nextTick, onMounted} from 'vue'
 import { View } from "@element-plus/icons-vue";
+import scorllSelect from '@/components/scrollSelect/index.vue'
 import {ElMessage} from "element-plus";
 import {verifyPhone, verifyPwd, verifyUsername} from "../../../../../utils/validate";
 import { checkUserName, checkPhone } from "@/api/login"
-import {getUserById} from "@/api/onlineEducation/user"
+import {addUser, editUser, getUserById, resetPwd} from "@/api/onlineEducation/user"
 import {Base64} from "js-base64"
 import {resetUserPwd} from "../../../../../api/sysUsers";
 import {getInstitutionDetail} from "@/api/backManage/insitution";
 import {getCompany} from "@/api/onlineEducation/company";
 import {get} from "@vueuse/core";
-import {getUser} from "@/api/system/user";
+import {getUser} from "@/api/onlineEducation/user";
+import {debounce} from "@/utils";
+import Cookies from "js-cookie";
 
 const emit = defineEmits(["getList"]);
 const dialogVisible = ref(false)
 const superRef = ref(null)
+const scrollRef = ref(null)
+
 
 const equalToPassword = (rule, value, callback) => {
   if (state.form.password !== value) {
@@ -124,6 +171,38 @@
     }
   }
 }
+const startUsername = ref('');
+const validateUsername = (rule, value, callback)=>{
+  if(value === ''){
+    callback(new Error('请输入用户名'))
+  }else if(state.title == '编辑' && value == startUsername.value){
+    callback()
+  }else{
+    if(!verifyUsername(value)){
+      callback(new Error('用户名须使用字母或数字,长度在5-16之间'))
+    }else{
+      let param = {}
+      if(state.title=='新增/注册') {
+        param = {
+          username:value
+        }
+      }else if(state.title=='编辑'){
+        param = {
+          username:value,
+          id: state.registerForm.id
+        }
+      }
+      callback()
+      // checkUserName(param).then((res)=>{
+      //   if(res.data == false){
+      //     callback(new Error('用户名已被占用,请更换其他用户名'))
+      //   }else{
+      //     callback()
+      //   }
+      // })
+    }
+  }
+}
 
 const state = reactive({
   title: '',
@@ -134,96 +213,169 @@
     password: '',
     confirmPassword: '',
     username: '',
-    userType: 0,
+    userType: null,
+    sex: 0,
     companyId: null,
     parentId: null
   },
   formRules:{
     name: [{ required: true, message: '请输入公司、部门或者车间岗位名称', trigger: 'blur' }],
-    username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
+    companyName: [{ required: true, message: '请选择上级企业', trigger: 'blur' }],
+    username: [{ required: true, trigger: "blur", validator: validateUsername }],
     password: [{ required: true, validator: validatePwd, trigger: 'blur' }],
     confirmPassword: [{ required: true, validator: equalToPassword, trigger: 'blur' }],
     phone: [{ required: true, validator: validateUserPhone, trigger: 'blur' }],
+    userType: [{ required: true, message: '请选择用户类型', trigger: 'blur' }],
   },
   companyList: [],
-  userList: [],
+  userList: [
+
+  ],
+  keyword:'',
+
   pageNum: 1,
-  pageSize: 10
+  pageSize: 10,
+  cloading:false,
+  totlePage: 0,
+  userParam: {},
+  isAdmin: false,
+  currentUserType: null
 
 })
+const UisMounted = ref(false);
+onMounted(() => {
+  UisMounted.value = true;
 
+});
+const showCompany = ref(false)
+const showChild = ref(false)
 const disabled = ref(false);
+const userInfo = ref()
 const openDialog = async (type, value) => {
-  await getCompanyList('open')
-  await getUserList()
+  userInfo.value = JSON.parse(Cookies.get('userInfo'))
+  console.log("userInfo",userInfo.value)
+  state.currentUserType = userInfo.value.userType
+  if(state.currentUserType === 0){
+    state.isAdmin = true;
+  }else {
+    state.isAdmin = false;
+    state.form.companyId = userInfo.value.companyId;
+    state.form.companyName = userInfo.value.companyName;
+  }
+
+  if(type !== 'view' && type !== 'pwd'){
+    // if(state.isAdmin){
+    //   await getCompanyList("")
+    // }
+  }
   state.title = type === 'add' ? '新增' : type ==='edit' ? '编辑' : type ==='pwd' ? '修改密码' : '查看' ;
   if(type === 'edit' || type === 'view') {
+    startUsername.value = value.username
     if( type === 'view'){
       disabled.value = true;
     }
     const res = await getUserById(value.id);
     if(res.code === 200){
       state.form = res.data
+      if(res.data.userType === 3){
+        showCompany.value = true;
+        showChild.value = true
+      }else if(res.data.userType === 2 || res.data.userType === 1 || res.data.userType === 4){
+        showCompany.value = true;
+        showChild.value = false;
+      }
+      if(res.data.userType === 3){
+        if(!res.data.parentId){
+          state.form.parentId = ''
+          state.form.parentName = '无上级账号'
+        }
+      }
     }
   }
   if(type == 'pwd'){
     state.form.id = value.id
   }
   dialogVisible.value = true
+  if(type === 'edit' && state.form && (state.form.userType === 2||state.form.userType === 3)){
+    await nextTick(() => {
+      doGetUser()
+    })
+  }
 }
 
 const finshed = ref(false)
-const getCompanyList = async (type)=>{
-  if (type === 'open' && state.pageNum !== 1) {
-  } else {
+const loading = ref(false)
+
+const getCompanyList = async (val)=>{
+  if(val != ""){
+    loading.value = true;
     const queryParams = {
-      pageNum: state.pageNum,
-      pageSize: state.pageSize,
+      name: val
     }
     const res = await getCompany(queryParams)
     if (res.code == 200) {
-      if (res.data.pageNum === state.pageNum) {
-        finshed.value = false;
-        if (state.pageNum == 1) {
-          state.companyList = res.data.list
-        } else {
-          state.companyList = state.companyList.concat(res.data.list)
-        }
-      } else {
-        finshed.value = true;
-      }
+      loading.value = false;
+      state.companyList = res.data.list
 
     } else {
       ElMessage.warning(res.message)
     }
-    console.log("state.companyList",state.companyList)
-  }
-}
-const getUserList = async () => {
-  const queryParams = {
-    userType: state.form.userType
-  }
-  const res = await getUser(queryParams)
-  if (res.code == 200) {
-    debugger
-  } else {
-    ElMessage.warning(res.message)
-  }
-}
+  }else {
+    loading.value = true;
+    const queryParams = {
+      pageNum: 1,
+      pageSize: 10
+    }
+    const res = await getCompany(queryParams)
+    if (res.code == 200) {
+      loading.value = false;
+      state.companyList = res.data.list
 
+    } else {
+      ElMessage.warning(res.message)
+    }
+  }
+
+  // if (type === 'open' && state.pageNum !== 1) {
+  // } else {
+  //   const queryParams = {
+  //     pageNum: state.pageNum,
+  //     pageSize: state.pageSize,
+  //   }
+  //   const res = await getCompany(queryParams)
+  //   if (res.code == 200) {
+  //     if (res.data.pageNum === state.pageNum) {
+  //       finshed.value = false;
+  //       if (state.pageNum == 1) {
+  //         state.companyList = res.data.list
+  //       } else {
+  //         state.companyList = state.companyList.concat(res.data.list)
+  //       }
+  //     } else {
+  //       finshed.value = true;
+  //     }
+  //
+  //   } else {
+  //     ElMessage.warning(res.message)
+  //   }
+  //   console.log("state.companyList",state.companyList)
+  // }
+}
 const onSubmit = async () => {
   const valid = await superRef.value.validate();
   if(valid){
+    if((state.form.userType ===1 && state.form.companyId ===null) || ((state.form.userType ===2 ||state.form.userType ===3) && (state.form.parentId ===null ||state.form.companyId===null))){
+      ElMessage.warning('请选择所属父级账号')
+      return;
+    }
     if(state.title == '新增'){
       const {confirmPassword,id,...data} = state.form
       data.password = Base64.encode(data.password)
-      const res = await addMonitor(data)
+      const res = await addUser(data)
       if(res.code == 200){
         ElMessage.success(res.message)
         emit('getList')
-        state.form.userType = 0
-        superRef.value.clearValidate();
-        superRef.value.resetFields();
+        handleClose()
         dialogVisible.value = false;
       }else{
         ElMessage.warning(res.message)
@@ -231,14 +383,11 @@
     }else if(state.title == '编辑'){
       const {confirmPassword,...data} = state.form
       data.password = Base64.encode(data.password)
-      const res = await editMonitor(data)
+      const res = await editUser(data)
       if(res.code == 200){
         ElMessage.success(res.message)
         emit('getList')
-        state.form.userType = 0
-        superRef.value.clearValidate();
-        superRef.value.resetFields();
-        dialogVisible.value = false;
+        handleClose()
       }else{
         ElMessage.warning(res.message)
       }
@@ -246,54 +395,140 @@
       const {id,password} = state.form
       const data = {id,password}
       data.password = Base64.encode(data.password)
-      const res = await resetUserPwd(data)
+      const res = await resetPwd(data)
       if(res.code == 200){
         ElMessage.success(res.message)
         emit('getList')
-        superRef.value.clearValidate();
-        superRef.value.resetFields();
-        dialogVisible.value = false;
+        handleClose()
       }else{
         ElMessage.warning(res.message)
       }
     }
   }
 }
+const doGetUser = () => {
+  const param = {
+    userType: state.form.userType-1,
+    companyId: state.form.companyId,
+  }
+  scrollRef.value.getList(param,'change');
+}
+const changeType = async (val) => {
+  state.companyList = [];
+  if(state.isAdmin && val !=0){
+    await getCompanyList("")
+  }
+  state.form.parentId = null;
+  state.form.parentName = '';
+  state.form.companyId = null;
+  state.form.companyName = '';
+  //当前是管理员级用户
+  if(state.currentUserType === 0){
+    if(state.form.userType === 0){
+      showCompany.value = false;
+      showChild.value = false;
+    }else {
+      showCompany.value = true;
+      showChild.value = false;
+    }
+  }
+  //当前是企业级/其他用户选择部门
+  if((state.currentUserType === 1 && state.form.userType === 2) || (state.currentUserType === 4 && state.form.userType === 2)){
+    state.form.parentId = userInfo.value.id;
+    state.form.companyName = userInfo.value.companyName
+    state.form.companyId = userInfo.value.companyId;
+    showChild.value = false;
+    showCompany.value = true;
+
+  } //当前是企业级/其他用户选择车间
+  else if((state.currentUserType === 1 && state.form.userType === 3) || (state.currentUserType === 4 && state.form.userType === 3)){
+    state.form.companyName = userInfo.value.companyName
+    state.form.companyId = userInfo.value.companyId;
+    showCompany.value = true;
+    showChild.value = true;
+    const param = {
+      userType: 2,
+      companyId: state.form.companyId,
+    }
+    nextTick(() => {
+      scrollRef.value.getList(param,'change');
+    })
+  }
+  //当前是部门级选择车间
+  if((state.currentUserType === 2 && state.form.userType === 3)){
+    state.form.parentId = userInfo.value.id;
+    state.form.companyName = userInfo.value.companyName
+    state.form.companyId = userInfo.value.companyId;
+    showCompany.value = true;
+    showChild.value = false;
+  }
+  // if(state.isAdmin){
+  //   state.form.companyId = null;
+  //   state.form.companyName = '';
+  // }
+  // state.form.parentId = null;
+  // state.form.parentName = '';
+  // if(state.form.userType === 2 || state.form.userType === 3 ){
+  //   const param = {
+  //     userType: state.form.userType-1,
+  //     companyId: state.form.companyId,
+  //   }
+  //   scrollRef.value.getList(param,'change');
+  // }
+}
 
 const handleClose = () => {
-  state.form.userType = 0
+  state.form = {
+    id: null,
+    name: '',
+    phone: '',
+    password: '',
+    confirmPassword: '',
+    username: '',
+    userType: null,
+    sex: 0,
+    companyId: null,
+    parentId: null
+  }
+  showCompany.value = false;
+  showChild.value = false;
+  state.userList = [];
+  state.companyList = [];
+  state.pageNum = 1;
+  state.pageSize = 10;
   superRef.value.clearValidate();
   superRef.value.resetFields()
   dialogVisible.value = false;
 }
-//触底函数
-const loadMore = () => {
-  console.log(' 触底了');
-  // 防抖处理
-  setTimeout(() => {
-    if (finshed.value) return //值为true,则代表没有数据了
-    state.pageNum += 1
-    getCompanyList('')
-  }, 500)
-}
+// //触底函数
+// const loadMore = () => {
+//   console.log(' 触底了');
+//   // 防抖处理
+//   setTimeout(() => {
+//     if (finshed.value) return //值为true,则代表没有数据了
+//     state.pageNum += 1
+//     getCompanyList('')
+//   }, 500)
+// }
+
 const selectValue = (val) => {
+  state.form.parentId = null;
+  state.form.parentName = null;
   state.companyList.forEach(item => {
     if(item.name === val){
       state.form.companyId = item.id
     }
   })
 }
-const selectValueUser = (val) => {
-  state.userList.forEach(item => {
-    if(item.name === val){
-      state.form.parentId = item.id
-    }
-  })
+const getSelectUser = (val) => {
+  console.log("valllllllll",val)
+  state.form.parentId = val;
 }
 
 
 
 
+
 defineExpose({
   openDialog
 });

--
Gitblit v1.9.2