You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 line
6.5 KiB
1 line
6.5 KiB
import{n as e}from"./axios-CiYFffbI.js";import{I as t,N as n,V as r,Y as i,_ as a,d as o,f as s,i as c,it as l,kt as u,l as d,nt as f,p,u as m,v as h,w as g,y as _,z as v}from"./runtime-core.esm-bundler-CnFWH3R5.js";import{n as y}from"./http-LCi9aT1G.js";import{t as b}from"./index-D5AQ-aBi.js";var x=_({__name:`Roles`,setup(_){let x=l(!1),S=l(!1),C=l(!1),w=l(!1),T=l([]),E=l([]),D=l(``),O=l([]),k=l(!1),A=f({slug:``,name:``,full_access:!1}),j=l(!1),M=g(b,void 0),N=d(()=>{let e=new Map;T.value.forEach(t=>e.set(t.id,{key:t.id,title:t.name,children:[]}));let t=[];return T.value.forEach(n=>{let r=e.get(n.id);n.parent_id>0&&e.has(n.parent_id)?e.get(n.parent_id).children.push(r):t.push(r)}),t}),P=d(()=>E.value.find(e=>e.role===D.value));async function F(){let{data:e}=await y.get(`/me`);w.value=e?.full_admin_access===!0}async function I(){x.value=!0;try{let{data:e}=await y.get(`/role-menu-permissions`);T.value=e.menus||[],E.value=e.roles||[];let t=E.value[0];t?(D.value=t.role,O.value=[...t.menu_ids||[]]):(D.value=``,O.value=[])}catch(t){e.error(t?.response?.data?.message??`加载角色菜单权限失败`)}finally{x.value=!1}}function L(e){D.value=e,O.value=[...E.value.find(t=>t.role===e)?.menu_ids||[]]}async function R(){if(w.value){S.value=!0;try{await y.put(`/role-menu-permissions/${encodeURIComponent(D.value)}`,{menu_ids:O.value});let t=E.value.find(e=>e.role===D.value);t&&(t.menu_ids=[...O.value]),await M?.(),e.success(`角色菜单权限保存成功`)}catch(t){e.error(t?.response?.data?.message??`保存失败`)}finally{S.value=!1}}}function z(){A.slug=``,A.name=``,A.full_access=!1,k.value=!0}async function B(){let t=A.slug.trim().toLowerCase(),n=A.name.trim();if(!t||!n)return e.warning(`请填写角色标识与名称`),!1;C.value=!0;try{return await y.post(`/admin-roles`,{slug:t,name:n,full_access:A.full_access}),e.success(`角色已创建`),k.value=!1,await I(),L(t),!0}catch(t){return e.error(t?.response?.data?.message??`创建失败`),!1}finally{C.value=!1}}async function V(t){let n=P.value;if(!n||n.role===`super_admin`||n.role===`venue_admin`)return;let r=t===!0||t===`true`||t===1;j.value=!0;try{await y.put(`/admin-roles/${encodeURIComponent(n.role)}`,{full_access:r}),n.full_access=r,e.success(r?`已开启系统级全权限`:`已关闭系统级全权限`)}catch(t){e.error(t?.response?.data?.message??`更新失败`)}finally{j.value=!1}}async function H(t){if(!t.is_system)try{await y.delete(`/admin-roles/${encodeURIComponent(t.role)}`),e.success(`已删除角色`),await I();let n=E.value[0];n&&L(n.role)}catch(t){e.error(t?.response?.data?.message??`删除失败`)}}return n(async()=>{await F(),await I()}),(e,n)=>{let l=r(`a-alert`),d=r(`a-button`),f=r(`a-popconfirm`),g=r(`a-space`),_=r(`a-card`),y=r(`a-switch`),b=r(`a-tree`),C=r(`a-spin`),T=r(`a-input`),M=r(`a-form-item`),F=r(`a-checkbox`),I=r(`a-form`),U=r(`a-modal`);return t(),o(_,{title:`用户与权限 / 角色管理(菜单权限)`},{default:i(()=>[h(l,{style:{"margin-bottom":`12px`}},{default:i(()=>[...n[6]||=[a(` 场馆管理员等账号的侧栏与动态路由按此处勾选加载。超级管理员默认可见全部可见菜单;下方勾选仍用于配置场馆管理员等角色。新建角色后请勾选并保存,再在「管理员账号」中分配该角色。 `,-1)]]),_:1}),w.value?s(``,!0):(t(),o(l,{key:0,type:`info`,style:{"margin-bottom":`12px`}},{default:i(()=>[...n[7]||=[a(` 当前为只读模式,仅具备系统级全权限的管理员可修改角色菜单权限。 `,-1)]]),_:1})),h(C,{loading:x.value},{default:i(()=>[h(g,{align:`start`,fill:``},{default:i(()=>[h(_,{title:`角色列表`,size:`small`,style:{width:`260px`}},{default:i(()=>[h(g,{direction:`vertical`,fill:``,style:{width:`100%`}},{default:i(()=>[w.value?(t(),o(d,{key:0,type:`outline`,long:``,onClick:z},{default:i(()=>[...n[8]||=[a(`新建角色`,-1)]]),_:1})):s(``,!0),(t(!0),p(c,null,v(E.value,e=>(t(),o(d,{key:e.role,type:D.value===e.role?`primary`:`secondary`,long:``,onClick:t=>L(e.role)},{default:i(()=>[a(u(e.label),1)]),_:2},1032,[`type`,`onClick`]))),128)),w.value&&P.value&&!P.value.is_system?(t(),o(f,{key:1,content:`确认删除该角色?(需无管理员使用)`,onOk:n[0]||=e=>H(P.value)},{default:i(()=>[h(d,{type:`outline`,status:`danger`,long:``,style:{"margin-top":`4px`}},{default:i(()=>[...n[9]||=[a(`删除当前角色`,-1)]]),_:1})]),_:1})):s(``,!0)]),_:1})]),_:1}),h(_,{title:`${P.value?.label||``} - 菜单权限`,size:`small`,style:{flex:`1`}},{extra:i(()=>[h(g,null,{default:i(()=>[w.value&&P.value&&P.value.role!==`venue_admin`?(t(),p(c,{key:0},[n[10]||=m(`span`,{style:{"font-size":`13px`,color:`var(--color-text-2)`}},`系统级全权限`,-1),h(y,{"model-value":P.value.role===`super_admin`?!0:!!P.value.full_access,disabled:P.value.role===`super_admin`,loading:j.value,onChange:V},null,8,[`model-value`,`disabled`,`loading`])],64)):s(``,!0),h(d,{type:`primary`,disabled:!w.value,loading:S.value,onClick:R},{default:i(()=>[...n[11]||=[a(`保存当前角色`,-1)]]),_:1},8,[`disabled`,`loading`])]),_:1})]),default:i(()=>[P.value&&P.value.role!==`super_admin`&&P.value.role!==`venue_admin`?(t(),o(l,{key:0,type:`warning`,style:{"margin-bottom":`12px`}},{default:i(()=>[...n[12]||=[a(` 「系统级全权限」开启后,接口权限与超级管理员一致(审核、管理员账号、菜单维护等);左侧菜单仍按此处勾选生效,请按需勾选与超级管理员相同的菜单。 `,-1)]]),_:1})):s(``,!0),h(b,{"checked-keys":O.value,"onUpdate:checkedKeys":n[1]||=e=>O.value=e,checkable:``,"block-node":``,data:N.value,"default-expand-all":!0},null,8,[`checked-keys`,`data`])]),_:1},8,[`title`])]),_:1})]),_:1},8,[`loading`]),h(U,{visible:k.value,"onUpdate:visible":n[5]||=e=>k.value=e,title:`新建角色`,"on-before-ok":B},{default:i(()=>[h(I,{layout:`vertical`},{default:i(()=>[h(M,{label:`角色标识(英文,创建后不可改)`,required:``,extra:`小写字母开头,仅含小写字母、数字、下划线`},{default:i(()=>[h(T,{modelValue:A.slug,"onUpdate:modelValue":n[2]||=e=>A.slug=e,placeholder:`如 operator`},null,8,[`modelValue`])]),_:1}),h(M,{label:`显示名称`,required:``},{default:i(()=>[h(T,{modelValue:A.name,"onUpdate:modelValue":n[3]||=e=>A.name=e,placeholder:`如 管理员`},null,8,[`modelValue`])]),_:1}),h(M,{label:`系统级全权限`},{default:i(()=>[h(F,{modelValue:A.full_access,"onUpdate:modelValue":n[4]||=e=>A.full_access=e},{default:i(()=>[...n[13]||=[a(`与超级管理员相同的接口级权限(菜单仍须在右侧勾选)`,-1)]]),_:1},8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`visible`])]),_:1})}}});export{x as default}; |