|
@@ -1,147 +1,223 @@
|
|
|
<template>
|
|
|
<div class="edit-page">
|
|
|
- <el-form :model="formModel" ref="formUser" label-position="top" label-width="auto" :inline="true" :rules="rules">
|
|
|
- <el-form-item label="账号" prop="loginId">
|
|
|
- <el-input v-model="formModel.loginId" autocomplete="off" class="edit-form-item"/>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="姓名">
|
|
|
- <el-input v-model="formModel.realName" autocomplete="off" placeholder="请输入姓名" class="edit-form-item" clearable/>
|
|
|
- </el-form-item>
|
|
|
- <!-- <el-form-item label="所属部门">
|
|
|
- <el-tree-select v-model="formModel.orgId" :data="data" check-strictly :render-after-expand="false" class="edit-form-item">
|
|
|
-
|
|
|
- </el-tree-select>
|
|
|
-
|
|
|
- </el-form-item> -->
|
|
|
-<!--
|
|
|
- <el-form-item label="所辖部门">
|
|
|
- <el-tree-select v-model="formModel.authOrgIds" :data="data" check-strictly :render-after-expand="false" class="edit-form-item">
|
|
|
-
|
|
|
- </el-tree-select>
|
|
|
- </el-form-item> -->
|
|
|
-
|
|
|
- <el-form-item label="密码" prop="pwd" v-if="visiblePwd">
|
|
|
- <el-input v-model="formModel.pwd" type="password" autocomplete="off" placeholder="请输入密码" class="edit-form-item" clearable/>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="角色">
|
|
|
- <el-select v-model="formModel.roleName" placeholder="请选择角色" class="edit-form-item"
|
|
|
- multiple
|
|
|
- collapse-tags
|
|
|
- collapse-tags-tooltip
|
|
|
- clearable
|
|
|
- >
|
|
|
- <el-option v-for="item in roleList" :key="item.value" :label="item.label" :value="item.value"/>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <!-- <el-form-item label="密码确认">
|
|
|
- <el-input v-model="formModel.pwdagain" type="password" autocomplete="off" placeholder="请再输入一次密码" class="edit-form-item" clearable/>
|
|
|
- </el-form-item> -->
|
|
|
+ <el-form :model="formModel" ref="formUser" label-position="top" label-width="auto" :inline="true"
|
|
|
+ :rules="rules">
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :sm="24" :md="12">
|
|
|
+ <el-form-item label="账号" prop="loginId">
|
|
|
+ <el-input v-model="formModel.loginId" autocomplete="off" clearable/>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :sm="24" :md="12">
|
|
|
+ <el-form-item label="姓名">
|
|
|
+ <el-input v-model="formModel.realName" autocomplete="off" placeholder="请输入姓名" clearable />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :sm="24" :md="12">
|
|
|
+ <el-form-item label="密码" prop="pwd" v-if="visiblePwd">
|
|
|
+ <el-input v-model="formModel.pwd" type="password" autocomplete="off" placeholder="请输入密码"
|
|
|
+ clearable />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :sm="24" :md="12">
|
|
|
+ <el-form-item label="密码确认" v-if="visiblePwd">
|
|
|
+ <el-input v-model="formModel.pwdagain" type="password" autocomplete="off" placeholder="请再输入一次密码"
|
|
|
+ clearable />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :sm="24" :md="12">
|
|
|
+ <el-form-item label="所属机构">
|
|
|
+ <el-tree-select v-model="formModel.orgId" :data="treeNodes" :props="treeNodeProps"
|
|
|
+ :render-after-expand="false" check-strictly style="width:100%" />
|
|
|
+
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :sm="24" :md="12">
|
|
|
+ <el-form-item label="角色">
|
|
|
+ <el-select v-model="formModel.roleIds" placeholder="请选择角色" style="width:100%" multiple
|
|
|
+ collapse-tags collapse-tags-tooltip >
|
|
|
+ <el-option v-for="item in roleOpts" :key="item.roleId" :label="item.roleName"
|
|
|
+ :value="item.roleId" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :sm="24" :md="12">
|
|
|
+ <el-form-item label="状态" prop="status">
|
|
|
+ <el-select v-model="formModel.disabledIf" placeholder="选择状态" style="width:100%">
|
|
|
+ <el-option label="启用" :value="false" />
|
|
|
+ <el-option label="禁用" :value="true" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :sm="24" :md="12">
|
|
|
+ <el-form-item label="备注">
|
|
|
+ <el-input v-model="formModel.note" autocomplete="off" placeholder="请输入备注" clearable />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
</el-form>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
import {reactive,ref,onMounted,toRaw} from 'vue'
|
|
|
- import userAPI from "@/api/user.js"
|
|
|
- import roleAPI from "@/api/role.js"
|
|
|
+ import userAPI from '@/api/user.js'
|
|
|
import {ElMessageBox,ElMessage} from 'element-plus'
|
|
|
import md5 from '@/utils/md5.js'
|
|
|
- const roleList = ref([]);
|
|
|
- const props=defineProps({
|
|
|
- record:Object
|
|
|
+ import utils from '@/utils/utils.js'
|
|
|
+
|
|
|
+ const props = defineProps({
|
|
|
+ record: Object
|
|
|
})
|
|
|
- const visiblePwd =ref(null);
|
|
|
-
|
|
|
+ const visiblePwd = ref(null);
|
|
|
+
|
|
|
const formUser = ref(null);
|
|
|
+
|
|
|
const formModel = reactive({
|
|
|
- userId:'',
|
|
|
- realName:'',
|
|
|
- loginId:'',
|
|
|
- pwd:'',
|
|
|
- roleName:''
|
|
|
+ userId: null,
|
|
|
+ realName: null,
|
|
|
+ loginId: null,
|
|
|
+ pwd: null,
|
|
|
+ pwdagain: null,
|
|
|
+ roleIds: null,
|
|
|
+ orgId: null,
|
|
|
+ disabledIf: false,
|
|
|
+ note: null
|
|
|
+
|
|
|
})
|
|
|
- onMounted(() => {
|
|
|
- //动态获取角色
|
|
|
- roleAPI.fetchData().then((resp) => {
|
|
|
- if(resp.code===0){
|
|
|
- //console.log(JSON.stringify(resp.data));
|
|
|
- roleList.value=resp.data
|
|
|
- }
|
|
|
- });
|
|
|
- if(props.record){
|
|
|
-
|
|
|
- //formModel.roleName=['40289f3c87073161018707391f350003','40289f3c87076a0c0187076a0c060000']
|
|
|
- let {userId,realName,loginId}=props.record
|
|
|
- userAPI.queryByRoleUserId({userId:userId}).then((resp) => {
|
|
|
-
|
|
|
- if(resp.code===0){
|
|
|
- formModel.roleName=resp.data
|
|
|
- }
|
|
|
- });
|
|
|
- Object.assign(formModel,{userId,realName,loginId})
|
|
|
- }else{
|
|
|
- visiblePwd.value= true
|
|
|
+
|
|
|
+ const roleOpts = ref([])
|
|
|
+
|
|
|
+ const treeNodes = ref([])
|
|
|
+
|
|
|
+ const treeNodeProps = {
|
|
|
+ children: 'children',
|
|
|
+ label: 'name',
|
|
|
+ value: 'id'
|
|
|
+ }
|
|
|
+
|
|
|
+ onMounted(async () => {
|
|
|
+ try {
|
|
|
+ await initForm()
|
|
|
+ if (props.record) {
|
|
|
+ let {userId,realName,loginId,roleIds,orgId,disabledIf,note} = props.record
|
|
|
+ roleIds=roleIds?roleIds.split(','):null
|
|
|
+ Object.assign(formModel, {userId,realName,loginId,roleIds,orgId,disabledIf,note})
|
|
|
+ } else {
|
|
|
+ visiblePwd.value = true
|
|
|
+ }
|
|
|
+ } catch (err) {
|
|
|
+ console.log('init form error')
|
|
|
}
|
|
|
+
|
|
|
})
|
|
|
-
|
|
|
- const rules =reactive({
|
|
|
- loginId:[
|
|
|
- {required:true,message:'账号还未填写',trigger:'blur'},
|
|
|
- { min: 3, max: 20, message: '账号长度应该为3-20', trigger: 'blur' }
|
|
|
- ],
|
|
|
- pwd:[
|
|
|
- {required:true,message:'密码还未填写',trigger:'blur'},
|
|
|
- { min: 3, max: 32, message: '密码长度应该为3-32', trigger: 'blur' }
|
|
|
- ]
|
|
|
+
|
|
|
+ const rules = reactive({
|
|
|
+ loginId: [{
|
|
|
+ required: true,
|
|
|
+ message: '账号还未填写',
|
|
|
+ trigger: 'blur'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ min: 2,
|
|
|
+ max: 20,
|
|
|
+ message: '账号长度应该为2-20',
|
|
|
+ trigger: 'blur'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ pwd: [{
|
|
|
+ required: true,
|
|
|
+ message: '密码还未填写',
|
|
|
+ trigger: 'blur'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ min: 3,
|
|
|
+ max: 32,
|
|
|
+ message: '密码长度应该为3-32',
|
|
|
+ trigger: 'blur'
|
|
|
+ }
|
|
|
+ ]
|
|
|
})
|
|
|
-
|
|
|
- const submitForm= async()=>{
|
|
|
- let validateRst=false
|
|
|
- try{
|
|
|
- validateRst = await formUser.value.validate()
|
|
|
+
|
|
|
+ const initForm = async () => {
|
|
|
+ try {
|
|
|
+ let resp = await userAPI.loadMyOrgTree()
|
|
|
+ console.log(resp)
|
|
|
+ if (resp.code == 0) {
|
|
|
+ let converDef = {
|
|
|
+ id: 'id',
|
|
|
+ name: 'name',
|
|
|
+ superId: 'superId',
|
|
|
+ superName: 'superName',
|
|
|
+ children: 'children'
|
|
|
+ }
|
|
|
+ let treeDatas = utils.list2Tree(resp.data || [], converDef)
|
|
|
+ treeNodes.value = treeDatas['topNodes']
|
|
|
+ }
|
|
|
+
|
|
|
+ resp = await userAPI.loadAllRole()
|
|
|
+ if (resp.code == 0) {
|
|
|
+ roleOpts.value = resp.data
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return Promise.resolve('ok')
|
|
|
+ } catch (err) {
|
|
|
+ return Promise.reject('err')
|
|
|
}
|
|
|
- catch(err){
|
|
|
+ }
|
|
|
+
|
|
|
+ const submitForm = async () => {
|
|
|
+ let validateRst = false
|
|
|
+ try {
|
|
|
+ validateRst = await formUser.value.validate()
|
|
|
+ } catch (err) {
|
|
|
ElMessage.error("请按要求填写数据");
|
|
|
console.log(err)
|
|
|
return Promise.reject('invalidate')
|
|
|
}
|
|
|
- if(validateRst){ //验证通过,准备提交数据
|
|
|
- try{
|
|
|
- if(visiblePwd.value){
|
|
|
- formModel.pwd =md5(formModel.pwd);
|
|
|
+ if (validateRst) { //验证通过,准备提交数据
|
|
|
+ try {
|
|
|
+ let reqData = toRaw(formModel)
|
|
|
+
|
|
|
+ if (visiblePwd.value) {
|
|
|
+ if (formModel.pwd != formModel.pwdagain) {
|
|
|
+ ElMessage.error('两次输入的密码不一致')
|
|
|
+ return Promise.reject('invalidate')
|
|
|
+ }
|
|
|
+ reqData.pwd = md5(reqData.pwd);
|
|
|
}
|
|
|
-
|
|
|
- formModel.roleName= formModel.roleName.join(',');
|
|
|
|
|
|
- //return
|
|
|
- let resp =await userAPI.save(toRaw(formModel))
|
|
|
- if(resp.code!=0){
|
|
|
- ElMessage.error(resp.msg)
|
|
|
- return Promise.reject(resp.msg)
|
|
|
- }
|
|
|
- ElMessage.success('操作成功')
|
|
|
- return Promise.resolve('ok')
|
|
|
- }
|
|
|
- catch (e) {
|
|
|
- ElMessage.error(e||'操作失败')
|
|
|
+ reqData.roleIds=reqData.roleIds?reqData.roleIds.join(','):null
|
|
|
+ console.log(reqData.roleIds)
|
|
|
+
|
|
|
+ let resp = await userAPI.save(reqData)
|
|
|
+ if (resp.code != 0) {
|
|
|
+ ElMessage.error(resp.msg)
|
|
|
+ return Promise.reject(resp.msg)
|
|
|
+ }
|
|
|
+ ElMessage.success('操作成功')
|
|
|
+ return Promise.resolve('ok')
|
|
|
+ } catch (e) {
|
|
|
+ ElMessage.error(e || '操作失败')
|
|
|
return Promise.reject('操作失败')
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
defineExpose({
|
|
|
submitForm
|
|
|
})
|
|
|
</script>
|
|
|
|
|
|
<style scoped>
|
|
|
- .el-form--inline.el-form--label-top{
|
|
|
- justify-content: space-between;
|
|
|
- }
|
|
|
- .edit-form-item{
|
|
|
- width:260px;
|
|
|
- }
|
|
|
-
|
|
|
-</style>
|
|
|
+
|
|
|
+
|
|
|
+</style>
|