Files
Migu2.0/MiGu.Server/wwwroot/assets/AuthRoleView-94zjdzbD.js
T
zhaowei.huangandCursor 7382e85598 feat(platform): 部署配置向导 + 地图管理,地图编辑器接入统一存取与 AI 助手
- 配置向导:登录按 deployment 画像引导平台选型(导航方式/模块/场景),未完成则路由守卫强制进入 /wizard;选型驱动菜单按需裁剪,并联动 SimpleLite 写 plugins/active-scenes.json + 透传 --scenes 选择性加载导航场景插件
- 地图管理页:服务器地图列表/使用/重命名/删除、地图合并、多地图连接管理
- 地图编辑器:项目存取改为存入地图管理统一目录(同名替换确认),支持 ?map=/?new= 进入,新增右侧可停靠 AI 助手面板
- 集成 PTL 拣选模块;新增车队分配面板(运维总览/筛选联动)
- SimpleLiteBuildSync 同步运行时依赖 DLL;重新构建前端静态资源

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-03 09:37:07 +08:00

2 lines
15 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{aU as k,aI as Be,bv as Se,b7 as Te,aE as b,aH as t,bJ as s,ai as x,X as c,bh as f,bg as oe,t as De,G as Oe,b9 as u,ac as qe,a9 as Ae,aB as v,bq as g,r as Ge,bt as E,bc as ue,aG as i,bK as ie,aC as w,aa as Me,ab as je,bj as R,ad as Fe,aD as G,a8 as Le,aM as de,aW as He,aK as re,bA as Ke,bi as We,N as Je,O as Xe,R as Ye,a4 as Ze,Z as Qe,a2 as el,w as ll,H as al,v as tl,u as sl,L as nl,ax as J,Y as pe,ak as ol}from"./index-368apsQG.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */async function ul(){const{data:d}=await k.get("/rbac/catalog");return d}async function il(){const{data:d}=await k.get("/rbac/roles");return d}async function dl(d){if(d.id){const{data:z}=await k.put(`/rbac/roles/${d.id}`,d);return z}const{data:V}=await k.post("/rbac/roles",d);return V}async function rl(d){await k.delete(`/rbac/roles/${d}`)}async function pl(){const{data:d}=await k.get("/rbac/users");return d}async function cl(d){const{data:V}=await k.post("/rbac/users",d);return V}async function ce(d,V){const{data:z}=await k.put(`/rbac/users/${d}`,V);return z}async function ml(d,V){await k.put(`/rbac/users/${d}/password`,{password:V})}async function fl(d){await k.delete(`/rbac/users/${d}`)}const vl={class:"rbac-header"},bl={class:"tab-toolbar"},gl={class:"toolbar-hint"},yl={key:0,class:"muted"},_l={class:"tab-toolbar"},wl={class:"toolbar-hint"},kl={key:1},Vl={key:0,class:"page-picker"},Cl={class:"page-group-head"},El={class:"page-group-title"},Ul={class:"page-group-actions"},$l={key:1,class:"wildcard-hint"},xl=Be({__name:"AuthRoleView",setup(d){const V=Se(),z=J(()=>V.user?.id??""),X=f("users"),B=f(!1),C=f(!1),M=f(null),S=f([]),j=f([]);function me(a){return S.value.find(e=>e.id===a)?.name??a}function A(a){return a==="*"?"通用":a==="Platform"?"管理端":a==="RCSMonitor"?"运营端":a}function fe(a){return a==="*"?"danger":a==="Platform"?"warning":"success"}async function N(){B.value=!0;try{const[a,e,o]=await Promise.all([ul(),il(),pl()]);M.value=a,S.value=e,j.value=o}catch(a){c.error(`加载失败:${$(a)}`)}finally{B.value=!1}}const h=f(!1),n=oe({id:null,username:"",displayName:"",password:"",roleIds:[],enabled:!0});function ve(){Object.assign(n,{id:null,username:"",displayName:"",password:"",roleIds:[],enabled:!0}),h.value=!0}function be(a){Object.assign(n,{id:a.id,username:a.username,displayName:a.displayName,password:"",roleIds:[...a.roleIds],enabled:a.enabled}),h.value=!0}async function ge(){C.value=!0;try{n.id?(await ce(n.id,{displayName:n.displayName,roleIds:n.roleIds,enabled:n.enabled}),c.success("用户已更新")):(await cl({username:n.username,displayName:n.displayName,password:n.password,roleIds:n.roleIds,enabled:n.enabled}),c.success("用户已创建")),h.value=!1,await N()}catch(a){c.error($(a))}finally{C.value=!1}}async function ye(a,e){a._busy=!0;try{await ce(a.id,{enabled:e}),a.enabled=e,c.success(e?"已启用":"已停用")}catch(o){c.error($(o))}finally{a._busy=!1}}async function _e(a){try{await pe.confirm(`确定删除用户「${a.username}」?此操作不可恢复。`,"删除确认",{type:"warning"})}catch{return}try{await fl(a.id),c.success("用户已删除"),await N()}catch(e){c.error($(e))}}const T=f(!1),D=f(null),O=f("");function we(a){D.value=a,O.value="",T.value=!0}async function ke(){if(D.value){if(!O.value){c.warning("请输入新密码");return}C.value=!0;try{await ml(D.value.id,O.value),c.success("密码已重置"),T.value=!1}catch(a){c.error($(a))}finally{C.value=!1}}}const I=f(!1),p=oe({id:null,name:"",description:"",scope:"Platform"}),y=f([]),U=f(!1),F=f([]),L=f([]),Y=J(()=>(M.value?.pages??[]).filter(a=>p.scope==="*"||a.scope===p.scope)),Z=J(()=>{const a=new Map;for(const e of Y.value)a.has(e.group)||a.set(e.group,[]),a.get(e.group).push(e);return[...a.entries()].map(([e,o])=>({group:e,pages:o}))});function Ve(){Object.assign(p,{id:null,name:"",description:"",scope:"Platform"}),y.value=[],U.value=!1,F.value=[],L.value=[],I.value=!0}function Ce(a){Object.assign(p,{id:a.id,name:a.name,description:a.description,scope:a.scope}),U.value=a.pages.includes("*"),y.value=U.value?[]:[...a.pages],F.value=[...a.ops],L.value=a.widgetGrants.map(e=>({...e})),I.value=!0}function Ee(){const a=new Set(Y.value.map(e=>e.key));y.value=y.value.filter(e=>a.has(e))}function Q(a,e){const o=a.map(m=>m.key);e?y.value=[...new Set([...y.value,...o])]:y.value=y.value.filter(m=>!o.includes(m))}async function Ue(){if(!p.name.trim()){c.warning("请填写角色名称");return}C.value=!0;try{await dl({id:p.id??void 0,name:p.name,description:p.description,scope:p.scope,pages:U.value?["*"]:y.value,ops:F.value,widgetGrants:L.value}),c.success(p.id?"角色已更新":"角色已创建"),I.value=!1,await N()}catch(a){c.error($(a))}finally{C.value=!1}}async function $e(a){try{await pe.confirm(`确定删除角色「${a.name}」?`,"删除确认",{type:"warning"})}catch{return}try{await rl(a.id),c.success("角色已删除"),await N()}catch(e){c.error($(e))}}function $(a){return a instanceof Error?a.message:String(a)}return Te(N),(a,e)=>{const o=Ge,m=je,q=Fe,H=Le,ee=Me,le=Ae,xe=qe,Ne=De,P=Ye,_=Xe,ae=Qe,te=Ze,K=Je,W=Oe,se=ll,he=el,Ie=al,Pe=sl,Re=tl,ze=nl,ne=Ke;return u(),b(x,null,[t(Ne,{shadow:"never",class:"rbac-card"},{header:s(()=>[v("div",vl,[e[19]||(e[19]=v("div",{class:"rbac-title-wrap"},[v("span",{class:"rbac-title"},"权限与角色管理"),v("span",{class:"rbac-desc"},"为角色分配可访问页面、操作与控件,并为用户指派角色(标准 RBAC)。")],-1)),t(o,{icon:E(We),loading:B.value,onClick:N},{default:s(()=>[...e[18]||(e[18]=[i("刷新",-1)])]),_:1},8,["icon","loading"])])]),default:s(()=>[t(xe,{modelValue:X.value,"onUpdate:modelValue":e[0]||(e[0]=l=>X.value=l),class:"rbac-tabs"},{default:s(()=>[t(le,{label:"用户管理",name:"users"},{default:s(()=>[v("div",bl,[v("span",gl,"共 "+g(j.value.length)+" 个用户",1),t(o,{type:"primary",icon:E(ue),onClick:ve},{default:s(()=>[...e[20]||(e[20]=[i("新增用户",-1)])]),_:1},8,["icon"])]),ie((u(),w(ee,{data:j.value,size:"default",border:"",stripe:""},{default:s(()=>[t(m,{label:"用户名",prop:"username",width:"140"}),t(m,{label:"显示名",prop:"displayName",width:"150"}),t(m,{label:"角色","min-width":"200"},{default:s(({row:l})=>[(u(!0),b(x,null,R(l.roleIds,r=>(u(),w(q,{key:r,size:"small",effect:"plain",class:"mg-tag"},{default:s(()=>[i(g(me(r)),1)]),_:2},1024))),128)),l.roleIds.length?G("",!0):(u(),b("span",yl,"—"))]),_:1}),t(m,{label:"可用域",width:"180"},{default:s(({row:l})=>[(u(!0),b(x,null,R(l.scopes,r=>(u(),w(q,{key:r,size:"small",type:"info",effect:"plain",class:"mg-tag"},{default:s(()=>[i(g(A(r)),1)]),_:2},1024))),128))]),_:1}),t(m,{label:"启用",width:"90",align:"center"},{default:s(({row:l})=>[t(H,{"model-value":l.enabled,loading:l._busy,onChange:r=>ye(l,!!r)},null,8,["model-value","loading","onChange"])]),_:1}),t(m,{label:"操作",width:"220",align:"center"},{default:s(({row:l})=>[t(o,{link:"",type:"primary",icon:E(de),onClick:r=>be(l)},{default:s(()=>[...e[21]||(e[21]=[i("编辑",-1)])]),_:1},8,["icon","onClick"]),t(o,{link:"",type:"warning",icon:E(He),onClick:r=>we(l)},{default:s(()=>[...e[22]||(e[22]=[i("改密",-1)])]),_:1},8,["icon","onClick"]),t(o,{link:"",type:"danger",icon:E(re),disabled:l.id===z.value,onClick:r=>_e(l)},{default:s(()=>[...e[23]||(e[23]=[i("删除",-1)])]),_:1},8,["icon","disabled","onClick"])]),_:1})]),_:1},8,["data"])),[[ne,B.value]])]),_:1}),t(le,{label:"角色与页面权限",name:"roles"},{default:s(()=>[v("div",_l,[v("span",wl,"共 "+g(S.value.length)+" 个角色",1),t(o,{type:"primary",icon:E(ue),onClick:Ve},{default:s(()=>[...e[24]||(e[24]=[i("新增角色",-1)])]),_:1},8,["icon"])]),ie((u(),w(ee,{data:S.value,size:"default",border:"",stripe:""},{default:s(()=>[t(m,{label:"角色名称",width:"160"},{default:s(({row:l})=>[v("span",null,g(l.name),1),l.system?(u(),w(q,{key:0,size:"small",type:"success",effect:"plain",class:"mg-tag"},{default:s(()=>[...e[25]||(e[25]=[i("内置",-1)])]),_:1})):G("",!0)]),_:1}),t(m,{label:"描述",prop:"description","min-width":"180","show-overflow-tooltip":""}),t(m,{label:"归属域",width:"120"},{default:s(({row:l})=>[t(q,{size:"small",type:fe(l.scope),effect:"plain"},{default:s(()=>[i(g(A(l.scope)),1)]),_:2},1032,["type"])]),_:1}),t(m,{label:"可访问页面",width:"130",align:"center"},{default:s(({row:l})=>[l.pages.includes("*")?(u(),w(q,{key:0,size:"small",type:"danger",effect:"plain"},{default:s(()=>[...e[26]||(e[26]=[i("全部页面",-1)])]),_:1})):(u(),b("span",kl,g(l.pages.length)+" 个",1))]),_:1}),t(m,{label:"操作",width:"160",align:"center"},{default:s(({row:l})=>[t(o,{link:"",type:"primary",icon:E(de),onClick:r=>Ce(l)},{default:s(()=>[...e[27]||(e[27]=[i("编辑",-1)])]),_:1},8,["icon","onClick"]),t(o,{link:"",type:"danger",icon:E(re),disabled:l.system,onClick:r=>$e(l)},{default:s(()=>[...e[28]||(e[28]=[i("删除",-1)])]),_:1},8,["icon","disabled","onClick"])]),_:1})]),_:1},8,["data"])),[[ne,B.value]])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(W,{modelValue:h.value,"onUpdate:modelValue":e[7]||(e[7]=l=>h.value=l),title:n.id?"编辑用户":"新增用户",width:"480px","destroy-on-close":""},{footer:s(()=>[t(o,{onClick:e[6]||(e[6]=l=>h.value=!1)},{default:s(()=>[...e[29]||(e[29]=[i("取消",-1)])]),_:1}),t(o,{type:"primary",loading:C.value,onClick:ge},{default:s(()=>[...e[30]||(e[30]=[i("保存",-1)])]),_:1},8,["loading"])]),default:s(()=>[t(K,{"label-width":"84px","label-position":"right"},{default:s(()=>[t(_,{label:"用户名",required:""},{default:s(()=>[t(P,{modelValue:n.username,"onUpdate:modelValue":e[1]||(e[1]=l=>n.username=l),disabled:!!n.id,placeholder:"登录用户名"},null,8,["modelValue","disabled"])]),_:1}),t(_,{label:"显示名"},{default:s(()=>[t(P,{modelValue:n.displayName,"onUpdate:modelValue":e[2]||(e[2]=l=>n.displayName=l),placeholder:"界面展示名称(留空则同用户名)"},null,8,["modelValue"])]),_:1}),n.id?G("",!0):(u(),w(_,{key:0,label:"初始密码",required:""},{default:s(()=>[t(P,{modelValue:n.password,"onUpdate:modelValue":e[3]||(e[3]=l=>n.password=l),type:"password","show-password":"",placeholder:"设置初始登录密码"},null,8,["modelValue"])]),_:1})),t(_,{label:"角色"},{default:s(()=>[t(te,{modelValue:n.roleIds,"onUpdate:modelValue":e[4]||(e[4]=l=>n.roleIds=l),multiple:"",filterable:"",placeholder:"选择一个或多个角色",style:{width:"100%"}},{default:s(()=>[(u(!0),b(x,null,R(S.value,l=>(u(),w(ae,{key:l.id,label:`${l.name}${A(l.scope)}`,value:l.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(_,{label:"启用"},{default:s(()=>[t(H,{modelValue:n.enabled,"onUpdate:modelValue":e[5]||(e[5]=l=>n.enabled=l)},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue","title"]),t(W,{modelValue:T.value,"onUpdate:modelValue":e[10]||(e[10]=l=>T.value=l),title:"重置密码",width:"420px","destroy-on-close":""},{footer:s(()=>[t(o,{onClick:e[9]||(e[9]=l=>T.value=!1)},{default:s(()=>[...e[31]||(e[31]=[i("取消",-1)])]),_:1}),t(o,{type:"primary",loading:C.value,onClick:ke},{default:s(()=>[...e[32]||(e[32]=[i("确定",-1)])]),_:1},8,["loading"])]),default:s(()=>[t(K,{"label-width":"84px"},{default:s(()=>[t(_,{label:"用户"},{default:s(()=>[v("span",null,g(D.value?.displayName)+""+g(D.value?.username)+"",1)]),_:1}),t(_,{label:"新密码",required:""},{default:s(()=>[t(P,{modelValue:O.value,"onUpdate:modelValue":e[8]||(e[8]=l=>O.value=l),type:"password","show-password":"",placeholder:"输入新密码"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),t(W,{modelValue:I.value,"onUpdate:modelValue":e[17]||(e[17]=l=>I.value=l),title:p.id?"编辑角色":"新增角色",width:"760px",top:"6vh","destroy-on-close":""},{footer:s(()=>[t(o,{onClick:e[16]||(e[16]=l=>I.value=!1)},{default:s(()=>[...e[36]||(e[36]=[i("取消",-1)])]),_:1}),t(o,{type:"primary",loading:C.value,onClick:Ue},{default:s(()=>[...e[37]||(e[37]=[i("保存",-1)])]),_:1},8,["loading"])]),default:s(()=>[t(K,{"label-width":"92px","label-position":"right"},{default:s(()=>[t(he,{gutter:12},{default:s(()=>[t(se,{span:12},{default:s(()=>[t(_,{label:"角色名称",required:""},{default:s(()=>[t(P,{modelValue:p.name,"onUpdate:modelValue":e[11]||(e[11]=l=>p.name=l),placeholder:"如:场景设计员"},null,8,["modelValue"])]),_:1})]),_:1}),t(se,{span:12},{default:s(()=>[t(_,{label:"归属域",required:""},{default:s(()=>[t(te,{modelValue:p.scope,"onUpdate:modelValue":e[12]||(e[12]=l=>p.scope=l),style:{width:"100%"},onChange:Ee},{default:s(()=>[(u(!0),b(x,null,R(M.value?.scopes??[],l=>(u(),w(ae,{key:l.value,label:l.label,value:l.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})]),_:1})]),_:1}),t(_,{label:"描述"},{default:s(()=>[t(P,{modelValue:p.description,"onUpdate:modelValue":e[13]||(e[13]=l=>p.description=l),placeholder:"角色用途说明"},null,8,["modelValue"])]),_:1}),t(Ie,{"content-position":"left"},{default:s(()=>[...e[33]||(e[33]=[i("可访问页面",-1)])]),_:1}),t(_,{label:"授权方式"},{default:s(()=>[t(H,{modelValue:U.value,"onUpdate:modelValue":e[14]||(e[14]=l=>U.value=l),"active-text":"该域全部页面(含未来新增)","inactive-text":"按页面精确勾选","inline-prompt":"",style:{"--el-switch-on-color":"var(--mg-primary, #6366f1)"}},null,8,["modelValue"])]),_:1}),U.value?(u(),b("div",$l,"已授予「"+g(A(p.scope))+"」下的全部页面(包括未来新增的页面)。",1)):(u(),b("div",Vl,[(u(!0),b(x,null,R(Z.value,l=>(u(),b("div",{key:l.group,class:"page-group"},[v("div",Cl,[v("span",El,g(l.group),1),v("span",Ul,[t(o,{link:"",type:"primary",size:"small",onClick:r=>Q(l.pages,!0)},{default:s(()=>[...e[34]||(e[34]=[i("全选",-1)])]),_:1},8,["onClick"]),t(o,{link:"",type:"info",size:"small",onClick:r=>Q(l.pages,!1)},{default:s(()=>[...e[35]||(e[35]=[i("清空",-1)])]),_:1},8,["onClick"])])]),t(Re,{modelValue:y.value,"onUpdate:modelValue":e[15]||(e[15]=r=>y.value=r),class:"page-checks"},{default:s(()=>[(u(!0),b(x,null,R(l.pages,r=>(u(),w(Pe,{key:r.key,value:r.key,label:r.key},{default:s(()=>[i(g(r.label),1)]),_:2},1032,["value","label"]))),128))]),_:2},1032,["modelValue"])]))),128)),Z.value.length?G("",!0):(u(),w(ze,{key:0,description:"该域暂无可分配页面","image-size":60}))]))]),_:1})]),_:1},8,["modelValue","title"])],64)}}}),Jl=ol(xl,[["__scopeId","data-v-2392979d"]]);export{Jl as default};