From 2ff52ce0869caf208fc4652c665d8e4cf3b18465 Mon Sep 17 00:00:00 2001 From: zy7y <13271962515@163.com> Date: Wed, 14 Sep 2022 16:22:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=8C=89=E9=92=AE=E6=9D=83=E9=99=90?= =?UTF-8?q?=EF=BC=8Cfix=E6=9B=B4=E6=96=B0=E8=A7=92=E8=89=B2=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E6=B2=A1=E8=BF=87=E6=BB=A4=E5=85=B3=E8=81=94=E8=A1=A8?= =?UTF-8?q?=E7=8A=B6=E6=80=819=E7=9A=84=E6=95=B0=E6=8D=AE=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/dbhelper/role.py | 2 +- backend/dbhelper/user.py | 15 ++- backend/mini.db-shm | Bin 32768 -> 32768 bytes backend/mini.db-wal | Bin 449112 -> 655112 bytes backend/schemas/user.py | 1 + frontend/package-lock.json | 25 ++++ frontend/package.json | 1 + frontend/src/main.js | 3 +- frontend/src/service/user.js | 7 ++ frontend/src/utils/directive.js | 17 +++ frontend/src/utils/format.js | 5 + frontend/src/utils/request.js | 2 +- frontend/src/views/main/system/user/conf.js | 39 ++++++ frontend/src/views/main/system/user/user.vue | 121 ++++++++++++++++++- 14 files changed, 231 insertions(+), 7 deletions(-) create mode 100644 frontend/src/utils/directive.js create mode 100644 frontend/src/utils/format.js create mode 100644 frontend/src/views/main/system/user/conf.js 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 91a222d9da8301addced26cf5c2fe92cebae2c78..763739dfc1d1b2f6a6db24e1f7df3c5605d9cfff 100644 GIT binary patch delta 583 zcmc(cIWI(E6o#Ms-7zvWG$NR2v^u>+E0IWa65H7Kox%9-*vB=-He(oDqL;{5sZ{=h zL?7aeaA{jwc%H zOWaUx*;!36_S<<`^@+Fl{RdxdMdm!}S~^GkKT4A&0c??1{eKunP6?(+Jyn{wstUg~ zZ}QcZGOyJ>+n!@V+_TCK&_FYbVqVngLtQ|(5Tcbf+UcN^F1qQVmp=L#V2~k(8DW$$ z#+hJ}FjGu3Lxfp04pEj^W`!85xU3Opodg?fvc)z#BuTMLnmzW(aKIr)cn|!>1XWm> I`=)}@58vxzIsgCw delta 195 zcmZo@U}|V!s+V}A%K!t63=9H^Kn^z$?+#kfbaaiJ*8bZwdi&#}Wh~4EoNJZe#gnQY zW;V#&|40BT&cu+ov9X(RGYj)C`^f^#KQ{k!GGW`y#C(it^AB$pW+3Ya6Dub}97Ez} UM&_SPi$8^Mg2gt!N)VF=0RD|U`Tzg` diff --git a/backend/mini.db-wal b/backend/mini.db-wal index ba48e783fabb5c39dd597ae9f26c33e37d00abcf..0c693466bbc4330f2f41a9a0b50c29e214e52b92 100644 GIT binary patch delta 1466 zcmcbyMY`jkdP56i3sVbo3rh>@7Pg36(*rcw1UTgF^U|LRcWG?j5XmMWz;U^J-L&cM zB~sfnfRX|n{<&sf!Zuuv-`-#e;_mLBojLKGN742fo*-`UTZe`FUtPWo)thoo;8r7+mqclpn7Y$Y%+xZ zFp5I;PQ5fucEhR-4N$#10%u+|vzQ_Y)%(KZ?h`u~Wqzn$i}`n$q>_U)pnB`_Rm7Ql z*2+Wms_?m-ztJDD1*-SV43)a#$g9_&dMEfiyK~5zj~l92VBh|WHhnkFf%Gy9$gnan zFmUg`J)^fjK3b-G;`awP;%>C@avWliY&keR zMc5e_eSH}@rzbMAIk5muaGh?*#OBE1B?*z3p1{oJ%*pK~fz0Lf5=Z88c!?o%*}X)O zxXjER!qY!qW_92GhMCQrRg@WM2LsHNGZxQ^Nc$9Cy#2rq)~)=EveWndV2$Em_4umX z?2L7}Ah*l1`+(gpg6wtByQd84M%81ri;2}!nsl?U8^!D)1u=>fn-9!L@*{xp95?IE0O z-2C$FER2kd>`by?nw3cgOfxe{v$1e8GBQa`ZEm`tzzTSkdtQ#*?B}-#&S$-rUowGqz8(_JHc;6BHJ8i@N3y)%($hPxRvd zm@iO!zjeROd7T-l2Gx6U+v=cQ%73$=dKY^o=yRIxvV-b%{a38d@@b7cRIkYnYqhNT zRePa&E4tSBT;l#12i0pP_L)=sqJu3|Z-LH}&X|{Mv!HsVKi4m~v9tEca!?Tr09zHQ AfB*mh delta 21 ccmeD9r+#CLbVCbc3sVbo3rh>@7Pg360A%$DWB>pF 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 @@ - + - +