From e323ab51a6da4194527db6928c090dc911ddf1ed Mon Sep 17 00:00:00 2001 From: wangxiang <1827945911@qq.com> Date: Sun, 1 May 2022 00:23:36 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=9F=20=E6=A1=86=E6=9E=B6=E5=8D=87?= =?UTF-8?q?=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kicc-ui/src/api/system/user.ts | 3 +- kicc-ui/src/assets/images/defaultAvatar.png | Bin 0 -> 6841 bytes kicc-ui/src/store/modules/user.ts | 2 + kicc-ui/src/utils/index.ts | 16 ++++ kicc-ui/src/views/system/menu/MenuModal.vue | 2 +- kicc-ui/src/views/system/role/RoleDrawer.vue | 2 +- .../src/views/system/user/ResetPwdModal.vue | 6 +- kicc-ui/src/views/system/user/UserModal.vue | 36 ++++++--- kicc-ui/src/views/system/user/index.vue | 14 +++- kicc-ui/src/views/system/user/user.data.ts | 76 +++--------------- 10 files changed, 67 insertions(+), 90 deletions(-) create mode 100644 kicc-ui/src/assets/images/defaultAvatar.png 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 0000000000000000000000000000000000000000..60ce0f8ac5d5343feb9e62b2c9d56e633120fa6a GIT binary patch literal 6841 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 literal 0 HcmV?d00001 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" > - +