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

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