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 @@
-
-
- 345
+
+
+
+
+
+
+
+
+
+
+ 添加角色
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 全部{{ expandedKeys.length ? "收起" : "展开" }}
+
+
+
+ 全部{{ checkedAll ? "取消" : "选择" }}
+
+ 提交
+
+
+
+
-
+
+
+
+
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']
}
}