import{aP as De,r as S,aX as Ve,c as xe,o as ye,q as Qe,Z as Re,x as i,z as t,L as p,C as V,O as l,u as o,K as d,S as z,aq as x,al as I,P as y,aT as C,Q as H,ac as _,aV as X,R as qe,J as Pe,T as je,Y as Le,y as u}from"./vue-vendor-BVUySZOn.js";import{c as B,_ as Ke,s as c}from"./index-BAse2XU9.js";import"./chart-ChB167Jv.js";import"./vendor-Dr8jvgFu.js";import"./element-plus-CKhypU-Q.js";const Oe=De("settings",()=>{const A=S({siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,publicStatsEnabled:!1,publicStatsShowModelDistribution:!0,publicStatsModelDistributionPeriod:"today",publicStatsShowTokenTrends:!1,publicStatsShowApiKeysTrends:!1,publicStatsShowAccountTrends:!1,updatedAt:null}),Q=S(!1),L=S(!1),T=async()=>{Q.value=!0;try{const b=await B.get("/admin/oem-settings");return b&&b.success&&(A.value={...A.value,...b.data},K()),b}catch(b){throw console.error("Failed to load OEM settings:",b),b}finally{Q.value=!1}},n=async b=>{L.value=!0;try{const v=await B.put("/admin/oem-settings",b);return v&&v.success&&(A.value={...A.value,...v.data},K()),v}catch(v){throw console.error("Failed to save OEM settings:",v),v}finally{L.value=!1}},J=async()=>{const b={siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,publicStatsEnabled:!1,updatedAt:null};return A.value={...b},await n(b)},K=()=>{if(A.value.siteName&&(document.title=`${A.value.siteName} - 管理后台`),A.value.siteIconData||A.value.siteIcon){const b=document.querySelector('link[rel="icon"]')||document.createElement("link");b.rel="icon",b.href=A.value.siteIconData||A.value.siteIcon,document.querySelector('link[rel="icon"]')||document.head.appendChild(b)}};return{oemSettings:A,loading:Q,saving:L,loadOemSettings:T,saveOemSettings:n,resetOemSettings:J,applyOemSettings:K,formatDateTime:b=>b?new Date(b).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"",validateIconFile:b=>{const v=[];return b.size>350*1024&&v.push("图标文件大小不能超过 350KB"),["image/x-icon","image/png","image/jpeg","image/jpg","image/svg+xml"].includes(b.type)||v.push("不支持的文件类型,请选择 .ico, .png, .jpg 或 .svg 文件"),{isValid:v.length===0,errors:v}},fileToBase64:b=>new Promise((v,E)=>{const q=new FileReader;q.onload=P=>v(P.target.result),q.onerror=E,q.readAsDataURL(b)})}}),Fe={class:"settings-container"},Ne={class:"card p-4 sm:p-6"},We={class:"mb-6"},$e={class:"flex space-x-8"},ze={key:0,class:"py-12 text-center"},He={key:1},Xe={class:"table-container hidden sm:block"},Je={class:"min-w-full"},Ye={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Ge={class:"table-row"},Ze={class:"px-6 py-4"},_e={class:"table-row"},et={class:"px-6 py-4"},tt={class:"space-y-3"},rt={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},at=["src"],st={class:"table-row"},lt={class:"px-6 py-4"},ot={class:"flex items-center"},nt={class:"inline-flex cursor-pointer items-center"},dt={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},it={class:"px-6 py-6",colspan:"2"},ut={class:"flex items-center justify-between"},gt={class:"flex gap-3"},ft=["disabled"],ct={key:0,class:"loading-spinner mr-2"},bt={key:1,class:"fas fa-save mr-2"},pt=["disabled"],xt={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},yt={class:"space-y-4 sm:hidden"},vt={class:"glass-card p-4"},mt={class:"glass-card p-4"},kt={class:"space-y-3"},ht={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},wt=["src"],St={class:"glass-card p-4"},Tt={class:"space-y-2"},Ut={class:"inline-flex cursor-pointer items-center"},Ct={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},Mt={class:"glass-card p-4"},It={class:"flex flex-col gap-3"},At=["disabled"],Bt={key:0,class:"loading-spinner mr-2"},Et={key:1,class:"fas fa-save mr-2"},Dt=["disabled"],Vt={key:0,class:"text-center text-sm text-gray-500 dark:text-gray-400"},Qt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Rt={class:"flex items-center justify-between"},qt={class:"relative inline-flex cursor-pointer items-center"},Pt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},jt={class:"space-y-3"},Lt={class:"font-medium text-gray-700 dark:text-gray-300"},Kt={class:"ml-2 text-sm text-gray-500 dark:text-gray-400"},Ot={class:"relative inline-flex cursor-pointer items-center"},Ft=["onUpdate:modelValue"],Nt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Wt={class:"mb-4 flex items-center justify-between"},$t={key:0,class:"space-y-4"},zt={class:"flex items-start justify-between"},Ht={class:"flex-1"},Xt={class:"flex items-center"},Jt={class:"font-semibold text-gray-800 dark:text-gray-200"},Yt={class:"text-sm text-gray-500 dark:text-gray-400"},Gt={class:"mt-3 space-y-1 text-sm"},Zt={key:0,class:"flex items-center text-gray-600 dark:text-gray-400"},_t={class:"truncate"},er={key:1,class:"flex items-center text-gray-600 dark:text-gray-400"},tr={class:"truncate"},rr={key:2,class:"flex items-center text-gray-600 dark:text-gray-400"},ar={class:"truncate"},sr={key:3,class:"flex items-center text-gray-600 dark:text-gray-400"},lr={class:"truncate"},or={key:4,class:"flex items-center text-gray-600 dark:text-gray-400"},nr={class:"truncate"},dr={key:5,class:"flex items-center text-gray-600 dark:text-gray-400"},ir={class:"truncate"},ur={key:6,class:"flex items-center text-gray-600 dark:text-gray-400"},gr={class:"ml-4 flex items-center space-x-2"},fr={class:"relative inline-flex cursor-pointer items-center"},cr=["checked","onChange"],br=["onClick"],pr=["onClick"],xr=["onClick"],yr={key:1,class:"py-8 text-center text-gray-500 dark:text-gray-400"},vr={class:"rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},mr={class:"grid grid-cols-1 gap-4 md:grid-cols-3"},kr={key:0,class:"py-12 text-center"},hr={key:1},wr={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Sr={class:"flex items-center justify-between"},Tr={class:"relative inline-flex cursor-pointer items-center"},Ur={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Cr={class:"flex items-center justify-between"},Mr={class:"relative inline-flex cursor-pointer items-center"},Ir={key:0,class:"mt-6 space-y-4"},Ar={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Br={class:"flex items-center justify-between"},Er={class:"relative inline-flex cursor-pointer items-center"},Dr={key:0,class:"mt-6 space-y-4"},Vr={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Qr={class:"flex items-center justify-between"},Rr={class:"relative inline-flex cursor-pointer items-center"},qr={key:0,class:"mt-6 space-y-4"},Pr={key:0,class:"rounded-lg bg-gray-50 p-4 text-sm text-gray-500 dark:bg-gray-700/50 dark:text-gray-400"},jr={key:0,class:"ml-2"},Lr={class:"rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Kr={class:"mb-6 flex items-center justify-between"},Or={class:"inline-flex cursor-pointer items-center"},Fr={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},Nr={key:0,class:"space-y-4 rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-600 dark:bg-gray-700/50"},Wr={class:"grid gap-3 sm:grid-cols-2"},$r={class:"rounded-lg border border-gray-200 bg-white p-3 transition-colors dark:border-gray-600 dark:bg-gray-800"},zr={class:"flex cursor-pointer items-center gap-3"},Hr={key:0,class:"mt-3 pl-7"},Xr={class:"inline-flex rounded-lg bg-gray-100 p-0.5 dark:bg-gray-700/50"},Jr=["onClick"],Yr={class:"flex cursor-pointer items-center gap-3 rounded-lg border border-gray-200 bg-white p-3 transition-colors hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:hover:bg-gray-700"},Gr={class:"flex cursor-pointer items-center gap-3 rounded-lg border border-gray-200 bg-white p-3 transition-colors hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:hover:bg-gray-700"},Zr={class:"flex cursor-pointer items-center gap-3 rounded-lg border border-gray-200 bg-white p-3 transition-colors hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:hover:bg-gray-700"},_r={class:"mt-6 flex items-center justify-between"},ea={class:"flex gap-3"},ta=["disabled"],ra={key:0,class:"loading-spinner mr-2"},aa={key:1,class:"fas fa-save mr-2"},sa={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},la={class:"dark:to-gray-750 relative border-b border-gray-200 bg-gradient-to-r from-blue-50 to-indigo-50 px-6 py-5 dark:border-gray-700 dark:from-gray-800"},oa={class:"flex items-center justify-between"},na={class:"flex items-center space-x-3"},da={class:"text-xl font-semibold text-gray-900 dark:text-white"},ia={class:"mt-0.5 text-sm text-gray-600 dark:text-gray-400"},ua={class:"p-6"},ga={class:"space-y-5"},fa={class:"relative"},ca=["disabled"],ba={key:0,class:"mt-1 text-xs text-amber-600 dark:text-amber-400"},pa={key:0},xa={class:"relative"},ya={key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3"},va={key:1,class:"absolute inset-y-0 right-0 flex items-center pr-3"},ma={key:0,class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},ka={class:"text-sm text-blue-700 dark:text-blue-300"},ha={key:1,class:"space-y-5"},wa={key:2,class:"space-y-5"},Sa={key:3,class:"space-y-5"},Ta={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Ua={key:4,class:"rounded-xl border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-900/50"},Ca={class:"space-y-4"},Ma={class:"flex items-center justify-between"},Ia={class:"flex cursor-pointer items-center",for:"enableSign"},Aa={key:0,class:"rounded-full bg-green-100 px-2 py-1 text-xs font-medium text-green-700 dark:bg-green-900/50 dark:text-green-400"},Ba={key:0},Ea={class:"border-t border-gray-200 bg-gray-50 px-6 py-4 dark:border-gray-700 dark:bg-gray-900/50"},Da={class:"flex items-center justify-between"},Va={class:"flex space-x-3"},Qa=["disabled"],Ra=["disabled"],qa=Object.assign({name:"SettingsView"},{__name:"SettingsView",setup(A){const Q=Oe(),{loading:L,saving:T,oemSettings:n}=Ve(Q),J=[{value:"today",label:"今天"},{value:"24h",label:"24小时"},{value:"7d",label:"7天"},{value:"30d",label:"30天"},{value:"all",label:"全部"}],K=S(),U=S("branding"),f=S(!0),M=S(new AbortController),b=xe({get(){return!n.value.showAdminButton},set(s){n.value.showAdminButton=!s}}),v=S(!1),E=S(!1),q=S(!1),P=S(!1),Y={accountAnomaly:!0,quotaWarning:!0,systemError:!0,securityAlert:!0,rateLimitRecovery:!0},k=S({enabled:!1,platforms:[],notificationTypes:{...Y},retrySettings:{maxRetries:3,retryDelay:1e3,timeout:1e4}}),G=S(!1),g=S({claudeCodeOnlyEnabled:!1,globalSessionBindingEnabled:!1,sessionBindingErrorMessage:"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:30,userMessageQueueEnabled:!1,userMessageQueueDelayMs:200,userMessageQueueTimeoutMs:5e3,concurrentRequestQueueEnabled:!1,concurrentRequestQueueMaxSize:3,concurrentRequestQueueMaxSizeMultiplier:0,concurrentRequestQueueTimeoutMs:1e4,updatedAt:null,updatedBy:null}),j=S(!1),D=S(null),r=S({type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1}),ee=ye(U,async s=>{f.value&&(s==="webhook"?await O():s==="claude"&&await me())}),te=ye(()=>r.value.type,s=>{v.value=!1,E.value=!1,D.value||(s==="bark"?(r.value.url="",r.value.enableSign=!1,r.value.secret="",r.value.botToken="",r.value.chatId="",r.value.apiBaseUrl="",r.value.proxyUrl="",r.value.host="",r.value.port=null,r.value.secure=!1,r.value.user="",r.value.pass="",r.value.from="",r.value.to="",r.value.timeout=null,r.value.ignoreTLS=!1):s==="smtp"?(r.value.url="",r.value.enableSign=!1,r.value.secret="",r.value.deviceKey="",r.value.serverUrl="",r.value.level="",r.value.sound="",r.value.group="",r.value.botToken="",r.value.chatId="",r.value.apiBaseUrl="",r.value.proxyUrl=""):s==="telegram"?(r.value.url="",r.value.enableSign=!1,r.value.secret="",r.value.deviceKey="",r.value.serverUrl="",r.value.level="",r.value.sound="",r.value.group="",r.value.host="",r.value.port=null,r.value.secure=!1,r.value.user="",r.value.pass="",r.value.from="",r.value.to="",r.value.timeout=null,r.value.ignoreTLS=!1,r.value.botToken="",r.value.chatId="",r.value.apiBaseUrl="",r.value.proxyUrl=""):(r.value.deviceKey="",r.value.serverUrl="",r.value.level="",r.value.sound="",r.value.group="",r.value.host="",r.value.port=null,r.value.secure=!1,r.value.user="",r.value.pass="",r.value.from="",r.value.to="",r.value.timeout=null,r.value.ignoreTLS=!1,r.value.botToken="",r.value.chatId="",r.value.apiBaseUrl="",r.value.proxyUrl=""))}),ve=xe(()=>r.value.type==="bark"?!!r.value.deviceKey:r.value.type==="telegram"?!!(r.value.botToken&&r.value.chatId):r.value.type==="smtp"?!!(r.value.host&&r.value.user&&r.value.pass&&r.value.to):!!r.value.url&&!v.value);Qe(async()=>{try{await Q.loadOemSettings(),U.value==="webhook"&&await O()}catch{c("加载设置失败","error")}}),Re(()=>{f.value=!1,M.value&&M.value.abort(),ee&&ee(),te&&te(),j.value&&(j.value=!1,D.value=null)});const O=async()=>{if(f.value)try{const s=await B.get("/admin/webhook/config",{signal:M.value.signal});if(s.success&&f.value){const e=s.config||{};k.value={...e,notificationTypes:{...Y,...e.notificationTypes||{}}}}}catch(s){if(s.name==="AbortError"||!f.value)return;c("获取webhook配置失败","error"),console.error(s)}},F=async()=>{if(f.value)try{const s={...k.value,notificationTypes:{...Y,...k.value.notificationTypes||{}}};(await B.post("/admin/webhook/config",s,{signal:M.value.signal})).success&&f.value&&(k.value=s,c("配置已保存","success"))}catch(s){if(s.name==="AbortError"||!f.value)return;c("保存配置失败","error"),console.error(s)}},me=async()=>{var s,e,a,m,h,$,ie,ue,ge,fe,ce,be,pe;if(f.value){G.value=!0;try{const w=await B.get("/admin/claude-relay-config",{signal:M.value.signal});w.success&&f.value&&(g.value={claudeCodeOnlyEnabled:((s=w.config)==null?void 0:s.claudeCodeOnlyEnabled)??!1,globalSessionBindingEnabled:((e=w.config)==null?void 0:e.globalSessionBindingEnabled)??!1,sessionBindingErrorMessage:((a=w.config)==null?void 0:a.sessionBindingErrorMessage)||"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:((m=w.config)==null?void 0:m.sessionBindingTtlDays)??30,userMessageQueueEnabled:((h=w.config)==null?void 0:h.userMessageQueueEnabled)??!1,userMessageQueueDelayMs:(($=w.config)==null?void 0:$.userMessageQueueDelayMs)??200,userMessageQueueTimeoutMs:((ie=w.config)==null?void 0:ie.userMessageQueueTimeoutMs)??5e3,concurrentRequestQueueEnabled:((ue=w.config)==null?void 0:ue.concurrentRequestQueueEnabled)??!1,concurrentRequestQueueMaxSize:((ge=w.config)==null?void 0:ge.concurrentRequestQueueMaxSize)??3,concurrentRequestQueueMaxSizeMultiplier:((fe=w.config)==null?void 0:fe.concurrentRequestQueueMaxSizeMultiplier)??0,concurrentRequestQueueTimeoutMs:((ce=w.config)==null?void 0:ce.concurrentRequestQueueTimeoutMs)??1e4,updatedAt:((be=w.config)==null?void 0:be.updatedAt)||null,updatedBy:((pe=w.config)==null?void 0:pe.updatedBy)||null})}catch(w){if(w.name==="AbortError"||!f.value)return;c("获取 Claude 转发配置失败","error"),console.error(w)}finally{f.value&&(G.value=!1)}}},R=async()=>{var s,e;if(f.value)try{const a={claudeCodeOnlyEnabled:g.value.claudeCodeOnlyEnabled,globalSessionBindingEnabled:g.value.globalSessionBindingEnabled,sessionBindingErrorMessage:g.value.sessionBindingErrorMessage,sessionBindingTtlDays:g.value.sessionBindingTtlDays,userMessageQueueEnabled:g.value.userMessageQueueEnabled,userMessageQueueDelayMs:g.value.userMessageQueueDelayMs,userMessageQueueTimeoutMs:g.value.userMessageQueueTimeoutMs,concurrentRequestQueueEnabled:g.value.concurrentRequestQueueEnabled,concurrentRequestQueueMaxSize:g.value.concurrentRequestQueueMaxSize,concurrentRequestQueueMaxSizeMultiplier:g.value.concurrentRequestQueueMaxSizeMultiplier,concurrentRequestQueueTimeoutMs:g.value.concurrentRequestQueueTimeoutMs},m=await B.put("/admin/claude-relay-config",a,{signal:M.value.signal});m.success&&f.value&&(g.value={...g.value,updatedAt:((s=m.config)==null?void 0:s.updatedAt)||new Date().toISOString(),updatedBy:((e=m.config)==null?void 0:e.updatedBy)||null},c("Claude 转发配置已保存","success"))}catch(a){if(a.name==="AbortError"||!f.value)return;c("保存 Claude 转发配置失败","error"),console.error(a)}},ke=()=>{if(["bark","smtp","telegram"].includes(r.value.type)){v.value=!1,E.value=!1;return}const s=r.value.url;if(!s){v.value=!1,E.value=!1;return}try{new URL(s),s.startsWith("http://")||s.startsWith("https://")?(v.value=!1,E.value=!0):(v.value=!0,E.value=!1)}catch{v.value=!0,E.value=!1}},re=()=>{if(r.value.type==="bark"){if(!r.value.deviceKey)return c("请输入Bark设备密钥","error"),!1}else if(r.value.type==="telegram"){if(!r.value.botToken)return c("请输入 Telegram 机器人 Token","error"),!1;if(!r.value.chatId)return c("请输入 Telegram Chat ID","error"),!1;if(r.value.apiBaseUrl)try{const s=new URL(r.value.apiBaseUrl);if(!["http:","https:"].includes(s.protocol))return c("Telegram API 基础地址仅支持 http 或 https","error"),!1}catch{return c("请输入有效的 Telegram API 基础地址","error"),!1}if(r.value.proxyUrl)try{const s=new URL(r.value.proxyUrl);if(!["http:","https:","socks4:","socks4a:","socks5:"].includes(s.protocol))return c("Telegram 代理仅支持 http/https/socks 协议","error"),!1}catch{return c("请输入有效的 Telegram 代理地址","error"),!1}}else if(r.value.type==="smtp"){const s=[{field:"host",message:"SMTP服务器"},{field:"user",message:"用户名"},{field:"pass",message:"密码"},{field:"to",message:"收件人邮箱"}];for(const{field:e,message:a}of s)if(!r.value[e])return c(`请输入${a}`,"error"),!1}else{if(!r.value.url)return c("请输入Webhook URL","error"),!1;if(v.value)return c("请输入有效的Webhook URL","error"),!1}return!0},he=async()=>{if(f.value&&re()){P.value=!0;try{let s;D.value?s=await B.put(`/admin/webhook/platforms/${D.value.id}`,r.value,{signal:M.value.signal}):s=await B.post("/admin/webhook/platforms",r.value,{signal:M.value.signal}),s.success&&f.value&&(c(D.value?"平台已更新":"平台已添加","success"),await O(),N())}catch(s){if(s.name==="AbortError"||!f.value)return;c(s.message||"操作失败","error"),console.error(s)}finally{f.value&&(P.value=!1)}}},we=s=>{D.value=s,r.value={type:s.type||"wechat_work",name:s.name||"",url:s.url||"",enableSign:s.enableSign||!1,secret:s.secret||"",botToken:s.botToken||"",chatId:s.chatId||"",apiBaseUrl:s.apiBaseUrl||"",proxyUrl:s.proxyUrl||"",deviceKey:s.deviceKey||"",serverUrl:s.serverUrl||"",level:s.level||"",sound:s.sound||"",group:s.group||"",host:s.host||"",port:s.port??null,secure:s.secure||!1,user:s.user||"",pass:s.pass||"",from:s.from||"",to:Array.isArray(s.to)?s.to.join(", "):s.to||"",timeout:s.timeout??null,ignoreTLS:s.ignoreTLS||!1},j.value=!0},Se=async s=>{if(f.value&&confirm("确定要删除这个平台吗?"))try{(await B.delete(`/admin/webhook/platforms/${s}`,{signal:M.value.signal})).success&&f.value&&(c("平台已删除","success"),await O())}catch(e){if(e.name==="AbortError"||!f.value)return;c("删除失败","error"),console.error(e)}},Te=async s=>{if(f.value)try{const e=await B.post(`/admin/webhook/platforms/${s}/toggle`,{},{signal:M.value.signal});e.success&&f.value&&(c(e.message,"success"),await O())}catch(e){if(e.name==="AbortError"||!f.value)return;c("操作失败","error"),console.error(e)}},Ue=async s=>{if(f.value)try{const e={type:s.type,secret:s.secret,enableSign:s.enableSign};s.type==="bark"?(e.deviceKey=s.deviceKey,e.serverUrl=s.serverUrl,e.level=s.level,e.sound=s.sound,e.group=s.group):s.type==="smtp"?(e.host=s.host,e.port=s.port,e.secure=s.secure,e.user=s.user,e.pass=s.pass,e.from=s.from,e.to=s.to,e.ignoreTLS=s.ignoreTLS):s.type==="telegram"?(e.botToken=s.botToken,e.chatId=s.chatId,e.apiBaseUrl=s.apiBaseUrl,e.proxyUrl=s.proxyUrl):e.url=s.url,(await B.post("/admin/webhook/test",e,{signal:M.value.signal})).success&&f.value&&c("测试成功","success")}catch(e){if(e.name==="AbortError"||!f.value)return;c(e.error||e.message||"测试失败","error"),console.error(e)}},Ce=async()=>{if(f.value&&re()){q.value=!0;try{(await B.post("/admin/webhook/test",r.value,{signal:M.value.signal})).success&&f.value&&c("测试成功","success")}catch(s){if(s.name==="AbortError"||!f.value)return;c(s.error||s.message||"测试失败","error"),console.error(s)}finally{f.value&&(q.value=!1)}}},Me=async()=>{var s,e,a,m;if(f.value)try{(await B.post("/admin/webhook/test-notification",{},{signal:M.value.signal})).success&&f.value&&c("测试通知已发送","success")}catch(h){if(h.name==="AbortError"||!f.value)return;const $=((e=(s=h==null?void 0:h.response)==null?void 0:s.data)==null?void 0:e.message)||((m=(a=h==null?void 0:h.response)==null?void 0:a.data)==null?void 0:m.error)||(h==null?void 0:h.message)||"发送失败";c($,"error"),console.error(h)}},N=()=>{f.value&&(j.value=!1,setTimeout(()=>{f.value&&(D.value=null,r.value={type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1},v.value=!1,E.value=!1,q.value=!1,P.value=!1)},0))},ae=s=>({wechat_work:"企业微信",dingtalk:"钉钉",feishu:"飞书",slack:"Slack",discord:"Discord",telegram:"Telegram",bark:"Bark",smtp:"邮件通知",custom:"自定义"})[s]||s,Ie=s=>({wechat_work:"fab fa-weixin text-green-600",dingtalk:"fas fa-comment-dots text-blue-500",feishu:"fas fa-dove text-blue-600",slack:"fab fa-slack text-purple-600",discord:"fab fa-discord text-indigo-600",telegram:"fab fa-telegram-plane text-sky-500",bark:"fas fa-bell text-orange-500",smtp:"fas fa-envelope text-blue-600",custom:"fas fa-webhook text-gray-600"})[s]||"fas fa-bell",se=s=>({wechat_work:"请在企业微信群机器人设置中获取Webhook地址",dingtalk:"请在钉钉群机器人设置中获取Webhook地址",feishu:"请在飞书群机器人设置中获取Webhook地址",slack:"请在Slack应用的Incoming Webhooks中获取地址",discord:"请在Discord服务器的集成设置中创建Webhook",telegram:"使用 @BotFather 创建机器人并复制 Token,Chat ID 可通过 @userinfobot 或相关工具获取",bark:"请在Bark App中查看您的设备密钥",smtp:"请配置SMTP服务器信息,支持Gmail、QQ邮箱等",custom:"请输入完整的Webhook接收地址"})[s]||"",Ae=s=>s?s.length<=12?s:`${s.slice(0,6)}...${s.slice(-4)}`:"",Be=s=>({accountAnomaly:"账号异常",quotaWarning:"配额警告",systemError:"系统错误",securityAlert:"安全警报",rateLimitRecovery:"限流恢复",test:"测试通知"})[s]||s,Ee=s=>({accountAnomaly:"账号状态异常、认证失败等",quotaWarning:"API调用配额不足警告",systemError:"系统运行错误和故障",securityAlert:"安全相关的警报通知",rateLimitRecovery:"限流状态恢复时发送提醒",test:"用于测试Webhook连接是否正常"})[s]||"",Z=async()=>{try{const s={siteName:n.value.siteName,siteIcon:n.value.siteIcon,siteIconData:n.value.siteIconData,showAdminButton:n.value.showAdminButton,publicStatsEnabled:n.value.publicStatsEnabled,publicStatsShowModelDistribution:n.value.publicStatsShowModelDistribution,publicStatsModelDistributionPeriod:n.value.publicStatsModelDistributionPeriod||"today",publicStatsShowTokenTrends:n.value.publicStatsShowTokenTrends,publicStatsShowApiKeysTrends:n.value.publicStatsShowApiKeysTrends,publicStatsShowAccountTrends:n.value.publicStatsShowAccountTrends},e=await Q.saveOemSettings(s);e&&e.success?c("OEM设置保存成功","success"):c((e==null?void 0:e.message)||"保存失败","error")}catch{c("保存OEM设置失败","error")}},le=async()=>{if(confirm(`确定要重置为默认设置吗? 这将清除所有自定义的网站名称和图标设置。`))try{const s=await Q.resetOemSettings();s&&s.success?c("已重置为默认设置","success"):c("重置失败","error")}catch{c("重置失败","error")}},oe=async s=>{const e=s.target.files[0];if(!e)return;const a=Q.validateIconFile(e);if(!a.isValid){a.errors.forEach(m=>c(m,"error"));return}try{const m=await Q.fileToBase64(e);n.value.siteIconData=m}catch{c("文件读取失败","error")}s.target.value=""},ne=()=>{n.value.siteIcon="",n.value.siteIconData=""},de=()=>{console.warn("Icon failed to load")},W=Q.formatDateTime;return(s,e)=>(u(),i(H,null,[t("div",Fe,[t("div",Ne,[e[141]||(e[141]=t("div",{class:"mb-4 sm:mb-6"},[t("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 系统设置 "),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"},"网站定制和通知配置")],-1)),t("div",We,[t("nav",$e,[t("button",{class:V(["border-b-2 pb-2 text-sm font-medium transition-colors",U.value==="branding"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[0]||(e[0]=a=>U.value="branding")},e[53]||(e[53]=[t("i",{class:"fas fa-palette mr-2"},null,-1),l(" 品牌设置 ",-1)]),2),t("button",{class:V(["border-b-2 pb-2 text-sm font-medium transition-colors",U.value==="webhook"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[1]||(e[1]=a=>U.value="webhook")},e[54]||(e[54]=[t("i",{class:"fas fa-bell mr-2"},null,-1),l(" 通知设置 ",-1)]),2),t("button",{class:V(["border-b-2 pb-2 text-sm font-medium transition-colors",U.value==="claude"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[2]||(e[2]=a=>U.value="claude")},e[55]||(e[55]=[t("i",{class:"fas fa-robot mr-2"},null,-1),l(" Claude 转发 ",-1)]),2),t("button",{class:V(["border-b-2 pb-2 text-sm font-medium transition-colors",U.value==="publicStats"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[3]||(e[3]=a=>U.value="publicStats")},e[56]||(e[56]=[t("i",{class:"fas fa-chart-line mr-2"},null,-1),l(" 公开统计 ",-1)]),2)])]),o(L)?(u(),i("div",ze,e[57]||(e[57]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载设置...",-1)]))):(u(),i("div",He,[d(t("div",null,[t("div",Xe,[t("table",Je,[t("tbody",Ye,[t("tr",Ge,[e[59]||(e[59]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-font text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站名称 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"品牌标识")])])],-1)),t("td",Ze,[d(t("input",{"onUpdate:modelValue":e[4]||(e[4]=a=>o(n).siteName=a),class:"form-input w-full max-w-md dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[x,o(n).siteName]]),e[58]||(e[58]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 将显示在浏览器标题和页面头部 ",-1))])]),t("tr",_e,[e[64]||(e[64]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-image text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站图标 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Favicon")])])],-1)),t("td",et,[t("div",tt,[o(n).siteIconData||o(n).siteIcon?(u(),i("div",rt,[t("img",{alt:"图标预览",class:"h-8 w-8",src:o(n).siteIconData||o(n).siteIcon,onError:de},null,40,at),e[61]||(e[61]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:ne},e[60]||(e[60]=[t("i",{class:"fas fa-trash mr-1"},null,-1),l("删除 ",-1)]))])):p("",!0),t("div",null,[t("input",{ref_key:"iconFileInput",ref:K,accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:oe},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[5]||(e[5]=a=>s.$refs.iconFileInput.click())},e[62]||(e[62]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[63]||(e[63]=t("span",{class:"ml-3 text-xs text-gray-500 dark:text-gray-400"},"支持 .ico, .png, .jpg, .svg 格式,最大 350KB",-1))])])])]),t("tr",st,[e[67]||(e[67]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-indigo-500 to-purple-600"},[t("i",{class:"fas fa-eye-slash text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 管理入口 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"登录按钮显示")])])],-1)),t("td",lt,[t("div",ot,[t("label",nt,[d(t("input",{"onUpdate:modelValue":e[6]||(e[6]=a=>b.value=a),class:"peer sr-only",type:"checkbox"},null,512),[[I,b.value]]),e[65]||(e[65]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",dt,y(b.value?"隐藏登录按钮":"显示登录按钮"),1)])]),e[66]||(e[66]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("tr",null,[t("td",it,[t("div",ut,[t("div",gt,[t("button",{class:V(["btn btn-primary px-6 py-3",{"cursor-not-allowed opacity-50":o(T)}]),disabled:o(T),onClick:Z},[o(T)?(u(),i("div",ct)):(u(),i("i",bt)),l(" "+y(o(T)?"保存中...":"保存设置"),1)],10,ft),t("button",{class:"btn bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:o(T),onClick:le},e[68]||(e[68]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,pt)]),o(n).updatedAt?(u(),i("div",xt,[e[69]||(e[69]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 最后更新:"+y(o(W)(o(n).updatedAt)),1)])):p("",!0)])])])])])]),t("div",yt,[t("div",vt,[e[70]||(e[70]=C('

站点名称

自定义您的站点品牌名称

',1)),d(t("input",{"onUpdate:modelValue":e[7]||(e[7]=a=>o(n).siteName=a),class:"form-input w-full dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[x,o(n).siteName]])]),t("div",mt,[e[74]||(e[74]=C('

站点图标

上传自定义图标或输入图标URL

',1)),t("div",kt,[o(n).siteIconData||o(n).siteIcon?(u(),i("div",ht,[t("img",{alt:"图标预览",class:"h-8 w-8",src:o(n).siteIconData||o(n).siteIcon,onError:de},null,40,wt),e[71]||(e[71]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:ne}," 删除 ")])):p("",!0),t("div",null,[t("input",{ref:"iconFileInputMobile",accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:oe},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[8]||(e[8]=a=>s.$refs.iconFileInputMobile.click())},e[72]||(e[72]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[73]||(e[73]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 支持 .ico, .png, .jpg, .svg 格式,最大 350KB ",-1))])])]),t("div",St,[e[77]||(e[77]=C('

管理入口

控制登录按钮在首页的显示

',1)),t("div",Tt,[t("label",Ut,[d(t("input",{"onUpdate:modelValue":e[9]||(e[9]=a=>b.value=a),class:"peer sr-only",type:"checkbox"},null,512),[[I,b.value]]),e[75]||(e[75]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",Ct,y(b.value?"隐藏登录按钮":"显示登录按钮"),1)]),e[76]||(e[76]=t("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("div",Mt,[t("div",It,[t("button",{class:V(["btn btn-primary w-full px-6 py-3",{"cursor-not-allowed opacity-50":o(T)}]),disabled:o(T),onClick:Z},[o(T)?(u(),i("div",Bt)):(u(),i("i",Et)),l(" "+y(o(T)?"保存中...":"保存设置"),1)],10,At),t("button",{class:"btn w-full bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:o(T),onClick:le},e[78]||(e[78]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,Dt),o(n).updatedAt?(u(),i("div",Vt,[e[79]||(e[79]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 上次更新: "+y(o(W)(o(n).updatedAt)),1)])):p("",!0)])])])],512),[[z,U.value==="branding"]]),d(t("div",null,[t("div",Qt,[t("div",Rt,[e[81]||(e[81]=t("div",null,[t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"启用通知"),t("p",{class:"mt-1 text-sm text-gray-600 dark:text-gray-400"}," 开启后,系统将按配置发送通知到指定平台 ")],-1)),t("label",qt,[d(t("input",{"onUpdate:modelValue":e[10]||(e[10]=a=>k.value.enabled=a),class:"peer sr-only",type:"checkbox",onChange:F},null,544),[[I,k.value.enabled]]),e[80]||(e[80]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])])]),t("div",Pt,[e[83]||(e[83]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知类型",-1)),t("div",jt,[(u(!0),i(H,null,_(k.value.notificationTypes,(a,m)=>(u(),i("div",{key:m,class:"flex items-center justify-between"},[t("div",null,[t("span",Lt,y(Be(m)),1),t("span",Kt,y(Ee(m)),1)]),t("label",Ot,[d(t("input",{"onUpdate:modelValue":h=>k.value.notificationTypes[m]=h,class:"peer sr-only",type:"checkbox",onChange:F},null,40,Ft),[[I,k.value.notificationTypes[m]]]),e[82]||(e[82]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))])]))),128))])]),t("div",Nt,[t("div",Wt,[e[85]||(e[85]=t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知平台",-1)),t("button",{class:"rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-blue-700",onClick:e[11]||(e[11]=a=>j.value=!0)},e[84]||(e[84]=[t("i",{class:"fas fa-plus mr-2"},null,-1),l(" 添加平台 ",-1)]))]),k.value.platforms&&k.value.platforms.length>0?(u(),i("div",$t,[(u(!0),i(H,null,_(k.value.platforms,a=>(u(),i("div",{key:a.id,class:"rounded-lg border border-gray-200 p-4 dark:border-gray-700"},[t("div",zt,[t("div",Ht,[t("div",Xt,[t("i",{class:V(["mr-3 text-xl",Ie(a.type)])},null,2),t("div",null,[t("h3",Jt,y(a.name||ae(a.type)),1),t("p",Yt,y(ae(a.type)),1)])]),t("div",Gt,[a.type!=="smtp"&&a.type!=="telegram"?(u(),i("div",Zt,[e[86]||(e[86]=t("i",{class:"fas fa-link mr-2"},null,-1)),t("span",_t,y(a.url),1)])):p("",!0),a.type==="telegram"?(u(),i("div",er,[e[87]||(e[87]=t("i",{class:"fas fa-comments mr-2"},null,-1)),t("span",tr,"Chat ID: "+y(a.chatId||"未配置"),1)])):p("",!0),a.type==="telegram"&&a.botToken?(u(),i("div",rr,[e[88]||(e[88]=t("i",{class:"fas fa-key mr-2"},null,-1)),t("span",ar,"Token: "+y(Ae(a.botToken)),1)])):p("",!0),a.type==="telegram"&&a.apiBaseUrl?(u(),i("div",sr,[e[89]||(e[89]=t("i",{class:"fas fa-globe mr-2"},null,-1)),t("span",lr,"API: "+y(a.apiBaseUrl),1)])):p("",!0),a.type==="telegram"&&a.proxyUrl?(u(),i("div",or,[e[90]||(e[90]=t("i",{class:"fas fa-route mr-2"},null,-1)),t("span",nr,"代理: "+y(a.proxyUrl),1)])):p("",!0),a.type==="smtp"&&a.to?(u(),i("div",dr,[e[91]||(e[91]=t("i",{class:"fas fa-envelope mr-2"},null,-1)),t("span",ir,y(Array.isArray(a.to)?a.to.join(", "):a.to),1)])):p("",!0),a.enableSign?(u(),i("div",ur,e[92]||(e[92]=[t("i",{class:"fas fa-shield-alt mr-2"},null,-1),t("span",null,"已启用签名验证",-1)]))):p("",!0)])]),t("div",gr,[t("label",fr,[t("input",{checked:a.enabled,class:"peer sr-only",type:"checkbox",onChange:m=>Te(a.id)},null,40,cr),e[93]||(e[93]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))]),t("button",{class:"rounded-lg bg-blue-100 p-2 text-blue-600 transition-colors hover:bg-blue-200 dark:bg-blue-900 dark:text-blue-400 dark:hover:bg-blue-800",title:"测试连接",onClick:m=>Ue(a)},e[94]||(e[94]=[t("i",{class:"fas fa-vial"},null,-1)]),8,br),t("button",{class:"rounded-lg bg-gray-100 p-2 text-gray-600 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600",title:"编辑",onClick:m=>we(a)},e[95]||(e[95]=[t("i",{class:"fas fa-edit"},null,-1)]),8,pr),t("button",{class:"rounded-lg bg-red-100 p-2 text-red-600 transition-colors hover:bg-red-200 dark:bg-red-900 dark:text-red-400 dark:hover:bg-red-800",title:"删除",onClick:m=>Se(a.id)},e[96]||(e[96]=[t("i",{class:"fas fa-trash"},null,-1)]),8,xr)])])]))),128))])):(u(),i("div",yr,' 暂无配置的通知平台,请点击"添加平台"按钮添加 '))]),t("div",vr,[e[100]||(e[100]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"高级设置",-1)),t("div",mr,[t("div",null,[e[97]||(e[97]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最大重试次数 ",-1)),d(t("input",{"onUpdate:modelValue":e[12]||(e[12]=a=>k.value.retrySettings.maxRetries=a),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",type:"number",onChange:F},null,544),[[x,k.value.retrySettings.maxRetries,void 0,{number:!0}]])]),t("div",null,[e[98]||(e[98]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 重试延迟 (毫秒) ",-1)),d(t("input",{"onUpdate:modelValue":e[13]||(e[13]=a=>k.value.retrySettings.retryDelay=a),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"100",step:"100",type:"number",onChange:F},null,544),[[x,k.value.retrySettings.retryDelay,void 0,{number:!0}]])]),t("div",null,[e[99]||(e[99]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 超时时间 (毫秒) ",-1)),d(t("input",{"onUpdate:modelValue":e[14]||(e[14]=a=>k.value.retrySettings.timeout=a),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"30000",min:"1000",step:"1000",type:"number",onChange:F},null,544),[[x,k.value.retrySettings.timeout,void 0,{number:!0}]])])])]),t("div",{class:"mt-6 text-center"},[t("button",{class:"rounded-lg bg-green-600 px-6 py-3 text-white shadow-lg transition-all hover:bg-green-700 hover:shadow-xl",onClick:Me},e[101]||(e[101]=[t("i",{class:"fas fa-paper-plane mr-2"},null,-1),l(" 发送测试通知 ",-1)]))])],512),[[z,U.value==="webhook"]]),d(t("div",null,[G.value?(u(),i("div",kr,e[102]||(e[102]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载配置...",-1)]))):(u(),i("div",hr,[t("div",wr,[t("div",Sr,[e[104]||(e[104]=C('

仅允许 Claude Code 客户端

启用后,所有 /api/v1/messages/claude/v1/messages 端点将强制验证 Claude Code CLI 客户端

',1)),t("label",Tr,[d(t("input",{"onUpdate:modelValue":e[15]||(e[15]=a=>g.value.claudeCodeOnlyEnabled=a),class:"peer sr-only",type:"checkbox",onChange:R},null,544),[[I,g.value.claudeCodeOnlyEnabled]]),e[103]||(e[103]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-orange-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-orange-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-orange-800"},null,-1))])]),e[105]||(e[105]=C('

此设置与 API Key 级别的客户端限制是 OR 逻辑:全局启用或 API Key 设置中启用,都会执行 Claude Code 验证。

',1))]),t("div",Ur,[t("div",Cr,[e[107]||(e[107]=C('

强制会话绑定

启用后,系统会将原始会话 ID 绑定到首次使用的账户,确保上下文的一致性

',1)),t("label",Mr,[d(t("input",{"onUpdate:modelValue":e[16]||(e[16]=a=>g.value.globalSessionBindingEnabled=a),class:"peer sr-only",type:"checkbox",onChange:R},null,544),[[I,g.value.globalSessionBindingEnabled]]),e[106]||(e[106]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-purple-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-purple-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-purple-800"},null,-1))])]),g.value.globalSessionBindingEnabled?(u(),i("div",Ir,[t("div",null,[e[108]||(e[108]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-clock mr-2 text-gray-400"}),l(" 绑定有效期(天) ")],-1)),d(t("input",{"onUpdate:modelValue":e[17]||(e[17]=a=>g.value.sessionBindingTtlDays=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"365",min:"1",placeholder:"30",type:"number",onChange:R},null,544),[[x,g.value.sessionBindingTtlDays,void 0,{number:!0}]]),e[109]||(e[109]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 会话绑定到账户后的有效时间,过期后会自动解除绑定 ",-1))]),t("div",null,[e[110]||(e[110]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-exclamation-triangle mr-2 text-gray-400"}),l(" 旧会话污染提示 ")],-1)),d(t("textarea",{"onUpdate:modelValue":e[18]||(e[18]=a=>g.value.sessionBindingErrorMessage=a),class:"mt-1 block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",placeholder:"你的本地session已污染,请清理后使用。",rows:"2",onChange:R},null,544),[[x,g.value.sessionBindingErrorMessage]]),e[111]||(e[111]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当检测到为旧的sessionId且未在系统中有调度记录时提示,返回给客户端的错误消息 ",-1))])])):p("",!0),e[112]||(e[112]=C('

工作原理:系统会提取请求中的原始 session ID (来自 metadata.user_id), 并将其与首次调度的账户绑定。后续使用相同 session ID 的请求将自动路由到同一账户。

新会话识别:如果绑定会话历史中没有该sessionId但请求中 messages.length > 1, 系统会认为这是一个污染的会话并拒绝请求。

',1))]),t("div",Ar,[t("div",Br,[e[114]||(e[114]=C('

用户消息串行队列

启用后,同一账户的用户消息请求将串行执行,并在请求之间添加延迟,防止触发上游限流

',1)),t("label",Er,[d(t("input",{"onUpdate:modelValue":e[19]||(e[19]=a=>g.value.userMessageQueueEnabled=a),class:"peer sr-only",type:"checkbox",onChange:R},null,544),[[I,g.value.userMessageQueueEnabled]]),e[113]||(e[113]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-teal-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-teal-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-teal-800"},null,-1))])]),g.value.userMessageQueueEnabled?(u(),i("div",Dr,[t("div",null,[e[115]||(e[115]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-hourglass-half mr-2 text-gray-400"}),l(" 请求间隔(毫秒) ")],-1)),d(t("input",{"onUpdate:modelValue":e[20]||(e[20]=a=>g.value.userMessageQueueDelayMs=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"0",placeholder:"200",type:"number",onChange:R},null,544),[[x,g.value.userMessageQueueDelayMs,void 0,{number:!0}]]),e[116]||(e[116]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 同一账户的用户消息请求之间的最小间隔时间(0-10000毫秒) ",-1))]),t("div",null,[e[117]||(e[117]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 队列超时(毫秒) ")],-1)),d(t("input",{"onUpdate:modelValue":e[21]||(e[21]=a=>g.value.userMessageQueueTimeoutMs=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"1000",placeholder:"30000",type:"number",onChange:R},null,544),[[x,g.value.userMessageQueueTimeoutMs,void 0,{number:!0}]]),e[118]||(e[118]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在队列中等待的最大时间,超时将返回 503 错误(1000-300000毫秒) ",-1))])])):p("",!0),e[119]||(e[119]=C('

工作原理:系统检测请求中最后一条消息的 role 是否为 user。用户消息请求需要排队串行执行,而工具调用结果、助手消息续传等不受此限制。

',1))]),t("div",Vr,[t("div",Qr,[e[121]||(e[121]=C('

并发请求排队

当 API Key 并发请求超限时进入队列等待,而非直接拒绝

',1)),t("label",Rr,[d(t("input",{"onUpdate:modelValue":e[22]||(e[22]=a=>g.value.concurrentRequestQueueEnabled=a),class:"peer sr-only",type:"checkbox",onChange:R},null,544),[[I,g.value.concurrentRequestQueueEnabled]]),e[120]||(e[120]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])]),g.value.concurrentRequestQueueEnabled?(u(),i("div",qr,[t("div",null,[e[122]||(e[122]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-list-ol mr-2 text-gray-400"}),l(" 固定最小排队数 ")],-1)),d(t("input",{"onUpdate:modelValue":e[23]||(e[23]=a=>g.value.concurrentRequestQueueMaxSize=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"100",min:"1",placeholder:"3",type:"number",onChange:R},null,544),[[x,g.value.concurrentRequestQueueMaxSize,void 0,{number:!0}]]),e[123]||(e[123]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数的固定最小值(1-100) ",-1))]),t("div",null,[e[124]||(e[124]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-times mr-2 text-gray-400"}),l(" 排队数倍数 ")],-1)),d(t("input",{"onUpdate:modelValue":e[24]||(e[24]=a=>g.value.concurrentRequestQueueMaxSizeMultiplier=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",placeholder:"1",step:"0.5",type:"number",onChange:R},null,544),[[x,g.value.concurrentRequestQueueMaxSizeMultiplier,void 0,{number:!0}]]),e[125]||(e[125]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数 = MAX(倍数 × 并发限制, 固定值),设为 0 则仅使用固定值 ",-1))]),t("div",null,[e[126]||(e[126]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 排队超时时间(毫秒) ")],-1)),d(t("input",{"onUpdate:modelValue":e[25]||(e[25]=a=>g.value.concurrentRequestQueueTimeoutMs=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"5000",placeholder:"10000",type:"number",onChange:R},null,544),[[x,g.value.concurrentRequestQueueTimeoutMs,void 0,{number:!0}]]),e[127]||(e[127]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在排队中等待的最大时间,超时将返回 429 错误(5秒-5分钟,默认10秒) ",-1))])])):p("",!0),e[128]||(e[128]=C('

工作原理:当 API Key 的并发请求超过 concurrencyLimit 时,超限请求会进入队列等待而非直接返回 429。适合 Claude Code Agent 并行工具调用场景。

',1))]),g.value.updatedAt?(u(),i("div",Pr,[e[131]||(e[131]=t("i",{class:"fas fa-history mr-2"},null,-1)),l(" 最后更新:"+y(o(W)(g.value.updatedAt))+" ",1),g.value.updatedBy?(u(),i("span",jr,[e[129]||(e[129]=l(" 由 ",-1)),t("strong",null,y(g.value.updatedBy),1),e[130]||(e[130]=l(" 修改 ",-1))])):p("",!0)])):p("",!0)]))],512),[[z,U.value==="claude"]]),d(t("div",null,[t("div",Lr,[t("div",Kr,[e[133]||(e[133]=C('

公开统计概览

配置未登录用户可见的统计数据

',1)),t("label",Or,[d(t("input",{"onUpdate:modelValue":e[26]||(e[26]=a=>o(n).publicStatsEnabled=a),class:"peer sr-only",type:"checkbox"},null,512),[[I,o(n).publicStatsEnabled]]),e[132]||(e[132]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-green-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-green-800"},null,-1)),t("span",Fr,y(o(n).publicStatsEnabled?"已启用":"已禁用"),1)])]),o(n).publicStatsEnabled?(u(),i("div",Nr,[e[139]||(e[139]=t("p",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-eye mr-2 text-gray-400"}),l(" 选择要公开显示的数据: ")],-1)),t("div",Wr,[t("div",$r,[t("label",zr,[d(t("input",{"onUpdate:modelValue":e[27]||(e[27]=a=>o(n).publicStatsShowModelDistribution=a),class:"h-4 w-4 rounded border-gray-300 text-green-600 focus:ring-green-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[I,o(n).publicStatsShowModelDistribution]]),e[134]||(e[134]=t("div",null,[t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"模型使用分布"),t("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"显示各模型的使用占比")],-1))]),o(n).publicStatsShowModelDistribution?(u(),i("div",Hr,[e[135]||(e[135]=t("div",{class:"mb-1.5 text-xs text-gray-500 dark:text-gray-400"},"时间范围",-1)),t("div",Xr,[(u(),i(H,null,_(J,a=>t("button",{key:a.value,class:V(["rounded-md px-2.5 py-1 text-xs font-medium transition-all",o(n).publicStatsModelDistributionPeriod===a.value?"bg-white text-green-600 shadow-sm dark:bg-gray-600 dark:text-green-400":"text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200"]),type:"button",onClick:m=>o(n).publicStatsModelDistributionPeriod=a.value},y(a.label),11,Jr)),64))])])):p("",!0)]),t("label",Yr,[d(t("input",{"onUpdate:modelValue":e[28]||(e[28]=a=>o(n).publicStatsShowTokenTrends=a),class:"h-4 w-4 rounded border-gray-300 text-green-600 focus:ring-green-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[I,o(n).publicStatsShowTokenTrends]]),e[136]||(e[136]=t("div",null,[t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"Token 使用趋势"),t("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"显示近7天的Token使用量")],-1))]),t("label",Gr,[d(t("input",{"onUpdate:modelValue":e[29]||(e[29]=a=>o(n).publicStatsShowApiKeysTrends=a),class:"h-4 w-4 rounded border-gray-300 text-green-600 focus:ring-green-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[I,o(n).publicStatsShowApiKeysTrends]]),e[137]||(e[137]=t("div",null,[t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"API Keys 活跃趋势"),t("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 显示近7天的活跃API Key数量 ")],-1))]),t("label",Zr,[d(t("input",{"onUpdate:modelValue":e[30]||(e[30]=a=>o(n).publicStatsShowAccountTrends=a),class:"h-4 w-4 rounded border-gray-300 text-green-600 focus:ring-green-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[I,o(n).publicStatsShowAccountTrends]]),e[138]||(e[138]=t("div",null,[t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"账号活跃趋势"),t("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"显示近7天的活跃账号数量")],-1))])])])):p("",!0),t("div",_r,[t("div",ea,[t("button",{class:V(["btn btn-primary px-6 py-3",{"cursor-not-allowed opacity-50":o(T)}]),disabled:o(T),onClick:Z},[o(T)?(u(),i("div",ra)):(u(),i("i",aa)),l(" "+y(o(T)?"保存中...":"保存设置"),1)],10,ta)]),o(n).updatedAt?(u(),i("div",sa,[e[140]||(e[140]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 最后更新:"+y(o(W)(o(n).updatedAt)),1)])):p("",!0)])])],512),[[z,U.value==="publicStats"]])]))])]),j.value?(u(),i("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm transition-all duration-300 ease-out",onClick:N},[t("div",{class:"relative mx-4 w-full max-w-2xl overflow-hidden rounded-2xl bg-white shadow-2xl transition-all duration-300 ease-out dark:bg-gray-800",onClick:e[52]||(e[52]=Le(()=>{},["stop"]))},[t("div",la,[t("div",oa,[t("div",na,[e[142]||(e[142]=t("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gradient-to-br from-blue-500 to-indigo-600 text-white shadow-lg"},[t("i",{class:"fas fa-bell"})],-1)),t("div",null,[t("h3",da,y(D.value?"编辑":"添加")+"通知平台 ",1),t("p",ia," 配置"+y(D.value?"并更新":"新的")+"Webhook通知渠道 ",1)])]),t("button",{class:"rounded-lg p-2 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:N},e[143]||(e[143]=[t("i",{class:"fas fa-times text-lg"},null,-1)]))])]),t("div",ua,[t("div",ga,[t("div",null,[e[147]||(e[147]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-layer-group mr-2 text-gray-400"}),l(" 平台类型 ")],-1)),t("div",fa,[d(t("select",{"onUpdate:modelValue":e[31]||(e[31]=a=>r.value.type=a),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",disabled:D.value},e[144]||(e[144]=[C('',9)]),8,ca),[[X,r.value.type]]),e[145]||(e[145]=t("div",{class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3"},[t("i",{class:"fas fa-chevron-down text-gray-400"})],-1))]),D.value?(u(),i("p",ba,e[146]||(e[146]=[t("i",{class:"fas fa-info-circle mr-1"},null,-1),l(" 编辑模式下不能更改平台类型 ",-1)]))):p("",!0)]),t("div",null,[e[148]||(e[148]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-tag mr-2 text-gray-400"}),l(" 名称 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[32]||(e[32]=a=>r.value.name=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:运维群通知、开发测试群",type:"text"},null,512),[[x,r.value.name]])]),r.value.type!=="bark"&&r.value.type!=="smtp"&&r.value.type!=="telegram"?(u(),i("div",pa,[e[152]||(e[152]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-link mr-2 text-gray-400"}),l(" Webhook URL "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),t("div",xa,[d(t("input",{"onUpdate:modelValue":e[33]||(e[33]=a=>r.value.url=a),class:V(["w-full rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",{"border-red-500 focus:border-red-500 focus:ring-red-500/20":v.value,"border-green-500 focus:border-green-500 focus:ring-green-500/20":E.value}]),placeholder:"https://...",required:"",type:"url",onInput:ke},null,34),[[x,r.value.url]]),E.value?(u(),i("div",ya,e[149]||(e[149]=[t("i",{class:"fas fa-check-circle text-green-500"},null,-1)]))):p("",!0),v.value?(u(),i("div",va,e[150]||(e[150]=[t("i",{class:"fas fa-exclamation-circle text-red-500"},null,-1)]))):p("",!0)]),se(r.value.type)?(u(),i("div",ma,[e[151]||(e[151]=t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"},null,-1)),t("p",ka,y(se(r.value.type)),1)])):p("",!0)])):p("",!0),r.value.type==="telegram"?(u(),i("div",ha,[t("div",null,[e[153]||(e[153]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-robot mr-2 text-gray-400"}),l(" Bot Token "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[34]||(e[34]=a=>r.value.botToken=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789:ABCDEFghijk-xyz",required:"",type:"text"},null,512),[[x,r.value.botToken]]),e[154]||(e[154]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Telegram 的 @BotFather 中创建机器人后获得的 Token ",-1))]),t("div",null,[e[155]||(e[155]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-comments mr-2 text-gray-400"}),l(" Chat ID "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[35]||(e[35]=a=>r.value.chatId=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789 或 -1001234567890",required:"",type:"text"},null,512),[[x,r.value.chatId]]),e[156]||(e[156]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可使用 @userinfobot、@RawDataBot 或 API 获取聊天/频道的 Chat ID ",-1))]),t("div",null,[e[157]||(e[157]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-globe mr-2 text-gray-400"}),l(" API 基础地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[36]||(e[36]=a=>r.value.apiBaseUrl=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.telegram.org",type:"url"},null,512),[[x,r.value.apiBaseUrl]]),e[158]||(e[158]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 使用自建 Bot API 时可覆盖默认域名,需以 http 或 https 开头 ",-1))]),t("div",null,[e[159]||(e[159]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-route mr-2 text-gray-400"}),l(" 代理地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[37]||(e[37]=a=>r.value.proxyUrl=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:socks5://user:pass@127.0.0.1:1080",type:"text"},null,512),[[x,r.value.proxyUrl]]),e[160]||(e[160]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 支持 http、https、socks4/4a/5 代理,留空则直接连接 Telegram 官方 API ",-1))]),e[161]||(e[161]=t("div",{class:"flex items-start rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-300"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5"}),t("div",null,"机器人需先加入对应群组或频道并授予发送消息权限,通知会以纯文本方式发送。")],-1))])):p("",!0),r.value.type==="bark"?(u(),i("div",wa,[t("div",null,[e[162]||(e[162]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-key mr-2 text-gray-400"}),l(" 设备密钥 (Device Key) "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[38]||(e[38]=a=>r.value.deviceKey=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:aBcDeFgHiJkLmNoPqRsTuVwX",required:"",type:"text"},null,512),[[x,r.value.deviceKey]]),e[163]||(e[163]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在Bark App中查看您的推送密钥 ",-1))]),t("div",null,[e[164]||(e[164]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" 服务器地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[39]||(e[39]=a=>r.value.serverUrl=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.day.app/push",type:"url"},null,512),[[x,r.value.serverUrl]])]),t("div",null,[e[166]||(e[166]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-flag mr-2 text-gray-400"}),l(" 通知级别 ")],-1)),d(t("select",{"onUpdate:modelValue":e[40]||(e[40]=a=>r.value.level=a),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[165]||(e[165]=[C('',5)]),512),[[X,r.value.level]])]),t("div",null,[e[168]||(e[168]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-volume-up mr-2 text-gray-400"}),l(" 通知声音 ")],-1)),d(t("select",{"onUpdate:modelValue":e[41]||(e[41]=a=>r.value.sound=a),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[167]||(e[167]=[C('',9)]),512),[[X,r.value.sound]])]),t("div",null,[e[169]||(e[169]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-folder mr-2 text-gray-400"}),l(" 通知分组 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[42]||(e[42]=a=>r.value.group=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: claude-relay",type:"text"},null,512),[[x,r.value.group]])]),e[170]||(e[170]=t("div",{class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"}),t("div",{class:"text-sm text-blue-700 dark:text-blue-300"},[t("p",null,"1. 在iPhone上安装Bark App"),t("p",null,"2. 打开App获取您的设备密钥"),t("p",null,"3. 将密钥粘贴到上方输入框")])],-1))])):p("",!0),r.value.type==="smtp"?(u(),i("div",Sa,[t("div",null,[e[171]||(e[171]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" SMTP 服务器 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[43]||(e[43]=a=>r.value.host=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如: smtp.gmail.com",required:"",type:"text"},null,512),[[x,r.value.host]])]),t("div",Ta,[t("div",null,[e[172]||(e[172]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-plug mr-2 text-gray-400"}),l(" 端口 ")],-1)),d(t("input",{"onUpdate:modelValue":e[44]||(e[44]=a=>r.value.port=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",max:"65535",min:"1",placeholder:"587",type:"number"},null,512),[[x,r.value.port,void 0,{number:!0}]]),e[173]||(e[173]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 默认: 587 (TLS) 或 465 (SSL) ",-1))]),t("div",null,[e[175]||(e[175]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 加密方式 ")],-1)),d(t("select",{"onUpdate:modelValue":e[45]||(e[45]=a=>r.value.secure=a),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[174]||(e[174]=[t("option",{value:!1},"STARTTLS (端口587)",-1),t("option",{value:!0},"SSL/TLS (端口465)",-1)]),512),[[X,r.value.secure]])])]),t("div",null,[e[176]||(e[176]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-user mr-2 text-gray-400"}),l(" 用户名 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[46]||(e[46]=a=>r.value.user=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"user@example.com",required:"",type:"email"},null,512),[[x,r.value.user]])]),t("div",null,[e[177]||(e[177]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-lock mr-2 text-gray-400"}),l(" 密码 / 应用密码 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[47]||(e[47]=a=>r.value.pass=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"邮箱密码或应用专用密码",required:"",type:"password"},null,512),[[x,r.value.pass]]),e[178]||(e[178]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议使用应用专用密码,而非邮箱登录密码 ",-1))]),t("div",null,[e[179]||(e[179]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-paper-plane mr-2 text-gray-400"}),l(" 发件人邮箱 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[48]||(e[48]=a=>r.value.from=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认使用用户名邮箱",type:"email"},null,512),[[x,r.value.from]])]),t("div",null,[e[180]||(e[180]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-envelope mr-2 text-gray-400"}),l(" 收件人邮箱 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[49]||(e[49]=a=>r.value.to=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"admin@example.com",required:"",type:"email"},null,512),[[x,r.value.to]]),e[181]||(e[181]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"接收通知的邮箱地址",-1))])])):p("",!0),r.value.type==="dingtalk"||r.value.type==="feishu"?(u(),i("div",Ua,[t("div",Ca,[t("div",Ma,[t("label",Ia,[d(t("input",{id:"enableSign","onUpdate:modelValue":e[50]||(e[50]=a=>r.value.enableSign=a),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-2 focus:ring-blue-500 focus:ring-offset-0",type:"checkbox"},null,512),[[I,r.value.enableSign]]),e[182]||(e[182]=t("span",{class:"ml-3 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 启用签名验证 ")],-1))]),r.value.enableSign?(u(),i("span",Aa," 已启用 ")):p("",!0)]),qe(je,{"enter-active-class":"transition-all duration-200 ease-out","enter-from-class":"opacity-0 -translate-y-2","enter-to-class":"opacity-100 translate-y-0","leave-active-class":"transition-all duration-150 ease-in","leave-from-class":"opacity-100 translate-y-0","leave-to-class":"opacity-0 -translate-y-2"},{default:Pe(()=>[r.value.enableSign?(u(),i("div",Ba,[e[183]||(e[183]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 签名密钥 ",-1)),d(t("input",{"onUpdate:modelValue":e[51]||(e[51]=a=>r.value.secret=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder:text-gray-500",placeholder:"SEC...",type:"text"},null,512),[[x,r.value.secret]])])):p("",!0)]),_:1})])])):p("",!0)])]),t("div",Ea,[t("div",Da,[e[185]||(e[185]=t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},[t("i",{class:"fas fa-asterisk mr-1 text-red-500"}),l(" 必填项 ")],-1)),t("div",Va,[t("button",{class:"group flex items-center rounded-xl border border-gray-300 bg-white px-4 py-2.5 text-sm font-medium text-gray-700 shadow-sm transition-all hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:N},e[184]||(e[184]=[t("i",{class:"fas fa-times mr-2 transition-transform group-hover:scale-110"},null,-1),l(" 取消 ",-1)])),t("button",{class:"group flex items-center rounded-xl border border-blue-200 bg-blue-50 px-4 py-2.5 text-sm font-medium text-blue-700 shadow-sm transition-all hover:bg-blue-100 hover:shadow-md dark:border-blue-800 dark:bg-blue-900/50 dark:text-blue-300 dark:hover:bg-blue-900/70",disabled:q.value,onClick:Ce},[t("i",{class:V(["mr-2 transition-transform",q.value?"fas fa-spinner fa-spin":"fas fa-vial group-hover:scale-110"])},null,2),l(" "+y(q.value?"测试中...":"测试连接"),1)],8,Qa),t("button",{class:"group flex items-center rounded-xl bg-gradient-to-r from-blue-600 to-indigo-600 px-5 py-2.5 text-sm font-medium text-white shadow-md transition-all hover:from-blue-700 hover:to-indigo-700 hover:shadow-lg disabled:cursor-not-allowed disabled:from-gray-400 disabled:to-gray-500",disabled:!ve.value||P.value,onClick:he},[t("i",{class:V(["mr-2 transition-transform",P.value?"fas fa-spinner fa-spin":"fas fa-save group-hover:scale-110"])},null,2),l(" "+y(P.value?"保存中...":D.value?"保存修改":"添加平台"),1)],8,Ra)])])])])])):p("",!0)],64))}}),Fa=Ke(qa,[["__scopeId","data-v-f76246ee"]]);export{Fa as default};