import{d as q,o as G,b as a,c as p,e as l,f as o,w as n,n as m,T as g,a6 as H,r as R,S as z,E as D,i as r,U as k,j as E,a7 as J,g as y,a8 as K,t as v,a3 as Q,h as T}from"./index-CcYCuTIa.js";import{a as W}from"./index-CPDTx6RU.js";import{_ as X}from"./_plugin-vue_export-helper-DlAUqK2U.js";const Y={class:"matrix-page"},Z={class:"page-header"},ee={class:"header-actions"},te={class:"resource-label"},se={class:"role-header"},ae={class:"role-name"},le={class:"role-id"},ne={class:"perm-cell"},oe={key:0,class:"no-perm"},re={class:"role-detail"},ie={class:"role-meta"},ce={class:"role-desc"},de={class:"role-perm-count"},ue=q({__name:"PermissionsMatrix",setup(pe){const x=R(!1),i=R({roles:[],resources:[],actions:[],scopes:[],matrix:{}}),w=R(""),V=R(""),U=z(()=>i.value.roles.length>0),C=z(()=>w.value?i.value.roles.filter(s=>s.name===w.value):i.value.roles),$=z(()=>{const s=[];for(const t of i.value.resources)for(const c of i.value.actions)s.push({resource:t,action:c,key:`${t}:${c}`});return s}),B=z(()=>V.value?$.value.filter(s=>s.resource===V.value):$.value);async function L(){x.value=!0;try{const s=await W.get("/admin/roles/permissions/matrix");i.value=s}catch(s){console.error("loadMatrix 失败:",s),D.error("加载失败: "+((s==null?void 0:s.message)||"未知错误"))}finally{x.value=!1}}function S(s,t){var _;const c=[];for(const d of i.value.scopes){const u=`${s.resource}:${s.action}:${d}`;(_=i.value.matrix[t])!=null&&_[u]&&c.push(d)}return c}function O(s){return{read:"info",create:"success",update:"warning",delete:"danger"}[s]||"info"}function A(){const t=[["resource","action",...C.value.map(f=>f.name)].join(",")];for(const f of B.value){const b=[f.resource,f.action];for(const h of C.value){const j=S(f,h.name);b.push(j.join("|")||"")}t.push(b.join(","))}const c=t.join(` `),_=new Blob([c],{type:"text/csv;charset=utf-8"}),d=URL.createObjectURL(_),u=document.createElement("a");u.href=d,u.download=`rbac-matrix-${new Date().toISOString().slice(0,10)}.csv`,u.click(),URL.revokeObjectURL(d),D.success("CSV 已导出")}return G(()=>{L()}),(s,t)=>{const c=r("el-option"),_=r("el-select"),d=r("el-icon"),u=r("el-button"),f=r("el-skeleton"),b=r("el-table-column"),h=r("el-tag"),j=r("el-table"),F=r("el-descriptions-item"),I=r("el-descriptions"),P=r("el-empty");return a(),p("div",Y,[l("div",Z,[t[4]||(t[4]=l("div",null,[l("div",{class:"page-title"},"RBAC 权限矩阵"),l("div",{class:"page-desc"}," 5 角色 × 4 资源 × 4 操作 × 3 数据范围,共 240 个权限点 (5 × 16 × 3) ")],-1)),l("div",ee,[o(_,{modelValue:w.value,"onUpdate:modelValue":t[0]||(t[0]=e=>w.value=e),placeholder:"筛选角色",size:"default",clearable:"",style:{width:"180px"}},{default:n(()=>[(a(!0),p(g,null,k(i.value.roles,e=>(a(),m(c,{key:e.name,label:e.display_name+" ("+e.name+")",value:e.name},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),o(_,{modelValue:V.value,"onUpdate:modelValue":t[1]||(t[1]=e=>V.value=e),placeholder:"筛选资源",size:"default",clearable:"",style:{width:"180px"}},{default:n(()=>[(a(!0),p(g,null,k(i.value.resources,e=>(a(),m(c,{key:e,label:e,value:e},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),o(u,{onClick:A},{default:n(()=>[o(d,null,{default:n(()=>[o(E(J))]),_:1}),t[2]||(t[2]=y(" 导出 CSV ",-1))]),_:1}),o(u,{onClick:L,loading:x.value},{default:n(()=>[o(d,null,{default:n(()=>[o(E(K))]),_:1}),t[3]||(t[3]=y(" 刷新 ",-1))]),_:1},8,["loading"])])]),x.value&&!U.value?(a(),m(f,{key:0,rows:10,animated:""})):U.value?(a(),p(g,{key:1},[t[8]||(t[8]=H('