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