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