diff --git a/kicc-ui/src/api/system/user.ts b/kicc-ui/src/api/system/user.ts index fa4afde4..2bdac744 100644 --- a/kicc-ui/src/api/system/user.ts +++ b/kicc-ui/src/api/system/user.ts @@ -1,5 +1,6 @@ import { User, UserDto } from './model/userModel'; import { defHttp } from '/@/utils/http/axios'; +import { ResultVo } from "/@/api/model"; enum Api { list = '/system_proxy/system/user/list', @@ -21,7 +22,7 @@ export const addUser = (params: Partial) => defHttp.post({ url: Api.add, d export const editUser = (params: Partial) => defHttp.put({ url: Api.edit, data: params }); // 查询用户详细 -export const getUser = (id: string) => defHttp.get({ url: `${Api.get}/${id}` }); +export const getUser = (id: string) => defHttp.get>({ url: `${Api.get}/${id}` }); // 删除用户 export const delUser = (id: string) => defHttp.delete({ url: `${Api.del}/${id}` }); diff --git a/kicc-ui/src/assets/images/defaultAvatar.png b/kicc-ui/src/assets/images/defaultAvatar.png new file mode 100644 index 00000000..60ce0f8a Binary files /dev/null and b/kicc-ui/src/assets/images/defaultAvatar.png differ diff --git a/kicc-ui/src/store/modules/user.ts b/kicc-ui/src/store/modules/user.ts index e19ff99a..3957cf53 100644 --- a/kicc-ui/src/store/modules/user.ts +++ b/kicc-ui/src/store/modules/user.ts @@ -18,6 +18,7 @@ import {useMessage} from '/@/hooks/web/useMessage'; import {router} from '/@/router'; import {usePermissionStore} from '/@/store/modules/permission'; import {RouteRecordRaw} from 'vue-router'; +import defaultAvatar from '/@/assets/images/defaultAvatar.png'; interface UserState { userInfo: Nullable; @@ -129,6 +130,7 @@ export const useUserStore = defineStore({ }, async getUserInfoAction(): Promise { const userInfo = await getUserInfo(); + userInfo.avatar || (userInfo.avatar = defaultAvatar); // 存储用户扩展信息,便于鉴权 this.setUserInfo(userInfo); this.setRoleIds(userInfo.roleIds); diff --git a/kicc-ui/src/utils/index.ts b/kicc-ui/src/utils/index.ts index 1b18acd1..ea3e15f0 100644 --- a/kicc-ui/src/utils/index.ts +++ b/kicc-ui/src/utils/index.ts @@ -96,3 +96,19 @@ export const withInstall = (component: T, alias?: string) => { }; return component as T & Plugin; }; + + +/** 查询指定集合名称 */ +export const findListNameById = (id: string, list: any[], options: Partial<{ idField: string, nameField: string, childrenField: string }> = {}) => { + // 设置默认配置 + options = Object.assign({ idField: 'id', nameField: 'name', childrenField: 'children' }, options); + for (let i = 0; i < list.length; i++) { + if (list[i][options.idField!] === id) { + return list[i][options.nameField!]; + } + if (list[i][options.childrenField!]) { + return findListNameById(id, list[i][options.childrenField!],options); + } + } + return ''; +}; diff --git a/kicc-ui/src/views/system/menu/MenuModal.vue b/kicc-ui/src/views/system/menu/MenuModal.vue index 0deafbbd..1b83d371 100644 --- a/kicc-ui/src/views/system/menu/MenuModal.vue +++ b/kicc-ui/src/views/system/menu/MenuModal.vue @@ -52,7 +52,7 @@ break; case 'edit': props.title = '编辑菜单'; - await setFieldsValue(await getMenu(menuId) || {}); + await setFieldsValue(await getMenu(menuId)); break; } setModalProps(props); diff --git a/kicc-ui/src/views/system/role/RoleDrawer.vue b/kicc-ui/src/views/system/role/RoleDrawer.vue index d82bb4ee..0c73dec6 100644 --- a/kicc-ui/src/views/system/role/RoleDrawer.vue +++ b/kicc-ui/src/views/system/role/RoleDrawer.vue @@ -63,7 +63,7 @@ case 'edit': props.title = '编辑角色'; const result = await getRoleMenuIds(roleId); - const role = await getRole(roleId) || {}; + const role = await getRole(roleId); await setFieldsValue(Object.assign(role, { menuIds: result.extend })); break; } diff --git a/kicc-ui/src/views/system/user/ResetPwdModal.vue b/kicc-ui/src/views/system/user/ResetPwdModal.vue index 0ecb2a26..d3a296fd 100644 --- a/kicc-ui/src/views/system/user/ResetPwdModal.vue +++ b/kicc-ui/src/views/system/user/ResetPwdModal.vue @@ -64,9 +64,9 @@ const { resetFields, clearValidate, validate, validateInfos } = useForm(modelRef, rulesRef); - const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data: WindowInnerData) => { - await resetFields(); - await clearValidate(); + const [registerModal, { setModalProps, closeModal }] = useModalInner( (data: WindowInnerData) => { + resetFields(); + clearValidate(); modelRef.id = data.record?.id; const props: Partial = { confirmLoading: false }; setModalProps(props); diff --git a/kicc-ui/src/views/system/user/UserModal.vue b/kicc-ui/src/views/system/user/UserModal.vue index b5fcfe81..0c990d91 100644 --- a/kicc-ui/src/views/system/user/UserModal.vue +++ b/kicc-ui/src/views/system/user/UserModal.vue @@ -12,24 +12,31 @@ * Copyright © 2020-2022 entfrm All rights reserved. * author entfrm开发团队-王翔 */ - import { defineComponent, ref, computed, unref, reactive } from 'vue'; + import {defineComponent, reactive, ref, toRaw, unref} from 'vue'; import { BasicModal, useModalInner } from '/@/components/Modal'; - import { BasicForm, FormSchema, useForm } from '/@/components/Form/index'; + import { BasicForm, useForm } from '/@/components/Form/index'; import { userFormSchema } from './user.data'; import { deptList } from '/@/api/system/dept'; import { addUser, editUser, getUser } from '/@/api/system/user'; import { listToTree } from "/@/utils/helper/treeHelper"; - import { addMenu, editMenu, getMenu, getRoleMenuIds, listMenu } from "/@/api/system/menu"; import { ModalProps } from "/@/components/Modal"; + import { findListNameById } from '/@/utils'; + import {TreeItem} from "/@/components/Tree"; export default defineComponent({ name: 'UserModal', components: { BasicModal, BasicForm }, emits: ['success', 'register'], setup(props, { emit }) { - const tag = ref(''); - const [registerForm, {resetFields, setFieldsValue, updateSchema, validate, clearValidate}] = useForm({ + const state = reactive({ + // 操作标签 + tag: '', + // 部门树形数据 + deptTree: [] as TreeItem[], + }); + + const [registerForm, { resetFields, setFieldsValue, updateSchema, validate, clearValidate }] = useForm({ labelWidth: 100, schemas: userFormSchema, showActionButtonGroup: false, @@ -41,26 +48,28 @@ const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => { await resetFields(); await clearValidate(); - tag.value = data._tag; + state.tag = data._tag; + state.deptTree = listToTree(await deptList()); const userId = data.record?.id; const props: Partial = { confirmLoading: false }; await updateSchema([ { field: 'deptId', - componentProps: { treeData: listToTree(await deptList()) } + componentProps: { treeData: toRaw(state.deptTree) } }, { field: 'password', - show: tag.value == 'add' + show: state.tag == 'add' } ]); - switch (tag.value) { + switch (state.tag) { case 'add': props.title = '新增用户'; break; case 'edit': props.title = '编辑用户'; - await setFieldsValue(await getUser(userId) || {}); + const result = await getUser(userId); + await setFieldsValue(result.result); break; } setModalProps(props); @@ -70,12 +79,13 @@ try { const formData = await validate(); setModalProps({ confirmLoading: true }); - switch (unref(tag)) { + formData.deptName = findListNameById(formData.deptId, toRaw(state.deptTree), { idField: 'deptId' }); + switch (state.tag) { case 'add': - await addMenu(formData); + await addUser(formData); break; case 'edit': - await editMenu(formData); + await editUser(formData); break; } closeModal(); diff --git a/kicc-ui/src/views/system/user/index.vue b/kicc-ui/src/views/system/user/index.vue index 40d751ca..758b7c65 100644 --- a/kicc-ui/src/views/system/user/index.vue +++ b/kicc-ui/src/views/system/user/index.vue @@ -5,7 +5,11 @@ contentClass="flex" > - +