zhouwx
2024-06-20 bc35d48bada733a0a4677cce54f3aa5ce3080be6
src/views/onlineEducation/systemManage/user/components/userDialog.vue
@@ -11,7 +11,13 @@
          <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>
@@ -23,47 +29,46 @@
          <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-group v-model="state.form.userType"  :disabled="disabled" @change="changeType">
            <el-radio :label="0" v-if="state.isAdmin">管理员</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-select
               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-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-form-item label="选择所属父级账号:" prop="companyId" v-if="state.title !== '修改密码' && state.form.userType !== 0">
            <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-input v-else disabled style="width: 45%" v-model="state.form.companyName"></el-input>
            <scorllSelect
                ref="scrollRef"
                v-if="UisMounted && (state.form.userType === 2 || state.form.userType === 3)"
                v-model="state.form.parentName"
                @getval = "getSelectUser"
                placeholder="请选择"
                clearable
                style="width: 45%;margin-left: 10px"
                filterable
                remote
                searchKey="name"
                :methods="getUser">
            </scorllSelect>
        </el-form-item>
      </el-form>
      <template #footer v-if="state.title !='查看'">
@@ -76,22 +81,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) {
@@ -135,6 +145,7 @@
    confirmPassword: '',
    username: '',
    userType: 0,
    sex: 0,
    companyId: null,
    parentId: null
  },
@@ -146,16 +157,40 @@
    phone: [{ required: true, validator: validateUserPhone, trigger: 'blur' }],
  },
  companyList: [],
  userList: [],
  userList: [
  ],
  keyword:'',
  pageNum: 1,
  pageSize: 10
  pageSize: 10,
  cloading:false,
  totlePage: 0,
  userParam: {},
  isAdmin: false
})
const UisMounted = ref(false);
onMounted(() => {
  UisMounted.value = true;
});
const disabled = ref(false);
const openDialog = async (type, value) => {
  const userInfo = JSON.parse(Cookies.get('userInfo'))
  console.log("userInfo",userInfo)
  if(userInfo.userType === 0){
    state.isAdmin = true;
    state.form.userType = 0;
  }else {
    state.isAdmin = false;
    state.form.companyId = userInfo.companyId;
    state.form.companyName = userInfo.companyName;
    state.form.userType = 1;
  }
  await getCompanyList('open')
  await getUserList()
  state.title = type === 'add' ? '新增' : type ==='edit' ? '编辑' : type ==='pwd' ? '修改密码' : '查看' ;
  if(type === 'edit' || type === 'view') {
    if( type === 'view'){
@@ -164,12 +199,23 @@
    const res = await getUserById(value.id);
    if(res.code === 200){
      state.form = res.data
      if(res.data.userType === 2|| 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)
@@ -199,31 +245,21 @@
    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)
  }
}
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 +267,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,22 +279,57 @@
      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 = () => {
  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: 0,
    sex: 0,
    companyId: null,
    parentId: null
  }
  state.userList = [];
  state.companyList = [];
  state.pageNum = 1;
  state.pageSize = 10;
  superRef.value.clearValidate();
  superRef.value.resetFields()
  dialogVisible.value = false;
@@ -276,24 +344,32 @@
    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
      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 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
});