You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
40 KiB
1 lines
40 KiB
import{_ as Xe}from"./CglQi8MB.js";import{g as Ye,B as Ze,c as a,l as h,a as e,d as M,p as c,q as I,F as b,r as k,t as d,m as Ve,L as D,v as y,s as L,n as A,H as Ue,x as m,y as Ce,z as q,o,I as z,C as Z,_ as et}from"./mElhLwm2.js";import{u as tt}from"./C6twYRfy.js";import{u as lt}from"./FVTAbpot.js";import"./ChQPCk92.js";import"./qig5Qp6S.js";const st={key:0,class:"mb-4 rounded-lg px-4 py-3 text-sm",style:{background:"#fffbeb",border:"1px solid #fde68a",color:"#92400e"}},ot={class:"flex items-center justify-between mb-5"},nt={class:"flex items-center gap-3"},at=["value"],it=["value"],dt={key:1,class:"rounded-lg px-3 py-2 mb-4 text-xs",style:{background:"#fefce8",border:"1px solid #fde047",color:"#854d0e"}},ut={key:2,class:"flex flex-col gap-6"},rt={class:"flex items-center gap-2 mb-3"},ct={class:"text-sm font-semibold text-slate-700"},pt={class:"text-xs text-slate-400"},vt={class:"svc-grid"},bt=["onClick"],mt={class:"flex items-start gap-3"},xt={style:{"min-width":"0",flex:"1"}},yt={class:"flex items-center gap-2"},_t={class:"font-semibold text-slate-800 text-sm truncate"},ht=["title"],kt={class:"text-xs text-slate-500 mt-2 line-clamp-2",style:{"min-height":"32px"}},gt={class:"flex flex-wrap items-center gap-1 mt-2"},ft={key:0,class:"provider-chip"},wt={class:"field-count"},Vt={key:1,class:"lock-badge"},Ut=["onClick"],Ct={class:"text-xs text-slate-400 mt-1"},St={key:3,class:"bg-white rounded-2xl border border-slate-100 shadow-sm text-center text-slate-300 py-20"},Tt={class:"svc-box"},$t={class:"flex items-center justify-between mb-5"},Mt={class:"flex items-center gap-3"},At={class:"text-base font-semibold text-slate-800"},zt={class:"text-xs text-slate-400 mt-0.5"},Ft={key:0},Dt={class:"flex gap-2"},Lt={class:"grid grid-cols-2 gap-4 mb-4"},jt={class:"form-control"},Et={class:"form-control"},It={class:"form-control mb-4"},Nt={class:"mb-4"},Rt={class:"text-xs text-slate-500 ml-2"},Bt={key:0,class:"text-xs text-slate-400 py-4 text-center"},Ot={key:1,class:"overflow-x-auto"},Ht={class:"table text-xs"},Pt=["onUpdate:modelValue","title"],Jt=["onUpdate:modelValue"],qt={class:"text-center"},Gt=["onUpdate:modelValue"],Kt={class:"relative"},Qt=["type","onUpdate:modelValue"],Wt=["onClick"],Xt=["onUpdate:modelValue"],Yt=["onUpdate:modelValue"],Zt=["onClick"],el={class:"wizard-steps mb-5"},tl={key:0},ll={key:0},sl={class:"type-grid"},ol=["onClick"],nl={class:"text-sm text-slate-700 mt-2"},al={class:"flex items-center justify-between mb-3"},il={class:"text-sm text-slate-500"},dl={class:"type-grid"},ul=["onClick"],rl={class:"provider-chip"},cl={class:"text-sm text-slate-700 mt-2"},pl={class:"text-[11px] text-slate-400 mt-0.5"},vl={key:0,class:"text-xs text-slate-400 mt-2"},bl={class:"flex items-center justify-between mb-3"},ml={class:"flex items-center gap-2"},xl={key:0,class:"provider-chip"},yl={class:"flex gap-2"},_l={class:"grid grid-cols-2 gap-4 mb-4"},hl={class:"form-control"},kl={class:"form-control"},gl={class:"grid grid-cols-2 gap-4 mb-4"},fl={class:"form-control"},wl={class:"form-control"},Vl={class:"form-control mb-4"},Ul={key:0,class:"text-xs text-slate-400 py-4 text-center"},Cl={key:1,class:"overflow-x-auto"},Sl={class:"table text-xs"},Tl=["onUpdate:modelValue","title"],$l=["onUpdate:modelValue"],Ml={class:"text-center"},Al=["onUpdate:modelValue"],zl={class:"relative"},Fl=["type","onUpdate:modelValue"],Dl=["onClick"],Ll=["onUpdate:modelValue"],jl=["onUpdate:modelValue"],El=["onClick"],Il={key:0,class:"text-center py-10 text-slate-400"},Nl={class:"flex items-center justify-between mb-5"},Rl={class:"flex items-center gap-3"},Bl={class:"text-base font-semibold text-slate-800"},Ol={class:"badge badge-warning badge-sm mt-0.5"},Hl={class:"flex gap-2"},Pl={class:"rounded-lg px-3 py-2 mb-4 text-xs",style:{background:"#fefce8",border:"1px solid #fde047",color:"#854d0e"}},Jl={class:"overflow-x-auto"},ql={class:"table text-xs"},Gl=["title"],Kl={class:"text-slate-500"},Ql={class:"text-center"},Wl={key:0,class:"disabled-badge"},Xl={key:1,class:"override-badge"},Yl={key:2,class:"inherit-badge"},Zl={class:"text-center"},es=["onUpdate:modelValue"],ts={class:"relative"},ls=["type","onUpdate:modelValue","disabled"],ss=["onClick"],os=["onUpdate:modelValue","disabled"],ns=["onUpdate:modelValue","disabled","placeholder"],as={key:0},is={class:"divider text-xs text-slate-400 my-3"},ds={key:0,class:"text-xs text-slate-400 py-2 text-center"},us={key:1,class:"overflow-x-auto"},rs={class:"table text-xs"},cs=["onUpdate:modelValue","title"],ps=["onUpdate:modelValue"],vs={class:"text-center"},bs=["onUpdate:modelValue"],ms={class:"relative"},xs=["type","onUpdate:modelValue"],ys=["onClick"],_s=["onUpdate:modelValue"],hs=["onClick"],ks={class:"modal-overlay",style:{"z-index":"120"}},gs={class:"sync-box"},fs={class:"flex items-start gap-3 mb-4"},ws={style:{width:"42px",height:"42px",background:"linear-gradient(135deg,#4f46e5,#7c3aed)","border-radius":"13px",display:"flex","align-items":"center","justify-content":"center","flex-shrink":"0"}},Vs={style:{width:"20px",height:"20px",color:"#fff"},fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},Us={class:"text-xs text-slate-400 mt-1"},Cs=["innerHTML"],Ss={class:"flex items-center justify-between mb-1"},Ts={class:"flex gap-2"},$s={class:"sync-region-grid"},Ms=["onClick"],As=["checked","onClick"],zs={class:"modal-overlay",style:{"z-index":"130"}},Fs={class:"tpl-box"},Ds={class:"flex items-center justify-between mb-4"},Ls={class:"flex gap-2"},js={class:"tpl-list"},Es={class:"text-xs font-semibold text-slate-500 mb-1"},Is={style:{"min-width":"0",flex:"1"}},Ns={class:"flex items-center gap-2"},Rs={class:"font-semibold text-sm text-slate-800 truncate"},Bs={class:"provider-chip"},Os={key:0,class:"badge badge-xs badge-ghost"},Hs={class:"text-xs text-slate-400 mt-0.5"},Ps={class:"flex gap-1"},Js=["onClick"],qs=["onClick"],Gs={key:0,class:"text-xs text-slate-400 text-center py-6"},Ks={class:"flex items-center justify-between mb-4"},Qs={class:"text-base font-semibold text-slate-800"},Ws={class:"flex gap-2"},Xs={class:"grid grid-cols-2 gap-3 mb-3"},Ys={class:"form-control"},Zs=["disabled"],eo={class:"form-control"},to=["value"],lo={class:"form-control"},so={class:"form-control"},oo={class:"form-control mb-3"},no={class:"overflow-x-auto",style:{"max-height":"34vh"}},ao={class:"table text-xs"},io=["onUpdate:modelValue","title"],uo=["onUpdate:modelValue"],ro={class:"text-center"},co=["onUpdate:modelValue"],po=["onUpdate:modelValue"],vo=["onClick"],bo={key:0},Se=10,mo=Ye({__name:"serviceconfig",setup(xo){const G=[{value:1,label:"中国"},{value:2,label:"美国"},{value:3,label:"东亚"},{value:4,label:"东南亚"},{value:5,label:"南亚"},{value:6,label:"中东"},{value:7,label:"欧洲"},{value:8,label:"俄罗斯"},{value:9,label:"非洲"},{value:10,label:"南美"},{value:11,label:"北美"},{value:12,label:"大洋洲"},{value:13,label:"巴西"},{value:14,label:"印度"}],N=[{v:1,label:"STT 语音识别",short:"STT",color:"#0369a1",bg:"#dbeafe"},{v:8,label:"录音文件识别",short:"录音识别",color:"#0e7490",bg:"#cffafe"},{v:2,label:"TTS 语音合成",short:"TTS",color:"#7c3aed",bg:"#ede9fe"},{v:3,label:"MT 机器翻译",short:"MT",color:"#059669",bg:"#dcfce7"},{v:4,label:"AST 端到端翻译",short:"AST",color:"#c2410c",bg:"#fff7ed"},{v:5,label:"LLM 文本大模型",short:"文本LLM",color:"#b45309",bg:"#fef9c3"},{v:9,label:"多媒体大模型",short:"多媒体LLM",color:"#9333ea",bg:"#f3e8ff"},{v:7,label:"STS 端到端对话",short:"STS",color:"#be185d",bg:"#fce7f3"},{v:6,label:"存储 OSS/COS",short:"存储",color:"#475569",bg:"#f1f5f9"},{v:10,label:"MCP 服务",short:"MCP",color:"#0d9488",bg:"#ccfbf1"}],{webApi:V,consoleApi:Te}=tt(),{success:j,error:U}=lt(),T=m(""),ee=m([]);async function $e(){try{const s=await Te("products/list",{});ee.value=(s??[]).map(l=>l.name).filter(Boolean)}catch{ee.value=[]}}function Me(){w(),X()}function C(s){return N.find(l=>l.v===s)||{short:"?",color:"#999",bg:"#eee",v:0,label:""}}function te(){return x.value===Se?!0:!!p.value&&K(p.value.categories).includes(Se)}function K(s){return(s||"").split(",").map(l=>parseInt(l)||0).filter(l=>l>0)}function ue(s){return(s.fields||[]).filter(l=>l.encrypted).length}const le=m(!0),R=m([]),p=m(null),f=m(0),Q=m(!1),E=m("default"),u=Ce({id:"",name:"",provider:"",description:"",enable:!1}),x=m(0),g=m([]),B=m(""),_=m(1),O=m([]),F=m([]),se=m(!1),H=m([]),W=q(()=>{const s=G.find(l=>l.value===f.value);return s?s.label:"区域"+f.value}),re=q(()=>{const s=N.map(r=>({...r,items:R.value.filter(t=>K(t.categories).includes(r.v))})).filter(r=>r.items.length),l=R.value.filter(r=>!K(r.categories).length);return l.length&&s.push({v:0,label:"未分类",short:"未分类",color:"#64748b",bg:"#f1f5f9",items:l}),s}),Ae=q(()=>N.map(s=>({cat:s.v,label:s.label,items:H.value.filter(l=>l.category===s.v)})).filter(s=>s.items.length));async function X(){try{const s=await V("getsvcconfigs",{app_name:T.value});R.value=s?.items??[],le.value=!0}catch{le.value=!1,R.value=[];return}if(p.value){const s=R.value.find(l=>l.id===p.value.id);s&&(p.value=s)}}async function Y(){try{const s=await V("getsvctemplates",{});H.value=s?.items??[]}catch{H.value=[]}}function ze(){w()}function Fe(s){s&&(p.value=s,Q.value=!0,f.value===0?De():je())}function w(){Q.value=!1,p.value=null}function De(){const s=p.value;u.id=s.id,u.name=s.name||"",u.provider=s.provider||"",u.description=s.description||"",u.enable=!!s.enable,x.value=K(s.categories)[0]||0,g.value=JSON.parse(JSON.stringify(s.fields||[])).map(l=>({...l,_show:!1})),E.value="default"}function oe(s=0){p.value=null,u.id="",u.name="",u.provider="",u.description="",u.enable=!1,x.value=s,g.value=[],B.value="",_.value=s?2:1,E.value="new",Q.value=!0}const ce=q(()=>H.value.filter(s=>s.category===x.value));function Le(s){x.value!==s&&(x.value=s,B.value="",u.provider="",g.value=[]),_.value=2}function pe(s){s?(B.value=s.id,u.provider=s.provider||"",u.name||(u.name=s.name||""),u.id||(u.id=s.id||""),u.description||(u.description=s.description||""),g.value=(s.fields||[]).map(l=>({key:l.key,description:l.description,type:l.type||"",encrypted:!!l.encrypted,def_value:l.def_value||"",sort:l.sort,_show:!1}))):(B.value="",u.provider="",g.value=[]),_.value=3}function ve(){g.value.push({key:"",description:"",encrypted:!1,def_value:"",sort:g.value.length,_show:!1})}function be(s){g.value.splice(s,1),g.value.forEach((l,r)=>{l.sort=r})}async function je(){const s=p.value;se.value=!0,E.value="region";try{const r=(await V("getsvcregionoverride",{app_name:T.value,svc_id:s.id,region:f.value}))?.fields??[];O.value=r.filter(t=>!t.region_only).map(t=>({key:t.key,description:t.description,type:t.type||"",encrypted:!!t.encrypted,is_overridden:!!t.is_overridden,disabled:!!t.disabled,value:t.value||"",_input:t.encrypted?"":t.is_overridden&&t.value||"",_show:!1})),F.value=r.filter(t=>t.region_only).map(t=>({key:t.key,description:t.description,encrypted:!!t.encrypted,_input:t.encrypted?"":t.value||"",_show:!1}))}catch(l){U(l?.message??"加载区域分叉失败"),O.value=[],F.value=[]}finally{se.value=!1}}function Ee(){F.value.push({key:"",description:"",encrypted:!1,_input:"",_show:!1})}function Ie(s){F.value.splice(s,1)}function Ne(s){const l={name:u.name||"",provider:u.provider||"",description:u.description||"",categories:x.value?String(x.value):"",enable:u.enable||!1,fields:g.value.map(r=>({key:r.key,description:r.description,type:r.type||"",encrypted:r.encrypted,def_value:r.def_value,sort:r.sort}))};return s?l.id=u.id||"":l.id=p.value.id,l.app_name=T.value,l}function Re(){const s={},l=[];O.value.forEach(t=>{s[t.key]=t._input||"",t.disabled&&l.push(t.key)});const r=F.value.filter(t=>(t.key||"").trim()).map((t,i)=>({key:t.key.trim(),description:t.description,encrypted:t.encrypted,def_value:t._input||"",sort:i}));return{overrides:s,disabled_keys:l,extra_fields:r}}async function me(s){const l=s||!p.value;if(f.value===0){const r=Ne(l);if(!r.id||!r.name)return U("服务ID 和名称 必填"),!1;const t=l?"addsvcconfig":"updatesvcconfig";try{const i=await V(t,r);return p.value=i,await X(),j("保存成功"),!0}catch(i){return U(i?.message??"保存失败"),!1}}else{const{overrides:r,disabled_keys:t,extra_fields:i}=Re();try{return await V("savesvcregionoverride",{app_name:T.value,svc_id:p.value.id,region:f.value,overrides:r,disabled_keys:t,extra_fields:i}),j("区域分叉已保存"),!0}catch(n){return U(n?.message??"保存失败"),!1}}}async function Be(){if(p.value&&window.confirm("确定删除服务「"+p.value.name+"」及其所有区域分叉?")){try{await V("delsvcconfig",{app_name:T.value,id:p.value.id})}catch(s){U(s?.message??"删除失败");return}w(),j("已删除"),await X()}}const ne=m(!1),ae=m(!1),xe=m(""),ye=m(""),$=m([]),_e=q(()=>G.filter(s=>s.value!==f.value));function ie(s){ae.value=s;const l=p.value?p.value.name:u.name||"新服务",r=f.value===0;xe.value=r?"「"+l+"」默认配置将保存,可同步推送到其他区域。":"「"+l+"」在当前区域的字段分叉将保存,可同步到其他区域。",ye.value=r?"✦ 同步内容:各字段<b>默认值</b>推送为目标区域「覆盖值」,目标区域原有分叉将被替换。":"✦ 同步内容:当前区域的值覆盖 / 区域专属字段 / 停用字段整体复制到目标区域。",$.value=[],ne.value=!0}function he(s){const l=$.value.indexOf(s);l>=0?$.value.splice(l,1):$.value.push(s)}function ke(s){$.value=s?_e.value.map(l=>l.value):[]}function ge(){ne.value=!1}async function Oe(){ge(),await me(ae.value)&&w()}async function He(){const s=$.value.slice();if(ge(),!await me(ae.value))return;const r=p.value?p.value.id:null;if(!s.length||!r){w();return}let t=0;try{t=(await V("syncsvctoregins",{app_name:T.value,svc_id:r,src_region:f.value,target_regions:s}))?.synced??0}catch(n){U(n?.message??"同步失败");return}const i=s.map(n=>{const we=G.find(We=>We.value===n);return we?we.label:"区域"+n});j("已保存并同步到:"+i.join("、")+"("+t+" 个)"),w()}const de=m(!1),P=m("list"),J=m(!1),v=Ce({id:"",category:2,provider:"",name:"",description:""}),S=m([]);function Pe(){P.value="list",de.value=!0,Y()}function Je(){de.value=!1}function fe(s){s?(J.value=!0,v.id=s.id,v.category=s.category||2,v.provider=s.provider||"",v.name=s.name||"",v.description=s.description||"",S.value=(s.fields||[]).map(l=>({key:l.key,description:l.description,type:l.type||"",encrypted:!!l.encrypted,def_value:l.def_value||"",sort:l.sort}))):(J.value=!1,v.id="",v.category=2,v.provider="",v.name="",v.description="",S.value=[]),P.value="form"}function qe(){S.value.push({key:"",description:"",encrypted:!1,def_value:"",sort:S.value.length})}function Ge(s){S.value.splice(s,1),S.value.forEach((l,r)=>{l.sort=r})}async function Ke(){if(!v.id.trim()||!v.name.trim()||!v.provider.trim()){U("模板ID / 展示名 / 服务商标识 必填");return}const s={id:v.id.trim(),category:Number(v.category)||0,provider:v.provider.trim(),name:v.name.trim(),description:v.description.trim(),fields:S.value.map((l,r)=>({key:l.key,description:l.description,type:l.type||"",encrypted:l.encrypted,def_value:l.def_value,sort:r}))};try{await V(J.value?"updatesvctemplate":"addsvctemplate",s)}catch(l){U(l?.message??"保存失败");return}j("模板已保存"),await Y(),P.value="list"}async function Qe(s){if(window.confirm("确定删除模板「"+s.name+"」?"+(s.builtin?"(内置模板下次启动会被重新补回)":""))){try{await V("delsvctemplate",{id:s.id})}catch(l){U(l?.message??"删除失败");return}j("已删除"),await Y()}}return Ze(()=>{$e(),X(),Y()}),(s,l)=>{const r=Xe;return o(),a("div",null,[le.value?h("",!0):(o(),a("div",st," ⚠ 「第三方服务配置」后端接口暂不可用(连接失败),请检查 console 服务是否运行。 ")),e("div",ot,[l[31]||(l[31]=e("div",null,[e("h2",{class:"text-lg font-semibold text-slate-800"},"第三方服务配置"),e("p",{class:"text-xs text-slate-400 mt-1"},[M("按服务类型分组管理已接入的第三方服务(火山引擎、阿里云、Azure 等)。默认展示"),e("b",null,"全局默认"),M("配置,可切换到具体应用;区域默认"),e("b",null,"中国"),M(",切换区域后点击卡片可为该区域覆盖字段值。")])],-1)),e("div",nt,[c(e("select",{"onUpdate:modelValue":l[0]||(l[0]=t=>T.value=t),class:"select select-bordered select-sm",onChange:Me},[l[29]||(l[29]=e("option",{value:""},"全局默认",-1)),(o(!0),a(b,null,k(ee.value,t=>(o(),a("option",{key:t,value:t},"应用:"+d(t),9,at))),128))],544),[[I,T.value]]),c(e("select",{"onUpdate:modelValue":l[1]||(l[1]=t=>f.value=t),class:"select select-bordered select-sm",onChange:ze},[l[30]||(l[30]=e("option",{value:0},"默认(全区域)",-1)),(o(),a(b,null,k(G,t=>e("option",{key:t.value,value:t.value},d(t.label),9,it)),64))],544),[[I,f.value,void 0,{number:!0}]]),e("button",{class:"btn btn-ghost btn-sm",onClick:Pe},"服务商模板"),e("button",{class:"btn btn-primary btn-sm text-white",onClick:l[2]||(l[2]=t=>oe())},"+ 添加服务")])]),f.value!==0?(o(),a("div",dt," ✦ 当前处于「"+d(W.value)+"」区域视图:点击服务卡片编辑该区域的字段分叉(覆盖值 / 停用字段 / 区域专属字段)。要改服务本身的默认配置,请切回「默认(全区域)」。 ",1)):h("",!0),re.value.length?(o(),a("div",ut,[(o(!0),a(b,null,k(re.value,t=>(o(),a("section",{key:t.v},[e("div",rt,[e("span",{class:"cat-chip",style:D({color:t.color,background:t.bg})},d(t.short),5),e("h3",ct,d(t.label),1),e("span",pt,d(t.items.length)+" 个服务",1),l[32]||(l[32]=e("div",{class:"flex-1 h-px bg-slate-100 ml-2"},null,-1))]),e("div",vt,[(o(!0),a(b,null,k(t.items,i=>(o(),a("div",{key:i.id,class:"svc-card",onClick:n=>Fe(i)},[e("div",mt,[e("div",{class:"svc-logo",style:D({background:i.color||"#6366f1"})},d(i.icon||(i.name||"").charAt(0)),5),e("div",xt,[e("div",yt,[e("span",_t,d(i.name),1),e("span",{class:A(["badge badge-xs",i.enable?"badge-success":"badge-ghost"])},d(i.enable?"启用":"停用"),3)]),e("p",{class:"text-[11px] text-slate-400 font-mono truncate mt-0.5",title:i.id},d(i.id),9,ht)])]),e("p",kt,d(i.description||"—"),1),e("div",gt,[i.provider?(o(),a("span",ft,d(i.provider),1)):h("",!0),e("span",wt,d((i.fields||[]).length)+" 字段",1),ue(i)?(o(),a("span",Vt,"🔒"+d(ue(i)),1)):h("",!0)])],8,bt))),128)),e("div",{class:"svc-card add-card",onClick:i=>oe(t.v)},[l[33]||(l[33]=e("span",{class:"text-2xl text-slate-300"},"+",-1)),e("span",Ct,"添加"+d(t.short)+"服务",1)],8,Ut)])]))),128))])):(o(),a("div",St,[l[34]||(l[34]=e("div",{class:"text-5xl mb-3"},"⚙️",-1)),l[35]||(l[35]=e("p",{class:"text-sm mb-4"},"尚未配置任何第三方服务",-1)),e("button",{class:"btn btn-primary btn-sm text-white",onClick:l[3]||(l[3]=t=>oe())},"+ 添加服务")])),Q.value?(o(),a("div",{key:4,class:"modal-overlay",onClick:Ve(w,["self"])},[e("div",Tt,[E.value==="default"&&p.value?(o(),a(b,{key:0},[e("div",$t,[e("div",Mt,[e("div",{class:"svc-logo",style:D({background:p.value.color||"#6366f1",width:"44px",height:"44px",fontSize:"20px"})},d(p.value.icon||(p.value.name||"").charAt(0)),5),e("div",null,[e("h3",At,d(p.value.name),1),e("p",zt,[M(d(p.value.id),1),u.provider?(o(),a("span",Ft," · 服务商 "+d(u.provider),1)):h("",!0)])])]),e("div",Dt,[e("button",{class:"btn btn-error btn-sm btn-outline",onClick:Be},"删除服务"),e("button",{class:"btn btn-primary btn-sm text-white",onClick:l[4]||(l[4]=t=>ie(!1))},"保存"),e("button",{class:"btn btn-ghost btn-sm",onClick:w},"关闭")])]),l[44]||(l[44]=e("div",{class:"divider text-xs text-slate-400 my-3"},"基本信息",-1)),e("div",Lt,[e("div",jt,[l[36]||(l[36]=e("label",{class:"label"},[e("span",{class:"label-text"},"服务名称 *")],-1)),c(e("input",{"onUpdate:modelValue":l[5]||(l[5]=t=>u.name=t),class:"input input-bordered"},null,512),[[y,u.name]])]),e("div",Et,[l[37]||(l[37]=e("label",{class:"label"},[e("span",{class:"label-text"},"启用")],-1)),c(e("input",{"onUpdate:modelValue":l[6]||(l[6]=t=>u.enable=t),type:"checkbox",class:"toggle toggle-primary mt-3"},null,512),[[L,u.enable]])])]),e("div",It,[l[38]||(l[38]=e("label",{class:"label"},[e("span",{class:"label-text"},"服务描述")],-1)),c(e("input",{"onUpdate:modelValue":l[7]||(l[7]=t=>u.description=t),class:"input input-bordered"},null,512),[[y,u.description]])]),e("div",Nt,[l[39]||(l[39]=e("p",{class:"text-sm font-medium text-slate-700 mb-2"},"服务类型",-1)),x.value?(o(),a("span",{key:0,class:"cat-chip",style:D({color:C(x.value).color,background:C(x.value).bg})},d(C(x.value).short),5)):h("",!0),e("span",Rt,d(x.value?C(x.value).label:"未设置"),1),l[40]||(l[40]=e("span",{class:"text-[11px] text-slate-400 ml-2"},"(类型在创建时确定,不可更改)",-1))]),l[45]||(l[45]=e("div",{class:"divider text-xs text-slate-400 my-3"},"配置字段(全区域共用)",-1)),e("div",null,[g.value.length?(o(),a("div",Ot,[e("table",Ht,[l[43]||(l[43]=e("thead",null,[e("tr",null,[e("th",{class:"w-44"},"字段名"),e("th",null,"字段描述"),e("th",{class:"w-16 text-center"},"加密"),e("th",null,"默认值"),e("th",{class:"w-12"})])],-1)),e("tbody",null,[(o(!0),a(b,null,k(g.value,(t,i)=>(o(),a("tr",{key:i},[e("td",null,[c(e("input",{class:"field-input","onUpdate:modelValue":n=>t.key=n,placeholder:"key",title:t.key},null,8,Pt),[[y,t.key]])]),e("td",null,[c(e("input",{class:"field-input","onUpdate:modelValue":n=>t.description=n,placeholder:"用途描述"},null,8,Jt),[[y,t.description]])]),e("td",qt,[c(e("input",{type:"checkbox",class:"checkbox checkbox-xs checkbox-primary","onUpdate:modelValue":n=>t.encrypted=n},null,8,Gt),[[L,t.encrypted]])]),e("td",null,[t.type==="langs"?(o(),z(r,{key:0,modelValue:t.def_value,"onUpdate:modelValue":n=>t.def_value=n,multiple:!0},null,8,["modelValue","onUpdate:modelValue"])):t.type==="lang"?(o(),z(r,{key:1,modelValue:t.def_value,"onUpdate:modelValue":n=>t.def_value=n},null,8,["modelValue","onUpdate:modelValue"])):t.encrypted?(o(),a(b,{key:2},[e("div",Kt,[c(e("input",{type:t._show?"text":"password",class:"field-input pr-14","onUpdate:modelValue":n=>t.def_value=n,placeholder:"留空保留原值"},null,8,Qt),[[Z,t.def_value]]),e("button",{type:"button",class:"absolute right-2 top-1/2 -translate-y-1/2 text-xs text-slate-400 hover:text-slate-700",onClick:n=>t._show=!t._show},d(t._show?"隐藏":"显示"),9,Wt)]),l[41]||(l[41]=e("span",{class:"lock-badge ml-1"},"🔒 加密",-1))],64)):te()&&t.key==="type"?c((o(),a("select",{key:3,class:"field-input","onUpdate:modelValue":n=>t.def_value=n},[...l[42]||(l[42]=[e("option",{value:"0"},"HTTP",-1),e("option",{value:"1"},"SSE",-1)])],8,Xt)),[[I,t.def_value]]):c((o(),a("input",{key:4,class:"field-input","onUpdate:modelValue":n=>t.def_value=n},null,8,Yt)),[[y,t.def_value]])]),e("td",null,[e("button",{class:"btn btn-ghost btn-xs text-error",onClick:n=>be(i)},"×",8,Zt)])]))),128))])])])):(o(),a("p",Bt,"尚无字段,点击下方添加")),e("button",{class:"btn btn-ghost btn-sm mt-2 text-primary",onClick:ve},"+ 添加字段")])],64)):E.value==="new"?(o(),a(b,{key:1},[e("div",{class:"flex items-center justify-between mb-4"},[l[46]||(l[46]=e("h3",{class:"text-base font-semibold text-slate-800"},"新增第三方服务",-1)),e("button",{class:"btn btn-ghost btn-sm",onClick:w},"取消")]),e("div",el,[e("div",{class:A(["wstep",{on:_.value>=1,cur:_.value===1}]),onClick:l[8]||(l[8]=t=>_.value=1)},[l[47]||(l[47]=M("① 服务类型",-1)),x.value?(o(),a("span",tl," · "+d(C(x.value).short),1)):h("",!0)],2),l[49]||(l[49]=e("div",{class:"wline"},null,-1)),e("div",{class:A(["wstep",{on:_.value>=2,cur:_.value===2,disabled:!x.value}]),onClick:l[9]||(l[9]=t=>x.value&&(_.value=2))},[l[48]||(l[48]=M("② 服务商",-1)),u.provider?(o(),a("span",ll," · "+d(u.provider),1)):h("",!0)],2),l[50]||(l[50]=e("div",{class:"wline"},null,-1)),e("div",{class:A(["wstep",{on:_.value>=3,cur:_.value===3,disabled:_.value<3}])},"③ 配置",2)]),_.value===1?(o(),a(b,{key:0},[l[51]||(l[51]=e("p",{class:"text-sm text-slate-500 mb-3"},"请选择要接入的服务类型(每个服务归属单一类型,独立配置):",-1)),e("div",sl,[(o(),a(b,null,k(N,t=>e("div",{key:t.v,class:A(["type-card",{on:x.value===t.v}]),onClick:i=>Le(t.v)},[e("span",{class:"cat-chip",style:D({color:t.color,background:t.bg})},d(t.short),5),e("span",nl,d(t.label),1)],10,ol)),64))])],64)):_.value===2?(o(),a(b,{key:1},[e("div",al,[e("p",il,"为「"+d(C(x.value).label)+"」选择服务商:",1),e("button",{class:"btn btn-ghost btn-xs",onClick:l[10]||(l[10]=t=>_.value=1)},"← 上一步")]),e("div",dl,[(o(!0),a(b,null,k(ce.value,t=>(o(),a("div",{key:t.id,class:A(["type-card",{on:B.value===t.id}]),onClick:i=>pe(t)},[e("span",rl,d(t.provider),1),e("span",cl,d(t.name),1),e("span",pl,d((t.fields||[]).length)+" 字段",1)],10,ul))),128)),e("div",{class:"type-card",onClick:l[11]||(l[11]=t=>pe(null))},[...l[52]||(l[52]=[e("span",{class:"provider-chip",style:{background:"#f1f5f9",color:"#475569"}},"自定义",-1),e("span",{class:"text-sm text-slate-700 mt-2"},"空白自定义",-1),e("span",{class:"text-[11px] text-slate-400 mt-0.5"},"手动添加字段",-1)])])]),ce.value.length?h("",!0):(o(),a("p",vl,"该类型暂无内置模板,可选「空白自定义」,或到「服务商模板」新增。"))],64)):(o(),a(b,{key:2},[e("div",bl,[e("div",ml,[e("span",{class:"cat-chip",style:D({color:C(x.value).color,background:C(x.value).bg})},d(C(x.value).short),5),u.provider?(o(),a("span",xl,d(u.provider),1)):h("",!0)]),e("div",yl,[e("button",{class:"btn btn-ghost btn-xs",onClick:l[12]||(l[12]=t=>_.value=2)},"← 上一步"),e("button",{class:"btn btn-primary btn-sm text-white",onClick:l[13]||(l[13]=t=>ie(!0))},"创建")])]),e("div",_l,[e("div",hl,[l[53]||(l[53]=e("label",{class:"label"},[e("span",{class:"label-text"},[M("服务ID * "),e("span",{class:"text-slate-400 text-xs"},"(唯一,如 tts_azure)")])],-1)),c(e("input",{"onUpdate:modelValue":l[14]||(l[14]=t=>u.id=t),class:"input input-bordered font-mono",placeholder:"tts_azure"},null,512),[[y,u.id]])]),e("div",kl,[l[54]||(l[54]=e("label",{class:"label"},[e("span",{class:"label-text"},"服务名称 *")],-1)),c(e("input",{"onUpdate:modelValue":l[15]||(l[15]=t=>u.name=t),class:"input input-bordered",placeholder:"微软 Azure TTS"},null,512),[[y,u.name]])])]),e("div",gl,[e("div",fl,[l[55]||(l[55]=e("label",{class:"label"},[e("span",{class:"label-text"},[M("服务商标识 "),e("span",{class:"text-slate-400 text-xs"},"(如 azure/alibaba)")])],-1)),c(e("input",{"onUpdate:modelValue":l[16]||(l[16]=t=>u.provider=t),class:"input input-bordered font-mono",placeholder:"azure"},null,512),[[y,u.provider]])]),e("div",wl,[l[56]||(l[56]=e("label",{class:"label"},[e("span",{class:"label-text"},"启用")],-1)),c(e("input",{"onUpdate:modelValue":l[17]||(l[17]=t=>u.enable=t),type:"checkbox",class:"toggle toggle-primary mt-3"},null,512),[[L,u.enable]])])]),e("div",Vl,[l[57]||(l[57]=e("label",{class:"label"},[e("span",{class:"label-text"},"服务描述")],-1)),c(e("input",{"onUpdate:modelValue":l[18]||(l[18]=t=>u.description=t),class:"input input-bordered",placeholder:"简述该服务的用途"},null,512),[[y,u.description]])]),l[61]||(l[61]=e("div",{class:"divider text-xs text-slate-400 my-3"},"配置字段",-1)),e("div",null,[g.value.length?(o(),a("div",Cl,[e("table",Sl,[l[60]||(l[60]=e("thead",null,[e("tr",null,[e("th",{class:"w-44"},"字段名"),e("th",null,"字段描述"),e("th",{class:"w-16 text-center"},"加密"),e("th",null,"默认值"),e("th",{class:"w-12"})])],-1)),e("tbody",null,[(o(!0),a(b,null,k(g.value,(t,i)=>(o(),a("tr",{key:i},[e("td",null,[c(e("input",{class:"field-input","onUpdate:modelValue":n=>t.key=n,placeholder:"key",title:t.key},null,8,Tl),[[y,t.key]])]),e("td",null,[c(e("input",{class:"field-input","onUpdate:modelValue":n=>t.description=n,placeholder:"用途描述"},null,8,$l),[[y,t.description]])]),e("td",Ml,[c(e("input",{type:"checkbox",class:"checkbox checkbox-xs checkbox-primary","onUpdate:modelValue":n=>t.encrypted=n},null,8,Al),[[L,t.encrypted]])]),e("td",null,[t.type==="langs"?(o(),z(r,{key:0,modelValue:t.def_value,"onUpdate:modelValue":n=>t.def_value=n,multiple:!0},null,8,["modelValue","onUpdate:modelValue"])):t.type==="lang"?(o(),z(r,{key:1,modelValue:t.def_value,"onUpdate:modelValue":n=>t.def_value=n},null,8,["modelValue","onUpdate:modelValue"])):t.encrypted?(o(),a(b,{key:2},[e("div",zl,[c(e("input",{type:t._show?"text":"password",class:"field-input pr-14","onUpdate:modelValue":n=>t.def_value=n,placeholder:"留空保留原值"},null,8,Fl),[[Z,t.def_value]]),e("button",{type:"button",class:"absolute right-2 top-1/2 -translate-y-1/2 text-xs text-slate-400 hover:text-slate-700",onClick:n=>t._show=!t._show},d(t._show?"隐藏":"显示"),9,Dl)]),l[58]||(l[58]=e("span",{class:"lock-badge ml-1"},"🔒 加密",-1))],64)):te()&&t.key==="type"?c((o(),a("select",{key:3,class:"field-input","onUpdate:modelValue":n=>t.def_value=n},[...l[59]||(l[59]=[e("option",{value:"0"},"HTTP",-1),e("option",{value:"1"},"SSE",-1)])],8,Ll)),[[I,t.def_value]]):c((o(),a("input",{key:4,class:"field-input","onUpdate:modelValue":n=>t.def_value=n},null,8,jl)),[[y,t.def_value]])]),e("td",null,[e("button",{class:"btn btn-ghost btn-xs text-error",onClick:n=>be(i)},"×",8,El)])]))),128))])])])):(o(),a("p",Ul,"尚无字段,选模板自动带出或点击下方添加")),e("button",{class:"btn btn-ghost btn-sm mt-2 text-primary",onClick:ve},"+ 添加字段")])],64))],64)):E.value==="region"&&p.value?(o(),a(b,{key:2},[se.value?(o(),a("div",Il,"加载中...")):(o(),a(b,{key:1},[e("div",Nl,[e("div",Rl,[e("div",{class:"svc-logo",style:D({background:p.value.color||"#6366f1",width:"44px",height:"44px",fontSize:"20px"})},d(p.value.icon||(p.value.name||"").charAt(0)),5),e("div",null,[e("h3",Bl,d(p.value.name),1),e("span",Ol,d(W.value)+" 分叉模式",1)])]),e("div",Hl,[e("button",{class:"btn btn-primary btn-sm text-white",onClick:l[19]||(l[19]=t=>ie(!1))},"保存分叉"),e("button",{class:"btn btn-ghost btn-sm",onClick:w},"关闭")])]),e("div",Pl," ✦ 当前编辑「"+d(W.value)+"」的字段分叉:默认字段可覆盖值或勾选「不适用」停用;也可新增本区域专属字段。留空的覆盖字段继承默认值,加密字段留空保留已存储密文。 ",1),l[68]||(l[68]=e("p",{class:"text-sm font-medium text-slate-700 mb-2"},"默认字段",-1)),e("div",Jl,[e("table",ql,[l[65]||(l[65]=e("thead",null,[e("tr",null,[e("th",{class:"w-44"},"字段名"),e("th",null,"字段描述"),e("th",{class:"w-24 text-center"},"状态"),e("th",{class:"w-20 text-center"},"本区域不适用"),e("th",null,"有效值")])],-1)),e("tbody",null,[(o(!0),a(b,null,k(O.value,(t,i)=>(o(),a("tr",{key:i,class:A({"opacity-50":t.disabled})},[e("td",{class:"font-mono text-slate-700 break-all",title:t.key},d(t.key),9,Gl),e("td",Kl,d(t.description),1),e("td",Ql,[t.disabled?(o(),a("span",Wl,"停用")):t.is_overridden?(o(),a("span",Xl,"覆盖")):(o(),a("span",Yl,"继承"))]),e("td",Zl,[c(e("input",{type:"checkbox",class:"checkbox checkbox-xs","onUpdate:modelValue":n=>t.disabled=n},null,8,es),[[L,t.disabled]])]),e("td",null,[t.type==="langs"?(o(),z(r,{key:0,modelValue:t._input,"onUpdate:modelValue":n=>t._input=n,multiple:!0,disabled:t.disabled},null,8,["modelValue","onUpdate:modelValue","disabled"])):t.type==="lang"?(o(),z(r,{key:1,modelValue:t._input,"onUpdate:modelValue":n=>t._input=n,disabled:t.disabled},null,8,["modelValue","onUpdate:modelValue","disabled"])):t.encrypted?(o(),a(b,{key:2},[e("div",ts,[c(e("input",{type:t._show?"text":"password",class:"field-input pr-14","onUpdate:modelValue":n=>t._input=n,disabled:t.disabled,placeholder:"留空继承默认"},null,8,ls),[[Z,t._input]]),e("button",{type:"button",class:"absolute right-2 top-1/2 -translate-y-1/2 text-xs text-slate-400 hover:text-slate-700",onClick:n=>t._show=!t._show},d(t._show?"隐藏":"显示"),9,ss)]),l[62]||(l[62]=e("span",{class:"lock-badge ml-1"},"🔒",-1))],64)):te()&&t.key==="type"?c((o(),a("select",{key:3,class:"field-input","onUpdate:modelValue":n=>t._input=n,disabled:t.disabled},[...l[63]||(l[63]=[e("option",{value:""},"继承默认",-1),e("option",{value:"0"},"HTTP",-1),e("option",{value:"1"},"SSE",-1)])],8,os)),[[I,t._input]]):c((o(),a("input",{key:4,class:"field-input","onUpdate:modelValue":n=>t._input=n,disabled:t.disabled,placeholder:"留空继承:"+(t.value||"")},null,8,ns)),[[y,t._input]])])],2))),128)),O.value.length?h("",!0):(o(),a("tr",as,[...l[64]||(l[64]=[e("td",{colspan:"5",class:"text-center text-slate-400 py-3"},"该服务尚无默认字段",-1)])]))])])]),e("div",is,d(W.value)+" 专属字段",1),e("div",null,[F.value.length?(o(),a("div",us,[e("table",rs,[l[67]||(l[67]=e("thead",null,[e("tr",null,[e("th",{class:"w-44"},"字段名"),e("th",null,"字段描述"),e("th",{class:"w-16 text-center"},"加密"),e("th",null,"值"),e("th",{class:"w-12"})])],-1)),e("tbody",null,[(o(!0),a(b,null,k(F.value,(t,i)=>(o(),a("tr",{key:i},[e("td",null,[c(e("input",{class:"field-input","onUpdate:modelValue":n=>t.key=n,placeholder:"key",title:t.key},null,8,cs),[[y,t.key]])]),e("td",null,[c(e("input",{class:"field-input","onUpdate:modelValue":n=>t.description=n,placeholder:"用途描述"},null,8,ps),[[y,t.description]])]),e("td",vs,[c(e("input",{type:"checkbox",class:"checkbox checkbox-xs checkbox-primary","onUpdate:modelValue":n=>t.encrypted=n},null,8,bs),[[L,t.encrypted]])]),e("td",null,[t.encrypted?(o(),a(b,{key:0},[e("div",ms,[c(e("input",{type:t._show?"text":"password",class:"field-input pr-14","onUpdate:modelValue":n=>t._input=n,placeholder:"留空保留原值"},null,8,xs),[[Z,t._input]]),e("button",{type:"button",class:"absolute right-2 top-1/2 -translate-y-1/2 text-xs text-slate-400 hover:text-slate-700",onClick:n=>t._show=!t._show},d(t._show?"隐藏":"显示"),9,ys)]),l[66]||(l[66]=e("span",{class:"lock-badge ml-1"},"🔒",-1))],64)):c((o(),a("input",{key:1,class:"field-input","onUpdate:modelValue":n=>t._input=n},null,8,_s)),[[y,t._input]])]),e("td",null,[e("button",{class:"btn btn-ghost btn-xs text-error",onClick:n=>Ie(i)},"×",8,hs)])]))),128))])])])):(o(),a("p",ds,"尚无区域专属字段,点击下方添加")),e("button",{class:"btn btn-ghost btn-sm mt-2 text-primary",onClick:Ee},"+ 添加区域专属字段")])],64))],64)):h("",!0)])])):h("",!0),c(e("div",ks,[e("div",gs,[e("div",fs,[e("div",ws,[(o(),a("svg",Vs,[...l[69]||(l[69]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"},null,-1)])]))]),e("div",null,[l[70]||(l[70]=e("h3",{class:"text-base font-semibold text-slate-800"},"同步到其他区域",-1)),e("p",Us,d(xe.value),1)])]),e("div",{class:"text-xs px-3 py-2 rounded-lg mb-3",style:{background:"#f0fdf4",border:"1px solid #bbf7d0",color:"#15803d"},innerHTML:ye.value},null,8,Cs),e("div",Ss,[l[71]||(l[71]=e("span",{class:"text-xs font-semibold text-slate-500"},"选择目标区域",-1)),e("div",Ts,[e("button",{class:"btn btn-ghost btn-xs",onClick:l[20]||(l[20]=t=>ke(!0))},"全选"),e("button",{class:"btn btn-ghost btn-xs",onClick:l[21]||(l[21]=t=>ke(!1))},"清空")])]),e("div",$s,[(o(!0),a(b,null,k(_e.value,t=>(o(),a("label",{key:t.value,class:A(["sync-region-item",{checked:$.value.includes(t.value)}]),onClick:i=>he(t.value)},[e("input",{type:"checkbox",class:"checkbox checkbox-xs checkbox-primary",checked:$.value.includes(t.value),onClick:Ve(i=>he(t.value),["stop"])},null,8,As),e("span",null,d(t.label),1)],10,Ms))),128))]),l[72]||(l[72]=e("p",{class:"text-[11px] text-slate-400 mb-5"},"⚠ 已勾选区域将被当前配置(值覆盖 / 区域专属字段 / 停用字段)整体替换;加密字段密文一并同步。",-1)),e("div",{class:"flex gap-3 justify-end"},[e("button",{class:"btn btn-ghost",onClick:Oe},"仅保存当前区域"),e("button",{class:"btn btn-primary text-white",onClick:He},"保存并同步")])])],512),[[Ue,ne.value]]),c(e("div",zs,[e("div",Fs,[P.value==="list"?(o(),a(b,{key:0},[e("div",Ds,[l[73]||(l[73]=e("div",null,[e("h3",{class:"text-base font-semibold text-slate-800"},"服务商模板"),e("p",{class:"text-xs text-slate-400 mt-1"},"模板是字段预设,新增服务时可一键带出。内置模板可编辑;删除后重启会被重新补回。")],-1)),e("div",Ls,[e("button",{class:"btn btn-primary btn-sm text-white",onClick:l[22]||(l[22]=t=>fe())},"+ 新增模板"),e("button",{class:"btn btn-ghost btn-sm",onClick:Je},"关闭")])]),e("div",js,[(o(!0),a(b,null,k(Ae.value,t=>(o(),a("div",{key:t.cat,class:"mb-3"},[e("p",Es,d(t.label),1),(o(!0),a(b,null,k(t.items,i=>(o(),a("div",{key:i.id,class:"tpl-row"},[e("div",Is,[e("div",Ns,[e("span",Rs,d(i.name),1),e("span",Bs,d(i.provider),1),i.builtin?(o(),a("span",Os,"内置")):h("",!0)]),e("p",Hs,d(i.id)+" · "+d((i.fields||[]).length)+" 字段",1)]),e("div",Ps,[e("button",{class:"btn btn-ghost btn-xs",onClick:n=>fe(i)},"编辑",8,Js),e("button",{class:"btn btn-ghost btn-xs text-error",onClick:n=>Qe(i)},"删除",8,qs)])]))),128))]))),128)),H.value.length?h("",!0):(o(),a("p",Gs,"暂无模板"))])],64)):(o(),a(b,{key:1},[e("div",Ks,[e("h3",Qs,d(J.value?"编辑模板":"新增模板"),1),e("div",Ws,[e("button",{class:"btn btn-ghost btn-sm",onClick:l[23]||(l[23]=t=>P.value="list")},"返回"),e("button",{class:"btn btn-primary btn-sm text-white",onClick:Ke},"保存")])]),e("div",Xs,[e("div",Ys,[l[74]||(l[74]=e("label",{class:"label"},[e("span",{class:"label-text text-xs"},"模板ID *")],-1)),c(e("input",{"onUpdate:modelValue":l[24]||(l[24]=t=>v.id=t),disabled:J.value,class:"input input-bordered input-sm font-mono",placeholder:"tts_azure"},null,8,Zs),[[y,v.id]])]),e("div",eo,[l[75]||(l[75]=e("label",{class:"label"},[e("span",{class:"label-text text-xs"},"类别 *")],-1)),c(e("select",{"onUpdate:modelValue":l[25]||(l[25]=t=>v.category=t),class:"select select-bordered select-sm"},[(o(),a(b,null,k(N,t=>e("option",{key:t.v,value:t.v},d(t.label),9,to)),64))],512),[[I,v.category,void 0,{number:!0}]])]),e("div",lo,[l[76]||(l[76]=e("label",{class:"label"},[e("span",{class:"label-text text-xs"},"服务商标识 *")],-1)),c(e("input",{"onUpdate:modelValue":l[26]||(l[26]=t=>v.provider=t),class:"input input-bordered input-sm font-mono",placeholder:"azure"},null,512),[[y,v.provider]])]),e("div",so,[l[77]||(l[77]=e("label",{class:"label"},[e("span",{class:"label-text text-xs"},"展示名 *")],-1)),c(e("input",{"onUpdate:modelValue":l[27]||(l[27]=t=>v.name=t),class:"input input-bordered input-sm",placeholder:"微软 Azure TTS"},null,512),[[y,v.name]])])]),e("div",oo,[l[78]||(l[78]=e("label",{class:"label"},[e("span",{class:"label-text text-xs"},"描述")],-1)),c(e("input",{"onUpdate:modelValue":l[28]||(l[28]=t=>v.description=t),class:"input input-bordered input-sm"},null,512),[[y,v.description]])]),l[81]||(l[81]=e("p",{class:"text-sm font-medium text-slate-700 mb-1"},"字段",-1)),e("div",no,[e("table",ao,[l[80]||(l[80]=e("thead",null,[e("tr",null,[e("th",{class:"w-44"},"字段名"),e("th",null,"字段描述"),e("th",{class:"w-16 text-center"},"加密"),e("th",null,"默认/提示值"),e("th",{class:"w-12"})])],-1)),e("tbody",null,[(o(!0),a(b,null,k(S.value,(t,i)=>(o(),a("tr",{key:i},[e("td",null,[c(e("input",{class:"field-input","onUpdate:modelValue":n=>t.key=n,placeholder:"key",title:t.key},null,8,io),[[y,t.key]])]),e("td",null,[c(e("input",{class:"field-input","onUpdate:modelValue":n=>t.description=n,placeholder:"用途描述"},null,8,uo),[[y,t.description]])]),e("td",ro,[c(e("input",{type:"checkbox",class:"checkbox checkbox-xs checkbox-primary","onUpdate:modelValue":n=>t.encrypted=n},null,8,co),[[L,t.encrypted]])]),e("td",null,[t.type==="langs"?(o(),z(r,{key:0,modelValue:t.def_value,"onUpdate:modelValue":n=>t.def_value=n,multiple:!0},null,8,["modelValue","onUpdate:modelValue"])):t.type==="lang"?(o(),z(r,{key:1,modelValue:t.def_value,"onUpdate:modelValue":n=>t.def_value=n},null,8,["modelValue","onUpdate:modelValue"])):c((o(),a("input",{key:2,class:"field-input","onUpdate:modelValue":n=>t.def_value=n,placeholder:"可留空"},null,8,po)),[[y,t.def_value]])]),e("td",null,[e("button",{class:"btn btn-ghost btn-xs text-error",onClick:n=>Ge(i)},"×",8,vo)])]))),128)),S.value.length?h("",!0):(o(),a("tr",bo,[...l[79]||(l[79]=[e("td",{colspan:"5",class:"text-center text-slate-400 py-2"},"尚无字段",-1)])]))])])]),e("button",{class:"btn btn-ghost btn-sm mt-2 text-primary",onClick:qe},"+ 添加字段")],64))])],512),[[Ue,de.value]])])}}}),wo=et(mo,[["__scopeId","data-v-4e0895d6"]]);export{wo as default};
|
|
|