mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-22 16:43:35 +00:00
72 lines
430 KiB
JavaScript
72 lines
430 KiB
JavaScript
import{b as qr,e as kr,f as Wr}from"./element-plus-BSjV1f9S.js";import{aP as Br,r as v,o as ve,V as Ha,x as n,y as o,z as e,L as m,K as b,al as je,aT as Et,O as f,aq as j,aa as Gr,P as u,aV as wa,aW as ka,C as $,c as Z,Z as Fr,an as Ie,Q as ke,q as ra,I as Xe,R as Ve,ac as Ne,u as Ye,a5 as Mt,B as Ze,aY as Qr,aU as Hr,D as ar,_ as hr,J as ot,Y as vt}from"./vue-vendor-DV7DYXbz.js";import{a4 as Jr,C as wr,D as $r,I as Ar,E as Cr,G as Tr,a5 as Ir,H as Ur,J as _r,a6 as Yr,a7 as Zr,a8 as Xr,a9 as es,aa as ts,ab as as,ac as rs,ad as ss,ae as ls,af as os,ag as ns,ah as is,ai as ds,aj as us,ak as ps,al as gs,am as cs,an as ha,ao as Kr,ap as ys,aq as Sr,ar as ms,as as xs,at as fs,au as bs,av as vs,aw as ks,ax as hs,ay as ws,az as $s,aA as As,aB as Cs,aC as Ts,s as V,c as Is,K as sr,aD as Us,aE as _s,aF as Ks,aG as Ss,_ as sa,aH as Ms,aI as Ds,aJ as Ps,aK as js,aL as Vs,aM as zs,aN as Ls,a as Rs,f as Je,aO as kt,aP as Mr,aQ as Dr,aR as Os,aS as Es,aT as Ns,F as qs,aU as Ws,aV as Bs,aW as Gs,aX as Fs,Z as cr,aY as Qs,aZ as Hs,a_ as Js,t as Ys,a$ as Zs}from"./index-BahP9Xx9.js";import{C as Ja}from"./ConfirmModal-C2rCOkXI.js";import{C as Xs}from"./chart-yFHxLHpB.js";import{C as Qa,_ as el}from"./ActionDropdown-GADQlLlI.js";import"./vendor-Dr8jvgFu.js";const yr={claude:{endpoint:"claude-accounts",stateKey:"claudeAccounts"},"claude-console":{endpoint:"claude-console-accounts",stateKey:"claudeConsoleAccounts"},bedrock:{endpoint:"bedrock-accounts",stateKey:"bedrockAccounts"},gemini:{endpoint:"gemini-accounts",stateKey:"geminiAccounts"},openai:{endpoint:"openai-accounts",stateKey:"openaiAccounts"},azure_openai:{endpoint:"azure-openai-accounts",stateKey:"azureOpenaiAccounts"},"openai-responses":{endpoint:"openai-responses-accounts",stateKey:"openaiResponsesAccounts"},droid:{endpoint:"droid-accounts",stateKey:"droidAccounts"}},Pr=Br("accounts",()=>{const F=v([]),_e=v([]),c=v([]),z=v([]),A=v([]),_=v([]),T=v([]),k=v([]),P=v(!1),O=v(null),Y=v(""),M=v("asc"),se={claudeAccounts:F,claudeConsoleAccounts:_e,bedrockAccounts:c,geminiAccounts:z,openaiAccounts:A,azureOpenaiAccounts:_,openaiResponsesAccounts:T,droidAccounts:k},ge=async(B,q)=>{P.value=!0;const Ee=await B();Ee.success?q.value=Ee.data||[]:O.value=Ee.message,P.value=!1},N=async(B,q,...Ee)=>{P.value=!0;const We=await B(...Ee);return We.success?await q():O.value=We.message,P.value=!1,We},E=()=>ge(wr,F),R=()=>ge($r,_e),y=()=>ge(Ar,c),p=()=>ge(Cr,z),D=()=>ge(Tr,A),de=()=>ge(Ir,_),le=()=>ge(Ur,T),ae=()=>ge(_r,k);return{claudeAccounts:F,claudeConsoleAccounts:_e,bedrockAccounts:c,geminiAccounts:z,openaiAccounts:A,azureOpenaiAccounts:_,openaiResponsesAccounts:T,droidAccounts:k,loading:P,error:O,sortBy:Y,sortOrder:M,fetchClaudeAccounts:E,fetchClaudeConsoleAccounts:R,fetchBedrockAccounts:y,fetchGeminiAccounts:p,fetchOpenAIAccounts:D,fetchAzureOpenAIAccounts:de,fetchOpenAIResponsesAccounts:le,fetchDroidAccounts:ae,fetchAllAccounts:async()=>{P.value=!0,await Promise.all([E(),R(),y(),p(),D(),de(),le(),ae()]),P.value=!1},createClaudeAccount:B=>N(Yr,E,B),createClaudeConsoleAccount:B=>N(Zr,R,B),createBedrockAccount:B=>N(Xr,y,B),createGeminiAccount:B=>N(es,p,B),createOpenAIAccount:B=>N(ts,D,B),createDroidAccount:B=>N(as,ae,B),updateDroidAccount:(B,q)=>N(ha,ae,B,q),createAzureOpenAIAccount:B=>N(rs,de,B),createOpenAIResponsesAccount:B=>N(ss,le,B),createGeminiApiAccount:B=>N(ls,p,B),updateClaudeAccount:(B,q)=>N(os,E,B,q),updateClaudeConsoleAccount:(B,q)=>N(ns,R,B,q),updateBedrockAccount:(B,q)=>N(is,y,B,q),updateGeminiAccount:(B,q)=>N(ds,p,B,q),updateOpenAIAccount:(B,q)=>N(us,D,B,q),updateAzureOpenAIAccount:(B,q)=>N(ps,de,B,q),updateOpenAIResponsesAccount:(B,q)=>N(gs,le,B,q),updateGeminiApiAccount:(B,q)=>N(cs,p,B,q),toggleAccount:async(B,q)=>{const Ee=yr[B];if(!Ee)return{success:!1,message:"未知平台"};P.value=!0;const We=await Kr(`/admin/${Ee.endpoint}/${q}/toggle`);return We.success?await ge(ys[`get${Ee.stateKey.charAt(0).toUpperCase()+Ee.stateKey.slice(1).replace("Accounts","")}AccountsApi`],se[Ee.stateKey]):O.value=We.message,P.value=!1,We},deleteAccount:async(B,q)=>{const Ee=yr[B];if(!Ee)return{success:!1,message:"未知平台"};P.value=!0;const We=await Sr(`/admin/${Ee.endpoint}/${q}`);return We.success?await{claude:E,"claude-console":R,bedrock:y,gemini:p,openai:D,azure_openai:de,"openai-responses":le,droid:ae}[B]():O.value=We.message,P.value=!1,We},refreshClaudeToken:async B=>{P.value=!0;const q=await ms(B);return q.success?await E():O.value=q.message,P.value=!1,q},generateClaudeAuthUrl:async B=>{const q=await xs(B);return q.success||(O.value=q.message),q.success?q.data:null},exchangeClaudeCode:async B=>{const q=await fs(B);return q.success||(O.value=q.message),q.success?q.data:null},generateClaudeSetupTokenUrl:async B=>{const q=await bs(B);return q.success||(O.value=q.message),q.success?q.data:null},exchangeClaudeSetupTokenCode:async B=>{const q=await vs(B);return q.success||(O.value=q.message),q.success?q.data:null},oauthWithCookie:async B=>{const q=await ks(B);return q.success||(O.value=q.message),q.success?q.data:null},oauthSetupTokenWithCookie:async B=>{const q=await hs(B);return q.success||(O.value=q.message),q.success?q.data:null},generateGeminiAuthUrl:async B=>{const q=await ws(B);return q.success||(O.value=q.message),q.success?q.data:null},exchangeGeminiCode:async B=>{const q=await $s(B);return q.success||(O.value=q.message),q.success?q.data:null},generateOpenAIAuthUrl:async B=>{const q=await As(B);return q.success||(O.value=q.message),q.success?q.data:null},exchangeOpenAICode:async B=>{const q=await Cs(B);return q.success||(O.value=q.message),q.success?q.data:null},generateDroidAuthUrl:async B=>{const q=await Ts(B);return q.success||(O.value=q.message),q.success?q.data:null},exchangeDroidCode:B=>Jr(B),sortAccounts:B=>{Y.value===B?M.value=M.value==="asc"?"desc":"asc":(Y.value=B,M.value="asc")},reset:()=>{F.value=[],_e.value=[],c.value=[],z.value=[],A.value=[],_.value=[],T.value=[],k.value=[],P.value=!1,O.value=null,Y.value="",M.value="asc"}}}),tl={class:"space-y-4"},al={class:"flex items-center justify-between"},rl={class:"flex cursor-pointer items-center"},sl={key:0,class:"space-y-4 rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-600 dark:bg-gray-800"},ll={class:"relative"},ol={key:0,class:"mt-1 text-xs text-red-500"},nl={key:1,class:"mt-1 text-xs text-green-500"},il={class:"grid grid-cols-2 gap-4"},dl={class:"space-y-4"},ul={class:"flex items-center"},pl={key:0,class:"grid grid-cols-2 gap-4"},gl={class:"relative"},cl=["type"],rr={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(F,{emit:_e}){const c=F,z=_e,A=v({...c.modelValue}),_=v(!!(A.value.username||A.value.password)),T=v(!1),k=v(""),P=v(""),O=v(!1);ve(()=>c.modelValue,R=>{JSON.stringify(R)!==JSON.stringify(A.value)&&(A.value={...R},_.value=!!(R.username||R.password))},{deep:!0}),ve(()=>A.value.enabled,()=>{M()}),ve(()=>A.value.type,()=>{M()}),ve(()=>A.value.host,()=>{M()}),ve(()=>A.value.port,()=>{M()}),ve(()=>A.value.username,()=>{M()}),ve(()=>A.value.password,()=>{M()}),ve(_,R=>{R||(A.value.username="",A.value.password="",M())});let Y=null;function M(){Y&&clearTimeout(Y),Y=setTimeout(()=>{const R={...A.value};_.value||(R.username="",R.password=""),z("update:modelValue",R)},100)}function se(){if(P.value="",O.value=!1,!!k.value)try{const R=k.value.split("#")[0].trim();if(!R)return;const y=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,p=R.match(y);if(!p){const he=/^([^:]+):(\d+)$/,W=R.match(he);if(W){A.value.type="socks5",A.value.host=W[1],A.value.port=W[2],A.value.username="",A.value.password="",_.value=!1,O.value=!0,M(),setTimeout(()=>{O.value=!1},3e3);return}P.value="无效的代理URL格式,请检查输入";return}const[,D,de,le,ae,oe]=p;A.value.type=D.toLowerCase(),A.value.host=ae,A.value.port=oe,de&&le?(A.value.username=decodeURIComponent(de),A.value.password=decodeURIComponent(le),_.value=!0):(A.value.username="",A.value.password="",_.value=!1),O.value=!0,M(),setTimeout(()=>{O.value=!1},3e3)}catch{P.value="解析失败,请检查URL格式"}}function ge(){k.value="",P.value="",O.value=!1}function N(){setTimeout(()=>{se()},0)}function E(){const R=k.value.trim();R.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(R)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(R))&&se():/^[^:]+:\d{2,5}$/.test(R)&&se()}return Ha(()=>{Y&&clearTimeout(Y)}),(R,y)=>(o(),n("div",tl,[e("div",al,[y[10]||(y[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",rl,[b(e("input",{"onUpdate:modelValue":y[0]||(y[0]=p=>A.value.enabled=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[je,A.value.enabled]]),y[9]||(y[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),A.value.enabled?(o(),n("div",sl,[y[22]||(y[22]=Et('<div class="mb-3 flex items-start gap-3"><div class="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-gray-500"><i class="fas fa-server text-sm text-white"></i></div><div class="flex-1"><p class="text-sm text-gray-700 dark:text-gray-300"> 配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。 </p><p class="mt-1 text-xs text-gray-500 dark:text-gray-400"> 请确保代理服务器稳定可用,否则会影响账户的正常使用。 </p></div></div>',1)),e("div",null,[y[14]||(y[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[f(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",ll,[b(e("input",{"onUpdate:modelValue":y[1]||(y[1]=p=>k.value=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: socks5://username:password@host:port 或 http://host:port",type:"text",onInput:E,onKeyup:Gr(se,["enter"]),onPaste:N},null,544),[[j,k.value]]),k.value?(o(),n("button",{key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:ge},y[11]||(y[11]=[e("i",{class:"fas fa-times"},null,-1)]))):m("",!0)]),P.value?(o(),n("p",ol,[y[12]||(y[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),f(" "+u(P.value),1)])):O.value?(o(),n("p",nl,y[13]||(y[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),f(" 代理配置已自动填充 ",-1)]))):m("",!0)]),y[23]||(y[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[y[16]||(y[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),b(e("select",{"onUpdate:modelValue":y[2]||(y[2]=p=>A.value.type=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},y[15]||(y[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[wa,A.value.type]])]),e("div",il,[e("div",null,[y[17]||(y[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),b(e("input",{"onUpdate:modelValue":y[3]||(y[3]=p=>A.value.host=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 192.168.1.100",type:"text"},null,512),[[j,A.value.host]])]),e("div",null,[y[18]||(y[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),b(e("input",{"onUpdate:modelValue":y[4]||(y[4]=p=>A.value.port=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 1080",type:"number"},null,512),[[j,A.value.port]])])]),e("div",dl,[e("div",ul,[b(e("input",{id:"proxyAuth","onUpdate:modelValue":y[5]||(y[5]=p=>_.value=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[je,_.value]]),y[19]||(y[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),_.value?(o(),n("div",pl,[e("div",null,[y[20]||(y[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),b(e("input",{"onUpdate:modelValue":y[6]||(y[6]=p=>A.value.username=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理用户名",type:"text"},null,512),[[j,A.value.username]])]),e("div",null,[y[21]||(y[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",gl,[b(e("input",{"onUpdate:modelValue":y[7]||(y[7]=p=>A.value.password=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理密码",type:T.value?"text":"password"},null,8,cl),[[ka,A.value.password]]),e("button",{class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:y[8]||(y[8]=p=>T.value=!T.value)},[e("i",{class:$(T.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):m("",!0)]),y[24]||(y[24]=e("div",{class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-info-circle mr-1"}),e("strong",null,"提示:"),f("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):m("",!0)]))}},yl={class:"space-y-6"},ml={key:0},xl={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},fl={class:"flex items-start gap-4"},bl={class:"flex-1"},vl={class:"mb-4"},kl={class:"flex gap-4"},hl={class:"flex cursor-pointer items-center gap-2"},wl={class:"flex cursor-pointer items-center gap-2"},$l={key:0,class:"space-y-4"},Al={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Cl={class:"mb-4"},Tl={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},Il={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},Ul={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},_l={key:0,class:"mb-4 rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-700 dark:bg-amber-900/30"},Kl={key:1,class:"mb-4 rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-700 dark:bg-red-900/30"},Sl={class:"text-sm text-red-600 dark:text-red-400"},Ml=["disabled"],Dl={key:0,class:"loading-spinner mr-2"},Pl={key:1,class:"fas fa-magic mr-2"},jl={key:1},Vl={class:"space-y-4"},zl={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Ll={class:"flex items-start gap-3"},Rl={class:"flex-1"},Ol=["disabled"],El={key:0,class:"fas fa-link mr-2"},Nl={key:1,class:"loading-spinner mr-2"},ql={key:1,class:"space-y-3"},Wl={class:"flex items-center gap-2"},Bl=["value"],Gl={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Fl={class:"flex items-start gap-3"},Ql={class:"flex-1"},Hl={class:"space-y-3"},Jl={key:1},Yl={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},Zl={class:"flex items-start gap-4"},Xl={class:"flex-1"},eo={class:"mb-4"},to={class:"text-sm text-green-800 dark:text-green-300"},ao={class:"font-semibold"},ro={class:"space-y-4"},so={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},lo={class:"flex items-start gap-3"},oo={class:"flex-1"},no=["disabled"],io={key:0,class:"fas fa-link mr-2"},uo={key:1,class:"loading-spinner mr-2"},po={key:1,class:"space-y-3"},go={class:"flex items-center gap-2"},co=["value"],yo={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},mo={class:"flex items-start gap-3"},xo={class:"flex-1"},fo={class:"space-y-3"},bo={key:2},vo={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},ko={class:"flex items-start gap-4"},ho={class:"flex-1"},wo={class:"space-y-4"},$o={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Ao={class:"flex items-start gap-3"},Co={class:"flex-1"},To=["disabled"],Io={key:0,class:"fas fa-link mr-2"},Uo={key:1,class:"loading-spinner mr-2"},_o={key:1,class:"space-y-3"},Ko={class:"flex items-center gap-2"},So=["value"],Mo={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Do={class:"flex items-start gap-3"},Po={class:"flex-1"},jo={class:"space-y-3"},Vo={key:3},zo={class:"rounded-lg border border-cyan-200 bg-cyan-50 p-6 dark:border-cyan-700 dark:bg-cyan-900/30"},Lo={class:"flex items-start gap-4"},Ro={class:"flex-1"},Oo={class:"space-y-4"},Eo={class:"rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"},No={class:"flex items-start gap-3"},qo={class:"flex-1"},Wo=["disabled"],Bo={key:0,class:"fas fa-link mr-2"},Go={key:1,class:"loading-spinner mr-2"},Fo={key:1,class:"space-y-4"},Qo={class:"space-y-2"},Ho={class:"flex flex-col gap-2 rounded-md border border-cyan-200 bg-white p-3 dark:border-cyan-700 dark:bg-gray-800"},Jo={class:"flex items-center gap-2"},Yo=["value"],Zo={class:"space-y-2"},Xo={class:"flex items-center justify-between rounded-md border border-cyan-200 bg-cyan-50 px-4 py-3 dark:border-cyan-700 dark:bg-cyan-900/30"},en={class:"font-mono text-xl font-semibold text-cyan-700 dark:text-cyan-200"},tn={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},an={class:"flex gap-3 pt-4"},rn=["disabled"],sn={key:0,class:"loading-spinner mr-2"},ln={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(F,{expose:_e,emit:c}){const z=F,A=c,_=Pr(),T=v(!1),k=v(!1),P=v(""),O=v(""),Y=v(!1),M=Z(()=>z.platform==="gemini-antigravity"?"antigravity":"gemini-cli"),se=v(""),ge=v(""),N=v(""),E=v(""),R=v(0);let y=null;const p=v("manual"),D=v(""),de=v(!1),le=v(""),ae=v(!1),oe=v({current:0,total:0}),he=Z(()=>D.value.split(`
|
||
`).map(xe=>xe.trim()).filter(xe=>xe.length>0).length),W=Z(()=>z.platform==="droid"?!!se.value:P.value&&O.value.trim()),Q=Z(()=>{if(!R.value||R.value<=0)return"00:00";const xe=Math.floor(R.value/60),g=R.value%60;return`${xe.toString().padStart(2,"0")}:${g.toString().padStart(2,"0")}`}),H=xe=>{if(h(),!xe||xe<=0){R.value=0;return}R.value=Math.floor(xe),y=setInterval(()=>{R.value<=1?(R.value=0,h()):R.value-=1},1e3)},h=()=>{y&&(clearInterval(y),y=null)};ve(O,xe=>{if(z.platform==="droid"||!xe||typeof xe!="string")return;const g=xe.trim();if(!g)return;if(g.startsWith("http://")||g.startsWith("https://"))if(g.startsWith("http://localhost:45462")||g.startsWith("http://localhost:1455"))try{const re=new URL(g).searchParams.get("code");re?(O.value=re,V("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):V("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(U){console.error("Failed to parse URL:",U),V("链接格式错误,请检查是否为完整的 URL","error")}else if(z.platform==="gemini"||z.platform==="gemini-antigravity"||z.platform==="openai")try{const re=new URL(g).searchParams.get("code");re&&(O.value=re,V("成功提取授权码!","success"))}catch{}else V("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const X=async()=>{var xe;h(),P.value="",O.value="",ge.value="",N.value="",E.value="",R.value=0,se.value="",Y.value=!1,T.value=!0;try{const g=(xe=z.proxy)!=null&&xe.enabled?{proxy:{type:z.proxy.type,host:z.proxy.host,port:parseInt(z.proxy.port),username:z.proxy.username||null,password:z.proxy.password||null}}:{};if(z.platform==="claude"){const a=await _.generateClaudeAuthUrl(g);P.value=a.authUrl,se.value=a.sessionId}else if(z.platform==="gemini"||z.platform==="gemini-antigravity"){const a=await _.generateGeminiAuthUrl({...g,oauthProvider:M.value});P.value=a.authUrl,se.value=a.sessionId}else if(z.platform==="openai"){const a=await _.generateOpenAIAuthUrl(g);P.value=a.authUrl,se.value=a.sessionId}else if(z.platform==="droid"){const a=await _.generateDroidAuthUrl(g);P.value=a.verificationUriComplete||a.verificationUri,N.value=a.verificationUri,E.value=a.verificationUriComplete||a.verificationUri,ge.value=a.userCode,H(a.expiresIn||300),se.value=a.sessionId}}catch(g){V(g.message||"生成授权链接失败","error")}finally{T.value=!1}},C=()=>{h(),P.value="",O.value="",ge.value="",N.value="",E.value="",R.value=0,se.value="",X()},G=async()=>{if(!P.value){V("请先生成授权链接","warning");return}try{await navigator.clipboard.writeText(P.value),Y.value=!0,V("链接已复制","success"),setTimeout(()=>{Y.value=!1},2e3)}catch{const g=document.createElement("input");g.value=P.value,document.body.appendChild(g),g.select(),document.execCommand("copy"),document.body.removeChild(g),Y.value=!0,V("链接已复制","success"),setTimeout(()=>{Y.value=!1},2e3)}},K=async()=>{if(!ge.value){V("请先生成授权验证码","warning");return}try{await navigator.clipboard.writeText(ge.value),V("验证码已复制","success")}catch{const g=document.createElement("input");g.value=ge.value,document.body.appendChild(g),g.select(),document.execCommand("copy"),document.body.removeChild(g),V("验证码已复制","success")}},Ce=()=>{E.value?window.open(E.value,"_blank","noopener"):N.value&&window.open(N.value,"_blank","noopener")},ze=async()=>{var xe;if(W.value){k.value=!0;try{let g={};z.platform==="claude"?g={sessionId:se.value,callbackUrl:O.value.trim()}:z.platform==="gemini"||z.platform==="gemini-antigravity"?g={code:O.value.trim(),sessionId:se.value,oauthProvider:M.value}:z.platform==="openai"?g={code:O.value.trim(),sessionId:se.value}:z.platform==="droid"&&(g={sessionId:se.value}),(xe=z.proxy)!=null&&xe.enabled&&(g.proxy={type:z.proxy.type,host:z.proxy.host,port:parseInt(z.proxy.port),username:z.proxy.username||null,password:z.proxy.password||null});let a;if(z.platform==="claude")a=await _.exchangeClaudeCode(g);else if(z.platform==="gemini"||z.platform==="gemini-antigravity")a=await _.exchangeGeminiCode(g),a&&(a.oauthProvider=M.value);else if(z.platform==="openai")a=await _.exchangeOpenAICode(g);else if(z.platform==="droid"){const U=await _.exchangeDroidCode(g);if(!U.success){if(U.pending){const re=U.message||"授权尚未完成,请在浏览器确认后稍候再次尝试。";V(re,"info"),typeof U.expiresIn=="number"&&U.expiresIn>=0&&H(U.expiresIn);return}throw new Error(U.message||"授权失败,请重试")}a=U.data,h()}A("success",a)}catch(g){V(g.message||"授权失败,请检查授权码是否正确","error")}finally{k.value=!1}}};Fr(()=>{h()});const Ke=async()=>{var re;const xe=D.value.split(`
|
||
`).map(ne=>ne.trim()).filter(ne=>ne.length>0);if(xe.length===0){le.value="请输入至少一个 sessionKey";return}de.value=!0,le.value="",oe.value={current:0,total:xe.length};const g=(re=z.proxy)!=null&&re.enabled?{type:z.proxy.type,host:z.proxy.host,port:parseInt(z.proxy.port),username:z.proxy.username||null,password:z.proxy.password||null}:null,a=[],U=[];for(let ne=0;ne<xe.length;ne++){oe.value.current=ne+1;try{const Re=await _.oauthWithCookie({sessionKey:xe[ne],proxy:g});a.push(Re)}catch(Re){U.push({index:ne+1,key:xe[ne].substring(0,20)+"...",error:Re.message})}}oe.value={current:0,total:0},a.length>0?A("success",a):de.value=!1,U.length>0&&a.length===0?le.value="全部授权失败,请检查 sessionKey 是否有效":U.length>0&&(le.value=`${U.length} 个授权失败`)},Fe=()=>{D.value="",le.value="",de.value=!1,oe.value={current:0,total:0}},Qe=()=>{Fe(),P.value="",O.value="",se.value=""};return _e({resetCookieAuth:Fe}),(xe,g)=>(o(),n("div",yl,[F.platform==="claude"?(o(),n("div",ml,[e("div",xl,[e("div",fl,[g[29]||(g[29]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-link text-white"})],-1)),e("div",bl,[g[28]||(g[28]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"},"Claude 账户授权",-1)),e("div",vl,[g[10]||(g[10]=e("label",{class:"mb-2 block text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式 ",-1)),e("div",kl,[e("label",hl,[b(e("input",{"onUpdate:modelValue":g[0]||(g[0]=a=>p.value=a),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"manual",onChange:Qe},null,544),[[Ie,p.value]]),g[8]||(g[8]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"手动授权",-1))]),e("label",wl,[b(e("input",{"onUpdate:modelValue":g[1]||(g[1]=a=>p.value=a),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"cookie",onChange:Qe},null,544),[[Ie,p.value]]),g[9]||(g[9]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"Cookie自动授权",-1))])])]),p.value==="cookie"?(o(),n("div",$l,[e("div",Al,[g[17]||(g[17]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 使用 claude.ai 的 sessionKey 自动完成 OAuth 授权流程,无需手动打开浏览器。 ",-1)),e("div",Cl,[e("label",Tl,[g[12]||(g[12]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),g[13]||(g[13]=f(" sessionKey ",-1)),he.value>1?(o(),n("span",Il,u(he.value)+" 个 ",1)):m("",!0),e("button",{class:"text-blue-500 hover:text-blue-600",type:"button",onClick:g[2]||(g[2]=a=>ae.value=!ae.value)},g[11]||(g[11]=[e("i",{class:"fas fa-question-circle"},null,-1)]))]),b(e("textarea",{"onUpdate:modelValue":g[3]||(g[3]=a=>D.value=a),class:"form-input w-full resize-y font-mono text-sm",placeholder:`每行一个 sessionKey,例如:
|
||
sk-ant-sid01-xxxxx...
|
||
sk-ant-sid01-yyyyy...`,rows:"3"},null,512),[[j,D.value]]),he.value>1?(o(),n("p",Ul,[g[14]||(g[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),f(" 将批量创建 "+u(he.value)+" 个账户 ",1)])):m("",!0)]),ae.value?(o(),n("div",_l,g[15]||(g[15]=[Et('<h5 class="mb-2 font-semibold text-amber-800 dark:text-amber-200"><i class="fas fa-lightbulb mr-1"></i>如何获取 sessionKey </h5><ol class="list-inside list-decimal space-y-1 text-xs text-amber-700 dark:text-amber-300"><li>在浏览器中登录 <strong>claude.ai</strong></li><li> 按 <kbd class="rounded bg-gray-200 px-1 dark:bg-gray-700">F12</kbd> 打开开发者工具 </li><li>切换到 <strong>Application</strong>(应用)标签页</li><li> 在左侧找到 <strong>Cookies</strong> → <strong>https://claude.ai</strong></li><li>找到键为 <strong>sessionKey</strong> 的那一行</li><li>复制其 <strong>Value</strong>(值)列的内容</li></ol><p class="mt-2 text-xs text-amber-600 dark:text-amber-400"><i class="fas fa-info-circle mr-1"></i> sessionKey 通常以 <code class="rounded bg-gray-200 px-1 dark:bg-gray-700">sk-ant-sid01-</code> 开头 </p>',3)]))):m("",!0),le.value?(o(),n("div",Kl,[e("p",Sl,[g[16]||(g[16]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),f(" "+u(le.value),1)])])):m("",!0),e("button",{class:"btn btn-primary w-full px-4 py-3 text-base font-semibold",disabled:de.value||!D.value.trim(),type:"button",onClick:Ke},[de.value?(o(),n("div",Dl)):(o(),n("i",Pl)),de.value&&oe.value.total>1?(o(),n(ke,{key:2},[f(" 正在授权 "+u(oe.value.current)+"/"+u(oe.value.total)+"... ",1)],64)):de.value?(o(),n(ke,{key:3},[f(" 正在授权... ")],64)):(o(),n(ke,{key:4},[f(" 开始自动授权 ")],64))],8,Ml)])])):(o(),n("div",jl,[g[27]||(g[27]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤完成 Claude 账户的授权: ",-1)),e("div",Vl,[e("div",zl,[e("div",Ll,[g[20]||(g[20]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Rl,[g[19]||(g[19]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),P.value?(o(),n("div",ql,[e("div",Wl,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:P.value},null,8,Bl),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:G},[e("i",{class:$(Y.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:C},g[18]||(g[18]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:T.value,onClick:X},[T.value?(o(),n("div",Nl)):(o(),n("i",El)),f(" "+u(T.value?"生成中...":"生成授权链接"),1)],8,Ol))])])]),g[26]||(g[26]=Et('<div class="rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"><div class="flex items-start gap-3"><div class="flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"> 2 </div><div class="flex-1"><p class="mb-2 font-medium text-blue-900 dark:text-blue-200"> 在浏览器中打开链接并完成授权 </p><p class="mb-2 text-sm text-blue-700 dark:text-blue-300"> 请在新标签页中打开授权链接,登录您的 Claude 账户并授权。 </p><div class="rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"><p class="text-xs text-yellow-800 dark:text-yellow-300"><i class="fas fa-exclamation-triangle mr-1"></i><strong>注意:</strong>如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 </p></div></div></div></div>',1)),e("div",Gl,[e("div",Fl,[g[25]||(g[25]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Ql,[g[23]||(g[23]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),g[24]||(g[24]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"},[f(" 授权完成后,页面会显示一个 "),e("strong",null,"Authorization Code"),f(",请将其复制并粘贴到下方输入框: ")],-1)),e("div",Hl,[e("div",null,[g[21]||(g[21]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),f("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":g[4]||(g[4]=a=>O.value=a),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[j,O.value]])]),g[22]||(g[22]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 请粘贴从Claude页面复制的Authorization Code ")],-1))])])])])])]))])])])])):F.platform==="gemini"||F.platform==="gemini-antigravity"?(o(),n("div",Jl,[e("div",Yl,[e("div",Zl,[g[43]||(g[43]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-green-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",Xl,[g[41]||(g[41]=e("h4",{class:"mb-3 font-semibold text-green-900 dark:text-green-200"},"Gemini 账户授权",-1)),g[42]||(g[42]=e("p",{class:"mb-4 text-sm text-green-800 dark:text-green-300"}," 请按照以下步骤完成 Gemini 账户的授权: ",-1)),e("div",eo,[e("p",to,[g[30]||(g[30]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),g[31]||(g[31]=f(" 授权类型:",-1)),e("span",ao,u(F.platform==="gemini-antigravity"?"Antigravity OAuth":"Gemini CLI OAuth"),1)])]),e("div",ro,[e("div",so,[e("div",lo,[g[34]||(g[34]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",oo,[g[33]||(g[33]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 点击下方按钮生成授权链接 ",-1)),P.value?(o(),n("div",po,[e("div",go,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:P.value},null,8,co),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:G},[e("i",{class:$(Y.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-green-600 hover:text-green-700",onClick:C},g[32]||(g[32]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:T.value,onClick:X},[T.value?(o(),n("div",uo)):(o(),n("i",io)),f(" "+u(T.value?"生成中...":"生成授权链接"),1)],8,no))])])]),g[40]||(g[40]=Et('<div class="rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"><div class="flex items-start gap-3"><div class="flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"> 2 </div><div class="flex-1"><p class="mb-2 font-medium text-green-900 dark:text-green-200"> 在浏览器中打开链接并完成授权 </p><p class="mb-2 text-sm text-green-700 dark:text-green-300"> 请在新标签页中打开授权链接,登录您的 Gemini 账户并授权。 </p><div class="rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"><p class="text-xs text-yellow-800 dark:text-yellow-300"><i class="fas fa-exclamation-triangle mr-1"></i><strong>注意:</strong>如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 </p></div></div></div></div>',1)),e("div",yo,[e("div",mo,[g[39]||(g[39]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",xo,[g[37]||(g[37]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 输入 Authorization Code ",-1)),g[38]||(g[38]=e("p",{class:"mb-3 text-sm text-green-700 dark:text-green-300"}," 授权完成后,页面会显示一个 Authorization Code,请将其复制并粘贴到下方输入框: ",-1)),e("div",fo,[e("div",null,[g[35]||(g[35]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-green-500"}),f("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":g[5]||(g[5]=a=>O.value=a),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[j,O.value]])]),g[36]||(g[36]=e("div",{class:"mt-2 space-y-1"},[e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-check-circle mr-1 text-green-500"}),f(" 请粘贴从Gemini页面复制的Authorization Code ")])],-1))])])])])])])])])])):F.platform==="openai"?(o(),n("div",bo,[e("div",vo,[e("div",ko,[g[55]||(g[55]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-orange-500"},[e("i",{class:"fas fa-brain text-white"})],-1)),e("div",ho,[g[53]||(g[53]=e("h4",{class:"mb-3 font-semibold text-orange-900 dark:text-orange-200"},"OpenAI 账户授权",-1)),g[54]||(g[54]=e("p",{class:"mb-4 text-sm text-orange-800 dark:text-orange-300"}," 请按照以下步骤完成 OpenAI 账户的授权: ",-1)),e("div",wo,[e("div",$o,[e("div",Ao,[g[46]||(g[46]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Co,[g[45]||(g[45]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 点击下方按钮生成授权链接 ",-1)),P.value?(o(),n("div",_o,[e("div",Ko,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:P.value},null,8,So),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:G},[e("i",{class:$(Y.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-orange-600 hover:text-orange-700",onClick:C},g[44]||(g[44]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:T.value,onClick:X},[T.value?(o(),n("div",Uo)):(o(),n("i",Io)),f(" "+u(T.value?"生成中...":"生成授权链接"),1)],8,To))])])]),g[52]||(g[52]=Et('<div class="rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"><div class="flex items-start gap-3"><div class="flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"> 2 </div><div class="flex-1"><p class="mb-2 font-medium text-orange-900 dark:text-orange-200"> 在浏览器中打开链接并完成授权 </p><p class="mb-2 text-sm text-orange-700 dark:text-orange-300"> 请在新标签页中打开授权链接,登录您的 OpenAI 账户并授权。 </p><div class="mb-3 rounded border border-amber-300 bg-amber-50 p-3 dark:border-amber-700 dark:bg-amber-900/30"><p class="text-xs text-amber-800 dark:text-amber-300"><i class="fas fa-clock mr-1"></i><strong>重要提示:</strong>授权后页面可能会加载较长时间,请耐心等待。 </p><p class="mt-2 text-xs text-amber-700 dark:text-amber-400"> 当浏览器地址栏变为 <strong class="font-mono">http://localhost:1455/...</strong> 开头时,表示授权已完成。 </p></div><div class="rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"><p class="text-xs text-yellow-800 dark:text-yellow-300"><i class="fas fa-exclamation-triangle mr-1"></i><strong>注意:</strong>如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 </p></div></div></div></div>',1)),e("div",Mo,[e("div",Do,[g[51]||(g[51]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Po,[g[49]||(g[49]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 输入授权链接或 Code ",-1)),g[50]||(g[50]=e("p",{class:"mb-3 text-sm text-orange-700 dark:text-orange-300"},[f(" 授权完成后,当页面地址变为 "),e("strong",{class:"font-mono"},"http://localhost:1455/..."),f(" 时: ")],-1)),e("div",jo,[e("div",null,[g[47]||(g[47]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-link mr-2 text-orange-500"}),f("授权链接或 Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":g[6]||(g[6]=a=>O.value=a),class:"form-input w-full resize-none font-mono text-sm",placeholder:`方式1:复制完整的链接(http://localhost:1455/auth/callback?code=...)
|
||
方式2:仅复制 code 参数的值
|
||
系统会自动识别并提取所需信息`,rows:"3"},null,512),[[j,O.value]])]),g[48]||(g[48]=Et('<div class="rounded border border-blue-300 bg-blue-50 p-2 dark:border-blue-700 dark:bg-blue-900/30"><p class="text-xs text-blue-700 dark:text-blue-300"><i class="fas fa-lightbulb mr-1"></i><strong>提示:</strong>您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别。 </p><p class="mt-1 text-xs text-blue-600 dark:text-blue-400"> • 完整链接示例:<span class="font-mono">http://localhost:1455/auth/callback?code=ac_4hm8...</span></p><p class="text-xs text-blue-600"> • 仅 Code 示例:<span class="font-mono">ac_4hm8iqmx9A2fzMy_cwye7U3W7...</span></p></div>',1))])])])])])])])])])):F.platform==="droid"?(o(),n("div",Vo,[e("div",zo,[e("div",Lo,[g[67]||(g[67]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-cyan-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",Ro,[g[65]||(g[65]=e("h4",{class:"mb-3 font-semibold text-cyan-900 dark:text-cyan-200"},"Droid 账户授权",-1)),g[66]||(g[66]=e("p",{class:"mb-4 text-sm text-cyan-800 dark:text-cyan-300"}," 请按照以下步骤完成 Factory (Droid) 账户的授权: ",-1)),e("div",Oo,[e("div",Eo,[e("div",No,[g[63]||(g[63]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",qo,[g[62]||(g[62]=e("p",{class:"mb-2 font-medium text-cyan-900 dark:text-cyan-200"}," 点击下方按钮生成授权链接 ",-1)),P.value?(o(),n("div",Fo,[e("div",Qo,[g[58]||(g[58]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权链接",-1)),e("div",Ho,[e("div",Jo,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:P.value},null,8,Yo),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:G},[e("i",{class:$(Y.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("div",{class:"flex flex-wrap items-center gap-2"},[e("button",{class:"inline-flex items-center gap-1 rounded-md border border-cyan-200 bg-white px-3 py-1.5 text-xs font-medium text-cyan-600 shadow-sm transition-colors hover:border-cyan-300 hover:bg-cyan-50 dark:border-cyan-700 dark:bg-cyan-900/40 dark:text-cyan-200 dark:hover:border-cyan-500 dark:hover:bg-cyan-900/60",onClick:Ce},g[56]||(g[56]=[e("i",{class:"fas fa-external-link-alt text-xs"},null,-1),f(" 在新标签中打开 ",-1)])),e("button",{class:"inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-xs font-medium text-cyan-600 transition-colors hover:text-cyan-700 dark:text-cyan-300 dark:hover:text-cyan-200",onClick:C},g[57]||(g[57]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),f("重新生成 ",-1)]))])])]),e("div",Zo,[g[60]||(g[60]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权验证码",-1)),e("div",Xo,[e("span",en,u(ge.value||"------"),1),e("button",{class:"rounded-lg bg-white px-3 py-1 text-sm text-cyan-600 transition-colors hover:bg-cyan-100 dark:bg-cyan-800 dark:text-cyan-200 dark:hover:bg-cyan-700",onClick:K},g[59]||(g[59]=[e("i",{class:"fas fa-copy mr-1"},null,-1),f("复制 ",-1)]))])]),e("div",tn,[e("span",null,[g[61]||(g[61]=e("i",{class:"fas fa-hourglass-half mr-1 text-cyan-500"},null,-1)),f(" 剩余有效期:"+u(Q.value),1)])])])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:T.value,onClick:X},[T.value?(o(),n("div",Go)):(o(),n("i",Bo)),f(" "+u(T.value?"生成中...":"生成授权链接"),1)],8,Wo))])])]),g[64]||(g[64]=Et('<div class="rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"><div class="flex items-start gap-3"><div class="flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-600 text-xs font-bold text-white"> 2 </div><div class="flex-1"><p class="mb-2 font-medium text-cyan-900 dark:text-cyan-200"> 在浏览器中打开链接并完成授权 </p><div class="space-y-2 text-sm text-cyan-700 dark:text-cyan-300"><p> 在浏览器中打开授权页面,输入上方验证码并登录 Factory / Droid 账户,最后点击允许授权。 </p></div></div></div></div><div class="rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"><div class="flex items-start gap-3"><div class="flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-600 text-xs font-bold text-white"> 3 </div><div class="flex-1"><p class="mb-2 font-medium text-cyan-900 dark:text-cyan-200"> 完成授权后点击下方“完成授权”按钮,系统会自动获取访问令牌。 </p><p class="text-xs text-gray-500 dark:text-gray-400"> 若提示授权仍在等待确认,请稍候片刻后系统会自动重试。 </p></div></div></div>',2))])])])])])):m("",!0),e("div",an,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:g[7]||(g[7]=a=>xe.$emit("back"))}," 上一步 "),F.platform==="claude"&&p.value==="cookie"?m("",!0):(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!W.value||k.value,type:"button",onClick:ze},[k.value?(o(),n("div",sn)):m("",!0),f(" "+u(k.value?"验证中...":"完成授权"),1)],8,rn))])]))}},on={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},nn={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-4xl overflow-y-auto p-4 sm:p-6 md:p-8"},dn={class:"mb-4 flex items-center justify-between sm:mb-6"},un={class:"mb-4 flex flex-wrap gap-2"},pn=["onClick"],gn={class:"ml-1 text-xs opacity-70"},cn={class:"space-y-4"},yn={key:0,class:"py-8 text-center"},mn={key:1,class:"rounded-lg bg-gray-50 py-8 text-center dark:bg-gray-800"},xn={key:2,class:"grid grid-cols-1 gap-4 md:grid-cols-2"},fn={class:"mb-3 flex items-start justify-between"},bn={class:"flex-1"},vn={class:"font-semibold text-gray-900"},kn={class:"mt-1 text-sm text-gray-500"},hn={class:"ml-4 flex items-center gap-2"},wn={class:"flex items-center justify-between text-sm text-gray-600"},$n={class:"flex items-center gap-4"},An={class:"flex items-center gap-2"},Cn=["onClick"],Tn=["disabled","onClick"],In={key:1,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Un={class:"modal-content w-full max-w-lg p-4 sm:p-6"},_n={class:"space-y-4"},Kn={class:"rounded-lg bg-gray-100 px-3 py-2 text-sm text-gray-600"},Sn={class:"flex gap-3 pt-4"},Mn=["disabled"],Dn={key:0,class:"loading-spinner mr-2"},Pn={key:2,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},jn={class:"modal-content w-full max-w-lg p-4 sm:p-6"},Vn={class:"space-y-4"},zn={class:"flex flex-wrap gap-4"},Ln={class:"flex cursor-pointer items-center"},Rn={class:"flex cursor-pointer items-center"},On={class:"flex cursor-pointer items-center"},En={class:"flex cursor-pointer items-center"},Nn={class:"flex gap-3 pt-4"},qn=["disabled"],Wn={key:0,class:"loading-spinner mr-2"},jr={__name:"GroupManagementModal",emits:["close","refresh"],setup(F,{emit:_e}){const c=_e,z=v(!0),A=v(!1),_=v([]),T=v("all"),k=[{key:"all",label:"全部",color:"gray"},{key:"claude",label:"Claude",color:"purple"},{key:"gemini",label:"Gemini",color:"blue"},{key:"openai",label:"OpenAI",color:"gray"},{key:"droid",label:"Droid",color:"cyan"}],P=Z(()=>{const X={all:_.value.length};return k.slice(1).forEach(C=>{X[C.key]=_.value.filter(G=>G.platform===C.key).length}),X}),O=Z(()=>T.value==="all"?_.value:_.value.filter(X=>X.platform===T.value)),Y=v(!1),M=v(null),se=v(!1),ge=v(!1),N=v({name:"",platform:"claude",description:""}),E=v(!1),R=v(!1),y=v(null),p=v({name:"",platform:"",description:""}),D=async()=>{A.value=!0;try{const X=await sr();_.value=X.data||[]}catch{V("加载分组列表失败","error")}finally{A.value=!1}},de=async()=>{var X,C;if(!N.value.name||!N.value.platform){V("请填写必填项","error");return}ge.value=!0;try{await _s({name:N.value.name,platform:N.value.platform,description:N.value.description}),V("分组创建成功","success"),ae(),await D(),c("refresh")}catch(G){V(((C=(X=G.response)==null?void 0:X.data)==null?void 0:C.error)||"创建分组失败","error")}finally{ge.value=!1}},le=()=>{N.value.platform=T.value!=="all"?T.value:"claude",se.value=!0},ae=()=>{se.value=!1,N.value={name:"",platform:"claude",description:""}},oe=X=>{y.value=X,p.value={name:X.name,platform:X.platform,description:X.description||""},E.value=!0},he=async()=>{var X,C;if(!p.value.name){V("请填写分组名称","error");return}R.value=!0;try{await Us(y.value.id,{name:p.value.name,description:p.value.description}),V("分组更新成功","success"),W(),await D(),c("refresh")}catch(G){V(((C=(X=G.response)==null?void 0:X.data)==null?void 0:C.error)||"更新分组失败","error")}finally{R.value=!1}},W=()=>{E.value=!1,y.value=null,p.value={name:"",platform:"",description:""}},Q=X=>{if(X.memberCount>0){V("分组内还有成员,无法删除","error");return}M.value=X,Y.value=!0},H=async()=>{var X,C;if(M.value)try{await Ks(M.value.id),V("分组删除成功","success"),h(),await D(),c("refresh")}catch(G){V(((C=(X=G.response)==null?void 0:X.data)==null?void 0:C.error)||"删除分组失败","error")}},h=()=>{Y.value=!1,M.value=null};return ra(()=>{D()}),(X,C)=>{var G;return o(),Xe(Mt,{to:"body"},[z.value?(o(),n("div",on,[e("div",nn,[e("div",dn,[C[10]||(C[10]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-layer-group text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 账户分组管理 ")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:C[0]||(C[0]=K=>X.$emit("close"))},C[9]||(C[9]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",un,[(o(),n(ke,null,Ne(k,K=>e("button",{key:K.key,class:$(["rounded-lg px-3 py-1.5 text-sm font-medium transition-all",T.value===K.key?K.key==="claude"?"bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300":K.key==="gemini"?"bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300":K.key==="droid"?"bg-cyan-100 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300":"bg-gray-200 text-gray-700 dark:bg-gray-700 dark:text-gray-200":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700"]),onClick:Ce=>T.value=K.key},[f(u(K.label)+" ",1),e("span",gn,"("+u(P.value[K.key])+")",1)],10,pn)),64))]),e("div",{class:"mb-6"},[e("button",{class:"btn btn-primary px-4 py-2",onClick:le},C[11]||(C[11]=[e("i",{class:"fas fa-plus mr-2"},null,-1),f(" 创建新分组 ",-1)]))]),e("div",cn,[A.value?(o(),n("div",yn,C[12]||(C[12]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500"},"加载中...",-1)]))):O.value.length===0?(o(),n("div",mn,C[13]||(C[13]=[e("i",{class:"fas fa-layer-group mb-4 text-4xl text-gray-300 dark:text-gray-600"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"暂无分组",-1)]))):(o(),n("div",xn,[(o(!0),n(ke,null,Ne(O.value,K=>(o(),n("div",{key:K.id,class:"rounded-lg border bg-white p-4 transition-shadow hover:shadow-md"},[e("div",fn,[e("div",bn,[e("h4",vn,u(K.name),1),e("p",kn,u(K.description||"暂无描述"),1)]),e("div",hn,[e("span",{class:$(["rounded-full px-2 py-1 text-xs font-medium",K.platform==="claude"?"bg-purple-100 text-purple-700":K.platform==="gemini"?"bg-blue-100 text-blue-700":K.platform==="openai"?"bg-gray-100 text-gray-700":"bg-cyan-100 text-cyan-700"])},u(K.platform==="claude"?"Claude":K.platform==="gemini"?"Gemini":K.platform==="openai"?"OpenAI":"Droid"),3)])]),e("div",wn,[e("div",$n,[e("span",null,[C[14]||(C[14]=e("i",{class:"fas fa-users mr-1"},null,-1)),f(" "+u(K.memberCount||0)+" 个成员 ",1)]),e("span",null,[C[15]||(C[15]=e("i",{class:"fas fa-clock mr-1"},null,-1)),f(" "+u(Ye(Is)(K.createdAt)),1)])]),e("div",An,[e("button",{class:"text-blue-600 transition-colors hover:text-blue-800",title:"编辑",onClick:Ce=>oe(K)},C[16]||(C[16]=[e("i",{class:"fas fa-edit"},null,-1)]),8,Cn),e("button",{class:"text-red-600 transition-colors hover:text-red-800",disabled:K.memberCount>0,title:"删除",onClick:Ce=>Q(K)},C[17]||(C[17]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Tn)])])]))),128))]))])])])):m("",!0),E.value?(o(),n("div",In,[e("div",Un,[e("div",{class:"mb-4 flex items-center justify-between"},[C[19]||(C[19]=e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100"},"编辑分组",-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",onClick:W},C[18]||(C[18]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",_n,[e("div",null,[C[20]||(C[20]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),b(e("input",{"onUpdate:modelValue":C[1]||(C[1]=K=>p.value.name=K),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[j,p.value.name]])]),e("div",null,[C[22]||(C[22]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型",-1)),e("div",Kn,[f(u(p.value.platform==="claude"?"Claude":p.value.platform==="gemini"?"Gemini":"OpenAI")+" ",1),C[21]||(C[21]=e("span",{class:"ml-2 text-xs text-gray-500"},"(不可修改)",-1))])]),e("div",null,[C[23]||(C[23]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":C[2]||(C[2]=K=>p.value.description=K),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[j,p.value.description]])]),e("div",Sn,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!p.value.name||R.value,onClick:he},[R.value?(o(),n("div",Dn)):m("",!0),f(" "+u(R.value?"更新中...":"更新"),1)],8,Mn),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:W},"取消")])])])])):m("",!0),se.value?(o(),n("div",Pn,[e("div",jn,[e("div",{class:"mb-4 flex items-center justify-between"},[C[25]||(C[25]=e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100"},"创建新分组",-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:ae},C[24]||(C[24]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",Vn,[e("div",null,[C[26]||(C[26]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"分组名称 *",-1)),b(e("input",{"onUpdate:modelValue":C[3]||(C[3]=K=>N.value.name=K),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[j,N.value.name]])]),e("div",null,[C[31]||(C[31]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"平台类型 *",-1)),e("div",zn,[e("label",Ln,[b(e("input",{"onUpdate:modelValue":C[4]||(C[4]=K=>N.value.platform=K),class:"mr-2",type:"radio",value:"claude"},null,512),[[Ie,N.value.platform]]),C[27]||(C[27]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude",-1))]),e("label",Rn,[b(e("input",{"onUpdate:modelValue":C[5]||(C[5]=K=>N.value.platform=K),class:"mr-2",type:"radio",value:"gemini"},null,512),[[Ie,N.value.platform]]),C[28]||(C[28]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Gemini",-1))]),e("label",On,[b(e("input",{"onUpdate:modelValue":C[6]||(C[6]=K=>N.value.platform=K),class:"mr-2",type:"radio",value:"openai"},null,512),[[Ie,N.value.platform]]),C[29]||(C[29]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OpenAI",-1))]),e("label",En,[b(e("input",{"onUpdate:modelValue":C[7]||(C[7]=K=>N.value.platform=K),class:"mr-2",type:"radio",value:"droid"},null,512),[[Ie,N.value.platform]]),C[30]||(C[30]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Droid",-1))])])]),e("div",null,[C[32]||(C[32]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":C[8]||(C[8]=K=>N.value.description=K),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[j,N.value.description]])]),e("div",Nn,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!N.value.name||!N.value.platform||ge.value,onClick:de},[ge.value?(o(),n("div",Wn)):m("",!0),f(" "+u(ge.value?"创建中...":"创建"),1)],8,qn),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:ae},"取消")])])])])):m("",!0),Ve(Ja,{"cancel-text":"取消","confirm-text":"确认删除",message:`确定要删除分组 "${(G=M.value)==null?void 0:G.name}" 吗?此操作不可撤销。`,show:Y.value,title:"确认删除",type:"danger",onCancel:h,onConfirm:H},null,8,["message","show"])])}}},Bn={key:0,class:"modal fixed inset-0 z-[60] flex items-center justify-center p-3 sm:p-4"},Gn={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-4xl overflow-y-auto p-4 sm:p-6 md:p-8"},Fn={class:"mb-4 flex items-center justify-between sm:mb-6"},Qn={class:"flex items-center gap-2 sm:gap-3"},Hn={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Jn={class:"flex items-center gap-2"},Yn=["disabled"],Zn={key:0,class:"py-8 text-center"},Xn={key:1,class:"rounded-lg bg-gray-50 py-8 text-center dark:bg-gray-800"},ei={key:2},ti={class:"mb-4 space-y-3"},ai={class:"rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-800"},ri={class:"mb-3 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},si={class:"flex items-center gap-2"},li={class:"flex gap-1"},oi={class:"flex flex-1 items-center gap-2 lg:max-w-md"},ni={class:"relative flex-1"},ii={class:"flex gap-1"},di={class:"flex flex-wrap items-center justify-between gap-2"},ui={class:"flex flex-wrap items-center gap-2"},pi=["disabled"],gi=["disabled"],ci=["disabled"],yi=["disabled"],mi={class:"flex items-center gap-2 rounded-md bg-purple-50 px-3 py-1.5 dark:bg-purple-900/20"},xi={class:"text-xs font-medium text-purple-700 dark:text-purple-300"},fi={class:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"},bi={key:0,class:"absolute -left-2 -top-2 z-10"},vi=["title"],ki={class:"flex flex-col gap-3"},hi={class:"flex items-start justify-between gap-2"},wi=["title"],$i={class:"flex items-center gap-1"},Ai=["onClick"],Ci=["disabled","onClick"],Ti={key:0,class:"loading-spinner-sm"},Ii={key:1,class:"fas fa-redo"},Ui=["disabled","onClick"],_i={key:0,class:"loading-spinner-sm"},Ki={key:1,class:"fas fa-trash"},Si={class:"flex flex-wrap items-center gap-3 text-xs text-gray-600 dark:text-gray-400"},Mi={key:0},Di={key:0,class:"mt-4 flex items-center justify-between"},Pi={class:"text-sm text-gray-600 dark:text-gray-400"},ji={class:"flex items-center gap-2"},Vi=["disabled"],zi=["disabled"],Li={class:"px-3 py-1.5 text-sm font-medium text-gray-700 dark:text-gray-300"},Ri=["disabled"],Oi=["disabled"],Ei={__name:"ApiKeyManagementModal",props:{accountId:{type:String,required:!0},accountName:{type:String,default:""}},emits:["close","refresh"],setup(F,{emit:_e}){const c=F,z=_e,A=v(!0),_=v(!1),T=v(null),k=v(null),P=v([]),O=v(1),Y=v(15),M=v(!1),se=v("all"),ge=v(""),N=v("fuzzy"),E=v(!1),R=v(!1),y=v({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),p=v(null),D=(g,a,U="确认",re="取消",ne="primary")=>new Promise(Re=>{y.value={title:g,message:a,confirmText:U,cancelText:re,type:ne},p.value=Re,R.value=!0}),de=()=>{var g;R.value=!1,(g=p.value)==null||g.call(p,!0)},le=()=>{var g;R.value=!1,(g=p.value)==null||g.call(p,!1)},ae=g=>!g||g.length<12?g:`${g.substring(0,8)}...${g.substring(g.length-4)}`,oe=Z(()=>{let g=P.value;if(se.value!=="all"&&(g=g.filter(a=>a.status===se.value)),ge.value.trim()){const a=ge.value.trim();g=g.filter(U=>{const re=U.key;return N.value==="exact"?re===a:re.toLowerCase().includes(a.toLowerCase())})}return g}),he=Z(()=>oe.value.length),W=Z(()=>Math.ceil(he.value/Y.value)),Q=Z(()=>{const g=(O.value-1)*Y.value,a=g+Y.value;return oe.value.slice(g,a)}),H=Z(()=>P.value.filter(g=>g.status==="active").length),h=Z(()=>P.value.filter(g=>g.status==="error").length),X=async()=>{_.value=!0;try{const a=(await Ss(c.accountId)).data;let U=[];if(Array.isArray(a.apiKeys))U=a.apiKeys;else if(typeof a.apiKeys=="string")try{U=JSON.parse(a.apiKeys)}catch(ne){console.error("Failed to parse apiKeys:",ne)}const re=U.map(ne=>typeof ne=="string"?{key:ne,usageCount:0,status:"active",lastUsedAt:null,errorMessage:""}:typeof ne=="object"&&ne!==null?{key:ne.key||ne.apiKey||"",usageCount:ne.usageCount||ne.count||0,status:ne.status||"active",lastUsedAt:ne.lastUsedAt||ne.lastUsed||null,errorMessage:ne.errorMessage||""}:{key:String(ne),usageCount:0,status:"active",lastUsedAt:null,errorMessage:""});P.value=re.sort((ne,Re)=>ne.lastUsedAt&&Re.lastUsedAt?new Date(Re.lastUsedAt)-new Date(ne.lastUsedAt):ne.lastUsedAt&&!Re.lastUsedAt?-1:!ne.lastUsedAt&&Re.lastUsedAt?1:(Re.usageCount||0)-(ne.usageCount||0))}catch(g){console.error("Failed to load API keys:",g),V("加载 API Key 失败","error")}finally{_.value=!1,O.value=1}},C=async g=>{var a,U;if(await D("删除 API Key",`确定要删除 API Key "${ae(g.key)}" 吗?`,"删除","取消","danger")){T.value=g.key;try{const re={removeApiKeys:[g.key],apiKeyUpdateMode:"delete"};await ha(c.accountId,re),V("API Key 已删除","success"),await X(),z("refresh")}catch(re){console.error("Failed to delete API key:",re),V(((U=(a=re.response)==null?void 0:a.data)==null?void 0:U.error)||"删除 API Key 失败","error")}finally{T.value=null}}},G=async g=>{var a,U;if(await D("重置状态",`确定要重置 API Key "${ae(g.key)}" 的状态吗?这将清除错误信息并恢复为正常状态。`,"重置","取消","warning")){k.value=g.key;try{const re={apiKeys:[{key:g.key,status:"active",errorMessage:""}],apiKeyUpdateMode:"update"};await ha(c.accountId,re),V("API Key 状态已重置","success"),await X(),z("refresh")}catch(re){console.error("Failed to reset API key status:",re),V(((U=(a=re.response)==null?void 0:a.data)==null?void 0:U.error)||"重置 API Key 状态失败","error")}finally{k.value=null}}},K=async()=>{var a,U;const g=P.value.filter(re=>re.status==="error");if(g.length===0){V("没有异常状态的 API Key","warning");return}if(await D("删除异常 API Key",`确定要删除所有 ${g.length} 个异常状态的 API Key 吗?此操作不可恢复!`,"删除","取消","danger")){E.value=!0;try{const ne={removeApiKeys:g.map(Re=>Re.key),apiKeyUpdateMode:"delete"};await ha(c.accountId,ne),V(`成功删除 ${g.length} 个异常 API Key`,"success"),await X(),z("refresh")}catch(re){console.error("Failed to delete error API keys:",re),V(((U=(a=re.response)==null?void 0:a.data)==null?void 0:U.error)||"批量删除失败","error")}finally{E.value=!1}}},Ce=async()=>{var g,a;if(P.value.length===0){V("没有可删除的 API Key","warning");return}if(await D("删除全部 API Key",`确定要删除所有 ${P.value.length} 个 API Key 吗?此操作不可恢复!
|
||
|
||
请再次确认:这将删除该账户下的所有 API Key。`,"删除","取消","danger")&&await D("最后确认","真的要删除所有 API Key 吗?","确认删除","取消","danger")){E.value=!0;try{const U=P.value.map(ne=>ne.key),re={removeApiKeys:U,apiKeyUpdateMode:"delete"};await ha(c.accountId,re),V(`成功删除所有 ${U.length} 个 API Key`,"success"),await X(),z("refresh")}catch(U){console.error("Failed to delete all API keys:",U),V(((a=(g=U.response)==null?void 0:g.data)==null?void 0:a.error)||"批量删除失败","error")}finally{E.value=!1}}},ze=g=>{let a=[],U="";if(g==="error"?(a=P.value.filter(st=>st.status==="error"),U=`error_api_keys_${c.accountName}_${new Date().toISOString().split("T")[0]}.txt`):(a=P.value,U=`all_api_keys_${c.accountName}_${new Date().toISOString().split("T")[0]}.txt`),a.length===0){V("没有可导出的 API Key","warning");return}const re=a.map(st=>st.key).join(`
|
||
`),ne=new Blob([re],{type:"text/plain;charset=utf-8"}),Re=URL.createObjectURL(ne),Oe=document.createElement("a");Oe.href=Re,Oe.download=U,document.body.appendChild(Oe),Oe.click(),document.body.removeChild(Oe),URL.revokeObjectURL(Re),V(`成功导出 ${a.length} 个 API Key`,"success")},Ke=async g=>{if(typeof navigator<"u"&&navigator.clipboard&&typeof navigator.clipboard.writeText=="function"&&(typeof window>"u"||window.isSecureContext!==!1)){await navigator.clipboard.writeText(g);return}if(typeof document>"u")throw new Error("clipboard unavailable");const U=document.createElement("textarea");U.value=g,U.setAttribute("readonly",""),U.style.position="fixed",U.style.opacity="0",U.style.pointerEvents="none",document.body.appendChild(U),U.select();try{const re=document.execCommand("copy");if(document.body.removeChild(U),!re)throw new Error("execCommand failed")}catch(re){throw document.body.removeChild(U),re}},Fe=async g=>{try{await Ke(g),V("API Key 已复制","success")}catch(a){console.error("Failed to copy:",a),V("复制失败,请手动复制","error")}},Qe=async()=>{if(!(!P.value.length||M.value)){M.value=!0;try{const g=P.value.map(a=>a.key).join(`
|
||
`);await Ke(g),V(`已复制 ${P.value.length} 条 API Key`,"success")}catch(g){console.error("Failed to copy all keys:",g),V("复制全部 API Key 失败,请手动复制","error")}finally{M.value=!1}}},xe=g=>{if(!g)return"-";try{return new Date(g).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return"-"}};return ra(()=>{X()}),(g,a)=>(o(),Xe(Mt,{to:"body"},[A.value?(o(),n("div",Bn,[e("div",Gn,[e("div",Fn,[e("div",Qn,[a[14]||(a[14]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-key text-sm text-white sm:text-base"})],-1)),e("div",null,[a[13]||(a[13]=e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," API Key 管理 ",-1)),e("p",Hn,u(F.accountName),1)])]),e("div",Jn,[e("button",{class:"flex items-center gap-2 rounded-lg border border-purple-200 bg-white/90 px-3 py-1.5 text-xs font-semibold text-purple-600 shadow-sm transition-all duration-200 hover:border-purple-300 hover:bg-purple-50 hover:text-purple-700 focus:outline-none focus:ring-2 focus:ring-purple-200 disabled:cursor-not-allowed disabled:opacity-60 dark:border-purple-600/60 dark:bg-purple-900/20 dark:text-purple-200 dark:hover:border-purple-500 dark:hover:bg-purple-900/40 dark:hover:text-purple-100 dark:focus:ring-purple-500/40 sm:text-sm",disabled:_.value||P.value.length===0||M.value,onClick:Qe},[e("i",{class:$(["text-sm sm:text-base",M.value?"fas fa-spinner fa-spin":"fas fa-clipboard-list"])},null,2),a[15]||(a[15]=e("span",null,"复制全部 Key",-1))],8,Yn),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-400 transition-colors hover:text-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:text-gray-200 sm:h-10 sm:w-10",title:"关闭",onClick:a[0]||(a[0]=U=>g.$emit("close"))},a[16]||(a[16]=[e("i",{class:"fas fa-times text-base sm:text-lg"},null,-1)]))])]),_.value?(o(),n("div",Zn,a[17]||(a[17]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):m("",!0),!_.value&&P.value.length===0?(o(),n("div",Xn,a[18]||(a[18]=[e("i",{class:"fas fa-key mb-4 text-4xl text-gray-300 dark:text-gray-600"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"暂无 API Key",-1)]))):m("",!0),!_.value&&P.value.length>0?(o(),n("div",ei,[e("div",ti,[e("div",ai,[e("div",ri,[e("div",si,[a[21]||(a[21]=e("i",{class:"fas fa-filter text-gray-400 dark:text-gray-500"},null,-1)),a[22]||(a[22]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"筛选:",-1)),e("div",li,[e("button",{class:$(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",se.value==="all"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:a[1]||(a[1]=U=>se.value="all")}," 全部 ("+u(P.value.length)+") ",3),e("button",{class:$(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",se.value==="active"?"bg-green-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:a[2]||(a[2]=U=>se.value="active")},[a[19]||(a[19]=e("i",{class:"fas fa-check-circle mr-1"},null,-1)),f(" 正常 ("+u(H.value)+") ",1)],2),e("button",{class:$(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",se.value==="error"?"bg-red-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:a[3]||(a[3]=U=>se.value="error")},[a[20]||(a[20]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),f(" 异常 ("+u(h.value)+") ",1)],2)])]),e("div",oi,[e("div",ni,[b(e("input",{"onUpdate:modelValue":a[4]||(a[4]=U=>ge.value=U),class:"w-full rounded-md border border-gray-300 bg-gray-50 py-2 pl-10 pr-3 text-sm text-gray-700 transition-colors placeholder:text-gray-400 focus:border-purple-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-300 dark:placeholder:text-gray-500 dark:focus:border-purple-400 dark:focus:bg-gray-800",placeholder:"搜索 API Key...",type:"text"},null,512),[[j,ge.value]]),a[23]||(a[23]=e("i",{class:"fas fa-search absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 dark:text-gray-500"},null,-1))]),e("div",ii,[e("button",{class:$(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",N.value==="fuzzy"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),title:"模糊搜索:包含查询字符串即可",onClick:a[5]||(a[5]=U=>N.value="fuzzy")},a[24]||(a[24]=[e("i",{class:"fas fa-search mr-1"},null,-1),f(" 模糊 ",-1)]),2),e("button",{class:$(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",N.value==="exact"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),title:"精确搜索:完全匹配完整 Key",onClick:a[6]||(a[6]=U=>N.value="exact")},a[25]||(a[25]=[e("i",{class:"fas fa-equals mr-1"},null,-1),f(" 精确 ",-1)]),2)])])]),a[35]||(a[35]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-700"},null,-1)),e("div",di,[e("div",ui,[a[30]||(a[30]=e("span",{class:"text-xs font-medium text-gray-500 dark:text-gray-400"},"批量操作:",-1)),e("button",{class:"group rounded-md bg-gradient-to-r from-red-500 to-red-600 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-red-600 hover:to-red-700 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:h.value===0||E.value,title:"删除所有异常状态的 API Key",onClick:K},a[26]||(a[26]=[e("i",{class:"fas fa-trash-alt mr-1"},null,-1),f(" 删除异常 ",-1)]),8,pi),e("button",{class:"group rounded-md bg-gradient-to-r from-red-600 to-red-700 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-red-700 hover:to-red-800 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:P.value.length===0||E.value,title:"删除所有 API Key",onClick:Ce},a[27]||(a[27]=[e("i",{class:"fas fa-trash mr-1"},null,-1),f(" 删除全部 ",-1)]),8,gi),a[31]||(a[31]=e("div",{class:"mx-1 h-5 w-px bg-gray-300 dark:bg-gray-600"},null,-1)),e("button",{class:"rounded-md bg-gradient-to-r from-blue-500 to-blue-600 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-blue-600 hover:to-blue-700 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:h.value===0,title:"导出所有异常状态的 API Key",onClick:a[7]||(a[7]=U=>ze("error"))},a[28]||(a[28]=[e("i",{class:"fas fa-download mr-1"},null,-1),f(" 导出异常 ",-1)]),8,ci),e("button",{class:"rounded-md bg-gradient-to-r from-blue-600 to-blue-700 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-blue-700 hover:to-blue-800 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:P.value.length===0,title:"导出所有 API Key",onClick:a[8]||(a[8]=U=>ze("all"))},a[29]||(a[29]=[e("i",{class:"fas fa-file-export mr-1"},null,-1),f(" 导出全部 ",-1)]),8,yi)]),e("div",mi,[a[34]||(a[34]=e("i",{class:"fas fa-info-circle text-purple-500 dark:text-purple-400"},null,-1)),e("span",xi,[a[32]||(a[32]=f(" 显示 ",-1)),e("strong",null,u(oe.value.length),1),a[33]||(a[33]=f(" 个 ",-1))])])])])]),e("div",fi,[(o(!0),n(ke,null,Ne(Q.value,(U,re)=>(o(),n("div",{key:re,class:"relative rounded-lg border border-gray-200 bg-white p-4 transition-all hover:shadow-md dark:border-gray-700 dark:bg-gray-800"},[(U.status==="error"||U.status==="disabled")&&U.errorMessage?(o(),n("div",bi,[e("span",{class:$(["inline-flex items-center justify-center rounded-full px-2 py-0.5 text-[10px] font-semibold shadow-sm",[U.status==="error"?"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400":"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400"]]),title:`错误状态码: ${U.errorMessage}`},u(U.errorMessage),11,vi)])):m("",!0),e("div",ki,[e("div",hi,[e("span",{class:"flex-1 break-all font-mono text-xs font-medium text-gray-900 dark:text-gray-100",title:U.key},u(ae(U.key)),9,wi),e("div",$i,[e("button",{class:"text-xs text-gray-500 transition-colors hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200",title:"复制 API Key",onClick:ne=>Fe(U.key)},a[36]||(a[36]=[e("i",{class:"fas fa-copy"},null,-1)]),8,Ai),U.status==="error"||U.status==="disabled"?(o(),n("button",{key:0,class:$(["text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-50",[U.status==="error"?"text-orange-500 hover:text-orange-700 dark:text-orange-400 dark:hover:text-orange-300":"text-yellow-500 hover:text-yellow-700 dark:text-yellow-400 dark:hover:text-yellow-300"]]),disabled:k.value===U.key,title:"重置状态",onClick:ne=>G(U)},[k.value===U.key?(o(),n("div",Ti)):(o(),n("i",Ii))],10,Ci)):m("",!0),e("button",{class:"text-xs text-red-500 transition-colors hover:text-red-700 disabled:cursor-not-allowed disabled:opacity-50 dark:text-red-400 dark:hover:text-red-600",disabled:T.value===U.key,onClick:ne=>C(U)},[T.value===U.key?(o(),n("div",_i)):(o(),n("i",Ki))],8,Ui)])]),e("div",Si,[e("div",null,[e("span",{class:$([U.status==="active"?"text-green-600 dark:text-green-400":U.status==="error"?"text-red-600 dark:text-red-400":"text-yellow-600 dark:text-yellow-400"])},[e("i",{class:$(["mr-1",[U.status==="active"?"fas fa-check-circle":U.status==="error"?"fas fa-exclamation-triangle":"fas fa-exclamation-circle"]])},null,2),f(" "+u(U.status==="active"?"正常":U.status==="error"?"异常":U.status==="disabled"?"禁用":U.status||"未知"),1)],2)]),e("div",null,[e("span",null,[a[37]||(a[37]=f("使用: ",-1)),e("strong",null,u(U.usageCount||0),1),a[38]||(a[38]=f("次",-1))])]),U.lastUsedAt?(o(),n("div",Mi,[e("span",null,u(xe(U.lastUsedAt)),1)])):m("",!0)])])]))),128))]),W.value>1?(o(),n("div",Di,[e("div",Pi," 显示 "+u((O.value-1)*Y.value+1)+"-"+u(Math.min(O.value*Y.value,he.value))+" 项,共 "+u(he.value)+" 项 ",1),e("div",ji,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:O.value===1,onClick:a[9]||(a[9]=U=>O.value=1)},a[39]||(a[39]=[e("i",{class:"fas fa-angle-double-left"},null,-1)]),8,Vi),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:O.value===1,onClick:a[10]||(a[10]=U=>O.value--)},a[40]||(a[40]=[e("i",{class:"fas fa-angle-left"},null,-1)]),8,zi),e("span",Li,u(O.value)+" / "+u(W.value),1),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:O.value===W.value,onClick:a[11]||(a[11]=U=>O.value++)},a[41]||(a[41]=[e("i",{class:"fas fa-angle-right"},null,-1)]),8,Ri),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:O.value===W.value,onClick:a[12]||(a[12]=U=>O.value=W.value)},a[42]||(a[42]=[e("i",{class:"fas fa-angle-double-right"},null,-1)]),8,Oi)])])):m("",!0)])):m("",!0)])])):m("",!0),Ve(Ja,{"cancel-text":y.value.cancelText,"confirm-text":y.value.confirmText,message:y.value.message,show:R.value,title:y.value.title,type:y.value.type,onCancel:le,onConfirm:de},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},Ni={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},qi={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto p-4 sm:p-6 md:p-8"},Wi={class:"mb-4 flex items-center justify-between sm:mb-6"},Bi={class:"flex items-center gap-2 sm:gap-3"},Gi={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Fi={key:0,class:"mb-4 flex items-center justify-center sm:mb-8"},Qi={class:"flex items-center space-x-2 sm:space-x-4"},Hi={class:"flex items-center"},Ji={class:"flex items-center"},Yi={key:1},Zi={class:"space-y-6"},Xi={key:0},ed={class:"space-y-3"},td={class:"grid grid-cols-2 gap-2 sm:grid-cols-4"},ad={class:"p-3"},rd={class:"flex items-center justify-between"},sd={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-indigo-500"},ld={class:"p-3"},od={class:"flex items-center justify-between"},nd={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-emerald-500"},id={class:"p-3"},dd={class:"flex items-center justify-between"},ud={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-blue-500"},pd={class:"p-3"},gd={class:"flex items-center justify-between"},cd={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-rose-500"},yd={key:0,class:"animate-fadeIn rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},md={class:"grid grid-cols-2 gap-2 sm:grid-cols-3"},xd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-indigo-500"},fd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},bd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-orange-500"},vd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-cyan-500"},kd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-emerald-500"},hd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-teal-500"},wd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},$d={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},Ad={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},Cd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-amber-500"},Td={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-rose-500"},Id={key:1},Ud={class:"flex flex-wrap gap-4"},_d={class:"flex cursor-pointer items-center"},Kd={class:"text-sm text-gray-700 dark:text-gray-300"},Sd={key:0},Md={key:0,class:"flex cursor-pointer items-center"},Dd={class:"flex cursor-pointer items-center"},Pd={key:1,class:"flex cursor-pointer items-center"},jd={key:0,class:"mt-1 text-xs text-red-500"},Vd={class:"flex gap-4"},zd={class:"flex cursor-pointer items-center"},Ld={class:"flex cursor-pointer items-center"},Rd={class:"flex cursor-pointer items-center"},Od={key:2},Ed={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Nd={key:0,class:"mt-3"},qd=["min"],Wd={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Bd={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Gd={key:3},Fd={class:"flex gap-2"},Qd={class:"flex-1"},Hd={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},Jd={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},Yd=["value"],Zd={class:"text-sm text-gray-700 dark:text-gray-200"},Xd={key:4},e0={key:5,class:"space-y-4"},t0={key:0,class:"flex gap-4"},a0={class:"flex cursor-pointer items-center"},r0={class:"flex cursor-pointer items-center"},s0={key:1,class:"flex gap-4"},l0={class:"flex items-center opacity-60"},o0={class:"flex items-center opacity-60"},n0={class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},i0={class:"flex items-start gap-2"},d0={class:"text-xs text-blue-700 dark:text-blue-300"},u0={key:0,class:"font-medium"},p0={key:1,class:"font-medium"},g0={key:2,class:"mt-1 text-xs italic"},c0={key:0},y0={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},m0=["placeholder","required"],x0={key:0,class:"mt-1 text-xs text-red-500"},f0={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},b0={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},v0=["placeholder","required"],k0={key:0,class:"mt-1 text-xs text-red-500"},h0={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},w0=["placeholder"],$0={key:1},A0={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},C0=["placeholder","required"],T0={key:0,class:"mt-1 text-xs text-red-500"},I0={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},U0={key:0,class:"mt-1 text-xs text-red-500"},_0={key:6,class:"space-y-4"},K0={key:0,class:"mt-1 text-xs text-red-500"},S0={key:0,class:"mt-1 text-xs text-red-500"},M0={key:0,class:"mt-1 text-xs text-red-500"},D0={class:"flex flex-wrap gap-2"},P0=["value"],j0={class:"text-sm text-gray-700 dark:text-gray-300"},V0={key:7},z0={class:"mb-3"},L0={class:"inline-flex cursor-pointer items-center"},R0={key:0},O0={key:8,class:"space-y-4"},E0={key:0,class:"mt-1 text-xs text-red-500"},N0={key:0,class:"mt-1 text-xs text-red-500"},q0={class:"grid grid-cols-2 gap-4"},W0={class:"mb-4 flex gap-2"},B0={key:0},G0={class:"mb-3 grid grid-cols-2 gap-2"},F0=["value"],Q0={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},H0={class:"text-xs text-gray-500 dark:text-gray-400"},J0={key:0},Y0={key:1},Z0={class:"mb-3 space-y-2"},X0=["onUpdate:modelValue"],eu=["onUpdate:modelValue"],tu=["onClick"],au={class:"mt-3 flex flex-wrap gap-2"},ru={class:"mb-3"},su={class:"inline-flex cursor-pointer items-center"},lu={key:0},ou={key:0},nu={class:"inline-flex cursor-pointer items-center"},iu={key:9,class:"space-y-4"},du={class:"relative"},uu=["type"],pu={key:10,class:"space-y-4"},gu={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},cu={class:"relative"},yu=["type"],mu={key:11},xu={class:"flex gap-4"},fu={class:"flex cursor-pointer items-center"},bu={class:"flex cursor-pointer items-center"},vu={key:12,class:"mt-4"},ku={class:"flex items-start"},hu={key:13,class:"mt-4"},wu={class:"flex items-start"},$u={key:14,class:"mt-4"},Au={class:"flex items-start"},Cu={key:15,class:"mt-4"},Tu={class:"flex items-start"},Iu={class:"ml-3"},Uu={key:0,class:"mt-1"},_u={class:"flex items-center justify-between"},Ku={class:"text-xs text-green-600 dark:text-green-400"},Su=["disabled"],Mu={key:0,class:"fas fa-trash-alt mr-1"},Du={key:1,class:"loading-spinner mr-1"},Pu={key:1,class:"mt-1"},ju={key:16,class:"mt-4"},Vu={class:"flex items-start"},zu={class:"ml-3 flex-1"},Lu={key:0,class:"mt-3"},Ru={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Ou={class:"flex items-center gap-2"},Eu={class:"block w-full select-all break-all rounded bg-gray-100 px-3 py-2 font-mono text-xs text-gray-700 dark:bg-gray-900 dark:text-gray-300"},Nu={class:"text-blue-600 dark:text-blue-400"},qu={class:"text-gray-500 dark:text-gray-500"},Wu={class:"text-blue-600 dark:text-blue-400"},Bu={key:17,class:"space-y-4 rounded-lg border border-blue-200 bg-blue-50 p-4"},Gu={class:"mb-4 flex items-start gap-3"},Fu={key:0,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Qu={key:1,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Hu={key:2,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Ju={key:3,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Yu={class:"mb-2 mt-2 rounded-lg border border-blue-300 bg-white/80 p-3 dark:border-blue-600 dark:bg-gray-800/80"},Zu={key:0,class:"text-xs text-blue-800 dark:text-blue-300"},Xu={key:1,class:"text-xs text-blue-800 dark:text-blue-300"},ep={key:2,class:"text-xs text-blue-800 dark:text-blue-300"},tp={key:3,class:"text-xs text-blue-800 dark:text-blue-300"},ap={key:4,class:"text-xs text-blue-600 dark:text-blue-400"},rp={key:5,class:"text-xs text-red-600 dark:text-red-400"},sp={key:0},lp={key:1},op={key:0,class:"mt-1 text-xs text-red-500"},np={key:2},ip={key:0,class:"mt-1 text-xs text-red-500"},dp={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},up={key:3},pp={key:4},gp={key:18,class:"space-y-4 rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},cp={key:0,class:"mt-1 text-xs text-red-500"},yp={class:"flex gap-3 pt-4"},mp=["disabled"],xp=["disabled"],fp={key:0,class:"loading-spinner mr-2"},bp={key:3,class:"space-y-6"},vp={key:0},kp={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},hp={class:"flex items-start gap-4"},wp={class:"flex-1"},$p={class:"mb-4"},Ap={class:"flex flex-wrap gap-4"},Cp={class:"flex cursor-pointer items-center"},Tp={class:"flex cursor-pointer items-center"},Ip={key:0,class:"space-y-4"},Up={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},_p={class:"flex items-start gap-3"},Kp={class:"flex-1"},Sp=["disabled"],Mp={key:0,class:"fas fa-link mr-2"},Dp={key:1,class:"loading-spinner mr-2"},Pp={key:1,class:"space-y-3"},jp={class:"flex items-center gap-2"},Vp=["value"],zp={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Lp={class:"flex items-start gap-3"},Rp={class:"flex-1"},Op={class:"space-y-3"},Ep={key:1,class:"space-y-4"},Np={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},qp={class:"space-y-4"},Wp={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},Bp={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},Gp={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},Fp={key:1,class:"mt-1 text-xs text-red-500"},Qp={key:0,class:"mt-3 rounded border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-700"},Hp=["disabled"],Jp={key:0,class:"loading-spinner mr-2"},Yp={key:1,class:"fas fa-magic mr-2"},Zp={class:"flex gap-3 pt-4"},Xp=["disabled"],eg={key:0,class:"loading-spinner mr-2"},tg={key:4,class:"space-y-6"},ag={class:"flex gap-4"},rg={class:"flex cursor-pointer items-center"},sg={class:"flex cursor-pointer items-center"},lg={class:"flex cursor-pointer items-center"},og={key:0},ng={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},ig={key:0,class:"mt-3"},dg=["min"],ug={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},pg={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},gg={key:1},cg={class:"flex gap-2"},yg={class:"flex-1"},mg={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},xg={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},fg=["value"],bg={class:"text-sm text-gray-700 dark:text-gray-200"},vg={key:2},kg={key:3},hg={class:"flex gap-4"},wg={class:"flex cursor-pointer items-center"},$g={class:"flex cursor-pointer items-center"},Ag={key:4,class:"mt-4"},Cg={class:"flex items-start"},Tg={key:5,class:"mt-4"},Ig={class:"flex items-start"},Ug={key:6,class:"mt-4"},_g={class:"flex items-start"},Kg={key:7,class:"mt-4"},Sg={class:"flex items-start"},Mg={class:"ml-3"},Dg={key:0,class:"mt-1"},Pg={class:"flex items-center justify-between"},jg={class:"text-xs text-green-600 dark:text-green-400"},Vg=["disabled"],zg={key:0,class:"fas fa-trash-alt mr-1"},Lg={key:1,class:"loading-spinner mr-1"},Rg={key:1,class:"mt-1"},Og={key:8,class:"mt-4"},Eg={class:"flex items-start"},Ng={class:"ml-3 flex-1"},qg={key:0,class:"mt-3"},Wg={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Bg={class:"flex items-center gap-2"},Gg={class:"block w-full select-all break-all rounded bg-gray-100 px-3 py-2 font-mono text-xs text-gray-700 dark:bg-gray-900 dark:text-gray-300"},Fg={class:"text-blue-600 dark:text-blue-400"},Qg={class:"text-gray-500 dark:text-gray-500"},Hg={class:"text-blue-600 dark:text-blue-400"},Jg={key:9,class:"space-y-4"},Yg={class:"grid grid-cols-2 gap-4"},Zg={key:0,class:"rounded-lg bg-gray-50 p-4 dark:bg-gray-800"},Xg={class:"mb-2 flex items-center justify-between"},ec={class:"text-sm text-gray-500 dark:text-gray-400"},tc={class:"relative h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},ac={class:"mt-2 flex items-center justify-between text-xs"},rc={class:"text-gray-500 dark:text-gray-400"},sc={class:"text-gray-500 dark:text-gray-400"},lc={class:"mb-4 flex gap-2"},oc={key:0},nc={class:"mb-3 grid grid-cols-2 gap-2"},ic=["value"],dc={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},uc={class:"text-xs text-gray-500 dark:text-gray-400"},pc={key:0},gc={key:1},cc={class:"mb-3 space-y-2"},yc=["onUpdate:modelValue"],mc=["onUpdate:modelValue"],xc=["onClick"],fc={class:"mt-3 flex flex-wrap gap-2"},bc={class:"mb-3"},vc={class:"inline-flex cursor-pointer items-center"},kc={key:0},hc={key:1},wc={class:"inline-flex cursor-pointer items-center"},$c={key:10,class:"space-y-4"},Ac={class:"relative"},Cc=["type"],Tc={class:"grid grid-cols-2 gap-4"},Ic={key:11,class:"space-y-4"},Uc={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},_c={class:"relative"},Kc=["type"],Sc={key:12,class:"space-y-4"},Mc={class:"mb-3"},Dc={class:"inline-flex cursor-pointer items-center"},Pc={key:0},jc={key:13,class:"space-y-4"},Vc={key:0,class:"mt-1 text-xs text-red-500"},zc={key:0,class:"mt-1 text-xs text-red-500"},Lc={key:0,class:"mt-1 text-xs text-red-500"},Rc={class:"flex flex-wrap gap-2"},Oc=["value"],Ec={class:"text-sm text-gray-700 dark:text-gray-300"},Nc={key:14,class:"rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},qc={class:"mb-4 flex items-start gap-3"},Wc={class:"flex-1"},Bc={class:"mb-2 flex items-center justify-between"},Gc={class:"mb-1 text-sm text-purple-800 dark:text-purple-200"},Fc={class:"space-y-4"},Qc={key:0,class:"mt-1 text-xs text-red-500"},Hc={class:"space-y-2"},Jc={class:"flex items-center justify-between"},Yc={class:"text-xs text-purple-600 dark:text-purple-300"},Zc={class:"relative grid h-11 grid-cols-3 overflow-hidden rounded-2xl border border-purple-200/80 bg-gradient-to-r from-purple-50/80 via-white to-purple-50/80 shadow-inner dark:border-purple-700/70 dark:from-purple-900/40 dark:via-purple-900/20 dark:to-purple-900/40"},Xc=["onClick"],ey={class:"text-xs text-purple-700 dark:text-purple-300"},ty={key:15,class:"rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-700 dark:bg-amber-900/30"},ay={class:"space-y-4"},ry={key:16},sy={class:"flex gap-3 pt-4"},ly=["disabled"],oy={key:0,class:"loading-spinner mr-2"},ny={__name:"AccountForm",props:{account:{type:Object,default:null}},emits:["close","success","platform-changed"],setup(F,{emit:_e}){var Qt,ia,_a,rt,Ka,Sa,da,Ma,lt,Da,Ht,Kt,Pa,ja,Va,ua,za,pa,La,Ra,Oa,ga,Jt,ca,ya,Ea,xt,ft,Na,ma,Yt,xa,qa,fa,Zt,Wa,ba,Xt;const c=F,z=_e,A=Pr(),_=v(!1),T=v({title:"",message:"",confirmText:"继续",cancelText:"取消"});let k=null;const P=(d,t,ie="继续",ye="取消")=>new Promise(i=>{T.value={title:d,message:t,confirmText:ie,cancelText:ye},k=i,_.value=!0}),O=()=>{_.value=!1,k==null||k(!0),k=null},Y=()=>{_.value=!1,k==null||k(!1),k=null},M=Z(()=>!!c.account),se=v(!0),ge=v(null),N=v(1),E=v(!1),R=v(!1),y=v(!1),p=v(!1),D=v(""),de=v(""),le=v(!1),ae=v(""),oe=v("manual"),he=v(""),W=v(!1),Q=v(""),H=v(!1),h=v({current:0,total:0}),X=Z(()=>he.value.split(`
|
||
`).map(d=>d.trim()).filter(d=>d.length>0).length),C=v(""),G=v(!1),K=v(""),Ce=v(!1),ze=d=>["claude","claude-console","ccr","bedrock"].includes(d)?"claude":["openai","openai-responses","azure_openai"].includes(d)?"openai":["gemini","gemini-antigravity","gemini-api"].includes(d)?"gemini":d==="droid"?"droid":"",Ke=()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""}),Fe=d=>{if(!d)return null;let t=d;if(typeof d=="string")try{t=JSON.parse(d)}catch{return null}if(t&&typeof t=="object"&&t.proxy&&typeof t.proxy=="object"&&(t=t.proxy),!t||typeof t!="object")return null;const ie=typeof t.host=="string"?t.host.trim():t.host!==void 0&&t.host!==null?String(t.host).trim():"",ye=t.port!==void 0&&t.port!==null?String(t.port).trim():"",i=typeof t.type=="string"&&t.type.trim()?t.type.trim():"socks5",pe=typeof t.username=="string"?t.username:t.username!==void 0&&t.username!==null?String(t.username):"",me=typeof t.password=="string"?t.password:t.password!==void 0&&t.password!==null?String(t.password):"";return{type:i,host:ie,port:ye,username:pe,password:me}},Qe=d=>{const t=Fe(d);return t&&t.host&&t.port?{enabled:!0,type:t.type||"socks5",host:t.host,port:t.port,username:t.username||"",password:t.password||""}:Ke()},xe=d=>{if(!d||!d.enabled)return null;const t=(d.host||"").trim(),ie=Number.parseInt(d.port,10);if(!t||Number.isNaN(ie)||ie<=0)return null;const ye=d.username?d.username.trim():"",i=d.password?d.password.trim():"";return{type:d.type||"socks5",host:t,port:ie,username:ye||null,password:i||null}},g=()=>{var d;return Qe((d=c.account)==null?void 0:d.proxy)},a=v({platform:((Qt=c.account)==null?void 0:Qt.platform)||"claude",addType:(()=>{var t;const d=((t=c.account)==null?void 0:t.platform)||"claude";return d==="gemini"||d==="gemini-antigravity"||d==="openai"||d==="claude"?"oauth":"manual"})(),name:((ia=c.account)==null?void 0:ia.name)||"",description:((_a=c.account)==null?void 0:_a.description)||"",accountType:((rt=c.account)==null?void 0:rt.accountType)||"shared",authenticationMethod:((Ka=c.account)==null?void 0:Ka.authenticationMethod)||"",subscriptionType:"claude_max",autoStopOnWarning:((Sa=c.account)==null?void 0:Sa.autoStopOnWarning)||!1,useUnifiedUserAgent:((da=c.account)==null?void 0:da.useUnifiedUserAgent)||!1,useUnifiedClientId:((Ma=c.account)==null?void 0:Ma.useUnifiedClientId)||!1,unifiedClientId:((lt=c.account)==null?void 0:lt.unifiedClientId)||"",serialQueueEnabled:(((Da=c.account)==null?void 0:Da.maxConcurrency)||0)>0,interceptWarmup:((Ht=c.account)==null?void 0:Ht.interceptWarmup)===!0||((Kt=c.account)==null?void 0:Kt.interceptWarmup)==="true",groupId:"",groupIds:[],projectId:((Pa=c.account)==null?void 0:Pa.projectId)||"",accessToken:"",refreshToken:"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:g(),apiUrl:((ja=c.account)==null?void 0:ja.apiUrl)||"",apiKey:((Va=c.account)==null?void 0:Va.apiKey)||"",priority:((ua=c.account)==null?void 0:ua.priority)||50,endpointType:((za=c.account)==null?void 0:za.endpointType)||"anthropic",baseApi:((pa=c.account)==null?void 0:pa.baseApi)||"",baseUrl:((La=c.account)==null?void 0:La.baseUrl)||"https://generativelanguage.googleapis.com",rateLimitDuration:((Ra=c.account)==null?void 0:Ra.rateLimitDuration)||60,supportedModels:(()=>{var t;const d=(t=c.account)==null?void 0:t.supportedModels;return d?typeof d=="object"&&!Array.isArray(d)?Object.keys(d):Array.isArray(d)?d:[]:[]})(),userAgent:((Oa=c.account)==null?void 0:Oa.userAgent)||"",enableRateLimit:c.account?c.account.rateLimitDuration>0:!0,disableAutoProtection:((ga=c.account)==null?void 0:ga.disableAutoProtection)===!0,dailyQuota:((Jt=c.account)==null?void 0:Jt.dailyQuota)||0,dailyUsage:((ca=c.account)==null?void 0:ca.dailyUsage)||0,quotaResetTime:((ya=c.account)==null?void 0:ya.quotaResetTime)||"00:00",maxConcurrentTasks:((Ea=c.account)==null?void 0:Ea.maxConcurrentTasks)||0,credentialType:((xt=c.account)==null?void 0:xt.credentialType)||"access_key",accessKeyId:((ft=c.account)==null?void 0:ft.accessKeyId)||"",secretAccessKey:((Na=c.account)==null?void 0:Na.secretAccessKey)||"",region:((ma=c.account)==null?void 0:ma.region)||"",sessionToken:((Yt=c.account)==null?void 0:Yt.sessionToken)||"",bearerToken:((xa=c.account)==null?void 0:xa.bearerToken)||"",defaultModel:((qa=c.account)==null?void 0:qa.defaultModel)||"",smallFastModel:((fa=c.account)==null?void 0:fa.smallFastModel)||"",azureEndpoint:((Zt=c.account)==null?void 0:Zt.azureEndpoint)||"",apiVersion:((Wa=c.account)==null?void 0:Wa.apiVersion)||"",deploymentName:((ba=c.account)==null?void 0:ba.deploymentName)||"",expireDuration:(()=>{var d;return(d=c.account)!=null&&d.expiresAt?"custom":""})(),customExpireDate:(()=>{var d;return(d=c.account)!=null&&d.expiresAt?new Date(c.account.expiresAt).toISOString().slice(0,16):""})(),expiresAt:((Xt=c.account)==null?void 0:Xt.expiresAt)||null}),U=v("whitelist"),re=v(["claude-sonnet-4-20250514","claude-sonnet-4-5-20250929","claude-3-5-haiku-20241022"]),ne=v([]),Re=async()=>{var d;try{const t=await Ms();t.success&&((d=t.data)!=null&&d.all)&&(ne.value=t.data.all)}catch(t){console.error("Failed to load models:",t)}},Oe=v([]),st=()=>{var d;if((d=c.account)!=null&&d.supportedModels)if(typeof c.account.supportedModels=="object"&&!Array.isArray(c.account.supportedModels)){const t=Object.entries(c.account.supportedModels);t.every(([ye,i])=>ye===i)?(U.value="whitelist",re.value=t.map(([ye])=>ye),Oe.value=t.map(([ye,i])=>({from:ye,to:i}))):(U.value="mapping",Oe.value=t.map(([ye,i])=>({from:ye,to:i})))}else Array.isArray(c.account.supportedModels)&&(U.value="whitelist",re.value=c.account.supportedModels,Oe.value=c.account.supportedModels.map(t=>({from:t,to:t})))},nt=d=>{if(!d||typeof d!="string")return[];const t=d.split(/\r?\n/).map(ye=>ye.trim()).filter(ye=>ye.length>0);return t.length===0?[]:Array.from(new Set(t))},at=[{value:"append",label:"追加模式",description:"保留现有 Key,并在末尾追加新 Key 列表。"},{value:"replace",label:"覆盖模式",description:"先清空旧 Key,再写入上方的新 Key 列表。"},{value:"delete",label:"删除模式",description:"输入要移除的 Key,可精准删除失效或被封禁的 Key。"}],Dt=Z(()=>{const d=Math.max(at.findIndex(ie=>ie.value===a.value.apiKeyUpdateMode),0),t=100/at.length;return{width:`${t}%`,left:`${d*t}%`}}),Pt=Z(()=>{const d=at.find(t=>t.value===a.value.apiKeyUpdateMode);return d?d.label:at[0].label}),jt=Z(()=>{const d=at.find(t=>t.value===a.value.apiKeyUpdateMode);return d?d.description:at[0].description}),I=v({name:"",refreshToken:"",accessToken:"",apiKeys:"",apiUrl:"",apiKey:"",baseApi:"",accessKeyId:"",secretAccessKey:"",region:"",bearerToken:"",azureEndpoint:"",deploymentName:""}),Tt=Z(()=>{var d;return((d=a.value.name)==null?void 0:d.trim())&&a.value.platform}),gt=Z(()=>D.value&&de.value.trim()),ht=()=>{var d;return!M.value||!((d=c.account)!=null&&d.id)?0:typeof a.value.dailyUsage=="number"?a.value.dailyUsage:0},ct=Z(()=>!a.value.dailyQuota||a.value.dailyQuota<=0?0:ht()/a.value.dailyQuota*100),Vt=Z(()=>{if(!c.account||c.account.platform!=="droid")return 0;let d=0;if(Array.isArray(c.account.apiKeys))d=c.account.apiKeys.length;else if(typeof c.account.apiKeys=="string")try{const ie=JSON.parse(c.account.apiKeys);Array.isArray(ie)&&(d=ie.length)}catch{d=0}const t=c.account.apiKeyCount??c.account.apiKeysCount??c.account.api_key_count??d;return Number(t)||0}),wt=Z(()=>{var t,ie,ye;if(!M.value||a.value.platform!=="droid")return!1;const d=a.value.authenticationMethod||((t=c.account)==null?void 0:t.authenticationMethod)||((ie=c.account)==null?void 0:ie.authMethod)||((ye=c.account)==null?void 0:ye.authentication_mode)||"";return typeof d!="string"?!1:d.trim().toLowerCase()==="api_key"}),B=async()=>{var d;if(!(!M.value||!((d=c.account)!=null&&d.id)))try{const t=await Ps(c.account.id);t&&(a.value.dailyUsage=t.dailyUsage||0)}catch{}},q=d=>{K.value=d,d==="claude"?a.value.platform="claude":d==="openai"?a.value.platform="openai":d==="gemini"?a.value.platform="gemini":d==="droid"&&(a.value.platform="droid")},Ee=async()=>{if(I.value.name="",!Tt.value){(!a.value.name||a.value.name.trim()==="")&&(I.value.name="请填写账户名称");return}if(a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)){V("请选择一个分组","error");return}a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!((a.value.platform==="gemini"||a.value.platform==="gemini-antigravity")&&N.value===1&&a.value.addType==="oauth"&&(!a.value.projectId||a.value.projectId.trim()==="")&&!await P("项目 ID 未填写",`您尚未填写项目 ID。
|
||
|
||
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
|
||
如果您使用的是普通个人账号,可以继续不填写。`,"继续","返回填写"))&&(N.value=2)},We=async()=>{y.value=!0;try{const d=xe(a.value.proxy),t=d?{proxy:d}:{},ie=await A.generateClaudeSetupTokenUrl(t);D.value=ie.authUrl,ae.value=ie.sessionId}catch(d){V(d.message||"生成Setup Token授权链接失败","error")}finally{y.value=!1}},ut=()=>{D.value="",de.value="",We()},Nt=async()=>{try{await navigator.clipboard.writeText(D.value),le.value=!0,V("链接已复制","success"),setTimeout(()=>{le.value=!1},2e3)}catch{const t=document.createElement("textarea");t.value=D.value,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")?(le.value=!0,V("链接已复制","success")):V("复制失败,请手动复制","error")}catch{V("复制失败,请手动复制","error")}document.body.removeChild(t),setTimeout(()=>{le.value=!1},2e3)}},qt=async()=>{if(gt.value){p.value=!0;try{const d={sessionId:ae.value,callbackUrl:de.value.trim()},t=xe(a.value.proxy);t&&(d.proxy=t);const ie=await A.exchangeClaudeSetupTokenCode(d);a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=mt()),await it(ie)}catch(d){V(d.message||"Setup Token授权失败,请检查授权码是否正确","error")}finally{p.value=!1}}},$t=async()=>{const d=he.value.split(`
|
||
`).map(pe=>pe.trim()).filter(pe=>pe.length>0);if(d.length===0){Q.value="请输入至少一个 sessionKey";return}W.value=!0,Q.value="",h.value={current:0,total:d.length};const t=a.value.addType==="setup-token",ie=xe(a.value.proxy),ye=[],i=[];for(let pe=0;pe<d.length;pe++){h.value.current=pe+1;try{const me={sessionKey:d[pe],...ie&&{proxy:ie}};let qe;t?qe=await A.oauthSetupTokenWithCookie(me):qe=await A.oauthWithCookie(me),ye.push(qe)}catch(me){i.push({index:pe+1,key:d[pe].substring(0,20)+"...",error:me.message})}}if(h.value={current:0,total:0},ye.length>0)try{await it(ye)}finally{W.value=!1}else W.value=!1;i.length>0&&ye.length===0?Q.value="全部授权失败,请检查 sessionKey 是否有效":i.length>0&&(Q.value=`${i.length} 个授权失败`)},zt=()=>{he.value="",Q.value="",H.value=!1,h.value={current:0,total:0}},Lt=()=>{oe.value==="manual"?zt():(D.value="",de.value="",ae.value="")},It=(d,t,ie)=>{var me,qe;const ye=xe(a.value.proxy),i=d.claudeAiOauth||d,pe={name:t,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:ye,claudeAiOauth:i,priority:a.value.priority||50,autoStopOnWarning:a.value.autoStopOnWarning||!1,interceptWarmup:a.value.interceptWarmup||!1,useUnifiedUserAgent:a.value.useUnifiedUserAgent||!1,useUnifiedClientId:a.value.useUnifiedClientId||!1,unifiedClientId:ie,maxConcurrency:a.value.serialQueueEnabled?1:0,subscriptionInfo:{accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}};if(i){const He={},Le=i.extInfo;Le!=null&&Le.org_uuid&&(He.org_uuid=Le.org_uuid),Le!=null&&Le.account_uuid&&(He.account_uuid=Le.account_uuid),Le||((me=i.organization)!=null&&me.uuid&&(He.org_uuid=i.organization.uuid),(qe=i.account)!=null&&qe.uuid&&(He.account_uuid=i.account.uuid)),Object.keys(He).length>0&&(pe.extInfo=He)}return pe},it=async d=>{var t,ie,ye,i,pe,me,qe,He,Le;E.value=!0;try{const S=a.value.platform;if(S==="claude"&&Array.isArray(d)){const Me=d,Pe=Me.length>1,Ue=a.value.name,et=[],tt=[];for(let bt=0;bt<Me.length;bt++){const ea=Me[bt],Ot=Pe?`${Ue}_${bt+1}`:Ue,ta=a.value.useUnifiedClientId?mt():"",aa=It(ea,Ot,ta);try{const St=await A.createClaudeAccount(aa);et.push(St)}catch(St){tt.push({name:Ot,error:St.message})}}if(et.length>0){const bt=Pe?`成功创建 ${et.length}/${Me.length} 个账户`:"账户创建成功";V(bt,"success"),z("success",et[0])}tt.length>0&&V(`${tt.length} 个账户创建失败`,"error");return}const L=Array.isArray(d)?d[0]:d;a.value.platform==="claude"&&a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=mt());const $e=xe(a.value.proxy),J={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:$e};if(S==="claude"){const Me=L.claudeAiOauth||L;if(J.claudeAiOauth=Me,Me){const Pe={},Ue=Me.extInfo;if(Ue&&typeof Ue=="object"&&(Ue.org_uuid&&(Pe.org_uuid=Ue.org_uuid),Ue.account_uuid&&(Pe.account_uuid=Ue.account_uuid)),!Ue){const et=(t=Me.organization)==null?void 0:t.uuid,tt=(ie=Me.account)==null?void 0:ie.uuid;et&&(Pe.org_uuid=et),tt&&(Pe.account_uuid=tt)}Object.keys(Pe).length>0&&(J.extInfo=Pe)}J.priority=a.value.priority||50,J.autoStopOnWarning=a.value.autoStopOnWarning||!1,J.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,J.useUnifiedClientId=a.value.useUnifiedClientId||!1,J.unifiedClientId=a.value.unifiedClientId||"",J.maxConcurrency=a.value.serialQueueEnabled?1:0,J.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(S==="gemini"||S==="gemini-antigravity")J.geminiOauth=L.tokens||L,J.oauthProvider=S==="gemini-antigravity"?"antigravity":L.oauthProvider||"gemini-cli",a.value.projectId&&(J.projectId=a.value.projectId),J.priority=a.value.priority||50;else if(S==="openai")J.openaiOauth=L.tokens||L,J.accountInfo=L.accountInfo,J.priority=a.value.priority||50;else if(S==="droid"){const Me=L.tokens||L||{},Pe={accessToken:Me.accessToken||Me.access_token||"",refreshToken:Me.refreshToken||Me.refresh_token||"",expiresAt:Me.expiresAt||Me.expires_at||"",expiresIn:Me.expiresIn||Me.expires_in||null,tokenType:Me.tokenType||Me.token_type||"Bearer",organizationId:Me.organizationId||Me.organization_id||"",authenticationMethod:Me.authenticationMethod||Me.authentication_method||""};if(!Pe.refreshToken){E.value=!1,V("授权成功但未返回 Refresh Token,请确认已授予离线访问权限后重试。","error");return}if(J.refreshToken=Pe.refreshToken,J.accessToken=Pe.accessToken,J.expiresAt=Pe.expiresAt,Pe.expiresIn!==null&&Pe.expiresIn!==void 0&&(J.expiresIn=Pe.expiresIn),J.priority=a.value.priority||50,J.endpointType=a.value.endpointType||"anthropic",J.platform="droid",J.tokenType=Pe.tokenType,J.authenticationMethod=Pe.authenticationMethod,Pe.organizationId&&(J.organizationId=Pe.organizationId),Me.user){const Ue=Me.user,et=[];typeof Ue.first_name=="string"&&Ue.first_name.trim()&&et.push(Ue.first_name.trim()),typeof Ue.last_name=="string"&&Ue.last_name.trim()&&et.push(Ue.last_name.trim());const tt=et.join(" ").trim()||(typeof Ue.name=="string"?Ue.name.trim():"")||(typeof Ue.display_name=="string"?Ue.display_name.trim():"");typeof Ue.email=="string"&&Ue.email.trim()&&(J.ownerEmail=Ue.email.trim()),tt?(J.ownerName=tt,J.ownerDisplayName=tt):J.ownerEmail&&(J.ownerName=J.ownerName||J.ownerEmail,J.ownerDisplayName=J.ownerDisplayName||J.ownerEmail),typeof Ue.id=="string"&&Ue.id.trim()&&(J.userId=Ue.id.trim())}}let Se;S==="claude"?Se=await A.createClaudeAccount(J):S==="gemini"?Se=await A.createGeminiAccount(J):S==="openai"?Se=await A.createOpenAIAccount(J):S==="droid"?Se=await A.createDroidAccount(J):Se=await A.createGeminiAccount(J),z("success",Se)}catch(S){const L=((i=(ye=S.response)==null?void 0:ye.data)==null?void 0:i.error)||S.message||"账户创建失败",$e=((me=(pe=S.response)==null?void 0:pe.data)==null?void 0:me.suggestion)||"",J=((He=(qe=S.response)==null?void 0:qe.data)==null?void 0:He.errorDetails)||null;let Se=L;$e&&(Se+=`
|
||
${$e}`),J&&J.error_description?Se+=`
|
||
详细信息: ${J.error_description}`:J&&J.error&&J.error.message&&(Se+=`
|
||
详细信息: ${J.error.message}`),V(Se,"error","",8e3)}finally{E.value=!1,(Le=ge.value)==null||Le.resetCookieAuth()}},Ya=async()=>{var t,ie,ye,i,pe,me,qe,He;I.value.name="",I.value.accessToken="",I.value.refreshToken="",I.value.apiUrl="",I.value.apiKey="",I.value.apiKeys="";let d=!1;if((!a.value.name||a.value.name.trim()==="")&&(I.value.name="请填写账户名称",d=!0),a.value.platform==="claude-console"&&((!a.value.apiUrl||a.value.apiUrl.trim()==="")&&(I.value.apiUrl="请填写 API URL",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(I.value.apiKey="请填写 API Key",d=!0)),a.value.platform==="ccr"&&((!a.value.apiUrl||a.value.apiUrl.trim()==="")&&(I.value.apiUrl="请填写 API URL",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(I.value.apiKey="请填写 API Key",d=!0)),a.value.platform==="openai-responses"?((!a.value.baseApi||a.value.baseApi.trim()==="")&&(I.value.baseApi="请填写 API 基础地址",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(I.value.apiKey="请填写 API 密钥",d=!0)):a.value.platform==="bedrock"?(a.value.credentialType==="access_key"?M.value||((!a.value.accessKeyId||a.value.accessKeyId.trim()==="")&&(I.value.accessKeyId="请填写 AWS 访问密钥 ID",d=!0),(!a.value.secretAccessKey||a.value.secretAccessKey.trim()==="")&&(I.value.secretAccessKey="请填写 AWS 秘密访问密钥",d=!0)):a.value.credentialType==="bearer_token"&&(M.value||(!a.value.bearerToken||a.value.bearerToken.trim()==="")&&(I.value.bearerToken="请填写 Bearer Token",d=!0)),(!a.value.region||a.value.region.trim()==="")&&(I.value.region="请选择 AWS 区域",d=!0)):a.value.platform==="azure_openai"?((!a.value.azureEndpoint||a.value.azureEndpoint.trim()==="")&&(I.value.azureEndpoint="请填写 Azure Endpoint",d=!0),(!a.value.deploymentName||a.value.deploymentName.trim()==="")&&(I.value.deploymentName="请填写部署名称",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(I.value.apiKey="请填写 API Key",d=!0)):a.value.addType==="manual"?a.value.platform==="openai"?(!a.value.refreshToken||a.value.refreshToken.trim()==="")&&(I.value.refreshToken="请填写 Refresh Token",d=!0):a.value.platform==="gemini"?(!a.value.accessToken||a.value.accessToken.trim()==="")&&(I.value.accessToken="请填写 Access Token",d=!0):a.value.platform==="droid"?((!a.value.accessToken||a.value.accessToken.trim()==="")&&(I.value.accessToken="请填写 Access Token",d=!0),(!a.value.refreshToken||a.value.refreshToken.trim()==="")&&(I.value.refreshToken="请填写 Refresh Token",d=!0)):a.value.platform==="claude"&&(!a.value.accessToken||a.value.accessToken.trim()==="")&&(I.value.accessToken="请填写 Access Token",d=!0):a.value.addType==="apikey"&&(a.value.platform==="gemini-api"?((!a.value.apiKey||a.value.apiKey.trim()==="")&&(I.value.apiKey="请填写 API Key",d=!0),!a.value.baseUrl||a.value.baseUrl.trim()===""?(I.value.baseUrl="请填写 API 基础地址",d=!0):a.value.baseUrl.trim().endsWith("/models")||(I.value.baseUrl="API 基础地址必须以 /models 结尾",d=!0)):nt(a.value.apiKeysInput).length===0&&(I.value.apiKeys="请至少填写一个 API Key",d=!0)),a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)&&(V("请选择一个分组","error"),d=!0),a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!d){E.value=!0;try{const Le=xe(a.value.proxy),S={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:Le};if(a.value.platform==="claude"){const $e=a.value.refreshToken?6e5:31536e6;a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=mt()),S.claudeAiOauth={accessToken:a.value.accessToken,refreshToken:a.value.refreshToken||"",expiresAt:Date.now()+$e,scopes:[]},S.priority=a.value.priority||50,S.autoStopOnWarning=a.value.autoStopOnWarning||!1,S.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,S.useUnifiedClientId=a.value.useUnifiedClientId||!1,S.unifiedClientId=a.value.unifiedClientId||"",S.maxConcurrency=a.value.serialQueueEnabled?1:0,S.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(a.value.platform==="gemini"){const $e=a.value.refreshToken?6e5:31536e6;S.geminiOauth={access_token:a.value.accessToken,refresh_token:a.value.refreshToken||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+$e},a.value.projectId&&(S.projectId=a.value.projectId),S.priority=a.value.priority||50}else if(a.value.platform==="openai"){const $e=a.value.refreshToken?6e5:31536e6;S.openaiOauth={idToken:"",accessToken:a.value.accessToken||"",refreshToken:a.value.refreshToken,expires_in:Math.floor($e/1e3)},S.accountInfo={accountId:"",chatgptUserId:"",organizationId:"",organizationRole:"",organizationTitle:"",planType:"",email:"",emailVerified:!1},S.needsImmediateRefresh=!0,S.requireRefreshSuccess=!0,S.priority=a.value.priority||50}else if(a.value.platform==="droid")if(S.priority=a.value.priority||50,S.endpointType=a.value.endpointType||"anthropic",S.platform="droid",a.value.addType==="apikey"){const $e=nt(a.value.apiKeysInput);S.apiKeys=$e,S.authenticationMethod="api_key",S.isActive=!0,S.schedulable=!0}else{const $e=((t=a.value.accessToken)==null?void 0:t.trim())||"",J=((ie=a.value.refreshToken)==null?void 0:ie.trim())||"",Se=new Date(Date.now()+8*60*60*1e3).toISOString();S.accessToken=$e,S.refreshToken=J,S.expiresAt=Se,S.expiresIn=8*60*60,S.tokenType="Bearer",S.authenticationMethod="manual"}else a.value.platform==="claude-console"||a.value.platform==="ccr"?(S.apiUrl=a.value.apiUrl,S.apiKey=a.value.apiKey,S.priority=a.value.priority||50,S.supportedModels=la()||{},S.userAgent=a.value.userAgent||null,S.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0,a.value.platform==="claude-console"&&(S.disableAutoProtection=!!a.value.disableAutoProtection,S.interceptWarmup=!!a.value.interceptWarmup),S.dailyQuota=a.value.dailyQuota||0,S.quotaResetTime=a.value.quotaResetTime||"00:00",S.maxConcurrentTasks=a.value.maxConcurrentTasks||0):a.value.platform==="openai-responses"?(S.baseApi=a.value.baseApi,S.apiKey=a.value.apiKey,S.userAgent=a.value.userAgent||"",S.priority=a.value.priority||50,S.rateLimitDuration=60,S.dailyQuota=a.value.dailyQuota||0,S.quotaResetTime=a.value.quotaResetTime||"00:00"):a.value.platform==="gemini-antigravity"?(S.oauthProvider="antigravity",S.priority=a.value.priority||50):a.value.platform==="gemini-api"?(S.baseUrl=a.value.baseUrl||"https://generativelanguage.googleapis.com",S.apiKey=a.value.apiKey,S.priority=a.value.priority||50,S.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[]):a.value.platform==="bedrock"?(S.credentialType=a.value.credentialType||"access_key",a.value.credentialType==="access_key"?S.awsCredentials={accessKeyId:a.value.accessKeyId,secretAccessKey:a.value.secretAccessKey,sessionToken:a.value.sessionToken||null}:a.value.credentialType==="bearer_token"&&(S.bearerToken=a.value.bearerToken),S.region=a.value.region,S.defaultModel=a.value.defaultModel||null,S.smallFastModel=a.value.smallFastModel||null,S.priority=a.value.priority||50,S.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0):a.value.platform==="azure_openai"&&(S.azureEndpoint=a.value.azureEndpoint,S.apiKey=a.value.apiKey,S.apiVersion=a.value.apiVersion||"2024-02-01",S.deploymentName=a.value.deploymentName,S.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[],S.priority=a.value.priority||50,S.isActive=a.value.isActive!==!1,S.schedulable=a.value.schedulable!==!1);let L;if(a.value.platform==="claude")L=await A.createClaudeAccount(S);else if(a.value.platform==="claude-console"||a.value.platform==="ccr")L=await A.createClaudeConsoleAccount(S);else if(a.value.platform==="droid")L=await A.createDroidAccount(S);else if(a.value.platform==="openai-responses")L=await A.createOpenAIResponsesAccount(S);else if(a.value.platform==="bedrock")L=await A.createBedrockAccount(S);else if(a.value.platform==="openai")L=await A.createOpenAIAccount(S);else if(a.value.platform==="azure_openai")L=await A.createAzureOpenAIAccount(S);else if(a.value.platform==="gemini"||a.value.platform==="gemini-antigravity")L=await A.createGeminiAccount(S);else if(a.value.platform==="gemini-api")L=await A.createGeminiApiAccount(S);else throw new Error(`不支持的平台: ${a.value.platform}`);z("success",L)}catch(Le){const S=((i=(ye=Le.response)==null?void 0:ye.data)==null?void 0:i.error)||Le.message||"账户创建失败",L=((me=(pe=Le.response)==null?void 0:pe.data)==null?void 0:me.suggestion)||"",$e=((He=(qe=Le.response)==null?void 0:qe.data)==null?void 0:He.errorDetails)||null;let J=S;L&&(J+=`
|
||
${L}`),$e&&$e.error_description?J+=`
|
||
详细信息: ${$e.error_description}`:$e&&$e.error&&$e.error.message&&(J+=`
|
||
详细信息: ${$e.error.message}`),V(J,"error","",8e3)}finally{E.value=!1}}},At=async()=>{var d,t,ie,ye,i,pe,me,qe,He,Le;if(I.value.name="",I.value.apiKeys="",I.value.baseUrl="",!a.value.name||a.value.name.trim()===""){I.value.name="请填写账户名称";return}if(a.value.platform==="gemini-api"){const S=((d=a.value.baseUrl)==null?void 0:d.trim())||"";if(!S){I.value.baseUrl="请填写 API 基础地址";return}if(!S.endsWith("/models")){I.value.baseUrl="API 基础地址必须以 /models 结尾";return}}if(a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)){V("请选择一个分组","error");return}if(a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!(a.value.platform==="gemini"&&(!a.value.projectId||a.value.projectId.trim()==="")&&!await P("项目 ID 未填写",`您尚未填写项目 ID。
|
||
|
||
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
|
||
如果您使用的是普通个人账号,可以继续不填写。`,"继续保存","返回填写"))){E.value=!0;try{const S=xe(a.value.proxy),L={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:S};if(a.value.accessToken||a.value.refreshToken){const $e=((t=a.value.accessToken)==null?void 0:t.trim())||"",J=((ie=a.value.refreshToken)==null?void 0:ie.trim())||"";if(c.account.platform==="claude"){const Se=a.value.refreshToken?6e5:31536e6;L.claudeAiOauth={accessToken:$e||"",refreshToken:J||"",expiresAt:Date.now()+Se,scopes:c.account.scopes||[]}}else if(c.account.platform==="gemini"){const Se=a.value.refreshToken?6e5:31536e6;L.geminiOauth={access_token:$e||"",refresh_token:J||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+Se}}else if(c.account.platform==="openai"){const Se=a.value.refreshToken?6e5:31536e6;L.openaiOauth={idToken:"",accessToken:$e||"",refreshToken:J||"",expires_in:Math.floor(Se/1e3)},J&&J!==c.account.refreshToken&&(L.needsImmediateRefresh=!0,L.requireRefreshSuccess=!0)}else c.account.platform==="droid"&&($e&&(L.accessToken=$e),J&&(L.refreshToken=J))}if(c.account.platform==="droid"){const $e=((ye=a.value.apiKeysInput)==null?void 0:ye.trim())||"",J=a.value.apiKeyUpdateMode||"append";if(J==="delete"){if(!$e){I.value.apiKeys="请填写需要删除的 API Key",E.value=!1;return}const Se=nt($e);if(Se.length===0){I.value.apiKeys="请填写需要删除的 API Key",E.value=!1;return}L.removeApiKeys=Se,L.apiKeyUpdateMode="delete"}else{if($e){const Se=nt($e);if(Se.length===0){I.value.apiKeys="请至少填写一个 API Key",E.value=!1;return}L.apiKeys=Se}else J==="replace"&&(L.apiKeys=[]);(J!=="append"||$e)&&(L.apiKeyUpdateMode=J)}wt.value&&(L.authenticationMethod="api_key")}if(c.account.platform==="gemini"&&(L.projectId=a.value.projectId||""),c.account.platform==="droid"&&(L.priority=a.value.priority||50,L.endpointType=a.value.endpointType||"anthropic"),c.account.platform==="claude"&&(a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=mt()),L.priority=a.value.priority||50,L.autoStopOnWarning=a.value.autoStopOnWarning||!1,L.interceptWarmup=a.value.interceptWarmup||!1,L.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,L.useUnifiedClientId=a.value.useUnifiedClientId||!1,L.unifiedClientId=a.value.unifiedClientId||"",L.maxConcurrency=a.value.serialQueueEnabled?1:0,L.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}),c.account.platform==="openai"&&(L.priority=a.value.priority||50),c.account.platform==="gemini"&&(L.priority=a.value.priority||50),c.account.platform==="claude-console"&&(L.apiUrl=a.value.apiUrl,a.value.apiKey&&(L.apiKey=a.value.apiKey),L.priority=a.value.priority||50,L.supportedModels=la()||{},L.userAgent=a.value.userAgent||null,L.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0,L.disableAutoProtection=!!a.value.disableAutoProtection,L.interceptWarmup=!!a.value.interceptWarmup,L.dailyQuota=a.value.dailyQuota||0,L.quotaResetTime=a.value.quotaResetTime||"00:00",L.maxConcurrentTasks=a.value.maxConcurrentTasks||0),c.account.platform==="openai-responses"&&(L.baseApi=a.value.baseApi,a.value.apiKey&&(L.apiKey=a.value.apiKey),L.userAgent=a.value.userAgent||"",L.priority=a.value.priority||50,L.dailyQuota=a.value.dailyQuota||0,L.quotaResetTime=a.value.quotaResetTime||"00:00"),c.account.platform==="bedrock"&&(a.value.credentialType&&(L.credentialType=a.value.credentialType),a.value.credentialType==="access_key"?(a.value.accessKeyId||a.value.secretAccessKey||a.value.sessionToken)&&(L.awsCredentials={},a.value.accessKeyId&&(L.awsCredentials.accessKeyId=a.value.accessKeyId),a.value.secretAccessKey&&(L.awsCredentials.secretAccessKey=a.value.secretAccessKey),a.value.sessionToken!==void 0&&(L.awsCredentials.sessionToken=a.value.sessionToken||null)):a.value.credentialType==="bearer_token"&&a.value.bearerToken&&a.value.bearerToken.trim()&&(L.bearerToken=a.value.bearerToken),a.value.region&&(L.region=a.value.region),L.defaultModel=a.value.defaultModel||null,L.smallFastModel=a.value.smallFastModel||null,L.priority=a.value.priority||50,L.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0),c.account.platform==="azure_openai"&&(L.azureEndpoint=a.value.azureEndpoint,L.apiVersion=a.value.apiVersion||"2024-02-01",L.deploymentName=a.value.deploymentName,L.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[],L.priority=a.value.priority||50,a.value.apiKey&&a.value.apiKey.trim()&&(L.apiKey=a.value.apiKey)),c.account.platform==="gemini-api"&&(L.baseUrl=a.value.baseUrl||"https://generativelanguage.googleapis.com",a.value.apiKey&&a.value.apiKey.trim()&&(L.apiKey=a.value.apiKey),L.priority=a.value.priority||50,L.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[]),c.account.platform==="claude")await A.updateClaudeAccount(c.account.id,L);else if(c.account.platform==="claude-console")await A.updateClaudeConsoleAccount(c.account.id,L);else if(c.account.platform==="openai-responses")await A.updateOpenAIResponsesAccount(c.account.id,L);else if(c.account.platform==="bedrock")await A.updateBedrockAccount(c.account.id,L);else if(c.account.platform==="openai")await A.updateOpenAIAccount(c.account.id,L);else if(c.account.platform==="azure_openai")await A.updateAzureOpenAIAccount(c.account.id,L);else if(c.account.platform==="gemini")await A.updateGeminiAccount(c.account.id,L);else if(c.account.platform==="gemini-api")await A.updateGeminiApiAccount(c.account.id,L);else if(c.account.platform==="droid")await A.updateDroidAccount(c.account.id,L);else throw new Error(`不支持的平台: ${c.account.platform}`);z("success")}catch(S){const L=((pe=(i=S.response)==null?void 0:i.data)==null?void 0:pe.error)||S.message||"账户更新失败",$e=((qe=(me=S.response)==null?void 0:me.data)==null?void 0:qe.suggestion)||"",J=((Le=(He=S.response)==null?void 0:He.data)==null?void 0:Le.errorDetails)||null;let Se=L;$e&&(Se+=`
|
||
${$e}`),J&&J.error_description?Se+=`
|
||
详细信息: ${J.error_description}`:J&&J.error&&J.error.message&&(Se+=`
|
||
详细信息: ${J.error.message}`),V(Se,"error","",8e3)}finally{E.value=!1}}};ve(()=>a.value.name,()=>{var d;I.value.name&&((d=a.value.name)!=null&&d.trim())&&(I.value.name="")}),ve(()=>a.value.accessToken,()=>{var d;I.value.accessToken&&((d=a.value.accessToken)!=null&&d.trim())&&(I.value.accessToken="")}),ve(()=>a.value.refreshToken,()=>{var d;I.value.refreshToken&&((d=a.value.refreshToken)!=null&&d.trim())&&(I.value.refreshToken="")}),ve(()=>a.value.apiUrl,()=>{var d;I.value.apiUrl&&((d=a.value.apiUrl)!=null&&d.trim())&&(I.value.apiUrl="")}),ve(()=>a.value.apiKey,()=>{var d;I.value.apiKey&&((d=a.value.apiKey)!=null&&d.trim())&&(I.value.apiKey="")}),ve(()=>a.value.azureEndpoint,()=>{var d;I.value.azureEndpoint&&((d=a.value.azureEndpoint)!=null&&d.trim())&&(I.value.azureEndpoint="")}),ve(()=>a.value.deploymentName,()=>{var d;I.value.deploymentName&&((d=a.value.deploymentName)!=null&&d.trim())&&(I.value.deploymentName="")});const Ct=v([]),Wt=v(!1),Ut=v(!1),Bt=Z(()=>{let d=a.value.platform;return a.value.platform==="claude-console"||a.value.platform==="ccr"?d="claude":a.value.platform==="openai-responses"?d="openai":a.value.platform==="gemini-api"&&(d="gemini"),Ct.value.filter(t=>t.platform===d)}),Gt=async()=>{Wt.value=!0;try{const d=await sr();Ct.value=d.data||[]}catch{V("加载分组列表失败","error"),Ct.value=[]}finally{Wt.value=!1}},Ft=async()=>{await Gt(),V("分组列表已刷新","success")},Rt=()=>{Ut.value=!0},$a=async()=>{await Gt()},Aa=async()=>{var t;if(!((t=c.account)!=null&&t.id))return;const d=[typeof A.fetchDroidAccounts=="function"?A.fetchDroidAccounts:null,typeof A.fetchAllAccounts=="function"?A.fetchAllAccounts:null].filter(Boolean);for(const ie of d)try{await ie();return}catch(ye){console.error("刷新账户列表失败:",ye)}};ve(()=>a.value.platform,d=>{d==="claude-console"||d==="ccr"||d==="bedrock"||d==="openai-responses"?a.value.addType="manual":d==="claude"||d==="gemini"||d==="openai"?a.value.addType="oauth":(d==="gemini-api"||d==="azure_openai")&&(a.value.addType="apikey"),a.value.accountType==="group"&&(a.value.groupId="",a.value.groupIds=[])}),ve(()=>a.value.groupIds,d=>{a.value.accountType==="group"&&(d&&d.length>0?a.value.groupId=d[0]:a.value.groupId="")},{deep:!0}),ve(()=>a.value.addType,(d,t)=>{d!==t&&(d==="apikey"?(a.value.accessToken="",a.value.refreshToken="",I.value.accessToken="",I.value.refreshToken="",a.value.authenticationMethod="api_key",a.value.apiKeyUpdateMode="append"):t==="apikey"&&(a.value.apiKeysInput="",a.value.apiKeyUpdateMode="append",I.value.apiKeys="",M.value||(a.value.authenticationMethod="")))}),ve(()=>a.value.apiKeyUpdateMode,(d,t)=>{d!==t&&I.value.apiKeys&&(I.value.apiKeys="")}),ve(()=>a.value.apiKeysInput,d=>{if(!I.value.apiKeys)return;const t=nt(d),ie=a.value.apiKeyUpdateMode;if(ie==="append"&&t.length>0){I.value.apiKeys="";return}if(ie==="replace"){(t.length>0||!d||d.trim()==="")&&(I.value.apiKeys="");return}ie==="delete"&&t.length>0&&(I.value.apiKeys="")}),ve(de,d=>{if(!d||typeof d!="string")return;const t=d.trim();if(!t)return;if(t.startsWith("http://")||t.startsWith("https://"))if(t.startsWith("http://localhost:45462"))try{const i=new URL(t).searchParams.get("code");i?(de.value=i,V("成功提取授权码!","success")):V("URL 中未找到授权码参数,请检查链接是否正确","error")}catch{V("链接格式错误,请检查是否为完整的 URL","error")}else V("请粘贴以 http://localhost:45462 开头的链接","error")}),ve(()=>a.value.platform,d=>{M.value||z("platform-changed",d)}),ve(()=>a.value.accountType,d=>{d==="group"&&Ct.value.length===0&&Gt()}),ve(()=>a.value.groupId,d=>{d==="__new__"&&(a.value.groupId="",Ut.value=!0)});const Ca=()=>{Oe.value.push({from:"",to:""})},yt=d=>{Oe.value.splice(d,1)},De=(d,t)=>{if(Oe.value.some(ye=>ye.from===d)){V(`模型 ${d} 的映射已存在`,"info");return}Oe.value.push({from:d,to:t}),V(`已添加映射: ${d} → ${t}`,"success")},la=()=>{const d={};return U.value==="whitelist"?re.value.forEach(t=>{d[t]=t}):Oe.value.forEach(t=>{t.from&&t.to&&(d[t.from]=t.to)}),Object.keys(d).length>0?d:null};ve(()=>c.account,d=>{if(d){st();const t=Qe(d.proxy),ie=typeof d.authenticationMethod=="string"?d.authenticationMethod.trim().toLowerCase():"",ye=ie==="api_key"?"apikey":ie==="manual"?"manual":"oauth";let i="";d.accountType==="group"&&(i=d.groupId||d.groupInfo&&d.groupInfo.id||"");let pe="claude_max";if(d.subscriptionInfo){const me=typeof d.subscriptionInfo=="string"?JSON.parse(d.subscriptionInfo):d.subscriptionInfo;me.accountType?pe=me.accountType:me.hasClaudeMax?pe="claude_max":me.hasClaudePro?pe="claude_pro":pe="claude_free"}a.value={platform:d.platform,addType:ye,name:d.name,description:d.description||"",accountType:d.accountType||"shared",subscriptionType:pe,autoStopOnWarning:d.autoStopOnWarning||!1,interceptWarmup:d.interceptWarmup===!0||d.interceptWarmup==="true",useUnifiedUserAgent:d.useUnifiedUserAgent||!1,useUnifiedClientId:d.useUnifiedClientId||!1,unifiedClientId:d.unifiedClientId||"",serialQueueEnabled:(d.maxConcurrency||0)>0,groupId:i,groupIds:[],projectId:d.projectId||"",accessToken:"",refreshToken:"",authenticationMethod:d.authenticationMethod||"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:t,apiUrl:d.apiUrl||"",apiKey:"",priority:d.priority||50,supportedModels:(()=>{const me=d.supportedModels;return me?typeof me=="object"&&!Array.isArray(me)?Object.keys(me):Array.isArray(me)?me:[]:[]})(),userAgent:d.userAgent||"",enableRateLimit:!!(d.rateLimitDuration&&d.rateLimitDuration>0),rateLimitDuration:d.rateLimitDuration||60,accessKeyId:"",secretAccessKey:"",region:d.region||"",sessionToken:"",defaultModel:d.defaultModel||"",smallFastModel:d.smallFastModel||"",azureEndpoint:d.azureEndpoint||"",apiVersion:d.apiVersion||"",deploymentName:d.deploymentName||"",baseApi:d.baseApi||"",baseUrl:d.baseUrl||"https://generativelanguage.googleapis.com",dailyQuota:d.dailyQuota||0,dailyUsage:d.dailyUsage||0,quotaResetTime:d.quotaResetTime||"00:00",maxConcurrentTasks:d.maxConcurrentTasks||0,disableAutoProtection:d.disableAutoProtection===!0},d.platform==="claude-console"&&B(),d.accountType==="group"&&Gt().then(async()=>{const me=[];if(d.groupInfos&&Array.isArray(d.groupInfos)&&d.groupInfos.length>0)d.groupInfos.forEach(qe=>{qe&&qe.id&&me.push(qe.id)}),me.length>0&&(a.value.groupId=me[0]);else if(d.groupInfo&&d.groupInfo.id)a.value.groupId=d.groupInfo.id,me.push(d.groupInfo.id);else if(d.groupId)a.value.groupId=d.groupId,me.push(d.groupId);else if(d.groupIds&&Array.isArray(d.groupIds)&&d.groupIds.length>0)a.value.groupId=d.groupIds[0],me.push(...d.groupIds);else{const qe=Ct.value.map(async He=>{try{((await Vs(He.id)).data||[]).some(L=>L.id===d.id)&&(me.push(He.id),a.value.groupId||(a.value.groupId=He.id))}catch{}});await Promise.all(qe)}a.value.groupIds=me})}},{immediate:!0});const dt=async()=>{try{const d=await Ds();d.success&&d.userAgent?C.value=d.userAgent:C.value=""}catch{C.value=""}},_t=async()=>{G.value=!0;try{(await js()).success?(C.value="",V("统一User-Agent缓存已清除","success")):V("清除缓存失败","error")}catch(d){V("清除缓存失败:"+(d.message||"未知错误"),"error")}finally{G.value=!1}},mt=()=>{const d=new Uint8Array(32);return crypto.getRandomValues(d),Array.from(d,t=>t.toString(16).padStart(2,"0")).join("")},oa=()=>{a.value.unifiedClientId=mt(),V("已生成新的客户端标识","success")},Ta=()=>{a.value.useUnifiedClientId&&(a.value.useUnifiedUserAgent=!0,a.value.unifiedClientId||(a.value.unifiedClientId=mt()))},Ia=Z(()=>{const d=new Date;return d.setMinutes(d.getMinutes()+1),d.toISOString().slice(0,16)}),pt=()=>{if(!a.value.expireDuration){a.value.expiresAt=null;return}if(a.value.expireDuration==="custom")return;const d=new Date,ie=a.value.expireDuration.match(/(\d+)([d])/);if(ie){const[,ye,i]=ie,pe=parseInt(ye);i==="d"&&d.setDate(d.getDate()+pe),a.value.expiresAt=d.toISOString()}},na=()=>{a.value.customExpireDate&&(a.value.expiresAt=new Date(a.value.customExpireDate).toISOString())},Ua=d=>d?new Date(d).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"";return ra(()=>{var d;K.value=ze(a.value.platform),M.value&&st(),Re(),dt(),M.value&&((d=c.account)==null?void 0:d.platform)==="claude-console"&&B()}),ve(()=>a.value.platform,d=>{d==="claude"&&dt()}),(d,t)=>{var ie,ye;return o(),Xe(Mt,{to:"body"},[se.value?(o(),n("div",Ni,[e("div",qi,[e("div",Wi,[e("div",Bi,[t[171]||(t[171]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-green-500 to-green-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-user-circle text-sm text-white sm:text-base"})],-1)),e("h3",Gi,u(M.value?"编辑账户":"添加账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:t[0]||(t[0]=i=>d.$emit("close"))},t[172]||(t[172]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),!M.value&&(a.value.addType==="oauth"||a.value.addType==="setup-token")?(o(),n("div",Fi,[e("div",Qi,[e("div",Hi,[e("div",{class:$(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",N.value>=1?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 1 ",2),t[173]||(t[173]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"基本信息",-1))]),t[175]||(t[175]=e("div",{class:"h-0.5 w-4 bg-gray-300 sm:w-8"},null,-1)),e("div",Ji,[e("div",{class:$(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",N.value>=2?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 2 ",2),t[174]||(t[174]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"授权认证",-1))])])])):m("",!0),N.value===1&&!M.value?(o(),n("div",Yi,[e("div",Zi,[M.value?m("",!0):(o(),n("div",Xi,[t[215]||(t[215]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择平台",-1)),e("div",ed,[e("div",td,[e("div",{class:$(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[K.value==="claude"?"border-indigo-500 bg-gradient-to-br from-indigo-50 to-purple-50 shadow-md dark:from-indigo-900/20 dark:to-purple-900/20":"border-gray-200 bg-white hover:border-indigo-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-indigo-600"]]),onClick:t[1]||(t[1]=i=>q("claude"))},[e("div",ad,[e("div",rd,[t[177]||(t[177]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-indigo-500 to-purple-600"},[e("i",{class:"fas fa-brain text-sm text-white"})],-1)),K.value==="claude"?(o(),n("div",sd,t[176]||(t[176]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)]),t[178]||(t[178]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Claude ",-1)),t[179]||(t[179]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Anthropic",-1))])],2),e("div",{class:$(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[K.value==="openai"?"border-emerald-500 bg-gradient-to-br from-emerald-50 to-teal-50 shadow-md dark:from-emerald-900/20 dark:to-teal-900/20":"border-gray-200 bg-white hover:border-emerald-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-emerald-600"]]),onClick:t[2]||(t[2]=i=>q("openai"))},[e("div",ld,[e("div",od,[t[181]||(t[181]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-emerald-500 to-teal-600"},[e("svg",{class:"h-5 w-5 text-white",fill:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.8956zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.4069-.6813zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"})])],-1)),K.value==="openai"?(o(),n("div",nd,t[180]||(t[180]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)]),t[182]||(t[182]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," OpenAI ",-1)),t[183]||(t[183]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"GPT 系列",-1))])],2),e("div",{class:$(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[K.value==="gemini"?"border-blue-500 bg-gradient-to-br from-blue-50 to-indigo-50 shadow-md dark:from-blue-900/20 dark:to-indigo-900/20":"border-gray-200 bg-white hover:border-blue-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-600"]]),onClick:t[3]||(t[3]=i=>q("gemini"))},[e("div",id,[e("div",dd,[t[185]||(t[185]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-blue-500 to-indigo-600"},[e("i",{class:"fab fa-google text-sm text-white"})],-1)),K.value==="gemini"?(o(),n("div",ud,t[184]||(t[184]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)]),t[186]||(t[186]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Gemini ",-1)),t[187]||(t[187]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Google AI",-1))])],2),e("div",{class:$(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[K.value==="droid"?"border-rose-500 bg-gradient-to-br from-rose-50 to-orange-50 shadow-md dark:from-rose-900/20 dark:to-orange-900/20":"border-gray-200 bg-white hover:border-rose-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-rose-600"]]),onClick:t[4]||(t[4]=i=>q("droid"))},[e("div",pd,[e("div",gd,[t[189]||(t[189]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-rose-500 to-orange-500"},[e("i",{class:"fas fa-robot text-sm text-white"})],-1)),K.value==="droid"?(o(),n("div",cd,t[188]||(t[188]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)]),t[190]||(t[190]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Droid ",-1)),t[191]||(t[191]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Claude Droid",-1))])],2)]),K.value?(o(),n("div",yd,[t[214]||(t[214]=e("p",{class:"mb-2 text-xs font-medium text-gray-700 dark:text-gray-300"}," 选择具体平台类型: ",-1)),e("div",md,[K.value==="claude"?(o(),n(ke,{key:0},[e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="claude"?"border-indigo-500 bg-indigo-50 dark:border-indigo-400 dark:bg-indigo-900/30":"border-gray-300 bg-white hover:border-indigo-400 hover:bg-indigo-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-indigo-500 dark:hover:bg-indigo-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[5]||(t[5]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"claude"},null,512),[[Ie,a.value.platform]]),t[193]||(t[193]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-brain text-sm text-indigo-600 dark:text-indigo-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Code"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="claude"?(o(),n("div",xd,t[192]||(t[192]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="claude-console"?"border-purple-500 bg-purple-50 dark:border-purple-400 dark:bg-purple-900/30":"border-gray-300 bg-white hover:border-purple-400 hover:bg-purple-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-purple-500 dark:hover:bg-purple-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[6]||(t[6]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"claude-console"},null,512),[[Ie,a.value.platform]]),t[195]||(t[195]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-terminal text-sm text-purple-600 dark:text-purple-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Console"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"标准API")])],-1)),a.value.platform==="claude-console"?(o(),n("div",fd,t[194]||(t[194]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="bedrock"?"border-orange-500 bg-orange-50 dark:border-orange-400 dark:bg-orange-900/30":"border-gray-300 bg-white hover:border-orange-400 hover:bg-orange-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-orange-500 dark:hover:bg-orange-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[7]||(t[7]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"bedrock"},null,512),[[Ie,a.value.platform]]),t[197]||(t[197]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-aws text-sm text-orange-600 dark:text-orange-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Bedrock"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"AWS")])],-1)),a.value.platform==="bedrock"?(o(),n("div",bd,t[196]||(t[196]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="ccr"?"border-cyan-500 bg-cyan-50 dark:border-cyan-400 dark:bg-cyan-900/30":"border-gray-300 bg-white hover:border-cyan-400 hover:bg-cyan-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-cyan-500 dark:hover:bg-cyan-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[8]||(t[8]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"ccr"},null,512),[[Ie,a.value.platform]]),t[199]||(t[199]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-code-branch text-sm text-cyan-600 dark:text-cyan-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"CCR"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Claude Code Router")])],-1)),a.value.platform==="ccr"?(o(),n("div",vd,t[198]||(t[198]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2)],64)):m("",!0),K.value==="openai"?(o(),n(ke,{key:1},[e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="openai"?"border-emerald-500 bg-emerald-50 dark:border-emerald-400 dark:bg-emerald-900/30":"border-gray-300 bg-white hover:border-emerald-400 hover:bg-emerald-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-emerald-500 dark:hover:bg-emerald-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[9]||(t[9]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"openai"},null,512),[[Ie,a.value.platform]]),t[201]||(t[201]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-emerald-600 dark:text-emerald-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Codex Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="openai"?(o(),n("div",kd,t[200]||(t[200]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="openai-responses"?"border-teal-500 bg-teal-50 dark:border-teal-400 dark:bg-teal-900/30":"border-gray-300 bg-white hover:border-teal-400 hover:bg-teal-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-teal-500 dark:hover:bg-teal-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[10]||(t[10]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"openai-responses"},null,512),[[Ie,a.value.platform]]),t[203]||(t[203]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-server text-sm text-teal-600 dark:text-teal-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Responses"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Openai-Responses")])],-1)),a.value.platform==="openai-responses"?(o(),n("div",hd,t[202]||(t[202]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="azure_openai"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[11]||(t[11]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"azure_openai"},null,512),[[Ie,a.value.platform]]),t[205]||(t[205]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-microsoft text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Azure"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Azure Openai")])],-1)),a.value.platform==="azure_openai"?(o(),n("div",wd,t[204]||(t[204]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2)],64)):m("",!0),K.value==="gemini"?(o(),n(ke,{key:2},[e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[12]||(t[12]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini"},null,512),[[Ie,a.value.platform]]),t[207]||(t[207]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-google text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Gemini Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="gemini"?(o(),n("div",$d,t[206]||(t[206]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini-antigravity"?"border-purple-500 bg-purple-50 dark:border-purple-400 dark:bg-purple-900/30":"border-gray-300 bg-white hover:border-purple-400 hover:bg-purple-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-purple-500 dark:hover:bg-purple-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[13]||(t[13]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini-antigravity"},null,512),[[Ie,a.value.platform]]),t[209]||(t[209]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-rocket text-sm text-purple-600 dark:text-purple-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Antigravity"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"OAuth")])],-1)),a.value.platform==="gemini-antigravity"?(o(),n("div",Ad,t[208]||(t[208]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini-api"?"border-amber-500 bg-amber-50 dark:border-amber-400 dark:bg-amber-900/30":"border-gray-300 bg-white hover:border-amber-400 hover:bg-amber-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-amber-500 dark:hover:bg-amber-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[14]||(t[14]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini-api"},null,512),[[Ie,a.value.platform]]),t[211]||(t[211]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-key text-sm text-amber-600 dark:text-amber-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Gemini API"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"API Key")])],-1)),a.value.platform==="gemini-api"?(o(),n("div",Cd,t[210]||(t[210]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2)],64)):m("",!0),K.value==="droid"?(o(),n("label",{key:3,class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="droid"?"border-rose-500 bg-rose-50 dark:border-rose-400 dark:bg-rose-900/30":"border-gray-300 bg-white hover:border-rose-400 hover:bg-rose-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-rose-500 dark:hover:bg-rose-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[15]||(t[15]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"droid"},null,512),[[Ie,a.value.platform]]),t[213]||(t[213]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-rose-600 dark:text-rose-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Droid 专属"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="droid"?(o(),n("div",Td,t[212]||(t[212]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2)):m("",!0)])])):m("",!0)])])),!M.value&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"&&a.value.platform!=="gemini-api"?(o(),n("div",Id,[t[220]||(t[220]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"添加方式",-1)),e("div",Ud,[e("label",_d,[b(e("input",{"onUpdate:modelValue":t[16]||(t[16]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"oauth"},null,512),[[Ie,a.value.addType]]),e("span",Kd,[t[216]||(t[216]=f(" OAuth 授权",-1)),a.value.platform==="claude"||a.value.platform==="openai"?(o(),n("span",Sd," (用量可视化)")):m("",!0)])]),a.value.platform==="claude"?(o(),n("label",Md,[b(e("input",{"onUpdate:modelValue":t[17]||(t[17]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"setup-token"},null,512),[[Ie,a.value.addType]]),t[217]||(t[217]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Setup Token (效期长)",-1))])):m("",!0),e("label",Dd,[b(e("input",{"onUpdate:modelValue":t[18]||(t[18]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"manual"},null,512),[[Ie,a.value.addType]]),t[218]||(t[218]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"手动输入 Access Token",-1))]),a.value.platform==="droid"?(o(),n("label",Pd,[b(e("input",{"onUpdate:modelValue":t[19]||(t[19]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"apikey"},null,512),[[Ie,a.value.addType]]),t[219]||(t[219]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"使用 API Key (支持多个)",-1))])):m("",!0)])])):m("",!0),e("div",null,[t[221]||(t[221]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),b(e("input",{"onUpdate:modelValue":t[20]||(t[20]=i=>a.value.name=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[j,a.value.name]]),I.value.name?(o(),n("p",jd,u(I.value.name),1)):m("",!0)]),e("div",null,[t[222]||(t[222]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[21]||(t[21]=i=>a.value.description=i),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[j,a.value.description]])]),e("div",null,[t[226]||(t[226]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",Vd,[e("label",zd,[b(e("input",{"onUpdate:modelValue":t[22]||(t[22]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[Ie,a.value.accountType]]),t[223]||(t[223]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",Ld,[b(e("input",{"onUpdate:modelValue":t[23]||(t[23]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[Ie,a.value.accountType]]),t[224]||(t[224]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",Rd,[b(e("input",{"onUpdate:modelValue":t[24]||(t[24]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[Ie,a.value.accountType]]),t[225]||(t[225]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[227]||(t[227]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),!M.value&&a.value.platform!=="gemini-api"?(o(),n("div",Od,[t[231]||(t[231]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",Ed,[b(e("select",{"onUpdate:modelValue":t[25]||(t[25]=i=>a.value.expireDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:pt},t[228]||(t[228]=[e("option",{value:""},"永不过期",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[wa,a.value.expireDuration]]),a.value.expireDuration==="custom"?(o(),n("div",Nd,[b(e("input",{"onUpdate:modelValue":t[26]||(t[26]=i=>a.value.customExpireDate=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Ia.value,type:"datetime-local",onChange:na},null,40,qd),[[j,a.value.customExpireDate]])])):m("",!0),a.value.expiresAt?(o(),n("p",Wd,[t[229]||(t[229]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),f(" 将于 "+u(Ua(a.value.expiresAt))+" 过期 ",1)])):(o(),n("p",Bd,t[230]||(t[230]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),f(" 账户永不过期 ",-1)])))]),t[232]||(t[232]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])):m("",!0),a.value.accountType==="group"?(o(),n("div",Gd,[t[234]||(t[234]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",Fd,[e("div",Qd,[e("div",Hd,[Bt.value.length===0?(o(),n("div",Jd," 暂无可用分组 ")):m("",!0),(o(!0),n(ke,null,Ne(Bt.value,i=>(o(),n("label",{key:i.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[b(e("input",{"onUpdate:modelValue":t[27]||(t[27]=pe=>a.value.groupIds=pe),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i.id},null,8,Yd),[[je,a.value.groupIds]]),e("span",Zd,u(i.name)+" ("+u(i.memberCount||0)+" 个成员) ",1)]))),128)),e("div",{class:"border-t pt-2 dark:border-gray-600"},[e("button",{class:"flex items-center gap-2 text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",type:"button",onClick:Rt},t[233]||(t[233]=[e("i",{class:"fas fa-plus"},null,-1),f(" 新建分组 ",-1)]))])])]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:Ft},[e("i",{class:$(["fas fa-sync-alt",{"animate-spin":Wt.value}])},null,2)])])])):m("",!0),a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("div",Xd,[t[235]||(t[235]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[28]||(t[28]=i=>a.value.projectId=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[j,a.value.projectId]]),t[236]||(t[236]=e("div",{class:"mt-2 rounded-lg border border-yellow-200 bg-yellow-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-yellow-600"}),e("div",{class:"text-xs text-yellow-700"},[e("p",{class:"mb-1 font-medium"},"Google Cloud/Workspace 账号需要提供项目 ID"),e("p",null," 某些 Google 账号(特别是绑定了 Google Cloud 的账号)会被识别为 Workspace 账号,需要提供额外的项目 ID。 "),e("div",{class:"mt-2 rounded border border-yellow-300 bg-white p-2"},[e("p",{class:"mb-1 font-medium"},"如何获取项目 ID:"),e("ol",{class:"ml-2 list-inside list-decimal space-y-1"},[e("li",null,[f(" 访问 "),e("a",{class:"font-medium text-blue-600 hover:underline",href:"https://console.cloud.google.com/welcome",target:"_blank"},"Google Cloud Console")]),e("li",null,[f(" 复制"),e("span",{class:"font-semibold text-red-600"},"项目 ID(Project ID)"),f(",通常是字符串格式 ")]),e("li",{class:"text-red-600"}," ⚠️ 注意:要复制项目 ID(Project ID),不要复制项目编号(Project Number)! ")])]),e("p",{class:"mt-2"},[e("strong",null,"提示:"),f("如果您的账号是普通个人账号(未绑定 Google Cloud),请留空此字段。 ")])])])],-1))])):m("",!0),a.value.platform==="bedrock"?(o(),n("div",e0,[e("div",null,[t[242]||(t[242]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"凭证类型 *",-1)),M.value?(o(),n("div",s0,[e("label",l0,[b(e("input",{"onUpdate:modelValue":t[31]||(t[31]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",disabled:"",type:"radio",value:"access_key"},null,512),[[Ie,a.value.credentialType]]),t[239]||(t[239]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"AWS Access Key(访问密钥)",-1))]),e("label",o0,[b(e("input",{"onUpdate:modelValue":t[32]||(t[32]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",disabled:"",type:"radio",value:"bearer_token"},null,512),[[Ie,a.value.credentialType]]),t[240]||(t[240]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Bearer Token(长期令牌)",-1))])])):(o(),n("div",t0,[e("label",a0,[b(e("input",{"onUpdate:modelValue":t[29]||(t[29]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"access_key"},null,512),[[Ie,a.value.credentialType]]),t[237]||(t[237]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"AWS Access Key(访问密钥)",-1))]),e("label",r0,[b(e("input",{"onUpdate:modelValue":t[30]||(t[30]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"bearer_token"},null,512),[[Ie,a.value.credentialType]]),t[238]||(t[238]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Bearer Token(长期令牌)",-1))])])),e("div",n0,[e("div",i0,[t[241]||(t[241]=e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600 dark:text-blue-400"},null,-1)),e("div",d0,[a.value.credentialType==="access_key"?(o(),n("p",u0," 使用 AWS Access Key ID 和 Secret Access Key 进行身份验证(支持临时凭证) ")):(o(),n("p",p0," 使用 AWS Bedrock API Keys 生成的 Bearer Token 进行身份验证,更简单、权限范围更小 ")),M.value?(o(),n("p",g0," 💡 编辑模式下凭证类型不可更改,如需切换类型请重新创建账户 ")):m("",!0)])])])]),a.value.credentialType==="access_key"?(o(),n("div",c0,[e("div",null,[e("label",y0,"AWS 访问密钥 ID "+u(M.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[33]||(t[33]=i=>a.value.accessKeyId=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.accessKeyId}]),placeholder:M.value?"留空则保持原有凭证不变":"请输入 AWS Access Key ID",required:!M.value,type:"text"},null,10,m0),[[j,a.value.accessKeyId]]),I.value.accessKeyId?(o(),n("p",x0,u(I.value.accessKeyId),1)):m("",!0),M.value?(o(),n("p",f0," 💡 编辑模式下,留空则保持原有 Access Key ID 不变 ")):m("",!0)]),e("div",null,[e("label",b0,"AWS 秘密访问密钥 "+u(M.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[34]||(t[34]=i=>a.value.secretAccessKey=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.secretAccessKey}]),placeholder:M.value?"留空则保持原有凭证不变":"请输入 AWS Secret Access Key",required:!M.value,type:"password"},null,10,v0),[[j,a.value.secretAccessKey]]),I.value.secretAccessKey?(o(),n("p",k0,u(I.value.secretAccessKey),1)):m("",!0),M.value?(o(),n("p",h0," 💡 编辑模式下,留空则保持原有 Secret Access Key 不变 ")):m("",!0)]),e("div",null,[t[243]||(t[243]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"会话令牌 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[35]||(t[35]=i=>a.value.sessionToken=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:M.value?"留空则保持原有 Session Token 不变":"如果使用临时凭证,请输入会话令牌",type:"password"},null,8,w0),[[j,a.value.sessionToken]]),t[244]||(t[244]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 仅在使用临时 AWS 凭证时需要填写 ",-1))])])):m("",!0),a.value.credentialType==="bearer_token"?(o(),n("div",$0,[e("label",A0,"Bearer Token "+u(M.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[36]||(t[36]=i=>a.value.bearerToken=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.bearerToken}]),placeholder:M.value?"留空则保持原有 Bearer Token 不变":"请输入 AWS Bearer Token",required:!M.value,type:"password"},null,10,C0),[[j,a.value.bearerToken]]),I.value.bearerToken?(o(),n("p",T0,u(I.value.bearerToken),1)):m("",!0),M.value?(o(),n("p",I0," 💡 编辑模式下,留空则保持原有 Bearer Token 不变 ")):m("",!0),t[245]||(t[245]=e("div",{class:"mt-2 rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/30"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-key mt-0.5 text-green-600 dark:text-green-400"}),e("div",{class:"text-xs text-green-700 dark:text-green-300"},[e("p",{class:"mb-1 font-medium"},"Bearer Token 说明:"),e("ul",{class:"list-inside list-disc space-y-1 text-xs"},[e("li",null,"输入 AWS Bedrock API Keys 生成的 Bearer Token"),e("li",null,"Bearer Token 仅限 Bedrock 服务访问,权限范围更小"),e("li",null,"相比 Access Key 更简单,无需 Secret Key"),e("li",null,[f(" 参考:"),e("a",{class:"text-green-600 underline dark:text-green-400",href:"https://aws.amazon.com/cn/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/",target:"_blank"},"AWS 官方文档")])])])])],-1))])):m("",!0),e("div",null,[t[246]||(t[246]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 区域 *",-1)),b(e("input",{"onUpdate:modelValue":t[37]||(t[37]=i=>a.value.region=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.region}]),placeholder:"例如:us-east-1",required:"",type:"text"},null,2),[[j,a.value.region]]),I.value.region?(o(),n("p",U0,u(I.value.region),1)):m("",!0),t[247]||(t[247]=e("div",{class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600 dark:text-blue-400"}),e("div",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("p",{class:"mb-1 font-medium"},"常用 AWS 区域参考:"),e("div",{class:"grid grid-cols-2 gap-1 text-xs"},[e("span",null,"• us-east-1 (美国东部)"),e("span",null,"• us-west-2 (美国西部)"),e("span",null,"• eu-west-1 (欧洲爱尔兰)"),e("span",null,"• ap-southeast-1 (新加坡)"),e("span",null,"• ap-northeast-1 (东京)"),e("span",null,"• eu-central-1 (法兰克福)")]),e("p",{class:"mt-2 text-blue-600 dark:text-blue-400"}," 💡 请输入完整的区域代码,如 us-east-1 ")])])],-1))]),e("div",null,[t[248]||(t[248]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"默认主模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[38]||(t[38]=i=>a.value.defaultModel=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[j,a.value.defaultModel]]),t[249]||(t[249]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1)),t[250]||(t[250]=e("div",{class:"mt-2 rounded-lg border border-amber-200 bg-amber-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-amber-600"}),e("div",{class:"text-xs text-amber-700"},[e("p",{class:"mb-1 font-medium"},"Bedrock 模型配置说明:"),e("ul",{class:"list-inside list-disc space-y-1 text-xs"},[e("li",null,"支持 Inference Profile ID(推荐)"),e("li",null,"支持 Application Inference Profile ARN"),e("li",null,"常用模型:us.anthropic.claude-sonnet-4-20250514-v1:0"),e("li",null,"留空将使用系统配置的默认模型")])])])],-1))]),e("div",null,[t[251]||(t[251]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[39]||(t[39]=i=>a.value.smallFastModel=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[j,a.value.smallFastModel]]),t[252]||(t[252]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 用于快速响应的轻量级模型,留空将使用系统默认 ",-1))])])):m("",!0),a.value.platform==="azure_openai"&&!M.value?(o(),n("div",_0,[e("div",null,[t[253]||(t[253]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint *",-1)),b(e("input",{"onUpdate:modelValue":t[40]||(t[40]=i=>a.value.azureEndpoint=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",required:"",type:"url"},null,2),[[j,a.value.azureEndpoint]]),I.value.azureEndpoint?(o(),n("p",K0,u(I.value.azureEndpoint),1)):m("",!0),t[254]||(t[254]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI 资源的终结点 URL,格式:https://your-resource.openai.azure.com ",-1))]),e("div",null,[t[255]||(t[255]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),b(e("input",{"onUpdate:modelValue":t[41]||(t[41]=i=>a.value.apiVersion=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[j,a.value.apiVersion]]),t[256]||(t[256]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI API 版本,默认使用最新稳定版本 2024-02-01 ",-1))]),e("div",null,[t[257]||(t[257]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称 *",-1)),b(e("input",{"onUpdate:modelValue":t[42]||(t[42]=i=>a.value.deploymentName=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.deploymentName}]),placeholder:"gpt-4",required:"",type:"text"},null,2),[[j,a.value.deploymentName]]),I.value.deploymentName?(o(),n("p",S0,u(I.value.deploymentName),1)):m("",!0),t[258]||(t[258]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Azure OpenAI Studio 中创建的部署名称 ",-1))]),e("div",null,[t[259]||(t[259]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),b(e("input",{"onUpdate:modelValue":t[43]||(t[43]=i=>a.value.apiKey=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiKey}]),placeholder:"请输入 Azure OpenAI API Key",required:"",type:"password"},null,2),[[j,a.value.apiKey]]),I.value.apiKey?(o(),n("p",M0,u(I.value.apiKey),1)):m("",!0),t[260]||(t[260]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Azure 门户获取的 API 密钥 ",-1))]),e("div",null,[t[261]||(t[261]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",D0,[(o(),n(ke,null,Ne(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],i=>e("label",{key:i,class:"flex cursor-pointer items-center"},[b(e("input",{"onUpdate:modelValue":t[44]||(t[44]=pe=>a.value.supportedModels=pe),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,P0),[[je,a.value.supportedModels]]),e("span",j0,u(i),1)])),64))]),t[262]||(t[262]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 选择此部署支持的模型类型 ",-1))])])):m("",!0),a.value.platform==="bedrock"&&!M.value?(o(),n("div",V0,[e("div",null,[t[267]||(t[267]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",z0,[e("label",L0,[b(e("input",{"onUpdate:modelValue":t[45]||(t[45]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.enableRateLimit]]),t[263]||(t[263]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[264]||(t[264]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",R0,[t[265]||(t[265]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[46]||(t[46]=i=>a.value.rateLimitDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]]),t[266]||(t[266]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):m("",!0)])])):m("",!0),(a.value.platform==="claude-console"||a.value.platform==="ccr")&&!M.value?(o(),n("div",O0,[e("div",null,[t[268]||(t[268]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),b(e("input",{"onUpdate:modelValue":t[47]||(t[47]=i=>a.value.apiUrl=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiUrl}]),placeholder:"例如:https://api.example.com",required:"",type:"text"},null,2),[[j,a.value.apiUrl]]),I.value.apiUrl?(o(),n("p",E0,u(I.value.apiUrl),1)):m("",!0)]),e("div",null,[t[269]||(t[269]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),b(e("input",{"onUpdate:modelValue":t[48]||(t[48]=i=>a.value.apiKey=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiKey}]),placeholder:"请输入API Key",required:"",type:"password"},null,2),[[j,a.value.apiKey]]),I.value.apiKey?(o(),n("p",N0,u(I.value.apiKey),1)):m("",!0)]),e("div",q0,[e("div",null,[t[270]||(t[270]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[49]||(t[49]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[j,a.value.dailyQuota,void 0,{number:!0}]]),t[271]||(t[271]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[272]||(t[272]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[50]||(t[50]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[j,a.value.quotaResetTime]]),t[273]||(t[273]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 每日自动重置额度的时间 ",-1))])]),e("div",null,[t[274]||(t[274]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[51]||(t[51]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[j,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[275]||(t[275]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))]),e("div",null,[t[283]||(t[283]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",W0,[e("button",{class:$(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",U.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[52]||(t[52]=i=>U.value="whitelist")},t[276]||(t[276]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),f(" 模型白名单 ",-1)]),2),e("button",{class:$(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",U.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[53]||(t[53]=i=>U.value="mapping")},t[277]||(t[277]=[e("i",{class:"fas fa-random mr-2"},null,-1),f(" 模型映射 ",-1)]),2)]),U.value==="whitelist"?(o(),n("div",B0,[t[278]||(t[278]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",G0,[(o(!0),n(ke,null,Ne(ne.value,i=>(o(),n("label",{key:i.value,class:$(["flex cursor-pointer items-center rounded-lg border p-3 transition-all hover:bg-gray-50 dark:border-gray-600 dark:hover:bg-gray-700",re.value.includes(i.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[b(e("input",{"onUpdate:modelValue":t[54]||(t[54]=pe=>re.value=pe),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,F0),[[je,re.value]]),e("span",Q0,u(i.label),1)],2))),128))]),e("p",H0,[f(" 已选择 "+u(re.value.length)+" 个模型 ",1),re.value.length===0?(o(),n("span",J0,"(支持所有模型)")):m("",!0)])])):(o(),n("div",Y0,[t[282]||(t[282]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",Z0,[(o(!0),n(ke,null,Ne(Oe.value,(i,pe)=>(o(),n("div",{key:pe,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":me=>i.from=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,X0),[[j,i.from]]),t[280]||(t[280]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":me=>i.to=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"映射后的模型名称",type:"text"},null,8,eu),[[j,i.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:me=>yt(pe)},t[279]||(t[279]=[e("i",{class:"fas fa-trash"},null,-1)]),8,tu)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300",type:"button",onClick:Ca},t[281]||(t[281]=[e("i",{class:"fas fa-plus mr-2"},null,-1),f(" 添加模型映射 ",-1)])),e("div",au,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:t[55]||(t[55]=i=>De("claude-opus-4-5-20251101","claude-opus-4-5-20251101"))}," + Opus 4.5 "),e("button",{class:"rounded-lg bg-indigo-100 px-3 py-1 text-xs text-indigo-700 transition-colors hover:bg-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-400 dark:hover:bg-indigo-900/50",type:"button",onClick:t[56]||(t[56]=i=>De("claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929"))}," + Sonnet 4.5 "),e("button",{class:"rounded-lg bg-emerald-100 px-3 py-1 text-xs text-emerald-700 transition-colors hover:bg-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-900/50",type:"button",onClick:t[57]||(t[57]=i=>De("claude-haiku-4-5-20251001","claude-haiku-4-5-20251001"))}," + Haiku 4.5 "),e("button",{class:"rounded-lg bg-cyan-100 px-3 py-1 text-xs text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:hover:bg-cyan-900/50",type:"button",onClick:t[58]||(t[58]=i=>De("deepseek-chat","deepseek-chat"))}," + DeepSeek "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:hover:bg-orange-900/50",type:"button",onClick:t[59]||(t[59]=i=>De("Qwen","Qwen"))}," + Qwen "),e("button",{class:"rounded-lg bg-pink-100 px-3 py-1 text-xs text-pink-700 transition-colors hover:bg-pink-200 dark:bg-pink-900/30 dark:text-pink-400 dark:hover:bg-pink-900/50",type:"button",onClick:t[60]||(t[60]=i=>De("Kimi","Kimi"))}," + Kimi "),e("button",{class:"rounded-lg bg-teal-100 px-3 py-1 text-xs text-teal-700 transition-colors hover:bg-teal-200 dark:bg-teal-900/30 dark:text-teal-400 dark:hover:bg-teal-900/50",type:"button",onClick:t[61]||(t[61]=i=>De("GLM","GLM"))}," + GLM "),e("button",{class:"rounded-lg bg-amber-100 px-3 py-1 text-xs text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50",type:"button",onClick:t[62]||(t[62]=i=>De("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[284]||(t[284]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[63]||(t[63]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[j,a.value.userAgent]]),t[285]||(t[285]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[290]||(t[290]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",ru,[e("label",su,[b(e("input",{"onUpdate:modelValue":t[64]||(t[64]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.enableRateLimit]]),t[286]||(t[286]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[287]||(t[287]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",lu,[t[288]||(t[288]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[65]||(t[65]=i=>a.value.rateLimitDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]]),t[289]||(t[289]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):m("",!0)]),a.value.platform==="claude-console"?(o(),n("div",ou,[t[292]||(t[292]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"上游错误处理",-1)),e("label",nu,[b(e("input",{"onUpdate:modelValue":t[66]||(t[66]=i=>a.value.disableAutoProtection=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.disableAutoProtection]]),t[291]||(t[291]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"}," 上游错误不自动暂停调度 ",-1))]),t[293]||(t[293]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 勾选后遇到 401/400/429/529 等上游错误仅记录日志并透传,不自动禁用或限流 ",-1))])):m("",!0)])):m("",!0),a.value.platform==="openai-responses"&&!M.value?(o(),n("div",iu,[e("div",null,[t[294]||(t[294]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),b(e("input",{"onUpdate:modelValue":t[67]||(t[67]=i=>a.value.baseApi=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"https://api.example.com/v1",required:"",type:"url"},null,512),[[j,a.value.baseApi]]),t[295]||(t[295]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方 OpenAI 兼容 API 的基础地址,不要包含具体路径 ",-1))]),e("div",null,[t[296]||(t[296]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",du,[b(e("input",{"onUpdate:modelValue":t[68]||(t[68]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"sk-xxxxxxxxxxxx",required:"",type:R.value?"text":"password"},null,8,uu),[[ka,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[69]||(t[69]=i=>R.value=!R.value)},[e("i",{class:$(R.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[297]||(t[297]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方服务提供的 API 密钥 ",-1))]),e("div",null,[t[298]||(t[298]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[70]||(t[70]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传原始请求的 User-Agent",type:"text"},null,512),[[j,a.value.userAgent]]),t[299]||(t[299]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可选项。如果设置,所有请求将使用此 User-Agent;否则透传客户端的 User-Agent ",-1))]),b(e("input",{"onUpdate:modelValue":t[71]||(t[71]=i=>a.value.rateLimitDuration=i),type:"hidden",value:"60"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]])])):m("",!0),a.value.platform==="gemini-api"&&!M.value?(o(),n("div",pu,[e("div",null,[t[300]||(t[300]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),b(e("input",{"onUpdate:modelValue":t[72]||(t[72]=i=>a.value.baseUrl=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500 dark:border-red-400":I.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",required:"",type:"url"},null,2),[[j,a.value.baseUrl]]),I.value.baseUrl?(o(),n("p",gu,u(I.value.baseUrl),1)):m("",!0),t[301]||(t[301]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[f(" 填写 API 基础地址,必须以 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/models"),f(" 结尾。系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/{model}:generateContent")],-1)),t[302]||(t[302]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[f(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com/v1beta/models")],-1)),t[303]||(t[303]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[f(" 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini/v1beta/models")],-1))]),e("div",null,[t[304]||(t[304]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",cu,[b(e("input",{"onUpdate:modelValue":t[73]||(t[73]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"AIzaSy...",required:"",type:R.value?"text":"password"},null,8,yu),[[ka,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[74]||(t[74]=i=>R.value=!R.value)},[e("i",{class:$(R.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[305]||(t[305]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Google AI Studio 获取的 API 密钥 ",-1))])])):m("",!0),a.value.platform==="claude"?(o(),n("div",mu,[t[308]||(t[308]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",xu,[e("label",fu,[b(e("input",{"onUpdate:modelValue":t[75]||(t[75]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[Ie,a.value.subscriptionType]]),t[306]||(t[306]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",bu,[b(e("input",{"onUpdate:modelValue":t[76]||(t[76]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[Ie,a.value.subscriptionType]]),t[307]||(t[307]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[309]||(t[309]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):m("",!0),a.value.platform==="claude"?(o(),n("div",vu,[e("label",ku,[b(e("input",{"onUpdate:modelValue":t[77]||(t[77]=i=>a.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.autoStopOnWarning]]),t[310]||(t[310]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 5小时使用量接近限制时自动停止调度 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当系统检测到账户接近5小时使用限制时,自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。 ")],-1))])])):m("",!0),a.value.platform==="claude"?(o(),n("div",hu,[e("label",wu,[b(e("input",{"onUpdate:modelValue":t[78]||(t[78]=i=>a.value.serialQueueEnabled=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.serialQueueEnabled]]),t[311]||(t[311]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 启用账户级串行队列 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后强制该账户的用户消息串行处理,忽略全局串行队列设置。适用于并发限制较低的账户。 ")],-1))])])):m("",!0),a.value.platform==="claude"||a.value.platform==="claude-console"?(o(),n("div",$u,[e("label",Au,[b(e("input",{"onUpdate:modelValue":t[79]||(t[79]=i=>a.value.interceptWarmup=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.interceptWarmup]]),t[312]||(t[312]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 拦截预热请求 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,对标题生成、Warmup 等低价值请求直接返回模拟响应,不消耗上游 API 额度 ")],-1))])])):m("",!0),a.value.platform==="claude"?(o(),n("div",Cu,[e("label",Tu,[b(e("input",{"onUpdate:modelValue":t[80]||(t[80]=i=>a.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.useUnifiedUserAgent]]),e("div",Iu,[t[314]||(t[314]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[315]||(t[315]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),C.value?(o(),n("div",Uu,[e("div",_u,[e("p",Ku," 💡 当前统一版本:"+u(C.value),1),e("button",{class:"ml-2 text-xs text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300",disabled:G.value,type:"button",onClick:_t},[G.value?(o(),n("div",Du)):(o(),n("i",Mu)),f(" "+u(G.value?"清除中...":"清除缓存"),1)],8,Su)])])):(o(),n("div",Pu,t[313]||(t[313]=[e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," ⏳ 等待从 Claude Code 客户端捕获 User-Agent ",-1),e("p",{class:"mt-1 text-xs text-gray-400 dark:text-gray-500"}," 💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户, 或联系开发者检查 User-Agent 格式是否发生变化 ",-1)])))])])])):m("",!0),a.value.platform==="claude"?(o(),n("div",ju,[e("label",Vu,[b(e("input",{"onUpdate:modelValue":t[81]||(t[81]=i=>a.value.useUnifiedClientId=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:Ta},null,544),[[je,a.value.useUnifiedClientId]]),e("div",zu,[t[319]||(t[319]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[320]||(t[320]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),a.value.useUnifiedClientId?(o(),n("div",Lu,[e("div",Ru,[e("div",{class:"mb-2 flex items-center justify-between"},[t[317]||(t[317]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"客户端标识 ID",-1)),e("button",{class:"rounded-md bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:oa},t[316]||(t[316]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f(" 重新生成 ",-1)]))]),e("div",Ou,[e("code",Eu,[e("span",Nu,u(a.value.unifiedClientId.substring(0,8)),1),e("span",qu,u(a.value.unifiedClientId.substring(8,56)),1),e("span",Wu,u(a.value.unifiedClientId.substring(56)),1)])]),t[318]||(t[318]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),f(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):m("",!0)])])])):m("",!0),e("div",null,[t[321]||(t[321]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),b(e("input",{"onUpdate:modelValue":t[82]||(t[82]=i=>a.value.priority=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高,默认50",type:"number"},null,512),[[j,a.value.priority,void 0,{number:!0}]]),t[322]||(t[322]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),a.value.addType==="manual"&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"?(o(),n("div",Bu,[e("div",Gu,[t[327]||(t[327]=e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-info text-sm text-white"})],-1)),e("div",null,[t[326]||(t[326]=e("h5",{class:"mb-2 font-semibold text-blue-900 dark:text-blue-300"}," 手动输入 Token ",-1)),a.value.platform==="claude"?(o(),n("p",Fu," 请输入有效的 Claude Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("p",Qu," 请输入有效的 Gemini Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="openai"?(o(),n("p",Hu," 请输入有效的 OpenAI Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="droid"?(o(),n("p",Ju," 请输入有效的 Droid Access Token,并同时提供 Refresh Token 以支持自动刷新。 ")):m("",!0),e("div",Yu,[t[325]||(t[325]=e("p",{class:"mb-1 text-sm font-medium text-blue-900 dark:text-blue-300"},[e("i",{class:"fas fa-folder-open mr-1"}),f(" 获取 Access Token 的方法: ")],-1)),a.value.platform==="claude"?(o(),n("p",Zu,t[323]||(t[323]=[f(" 请从已登录 Claude Code 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono dark:bg-blue-900/50"},"~/.claude/.credentials.json",-1),f(" 文件中的凭证, 请勿使用 Claude 官网 API Keys 页面的密钥。 ",-1)]))):a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("p",Xu,t[324]||(t[324]=[f(" 请从已登录 Gemini CLI 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono dark:bg-blue-900/50"},"~/.config/.gemini/oauth_creds.json",-1),f(" 文件中的凭证。 ",-1)]))):a.value.platform==="openai"?(o(),n("p",ep," 请从已登录 OpenAI 账户的机器上获取认证凭证, 或通过 OAuth 授权流程获取 Access Token。 ")):a.value.platform==="droid"?(o(),n("p",tp," 请从已完成授权的 Droid CLI 或 Factory.ai 导出的凭证中获取 Access Token 与 Refresh Token。 ")):m("",!0)]),a.value.platform!=="droid"?(o(),n("p",ap," 💡 如果未填写 Refresh Token,Token 过期后需要手动更新。 ")):(o(),n("p",rp," ⚠️ Droid 账户必须填写 Refresh Token,缺失将导致无法自动刷新 Access Token。 "))])]),a.value.platform==="openai"?(o(),n("div",sp,[t[328]||(t[328]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[83]||(t[83]=i=>a.value.accessToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"可选:如果不填写,系统会自动通过 Refresh Token 获取...",rows:"4"},null,512),[[j,a.value.accessToken]]),t[329]||(t[329]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。 ")],-1))])):(o(),n("div",lp,[t[330]||(t[330]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token *",-1)),b(e("textarea",{"onUpdate:modelValue":t[84]||(t[84]=i=>a.value.accessToken=i),class:$(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.accessToken}]),placeholder:"请输入 Access Token...",required:"",rows:"4"},null,2),[[j,a.value.accessToken]]),I.value.accessToken?(o(),n("p",op,u(I.value.accessToken),1)):m("",!0)])),a.value.platform==="openai"||a.value.platform==="droid"?(o(),n("div",np,[t[332]||(t[332]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token *",-1)),b(e("textarea",{"onUpdate:modelValue":t[85]||(t[85]=i=>a.value.refreshToken=i),class:$(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.refreshToken}]),placeholder:"请输入 Refresh Token(必填)...",required:"",rows:"4"},null,2),[[j,a.value.refreshToken]]),I.value.refreshToken?(o(),n("p",ip,u(I.value.refreshToken),1)):m("",!0),e("p",dp,[t[331]||(t[331]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),a.value.platform==="openai"?(o(),n(ke,{key:0},[f(" 系统将使用 Refresh Token 自动获取 Access Token 和用户信息 ")],64)):(o(),n(ke,{key:1},[f(" 系统将使用 Refresh Token 自动刷新 Factory.ai 访问令牌,确保账户保持可用。 ")],64))])])):(o(),n("div",up,[t[333]||(t[333]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[86]||(t[86]=i=>a.value.refreshToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"请输入 Refresh Token...",rows:"4"},null,512),[[j,a.value.refreshToken]])])),a.value.platform==="droid"?(o(),n("div",pp,[t[334]||(t[334]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[87]||(t[87]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[j,a.value.userAgent]]),t[335]||(t[335]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))])):m("",!0)])):m("",!0),a.value.addType==="apikey"&&a.value.platform==="droid"?(o(),n("div",gp,[t[340]||(t[340]=e("div",{class:"mb-4 flex items-start gap-3"},[e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-purple-500"},[e("i",{class:"fas fa-key text-sm text-white"})]),e("div",null,[e("h5",{class:"mb-2 font-semibold text-purple-900 dark:text-purple-200"}," 使用 API Key 调度 Droid "),e("p",{class:"text-sm text-purple-800 dark:text-purple-200"}," 请填写一个或多个 Factory.ai API Key,系统会自动在请求时随机挑选并结合会话哈希维持粘性,确保对话上下文保持稳定。 ")])],-1)),e("div",null,[t[336]||(t[336]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 列表 *",-1)),b(e("textarea",{"onUpdate:modelValue":t[88]||(t[88]=i=>a.value.apiKeysInput=i),class:$(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiKeys}]),placeholder:"每行一个 API Key,可粘贴多行",required:"",rows:"6"},null,2),[[j,a.value.apiKeysInput]]),I.value.apiKeys?(o(),n("p",cp,u(I.value.apiKeys),1)):m("",!0),t[337]||(t[337]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 建议为每条 Key 提供独立额度;系统会自动去重并忽略空白行。 ")],-1))]),e("div",null,[t[338]||(t[338]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[89]||(t[89]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[j,a.value.userAgent]]),t[339]||(t[339]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))]),t[341]||(t[341]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-random mr-1"}),f("分配策略说明")]),e("ul",{class:"mt-1 list-disc space-y-1 pl-4"},[e("li",null,"新会话将随机命中一个 Key,并在会话有效期内保持粘性。"),e("li",null,"若某 Key 失效,会自动切换到剩余可用 Key,最大化成功率。"),e("li",null," 若上游返回 4xx 错误码,该 Key 会被自动标记为异常;全部 Key 异常后账号将暂停调度。 ")])],-1))])):m("",!0),Ve(rr,{modelValue:a.value.proxy,"onUpdate:modelValue":t[90]||(t[90]=i=>a.value.proxy=i)},null,8,["modelValue"]),e("div",yp,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[91]||(t[91]=i=>d.$emit("close"))}," 取消 "),(a.value.addType==="oauth"||a.value.addType==="setup-token")&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"&&a.value.platform!=="gemini-api"?(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:E.value,type:"button",onClick:Ee}," 下一步 ",8,mp)):(o(),n("button",{key:1,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:E.value,type:"button",onClick:Ya},[E.value?(o(),n("div",fp)):m("",!0),f(" "+u(E.value?"创建中...":"创建"),1)],8,xp))])])])):m("",!0),N.value===2&&a.value.addType==="oauth"?(o(),Xe(ln,{key:2,ref_key:"oauthFlowRef",ref:ge,platform:a.value.platform,proxy:a.value.proxy,onBack:t[92]||(t[92]=i=>N.value=1),onSuccess:it},null,8,["platform","proxy"])):m("",!0),N.value===2&&a.value.addType==="setup-token"?(o(),n("div",bp,[a.value.platform==="claude"?(o(),n("div",vp,[e("div",kp,[e("div",hp,[t[363]||(t[363]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-key text-white"})],-1)),e("div",wp,[t[362]||(t[362]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"}," Claude Setup Token 授权 ",-1)),e("div",$p,[t[344]||(t[344]=e("p",{class:"mb-3 text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式: ",-1)),e("div",Ap,[e("label",Cp,[b(e("input",{"onUpdate:modelValue":t[93]||(t[93]=i=>oe.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"manual",onChange:Lt},null,544),[[Ie,oe.value]]),t[342]||(t[342]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-link mr-1"}),f("手动授权 ")],-1))]),e("label",Tp,[b(e("input",{"onUpdate:modelValue":t[94]||(t[94]=i=>oe.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"cookie",onChange:Lt},null,544),[[Ie,oe.value]]),t[343]||(t[343]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-cookie mr-1"}),f("Cookie 自动授权 ")],-1))])])]),oe.value==="manual"?(o(),n("div",Ip,[t[353]||(t[353]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤通过 Setup Token 完成 Claude 账户的授权: ",-1)),e("div",Up,[e("div",_p,[t[347]||(t[347]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Kp,[t[346]||(t[346]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),D.value?(o(),n("div",Pp,[e("div",jp,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:D.value},null,8,Vp),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:Nt},[e("i",{class:$(le.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:ut},t[345]||(t[345]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:y.value,onClick:We},[y.value?(o(),n("div",Dp)):(o(),n("i",Mp)),f(" "+u(y.value?"生成中...":"生成 Setup Token 授权链接"),1)],8,Sp))])])]),t[354]||(t[354]=e("div",{class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},[e("div",{class:"flex items-start gap-3"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 2 "),e("div",{class:"flex-1"},[e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 在浏览器中打开链接并完成授权 "),e("p",{class:"mb-2 text-sm text-blue-700 dark:text-blue-300"}," 请在新标签页中打开授权链接,登录您的 Claude 账户并授权 Claude Code。 "),e("div",{class:"rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"},[e("p",{class:"text-xs text-yellow-800 dark:text-yellow-300"},[e("i",{class:"fas fa-exclamation-triangle mr-1"}),e("strong",null,"注意:"),f("如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 ")])])])])],-1)),e("div",zp,[e("div",Lp,[t[352]||(t[352]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Rp,[t[350]||(t[350]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),t[351]||(t[351]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 授权完成后,从返回页面复制 Authorization Code,并粘贴到下方输入框: ",-1)),e("div",Op,[e("div",null,[t[348]||(t[348]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),f("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":t[95]||(t[95]=i=>de.value=i),class:"form-input w-full resize-none border-gray-300 font-mono text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"粘贴从Claude Code授权页面获取的Authorization Code...",rows:"3"},null,512),[[j,de.value]])]),t[349]||(t[349]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 请粘贴从Claude Code授权页面复制的Authorization Code ")],-1))])])])])])):m("",!0),oe.value==="cookie"?(o(),n("div",Ep,[t[360]||(t[360]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 使用 sessionKey 自动完成授权,无需手动打开链接。 ",-1)),e("div",Np,[e("div",qp,[e("div",null,[e("label",Wp,[t[355]||(t[355]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),t[356]||(t[356]=f("sessionKey ",-1)),X.value>1?(o(),n("span",Bp,u(X.value)+" 个 ",1)):m("",!0)]),b(e("textarea",{"onUpdate:modelValue":t[96]||(t[96]=i=>he.value=i),class:$(["form-input w-full resize-y border-gray-300 font-mono text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":Q.value}]),placeholder:`每行一个 sessionKey,例如:
|
||
sk-ant-sid01-xxxxx...
|
||
sk-ant-sid01-yyyyy...`,rows:"3"},null,2),[[j,he.value]]),X.value>1?(o(),n("p",Gp,[t[357]||(t[357]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),f(" 将批量创建 "+u(X.value)+" 个账户 ",1)])):m("",!0),Q.value?(o(),n("p",Fp,u(Q.value),1)):m("",!0)]),e("div",null,[e("button",{class:"flex items-center text-xs text-blue-600 hover:text-blue-700",type:"button",onClick:t[97]||(t[97]=i=>H.value=!H.value)},[e("i",{class:$(H.value?"fas fa-chevron-down mr-1":"fas fa-chevron-right mr-1")},null,2),t[358]||(t[358]=f(" 如何获取 sessionKey? ",-1))]),H.value?(o(),n("div",Qp,t[359]||(t[359]=[e("ol",{class:"space-y-2 text-xs text-gray-600 dark:text-gray-300"},[e("li",null,[f("1. 在浏览器中登录 "),e("strong",null,"claude.ai")]),e("li",null,[f("2. 按 "),e("strong",null,"F12"),f(" 打开开发者工具")]),e("li",null,[f("3. 切换到 "),e("strong",null,'"Application"'),f(" (应用) 标签页")]),e("li",null,[f(" 4. 在左侧选择 "),e("strong",null,'"Cookies"'),f(" → "),e("strong",null,'"https://claude.ai"')]),e("li",null,[f("5. 找到键为 "),e("strong",null,'"sessionKey"'),f(" 的那一行")]),e("li",null,[f("6. 复制其 "),e("strong",null,'"Value"'),f(" (值) 列的内容")])],-1),e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(' sessionKey 通常以 "sk-ant-" 开头 ')],-1)]))):m("",!0)]),e("button",{class:"btn btn-primary w-full px-4 py-3",disabled:W.value||!he.value.trim(),type:"button",onClick:$t},[W.value?(o(),n("div",Jp)):(o(),n("i",Yp)),W.value&&h.value.total>1?(o(),n(ke,{key:2},[f(" 正在授权 "+u(h.value.current)+"/"+u(h.value.total)+"... ",1)],64)):W.value?(o(),n(ke,{key:3},[f(" 授权中... ")],64)):(o(),n(ke,{key:4},[f(" 开始自动授权 ")],64))],8,Hp)])]),t[361]||(t[361]=e("div",{class:"rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"},[e("p",{class:"text-xs text-yellow-800 dark:text-yellow-300"},[e("i",{class:"fas fa-exclamation-triangle mr-1"}),e("strong",null,"提示:"),f("如果您设置了代理,Cookie授权也会使用相同的代理配置。 ")])],-1))])):m("",!0)])])])])):m("",!0),e("div",Zp,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[98]||(t[98]=i=>N.value=1)}," 上一步 "),oe.value==="manual"?(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!gt.value||p.value,type:"button",onClick:qt},[p.value?(o(),n("div",eg)):m("",!0),f(" "+u(p.value?"验证中...":"完成授权"),1)],8,Xp)):m("",!0)])])):m("",!0),M.value?(o(),n("div",tg,[e("div",null,[t[364]||(t[364]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),b(e("input",{"onUpdate:modelValue":t[99]||(t[99]=i=>a.value.name=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,512),[[j,a.value.name]])]),e("div",null,[t[365]||(t[365]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[100]||(t[100]=i=>a.value.description=i),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[j,a.value.description]])]),e("div",null,[t[369]||(t[369]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",ag,[e("label",rg,[b(e("input",{"onUpdate:modelValue":t[101]||(t[101]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[Ie,a.value.accountType]]),t[366]||(t[366]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",sg,[b(e("input",{"onUpdate:modelValue":t[102]||(t[102]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[Ie,a.value.accountType]]),t[367]||(t[367]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",lg,[b(e("input",{"onUpdate:modelValue":t[103]||(t[103]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[Ie,a.value.accountType]]),t[368]||(t[368]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[370]||(t[370]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),M.value?m("",!0):(o(),n("div",og,[t[374]||(t[374]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",ng,[b(e("select",{"onUpdate:modelValue":t[104]||(t[104]=i=>a.value.expireDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:pt},t[371]||(t[371]=[e("option",{value:""},"永不过期",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[wa,a.value.expireDuration]]),a.value.expireDuration==="custom"?(o(),n("div",ig,[b(e("input",{"onUpdate:modelValue":t[105]||(t[105]=i=>a.value.customExpireDate=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Ia.value,type:"datetime-local",onChange:na},null,40,dg),[[j,a.value.customExpireDate]])])):m("",!0),a.value.expiresAt?(o(),n("p",ug,[t[372]||(t[372]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),f(" 将于 "+u(Ua(a.value.expiresAt))+" 过期 ",1)])):(o(),n("p",pg,t[373]||(t[373]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),f(" 账户永不过期 ",-1)])))]),t[375]||(t[375]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])),a.value.accountType==="group"?(o(),n("div",gg,[t[377]||(t[377]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",cg,[e("div",yg,[e("div",mg,[Bt.value.length===0?(o(),n("div",xg," 暂无可用分组 ")):m("",!0),(o(!0),n(ke,null,Ne(Bt.value,i=>(o(),n("label",{key:i.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[b(e("input",{"onUpdate:modelValue":t[106]||(t[106]=pe=>a.value.groupIds=pe),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i.id},null,8,fg),[[je,a.value.groupIds]]),e("span",bg,u(i.name)+" ("+u(i.memberCount||0)+" 个成员) ",1)]))),128)),e("div",{class:"border-t pt-2 dark:border-gray-600"},[e("button",{class:"flex items-center gap-2 text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",type:"button",onClick:Rt},t[376]||(t[376]=[e("i",{class:"fas fa-plus"},null,-1),f(" 新建分组 ",-1)]))])])]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:Ft},[e("i",{class:$(["fas fa-sync-alt",{"animate-spin":Wt.value}])},null,2)])])])):m("",!0),a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("div",vg,[t[378]||(t[378]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[107]||(t[107]=i=>a.value.projectId=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[j,a.value.projectId]]),t[379]||(t[379]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," Google Cloud/Workspace 账号可能需要提供项目 ID ",-1))])):m("",!0),a.value.platform==="claude"?(o(),n("div",kg,[t[382]||(t[382]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",hg,[e("label",wg,[b(e("input",{"onUpdate:modelValue":t[108]||(t[108]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[Ie,a.value.subscriptionType]]),t[380]||(t[380]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",$g,[b(e("input",{"onUpdate:modelValue":t[109]||(t[109]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[Ie,a.value.subscriptionType]]),t[381]||(t[381]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[383]||(t[383]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):m("",!0),a.value.platform==="claude"?(o(),n("div",Ag,[e("label",Cg,[b(e("input",{"onUpdate:modelValue":t[110]||(t[110]=i=>a.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.autoStopOnWarning]]),t[384]||(t[384]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 5小时使用量接近限制时自动停止调度 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当系统检测到账户接近5小时使用限制时,自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。 ")],-1))])])):m("",!0),a.value.platform==="claude"?(o(),n("div",Tg,[e("label",Ig,[b(e("input",{"onUpdate:modelValue":t[111]||(t[111]=i=>a.value.serialQueueEnabled=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.serialQueueEnabled]]),t[385]||(t[385]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 启用账户级串行队列 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后强制该账户的用户消息串行处理,忽略全局串行队列设置。适用于并发限制较低的账户。 ")],-1))])])):m("",!0),a.value.platform==="claude"||a.value.platform==="claude-console"?(o(),n("div",Ug,[e("label",_g,[b(e("input",{"onUpdate:modelValue":t[112]||(t[112]=i=>a.value.interceptWarmup=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.interceptWarmup]]),t[386]||(t[386]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 拦截预热请求 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,对标题生成、Warmup 等低价值请求直接返回模拟响应,不消耗上游 API 额度 ")],-1))])])):m("",!0),a.value.platform==="claude"?(o(),n("div",Kg,[e("label",Sg,[b(e("input",{"onUpdate:modelValue":t[113]||(t[113]=i=>a.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.useUnifiedUserAgent]]),e("div",Mg,[t[388]||(t[388]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[389]||(t[389]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),C.value?(o(),n("div",Dg,[e("div",Pg,[e("p",jg," 💡 当前统一版本:"+u(C.value),1),e("button",{class:"ml-2 text-xs text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300",disabled:G.value,type:"button",onClick:_t},[G.value?(o(),n("div",Lg)):(o(),n("i",zg)),f(" "+u(G.value?"清除中...":"清除缓存"),1)],8,Vg)])])):(o(),n("div",Rg,t[387]||(t[387]=[e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," ⏳ 等待从 Claude Code 客户端捕获 User-Agent ",-1),e("p",{class:"mt-1 text-xs text-gray-400 dark:text-gray-500"}," 💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户, 或联系开发者检查 User-Agent 格式是否发生变化 ",-1)])))])])])):m("",!0),a.value.platform==="claude"?(o(),n("div",Og,[e("label",Eg,[b(e("input",{"onUpdate:modelValue":t[114]||(t[114]=i=>a.value.useUnifiedClientId=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:Ta},null,544),[[je,a.value.useUnifiedClientId]]),e("div",Ng,[t[393]||(t[393]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[394]||(t[394]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),a.value.useUnifiedClientId?(o(),n("div",qg,[e("div",Wg,[e("div",{class:"mb-2 flex items-center justify-between"},[t[391]||(t[391]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"客户端标识 ID",-1)),e("button",{class:"rounded-md bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:oa},t[390]||(t[390]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f(" 重新生成 ",-1)]))]),e("div",Bg,[e("code",Gg,[e("span",Fg,u(a.value.unifiedClientId.substring(0,8)),1),e("span",Qg,u(a.value.unifiedClientId.substring(8,56)),1),e("span",Hg,u(a.value.unifiedClientId.substring(56)),1)])]),t[392]||(t[392]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),f(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):m("",!0)])])])):m("",!0),e("div",null,[t[395]||(t[395]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),b(e("input",{"onUpdate:modelValue":t[115]||(t[115]=i=>a.value.priority=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高",type:"number"},null,512),[[j,a.value.priority,void 0,{number:!0}]]),t[396]||(t[396]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),a.value.platform==="claude-console"||a.value.platform==="ccr"?(o(),n("div",Jg,[e("div",null,[t[397]||(t[397]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API URL",-1)),b(e("input",{"onUpdate:modelValue":t[116]||(t[116]=i=>a.value.apiUrl=i),class:"form-input w-full",placeholder:"例如:https://api.example.com",required:"",type:"text"},null,512),[[j,a.value.apiUrl]])]),e("div",null,[t[398]||(t[398]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":t[117]||(t[117]=i=>a.value.apiKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[j,a.value.apiKey]]),t[399]||(t[399]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",Yg,[e("div",null,[t[400]||(t[400]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[118]||(t[118]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[j,a.value.dailyQuota,void 0,{number:!0}]]),t[401]||(t[401]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[402]||(t[402]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[119]||(t[119]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[j,a.value.quotaResetTime]]),t[403]||(t[403]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),M.value&&a.value.dailyQuota>0?(o(),n("div",Zg,[e("div",Xg,[t[404]||(t[404]=e("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"}," 今日使用情况 ",-1)),e("span",ec," $"+u(ht().toFixed(4))+" / $"+u(a.value.dailyQuota.toFixed(2)),1)]),e("div",tc,[e("div",{class:$(["absolute left-0 top-0 h-full rounded-full transition-all",ct.value>=90?"bg-red-500":ct.value>=70?"bg-yellow-500":"bg-green-500"]),style:Ze({width:`${Math.min(ct.value,100)}%`})},null,6)]),e("div",ac,[e("span",rc," 剩余: $"+u(Math.max(0,a.value.dailyQuota-ht()).toFixed(2)),1),e("span",sc,u(ct.value.toFixed(1))+"% 已使用 ",1)])])):m("",!0),e("div",null,[t[405]||(t[405]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[120]||(t[120]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[j,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[406]||(t[406]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))]),e("div",null,[t[414]||(t[414]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",lc,[e("button",{class:$(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",U.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[121]||(t[121]=i=>U.value="whitelist")},t[407]||(t[407]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),f(" 模型白名单 ",-1)]),2),e("button",{class:$(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",U.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[122]||(t[122]=i=>U.value="mapping")},t[408]||(t[408]=[e("i",{class:"fas fa-random mr-2"},null,-1),f(" 模型映射 ",-1)]),2)]),U.value==="whitelist"?(o(),n("div",oc,[t[409]||(t[409]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",nc,[(o(!0),n(ke,null,Ne(ne.value,i=>(o(),n("label",{key:i.value,class:$(["flex cursor-pointer items-center rounded-lg border p-3 transition-all hover:bg-gray-50 dark:border-gray-600 dark:hover:bg-gray-700",re.value.includes(i.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[b(e("input",{"onUpdate:modelValue":t[123]||(t[123]=pe=>re.value=pe),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,ic),[[je,re.value]]),e("span",dc,u(i.label),1)],2))),128))]),e("p",uc,[f(" 已选择 "+u(re.value.length)+" 个模型 ",1),re.value.length===0?(o(),n("span",pc,"(支持所有模型)")):m("",!0)])])):(o(),n("div",gc,[t[413]||(t[413]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",cc,[(o(!0),n(ke,null,Ne(Oe.value,(i,pe)=>(o(),n("div",{key:pe,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":me=>i.from=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"原始模型名称",type:"text"},null,8,yc),[[j,i.from]]),t[411]||(t[411]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":me=>i.to=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"映射后的模型名称",type:"text"},null,8,mc),[[j,i.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:me=>yt(pe)},t[410]||(t[410]=[e("i",{class:"fas fa-trash"},null,-1)]),8,xc)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500",type:"button",onClick:Ca},t[412]||(t[412]=[e("i",{class:"fas fa-plus mr-2"},null,-1),f(" 添加模型映射 ",-1)])),e("div",fc,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:t[124]||(t[124]=i=>De("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),e("button",{class:"rounded-lg bg-indigo-100 px-3 py-1 text-xs text-indigo-700 transition-colors hover:bg-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-400 dark:hover:bg-indigo-900/50",type:"button",onClick:t[125]||(t[125]=i=>De("claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929"))}," + Sonnet 4.5 "),e("button",{class:"rounded-lg bg-purple-100 px-3 py-1 text-xs text-purple-700 transition-colors hover:bg-purple-200 dark:bg-purple-900/30 dark:text-purple-400 dark:hover:bg-purple-900/50",type:"button",onClick:t[126]||(t[126]=i=>De("claude-opus-4-1-20250805","claude-opus-4-1-20250805"))}," + Opus 4.1 "),e("button",{class:"rounded-lg bg-green-100 px-3 py-1 text-xs text-green-700 transition-colors hover:bg-green-200 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",type:"button",onClick:t[127]||(t[127]=i=>De("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),e("button",{class:"rounded-lg bg-emerald-100 px-3 py-1 text-xs text-emerald-700 transition-colors hover:bg-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-900/50",type:"button",onClick:t[128]||(t[128]=i=>De("claude-haiku-4-5-20251001","claude-haiku-4-5-20251001"))}," + Haiku 4.5 "),e("button",{class:"rounded-lg bg-cyan-100 px-3 py-1 text-xs text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:hover:bg-cyan-900/50",type:"button",onClick:t[129]||(t[129]=i=>De("deepseek-chat","deepseek-chat"))}," + DeepSeek "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:hover:bg-orange-900/50",type:"button",onClick:t[130]||(t[130]=i=>De("Qwen","Qwen"))}," + Qwen "),e("button",{class:"rounded-lg bg-pink-100 px-3 py-1 text-xs text-pink-700 transition-colors hover:bg-pink-200 dark:bg-pink-900/30 dark:text-pink-400 dark:hover:bg-pink-900/50",type:"button",onClick:t[131]||(t[131]=i=>De("Kimi","Kimi"))}," + Kimi "),e("button",{class:"rounded-lg bg-teal-100 px-3 py-1 text-xs text-teal-700 transition-colors hover:bg-teal-200 dark:bg-teal-900/30 dark:text-teal-400 dark:hover:bg-teal-900/50",type:"button",onClick:t[132]||(t[132]=i=>De("GLM","GLM"))}," + GLM "),e("button",{class:"rounded-lg bg-amber-100 px-3 py-1 text-xs text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50",type:"button",onClick:t[133]||(t[133]=i=>De("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[415]||(t[415]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[134]||(t[134]=i=>a.value.userAgent=i),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[j,a.value.userAgent]]),t[416]||(t[416]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[421]||(t[421]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",bc,[e("label",vc,[b(e("input",{"onUpdate:modelValue":t[135]||(t[135]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[je,a.value.enableRateLimit]]),t[417]||(t[417]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[418]||(t[418]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",kc,[t[419]||(t[419]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[136]||(t[136]=i=>a.value.rateLimitDuration=i),class:"form-input w-full",min:"1",type:"number"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]]),t[420]||(t[420]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):m("",!0)]),a.value.platform==="claude-console"?(o(),n("div",hc,[t[423]||(t[423]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 上游错误处理 ",-1)),e("label",wc,[b(e("input",{"onUpdate:modelValue":t[137]||(t[137]=i=>a.value.disableAutoProtection=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.disableAutoProtection]]),t[422]||(t[422]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"}," 上游错误不自动暂停调度 ",-1))]),t[424]||(t[424]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 勾选后遇到 401/400/429/529 等上游错误仅记录日志并透传,不自动禁用或限流 ",-1))])):m("",!0)])):m("",!0),a.value.platform==="openai-responses"?(o(),n("div",$c,[e("div",null,[t[425]||(t[425]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 基础地址",-1)),b(e("input",{"onUpdate:modelValue":t[138]||(t[138]=i=>a.value.baseApi=i),class:"form-input w-full",placeholder:"https://api.example.com/v1",type:"url"},null,512),[[j,a.value.baseApi]])]),e("div",null,[t[426]||(t[426]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 密钥",-1)),e("div",Ac,[b(e("input",{"onUpdate:modelValue":t[139]||(t[139]=i=>a.value.apiKey=i),class:"form-input w-full pr-10",placeholder:"留空表示不更新",type:R.value?"text":"password"},null,8,Cc),[[ka,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600",type:"button",onClick:t[140]||(t[140]=i=>R.value=!R.value)},[e("i",{class:$(R.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[427]||(t[427]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",null,[t[428]||(t[428]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent",-1)),b(e("input",{"onUpdate:modelValue":t[141]||(t[141]=i=>a.value.userAgent=i),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[j,a.value.userAgent]]),t[429]||(t[429]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),b(e("input",{"onUpdate:modelValue":t[142]||(t[142]=i=>a.value.rateLimitDuration=i),type:"hidden"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]]),e("div",Tc,[e("div",null,[t[430]||(t[430]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[143]||(t[143]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[j,a.value.dailyQuota,void 0,{number:!0}]])]),e("div",null,[t[431]||(t[431]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[144]||(t[144]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",type:"time"},null,512),[[j,a.value.quotaResetTime]])])]),e("div",null,[t[432]||(t[432]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[145]||(t[145]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[j,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[433]||(t[433]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))])])):m("",!0),a.value.platform==="gemini-api"?(o(),n("div",Ic,[e("div",null,[t[434]||(t[434]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址",-1)),b(e("input",{"onUpdate:modelValue":t[146]||(t[146]=i=>a.value.baseUrl=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500 dark:border-red-400":I.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",type:"url"},null,2),[[j,a.value.baseUrl]]),I.value.baseUrl?(o(),n("p",Uc,u(I.value.baseUrl),1)):m("",!0),t[435]||(t[435]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[f(" 填写 API 基础地址,必须以 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/models"),f(" 结尾。系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/{model}:generateContent")],-1)),t[436]||(t[436]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[f(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com/v1beta/models")],-1)),t[437]||(t[437]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[f(" 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini/v1beta/models")],-1))]),e("div",null,[t[438]||(t[438]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥",-1)),e("div",_c,[b(e("input",{"onUpdate:modelValue":t[147]||(t[147]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"留空表示不更新",type:R.value?"text":"password"},null,8,Kc),[[ka,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[148]||(t[148]=i=>R.value=!R.value)},[e("i",{class:$(R.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[439]||(t[439]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))])])):m("",!0),a.value.platform==="bedrock"?(o(),n("div",Sc,[e("div",null,[t[440]||(t[440]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 访问密钥 ID",-1)),b(e("input",{"onUpdate:modelValue":t[149]||(t[149]=i=>a.value.accessKeyId=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"text"},null,512),[[j,a.value.accessKeyId]]),t[441]||(t[441]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Access Key ID",-1))]),e("div",null,[t[442]||(t[442]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 秘密访问密钥",-1)),b(e("input",{"onUpdate:modelValue":t[150]||(t[150]=i=>a.value.secretAccessKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[j,a.value.secretAccessKey]]),t[443]||(t[443]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Secret Access Key",-1))]),e("div",null,[t[444]||(t[444]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 区域",-1)),b(e("input",{"onUpdate:modelValue":t[151]||(t[151]=i=>a.value.region=i),class:"form-input w-full",placeholder:"例如:us-east-1",type:"text"},null,512),[[j,a.value.region]]),t[445]||(t[445]=e("div",{class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600"}),e("div",{class:"text-xs text-blue-700"},[e("p",{class:"mb-1 font-medium"},"常用 AWS 区域参考:"),e("div",{class:"grid grid-cols-2 gap-1 text-xs"},[e("span",null,"• us-east-1 (美国东部)"),e("span",null,"• us-west-2 (美国西部)"),e("span",null,"• eu-west-1 (欧洲爱尔兰)"),e("span",null,"• ap-southeast-1 (新加坡)"),e("span",null,"• ap-northeast-1 (东京)"),e("span",null,"• eu-central-1 (法兰克福)")])])])],-1))]),e("div",null,[t[446]||(t[446]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"会话令牌 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[152]||(t[152]=i=>a.value.sessionToken=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[j,a.value.sessionToken]])]),e("div",null,[t[447]||(t[447]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"默认主模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[153]||(t[153]=i=>a.value.defaultModel=i),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[j,a.value.defaultModel]]),t[448]||(t[448]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1))]),e("div",null,[t[449]||(t[449]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[154]||(t[154]=i=>a.value.smallFastModel=i),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[j,a.value.smallFastModel]]),t[450]||(t[450]=e("p",{class:"mt-1 text-xs text-gray-500"},"用于快速响应的轻量级模型,留空将使用系统默认",-1))]),e("div",null,[t[455]||(t[455]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",Mc,[e("label",Dc,[b(e("input",{"onUpdate:modelValue":t[155]||(t[155]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[je,a.value.enableRateLimit]]),t[451]||(t[451]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[452]||(t[452]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",Pc,[t[453]||(t[453]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[156]||(t[156]=i=>a.value.rateLimitDuration=i),class:"form-input w-full",min:"1",type:"number"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]]),t[454]||(t[454]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):m("",!0)])])):m("",!0),a.value.platform==="azure_openai"?(o(),n("div",jc,[e("div",null,[t[456]||(t[456]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint",-1)),b(e("input",{"onUpdate:modelValue":t[157]||(t[157]=i=>a.value.azureEndpoint=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",type:"url"},null,2),[[j,a.value.azureEndpoint]]),I.value.azureEndpoint?(o(),n("p",Vc,u(I.value.azureEndpoint),1)):m("",!0)]),e("div",null,[t[457]||(t[457]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),b(e("input",{"onUpdate:modelValue":t[158]||(t[158]=i=>a.value.apiVersion=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[j,a.value.apiVersion]]),t[458]||(t[458]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI API 版本,默认使用最新稳定版本 2024-02-01 ",-1))]),e("div",null,[t[459]||(t[459]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称",-1)),b(e("input",{"onUpdate:modelValue":t[159]||(t[159]=i=>a.value.deploymentName=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.deploymentName}]),placeholder:"gpt-4",type:"text"},null,2),[[j,a.value.deploymentName]]),I.value.deploymentName?(o(),n("p",zc,u(I.value.deploymentName),1)):m("",!0)]),e("div",null,[t[460]||(t[460]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":t[160]||(t[160]=i=>a.value.apiKey=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiKey}]),placeholder:"留空表示不更新",type:"password"},null,2),[[j,a.value.apiKey]]),I.value.apiKey?(o(),n("p",Lc,u(I.value.apiKey),1)):m("",!0),t[461]||(t[461]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))]),e("div",null,[t[462]||(t[462]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",Rc,[(o(),n(ke,null,Ne(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],i=>e("label",{key:i,class:"flex cursor-pointer items-center"},[b(e("input",{"onUpdate:modelValue":t[161]||(t[161]=pe=>a.value.supportedModels=pe),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,Oc),[[je,a.value.supportedModels]]),e("span",Ec,u(i),1)])),64))]),t[463]||(t[463]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"选择此部署支持的模型类型",-1))])])):m("",!0),M.value&&wt.value?(o(),n("div",Nc,[e("div",qc,[t[469]||(t[469]=e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-purple-500"},[e("i",{class:"fas fa-retweet text-sm text-white"})],-1)),e("div",Wc,[e("div",Bc,[t[465]||(t[465]=e("h5",{class:"font-semibold text-purple-900 dark:text-purple-200"},"更新 API Key",-1)),e("button",{class:"flex items-center gap-1.5 rounded-lg bg-purple-600 px-3 py-1.5 text-xs font-medium text-white transition-colors hover:bg-purple-700 dark:bg-purple-500 dark:hover:bg-purple-600",type:"button",onClick:t[162]||(t[162]=i=>Ce.value=!0)},t[464]||(t[464]=[e("i",{class:"fas fa-list-ul"},null,-1),e("span",null,"管理 API Key",-1)]))]),e("p",Gc,[t[466]||(t[466]=f(" 当前已保存 ",-1)),e("strong",null,u(Vt.value),1),t[467]||(t[467]=f(" 条 API Key。您可以追加新的 Key,或通过下方模式快速覆盖、删除指定 Key。 ",-1))]),t[468]||(t[468]=e("p",{class:"text-xs text-purple-700 dark:text-purple-300"}," 留空表示保留现有 Key 不变;根据所选模式决定是追加、覆盖还是删除输入的 Key。 ",-1))])]),e("div",Fc,[e("div",null,[t[470]||(t[470]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 API Key 列表",-1)),b(e("textarea",{"onUpdate:modelValue":t[163]||(t[163]=i=>a.value.apiKeysInput=i),class:$(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiKeys}]),placeholder:"根据模式填写;每行一个 API Key",rows:"6"},null,2),[[j,a.value.apiKeysInput]]),I.value.apiKeys?(o(),n("p",Qc,u(I.value.apiKeys),1)):m("",!0)]),e("div",Hc,[e("div",Jc,[t[471]||(t[471]=e("span",{class:"text-sm font-semibold text-purple-800 dark:text-purple-100"},"API Key 更新模式",-1)),e("span",Yc,u(Pt.value),1)]),e("div",Zc,[e("span",{class:"pointer-events-none absolute inset-y-0 rounded-2xl bg-gradient-to-r from-purple-500/90 via-purple-600 to-indigo-500/90 shadow-lg ring-1 ring-purple-100/80 transition-all duration-300 ease-out dark:from-purple-500/70 dark:via-purple-600/70 dark:to-indigo-500/70 dark:ring-purple-400/30",style:Ze(Dt.value)},null,4),(o(),n(ke,null,Ne(at,i=>e("button",{key:i.value,class:$(["relative z-10 flex items-center justify-center rounded-2xl px-2 text-xs font-semibold transition-all duration-200 ease-out focus:outline-none focus-visible:ring-2 focus-visible:ring-purple-500/60 dark:focus-visible:ring-purple-400/60",a.value.apiKeyUpdateMode===i.value?"text-white drop-shadow-sm":"text-purple-500/80 hover:text-purple-700 dark:text-purple-200/70 dark:hover:text-purple-100"]),type:"button",onClick:pe=>a.value.apiKeyUpdateMode=i.value},u(i.label),11,Xc)),64))]),e("p",ey,u(jt.value),1)]),t[472]||(t[472]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-lightbulb mr-1"}),f("小提示")]),e("ul",{class:"mt-1 list-disc space-y-1 pl-4"},[e("li",null,"系统会为新的 Key 自动建立粘性映射,保持同一会话命中同一个 Key。"),e("li",null,"追加模式会保留现有 Key 并在末尾追加新的 Key。"),e("li",null,"覆盖模式会先清空旧 Key 再写入上方的新列表。"),e("li",null,"删除模式会根据输入精准移除指定 Key,适合快速处理失效或被封禁的 Key。")])],-1))])])):m("",!0),!(M.value&&wt.value)&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"?(o(),n("div",ty,[t[475]||(t[475]=e("div",{class:"mb-4 flex items-start gap-3"},[e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-amber-500"},[e("i",{class:"fas fa-key text-sm text-white"})]),e("div",null,[e("h5",{class:"mb-2 font-semibold text-amber-900 dark:text-amber-300"},"更新 Token"),e("p",{class:"mb-2 text-sm text-amber-800 dark:text-amber-300"}," 可以更新 Access Token 和 Refresh Token。为了安全起见,不会显示当前的 Token 值。 "),e("p",{class:"text-xs text-amber-600 dark:text-amber-400"},"💡 留空表示不更新该字段。")])],-1)),e("div",ay,[e("div",null,[t[473]||(t[473]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Access Token",-1)),b(e("textarea",{"onUpdate:modelValue":t[164]||(t[164]=i=>a.value.accessToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[j,a.value.accessToken]])]),e("div",null,[t[474]||(t[474]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Refresh Token",-1)),b(e("textarea",{"onUpdate:modelValue":t[165]||(t[165]=i=>a.value.refreshToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[j,a.value.refreshToken]])])])])):m("",!0),a.value.platform==="droid"?(o(),n("div",ry,[t[476]||(t[476]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[166]||(t[166]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[j,a.value.userAgent]]),t[477]||(t[477]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))])):m("",!0),Ve(rr,{modelValue:a.value.proxy,"onUpdate:modelValue":t[167]||(t[167]=i=>a.value.proxy=i)},null,8,["modelValue"]),e("div",sy,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[168]||(t[168]=i=>d.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:E.value,type:"button",onClick:At},[E.value?(o(),n("div",oy)):m("",!0),f(" "+u(E.value?"更新中...":"更新"),1)],8,ly)])])):m("",!0)])])):m("",!0),Ve(Ja,{"cancel-text":T.value.cancelText,"confirm-text":T.value.confirmText,message:T.value.message,show:_.value,title:T.value.title,onCancel:Y,onConfirm:O},null,8,["cancel-text","confirm-text","message","show","title"]),Ut.value?(o(),Xe(jr,{key:1,onClose:t[169]||(t[169]=i=>Ut.value=!1),onRefresh:$a})):m("",!0),Ce.value?(o(),Xe(Ei,{key:2,"account-id":(ie=c.account)==null?void 0:ie.id,"account-name":(ye=c.account)==null?void 0:ye.name,onClose:t[170]||(t[170]=i=>Ce.value=!1),onRefresh:Aa},null,8,["account-id","account-name"])):m("",!0)])}}},mr=sa(ny,[["__scopeId","data-v-31bfe83b"]]),iy={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},dy={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto rounded-2xl bg-white/90 p-4 shadow-xl backdrop-blur-xl dark:bg-gray-800/95 dark:shadow-2xl sm:p-6 md:p-8"},uy={class:"mb-4 flex items-center justify-between sm:mb-6"},py={class:"flex items-center gap-2 sm:gap-3"},gy={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},cy={class:"space-y-6"},yy={key:0,class:"mt-1 text-xs text-red-500"},my={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},xy={key:0,class:"mt-1 text-xs text-red-500"},fy={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},by=["placeholder","required"],vy={key:0,class:"mt-1 text-xs text-red-500"},ky={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},hy={class:"mb-3"},wy={class:"inline-flex cursor-pointer items-center"},$y={key:0},Ay={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Cy={class:"mb-3 space-y-2"},Ty=["onUpdate:modelValue"],Iy=["onUpdate:modelValue"],Uy=["onClick"],_y={class:"mt-2 flex gap-3"},Ky=["disabled"],Sy={key:0,class:"loading-spinner mr-2"},My={__name:"CcrAccountForm",props:{account:{type:Object,default:null}},emits:["close","success"],setup(F,{emit:_e}){const c=F,z=_e,A=v(!0),_=Z(()=>!!c.account),T=v(!1),k=v({name:"",description:"",apiUrl:"",apiKey:"",priority:50,userAgent:"",rateLimitDuration:60,dailyQuota:0,quotaResetTime:"00:00",proxy:null,supportedModels:{}}),P=v(!0),O=v({}),Y=v([]),M=()=>{const y={};for(const p of Y.value){const D=(p.from||"").trim(),de=(p.to||"").trim();D&&de&&(y[D]=de)}return y},se=()=>{Y.value.push({from:"",to:""})},ge=y=>{Y.value.splice(y,1)},N=()=>{const y={};return(!k.value.name||k.value.name.trim().length===0)&&(y.name="名称不能为空"),(!k.value.apiUrl||k.value.apiUrl.trim().length===0)&&(y.apiUrl="API URL 不能为空"),!_.value&&(!k.value.apiKey||k.value.apiKey.trim().length===0)&&(y.apiKey="API Key 不能为空"),O.value=y,Object.keys(y).length===0},E=async()=>{if(N()){T.value=!0;try{if(_.value){const y={name:k.value.name,description:k.value.description,apiUrl:k.value.apiUrl,priority:k.value.priority,userAgent:k.value.userAgent,rateLimitDuration:P.value?Number(k.value.rateLimitDuration||60):0,dailyQuota:Number(k.value.dailyQuota||0),quotaResetTime:k.value.quotaResetTime||"00:00",proxy:k.value.proxy||null,supportedModels:M()};k.value.apiKey&&k.value.apiKey.trim().length>0&&(y.apiKey=k.value.apiKey);const p=await zs(c.account.id,y);p.success?z("success"):V(p.message||"保存失败","error")}else{const y={name:k.value.name,description:k.value.description,apiUrl:k.value.apiUrl,apiKey:k.value.apiKey,priority:Number(k.value.priority||50),supportedModels:M(),userAgent:k.value.userAgent,rateLimitDuration:P.value?Number(k.value.rateLimitDuration||60):0,proxy:k.value.proxy,accountType:"shared",dailyQuota:Number(k.value.dailyQuota||0),quotaResetTime:k.value.quotaResetTime||"00:00"},p=await Ls(y);p.success?z("success"):V(p.message||"创建失败","error")}}catch(y){V(y.message||"请求失败","error")}finally{T.value=!1}}},R=()=>{if(!c.account)return;const y=c.account;k.value.name=y.name||"",k.value.description=y.description||"",k.value.apiUrl=y.apiUrl||"",k.value.priority=Number(y.priority||50),k.value.userAgent=y.userAgent||"",k.value.rateLimitDuration=Number(y.rateLimitDuration||60),k.value.dailyQuota=Number(y.dailyQuota||0),k.value.quotaResetTime=y.quotaResetTime||"00:00",k.value.proxy=y.proxy||null,P.value=k.value.rateLimitDuration>0,Y.value=[];const p=y.supportedModels||{};if(p&&typeof p=="object")for(const D of Object.keys(p))Y.value.push({from:D,to:p[D]})};return ra(()=>{_.value&&R()}),ve(()=>c.account,()=>{_.value&&R()}),(y,p)=>(o(),Xe(Mt,{to:"body"},[A.value?(o(),n("div",iy,[e("div",dy,[e("div",uy,[e("div",py,[p[13]||(p[13]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-teal-500 to-emerald-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-code-branch text-sm text-white sm:text-base"})],-1)),e("h3",gy,u(_.value?"编辑 CCR 账户":"添加 CCR 账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:p[0]||(p[0]=D=>y.$emit("close"))},p[14]||(p[14]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",cy,[e("div",null,[p[15]||(p[15]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称 *",-1)),b(e("input",{"onUpdate:modelValue":p[1]||(p[1]=D=>k.value.name=D),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":O.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[j,k.value.name]]),O.value.name?(o(),n("p",yy,u(O.value.name),1)):m("",!0)]),e("div",null,[p[16]||(p[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":p[2]||(p[2]=D=>k.value.description=D),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"账户用途说明...",rows:"3"},null,512),[[j,k.value.description]])]),e("div",my,[e("div",null,[p[17]||(p[17]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),b(e("input",{"onUpdate:modelValue":p[3]||(p[3]=D=>k.value.apiUrl=D),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":O.value.apiUrl}]),placeholder:"例如:https://api.example.com/v1/messages",required:"",type:"text"},null,2),[[j,k.value.apiUrl]]),O.value.apiUrl?(o(),n("p",xy,u(O.value.apiUrl),1)):m("",!0)]),e("div",null,[e("label",fy,"API Key "+u(_.value?"(留空不更新)":"*"),1),b(e("input",{"onUpdate:modelValue":p[4]||(p[4]=D=>k.value.apiKey=D),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":O.value.apiKey}]),placeholder:_.value?"留空表示不更新":"必填",required:!_.value,type:"password"},null,10,by),[[j,k.value.apiKey]]),O.value.apiKey?(o(),n("p",vy,u(O.value.apiKey),1)):m("",!0)])]),e("div",ky,[e("div",null,[p[18]||(p[18]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"优先级",-1)),b(e("input",{"onUpdate:modelValue":p[5]||(p[5]=D=>k.value.priority=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:"100",min:"1",placeholder:"默认50,数字越小优先级越高",type:"number"},null,512),[[j,k.value.priority,void 0,{number:!0}]]),p[19]||(p[19]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议范围:1-100,数字越小优先级越高 ",-1))]),e("div",null,[p[20]||(p[20]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":p[6]||(p[6]=D=>k.value.userAgent=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[j,k.value.userAgent]])])]),e("div",null,[p[24]||(p[24]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",hy,[e("label",wy,[b(e("input",{"onUpdate:modelValue":p[7]||(p[7]=D=>P.value=D),class:"mr-2 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,P.value]]),p[21]||(p[21]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制(429 时暂停调度)",-1))])]),P.value?(o(),n("div",$y,[p[22]||(p[22]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":p[8]||(p[8]=D=>k.value.rateLimitDuration=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[j,k.value.rateLimitDuration,void 0,{number:!0}]]),p[23]||(p[23]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):m("",!0)]),e("div",Ay,[e("div",null,[p[25]||(p[25]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日额度限制 ($)",-1)),b(e("input",{"onUpdate:modelValue":p[9]||(p[9]=D=>k.value.dailyQuota=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[j,k.value.dailyQuota,void 0,{number:!0}]]),p[26]||(p[26]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[p[27]||(p[27]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"额度重置时间",-1)),b(e("input",{"onUpdate:modelValue":p[10]||(p[10]=D=>k.value.quotaResetTime=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[j,k.value.quotaResetTime]]),p[28]||(p[28]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),e("div",null,[p[32]||(p[32]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型映射表 (可选)",-1)),p[33]||(p[33]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",Cy,[(o(!0),n(ke,null,Ne(Y.value,(D,de)=>(o(),n("div",{key:de,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":le=>D.from=le,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,Ty),[[j,D.from]]),p[30]||(p[30]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":le=>D.to=le,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"映射后的模型名称",type:"text"},null,8,Iy),[[j,D.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:le=>ge(de)},p[29]||(p[29]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Uy)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300",type:"button",onClick:se},p[31]||(p[31]=[e("i",{class:"fas fa-plus mr-2"},null,-1),f(" 添加模型映射 ",-1)]))]),e("div",null,[Ve(rr,{modelValue:k.value.proxy,"onUpdate:modelValue":p[11]||(p[11]=D=>k.value.proxy=D)},null,8,["modelValue"])]),e("div",_y,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:p[12]||(p[12]=D=>y.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:T.value,type:"button",onClick:E},[T.value?(o(),n("div",Sy)):m("",!0),f(" "+u(T.value?_.value?"保存中...":"创建中...":_.value?"保存":"创建"),1)],8,Ky)])])])])):m("",!0)]))}},xr=sa(My,[["__scopeId","data-v-3b48d107"]]),Dy={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Py={class:"relative z-10 mx-3 flex max-h-[92vh] w-full max-w-6xl flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4 sm:p-1"},jy={class:"flex flex-col gap-3 border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80 sm:flex-row sm:items-center sm:justify-between"},Vy={class:"flex flex-1 items-start gap-3"},zy={class:"space-y-1"},Ly={class:"flex flex-wrap items-center gap-2"},Ry={class:"text-lg font-semibold text-gray-900 dark:text-gray-100 sm:text-xl"},Oy={key:0,class:"inline-flex items-center rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-500/10 dark:text-blue-300"},Ey={key:1,class:"inline-flex items-center rounded-full bg-purple-100 px-2.5 py-0.5 text-xs font-medium text-purple-700 dark:bg-purple-500/10 dark:text-purple-300"},Ny={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},qy={key:0},Wy={class:"flex-1 overflow-y-auto px-5 py-4 sm:px-6"},By={key:0,class:"flex h-[50vh] items-center justify-center"},Gy={class:"mb-5 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4"},Fy={class:"flex items-start justify-between"},Qy={class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"},Hy={class:"mt-2 text-xl font-semibold text-gray-900 dark:text-gray-100"},Jy={class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Yy={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gray-50 dark:bg-gray-800"},Zy={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},Xy={class:"space-y-3 rounded-2xl border border-blue-100 bg-blue-50/60 p-4 dark:border-blue-500/20 dark:bg-blue-900/20"},em={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-blue-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-blue-500/20"},tm={class:"flex items-center justify-between"},am={class:"font-semibold text-gray-900 dark:text-gray-100"},rm={class:"mt-2 flex items-center justify-between"},sm={class:"font-semibold text-gray-900 dark:text-gray-100"},lm={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},om={class:"space-y-3 rounded-2xl border border-amber-100 bg-amber-50/70 p-4 dark:border-amber-500/20 dark:bg-amber-900/20"},nm={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-amber-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-amber-500/20"},im={class:"flex items-center justify-between"},dm={class:"font-semibold text-gray-900 dark:text-gray-100"},um={class:"mt-2 flex items-center justify-between"},pm={class:"font-semibold text-gray-900 dark:text-gray-100"},gm={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},cm={class:"space-y-3 rounded-2xl border border-emerald-100 bg-emerald-50/60 p-4 dark:border-emerald-500/20 dark:bg-emerald-900/20"},ym={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-emerald-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-emerald-500/20"},mm={class:"flex items-center justify-between"},xm={class:"font-semibold text-gray-900 dark:text-gray-100"},fm={class:"mt-2 flex items-center justify-between"},bm={class:"font-semibold text-gray-900 dark:text-gray-100"},vm={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},km={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},hm={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},wm={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},$m={class:"flex items-center justify-between"},Am={class:"font-semibold text-gray-900 dark:text-gray-100"},Cm={class:"flex items-center justify-between"},Tm={class:"font-semibold text-gray-900 dark:text-gray-100"},Im={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Um={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},_m={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},Km={class:"flex items-center justify-between"},Sm={class:"font-semibold text-gray-900 dark:text-gray-100"},Mm={class:"flex items-center justify-between"},Dm={class:"font-semibold text-gray-900 dark:text-gray-100"},Pm={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},jm={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},Vm={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},zm={class:"flex items-center justify-between"},Lm={class:"font-semibold text-gray-900 dark:text-gray-100"},Rm={class:"flex items-center justify-between"},Om={class:"font-semibold text-gray-900 dark:text-gray-100"},Em={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Nm={class:"mb-6 rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},qm={class:"mb-4 flex flex-wrap items-center justify-between gap-2"},Wm={class:"text-xs text-gray-400 dark:text-gray-500"},Bm={class:"h-[260px] sm:h-[300px]"},Gm={__name:"AccountUsageDetailModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:()=>({})},history:{type:Array,default:()=>[]},summary:{type:Object,default:()=>({})},overview:{type:Object,default:()=>({})},generatedAt:{type:String,default:""},loading:{type:Boolean,default:!1}},emits:["close"],setup(F,{emit:_e}){const c=F,z=_e,A=Rs(),{isDarkMode:_}=Qr(A),T=Hr(),k=v(null);let P=null;const O={claude:"Claude","claude-console":"Claude Console",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid",bedrock:"Claude AWS Bedrock"},Y=Z(()=>{var H;return O[(H=c.account)==null?void 0:H.platform]||"未知平台"}),M=Z(()=>{var H;return(H=c.account)!=null&&H.accountType?c.account.accountType==="dedicated"?"专属":c.account.accountType==="group"?"分组":"共享":"共享"}),se=Z(()=>({text:_.value?"#e5e7eb":"#374151",grid:_.value?"rgba(75, 85, 99, 0.25)":"rgba(209, 213, 219, 0.4)",cost:"#3b82f6",costFill:"rgba(59, 130, 246, 0.15)",requests:"#f97316"})),ge=Z(()=>{var H;return((H=c.summary)==null?void 0:H.totalTokens)||0}),N=Z(()=>{var H,h;return((h=(H=c.overview)==null?void 0:H.total)==null?void 0:h.inputTokens)||0}),E=Z(()=>{var H,h;return((h=(H=c.overview)==null?void 0:H.total)==null?void 0:h.outputTokens)||0}),R=H=>{const h=Number(H||0);return Number.isNaN(h)?"$0.000000":h>=1?`$${h.toFixed(2)}`:h>=.01?`$${h.toFixed(3)}`:`$${h.toFixed(6)}`},y=H=>Math.round((Number(H)||0)*100)/100,p=H=>{if(!H)return"-";const h=new Date(H);if(Number.isNaN(h.getTime())){const G=H.split("-");return G.length===3?`${G[1]}-${G[2]}`:H}const X=String(h.getMonth()+1).padStart(2,"0"),C=String(h.getDate()).padStart(2,"0");return`${X}-${C}`},D=H=>{if(!H)return"暂无";const h=new Date(H);return Number.isNaN(h.getTime())?H:`${h.getFullYear()}-${String(h.getMonth()+1).padStart(2,"0")}-${String(h.getDate()).padStart(2,"0")} ${String(h.getHours()).padStart(2,"0")}:${String(h.getMinutes()).padStart(2,"0")}`},de=(H,h)=>{if(!H)return 0;const X=c.history.find(C=>C.date===H);return X&&X[h]||0},le=Z(()=>{var H,h;return c.generatedAt||((H=c.summary)==null?void 0:H.generatedAt)||((h=c.summary)==null?void 0:h.generated_at)||""}),ae=Z(()=>{var H,h,X,C,G,K,Ce,ze;return[{key:"totalCost",label:"30天总费用",value:((H=c.summary)==null?void 0:H.totalCostFormatted)||"$0.000000",subtitle:"累计成本",icon:"fa-file-invoice-dollar",iconClass:"text-emerald-500"},{key:"totalRequests",label:"30天总请求",value:Je(((h=c.summary)==null?void 0:h.totalRequests)||0),subtitle:"调用次数",icon:"fa-paper-plane",iconClass:"text-blue-500"},{key:"avgCost",label:"日均费用",value:((X=c.summary)==null?void 0:X.avgDailyCostFormatted)||R(((C=c.summary)==null?void 0:C.avgDailyCost)||0),subtitle:(G=c.summary)!=null&&G.actualDaysUsed&&((K=c.summary)==null?void 0:K.actualDaysUsed)<((Ce=c.summary)==null?void 0:Ce.days)?`基于 ${c.summary.actualDaysUsed} 天实际使用`:"平均每日成本",icon:"fa-wave-square",iconClass:"text-purple-500"},{key:"avgRequests",label:"日均请求",value:Je(y(((ze=c.summary)==null?void 0:ze.avgDailyRequests)||0)),subtitle:"平均每日调用",icon:"fa-chart-line",iconClass:"text-orange-500"}]}),oe=async()=>{if(await ar(),!c.show||!k.value)return;if(P&&P.destroy(),!c.history||c.history.length===0){P=null;return}const H=c.history.map(C=>C.label),h=c.history.map(C=>C.cost||0),X=c.history.map(C=>C.requests||0);P=new Xs(k.value,{type:"line",data:{labels:H,datasets:[{label:"费用 (USD)",data:h,borderColor:se.value.cost,backgroundColor:se.value.costFill,tension:.35,fill:!0,yAxisID:"y"},{label:"请求次数",data:X,borderColor:se.value.requests,backgroundColor:"transparent",tension:.35,yAxisID:"y1"}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{labels:{color:se.value.text}},tooltip:{callbacks:{label(C){return C.dataset.label==="费用 (USD)"?`${C.dataset.label}: ${R(C.parsed.y)}`:`${C.dataset.label}: ${Je(C.parsed.y)} 次`}}}},scales:{x:{ticks:{color:se.value.text},grid:{color:se.value.grid}},y:{position:"left",ticks:{color:se.value.text,callback:C=>R(C)},grid:{color:se.value.grid}},y1:{position:"right",ticks:{color:se.value.text,callback:C=>Je(C)},grid:{drawOnChartArea:!1}}}}})},he=()=>{P&&(P.destroy(),P=null)},W=()=>{he(),z("close")},Q=()=>{var H;(H=c.account)!=null&&H.id&&T.push({path:`/accounts/${c.account.id}/usage-records`,query:{platform:c.account.platform||c.account.accountType}})};return ve(()=>c.show,H=>{H&&!c.loading?oe():H||he()}),ve(()=>c.loading,H=>{!H&&c.show&&oe()}),ve(()=>c.history,()=>{c.show&&!c.loading&&oe()},{deep:!0}),ve(_,()=>{c.show&&!c.loading&&oe()}),Ha(()=>{he()}),(H,h)=>{var X,C,G,K,Ce,ze,Ke,Fe,Qe,xe,g,a,U,re,ne,Re,Oe,st,nt,at,Dt,Pt,jt,I,Tt,gt,ht,ct,Vt,wt,B,q,Ee,We,ut,Nt,qt,$t,zt,Lt,It;return o(),Xe(Mt,{to:"body"},[F.show?(o(),n("div",Dy,[e("div",{class:"absolute inset-0",onClick:W}),e("div",Py,[e("div",jy,[e("div",Vy,[h[2]||(h[2]=e("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-indigo-500 text-white shadow-lg"},[e("i",{class:"fas fa-chart-area text-lg"})],-1)),e("div",zy,[e("div",Ly,[e("h3",Ry,u(((X=F.account)==null?void 0:X.name)||((C=F.account)==null?void 0:C.email)||"账号使用详情"),1),(G=F.account)!=null&&G.platform?(o(),n("span",Oy,[h[0]||(h[0]=e("i",{class:"fas fa-layer-group mr-1"},null,-1)),f(u(Y.value),1)])):m("",!0),(K=F.account)!=null&&K.accountType?(o(),n("span",Ey,[h[1]||(h[1]=e("i",{class:"fas fa-user-tag mr-1"},null,-1)),f(u(M.value),1)])):m("",!0)]),e("p",Ny,[f(" 近 "+u(((Ce=F.summary)==null?void 0:Ce.days)||30)+" 天内的费用与请求趋势 ",1),(ze=F.summary)!=null&&ze.actualDaysUsed&&((Ke=F.summary)==null?void 0:Ke.actualDaysUsed)<((Fe=F.summary)==null?void 0:Fe.days)?(o(),n("span",qy," (日均基于实际使用 "+u(F.summary.actualDaysUsed)+" 天) ",1)):m("",!0)])])]),e("div",{class:"flex items-center gap-2"},[e("button",{class:"flex items-center gap-2 rounded-full bg-purple-100 px-3 py-2 text-xs font-semibold text-purple-700 transition hover:bg-purple-200 dark:bg-purple-500/10 dark:text-purple-200 dark:hover:bg-purple-500/20",onClick:Q},h[3]||(h[3]=[e("i",{class:"fas fa-clock"},null,-1),f(" 请求时间线 ",-1)])),e("button",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",onClick:W},h[4]||(h[4]=[e("i",{class:"fas fa-times"},null,-1)]))])]),e("div",Wy,[F.loading?(o(),n("div",By,h[5]||(h[5]=[e("div",{class:"loading-spinner h-12 w-12 border-4 border-blue-500"},null,-1)]))):(o(),n(ke,{key:1},[e("div",Gy,[(o(!0),n(ke,null,Ne(ae.value,it=>(o(),n("div",{key:it.key,class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm transition dark:border-gray-700 dark:bg-gray-900/70"},[e("div",Fy,[e("div",null,[e("p",Qy,u(it.label),1),e("p",Hy,u(it.value),1),e("p",Jy,u(it.subtitle),1)]),e("div",Yy,[e("i",{class:$(["fas",it.icon,it.iconClass])},null,2)])])]))),128))]),e("div",Zy,[e("div",Xy,[h[9]||(h[9]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-sun"}),f(" 今日概览 ")],-1)),e("div",em,[e("div",tm,[h[6]||(h[6]=e("span",null,"费用",-1)),e("span",am,u(((xe=(Qe=F.summary)==null?void 0:Qe.today)==null?void 0:xe.costFormatted)||"$0.000000"),1)]),e("div",rm,[h[7]||(h[7]=e("span",null,"请求",-1)),e("span",sm,u(Ye(Je)(((a=(g=F.summary)==null?void 0:g.today)==null?void 0:a.requests)||0)),1)]),e("div",lm,[h[8]||(h[8]=e("span",null,"Tokens",-1)),e("span",null,u(Ye(Je)(((re=(U=F.summary)==null?void 0:U.today)==null?void 0:re.tokens)||0)),1)])])]),e("div",om,[h[13]||(h[13]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-amber-700 dark:text-amber-300"},[e("i",{class:"fas fa-crown"}),f(" 最高费用日 ")],-1)),e("div",nm,[e("div",im,[h[10]||(h[10]=e("span",null,"日期",-1)),e("span",dm,u(p((Re=(ne=F.summary)==null?void 0:ne.highestCostDay)==null?void 0:Re.date)),1)]),e("div",um,[h[11]||(h[11]=e("span",null,"费用",-1)),e("span",pm,u(((st=(Oe=F.summary)==null?void 0:Oe.highestCostDay)==null?void 0:st.formattedCost)||"$0.000000"),1)]),e("div",gm,[h[12]||(h[12]=e("span",null,"请求",-1)),e("span",null,u(Ye(Je)(de((at=(nt=F.summary)==null?void 0:nt.highestCostDay)==null?void 0:at.date,"requests"))),1)])])]),e("div",cm,[h[17]||(h[17]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-emerald-700 dark:text-emerald-300"},[e("i",{class:"fas fa-chart-bar"}),f(" 最高请求日 ")],-1)),e("div",ym,[e("div",mm,[h[14]||(h[14]=e("span",null,"日期",-1)),e("span",xm,u(p((Pt=(Dt=F.summary)==null?void 0:Dt.highestRequestDay)==null?void 0:Pt.date)),1)]),e("div",fm,[h[15]||(h[15]=e("span",null,"请求",-1)),e("span",bm,u(Ye(Je)(((I=(jt=F.summary)==null?void 0:jt.highestRequestDay)==null?void 0:I.requests)||0)),1)]),e("div",vm,[h[16]||(h[16]=e("span",null,"费用",-1)),e("span",null,u(R(de((gt=(Tt=F.summary)==null?void 0:Tt.highestRequestDay)==null?void 0:gt.date,"cost"))),1)])])])]),e("div",km,[e("div",hm,[h[21]||(h[21]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-database mr-2 text-indigo-500"}),f(" 累计 Token ")],-1)),e("div",wm,[e("div",$m,[h[18]||(h[18]=e("span",null,"30天总计",-1)),e("span",Am,u(Ye(Je)(ge.value)),1)]),e("div",Cm,[h[19]||(h[19]=e("span",null,"日均 Token",-1)),e("span",Tm,u(Ye(Je)(Math.round(((ht=F.summary)==null?void 0:ht.avgDailyTokens)||0))),1)]),e("div",Im,[h[20]||(h[20]=e("span",null,"输入 / 输出",-1)),e("span",null,u(Ye(Je)(N.value))+" / "+u(Ye(Je)(E.value)),1)])])]),e("div",Um,[h[25]||(h[25]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-tachometer-alt mr-2 text-purple-500"}),f(" 平均速率 ")],-1)),e("div",_m,[e("div",Km,[h[22]||(h[22]=e("span",null,"RPM",-1)),e("span",Sm,u(((Vt=(ct=F.overview)==null?void 0:ct.averages)==null?void 0:Vt.rpm)??0),1)]),e("div",Mm,[h[23]||(h[23]=e("span",null,"TPM",-1)),e("span",Dm,u(((B=(wt=F.overview)==null?void 0:wt.averages)==null?void 0:B.tpm)??0),1)]),e("div",Pm,[h[24]||(h[24]=e("span",null,"日均请求 / Token",-1)),e("span",null,u(Ye(Je)(Math.round((((Ee=(q=F.overview)==null?void 0:q.averages)==null?void 0:Ee.dailyRequests)||0)*100)/100))+" / "+u(Ye(Je)(Math.round((((ut=(We=F.overview)==null?void 0:We.averages)==null?void 0:ut.dailyTokens)||0)*100)/100)),1)])])]),e("div",jm,[h[29]||(h[29]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-layer-group mr-2 text-teal-500"}),f(" 最近统计 ")],-1)),e("div",Vm,[e("div",zm,[h[26]||(h[26]=e("span",null,"今日请求",-1)),e("span",Lm,u(Ye(Je)(((qt=(Nt=F.overview)==null?void 0:Nt.daily)==null?void 0:qt.requests)||0)),1)]),e("div",Rm,[h[27]||(h[27]=e("span",null,"今日 Token",-1)),e("span",Om,u(Ye(Je)(((zt=($t=F.overview)==null?void 0:$t.daily)==null?void 0:zt.allTokens)||0)),1)]),e("div",Em,[h[28]||(h[28]=e("span",null,"今日费用",-1)),e("span",null,u(R(((It=(Lt=F.overview)==null?void 0:Lt.daily)==null?void 0:It.cost)||0)),1)])])])]),e("div",Nm,[e("div",qm,[h[30]||(h[30]=e("h4",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-line mr-2 text-blue-500"}),f(" 30天费用与请求趋势 ")],-1)),e("span",Wm," 最新更新时间:"+u(D(le.value)),1)]),e("div",Bm,[e("canvas",{ref_key:"chartCanvas",ref:k,class:"h-full w-full"},null,512)])])],64))])])])):m("",!0)])}}},Fm=sa(Gm,[["__scopeId","data-v-c29b5f70"]]),Qm={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Hm={class:"modal-content relative mx-auto w-full max-w-lg p-8"},Jm={class:"mb-6 flex items-center justify-between"},Ym={class:"flex items-center gap-3"},Zm={class:"text-sm text-gray-600 dark:text-gray-400"},Xm={class:"space-y-6"},ex={class:"rounded-lg border border-gray-200 bg-gradient-to-r from-gray-50 to-gray-100 p-4 dark:border-gray-600 dark:from-gray-700 dark:to-gray-800"},tx={class:"flex items-center justify-between"},ax={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},rx={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},sx={class:"mb-3 grid grid-cols-3 gap-2"},lx=["onClick"],ox={key:0,class:"animate-fadeIn"},nx=["min"],ix={key:1,class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20"},dx={class:"flex items-center justify-between"},ux={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},px={class:"flex gap-3 pt-2"},gx=["disabled"],cx={key:0,class:"loading-spinner mr-2"},yx={key:1,class:"fas fa-save mr-2"},mx={__name:"AccountExpiryEditModal",props:{show:{type:Boolean,required:!0},account:{type:Object,required:!0}},emits:["close","save"],setup(F,{expose:_e,emit:c}){const z=F,A=c,_=v(!1),T=hr({expireDuration:"",customExpireDate:"",expiresAt:null}),k=[{value:"",label:"永不过期"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],P=Z(()=>{const y=new Date;return y.setMinutes(y.getMinutes()+1),y.toISOString().slice(0,16)});ve(()=>z.show,y=>{y&&O()}),ve(()=>{var y;return(y=z.account)==null?void 0:y.id},y=>{y&&z.show&&O()});const O=()=>{_.value=!1,z.account.expiresAt?(T.expireDuration="custom",T.customExpireDate=new Date(z.account.expiresAt).toISOString().slice(0,16),T.expiresAt=z.account.expiresAt):(T.expireDuration="",T.customExpireDate="",T.expiresAt=null)},Y=y=>{if(T.expireDuration=y,!y){T.expiresAt=null;return}if(y==="custom")return;const p=new Date,D=y.match(/(\d+)([dhmy])/);if(D){const[,de,le]=D,ae=parseInt(de);switch(le){case"d":p.setDate(p.getDate()+ae);break;case"h":p.setHours(p.getHours()+ae);break;case"m":p.setMonth(p.getMonth()+ae);break;case"y":p.setFullYear(p.getFullYear()+ae);break}T.expiresAt=p.toISOString()}},M=()=>{if(T.customExpireDate)try{const[y,p]=T.customExpireDate.split("T"),[D,de,le]=y.split("-").map(Number),[ae,oe]=p.split(":").map(Number),he=new Date(D,de-1,le,ae,oe,0,0);if(isNaN(he.getTime())){console.error("Invalid date:",T.customExpireDate);return}T.expiresAt=he.toISOString()}catch(y){console.error("Failed to parse custom expire date:",y)}},se=y=>y?new Date(y).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",ge=y=>y?new Date(y)<new Date:!1,N=y=>{if(!y)return null;const p=new Date,de=new Date(y)-p,le=Math.ceil(de/(1e3*60*60*24));return de<0?{text:"已过期",class:"text-red-600"}:le<=7?{text:`${le} 天后过期`,class:"text-orange-600"}:le<=30?{text:`${le} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(le/30)} 个月后过期`,class:"text-green-600"}},E=()=>{_.value=!0,A("save",{accountId:z.account.id,expiresAt:T.expiresAt})};return _e({resetSaving:()=>{_.value=!1}}),(y,p)=>(o(),Xe(Mt,{to:"body"},[F.show?(o(),n("div",Qm,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:p[0]||(p[0]=D=>y.$emit("close"))}),e("div",Hm,[e("div",Jm,[e("div",Ym,[p[6]||(p[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600"},[e("i",{class:"fas fa-clock text-white"})],-1)),e("div",null,[p[5]||(p[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改到期时间",-1)),e("p",Zm,' 为 "'+u(F.account.name||"Account")+'" 设置新的到期时间 ',1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:p[1]||(p[1]=D=>y.$emit("close"))},p[7]||(p[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Xm,[e("div",ex,[e("div",tx,[e("div",null,[p[10]||(p[10]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",ax,[F.account.expiresAt?(o(),n(ke,{key:0},[f(u(se(F.account.expiresAt))+" ",1),N(F.account.expiresAt)?(o(),n("span",{key:0,class:$(["ml-2 text-xs font-normal",N(F.account.expiresAt).class])}," ("+u(N(F.account.expiresAt).text)+") ",3)):m("",!0)],64)):(o(),n(ke,{key:1},[p[8]||(p[8]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),p[9]||(p[9]=f(" 永不过期 ",-1))],64))])]),e("div",rx,[e("i",{class:$(["fas fa-hourglass-half text-lg",F.account.expiresAt&&ge(F.account.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),e("div",null,[p[12]||(p[12]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",sx,[(o(),n(ke,null,Ne(k,D=>e("button",{key:D.value,class:$(["rounded-lg px-3 py-2 text-sm font-medium transition-all",T.expireDuration===D.value?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:de=>Y(D.value)},u(D.label),11,lx)),64)),e("button",{class:$(["rounded-lg px-3 py-2 text-sm font-medium transition-all",T.expireDuration==="custom"?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:p[2]||(p[2]=D=>Y("custom"))},p[11]||(p[11]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),f(" 自定义 ",-1)]),2)])]),T.expireDuration==="custom"?(o(),n("div",ox,[p[13]||(p[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),b(e("input",{"onUpdate:modelValue":p[3]||(p[3]=D=>T.customExpireDate=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:P.value,type:"datetime-local",onChange:M},null,40,nx),[[j,T.customExpireDate]]),p[14]||(p[14]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为到期时间 ",-1))])):m("",!0),T.expiresAt!==F.account.expiresAt?(o(),n("div",ix,[e("div",dx,[e("div",null,[p[17]||(p[17]=e("p",{class:"mb-1 text-xs font-medium text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-arrow-right mr-1"}),f(" 新的到期时间 ")],-1)),e("p",ux,[T.expiresAt?(o(),n(ke,{key:0},[f(u(se(T.expiresAt))+" ",1),N(T.expiresAt)?(o(),n("span",{key:0,class:$(["ml-2 text-xs font-normal",N(T.expiresAt).class])}," ("+u(N(T.expiresAt).text)+") ",3)):m("",!0)],64)):(o(),n(ke,{key:1},[p[15]||(p[15]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),p[16]||(p[16]=f(" 永不过期 ",-1))],64))])]),p[18]||(p[18]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},[e("i",{class:"fas fa-check text-lg text-green-500"})],-1))])])):m("",!0),e("div",px,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:p[4]||(p[4]=D=>y.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:_.value||T.expiresAt===F.account.expiresAt,onClick:E},[_.value?(o(),n("div",cx)):(o(),n("i",yx)),f(" "+u(_.value?"保存中...":"保存更改"),1)],8,gx)])])])])):m("",!0)]))}},xx=sa(mx,[["__scopeId","data-v-f19e4a71"]]),fx={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},bx={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},vx={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},kx={class:"flex items-center gap-3"},hx={class:"text-xs text-gray-500 dark:text-gray-400"},wx=["disabled"],$x={class:"px-5 py-4"},Ax={class:"mb-4 space-y-2"},Cx={class:"flex items-center justify-between text-sm"},Tx={key:0,class:"flex items-center justify-between text-sm"},Ix={class:"flex items-center justify-between text-sm"},Ux=["disabled"],_x=["value"],Kx={class:"flex items-center gap-3"},Sx={class:"text-xs text-gray-500 dark:text-gray-400"},Mx={key:0,class:"mb-4 overflow-hidden rounded-xl border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"},Dx={class:"flex items-center justify-between border-b border-gray-200 bg-gray-100 px-3 py-2 dark:border-gray-700 dark:bg-gray-800"},Px={key:0,class:"text-xs text-gray-500 dark:text-gray-500"},jx={class:"max-h-40 overflow-y-auto p-3"},Vx={key:0,class:"whitespace-pre-wrap text-sm text-gray-700 dark:text-gray-300"},zx={key:0,class:"inline-block h-4 w-1 animate-pulse bg-blue-500"},Lx={key:1,class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Rx={key:2,class:"text-sm text-red-600 dark:text-red-400"},Ox={key:1,class:"mb-4 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-gray-400"},Ex={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},Nx=["disabled"],qx=["disabled"],Wx={__name:"AccountTestModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:null}},emits:["close"],setup(F,{emit:_e}){const c=F,z=_e,A=v("idle"),_=v(""),T=v(""),k=v(0),P=v(null),O=v(null),Y=v(""),M=Z(()=>{if(!c.account)return[];const G=c.account.platform;return{claude:["claude-sonnet-4-5-20250929","claude-sonnet-4-20250514","claude-3-5-haiku-20241022"],"claude-console":["claude-sonnet-4-5-20250929","claude-sonnet-4-20250514","claude-3-5-haiku-20241022"],bedrock:["claude-sonnet-4-5-20250929","claude-sonnet-4-20250514","claude-3-5-haiku-20241022"],gemini:["gemini-2.5-flash","gemini-2.5-pro","gemini-2.0-flash"],"openai-responses":["gpt-4o-mini","gpt-4o","o3-mini"],"azure-openai":[c.account.deploymentName||"gpt-4o-mini"],droid:["claude-sonnet-4-20250514","claude-3-5-haiku-20241022"],ccr:["claude-sonnet-4-20250514","claude-3-5-haiku-20241022"]}[G]||[]}),se=Z(()=>{if(!c.account)return"";const G=c.account.platform;return{claude:"claude-sonnet-4-5-20250929","claude-console":"claude-sonnet-4-5-20250929",bedrock:"claude-sonnet-4-5-20250929",gemini:"gemini-2.5-flash","openai-responses":"gpt-4o-mini","azure-openai":c.account.deploymentName||"gpt-4o-mini",droid:"claude-sonnet-4-20250514",ccr:"claude-sonnet-4-20250514"}[G]||""});ve(()=>c.account,()=>{Y.value=se.value},{immediate:!0});const ge=Z(()=>c.account?["claude","claude-console"].includes(c.account.platform):!1),N=Z(()=>{if(!c.account)return"未知";const G=c.account.platform;return{claude:"Claude OAuth","claude-console":"Claude Console",bedrock:"AWS Bedrock",gemini:"Gemini","openai-responses":"OpenAI Responses","azure-openai":"Azure OpenAI",droid:"Droid",ccr:"CCR"}[G]||G}),E=Z(()=>{if(!c.account)return"fas fa-question";const G=c.account.platform;return{claude:"fas fa-brain","claude-console":"fas fa-brain",bedrock:"fab fa-aws",gemini:"fas fa-gem","openai-responses":"fas fa-code","azure-openai":"fab fa-microsoft",droid:"fas fa-robot",ccr:"fas fa-key"}[G]||"fas fa-robot"}),R=Z(()=>{if(!c.account)return"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300";const G=c.account.platform;return{claude:"bg-indigo-100 text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300","claude-console":"bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300",bedrock:"bg-orange-100 text-orange-700 dark:bg-orange-500/20 dark:text-orange-300",gemini:"bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300","openai-responses":"bg-green-100 text-green-700 dark:bg-green-500/20 dark:text-green-300","azure-openai":"bg-cyan-100 text-cyan-700 dark:bg-cyan-500/20 dark:text-cyan-300",droid:"bg-pink-100 text-pink-700 dark:bg-pink-500/20 dark:text-pink-300",ccr:"bg-amber-100 text-amber-700 dark:bg-amber-500/20 dark:text-amber-300"}[G]||"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300"}),y=Z(()=>{if(!c.account||c.account.platform!=="bedrock")return"";const G=c.account.credentialType;return G==="access_key"?"Access Key":G==="bearer_token"?"Bearer Token":"Unknown"}),p=Z(()=>{if(!c.account||c.account.platform!=="bedrock")return"";const G=c.account.credentialType;return G==="access_key"?"fas fa-key":G==="bearer_token"?"fas fa-ticket":"fas fa-question"}),D=Z(()=>{if(!c.account||c.account.platform!=="bedrock")return"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300";const G=c.account.credentialType;return G==="access_key"?"bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300":G==="bearer_token"?"bg-green-100 text-green-700 dark:bg-green-500/20 dark:text-green-300":"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300"}),de=Z(()=>{switch(A.value){case"idle":return"准备就绪";case"testing":return"正在测试...";case"success":return"测试成功";case"error":return"测试失败";default:return"未知状态"}}),le=Z(()=>{const G=N.value||"API";switch(A.value){case"idle":return"点击下方按钮开始测试账户连通性";case"testing":return"正在发送测试请求并等待响应";case"success":return`账户可以正常访问 ${G}`;case"error":return T.value||`无法连接到 ${G}`;default:return""}}),ae=Z(()=>{switch(A.value){case"idle":return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50";case"testing":return"border-blue-200 bg-blue-50 dark:border-blue-500/30 dark:bg-blue-900/20";case"success":return"border-green-200 bg-green-50 dark:border-green-500/30 dark:bg-green-900/20";case"error":return"border-red-200 bg-red-50 dark:border-red-500/30 dark:bg-red-900/20";default:return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"}}),oe=Z(()=>{switch(A.value){case"idle":return"bg-gray-200 dark:bg-gray-700";case"testing":return"bg-blue-100 dark:bg-blue-500/30";case"success":return"bg-green-100 dark:bg-green-500/30";case"error":return"bg-red-100 dark:bg-red-500/30";default:return"bg-gray-200 dark:bg-gray-700"}}),he=Z(()=>{switch(A.value){case"idle":return"fa-hourglass-start";case"testing":return"fa-spinner fa-spin";case"success":return"fa-check-circle";case"error":return"fa-exclamation-circle";default:return"fa-question-circle"}}),W=Z(()=>{switch(A.value){case"idle":return"text-gray-500 dark:text-gray-400";case"testing":return"text-blue-500 dark:text-blue-400";case"success":return"text-green-500 dark:text-green-400";case"error":return"text-red-500 dark:text-red-400";default:return"text-gray-500 dark:text-gray-400"}}),Q=Z(()=>{switch(A.value){case"idle":return"text-gray-700 dark:text-gray-300";case"testing":return"text-blue-700 dark:text-blue-300";case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";default:return"text-gray-700 dark:text-gray-300"}});function H(){if(!c.account)return"";const G=c.account.platform;return{claude:`${kt.apiPrefix}/admin/claude-accounts/${c.account.id}/test`,"claude-console":`${kt.apiPrefix}/admin/claude-console-accounts/${c.account.id}/test`,bedrock:`${kt.apiPrefix}/admin/bedrock-accounts/${c.account.id}/test`,gemini:`${kt.apiPrefix}/admin/gemini-accounts/${c.account.id}/test`,"openai-responses":`${kt.apiPrefix}/admin/openai-responses-accounts/${c.account.id}/test`,"azure-openai":`${kt.apiPrefix}/admin/azure-openai-accounts/${c.account.id}/test`,droid:`${kt.apiPrefix}/admin/droid-accounts/${c.account.id}/test`,ccr:`${kt.apiPrefix}/admin/ccr-accounts/${c.account.id}/test`}[G]||""}async function h(){var K;if(!c.account)return;A.value="testing",_.value="",T.value="",k.value=0,P.value=Date.now(),O.value&&O.value.close();const G=H();if(!G){A.value="error",T.value="不支持的账户类型";return}try{const Ce=localStorage.getItem("authToken"),ze=await fetch(G,{method:"POST",headers:{"Content-Type":"application/json",Authorization:Ce?`Bearer ${Ce}`:""},body:JSON.stringify({model:Y.value})});if(!ze.ok){const Ke=await ze.json().catch(()=>({}));throw new Error(Ke.message||`HTTP ${ze.status}`)}if(ge.value){const Ke=ze.body.getReader(),Fe=new TextDecoder;let Qe=!1;for(;!Qe;){const{done:xe,value:g}=await Ke.read();if(xe){Qe=!0;continue}const U=Fe.decode(g).split(`
|
||
`);for(const re of U)if(re.startsWith("data: "))try{const ne=JSON.parse(re.substring(6));X(ne)}catch{}}}else{const Ke=await ze.json();k.value=Date.now()-P.value,Ke.success?(A.value="success",_.value=((K=Ke.data)==null?void 0:K.responseText)||"Test passed"):(A.value="error",T.value=Ke.message||"Test failed")}}catch(Ce){A.value="error",T.value=Ce.message||"连接失败",k.value=Date.now()-P.value}}function X(G){switch(G.type){case"test_start":break;case"content":_.value+=G.text;break;case"message_stop":break;case"test_complete":k.value=Date.now()-P.value,G.success?A.value="success":(A.value="error",T.value=G.error||"测试失败");break;case"error":A.value="error",T.value=G.error||"未知错误",k.value=Date.now()-P.value;break}}function C(){A.value!=="testing"&&(O.value&&(O.value.close(),O.value=null),A.value="idle",_.value="",T.value="",k.value=0,z("close"))}return ve(()=>c.show,G=>{var K;G&&(A.value="idle",_.value="",T.value="",k.value=0,((K=c.account)==null?void 0:K.platform)==="bedrock"?c.account.credentialType==="bearer_token"?Y.value="us.anthropic.claude-sonnet-4-5-20250929-v1:0":Y.value="us.anthropic.claude-3-5-haiku-20241022-v1:0":Y.value="claude-sonnet-4-5-20250929")}),Ha(()=>{O.value&&O.value.close()}),(G,K)=>{var Ce,ze;return o(),Xe(Mt,{to:"body"},[F.show?(o(),n("div",fx,[e("div",{class:"absolute inset-0",onClick:C}),e("div",bx,[e("div",vx,[e("div",kx,[e("div",{class:$(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl text-white shadow-lg",A.value==="success"?"bg-gradient-to-br from-green-500 to-emerald-500":A.value==="error"?"bg-gradient-to-br from-red-500 to-pink-500":"bg-gradient-to-br from-blue-500 to-indigo-500"])},[e("i",{class:$(["fas",A.value==="idle"?"fa-vial":A.value==="testing"?"fa-spinner fa-spin":A.value==="success"?"fa-check":"fa-times"])},null,2)],2),e("div",null,[K[1]||(K[1]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},"账户连通性测试",-1)),e("p",hx,u(((Ce=F.account)==null?void 0:Ce.name)||"未知账户"),1)])]),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:A.value==="testing",onClick:C},K[2]||(K[2]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,wx)]),e("div",$x,[e("div",Ax,[e("div",Cx,[K[3]||(K[3]=e("span",{class:"text-gray-500 dark:text-gray-400"},"平台类型",-1)),e("span",{class:$(["inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium",R.value])},[e("i",{class:$(E.value)},null,2),f(" "+u(N.value),1)],2)]),((ze=c.account)==null?void 0:ze.platform)==="bedrock"?(o(),n("div",Tx,[K[4]||(K[4]=e("span",{class:"text-gray-500 dark:text-gray-400"},"账号类型",-1)),e("span",{class:$(["inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium",D.value])},[e("i",{class:$(p.value)},null,2),f(" "+u(y.value),1)],2)])):m("",!0),e("div",Ix,[K[5]||(K[5]=e("span",{class:"text-gray-500 dark:text-gray-400"},"测试模型",-1)),b(e("select",{"onUpdate:modelValue":K[0]||(K[0]=Ke=>Y.value=Ke),class:"rounded-lg border border-gray-200 bg-white px-2 py-1 text-xs font-medium text-gray-700 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-300",disabled:A.value==="testing"},[(o(!0),n(ke,null,Ne(M.value,Ke=>(o(),n("option",{key:Ke,value:Ke},u(Ke),9,_x))),128))],8,Ux),[[wa,Y.value]])])]),e("div",{class:$(["mb-4 rounded-xl border p-4 transition-all duration-300",ae.value])},[e("div",Kx,[e("div",{class:$(["flex h-8 w-8 items-center justify-center rounded-lg",oe.value])},[e("i",{class:$(["fas text-sm",he.value,W.value])},null,2)],2),e("div",null,[e("p",{class:$(["font-medium",Q.value])},u(de.value),3),e("p",Sx,u(le.value),1)])])],2),A.value!=="idle"?(o(),n("div",Mx,[e("div",Dx,[K[6]||(K[6]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"AI 响应",-1)),_.value?(o(),n("span",Px,u(_.value.length)+" 字符 ",1)):m("",!0)]),e("div",jx,[_.value?(o(),n("p",Vx,[f(u(_.value)+" ",1),A.value==="testing"?(o(),n("span",zx)):m("",!0)])):A.value==="testing"?(o(),n("p",Lx,K[7]||(K[7]=[e("i",{class:"fas fa-circle-notch fa-spin"},null,-1),f(" 等待响应中... ",-1)]))):A.value==="error"&&T.value?(o(),n("p",Rx,u(T.value),1)):m("",!0)])])):m("",!0),k.value>0?(o(),n("div",Ox,[K[8]||(K[8]=e("i",{class:"fas fa-clock"},null,-1)),e("span",null,"耗时 "+u((k.value/1e3).toFixed(2))+" 秒",1)])):m("",!0)]),e("div",Ex,[e("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:A.value==="testing",onClick:C}," 关闭 ",8,Nx),e("button",{class:$(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",A.value==="testing"?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:A.value==="testing",onClick:h},[e("i",{class:$(["fas",A.value==="testing"?"fa-spinner fa-spin":"fa-play"])},null,2),f(" "+u(A.value==="testing"?"测试中...":A.value==="idle"?"开始测试":"重新测试"),1)],10,qx)])])])):m("",!0)])}}},Bx={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Gx={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},Fx={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},Qx={class:"flex items-center gap-3"},Hx={class:"text-xs text-gray-500 dark:text-gray-400"},Jx=["disabled"],Yx={class:"px-5 py-4"},Zx={key:0,class:"flex items-center justify-center py-8"},Xx={class:"mb-5 flex items-center justify-between"},ef={class:"mb-5"},tf=["disabled"],af={class:"mb-5"},rf={class:"flex flex-wrap gap-2"},sf=["disabled","onClick"],lf={class:"mb-5"},of=["disabled"],nf={class:"mt-2 flex flex-wrap gap-2"},df=["disabled","onClick"],uf={key:0,class:"mb-4"},pf={class:"max-h-40 space-y-2 overflow-y-auto rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},gf={class:"flex items-center gap-2"},cf={class:"text-gray-600 dark:text-gray-400"},yf={key:0,class:"text-gray-500 dark:text-gray-500"},mf=["title"],xf={key:1,class:"mb-4 rounded-lg border border-gray-200 bg-gray-50 p-4 text-center text-sm text-gray-500 dark:border-gray-700 dark:bg-gray-800/50 dark:text-gray-400"},ff={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},bf=["disabled"],vf=["disabled"],kf={__name:"AccountScheduledTestModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:null}},emits:["close","saved"],setup(F,{emit:_e}){const c=F,z=_e,A=v(!1),_=v(!1),T=v({enabled:!1,cronExpression:"0 8 * * *",model:"claude-sonnet-4-5-20250929"}),k=v([]),P=[{label:"每天 8:00",value:"0 8 * * *"},{label:"每天 12:00",value:"0 12 * * *"},{label:"每天 18:00",value:"0 18 * * *"},{label:"每6小时",value:"0 */6 * * *"},{label:"每12小时",value:"0 */12 * * *"},{label:"工作日 9:00",value:"0 9 * * 1-5"}],O=[{label:"Claude Sonnet 4.5",value:"claude-sonnet-4-5-20250929"},{label:"Claude Haiku 4.5",value:"claude-haiku-4-5-20251001"},{label:"Claude Opus 4.5",value:"claude-opus-4-5-20251101"}];function Y(N){return N?new Date(N).toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"未知"}async function M(){var N,E;if(c.account){A.value=!0;try{const R=localStorage.getItem("authToken"),y=c.account.platform;let p="";if(y==="claude")p=`${kt.apiPrefix}/admin/claude-accounts/${c.account.id}/test-config`;else{A.value=!1;return}const D=await fetch(p,{headers:{Authorization:R?`Bearer ${R}`:""}});if(D.ok){const ae=await D.json();ae.success&&((N=ae.data)!=null&&N.config)&&(T.value={enabled:ae.data.config.enabled||!1,cronExpression:ae.data.config.cronExpression||"0 8 * * *",model:ae.data.config.model||"claude-sonnet-4-5-20250929"})}const de=p.replace("/test-config","/test-history"),le=await fetch(de,{headers:{Authorization:R?`Bearer ${R}`:""}});if(le.ok){const ae=await le.json();ae.success&&((E=ae.data)!=null&&E.history)&&(k.value=ae.data.history)}}catch(R){V("加载配置失败: "+R.message,"error")}finally{A.value=!1}}}async function se(){if(c.account){_.value=!0;try{const N=localStorage.getItem("authToken"),E=c.account.platform;let R="";if(E==="claude")R=`${kt.apiPrefix}/admin/claude-accounts/${c.account.id}/test-config`;else{_.value=!1;return}const y=await fetch(R,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:N?`Bearer ${N}`:""},body:JSON.stringify({enabled:T.value.enabled,cronExpression:T.value.cronExpression,model:T.value.model})});if(y.ok)V("配置已保存","success"),z("saved"),ge();else{const p=await y.json().catch(()=>({}));V(p.message||"保存失败","error")}}catch(N){V("保存失败: "+N.message,"error")}finally{_.value=!1}}}function ge(){_.value||z("close")}return ve(()=>c.show,N=>{N&&(T.value={enabled:!1,cronExpression:"0 8 * * *",model:"claude-sonnet-4-5-20250929"},k.value=[],M())}),(N,E)=>{var R;return o(),Xe(Mt,{to:"body"},[F.show?(o(),n("div",Bx,[e("div",{class:"absolute inset-0",onClick:ge}),e("div",Gx,[e("div",Fx,[e("div",Qx,[E[4]||(E[4]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-500 text-white shadow-lg"},[e("i",{class:"fas fa-clock"})],-1)),e("div",null,[E[3]||(E[3]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},"定时测试配置",-1)),e("p",Hx,u(((R=F.account)==null?void 0:R.name)||"未知账户"),1)])]),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:_.value,onClick:ge},E[5]||(E[5]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,Jx)]),e("div",Yx,[A.value?(o(),n("div",Zx,E[6]||(E[6]=[e("i",{class:"fas fa-spinner fa-spin mr-2 text-blue-500"},null,-1),e("span",{class:"text-gray-500 dark:text-gray-400"},"加载配置中...",-1)]))):(o(),n(ke,{key:1},[e("div",Xx,[E[7]||(E[7]=e("div",null,[e("p",{class:"font-medium text-gray-700 dark:text-gray-300"},"启用定时测试"),e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"按计划自动测试账户连通性")],-1)),e("button",{class:$(["relative h-6 w-11 rounded-full transition-colors duration-200",T.value.enabled?"bg-green-500":"bg-gray-300 dark:bg-gray-600"]),onClick:E[0]||(E[0]=y=>T.value.enabled=!T.value.enabled)},[e("span",{class:$(["absolute top-0.5 h-5 w-5 rounded-full bg-white shadow-md transition-transform duration-200",T.value.enabled?"left-5":"left-0.5"])},null,2)],2)]),e("div",ef,[E[8]||(E[8]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," Cron 表达式 ",-1)),b(e("input",{"onUpdate:modelValue":E[1]||(E[1]=y=>T.value.cronExpression=y),class:"w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm text-gray-700 placeholder-gray-400 transition focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:placeholder-gray-500",disabled:!T.value.enabled,placeholder:"0 8 * * *",type:"text"},null,8,tf),[[j,T.value.cronExpression]]),E[9]||(E[9]=e("p",{class:"mt-1.5 text-xs text-gray-500 dark:text-gray-400"},' 格式: 分 时 日 月 周 (例: "0 8 * * *" = 每天8:00) ',-1))]),e("div",af,[E[10]||(E[10]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 快捷设置 ",-1)),e("div",rf,[(o(),n(ke,null,Ne(P,y=>e("button",{key:y.value,class:$(["rounded-lg border px-3 py-1.5 text-xs font-medium transition",T.value.cronExpression===y.value?"border-blue-500 bg-blue-50 text-blue-700 dark:border-blue-400 dark:bg-blue-900/30 dark:text-blue-300":"border-gray-200 bg-gray-50 text-gray-600 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700",!T.value.enabled&&"cursor-not-allowed opacity-50"]),disabled:!T.value.enabled,onClick:p=>T.value.cronExpression=y.value},u(y.label),11,sf)),64))])]),e("div",lf,[E[11]||(E[11]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 测试模型 ",-1)),b(e("input",{"onUpdate:modelValue":E[2]||(E[2]=y=>T.value.model=y),class:"w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm text-gray-700 placeholder-gray-400 transition focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:placeholder-gray-500",disabled:!T.value.enabled,placeholder:"claude-sonnet-4-5-20250929",type:"text"},null,8,of),[[j,T.value.model]]),e("div",nf,[(o(),n(ke,null,Ne(O,y=>e("button",{key:y.value,class:$(["rounded-lg border px-3 py-1.5 text-xs font-medium transition",T.value.model===y.value?"border-blue-500 bg-blue-50 text-blue-700 dark:border-blue-400 dark:bg-blue-900/30 dark:text-blue-300":"border-gray-200 bg-gray-50 text-gray-600 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700",!T.value.enabled&&"cursor-not-allowed opacity-50"]),disabled:!T.value.enabled,onClick:p=>T.value.model=y.value},u(y.label),11,df)),64))])]),k.value.length>0?(o(),n("div",uf,[E[12]||(E[12]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最近测试记录 ",-1)),e("div",pf,[(o(!0),n(ke,null,Ne(k.value,(y,p)=>(o(),n("div",{key:p,class:"flex items-center justify-between text-xs"},[e("div",gf,[e("i",{class:$(["fas",y.success?"fa-check-circle text-green-500":"fa-times-circle text-red-500"])},null,2),e("span",cf,u(Y(y.timestamp)),1)]),y.latencyMs?(o(),n("span",yf,u(y.latencyMs)+"ms ",1)):y.error?(o(),n("span",{key:1,class:"max-w-[150px] truncate text-red-500",title:y.error},u(y.error),9,mf)):m("",!0)]))),128))])])):(o(),n("div",xf,E[13]||(E[13]=[e("i",{class:"fas fa-history mb-2 text-2xl text-gray-300 dark:text-gray-600"},null,-1),e("p",null,"暂无测试记录",-1)])))],64))]),e("div",ff,[e("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:_.value,onClick:ge}," 取消 ",8,bf),e("button",{class:$(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",_.value?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:_.value||A.value,onClick:se},[e("i",{class:$(["fas",_.value?"fa-spinner fa-spin":"fa-save"])},null,2),f(" "+u(_.value?"保存中...":"保存配置"),1)],10,vf)])])])):m("",!0)])}}},hf={class:"min-w-[200px] space-y-1"},wf={key:0,class:"flex items-center gap-2"},$f={key:1,class:"flex items-center gap-2"},Af={class:"text-xs text-red-600 dark:text-red-400"},Cf=["disabled"],Tf={key:2,class:"space-y-1"},If={key:0,class:"text-xs text-red-500"},Uf={class:"flex items-center justify-between gap-2"},_f={class:"flex items-center gap-2"},Kf={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Sf=["disabled","title"],Mf={key:1,class:"space-y-2"},Df={class:"flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},Pf={class:"space-y-1"},jf=["title"],Vf={class:"flex w-[94px] flex-col gap-0.5"},zf={class:"h-1.5 w-full rounded-full bg-gray-200 dark:bg-gray-600"},Lf={class:"flex items-center justify-between text-[11px] text-gray-500 dark:text-gray-300"},Rf={key:0,class:"text-gray-400 dark:text-gray-400"},Of={key:2,class:"space-y-1"},Ef={class:"flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},Nf={class:"h-1.5 w-full rounded-full bg-gray-200 dark:bg-gray-700"},qf={class:"flex items-center justify-between text-xs"},Wf={class:"text-gray-500 dark:text-gray-400"},Bf={key:0,class:"text-gray-400 dark:text-gray-500"},Gf={key:3,class:"flex items-center gap-2"},Ff={key:4,class:"text-xs text-gray-400 dark:text-gray-500"},Qf={key:3,class:"text-xs text-gray-400 dark:text-gray-500"},fr={__name:"BalanceDisplay",props:{accountId:{type:String,required:!0},platform:{type:String,required:!0},initialBalance:{type:Object,default:null},hideRefresh:{type:Boolean,default:!1},autoLoad:{type:Boolean,default:!0},queryMode:{type:String,default:"local"}},emits:["refreshed","error"],setup(F,{expose:_e,emit:c}){const z=F,A=c,_=v(z.initialBalance),T=v(!1),k=v(!1),P=v(null),O=Z(()=>{var Q;const W=(Q=_.value)==null?void 0:Q.source;return{"bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-300":W==="api","bg-gray-100 text-gray-600 dark:bg-gray-700/60 dark:text-gray-300":W==="cache","bg-yellow-100 text-yellow-700 dark:bg-yellow-900/40 dark:text-yellow-300":W==="local"}}),Y=Z(()=>{var Q;const W=(Q=_.value)==null?void 0:Q.source;return{api:"API",cache:"缓存",local:"本地"}[W]||"未知"}),M=Z(()=>{var Q;const W=(Q=_.value)==null?void 0:Q.quota;return!W||W.unlimited||typeof W.percentage!="number"||!Number.isFinite(W.percentage)?null:{used:W.used??0,remaining:W.remaining??0,percentage:W.percentage,resetAt:W.resetAt||null}}),se=Z(()=>{var W,Q;return((Q=(W=_.value)==null?void 0:W.quota)==null?void 0:Q.type)==="antigravity"}),ge=Z(()=>{var C,G;if(!se.value)return[];const W=(G=(C=_.value)==null?void 0:C.quota)==null?void 0:G.buckets,Q=Array.isArray(W)?W:[],H=new Map(Q.map(K=>[K==null?void 0:K.category,K])),h=["Gemini Pro","Claude","Gemini Flash","Gemini Image"],X={"Gemini Pro":{dotClass:"bg-blue-500",barClass:"bg-blue-500 dark:bg-blue-400"},Claude:{dotClass:"bg-purple-500",barClass:"bg-purple-500 dark:bg-purple-400"},"Gemini Flash":{dotClass:"bg-cyan-500",barClass:"bg-cyan-500 dark:bg-cyan-400"},"Gemini Image":{dotClass:"bg-emerald-500",barClass:"bg-emerald-500 dark:bg-emerald-400"}};return h.map(K=>{var Fe,Qe;const Ce=H.get(K)||null,ze=Ce==null?void 0:Ce.remaining,Ke=Number.isFinite(Number(ze))?Math.max(0,Math.min(100,Number(ze))):null;return{category:K,remainingPercent:Ke,remainingText:Ke===null?"—":`${Math.round(Ke)}%`,resetAt:(Ce==null?void 0:Ce.resetAt)||null,dotClass:((Fe=X[K])==null?void 0:Fe.dotClass)||"bg-gray-400",barClass:((Qe=X[K])==null?void 0:Qe.barClass)||"bg-gray-400"}})}),N=Z(()=>{var Q;const W=((Q=M.value)==null?void 0:Q.percentage)||0;return W>=90?"bg-red-500 dark:bg-red-600":W>=70?"bg-yellow-500 dark:bg-yellow-600":"bg-green-500 dark:bg-green-600"}),E=Z(()=>{if(z.queryMode==="api"||z.queryMode==="auto")return!0;const W=_.value;return!W||W.scriptEnabled===!1?!1:!!W.scriptConfigured}),R=Z(()=>{var W;return k.value?"刷新中...":E.value?se.value?"刷新配额(调用 Antigravity API)":"刷新余额(调用脚本配置的余额 API)":((W=_.value)==null?void 0:W.scriptEnabled)===!1?"余额脚本功能已禁用":"请先配置余额脚本"}),y=Z(()=>{var Q,H,h,X;if((H=(Q=_.value)==null?void 0:Q.balance)!=null&&H.formattedAmount)return _.value.balance.formattedAmount;const W=Number(((X=(h=_.value)==null?void 0:h.statistics)==null?void 0:X.dailyCost)||0);return`今日成本 ${ae(W)}`}),p=async()=>{if(!z.autoLoad||!z.accountId||!z.platform)return;T.value=!0,P.value=null;const W={platform:z.platform,queryApi:z.queryMode==="api"?!0:z.queryMode==="auto"?"auto":!1},Q=await Mr(z.accountId,W);Q!=null&&Q.success?_.value=Q.data:P.value=(Q==null?void 0:Q.error)||"加载失败",T.value=!1},D=async()=>{if(!z.accountId||!z.platform||k.value||!E.value)return;k.value=!0,P.value=null;const W=await Dr(z.accountId,{platform:z.platform});W!=null&&W.success?(_.value=W.data,A("refreshed",W.data)):P.value=(W==null?void 0:W.error)||"刷新失败",k.value=!1},de=async()=>{await p()},le=W=>{if(W===1/0)return"∞";const Q=Number(W);return Number.isFinite(Q)?se.value?`${Math.round(Q)}%`:Je(Q):"N/A"},ae=W=>{const Q=Number(W);return Number.isFinite(Q)?Q>=1?`$${Q.toFixed(2)}`:Q>=.01?`$${Q.toFixed(3)}`:`$${Q.toFixed(6)}`:"$0.00"},oe=W=>{const Q=new Date(W),H=new Date,h=Q.getTime()-H.getTime();if(!Number.isFinite(h))return"未知";if(h<0)return"已过期";const X=Math.floor(h/(1e3*60)),C=Math.floor(X/60),G=X%60;return C>=24?`${Math.floor(C/24)}天后`:`${C}小时${G}分钟`},he=W=>{const Q=new Date(W);return Number.isNaN(Q.getTime())?"未知":Q.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"})};return ve(()=>z.initialBalance,W=>{W&&(_.value=W)}),ra(()=>{z.initialBalance||p()}),_e({refresh:D,reload:de}),(W,Q)=>{var H;return o(),n("div",hf,[T.value?(o(),n("div",wf,Q[0]||(Q[0]=[e("i",{class:"fas fa-spinner fa-spin text-gray-400 dark:text-gray-500"},null,-1),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):P.value?(o(),n("div",$f,[Q[1]||(Q[1]=e("i",{class:"fas fa-exclamation-circle text-red-500"},null,-1)),e("span",Af,u(P.value),1),e("button",{class:"text-xs text-blue-500 hover:text-blue-600 dark:text-blue-400",disabled:k.value,onClick:de}," 重试 ",8,Cf)])):_.value?(o(),n("div",Tf,[_.value.status==="error"&&_.value.error?(o(),n("div",If,u(_.value.error),1)):m("",!0),e("div",Uf,[e("div",_f,[e("i",{class:$(["fas",_.value.balance?"fa-wallet text-green-600 dark:text-green-400":"fa-chart-line text-gray-500 dark:text-gray-400"])},null,2),e("span",Kf,u(y.value),1),e("span",{class:$(["rounded px-1.5 py-0.5 text-xs",O.value])},u(Y.value),3)]),F.hideRefresh?m("",!0):(o(),n("button",{key:0,class:"text-xs text-gray-500 hover:text-blue-600 disabled:cursor-not-allowed disabled:opacity-40 dark:text-gray-400 dark:hover:text-blue-400",disabled:k.value||!E.value,title:R.value,onClick:D},[e("i",{class:$(["fas fa-sync-alt",{"fa-spin":k.value}])},null,2)],8,Sf))]),M.value&&se.value?(o(),n("div",Mf,[e("div",Df,[Q[2]||(Q[2]=e("span",null,"剩余",-1)),e("span",null,u(le(M.value.remaining)),1)]),e("div",Pf,[(o(!0),n(ke,null,Ne(ge.value,h=>(o(),n("div",{key:h.category,class:"flex items-center gap-2 rounded-md bg-gray-50 px-2 py-1.5 dark:bg-gray-700/60"},[e("span",{class:$(["h-2 w-2 shrink-0 rounded-full",h.dotClass])},null,2),e("span",{class:"min-w-0 flex-1 truncate text-xs font-medium text-gray-800 dark:text-gray-100",title:h.category},u(h.category),9,jf),e("div",Vf,[e("div",zf,[e("div",{class:$(["h-1.5 rounded-full transition-all",h.barClass]),style:Ze({width:`${h.remainingPercent??0}%`})},null,6)]),e("div",Lf,[e("span",null,u(h.remainingText),1),h.resetAt?(o(),n("span",Rf,u(oe(h.resetAt)),1)):m("",!0)])])]))),128))])])):M.value?(o(),n("div",Of,[e("div",Ef,[e("span",null,"已用: "+u(le(M.value.used)),1),e("span",null,"剩余: "+u(le(M.value.remaining)),1)]),e("div",Nf,[e("div",{class:$(["h-1.5 rounded-full transition-all",N.value]),style:Ze({width:`${Math.min(100,M.value.percentage)}%`})},null,6)]),e("div",qf,[e("span",Wf,u(M.value.percentage.toFixed(1))+"% 已使用 ",1),M.value.resetAt?(o(),n("span",Bf," 重置: "+u(oe(M.value.resetAt)),1)):m("",!0)])])):(H=_.value.quota)!=null&&H.unlimited?(o(),n("div",Gf,Q[3]||(Q[3]=[e("i",{class:"fas fa-infinity text-blue-500 dark:text-blue-400"},null,-1),e("span",{class:"text-xs text-gray-600 dark:text-gray-400"},"无限制",-1)]))):m("",!0),_.value.cacheExpiresAt&&_.value.source==="cache"?(o(),n("div",Ff," 缓存至: "+u(he(_.value.cacheExpiresAt)),1)):m("",!0)])):(o(),n("div",Qf,"暂无余额数据"))])}}},Hf={class:"space-y-4"},Jf={class:"grid gap-3 md:grid-cols-2"},Yf={class:"space-y-2"},Zf={class:"space-y-2"},Xf={class:"space-y-2"},eb={class:"space-y-2"},tb={class:"space-y-2"},ab={class:"space-y-2"},rb={key:0,class:"rounded-lg bg-gray-50 p-3 text-sm dark:bg-gray-800/60"},sb={class:"flex items-center justify-between"},lb={class:"mt-2 text-xs text-gray-600 dark:text-gray-300"},ob={key:0},nb={key:1,class:"text-red-500"},ib={class:"text-xs text-gray-500 dark:text-gray-400"},db={class:"mt-1 whitespace-pre-wrap break-all"},ub={class:"text-xs text-gray-500 dark:text-gray-400"},pb={class:"mt-1 whitespace-pre-wrap break-all"},gb={class:"flex items-center gap-2"},br=`({
|
||
request: {
|
||
url: "{{baseUrl}}/api/user/self",
|
||
method: "GET",
|
||
headers: {
|
||
"Content-Type": "application/json",
|
||
"Authorization": "Bearer {{apiKey}}",
|
||
"New-Api-User": "{{extra}}"
|
||
}
|
||
},
|
||
extractor: function (response) {
|
||
if (response && response.success && response.data) {
|
||
const quota = response.data.quota || 0;
|
||
const used = response.data.used_quota || 0;
|
||
return {
|
||
planName: response.data.group || "默认套餐",
|
||
remaining: quota / 500000,
|
||
used: used / 500000,
|
||
total: (quota + used) / 500000,
|
||
unit: "USD"
|
||
};
|
||
}
|
||
return {
|
||
isValid: false,
|
||
invalidMessage: (response && response.message) || "查询失败"
|
||
};
|
||
}
|
||
})`,cb={__name:"AccountBalanceScriptModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:()=>({})}},emits:["close","saved"],setup(F,{emit:_e}){const c=F,z=_e,A=v(!1),_=v(!1),T=v(null),k=hr({baseUrl:"",apiKey:"",token:"",extra:"",timeoutSeconds:10,autoIntervalMinutes:0,scriptBody:""}),P=()=>({baseUrl:"",apiKey:"",token:"",extra:"",timeoutSeconds:10,autoIntervalMinutes:0,scriptBody:br}),O=()=>z("close"),Y=()=>{Object.assign(k,P()),T.value=null,A.value=!1,_.value=!1},M=async()=>{var p,D;if(!((p=c.account)!=null&&p.id)||!((D=c.account)!=null&&D.platform))return;const y=await Ns(c.account.id,c.account.platform);y!=null&&y.success&&y.data&&Object.assign(k,y.data)},se=async()=>{var p,D;if(!((p=c.account)!=null&&p.id)||!((D=c.account)!=null&&D.platform))return;A.value=!0;const y=await Es(c.account.id,c.account.platform,{...k});y!=null&&y.success?(V("已保存","success"),z("saved")):V((y==null?void 0:y.message)||"保存失败","error"),A.value=!1},ge=async()=>{var p,D;if(!((p=c.account)!=null&&p.id)||!((D=c.account)!=null&&D.platform))return;_.value=!0,T.value=null;const y=await Os(c.account.id,c.account.platform,{...k});y!=null&&y.success?(T.value=y.data,V("测试完成","success")):V((y==null?void 0:y.error)||"测试失败","error"),_.value=!1},N=()=>{k.scriptBody=br},E=y=>y==null||Number.isNaN(Number(y))?"—":Number(y).toFixed(2),R=y=>{try{return JSON.stringify(y,null,2)}catch{return String(y)}};return ve(()=>c.show,y=>{y&&(Y(),M())}),(y,p)=>{var le;const D=qr,de=kr;return o(),Xe(de,{"append-to-body":!0,class:"balance-script-dialog","close-on-click-modal":!1,"destroy-on-close":!0,"model-value":F.show,title:`配置余额脚本 - ${((le=F.account)==null?void 0:le.name)||""}`,top:"5vh",width:"720px",onClose:O},{footer:ot(()=>[e("div",gb,[Ve(D,{loading:_.value,onClick:ge},{default:ot(()=>p[20]||(p[20]=[f("测试脚本",-1)])),_:1,__:[20]},8,["loading"]),Ve(D,{loading:A.value,type:"primary",onClick:se},{default:ot(()=>p[21]||(p[21]=[f("保存配置",-1)])),_:1,__:[21]},8,["loading"]),Ve(D,{onClick:O},{default:ot(()=>p[22]||(p[22]=[f("取消",-1)])),_:1,__:[22]})])]),default:ot(()=>{var ae,oe,he,W,Q,H;return[e("div",Hf,[e("div",Jf,[e("div",Yf,[p[7]||(p[7]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":p[0]||(p[0]=h=>k.apiKey=h),class:"input-text",placeholder:"access token / key"},null,512),[[j,k.apiKey]])]),e("div",Zf,[p[8]||(p[8]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"请求地址(baseUrl)",-1)),b(e("input",{"onUpdate:modelValue":p[1]||(p[1]=h=>k.baseUrl=h),class:"input-text",placeholder:"https://api.example.com"},null,512),[[j,k.baseUrl]])]),e("div",Xf,[p[9]||(p[9]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"Token(可选)",-1)),b(e("input",{"onUpdate:modelValue":p[2]||(p[2]=h=>k.token=h),class:"input-text",placeholder:"Bearer token"},null,512),[[j,k.token]])]),e("div",eb,[p[10]||(p[10]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"额外参数 (extra / userId)",-1)),b(e("input",{"onUpdate:modelValue":p[3]||(p[3]=h=>k.extra=h),class:"input-text",placeholder:"用户ID等"},null,512),[[j,k.extra]])]),e("div",tb,[p[11]||(p[11]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"超时时间(秒)",-1)),b(e("input",{"onUpdate:modelValue":p[4]||(p[4]=h=>k.timeoutSeconds=h),class:"input-text",min:"1",type:"number"},null,512),[[j,k.timeoutSeconds,void 0,{number:!0}]])]),e("div",ab,[p[12]||(p[12]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"自动查询间隔(分钟)",-1)),b(e("input",{"onUpdate:modelValue":p[5]||(p[5]=h=>k.autoIntervalMinutes=h),class:"input-text",min:"0",type:"number"},null,512),[[j,k.autoIntervalMinutes,void 0,{number:!0}]]),p[13]||(p[13]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"0 表示仅手动刷新",-1))]),p[14]||(p[14]=e("div",{class:"text-xs text-gray-500 dark:text-gray-400 md:col-span-2"}," 可用变量:"+u("{")+u("{")+"baseUrl"+u("}")+u("}")+"、"+u("{")+u("{")+"apiKey"+u("}")+u("}")+"、"+u("{")+u("{")+"token"+u("}")+u("}")+"、"+u("{")+u("{")+"accountId"+u("}")+u("}")+"、"+u("{")+u("{")+"platform"+u("}")+u("}")+"、"+u("{")+u("{")+"extra"+u("}")+u("}"),-1))]),e("div",null,[e("div",{class:"mb-2 flex items-center justify-between"},[p[15]||(p[15]=e("div",{class:"text-sm font-semibold text-gray-800 dark:text-gray-100"},"提取器代码",-1)),e("button",{class:"rounded bg-gray-200 px-2 py-1 text-xs dark:bg-gray-700",onClick:N}," 使用示例 ")]),b(e("textarea",{"onUpdate:modelValue":p[6]||(p[6]=h=>k.scriptBody=h),class:"min-h-[260px] w-full rounded-xl bg-gray-900 font-mono text-sm text-gray-100 shadow-inner focus:outline-none focus:ring-2 focus:ring-indigo-500",spellcheck:"false"},null,512),[[j,k.scriptBody]]),p[16]||(p[16]=e("div",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," extractor 可返回:isValid、invalidMessage、remaining、unit、planName、total、used、extra ",-1))]),T.value?(o(),n("div",rb,[e("div",sb,[p[17]||(p[17]=e("span",{class:"font-semibold"},"测试结果",-1)),e("span",{class:$(["rounded px-2 py-0.5 text-xs",((ae=T.value.mapped)==null?void 0:ae.status)==="success"?"bg-emerald-100 text-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-200":"bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-200"])},u(((oe=T.value.mapped)==null?void 0:oe.status)||"unknown"),3)]),e("div",lb,[e("div",null,"余额: "+u(E((he=T.value.mapped)==null?void 0:he.balance)),1),e("div",null,"单位: "+u(((W=T.value.mapped)==null?void 0:W.currency)||"—"),1),(Q=T.value.mapped)!=null&&Q.planName?(o(),n("div",ob,"套餐: "+u(T.value.mapped.planName),1)):m("",!0),(H=T.value.mapped)!=null&&H.errorMessage?(o(),n("div",nb," 错误: "+u(T.value.mapped.errorMessage),1)):m("",!0)]),e("details",ib,[p[18]||(p[18]=e("summary",{class:"cursor-pointer"},"查看 extractor 输出",-1)),e("pre",db,u(R(T.value.extracted)),1)]),e("details",ub,[p[19]||(p[19]=e("summary",{class:"cursor-pointer"},"查看原始响应",-1)),e("pre",pb,u(R(T.value.response)),1)])])):m("",!0)])]}),_:1},8,["model-value","title"])}}},yb=sa(cb,[["__scopeId","data-v-5e76f743"]]),mb={class:"accounts-container"},xb={class:"card p-4 sm:p-6"},fb={class:"mb-4 flex flex-col gap-4 sm:mb-6"},bb={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},vb={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},kb={class:"group relative min-w-[160px]"},hb={class:"group relative min-w-[140px]"},wb={class:"group relative min-w-[160px]"},$b={class:"group relative min-w-[120px]"},Ab={class:"group relative min-w-[200px]"},Cb={class:"relative flex items-center"},Tb={class:"flex w-full flex-col gap-3 sm:w-auto sm:flex-row sm:items-center sm:gap-3"},Ib={class:"relative"},Ub={class:"relative"},_b=["disabled"],Kb={class:"relative"},Sb=["disabled"],Mb={class:"relative"},Db={class:"relative"},Pb={key:0,class:"py-12 text-center"},jb={key:1,class:"py-12 text-center"},Vb={key:2,class:"table-wrapper hidden md:block"},zb={class:"w-full"},Lb={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},Rb={key:0,class:"checkbox-column sticky left-0 z-20 min-w-[50px] px-3 py-4 text-left"},Ob={class:"flex items-center"},Eb=["indeterminate"],Nb={key:1,class:"fas fa-sort ml-1 text-gray-400"},qb={key:1,class:"fas fa-sort ml-1 text-gray-400"},Wb={key:1,class:"fas fa-sort ml-1 text-gray-400"},Bb={class:"min-w-[210px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},Gb={class:"flex items-center gap-2"},Fb={key:1,class:"fas fa-sort ml-1 text-gray-400"},Qb={key:1,class:"fas fa-sort ml-1 text-gray-400"},Hb={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Jb={key:0,class:"checkbox-column sticky left-0 z-10 px-3 py-3"},Yb={class:"flex items-center"},Zb=["value"],Xb={class:"flex items-center"},ev={class:"min-w-0"},tv={class:"flex items-center gap-2"},av=["onClick"],rv={key:0,class:"inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-800"},sv={key:1,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800"},lv={key:2,class:"inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800"},ov={key:0,class:"my-2 flex flex-wrap items-center gap-2"},nv=["title"],iv=["title"],dv={class:"px-3 py-4"},uv={class:"flex items-center gap-1"},pv={key:0,class:"flex items-center gap-1.5 rounded-lg border border-yellow-200 bg-gradient-to-r from-yellow-100 to-amber-100 px-2.5 py-1"},gv={class:"text-xs font-medium text-yellow-700"},cv={key:1,class:"flex items-center gap-1.5 rounded-lg border border-purple-200 bg-gradient-to-r from-purple-100 to-pink-100 px-2.5 py-1"},yv={key:2,class:"flex items-center gap-1.5 rounded-lg border border-orange-200 bg-gradient-to-r from-orange-100 to-red-100 px-2.5 py-1"},mv={key:3,class:"flex items-center gap-1.5 rounded-lg border border-gray-700 bg-gray-100 bg-gradient-to-r from-gray-100 to-gray-100 px-2.5 py-1"},xv={class:"text-xs font-medium text-gray-950"},fv={key:4,class:"flex items-center gap-1.5 rounded-lg border border-blue-200 bg-gradient-to-r from-blue-100 to-cyan-100 px-2.5 py-1 dark:border-blue-700 dark:from-blue-900/20 dark:to-cyan-900/20"},bv={key:5,class:"flex items-center gap-1.5 rounded-lg border border-teal-200 bg-gradient-to-r from-teal-100 to-green-100 px-2.5 py-1 dark:border-teal-700 dark:from-teal-900/20 dark:to-green-900/20"},vv={key:6,class:"flex items-center gap-1.5 rounded-lg border border-indigo-200 bg-gradient-to-r from-indigo-100 to-blue-100 px-2.5 py-1"},kv={class:"text-xs font-semibold text-indigo-800"},hv={class:"text-xs font-medium text-indigo-700"},wv={key:7,class:"flex items-center gap-1.5 rounded-lg border border-teal-200 bg-gradient-to-r from-teal-100 to-emerald-100 px-2.5 py-1 dark:border-teal-700 dark:from-teal-900/20 dark:to-emerald-900/20"},$v={key:8,class:"flex items-center gap-1.5 rounded-lg border border-cyan-200 bg-gradient-to-r from-cyan-100 to-sky-100 px-2.5 py-1 dark:border-cyan-700 dark:from-cyan-900/20 dark:to-sky-900/20"},Av={class:"text-xs font-medium text-cyan-700 dark:text-cyan-300"},Cv={key:9,class:"flex items-center gap-1.5 rounded-lg border border-amber-200 bg-gradient-to-r from-amber-100 to-yellow-100 px-2.5 py-1 dark:border-amber-700 dark:from-amber-900/20 dark:to-yellow-900/20"},Tv={key:10,class:"flex items-center gap-1.5 rounded-lg border border-gray-200 bg-gradient-to-r from-gray-100 to-gray-200 px-2.5 py-1"},Iv={class:"w-[100px] min-w-[100px] max-w-[100px] whitespace-nowrap px-3 py-4"},Uv={class:"flex flex-col gap-1"},_v={key:0,class:"inline-flex items-center rounded-full bg-yellow-100 px-3 py-1 text-xs font-semibold text-yellow-800"},Kv={key:0},Sv={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-3 py-1 text-xs font-semibold text-gray-700"},Mv=["title"],Dv={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},Pv={class:"whitespace-nowrap px-3 py-4 text-sm"},jv={key:0,class:"space-y-1"},Vv={class:"flex items-center gap-2"},zv={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Lv={class:"flex items-center gap-2"},Rv={class:"text-xs text-gray-600 dark:text-gray-300"},Ov={class:"flex items-center gap-2"},Ev={class:"text-xs text-gray-600 dark:text-gray-300"},Nv={key:0,class:"text-xs text-gray-500 dark:text-gray-400"},qv={key:1,class:"text-xs text-gray-400"},Wv={class:"whitespace-nowrap px-3 py-4"},Bv={class:"mt-1 text-xs"},Gv=["onClick"],Fv={class:"whitespace-nowrap px-3 py-4"},Qv={key:0,class:"space-y-2"},Hv={key:0,class:"space-y-2"},Jv={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Yv={class:"flex items-center gap-2"},Zv={class:"flex-1"},Xv={class:"flex items-center gap-2"},e1={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},t1={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},a1={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},r1={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},s1={class:"flex items-center gap-2"},l1={class:"flex-1"},o1={class:"flex items-center gap-2"},n1={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},i1={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},d1={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},u1={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},p1={class:"flex items-center gap-2"},g1={class:"flex-1"},c1={class:"flex items-center gap-2"},y1={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},m1={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},x1={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},f1={key:1,class:"space-y-2"},b1={key:0,class:"flex items-center gap-3 text-xs"},v1={class:"flex items-center gap-1"},k1={class:"font-medium text-gray-900 dark:text-gray-100"},h1={class:"flex items-center gap-1"},w1={class:"font-medium text-gray-900 dark:text-gray-100"},$1={class:"flex items-center gap-2"},A1={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},C1={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},T1={class:"text-xs text-gray-600 dark:text-gray-400"},I1={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},U1={key:2,class:"text-xs text-gray-400"},_1={key:1,class:"space-y-3"},K1={class:"flex items-center justify-between text-xs"},S1={class:"font-medium text-gray-700 dark:text-gray-200"},M1={class:"flex items-center gap-2"},D1={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},P1={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},j1={class:"text-xs text-gray-600 dark:text-gray-400"},V1={class:"ml-2 text-gray-400"},z1={key:1,class:"text-sm text-gray-400"},L1={class:"space-y-1"},R1={class:"flex items-center justify-between text-xs"},O1={key:0,class:"font-medium text-gray-700 dark:text-gray-200"},E1={key:0,class:"flex items-center gap-2"},N1={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},q1={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-500 dark:bg-gray-700 dark:text-gray-300"},W1={key:2,class:"space-y-2"},B1={key:0,class:"space-y-2"},G1={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},F1={class:"flex items-center gap-2"},Q1={class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"},H1={class:"flex-1"},J1={class:"flex items-center gap-2"},Y1={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Z1={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},X1={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},ek={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},tk={class:"flex items-center gap-2"},ak={class:"inline-flex min-w-[32px] justify-center rounded-full bg-blue-100 px-2 py-0.5 text-[11px] font-medium text-blue-600 dark:bg-blue-500/20 dark:text-blue-300"},rk={class:"flex-1"},sk={class:"flex items-center gap-2"},lk={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},ok={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},nk={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},ik={key:1,class:"text-sm text-gray-400"},dk={key:3,class:"text-sm text-gray-400"},uk={class:"whitespace-nowrap px-3 py-4 text-sm text-gray-600 dark:text-gray-300"},pk={class:"whitespace-nowrap px-3 py-4"},gk={key:0,class:"flex items-center gap-2"},ck={class:"h-2 w-16 rounded-full bg-gray-200"},yk={class:"min-w-[20px] text-xs font-medium text-gray-700 dark:text-gray-200"},mk={key:1,class:"text-sm text-gray-400"},xk={class:"px-3 py-4 text-sm text-gray-600"},fk=["title"],bk={key:1,class:"text-gray-400"},vk={class:"whitespace-nowrap px-3 py-4"},kk={class:"flex flex-col gap-1"},hk={key:0},wk=["onClick"],$k=["onClick"],Ak=["onClick"],Ck=["onClick"],Tk={class:"operations-column sticky right-0 z-10 whitespace-nowrap px-3 py-4 text-sm font-medium"},Ik={key:0,class:"flex items-center gap-1"},Uk=["disabled","title","onClick"],_k=["disabled","title","onClick"],Kk={class:"ml-1"},Sk=["onClick"],Mk=["onClick"],Dk=["onClick"],Pk=["onClick"],jk=["onClick"],Vk={key:1,class:"flex items-center gap-1"},zk=["disabled","title","onClick"],Lk={class:"ml-1"},Rk=["onClick"],Ok={key:3,class:"space-y-3 md:hidden"},Ek={class:"mb-3 flex items-start justify-between"},Nk={class:"flex items-center gap-3"},qk=["value"],Wk=["onClick"],Bk={class:"mt-0.5 flex items-center gap-2"},Gk={class:"text-xs text-gray-500 dark:text-gray-400"},Fk={class:"text-xs text-gray-500 dark:text-gray-400"},Qk={class:"mb-3 grid grid-cols-2 gap-3"},Hk={class:"space-y-1"},Jk={class:"flex items-center gap-1.5"},Yk={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Zk={class:"flex items-center gap-1.5"},Xk={class:"text-xs text-gray-600 dark:text-gray-400"},e2={class:"flex items-center gap-1.5"},t2={class:"text-xs text-gray-600 dark:text-gray-400"},a2={key:0,class:"space-y-1"},r2={class:"flex items-center gap-1.5"},s2={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},l2={class:"flex items-center gap-1.5"},o2={class:"text-xs text-gray-600 dark:text-gray-400"},n2={key:1,class:"text-sm font-semibold text-gray-400"},i2={class:"mb-3"},d2={class:"mt-1 text-xs"},u2=["onClick"],p2={class:"mb-3 space-y-2"},g2={key:0,class:"space-y-2"},c2={key:0,class:"space-y-2"},y2={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},m2={class:"flex items-center gap-2"},x2={class:"flex-1"},f2={class:"flex items-center gap-2"},b2={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},v2={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},k2={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},h2={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},w2={class:"flex items-center gap-2"},$2={class:"flex-1"},A2={class:"flex items-center gap-2"},C2={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},T2={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},I2={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},U2={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},_2={class:"flex items-center gap-2"},K2={class:"flex-1"},S2={class:"flex items-center gap-2"},M2={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},D2={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},P2={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},j2={key:1,class:"space-y-1.5 rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},V2={class:"flex items-center justify-between text-xs"},z2={class:"flex items-center gap-1"},L2={class:"font-medium text-gray-700 dark:text-gray-200"},R2={class:"h-2 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-600"},O2={class:"flex items-center justify-between text-xs"},E2={class:"text-gray-500 dark:text-gray-400"},N2={key:0,class:"font-medium text-indigo-600"},q2={key:1,class:"text-gray-500"},W2={key:2,class:"text-xs text-gray-400"},B2={key:1,class:"space-y-2"},G2={key:0,class:"space-y-2"},F2={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Q2={class:"flex items-center gap-2"},H2={class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"},J2={class:"flex-1"},Y2={class:"flex items-center gap-2"},Z2={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},X2={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},e3={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},t3={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},a3={class:"flex items-center gap-2"},r3={class:"inline-flex min-w-[32px] justify-center rounded-full bg-blue-100 px-2 py-0.5 text-[11px] font-medium text-blue-600 dark:bg-blue-500/20 dark:text-blue-300"},s3={class:"flex-1"},l3={class:"flex items-center gap-2"},o3={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},n3={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},i3={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},d3={key:1,class:"text-xs text-gray-400"},u3={class:"flex items-center justify-between text-xs"},p3={class:"text-gray-700 dark:text-gray-200"},g3={key:2,class:"flex items-center justify-between text-xs"},c3={class:"text-gray-700 dark:text-gray-200"},y3={class:"flex items-center justify-between text-xs"},m3={class:"font-medium text-gray-700 dark:text-gray-200"},x3={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3"},f3=["disabled","onClick"],b3=["onClick"],v3=["onClick"],k3=["onClick"],h3=["onClick"],w3=["onClick"],$3={key:0,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},A3={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},C3={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},T3={class:"flex items-center gap-2"},I3=["value"],U3={class:"flex items-center gap-2"},_3=["disabled"],K3={class:"flex items-center gap-1"},S3={key:1,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},M3=["onClick"],D3={key:2,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},P3=["disabled"],j3={class:"space-y-4"},V3={class:"overflow-x-auto"},z3={class:"w-full border-collapse text-sm",style:{"min-width":"1000px"}},L3={class:"border border-gray-300 px-4 py-2 font-medium dark:border-gray-600"},R3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},O3={class:"text-green-600 dark:text-green-400"},E3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},N3={class:"text-yellow-600 dark:text-yellow-400"},q3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},W3={class:"text-orange-600 dark:text-orange-400"},B3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},G3={class:"text-orange-600 dark:text-orange-400"},F3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},Q3={class:"text-orange-600 dark:text-orange-400"},H3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},J3={class:"text-orange-600 dark:text-orange-400"},Y3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},Z3={class:"text-orange-600 dark:text-orange-400"},X3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},e5={class:"text-red-600 dark:text-red-400"},t5={class:"border border-gray-300 bg-blue-50 px-4 py-2 text-center font-bold dark:border-gray-600 dark:bg-blue-900/30"},a5={class:"bg-blue-50 font-bold dark:bg-blue-900/30"},r5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},s5={class:"text-green-600 dark:text-green-400"},l5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},o5={class:"text-yellow-600 dark:text-yellow-400"},n5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},i5={class:"text-orange-600 dark:text-orange-400"},d5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},u5={class:"text-orange-600 dark:text-orange-400"},p5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},g5={class:"text-orange-600 dark:text-orange-400"},c5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},y5={class:"text-orange-600 dark:text-orange-400"},m5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},x5={class:"text-orange-600 dark:text-orange-400"},f5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},b5={class:"text-red-600 dark:text-red-400"},v5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},vr="accountsPageSize",k5={__name:"AccountsView",setup(F){const _e=v(!1),c=v({title:"",message:"",confirmText:"继续",cancelText:"取消"});let z=null;const A=(r,s,x="继续",w="取消")=>new Promise(l=>{c.value={title:r,message:s,confirmText:x,cancelText:w},z=l,_e.value=!0}),_=()=>{_e.value=!1,z==null||z(!0),z=null},T=()=>{_e.value=!1,z==null||z(!1),z=null},k=v([]),P=v(!1),O=v(!1),Y=v("name"),M=v("asc"),se=v([]),ge=v({}),N=v([]),E=v("all"),R=v("all"),y=v("all"),p=v(""),D=()=>{const r=localStorage.getItem(vr);if(r){const s=parseInt(r,10);if([10,20,50,100].includes(s))return s}return 10},de=[10,20,50,100],le=v(D()),ae=v(1),oe=v([]),he=v(!1),W=v(!1),Q=v(!1),H=v(!1),h=v(!1),X=v(null),C=v([]),G=v({}),K=v({}),Ce=v(""),ze=["claude","claude-console","openai","openai-responses","gemini","droid","gemini-api","bedrock"],Ke=v(null),Fe=v(null),Qe=v(!1),xe=v(null),g=v(!1),a=v(null),U=v(!1),re=v(!1),ne=v(null),Re=v(!1),Oe=v(!1),st=v(!1),nt=v(!1),at=v(!1),Dt=v(new Map),Pt=v([{value:"name",label:"按名称排序",icon:"fa-font"},{value:"dailyTokens",label:"按今日Token排序",icon:"fa-coins"},{value:"dailyRequests",label:"按今日请求数排序",icon:"fa-chart-line"},{value:"totalTokens",label:"按总Token排序",icon:"fa-database"},{value:"lastUsed",label:"按最后使用排序",icon:"fa-clock"},{value:"rateLimitTime",label:"按限流时间排序",icon:"fa-hourglass"}]),jt=[{value:"group-claude",label:"Claude(全部)",icon:"fa-brain",children:[{value:"claude",label:"Claude 官方/OAuth",icon:"fa-brain"},{value:"claude-console",label:"Claude Console",icon:"fa-terminal"},{value:"bedrock",label:"Bedrock",icon:"fab fa-aws"},{value:"ccr",label:"CCR Relay",icon:"fa-code-branch"}]},{value:"group-openai",label:"Codex / OpenAI(全部)",icon:"fa-openai",children:[{value:"openai",label:"OpenAI 官方",icon:"fa-openai"},{value:"openai-responses",label:"OpenAI-Responses (Codex)",icon:"fa-server"},{value:"azure_openai",label:"Azure OpenAI",icon:"fab fa-microsoft"}]},{value:"group-gemini",label:"Gemini(全部)",icon:"fab fa-google",children:[{value:"gemini",label:"Gemini OAuth",icon:"fab fa-google"},{value:"gemini-api",label:"Gemini API",icon:"fa-key"}]},{value:"group-droid",label:"Droid(全部)",icon:"fa-robot",children:[{value:"droid",label:"Droid",icon:"fa-robot"}]}],I={"group-claude":["claude","claude-console","bedrock","ccr"],"group-openai":["openai","openai-responses","azure_openai"],"group-gemini":["gemini","gemini-api"],"group-droid":["droid"]},Tt={claude:()=>wr(),"claude-console":()=>$r(),bedrock:()=>Ar(),gemini:()=>Cr(),openai:()=>Tr(),azure_openai:()=>Ir(),"openai-responses":()=>Ur(),ccr:()=>Ws(),droid:()=>_r(),"gemini-api":()=>qs()},gt=Object.keys(Tt),ht=r=>r==="all"?gt:I[r]?I[r]:gt.includes(r)?[r]:gt,ct=Z(()=>{const r=[{value:"all",label:"所有平台",icon:"fa-globe",indent:0}];return jt.forEach(s=>{var x;r.push({...s,indent:0,isGroup:!0}),(x=s.children)==null||x.forEach(w=>{r.push({...w,indent:1,parent:s.value})})}),r}),Vt=v([{value:"normal",label:"正常",icon:"fa-check-circle"},{value:"unschedulable",label:"不可调度",icon:"fa-ban"},{value:"rateLimited",label:"限流",icon:"fa-hourglass-half"},{value:"other",label:"其他",icon:"fa-exclamation-triangle"},{value:"all",label:"全部状态",icon:"fa-list"}]),wt=Z(()=>{const r=[{value:"all",label:"所有账户",icon:"fa-globe"},{value:"ungrouped",label:"未分组账户",icon:"fa-user"}];return N.value.forEach(s=>{r.push({value:s.id,label:`${s.name} (${s.platform==="claude"?"Claude":s.platform==="gemini"?"Gemini":s.platform==="openai"?"OpenAI":"Droid"})`,icon:s.platform==="claude"?"fa-brain":s.platform==="gemini"?"fa-robot":s.platform==="openai"?"fa-openai":"fa-robot"})}),r}),B=Z(()=>Q.value),q=v(!1),Ee=v(null),We=v(!1),ut=v(null),Nt=r=>{const s=new Set;return[r==null?void 0:r.name,r==null?void 0:r.email,r==null?void 0:r.accountName,r==null?void 0:r.owner,r==null?void 0:r.ownerName,r==null?void 0:r.ownerDisplayName,r==null?void 0:r.displayName,r==null?void 0:r.username,r==null?void 0:r.identifier,r==null?void 0:r.alias,r==null?void 0:r.title,r==null?void 0:r.label].forEach(w=>{if(typeof w=="string"){const l=w.trim();l&&s.add(l)}}),Array.isArray(r==null?void 0:r.groupInfos)&&r.groupInfos.forEach(w=>{if(w&&typeof w.name=="string"){const l=w.name.trim();l&&s.add(l)}}),Object.entries(r||{}).forEach(([w,l])=>{if(typeof l=="string"){const te=w.toLowerCase();if(te.includes("name")||te.includes("email")){const we=l.trim();we&&s.add(we)}}}),Array.from(s)},qt=(r,s)=>s?Nt(r).some(x=>x.toLowerCase().includes(s)):!0,$t=r=>!!r&&ze.includes(r.platform),zt=r=>{var x;return["claude","claude-console","openai","openai-responses","gemini","gemini-api","ccr"].includes(r.platform)&&(r.status==="unauthorized"||r.status!=="active"||((x=r.rateLimitStatus)==null?void 0:x.isRateLimited)||r.rateLimitStatus==="limited"||!r.isActive)},Lt=r=>{const s=[];return zt(r)&&s.push({key:"reset",label:"重置状态",icon:"fa-redo",color:"orange",handler:()=>ba(r)}),$t(r)&&s.push({key:"usage",label:"详情",icon:"fa-chart-line",color:"indigo",handler:()=>It(r)}),At(r)&&(s.push({key:"test",label:"测试",icon:"fa-vial",color:"blue",handler:()=>Ct(r)}),s.push({key:"scheduled-test",label:"定时测试",icon:"fa-clock",color:"amber",handler:()=>Ut(r)})),s.push({key:"delete",label:"删除",icon:"fa-trash",color:"red",handler:()=>Zt(r)}),s},It=async r=>{if(!$t(r)){V("该账户类型暂不支持查看详情","warning");return}X.value=r,H.value=!0,h.value=!0,C.value=[],G.value={},K.value={},Ce.value="";const s=await Js(r.id,r.platform,30);if(s.success){const x=s.data||{};C.value=x.history||[],G.value=x.summary||{},K.value=x.overview||{},Ce.value=x.generatedAt||""}else V(s.error||"加载账号使用详情失败","error");h.value=!1},it=()=>{H.value=!1,h.value=!1,X.value=null},Ya=["claude","claude-console","bedrock","gemini","openai-responses","azure-openai","droid","ccr"],At=r=>!!r&&Ya.includes(r.platform),Ct=r=>{if(!At(r)){V("该账户类型暂不支持测试","warning");return}xe.value=r,Qe.value=!0},Wt=()=>{Qe.value=!1,xe.value=null},Ut=r=>{if(!At(r)){V("该账户类型暂不支持定时测试","warning");return}a.value=r,g.value=!0},Bt=()=>{g.value=!1,a.value=null},Gt=()=>{V("定时测试配置已保存","success")},Ft=v(!1),Rt=v(null),$a=r=>{Rt.value=r,Ft.value=!0},Aa=()=>{Ft.value=!1,Rt.value=null},Ca=async()=>{V("余额脚本已保存","success");const r=Rt.value;if(Aa(),!(!(r!=null&&r.id)||!(r!=null&&r.platform)))try{const s=await Mr(r.id,{platform:r.platform,queryApi:!1});s!=null&&s.success&&s.data&&Qt(r.id,s.data)}catch(s){console.debug("Failed to reload balance after saving script:",s)}},yt=Z(()=>{let r=k.value;const s=p.value.trim();if(s){const w=s.toLowerCase();r=r.filter(l=>qt(l,w))}return y.value!=="all"&&(r=r.filter(w=>{const l=xt(w),te=w.status==="blocked"||w.status==="unauthorized";return y.value==="rateLimited"?w.isActive&&l:y.value==="normal"?w.isActive&&!l&&!te&&w.schedulable!==!1:y.value==="unschedulable"?w.isActive&&!l&&!te&&w.schedulable===!1:y.value==="other"?!l&&(!w.isActive||te):!0})),Y.value?[...r].sort((w,l)=>{var ce,Te,ee,fe,Ae,ue,be,Ge,Be,ir,dr,ur;let te=w[Y.value],we=l[Y.value];if(Y.value==="dailyTokens"?(te=((Te=(ce=w.usage)==null?void 0:ce.daily)==null?void 0:Te.allTokens)||0,we=((fe=(ee=l.usage)==null?void 0:ee.daily)==null?void 0:fe.allTokens)||0):Y.value==="dailyRequests"?(te=((ue=(Ae=w.usage)==null?void 0:Ae.daily)==null?void 0:ue.requests)||0,we=((Ge=(be=l.usage)==null?void 0:be.daily)==null?void 0:Ge.requests)||0):Y.value==="totalTokens"&&(te=((ir=(Be=w.usage)==null?void 0:Be.total)==null?void 0:ir.allTokens)||0,we=((ur=(dr=l.usage)==null?void 0:dr.total)==null?void 0:ur.allTokens)||0),Y.value==="lastUsed"&&(te=w.lastUsedAt?new Date(w.lastUsedAt).getTime():0,we=l.lastUsedAt?new Date(l.lastUsedAt).getTime():0),Y.value==="status"&&(te=w.isActive?1:0,we=l.isActive?1:0),Y.value==="rateLimitTime"){const er=xt(w),tr=xt(l),pr=er?ft(w):0,gr=tr?ft(l):0;return!er&&tr?-1:er&&!tr?1:pr<gr?-1:pr>gr?1:0}return te<we?M.value==="asc"?-1:1:te>we?M.value==="asc"?1:-1:0}):r}),De=Z(()=>{const r=yt.value.length;return Math.ceil(r/le.value)||0}),la=Z(()=>[{value:"claude",label:"Claude"},{value:"claude-console",label:"Claude Console"},{value:"gemini",label:"Gemini"},{value:"gemini-api",label:"Gemini API"},{value:"openai",label:"OpenAI"},{value:"azure_openai",label:"Azure OpenAI"},{value:"bedrock",label:"Bedrock"},{value:"openai-responses",label:"OpenAI-Responses"},{value:"ccr",label:"CCR"},{value:"droid",label:"Droid"}].map(s=>{const x=k.value.filter(ue=>ue.platform===s.value),w=x.filter(ue=>xt(ue)),l=x.filter(ue=>{const be=xt(ue),Ge=ue.status==="blocked"||ue.status==="unauthorized";return!be&&ue.isActive&&!Ge&&ue.schedulable!==!1}).length,te=x.filter(ue=>{const be=xt(ue),Ge=ue.status==="blocked"||ue.status==="unauthorized";return!be&&ue.isActive&&!Ge&&ue.schedulable===!1}).length,we=x.filter(ue=>{const be=xt(ue),Ge=ue.status==="blocked"||ue.status==="unauthorized";return!be&&(!ue.isActive||Ge)}).length,ce=w.filter(ue=>{const be=ft(ue);return be>0&&be<=60}).length,Te=w.filter(ue=>{const be=ft(ue);return be>60&&be<=300}).length,ee=w.filter(ue=>{const be=ft(ue);return be>300&&be<=720}).length,fe=w.filter(ue=>{const be=ft(ue);return be>720&&be<=1440}).length,Ae=w.filter(ue=>ft(ue)>1440).length;return{platform:s.value,platformLabel:s.label,normal:l,unschedulable:te,rateLimit0_1h:ce,rateLimit1_5h:Te,rateLimit5_12h:ee,rateLimit12_24h:fe,rateLimitOver24h:Ae,other:we,total:x.length}}).filter(s=>s.total>0)),dt=Z(()=>la.value.reduce((r,s)=>(r.normal+=s.normal,r.unschedulable+=s.unschedulable,r.rateLimit0_1h+=s.rateLimit0_1h,r.rateLimit1_5h+=s.rateLimit1_5h,r.rateLimit5_12h+=s.rateLimit5_12h,r.rateLimit12_24h+=s.rateLimit12_24h,r.rateLimitOver24h+=s.rateLimitOver24h,r.other+=s.other,r.total+=s.total,r),{normal:0,unschedulable:0,rateLimit0_1h:0,rateLimit1_5h:0,rateLimit5_12h:0,rateLimit12_24h:0,rateLimitOver24h:0,other:0,total:0})),_t=Z(()=>{const r=De.value,s=ae.value,x=[];if(r<=7)for(let w=1;w<=r;w++)x.push(w);else{let w=Math.max(1,s-2),l=Math.min(r,s+2);s<=3?l=5:s>=r-2&&(w=r-4);for(let te=w;te<=l;te++)x.push(te)}return x}),mt=Z(()=>{const r=_t.value;return r.length===0?!1:r[0]>1}),oa=Z(()=>{const r=_t.value;return r.length===0?!1:r[r.length-1]<De.value}),Ta=Z(()=>{const r=_t.value;return r.length===0?!1:mt.value&&r[0]>2}),Ia=Z(()=>{const r=_t.value;return r.length===0?!1:oa.value&&r[r.length-1]<De.value-1}),pt=Z(()=>{const r=(ae.value-1)*le.value,s=r+le.value;return yt.value.slice(r,s)}),na=Z(()=>{const r=pt.value;return!Array.isArray(r)||r.length===0?!1:r.some(s=>{const x=s==null?void 0:s.balanceInfo;return(x==null?void 0:x.scriptEnabled)!==!1&&!!(x!=null&&x.scriptConfigured)})}),Ua=Z(()=>P.value?"正在加载账户...":O.value?"刷新中...":na.value?"刷新当前页余额(仅对已配置余额脚本的账户生效)":"当前页未配置余额脚本,无法刷新"),Qt=(r,s)=>{k.value=k.value.map(x=>x.id!==r?x:{...x,balanceInfo:s})},ia=(r,s)=>{const x=(s==null?void 0:s.message)||"余额查询失败";V(x,"error")},_a=async()=>{if(O.value)return;const r=pt.value;if(!r||r.length===0)return;const s=r.filter(w=>{const l=w==null?void 0:w.balanceInfo;return(l==null?void 0:l.scriptEnabled)!==!1&&!!(l!=null&&l.scriptConfigured)});if(s.length===0){V("当前页没有配置余额脚本的账户","warning");return}const x=r.length-s.length;O.value=!0;try{const w=await Promise.all(s.map(async Te=>{try{const ee=await Dr(Te.id,{platform:Te.platform});return{id:Te.id,success:!!(ee!=null&&ee.success),data:(ee==null?void 0:ee.data)||null}}catch(ee){return{id:Te.id,success:!1,error:(ee==null?void 0:ee.message)||"刷新失败"}}})),l=w.reduce((Te,ee)=>(ee.success&&ee.data&&(Te[ee.id]=ee.data),Te),{}),te=w.filter(Te=>Te.success).length,we=w.length-te,ce=x>0?`,跳过 ${x} 个未配置脚本`:"";Object.keys(l).length>0&&(k.value=k.value.map(Te=>{const ee=l[Te.id];return ee?{...Te,balanceInfo:ee}:Te})),we===0?V(`成功刷新 ${te} 个账户余额${ce}`,"success"):V(`刷新完成:${te} 成功,${we} 失败${ce}`,"warning")}finally{O.value=!1}},rt=()=>{const r=pt.value.map(w=>w.id),s=r.filter(w=>oe.value.includes(w)).length,x=r.length;s===0?(he.value=!1,W.value=!1):s===x?(he.value=!0,W.value=!1):(he.value=!1,W.value=!0)},Ka=()=>{if(he.value)pt.value.forEach(r=>{oe.value.includes(r.id)||oe.value.push(r.id)});else{const r=new Set(pt.value.map(s=>s.id));oe.value=oe.value.filter(s=>!r.has(s))}rt()},Sa=()=>{Q.value=!Q.value,Q.value?rt():(oe.value=[],he.value=!1,W.value=!1)},da=()=>{const r=new Set(k.value.map(s=>s.id));oe.value=oe.value.filter(s=>r.has(s)),rt()},Ma=async()=>{const r=k.value;if(!Array.isArray(r)||r.length===0)return;const s=Array.from(new Set(r.map(l=>l.platform).filter(Boolean)));if(s.length===0)return;const w=(await Promise.all(s.map(async l=>{try{const te=await Fs(l,{queryApi:!1});return{platform:l,success:!!(te!=null&&te.success),data:(te==null?void 0:te.data)||[]}}catch(te){return console.debug(`Failed to load balance cache for ${l}:`,te),{platform:l,success:!1,data:[]}}}))).reduce((l,te)=>(te.success&&(Array.isArray(te.data)?te.data:[]).forEach(ce=>{var ee;const Te=(ee=ce==null?void 0:ce.data)==null?void 0:ee.accountId;Te&&(l[Te]=ce.data)}),l),{});Object.keys(w).length!==0&&(k.value=k.value.map(l=>({...l,balanceInfo:w[l.id]||l.balanceInfo||null})))},lt=async(r=!1)=>{P.value=!0;try{const s={};R.value!=="all"&&!I[R.value]&&(s.platform=R.value),E.value!=="all"&&(s.groupId=E.value);const x=ht(R.value);await Promise.all([ua(r),pa(r)]);const w=await Promise.all(x.map(async ee=>{const fe=Tt[ee];if(!fe)return{platform:ee,success:!0,data:[]};try{const Ae=await fe(s);return{platform:ee,success:Ae==null?void 0:Ae.success,data:Ae==null?void 0:Ae.data}}catch(Ae){return console.debug(`Failed to load ${ee} accounts:`,Ae),{platform:ee,success:!1,data:[]}}})),l=[],te=ge.value||{};let we=[];const ce=(ee,fe)=>{const Ae=Array.isArray(fe)?fe:[];if(Ae.length!==0)switch(ee){case"claude":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.claudeAccountId)==null?void 0:Be[be.id])||0;return{...be,platform:"claude",boundApiKeysCount:Ge}});l.push(...ue);break}case"claude-console":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.claudeConsoleAccountId)==null?void 0:Be[be.id])||0;return{...be,platform:"claude-console",boundApiKeysCount:Ge}});l.push(...ue);break}case"bedrock":{const ue=Ae.map(be=>({...be,platform:"bedrock",boundApiKeysCount:0}));l.push(...ue);break}case"gemini":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.geminiAccountId)==null?void 0:Be[be.id])||0;return{...be,platform:"gemini",boundApiKeysCount:Ge}});l.push(...ue);break}case"openai":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.openaiAccountId)==null?void 0:Be[be.id])||0;return{...be,platform:"openai",boundApiKeysCount:Ge}});l.push(...ue);break}case"azure_openai":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.azureOpenaiAccountId)==null?void 0:Be[be.id])||0;return{...be,platform:"azure_openai",boundApiKeysCount:Ge}});l.push(...ue);break}case"openai-responses":{we=Ae;break}case"ccr":{const ue=Ae.map(be=>({...be,platform:"ccr",boundApiKeysCount:0}));l.push(...ue);break}case"droid":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.droidAccountId)==null?void 0:Be[be.id])||be.boundApiKeysCount||0;return{...be,platform:"droid",boundApiKeysCount:Ge}});l.push(...ue);break}case"gemini-api":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.geminiAccountId)==null?void 0:Be[`api:${be.id}`])||0;return{...be,platform:"gemini-api",boundApiKeysCount:Ge}});l.push(...ue);break}default:break}};if(w.forEach(({platform:ee,success:fe,data:Ae})=>{fe&&ce(ee,Ae||[])}),we.length>0){const ee=we.map(fe=>{var ue;const Ae=((ue=te.openaiAccountId)==null?void 0:ue[`responses:${fe.id}`])||0;return{...fe,platform:"openai-responses",boundApiKeysCount:Ae}});l.push(...ee)}let Te=l;E.value!=="all"&&(E.value==="ungrouped"?Te=l.filter(ee=>!ee.groupInfos||ee.groupInfos.length===0):Te=l.filter(ee=>!ee.groupInfos||ee.groupInfos.length===0?!1:ee.groupInfos.some(fe=>fe.id===E.value))),Te=Te.map(ee=>{const fe=ga(ee.proxyConfig||ee.proxy);return{...ee,proxyConfig:fe||null}}),k.value=Te,da(),Te.some(ee=>ee.platform==="claude")&&Da().catch(ee=>{console.debug("Claude usage loading failed:",ee)}),Ma().catch(ee=>{console.debug("Balance cache loading failed:",ee)})}catch{V("加载账户失败","error")}finally{P.value=!1}},Da=async()=>{const r=await Gs();if(r.success&&r.data){const s=r.data;k.value=k.value.map(x=>x.platform==="claude"&&s[x.id]?{...x,claudeUsage:s[x.id]}:x)}};let Ht="name";const Kt=r=>{r&&(Y.value===r?M.value=M.value==="asc"?"desc":"asc":(Y.value=r,M.value="asc"),Ht=r)},Pa=r=>{r===Ht?M.value=M.value==="asc"?"desc":"asc":M.value="asc",Ht=r},ja=r=>{if(!r)return"从未使用";const s=new Date(r),w=new Date-s;return w<6e4?"刚刚":w<36e5?`${Math.floor(w/6e4)} 分钟前`:w<864e5?`${Math.floor(w/36e5)} 小时前`:w<6048e5?`${Math.floor(w/864e5)} 天前`:s.toLocaleDateString("zh-CN")},Va=()=>{p.value="",ae.value=1},ua=async(r=!1)=>{if(!r&&st.value)return;const s=await Bs();s.success&&(ge.value=s.data||{},st.value=!0)},za=async(r=!1)=>{var x;if(!r&&Oe.value)return;const s=await Ys();s.success&&(se.value=((x=s.data)==null?void 0:x.items)||s.data||[],Oe.value=!0)},pa=async(r=!1)=>{if(!r&&nt.value)return;const s=await sr();s.success&&(N.value=s.data||[],nt.value=!0)},La=()=>{Oe.value=!1,st.value=!1,nt.value=!1,at.value=!1,Dt.value.clear()},Ra=()=>{ae.value=1,lt()},Oa=()=>{ae.value=1,lt()};function ga(r){if(!r)return null;let s=r;if(typeof r=="string")try{s=JSON.parse(r)}catch{return null}if(!s||typeof s!="object")return null;const x=s.proxy&&typeof s.proxy=="object"?s.proxy:s,w=typeof x.host=="string"?x.host.trim():x.host!==void 0&&x.host!==null?String(x.host).trim():"",l=x.port!==void 0&&x.port!==null?String(x.port).trim():"";if(!w||!l)return null;const te=typeof x.type=="string"&&x.type.trim()?x.type.trim():"socks5",we=typeof x.username=="string"?x.username:x.username!==void 0&&x.username!==null?String(x.username):"",ce=typeof x.password=="string"?x.password:x.password!==void 0&&x.password!==null?String(x.password):"";return{type:te,host:w,port:l,username:we,password:ce}}const Jt=r=>{const s=ga(r);if(!s)return null;const x=s.type.toLowerCase()==="socks5"?"S5":s.type.toUpperCase();let w=s.host;w.length>15&&(w=w.substring(0,12)+"...");let l=`${x}://${w}:${s.port}`;return s.username&&(l=`${x}://***@${w}:${s.port}`),l},ca=(r,s)=>{if(!r||!s)return"--";const x=new Date(r),w=new Date(s),l=x.getHours().toString().padStart(2,"0"),te=x.getMinutes().toString().padStart(2,"0"),we=w.getHours().toString().padStart(2,"0"),ce=w.getMinutes().toString().padStart(2,"0");return`${l}:${te} - ${we}:${ce}`},ya=r=>{if(!r||r<=0)return"已结束";const s=Math.floor(r/60),x=r%60;return s>0?`${s}小时${x}分钟`:`${x}分钟`},Ea=r=>{if(!r||r<=0)return"";r=Math.floor(r);const s=Math.floor(r/1440),x=r%1440,w=Math.floor(x/60),l=x%60;return s>0?w>0?`${s}天${w}小时`:`${s}天`:w>0?l>0?`${w}小时${l}分钟`:`${w}小时`:`${l}分钟`},xt=r=>r?!!(r.rateLimitStatus&&(typeof r.rateLimitStatus=="string"&&r.rateLimitStatus==="limited"||typeof r.rateLimitStatus=="object"&&r.rateLimitStatus.isRateLimited===!0)):!1,ft=r=>{if(!r||!r.rateLimitStatus)return 0;if(typeof r.rateLimitStatus=="object"){const s=r.rateLimitStatus;if(Number.isFinite(s.minutesRemaining))return Math.max(0,Math.ceil(s.minutesRemaining));if(Number.isFinite(s.remainingMinutes))return Math.max(0,Math.ceil(s.remainingMinutes));if(Number.isFinite(s.remainingSeconds))return Math.max(0,Math.ceil(s.remainingSeconds/60));if(s.rateLimitResetAt){const x=new Date(s.rateLimitResetAt).getTime()-Date.now();return x>0?Math.ceil(x/6e4):0}}if(r.rateLimitUntil){const s=new Date().getTime(),w=new Date(r.rateLimitUntil).getTime()-s;return w>0?Math.ceil(w/6e4):0}return 0},Na=()=>{Ee.value=null,q.value=!0},ma=()=>{q.value=!1,Ee.value=null},Yt=r=>{ut.value=r,We.value=!0},xa=r=>!r||!r.id?[]:se.value.filter(s=>{const x=r.id;return s.claudeAccountId===x||s.claudeConsoleAccountId===x||s.geminiAccountId===x||s.openaiAccountId===x||s.azureOpenaiAccountId===x||s.openaiAccountId===`responses:${x}`||s.geminiAccountId===`api:${x}`}),qa=r=>{switch(r.platform){case"claude":return`/admin/claude-accounts/${r.id}`;case"claude-console":return`/admin/claude-console-accounts/${r.id}`;case"bedrock":return`/admin/bedrock-accounts/${r.id}`;case"openai":return`/admin/openai-accounts/${r.id}`;case"azure_openai":return`/admin/azure-openai-accounts/${r.id}`;case"openai-responses":return`/admin/openai-responses-accounts/${r.id}`;case"ccr":return`/admin/ccr-accounts/${r.id}`;case"gemini":return`/admin/gemini-accounts/${r.id}`;case"droid":return`/admin/droid-accounts/${r.id}`;case"gemini-api":return`/admin/gemini-api-accounts/${r.id}`;default:return null}},fa=async r=>{const s=qa(r);if(!s)return{success:!1,message:"不支持的账户类型"};const x=await Sr(s);return x.success?{success:!0,data:x}:{success:!1,message:x.message||"删除失败"}},Zt=async r=>{const x=xa(r).length;let w=`确定要删除账户 "${r.name}" 吗?`;if(x>0&&(w+=`
|
||
|
||
⚠️ 注意:此账号有 ${x} 个 API Key 绑定。`,w+=`
|
||
删除后,这些 API Key 将自动切换为共享池模式。`),w+=`
|
||
|
||
此操作不可恢复。`,!await A("删除账户",w,"删除","取消"))return;const te=await fa(r);if(te.success){const we=te.data;let ce="账户已成功删除";(we==null?void 0:we.unboundKeys)>0&&(ce+=`,${we.unboundKeys} 个 API Key 已切换为共享池模式`),V(ce,"success"),oe.value=oe.value.filter(Te=>Te!==r.id),rt(),at.value=!1,Oe.value=!1,st.value=!1,lt(),za(!0),ua(!0)}else V(te.message||"删除失败","error")},Wa=async()=>{var ee;if(oe.value.length===0){V("请先选择要删除的账户","warning");return}const r=new Map(k.value.map(fe=>[fe.id,fe])),s=oe.value.map(fe=>r.get(fe)).filter(fe=>!!fe);if(s.length===0){V("选中的账户已不存在","warning"),oe.value=[],rt();return}let x=`确定要删除选中的 ${s.length} 个账户吗?此操作不可恢复。`;const w=s.map(fe=>({account:fe,boundKeys:xa(fe)})).filter(fe=>fe.boundKeys.length>0);if(w.length>0&&(x+=`
|
||
|
||
⚠️ 以下账户存在绑定的 API Key,将自动解绑:`,w.forEach(({account:fe,boundKeys:Ae})=>{const ue=fe.name||fe.email||fe.accountName||fe.id;x+=`
|
||
- ${ue}: ${Ae.length} 个`}),x+=`
|
||
删除后,这些 API Key 将切换为共享池模式。`),x+=`
|
||
|
||
请再次确认是否继续。`,!await A("批量删除账户",x,"删除","取消"))return;let te=0,we=0,ce=0;const Te=[];for(const fe of s){const Ae=await fa(fe);Ae.success?(te+=1,ce+=((ee=Ae.data)==null?void 0:ee.unboundKeys)||0):(we+=1,Te.push({name:fe.name||fe.email||fe.accountName||fe.id,message:Ae.message||"删除失败"}))}if(te>0){let fe=`成功删除 ${te} 个账户`;ce>0&&(fe+=`,${ce} 个 API Key 已切换为共享池模式`),V(fe,we>0?"warning":"success"),oe.value=[],he.value=!1,W.value=!1,at.value=!1,Oe.value=!1,await lt(!0)}if(we>0){const fe=Te.map(Ae=>`${Ae.name}: ${Ae.message}`).join(`
|
||
`);V(`有 ${we} 个账户删除失败:
|
||
${fe}`,te>0?"warning":"error")}rt()},ba=async r=>{if(!(r.isResetting||!await A("重置账户状态","确定要重置此账户的所有异常状态吗?这将清除限流状态、401错误计数等所有异常标记。","确定重置","取消")))try{r.isResetting=!0;let x="";if(r.platform==="openai")x=`/admin/openai-accounts/${r.id}/reset-status`;else if(r.platform==="openai-responses")x=`/admin/openai-responses-accounts/${r.id}/reset-status`;else if(r.platform==="claude")x=`/admin/claude-accounts/${r.id}/reset-status`;else if(r.platform==="claude-console")x=`/admin/claude-console-accounts/${r.id}/reset-status`;else if(r.platform==="ccr")x=`/admin/ccr-accounts/${r.id}/reset-status`;else if(r.platform==="droid")x=`/admin/droid-accounts/${r.id}/reset-status`;else if(r.platform==="gemini-api")x=`/admin/gemini-api-accounts/${r.id}/reset-status`;else if(r.platform==="gemini")x=`/admin/gemini-accounts/${r.id}/reset-status`;else{V("不支持的账户类型","error"),r.isResetting=!1;return}const w=await Hs(x);w.success?(V("账户状态已重置","success"),lt(!0)):V(w.message||"状态重置失败","error"),r.isResetting=!1}catch(x){V(x.message||"状态重置失败","error"),r.isResetting=!1}},Xt=async r=>{if(r.isTogglingSchedulable)return;r.isTogglingSchedulable=!0;let s;if(r.platform==="claude")s=`/admin/claude-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="claude-console")s=`/admin/claude-console-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="bedrock")s=`/admin/bedrock-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini")s=`/admin/gemini-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai")s=`/admin/openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="azure_openai")s=`/admin/azure-openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai-responses")s=`/admin/openai-responses-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="ccr")s=`/admin/ccr-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="droid")s=`/admin/droid-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini-api")s=`/admin/gemini-api-accounts/${r.id}/toggle-schedulable`;else{V("该账户类型暂不支持调度控制","warning"),r.isTogglingSchedulable=!1;return}const x=await Kr(s);x.success?(r.schedulable=x.schedulable,V(x.schedulable?"已启用调度":"已禁用调度","success")):V(x.message||"操作失败","error"),r.isTogglingSchedulable=!1},d=()=>{q.value=!1,V("账户创建成功","success"),La(),lt()},t=()=>{We.value=!1,V("账户更新成功","success"),at.value=!1,lt()},ie=r=>!r.lastRefreshAt||r.lastRefreshAt===""?"Setup":"OAuth",ye=()=>"OAuth",i=()=>"OAuth",pe=r=>{if(!r||typeof r!="object")return"OAuth";const s=r.isApiKeyMode??r.is_api_key_mode??r.apiKeyMode??r.api_key_mode;if(s===!0||s==="true"||s===1||s==="1")return"API Key";const x=r.authenticationMethod||r.authMethod||r.authentication_mode||r.authenticationMode||r.authentication_method||r.auth_type||r.authType||r.authentication_type||r.authenticationType||r.droidAuthType||r.droidAuthenticationMethod||r.method||r.auth||"";return typeof x=="string"&&x.trim().toLowerCase().replace(/[\s_-]/g,"")==="apikey"?"API Key":"OAuth"},me=r=>pe(r)==="API Key",qe=r=>{if(!r||typeof r!="object")return 0;if(Array.isArray(r.apiKeys))return r.apiKeys.filter(x=>x.status!=="error").length;if(typeof r.apiKeys=="string"&&r.apiKeys.trim())try{const x=JSON.parse(r.apiKeys);if(Array.isArray(x))return x.filter(w=>w.status!=="error").length}catch{}const s=[r.apiKeyCount,r.api_key_count,r.apiKeysCount,r.api_keys_count];for(const x of s){const w=Number(x);if(Number.isFinite(w)&&w>=0)return w}return 0},He=r=>{const s=qe(r),x="ml-1 inline-flex items-center gap-1 rounded-md border px-1.5 py-[1px] text-[10px] font-medium shadow-sm backdrop-blur-sm";return s>0?[x,"border-cyan-200 bg-cyan-50/90 text-cyan-700 dark:border-cyan-500/40 dark:bg-cyan-900/40 dark:text-cyan-200"]:[x,"border-rose-200 bg-rose-50/90 text-rose-600 dark:border-rose-500/40 dark:bg-rose-900/40 dark:text-rose-200"]},Le=r=>{if(r.subscriptionInfo)try{const s=typeof r.subscriptionInfo=="string"?JSON.parse(r.subscriptionInfo):r.subscriptionInfo;return s.hasClaudeMax===!0?"Claude Max":s.hasClaudePro===!0?"Claude Pro":"Claude Free"}catch{return"Claude"}return"Claude"},S=r=>{if(r.schedulable!==!1)return null;if(r.platform==="claude-console"){if(r.status==="unauthorized")return"API Key无效或已过期(401错误)";if(r.overloadStatus==="overloaded")return"服务过载(529错误)";if(r.rateLimitStatus==="limited")return"触发限流(429错误)";if(r.status==="blocked"&&r.errorMessage)return r.errorMessage}if(r.platform==="claude"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.status==="temp_error"&&r.errorMessage||r.status==="error"&&r.errorMessage)return r.errorMessage;if(r.isRateLimited)return"触发限流(429错误)";if(r.stoppedReason)return r.stoppedReason;if(r.fiveHourAutoStopped==="true"||r.fiveHourAutoStopped===!0)return"5小时使用量接近限制,已自动停止调度"}if(r.platform==="openai"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.isRateLimited)return"触发限流(429错误)";if(r.status==="error"&&r.errorMessage)return r.errorMessage}if(r.platform==="openai-responses"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.isRateLimited)return"触发限流(429错误)";if(r.status==="error"&&r.errorMessage)return r.errorMessage;if(r.status==="rateLimited")return"触发限流(429错误)"}return r.stoppedReason?r.stoppedReason:r.errorMessage?r.errorMessage:"手动停止调度"},L=r=>r.status==="blocked"?"已封锁":r.status==="unauthorized"?"异常":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"?"限流中":r.status==="temp_error"?"临时异常":r.status==="error"||!r.isActive?"错误":r.schedulable===!1?"已暂停":"正常",$e=r=>r.status==="blocked"||r.status==="unauthorized"?"bg-red-100 text-red-800":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"||r.status==="temp_error"?"bg-orange-100 text-orange-800":r.status==="error"||!r.isActive?"bg-red-100 text-red-800":r.schedulable===!1?"bg-gray-100 text-gray-800":"bg-green-100 text-green-800",J=r=>r.status==="blocked"||r.status==="unauthorized"?"bg-red-500":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"||r.status==="temp_error"?"bg-orange-500":r.status==="error"||!r.isActive?"bg-red-500":r.schedulable===!1?"bg-gray-500":"bg-green-500",Se=(r,s=null)=>{if(!r)return"bg-gradient-to-r from-blue-500 to-indigo-600";if(s&&(s.isRateLimited||s.status==="rate_limited"||s.rateLimitStatus&&s.rateLimitStatus.isRateLimited||s.rateLimitStatus==="limited"))return"bg-gradient-to-r from-red-500 to-red-600";const w=String(r).toLowerCase();return w==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":w==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-600"},Me=r=>r.authType==="oauth",Pe=r=>!r||r.utilization===null||r.utilization===void 0?"-":`${r.utilization}%`,Ue=r=>!r||r.utilization===null||r.utilization===void 0?"0%":`${r.utilization}%`,et=r=>{const s=(r==null?void 0:r.utilization)||0;return s<60?"bg-gradient-to-r from-blue-500 to-indigo-600":s<90?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-red-500 to-red-600"},tt=r=>{if(!r||!r.remainingSeconds)return"-";const s=r.remainingSeconds,x=Math.floor(s/86400),w=Math.floor(s%86400/3600),l=Math.floor(s%3600/60);return x>0?w>0?`${x}天${w}小时`:`${x}天`:w>0?l>0?`${w}小时${l}分钟`:`${w}小时`:l>0?`${l}分钟`:`${Math.floor(s%60)}秒`},bt=r=>{if(!r)return null;const s=typeof r.usedPercent=="number"&&!Number.isNaN(r.usedPercent)?r.usedPercent:null,x=typeof r.resetAfterSeconds=="number"&&!Number.isNaN(r.resetAfterSeconds)?r.resetAfterSeconds:null,w=typeof r.remainingSeconds=="number"?r.remainingSeconds:null,l=r.resetAt?Date.parse(r.resetAt):null;return x!==null&&(w!==null&&w<=0||l!==null&&!Number.isNaN(l)&&Date.now()>=l)?0:s===null?null:Math.max(0,Math.min(100,s))},ea=r=>{const s=bt(r);return s===null?"bg-gradient-to-r from-gray-300 to-gray-400":s>=90?"bg-gradient-to-r from-red-500 to-red-600":s>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},Ot=r=>{const s=bt(r);return s===null?"--":`${s.toFixed(1)}%`},ta=r=>{const s=bt(r);return s===null?"0%":`${s}%`},aa=r=>r==="secondary"?"周限":"5h",St=r=>{if(!r)return"--";let s=r.remainingSeconds;if(s==null&&(s=r.resetAfterSeconds),s==null||Number.isNaN(Number(s)))return"--";s=Math.max(0,Math.floor(Number(s)));const x=Math.floor(s/86400),w=Math.floor(s%86400/3600),l=Math.floor(s%3600/60),te=s%60;return x>0?w>0?`${x}天${w}小时`:`${x}天`:w>0?l>0?`${w}小时${l}分钟`:`${w}小时`:l>0?`${l}分钟`:`${te}秒`},Ba=r=>!r||r===0?"0.0000":r<1e-4?r.toExponential(2):r<.01?r.toFixed(6):r<1?r.toFixed(4):r.toFixed(2),Za=r=>{var w,l;const s=Number(((l=(w=r==null?void 0:r.usage)==null?void 0:w.daily)==null?void 0:l.cost)||0),x=Number((r==null?void 0:r.dailyQuota)||0);return!x||x<=0?0:s/x*100},Vr=r=>r>=90?"bg-red-500":r>=70?"bg-yellow-500":"bg-green-500",Xa=r=>{const s=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!s||s<=0)return 0;const x=Number((r==null?void 0:r.activeTaskCount)||0);return Math.min(100,x/s*100)},zr=r=>r>=100?"bg-red-500":r>=80?"bg-yellow-500":"bg-green-500",Lr=r=>{const s=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!s||s<=0)return"text-gray-500 dark:text-gray-400";const x=Number((r==null?void 0:r.activeTaskCount)||0);return x>=s?"text-red-600 dark:text-red-400":x>=s*.8?"text-yellow-600 dark:text-yellow-400":"text-gray-700 dark:text-gray-200"},Rr=r=>{var w,l;const s=Number(((l=(w=r==null?void 0:r.usage)==null?void 0:w.daily)==null?void 0:l.cost)||0),x=Number((r==null?void 0:r.dailyQuota)||0);return!x||x<=0?"0.00":Math.max(0,x-s).toFixed(2)},lr=r=>!r.usage||!r.usage.daily?"0.0000":r.usage.daily.cost!==void 0?Ba(r.usage.daily.cost):"0.0000";ve(p,()=>{ae.value=1,rt()}),ve(le,r=>{localStorage.setItem(vr,r.toString()),rt()}),ve(()=>yt.value.length,()=>{ae.value>De.value&&(ae.value=De.value||1),rt()}),ve(ae,()=>{rt()}),ve(pt,()=>{rt(),ar(()=>{va()})}),ve(k,()=>{da()});const or=r=>r?new Date(r).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit"}):"",Or=r=>r?new Date(r)<new Date:!1,Er=r=>{if(!r)return!1;const s=new Date,w=(new Date(r)-s)/(1e3*60*60*24);return w>0&&w<=7},Ga=r=>{Ke.value=r},nr=()=>{Ke.value=null},Nr=async({accountId:r,expiresAt:s})=>{try{const x=k.value.find(te=>te.id===r);if(!x){V("未找到账户","error");return}let w="";switch(x.platform){case"claude":case"claude-oauth":w=`/admin/claude-accounts/${r}`;break;case"gemini":w=`/admin/gemini-accounts/${r}`;break;case"claude-console":w=`/admin/claude-console-accounts/${r}`;break;case"bedrock":w=`/admin/bedrock-accounts/${r}`;break;case"ccr":w=`/admin/ccr-accounts/${r}`;break;case"openai":w=`/admin/openai-accounts/${r}`;break;case"droid":w=`/admin/droid-accounts/${r}`;break;case"azure_openai":w=`/admin/azure-openai-accounts/${r}`;break;case"openai-responses":w=`/admin/openai-responses-accounts/${r}`;break;default:V(`不支持的平台类型: ${x.platform}`,"error");return}const l=await Zs(w,{expiresAt:s||null});l.success?(V("账户到期时间已更新","success"),x.expiresAt=s||null,nr()):(V(l.message||"更新失败","error"),Fe.value&&Fe.value.resetSaving())}catch(x){V(x.message||"更新失败","error"),Fe.value&&Fe.value.resetSaving()}},va=()=>{ne.value&&(Re.value=ne.value.scrollWidth>ne.value.clientWidth)};let Fa=null;return ra(()=>{lt(!0),ar(()=>{ne.value&&(Fa=new ResizeObserver(()=>{va()}),Fa.observe(ne.value),va())}),window.addEventListener("resize",va)}),Ha(()=>{Fa&&Fa.disconnect(),window.removeEventListener("resize",va)}),(r,s)=>{const x=Wr,w=kr;return o(),n("div",mb,[e("div",xb,[e("div",fb,[s[45]||(s[45]=e("div",null,[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"}," 管理 Claude、Gemini、OpenAI 等账户与代理配置 ")],-1)),e("div",bb,[e("div",vb,[e("div",kb,[s[29]||(s[29]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-indigo-500 to-blue-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ve(Qa,{modelValue:Y.value,"onUpdate:modelValue":s[0]||(s[0]=l=>Y.value=l),icon:M.value==="asc"?"fa-sort-amount-up":"fa-sort-amount-down","icon-color":"text-indigo-500",options:Pt.value,placeholder:"选择排序",onChange:Pa},null,8,["modelValue","icon","options"])]),e("div",hb,[s[30]||(s[30]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ve(Qa,{modelValue:R.value,"onUpdate:modelValue":s[1]||(s[1]=l=>R.value=l),icon:"fa-server","icon-color":"text-blue-500",options:ct.value,placeholder:"选择平台",onChange:Ra},null,8,["modelValue","options"])]),e("div",wb,[s[31]||(s[31]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ve(Qa,{modelValue:E.value,"onUpdate:modelValue":s[2]||(s[2]=l=>E.value=l),icon:"fa-layer-group","icon-color":"text-purple-500",options:wt.value,placeholder:"选择分组",onChange:Oa},null,8,["modelValue","options"])]),e("div",$b,[s[32]||(s[32]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-emerald-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ve(Qa,{modelValue:y.value,"onUpdate:modelValue":s[3]||(s[3]=l=>y.value=l),icon:"fa-check-circle","icon-color":"text-green-500",options:Vt.value,placeholder:"选择状态"},null,8,["modelValue","options"])]),e("div",Ab,[s[35]||(s[35]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",Cb,[b(e("input",{"onUpdate:modelValue":s[4]||(s[4]=l=>p.value=l),class:"h-10 w-full rounded-lg border border-gray-200 bg-white px-3 pl-9 text-sm text-gray-700 placeholder-gray-400 shadow-sm transition-all duration-200 hover:border-gray-300 focus:border-cyan-500 focus:outline-none focus:ring-2 focus:ring-cyan-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500 dark:hover:border-gray-500",placeholder:"搜索账户名称...",type:"text"},null,512),[[j,p.value]]),s[34]||(s[34]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),p.value?(o(),n("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:Va},s[33]||(s[33]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):m("",!0)])])]),e("div",Tb,[e("div",Ib,[Ve(x,{content:"查看账户统计汇总",effect:"dark",placement:"bottom"},{default:ot(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",onClick:s[5]||(s[5]=l=>U.value=!0)},s[36]||(s[36]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-violet-500 to-purple-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-chart-bar relative text-violet-500"},null,-1),e("span",{class:"relative"},"统计",-1)]))]),_:1})]),e("div",Ub,[Ve(x,{content:"刷新数据 (Ctrl/⌘+点击强制刷新所有缓存)",effect:"dark",placement:"bottom"},{default:ot(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",disabled:P.value,onClick:[s[6]||(s[6]=vt(l=>lt(!0),["ctrl","exact"])),s[7]||(s[7]=vt(l=>lt(!1),["exact"])),s[8]||(s[8]=vt(l=>lt(!0),["meta","exact"]))]},[s[37]||(s[37]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:$(["fas relative text-green-500",P.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),s[38]||(s[38]=e("span",{class:"relative"},"刷新",-1))],8,_b)]),_:1})]),e("div",Kb,[Ve(x,{content:Ua.value,effect:"dark",placement:"bottom"},{default:ot(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",disabled:P.value||O.value||!na.value,onClick:_a},[s[39]||(s[39]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:$(["fas relative text-blue-500",O.value?"fa-spinner fa-spin":"fa-wallet"])},null,2),s[40]||(s[40]=e("span",{class:"relative"},"刷新余额",-1))],8,Sb)]),_:1},8,["content"])]),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 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:Sa},[e("i",{class:$(Q.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,u(Q.value?"取消选择":"选择"),1)]),e("div",Mb,[Ve(x,{content:"管理账户分组",effect:"dark",placement:"bottom"},{default:ot(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",onClick:s[9]||(s[9]=l=>re.value=!0)},s[41]||(s[41]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-layer-group relative text-purple-500"},null,-1),e("span",{class:"relative"},"分组",-1)]))]),_:1})]),oe.value.length>0?(o(),n("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:Wa},[s[42]||(s[42]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),s[43]||(s[43]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",Db,"删除选中 ("+u(oe.value.length)+")",1)])):m("",!0),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-green-500 to-green-600 px-5 py-2.5 text-sm font-medium text-white shadow-md transition-all duration-200 hover:from-green-600 hover:to-green-700 hover:shadow-lg sm:w-auto",onClick:vt(Na,["stop"])},s[44]||(s[44]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"添加账户",-1)]))])])]),P.value?(o(),n("div",Pb,s[46]||(s[46]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载账户...",-1)]))):yt.value.length===0?(o(),n("div",jb,s[47]||(s[47]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-user-circle text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无账户",-1),e("p",{class:"mt-2 text-sm text-gray-400 dark:text-gray-500"},"点击上方按钮添加您的第一个账户",-1)]))):(o(),n("div",Vb,[e("div",{ref_key:"tableContainerRef",ref:ne,class:"table-container"},[e("table",zb,[e("thead",Lb,[e("tr",null,[B.value?(o(),n("th",Rb,[e("div",Ob,[b(e("input",{"onUpdate:modelValue":s[10]||(s[10]=l=>he.value=l),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:W.value,type:"checkbox",onChange:Ka},null,40,Eb),[[je,he.value]])])])):m("",!0),e("th",{class:$(["name-column sticky z-20 min-w-[180px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",B.value?"left-[50px]":"left-0"]),onClick:s[11]||(s[11]=l=>Kt("name"))},[s[48]||(s[48]=f(" 名称 ",-1)),Y.value==="name"?(o(),n("i",{key:0,class:$(["fas",M.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Nb))],2),e("th",{class:"min-w-[220px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[12]||(s[12]=l=>Kt("platform"))},[s[49]||(s[49]=f(" 平台/类型 ",-1)),Y.value==="platform"?(o(),n("i",{key:0,class:$(["fas",M.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",qb))]),e("th",{class:"w-[120px] min-w-[180px] max-w-[200px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[13]||(s[13]=l=>Kt("status"))},[s[50]||(s[50]=f(" 状态 ",-1)),Y.value==="status"?(o(),n("i",{key:0,class:$(["fas",M.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Wb))]),s[56]||(s[56]=e("th",{class:"min-w-[150px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 今日使用 ",-1)),s[57]||(s[57]=e("th",{class:"min-w-[220px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 余额/配额 ",-1)),e("th",Bb,[e("div",Gb,[s[53]||(s[53]=e("span",null,"会话窗口",-1)),Ve(x,{placement:"top"},{content:ot(()=>s[51]||(s[51]=[e("div",{class:"w-[260px] space-y-3 text-xs leading-relaxed text-white dark:text-gray-800"},[e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude 系列 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 会话窗口进度表示 5 小时窗口的时间推移,颜色提示当前调度状态。 "),e("div",{class:"space-y-1 pt-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-blue-500 to-indigo-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"正常:请求正常处理")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-yellow-500 to-orange-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"警告:接近限制")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-red-500 to-red-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"拒绝:达到速率限制")])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," OpenAI "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 进度条分别展示 5h 与周限窗口的额度使用比例,颜色含义与上方保持一致。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时使用量进度,到达重置时间后会自动归零。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-history mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"周限窗口:7天使用量进度,重置时同样回到 0%。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},'当"重置剩余"为 0 时,进度条与百分比会同步清零。')])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude OAuth 账户 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 展示三个窗口的使用率(utilization百分比),颜色含义同上。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时滑动窗口的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-calendar-alt mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"7d 窗口:7天总限额的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-gem mt-[2px] text-[10px] text-purple-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"Sonnet窗口:7天Sonnet模型专用限额。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-sync-alt mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"到达重置时间后自动归零。")])])])],-1)])),default:ot(()=>[s[52]||(s[52]=e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400"},null,-1))]),_:1,__:[52]})])]),s[58]||(s[58]=e("th",{class:"min-w-[80px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),e("th",{class:"min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[14]||(s[14]=l=>Kt("priority"))},[s[54]||(s[54]=f(" 优先级 ",-1)),Y.value==="priority"?(o(),n("i",{key:0,class:$(["fas",M.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Fb))]),s[59]||(s[59]=e("th",{class:"min-w-[150px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 代理 ",-1)),e("th",{class:"min-w-[110px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[15]||(s[15]=l=>Kt("expiresAt"))},[s[55]||(s[55]=f(" 到期时间 ",-1)),Y.value==="expiresAt"?(o(),n("i",{key:0,class:$(["fas",M.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Qb))]),e("th",{class:$(["operations-column sticky right-0 z-20 px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300",Re.value?"min-w-[170px]":"min-w-[200px]"])}," 操作 ",2)])]),e("tbody",Hb,[(o(!0),n(ke,null,Ne(pt.value,l=>{var te,we;return o(),n("tr",{key:l.id,class:"table-row"},[B.value?(o(),n("td",Jb,[e("div",Yb,[b(e("input",{"onUpdate:modelValue":s[16]||(s[16]=ce=>oe.value=ce),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:rt},null,40,Zb),[[je,oe.value]])])])):m("",!0),e("td",{class:$(["name-column sticky z-10 px-3 py-4",B.value?"left-[50px]":"left-0"])},[e("div",Xb,[s[64]||(s[64]=e("div",{class:"mr-2 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-user-circle text-xs text-white"})],-1)),e("div",ev,[e("div",tv,[e("div",{class:"cursor-pointer truncate text-sm font-semibold text-gray-900 hover:text-blue-600 dark:text-gray-100 dark:hover:text-blue-400",title:"点击复制",onClick:vt(ce=>Ye(cr)(l.name),["stop"])},u(l.name),9,av),l.accountType==="dedicated"?(o(),n("span",rv,s[60]||(s[60]=[e("i",{class:"fas fa-lock mr-1"},null,-1),f("专属 ",-1)]))):l.accountType==="group"?(o(),n("span",sv,s[61]||(s[61]=[e("i",{class:"fas fa-layer-group mr-1"},null,-1),f("分组调度 ",-1)]))):(o(),n("span",lv,s[62]||(s[62]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),f("共享 ",-1)])))]),l.groupInfos&&l.groupInfos.length>0?(o(),n("div",ov,[(o(!0),n(ke,null,Ne(l.groupInfos,ce=>(o(),n("span",{key:ce.id,class:"inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-600 dark:bg-gray-700 dark:text-gray-400",title:`所属分组: ${ce.name}`},[s[63]||(s[63]=e("i",{class:"fas fa-folder mr-1"},null,-1)),f(u(ce.name),1)],8,nv))),128))])):m("",!0),e("div",{class:"truncate text-xs text-gray-500 dark:text-gray-400",title:l.id},u(l.id),9,iv)])])],2),e("td",dv,[e("div",uv,[l.platform==="gemini"?(o(),n("div",pv,[s[65]||(s[65]=e("i",{class:"fas fa-robot text-xs text-yellow-700"},null,-1)),s[66]||(s[66]=e("span",{class:"text-xs font-semibold text-yellow-800"},"Gemini",-1)),s[67]||(s[67]=e("span",{class:"mx-1 h-4 w-px bg-yellow-300"},null,-1)),e("span",gv,u(ye()),1)])):l.platform==="claude-console"?(o(),n("div",cv,s[68]||(s[68]=[e("i",{class:"fas fa-terminal text-xs text-purple-700"},null,-1),e("span",{class:"text-xs font-semibold text-purple-800"},"Console",-1),e("span",{class:"mx-1 h-4 w-px bg-purple-300"},null,-1),e("span",{class:"text-xs font-medium text-purple-700"},"API Key",-1)]))):l.platform==="bedrock"?(o(),n("div",yv,s[69]||(s[69]=[e("i",{class:"fab fa-aws text-xs text-orange-700"},null,-1),e("span",{class:"text-xs font-semibold text-orange-800"},"Bedrock",-1),e("span",{class:"mx-1 h-4 w-px bg-orange-300"},null,-1),e("span",{class:"text-xs font-medium text-orange-700"},"AWS",-1)]))):l.platform==="openai"?(o(),n("div",mv,[s[70]||(s[70]=e("div",{class:"fa-openai"},null,-1)),s[71]||(s[71]=e("span",{class:"text-xs font-semibold text-gray-950"},"OpenAi",-1)),s[72]||(s[72]=e("span",{class:"mx-1 h-4 w-px bg-gray-400"},null,-1)),e("span",xv,u(i()),1)])):l.platform==="azure_openai"?(o(),n("div",fv,s[73]||(s[73]=[e("i",{class:"fab fa-microsoft text-xs text-blue-700 dark:text-blue-400"},null,-1),e("span",{class:"text-xs font-semibold text-blue-800 dark:text-blue-300"},"Azure OpenAI",-1),e("span",{class:"mx-1 h-4 w-px bg-blue-300 dark:bg-blue-600"},null,-1),e("span",{class:"text-xs font-medium text-blue-700 dark:text-blue-400"},"API Key",-1)]))):l.platform==="openai-responses"?(o(),n("div",bv,s[74]||(s[74]=[e("i",{class:"fas fa-server text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"OpenAI-Api",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-400"},"API Key",-1)]))):l.platform==="claude"||l.platform==="claude-oauth"?(o(),n("div",vv,[s[75]||(s[75]=e("i",{class:"fas fa-brain text-xs text-indigo-700"},null,-1)),e("span",kv,u(Le(l)),1),s[76]||(s[76]=e("span",{class:"mx-1 h-4 w-px bg-indigo-300"},null,-1)),e("span",hv,u(ie(l)),1)])):l.platform==="ccr"?(o(),n("div",wv,s[77]||(s[77]=[e("i",{class:"fas fa-code-branch text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"CCR",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-300"},"Relay",-1)]))):l.platform==="droid"?(o(),n("div",$v,[s[79]||(s[79]=e("i",{class:"fas fa-robot text-xs text-cyan-700 dark:text-cyan-400"},null,-1)),s[80]||(s[80]=e("span",{class:"text-xs font-semibold text-cyan-800 dark:text-cyan-300"},"Droid",-1)),s[81]||(s[81]=e("span",{class:"mx-1 h-4 w-px bg-cyan-300 dark:bg-cyan-600"},null,-1)),e("span",Av,u(pe(l)),1),me(l)?(o(),n("span",{key:0,class:$(He(l))},[s[78]||(s[78]=e("i",{class:"fas fa-key text-[9px]"},null,-1)),e("span",null,"x"+u(qe(l)),1)],2)):m("",!0)])):l.platform==="gemini-api"?(o(),n("div",Cv,s[82]||(s[82]=[e("i",{class:"fas fa-robot text-xs text-amber-700 dark:text-amber-400"},null,-1),e("span",{class:"text-xs font-semibold text-amber-800 dark:text-amber-300"},"Gemini-API",-1),e("span",{class:"mx-1 h-4 w-px bg-amber-300 dark:bg-amber-600"},null,-1),e("span",{class:"text-xs font-medium text-amber-700 dark:text-amber-400"},"API Key",-1)]))):(o(),n("div",Tv,s[83]||(s[83]=[e("i",{class:"fas fa-question text-xs text-gray-700"},null,-1),e("span",{class:"text-xs font-semibold text-gray-800"},"未知",-1)])))])]),e("td",Iv,[e("div",Uv,[e("span",{class:$(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",l.status==="blocked"?"bg-orange-100 text-orange-800":l.status==="unauthorized"?"bg-red-100 text-red-800":l.status==="temp_error"?"bg-orange-100 text-orange-800":l.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},[e("div",{class:$(["mr-2 h-2 w-2 rounded-full",l.status==="blocked"?"bg-orange-500":l.status==="unauthorized"?"bg-red-500":l.status==="temp_error"?"bg-orange-500":l.isActive?"bg-green-500":"bg-red-500"])},null,2),f(" "+u(l.status==="blocked"?"已封锁":l.status==="unauthorized"?"异常":l.status==="temp_error"?"临时异常":l.isActive?"正常":"异常"),1)],2),l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"?(o(),n("span",_v,[s[84]||(s[84]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),s[85]||(s[85]=f(" 限流中 ",-1)),l.rateLimitStatus&&typeof l.rateLimitStatus=="object"&&l.rateLimitStatus.minutesRemaining>0?(o(),n("span",Kv,"("+u(Ea(l.rateLimitStatus.minutesRemaining))+")",1)):m("",!0)])):m("",!0),l.schedulable===!1?(o(),n("span",Sv,[s[87]||(s[87]=e("i",{class:"fas fa-pause-circle mr-1"},null,-1)),s[88]||(s[88]=f(" 不可调度 ",-1)),S(l)?(o(),Xe(x,{key:0,content:S(l),effect:"dark",placement:"top"},{default:ot(()=>s[86]||(s[86]=[e("i",{class:"fas fa-question-circle ml-1 cursor-help text-gray-500"},null,-1)])),_:2,__:[86]},1032,["content"])):m("",!0)])):m("",!0),l.status==="blocked"&&l.errorMessage?(o(),n("span",{key:2,class:"mt-1 max-w-xs truncate text-xs text-gray-500 dark:text-gray-400",title:l.errorMessage},u(l.errorMessage),9,Mv)):m("",!0),l.accountType==="dedicated"?(o(),n("span",Dv," 绑定: "+u(l.boundApiKeysCount||0)+" 个API Key ",1)):m("",!0)])]),e("td",Pv,[l.usage&&l.usage.daily?(o(),n("div",jv,[e("div",Vv,[s[89]||(s[89]=e("div",{class:"h-2 w-2 rounded-full bg-blue-500"},null,-1)),e("span",zv,u(l.usage.daily.requests||0)+" 次",1)]),e("div",Lv,[s[90]||(s[90]=e("div",{class:"h-2 w-2 rounded-full bg-purple-500"},null,-1)),e("span",Rv,u(Ye(Je)(l.usage.daily.allTokens||0)),1)]),e("div",Ov,[s[91]||(s[91]=e("div",{class:"h-2 w-2 rounded-full bg-green-500"},null,-1)),e("span",Ev,"$"+u(lr(l)),1)]),l.usage.averages&&l.usage.averages.rpm>0?(o(),n("div",Nv," 平均 "+u(l.usage.averages.rpm.toFixed(2))+" RPM ",1)):m("",!0)])):(o(),n("div",qv,"暂无数据"))]),e("td",Wv,[Ve(fr,{"account-id":l.id,"initial-balance":l.balanceInfo,platform:l.platform,"query-mode":l.platform==="gemini"&&l.oauthProvider==="antigravity"?"auto":"local",onError:ce=>ia(l.id,ce),onRefreshed:ce=>Qt(l.id,ce)},null,8,["account-id","initial-balance","platform","query-mode","onError","onRefreshed"]),e("div",Bv,[l.platform==="gemini"&&l.oauthProvider==="antigravity"?m("",!0):(o(),n("button",{key:0,class:"text-blue-500 hover:underline dark:text-blue-300",onClick:ce=>$a(l)}," 配置余额脚本 ",8,Gv))])]),e("td",Fv,[l.platform==="claude"?(o(),n("div",Qv,[Me(l)&&l.claudeUsage?(o(),n("div",Hv,[e("div",Jv,[e("div",Yv,[s[92]||(s[92]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"}," 5h ",-1)),e("div",Zv,[e("div",Xv,[e("div",e1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.fiveHour)]),style:Ze({width:Ue(l.claudeUsage.fiveHour)})},null,6)]),e("span",t1,u(Pe(l.claudeUsage.fiveHour)),1)])])]),e("div",a1," 重置剩余 "+u(tt(l.claudeUsage.fiveHour)),1)]),e("div",r1,[e("div",s1,[s[93]||(s[93]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-emerald-100 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-300"}," 7d ",-1)),e("div",l1,[e("div",o1,[e("div",n1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.sevenDay)]),style:Ze({width:Ue(l.claudeUsage.sevenDay)})},null,6)]),e("span",i1,u(Pe(l.claudeUsage.sevenDay)),1)])])]),e("div",d1," 重置剩余 "+u(tt(l.claudeUsage.sevenDay)),1)]),e("div",u1,[e("div",p1,[s[94]||(s[94]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-purple-100 px-2 py-0.5 text-[11px] font-medium text-purple-600 dark:bg-purple-500/20 dark:text-purple-300"}," sonnet ",-1)),e("div",g1,[e("div",c1,[e("div",y1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.sevenDayOpus)]),style:Ze({width:Ue(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",m1,u(Pe(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",x1," 重置剩余 "+u(tt(l.claudeUsage.sevenDayOpus)),1)])])):!Me(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",f1,[l.usage&&l.usage.sessionWindow?(o(),n("div",b1,[e("div",v1,[s[95]||(s[95]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("span",k1,u(Ye(Je)(l.usage.sessionWindow.totalTokens)),1)]),e("div",h1,[s[96]||(s[96]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("span",w1," $"+u(Ba(l.usage.sessionWindow.totalCost)),1)])])):m("",!0),e("div",$1,[e("div",A1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",Se(l.sessionWindow.sessionWindowStatus,l)]),style:Ze({width:l.sessionWindow.progress+"%"})},null,6)]),e("span",C1,u(l.sessionWindow.progress)+"% ",1)]),e("div",T1,[e("div",null,u(ca(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("div",I1," 剩余 "+u(ya(l.sessionWindow.remainingTime)),1)):m("",!0)])])):(o(),n("div",U1,"暂无统计"))])):l.platform==="claude-console"?(o(),n("div",_1,[e("div",null,[Number(l.dailyQuota)>0?(o(),n(ke,{key:0},[e("div",K1,[s[97]||(s[97]=e("span",{class:"text-gray-600 dark:text-gray-300"},"额度进度",-1)),e("span",S1,u(Za(l).toFixed(1))+"% ",1)]),e("div",M1,[e("div",D1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",Vr(Za(l))]),style:Ze({width:Math.min(100,Za(l))+"%"})},null,6)]),e("span",P1," $"+u(Ba(((we=(te=l.usage)==null?void 0:te.daily)==null?void 0:we.cost)||0))+" / $"+u(Number(l.dailyQuota).toFixed(2)),1)]),e("div",j1,[f(" 剩余 $"+u(Rr(l))+" ",1),e("span",V1,"重置 "+u(l.quotaResetTime||"00:00"),1)])],64)):(o(),n("div",z1,s[98]||(s[98]=[e("i",{class:"fas fa-minus"},null,-1)])))]),e("div",L1,[e("div",R1,[s[99]||(s[99]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发状态",-1)),Number(l.maxConcurrentTasks||0)>0?(o(),n("span",O1,u(Xa(l).toFixed(0))+"% ",1)):m("",!0)]),Number(l.maxConcurrentTasks||0)>0?(o(),n("div",E1,[e("div",N1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",zr(Xa(l))]),style:Ze({width:Math.min(100,Xa(l))+"%"})},null,6)]),e("span",{class:$(["min-w-[48px] text-xs font-medium",Lr(l)])},u(Number(l.activeTaskCount||0))+" / "+u(Number(l.maxConcurrentTasks||0)),3)])):(o(),n("div",q1,s[100]||(s[100]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),f("并发无限制 ",-1)])))])])):l.platform==="openai"?(o(),n("div",W1,[l.codexUsage?(o(),n("div",B1,[e("div",G1,[e("div",F1,[e("span",Q1,u(aa("primary")),1),e("div",H1,[e("div",J1,[e("div",Y1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.primary)]),style:Ze({width:ta(l.codexUsage.primary)})},null,6)]),e("span",Z1,u(Ot(l.codexUsage.primary)),1)])])]),e("div",X1," 重置剩余 "+u(St(l.codexUsage.primary)),1)]),e("div",ek,[e("div",tk,[e("span",ak,u(aa("secondary")),1),e("div",rk,[e("div",sk,[e("div",lk,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.secondary)]),style:Ze({width:ta(l.codexUsage.secondary)})},null,6)]),e("span",ok,u(Ot(l.codexUsage.secondary)),1)])])]),e("div",nk," 重置剩余 "+u(St(l.codexUsage.secondary)),1)])])):(o(),n("div",ik,s[101]||(s[101]=[e("span",{class:"text-xs"},"N/A",-1)])))])):(o(),n("div",dk,s[102]||(s[102]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",uk,u(ja(l.lastUsedAt)),1),e("td",pk,[l.platform==="claude"||l.platform==="claude-console"||l.platform==="bedrock"||l.platform==="gemini"||l.platform==="openai"||l.platform==="openai-responses"||l.platform==="azure_openai"||l.platform==="ccr"||l.platform==="droid"||l.platform==="gemini-api"?(o(),n("div",gk,[e("div",ck,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-green-500 to-blue-600 transition-all duration-300",style:Ze({width:101-(l.priority||50)+"%"})},null,4)]),e("span",yk,u(l.priority||50),1)])):(o(),n("div",mk,s[103]||(s[103]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",xk,[Jt(l.proxy)?(o(),n("div",{key:0,class:"break-all rounded bg-blue-50 px-2 py-1 font-mono text-xs",title:Jt(l.proxy)},u(Jt(l.proxy)),9,fk)):(o(),n("div",bk,"无代理"))]),e("td",vk,[e("div",kk,[l.expiresAt?(o(),n("span",hk,[Or(l.expiresAt)?(o(),n("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:vt(ce=>Ga(l),["stop"])},s[104]||(s[104]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),f(" 已过期 ",-1)]),8,wk)):Er(l.expiresAt)?(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:vt(ce=>Ga(l),["stop"])},[s[105]||(s[105]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),f(" "+u(or(l.expiresAt)),1)],8,$k)):(o(),n("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:vt(ce=>Ga(l),["stop"])},u(or(l.expiresAt)),9,Ak))])):(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:vt(ce=>Ga(l),["stop"])},s[106]||(s[106]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),f(" 永不过期 ",-1)]),8,Ck))])]),e("td",Tk,[Re.value?(o(),n("div",Vk,[e("button",{class:$(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isTogglingSchedulable?"cursor-not-allowed bg-gray-100 text-gray-400":l.schedulable?"bg-green-100 text-green-700 hover:bg-green-200":"bg-gray-100 text-gray-700 hover:bg-gray-200"]),disabled:l.isTogglingSchedulable,title:l.schedulable?"点击禁用调度":"点击启用调度",onClick:ce=>Xt(l)},[e("i",{class:$(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",Lk,u(l.schedulable?"调度":"停用"),1)],10,zk),e("button",{class:"rounded bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200",title:"编辑账户",onClick:ce=>Yt(l)},s[113]||(s[113]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,Rk),Ve(el,{actions:Lt(l)},null,8,["actions"])])):(o(),n("div",Ik,[zt(l)?(o(),n("button",{key:0,class:$(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isResetting?"cursor-not-allowed bg-gray-100 text-gray-400":"bg-yellow-100 text-yellow-700 hover:bg-yellow-200"]),disabled:l.isResetting,title:l.isResetting?"重置中...":"重置所有异常状态",onClick:ce=>ba(l)},[e("i",{class:$(["fas fa-redo",l.isResetting?"animate-spin":""])},null,2),s[107]||(s[107]=e("span",{class:"ml-1"},"重置状态",-1))],10,Uk)):m("",!0),e("button",{class:$(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isTogglingSchedulable?"cursor-not-allowed bg-gray-100 text-gray-400":l.schedulable?"bg-green-100 text-green-700 hover:bg-green-200":"bg-gray-100 text-gray-700 hover:bg-gray-200"]),disabled:l.isTogglingSchedulable,title:l.schedulable?"点击禁用调度":"点击启用调度",onClick:ce=>Xt(l)},[e("i",{class:$(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",Kk,u(l.schedulable?"调度":"停用"),1)],10,_k),$t(l)?(o(),n("button",{key:1,class:"rounded bg-indigo-100 px-2.5 py-1 text-xs font-medium text-indigo-700 transition-colors hover:bg-indigo-200",title:"查看使用详情",onClick:ce=>It(l)},s[108]||(s[108]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,Sk)):m("",!0),At(l)?(o(),n("button",{key:2,class:"rounded bg-cyan-100 px-2.5 py-1 text-xs font-medium text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/40 dark:text-cyan-300 dark:hover:bg-cyan-800/50",title:"测试账户连通性",onClick:ce=>Ct(l)},s[109]||(s[109]=[e("i",{class:"fas fa-vial"},null,-1),e("span",{class:"ml-1"},"测试",-1)]),8,Mk)):m("",!0),At(l)?(o(),n("button",{key:3,class:"rounded bg-amber-100 px-2.5 py-1 text-xs font-medium text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/40 dark:text-amber-300 dark:hover:bg-amber-800/50",title:"定时测试配置",onClick:ce=>Ut(l)},s[110]||(s[110]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1"},"定时",-1)]),8,Dk)):m("",!0),e("button",{class:"rounded bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200",title:"编辑账户",onClick:ce=>Yt(l)},s[111]||(s[111]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,Pk),e("button",{class:"rounded bg-red-100 px-2.5 py-1 text-xs font-medium text-red-700 transition-colors hover:bg-red-200",title:"删除账户",onClick:ce=>Zt(l)},s[112]||(s[112]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,jk)]))])])}),128))])])],512)])),!P.value&&yt.value.length>0?(o(),n("div",Ok,[(o(!0),n(ke,null,Ne(pt.value,l=>{var te,we,ce,Te;return o(),n("div",{key:l.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",Ek,[e("div",Nk,[B.value?b((o(),n("input",{key:0,"onUpdate:modelValue":s[17]||(s[17]=ee=>oe.value=ee),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:rt},null,40,qk)),[[je,oe.value]]):m("",!0),e("div",{class:$(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg",l.platform==="claude"?"bg-gradient-to-br from-purple-500 to-purple-600":l.platform==="bedrock"?"bg-gradient-to-br from-orange-500 to-red-600":l.platform==="azure_openai"?"bg-gradient-to-br from-blue-500 to-cyan-600":l.platform==="openai"?"bg-gradient-to-br from-gray-600 to-gray-700":l.platform==="ccr"?"bg-gradient-to-br from-teal-500 to-emerald-600":l.platform==="droid"?"bg-gradient-to-br from-cyan-500 to-sky-600":"bg-gradient-to-br from-blue-500 to-blue-600"])},[e("i",{class:$(["text-sm text-white",l.platform==="claude"?"fas fa-brain":l.platform==="bedrock"?"fab fa-aws":l.platform==="azure_openai"?"fab fa-microsoft":l.platform==="openai"?"fas fa-openai":l.platform==="ccr"?"fas fa-code-branch":(l.platform==="droid","fas fa-robot")])},null,2)],2),e("div",null,[e("h4",{class:"cursor-pointer text-sm font-semibold text-gray-900 hover:text-blue-600 dark:hover:text-blue-400",title:"点击复制",onClick:vt(ee=>Ye(cr)(l.name||l.email),["stop"])},u(l.name||l.email),9,Wk),e("div",Bk,[e("span",Gk,u(l.platform),1),s[114]||(s[114]=e("span",{class:"text-xs text-gray-400"},"|",-1)),e("span",Fk,u(l.type),1)])])]),e("span",{class:$(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",$e(l)])},[e("div",{class:$(["mr-1.5 h-1.5 w-1.5 rounded-full",J(l)])},null,2),f(" "+u(L(l)),1)],2)]),e("div",Qk,[e("div",null,[s[118]||(s[118]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"今日使用",-1)),e("div",Hk,[e("div",Jk,[s[115]||(s[115]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-blue-500"},null,-1)),e("p",Yk,u(((we=(te=l.usage)==null?void 0:te.daily)==null?void 0:we.requests)||0)+" 次 ",1)]),e("div",Zk,[s[116]||(s[116]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",Xk,u(Ye(Je)(((Te=(ce=l.usage)==null?void 0:ce.daily)==null?void 0:Te.allTokens)||0)),1)]),e("div",e2,[s[117]||(s[117]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",t2," $"+u(lr(l)),1)])])]),e("div",null,[s[121]||(s[121]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"会话窗口",-1)),l.usage&&l.usage.sessionWindow?(o(),n("div",a2,[e("div",r2,[s[119]||(s[119]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",s2,u(Ye(Je)(l.usage.sessionWindow.totalTokens)),1)]),e("div",l2,[s[120]||(s[120]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",o2," $"+u(Ba(l.usage.sessionWindow.totalCost)),1)])])):(o(),n("div",n2,"-"))])]),e("div",i2,[s[122]||(s[122]=e("p",{class:"mb-1 text-xs text-gray-500 dark:text-gray-400"},"余额/配额",-1)),Ve(fr,{"account-id":l.id,"initial-balance":l.balanceInfo,platform:l.platform,"query-mode":l.platform==="gemini"&&l.oauthProvider==="antigravity"?"auto":"local",onError:ee=>ia(l.id,ee),onRefreshed:ee=>Qt(l.id,ee)},null,8,["account-id","initial-balance","platform","query-mode","onError","onRefreshed"]),e("div",d2,[l.platform==="gemini"&&l.oauthProvider==="antigravity"?m("",!0):(o(),n("button",{key:0,class:"text-blue-500 hover:underline dark:text-blue-300",onClick:ee=>$a(l)}," 配置余额脚本 ",8,u2))])]),e("div",p2,[l.platform==="claude"?(o(),n("div",g2,[Me(l)&&l.claudeUsage?(o(),n("div",c2,[e("div",y2,[e("div",m2,[s[123]||(s[123]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"}," 5h ",-1)),e("div",x2,[e("div",f2,[e("div",b2,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.fiveHour)]),style:Ze({width:Ue(l.claudeUsage.fiveHour)})},null,6)]),e("span",v2,u(Pe(l.claudeUsage.fiveHour)),1)])])]),e("div",k2," 重置剩余 "+u(tt(l.claudeUsage.fiveHour)),1)]),e("div",h2,[e("div",w2,[s[124]||(s[124]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-emerald-100 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-300"}," 7d ",-1)),e("div",$2,[e("div",A2,[e("div",C2,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.sevenDay)]),style:Ze({width:Ue(l.claudeUsage.sevenDay)})},null,6)]),e("span",T2,u(Pe(l.claudeUsage.sevenDay)),1)])])]),e("div",I2," 重置剩余 "+u(tt(l.claudeUsage.sevenDay)),1)]),e("div",U2,[e("div",_2,[s[125]||(s[125]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-purple-100 px-2 py-0.5 text-[11px] font-medium text-purple-600 dark:bg-purple-500/20 dark:text-purple-300"}," Opus ",-1)),e("div",K2,[e("div",S2,[e("div",M2,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.sevenDayOpus)]),style:Ze({width:Ue(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",D2,u(Pe(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",P2," 重置剩余 "+u(tt(l.claudeUsage.sevenDayOpus)),1)])])):!Me(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",j2,[e("div",V2,[e("div",z2,[s[127]||(s[127]=e("span",{class:"font-medium text-gray-600 dark:text-gray-300"},"会话窗口",-1)),Ve(x,{content:"会话窗口进度不代表使用量,仅表示距离下一个5小时窗口的剩余时间",placement:"top"},{default:ot(()=>s[126]||(s[126]=[e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600"},null,-1)])),_:1,__:[126]})]),e("span",L2,u(l.sessionWindow.progress)+"% ",1)]),e("div",R2,[e("div",{class:$(["h-full transition-all duration-300",Se(l.sessionWindow.sessionWindowStatus,l)]),style:Ze({width:l.sessionWindow.progress+"%"})},null,6)]),e("div",O2,[e("span",E2,u(ca(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("span",N2," 剩余 "+u(ya(l.sessionWindow.remainingTime)),1)):(o(),n("span",q2," 已结束 "))])])):(o(),n("div",W2,"暂无统计"))])):l.platform==="openai"?(o(),n("div",B2,[l.codexUsage?(o(),n("div",G2,[e("div",F2,[e("div",Q2,[e("span",H2,u(aa("primary")),1),e("div",J2,[e("div",Y2,[e("div",Z2,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.primary)]),style:Ze({width:ta(l.codexUsage.primary)})},null,6)]),e("span",X2,u(Ot(l.codexUsage.primary)),1)])])]),e("div",e3," 重置剩余 "+u(St(l.codexUsage.primary)),1)]),e("div",t3,[e("div",a3,[e("span",r3,u(aa("secondary")),1),e("div",s3,[e("div",l3,[e("div",o3,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.secondary)]),style:Ze({width:ta(l.codexUsage.secondary)})},null,6)]),e("span",n3,u(Ot(l.codexUsage.secondary)),1)])])]),e("div",i3," 重置剩余 "+u(St(l.codexUsage.secondary)),1)])])):m("",!0),l.codexUsage?m("",!0):(o(),n("div",d3,"暂无统计"))])):m("",!0),e("div",u3,[s[128]||(s[128]=e("span",{class:"text-gray-500 dark:text-gray-400"},"最后使用",-1)),e("span",p3,u(l.lastUsedAt?Ye(Qs)(l.lastUsedAt):"从未使用"),1)]),l.proxyConfig&&l.proxyConfig.type!=="none"?(o(),n("div",g3,[s[129]||(s[129]=e("span",{class:"text-gray-500 dark:text-gray-400"},"代理",-1)),e("span",c3,u(l.proxyConfig.type.toUpperCase()),1)])):m("",!0),e("div",y3,[s[130]||(s[130]=e("span",{class:"text-gray-500 dark:text-gray-400"},"优先级",-1)),e("span",m3,u(l.priority||50),1)])]),e("div",x3,[e("button",{class:$(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs transition-colors",l.schedulable?"bg-gray-50 text-gray-600 hover:bg-gray-100":"bg-green-50 text-green-600 hover:bg-green-100"]),disabled:l.isTogglingSchedulable,onClick:ee=>Xt(l)},[e("i",{class:$(["fas",l.schedulable?"fa-pause":"fa-play"])},null,2),f(" "+u(l.schedulable?"暂停":"启用"),1)],10,f3),$t(l)?(o(),n("button",{key:0,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-indigo-50 px-3 py-2 text-xs text-indigo-600 transition-colors hover:bg-indigo-100",onClick:ee=>It(l)},s[131]||(s[131]=[e("i",{class:"fas fa-chart-line"},null,-1),f(" 详情 ",-1)]),8,b3)):m("",!0),At(l)?(o(),n("button",{key:1,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-cyan-50 px-3 py-2 text-xs text-cyan-600 transition-colors hover:bg-cyan-100 dark:bg-cyan-900/40 dark:text-cyan-300 dark:hover:bg-cyan-800/50",onClick:ee=>Ct(l)},s[132]||(s[132]=[e("i",{class:"fas fa-vial"},null,-1),f(" 测试 ",-1)]),8,v3)):m("",!0),At(l)?(o(),n("button",{key:2,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-amber-50 px-3 py-2 text-xs text-amber-600 transition-colors hover:bg-amber-100 dark:bg-amber-900/40 dark:text-amber-300 dark:hover:bg-amber-800/50",onClick:ee=>Ut(l)},s[133]||(s[133]=[e("i",{class:"fas fa-clock"},null,-1),f(" 定时 ",-1)]),8,k3)):m("",!0),e("button",{class:"flex-1 rounded-lg bg-gray-50 px-3 py-2 text-xs text-gray-600 transition-colors hover:bg-gray-100",onClick:ee=>Yt(l)},s[134]||(s[134]=[e("i",{class:"fas fa-edit mr-1"},null,-1),f(" 编辑 ",-1)]),8,h3),e("button",{class:"rounded-lg bg-red-50 px-3 py-2 text-xs text-red-600 transition-colors hover:bg-red-100",onClick:ee=>Zt(l)},s[135]||(s[135]=[e("i",{class:"fas fa-trash"},null,-1)]),8,w3)])])}),128))])):m("",!0)]),!P.value&&yt.value.length>0?(o(),n("div",$3,[e("div",A3,[e("span",C3," 共 "+u(yt.value.length)+" 条记录 ",1),e("div",T3,[s[136]||(s[136]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),b(e("select",{"onUpdate:modelValue":s[18]||(s[18]=l=>le.value=l),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm",onChange:s[19]||(s[19]=l=>ae.value=1)},[(o(),n(ke,null,Ne(de,l=>e("option",{key:l,value:l},u(l),9,I3)),64))],544),[[wa,le.value]]),s[137]||(s[137]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",U3,[e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ae.value===1,onClick:s[20]||(s[20]=l=>ae.value--)},s[138]||(s[138]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,_3),e("div",K3,[mt.value?(o(),n("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:s[21]||(s[21]=l=>ae.value=1)}," 1 ")):m("",!0),Ta.value?(o(),n("span",S3," ... ")):m("",!0),(o(!0),n(ke,null,Ne(_t.value,l=>(o(),n("button",{key:l,class:$(["rounded-md border px-3 py-1 text-xs font-medium transition-colors sm:text-sm",l===ae.value?"border-blue-500 bg-blue-50 text-blue-600 dark:border-blue-400 dark:bg-blue-500/10 dark:text-blue-300":"border-gray-300 bg-white text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:te=>ae.value=l},u(l),11,M3))),128)),Ia.value?(o(),n("span",D3," ... ")):m("",!0),oa.value?(o(),n("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:s[22]||(s[22]=l=>ae.value=De.value)},u(De.value),1)):m("",!0)]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ae.value===De.value||De.value===0,onClick:s[23]||(s[23]=l=>ae.value++)},s[139]||(s[139]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,P3)])])):m("",!0),q.value&&(!Ee.value||Ee.value!=="ccr")?(o(),Xe(mr,{key:1,onClose:ma,onPlatformChanged:s[24]||(s[24]=l=>Ee.value=l),onSuccess:d})):q.value&&Ee.value==="ccr"?(o(),Xe(xr,{key:2,onClose:ma,onSuccess:d})):m("",!0),We.value&&ut.value&&ut.value.platform==="ccr"?(o(),Xe(xr,{key:3,account:ut.value,onClose:s[25]||(s[25]=l=>We.value=!1),onSuccess:t},null,8,["account"])):We.value?(o(),Xe(mr,{key:4,account:ut.value,onClose:s[26]||(s[26]=l=>We.value=!1),onSuccess:t},null,8,["account"])):m("",!0),Ve(Ja,{"cancel-text":c.value.cancelText,"confirm-text":c.value.confirmText,message:c.value.message,show:_e.value,title:c.value.title,onCancel:T,onConfirm:_},null,8,["cancel-text","confirm-text","message","show","title"]),H.value?(o(),Xe(Fm,{key:5,account:X.value||{},"generated-at":Ce.value,history:C.value,loading:h.value,overview:K.value,show:H.value,summary:G.value,onClose:it},null,8,["account","generated-at","history","loading","overview","show","summary"])):m("",!0),Ve(xx,{ref_key:"expiryEditModalRef",ref:Fe,account:Ke.value||{id:null,expiresAt:null,name:""},show:!!Ke.value,onClose:nr,onSave:Nr},null,8,["account","show"]),Ve(Wx,{account:xe.value,show:Qe.value,onClose:Wt},null,8,["account","show"]),Ve(kf,{account:a.value,show:g.value,onClose:Bt,onSaved:Gt},null,8,["account","show"]),Ve(yb,{account:Rt.value,show:Ft.value,onClose:Aa,onSaved:Ca},null,8,["account","show"]),Ve(w,{modelValue:U.value,"onUpdate:modelValue":s[27]||(s[27]=l=>U.value=l),style:{maxWidth:"1200px"},title:"账户统计汇总",width:"90%"},{default:ot(()=>[e("div",j3,[e("div",V3,[e("table",z3,[s[141]||(s[141]=e("thead",{class:"bg-gray-100 dark:bg-gray-700"},[e("tr",null,[e("th",{class:"border border-gray-300 px-4 py-2 text-left dark:border-gray-600"}," 平台类型 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 正常 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 不可调度 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流0-1h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流1-5h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流5-12h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流12-24h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流>24h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 其他 "),e("th",{class:"border border-gray-300 bg-blue-50 px-4 py-2 text-center font-bold dark:border-gray-600 dark:bg-blue-900/30"}," 合计 ")])],-1)),e("tbody",null,[(o(!0),n(ke,null,Ne(la.value,l=>(o(),n("tr",{key:l.platform},[e("td",L3,u(l.platformLabel),1),e("td",R3,[e("span",O3,u(l.normal),1)]),e("td",E3,[e("span",N3,u(l.unschedulable),1)]),e("td",q3,[e("span",W3,u(l.rateLimit0_1h),1)]),e("td",B3,[e("span",G3,u(l.rateLimit1_5h),1)]),e("td",F3,[e("span",Q3,u(l.rateLimit5_12h),1)]),e("td",H3,[e("span",J3,u(l.rateLimit12_24h),1)]),e("td",Y3,[e("span",Z3,u(l.rateLimitOver24h),1)]),e("td",X3,[e("span",e5,u(l.other),1)]),e("td",t5,u(l.total),1)]))),128)),e("tr",a5,[s[140]||(s[140]=e("td",{class:"border border-gray-300 px-4 py-2 dark:border-gray-600"},"合计",-1)),e("td",r5,[e("span",s5,u(dt.value.normal),1)]),e("td",l5,[e("span",o5,u(dt.value.unschedulable),1)]),e("td",n5,[e("span",i5,u(dt.value.rateLimit0_1h),1)]),e("td",d5,[e("span",u5,u(dt.value.rateLimit1_5h),1)]),e("td",p5,[e("span",g5,u(dt.value.rateLimit5_12h),1)]),e("td",c5,[e("span",y5,u(dt.value.rateLimit12_24h),1)]),e("td",m5,[e("span",x5,u(dt.value.rateLimitOver24h),1)]),e("td",f5,[e("span",b5,u(dt.value.other),1)]),e("td",v5,u(dt.value.total),1)])])])]),s[142]||(s[142]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," 注:限流时间列表示剩余限流时间在指定范围内的账户数量 ",-1))])]),_:1},8,["modelValue"]),re.value?(o(),Xe(jr,{key:6,onClose:s[28]||(s[28]=l=>re.value=!1),onRefresh:pa})):m("",!0)])}}},U5=sa(k5,[["__scopeId","data-v-f3c6543e"]]);export{U5 as default};
|