mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-23 00:53:33 +00:00
4 lines
56 KiB
JavaScript
4 lines
56 KiB
JavaScript
import{aP as ve,r as k,aX as me,c as ee,o as te,q as ke,Z as he,x as n,z as e,L as y,C as D,O as l,u as c,K as u,S as re,aq as p,al as R,P as b,aT as L,Q as $,ac as ae,aV as K,R as we,J as Ue,T as Se,Y as Te,y as i}from"./vue-vendor-Bsazo-x0.js";import{c as A,_ as Ie,s as d}from"./index-BZQ3qRjC.js";import"./element-plus-CqiD73Lu.js";import"./vendor-Dr8jvgFu.js";const Ce=ve("settings",()=>{const w=k({siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,updatedAt:null}),C=k(!1),E=k(!1),U=async()=>{C.value=!0;try{const o=await A.get("/admin/oem-settings");return o&&o.success&&(w.value={...w.value,...o.data},S()),o}catch(o){throw console.error("Failed to load OEM settings:",o),o}finally{C.value=!1}},f=async o=>{E.value=!0;try{const x=await A.put("/admin/oem-settings",o);return x&&x.success&&(w.value={...w.value,...x.data},S()),x}catch(x){throw console.error("Failed to save OEM settings:",x),x}finally{E.value=!1}},M=async()=>{const o={siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,updatedAt:null};return w.value={...o},await f(o)},S=()=>{if(w.value.siteName&&(document.title=`${w.value.siteName} - 管理后台`),w.value.siteIconData||w.value.siteIcon){const o=document.querySelector('link[rel="icon"]')||document.createElement("link");o.rel="icon",o.href=w.value.siteIconData||w.value.siteIcon,document.querySelector('link[rel="icon"]')||document.head.appendChild(o)}};return{oemSettings:w,loading:C,saving:E,loadOemSettings:U,saveOemSettings:f,resetOemSettings:M,applyOemSettings:S,formatDateTime:o=>o?new Date(o).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"",validateIconFile:o=>{const x=[];return o.size>350*1024&&x.push("图标文件大小不能超过 350KB"),["image/x-icon","image/png","image/jpeg","image/jpg","image/svg+xml"].includes(o.type)||x.push("不支持的文件类型,请选择 .ico, .png, .jpg 或 .svg 文件"),{isValid:x.length===0,errors:x}},fileToBase64:o=>new Promise((x,V)=>{const B=new FileReader;B.onload=v=>x(v.target.result),B.onerror=V,B.readAsDataURL(o)})}}),Ae={class:"settings-container"},Be={class:"card p-4 sm:p-6"},Ve={class:"mb-6"},De={class:"flex space-x-8"},Pe={key:0,class:"py-12 text-center"},je={key:1},Le={class:"table-container hidden sm:block"},Ee={class:"min-w-full"},Fe={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Ne={class:"table-row"},Re={class:"px-6 py-4"},We={class:"table-row"},Ke={class:"px-6 py-4"},Me={class:"space-y-3"},$e={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},qe=["src"],Oe={class:"table-row"},ze={class:"px-6 py-4"},Qe={class:"flex items-center"},He={class:"inline-flex cursor-pointer items-center"},Je={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},Xe={class:"px-6 py-6",colspan:"2"},Ge={class:"flex items-center justify-between"},Ye={class:"flex gap-3"},Ze=["disabled"],_e={key:0,class:"loading-spinner mr-2"},et={key:1,class:"fas fa-save mr-2"},tt=["disabled"],rt={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},at={class:"space-y-4 sm:hidden"},st={class:"glass-card p-4"},lt={class:"glass-card p-4"},ot={class:"space-y-3"},nt={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},it=["src"],dt={class:"glass-card p-4"},ut={class:"space-y-2"},gt={class:"inline-flex cursor-pointer items-center"},ct={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},ft={class:"glass-card p-4"},xt={class:"flex flex-col gap-3"},yt=["disabled"],pt={key:0,class:"loading-spinner mr-2"},bt={key:1,class:"fas fa-save mr-2"},vt=["disabled"],mt={key:0,class:"text-center text-sm text-gray-500 dark:text-gray-400"},kt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},ht={class:"flex items-center justify-between"},wt={class:"relative inline-flex cursor-pointer items-center"},Ut={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},St={class:"space-y-3"},Tt={class:"font-medium text-gray-700 dark:text-gray-300"},It={class:"ml-2 text-sm text-gray-500 dark:text-gray-400"},Ct={class:"relative inline-flex cursor-pointer items-center"},At=["onUpdate:modelValue"],Bt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Vt={class:"mb-4 flex items-center justify-between"},Dt={key:0,class:"space-y-4"},Pt={class:"flex items-start justify-between"},jt={class:"flex-1"},Lt={class:"flex items-center"},Et={class:"font-semibold text-gray-800 dark:text-gray-200"},Ft={class:"text-sm text-gray-500 dark:text-gray-400"},Nt={class:"mt-3 space-y-1 text-sm"},Rt={key:0,class:"flex items-center text-gray-600 dark:text-gray-400"},Wt={class:"truncate"},Kt={key:1,class:"flex items-center text-gray-600 dark:text-gray-400"},Mt={class:"truncate"},$t={key:2,class:"flex items-center text-gray-600 dark:text-gray-400"},qt={class:"truncate"},Ot={key:3,class:"flex items-center text-gray-600 dark:text-gray-400"},zt={class:"truncate"},Qt={key:4,class:"flex items-center text-gray-600 dark:text-gray-400"},Ht={class:"truncate"},Jt={key:5,class:"flex items-center text-gray-600 dark:text-gray-400"},Xt={class:"truncate"},Gt={key:6,class:"flex items-center text-gray-600 dark:text-gray-400"},Yt={class:"ml-4 flex items-center space-x-2"},Zt={class:"relative inline-flex cursor-pointer items-center"},_t=["checked","onChange"],er=["onClick"],tr=["onClick"],rr=["onClick"],ar={key:1,class:"py-8 text-center text-gray-500 dark:text-gray-400"},sr={class:"rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},lr={class:"grid grid-cols-1 gap-4 md:grid-cols-3"},or={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"},nr={class:"flex items-center justify-between"},ir={class:"flex items-center space-x-3"},dr={class:"text-xl font-semibold text-gray-900 dark:text-white"},ur={class:"mt-0.5 text-sm text-gray-600 dark:text-gray-400"},gr={class:"p-6"},cr={class:"space-y-5"},fr={class:"relative"},xr=["disabled"],yr={key:0,class:"mt-1 text-xs text-amber-600 dark:text-amber-400"},pr={key:0},br={class:"relative"},vr={key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3"},mr={key:1,class:"absolute inset-y-0 right-0 flex items-center pr-3"},kr={key:0,class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},hr={class:"text-sm text-blue-700 dark:text-blue-300"},wr={key:1,class:"space-y-5"},Ur={key:2,class:"space-y-5"},Sr={key:3,class:"space-y-5"},Tr={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Ir={key:4,class:"rounded-xl border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-900/50"},Cr={class:"space-y-4"},Ar={class:"flex items-center justify-between"},Br={class:"flex cursor-pointer items-center",for:"enableSign"},Vr={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"},Dr={key:0},Pr={class:"border-t border-gray-200 bg-gray-50 px-6 py-4 dark:border-gray-700 dark:bg-gray-900/50"},jr={class:"flex items-center justify-between"},Lr={class:"flex space-x-3"},Er=["disabled"],Fr=["disabled"],Nr=Object.assign({name:"SettingsView"},{__name:"SettingsView",setup(w){const C=Ce(),{loading:E,saving:U,oemSettings:f}=me(C),M=k(),S=k("branding"),g=k(!0),T=k(new AbortController),P=ee({get(){return!f.value.showAdminButton},set(a){f.value.showAdminButton=!a}}),o=k(!1),x=k(!1),V=k(!1),B=k(!1),v=k({enabled:!1,platforms:[],notificationTypes:{accountAnomaly:!0,quotaWarning:!0,systemError:!0,securityAlert:!0},retrySettings:{maxRetries:3,retryDelay:1e3,timeout:1e4}}),j=k(!1),I=k(null),r=k({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}),q=te(S,async a=>{g.value&&a==="webhook"&&await F()}),O=te(()=>r.value.type,a=>{o.value=!1,x.value=!1,I.value||(a==="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):a==="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=""):a==="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=""))}),se=ee(()=>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&&!o.value);ke(async()=>{try{await C.loadOemSettings(),S.value==="webhook"&&await F()}catch{d("加载设置失败","error")}}),he(()=>{g.value=!1,T.value&&T.value.abort(),q&&q(),O&&O(),j.value&&(j.value=!1,I.value=null)});const F=async()=>{if(g.value)try{const a=await A.get("/admin/webhook/config",{signal:T.value.signal});a.success&&g.value&&(v.value=a.config)}catch(a){if(a.name==="AbortError"||!g.value)return;d("获取webhook配置失败","error"),console.error(a)}},N=async()=>{if(g.value)try{(await A.post("/admin/webhook/config",v.value,{signal:T.value.signal})).success&&g.value&&d("配置已保存","success")}catch(a){if(a.name==="AbortError"||!g.value)return;d("保存配置失败","error"),console.error(a)}},le=()=>{if(["bark","smtp","telegram"].includes(r.value.type)){o.value=!1,x.value=!1;return}const a=r.value.url;if(!a){o.value=!1,x.value=!1;return}try{new URL(a),a.startsWith("http://")||a.startsWith("https://")?(o.value=!1,x.value=!0):(o.value=!0,x.value=!1)}catch{o.value=!0,x.value=!1}},z=()=>{if(r.value.type==="bark"){if(!r.value.deviceKey)return d("请输入Bark设备密钥","error"),!1}else if(r.value.type==="telegram"){if(!r.value.botToken)return d("请输入 Telegram 机器人 Token","error"),!1;if(!r.value.chatId)return d("请输入 Telegram Chat ID","error"),!1;if(r.value.apiBaseUrl)try{const a=new URL(r.value.apiBaseUrl);if(!["http:","https:"].includes(a.protocol))return d("Telegram API 基础地址仅支持 http 或 https","error"),!1}catch{return d("请输入有效的 Telegram API 基础地址","error"),!1}if(r.value.proxyUrl)try{const a=new URL(r.value.proxyUrl);if(!["http:","https:","socks4:","socks4a:","socks5:"].includes(a.protocol))return d("Telegram 代理仅支持 http/https/socks 协议","error"),!1}catch{return d("请输入有效的 Telegram 代理地址","error"),!1}}else if(r.value.type==="smtp"){const a=[{field:"host",message:"SMTP服务器"},{field:"user",message:"用户名"},{field:"pass",message:"密码"},{field:"to",message:"收件人邮箱"}];for(const{field:t,message:s}of a)if(!r.value[t])return d(`请输入${s}`,"error"),!1}else{if(!r.value.url)return d("请输入Webhook URL","error"),!1;if(o.value)return d("请输入有效的Webhook URL","error"),!1}return!0},oe=async()=>{if(g.value&&z()){B.value=!0;try{let a;I.value?a=await A.put(`/admin/webhook/platforms/${I.value.id}`,r.value,{signal:T.value.signal}):a=await A.post("/admin/webhook/platforms",r.value,{signal:T.value.signal}),a.success&&g.value&&(d(I.value?"平台已更新":"平台已添加","success"),await F(),W())}catch(a){if(a.name==="AbortError"||!g.value)return;d(a.message||"操作失败","error"),console.error(a)}finally{g.value&&(B.value=!1)}}},ne=a=>{I.value=a,r.value={type:a.type||"wechat_work",name:a.name||"",url:a.url||"",enableSign:a.enableSign||!1,secret:a.secret||"",botToken:a.botToken||"",chatId:a.chatId||"",apiBaseUrl:a.apiBaseUrl||"",proxyUrl:a.proxyUrl||"",deviceKey:a.deviceKey||"",serverUrl:a.serverUrl||"",level:a.level||"",sound:a.sound||"",group:a.group||"",host:a.host||"",port:a.port??null,secure:a.secure||!1,user:a.user||"",pass:a.pass||"",from:a.from||"",to:Array.isArray(a.to)?a.to.join(", "):a.to||"",timeout:a.timeout??null,ignoreTLS:a.ignoreTLS||!1},j.value=!0},ie=async a=>{if(g.value&&confirm("确定要删除这个平台吗?"))try{(await A.delete(`/admin/webhook/platforms/${a}`,{signal:T.value.signal})).success&&g.value&&(d("平台已删除","success"),await F())}catch(t){if(t.name==="AbortError"||!g.value)return;d("删除失败","error"),console.error(t)}},de=async a=>{if(g.value)try{const t=await A.post(`/admin/webhook/platforms/${a}/toggle`,{},{signal:T.value.signal});t.success&&g.value&&(d(t.message,"success"),await F())}catch(t){if(t.name==="AbortError"||!g.value)return;d("操作失败","error"),console.error(t)}},ue=async a=>{if(g.value)try{const t={type:a.type,secret:a.secret,enableSign:a.enableSign};a.type==="bark"?(t.deviceKey=a.deviceKey,t.serverUrl=a.serverUrl,t.level=a.level,t.sound=a.sound,t.group=a.group):a.type==="smtp"?(t.host=a.host,t.port=a.port,t.secure=a.secure,t.user=a.user,t.pass=a.pass,t.from=a.from,t.to=a.to,t.ignoreTLS=a.ignoreTLS):a.type==="telegram"?(t.botToken=a.botToken,t.chatId=a.chatId,t.apiBaseUrl=a.apiBaseUrl,t.proxyUrl=a.proxyUrl):t.url=a.url,(await A.post("/admin/webhook/test",t,{signal:T.value.signal})).success&&g.value&&d("测试成功","success")}catch(t){if(t.name==="AbortError"||!g.value)return;d(t.error||t.message||"测试失败","error"),console.error(t)}},ge=async()=>{if(g.value&&z()){V.value=!0;try{(await A.post("/admin/webhook/test",r.value,{signal:T.value.signal})).success&&g.value&&d("测试成功","success")}catch(a){if(a.name==="AbortError"||!g.value)return;d(a.error||a.message||"测试失败","error"),console.error(a)}finally{g.value&&(V.value=!1)}}},ce=async()=>{var a,t,s,m;if(g.value)try{(await A.post("/admin/webhook/test-notification",{},{signal:T.value.signal})).success&&g.value&&d("测试通知已发送","success")}catch(h){if(h.name==="AbortError"||!g.value)return;const be=((t=(a=h==null?void 0:h.response)==null?void 0:a.data)==null?void 0:t.message)||((m=(s=h==null?void 0:h.response)==null?void 0:s.data)==null?void 0:m.error)||(h==null?void 0:h.message)||"发送失败";d(be,"error"),console.error(h)}},W=()=>{g.value&&(j.value=!1,setTimeout(()=>{g.value&&(I.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},o.value=!1,x.value=!1,V.value=!1,B.value=!1)},0))},Q=a=>({wechat_work:"企业微信",dingtalk:"钉钉",feishu:"飞书",slack:"Slack",discord:"Discord",telegram:"Telegram",bark:"Bark",smtp:"邮件通知",custom:"自定义"})[a]||a,fe=a=>({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"})[a]||"fas fa-bell",H=a=>({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接收地址"})[a]||"",xe=a=>a?a.length<=12?a:`${a.slice(0,6)}...${a.slice(-4)}`:"",ye=a=>({accountAnomaly:"账号异常",quotaWarning:"配额警告",systemError:"系统错误",securityAlert:"安全警报",test:"测试通知"})[a]||a,pe=a=>({accountAnomaly:"账号状态异常、认证失败等",quotaWarning:"API调用配额不足警告",systemError:"系统运行错误和故障",securityAlert:"安全相关的警报通知",test:"用于测试Webhook连接是否正常"})[a]||"",J=async()=>{try{const a={siteName:f.value.siteName,siteIcon:f.value.siteIcon,siteIconData:f.value.siteIconData,showAdminButton:f.value.showAdminButton},t=await C.saveOemSettings(a);t&&t.success?d("OEM设置保存成功","success"):d((t==null?void 0:t.message)||"保存失败","error")}catch{d("保存OEM设置失败","error")}},X=async()=>{if(confirm(`确定要重置为默认设置吗?
|
||
|
||
这将清除所有自定义的网站名称和图标设置。`))try{const a=await C.resetOemSettings();a&&a.success?d("已重置为默认设置","success"):d("重置失败","error")}catch{d("重置失败","error")}},G=async a=>{const t=a.target.files[0];if(!t)return;const s=C.validateIconFile(t);if(!s.isValid){s.errors.forEach(m=>d(m,"error"));return}try{const m=await C.fileToBase64(t);f.value.siteIconData=m}catch{d("文件读取失败","error")}a.target.value=""},Y=()=>{f.value.siteIcon="",f.value.siteIconData=""},Z=()=>{console.warn("Icon failed to load")},_=C.formatDateTime;return(a,t)=>(i(),n($,null,[e("div",Ae,[e("div",Be,[t[82]||(t[82]=e("div",{class:"mb-4 sm:mb-6"},[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 系统设置 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"},"网站定制和通知配置")],-1)),e("div",Ve,[e("nav",De,[e("button",{class:D(["border-b-2 pb-2 text-sm font-medium transition-colors",S.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:t[0]||(t[0]=s=>S.value="branding")},t[35]||(t[35]=[e("i",{class:"fas fa-palette mr-2"},null,-1),l(" 品牌设置 ",-1)]),2),e("button",{class:D(["border-b-2 pb-2 text-sm font-medium transition-colors",S.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:t[1]||(t[1]=s=>S.value="webhook")},t[36]||(t[36]=[e("i",{class:"fas fa-bell mr-2"},null,-1),l(" 通知设置 ",-1)]),2)])]),c(E)?(i(),n("div",Pe,t[37]||(t[37]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载设置...",-1)]))):(i(),n("div",je,[u(e("div",null,[e("div",Le,[e("table",Ee,[e("tbody",Fe,[e("tr",Ne,[t[39]||(t[39]=e("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[e("div",{class:"flex items-center"},[e("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"},[e("i",{class:"fas fa-font text-xs text-white"})]),e("div",null,[e("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站名称 "),e("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"品牌标识")])])],-1)),e("td",Re,[u(e("input",{"onUpdate:modelValue":t[2]||(t[2]=s=>c(f).siteName=s),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),[[p,c(f).siteName]]),t[38]||(t[38]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 将显示在浏览器标题和页面头部 ",-1))])]),e("tr",We,[t[44]||(t[44]=e("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[e("div",{class:"flex items-center"},[e("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"},[e("i",{class:"fas fa-image text-xs text-white"})]),e("div",null,[e("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站图标 "),e("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Favicon")])])],-1)),e("td",Ke,[e("div",Me,[c(f).siteIconData||c(f).siteIcon?(i(),n("div",$e,[e("img",{alt:"图标预览",class:"h-8 w-8",src:c(f).siteIconData||c(f).siteIcon,onError:Z},null,40,qe),t[41]||(t[41]=e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),e("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:Y},t[40]||(t[40]=[e("i",{class:"fas fa-trash mr-1"},null,-1),l("删除 ",-1)]))])):y("",!0),e("div",null,[e("input",{ref_key:"iconFileInput",ref:M,accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:G},null,544),e("button",{class:"btn btn-success px-4 py-2",onClick:t[3]||(t[3]=s=>a.$refs.iconFileInput.click())},t[42]||(t[42]=[e("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),t[43]||(t[43]=e("span",{class:"ml-3 text-xs text-gray-500 dark:text-gray-400"},"支持 .ico, .png, .jpg, .svg 格式,最大 350KB",-1))])])])]),e("tr",Oe,[t[47]||(t[47]=e("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[e("div",{class:"flex items-center"},[e("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"},[e("i",{class:"fas fa-eye-slash text-xs text-white"})]),e("div",null,[e("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 管理入口 "),e("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"登录按钮显示")])])],-1)),e("td",ze,[e("div",Qe,[e("label",He,[u(e("input",{"onUpdate:modelValue":t[4]||(t[4]=s=>P.value=s),class:"peer sr-only",type:"checkbox"},null,512),[[R,P.value]]),t[45]||(t[45]=e("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)),e("span",Je,b(P.value?"隐藏登录按钮":"显示登录按钮"),1)])]),t[46]||(t[46]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),e("tr",null,[e("td",Xe,[e("div",Ge,[e("div",Ye,[e("button",{class:D(["btn btn-primary px-6 py-3",{"cursor-not-allowed opacity-50":c(U)}]),disabled:c(U),onClick:J},[c(U)?(i(),n("div",_e)):(i(),n("i",et)),l(" "+b(c(U)?"保存中...":"保存设置"),1)],10,Ze),e("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:c(U),onClick:X},t[48]||(t[48]=[e("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,tt)]),c(f).updatedAt?(i(),n("div",rt,[t[49]||(t[49]=e("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 最后更新:"+b(c(_)(c(f).updatedAt)),1)])):y("",!0)])])])])])]),e("div",at,[e("div",st,[t[50]||(t[50]=L('<div class="mb-3 flex items-center gap-3" data-v-3509d271><div class="flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-cyan-600 text-white shadow-md" data-v-3509d271><i class="fas fa-tag" data-v-3509d271></i></div><div data-v-3509d271><h3 class="text-base font-semibold text-gray-900 dark:text-gray-100" data-v-3509d271>站点名称</h3><p class="text-sm text-gray-500 dark:text-gray-400" data-v-3509d271>自定义您的站点品牌名称</p></div></div>',1)),u(e("input",{"onUpdate:modelValue":t[5]||(t[5]=s=>c(f).siteName=s),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),[[p,c(f).siteName]])]),e("div",lt,[t[54]||(t[54]=L('<div class="mb-3 flex items-center gap-3" data-v-3509d271><div class="flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-purple-500 to-pink-600 text-white shadow-md" data-v-3509d271><i class="fas fa-image" data-v-3509d271></i></div><div data-v-3509d271><h3 class="text-base font-semibold text-gray-900 dark:text-gray-100" data-v-3509d271>站点图标</h3><p class="text-sm text-gray-500 dark:text-gray-400" data-v-3509d271> 上传自定义图标或输入图标URL </p></div></div>',1)),e("div",ot,[c(f).siteIconData||c(f).siteIcon?(i(),n("div",nt,[e("img",{alt:"图标预览",class:"h-8 w-8",src:c(f).siteIconData||c(f).siteIcon,onError:Z},null,40,it),t[51]||(t[51]=e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),e("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:Y}," 删除 ")])):y("",!0),e("div",null,[e("input",{ref:"iconFileInputMobile",accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:G},null,544),e("button",{class:"btn btn-success px-4 py-2",onClick:t[6]||(t[6]=s=>a.$refs.iconFileInputMobile.click())},t[52]||(t[52]=[e("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),t[53]||(t[53]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 支持 .ico, .png, .jpg, .svg 格式,最大 350KB ",-1))])])]),e("div",dt,[t[57]||(t[57]=L('<div class="mb-3 flex items-center gap-3" data-v-3509d271><div class="flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-indigo-500 to-purple-600 text-white shadow-md" data-v-3509d271><i class="fas fa-eye-slash" data-v-3509d271></i></div><div data-v-3509d271><h3 class="text-base font-semibold text-gray-900 dark:text-gray-100" data-v-3509d271>管理入口</h3><p class="text-sm text-gray-500 dark:text-gray-400" data-v-3509d271>控制登录按钮在首页的显示</p></div></div>',1)),e("div",ut,[e("label",gt,[u(e("input",{"onUpdate:modelValue":t[7]||(t[7]=s=>P.value=s),class:"peer sr-only",type:"checkbox"},null,512),[[R,P.value]]),t[55]||(t[55]=e("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)),e("span",ct,b(P.value?"隐藏登录按钮":"显示登录按钮"),1)]),t[56]||(t[56]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),e("div",ft,[e("div",xt,[e("button",{class:D(["btn btn-primary w-full px-6 py-3",{"cursor-not-allowed opacity-50":c(U)}]),disabled:c(U),onClick:J},[c(U)?(i(),n("div",pt)):(i(),n("i",bt)),l(" "+b(c(U)?"保存中...":"保存设置"),1)],10,yt),e("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:c(U),onClick:X},t[58]||(t[58]=[e("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,vt),c(f).updatedAt?(i(),n("div",mt,[t[59]||(t[59]=e("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 上次更新: "+b(c(_)(c(f).updatedAt)),1)])):y("",!0)])])])],512),[[re,S.value==="branding"]]),u(e("div",null,[e("div",kt,[e("div",ht,[t[61]||(t[61]=e("div",null,[e("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"启用通知"),e("p",{class:"mt-1 text-sm text-gray-600 dark:text-gray-400"}," 开启后,系统将按配置发送通知到指定平台 ")],-1)),e("label",wt,[u(e("input",{"onUpdate:modelValue":t[8]||(t[8]=s=>v.value.enabled=s),class:"peer sr-only",type:"checkbox",onChange:N},null,544),[[R,v.value.enabled]]),t[60]||(t[60]=e("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))])])]),e("div",Ut,[t[63]||(t[63]=e("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知类型",-1)),e("div",St,[(i(!0),n($,null,ae(v.value.notificationTypes,(s,m)=>(i(),n("div",{key:m,class:"flex items-center justify-between"},[e("div",null,[e("span",Tt,b(ye(m)),1),e("span",It,b(pe(m)),1)]),e("label",Ct,[u(e("input",{"onUpdate:modelValue":h=>v.value.notificationTypes[m]=h,class:"peer sr-only",type:"checkbox",onChange:N},null,40,At),[[R,v.value.notificationTypes[m]]]),t[62]||(t[62]=e("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))])]),e("div",Bt,[e("div",Vt,[t[65]||(t[65]=e("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知平台",-1)),e("button",{class:"rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-blue-700",onClick:t[9]||(t[9]=s=>j.value=!0)},t[64]||(t[64]=[e("i",{class:"fas fa-plus mr-2"},null,-1),l(" 添加平台 ",-1)]))]),v.value.platforms&&v.value.platforms.length>0?(i(),n("div",Dt,[(i(!0),n($,null,ae(v.value.platforms,s=>(i(),n("div",{key:s.id,class:"rounded-lg border border-gray-200 p-4 dark:border-gray-700"},[e("div",Pt,[e("div",jt,[e("div",Lt,[e("i",{class:D(["mr-3 text-xl",fe(s.type)])},null,2),e("div",null,[e("h3",Et,b(s.name||Q(s.type)),1),e("p",Ft,b(Q(s.type)),1)])]),e("div",Nt,[s.type!=="smtp"&&s.type!=="telegram"?(i(),n("div",Rt,[t[66]||(t[66]=e("i",{class:"fas fa-link mr-2"},null,-1)),e("span",Wt,b(s.url),1)])):y("",!0),s.type==="telegram"?(i(),n("div",Kt,[t[67]||(t[67]=e("i",{class:"fas fa-comments mr-2"},null,-1)),e("span",Mt,"Chat ID: "+b(s.chatId||"未配置"),1)])):y("",!0),s.type==="telegram"&&s.botToken?(i(),n("div",$t,[t[68]||(t[68]=e("i",{class:"fas fa-key mr-2"},null,-1)),e("span",qt,"Token: "+b(xe(s.botToken)),1)])):y("",!0),s.type==="telegram"&&s.apiBaseUrl?(i(),n("div",Ot,[t[69]||(t[69]=e("i",{class:"fas fa-globe mr-2"},null,-1)),e("span",zt,"API: "+b(s.apiBaseUrl),1)])):y("",!0),s.type==="telegram"&&s.proxyUrl?(i(),n("div",Qt,[t[70]||(t[70]=e("i",{class:"fas fa-route mr-2"},null,-1)),e("span",Ht,"代理: "+b(s.proxyUrl),1)])):y("",!0),s.type==="smtp"&&s.to?(i(),n("div",Jt,[t[71]||(t[71]=e("i",{class:"fas fa-envelope mr-2"},null,-1)),e("span",Xt,b(Array.isArray(s.to)?s.to.join(", "):s.to),1)])):y("",!0),s.enableSign?(i(),n("div",Gt,t[72]||(t[72]=[e("i",{class:"fas fa-shield-alt mr-2"},null,-1),e("span",null,"已启用签名验证",-1)]))):y("",!0)])]),e("div",Yt,[e("label",Zt,[e("input",{checked:s.enabled,class:"peer sr-only",type:"checkbox",onChange:m=>de(s.id)},null,40,_t),t[73]||(t[73]=e("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))]),e("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(s)},t[74]||(t[74]=[e("i",{class:"fas fa-vial"},null,-1)]),8,er),e("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=>ne(s)},t[75]||(t[75]=[e("i",{class:"fas fa-edit"},null,-1)]),8,tr),e("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=>ie(s.id)},t[76]||(t[76]=[e("i",{class:"fas fa-trash"},null,-1)]),8,rr)])])]))),128))])):(i(),n("div",ar,' 暂无配置的通知平台,请点击"添加平台"按钮添加 '))]),e("div",sr,[t[80]||(t[80]=e("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"高级设置",-1)),e("div",lr,[e("div",null,[t[77]||(t[77]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最大重试次数 ",-1)),u(e("input",{"onUpdate:modelValue":t[10]||(t[10]=s=>v.value.retrySettings.maxRetries=s),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:N},null,544),[[p,v.value.retrySettings.maxRetries,void 0,{number:!0}]])]),e("div",null,[t[78]||(t[78]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 重试延迟 (毫秒) ",-1)),u(e("input",{"onUpdate:modelValue":t[11]||(t[11]=s=>v.value.retrySettings.retryDelay=s),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:N},null,544),[[p,v.value.retrySettings.retryDelay,void 0,{number:!0}]])]),e("div",null,[t[79]||(t[79]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 超时时间 (毫秒) ",-1)),u(e("input",{"onUpdate:modelValue":t[12]||(t[12]=s=>v.value.retrySettings.timeout=s),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:N},null,544),[[p,v.value.retrySettings.timeout,void 0,{number:!0}]])])])]),e("div",{class:"mt-6 text-center"},[e("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:ce},t[81]||(t[81]=[e("i",{class:"fas fa-paper-plane mr-2"},null,-1),l(" 发送测试通知 ",-1)]))])],512),[[re,S.value==="webhook"]])]))])]),j.value?(i(),n("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:W},[e("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:t[34]||(t[34]=Te(()=>{},["stop"]))},[e("div",or,[e("div",nr,[e("div",ir,[t[83]||(t[83]=e("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"},[e("i",{class:"fas fa-bell"})],-1)),e("div",null,[e("h3",dr,b(I.value?"编辑":"添加")+"通知平台 ",1),e("p",ur," 配置"+b(I.value?"并更新":"新的")+"Webhook通知渠道 ",1)])]),e("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:W},t[84]||(t[84]=[e("i",{class:"fas fa-times text-lg"},null,-1)]))])]),e("div",gr,[e("div",cr,[e("div",null,[t[88]||(t[88]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-layer-group mr-2 text-gray-400"}),l(" 平台类型 ")],-1)),e("div",fr,[u(e("select",{"onUpdate:modelValue":t[13]||(t[13]=s=>r.value.type=s),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:I.value},t[85]||(t[85]=[L('<option value="wechat_work" data-v-3509d271>🟢 企业微信</option><option value="dingtalk" data-v-3509d271>🔵 钉钉</option><option value="feishu" data-v-3509d271>🟦 飞书</option><option value="slack" data-v-3509d271>🟣 Slack</option><option value="discord" data-v-3509d271>🟪 Discord</option><option value="telegram" data-v-3509d271>✈️ Telegram</option><option value="bark" data-v-3509d271>🔔 Bark</option><option value="smtp" data-v-3509d271>📧 邮件通知</option><option value="custom" data-v-3509d271>⚙️ 自定义</option>',9)]),8,xr),[[K,r.value.type]]),t[86]||(t[86]=e("div",{class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3"},[e("i",{class:"fas fa-chevron-down text-gray-400"})],-1))]),I.value?(i(),n("p",yr,t[87]||(t[87]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),l(" 编辑模式下不能更改平台类型 ",-1)]))):y("",!0)]),e("div",null,[t[89]||(t[89]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-tag mr-2 text-gray-400"}),l(" 名称 "),e("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),u(e("input",{"onUpdate:modelValue":t[14]||(t[14]=s=>r.value.name=s),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),[[p,r.value.name]])]),r.value.type!=="bark"&&r.value.type!=="smtp"&&r.value.type!=="telegram"?(i(),n("div",pr,[t[93]||(t[93]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-link mr-2 text-gray-400"}),l(" Webhook URL "),e("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),e("div",br,[u(e("input",{"onUpdate:modelValue":t[15]||(t[15]=s=>r.value.url=s),class:D(["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":o.value,"border-green-500 focus:border-green-500 focus:ring-green-500/20":x.value}]),placeholder:"https://...",required:"",type:"url",onInput:le},null,34),[[p,r.value.url]]),x.value?(i(),n("div",vr,t[90]||(t[90]=[e("i",{class:"fas fa-check-circle text-green-500"},null,-1)]))):y("",!0),o.value?(i(),n("div",mr,t[91]||(t[91]=[e("i",{class:"fas fa-exclamation-circle text-red-500"},null,-1)]))):y("",!0)]),H(r.value.type)?(i(),n("div",kr,[t[92]||(t[92]=e("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"},null,-1)),e("p",hr,b(H(r.value.type)),1)])):y("",!0)])):y("",!0),r.value.type==="telegram"?(i(),n("div",wr,[e("div",null,[t[94]||(t[94]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-robot mr-2 text-gray-400"}),l(" Bot Token "),e("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),u(e("input",{"onUpdate:modelValue":t[16]||(t[16]=s=>r.value.botToken=s),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),[[p,r.value.botToken]]),t[95]||(t[95]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Telegram 的 @BotFather 中创建机器人后获得的 Token ",-1))]),e("div",null,[t[96]||(t[96]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-comments mr-2 text-gray-400"}),l(" Chat ID "),e("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),u(e("input",{"onUpdate:modelValue":t[17]||(t[17]=s=>r.value.chatId=s),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),[[p,r.value.chatId]]),t[97]||(t[97]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可使用 @userinfobot、@RawDataBot 或 API 获取聊天/频道的 Chat ID ",-1))]),e("div",null,[t[98]||(t[98]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-globe mr-2 text-gray-400"}),l(" API 基础地址 "),e("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),u(e("input",{"onUpdate:modelValue":t[18]||(t[18]=s=>r.value.apiBaseUrl=s),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),[[p,r.value.apiBaseUrl]]),t[99]||(t[99]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 使用自建 Bot API 时可覆盖默认域名,需以 http 或 https 开头 ",-1))]),e("div",null,[t[100]||(t[100]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-route mr-2 text-gray-400"}),l(" 代理地址 "),e("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),u(e("input",{"onUpdate:modelValue":t[19]||(t[19]=s=>r.value.proxyUrl=s),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),[[p,r.value.proxyUrl]]),t[101]||(t[101]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 支持 http、https、socks4/4a/5 代理,留空则直接连接 Telegram 官方 API ",-1))]),t[102]||(t[102]=e("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"},[e("i",{class:"fas fa-info-circle mr-2 mt-0.5"}),e("div",null,"机器人需先加入对应群组或频道并授予发送消息权限,通知会以纯文本方式发送。")],-1))])):y("",!0),r.value.type==="bark"?(i(),n("div",Ur,[e("div",null,[t[103]||(t[103]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-gray-400"}),l(" 设备密钥 (Device Key) "),e("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),u(e("input",{"onUpdate:modelValue":t[20]||(t[20]=s=>r.value.deviceKey=s),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),[[p,r.value.deviceKey]]),t[104]||(t[104]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在Bark App中查看您的推送密钥 ",-1))]),e("div",null,[t[105]||(t[105]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" 服务器地址 "),e("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),u(e("input",{"onUpdate:modelValue":t[21]||(t[21]=s=>r.value.serverUrl=s),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),[[p,r.value.serverUrl]])]),e("div",null,[t[107]||(t[107]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-flag mr-2 text-gray-400"}),l(" 通知级别 ")],-1)),u(e("select",{"onUpdate:modelValue":t[22]||(t[22]=s=>r.value.level=s),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"},t[106]||(t[106]=[L('<option value="" data-v-3509d271>自动(根据通知类型)</option><option value="passive" data-v-3509d271>被动</option><option value="active" data-v-3509d271>默认</option><option value="timeSensitive" data-v-3509d271>时效性</option><option value="critical" data-v-3509d271>紧急</option>',5)]),512),[[K,r.value.level]])]),e("div",null,[t[109]||(t[109]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-volume-up mr-2 text-gray-400"}),l(" 通知声音 ")],-1)),u(e("select",{"onUpdate:modelValue":t[23]||(t[23]=s=>r.value.sound=s),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"},t[108]||(t[108]=[L('<option value="" data-v-3509d271>自动(根据通知类型)</option><option value="default" data-v-3509d271>默认</option><option value="alarm" data-v-3509d271>警报</option><option value="bell" data-v-3509d271>铃声</option><option value="birdsong" data-v-3509d271>鸟鸣</option><option value="electronic" data-v-3509d271>电子音</option><option value="glass" data-v-3509d271>玻璃</option><option value="horn" data-v-3509d271>喇叭</option><option value="silence" data-v-3509d271>静音</option>',9)]),512),[[K,r.value.sound]])]),e("div",null,[t[110]||(t[110]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-folder mr-2 text-gray-400"}),l(" 通知分组 "),e("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),u(e("input",{"onUpdate:modelValue":t[24]||(t[24]=s=>r.value.group=s),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),[[p,r.value.group]])]),t[111]||(t[111]=e("div",{class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},[e("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"}),e("div",{class:"text-sm text-blue-700 dark:text-blue-300"},[e("p",null,"1. 在iPhone上安装Bark App"),e("p",null,"2. 打开App获取您的设备密钥"),e("p",null,"3. 将密钥粘贴到上方输入框")])],-1))])):y("",!0),r.value.type==="smtp"?(i(),n("div",Sr,[e("div",null,[t[112]||(t[112]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" SMTP 服务器 "),e("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),u(e("input",{"onUpdate:modelValue":t[25]||(t[25]=s=>r.value.host=s),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),[[p,r.value.host]])]),e("div",Tr,[e("div",null,[t[113]||(t[113]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-plug mr-2 text-gray-400"}),l(" 端口 ")],-1)),u(e("input",{"onUpdate:modelValue":t[26]||(t[26]=s=>r.value.port=s),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),[[p,r.value.port,void 0,{number:!0}]]),t[114]||(t[114]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 默认: 587 (TLS) 或 465 (SSL) ",-1))]),e("div",null,[t[116]||(t[116]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 加密方式 ")],-1)),u(e("select",{"onUpdate:modelValue":t[27]||(t[27]=s=>r.value.secure=s),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"},t[115]||(t[115]=[e("option",{value:!1},"STARTTLS (端口587)",-1),e("option",{value:!0},"SSL/TLS (端口465)",-1)]),512),[[K,r.value.secure]])])]),e("div",null,[t[117]||(t[117]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-user mr-2 text-gray-400"}),l(" 用户名 "),e("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),u(e("input",{"onUpdate:modelValue":t[28]||(t[28]=s=>r.value.user=s),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),[[p,r.value.user]])]),e("div",null,[t[118]||(t[118]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-lock mr-2 text-gray-400"}),l(" 密码 / 应用密码 "),e("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),u(e("input",{"onUpdate:modelValue":t[29]||(t[29]=s=>r.value.pass=s),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),[[p,r.value.pass]]),t[119]||(t[119]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议使用应用专用密码,而非邮箱登录密码 ",-1))]),e("div",null,[t[120]||(t[120]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-paper-plane mr-2 text-gray-400"}),l(" 发件人邮箱 "),e("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),u(e("input",{"onUpdate:modelValue":t[30]||(t[30]=s=>r.value.from=s),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),[[p,r.value.from]])]),e("div",null,[t[121]||(t[121]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-envelope mr-2 text-gray-400"}),l(" 收件人邮箱 "),e("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),u(e("input",{"onUpdate:modelValue":t[31]||(t[31]=s=>r.value.to=s),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),[[p,r.value.to]]),t[122]||(t[122]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"接收通知的邮箱地址",-1))])])):y("",!0),r.value.type==="dingtalk"||r.value.type==="feishu"?(i(),n("div",Ir,[e("div",Cr,[e("div",Ar,[e("label",Br,[u(e("input",{id:"enableSign","onUpdate:modelValue":t[32]||(t[32]=s=>r.value.enableSign=s),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),[[R,r.value.enableSign]]),t[123]||(t[123]=e("span",{class:"ml-3 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 启用签名验证 ")],-1))]),r.value.enableSign?(i(),n("span",Vr," 已启用 ")):y("",!0)]),we(Se,{"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:Ue(()=>[r.value.enableSign?(i(),n("div",Dr,[t[124]||(t[124]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 签名密钥 ",-1)),u(e("input",{"onUpdate:modelValue":t[33]||(t[33]=s=>r.value.secret=s),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),[[p,r.value.secret]])])):y("",!0)]),_:1})])])):y("",!0)])]),e("div",Pr,[e("div",jr,[t[126]||(t[126]=e("div",{class:"text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-asterisk mr-1 text-red-500"}),l(" 必填项 ")],-1)),e("div",Lr,[e("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:W},t[125]||(t[125]=[e("i",{class:"fas fa-times mr-2 transition-transform group-hover:scale-110"},null,-1),l(" 取消 ",-1)])),e("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:V.value,onClick:ge},[e("i",{class:D(["mr-2 transition-transform",V.value?"fas fa-spinner fa-spin":"fas fa-vial group-hover:scale-110"])},null,2),l(" "+b(V.value?"测试中...":"测试连接"),1)],8,Er),e("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:!se.value||B.value,onClick:oe},[e("i",{class:D(["mr-2 transition-transform",B.value?"fas fa-spinner fa-spin":"fas fa-save group-hover:scale-110"])},null,2),l(" "+b(B.value?"保存中...":I.value?"保存修改":"添加平台"),1)],8,Fr)])])])])])):y("",!0)],64))}}),$r=Ie(Nr,[["__scopeId","data-v-3509d271"]]);export{$r as default};
|