From 47d72c9f216330d6a9ffea21a2493b8361299689 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=B4=E4=B8=9A=E4=BC=9F?= <806724993@qq.com> Date: Mon, 8 Jan 2024 16:02:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20:sparkles:=20=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E6=9D=83=E9=99=90=E7=9A=84=E5=88=86=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 2 +- .env.production | 2 +- src/api/axios.ts | 5 +- src/api/system/index.ts | 1 - src/api/system/role.ts | 25 ++ src/api/system/roleMenu.ts | 15 ++ src/api/system/user.ts | 26 ++ src/api/system/userrole.ts | 13 + .../Table/src/hooks/useDataSource.ts | 6 +- .../{menu.router.ts => system.router.ts} | 28 +- src/views/system/menu/CreateDrawer.vue | 2 +- src/views/system/menu/menu.vue | 4 +- src/views/system/role/columns.ts | 28 +- .../system/role/components/MenuModal.vue | 0 .../system/role/components/RoleModal.vue | 108 ++++++++ src/views/system/role/role.vue | 249 +++++++++++++++++- src/views/system/user/columns.ts | 51 ++++ .../system/user/components/MenuModal.vue | 0 .../system/user/components/UserModal.vue | 135 ++++++++++ src/views/system/user/user.vue | 228 ++++++++++++++++ types/components.d.ts | 3 + 21 files changed, 891 insertions(+), 40 deletions(-) delete mode 100644 src/api/system/index.ts create mode 100644 src/api/system/role.ts create mode 100644 src/api/system/roleMenu.ts create mode 100644 src/api/system/user.ts create mode 100644 src/api/system/userrole.ts rename src/router/modules/{menu.router.ts => system.router.ts} (70%) create mode 100644 src/views/system/role/components/MenuModal.vue create mode 100644 src/views/system/role/components/RoleModal.vue create mode 100644 src/views/system/user/columns.ts create mode 100644 src/views/system/user/components/MenuModal.vue create mode 100644 src/views/system/user/components/UserModal.vue create mode 100644 src/views/system/user/user.vue diff --git a/.env.development b/.env.development index 76993a8..f10f2ba 100644 --- a/.env.development +++ b/.env.development @@ -9,4 +9,4 @@ VITE_APP_PORT = 8090 VITE_APP_BASE_API = '/api' # proxy代理配置 -VITE_APP_API_URL = ' http://192.168.1.7:12500/' +VITE_APP_API_URL = 'http://192.168.1.7:12500/' diff --git a/.env.production b/.env.production index 2a4f357..d47f691 100644 --- a/.env.production +++ b/.env.production @@ -6,4 +6,4 @@ VITE_APP_PORT = 3000 VITE_APP_BASE_API = '/zsqy' # proxy代理配置 -VITE_APP_API_URL = "" +VITE_APP_API_URL = "http://175.27.240.186:12500" diff --git a/src/api/axios.ts b/src/api/axios.ts index d51234d..5981971 100644 --- a/src/api/axios.ts +++ b/src/api/axios.ts @@ -23,10 +23,7 @@ axiosInstance.interceptors.request.use( // 响应拦截器 axiosInstance.interceptors.response.use( (res: AxiosResponse) => { - const { message, success } = res.data as { - success: boolean; - message: string; - }; + const { message, success } = res.data as IResponse; // 如果是文件流,直接过 if (res.config.responseType === "blob") return Promise.resolve(res.data); diff --git a/src/api/system/index.ts b/src/api/system/index.ts deleted file mode 100644 index 4fbc74d..0000000 --- a/src/api/system/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./menu"; diff --git a/src/api/system/role.ts b/src/api/system/role.ts new file mode 100644 index 0000000..e99c14b --- /dev/null +++ b/src/api/system/role.ts @@ -0,0 +1,25 @@ +import { get, post } from "@/api/http"; + +const fix = "/role"; + +const url = { + insert: `${fix}/insert`, + page: `${fix}/page`, + update: `${fix}/update`, + delete: `${fix}/delete`, +}; + +export const insertRule = (params: Object) => { + return post(url.insert, params); +}; + +export const getRuleList = (params: Object) => { + return get(url.page, params); +}; + +export const updateRule = (params: Object) => { + return post(url.update, params); +}; +export const deleteRule = (params: Object) => { + return post(url.delete, params); +}; diff --git a/src/api/system/roleMenu.ts b/src/api/system/roleMenu.ts new file mode 100644 index 0000000..8178ce9 --- /dev/null +++ b/src/api/system/roleMenu.ts @@ -0,0 +1,15 @@ +import { get, post } from "@/api/http"; + +const fix = "/roleMenu"; + +const url = { + queryMenuByRole: `${fix}/queryMenuByRole`, // 根据角色查询菜单 + save: `${fix}/save`, // 保存角色菜单 +}; + +export const queryMenuByRole = (params: Object) => { + return get(url.queryMenuByRole, params); +}; +export const saveRoleMenu = (params: Object) => { + return post(url.save, params); +}; diff --git a/src/api/system/user.ts b/src/api/system/user.ts new file mode 100644 index 0000000..c3d2b83 --- /dev/null +++ b/src/api/system/user.ts @@ -0,0 +1,26 @@ +import { get, post } from "@/api/http"; + +const fix = "/user"; + +const url = { + insert: `${fix}/insert`, + page: `${fix}/page`, + update: `${fix}/update`, + delete: `${fix}/delete`, +}; + +export const insertUser = (params: Object) => { + return post(url.insert, params); +}; + +export const getUserList = (params: Object) => { + return get(url.page, params); +}; + +export const updateUser = (params: Object) => { + return post(url.update, params); +}; + +export const deleteUser = (params: Object) => { + return post(url.delete, params); +}; diff --git a/src/api/system/userrole.ts b/src/api/system/userrole.ts new file mode 100644 index 0000000..97c8e53 --- /dev/null +++ b/src/api/system/userrole.ts @@ -0,0 +1,13 @@ +// 用户角色关系 +import { get, post } from "@/api/http"; +const fix = "/userRole"; +const url = { + save: `${fix}/save`, + queryMenuTree: `${fix}/queryMenuTree `, +}; +export const saveUserRole = (params: Object) => { + return post(url.save, params); +}; +export const queryUserRole = (params: Object) => { + return get(url.queryMenuTree, params); +}; diff --git a/src/components/Table/src/hooks/useDataSource.ts b/src/components/Table/src/hooks/useDataSource.ts index 243ee6e..6794165 100644 --- a/src/components/Table/src/hooks/useDataSource.ts +++ b/src/components/Table/src/hooks/useDataSource.ts @@ -47,12 +47,15 @@ export function useDataSource( setLoading(true); const { request, pagination, beforeRequest, afterRequest }: any = unref(propsRef); + if (!request) return; //组装分页信息 const pageField = APISETTING.pageField; const sizeField = APISETTING.sizeField; const totalField = APISETTING.totalField; const listField = APISETTING.listField; + console.log(listField); + const itemCount = APISETTING.countField; let pageParams = {}; const { page = 1, pageSize = 10 } = unref( @@ -71,7 +74,7 @@ export function useDataSource( let params = { ...pageParams, - // ...opt, + ...opt, }; // console.log(opt); @@ -80,6 +83,7 @@ export function useDataSource( params = (await beforeRequest(params)) || params; } const res = await request(params); + const resultTotal = res[totalField]; const currentPage = res[pageField]; const total = res[itemCount]; diff --git a/src/router/modules/menu.router.ts b/src/router/modules/system.router.ts similarity index 70% rename from src/router/modules/menu.router.ts rename to src/router/modules/system.router.ts index 9b0db3a..77bd930 100644 --- a/src/router/modules/menu.router.ts +++ b/src/router/modules/system.router.ts @@ -6,6 +6,8 @@ import { OptionsSharp } from "@vicons/ionicons5"; // 引入路径 const importPath = { + USER: () => import("@/views/system/user/user.vue"), + ROLE: () => import("@/views/system/role/role.vue"), MENU: () => import("@/views/system/menu/menu.vue"), }; @@ -20,22 +22,30 @@ const systemRoutes: RouteRecordRaw = { sort: 1, }, children: [ - { - path: "menu", - name: "system_menu", - meta: { - title: "菜单权限管理", - }, - component: importPath["MENU"], - }, { path: "role", name: "system_role", meta: { - title: "角色权限管理", + title: "角色管理", }, component: () => import("@/views/system/role/role.vue"), }, + { + path: "user", + name: "system_user", + meta: { + title: "用户管理", + }, + component: () => import("@/views/system/user/user.vue"), + }, + { + path: "menu", + name: "system_menu", + meta: { + title: "菜单管理", + }, + component: importPath["MENU"], + }, ], }; diff --git a/src/views/system/menu/CreateDrawer.vue b/src/views/system/menu/CreateDrawer.vue index 00f8518..6f9180d 100644 --- a/src/views/system/menu/CreateDrawer.vue +++ b/src/views/system/menu/CreateDrawer.vue @@ -97,7 +97,7 @@ + + diff --git a/src/views/system/role/role.vue b/src/views/system/role/role.vue index e536bf7..8a6da99 100644 --- a/src/views/system/role/role.vue +++ b/src/views/system/role/role.vue @@ -1,6 +1,247 @@ - - - + + + + diff --git a/src/views/system/user/columns.ts b/src/views/system/user/columns.ts new file mode 100644 index 0000000..6aa099f --- /dev/null +++ b/src/views/system/user/columns.ts @@ -0,0 +1,51 @@ +import { h } from "vue"; +import { NTag } from "naive-ui"; + +export const columns = [ + { + title: "用户名", + key: "username", + }, + { + title: "真实姓名", + key: "realname", + }, + { + title: "手机号", + key: "phone", + }, + { + title: "电子邮箱", + key: "email", + }, + { + title: "用户类型", + key: "userType", + render(row) { + return h( + NTag, + { + type: row.userType === 1 ? "success" : "info", + }, + { + default: () => (row.userType === 1 ? "员工" : "用户"), + } + ); + }, + }, + { + title: "性别", + key: "sex", + render(row) { + return h( + NTag, + { + type: row.sex === 1 ? "success" : "info", + }, + { + default: () => (row.sex === 1 ? "男" : "女"), + } + ); + }, + }, +]; diff --git a/src/views/system/user/components/MenuModal.vue b/src/views/system/user/components/MenuModal.vue new file mode 100644 index 0000000..e69de29 diff --git a/src/views/system/user/components/UserModal.vue b/src/views/system/user/components/UserModal.vue new file mode 100644 index 0000000..af7d9d7 --- /dev/null +++ b/src/views/system/user/components/UserModal.vue @@ -0,0 +1,135 @@ + + + diff --git a/src/views/system/user/user.vue b/src/views/system/user/user.vue new file mode 100644 index 0000000..9fbdb54 --- /dev/null +++ b/src/views/system/user/user.vue @@ -0,0 +1,228 @@ + + + + + diff --git a/types/components.d.ts b/types/components.d.ts index 2575e89..b161fd7 100644 --- a/types/components.d.ts +++ b/types/components.d.ts @@ -17,7 +17,9 @@ declare module '@vue/runtime-core' { Histogram: typeof import('./../src/components/Charts/Histogram.vue')['default'] Line: typeof import('./../src/components/Charts/Line.vue')['default'] Main: typeof import('./../src/layout/components/Main/index.vue')['default'] + MenuModal: typeof import('./../src/views/system/role/components/MenuModal.vue')['default'] Ring: typeof import('./../src/components/Charts/Ring.vue')['default'] + RoleModal: typeof import('./../src/views/system/role/components/RoleModal.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] Sider: typeof import('./../src/layout/components/Sider/index.vue')['default'] @@ -25,5 +27,6 @@ declare module '@vue/runtime-core' { Table: typeof import('./../src/components/Table/src/Table.vue')['default'] TableAction: typeof import('./../src/components/Table/src/components/TableAction.vue')['default'] TransitionMain: typeof import('./../src/layout/components/TransitionMain/index.vue')['default'] + UserModal: typeof import('./../src/views/system/user/components/UserModal.vue')['default'] } }