Files
wecom_it_smart_desk/frontend-admin/dist.bak/assets/PermissionsMatrix-BCtFhvJV.js
T

3 lines
5.4 KiB
JavaScript
Raw Normal View History

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('<div class="legend" data-v-6385fdb6><span class="legend-title" data-v-6385fdb6>数据范围:</span><span class="legend-item legend-own" data-v-6385fdb6>own — 自己的</span><span class="legend-item legend-dept" data-v-6385fdb6>department — 部门的</span><span class="legend-item legend-all" data-v-6385fdb6>all — 全部</span><span class="legend-item legend-none" data-v-6385fdb6>无权限</span></div>',1)),o(j,{data:B.value,stripe:"",size:"small","empty-text":x.value?"加载中...":"无数据",class:"matrix-table"},{default:n(()=>[o(b,{label:"资源",prop:"resource",width:"140",fixed:""},{default:n(({row:e})=>[l("span",te,v(e.resource),1)]),_:1}),o(b,{label:"操作",prop:"action",width:"100",fixed:""},{default:n(({row:e})=>[o(h,{size:"small",type:O(e.action)},{default:n(()=>[y(v(e.action),1)]),_:2},1032,["type"])]),_:1}),(a(!0),p(g,null,k(C.value,e=>(a(),m(b,{key:e.name,label:e.display_name,"min-width":"140",align:"center"},{header:n(()=>[l("div",se,[l("div",ae,v(e.display_name),1),l("div",le,v(e.name),1)])]),default:n(({row:N})=>[l("div",ne,[(a(!0),p(g,null,k(S(N,e.name),M=>(a(),m(h,{key:M,size:"small",class:Q(["scope-tag",`scope-${M}`])},{default:n(()=>[y(v(M),1)]),_:2},1032,["class"]))),128)),S(N,e.name).length===0?(a(),p("span",oe,"—")):T("",!0)])]),_:2},1032,["label"]))),128))]),_:1},8,["data","empty-text"]),l("div",re,[t[7]||(t[7]=l("div",{class:"section-title"},"角色详情",-1)),o(I,{column:2,border:"",size:"small"},{default:n(()=>[(a(!0),p(g,null,k(C.value,e=>(a(),m(F,{key:e.name,label:e.display_name+" ("+e.name+")"},{default:n(()=>[l("div",ie,[l("div",ce,v(e.description||"—"),1),l("div",de,[t[6]||(t[6]=y(" 权限数: ",-1)),l("b",null,v(e.permission_count),1),e.is_default?(a(),m(h,{key:0,type:"info",size:"small",style:{"margin-left":"8px"}},{default:n(()=>[...t[5]||(t[5]=[y("默认",-1)])]),_:1})):T("",!0)])])]),_:2},1032,["label"]))),128))]),_:1})])],64)):(a(),m(P,{key:2,description:"加载失败, 请检查网络或权限"}))])}}}),ve=X(ue,[["__scopeId","data-v-6385fdb6"]]);export{ve as default};