2 lines
6.4 KiB
JavaScript
2 lines
6.4 KiB
JavaScript
import{_ as D,u as E,i as F,j as g,c as o,b as e,k as c,f as i,F as S,l as I,w as j,t as r,e as p,m as T,v as b,r as y,n as $,p as q,o as a,C as A,q as O,a as G,U as H}from"./index-BZEF5hZc.js";const J={class:"toolbar"},K={class:"panel"},Q={class:"data-table"},W={class:"path-cell"},X=["onClick"],Y=["onClick"],Z=["onClick"],w={key:0,class:"empty"},ee={class:"modal"},te={class:"modal-header"},ne={class:"modal-body"},le={class:"form-group"},se=["disabled"],oe={key:0,class:"form-group"},ae=["value"],ie={class:"form-group"},ue={class:"form-group"},de=["placeholder","disabled"],re={key:1,class:"form-group"},pe={key:2,class:"form-group"},me={class:"form-group"},ce={key:3,class:"form-error"},ve={__name:"PermissionsView",setup(be){const u=E(),B=y([]),f=y(!1),m=y(null),C=y(!1),d=y(""),n=q({type:"dir",parent_id:null,name:"",code:"",path:"",icon:"",sort_order:0}),_=$(()=>{const s=[],t=(l,v=0)=>{var M;for(const V of l||[])s.push({...V,depth:v}),(M=V.children)!=null&&M.length&&t(V.children,v+1)};return t(B.value),s}),z=$(()=>n.type==="menu"?_.value.filter(s=>s.type==="dir").map(s=>({id:s.id,label:s.name})):n.type==="btn"?_.value.filter(s=>s.type==="menu").map(s=>({id:s.id,label:`${s.name} (${s.code})`})):[]),L=$(()=>n.type==="dir"?"dir:custom":n.type==="menu"?"menu:custom":"btn:custom:action");F(x);async function x(){var t;const s=await g.get("/admin/permissions/tree");B.value=((t=s.data.data)==null?void 0:t.tree)||[]}function U(s){return{dir:"目录",menu:"菜单",btn:"按钮"}[s]||s}function h(s,t=null){m.value=null,C.value=!1,n.type=s,n.parent_id=t,n.name="",n.code="",n.path="",n.icon="",n.sort_order=0,d.value="",f.value=!0}function N(s){m.value=s.id,C.value=!!s.is_system,n.type=s.type,n.parent_id=s.parent_id,n.name=s.name,n.code=s.code,n.path=s.path||"",n.icon=s.icon||"",n.sort_order=s.sort_order||0,d.value="",f.value=!0}function k(){f.value=!1}async function P(){if(d.value="",!n.name.trim()){d.value="请填写名称";return}if(n.type!=="dir"&&!n.parent_id){d.value="请选择上级";return}const s={type:n.type,name:n.name.trim(),code:n.code.trim()||void 0,parent_id:n.type==="dir"?null:n.parent_id,path:n.path.trim(),icon:n.icon.trim(),sort_order:n.sort_order};try{m.value?await g.put(`/admin/permissions/${m.value}`,s):await g.post("/admin/permissions",s),k(),await x(),await u.loadMenuTree()}catch(t){d.value=t.message||"保存失败"}}async function R(s){if(confirm(`确定删除「${s.name}」?`))try{await g.delete(`/admin/permissions/${s.id}`),await x(),await u.loadMenuTree()}catch(t){alert(t.message||"删除失败")}}return(s,t)=>(a(),o("div",null,[t[20]||(t[20]=e("div",{class:"page-header"},[e("h2",null,"权限管理"),e("p",null,"维护目录、菜单、按钮节点,角色勾选后即可生效")],-1)),e("div",J,[c(u).hasButton("btn:perm:create")?(a(),o("button",{key:0,class:"btn btn-primary",onClick:t[0]||(t[0]=l=>h("dir"))},"新增目录")):i("",!0),c(u).hasButton("btn:perm:create")?(a(),o("button",{key:1,class:"btn btn-ghost",onClick:t[1]||(t[1]=l=>h("menu"))},"新增菜单")):i("",!0),c(u).hasButton("btn:perm:create")?(a(),o("button",{key:2,class:"btn btn-ghost",onClick:t[2]||(t[2]=l=>h("btn"))},"新增按钮")):i("",!0)]),e("div",K,[e("table",Q,[t[10]||(t[10]=e("thead",null,[e("tr",null,[e("th",null,"名称"),e("th",null,"类型"),e("th",null,"标识"),e("th",null,"路径 / 图标"),e("th",null,"系统"),e("th",null,"操作")])],-1)),e("tbody",null,[(a(!0),o(S,null,I(_.value,l=>(a(),o("tr",{key:l.id||l.code},[e("td",null,[e("span",{style:A({paddingLeft:`${l.depth*18}px`})},r(l.name),5)]),e("td",null,[e("span",{class:O(["type-badge",l.type])},r(U(l.type)),3)]),e("td",null,[e("code",null,r(l.code),1)]),e("td",W,[G(H,{name:l.path||l.type,size:16},null,8,["name"]),e("span",null,r(l.path||l.icon||"-"),1)]),e("td",null,r(l.is_system?"是":"否"),1),e("td",null,[c(u).hasButton("btn:perm:create")&&l.type!=="btn"?(a(),o("button",{key:0,class:"btn btn-ghost",onClick:v=>h(l.type==="dir"?"menu":"btn",l.id)},"添加下级",8,X)):i("",!0),c(u).hasButton("btn:perm:edit")?(a(),o("button",{key:1,class:"btn btn-ghost",onClick:v=>N(l)},"编辑",8,Y)):i("",!0),c(u).hasButton("btn:perm:delete")&&!l.is_system?(a(),o("button",{key:2,class:"btn btn-ghost danger",onClick:v=>R(l)},"删除",8,Z)):i("",!0)])]))),128))])]),_.value.length?i("",!0):(a(),o("p",w,"暂无权限节点,请先执行数据库迁移"))]),f.value?(a(),o("div",{key:0,class:"modal-overlay",onClick:j(k,["self"])},[e("div",ee,[e("div",te,[e("h3",null,r(m.value?"编辑权限":"新增"+U(n.type)),1),e("button",{onClick:k},"×")]),e("div",ne,[e("div",le,[t[12]||(t[12]=e("label",null,"类型",-1)),p(e("select",{"onUpdate:modelValue":t[3]||(t[3]=l=>n.type=l),class:"form-select",disabled:!!m.value},[...t[11]||(t[11]=[e("option",{value:"dir"},"目录",-1),e("option",{value:"menu"},"菜单",-1),e("option",{value:"btn"},"按钮",-1)])],8,se),[[T,n.type]])]),n.type!=="dir"?(a(),o("div",oe,[t[13]||(t[13]=e("label",null,"上级",-1)),p(e("select",{"onUpdate:modelValue":t[4]||(t[4]=l=>n.parent_id=l),class:"form-select"},[(a(!0),o(S,null,I(z.value,l=>(a(),o("option",{key:l.id,value:l.id},r(l.label),9,ae))),128))],512),[[T,n.parent_id]])])):i("",!0),e("div",ie,[t[14]||(t[14]=e("label",null,"名称",-1)),p(e("input",{"onUpdate:modelValue":t[5]||(t[5]=l=>n.name=l),class:"form-input",placeholder:"显示名称"},null,512),[[b,n.name]])]),e("div",ue,[t[15]||(t[15]=e("label",null,"标识 code",-1)),p(e("input",{"onUpdate:modelValue":t[6]||(t[6]=l=>n.code=l),class:"form-input",placeholder:L.value,disabled:C.value},null,8,de),[[b,n.code]]),t[16]||(t[16]=e("div",{class:"field-hint"},"建议格式:dir:xxx / menu:xxx / btn:xxx:action",-1))]),n.type==="menu"?(a(),o("div",re,[t[17]||(t[17]=e("label",null,"路由路径",-1)),p(e("input",{"onUpdate:modelValue":t[7]||(t[7]=l=>n.path=l),class:"form-input",placeholder:"如 /users"},null,512),[[b,n.path]])])):i("",!0),n.type==="menu"?(a(),o("div",pe,[t[18]||(t[18]=e("label",null,"图标",-1)),p(e("input",{"onUpdate:modelValue":t[8]||(t[8]=l=>n.icon=l),class:"form-input",placeholder:"可选图标标识"},null,512),[[b,n.icon]])])):i("",!0),e("div",me,[t[19]||(t[19]=e("label",null,"排序",-1)),p(e("input",{"onUpdate:modelValue":t[9]||(t[9]=l=>n.sort_order=l),type:"number",class:"form-input"},null,512),[[b,n.sort_order,void 0,{number:!0}]])]),d.value?(a(),o("p",ce,r(d.value),1)):i("",!0)]),e("div",{class:"modal-footer"},[e("button",{class:"btn btn-ghost",onClick:k},"取消"),e("button",{class:"btn btn-primary",onClick:P},"保存")])])])):i("",!0)]))}},fe=D(ve,[["__scopeId","data-v-0259ca3f"]]);export{fe as default};
|