From 1a5823e903b3de14888522c33e070dc7df36fc0c Mon Sep 17 00:00:00 2001 From: xy <271556543@qq.com> Date: Tue, 15 Oct 2024 18:17:07 +0800 Subject: [PATCH] 1 --- src/api/module.js | 60 +++--- src/api/role.js | 40 ++-- src/assets/face.png | Bin 0 -> 3069 bytes src/assets/title.png | Bin 5120 -> 983 bytes src/assets/title1.png | Bin 0 -> 5120 bytes src/layout/components/Navbar/index.vue | 10 +- src/settings.js | 4 +- src/styles/index.scss | 11 ++ src/styles/navbar.scss | 11 +- src/views/system/DashboardComponents/toDo.vue | 5 +- src/views/system/components/AddDepartment.vue | 92 ++++----- src/views/system/components/BatchUser.vue | 174 ++++++++++++++++ src/views/system/components/BindRoles.vue | 79 ++++---- src/views/system/components/ModuleAuth.vue | 8 +- .../components/ModuleAuthBindPermissions.vue | 97 ++++----- .../system/components/ModuleAuthBindRole.vue | 93 ++++----- .../system/components/ModuleBatchUsers.vue | 187 ++++++++++++++++++ src/views/system/department.vue | 4 +- src/views/system/role.vue | 7 +- src/views/wujie/index.vue | 2 +- 20 files changed, 652 insertions(+), 232 deletions(-) create mode 100644 src/assets/face.png create mode 100644 src/assets/title1.png create mode 100644 src/views/system/components/BatchUser.vue create mode 100644 src/views/system/components/ModuleBatchUsers.vue diff --git a/src/api/module.js b/src/api/module.js index 67c117f..9fd613c 100644 --- a/src/api/module.js +++ b/src/api/module.js @@ -1,30 +1,30 @@ -import request from '@/utils/request'; -import qs from 'qs'; -export function index (params) { +import request from '@/utils/request' +import qs from 'qs' +export function index(params) { return request({ - url: "/api/backend/module", - method: "get", + url: '/api/backend/module', + method: 'get', params }) } -export function save (data) { +export function save(data) { return request({ - url: "/api/backend/module/save", - method: "post", + url: '/api/backend/module/save', + method: 'post', data }) } -export function destroy (data) { +export function destroy(data) { return request({ - url: "/api/backend/module/delete", - method: "post", + url: '/api/backend/module/delete', + method: 'post', data }) } -export function menu (params) { +export function menu(params) { return request({ method: 'get', url: '/api/backend/module/menu', @@ -32,7 +32,7 @@ export function menu (params) { }) } -export function menuSave (data) { +export function menuSave(data) { return request({ method: 'post', url: '/api/backend/module/menu/save', @@ -40,7 +40,7 @@ export function menuSave (data) { }) } -export function menuDestroy (data) { +export function menuDestroy(data) { return request({ method: 'post', url: '/api/backend/module/menu/delete', @@ -48,7 +48,7 @@ export function menuDestroy (data) { }) } -export function role (params) { +export function role(params) { return request({ method: 'get', url: '/api/backend/module/role', @@ -56,7 +56,7 @@ export function role (params) { }) } -export function roleSave (data) { +export function roleSave(data) { return request({ method: 'post', url: '/api/backend/module/role/save', @@ -64,14 +64,14 @@ export function roleSave (data) { }) } -export function roleDestroy (data) { +export function roleDestroy(data) { return request({ method: 'post', url: '/api/backend/module/role/delete', data }) } -export function getPermissions (params) { +export function getPermissions(params) { return request({ method: 'get', url: '/api/backend/module/role/get-permissions', @@ -79,7 +79,7 @@ export function getPermissions (params) { }) } -export function setPermissions (data) { +export function setPermissions(data) { return request({ method: 'post', url: '/api/backend/module/role/set-permissions', @@ -95,18 +95,18 @@ export function grant(params) { }) } -export function setRoles (data) { +export function setRoles(data) { return request({ method: 'post', url: '/api/backend/module/grant/set-roles', data: (() => { - const serializerStr = qs.stringify(data,{ arrayFormat: 'brackets' })?.split('&') || [] - const formData = new FormData(); + const serializerStr = qs.stringify(data, { arrayFormat: 'brackets' })?.split('&') || [] + const formData = new FormData() serializerStr.forEach(item => { - let [key,value] = window.decodeURIComponent(item)?.split('=') - formData.append(key,value) + const [key, value] = window.decodeURIComponent(item)?.split('=') + formData.append(key, value) }) - return formData; + return formData })(), headers: { 'Content-Type': 'application/x-www-form-urlencoded' @@ -118,6 +118,14 @@ export function getRoles(params) { return request({ method: 'get', url: '/api/backend/module/grant/get-roles', - params, + params + }) +} + +export function batchRoles(data) { + return request({ + url: '/api/backend/module/grant/batch-set-roles', + method: 'post', + data }) } diff --git a/src/api/role.js b/src/api/role.js index 60924ba..4ea3aa0 100644 --- a/src/api/role.js +++ b/src/api/role.js @@ -1,41 +1,49 @@ -import request from '@/utils/request'; +import request from '@/utils/request' -export function index (params) { +export function index(params) { return request({ - url: "/api/backend/role", - method: "get", + url: '/api/backend/role', + method: 'get', params }) } -export function save (data) { +export function save(data) { return request({ - url: "/api/backend/role/save", - method: "post", + url: '/api/backend/role/save', + method: 'post', data }) } -export function destroy (data) { +export function destroy(data) { return request({ - url: "/api/backend/role/delete", - method: "post", + url: '/api/backend/role/delete', + method: 'post', data }) } -export function getPermissions (params) { +export function getPermissions(params) { return request({ - url: "/api/backend/role/get-permissions", - method: "get", + url: '/api/backend/role/get-permissions', + method: 'get', params }) } -export function setPermissions (data) { +export function setPermissions(data) { return request({ - url: "/api/backend/role/set-permissions", - method: "post", + url: '/api/backend/role/set-permissions', + method: 'post', + data + }) +} + +export function batchUser(data) { + return request({ + url: '/api/backend/role/batch-user', + method: 'post', data }) } diff --git a/src/assets/face.png b/src/assets/face.png new file mode 100644 index 0000000000000000000000000000000000000000..77043af602b7555113a6e63042b35e8fa665cb76 GIT binary patch literal 3069 zcmd5;`#Y3t7j}3tPIHAMmt4tK@d3f1(h%?SxfKPF-^XJWh;3+qGG@bWf+)14Wz zB@)A3D3>oJR$CHillZIl*pTy$-DHmSgot*0m&#SWvl*I~!2 zi2Q*uliJNIk#BmJLd6pyp=7*dh_9$H%+g5+lXnm_#|S_jv;k*?fDoVzG7Wv`C7BFj z3~L`FJz6sdWDr*)6QhpvuP)IPRiegaYd4a=i?`)jq^!Nrty8)6c=~(g{=hKHj3yXW zSIjnM=GJp2V0j@(9zZcwIG(U%P5a9@lr%NAIpKHJT`&886&R-2ygYRurFCB zeU)tGAyyoBnswmmLW)f#w1p=Y$qXeF$hz3Pyk~RePGkeE?%4_nX0?vH|Hu>1dcJ}) zeh29FRAti6T_5&dElT^wM0p<;1|(ni`HsMhC0oZrz|D*k5Os-1&`s7A*hSk=@?)Y?4;`a9RQnbci(_S=}%eK%5<_;&+CMH@as_dI) z-Sj}j?u~MHieXxZbWVz6rmA$%4Fs3nm>nif(T`P9s7HHv+?fBxpuHaYytgsnyt^Er zdjpD!D$RlWTgu3|oG$-pW(%G;;nveo`zJp)sqABny5$o2Y}8ztCOs{8?i;$IJs{cD zG2#doJc#7Kv+6>Lrz2L3HR%P}o1G0Do_B+roPWp-gwa))<|N0u0+-f6I&3D|p-Pk6 zkWJ;aY|fQ?+9JxiN|<@(d;Hm4Hv@%7gn*2a3#U!;Zpwmf=pbdZrEWP+@y(CIYyF=O z(#%V3;*UgkGs>0tK6|@`C%)rnL}=zxzl}tnKGG3m@8yR)x!sY`ZuHa^aD+<|IR#Aob;`P#PE1L1!Z2j6eMNR?r3X%qm z>xk2gVXpZUE5ll2kB4V39wMZu^F924pw>}bfF2zs>$#yZId?IAJkK=pIN+kS^}$zC zq3RKKA##s$`cAnDEw8TH4m6!#z%b)vwn%nW37Y=j^FMubGY2prfc}%Uka`RRFuk-o z3Dg6JL6#LAbspvq}e&XHjMPx#e`5I!lCj>K!oFMa^M+Im&NYeJg4BShbK8; zxDSn^Q=mTBi%97Fb1c%&n7URc6JekFvl;B`EmvJ)8|6L0fp2aN2isg&yzGc_6F$}9 zsDx@baLs)pCi<>+-*8Hx$-CRA#7N=g06NvbCMNQb1(iO!C(E% zFo>qy2eIv4*UzN0>#EpX1wj|~;=N3lX8zEV&9K8OV$M>`?a$+p|GxI@&{+$$FsYoRT&eoKt@N;@)#C?+fjemiR>&JdG<}Fs z&>8`NQ}9QrJ^6FXvrDnE4we8q@4*L0>Qc~W^&NI?!J$r{akB#nt2GH;>m#ptOD$F2 zEOiZ?h4A^F2VQJMrC_p8WqQX?xvF!0s-e!}!j;X*TxX*DQTog)r8RPjvR3kfhIqX_ zrcC{sNT5&fA;PC~p3?*v``99T+HJiAgY~l4Hhe=L46Rt-G>MQuRapg@U~=l7WFf{U z4|HvL8NC>;a$=R}z7ODC-YRSP0?~86F*~&AC$9tO*0sN+1aFm)4*UA%00wMJayKZ$ z0~nT=W8fZHQ2Iaax&2|4rV)JJuqQ{ZYyCP>f(8+mBi0Wt4QGlLnJo*N;(B0+Zy49Q z@7=!>TZXzr}z zQ=_Q@D%7b(PDxcFod};VCe$`2$x$H~Ew2K<=r(4@{&*lYIerPPF5<^{E$?7Jyu!=c z_cLM+w@(kIgf&Q|@R)^Oh&kfEt|u3thxEHuF>3sSbm~vZJH8+rR_?1Gtk97Lr8~a- zW;)g3TSuI=?$l=!BnruYKWst5bp&l78l7fyL^1A%=^goWC&v&ZF^(mQQP!a&ipkRc zBbk<`?U2;0rr`bZnlT^rs`(q0&6(c$1#HzQ_hGqF&!a>VH7opf9ChTE=F)p^QY(3g z3@Vezv*+cjar*=I72WMZqN5sV%&YClq#ub2nZR>*w)eET<G{GQTy?JFkjA5-SD`T~8b(^S5dG!Frr3?`h3)!xrrg#h8`gb&RBs3XQcTxm3X*MpfpQ;@ znl<~y6i!$&;3CQ*`F=6+{I3hY1~DRITN0kc8=d=Eyi^u20x!vP3ckEvjLMzB{!Qf8 z_-5}qh4MCNbuN#uavjA*vUgGmV2-DXkt0)Cq;Wc%09Me&tgaY=Wd^lvG-sRiUOK-q2YMutn(O0qex$MeThuEAtJ&q$tHq1ULu=nJd@tfzqv zWdl%DT?v@=uYghyDiOPrR-FSj$QRBFo1Xb~M*9PbM{lV4&(PwC1!JP2El$RDq*IQx zG|p%ml|eogv-d5R42gQRxEwj`lijd@3f3Ke)>a|=^7|py9U&T}U%j3rn3OvBUZFdZ o5MgEkzBMJtDYZ@J|J~bi**0pJQfs|Sg8#e_5$A-hvGt|>7Z-zC*#H0l literal 0 HcmV?d00001 diff --git a/src/assets/title.png b/src/assets/title.png index 54dd6dc880db1518b469ea42eb95f544c3c680a8..ff66e148eb82b3d138f927ba458af8495795c388 100644 GIT binary patch literal 983 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 - - - + + +