import{o as $,q as o,r as A,ac as K,bn as z,O as c,D as n,s as u,v as m,bo as H,L as k,P as _,bd as J,bb as Q,bh as R,F as O,G as P,bi as W,K as X,T as B,bj as Y,M as f,aC as N,p as S}from"./.pnpm-CyuAWpdG.js";import{_ as Z}from"./index-DIl3M8Wa.js";import{r as V,j as ee}from"./index-Bkarz3gO.js";function F(p){const l=p,t=d=>Array.isArray(d)&&d.every(b=>Number.isSafeInteger(b)&&b>0);if(!l||!t(l.role_ids)||!t(l.admin_ids))throw new Error("可见范围配置响应格式不正确");return{role_ids:[...l.role_ids],admin_ids:[...l.admin_ids]}}async function le(){const p=await V.get({url:"/tcm.prescriptionAi/getVisibilityConfig"});return F(p)}async function ae(p){const l=await V.post({url:"/tcm.prescriptionAi/setVisibilityConfig",params:p});return F(l)}function ie(){return V.get({url:"/tcm.prescriptionAi/visibilityOptions"})}function se(){return V.get({url:"/tcm.prescriptionAi/capabilities"})}const te={class:"prescription-ai-visibility"},oe={key:1,role:"status",class:"mb-5"},ne={class:"w-full max-w-[640px]"},re={class:"w-full max-w-[640px]"},de=$({name:"prescriptionAiVisibility"}),fe=$({...de,setup(p){const l=f(!1),t=f(!1),d=f(!1),b=f(!1),g=f(!1),v=f(""),y=f(""),i=N({role_ids:[],admin_ids:[]}),w=N({roles:[],admins:[]}),L=S(()=>{const a=new Map(w.roles.map(e=>[e.id,e]));for(const e of i.role_ids)a.has(e)||a.set(e,{id:e,name:`已配置角色 #${e}(当前不在可选列表)`});return[...a.values()]}),M=S(()=>{const a=new Map(w.admins.map(e=>[e.id,{id:e.id,label:`${e.name||`用户 #${e.id}`}(${e.account})`}]));for(const e of i.admin_ids)a.has(e)||a.set(e,{id:e,label:`已配置用户 #${e}(当前不在可选列表)`});return[...a.values()]}),x=a=>{i.role_ids=[...a.role_ids],i.admin_ids=[...a.admin_ids]},E=async()=>{if(!(l.value||t.value)){l.value=!0,d.value=!1,g.value=!1,v.value="",y.value="";try{if((await se()).can_manage_visibility!==!0){v.value="当前账号无权管理处方 AI 一致度可见范围。";return}g.value=!0;const[e,s]=await Promise.all([le(),ie()]);if(!Array.isArray(s==null?void 0:s.roles)||!Array.isArray(s==null?void 0:s.admins))throw new Error("可选用户组或用户响应格式不正确");x(e),w.roles=s.roles,w.admins=s.admins,b.value=!0,d.value=!0}catch{v.value="可见范围加载失败,尚未读取完整配置。请重试加载后再保存。"}finally{l.value=!1}}},j=async()=>{if(!(!d.value||!g.value||l.value||t.value)){t.value=!0,y.value="";try{const a=await ae({role_ids:[...i.role_ids],admin_ids:[...i.admin_ids]});x(a),ee.msgSuccess("可见范围已保存")}catch{y.value="保存结果未确认,当前选择已保留。请重试保存,或重新加载以确认服务端策略。"}finally{t.value=!1}}};return E(),(a,e)=>{const s=H,h=W,I=R,C=Q,q=J,D=X,T=Y,U=Z,G=z;return o(),A("div",te,[K((o(),c(T,{shadow:"never",class:"!border-none"},{default:n(()=>[e[7]||(e[7]=u("div",{class:"text-xl font-medium mb-[20px]"},"处方 AI 一致度可见范围",-1)),m(s,{type:"info",closable:!1,"show-icon":"",class:"mb-5"},{title:n(()=>[...e[2]||(e[2]=[k("指定用户组或用户可查看一致度",-1)])]),default:n(()=>[e[3]||(e[3]=u("div",{class:"leading-6"}," 用户命中任一指定系统角色,或被单独指定,即可查看桌面端“与 AI 一致度”、逐味对照和一致度统计。AI 报告继续按原有权限开放,已有报告不受影响,患者与处方的数据范围保持原有规则。 ",-1))]),_:1}),v.value?(o(),c(s,{key:0,title:v.value,type:"error",closable:!1,"show-icon":"",class:"mb-5"},null,8,["title"])):_("",!0),l.value?(o(),A("div",oe,"正在读取当前可见范围…")):_("",!0),b.value?(o(),c(q,{key:2,class:"ls-form",model:i,disabled:!d.value||l.value||t.value,"label-width":"140px"},{default:n(()=>[m(C,{label:"指定用户组",prop:"role_ids"},{default:n(()=>[u("div",ne,[m(I,{modelValue:i.role_ids,"onUpdate:modelValue":e[0]||(e[0]=r=>i.role_ids=r),class:"w-full",multiple:"",filterable:"",clearable:"",placeholder:"请选择系统角色,可搜索角色名称"},{default:n(()=>[(o(!0),A(O,null,P(L.value,r=>(o(),c(h,{key:r.id,label:r.name,value:r.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),e[4]||(e[4]=u("div",{class:"form-tips"},"账号拥有任一指定角色即可命中。",-1))])]),_:1}),m(C,{label:"指定用户",prop:"admin_ids"},{default:n(()=>[u("div",re,[m(I,{modelValue:i.admin_ids,"onUpdate:modelValue":e[1]||(e[1]=r=>i.admin_ids=r),class:"w-full",multiple:"",filterable:"",clearable:"",placeholder:"请选择用户,可搜索姓名或账号"},{default:n(()=>[(o(!0),A(O,null,P(M.value,r=>(o(),c(h,{key:r.id,label:r.label,value:r.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),e[5]||(e[5]=u("div",{class:"form-tips"}," 单独指定的用户无需同时命中用户组。当前不在可选列表中的已配置 ID 会保留,移除后保存才会取消该项授权。 ",-1))])]),_:1}),m(C,{label:"生效规则"},{default:n(()=>[...e[6]||(e[6]=[u("div",null,[u("div",{class:"leading-6"},"指定用户组与指定用户按“或”生效。"),u("div",{class:"form-tips"}," 两项均为空时,所有账号(包括超级管理员)均隐藏一致度、对照与统计。 拥有本页管理权限不自动获得一致度查看权,超级管理员也需命中上述名单。 ")],-1)])]),_:1})]),_:1},8,["model","disabled"])):_("",!0),d.value&&!i.role_ids.length&&!i.admin_ids.length?(o(),c(s,{key:3,title:"当前选择为空:保存后所有账号将隐藏一致度、对照与统计,AI 报告仍保留。",type:"warning",closable:!1,"show-icon":"",class:"mb-5"})):_("",!0),y.value?(o(),c(s,{key:4,title:y.value,type:"error",closable:!1,"show-icon":"",class:"mb-5"},null,8,["title"])):_("",!0),m(D,{disabled:l.value||t.value,onClick:E},{default:n(()=>[k(B(v.value?"重试加载":"重新加载"),1)]),_:1},8,["disabled"])]),_:1})),[[G,l.value]]),g.value?(o(),c(U,{key:0},{default:n(()=>[m(D,{type:"primary",loading:t.value,disabled:!d.value||l.value||t.value,onClick:j},{default:n(()=>[k(B(t.value?"正在保存":"保存"),1)]),_:1},8,["loading","disabled"])]),_:1})):_("",!0)])}}});export{fe as default};