diff --git a/backend/dbhelper/role.py b/backend/dbhelper/role.py
index 9af9309..4c9a4a0 100644
--- a/backend/dbhelper/role.py
+++ b/backend/dbhelper/role.py
@@ -13,7 +13,7 @@ async def get_role_menus(rid: int):
"""
select m.id, m.name, m.meta, m.path, m.type, m.component, m.pid, m.identifier
FROM sys_menu as m, sys_role_menu WHERE m.id = sys_role_menu.mid
- AND sys_role_menu.rid = (?) AND m.`status` = 1""",
+ AND sys_role_menu.rid = (?) AND sys_role_menu.`status` = 1""",
[rid],
)
diff --git a/backend/dbhelper/user.py b/backend/dbhelper/user.py
index ea1da61..364861e 100644
--- a/backend/dbhelper/user.py
+++ b/backend/dbhelper/user.py
@@ -32,7 +32,20 @@ async def get_user_info(user: UserModel):
[user.id],
)
- return {**jsonable_encoder(user), "roles": sql_result}
+ # 当前激活角色的按钮权限列表
+ perm_result = await db.execute_query_dict(
+ """
+ select m.identifier from sys_role_menu as rm, sys_menu as m where rm.mid = m.id and rm.rid = (?) and
+ m.identifier not null and m.identifier != "" and rm.status != 9
+ """,
+ [sql_result[0]["id"]],
+ )
+
+ return {
+ **jsonable_encoder(user),
+ "roles": sql_result,
+ "permissions": [i["identifier"] for i in perm_result],
+ }
async def get_users(skip: int, limit: int, kwargs: dict = None):
diff --git a/backend/mini.db-shm b/backend/mini.db-shm
index 91a222d..763739d 100644
Binary files a/backend/mini.db-shm and b/backend/mini.db-shm differ
diff --git a/backend/mini.db-wal b/backend/mini.db-wal
index ba48e78..0c69346 100644
Binary files a/backend/mini.db-wal and b/backend/mini.db-wal differ
diff --git a/backend/schemas/user.py b/backend/schemas/user.py
index 427f509..d795419 100644
--- a/backend/schemas/user.py
+++ b/backend/schemas/user.py
@@ -41,6 +41,7 @@ class UserInfo(UserRead):
"""用户信息模型"""
roles: list[UserHasRole] = Field(..., description="用户拥有角色")
+ permissions: list[str] = Field(..., description="角色拥有的按钮权限标识")
class RoleActive(BaseModel):
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 525386a..4ac9273 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -10,6 +10,8 @@
"dependencies": {
"ant-design-vue": "^3.2.12",
"axios": "^0.27.2",
+ "moment": "^2.29.4",
+ "monent": "^0.0.2-security",
"normalize.css": "^8.0.1",
"pinia": "^2.0.21",
"pinia-plugin-persistedstate": "^2.2.0",
@@ -1131,6 +1133,19 @@
"node": ">=10"
}
},
+ "node_modules/moment": {
+ "version": "2.29.4",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
+ "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/monent": {
+ "version": "0.0.2-security",
+ "resolved": "https://registry.npmjs.org/monent/-/monent-0.0.2-security.tgz",
+ "integrity": "sha512-qghr6SG18OAHdr2emuACuhMJWUi1Yax10+V0N1Fr3ISC921hOtw6g7fuDxdgJszzSGTMFyKiUgBRafpKRrsjkQ=="
+ },
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -2365,6 +2380,16 @@
"brace-expansion": "^2.0.1"
}
},
+ "moment": {
+ "version": "2.29.4",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
+ "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
+ },
+ "monent": {
+ "version": "0.0.2-security",
+ "resolved": "https://registry.npmjs.org/monent/-/monent-0.0.2-security.tgz",
+ "integrity": "sha512-qghr6SG18OAHdr2emuACuhMJWUi1Yax10+V0N1Fr3ISC921hOtw6g7fuDxdgJszzSGTMFyKiUgBRafpKRrsjkQ=="
+ },
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 5de3dab..8a842aa 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -9,6 +9,7 @@
"dependencies": {
"ant-design-vue": "^3.2.12",
"axios": "^0.27.2",
+ "moment": "^2.29.4",
"normalize.css": "^8.0.1",
"pinia": "^2.0.21",
"pinia-plugin-persistedstate": "^2.2.0",
diff --git a/frontend/src/main.js b/frontend/src/main.js
index 03ac7bd..3a561f8 100644
--- a/frontend/src/main.js
+++ b/frontend/src/main.js
@@ -10,9 +10,10 @@ import "normalize.css";
import "@/assets/css/base.css";
import "ant-design-vue/dist/antd.css";
+import hasPermisson from "@/utils/directive";
const app = createApp(App);
-
+hasPermisson(app);
app.use(store);
userStore().loadRoleRouter();
diff --git a/frontend/src/service/user.js b/frontend/src/service/user.js
index 73ae873..8fbe992 100644
--- a/frontend/src/service/user.js
+++ b/frontend/src/service/user.js
@@ -29,3 +29,10 @@ export function selectRole(rid) {
method: "put",
});
}
+
+// 获取用户列表
+export function getUsers() {
+ return request({
+ url: "/user",
+ });
+}
diff --git a/frontend/src/utils/directive.js b/frontend/src/utils/directive.js
new file mode 100644
index 0000000..6872844
--- /dev/null
+++ b/frontend/src/utils/directive.js
@@ -0,0 +1,17 @@
+import { userStore } from "@/stores/user";
+
+export default (app) => {
+ // 按钮权限
+ app.directive("per", {
+ mounted(el, binding) {
+ console.log(el, binding.value);
+ if (
+ // 是否存在
+ userStore().userInfo.permissions.indexOf(binding.value) === -1
+ ) {
+ // 删除元素
+ el.parentNode && el.parentNode.removeChild(el);
+ }
+ },
+ });
+};
diff --git a/frontend/src/utils/format.js b/frontend/src/utils/format.js
new file mode 100644
index 0000000..1bf7283
--- /dev/null
+++ b/frontend/src/utils/format.js
@@ -0,0 +1,5 @@
+import moment from "moment";
+
+export const formatTime = (value) => {
+ return moment(value).format("YYYY-MM-DD HH:mm:ss");
+};
diff --git a/frontend/src/utils/request.js b/frontend/src/utils/request.js
index a633c95..fa79c12 100644
--- a/frontend/src/utils/request.js
+++ b/frontend/src/utils/request.js
@@ -20,7 +20,7 @@ export default (config) => {
if (res.data.code !== 200) {
message.error(res.data.msg);
}
-
+ console.log(res.data);
return res.data;
},
(err) => {
diff --git a/frontend/src/views/main/system/user/conf.js b/frontend/src/views/main/system/user/conf.js
new file mode 100644
index 0000000..390a3af
--- /dev/null
+++ b/frontend/src/views/main/system/user/conf.js
@@ -0,0 +1,39 @@
+// 表格数据列 表头配置
+export const columns = [
+ {
+ title: "序号",
+ dataIndex: "index",
+ key: "index",
+ align: "center",
+ customRender: ({ text, record, index }) => `${index + 1}`,
+ },
+ {
+ title: "用户名",
+ dataIndex: "username",
+ key: "username",
+ },
+ {
+ title: "昵称",
+ dataIndex: "nickname",
+ key: "nickname",
+ },
+ {
+ title: "状态",
+ dataIndex: "status",
+ key: "status",
+ },
+ {
+ title: "创建时间",
+ dataIndex: "created",
+ key: "created",
+ },
+ {
+ title: "更新时间",
+ dataIndex: "modified",
+ key: "modified",
+ },
+ {
+ title: "操作",
+ key: "action",
+ },
+];
diff --git a/frontend/src/views/main/system/user/user.vue b/frontend/src/views/main/system/user/user.vue
index b1a7cde..4931c12 100644
--- a/frontend/src/views/main/system/user/user.vue
+++ b/frontend/src/views/main/system/user/user.vue
@@ -1,7 +1,122 @@
-
+
- user
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+
+
+
+
+
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+ {{ record.status !== 9 ? "正常" : "已删除" }}
+
+
+
+ {{ formatTime(record.created) }}
+
+
+ {{ formatTime(record.modified) }}
+
+
+
+ 修改
+
+
+ 删除
+
+
+
+
+
+
+
+
-
+