mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-23 00:53:33 +00:00
36 lines
350 KiB
JavaScript
36 lines
350 KiB
JavaScript
import{a as Ss}from"./element-plus-CqiD73Lu.js";import{r as U,aP as _s,o as pe,V as Ts,x as i,y as o,z as e,L as f,K as v,al as Me,aT as Mt,O as $,aq as S,aa as js,P as p,aV as ks,aY as Jt,C as K,c as ge,Z as zs,q as Yt,I as Fe,an as he,Q as ve,ac as Se,a5 as Dt,R as tt,B as Re,u as Be,aX as Vs,D as Rs,_ as Os,J as Ht,Y as At}from"./vue-vendor-Bsazo-x0.js";import{c as z,s as _,_ as Zt,a as Ls}from"./index-e8YFQYBy.js";import{C as Ks}from"./ConfirmModal-BHlDtt1C.js";import{C as Es}from"./chart-yFHxLHpB.js";import{C as hs}from"./CustomDropdown-BzPr_I4v.js";import"./vendor-Dr8jvgFu.js";const vs=U(!1),As=U({title:"",message:"",confirmText:"继续",cancelText:"取消"}),It=U(null);function Ps(){return{showConfirmModal:vs,confirmOptions:As,showConfirm:(me,M,G="继续",E="取消")=>new Promise(C=>{As.value={title:me,message:M,confirmText:G,cancelText:E},It.value=C,vs.value=!0}),handleConfirm:()=>{vs.value=!1,It.value&&(It.value(!0),It.value=null)},handleCancel:()=>{vs.value=!1,It.value&&(It.value(!1),It.value=null)}}}const Ms=_s("accounts",()=>{const W=U([]),Ke=U([]),g=U([]),me=U([]),M=U([]),G=U([]),E=U([]),C=U([]),w=U(!1),k=U(null),V=U(""),X=U("asc"),B=async()=>{w.value=!0,k.value=null;try{const x=await z.get("/admin/claude-accounts");if(x.success)W.value=x.data||[];else throw new Error(x.message||"获取Claude账户失败")}catch(x){throw k.value=x.message,x}finally{w.value=!1}},ae=async()=>{w.value=!0,k.value=null;try{const x=await z.get("/admin/claude-console-accounts");if(x.success)Ke.value=x.data||[];else throw new Error(x.message||"获取Claude Console账户失败")}catch(x){throw k.value=x.message,x}finally{w.value=!1}},F=async()=>{w.value=!0,k.value=null;try{const x=await z.get("/admin/bedrock-accounts");if(x.success)g.value=x.data||[];else throw new Error(x.message||"获取Bedrock账户失败")}catch(x){throw k.value=x.message,x}finally{w.value=!1}},H=async()=>{w.value=!0,k.value=null;try{const x=await z.get("/admin/gemini-accounts");if(x.success)me.value=x.data||[];else throw new Error(x.message||"获取Gemini账户失败")}catch(x){throw k.value=x.message,x}finally{w.value=!1}},Q=async()=>{w.value=!0,k.value=null;try{const x=await z.get("/admin/openai-accounts");if(x.success)M.value=x.data||[];else throw new Error(x.message||"获取OpenAI账户失败")}catch(x){throw k.value=x.message,x}finally{w.value=!1}},h=async()=>{w.value=!0,k.value=null;try{const x=await z.get("/admin/azure-openai-accounts");if(x.success)G.value=x.data||[];else throw new Error(x.message||"获取Azure OpenAI账户失败")}catch(x){throw k.value=x.message,x}finally{w.value=!1}},y=async()=>{w.value=!0,k.value=null;try{const x=await z.get("/admin/openai-responses-accounts");if(x.success)E.value=x.data||[];else throw new Error(x.message||"获取OpenAI-Responses账户失败")}catch(x){throw k.value=x.message,x}finally{w.value=!1}},j=async()=>{w.value=!0,k.value=null;try{const x=await z.get("/admin/droid-accounts");if(x.success)C.value=x.data||[];else throw new Error(x.message||"获取Droid账户失败")}catch(x){throw k.value=x.message,x}finally{w.value=!1}};return{claudeAccounts:W,claudeConsoleAccounts:Ke,bedrockAccounts:g,geminiAccounts:me,openaiAccounts:M,azureOpenaiAccounts:G,openaiResponsesAccounts:E,droidAccounts:C,loading:w,error:k,sortBy:V,sortOrder:X,fetchClaudeAccounts:B,fetchClaudeConsoleAccounts:ae,fetchBedrockAccounts:F,fetchGeminiAccounts:H,fetchOpenAIAccounts:Q,fetchAzureOpenAIAccounts:h,fetchOpenAIResponsesAccounts:y,fetchDroidAccounts:j,fetchAllAccounts:async()=>{w.value=!0,k.value=null;try{await Promise.all([B(),ae(),F(),H(),Q(),h(),y(),j()])}catch(x){throw k.value=x.message,x}finally{w.value=!1}},createClaudeAccount:async x=>{w.value=!0,k.value=null;try{const c=await z.post("/admin/claude-accounts",x);if(c.success)return await B(),c.data;throw new Error(c.message||"创建Claude账户失败")}catch(c){throw k.value=c.message,c}finally{w.value=!1}},createClaudeConsoleAccount:async x=>{w.value=!0,k.value=null;try{const c=await z.post("/admin/claude-console-accounts",x);if(c.success)return await ae(),c.data;throw new Error(c.message||"创建Claude Console账户失败")}catch(c){throw k.value=c.message,c}finally{w.value=!1}},createBedrockAccount:async x=>{w.value=!0,k.value=null;try{const c=await z.post("/admin/bedrock-accounts",x);if(c.success)return await F(),c.data;throw new Error(c.message||"创建Bedrock账户失败")}catch(c){throw k.value=c.message,c}finally{w.value=!1}},createGeminiAccount:async x=>{w.value=!0,k.value=null;try{const c=await z.post("/admin/gemini-accounts",x);if(c.success)return await H(),c.data;throw new Error(c.message||"创建Gemini账户失败")}catch(c){throw k.value=c.message,c}finally{w.value=!1}},createOpenAIAccount:async x=>{w.value=!0,k.value=null;try{const c=await z.post("/admin/openai-accounts",x);if(c.success)return await Q(),c.data;throw new Error(c.message||"创建OpenAI账户失败")}catch(c){throw k.value=c.message,c}finally{w.value=!1}},createDroidAccount:async x=>{w.value=!0,k.value=null;try{const c=await z.post("/admin/droid-accounts",x);if(c.success)return await j(),c.data;throw new Error(c.message||"创建Droid账户失败")}catch(c){throw k.value=c.message,c}finally{w.value=!1}},updateDroidAccount:async(x,c)=>{w.value=!0,k.value=null;try{const D=await z.put(`/admin/droid-accounts/${x}`,c);if(D.success)return await j(),D.data;throw new Error(D.message||"更新Droid账户失败")}catch(D){throw k.value=D.message,D}finally{w.value=!1}},createAzureOpenAIAccount:async x=>{w.value=!0,k.value=null;try{const c=await z.post("/admin/azure-openai-accounts",x);if(c.success)return await h(),c.data;throw new Error(c.message||"创建Azure OpenAI账户失败")}catch(c){throw k.value=c.message,c}finally{w.value=!1}},createOpenAIResponsesAccount:async x=>{w.value=!0,k.value=null;try{const c=await z.post("/admin/openai-responses-accounts",x);if(c.success)return await y(),c.data;throw new Error(c.message||"创建OpenAI-Responses账户失败")}catch(c){throw k.value=c.message,c}finally{w.value=!1}},createGeminiApiAccount:async x=>{w.value=!0,k.value=null;try{const c=await z.post("/admin/gemini-api-accounts",x);if(c.success)return await H(),c.data;throw new Error(c.message||"创建Gemini API账户失败")}catch(c){throw k.value=c.message,c}finally{w.value=!1}},updateClaudeAccount:async(x,c)=>{w.value=!0,k.value=null;try{const D=await z.put(`/admin/claude-accounts/${x}`,c);if(D.success)return await B(),D;throw new Error(D.message||"更新Claude账户失败")}catch(D){throw k.value=D.message,D}finally{w.value=!1}},updateClaudeConsoleAccount:async(x,c)=>{w.value=!0,k.value=null;try{const D=await z.put(`/admin/claude-console-accounts/${x}`,c);if(D.success)return await ae(),D;throw new Error(D.message||"更新Claude Console账户失败")}catch(D){throw k.value=D.message,D}finally{w.value=!1}},updateBedrockAccount:async(x,c)=>{w.value=!0,k.value=null;try{const D=await z.put(`/admin/bedrock-accounts/${x}`,c);if(D.success)return await F(),D;throw new Error(D.message||"更新Bedrock账户失败")}catch(D){throw k.value=D.message,D}finally{w.value=!1}},updateGeminiAccount:async(x,c)=>{w.value=!0,k.value=null;try{const D=await z.put(`/admin/gemini-accounts/${x}`,c);if(D.success)return await H(),D;throw new Error(D.message||"更新Gemini账户失败")}catch(D){throw k.value=D.message,D}finally{w.value=!1}},updateOpenAIAccount:async(x,c)=>{w.value=!0,k.value=null;try{const D=await z.put(`/admin/openai-accounts/${x}`,c);if(D.success)return await Q(),D;throw new Error(D.message||"更新OpenAI账户失败")}catch(D){throw k.value=D.message,D}finally{w.value=!1}},updateAzureOpenAIAccount:async(x,c)=>{w.value=!0,k.value=null;try{const D=await z.put(`/admin/azure-openai-accounts/${x}`,c);if(D.success)return await h(),D;throw new Error(D.message||"更新Azure OpenAI账户失败")}catch(D){throw k.value=D.message,D}finally{w.value=!1}},updateOpenAIResponsesAccount:async(x,c)=>{w.value=!0,k.value=null;try{const D=await z.put(`/admin/openai-responses-accounts/${x}`,c);if(D.success)return await y(),D;throw new Error(D.message||"更新OpenAI-Responses账户失败")}catch(D){throw k.value=D.message,D}finally{w.value=!1}},updateGeminiApiAccount:async(x,c)=>{w.value=!0,k.value=null;try{const D=await z.put(`/admin/gemini-api-accounts/${x}`,c);if(D.success)return await H(),D;throw new Error(D.message||"更新Gemini API账户失败")}catch(D){throw k.value=D.message,D}finally{w.value=!1}},toggleAccount:async(x,c)=>{w.value=!0,k.value=null;try{let D;x==="claude"?D=`/admin/claude-accounts/${c}/toggle`:x==="claude-console"?D=`/admin/claude-console-accounts/${c}/toggle`:x==="bedrock"?D=`/admin/bedrock-accounts/${c}/toggle`:x==="gemini"?D=`/admin/gemini-accounts/${c}/toggle`:x==="openai"?D=`/admin/openai-accounts/${c}/toggle`:x==="azure_openai"?D=`/admin/azure-openai-accounts/${c}/toggle`:x==="openai-responses"?D=`/admin/openai-responses-accounts/${c}/toggle`:D=`/admin/openai-accounts/${c}/toggle`;const qe=await z.put(D);if(qe.success)return x==="claude"?await B():x==="claude-console"?await ae():x==="bedrock"?await F():x==="gemini"?await H():x==="openai"?await Q():x==="azure_openai"?await h():x==="openai-responses"?await y():await Q(),qe;throw new Error(qe.message||"切换状态失败")}catch(D){throw k.value=D.message,D}finally{w.value=!1}},deleteAccount:async(x,c)=>{w.value=!0,k.value=null;try{let D;x==="claude"?D=`/admin/claude-accounts/${c}`:x==="claude-console"?D=`/admin/claude-console-accounts/${c}`:x==="bedrock"?D=`/admin/bedrock-accounts/${c}`:x==="gemini"?D=`/admin/gemini-accounts/${c}`:x==="openai"?D=`/admin/openai-accounts/${c}`:x==="azure_openai"?D=`/admin/azure-openai-accounts/${c}`:x==="openai-responses"?D=`/admin/openai-responses-accounts/${c}`:D=`/admin/openai-accounts/${c}`;const qe=await z.delete(D);if(qe.success)return x==="claude"?await B():x==="claude-console"?await ae():x==="bedrock"?await F():x==="gemini"?await H():x==="openai"?await Q():x==="azure_openai"?await h():x==="openai-responses"?await y():await Q(),qe;throw new Error(qe.message||"删除失败")}catch(D){throw k.value=D.message,D}finally{w.value=!1}},refreshClaudeToken:async x=>{w.value=!0,k.value=null;try{const c=await z.post(`/admin/claude-accounts/${x}/refresh`);if(c.success)return await B(),c;throw new Error(c.message||"Token刷新失败")}catch(c){throw k.value=c.message,c}finally{w.value=!1}},generateClaudeAuthUrl:async x=>{try{const c=await z.post("/admin/claude-accounts/generate-auth-url",x);if(c.success)return c.data;throw new Error(c.message||"生成授权URL失败")}catch(c){throw k.value=c.message,c}},exchangeClaudeCode:async x=>{try{const c=await z.post("/admin/claude-accounts/exchange-code",x);if(c.success)return c.data;throw new Error(c.message||"交换授权码失败")}catch(c){throw k.value=c.message,c}},generateClaudeSetupTokenUrl:async x=>{try{const c=await z.post("/admin/claude-accounts/generate-setup-token-url",x);if(c.success)return c.data;throw new Error(c.message||"生成Setup Token URL失败")}catch(c){throw k.value=c.message,c}},exchangeClaudeSetupTokenCode:async x=>{try{const c=await z.post("/admin/claude-accounts/exchange-setup-token-code",x);if(c.success)return c.data;throw new Error(c.message||"交换Setup Token授权码失败")}catch(c){throw k.value=c.message,c}},generateGeminiAuthUrl:async x=>{try{const c=await z.post("/admin/gemini-accounts/generate-auth-url",x);if(c.success)return c.data;throw new Error(c.message||"生成授权URL失败")}catch(c){throw k.value=c.message,c}},exchangeGeminiCode:async x=>{try{const c=await z.post("/admin/gemini-accounts/exchange-code",x);if(c.success)return c.data;throw new Error(c.message||"交换授权码失败")}catch(c){throw k.value=c.message,c}},generateOpenAIAuthUrl:async x=>{try{const c=await z.post("/admin/openai-accounts/generate-auth-url",x);if(c.success)return c.data;throw new Error(c.message||"生成授权URL失败")}catch(c){throw k.value=c.message,c}},exchangeOpenAICode:async x=>{try{const c=await z.post("/admin/openai-accounts/exchange-code",x);if(c.success)return c.data;throw new Error(c.message||"交换授权码失败")}catch(c){throw k.value=c.message,c}},generateDroidAuthUrl:async x=>{k.value=null;try{const c=await z.post("/admin/droid-accounts/generate-auth-url",x);if(c.success)return c.data;throw new Error(c.message||"生成授权URL失败")}catch(c){throw k.value=c.message,c}},exchangeDroidCode:async x=>{k.value=null;try{return await z.post("/admin/droid-accounts/exchange-code",x)}catch(c){throw k.value=c.message,c}},sortAccounts:x=>{V.value===x?X.value=X.value==="asc"?"desc":"asc":(V.value=x,X.value="asc")},reset:()=>{W.value=[],Ke.value=[],g.value=[],me.value=[],M.value=[],G.value=[],E.value=[],C.value=[],w.value=!1,k.value=null,V.value="",X.value="asc"}}}),Ns={class:"space-y-4"},qs={class:"flex items-center justify-between"},Gs={class:"flex cursor-pointer items-center"},Fs={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"},Ws={class:"relative"},Qs={key:0,class:"mt-1 text-xs text-red-500"},Bs={key:1,class:"mt-1 text-xs text-green-500"},Hs={class:"grid grid-cols-2 gap-4"},Js={class:"space-y-4"},Ys={class:"flex items-center"},Zs={key:0,class:"grid grid-cols-2 gap-4"},Xs={class:"relative"},ea=["type"],ws={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(W,{emit:Ke}){const g=W,me=Ke,M=U({...g.modelValue}),G=U(!!(M.value.username||M.value.password)),E=U(!1),C=U(""),w=U(""),k=U(!1);pe(()=>g.modelValue,Q=>{JSON.stringify(Q)!==JSON.stringify(M.value)&&(M.value={...Q},G.value=!!(Q.username||Q.password))},{deep:!0}),pe(()=>M.value.enabled,()=>{X()}),pe(()=>M.value.type,()=>{X()}),pe(()=>M.value.host,()=>{X()}),pe(()=>M.value.port,()=>{X()}),pe(()=>M.value.username,()=>{X()}),pe(()=>M.value.password,()=>{X()}),pe(G,Q=>{Q||(M.value.username="",M.value.password="",X())});let V=null;function X(){V&&clearTimeout(V),V=setTimeout(()=>{const Q={...M.value};G.value||(Q.username="",Q.password=""),me("update:modelValue",Q)},100)}function B(){if(w.value="",k.value=!1,!!C.value)try{const Q=C.value.split("#")[0].trim();if(!Q)return;const h=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,y=Q.match(h);if(!y){const ke=/^([^:]+):(\d+)$/,_e=Q.match(ke);if(_e){M.value.type="socks5",M.value.host=_e[1],M.value.port=_e[2],M.value.username="",M.value.password="",G.value=!1,k.value=!0,X(),setTimeout(()=>{k.value=!1},3e3);return}w.value="无效的代理URL格式,请检查输入";return}const[,j,se,R,I,O]=y;M.value.type=j.toLowerCase(),M.value.host=I,M.value.port=O,se&&R?(M.value.username=decodeURIComponent(se),M.value.password=decodeURIComponent(R),G.value=!0):(M.value.username="",M.value.password="",G.value=!1),k.value=!0,X(),setTimeout(()=>{k.value=!1},3e3)}catch{w.value="解析失败,请检查URL格式"}}function ae(){C.value="",w.value="",k.value=!1}function F(){setTimeout(()=>{B()},0)}function H(){const Q=C.value.trim();Q.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(Q)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(Q))&&B():/^[^:]+:\d{2,5}$/.test(Q)&&B()}return Ts(()=>{V&&clearTimeout(V)}),(Q,h)=>(o(),i("div",Ns,[e("div",qs,[h[10]||(h[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",Gs,[v(e("input",{"onUpdate:modelValue":h[0]||(h[0]=y=>M.value.enabled=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Me,M.value.enabled]]),h[9]||(h[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),M.value.enabled?(o(),i("div",Fs,[h[22]||(h[22]=Mt('<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,[h[14]||(h[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[$(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",Ws,[v(e("input",{"onUpdate:modelValue":h[1]||(h[1]=y=>C.value=y),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:H,onKeyup:js(B,["enter"]),onPaste:F},null,544),[[S,C.value]]),C.value?(o(),i("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:ae},h[11]||(h[11]=[e("i",{class:"fas fa-times"},null,-1)]))):f("",!0)]),w.value?(o(),i("p",Qs,[h[12]||(h[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),$(" "+p(w.value),1)])):k.value?(o(),i("p",Bs,h[13]||(h[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),$(" 代理配置已自动填充 ",-1)]))):f("",!0)]),h[23]||(h[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[h[16]||(h[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),v(e("select",{"onUpdate:modelValue":h[2]||(h[2]=y=>M.value.type=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},h[15]||(h[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[ks,M.value.type]])]),e("div",Hs,[e("div",null,[h[17]||(h[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),v(e("input",{"onUpdate:modelValue":h[3]||(h[3]=y=>M.value.host=y),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),[[S,M.value.host]])]),e("div",null,[h[18]||(h[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),v(e("input",{"onUpdate:modelValue":h[4]||(h[4]=y=>M.value.port=y),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),[[S,M.value.port]])])]),e("div",Js,[e("div",Ys,[v(e("input",{id:"proxyAuth","onUpdate:modelValue":h[5]||(h[5]=y=>G.value=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Me,G.value]]),h[19]||(h[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),G.value?(o(),i("div",Zs,[e("div",null,[h[20]||(h[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),v(e("input",{"onUpdate:modelValue":h[6]||(h[6]=y=>M.value.username=y),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),[[S,M.value.username]])]),e("div",null,[h[21]||(h[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",Xs,[v(e("input",{"onUpdate:modelValue":h[7]||(h[7]=y=>M.value.password=y),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:E.value?"text":"password"},null,8,ea),[[Jt,M.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:h[8]||(h[8]=y=>E.value=!E.value)},[e("i",{class:K(E.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):f("",!0)]),h[24]||(h[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,"提示:"),$("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):f("",!0)]))}},ta={class:"space-y-6"},sa={key:0},aa={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},ra={class:"flex items-start gap-4"},la={class:"flex-1"},oa={class:"space-y-4"},na={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},ia={class:"flex items-start gap-3"},da={class:"flex-1"},ua=["disabled"],pa={key:0,class:"fas fa-link mr-2"},ga={key:1,class:"loading-spinner mr-2"},ma={key:1,class:"space-y-3"},ya={class:"flex items-center gap-2"},ca=["value"],xa={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},fa={class:"flex items-start gap-3"},ba={class:"flex-1"},va={class:"space-y-3"},ka={key:1},ha={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},wa={class:"flex items-start gap-4"},$a={class:"flex-1"},Aa={class:"space-y-4"},Ca={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Ua={class:"flex items-start gap-3"},Ia={class:"flex-1"},Ta=["disabled"],Ka={key:0,class:"fas fa-link mr-2"},Pa={key:1,class:"loading-spinner mr-2"},Ma={key:1,class:"space-y-3"},Da={class:"flex items-center gap-2"},Sa=["value"],_a={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},ja={class:"flex items-start gap-3"},za={class:"flex-1"},Va={class:"space-y-3"},Ra={key:2},Oa={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},La={class:"flex items-start gap-4"},Ea={class:"flex-1"},Na={class:"space-y-4"},qa={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Ga={class:"flex items-start gap-3"},Fa={class:"flex-1"},Wa=["disabled"],Qa={key:0,class:"fas fa-link mr-2"},Ba={key:1,class:"loading-spinner mr-2"},Ha={key:1,class:"space-y-3"},Ja={class:"flex items-center gap-2"},Ya=["value"],Za={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Xa={class:"flex items-start gap-3"},er={class:"flex-1"},tr={class:"space-y-3"},sr={key:3},ar={class:"rounded-lg border border-cyan-200 bg-cyan-50 p-6 dark:border-cyan-700 dark:bg-cyan-900/30"},rr={class:"flex items-start gap-4"},lr={class:"flex-1"},or={class:"space-y-4"},nr={class:"rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"},ir={class:"flex items-start gap-3"},dr={class:"flex-1"},ur=["disabled"],pr={key:0,class:"fas fa-link mr-2"},gr={key:1,class:"loading-spinner mr-2"},mr={key:1,class:"space-y-4"},yr={class:"space-y-2"},cr={class:"flex flex-col gap-2 rounded-md border border-cyan-200 bg-white p-3 dark:border-cyan-700 dark:bg-gray-800"},xr={class:"flex items-center gap-2"},fr=["value"],br={class:"space-y-2"},vr={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"},kr={class:"font-mono text-xl font-semibold text-cyan-700 dark:text-cyan-200"},hr={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},wr={class:"flex gap-3 pt-4"},$r=["disabled"],Ar={key:0,class:"loading-spinner mr-2"},Cr={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(W,{emit:Ke}){const g=W,me=Ke,M=Ms(),G=U(!1),E=U(!1),C=U(""),w=U(""),k=U(!1),V=U(""),X=U(""),B=U(""),ae=U(""),F=U(0);let H=null;const Q=ge(()=>g.platform==="droid"?!!V.value:C.value&&w.value.trim()),h=ge(()=>{if(!F.value||F.value<=0)return"00:00";const N=Math.floor(F.value/60),u=F.value%60;return`${N.toString().padStart(2,"0")}:${u.toString().padStart(2,"0")}`}),y=N=>{if(j(),!N||N<=0){F.value=0;return}F.value=Math.floor(N),H=setInterval(()=>{F.value<=1?(F.value=0,j()):F.value-=1},1e3)},j=()=>{H&&(clearInterval(H),H=null)};pe(w,N=>{if(g.platform==="droid"||!N||typeof N!="string")return;const u=N.trim();if(!u)return;if(u.startsWith("http://")||u.startsWith("https://"))if(u.startsWith("http://localhost:45462")||u.startsWith("http://localhost:1455"))try{const Ae=new URL(u).searchParams.get("code");Ae?(w.value=Ae,_("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):_("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(ee){console.error("Failed to parse URL:",ee),_("链接格式错误,请检查是否为完整的 URL","error")}else if(g.platform==="gemini"||g.platform==="openai")try{const Ae=new URL(u).searchParams.get("code");Ae&&(w.value=Ae,_("成功提取授权码!","success"))}catch{}else _("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const se=async()=>{var N;j(),C.value="",w.value="",X.value="",B.value="",ae.value="",F.value=0,V.value="",k.value=!1,G.value=!0;try{const u=(N=g.proxy)!=null&&N.enabled?{proxy:{type:g.proxy.type,host:g.proxy.host,port:parseInt(g.proxy.port),username:g.proxy.username||null,password:g.proxy.password||null}}:{};if(g.platform==="claude"){const J=await M.generateClaudeAuthUrl(u);C.value=J.authUrl,V.value=J.sessionId}else if(g.platform==="gemini"){const J=await M.generateGeminiAuthUrl(u);C.value=J.authUrl,V.value=J.sessionId}else if(g.platform==="openai"){const J=await M.generateOpenAIAuthUrl(u);C.value=J.authUrl,V.value=J.sessionId}else if(g.platform==="droid"){const J=await M.generateDroidAuthUrl(u);C.value=J.verificationUriComplete||J.verificationUri,B.value=J.verificationUri,ae.value=J.verificationUriComplete||J.verificationUri,X.value=J.userCode,y(J.expiresIn||300),V.value=J.sessionId}}catch(u){_(u.message||"生成授权链接失败","error")}finally{G.value=!1}},R=()=>{j(),C.value="",w.value="",X.value="",B.value="",ae.value="",F.value=0,V.value="",se()},I=async()=>{if(!C.value){_("请先生成授权链接","warning");return}try{await navigator.clipboard.writeText(C.value),k.value=!0,_("链接已复制","success"),setTimeout(()=>{k.value=!1},2e3)}catch{const u=document.createElement("input");u.value=C.value,document.body.appendChild(u),u.select(),document.execCommand("copy"),document.body.removeChild(u),k.value=!0,_("链接已复制","success"),setTimeout(()=>{k.value=!1},2e3)}},O=async()=>{if(!X.value){_("请先生成授权验证码","warning");return}try{await navigator.clipboard.writeText(X.value),_("验证码已复制","success")}catch{const u=document.createElement("input");u.value=X.value,document.body.appendChild(u),u.select(),document.execCommand("copy"),document.body.removeChild(u),_("验证码已复制","success")}},ke=()=>{ae.value?window.open(ae.value,"_blank","noopener"):B.value&&window.open(B.value,"_blank","noopener")},_e=async()=>{var N;if(Q.value){E.value=!0;try{let u={};g.platform==="claude"?u={sessionId:V.value,callbackUrl:w.value.trim()}:g.platform==="gemini"?u={code:w.value.trim(),sessionId:V.value}:g.platform==="openai"?u={code:w.value.trim(),sessionId:V.value}:g.platform==="droid"&&(u={sessionId:V.value}),(N=g.proxy)!=null&&N.enabled&&(u.proxy={type:g.proxy.type,host:g.proxy.host,port:parseInt(g.proxy.port),username:g.proxy.username||null,password:g.proxy.password||null});let J;if(g.platform==="claude")J=await M.exchangeClaudeCode(u);else if(g.platform==="gemini")J=await M.exchangeGeminiCode(u);else if(g.platform==="openai")J=await M.exchangeOpenAICode(u);else if(g.platform==="droid"){const ee=await M.exchangeDroidCode(u);if(!ee.success){if(ee.pending){const Ae=ee.message||"授权尚未完成,请在浏览器确认后稍候再次尝试。";_(Ae,"info"),typeof ee.expiresIn=="number"&&ee.expiresIn>=0&&y(ee.expiresIn);return}throw new Error(ee.message||"授权失败,请重试")}J=ee.data,j()}me("success",J)}catch(u){_(u.message||"授权失败,请检查授权码是否正确","error")}finally{E.value=!1}}};return zs(()=>{j()}),(N,u)=>(o(),i("div",ta,[W.platform==="claude"?(o(),i("div",sa,[e("div",aa,[e("div",ra,[u[15]||(u[15]=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",la,[u[13]||(u[13]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"},"Claude 账户授权",-1)),u[14]||(u[14]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤完成 Claude 账户的授权: ",-1)),e("div",oa,[e("div",na,[e("div",ia,[u[6]||(u[6]=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",da,[u[5]||(u[5]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),C.value?(o(),i("div",ma,[e("div",ya,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:C.value},null,8,ca),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:I},[e("i",{class:K(k.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:R},u[4]||(u[4]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$("重新生成 ",-1)]))])):(o(),i("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:G.value,onClick:se},[G.value?(o(),i("div",ga)):(o(),i("i",pa)),$(" "+p(G.value?"生成中...":"生成授权链接"),1)],8,ua))])])]),u[12]||(u[12]=Mt('<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",xa,[e("div",fa,[u[11]||(u[11]=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",ba,[u[9]||(u[9]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),u[10]||(u[10]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"},[$(" 授权完成后,页面会显示一个 "),e("strong",null,"Authorization Code"),$(",请将其复制并粘贴到下方输入框: ")],-1)),e("div",va,[e("div",null,[u[7]||(u[7]=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"}),$("Authorization Code ")],-1)),v(e("textarea",{"onUpdate:modelValue":u[0]||(u[0]=J=>w.value=J),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[S,w.value]])]),u[8]||(u[8]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" 请粘贴从Claude页面复制的Authorization Code ")],-1))])])])])])])])])])):W.platform==="gemini"?(o(),i("div",ka,[e("div",ha,[e("div",wa,[u[27]||(u[27]=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",$a,[u[25]||(u[25]=e("h4",{class:"mb-3 font-semibold text-green-900 dark:text-green-200"},"Gemini 账户授权",-1)),u[26]||(u[26]=e("p",{class:"mb-4 text-sm text-green-800 dark:text-green-300"}," 请按照以下步骤完成 Gemini 账户的授权: ",-1)),e("div",Aa,[e("div",Ca,[e("div",Ua,[u[18]||(u[18]=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",Ia,[u[17]||(u[17]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 点击下方按钮生成授权链接 ",-1)),C.value?(o(),i("div",Ma,[e("div",Da,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:C.value},null,8,Sa),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:I},[e("i",{class:K(k.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:R},u[16]||(u[16]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$("重新生成 ",-1)]))])):(o(),i("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:G.value,onClick:se},[G.value?(o(),i("div",Pa)):(o(),i("i",Ka)),$(" "+p(G.value?"生成中...":"生成授权链接"),1)],8,Ta))])])]),u[24]||(u[24]=Mt('<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",_a,[e("div",ja,[u[23]||(u[23]=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",za,[u[21]||(u[21]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 输入 Authorization Code ",-1)),u[22]||(u[22]=e("p",{class:"mb-3 text-sm text-green-700 dark:text-green-300"}," 授权完成后,页面会显示一个 Authorization Code,请将其复制并粘贴到下方输入框: ",-1)),e("div",Va,[e("div",null,[u[19]||(u[19]=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"}),$("Authorization Code ")],-1)),v(e("textarea",{"onUpdate:modelValue":u[1]||(u[1]=J=>w.value=J),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[S,w.value]])]),u[20]||(u[20]=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"}),$(" 请粘贴从Gemini页面复制的Authorization Code ")])],-1))])])])])])])])])])):W.platform==="openai"?(o(),i("div",Ra,[e("div",Oa,[e("div",La,[u[39]||(u[39]=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",Ea,[u[37]||(u[37]=e("h4",{class:"mb-3 font-semibold text-orange-900 dark:text-orange-200"},"OpenAI 账户授权",-1)),u[38]||(u[38]=e("p",{class:"mb-4 text-sm text-orange-800 dark:text-orange-300"}," 请按照以下步骤完成 OpenAI 账户的授权: ",-1)),e("div",Na,[e("div",qa,[e("div",Ga,[u[30]||(u[30]=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",Fa,[u[29]||(u[29]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 点击下方按钮生成授权链接 ",-1)),C.value?(o(),i("div",Ha,[e("div",Ja,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:C.value},null,8,Ya),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:I},[e("i",{class:K(k.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:R},u[28]||(u[28]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$("重新生成 ",-1)]))])):(o(),i("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:G.value,onClick:se},[G.value?(o(),i("div",Ba)):(o(),i("i",Qa)),$(" "+p(G.value?"生成中...":"生成授权链接"),1)],8,Wa))])])]),u[36]||(u[36]=Mt('<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",Za,[e("div",Xa,[u[35]||(u[35]=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",er,[u[33]||(u[33]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 输入授权链接或 Code ",-1)),u[34]||(u[34]=e("p",{class:"mb-3 text-sm text-orange-700 dark:text-orange-300"},[$(" 授权完成后,当页面地址变为 "),e("strong",{class:"font-mono"},"http://localhost:1455/..."),$(" 时: ")],-1)),e("div",tr,[e("div",null,[u[31]||(u[31]=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"}),$("授权链接或 Code ")],-1)),v(e("textarea",{"onUpdate:modelValue":u[2]||(u[2]=J=>w.value=J),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),[[S,w.value]])]),u[32]||(u[32]=Mt('<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))])])])])])])])])])):W.platform==="droid"?(o(),i("div",sr,[e("div",ar,[e("div",rr,[u[51]||(u[51]=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",lr,[u[49]||(u[49]=e("h4",{class:"mb-3 font-semibold text-cyan-900 dark:text-cyan-200"},"Droid 账户授权",-1)),u[50]||(u[50]=e("p",{class:"mb-4 text-sm text-cyan-800 dark:text-cyan-300"}," 请按照以下步骤完成 Factory (Droid) 账户的授权: ",-1)),e("div",or,[e("div",nr,[e("div",ir,[u[47]||(u[47]=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",dr,[u[46]||(u[46]=e("p",{class:"mb-2 font-medium text-cyan-900 dark:text-cyan-200"}," 点击下方按钮生成授权链接 ",-1)),C.value?(o(),i("div",mr,[e("div",yr,[u[42]||(u[42]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权链接",-1)),e("div",cr,[e("div",xr,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:C.value},null,8,fr),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:I},[e("i",{class:K(k.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:ke},u[40]||(u[40]=[e("i",{class:"fas fa-external-link-alt text-xs"},null,-1),$(" 在新标签中打开 ",-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:R},u[41]||(u[41]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),$("重新生成 ",-1)]))])])]),e("div",br,[u[44]||(u[44]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权验证码",-1)),e("div",vr,[e("span",kr,p(X.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:O},u[43]||(u[43]=[e("i",{class:"fas fa-copy mr-1"},null,-1),$("复制 ",-1)]))])]),e("div",hr,[e("span",null,[u[45]||(u[45]=e("i",{class:"fas fa-hourglass-half mr-1 text-cyan-500"},null,-1)),$(" 剩余有效期:"+p(h.value),1)])])])):(o(),i("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:G.value,onClick:se},[G.value?(o(),i("div",gr)):(o(),i("i",pr)),$(" "+p(G.value?"生成中...":"生成授权链接"),1)],8,ur))])])]),u[48]||(u[48]=Mt('<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))])])])])])):f("",!0),e("div",wr,[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:u[3]||(u[3]=J=>N.$emit("back"))}," 上一步 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!Q.value||E.value,type:"button",onClick:_e},[E.value?(o(),i("div",Ar)):f("",!0),$(" "+p(E.value?"验证中...":"完成授权"),1)],8,$r)])]))}},Ur={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Ir={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"},Tr={class:"mb-4 flex items-center justify-between sm:mb-6"},Kr={class:"mb-6"},Pr={key:0,class:"mb-6 rounded-lg border border-blue-200 bg-blue-50 p-4"},Mr={class:"space-y-4"},Dr={class:"flex gap-4"},Sr={class:"flex cursor-pointer items-center"},_r={class:"flex cursor-pointer items-center"},jr={class:"flex cursor-pointer items-center"},zr={class:"flex cursor-pointer items-center"},Vr={class:"flex gap-3"},Rr=["disabled"],Or={key:0,class:"loading-spinner mr-2"},Lr={class:"space-y-4"},Er={key:0,class:"py-8 text-center"},Nr={key:1,class:"rounded-lg bg-gray-50 py-8 text-center"},qr={key:2,class:"grid grid-cols-1 gap-4 md:grid-cols-2"},Gr={class:"mb-3 flex items-start justify-between"},Fr={class:"flex-1"},Wr={class:"font-semibold text-gray-900"},Qr={class:"mt-1 text-sm text-gray-500"},Br={class:"ml-4 flex items-center gap-2"},Hr={class:"flex items-center justify-between text-sm text-gray-600"},Jr={class:"flex items-center gap-4"},Yr={class:"flex items-center gap-2"},Zr=["onClick"],Xr=["disabled","onClick"],el={key:1,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},tl={class:"modal-content w-full max-w-lg p-4 sm:p-6"},sl={class:"space-y-4"},al={class:"rounded-lg bg-gray-100 px-3 py-2 text-sm text-gray-600"},rl={class:"flex gap-3 pt-4"},ll=["disabled"],ol={key:0,class:"loading-spinner mr-2"},nl={__name:"GroupManagementModal",emits:["close","refresh"],setup(W,{emit:Ke}){const g=Ke,me=U(!0),M=U(!1),G=U([]),E=U(!1),C=U(!1),w=U({name:"",platform:"claude",description:""}),k=U(!1),V=U(!1),X=U(null),B=U({name:"",platform:"",description:""}),ae=R=>R?new Date(R).toLocaleDateString("zh-CN"):"-",F=async()=>{M.value=!0;try{const R=await z.get("/admin/account-groups");G.value=R.data||[]}catch{_("加载分组列表失败","error")}finally{M.value=!1}},H=async()=>{var R,I;if(!w.value.name||!w.value.platform){_("请填写必填项","error");return}C.value=!0;try{await z.post("/admin/account-groups",{name:w.value.name,platform:w.value.platform,description:w.value.description}),_("分组创建成功","success"),Q(),await F(),g("refresh")}catch(O){_(((I=(R=O.response)==null?void 0:R.data)==null?void 0:I.error)||"创建分组失败","error")}finally{C.value=!1}},Q=()=>{E.value=!1,w.value={name:"",platform:"claude",description:""}},h=R=>{X.value=R,B.value={name:R.name,platform:R.platform,description:R.description||""},k.value=!0},y=async()=>{var R,I;if(!B.value.name){_("请填写分组名称","error");return}V.value=!0;try{await z.put(`/admin/account-groups/${X.value.id}`,{name:B.value.name,description:B.value.description}),_("分组更新成功","success"),j(),await F(),g("refresh")}catch(O){_(((I=(R=O.response)==null?void 0:R.data)==null?void 0:I.error)||"更新分组失败","error")}finally{V.value=!1}},j=()=>{k.value=!1,X.value=null,B.value={name:"",platform:"",description:""}},se=async R=>{var I,O;if(R.memberCount>0){_("分组内还有成员,无法删除","error");return}if(confirm(`确定要删除分组 "${R.name}" 吗?`))try{await z.delete(`/admin/account-groups/${R.id}`),_("分组删除成功","success"),await F(),g("refresh")}catch(ke){_(((O=(I=ke.response)==null?void 0:I.data)==null?void 0:O.error)||"删除分组失败","error")}};return Yt(()=>{F()}),(R,I)=>(o(),Fe(Dt,{to:"body"},[me.value?(o(),i("div",Ur,[e("div",Ir,[e("div",Tr,[I[11]||(I[11]=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 sm:text-xl"},"账户分组管理")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:I[0]||(I[0]=O=>R.$emit("close"))},I[10]||(I[10]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",Kr,[e("button",{class:"btn btn-primary px-4 py-2",onClick:I[1]||(I[1]=O=>E.value=!0)},I[12]||(I[12]=[e("i",{class:"fas fa-plus mr-2"},null,-1),$(" 创建新分组 ",-1)]))]),E.value?(o(),i("div",Pr,[I[20]||(I[20]=e("h4",{class:"mb-4 text-lg font-semibold text-gray-900"},"创建新分组",-1)),e("div",Mr,[e("div",null,[I[13]||(I[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),v(e("input",{"onUpdate:modelValue":I[2]||(I[2]=O=>w.value.name=O),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[S,w.value.name]])]),e("div",null,[I[18]||(I[18]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型 *",-1)),e("div",Dr,[e("label",Sr,[v(e("input",{"onUpdate:modelValue":I[3]||(I[3]=O=>w.value.platform=O),class:"mr-2",type:"radio",value:"claude"},null,512),[[he,w.value.platform]]),I[14]||(I[14]=e("span",{class:"text-sm text-gray-700"},"Claude",-1))]),e("label",_r,[v(e("input",{"onUpdate:modelValue":I[4]||(I[4]=O=>w.value.platform=O),class:"mr-2",type:"radio",value:"gemini"},null,512),[[he,w.value.platform]]),I[15]||(I[15]=e("span",{class:"text-sm text-gray-700"},"Gemini",-1))]),e("label",jr,[v(e("input",{"onUpdate:modelValue":I[5]||(I[5]=O=>w.value.platform=O),class:"mr-2",type:"radio",value:"openai"},null,512),[[he,w.value.platform]]),I[16]||(I[16]=e("span",{class:"text-sm text-gray-700"},"OpenAI",-1))]),e("label",zr,[v(e("input",{"onUpdate:modelValue":I[6]||(I[6]=O=>w.value.platform=O),class:"mr-2",type:"radio",value:"droid"},null,512),[[he,w.value.platform]]),I[17]||(I[17]=e("span",{class:"text-sm text-gray-700"},"Droid",-1))])])]),e("div",null,[I[19]||(I[19]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),v(e("textarea",{"onUpdate:modelValue":I[7]||(I[7]=O=>w.value.description=O),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[S,w.value.description]])]),e("div",Vr,[e("button",{class:"btn btn-primary px-4 py-2",disabled:!w.value.name||!w.value.platform||C.value,onClick:H},[C.value?(o(),i("div",Or)):f("",!0),$(" "+p(C.value?"创建中...":"创建"),1)],8,Rr),e("button",{class:"btn btn-secondary px-4 py-2",onClick:Q},"取消")])])])):f("",!0),e("div",Lr,[M.value?(o(),i("div",Er,I[21]||(I[21]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500"},"加载中...",-1)]))):G.value.length===0?(o(),i("div",Nr,I[22]||(I[22]=[e("i",{class:"fas fa-layer-group mb-4 text-4xl text-gray-300"},null,-1),e("p",{class:"text-gray-500"},"暂无分组",-1)]))):(o(),i("div",qr,[(o(!0),i(ve,null,Se(G.value,O=>(o(),i("div",{key:O.id,class:"rounded-lg border bg-white p-4 transition-shadow hover:shadow-md"},[e("div",Gr,[e("div",Fr,[e("h4",Wr,p(O.name),1),e("p",Qr,p(O.description||"暂无描述"),1)]),e("div",Br,[e("span",{class:K(["rounded-full px-2 py-1 text-xs font-medium",O.platform==="claude"?"bg-purple-100 text-purple-700":O.platform==="gemini"?"bg-blue-100 text-blue-700":O.platform==="openai"?"bg-gray-100 text-gray-700":"bg-cyan-100 text-cyan-700"])},p(O.platform==="claude"?"Claude":O.platform==="gemini"?"Gemini":O.platform==="openai"?"OpenAI":"Droid"),3)])]),e("div",Hr,[e("div",Jr,[e("span",null,[I[23]||(I[23]=e("i",{class:"fas fa-users mr-1"},null,-1)),$(" "+p(O.memberCount||0)+" 个成员 ",1)]),e("span",null,[I[24]||(I[24]=e("i",{class:"fas fa-clock mr-1"},null,-1)),$(" "+p(ae(O.createdAt)),1)])]),e("div",Yr,[e("button",{class:"text-blue-600 transition-colors hover:text-blue-800",title:"编辑",onClick:ke=>h(O)},I[25]||(I[25]=[e("i",{class:"fas fa-edit"},null,-1)]),8,Zr),e("button",{class:"text-red-600 transition-colors hover:text-red-800",disabled:O.memberCount>0,title:"删除",onClick:ke=>se(O)},I[26]||(I[26]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Xr)])])]))),128))]))])])])):f("",!0),k.value?(o(),i("div",el,[e("div",tl,[e("div",{class:"mb-4 flex items-center justify-between"},[I[28]||(I[28]=e("h3",{class:"text-lg font-bold text-gray-900"},"编辑分组",-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",onClick:j},I[27]||(I[27]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",sl,[e("div",null,[I[29]||(I[29]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),v(e("input",{"onUpdate:modelValue":I[8]||(I[8]=O=>B.value.name=O),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[S,B.value.name]])]),e("div",null,[I[31]||(I[31]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型",-1)),e("div",al,[$(p(B.value.platform==="claude"?"Claude":B.value.platform==="gemini"?"Gemini":"OpenAI")+" ",1),I[30]||(I[30]=e("span",{class:"ml-2 text-xs text-gray-500"},"(不可修改)",-1))])]),e("div",null,[I[32]||(I[32]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),v(e("textarea",{"onUpdate:modelValue":I[9]||(I[9]=O=>B.value.description=O),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[S,B.value.description]])]),e("div",rl,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!B.value.name||V.value,onClick:y},[V.value?(o(),i("div",ol)):f("",!0),$(" "+p(V.value?"更新中...":"更新"),1)],8,ll),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:j},"取消")])])])])):f("",!0)]))}},il={key:0,class:"modal fixed inset-0 z-[60] flex items-center justify-center p-3 sm:p-4"},dl={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"},ul={class:"mb-4 flex items-center justify-between sm:mb-6"},pl={class:"flex items-center gap-2 sm:gap-3"},gl={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},ml={class:"flex items-center gap-2"},yl=["disabled"],cl={key:0,class:"py-8 text-center"},xl={key:1,class:"rounded-lg bg-gray-50 py-8 text-center dark:bg-gray-800"},fl={key:2},bl={class:"mb-4 space-y-3"},vl={class:"rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-800"},kl={class:"mb-3 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},hl={class:"flex items-center gap-2"},wl={class:"flex gap-1"},$l={class:"flex flex-1 items-center gap-2 lg:max-w-md"},Al={class:"relative flex-1"},Cl={class:"flex gap-1"},Ul={class:"flex flex-wrap items-center justify-between gap-2"},Il={class:"flex flex-wrap items-center gap-2"},Tl=["disabled"],Kl=["disabled"],Pl=["disabled"],Ml=["disabled"],Dl={class:"flex items-center gap-2 rounded-md bg-purple-50 px-3 py-1.5 dark:bg-purple-900/20"},Sl={class:"text-xs font-medium text-purple-700 dark:text-purple-300"},_l={class:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"},jl={key:0,class:"absolute -left-2 -top-2 z-10"},zl=["title"],Vl={class:"flex flex-col gap-3"},Rl={class:"flex items-start justify-between gap-2"},Ol=["title"],Ll={class:"flex items-center gap-1"},El=["onClick"],Nl=["disabled","onClick"],ql={key:0,class:"loading-spinner-sm"},Gl={key:1,class:"fas fa-redo"},Fl=["disabled","onClick"],Wl={key:0,class:"loading-spinner-sm"},Ql={key:1,class:"fas fa-trash"},Bl={class:"flex flex-wrap items-center gap-3 text-xs text-gray-600 dark:text-gray-400"},Hl={key:0},Jl={key:0,class:"mt-4 flex items-center justify-between"},Yl={class:"text-sm text-gray-600 dark:text-gray-400"},Zl={class:"flex items-center gap-2"},Xl=["disabled"],eo=["disabled"],to={class:"px-3 py-1.5 text-sm font-medium text-gray-700 dark:text-gray-300"},so=["disabled"],ao=["disabled"],ro={__name:"ApiKeyManagementModal",props:{accountId:{type:String,required:!0},accountName:{type:String,default:""}},emits:["close","refresh"],setup(W,{emit:Ke}){const g=W,me=Ke,M=U(!0),G=U(!1),E=U(null),C=U(null),w=U([]),k=U(1),V=U(15),X=U(!1),B=U("all"),ae=U(""),F=U("fuzzy"),H=U(!1),Q=L=>!L||L.length<12?L:`${L.substring(0,8)}...${L.substring(L.length-4)}`,h=ge(()=>{let L=w.value;if(B.value!=="all"&&(L=L.filter(A=>A.status===B.value)),ae.value.trim()){const A=ae.value.trim();L=L.filter(P=>{const ie=P.key;return F.value==="exact"?ie===A:ie.toLowerCase().includes(A.toLowerCase())})}return L}),y=ge(()=>h.value.length),j=ge(()=>Math.ceil(y.value/V.value)),se=ge(()=>{const L=(k.value-1)*V.value,A=L+V.value;return h.value.slice(L,A)}),R=ge(()=>w.value.filter(L=>L.status==="active").length),I=ge(()=>w.value.filter(L=>L.status==="error").length),O=async()=>{G.value=!0;try{const A=(await z.get(`/admin/droid-accounts/${g.accountId}`)).data;let P=[];if(Array.isArray(A.apiKeys))P=A.apiKeys;else if(typeof A.apiKeys=="string")try{P=JSON.parse(A.apiKeys)}catch(le){console.error("Failed to parse apiKeys:",le)}const ie=P.map(le=>typeof le=="string"?{key:le,usageCount:0,status:"active",lastUsedAt:null,errorMessage:""}:typeof le=="object"&&le!==null?{key:le.key||le.apiKey||"",usageCount:le.usageCount||le.count||0,status:le.status||"active",lastUsedAt:le.lastUsedAt||le.lastUsed||null,errorMessage:le.errorMessage||""}:{key:String(le),usageCount:0,status:"active",lastUsedAt:null,errorMessage:""});w.value=ie.sort((le,we)=>le.lastUsedAt&&we.lastUsedAt?new Date(we.lastUsedAt)-new Date(le.lastUsedAt):le.lastUsedAt&&!we.lastUsedAt?-1:!le.lastUsedAt&&we.lastUsedAt?1:(we.usageCount||0)-(le.usageCount||0))}catch(L){console.error("Failed to load API keys:",L),_("加载 API Key 失败","error")}finally{G.value=!1,k.value=1}},ke=async L=>{var A,P;if(confirm(`确定要删除 API Key "${Q(L.key)}" 吗?`)){E.value=L.key;try{const ie={removeApiKeys:[L.key],apiKeyUpdateMode:"delete"};await z.put(`/admin/droid-accounts/${g.accountId}`,ie),_("API Key 已删除","success"),await O(),me("refresh")}catch(ie){console.error("Failed to delete API key:",ie),_(((P=(A=ie.response)==null?void 0:A.data)==null?void 0:P.error)||"删除 API Key 失败","error")}finally{E.value=null}}},_e=async L=>{var A,P;if(confirm(`确定要重置 API Key "${Q(L.key)}" 的状态吗?这将清除错误信息并恢复为正常状态。`)){C.value=L.key;try{const ie={apiKeys:[{key:L.key,status:"active",errorMessage:""}],apiKeyUpdateMode:"update"};await z.put(`/admin/droid-accounts/${g.accountId}`,ie),_("API Key 状态已重置","success"),await O(),me("refresh")}catch(ie){console.error("Failed to reset API key status:",ie),_(((P=(A=ie.response)==null?void 0:A.data)==null?void 0:P.error)||"重置 API Key 状态失败","error")}finally{C.value=null}}},N=async()=>{var A,P;const L=w.value.filter(ie=>ie.status==="error");if(L.length===0){_("没有异常状态的 API Key","warning");return}if(confirm(`确定要删除所有 ${L.length} 个异常状态的 API Key 吗?此操作不可恢复!`)){H.value=!0;try{const le={removeApiKeys:L.map(we=>we.key),apiKeyUpdateMode:"delete"};await z.put(`/admin/droid-accounts/${g.accountId}`,le),_(`成功删除 ${L.length} 个异常 API Key`,"success"),await O(),me("refresh")}catch(ie){console.error("Failed to delete error API keys:",ie),_(((P=(A=ie.response)==null?void 0:A.data)==null?void 0:P.error)||"批量删除失败","error")}finally{H.value=!1}}},u=async()=>{var L,A;if(w.value.length===0){_("没有可删除的 API Key","warning");return}if(confirm(`确定要删除所有 ${w.value.length} 个 API Key 吗?此操作不可恢复!
|
||
|
||
请再次确认:这将删除该账户下的所有 API Key。`)&&confirm("最后确认:真的要删除所有 API Key 吗?")){H.value=!0;try{const P=w.value.map(le=>le.key),ie={removeApiKeys:P,apiKeyUpdateMode:"delete"};await z.put(`/admin/droid-accounts/${g.accountId}`,ie),_(`成功删除所有 ${P.length} 个 API Key`,"success"),await O(),me("refresh")}catch(P){console.error("Failed to delete all API keys:",P),_(((A=(L=P.response)==null?void 0:L.data)==null?void 0:A.error)||"批量删除失败","error")}finally{H.value=!1}}},J=L=>{let A=[],P="";if(L==="error"?(A=w.value.filter(st=>st.status==="error"),P=`error_api_keys_${g.accountName}_${new Date().toISOString().split("T")[0]}.txt`):(A=w.value,P=`all_api_keys_${g.accountName}_${new Date().toISOString().split("T")[0]}.txt`),A.length===0){_("没有可导出的 API Key","warning");return}const ie=A.map(st=>st.key).join(`
|
||
`),le=new Blob([ie],{type:"text/plain;charset=utf-8"}),we=URL.createObjectURL(le),He=document.createElement("a");He.href=we,He.download=P,document.body.appendChild(He),He.click(),document.body.removeChild(He),URL.revokeObjectURL(we),_(`成功导出 ${A.length} 个 API Key`,"success")},ee=async L=>{if(typeof navigator<"u"&&navigator.clipboard&&typeof navigator.clipboard.writeText=="function"&&(typeof window>"u"||window.isSecureContext!==!1)){await navigator.clipboard.writeText(L);return}if(typeof document>"u")throw new Error("clipboard unavailable");const P=document.createElement("textarea");P.value=L,P.setAttribute("readonly",""),P.style.position="fixed",P.style.opacity="0",P.style.pointerEvents="none",document.body.appendChild(P),P.select();try{const ie=document.execCommand("copy");if(document.body.removeChild(P),!ie)throw new Error("execCommand failed")}catch(ie){throw document.body.removeChild(P),ie}},Ae=async L=>{try{await ee(L),_("API Key 已复制","success")}catch(A){console.error("Failed to copy:",A),_("复制失败,请手动复制","error")}},s=async()=>{if(!(!w.value.length||X.value)){X.value=!0;try{const L=w.value.map(A=>A.key).join(`
|
||
`);await ee(L),_(`已复制 ${w.value.length} 条 API Key`,"success")}catch(L){console.error("Failed to copy all keys:",L),_("复制全部 API Key 失败,请手动复制","error")}finally{X.value=!1}}},Ue=L=>{if(!L)return"-";try{return new Date(L).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return"-"}};return Yt(()=>{O()}),(L,A)=>(o(),Fe(Dt,{to:"body"},[M.value?(o(),i("div",il,[e("div",dl,[e("div",ul,[e("div",pl,[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",gl,p(W.accountName),1)])]),e("div",ml,[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:G.value||w.value.length===0||X.value,onClick:s},[e("i",{class:K(["text-sm sm:text-base",X.value?"fas fa-spinner fa-spin":"fas fa-clipboard-list"])},null,2),A[15]||(A[15]=e("span",null,"复制全部 Key",-1))],8,yl),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]=P=>L.$emit("close"))},A[16]||(A[16]=[e("i",{class:"fas fa-times text-base sm:text-lg"},null,-1)]))])]),G.value?(o(),i("div",cl,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)]))):f("",!0),!G.value&&w.value.length===0?(o(),i("div",xl,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)]))):f("",!0),!G.value&&w.value.length>0?(o(),i("div",fl,[e("div",bl,[e("div",vl,[e("div",kl,[e("div",hl,[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",wl,[e("button",{class:K(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",B.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]=P=>B.value="all")}," 全部 ("+p(w.value.length)+") ",3),e("button",{class:K(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",B.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]=P=>B.value="active")},[A[19]||(A[19]=e("i",{class:"fas fa-check-circle mr-1"},null,-1)),$(" 正常 ("+p(R.value)+") ",1)],2),e("button",{class:K(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",B.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]=P=>B.value="error")},[A[20]||(A[20]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),$(" 异常 ("+p(I.value)+") ",1)],2)])]),e("div",$l,[e("div",Al,[v(e("input",{"onUpdate:modelValue":A[4]||(A[4]=P=>ae.value=P),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),[[S,ae.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",Cl,[e("button",{class:K(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",F.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]=P=>F.value="fuzzy")},A[24]||(A[24]=[e("i",{class:"fas fa-search mr-1"},null,-1),$(" 模糊 ",-1)]),2),e("button",{class:K(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",F.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]=P=>F.value="exact")},A[25]||(A[25]=[e("i",{class:"fas fa-equals mr-1"},null,-1),$(" 精确 ",-1)]),2)])])]),A[35]||(A[35]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-700"},null,-1)),e("div",Ul,[e("div",Il,[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:I.value===0||H.value,title:"删除所有异常状态的 API Key",onClick:N},A[26]||(A[26]=[e("i",{class:"fas fa-trash-alt mr-1"},null,-1),$(" 删除异常 ",-1)]),8,Tl),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:w.value.length===0||H.value,title:"删除所有 API Key",onClick:u},A[27]||(A[27]=[e("i",{class:"fas fa-trash mr-1"},null,-1),$(" 删除全部 ",-1)]),8,Kl),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:I.value===0,title:"导出所有异常状态的 API Key",onClick:A[7]||(A[7]=P=>J("error"))},A[28]||(A[28]=[e("i",{class:"fas fa-download mr-1"},null,-1),$(" 导出异常 ",-1)]),8,Pl),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:w.value.length===0,title:"导出所有 API Key",onClick:A[8]||(A[8]=P=>J("all"))},A[29]||(A[29]=[e("i",{class:"fas fa-file-export mr-1"},null,-1),$(" 导出全部 ",-1)]),8,Ml)]),e("div",Dl,[A[34]||(A[34]=e("i",{class:"fas fa-info-circle text-purple-500 dark:text-purple-400"},null,-1)),e("span",Sl,[A[32]||(A[32]=$(" 显示 ",-1)),e("strong",null,p(h.value.length),1),A[33]||(A[33]=$(" 个 ",-1))])])])])]),e("div",_l,[(o(!0),i(ve,null,Se(se.value,(P,ie)=>(o(),i("div",{key:ie,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"},[(P.status==="error"||P.status==="disabled")&&P.errorMessage?(o(),i("div",jl,[e("span",{class:K(["inline-flex items-center justify-center rounded-full px-2 py-0.5 text-[10px] font-semibold shadow-sm",[P.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:`错误状态码: ${P.errorMessage}`},p(P.errorMessage),11,zl)])):f("",!0),e("div",Vl,[e("div",Rl,[e("span",{class:"flex-1 break-all font-mono text-xs font-medium text-gray-900 dark:text-gray-100",title:P.key},p(Q(P.key)),9,Ol),e("div",Ll,[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:le=>Ae(P.key)},A[36]||(A[36]=[e("i",{class:"fas fa-copy"},null,-1)]),8,El),P.status==="error"||P.status==="disabled"?(o(),i("button",{key:0,class:K(["text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-50",[P.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:C.value===P.key,title:"重置状态",onClick:le=>_e(P)},[C.value===P.key?(o(),i("div",ql)):(o(),i("i",Gl))],10,Nl)):f("",!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:E.value===P.key,onClick:le=>ke(P)},[E.value===P.key?(o(),i("div",Wl)):(o(),i("i",Ql))],8,Fl)])]),e("div",Bl,[e("div",null,[e("span",{class:K([P.status==="active"?"text-green-600 dark:text-green-400":P.status==="error"?"text-red-600 dark:text-red-400":"text-yellow-600 dark:text-yellow-400"])},[e("i",{class:K(["mr-1",[P.status==="active"?"fas fa-check-circle":P.status==="error"?"fas fa-exclamation-triangle":"fas fa-exclamation-circle"]])},null,2),$(" "+p(P.status==="active"?"正常":P.status==="error"?"异常":P.status==="disabled"?"禁用":P.status||"未知"),1)],2)]),e("div",null,[e("span",null,[A[37]||(A[37]=$("使用: ",-1)),e("strong",null,p(P.usageCount||0),1),A[38]||(A[38]=$("次",-1))])]),P.lastUsedAt?(o(),i("div",Hl,[e("span",null,p(Ue(P.lastUsedAt)),1)])):f("",!0)])])]))),128))]),j.value>1?(o(),i("div",Jl,[e("div",Yl," 显示 "+p((k.value-1)*V.value+1)+"-"+p(Math.min(k.value*V.value,y.value))+" 项,共 "+p(y.value)+" 项 ",1),e("div",Zl,[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:k.value===1,onClick:A[9]||(A[9]=P=>k.value=1)},A[39]||(A[39]=[e("i",{class:"fas fa-angle-double-left"},null,-1)]),8,Xl),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:k.value===1,onClick:A[10]||(A[10]=P=>k.value--)},A[40]||(A[40]=[e("i",{class:"fas fa-angle-left"},null,-1)]),8,eo),e("span",to,p(k.value)+" / "+p(j.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:k.value===j.value,onClick:A[11]||(A[11]=P=>k.value++)},A[41]||(A[41]=[e("i",{class:"fas fa-angle-right"},null,-1)]),8,so),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:k.value===j.value,onClick:A[12]||(A[12]=P=>k.value=j.value)},A[42]||(A[42]=[e("i",{class:"fas fa-angle-double-right"},null,-1)]),8,ao)])])):f("",!0)])):f("",!0)])])):f("",!0)]))}},lo={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},oo={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"},no={class:"mb-4 flex items-center justify-between sm:mb-6"},io={class:"flex items-center gap-2 sm:gap-3"},uo={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},po={key:0,class:"mb-4 flex items-center justify-center sm:mb-8"},go={class:"flex items-center space-x-2 sm:space-x-4"},mo={class:"flex items-center"},yo={class:"flex items-center"},co={key:1},xo={class:"space-y-6"},fo={key:0},bo={class:"space-y-3"},vo={class:"grid grid-cols-2 gap-2 sm:grid-cols-4"},ko={class:"p-3"},ho={class:"flex items-center justify-between"},wo={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-indigo-500"},$o={class:"p-3"},Ao={class:"flex items-center justify-between"},Co={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-emerald-500"},Uo={class:"p-3"},Io={class:"flex items-center justify-between"},To={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-blue-500"},Ko={class:"p-3"},Po={class:"flex items-center justify-between"},Mo={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-rose-500"},Do={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"},So={class:"grid grid-cols-2 gap-2 sm:grid-cols-3"},_o={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-indigo-500"},jo={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},zo={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-orange-500"},Vo={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-cyan-500"},Ro={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-emerald-500"},Oo={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-teal-500"},Lo={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},Eo={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},No={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-amber-500"},qo={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-rose-500"},Go={key:1},Fo={class:"flex flex-wrap gap-4"},Wo={class:"flex cursor-pointer items-center"},Qo={class:"text-sm text-gray-700 dark:text-gray-300"},Bo={key:0},Ho={key:0,class:"flex cursor-pointer items-center"},Jo={class:"flex cursor-pointer items-center"},Yo={key:1,class:"flex cursor-pointer items-center"},Zo={key:0,class:"mt-1 text-xs text-red-500"},Xo={class:"flex gap-4"},en={class:"flex cursor-pointer items-center"},tn={class:"flex cursor-pointer items-center"},sn={class:"flex cursor-pointer items-center"},an={key:2},rn={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},ln={key:0,class:"mt-3"},on=["min"],nn={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},dn={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},un={key:3},pn={class:"flex gap-2"},gn={class:"flex-1"},mn={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},yn={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},cn=["value"],xn={class:"text-sm text-gray-700 dark:text-gray-200"},fn={key:4},bn={key:5,class:"space-y-4"},vn={key:0,class:"mt-1 text-xs text-red-500"},kn={key:0,class:"mt-1 text-xs text-red-500"},hn={key:0,class:"mt-1 text-xs text-red-500"},wn={key:6,class:"space-y-4"},$n={key:0,class:"mt-1 text-xs text-red-500"},An={key:0,class:"mt-1 text-xs text-red-500"},Cn={key:0,class:"mt-1 text-xs text-red-500"},Un={class:"flex flex-wrap gap-2"},In=["value"],Tn={class:"text-sm text-gray-700 dark:text-gray-300"},Kn={key:7},Pn={class:"mb-3"},Mn={class:"inline-flex cursor-pointer items-center"},Dn={key:0},Sn={key:8,class:"space-y-4"},_n={key:0,class:"mt-1 text-xs text-red-500"},jn={key:0,class:"mt-1 text-xs text-red-500"},zn={class:"grid grid-cols-2 gap-4"},Vn={class:"mb-4 flex gap-2"},Rn={key:0},On={class:"mb-3 grid grid-cols-2 gap-2"},Ln=["value"],En={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Nn={class:"text-xs text-gray-500 dark:text-gray-400"},qn={key:0},Gn={key:1},Fn={class:"mb-3 space-y-2"},Wn=["onUpdate:modelValue"],Qn=["onUpdate:modelValue"],Bn=["onClick"],Hn={class:"mt-3 flex flex-wrap gap-2"},Jn={class:"mb-3"},Yn={class:"inline-flex cursor-pointer items-center"},Zn={key:0},Xn={key:9,class:"space-y-4"},ei={class:"relative"},ti=["type"],si={key:10,class:"space-y-4"},ai={class:"relative"},ri=["type"],li={key:11},oi={class:"flex gap-4"},ni={class:"flex cursor-pointer items-center"},ii={class:"flex cursor-pointer items-center"},di={key:12,class:"mt-4"},ui={class:"flex items-start"},pi={key:13,class:"mt-4"},gi={class:"flex items-start"},mi={class:"ml-3"},yi={key:0,class:"mt-1"},ci={class:"flex items-center justify-between"},xi={class:"text-xs text-green-600 dark:text-green-400"},fi=["disabled"],bi={key:0,class:"fas fa-trash-alt mr-1"},vi={key:1,class:"loading-spinner mr-1"},ki={key:1,class:"mt-1"},hi={key:14,class:"mt-4"},wi={class:"flex items-start"},$i={class:"ml-3 flex-1"},Ai={key:0,class:"mt-3"},Ci={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Ui={class:"flex items-center gap-2"},Ii={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"},Ti={class:"text-blue-600 dark:text-blue-400"},Ki={class:"text-gray-500 dark:text-gray-500"},Pi={class:"text-blue-600 dark:text-blue-400"},Mi={key:15,class:"space-y-4 rounded-lg border border-blue-200 bg-blue-50 p-4"},Di={class:"mb-4 flex items-start gap-3"},Si={key:0,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},_i={key:1,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},ji={key:2,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},zi={key:3,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Vi={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"},Ri={key:0,class:"text-xs text-blue-800 dark:text-blue-300"},Oi={key:1,class:"text-xs text-blue-800 dark:text-blue-300"},Li={key:2,class:"text-xs text-blue-800 dark:text-blue-300"},Ei={key:3,class:"text-xs text-blue-800 dark:text-blue-300"},Ni={key:4,class:"text-xs text-blue-600 dark:text-blue-400"},qi={key:5,class:"text-xs text-red-600 dark:text-red-400"},Gi={key:0},Fi={key:1},Wi={key:0,class:"mt-1 text-xs text-red-500"},Qi={key:2},Bi={key:0,class:"mt-1 text-xs text-red-500"},Hi={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Ji={key:3},Yi={key:16,class:"space-y-4 rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},Zi={key:0,class:"mt-1 text-xs text-red-500"},Xi={class:"flex gap-3 pt-4"},ed=["disabled"],td=["disabled"],sd={key:0,class:"loading-spinner mr-2"},ad={key:3,class:"space-y-6"},rd={key:0},ld={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},od={class:"flex items-start gap-4"},nd={class:"flex-1"},id={class:"space-y-4"},dd={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},ud={class:"flex items-start gap-3"},pd={class:"flex-1"},gd=["disabled"],md={key:0,class:"fas fa-link mr-2"},yd={key:1,class:"loading-spinner mr-2"},cd={key:1,class:"space-y-3"},xd={class:"flex items-center gap-2"},fd=["value"],bd={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},vd={class:"flex items-start gap-3"},kd={class:"flex-1"},hd={class:"space-y-3"},wd={class:"flex gap-3 pt-4"},$d=["disabled"],Ad={key:0,class:"loading-spinner mr-2"},Cd={key:4,class:"space-y-6"},Ud={class:"flex gap-4"},Id={class:"flex cursor-pointer items-center"},Td={class:"flex cursor-pointer items-center"},Kd={class:"flex cursor-pointer items-center"},Pd={key:0},Md={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Dd={key:0,class:"mt-3"},Sd=["min"],_d={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},jd={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},zd={key:1},Vd={class:"flex gap-2"},Rd={class:"flex-1"},Od={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},Ld={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},Ed=["value"],Nd={class:"text-sm text-gray-700 dark:text-gray-200"},qd={key:2},Gd={key:3},Fd={class:"flex gap-4"},Wd={class:"flex cursor-pointer items-center"},Qd={class:"flex cursor-pointer items-center"},Bd={key:4,class:"mt-4"},Hd={class:"flex items-start"},Jd={key:5,class:"mt-4"},Yd={class:"flex items-start"},Zd={class:"ml-3"},Xd={key:0,class:"mt-1"},e0={class:"flex items-center justify-between"},t0={class:"text-xs text-green-600 dark:text-green-400"},s0=["disabled"],a0={key:0,class:"fas fa-trash-alt mr-1"},r0={key:1,class:"loading-spinner mr-1"},l0={key:1,class:"mt-1"},o0={key:6,class:"mt-4"},n0={class:"flex items-start"},i0={class:"ml-3 flex-1"},d0={key:0,class:"mt-3"},u0={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},p0={class:"flex items-center gap-2"},g0={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"},m0={class:"text-blue-600 dark:text-blue-400"},y0={class:"text-gray-500 dark:text-gray-500"},c0={class:"text-blue-600 dark:text-blue-400"},x0={key:7,class:"space-y-4"},f0={class:"grid grid-cols-2 gap-4"},b0={key:0,class:"rounded-lg bg-gray-50 p-4 dark:bg-gray-800"},v0={class:"mb-2 flex items-center justify-between"},k0={class:"text-sm text-gray-500 dark:text-gray-400"},h0={class:"relative h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},w0={class:"mt-2 flex items-center justify-between text-xs"},$0={class:"text-gray-500 dark:text-gray-400"},A0={class:"text-gray-500 dark:text-gray-400"},C0={class:"mb-4 flex gap-2"},U0={key:0},I0={class:"mb-3 grid grid-cols-2 gap-2"},T0=["value"],K0={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},P0={class:"text-xs text-gray-500 dark:text-gray-400"},M0={key:0},D0={key:1},S0={class:"mb-3 space-y-2"},_0=["onUpdate:modelValue"],j0=["onUpdate:modelValue"],z0=["onClick"],V0={class:"mt-3 flex flex-wrap gap-2"},R0={class:"mb-3"},O0={class:"inline-flex cursor-pointer items-center"},L0={key:0},E0={key:8,class:"space-y-4"},N0={class:"relative"},q0=["type"],G0={class:"grid grid-cols-2 gap-4"},F0={key:9,class:"space-y-4"},W0={class:"relative"},Q0=["type"],B0={key:10,class:"space-y-4"},H0={class:"mb-3"},J0={class:"inline-flex cursor-pointer items-center"},Y0={key:0},Z0={key:11,class:"space-y-4"},X0={key:0,class:"mt-1 text-xs text-red-500"},eu={key:0,class:"mt-1 text-xs text-red-500"},tu={key:0,class:"mt-1 text-xs text-red-500"},su={class:"flex flex-wrap gap-2"},au=["value"],ru={class:"text-sm text-gray-700 dark:text-gray-300"},lu={key:12,class:"rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},ou={class:"mb-4 flex items-start gap-3"},nu={class:"flex-1"},iu={class:"mb-2 flex items-center justify-between"},du={class:"mb-1 text-sm text-purple-800 dark:text-purple-200"},uu={class:"space-y-4"},pu={key:0,class:"mt-1 text-xs text-red-500"},gu={class:"space-y-2"},mu={class:"flex items-center justify-between"},yu={class:"text-xs text-purple-600 dark:text-purple-300"},cu={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"},xu=["onClick"],fu={class:"text-xs text-purple-700 dark:text-purple-300"},bu={key:13,class:"rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-700 dark:bg-amber-900/30"},vu={class:"space-y-4"},ku={class:"flex gap-3 pt-4"},hu=["disabled"],wu={key:0,class:"loading-spinner mr-2"},$u={__name:"AccountForm",props:{account:{type:Object,default:null}},emits:["close","success","platform-changed"],setup(W,{emit:Ke}){var as,rs,Vt,Rt,Ot,ls,Lt,Et,os,ns,Nt,qt,Gt,is,ds,us,Ft,ps,Wt,gs,ms,Qt,ys,cs,xs,fs,Bt,Ut,pt,gt,mt;const g=W,me=Ke,M=Ms(),{showConfirmModal:G,confirmOptions:E,showConfirm:C,handleConfirm:w,handleCancel:k}=Ps(),V=ge(()=>!!g.account),X=U(!0),B=U(1),ae=U(!1),F=U(!1),H=U(!1),Q=U(!1),h=U(""),y=U(""),j=U(!1),se=U(""),R=U(""),I=U(!1),O=U(""),ke=U(!1),_e=d=>["claude","claude-console","ccr","bedrock"].includes(d)?"claude":["openai","openai-responses","azure_openai"].includes(d)?"openai":["gemini","gemini-api"].includes(d)?"gemini":d==="droid"?"droid":"",N=()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""}),u=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 Z=typeof t.host=="string"?t.host.trim():t.host!==void 0&&t.host!==null?String(t.host).trim():"",re=t.port!==void 0&&t.port!==null?String(t.port).trim():"",n=typeof t.type=="string"&&t.type.trim()?t.type.trim():"socks5",de=typeof t.username=="string"?t.username:t.username!==void 0&&t.username!==null?String(t.username):"",ne=typeof t.password=="string"?t.password:t.password!==void 0&&t.password!==null?String(t.password):"";return{type:n,host:Z,port:re,username:de,password:ne}},J=d=>{const t=u(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||""}:N()},ee=d=>{if(!d||!d.enabled)return null;const t=(d.host||"").trim(),Z=Number.parseInt(d.port,10);if(!t||Number.isNaN(Z)||Z<=0)return null;const re=d.username?d.username.trim():"",n=d.password?d.password.trim():"";return{type:d.type||"socks5",host:t,port:Z,username:re||null,password:n||null}},Ae=()=>{var d;return J((d=g.account)==null?void 0:d.proxy)},s=U({platform:((as=g.account)==null?void 0:as.platform)||"claude",addType:(()=>{var t;const d=((t=g.account)==null?void 0:t.platform)||"claude";return d==="gemini"||d==="openai"||d==="claude"?"oauth":"manual"})(),name:((rs=g.account)==null?void 0:rs.name)||"",description:((Vt=g.account)==null?void 0:Vt.description)||"",accountType:((Rt=g.account)==null?void 0:Rt.accountType)||"shared",authenticationMethod:((Ot=g.account)==null?void 0:Ot.authenticationMethod)||"",subscriptionType:"claude_max",autoStopOnWarning:((ls=g.account)==null?void 0:ls.autoStopOnWarning)||!1,useUnifiedUserAgent:((Lt=g.account)==null?void 0:Lt.useUnifiedUserAgent)||!1,useUnifiedClientId:((Et=g.account)==null?void 0:Et.useUnifiedClientId)||!1,unifiedClientId:((os=g.account)==null?void 0:os.unifiedClientId)||"",groupId:"",groupIds:[],projectId:((ns=g.account)==null?void 0:ns.projectId)||"",accessToken:"",refreshToken:"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:Ae(),apiUrl:((Nt=g.account)==null?void 0:Nt.apiUrl)||"",apiKey:((qt=g.account)==null?void 0:qt.apiKey)||"",priority:((Gt=g.account)==null?void 0:Gt.priority)||50,endpointType:((is=g.account)==null?void 0:is.endpointType)||"anthropic",baseApi:((ds=g.account)==null?void 0:ds.baseApi)||"",rateLimitDuration:((us=g.account)==null?void 0:us.rateLimitDuration)||60,supportedModels:(()=>{var t;const d=(t=g.account)==null?void 0:t.supportedModels;return d?typeof d=="object"&&!Array.isArray(d)?Object.keys(d):Array.isArray(d)?d:[]:[]})(),userAgent:((Ft=g.account)==null?void 0:Ft.userAgent)||"",enableRateLimit:g.account?g.account.rateLimitDuration>0:!0,dailyQuota:((ps=g.account)==null?void 0:ps.dailyQuota)||0,dailyUsage:((Wt=g.account)==null?void 0:Wt.dailyUsage)||0,quotaResetTime:((gs=g.account)==null?void 0:gs.quotaResetTime)||"00:00",maxConcurrentTasks:((ms=g.account)==null?void 0:ms.maxConcurrentTasks)||0,accessKeyId:((Qt=g.account)==null?void 0:Qt.accessKeyId)||"",secretAccessKey:((ys=g.account)==null?void 0:ys.secretAccessKey)||"",region:((cs=g.account)==null?void 0:cs.region)||"",sessionToken:((xs=g.account)==null?void 0:xs.sessionToken)||"",defaultModel:((fs=g.account)==null?void 0:fs.defaultModel)||"",smallFastModel:((Bt=g.account)==null?void 0:Bt.smallFastModel)||"",azureEndpoint:((Ut=g.account)==null?void 0:Ut.azureEndpoint)||"",apiVersion:((pt=g.account)==null?void 0:pt.apiVersion)||"",deploymentName:((gt=g.account)==null?void 0:gt.deploymentName)||"",expireDuration:(()=>{var d;return(d=g.account)!=null&&d.expiresAt?"custom":""})(),customExpireDate:(()=>{var d;return(d=g.account)!=null&&d.expiresAt?new Date(g.account.expiresAt).toISOString().slice(0,16):""})(),expiresAt:((mt=g.account)==null?void 0:mt.expiresAt)||null}),Ue=U("whitelist"),L=U(["claude-sonnet-4-20250514","claude-sonnet-4-5-20250929","claude-3-5-haiku-20241022"]),A=[{value:"claude-opus-4-5-20251101",label:"Claude Opus 4.5",color:"blue"},{value:"claude-sonnet-4-20250514",label:"Claude Sonnet 4",color:"blue"},{value:"claude-sonnet-4-5-20250929",label:"Claude Sonnet 4.5",color:"indigo"},{value:"claude-3-5-haiku-20241022",label:"Claude 3.5 Haiku",color:"green"},{value:"claude-haiku-4-5-20251001",label:"Claude Haiku 4.5",color:"emerald"},{value:"claude-opus-4-20250514",label:"Claude Opus 4",color:"purple"},{value:"claude-opus-4-1-20250805",label:"Claude Opus 4.1",color:"purple"},{value:"deepseek-chat",label:"DeepSeek Chat",color:"cyan"},{value:"Qwen",label:"Qwen",color:"orange"},{value:"Kimi",label:"Kimi",color:"pink"},{value:"GLM",label:"GLM",color:"teal"}],P=U([]),ie=()=>{var d;if((d=g.account)!=null&&d.supportedModels)if(typeof g.account.supportedModels=="object"&&!Array.isArray(g.account.supportedModels)){const t=Object.entries(g.account.supportedModels);t.every(([re,n])=>re===n)?(Ue.value="whitelist",L.value=t.map(([re])=>re),P.value=t.map(([re,n])=>({from:re,to:n}))):(Ue.value="mapping",P.value=t.map(([re,n])=>({from:re,to:n})))}else Array.isArray(g.account.supportedModels)&&(Ue.value="whitelist",L.value=g.account.supportedModels,P.value=g.account.supportedModels.map(t=>({from:t,to:t})))},le=d=>{if(!d||typeof d!="string")return[];const t=d.split(/\r?\n/).map(re=>re.trim()).filter(re=>re.length>0);return t.length===0?[]:Array.from(new Set(t))},we=[{value:"append",label:"追加模式",description:"保留现有 Key,并在末尾追加新 Key 列表。"},{value:"replace",label:"覆盖模式",description:"先清空旧 Key,再写入上方的新 Key 列表。"},{value:"delete",label:"删除模式",description:"输入要移除的 Key,可精准删除失效或被封禁的 Key。"}],He=ge(()=>{const d=Math.max(we.findIndex(Z=>Z.value===s.value.apiKeyUpdateMode),0),t=100/we.length;return{width:`${t}%`,left:`${d*t}%`}}),st=ge(()=>{const d=we.find(t=>t.value===s.value.apiKeyUpdateMode);return d?d.label:we[0].label}),Ct=ge(()=>{const d=we.find(t=>t.value===s.value.apiKeyUpdateMode);return d?d.description:we[0].description}),T=U({name:"",refreshToken:"",accessToken:"",apiKeys:"",apiUrl:"",apiKey:"",baseApi:"",accessKeyId:"",secretAccessKey:"",region:"",azureEndpoint:"",deploymentName:""}),nt=ge(()=>{var d;return((d=s.value.name)==null?void 0:d.trim())&&s.value.platform}),Ye=ge(()=>h.value&&y.value.trim()),We=()=>{var d;return!V.value||!((d=g.account)!=null&&d.id)?0:typeof s.value.dailyUsage=="number"?s.value.dailyUsage:0},Ne=ge(()=>!s.value.dailyQuota||s.value.dailyQuota<=0?0:We()/s.value.dailyQuota*100),at=ge(()=>{if(!g.account||g.account.platform!=="droid")return 0;let d=0;if(Array.isArray(g.account.apiKeys))d=g.account.apiKeys.length;else if(typeof g.account.apiKeys=="string")try{const Z=JSON.parse(g.account.apiKeys);Array.isArray(Z)&&(d=Z.length)}catch{d=0}const t=g.account.apiKeyCount??g.account.apiKeysCount??g.account.api_key_count??d;return Number(t)||0}),it=ge(()=>{var t,Z,re;if(!V.value||s.value.platform!=="droid")return!1;const d=s.value.authenticationMethod||((t=g.account)==null?void 0:t.authenticationMethod)||((Z=g.account)==null?void 0:Z.authMethod)||((re=g.account)==null?void 0:re.authentication_mode)||"";return typeof d!="string"?!1:d.trim().toLowerCase()==="api_key"}),xt=async()=>{var d;if(!(!V.value||!((d=g.account)!=null&&d.id)))try{const t=await z.get(`/admin/claude-console-accounts/${g.account.id}/usage`);t&&(s.value.dailyUsage=t.dailyUsage||0)}catch{}},Ze=d=>{O.value=d,d==="claude"?s.value.platform="claude":d==="openai"?s.value.platform="openai":d==="gemini"?s.value.platform="gemini":d==="droid"&&(s.value.platform="droid")},ft=async()=>{if(T.value.name="",!nt.value){(!s.value.name||s.value.name.trim()==="")&&(T.value.name="请填写账户名称");return}if(s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)){_("请选择一个分组","error");return}s.value.accountType==="group"&&(s.value.groupIds&&s.value.groupIds.length>0?s.value.groupId=s.value.groupIds[0]:s.value.groupId=""),!(s.value.platform==="gemini"&&B.value===1&&s.value.addType==="oauth"&&(!s.value.projectId||s.value.projectId.trim()==="")&&!await C("项目 ID 未填写",`您尚未填写项目 ID。
|
||
|
||
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
|
||
如果您使用的是普通个人账号,可以继续不填写。`,"继续","返回填写"))&&(B.value=2)},bt=async()=>{H.value=!0;try{const d=ee(s.value.proxy),t=d?{proxy:d}:{},Z=await M.generateClaudeSetupTokenUrl(t);h.value=Z.authUrl,se.value=Z.sessionId}catch(d){_(d.message||"生成Setup Token授权链接失败","error")}finally{H.value=!1}},Je=()=>{h.value="",y.value="",bt()},x=async()=>{try{await navigator.clipboard.writeText(h.value),j.value=!0,_("链接已复制","success"),setTimeout(()=>{j.value=!1},2e3)}catch{const t=document.createElement("textarea");t.value=h.value,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")?(j.value=!0,_("链接已复制","success")):_("复制失败,请手动复制","error")}catch{_("复制失败,请手动复制","error")}document.body.removeChild(t),setTimeout(()=>{j.value=!1},2e3)}},c=async()=>{if(Ye.value){Q.value=!0;try{const d={sessionId:se.value,callbackUrl:y.value.trim()},t=ee(s.value.proxy);t&&(d.proxy=t);const Z=await M.exchangeClaudeSetupTokenCode(d);s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=kt()),await D(Z)}catch(d){_(d.message||"Setup Token授权失败,请检查授权码是否正确","error")}finally{Q.value=!1}}},D=async d=>{var t,Z,re,n,de,ne,Oe,Le;ae.value=!0;try{s.value.platform==="claude"&&s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=kt());const Ce=ee(s.value.proxy),m={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,expiresAt:s.value.expiresAt||void 0,proxy:Ce},oe=s.value.platform;if(oe==="claude"){const te=d.claudeAiOauth||d;if(m.claudeAiOauth=te,te){const Ie={},$e=te.extInfo;if($e&&typeof $e=="object"&&($e.org_uuid&&(Ie.org_uuid=$e.org_uuid),$e.account_uuid&&(Ie.account_uuid=$e.account_uuid)),!$e){const ht=(t=te.organization)==null?void 0:t.uuid,wt=(Z=te.account)==null?void 0:Z.uuid;ht&&(Ie.org_uuid=ht),wt&&(Ie.account_uuid=wt)}Object.keys(Ie).length>0&&(m.extInfo=Ie)}m.priority=s.value.priority||50,m.autoStopOnWarning=s.value.autoStopOnWarning||!1,m.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,m.useUnifiedClientId=s.value.useUnifiedClientId||!1,m.unifiedClientId=s.value.unifiedClientId||"",m.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(oe==="gemini")m.geminiOauth=d.tokens||d,s.value.projectId&&(m.projectId=s.value.projectId),m.priority=s.value.priority||50;else if(oe==="openai")m.openaiOauth=d.tokens||d,m.accountInfo=d.accountInfo,m.priority=s.value.priority||50;else if(oe==="droid"){const te=d.tokens||d||{},Ie={accessToken:te.accessToken||te.access_token||"",refreshToken:te.refreshToken||te.refresh_token||"",expiresAt:te.expiresAt||te.expires_at||"",expiresIn:te.expiresIn||te.expires_in||null,tokenType:te.tokenType||te.token_type||"Bearer",organizationId:te.organizationId||te.organization_id||"",authenticationMethod:te.authenticationMethod||te.authentication_method||""};if(!Ie.refreshToken){ae.value=!1,_("授权成功但未返回 Refresh Token,请确认已授予离线访问权限后重试。","error");return}if(m.refreshToken=Ie.refreshToken,m.accessToken=Ie.accessToken,m.expiresAt=Ie.expiresAt,Ie.expiresIn!==null&&Ie.expiresIn!==void 0&&(m.expiresIn=Ie.expiresIn),m.priority=s.value.priority||50,m.endpointType=s.value.endpointType||"anthropic",m.platform="droid",m.tokenType=Ie.tokenType,m.authenticationMethod=Ie.authenticationMethod,Ie.organizationId&&(m.organizationId=Ie.organizationId),te.user){const $e=te.user,ht=[];typeof $e.first_name=="string"&&$e.first_name.trim()&&ht.push($e.first_name.trim()),typeof $e.last_name=="string"&&$e.last_name.trim()&&ht.push($e.last_name.trim());const wt=ht.join(" ").trim()||(typeof $e.name=="string"?$e.name.trim():"")||(typeof $e.display_name=="string"?$e.display_name.trim():"");typeof $e.email=="string"&&$e.email.trim()&&(m.ownerEmail=$e.email.trim()),wt?(m.ownerName=wt,m.ownerDisplayName=wt):m.ownerEmail&&(m.ownerName=m.ownerName||m.ownerEmail,m.ownerDisplayName=m.ownerDisplayName||m.ownerEmail),typeof $e.id=="string"&&$e.id.trim()&&(m.userId=$e.id.trim())}}let Y;oe==="claude"?Y=await M.createClaudeAccount(m):oe==="gemini"?Y=await M.createGeminiAccount(m):oe==="openai"?Y=await M.createOpenAIAccount(m):oe==="droid"?Y=await M.createDroidAccount(m):Y=await M.createGeminiAccount(m),me("success",Y)}catch(Ce){const m=((n=(re=Ce.response)==null?void 0:re.data)==null?void 0:n.error)||Ce.message||"账户创建失败",oe=((ne=(de=Ce.response)==null?void 0:de.data)==null?void 0:ne.suggestion)||"",Y=((Le=(Oe=Ce.response)==null?void 0:Oe.data)==null?void 0:Le.errorDetails)||null;let te=m;oe&&(te+=`
|
||
${oe}`),Y&&Y.error_description?te+=`
|
||
详细信息: ${Y.error_description}`:Y&&Y.error&&Y.error.message&&(te+=`
|
||
详细信息: ${Y.error.message}`),_(te,"error","",8e3)}finally{ae.value=!1}},qe=async()=>{var t,Z,re,n,de,ne,Oe,Le;T.value.name="",T.value.accessToken="",T.value.refreshToken="",T.value.apiUrl="",T.value.apiKey="",T.value.apiKeys="";let d=!1;if((!s.value.name||s.value.name.trim()==="")&&(T.value.name="请填写账户名称",d=!0),s.value.platform==="claude-console"&&((!s.value.apiUrl||s.value.apiUrl.trim()==="")&&(T.value.apiUrl="请填写 API URL",d=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(T.value.apiKey="请填写 API Key",d=!0)),s.value.platform==="ccr"&&((!s.value.apiUrl||s.value.apiUrl.trim()==="")&&(T.value.apiUrl="请填写 API URL",d=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(T.value.apiKey="请填写 API Key",d=!0)),s.value.platform==="openai-responses"?((!s.value.baseApi||s.value.baseApi.trim()==="")&&(T.value.baseApi="请填写 API 基础地址",d=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(T.value.apiKey="请填写 API 密钥",d=!0)):s.value.platform==="bedrock"?((!s.value.accessKeyId||s.value.accessKeyId.trim()==="")&&(T.value.accessKeyId="请填写 AWS 访问密钥 ID",d=!0),(!s.value.secretAccessKey||s.value.secretAccessKey.trim()==="")&&(T.value.secretAccessKey="请填写 AWS 秘密访问密钥",d=!0),(!s.value.region||s.value.region.trim()==="")&&(T.value.region="请选择 AWS 区域",d=!0)):s.value.platform==="azure_openai"?((!s.value.azureEndpoint||s.value.azureEndpoint.trim()==="")&&(T.value.azureEndpoint="请填写 Azure Endpoint",d=!0),(!s.value.deploymentName||s.value.deploymentName.trim()==="")&&(T.value.deploymentName="请填写部署名称",d=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(T.value.apiKey="请填写 API Key",d=!0)):s.value.addType==="manual"?s.value.platform==="openai"?(!s.value.refreshToken||s.value.refreshToken.trim()==="")&&(T.value.refreshToken="请填写 Refresh Token",d=!0):s.value.platform==="gemini"?(!s.value.accessToken||s.value.accessToken.trim()==="")&&(T.value.accessToken="请填写 Access Token",d=!0):s.value.platform==="droid"?((!s.value.accessToken||s.value.accessToken.trim()==="")&&(T.value.accessToken="请填写 Access Token",d=!0),(!s.value.refreshToken||s.value.refreshToken.trim()==="")&&(T.value.refreshToken="请填写 Refresh Token",d=!0)):s.value.platform==="claude"&&(!s.value.accessToken||s.value.accessToken.trim()==="")&&(T.value.accessToken="请填写 Access Token",d=!0):s.value.addType==="apikey"&&(s.value.platform==="gemini-api"?(!s.value.apiKey||s.value.apiKey.trim()==="")&&(T.value.apiKey="请填写 API Key",d=!0):le(s.value.apiKeysInput).length===0&&(T.value.apiKeys="请至少填写一个 API Key",d=!0)),s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)&&(_("请选择一个分组","error"),d=!0),s.value.accountType==="group"&&(s.value.groupIds&&s.value.groupIds.length>0?s.value.groupId=s.value.groupIds[0]:s.value.groupId=""),!d){ae.value=!0;try{const Ce=ee(s.value.proxy),m={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,expiresAt:s.value.expiresAt||void 0,proxy:Ce};if(s.value.platform==="claude"){const Y=s.value.refreshToken?6e5:31536e6;s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=kt()),m.claudeAiOauth={accessToken:s.value.accessToken,refreshToken:s.value.refreshToken||"",expiresAt:Date.now()+Y,scopes:[]},m.priority=s.value.priority||50,m.autoStopOnWarning=s.value.autoStopOnWarning||!1,m.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,m.useUnifiedClientId=s.value.useUnifiedClientId||!1,m.unifiedClientId=s.value.unifiedClientId||"",m.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(s.value.platform==="gemini"){const Y=s.value.refreshToken?6e5:31536e6;m.geminiOauth={access_token:s.value.accessToken,refresh_token:s.value.refreshToken||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+Y},s.value.projectId&&(m.projectId=s.value.projectId),m.priority=s.value.priority||50}else if(s.value.platform==="openai"){const Y=s.value.refreshToken?6e5:31536e6;m.openaiOauth={idToken:"",accessToken:s.value.accessToken||"",refreshToken:s.value.refreshToken,expires_in:Math.floor(Y/1e3)},m.accountInfo={accountId:"",chatgptUserId:"",organizationId:"",organizationRole:"",organizationTitle:"",planType:"",email:"",emailVerified:!1},m.needsImmediateRefresh=!0,m.requireRefreshSuccess=!0,m.priority=s.value.priority||50}else if(s.value.platform==="droid")if(m.priority=s.value.priority||50,m.endpointType=s.value.endpointType||"anthropic",m.platform="droid",s.value.addType==="apikey"){const Y=le(s.value.apiKeysInput);m.apiKeys=Y,m.authenticationMethod="api_key",m.isActive=!0,m.schedulable=!0}else{const Y=((t=s.value.accessToken)==null?void 0:t.trim())||"",te=((Z=s.value.refreshToken)==null?void 0:Z.trim())||"",Ie=new Date(Date.now()+8*60*60*1e3).toISOString();m.accessToken=Y,m.refreshToken=te,m.expiresAt=Ie,m.expiresIn=8*60*60,m.tokenType="Bearer",m.authenticationMethod="manual"}else s.value.platform==="claude-console"||s.value.platform==="ccr"?(m.apiUrl=s.value.apiUrl,m.apiKey=s.value.apiKey,m.priority=s.value.priority||50,m.supportedModels=St()||{},m.userAgent=s.value.userAgent||null,m.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0,m.dailyQuota=s.value.dailyQuota||0,m.quotaResetTime=s.value.quotaResetTime||"00:00",m.maxConcurrentTasks=s.value.maxConcurrentTasks||0):s.value.platform==="openai-responses"?(m.baseApi=s.value.baseApi,m.apiKey=s.value.apiKey,m.userAgent=s.value.userAgent||"",m.priority=s.value.priority||50,m.rateLimitDuration=60,m.dailyQuota=s.value.dailyQuota||0,m.quotaResetTime=s.value.quotaResetTime||"00:00"):s.value.platform==="gemini-api"?(m.baseUrl=s.value.baseUrl||"https://generativelanguage.googleapis.com",m.apiKey=s.value.apiKey,m.priority=s.value.priority||50,m.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[]):s.value.platform==="bedrock"?(m.awsCredentials={accessKeyId:s.value.accessKeyId,secretAccessKey:s.value.secretAccessKey,sessionToken:s.value.sessionToken||null},m.region=s.value.region,m.defaultModel=s.value.defaultModel||null,m.smallFastModel=s.value.smallFastModel||null,m.priority=s.value.priority||50,m.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0):s.value.platform==="azure_openai"&&(m.azureEndpoint=s.value.azureEndpoint,m.apiKey=s.value.apiKey,m.apiVersion=s.value.apiVersion||"2024-02-01",m.deploymentName=s.value.deploymentName,m.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[],m.priority=s.value.priority||50,m.isActive=s.value.isActive!==!1,m.schedulable=s.value.schedulable!==!1);let oe;if(s.value.platform==="claude")oe=await M.createClaudeAccount(m);else if(s.value.platform==="claude-console"||s.value.platform==="ccr")oe=await M.createClaudeConsoleAccount(m);else if(s.value.platform==="droid")oe=await M.createDroidAccount(m);else if(s.value.platform==="openai-responses")oe=await M.createOpenAIResponsesAccount(m);else if(s.value.platform==="bedrock")oe=await M.createBedrockAccount(m);else if(s.value.platform==="openai")oe=await M.createOpenAIAccount(m);else if(s.value.platform==="azure_openai")oe=await M.createAzureOpenAIAccount(m);else if(s.value.platform==="gemini")oe=await M.createGeminiAccount(m);else if(s.value.platform==="gemini-api")oe=await M.createGeminiApiAccount(m);else throw new Error(`不支持的平台: ${s.value.platform}`);me("success",oe)}catch(Ce){const m=((n=(re=Ce.response)==null?void 0:re.data)==null?void 0:n.error)||Ce.message||"账户创建失败",oe=((ne=(de=Ce.response)==null?void 0:de.data)==null?void 0:ne.suggestion)||"",Y=((Le=(Oe=Ce.response)==null?void 0:Oe.data)==null?void 0:Le.errorDetails)||null;let te=m;oe&&(te+=`
|
||
${oe}`),Y&&Y.error_description?te+=`
|
||
详细信息: ${Y.error_description}`:Y&&Y.error&&Y.error.message&&(te+=`
|
||
详细信息: ${Y.error.message}`),_(te,"error","",8e3)}finally{ae.value=!1}}},Tt=async()=>{var d,t,Z,re,n,de,ne,Oe,Le;if(T.value.name="",T.value.apiKeys="",!s.value.name||s.value.name.trim()===""){T.value.name="请填写账户名称";return}if(s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)){_("请选择一个分组","error");return}if(s.value.accountType==="group"&&(s.value.groupIds&&s.value.groupIds.length>0?s.value.groupId=s.value.groupIds[0]:s.value.groupId=""),!(s.value.platform==="gemini"&&(!s.value.projectId||s.value.projectId.trim()==="")&&!await C("项目 ID 未填写",`您尚未填写项目 ID。
|
||
|
||
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
|
||
如果您使用的是普通个人账号,可以继续不填写。`,"继续保存","返回填写"))){ae.value=!0;try{const Ce=ee(s.value.proxy),m={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,expiresAt:s.value.expiresAt||void 0,proxy:Ce};if(s.value.accessToken||s.value.refreshToken){const oe=((d=s.value.accessToken)==null?void 0:d.trim())||"",Y=((t=s.value.refreshToken)==null?void 0:t.trim())||"";if(g.account.platform==="claude"){const te=s.value.refreshToken?6e5:31536e6;m.claudeAiOauth={accessToken:oe||"",refreshToken:Y||"",expiresAt:Date.now()+te,scopes:g.account.scopes||[]}}else if(g.account.platform==="gemini"){const te=s.value.refreshToken?6e5:31536e6;m.geminiOauth={access_token:oe||"",refresh_token:Y||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+te}}else if(g.account.platform==="openai"){const te=s.value.refreshToken?6e5:31536e6;m.openaiOauth={idToken:"",accessToken:oe||"",refreshToken:Y||"",expires_in:Math.floor(te/1e3)},Y&&Y!==g.account.refreshToken&&(m.needsImmediateRefresh=!0,m.requireRefreshSuccess=!0)}else g.account.platform==="droid"&&(oe&&(m.accessToken=oe),Y&&(m.refreshToken=Y))}if(g.account.platform==="droid"){const oe=((Z=s.value.apiKeysInput)==null?void 0:Z.trim())||"",Y=s.value.apiKeyUpdateMode||"append";if(Y==="delete"){if(!oe){T.value.apiKeys="请填写需要删除的 API Key",ae.value=!1;return}const te=le(oe);if(te.length===0){T.value.apiKeys="请填写需要删除的 API Key",ae.value=!1;return}m.removeApiKeys=te,m.apiKeyUpdateMode="delete"}else{if(oe){const te=le(oe);if(te.length===0){T.value.apiKeys="请至少填写一个 API Key",ae.value=!1;return}m.apiKeys=te}else Y==="replace"&&(m.apiKeys=[]);(Y!=="append"||oe)&&(m.apiKeyUpdateMode=Y)}it.value&&(m.authenticationMethod="api_key")}if(g.account.platform==="gemini"&&(m.projectId=s.value.projectId||""),g.account.platform==="droid"&&(m.priority=s.value.priority||50,m.endpointType=s.value.endpointType||"anthropic"),g.account.platform==="claude"&&(s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=kt()),m.priority=s.value.priority||50,m.autoStopOnWarning=s.value.autoStopOnWarning||!1,m.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,m.useUnifiedClientId=s.value.useUnifiedClientId||!1,m.unifiedClientId=s.value.unifiedClientId||"",m.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}),g.account.platform==="openai"&&(m.priority=s.value.priority||50),g.account.platform==="gemini"&&(m.priority=s.value.priority||50),g.account.platform==="claude-console"&&(m.apiUrl=s.value.apiUrl,s.value.apiKey&&(m.apiKey=s.value.apiKey),m.priority=s.value.priority||50,m.supportedModels=St()||{},m.userAgent=s.value.userAgent||null,m.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0,m.dailyQuota=s.value.dailyQuota||0,m.quotaResetTime=s.value.quotaResetTime||"00:00",m.maxConcurrentTasks=s.value.maxConcurrentTasks||0),g.account.platform==="openai-responses"&&(m.baseApi=s.value.baseApi,s.value.apiKey&&(m.apiKey=s.value.apiKey),m.userAgent=s.value.userAgent||"",m.priority=s.value.priority||50,m.dailyQuota=s.value.dailyQuota||0,m.quotaResetTime=s.value.quotaResetTime||"00:00"),g.account.platform==="bedrock"&&((s.value.accessKeyId||s.value.secretAccessKey||s.value.sessionToken)&&(m.awsCredentials={},s.value.accessKeyId&&(m.awsCredentials.accessKeyId=s.value.accessKeyId),s.value.secretAccessKey&&(m.awsCredentials.secretAccessKey=s.value.secretAccessKey),s.value.sessionToken!==void 0&&(m.awsCredentials.sessionToken=s.value.sessionToken||null)),s.value.region&&(m.region=s.value.region),m.defaultModel=s.value.defaultModel||null,m.smallFastModel=s.value.smallFastModel||null,m.priority=s.value.priority||50,m.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0),g.account.platform==="azure_openai"&&(m.azureEndpoint=s.value.azureEndpoint,m.apiVersion=s.value.apiVersion||"2024-02-01",m.deploymentName=s.value.deploymentName,m.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[],m.priority=s.value.priority||50,s.value.apiKey&&s.value.apiKey.trim()&&(m.apiKey=s.value.apiKey)),g.account.platform==="gemini-api"&&(m.baseUrl=s.value.baseUrl||"https://generativelanguage.googleapis.com",s.value.apiKey&&s.value.apiKey.trim()&&(m.apiKey=s.value.apiKey),m.priority=s.value.priority||50,m.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[]),g.account.platform==="claude")await M.updateClaudeAccount(g.account.id,m);else if(g.account.platform==="claude-console")await M.updateClaudeConsoleAccount(g.account.id,m);else if(g.account.platform==="openai-responses")await M.updateOpenAIResponsesAccount(g.account.id,m);else if(g.account.platform==="bedrock")await M.updateBedrockAccount(g.account.id,m);else if(g.account.platform==="openai")await M.updateOpenAIAccount(g.account.id,m);else if(g.account.platform==="azure_openai")await M.updateAzureOpenAIAccount(g.account.id,m);else if(g.account.platform==="gemini")await M.updateGeminiAccount(g.account.id,m);else if(g.account.platform==="gemini-api")await M.updateGeminiApiAccount(g.account.id,m);else if(g.account.platform==="droid")await M.updateDroidAccount(g.account.id,m);else throw new Error(`不支持的平台: ${g.account.platform}`);me("success")}catch(Ce){const m=((n=(re=Ce.response)==null?void 0:re.data)==null?void 0:n.error)||Ce.message||"账户更新失败",oe=((ne=(de=Ce.response)==null?void 0:de.data)==null?void 0:ne.suggestion)||"",Y=((Le=(Oe=Ce.response)==null?void 0:Oe.data)==null?void 0:Le.errorDetails)||null;let te=m;oe&&(te+=`
|
||
${oe}`),Y&&Y.error_description?te+=`
|
||
详细信息: ${Y.error_description}`:Y&&Y.error&&Y.error.message&&(te+=`
|
||
详细信息: ${Y.error.message}`),_(te,"error","",8e3)}finally{ae.value=!1}}};pe(()=>s.value.name,()=>{var d;T.value.name&&((d=s.value.name)!=null&&d.trim())&&(T.value.name="")}),pe(()=>s.value.accessToken,()=>{var d;T.value.accessToken&&((d=s.value.accessToken)!=null&&d.trim())&&(T.value.accessToken="")}),pe(()=>s.value.refreshToken,()=>{var d;T.value.refreshToken&&((d=s.value.refreshToken)!=null&&d.trim())&&(T.value.refreshToken="")}),pe(()=>s.value.apiUrl,()=>{var d;T.value.apiUrl&&((d=s.value.apiUrl)!=null&&d.trim())&&(T.value.apiUrl="")}),pe(()=>s.value.apiKey,()=>{var d;T.value.apiKey&&((d=s.value.apiKey)!=null&&d.trim())&&(T.value.apiKey="")}),pe(()=>s.value.azureEndpoint,()=>{var d;T.value.azureEndpoint&&((d=s.value.azureEndpoint)!=null&&d.trim())&&(T.value.azureEndpoint="")}),pe(()=>s.value.deploymentName,()=>{var d;T.value.deploymentName&&((d=s.value.deploymentName)!=null&&d.trim())&&(T.value.deploymentName="")});const lt=U([]),Qe=U(!1),De=U(!1),dt=ge(()=>{let d=s.value.platform;return s.value.platform==="claude-console"||s.value.platform==="ccr"?d="claude":s.value.platform==="openai-responses"?d="openai":s.value.platform==="gemini-api"&&(d="gemini"),lt.value.filter(t=>t.platform===d)}),ut=async()=>{Qe.value=!0;try{const d=await z.get("/admin/account-groups");lt.value=d.data||[]}catch{_("加载分组列表失败","error"),lt.value=[]}finally{Qe.value=!1}},vt=async()=>{await ut(),_("分组列表已刷新","success")},Ve=()=>{De.value=!0},Kt=async()=>{await ut()},Xe=async()=>{var t;if(!((t=g.account)!=null&&t.id))return;const d=[typeof M.fetchDroidAccounts=="function"?M.fetchDroidAccounts:null,typeof M.fetchAllAccounts=="function"?M.fetchAllAccounts:null].filter(Boolean);for(const Z of d)try{await Z();return}catch(re){console.error("刷新账户列表失败:",re)}};pe(()=>s.value.platform,d=>{d==="claude-console"||d==="ccr"||d==="bedrock"||d==="openai-responses"?s.value.addType="manual":d==="claude"||d==="gemini"||d==="openai"?s.value.addType="oauth":(d==="gemini-api"||d==="azure_openai")&&(s.value.addType="apikey"),s.value.accountType==="group"&&(s.value.groupId="",s.value.groupIds=[])}),pe(()=>s.value.groupIds,d=>{s.value.accountType==="group"&&(d&&d.length>0?s.value.groupId=d[0]:s.value.groupId="")},{deep:!0}),pe(()=>s.value.addType,(d,t)=>{d!==t&&(d==="apikey"?(s.value.accessToken="",s.value.refreshToken="",T.value.accessToken="",T.value.refreshToken="",s.value.authenticationMethod="api_key",s.value.apiKeyUpdateMode="append"):t==="apikey"&&(s.value.apiKeysInput="",s.value.apiKeyUpdateMode="append",T.value.apiKeys="",V.value||(s.value.authenticationMethod="")))}),pe(()=>s.value.apiKeyUpdateMode,(d,t)=>{d!==t&&T.value.apiKeys&&(T.value.apiKeys="")}),pe(()=>s.value.apiKeysInput,d=>{if(!T.value.apiKeys)return;const t=le(d),Z=s.value.apiKeyUpdateMode;if(Z==="append"&&t.length>0){T.value.apiKeys="";return}if(Z==="replace"){(t.length>0||!d||d.trim()==="")&&(T.value.apiKeys="");return}Z==="delete"&&t.length>0&&(T.value.apiKeys="")}),pe(y,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 n=new URL(t).searchParams.get("code");n?(y.value=n,_("成功提取授权码!","success")):_("URL 中未找到授权码参数,请检查链接是否正确","error")}catch{_("链接格式错误,请检查是否为完整的 URL","error")}else _("请粘贴以 http://localhost:45462 开头的链接","error")}),pe(()=>s.value.platform,d=>{V.value||me("platform-changed",d)}),pe(()=>s.value.accountType,d=>{d==="group"&<.value.length===0&&ut()}),pe(()=>s.value.groupId,d=>{d==="__new__"&&(s.value.groupId="",De.value=!0)});const ot=()=>{P.value.push({from:"",to:""})},et=d=>{P.value.splice(d,1)},Pe=(d,t)=>{if(P.value.some(re=>re.from===d)){_(`模型 ${d} 的映射已存在`,"info");return}P.value.push({from:d,to:t}),_(`已添加映射: ${d} → ${t}`,"success")},St=()=>{const d={};return Ue.value==="whitelist"?L.value.forEach(t=>{d[t]=t}):P.value.forEach(t=>{t.from&&t.to&&(d[t.from]=t.to)}),Object.keys(d).length>0?d:null};pe(()=>g.account,d=>{if(d){ie();const t=J(d.proxy),Z=typeof d.authenticationMethod=="string"?d.authenticationMethod.trim().toLowerCase():"",re=Z==="api_key"?"apikey":Z==="manual"?"manual":"oauth";let n="";d.accountType==="group"&&(n=d.groupId||d.groupInfo&&d.groupInfo.id||"");let de="claude_max";if(d.subscriptionInfo){const ne=typeof d.subscriptionInfo=="string"?JSON.parse(d.subscriptionInfo):d.subscriptionInfo;ne.accountType?de=ne.accountType:ne.hasClaudeMax?de="claude_max":ne.hasClaudePro?de="claude_pro":de="claude_free"}s.value={platform:d.platform,addType:re,name:d.name,description:d.description||"",accountType:d.accountType||"shared",subscriptionType:de,autoStopOnWarning:d.autoStopOnWarning||!1,useUnifiedUserAgent:d.useUnifiedUserAgent||!1,useUnifiedClientId:d.useUnifiedClientId||!1,unifiedClientId:d.unifiedClientId||"",groupId:n,groupIds:[],projectId:d.projectId||"",accessToken:"",refreshToken:"",authenticationMethod:d.authenticationMethod||"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:t,apiUrl:d.apiUrl||"",apiKey:"",priority:d.priority||50,supportedModels:(()=>{const ne=d.supportedModels;return ne?typeof ne=="object"&&!Array.isArray(ne)?Object.keys(ne):Array.isArray(ne)?ne:[]:[]})(),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||"",dailyQuota:d.dailyQuota||0,dailyUsage:d.dailyUsage||0,quotaResetTime:d.quotaResetTime||"00:00",maxConcurrentTasks:d.maxConcurrentTasks||0},d.platform==="claude-console"&&xt(),d.accountType==="group"&&ut().then(async()=>{const ne=[];if(d.groupInfo&&d.groupInfo.id)s.value.groupId=d.groupInfo.id,ne.push(d.groupInfo.id);else if(d.groupId)s.value.groupId=d.groupId,ne.push(d.groupId);else if(d.groupIds&&Array.isArray(d.groupIds)&&d.groupIds.length>0)s.value.groupId=d.groupIds[0],ne.push(...d.groupIds);else{const Oe=lt.value.map(async Le=>{try{((await z.get(`/admin/account-groups/${Le.id}/members`)).data||[]).some(oe=>oe.id===d.id)&&(ne.push(Le.id),s.value.groupId||(s.value.groupId=Le.id))}catch{}});await Promise.all(Oe)}s.value.groupIds=ne})}},{immediate:!0});const Xt=async()=>{try{const d=await z.get("/admin/claude-code-version");d.success&&d.userAgent?R.value=d.userAgent:R.value=""}catch{R.value=""}},es=async()=>{I.value=!0;try{(await z.post("/admin/claude-code-version/clear")).success?(R.value="",_("统一User-Agent缓存已清除","success")):_("清除缓存失败","error")}catch(d){_("清除缓存失败:"+(d.message||"未知错误"),"error")}finally{I.value=!1}},kt=()=>{const d=new Uint8Array(32);return crypto.getRandomValues(d),Array.from(d,t=>t.toString(16).padStart(2,"0")).join("")},ts=()=>{s.value.unifiedClientId=kt(),_("已生成新的客户端标识","success")},ss=()=>{s.value.useUnifiedClientId&&(s.value.useUnifiedUserAgent=!0,s.value.unifiedClientId||(s.value.unifiedClientId=kt()))},_t=ge(()=>{const d=new Date;return d.setMinutes(d.getMinutes()+1),d.toISOString().slice(0,16)}),Pt=()=>{if(!s.value.expireDuration){s.value.expiresAt=null;return}if(s.value.expireDuration==="custom")return;const d=new Date,Z=s.value.expireDuration.match(/(\d+)([d])/);if(Z){const[,re,n]=Z,de=parseInt(re);n==="d"&&d.setDate(d.getDate()+de),s.value.expiresAt=d.toISOString()}},jt=()=>{s.value.customExpireDate&&(s.value.expiresAt=new Date(s.value.customExpireDate).toISOString())},zt=d=>d?new Date(d).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"";return Yt(()=>{var d;O.value=_e(s.value.platform),V.value&&ie(),Xt(),V.value&&((d=g.account)==null?void 0:d.platform)==="claude-console"&&xt()}),pe(()=>s.value.platform,d=>{d==="claude"&&Xt()}),(d,t)=>{var Z,re;return o(),Fe(Dt,{to:"body"},[X.value?(o(),i("div",lo,[e("div",oo,[e("div",no,[e("div",io,[t[154]||(t[154]=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",uo,p(V.value?"编辑账户":"添加账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:t[0]||(t[0]=n=>d.$emit("close"))},t[155]||(t[155]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),!V.value&&(s.value.addType==="oauth"||s.value.addType==="setup-token")?(o(),i("div",po,[e("div",go,[e("div",mo,[e("div",{class:K(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",B.value>=1?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 1 ",2),t[156]||(t[156]=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[158]||(t[158]=e("div",{class:"h-0.5 w-4 bg-gray-300 sm:w-8"},null,-1)),e("div",yo,[e("div",{class:K(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",B.value>=2?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 2 ",2),t[157]||(t[157]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"授权认证",-1))])])])):f("",!0),B.value===1&&!V.value?(o(),i("div",co,[e("div",xo,[V.value?f("",!0):(o(),i("div",fo,[t[196]||(t[196]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择平台",-1)),e("div",bo,[e("div",vo,[e("div",{class:K(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[O.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]=n=>Ze("claude"))},[e("div",ko,[e("div",ho,[t[160]||(t[160]=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)),O.value==="claude"?(o(),i("div",wo,t[159]||(t[159]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)]),t[161]||(t[161]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Claude ",-1)),t[162]||(t[162]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Anthropic",-1))])],2),e("div",{class:K(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[O.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]=n=>Ze("openai"))},[e("div",$o,[e("div",Ao,[t[164]||(t[164]=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)),O.value==="openai"?(o(),i("div",Co,t[163]||(t[163]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)]),t[165]||(t[165]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," OpenAI ",-1)),t[166]||(t[166]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"GPT 系列",-1))])],2),e("div",{class:K(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[O.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]=n=>Ze("gemini"))},[e("div",Uo,[e("div",Io,[t[168]||(t[168]=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)),O.value==="gemini"?(o(),i("div",To,t[167]||(t[167]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)]),t[169]||(t[169]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Gemini ",-1)),t[170]||(t[170]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Google AI",-1))])],2),e("div",{class:K(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[O.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]=n=>Ze("droid"))},[e("div",Ko,[e("div",Po,[t[172]||(t[172]=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)),O.value==="droid"?(o(),i("div",Mo,t[171]||(t[171]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)]),t[173]||(t[173]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Droid ",-1)),t[174]||(t[174]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Claude Droid",-1))])],2)]),O.value?(o(),i("div",Do,[t[195]||(t[195]=e("p",{class:"mb-2 text-xs font-medium text-gray-700 dark:text-gray-300"}," 选择具体平台类型: ",-1)),e("div",So,[O.value==="claude"?(o(),i(ve,{key:0},[e("label",{class:K(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.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"]])},[v(e("input",{"onUpdate:modelValue":t[5]||(t[5]=n=>s.value.platform=n),class:"sr-only",type:"radio",value:"claude"},null,512),[[he,s.value.platform]]),t[176]||(t[176]=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)),s.value.platform==="claude"?(o(),i("div",_o,t[175]||(t[175]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2),e("label",{class:K(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.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"]])},[v(e("input",{"onUpdate:modelValue":t[6]||(t[6]=n=>s.value.platform=n),class:"sr-only",type:"radio",value:"claude-console"},null,512),[[he,s.value.platform]]),t[178]||(t[178]=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)),s.value.platform==="claude-console"?(o(),i("div",jo,t[177]||(t[177]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2),e("label",{class:K(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.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"]])},[v(e("input",{"onUpdate:modelValue":t[7]||(t[7]=n=>s.value.platform=n),class:"sr-only",type:"radio",value:"bedrock"},null,512),[[he,s.value.platform]]),t[180]||(t[180]=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)),s.value.platform==="bedrock"?(o(),i("div",zo,t[179]||(t[179]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2),e("label",{class:K(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.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"]])},[v(e("input",{"onUpdate:modelValue":t[8]||(t[8]=n=>s.value.platform=n),class:"sr-only",type:"radio",value:"ccr"},null,512),[[he,s.value.platform]]),t[182]||(t[182]=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)),s.value.platform==="ccr"?(o(),i("div",Vo,t[181]||(t[181]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2)],64)):f("",!0),O.value==="openai"?(o(),i(ve,{key:1},[e("label",{class:K(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.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"]])},[v(e("input",{"onUpdate:modelValue":t[9]||(t[9]=n=>s.value.platform=n),class:"sr-only",type:"radio",value:"openai"},null,512),[[he,s.value.platform]]),t[184]||(t[184]=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)),s.value.platform==="openai"?(o(),i("div",Ro,t[183]||(t[183]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2),e("label",{class:K(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.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"]])},[v(e("input",{"onUpdate:modelValue":t[10]||(t[10]=n=>s.value.platform=n),class:"sr-only",type:"radio",value:"openai-responses"},null,512),[[he,s.value.platform]]),t[186]||(t[186]=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)),s.value.platform==="openai-responses"?(o(),i("div",Oo,t[185]||(t[185]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2),e("label",{class:K(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.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"]])},[v(e("input",{"onUpdate:modelValue":t[11]||(t[11]=n=>s.value.platform=n),class:"sr-only",type:"radio",value:"azure_openai"},null,512),[[he,s.value.platform]]),t[188]||(t[188]=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)),s.value.platform==="azure_openai"?(o(),i("div",Lo,t[187]||(t[187]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2)],64)):f("",!0),O.value==="gemini"?(o(),i(ve,{key:2},[e("label",{class:K(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.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"]])},[v(e("input",{"onUpdate:modelValue":t[12]||(t[12]=n=>s.value.platform=n),class:"sr-only",type:"radio",value:"gemini"},null,512),[[he,s.value.platform]]),t[190]||(t[190]=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)),s.value.platform==="gemini"?(o(),i("div",Eo,t[189]||(t[189]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2),e("label",{class:K(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.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"]])},[v(e("input",{"onUpdate:modelValue":t[13]||(t[13]=n=>s.value.platform=n),class:"sr-only",type:"radio",value:"gemini-api"},null,512),[[he,s.value.platform]]),t[192]||(t[192]=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)),s.value.platform==="gemini-api"?(o(),i("div",No,t[191]||(t[191]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2)],64)):f("",!0),O.value==="droid"?(o(),i("label",{key:3,class:K(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.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"]])},[v(e("input",{"onUpdate:modelValue":t[14]||(t[14]=n=>s.value.platform=n),class:"sr-only",type:"radio",value:"droid"},null,512),[[he,s.value.platform]]),t[194]||(t[194]=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)),s.value.platform==="droid"?(o(),i("div",qo,t[193]||(t[193]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2)):f("",!0)])])):f("",!0)])])),!V.value&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"&&s.value.platform!=="gemini-api"?(o(),i("div",Go,[t[201]||(t[201]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"添加方式",-1)),e("div",Fo,[e("label",Wo,[v(e("input",{"onUpdate:modelValue":t[15]||(t[15]=n=>s.value.addType=n),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"oauth"},null,512),[[he,s.value.addType]]),e("span",Qo,[t[197]||(t[197]=$(" OAuth 授权",-1)),s.value.platform==="claude"||s.value.platform==="openai"?(o(),i("span",Bo," (用量可视化)")):f("",!0)])]),s.value.platform==="claude"?(o(),i("label",Ho,[v(e("input",{"onUpdate:modelValue":t[16]||(t[16]=n=>s.value.addType=n),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),[[he,s.value.addType]]),t[198]||(t[198]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Setup Token (效期长)",-1))])):f("",!0),e("label",Jo,[v(e("input",{"onUpdate:modelValue":t[17]||(t[17]=n=>s.value.addType=n),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"manual"},null,512),[[he,s.value.addType]]),t[199]||(t[199]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"手动输入 Access Token",-1))]),s.value.platform==="droid"?(o(),i("label",Yo,[v(e("input",{"onUpdate:modelValue":t[18]||(t[18]=n=>s.value.addType=n),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"apikey"},null,512),[[he,s.value.addType]]),t[200]||(t[200]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"使用 API Key (支持多个)",-1))])):f("",!0)])])):f("",!0),e("div",null,[t[202]||(t[202]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),v(e("input",{"onUpdate:modelValue":t[19]||(t[19]=n=>s.value.name=n),class:K(["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":T.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[S,s.value.name]]),T.value.name?(o(),i("p",Zo,p(T.value.name),1)):f("",!0)]),e("div",null,[t[203]||(t[203]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),v(e("textarea",{"onUpdate:modelValue":t[20]||(t[20]=n=>s.value.description=n),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),[[S,s.value.description]])]),e("div",null,[t[207]||(t[207]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",Xo,[e("label",en,[v(e("input",{"onUpdate:modelValue":t[21]||(t[21]=n=>s.value.accountType=n),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[he,s.value.accountType]]),t[204]||(t[204]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",tn,[v(e("input",{"onUpdate:modelValue":t[22]||(t[22]=n=>s.value.accountType=n),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[he,s.value.accountType]]),t[205]||(t[205]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",sn,[v(e("input",{"onUpdate:modelValue":t[23]||(t[23]=n=>s.value.accountType=n),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[he,s.value.accountType]]),t[206]||(t[206]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[208]||(t[208]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),!V.value&&s.value.platform!=="gemini-api"?(o(),i("div",an,[t[212]||(t[212]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",rn,[v(e("select",{"onUpdate:modelValue":t[24]||(t[24]=n=>s.value.expireDuration=n),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:Pt},t[209]||(t[209]=[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),[[ks,s.value.expireDuration]]),s.value.expireDuration==="custom"?(o(),i("div",ln,[v(e("input",{"onUpdate:modelValue":t[25]||(t[25]=n=>s.value.customExpireDate=n),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:_t.value,type:"datetime-local",onChange:jt},null,40,on),[[S,s.value.customExpireDate]])])):f("",!0),s.value.expiresAt?(o(),i("p",nn,[t[210]||(t[210]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),$(" 将于 "+p(zt(s.value.expiresAt))+" 过期 ",1)])):(o(),i("p",dn,t[211]||(t[211]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),$(" 账户永不过期 ",-1)])))]),t[213]||(t[213]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])):f("",!0),s.value.accountType==="group"?(o(),i("div",un,[t[215]||(t[215]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",pn,[e("div",gn,[e("div",mn,[dt.value.length===0?(o(),i("div",yn," 暂无可用分组 ")):f("",!0),(o(!0),i(ve,null,Se(dt.value,n=>(o(),i("label",{key:n.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[v(e("input",{"onUpdate:modelValue":t[26]||(t[26]=de=>s.value.groupIds=de),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:n.id},null,8,cn),[[Me,s.value.groupIds]]),e("span",xn,p(n.name)+" ("+p(n.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:Ve},t[214]||(t[214]=[e("i",{class:"fas fa-plus"},null,-1),$(" 新建分组 ",-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:vt},[e("i",{class:K(["fas fa-sync-alt",{"animate-spin":Qe.value}])},null,2)])])])):f("",!0),s.value.platform==="gemini"?(o(),i("div",fn,[t[216]||(t[216]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[27]||(t[27]=n=>s.value.projectId=n),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),[[S,s.value.projectId]]),t[217]||(t[217]=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,[$(" 访问 "),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,[$(" 复制"),e("span",{class:"font-semibold text-red-600"},"项目 ID(Project ID)"),$(",通常是字符串格式 ")]),e("li",{class:"text-red-600"}," ⚠️ 注意:要复制项目 ID(Project ID),不要复制项目编号(Project Number)! ")])]),e("p",{class:"mt-2"},[e("strong",null,"提示:"),$("如果您的账号是普通个人账号(未绑定 Google Cloud),请留空此字段。 ")])])])],-1))])):f("",!0),s.value.platform==="bedrock"&&!V.value?(o(),i("div",bn,[e("div",null,[t[218]||(t[218]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 访问密钥 ID *",-1)),v(e("input",{"onUpdate:modelValue":t[28]||(t[28]=n=>s.value.accessKeyId=n),class:K(["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":T.value.accessKeyId}]),placeholder:"请输入 AWS Access Key ID",required:"",type:"text"},null,2),[[S,s.value.accessKeyId]]),T.value.accessKeyId?(o(),i("p",vn,p(T.value.accessKeyId),1)):f("",!0)]),e("div",null,[t[219]||(t[219]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 秘密访问密钥 *",-1)),v(e("input",{"onUpdate:modelValue":t[29]||(t[29]=n=>s.value.secretAccessKey=n),class:K(["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":T.value.secretAccessKey}]),placeholder:"请输入 AWS Secret Access Key",required:"",type:"password"},null,2),[[S,s.value.secretAccessKey]]),T.value.secretAccessKey?(o(),i("p",kn,p(T.value.secretAccessKey),1)):f("",!0)]),e("div",null,[t[220]||(t[220]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 区域 *",-1)),v(e("input",{"onUpdate:modelValue":t[30]||(t[30]=n=>s.value.region=n),class:K(["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":T.value.region}]),placeholder:"例如:us-east-1",required:"",type:"text"},null,2),[[S,s.value.region]]),T.value.region?(o(),i("p",hn,p(T.value.region),1)):f("",!0),t[221]||(t[221]=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 (法兰克福)")]),e("p",{class:"mt-2 text-blue-600"},"💡 请输入完整的区域代码,如 us-east-1")])])],-1))]),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)),v(e("input",{"onUpdate:modelValue":t[31]||(t[31]=n=>s.value.sessionToken=n),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:"password"},null,512),[[S,s.value.sessionToken]]),t[223]||(t[223]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 仅在使用临时 AWS 凭证时需要填写 ",-1))]),e("div",null,[t[224]||(t[224]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"默认主模型 (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[32]||(t[32]=n=>s.value.defaultModel=n),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),[[S,s.value.defaultModel]]),t[225]||(t[225]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1)),t[226]||(t[226]=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[227]||(t[227]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[33]||(t[33]=n=>s.value.smallFastModel=n),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),[[S,s.value.smallFastModel]]),t[228]||(t[228]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 用于快速响应的轻量级模型,留空将使用系统默认 ",-1))])])):f("",!0),s.value.platform==="azure_openai"&&!V.value?(o(),i("div",wn,[e("div",null,[t[229]||(t[229]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint *",-1)),v(e("input",{"onUpdate:modelValue":t[34]||(t[34]=n=>s.value.azureEndpoint=n),class:K(["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":T.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",required:"",type:"url"},null,2),[[S,s.value.azureEndpoint]]),T.value.azureEndpoint?(o(),i("p",$n,p(T.value.azureEndpoint),1)):f("",!0),t[230]||(t[230]=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[231]||(t[231]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),v(e("input",{"onUpdate:modelValue":t[35]||(t[35]=n=>s.value.apiVersion=n),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),[[S,s.value.apiVersion]]),t[232]||(t[232]=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[233]||(t[233]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称 *",-1)),v(e("input",{"onUpdate:modelValue":t[36]||(t[36]=n=>s.value.deploymentName=n),class:K(["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":T.value.deploymentName}]),placeholder:"gpt-4",required:"",type:"text"},null,2),[[S,s.value.deploymentName]]),T.value.deploymentName?(o(),i("p",An,p(T.value.deploymentName),1)):f("",!0),t[234]||(t[234]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Azure OpenAI Studio 中创建的部署名称 ",-1))]),e("div",null,[t[235]||(t[235]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),v(e("input",{"onUpdate:modelValue":t[37]||(t[37]=n=>s.value.apiKey=n),class:K(["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":T.value.apiKey}]),placeholder:"请输入 Azure OpenAI API Key",required:"",type:"password"},null,2),[[S,s.value.apiKey]]),T.value.apiKey?(o(),i("p",Cn,p(T.value.apiKey),1)):f("",!0),t[236]||(t[236]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Azure 门户获取的 API 密钥 ",-1))]),e("div",null,[t[237]||(t[237]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",Un,[(o(),i(ve,null,Se(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],n=>e("label",{key:n,class:"flex cursor-pointer items-center"},[v(e("input",{"onUpdate:modelValue":t[38]||(t[38]=de=>s.value.supportedModels=de),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:n},null,8,In),[[Me,s.value.supportedModels]]),e("span",Tn,p(n),1)])),64))]),t[238]||(t[238]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 选择此部署支持的模型类型 ",-1))])])):f("",!0),s.value.platform==="bedrock"&&!V.value?(o(),i("div",Kn,[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)),e("div",Pn,[e("label",Mn,[v(e("input",{"onUpdate:modelValue":t[39]||(t[39]=n=>s.value.enableRateLimit=n),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),[[Me,s.value.enableRateLimit]]),t[239]||(t[239]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[240]||(t[240]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(o(),i("div",Dn,[t[241]||(t[241]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),v(e("input",{"onUpdate:modelValue":t[40]||(t[40]=n=>s.value.rateLimitDuration=n),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),[[S,s.value.rateLimitDuration,void 0,{number:!0}]]),t[242]||(t[242]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):f("",!0)])])):f("",!0),(s.value.platform==="claude-console"||s.value.platform==="ccr")&&!V.value?(o(),i("div",Sn,[e("div",null,[t[244]||(t[244]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),v(e("input",{"onUpdate:modelValue":t[41]||(t[41]=n=>s.value.apiUrl=n),class:K(["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":T.value.apiUrl}]),placeholder:"例如:https://api.example.com",required:"",type:"text"},null,2),[[S,s.value.apiUrl]]),T.value.apiUrl?(o(),i("p",_n,p(T.value.apiUrl),1)):f("",!0)]),e("div",null,[t[245]||(t[245]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),v(e("input",{"onUpdate:modelValue":t[42]||(t[42]=n=>s.value.apiKey=n),class:K(["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":T.value.apiKey}]),placeholder:"请输入API Key",required:"",type:"password"},null,2),[[S,s.value.apiKey]]),T.value.apiKey?(o(),i("p",jn,p(T.value.apiKey),1)):f("",!0)]),e("div",zn,[e("div",null,[t[246]||(t[246]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),v(e("input",{"onUpdate:modelValue":t[43]||(t[43]=n=>s.value.dailyQuota=n),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),[[S,s.value.dailyQuota,void 0,{number:!0}]]),t[247]||(t[247]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-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)),v(e("input",{"onUpdate:modelValue":t[44]||(t[44]=n=>s.value.quotaResetTime=n),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),[[S,s.value.quotaResetTime]]),t[249]||(t[249]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 每日自动重置额度的时间 ",-1))])]),e("div",null,[t[250]||(t[250]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),v(e("input",{"onUpdate:modelValue":t[45]||(t[45]=n=>s.value.maxConcurrentTasks=n),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),[[S,s.value.maxConcurrentTasks,void 0,{number:!0}]]),t[251]||(t[251]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-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"},"模型限制 (可选)",-1)),e("div",Vn,[e("button",{class:K(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",Ue.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[46]||(t[46]=n=>Ue.value="whitelist")},t[252]||(t[252]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),$(" 模型白名单 ",-1)]),2),e("button",{class:K(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",Ue.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[47]||(t[47]=n=>Ue.value="mapping")},t[253]||(t[253]=[e("i",{class:"fas fa-random mr-2"},null,-1),$(" 模型映射 ",-1)]),2)]),Ue.value==="whitelist"?(o(),i("div",Rn,[t[254]||(t[254]=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"}),$(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",On,[(o(),i(ve,null,Se(A,n=>e("label",{key:n.value,class:K(["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",L.value.includes(n.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[v(e("input",{"onUpdate:modelValue":t[48]||(t[48]=de=>L.value=de),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:n.value},null,8,Ln),[[Me,L.value]]),e("span",En,p(n.label),1)],2)),64))]),e("p",Nn,[$(" 已选择 "+p(L.value.length)+" 个模型 ",1),L.value.length===0?(o(),i("span",qn,"(支持所有模型)")):f("",!0)])])):(o(),i("div",Gn,[t[258]||(t[258]=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"}),$(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",Fn,[(o(!0),i(ve,null,Se(P.value,(n,de)=>(o(),i("div",{key:de,class:"flex items-center gap-2"},[v(e("input",{"onUpdate:modelValue":ne=>n.from=ne,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,Wn),[[S,n.from]]),t[256]||(t[256]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),v(e("input",{"onUpdate:modelValue":ne=>n.to=ne,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,Qn),[[S,n.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:ne=>et(de)},t[255]||(t[255]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Bn)]))),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:ot},t[257]||(t[257]=[e("i",{class:"fas fa-plus mr-2"},null,-1),$(" 添加模型映射 ",-1)])),e("div",Hn,[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[49]||(t[49]=n=>Pe("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[50]||(t[50]=n=>Pe("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[51]||(t[51]=n=>Pe("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[52]||(t[52]=n=>Pe("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[53]||(t[53]=n=>Pe("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[54]||(t[54]=n=>Pe("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[55]||(t[55]=n=>Pe("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[56]||(t[56]=n=>Pe("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[57]||(t[57]=n=>Pe("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[58]||(t[58]=n=>Pe("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[260]||(t[260]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[59]||(t[59]=n=>s.value.userAgent=n),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),[[S,s.value.userAgent]]),t[261]||(t[261]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[266]||(t[266]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",Jn,[e("label",Yn,[v(e("input",{"onUpdate:modelValue":t[60]||(t[60]=n=>s.value.enableRateLimit=n),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),[[Me,s.value.enableRateLimit]]),t[262]||(t[262]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[263]||(t[263]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(o(),i("div",Zn,[t[264]||(t[264]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),v(e("input",{"onUpdate:modelValue":t[61]||(t[61]=n=>s.value.rateLimitDuration=n),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),[[S,s.value.rateLimitDuration,void 0,{number:!0}]]),t[265]||(t[265]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):f("",!0)])])):f("",!0),s.value.platform==="openai-responses"&&!V.value?(o(),i("div",Xn,[e("div",null,[t[267]||(t[267]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),v(e("input",{"onUpdate:modelValue":t[62]||(t[62]=n=>s.value.baseApi=n),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),[[S,s.value.baseApi]]),t[268]||(t[268]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方 OpenAI 兼容 API 的基础地址,不要包含具体路径 ",-1))]),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 密钥 *",-1)),e("div",ei,[v(e("input",{"onUpdate:modelValue":t[63]||(t[63]=n=>s.value.apiKey=n),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:F.value?"text":"password"},null,8,ti),[[Jt,s.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[64]||(t[64]=n=>F.value=!F.value)},[e("i",{class:K(F.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[270]||(t[270]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方服务提供的 API 密钥 ",-1))]),e("div",null,[t[271]||(t[271]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[65]||(t[65]=n=>s.value.userAgent=n),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),[[S,s.value.userAgent]]),t[272]||(t[272]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可选项。如果设置,所有请求将使用此 User-Agent;否则透传客户端的 User-Agent ",-1))]),v(e("input",{"onUpdate:modelValue":t[66]||(t[66]=n=>s.value.rateLimitDuration=n),type:"hidden",value:"60"},null,512),[[S,s.value.rateLimitDuration,void 0,{number:!0}]])])):f("",!0),s.value.platform==="gemini-api"&&!V.value?(o(),i("div",si,[e("div",null,[t[273]||(t[273]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),v(e("input",{"onUpdate:modelValue":t[67]||(t[67]=n=>s.value.baseUrl=n),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://generativelanguage.googleapis.com",required:"",type:"url"},null,512),[[S,s.value.baseUrl]]),t[274]||(t[274]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[$(" 填写 API 基础地址(可包含路径前缀),系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/v1beta/models/{model}:generateContent")],-1)),t[275]||(t[275]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[$(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com"),$(" | 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini")],-1))]),e("div",null,[t[276]||(t[276]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",ai,[v(e("input",{"onUpdate:modelValue":t[68]||(t[68]=n=>s.value.apiKey=n),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:F.value?"text":"password"},null,8,ri),[[Jt,s.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]=n=>F.value=!F.value)},[e("i",{class:K(F.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[277]||(t[277]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Google AI Studio 获取的 API 密钥 ",-1))])])):f("",!0),s.value.platform==="claude"?(o(),i("div",li,[t[280]||(t[280]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",oi,[e("label",ni,[v(e("input",{"onUpdate:modelValue":t[70]||(t[70]=n=>s.value.subscriptionType=n),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),[[he,s.value.subscriptionType]]),t[278]||(t[278]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",ii,[v(e("input",{"onUpdate:modelValue":t[71]||(t[71]=n=>s.value.subscriptionType=n),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),[[he,s.value.subscriptionType]]),t[279]||(t[279]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[281]||(t[281]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):f("",!0),s.value.platform==="claude"?(o(),i("div",di,[e("label",ui,[v(e("input",{"onUpdate:modelValue":t[72]||(t[72]=n=>s.value.autoStopOnWarning=n),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Me,s.value.autoStopOnWarning]]),t[282]||(t[282]=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))])])):f("",!0),s.value.platform==="claude"?(o(),i("div",pi,[e("label",gi,[v(e("input",{"onUpdate:modelValue":t[73]||(t[73]=n=>s.value.useUnifiedUserAgent=n),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Me,s.value.useUnifiedUserAgent]]),e("div",mi,[t[284]||(t[284]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[285]||(t[285]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),R.value?(o(),i("div",yi,[e("div",ci,[e("p",xi," 💡 当前统一版本:"+p(R.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:I.value,type:"button",onClick:es},[I.value?(o(),i("div",vi)):(o(),i("i",bi)),$(" "+p(I.value?"清除中...":"清除缓存"),1)],8,fi)])])):(o(),i("div",ki,t[283]||(t[283]=[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)])))])])])):f("",!0),s.value.platform==="claude"?(o(),i("div",hi,[e("label",wi,[v(e("input",{"onUpdate:modelValue":t[74]||(t[74]=n=>s.value.useUnifiedClientId=n),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:ss},null,544),[[Me,s.value.useUnifiedClientId]]),e("div",$i,[t[289]||(t[289]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[290]||(t[290]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),s.value.useUnifiedClientId?(o(),i("div",Ai,[e("div",Ci,[e("div",{class:"mb-2 flex items-center justify-between"},[t[287]||(t[287]=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:ts},t[286]||(t[286]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$(" 重新生成 ",-1)]))]),e("div",Ui,[e("code",Ii,[e("span",Ti,p(s.value.unifiedClientId.substring(0,8)),1),e("span",Ki,p(s.value.unifiedClientId.substring(8,56)),1),e("span",Pi,p(s.value.unifiedClientId.substring(56)),1)])]),t[288]||(t[288]=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"}),$(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):f("",!0)])])])):f("",!0),e("div",null,[t[291]||(t[291]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),v(e("input",{"onUpdate:modelValue":t[75]||(t[75]=n=>s.value.priority=n),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),[[S,s.value.priority,void 0,{number:!0}]]),t[292]||(t[292]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),s.value.addType==="manual"&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"?(o(),i("div",Mi,[e("div",Di,[t[297]||(t[297]=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[296]||(t[296]=e("h5",{class:"mb-2 font-semibold text-blue-900 dark:text-blue-300"}," 手动输入 Token ",-1)),s.value.platform==="claude"?(o(),i("p",Si," 请输入有效的 Claude Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="gemini"?(o(),i("p",_i," 请输入有效的 Gemini Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="openai"?(o(),i("p",ji," 请输入有效的 OpenAI Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="droid"?(o(),i("p",zi," 请输入有效的 Droid Access Token,并同时提供 Refresh Token 以支持自动刷新。 ")):f("",!0),e("div",Vi,[t[295]||(t[295]=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"}),$(" 获取 Access Token 的方法: ")],-1)),s.value.platform==="claude"?(o(),i("p",Ri,t[293]||(t[293]=[$(" 请从已登录 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),$(" 文件中的凭证, 请勿使用 Claude 官网 API Keys 页面的密钥。 ",-1)]))):s.value.platform==="gemini"?(o(),i("p",Oi,t[294]||(t[294]=[$(" 请从已登录 Gemini CLI 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono dark:bg-blue-900/50"},"~/.config/gemini/credentials.json",-1),$(" 文件中的凭证。 ",-1)]))):s.value.platform==="openai"?(o(),i("p",Li," 请从已登录 OpenAI 账户的机器上获取认证凭证, 或通过 OAuth 授权流程获取 Access Token。 ")):s.value.platform==="droid"?(o(),i("p",Ei," 请从已完成授权的 Droid CLI 或 Factory.ai 导出的凭证中获取 Access Token 与 Refresh Token。 ")):f("",!0)]),s.value.platform!=="droid"?(o(),i("p",Ni," 💡 如果未填写 Refresh Token,Token 过期后需要手动更新。 ")):(o(),i("p",qi," ⚠️ Droid 账户必须填写 Refresh Token,缺失将导致无法自动刷新 Access Token。 "))])]),s.value.platform==="openai"?(o(),i("div",Gi,[t[298]||(t[298]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token (可选)",-1)),v(e("textarea",{"onUpdate:modelValue":t[76]||(t[76]=n=>s.value.accessToken=n),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),[[S,s.value.accessToken]]),t[299]||(t[299]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。 ")],-1))])):(o(),i("div",Fi,[t[300]||(t[300]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token *",-1)),v(e("textarea",{"onUpdate:modelValue":t[77]||(t[77]=n=>s.value.accessToken=n),class:K(["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":T.value.accessToken}]),placeholder:"请输入 Access Token...",required:"",rows:"4"},null,2),[[S,s.value.accessToken]]),T.value.accessToken?(o(),i("p",Wi,p(T.value.accessToken),1)):f("",!0)])),s.value.platform==="openai"||s.value.platform==="droid"?(o(),i("div",Qi,[t[302]||(t[302]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token *",-1)),v(e("textarea",{"onUpdate:modelValue":t[78]||(t[78]=n=>s.value.refreshToken=n),class:K(["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":T.value.refreshToken}]),placeholder:"请输入 Refresh Token(必填)...",required:"",rows:"4"},null,2),[[S,s.value.refreshToken]]),T.value.refreshToken?(o(),i("p",Bi,p(T.value.refreshToken),1)):f("",!0),e("p",Hi,[t[301]||(t[301]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),s.value.platform==="openai"?(o(),i(ve,{key:0},[$(" 系统将使用 Refresh Token 自动获取 Access Token 和用户信息 ")],64)):(o(),i(ve,{key:1},[$(" 系统将使用 Refresh Token 自动刷新 Factory.ai 访问令牌,确保账户保持可用。 ")],64))])])):(o(),i("div",Ji,[t[303]||(t[303]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token (可选)",-1)),v(e("textarea",{"onUpdate:modelValue":t[79]||(t[79]=n=>s.value.refreshToken=n),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),[[S,s.value.refreshToken]])]))])):f("",!0),s.value.addType==="apikey"&&s.value.platform==="droid"?(o(),i("div",Yi,[t[306]||(t[306]=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[304]||(t[304]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 列表 *",-1)),v(e("textarea",{"onUpdate:modelValue":t[80]||(t[80]=n=>s.value.apiKeysInput=n),class:K(["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":T.value.apiKeys}]),placeholder:"每行一个 API Key,可粘贴多行",required:"",rows:"6"},null,2),[[S,s.value.apiKeysInput]]),T.value.apiKeys?(o(),i("p",Zi,p(T.value.apiKeys),1)):f("",!0),t[305]||(t[305]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" 建议为每条 Key 提供独立额度;系统会自动去重并忽略空白行。 ")],-1))]),t[307]||(t[307]=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"}),$("分配策略说明")]),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))])):f("",!0),tt(ws,{modelValue:s.value.proxy,"onUpdate:modelValue":t[81]||(t[81]=n=>s.value.proxy=n)},null,8,["modelValue"]),e("div",Xi,[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[82]||(t[82]=n=>d.$emit("close"))}," 取消 "),(s.value.addType==="oauth"||s.value.addType==="setup-token")&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"&&s.value.platform!=="gemini-api"?(o(),i("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:ae.value,type:"button",onClick:ft}," 下一步 ",8,ed)):(o(),i("button",{key:1,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:ae.value,type:"button",onClick:qe},[ae.value?(o(),i("div",sd)):f("",!0),$(" "+p(ae.value?"创建中...":"创建"),1)],8,td))])])])):f("",!0),B.value===2&&s.value.addType==="oauth"?(o(),Fe(Cr,{key:2,platform:s.value.platform,proxy:s.value.proxy,onBack:t[83]||(t[83]=n=>B.value=1),onSuccess:D},null,8,["platform","proxy"])):f("",!0),B.value===2&&s.value.addType==="setup-token"?(o(),i("div",ad,[s.value.platform==="claude"?(o(),i("div",rd,[e("div",ld,[e("div",od,[t[319]||(t[319]=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",nd,[t[317]||(t[317]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"}," Claude Setup Token 授权 ",-1)),t[318]||(t[318]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤通过 Setup Token 完成 Claude 账户的授权: ",-1)),e("div",id,[e("div",dd,[e("div",ud,[t[310]||(t[310]=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",pd,[t[309]||(t[309]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),h.value?(o(),i("div",cd,[e("div",xd,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:h.value},null,8,fd),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:x},[e("i",{class:K(j.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:Je},t[308]||(t[308]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$("重新生成 ",-1)]))])):(o(),i("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:H.value,onClick:bt},[H.value?(o(),i("div",yd)):(o(),i("i",md)),$(" "+p(H.value?"生成中...":"生成 Setup Token 授权链接"),1)],8,gd))])])]),t[316]||(t[316]=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,"注意:"),$("如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 ")])])])])],-1)),e("div",bd,[e("div",vd,[t[315]||(t[315]=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",kd,[t[313]||(t[313]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),t[314]||(t[314]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 授权完成后,从返回页面复制 Authorization Code,并粘贴到下方输入框: ",-1)),e("div",hd,[e("div",null,[t[311]||(t[311]=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"}),$("Authorization Code ")],-1)),v(e("textarea",{"onUpdate:modelValue":t[84]||(t[84]=n=>y.value=n),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),[[S,y.value]])]),t[312]||(t[312]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" 请粘贴从Claude Code授权页面复制的Authorization Code ")],-1))])])])])])])])])])):f("",!0),e("div",wd,[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[85]||(t[85]=n=>B.value=1)}," 上一步 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!Ye.value||Q.value,type:"button",onClick:c},[Q.value?(o(),i("div",Ad)):f("",!0),$(" "+p(Q.value?"验证中...":"完成授权"),1)],8,$d)])])):f("",!0),V.value?(o(),i("div",Cd,[e("div",null,[t[320]||(t[320]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),v(e("input",{"onUpdate:modelValue":t[86]||(t[86]=n=>s.value.name=n),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),[[S,s.value.name]])]),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)),v(e("textarea",{"onUpdate:modelValue":t[87]||(t[87]=n=>s.value.description=n),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),[[S,s.value.description]])]),e("div",null,[t[325]||(t[325]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",Ud,[e("label",Id,[v(e("input",{"onUpdate:modelValue":t[88]||(t[88]=n=>s.value.accountType=n),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[he,s.value.accountType]]),t[322]||(t[322]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",Td,[v(e("input",{"onUpdate:modelValue":t[89]||(t[89]=n=>s.value.accountType=n),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[he,s.value.accountType]]),t[323]||(t[323]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",Kd,[v(e("input",{"onUpdate:modelValue":t[90]||(t[90]=n=>s.value.accountType=n),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[he,s.value.accountType]]),t[324]||(t[324]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[326]||(t[326]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),V.value?f("",!0):(o(),i("div",Pd,[t[330]||(t[330]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",Md,[v(e("select",{"onUpdate:modelValue":t[91]||(t[91]=n=>s.value.expireDuration=n),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:Pt},t[327]||(t[327]=[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),[[ks,s.value.expireDuration]]),s.value.expireDuration==="custom"?(o(),i("div",Dd,[v(e("input",{"onUpdate:modelValue":t[92]||(t[92]=n=>s.value.customExpireDate=n),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:_t.value,type:"datetime-local",onChange:jt},null,40,Sd),[[S,s.value.customExpireDate]])])):f("",!0),s.value.expiresAt?(o(),i("p",_d,[t[328]||(t[328]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),$(" 将于 "+p(zt(s.value.expiresAt))+" 过期 ",1)])):(o(),i("p",jd,t[329]||(t[329]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),$(" 账户永不过期 ",-1)])))]),t[331]||(t[331]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])),s.value.accountType==="group"?(o(),i("div",zd,[t[333]||(t[333]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",Vd,[e("div",Rd,[e("div",Od,[dt.value.length===0?(o(),i("div",Ld," 暂无可用分组 ")):f("",!0),(o(!0),i(ve,null,Se(dt.value,n=>(o(),i("label",{key:n.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[v(e("input",{"onUpdate:modelValue":t[93]||(t[93]=de=>s.value.groupIds=de),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:n.id},null,8,Ed),[[Me,s.value.groupIds]]),e("span",Nd,p(n.name)+" ("+p(n.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:Ve},t[332]||(t[332]=[e("i",{class:"fas fa-plus"},null,-1),$(" 新建分组 ",-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:vt},[e("i",{class:K(["fas fa-sync-alt",{"animate-spin":Qe.value}])},null,2)])])])):f("",!0),s.value.platform==="gemini"?(o(),i("div",qd,[t[334]||(t[334]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[94]||(t[94]=n=>s.value.projectId=n),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),[[S,s.value.projectId]]),t[335]||(t[335]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," Google Cloud/Workspace 账号可能需要提供项目 ID ",-1))])):f("",!0),s.value.platform==="claude"?(o(),i("div",Gd,[t[338]||(t[338]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",Fd,[e("label",Wd,[v(e("input",{"onUpdate:modelValue":t[95]||(t[95]=n=>s.value.subscriptionType=n),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),[[he,s.value.subscriptionType]]),t[336]||(t[336]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",Qd,[v(e("input",{"onUpdate:modelValue":t[96]||(t[96]=n=>s.value.subscriptionType=n),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),[[he,s.value.subscriptionType]]),t[337]||(t[337]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[339]||(t[339]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):f("",!0),s.value.platform==="claude"?(o(),i("div",Bd,[e("label",Hd,[v(e("input",{"onUpdate:modelValue":t[97]||(t[97]=n=>s.value.autoStopOnWarning=n),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Me,s.value.autoStopOnWarning]]),t[340]||(t[340]=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))])])):f("",!0),s.value.platform==="claude"?(o(),i("div",Jd,[e("label",Yd,[v(e("input",{"onUpdate:modelValue":t[98]||(t[98]=n=>s.value.useUnifiedUserAgent=n),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Me,s.value.useUnifiedUserAgent]]),e("div",Zd,[t[342]||(t[342]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[343]||(t[343]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),R.value?(o(),i("div",Xd,[e("div",e0,[e("p",t0," 💡 当前统一版本:"+p(R.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:I.value,type:"button",onClick:es},[I.value?(o(),i("div",r0)):(o(),i("i",a0)),$(" "+p(I.value?"清除中...":"清除缓存"),1)],8,s0)])])):(o(),i("div",l0,t[341]||(t[341]=[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)])))])])])):f("",!0),s.value.platform==="claude"?(o(),i("div",o0,[e("label",n0,[v(e("input",{"onUpdate:modelValue":t[99]||(t[99]=n=>s.value.useUnifiedClientId=n),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:ss},null,544),[[Me,s.value.useUnifiedClientId]]),e("div",i0,[t[347]||(t[347]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[348]||(t[348]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),s.value.useUnifiedClientId?(o(),i("div",d0,[e("div",u0,[e("div",{class:"mb-2 flex items-center justify-between"},[t[345]||(t[345]=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:ts},t[344]||(t[344]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$(" 重新生成 ",-1)]))]),e("div",p0,[e("code",g0,[e("span",m0,p(s.value.unifiedClientId.substring(0,8)),1),e("span",y0,p(s.value.unifiedClientId.substring(8,56)),1),e("span",c0,p(s.value.unifiedClientId.substring(56)),1)])]),t[346]||(t[346]=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"}),$(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):f("",!0)])])])):f("",!0),e("div",null,[t[349]||(t[349]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),v(e("input",{"onUpdate:modelValue":t[100]||(t[100]=n=>s.value.priority=n),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),[[S,s.value.priority,void 0,{number:!0}]]),t[350]||(t[350]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),s.value.platform==="claude-console"||s.value.platform==="ccr"?(o(),i("div",x0,[e("div",null,[t[351]||(t[351]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API URL",-1)),v(e("input",{"onUpdate:modelValue":t[101]||(t[101]=n=>s.value.apiUrl=n),class:"form-input w-full",placeholder:"例如:https://api.example.com",required:"",type:"text"},null,512),[[S,s.value.apiUrl]])]),e("div",null,[t[352]||(t[352]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API Key",-1)),v(e("input",{"onUpdate:modelValue":t[102]||(t[102]=n=>s.value.apiKey=n),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[S,s.value.apiKey]]),t[353]||(t[353]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",f0,[e("div",null,[t[354]||(t[354]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),v(e("input",{"onUpdate:modelValue":t[103]||(t[103]=n=>s.value.dailyQuota=n),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),[[S,s.value.dailyQuota,void 0,{number:!0}]]),t[355]||(t[355]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[356]||(t[356]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),v(e("input",{"onUpdate:modelValue":t[104]||(t[104]=n=>s.value.quotaResetTime=n),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),[[S,s.value.quotaResetTime]]),t[357]||(t[357]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),V.value&&s.value.dailyQuota>0?(o(),i("div",b0,[e("div",v0,[t[358]||(t[358]=e("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"}," 今日使用情况 ",-1)),e("span",k0," $"+p(We().toFixed(4))+" / $"+p(s.value.dailyQuota.toFixed(2)),1)]),e("div",h0,[e("div",{class:K(["absolute left-0 top-0 h-full rounded-full transition-all",Ne.value>=90?"bg-red-500":Ne.value>=70?"bg-yellow-500":"bg-green-500"]),style:Re({width:`${Math.min(Ne.value,100)}%`})},null,6)]),e("div",w0,[e("span",$0," 剩余: $"+p(Math.max(0,s.value.dailyQuota-We()).toFixed(2)),1),e("span",A0,p(Ne.value.toFixed(1))+"% 已使用 ",1)])])):f("",!0),e("div",null,[t[359]||(t[359]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),v(e("input",{"onUpdate:modelValue":t[105]||(t[105]=n=>s.value.maxConcurrentTasks=n),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),[[S,s.value.maxConcurrentTasks,void 0,{number:!0}]]),t[360]||(t[360]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))]),e("div",null,[t[368]||(t[368]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",C0,[e("button",{class:K(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",Ue.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[106]||(t[106]=n=>Ue.value="whitelist")},t[361]||(t[361]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),$(" 模型白名单 ",-1)]),2),e("button",{class:K(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",Ue.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[107]||(t[107]=n=>Ue.value="mapping")},t[362]||(t[362]=[e("i",{class:"fas fa-random mr-2"},null,-1),$(" 模型映射 ",-1)]),2)]),Ue.value==="whitelist"?(o(),i("div",U0,[t[363]||(t[363]=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"}),$(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",I0,[(o(),i(ve,null,Se(A,n=>e("label",{key:n.value,class:K(["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",L.value.includes(n.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[v(e("input",{"onUpdate:modelValue":t[108]||(t[108]=de=>L.value=de),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:n.value},null,8,T0),[[Me,L.value]]),e("span",K0,p(n.label),1)],2)),64))]),e("p",P0,[$(" 已选择 "+p(L.value.length)+" 个模型 ",1),L.value.length===0?(o(),i("span",M0,"(支持所有模型)")):f("",!0)])])):(o(),i("div",D0,[t[367]||(t[367]=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"}),$(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",S0,[(o(!0),i(ve,null,Se(P.value,(n,de)=>(o(),i("div",{key:de,class:"flex items-center gap-2"},[v(e("input",{"onUpdate:modelValue":ne=>n.from=ne,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,_0),[[S,n.from]]),t[365]||(t[365]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),v(e("input",{"onUpdate:modelValue":ne=>n.to=ne,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,j0),[[S,n.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:ne=>et(de)},t[364]||(t[364]=[e("i",{class:"fas fa-trash"},null,-1)]),8,z0)]))),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:ot},t[366]||(t[366]=[e("i",{class:"fas fa-plus mr-2"},null,-1),$(" 添加模型映射 ",-1)])),e("div",V0,[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[109]||(t[109]=n=>Pe("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[110]||(t[110]=n=>Pe("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[111]||(t[111]=n=>Pe("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[112]||(t[112]=n=>Pe("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[113]||(t[113]=n=>Pe("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[114]||(t[114]=n=>Pe("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[115]||(t[115]=n=>Pe("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[116]||(t[116]=n=>Pe("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[117]||(t[117]=n=>Pe("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[118]||(t[118]=n=>Pe("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[369]||(t[369]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[119]||(t[119]=n=>s.value.userAgent=n),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[S,s.value.userAgent]]),t[370]||(t[370]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[375]||(t[375]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",R0,[e("label",O0,[v(e("input",{"onUpdate:modelValue":t[120]||(t[120]=n=>s.value.enableRateLimit=n),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[Me,s.value.enableRateLimit]]),t[371]||(t[371]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[372]||(t[372]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(o(),i("div",L0,[t[373]||(t[373]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),v(e("input",{"onUpdate:modelValue":t[121]||(t[121]=n=>s.value.rateLimitDuration=n),class:"form-input w-full",min:"1",type:"number"},null,512),[[S,s.value.rateLimitDuration,void 0,{number:!0}]]),t[374]||(t[374]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):f("",!0)])])):f("",!0),s.value.platform==="openai-responses"?(o(),i("div",E0,[e("div",null,[t[376]||(t[376]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 基础地址",-1)),v(e("input",{"onUpdate:modelValue":t[122]||(t[122]=n=>s.value.baseApi=n),class:"form-input w-full",placeholder:"https://api.example.com/v1",type:"url"},null,512),[[S,s.value.baseApi]])]),e("div",null,[t[377]||(t[377]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 密钥",-1)),e("div",N0,[v(e("input",{"onUpdate:modelValue":t[123]||(t[123]=n=>s.value.apiKey=n),class:"form-input w-full pr-10",placeholder:"留空表示不更新",type:F.value?"text":"password"},null,8,q0),[[Jt,s.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[124]||(t[124]=n=>F.value=!F.value)},[e("i",{class:K(F.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[378]||(t[378]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",null,[t[379]||(t[379]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent",-1)),v(e("input",{"onUpdate:modelValue":t[125]||(t[125]=n=>s.value.userAgent=n),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[S,s.value.userAgent]]),t[380]||(t[380]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),v(e("input",{"onUpdate:modelValue":t[126]||(t[126]=n=>s.value.rateLimitDuration=n),type:"hidden"},null,512),[[S,s.value.rateLimitDuration,void 0,{number:!0}]]),e("div",G0,[e("div",null,[t[381]||(t[381]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),v(e("input",{"onUpdate:modelValue":t[127]||(t[127]=n=>s.value.dailyQuota=n),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),[[S,s.value.dailyQuota,void 0,{number:!0}]])]),e("div",null,[t[382]||(t[382]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),v(e("input",{"onUpdate:modelValue":t[128]||(t[128]=n=>s.value.quotaResetTime=n),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",type:"time"},null,512),[[S,s.value.quotaResetTime]])])]),e("div",null,[t[383]||(t[383]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),v(e("input",{"onUpdate:modelValue":t[129]||(t[129]=n=>s.value.maxConcurrentTasks=n),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),[[S,s.value.maxConcurrentTasks,void 0,{number:!0}]]),t[384]||(t[384]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))])])):f("",!0),s.value.platform==="gemini-api"?(o(),i("div",F0,[e("div",null,[t[385]||(t[385]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址",-1)),v(e("input",{"onUpdate:modelValue":t[130]||(t[130]=n=>s.value.baseUrl=n),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"https://generativelanguage.googleapis.com",type:"url"},null,512),[[S,s.value.baseUrl]]),t[386]||(t[386]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[$(" 填写 API 基础地址(可包含路径前缀),系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/v1beta/models/{model}:generateContent")],-1)),t[387]||(t[387]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[$(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com"),$(" | 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini")],-1))]),e("div",null,[t[388]||(t[388]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥",-1)),e("div",W0,[v(e("input",{"onUpdate:modelValue":t[131]||(t[131]=n=>s.value.apiKey=n),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"留空表示不更新",type:F.value?"text":"password"},null,8,Q0),[[Jt,s.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[132]||(t[132]=n=>F.value=!F.value)},[e("i",{class:K(F.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[389]||(t[389]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))])])):f("",!0),s.value.platform==="bedrock"?(o(),i("div",B0,[e("div",null,[t[390]||(t[390]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 访问密钥 ID",-1)),v(e("input",{"onUpdate:modelValue":t[133]||(t[133]=n=>s.value.accessKeyId=n),class:"form-input w-full",placeholder:"留空表示不更新",type:"text"},null,512),[[S,s.value.accessKeyId]]),t[391]||(t[391]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Access Key ID",-1))]),e("div",null,[t[392]||(t[392]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 秘密访问密钥",-1)),v(e("input",{"onUpdate:modelValue":t[134]||(t[134]=n=>s.value.secretAccessKey=n),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[S,s.value.secretAccessKey]]),t[393]||(t[393]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Secret Access Key",-1))]),e("div",null,[t[394]||(t[394]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 区域",-1)),v(e("input",{"onUpdate:modelValue":t[135]||(t[135]=n=>s.value.region=n),class:"form-input w-full",placeholder:"例如:us-east-1",type:"text"},null,512),[[S,s.value.region]]),t[395]||(t[395]=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[396]||(t[396]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"会话令牌 (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[136]||(t[136]=n=>s.value.sessionToken=n),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[S,s.value.sessionToken]])]),e("div",null,[t[397]||(t[397]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"默认主模型 (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[137]||(t[137]=n=>s.value.defaultModel=n),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[S,s.value.defaultModel]]),t[398]||(t[398]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1))]),e("div",null,[t[399]||(t[399]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[138]||(t[138]=n=>s.value.smallFastModel=n),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[S,s.value.smallFastModel]]),t[400]||(t[400]=e("p",{class:"mt-1 text-xs text-gray-500"},"用于快速响应的轻量级模型,留空将使用系统默认",-1))]),e("div",null,[t[405]||(t[405]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",H0,[e("label",J0,[v(e("input",{"onUpdate:modelValue":t[139]||(t[139]=n=>s.value.enableRateLimit=n),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[Me,s.value.enableRateLimit]]),t[401]||(t[401]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[402]||(t[402]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(o(),i("div",Y0,[t[403]||(t[403]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),v(e("input",{"onUpdate:modelValue":t[140]||(t[140]=n=>s.value.rateLimitDuration=n),class:"form-input w-full",min:"1",type:"number"},null,512),[[S,s.value.rateLimitDuration,void 0,{number:!0}]]),t[404]||(t[404]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):f("",!0)])])):f("",!0),s.value.platform==="azure_openai"?(o(),i("div",Z0,[e("div",null,[t[406]||(t[406]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint",-1)),v(e("input",{"onUpdate:modelValue":t[141]||(t[141]=n=>s.value.azureEndpoint=n),class:K(["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":T.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",type:"url"},null,2),[[S,s.value.azureEndpoint]]),T.value.azureEndpoint?(o(),i("p",X0,p(T.value.azureEndpoint),1)):f("",!0)]),e("div",null,[t[407]||(t[407]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),v(e("input",{"onUpdate:modelValue":t[142]||(t[142]=n=>s.value.apiVersion=n),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),[[S,s.value.apiVersion]]),t[408]||(t[408]=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[409]||(t[409]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称",-1)),v(e("input",{"onUpdate:modelValue":t[143]||(t[143]=n=>s.value.deploymentName=n),class:K(["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":T.value.deploymentName}]),placeholder:"gpt-4",type:"text"},null,2),[[S,s.value.deploymentName]]),T.value.deploymentName?(o(),i("p",eu,p(T.value.deploymentName),1)):f("",!0)]),e("div",null,[t[410]||(t[410]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),v(e("input",{"onUpdate:modelValue":t[144]||(t[144]=n=>s.value.apiKey=n),class:K(["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":T.value.apiKey}]),placeholder:"留空表示不更新",type:"password"},null,2),[[S,s.value.apiKey]]),T.value.apiKey?(o(),i("p",tu,p(T.value.apiKey),1)):f("",!0),t[411]||(t[411]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))]),e("div",null,[t[412]||(t[412]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",su,[(o(),i(ve,null,Se(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],n=>e("label",{key:n,class:"flex cursor-pointer items-center"},[v(e("input",{"onUpdate:modelValue":t[145]||(t[145]=de=>s.value.supportedModels=de),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:n},null,8,au),[[Me,s.value.supportedModels]]),e("span",ru,p(n),1)])),64))]),t[413]||(t[413]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"选择此部署支持的模型类型",-1))])])):f("",!0),V.value&&it.value?(o(),i("div",lu,[e("div",ou,[t[419]||(t[419]=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",nu,[e("div",iu,[t[415]||(t[415]=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[146]||(t[146]=n=>ke.value=!0)},t[414]||(t[414]=[e("i",{class:"fas fa-list-ul"},null,-1),e("span",null,"管理 API Key",-1)]))]),e("p",du,[t[416]||(t[416]=$(" 当前已保存 ",-1)),e("strong",null,p(at.value),1),t[417]||(t[417]=$(" 条 API Key。您可以追加新的 Key,或通过下方模式快速覆盖、删除指定 Key。 ",-1))]),t[418]||(t[418]=e("p",{class:"text-xs text-purple-700 dark:text-purple-300"}," 留空表示保留现有 Key 不变;根据所选模式决定是追加、覆盖还是删除输入的 Key。 ",-1))])]),e("div",uu,[e("div",null,[t[420]||(t[420]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 API Key 列表",-1)),v(e("textarea",{"onUpdate:modelValue":t[147]||(t[147]=n=>s.value.apiKeysInput=n),class:K(["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":T.value.apiKeys}]),placeholder:"根据模式填写;每行一个 API Key",rows:"6"},null,2),[[S,s.value.apiKeysInput]]),T.value.apiKeys?(o(),i("p",pu,p(T.value.apiKeys),1)):f("",!0)]),e("div",gu,[e("div",mu,[t[421]||(t[421]=e("span",{class:"text-sm font-semibold text-purple-800 dark:text-purple-100"},"API Key 更新模式",-1)),e("span",yu,p(st.value),1)]),e("div",cu,[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:Re(He.value)},null,4),(o(),i(ve,null,Se(we,n=>e("button",{key:n.value,class:K(["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",s.value.apiKeyUpdateMode===n.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:de=>s.value.apiKeyUpdateMode=n.value},p(n.label),11,xu)),64))]),e("p",fu,p(Ct.value),1)]),t[422]||(t[422]=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"}),$("小提示")]),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))])])):f("",!0),!(V.value&&it.value)&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"?(o(),i("div",bu,[t[425]||(t[425]=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",vu,[e("div",null,[t[423]||(t[423]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Access Token",-1)),v(e("textarea",{"onUpdate:modelValue":t[148]||(t[148]=n=>s.value.accessToken=n),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),[[S,s.value.accessToken]])]),e("div",null,[t[424]||(t[424]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Refresh Token",-1)),v(e("textarea",{"onUpdate:modelValue":t[149]||(t[149]=n=>s.value.refreshToken=n),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),[[S,s.value.refreshToken]])])])])):f("",!0),tt(ws,{modelValue:s.value.proxy,"onUpdate:modelValue":t[150]||(t[150]=n=>s.value.proxy=n)},null,8,["modelValue"]),e("div",ku,[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[151]||(t[151]=n=>d.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:ae.value,type:"button",onClick:Tt},[ae.value?(o(),i("div",wu)):f("",!0),$(" "+p(ae.value?"更新中...":"更新"),1)],8,hu)])])):f("",!0)])])):f("",!0),tt(Ks,{"cancel-text":Be(E).cancelText,"confirm-text":Be(E).confirmText,message:Be(E).message,show:Be(G),title:Be(E).title,onCancel:Be(k),onConfirm:Be(w)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),De.value?(o(),Fe(nl,{key:1,onClose:t[152]||(t[152]=n=>De.value=!1),onRefresh:Kt})):f("",!0),ke.value?(o(),Fe(ro,{key:2,"account-id":(Z=g.account)==null?void 0:Z.id,"account-name":(re=g.account)==null?void 0:re.name,onClose:t[153]||(t[153]=n=>ke.value=!1),onRefresh:Xe},null,8,["account-id","account-name"])):f("",!0)])}}},Cs=Zt($u,[["__scopeId","data-v-ef1fef88"]]),Au={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Cu={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"},Uu={class:"mb-4 flex items-center justify-between sm:mb-6"},Iu={class:"flex items-center gap-2 sm:gap-3"},Tu={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Ku={class:"space-y-6"},Pu={key:0,class:"mt-1 text-xs text-red-500"},Mu={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Du={key:0,class:"mt-1 text-xs text-red-500"},Su={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},_u=["placeholder","required"],ju={key:0,class:"mt-1 text-xs text-red-500"},zu={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Vu={class:"mb-3"},Ru={class:"inline-flex cursor-pointer items-center"},Ou={key:0},Lu={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Eu={class:"mb-3 space-y-2"},Nu=["onUpdate:modelValue"],qu=["onUpdate:modelValue"],Gu=["onClick"],Fu={class:"mt-2 flex gap-3"},Wu=["disabled"],Qu={key:0,class:"loading-spinner mr-2"},Bu={__name:"CcrAccountForm",props:{account:{type:Object,default:null}},emits:["close","success"],setup(W,{emit:Ke}){const g=W,me=Ke,M=U(!0),G=ge(()=>!!g.account),E=U(!1),C=U({name:"",description:"",apiUrl:"",apiKey:"",priority:50,userAgent:"",rateLimitDuration:60,dailyQuota:0,quotaResetTime:"00:00",proxy:null,supportedModels:{}}),w=U(!0),k=U({}),V=U([]),X=()=>{const h={};for(const y of V.value){const j=(y.from||"").trim(),se=(y.to||"").trim();j&&se&&(h[j]=se)}return h},B=()=>{V.value.push({from:"",to:""})},ae=h=>{V.value.splice(h,1)},F=()=>{const h={};return(!C.value.name||C.value.name.trim().length===0)&&(h.name="名称不能为空"),(!C.value.apiUrl||C.value.apiUrl.trim().length===0)&&(h.apiUrl="API URL 不能为空"),!G.value&&(!C.value.apiKey||C.value.apiKey.trim().length===0)&&(h.apiKey="API Key 不能为空"),k.value=h,Object.keys(h).length===0},H=async()=>{if(F()){E.value=!0;try{if(G.value){const h={name:C.value.name,description:C.value.description,apiUrl:C.value.apiUrl,priority:C.value.priority,userAgent:C.value.userAgent,rateLimitDuration:w.value?Number(C.value.rateLimitDuration||60):0,dailyQuota:Number(C.value.dailyQuota||0),quotaResetTime:C.value.quotaResetTime||"00:00",proxy:C.value.proxy||null,supportedModels:X()};C.value.apiKey&&C.value.apiKey.trim().length>0&&(h.apiKey=C.value.apiKey);const y=await z.put(`/admin/ccr-accounts/${g.account.id}`,h);y.success?me("success"):_(y.message||"保存失败","error")}else{const h={name:C.value.name,description:C.value.description,apiUrl:C.value.apiUrl,apiKey:C.value.apiKey,priority:Number(C.value.priority||50),supportedModels:X(),userAgent:C.value.userAgent,rateLimitDuration:w.value?Number(C.value.rateLimitDuration||60):0,proxy:C.value.proxy,accountType:"shared",dailyQuota:Number(C.value.dailyQuota||0),quotaResetTime:C.value.quotaResetTime||"00:00"},y=await z.post("/admin/ccr-accounts",h);y.success?me("success"):_(y.message||"创建失败","error")}}catch(h){_(h.message||"请求失败","error")}finally{E.value=!1}}},Q=()=>{if(!g.account)return;const h=g.account;C.value.name=h.name||"",C.value.description=h.description||"",C.value.apiUrl=h.apiUrl||"",C.value.priority=Number(h.priority||50),C.value.userAgent=h.userAgent||"",C.value.rateLimitDuration=Number(h.rateLimitDuration||60),C.value.dailyQuota=Number(h.dailyQuota||0),C.value.quotaResetTime=h.quotaResetTime||"00:00",C.value.proxy=h.proxy||null,w.value=C.value.rateLimitDuration>0,V.value=[];const y=h.supportedModels||{};if(y&&typeof y=="object")for(const j of Object.keys(y))V.value.push({from:j,to:y[j]})};return Yt(()=>{G.value&&Q()}),pe(()=>g.account,()=>{G.value&&Q()}),(h,y)=>(o(),Fe(Dt,{to:"body"},[M.value?(o(),i("div",Au,[e("div",Cu,[e("div",Uu,[e("div",Iu,[y[13]||(y[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",Tu,p(G.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:y[0]||(y[0]=j=>h.$emit("close"))},y[14]||(y[14]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",Ku,[e("div",null,[y[15]||(y[15]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称 *",-1)),v(e("input",{"onUpdate:modelValue":y[1]||(y[1]=j=>C.value.name=j),class:K(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":k.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[S,C.value.name]]),k.value.name?(o(),i("p",Pu,p(k.value.name),1)):f("",!0)]),e("div",null,[y[16]||(y[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),v(e("textarea",{"onUpdate:modelValue":y[2]||(y[2]=j=>C.value.description=j),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),[[S,C.value.description]])]),e("div",Mu,[e("div",null,[y[17]||(y[17]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),v(e("input",{"onUpdate:modelValue":y[3]||(y[3]=j=>C.value.apiUrl=j),class:K(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":k.value.apiUrl}]),placeholder:"例如:https://api.example.com/v1/messages",required:"",type:"text"},null,2),[[S,C.value.apiUrl]]),k.value.apiUrl?(o(),i("p",Du,p(k.value.apiUrl),1)):f("",!0)]),e("div",null,[e("label",Su,"API Key "+p(G.value?"(留空不更新)":"*"),1),v(e("input",{"onUpdate:modelValue":y[4]||(y[4]=j=>C.value.apiKey=j),class:K(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":k.value.apiKey}]),placeholder:G.value?"留空表示不更新":"必填",required:!G.value,type:"password"},null,10,_u),[[S,C.value.apiKey]]),k.value.apiKey?(o(),i("p",ju,p(k.value.apiKey),1)):f("",!0)])]),e("div",zu,[e("div",null,[y[18]||(y[18]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"优先级",-1)),v(e("input",{"onUpdate:modelValue":y[5]||(y[5]=j=>C.value.priority=j),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),[[S,C.value.priority,void 0,{number:!0}]]),y[19]||(y[19]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议范围:1-100,数字越小优先级越高 ",-1))]),e("div",null,[y[20]||(y[20]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),v(e("input",{"onUpdate:modelValue":y[6]||(y[6]=j=>C.value.userAgent=j),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),[[S,C.value.userAgent]])])]),e("div",null,[y[24]||(y[24]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",Vu,[e("label",Ru,[v(e("input",{"onUpdate:modelValue":y[7]||(y[7]=j=>w.value=j),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),[[Me,w.value]]),y[21]||(y[21]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制(429 时暂停调度)",-1))])]),w.value?(o(),i("div",Ou,[y[22]||(y[22]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),v(e("input",{"onUpdate:modelValue":y[8]||(y[8]=j=>C.value.rateLimitDuration=j),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),[[S,C.value.rateLimitDuration,void 0,{number:!0}]]),y[23]||(y[23]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):f("",!0)]),e("div",Lu,[e("div",null,[y[25]||(y[25]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日额度限制 ($)",-1)),v(e("input",{"onUpdate:modelValue":y[9]||(y[9]=j=>C.value.dailyQuota=j),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),[[S,C.value.dailyQuota,void 0,{number:!0}]]),y[26]||(y[26]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[y[27]||(y[27]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"额度重置时间",-1)),v(e("input",{"onUpdate:modelValue":y[10]||(y[10]=j=>C.value.quotaResetTime=j),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),[[S,C.value.quotaResetTime]]),y[28]||(y[28]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),e("div",null,[y[32]||(y[32]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型映射表 (可选)",-1)),y[33]||(y[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"}),$(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",Eu,[(o(!0),i(ve,null,Se(V.value,(j,se)=>(o(),i("div",{key:se,class:"flex items-center gap-2"},[v(e("input",{"onUpdate:modelValue":R=>j.from=R,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,Nu),[[S,j.from]]),y[30]||(y[30]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),v(e("input",{"onUpdate:modelValue":R=>j.to=R,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,qu),[[S,j.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:R=>ae(se)},y[29]||(y[29]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Gu)]))),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:B},y[31]||(y[31]=[e("i",{class:"fas fa-plus mr-2"},null,-1),$(" 添加模型映射 ",-1)]))]),e("div",null,[tt(ws,{modelValue:C.value.proxy,"onUpdate:modelValue":y[11]||(y[11]=j=>C.value.proxy=j)},null,8,["modelValue"])]),e("div",Fu,[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:y[12]||(y[12]=j=>h.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:E.value,type:"button",onClick:H},[E.value?(o(),i("div",Qu)):f("",!0),$(" "+p(E.value?G.value?"保存中...":"创建中...":G.value?"保存":"创建"),1)],8,Wu)])])])])):f("",!0)]))}},Us=Zt(Bu,[["__scopeId","data-v-2a966370"]]),Hu={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Ju={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"},Yu={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"},Zu={class:"flex flex-1 items-start gap-3"},Xu={class:"space-y-1"},ep={class:"flex flex-wrap items-center gap-2"},tp={class:"text-lg font-semibold text-gray-900 dark:text-gray-100 sm:text-xl"},sp={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"},ap={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"},rp={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},lp={key:0},op={class:"flex-1 overflow-y-auto px-5 py-4 sm:px-6"},np={key:0,class:"flex h-[50vh] items-center justify-center"},ip={class:"mb-5 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4"},dp={class:"flex items-start justify-between"},up={class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"},pp={class:"mt-2 text-xl font-semibold text-gray-900 dark:text-gray-100"},gp={class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},mp={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gray-50 dark:bg-gray-800"},yp={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},cp={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"},xp={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"},fp={class:"flex items-center justify-between"},bp={class:"font-semibold text-gray-900 dark:text-gray-100"},vp={class:"mt-2 flex items-center justify-between"},kp={class:"font-semibold text-gray-900 dark:text-gray-100"},hp={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},wp={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"},$p={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"},Ap={class:"flex items-center justify-between"},Cp={class:"font-semibold text-gray-900 dark:text-gray-100"},Up={class:"mt-2 flex items-center justify-between"},Ip={class:"font-semibold text-gray-900 dark:text-gray-100"},Tp={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Kp={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"},Pp={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"},Mp={class:"flex items-center justify-between"},Dp={class:"font-semibold text-gray-900 dark:text-gray-100"},Sp={class:"mt-2 flex items-center justify-between"},_p={class:"font-semibold text-gray-900 dark:text-gray-100"},jp={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},zp={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},Vp={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},Rp={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},Op={class:"flex items-center justify-between"},Lp={class:"font-semibold text-gray-900 dark:text-gray-100"},Ep={class:"flex items-center justify-between"},Np={class:"font-semibold text-gray-900 dark:text-gray-100"},qp={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Gp={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},Fp={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},Wp={class:"flex items-center justify-between"},Qp={class:"font-semibold text-gray-900 dark:text-gray-100"},Bp={class:"flex items-center justify-between"},Hp={class:"font-semibold text-gray-900 dark:text-gray-100"},Jp={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Yp={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},Zp={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},Xp={class:"flex items-center justify-between"},eg={class:"font-semibold text-gray-900 dark:text-gray-100"},tg={class:"flex items-center justify-between"},sg={class:"font-semibold text-gray-900 dark:text-gray-100"},ag={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},rg={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"},lg={class:"mb-4 flex flex-wrap items-center justify-between gap-2"},og={class:"text-xs text-gray-400 dark:text-gray-500"},ng={class:"h-[260px] sm:h-[300px]"},ig={__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(W,{emit:Ke}){const g=W,me=Ke,M=Ls(),{isDarkMode:G}=Vs(M),E=U(null);let C=null;const w={claude:"Claude","claude-console":"Claude Console",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid"},k=ge(()=>{var N;return w[(N=g.account)==null?void 0:N.platform]||"未知平台"}),V=ge(()=>{var N;return(N=g.account)!=null&&N.accountType?g.account.accountType==="dedicated"?"专属":g.account.accountType==="group"?"分组":"共享":"共享"}),X=ge(()=>({text:G.value?"#e5e7eb":"#374151",grid:G.value?"rgba(75, 85, 99, 0.25)":"rgba(209, 213, 219, 0.4)",cost:"#3b82f6",costFill:"rgba(59, 130, 246, 0.15)",requests:"#f97316"})),B=ge(()=>{var N;return((N=g.summary)==null?void 0:N.totalTokens)||0}),ae=ge(()=>{var N,u;return((u=(N=g.overview)==null?void 0:N.total)==null?void 0:u.inputTokens)||0}),F=ge(()=>{var N,u;return((u=(N=g.overview)==null?void 0:N.total)==null?void 0:u.outputTokens)||0}),H=N=>{const u=Number(N||0);return u>=1e6?`${(u/1e6).toFixed(2)}M`:u>=1e3?`${(u/1e3).toFixed(2)}K`:u.toLocaleString()},Q=N=>{const u=Number(N||0);return Number.isNaN(u)?"$0.000000":u>=1?`$${u.toFixed(2)}`:u>=.01?`$${u.toFixed(3)}`:`$${u.toFixed(6)}`},h=N=>Math.round((Number(N)||0)*100)/100,y=N=>{if(!N)return"-";const u=new Date(N);if(Number.isNaN(u.getTime())){const Ae=N.split("-");return Ae.length===3?`${Ae[1]}-${Ae[2]}`:N}const J=String(u.getMonth()+1).padStart(2,"0"),ee=String(u.getDate()).padStart(2,"0");return`${J}-${ee}`},j=N=>{if(!N)return"暂无";const u=new Date(N);return Number.isNaN(u.getTime())?N:`${u.getFullYear()}-${String(u.getMonth()+1).padStart(2,"0")}-${String(u.getDate()).padStart(2,"0")} ${String(u.getHours()).padStart(2,"0")}:${String(u.getMinutes()).padStart(2,"0")}`},se=(N,u)=>{if(!N)return 0;const J=g.history.find(ee=>ee.date===N);return J&&J[u]||0},R=ge(()=>{var N,u;return g.generatedAt||((N=g.summary)==null?void 0:N.generatedAt)||((u=g.summary)==null?void 0:u.generated_at)||""}),I=ge(()=>{var N,u,J,ee,Ae,s,Ue,L;return[{key:"totalCost",label:"30天总费用",value:((N=g.summary)==null?void 0:N.totalCostFormatted)||"$0.000000",subtitle:"累计成本",icon:"fa-file-invoice-dollar",iconClass:"text-emerald-500"},{key:"totalRequests",label:"30天总请求",value:H(((u=g.summary)==null?void 0:u.totalRequests)||0),subtitle:"调用次数",icon:"fa-paper-plane",iconClass:"text-blue-500"},{key:"avgCost",label:"日均费用",value:((J=g.summary)==null?void 0:J.avgDailyCostFormatted)||Q(((ee=g.summary)==null?void 0:ee.avgDailyCost)||0),subtitle:(Ae=g.summary)!=null&&Ae.actualDaysUsed&&((s=g.summary)==null?void 0:s.actualDaysUsed)<((Ue=g.summary)==null?void 0:Ue.days)?`基于 ${g.summary.actualDaysUsed} 天实际使用`:"平均每日成本",icon:"fa-wave-square",iconClass:"text-purple-500"},{key:"avgRequests",label:"日均请求",value:H(h(((L=g.summary)==null?void 0:L.avgDailyRequests)||0)),subtitle:"平均每日调用",icon:"fa-chart-line",iconClass:"text-orange-500"}]}),O=async()=>{if(await Rs(),!g.show||!E.value)return;if(C&&C.destroy(),!g.history||g.history.length===0){C=null;return}const N=g.history.map(ee=>ee.label),u=g.history.map(ee=>ee.cost||0),J=g.history.map(ee=>ee.requests||0);C=new Es(E.value,{type:"line",data:{labels:N,datasets:[{label:"费用 (USD)",data:u,borderColor:X.value.cost,backgroundColor:X.value.costFill,tension:.35,fill:!0,yAxisID:"y"},{label:"请求次数",data:J,borderColor:X.value.requests,backgroundColor:"transparent",tension:.35,yAxisID:"y1"}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{labels:{color:X.value.text}},tooltip:{callbacks:{label(ee){return ee.dataset.label==="费用 (USD)"?`${ee.dataset.label}: ${Q(ee.parsed.y)}`:`${ee.dataset.label}: ${H(ee.parsed.y)} 次`}}}},scales:{x:{ticks:{color:X.value.text},grid:{color:X.value.grid}},y:{position:"left",ticks:{color:X.value.text,callback:ee=>Q(ee)},grid:{color:X.value.grid}},y1:{position:"right",ticks:{color:X.value.text,callback:ee=>H(ee)},grid:{drawOnChartArea:!1}}}}})},ke=()=>{C&&(C.destroy(),C=null)},_e=()=>{ke(),me("close")};return pe(()=>g.show,N=>{N&&!g.loading?O():N||ke()}),pe(()=>g.loading,N=>{!N&&g.show&&O()}),pe(()=>g.history,()=>{g.show&&!g.loading&&O()},{deep:!0}),pe(G,()=>{g.show&&!g.loading&&O()}),Ts(()=>{ke()}),(N,u)=>{var J,ee,Ae,s,Ue,L,A,P,ie,le,we,He,st,Ct,T,nt,Ye,We,Ne,at,it,xt,Ze,ft,bt,Je,x,c,D,qe,Tt,lt,Qe,De,dt,ut,vt,Ve,Kt,Xe,ot;return o(),Fe(Dt,{to:"body"},[W.show?(o(),i("div",Hu,[e("div",{class:"absolute inset-0",onClick:_e}),e("div",Ju,[e("div",Yu,[e("div",Zu,[u[2]||(u[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",Xu,[e("div",ep,[e("h3",tp,p(((J=W.account)==null?void 0:J.name)||((ee=W.account)==null?void 0:ee.email)||"账号使用详情"),1),(Ae=W.account)!=null&&Ae.platform?(o(),i("span",sp,[u[0]||(u[0]=e("i",{class:"fas fa-layer-group mr-1"},null,-1)),$(p(k.value),1)])):f("",!0),(s=W.account)!=null&&s.accountType?(o(),i("span",ap,[u[1]||(u[1]=e("i",{class:"fas fa-user-tag mr-1"},null,-1)),$(p(V.value),1)])):f("",!0)]),e("p",rp,[$(" 近 "+p(((Ue=W.summary)==null?void 0:Ue.days)||30)+" 天内的费用与请求趋势 ",1),(L=W.summary)!=null&&L.actualDaysUsed&&((A=W.summary)==null?void 0:A.actualDaysUsed)<((P=W.summary)==null?void 0:P.days)?(o(),i("span",lp," (日均基于实际使用 "+p(W.summary.actualDaysUsed)+" 天) ",1)):f("",!0)])])]),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:_e},u[3]||(u[3]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",op,[W.loading?(o(),i("div",np,u[4]||(u[4]=[e("div",{class:"loading-spinner h-12 w-12 border-4 border-blue-500"},null,-1)]))):(o(),i(ve,{key:1},[e("div",ip,[(o(!0),i(ve,null,Se(I.value,et=>(o(),i("div",{key:et.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",dp,[e("div",null,[e("p",up,p(et.label),1),e("p",pp,p(et.value),1),e("p",gp,p(et.subtitle),1)]),e("div",mp,[e("i",{class:K(["fas",et.icon,et.iconClass])},null,2)])])]))),128))]),e("div",yp,[e("div",cp,[u[8]||(u[8]=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"}),$(" 今日概览 ")],-1)),e("div",xp,[e("div",fp,[u[5]||(u[5]=e("span",null,"费用",-1)),e("span",bp,p(((le=(ie=W.summary)==null?void 0:ie.today)==null?void 0:le.costFormatted)||"$0.000000"),1)]),e("div",vp,[u[6]||(u[6]=e("span",null,"请求",-1)),e("span",kp,p(H(((He=(we=W.summary)==null?void 0:we.today)==null?void 0:He.requests)||0)),1)]),e("div",hp,[u[7]||(u[7]=e("span",null,"Tokens",-1)),e("span",null,p(H(((Ct=(st=W.summary)==null?void 0:st.today)==null?void 0:Ct.tokens)||0)),1)])])]),e("div",wp,[u[12]||(u[12]=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"}),$(" 最高费用日 ")],-1)),e("div",$p,[e("div",Ap,[u[9]||(u[9]=e("span",null,"日期",-1)),e("span",Cp,p(y((nt=(T=W.summary)==null?void 0:T.highestCostDay)==null?void 0:nt.date)),1)]),e("div",Up,[u[10]||(u[10]=e("span",null,"费用",-1)),e("span",Ip,p(((We=(Ye=W.summary)==null?void 0:Ye.highestCostDay)==null?void 0:We.formattedCost)||"$0.000000"),1)]),e("div",Tp,[u[11]||(u[11]=e("span",null,"请求",-1)),e("span",null,p(H(se((at=(Ne=W.summary)==null?void 0:Ne.highestCostDay)==null?void 0:at.date,"requests"))),1)])])]),e("div",Kp,[u[16]||(u[16]=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"}),$(" 最高请求日 ")],-1)),e("div",Pp,[e("div",Mp,[u[13]||(u[13]=e("span",null,"日期",-1)),e("span",Dp,p(y((xt=(it=W.summary)==null?void 0:it.highestRequestDay)==null?void 0:xt.date)),1)]),e("div",Sp,[u[14]||(u[14]=e("span",null,"请求",-1)),e("span",_p,p(H(((ft=(Ze=W.summary)==null?void 0:Ze.highestRequestDay)==null?void 0:ft.requests)||0)),1)]),e("div",jp,[u[15]||(u[15]=e("span",null,"费用",-1)),e("span",null,p(Q(se((Je=(bt=W.summary)==null?void 0:bt.highestRequestDay)==null?void 0:Je.date,"cost"))),1)])])])]),e("div",zp,[e("div",Vp,[u[20]||(u[20]=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"}),$(" 累计 Token ")],-1)),e("div",Rp,[e("div",Op,[u[17]||(u[17]=e("span",null,"30天总计",-1)),e("span",Lp,p(H(B.value)),1)]),e("div",Ep,[u[18]||(u[18]=e("span",null,"日均 Token",-1)),e("span",Np,p(H(Math.round(((x=W.summary)==null?void 0:x.avgDailyTokens)||0))),1)]),e("div",qp,[u[19]||(u[19]=e("span",null,"输入 / 输出",-1)),e("span",null,p(H(ae.value))+" / "+p(H(F.value)),1)])])]),e("div",Gp,[u[24]||(u[24]=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"}),$(" 平均速率 ")],-1)),e("div",Fp,[e("div",Wp,[u[21]||(u[21]=e("span",null,"RPM",-1)),e("span",Qp,p(((D=(c=W.overview)==null?void 0:c.averages)==null?void 0:D.rpm)??0),1)]),e("div",Bp,[u[22]||(u[22]=e("span",null,"TPM",-1)),e("span",Hp,p(((Tt=(qe=W.overview)==null?void 0:qe.averages)==null?void 0:Tt.tpm)??0),1)]),e("div",Jp,[u[23]||(u[23]=e("span",null,"日均请求 / Token",-1)),e("span",null,p(H(Math.round((((Qe=(lt=W.overview)==null?void 0:lt.averages)==null?void 0:Qe.dailyRequests)||0)*100)/100))+" / "+p(H(Math.round((((dt=(De=W.overview)==null?void 0:De.averages)==null?void 0:dt.dailyTokens)||0)*100)/100)),1)])])]),e("div",Yp,[u[28]||(u[28]=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"}),$(" 最近统计 ")],-1)),e("div",Zp,[e("div",Xp,[u[25]||(u[25]=e("span",null,"今日请求",-1)),e("span",eg,p(H(((vt=(ut=W.overview)==null?void 0:ut.daily)==null?void 0:vt.requests)||0)),1)]),e("div",tg,[u[26]||(u[26]=e("span",null,"今日 Token",-1)),e("span",sg,p(H(((Kt=(Ve=W.overview)==null?void 0:Ve.daily)==null?void 0:Kt.allTokens)||0)),1)]),e("div",ag,[u[27]||(u[27]=e("span",null,"今日费用",-1)),e("span",null,p(Q(((ot=(Xe=W.overview)==null?void 0:Xe.daily)==null?void 0:ot.cost)||0)),1)])])])]),e("div",rg,[e("div",lg,[u[29]||(u[29]=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"}),$(" 30天费用与请求趋势 ")],-1)),e("span",og," 最新更新时间:"+p(j(R.value)),1)]),e("div",ng,[e("canvas",{ref_key:"chartCanvas",ref:E,class:"h-full w-full"},null,512)])])],64))])])])):f("",!0)])}}},dg=Zt(ig,[["__scopeId","data-v-2d353513"]]),ug={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},pg={class:"modal-content relative mx-auto w-full max-w-lg p-8"},gg={class:"mb-6 flex items-center justify-between"},mg={class:"flex items-center gap-3"},yg={class:"text-sm text-gray-600 dark:text-gray-400"},cg={class:"space-y-6"},xg={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"},fg={class:"flex items-center justify-between"},bg={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},vg={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},kg={class:"mb-3 grid grid-cols-3 gap-2"},hg=["onClick"],wg={key:0,class:"animate-fadeIn"},$g=["min"],Ag={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"},Cg={class:"flex items-center justify-between"},Ug={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},Ig={class:"flex gap-3 pt-2"},Tg=["disabled"],Kg={key:0,class:"loading-spinner mr-2"},Pg={key:1,class:"fas fa-save mr-2"},Mg={__name:"AccountExpiryEditModal",props:{show:{type:Boolean,required:!0},account:{type:Object,required:!0}},emits:["close","save"],setup(W,{expose:Ke,emit:g}){const me=W,M=g,G=U(!1),E=Os({expireDuration:"",customExpireDate:"",expiresAt:null}),C=[{value:"",label:"永不过期"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],w=ge(()=>{const h=new Date;return h.setMinutes(h.getMinutes()+1),h.toISOString().slice(0,16)});pe(()=>me.show,h=>{h&&k()}),pe(()=>{var h;return(h=me.account)==null?void 0:h.id},h=>{h&&me.show&&k()});const k=()=>{G.value=!1,me.account.expiresAt?(E.expireDuration="custom",E.customExpireDate=new Date(me.account.expiresAt).toISOString().slice(0,16),E.expiresAt=me.account.expiresAt):(E.expireDuration="",E.customExpireDate="",E.expiresAt=null)},V=h=>{if(E.expireDuration=h,!h){E.expiresAt=null;return}if(h==="custom")return;const y=new Date,j=h.match(/(\d+)([dhmy])/);if(j){const[,se,R]=j,I=parseInt(se);switch(R){case"d":y.setDate(y.getDate()+I);break;case"h":y.setHours(y.getHours()+I);break;case"m":y.setMonth(y.getMonth()+I);break;case"y":y.setFullYear(y.getFullYear()+I);break}E.expiresAt=y.toISOString()}},X=()=>{if(E.customExpireDate)try{const[h,y]=E.customExpireDate.split("T"),[j,se,R]=h.split("-").map(Number),[I,O]=y.split(":").map(Number),ke=new Date(j,se-1,R,I,O,0,0);if(isNaN(ke.getTime())){console.error("Invalid date:",E.customExpireDate);return}E.expiresAt=ke.toISOString()}catch(h){console.error("Failed to parse custom expire date:",h)}},B=h=>h?new Date(h).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",ae=h=>h?new Date(h)<new Date:!1,F=h=>{if(!h)return null;const y=new Date,se=new Date(h)-y,R=Math.ceil(se/(1e3*60*60*24));return se<0?{text:"已过期",class:"text-red-600"}:R<=7?{text:`${R} 天后过期`,class:"text-orange-600"}:R<=30?{text:`${R} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(R/30)} 个月后过期`,class:"text-green-600"}},H=()=>{G.value=!0,M("save",{accountId:me.account.id,expiresAt:E.expiresAt})};return Ke({resetSaving:()=>{G.value=!1}}),(h,y)=>(o(),Fe(Dt,{to:"body"},[W.show?(o(),i("div",ug,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:y[0]||(y[0]=j=>h.$emit("close"))}),e("div",pg,[e("div",gg,[e("div",mg,[y[6]||(y[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,[y[5]||(y[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改到期时间",-1)),e("p",yg,' 为 "'+p(W.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:y[1]||(y[1]=j=>h.$emit("close"))},y[7]||(y[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",cg,[e("div",xg,[e("div",fg,[e("div",null,[y[10]||(y[10]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",bg,[W.account.expiresAt?(o(),i(ve,{key:0},[$(p(B(W.account.expiresAt))+" ",1),F(W.account.expiresAt)?(o(),i("span",{key:0,class:K(["ml-2 text-xs font-normal",F(W.account.expiresAt).class])}," ("+p(F(W.account.expiresAt).text)+") ",3)):f("",!0)],64)):(o(),i(ve,{key:1},[y[8]||(y[8]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),y[9]||(y[9]=$(" 永不过期 ",-1))],64))])]),e("div",vg,[e("i",{class:K(["fas fa-hourglass-half text-lg",W.account.expiresAt&&ae(W.account.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),e("div",null,[y[12]||(y[12]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",kg,[(o(),i(ve,null,Se(C,j=>e("button",{key:j.value,class:K(["rounded-lg px-3 py-2 text-sm font-medium transition-all",E.expireDuration===j.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:se=>V(j.value)},p(j.label),11,hg)),64)),e("button",{class:K(["rounded-lg px-3 py-2 text-sm font-medium transition-all",E.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:y[2]||(y[2]=j=>V("custom"))},y[11]||(y[11]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),$(" 自定义 ",-1)]),2)])]),E.expireDuration==="custom"?(o(),i("div",wg,[y[13]||(y[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),v(e("input",{"onUpdate:modelValue":y[3]||(y[3]=j=>E.customExpireDate=j),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:w.value,type:"datetime-local",onChange:X},null,40,$g),[[S,E.customExpireDate]]),y[14]||(y[14]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为到期时间 ",-1))])):f("",!0),E.expiresAt!==W.account.expiresAt?(o(),i("div",Ag,[e("div",Cg,[e("div",null,[y[17]||(y[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"}),$(" 新的到期时间 ")],-1)),e("p",Ug,[E.expiresAt?(o(),i(ve,{key:0},[$(p(B(E.expiresAt))+" ",1),F(E.expiresAt)?(o(),i("span",{key:0,class:K(["ml-2 text-xs font-normal",F(E.expiresAt).class])}," ("+p(F(E.expiresAt).text)+") ",3)):f("",!0)],64)):(o(),i(ve,{key:1},[y[15]||(y[15]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),y[16]||(y[16]=$(" 永不过期 ",-1))],64))])]),y[18]||(y[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))])])):f("",!0),e("div",Ig,[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:y[4]||(y[4]=j=>h.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:G.value||E.expiresAt===W.account.expiresAt,onClick:H},[G.value?(o(),i("div",Kg)):(o(),i("i",Pg)),$(" "+p(G.value?"保存中...":"保存更改"),1)],8,Tg)])])])])):f("",!0)]))}},Dg=Zt(Mg,[["__scopeId","data-v-f19e4a71"]]),Sg={class:"accounts-container"},_g={class:"card p-4 sm:p-6"},jg={class:"mb-4 flex flex-col gap-4 sm:mb-6"},zg={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Vg={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},Rg={class:"group relative min-w-[160px]"},Og={class:"group relative min-w-[140px]"},Lg={class:"group relative min-w-[160px]"},Eg={class:"group relative min-w-[200px]"},Ng={class:"relative flex items-center"},qg={class:"flex w-full flex-col gap-3 sm:w-auto sm:flex-row sm:items-center sm:gap-3"},Gg={class:"relative"},Fg=["disabled"],Wg={class:"relative"},Qg={key:0,class:"py-12 text-center"},Bg={key:1,class:"py-12 text-center"},Hg={key:2,class:"table-container hidden md:block"},Jg={class:"w-full table-fixed"},Yg={class:"bg-gray-50/80 backdrop-blur-sm dark:bg-gray-700/80"},Zg={key:0,class:"w-[50px] px-3 py-4 text-left"},Xg={class:"flex items-center"},em=["indeterminate"],tm={key:1,class:"fas fa-sort ml-1 text-gray-400"},sm={key:1,class:"fas fa-sort ml-1 text-gray-400"},am={key:1,class:"fas fa-sort ml-1 text-gray-400"},rm={key:1,class:"fas fa-sort ml-1 text-gray-400"},lm={key:1,class:"fas fa-sort ml-1 text-gray-400"},om={class:"w-[10%] min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},nm={class:"flex items-center gap-2"},im={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},dm={key:0,class:"px-3 py-3"},um={class:"flex items-center"},pm=["value"],gm={class:"px-3 py-4"},mm={class:"flex items-center"},ym={class:"min-w-0"},cm={class:"flex items-center gap-2"},xm=["title"],fm={key:0,class:"inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-800"},bm={key:1,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800"},vm={key:2,class:"inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800"},km={key:0,class:"my-2 flex flex-wrap items-center gap-2"},hm=["title"],wm=["title"],$m={class:"px-3 py-4"},Am={class:"flex items-center gap-1"},Cm={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"},Um={class:"text-xs font-medium text-yellow-700"},Im={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"},Tm={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"},Km={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"},Pm={class:"text-xs font-medium text-gray-950"},Mm={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"},Dm={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"},Sm={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"},_m={class:"text-xs font-semibold text-indigo-800"},jm={class:"text-xs font-medium text-indigo-700"},zm={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"},Vm={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"},Rm={class:"text-xs font-medium text-cyan-700 dark:text-cyan-300"},Om={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"},Lm={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"},Em={class:"whitespace-nowrap px-3 py-4"},Nm={class:"flex flex-col gap-1"},qm={key:0},Gm=["onClick"],Fm=["onClick"],Wm=["onClick"],Qm=["onClick"],Bm={class:"whitespace-nowrap px-3 py-4"},Hm={class:"flex flex-col gap-1"},Jm={key:0,class:"inline-flex items-center rounded-full bg-yellow-100 px-3 py-1 text-xs font-semibold text-yellow-800"},Ym={key:0},Zm={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-3 py-1 text-xs font-semibold text-gray-700"},Xm=["title"],ey={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},ty={class:"whitespace-nowrap px-3 py-4"},sy={key:0,class:"flex items-center gap-2"},ay={class:"h-2 w-16 rounded-full bg-gray-200"},ry={class:"min-w-[20px] text-xs font-medium text-gray-700 dark:text-gray-200"},ly={key:1,class:"text-sm text-gray-400"},oy={class:"px-3 py-4 text-sm text-gray-600"},ny=["title"],iy={key:1,class:"text-gray-400"},dy={class:"whitespace-nowrap px-3 py-4 text-sm"},uy={key:0,class:"space-y-1"},py={class:"flex items-center gap-2"},gy={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},my={class:"flex items-center gap-2"},yy={class:"text-xs text-gray-600 dark:text-gray-300"},cy={class:"flex items-center gap-2"},xy={class:"text-xs text-gray-600 dark:text-gray-300"},fy={key:0,class:"text-xs text-gray-500 dark:text-gray-400"},by={key:1,class:"text-xs text-gray-400"},vy={class:"whitespace-nowrap px-3 py-4"},ky={key:0,class:"space-y-2"},hy={key:0,class:"space-y-2"},wy={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},$y={class:"flex items-center gap-2"},Ay={class:"flex-1"},Cy={class:"flex items-center gap-2"},Uy={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Iy={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Ty={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Ky={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Py={class:"flex items-center gap-2"},My={class:"flex-1"},Dy={class:"flex items-center gap-2"},Sy={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},_y={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},jy={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},zy={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Vy={class:"flex items-center gap-2"},Ry={class:"flex-1"},Oy={class:"flex items-center gap-2"},Ly={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Ey={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Ny={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},qy={key:1,class:"space-y-2"},Gy={key:0,class:"flex items-center gap-3 text-xs"},Fy={class:"flex items-center gap-1"},Wy={class:"font-medium text-gray-900 dark:text-gray-100"},Qy={class:"flex items-center gap-1"},By={class:"font-medium text-gray-900 dark:text-gray-100"},Hy={class:"flex items-center gap-2"},Jy={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},Yy={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},Zy={class:"text-xs text-gray-600 dark:text-gray-400"},Xy={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},ec={key:2,class:"text-xs text-gray-400"},tc={key:1,class:"space-y-3"},sc={class:"flex items-center justify-between text-xs"},ac={class:"font-medium text-gray-700 dark:text-gray-200"},rc={class:"flex items-center gap-2"},lc={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},oc={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},nc={class:"text-xs text-gray-600 dark:text-gray-400"},ic={class:"ml-2 text-gray-400"},dc={key:1,class:"text-sm text-gray-400"},uc={class:"space-y-1"},pc={class:"flex items-center justify-between text-xs"},gc={key:0,class:"font-medium text-gray-700 dark:text-gray-200"},mc={key:0,class:"flex items-center gap-2"},yc={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},cc={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"},xc={key:2,class:"space-y-2"},fc={key:0,class:"space-y-2"},bc={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},vc={class:"flex items-center gap-2"},kc={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"},hc={class:"flex-1"},wc={class:"flex items-center gap-2"},$c={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Ac={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Cc={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Uc={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Ic={class:"flex items-center gap-2"},Tc={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"},Kc={class:"flex-1"},Pc={class:"flex items-center gap-2"},Mc={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Dc={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Sc={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},_c={key:1,class:"text-sm text-gray-400"},jc={key:3,class:"text-sm text-gray-400"},zc={class:"whitespace-nowrap px-3 py-4 text-sm text-gray-600 dark:text-gray-300"},Vc={class:"whitespace-nowrap px-3 py-4 text-sm font-medium"},Rc={class:"flex flex-wrap items-center gap-1"},Oc=["disabled","title","onClick"],Lc=["disabled","title","onClick"],Ec={class:"ml-1"},Nc=["onClick"],qc=["onClick"],Gc=["onClick"],Fc={key:3,class:"space-y-3 md:hidden"},Wc={class:"mb-3 flex items-start justify-between"},Qc={class:"flex items-center gap-3"},Bc=["value"],Hc={class:"text-sm font-semibold text-gray-900"},Jc={class:"mt-0.5 flex items-center gap-2"},Yc={class:"text-xs text-gray-500 dark:text-gray-400"},Zc={class:"text-xs text-gray-500 dark:text-gray-400"},Xc={class:"mb-3 grid grid-cols-2 gap-3"},ex={class:"space-y-1"},tx={class:"flex items-center gap-1.5"},sx={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ax={class:"flex items-center gap-1.5"},rx={class:"text-xs text-gray-600 dark:text-gray-400"},lx={class:"flex items-center gap-1.5"},ox={class:"text-xs text-gray-600 dark:text-gray-400"},nx={key:0,class:"space-y-1"},ix={class:"flex items-center gap-1.5"},dx={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ux={class:"flex items-center gap-1.5"},px={class:"text-xs text-gray-600 dark:text-gray-400"},gx={key:1,class:"text-sm font-semibold text-gray-400"},mx={class:"mb-3 space-y-2"},yx={key:0,class:"space-y-2"},cx={key:0,class:"space-y-2"},xx={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},fx={class:"flex items-center gap-2"},bx={class:"flex-1"},vx={class:"flex items-center gap-2"},kx={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},hx={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},wx={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},$x={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Ax={class:"flex items-center gap-2"},Cx={class:"flex-1"},Ux={class:"flex items-center gap-2"},Ix={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Tx={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Kx={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Px={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Mx={class:"flex items-center gap-2"},Dx={class:"flex-1"},Sx={class:"flex items-center gap-2"},_x={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},jx={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},zx={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Vx={key:1,class:"space-y-1.5 rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Rx={class:"flex items-center justify-between text-xs"},Ox={class:"flex items-center gap-1"},Lx={class:"font-medium text-gray-700 dark:text-gray-200"},Ex={class:"h-2 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-600"},Nx={class:"flex items-center justify-between text-xs"},qx={class:"text-gray-500 dark:text-gray-400"},Gx={key:0,class:"font-medium text-indigo-600"},Fx={key:1,class:"text-gray-500"},Wx={key:2,class:"text-xs text-gray-400"},Qx={key:1,class:"space-y-2"},Bx={key:0,class:"space-y-2"},Hx={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Jx={class:"flex items-center gap-2"},Yx={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"},Zx={class:"flex-1"},Xx={class:"flex items-center gap-2"},ef={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},tf={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},sf={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},af={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},rf={class:"flex items-center gap-2"},lf={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"},of={class:"flex-1"},nf={class:"flex items-center gap-2"},df={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},uf={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},pf={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},gf={key:1,class:"text-xs text-gray-400"},mf={class:"flex items-center justify-between text-xs"},yf={class:"text-gray-700 dark:text-gray-200"},cf={key:2,class:"flex items-center justify-between text-xs"},xf={class:"text-gray-700 dark:text-gray-200"},ff={class:"flex items-center justify-between text-xs"},bf={class:"font-medium text-gray-700 dark:text-gray-200"},vf={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3"},kf=["disabled","onClick"],hf=["onClick"],wf=["onClick"],$f=["onClick"],Af={key:0,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},Cf={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},Uf={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},If={class:"flex items-center gap-2"},Tf=["value"],Kf={class:"flex items-center gap-2"},Pf=["disabled"],Mf={class:"flex items-center gap-1"},Df={key:1,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},Sf=["onClick"],_f={key:2,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},jf=["disabled"],Is="accountsPageSize",zf={__name:"AccountsView",setup(W){const{showConfirmModal:Ke,confirmOptions:g,showConfirm:me,handleConfirm:M,handleCancel:G}=Ps(),E=U([]),C=U(!1),w=U("name"),k=U(""),V=U("asc"),X=U([]),B=U({}),ae=U([]),F=U("all"),H=U("all"),Q=U(""),h=()=>{const r=localStorage.getItem(Is);if(r){const a=parseInt(r,10);if([10,20,50,100].includes(a))return a}return 10},y=[10,20,50,100],j=U(h()),se=U(1),R=U([]),I=U(!1),O=U(!1),ke=U(!1),_e=U(!1),N=U(!1),u=U(null),J=U([]),ee=U({}),Ae=U({}),s=U(""),Ue=["claude","claude-console","openai","openai-responses","gemini","droid","gemini-api"],L=U(null),A=U(null),P=U(!1),ie=U(!1),le=U(!1),we=U(!1),He=U(new Map),st=U([{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"}]),Ct=U([{value:"all",label:"所有平台",icon:"fa-globe"},{value:"claude",label:"Claude",icon:"fa-brain"},{value:"claude-console",label:"Claude Console",icon:"fa-terminal"},{value:"gemini",label:"Gemini",icon:"fab fa-google"},{value:"gemini-api",label:"Gemini API",icon:"fa-key"},{value:"openai",label:"OpenAi",icon:"fa-openai"},{value:"azure_openai",label:"Azure OpenAI",icon:"fab fa-microsoft"},{value:"bedrock",label:"Bedrock",icon:"fab fa-aws"},{value:"openai-responses",label:"OpenAI-Responses",icon:"fa-server"},{value:"ccr",label:"CCR",icon:"fa-code-branch"},{value:"droid",label:"Droid",icon:"fa-robot"}]),T=ge(()=>{const r=[{value:"all",label:"所有账户",icon:"fa-globe"},{value:"ungrouped",label:"未分组账户",icon:"fa-user"}];return ae.value.forEach(a=>{r.push({value:a.id,label:`${a.name} (${a.platform==="claude"?"Claude":a.platform==="gemini"?"Gemini":a.platform==="openai"?"OpenAI":"Droid"})`,icon:a.platform==="claude"?"fa-brain":a.platform==="gemini"?"fa-robot":a.platform==="openai"?"fa-openai":"fa-robot"})}),r}),nt=ge(()=>ke.value),Ye=U(!1),We=U(null),Ne=U(!1),at=U(null),it=r=>{const a=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(l=>{if(typeof l=="string"){const q=l.trim();q&&a.add(q)}}),Array.isArray(r==null?void 0:r.groupInfos)&&r.groupInfos.forEach(l=>{if(l&&typeof l.name=="string"){const q=l.name.trim();q&&a.add(q)}}),Object.entries(r||{}).forEach(([l,q])=>{if(typeof q=="string"){const ue=l.toLowerCase();if(ue.includes("name")||ue.includes("email")){const be=q.trim();be&&a.add(be)}}}),Array.from(a)},xt=(r,a)=>a?it(r).some(b=>b.toLowerCase().includes(a)):!0,Ze=r=>!!r&&Ue.includes(r.platform),ft=async r=>{if(!Ze(r)){_("该账户类型暂不支持查看详情","warning");return}u.value=r,_e.value=!0,N.value=!0,J.value=[],ee.value={},Ae.value={},s.value="";try{const a=await z.get(`/admin/accounts/${r.id}/usage-history?platform=${r.platform}&days=30`);if(a.success){const b=a.data||{};J.value=b.history||[],ee.value=b.summary||{},Ae.value=b.overview||{},s.value=b.generatedAt||""}else _(a.error||"加载账号使用详情失败","error")}catch{_("加载账号使用详情失败","error")}finally{N.value=!1}},bt=()=>{_e.value=!1,N.value=!1,u.value=null},Je=ge(()=>{let r=E.value;const a=Q.value.trim();if(a){const l=a.toLowerCase();r=r.filter(q=>xt(q,l))}return k.value?[...r].sort((l,q)=>{var xe,je,yt,fe,Ge,$t,Ee,rt,ct,ye,ce,ze;let ue=l[k.value],be=q[k.value];return k.value==="dailyTokens"?(ue=((je=(xe=l.usage)==null?void 0:xe.daily)==null?void 0:je.allTokens)||0,be=((fe=(yt=q.usage)==null?void 0:yt.daily)==null?void 0:fe.allTokens)||0):k.value==="dailyRequests"?(ue=(($t=(Ge=l.usage)==null?void 0:Ge.daily)==null?void 0:$t.requests)||0,be=((rt=(Ee=q.usage)==null?void 0:Ee.daily)==null?void 0:rt.requests)||0):k.value==="totalTokens"&&(ue=((ye=(ct=l.usage)==null?void 0:ct.total)==null?void 0:ye.allTokens)||0,be=((ze=(ce=q.usage)==null?void 0:ce.total)==null?void 0:ze.allTokens)||0),k.value==="lastUsed"&&(ue=l.lastUsedAt?new Date(l.lastUsedAt).getTime():0,be=q.lastUsedAt?new Date(q.lastUsedAt).getTime():0),k.value==="status"&&(ue=l.isActive?1:0,be=q.isActive?1:0),ue<be?V.value==="asc"?-1:1:ue>be?V.value==="asc"?1:-1:0}):r}),x=ge(()=>{const r=Je.value.length;return Math.ceil(r/j.value)||0}),c=ge(()=>{const r=x.value,a=se.value,b=[];if(r<=7)for(let l=1;l<=r;l++)b.push(l);else{let l=Math.max(1,a-2),q=Math.min(r,a+2);a<=3?q=5:a>=r-2&&(l=r-4);for(let ue=l;ue<=q;ue++)b.push(ue)}return b}),D=ge(()=>{const r=c.value;return r.length===0?!1:r[0]>1}),qe=ge(()=>{const r=c.value;return r.length===0?!1:r[r.length-1]<x.value}),Tt=ge(()=>{const r=c.value;return r.length===0?!1:D.value&&r[0]>2}),lt=ge(()=>{const r=c.value;return r.length===0?!1:qe.value&&r[r.length-1]<x.value-1}),Qe=ge(()=>{const r=(se.value-1)*j.value,a=r+j.value;return Je.value.slice(r,a)}),De=()=>{const r=Qe.value.map(l=>l.id),a=r.filter(l=>R.value.includes(l)).length,b=r.length;a===0?(I.value=!1,O.value=!1):a===b?(I.value=!0,O.value=!1):(I.value=!1,O.value=!0)},dt=()=>{if(I.value)Qe.value.forEach(r=>{R.value.includes(r.id)||R.value.push(r.id)});else{const r=new Set(Qe.value.map(a=>a.id));R.value=R.value.filter(a=>!r.has(a))}De()},ut=()=>{ke.value=!ke.value,ke.value?De():(R.value=[],I.value=!1,O.value=!1)},vt=()=>{const r=new Set(E.value.map(a=>a.id));R.value=R.value.filter(a=>r.has(a)),De()},Ve=async(r=!1)=>{C.value=!0;try{const a={};H.value!=="all"&&(a.platform=H.value),F.value!=="all"&&(a.groupId=F.value);const b=[];if(H.value==="all")b.push(z.get("/admin/claude-accounts",{params:a}),z.get("/admin/claude-console-accounts",{params:a}),z.get("/admin/bedrock-accounts",{params:a}),z.get("/admin/gemini-accounts",{params:a}),z.get("/admin/openai-accounts",{params:a}),z.get("/admin/azure-openai-accounts",{params:a}),z.get("/admin/openai-responses-accounts",{params:a}),z.get("/admin/ccr-accounts",{params:a}),z.get("/admin/droid-accounts",{params:a}),z.get("/admin/gemini-api-accounts",{params:a}));else switch(H.value){case"claude":b.push(z.get("/admin/claude-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"claude-console":b.push(Promise.resolve({success:!0,data:[]}),z.get("/admin/claude-console-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"bedrock":b.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),z.get("/admin/bedrock-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"gemini":b.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),z.get("/admin/gemini-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"openai":b.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),z.get("/admin/openai-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"azure_openai":b.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),z.get("/admin/azure-openai-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"openai-responses":b.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),z.get("/admin/openai-responses-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"ccr":b.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),z.get("/admin/ccr-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"droid":b.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),z.get("/admin/droid-accounts",{params:a}),Promise.resolve({success:!0,data:[]}));break;case"gemini-api":b.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),z.get("/admin/gemini-api-accounts",{params:a}));break;default:b.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break}await Promise.all([St(r),es(r)]);const[l,q,ue,be,xe,je,yt,fe,Ge,$t]=await Promise.all(b),Ee=[],rt=B.value;if(l.success){const ye=(l.data||[]).map(ce=>{var Te;const ze=((Te=rt.claudeAccountId)==null?void 0:Te[ce.id])||0;return{...ce,platform:"claude",boundApiKeysCount:ze}});Ee.push(...ye)}if(q.success){const ye=(q.data||[]).map(ce=>{var Te;const ze=((Te=rt.claudeConsoleAccountId)==null?void 0:Te[ce.id])||0;return{...ce,platform:"claude-console",boundApiKeysCount:ze}});Ee.push(...ye)}if(ue.success){const ye=(ue.data||[]).map(ce=>({...ce,platform:"bedrock",boundApiKeysCount:0}));Ee.push(...ye)}if(be.success){const ye=(be.data||[]).map(ce=>{var Te;const ze=((Te=rt.geminiAccountId)==null?void 0:Te[ce.id])||0;return{...ce,platform:"gemini",boundApiKeysCount:ze}});Ee.push(...ye)}if(xe.success){const ye=(xe.data||[]).map(ce=>{var Te;const ze=((Te=rt.openaiAccountId)==null?void 0:Te[ce.id])||0;return{...ce,platform:"openai",boundApiKeysCount:ze}});Ee.push(...ye)}if(je&&je.success){const ye=(je.data||[]).map(ce=>{var Te;const ze=((Te=rt.azureOpenaiAccountId)==null?void 0:Te[ce.id])||0;return{...ce,platform:"azure_openai",boundApiKeysCount:ze}});Ee.push(...ye)}if(yt&&yt.success){const ye=(yt.data||[]).map(ce=>{var Te;const ze=((Te=rt.openaiAccountId)==null?void 0:Te[`responses:${ce.id}`])||0;return{...ce,platform:"openai-responses",boundApiKeysCount:ze}});Ee.push(...ye)}if(fe&&fe.success){const ye=(fe.data||[]).map(ce=>({...ce,platform:"ccr",boundApiKeysCount:0}));Ee.push(...ye)}if(Ge&&Ge.success){const ye=(Ge.data||[]).map(ce=>{var Te;const ze=((Te=rt.droidAccountId)==null?void 0:Te[ce.id])||ce.boundApiKeysCount||0;return{...ce,platform:"droid",boundApiKeysCount:ze}});Ee.push(...ye)}if($t&&$t.success){const ye=($t.data||[]).map(ce=>{var Te;const ze=((Te=rt.geminiAccountId)==null?void 0:Te[`api:${ce.id}`])||0;return{...ce,platform:"gemini-api",boundApiKeysCount:ze}});Ee.push(...ye)}let ct=Ee;F.value!=="all"&&(F.value==="ungrouped"?ct=Ee.filter(ye=>!ye.groupInfos||ye.groupInfos.length===0):ct=Ee.filter(ye=>!ye.groupInfos||ye.groupInfos.length===0?!1:ye.groupInfos.some(ce=>ce.id===F.value))),ct=ct.map(ye=>{const ce=_t(ye.proxyConfig||ye.proxy);return{...ye,proxyConfig:ce||null}}),E.value=ct,vt(),ct.some(ye=>ye.platform==="claude")&&Kt().catch(ye=>{console.debug("Claude usage loading failed:",ye)})}catch{_("加载账户失败","error")}finally{C.value=!1}},Kt=async()=>{try{const r=await z.get("/admin/claude-accounts/usage");if(r.success&&r.data){const a=r.data;E.value=E.value.map(b=>b.platform==="claude"&&a[b.id]?{...b,claudeUsage:a[b.id]}:b)}}catch(r){console.debug("Failed to load Claude usage data:",r)}},Xe=r=>{r&&(k.value===r?V.value=V.value==="asc"?"desc":"asc":(k.value=r,V.value="asc"))},ot=r=>{if(r==null)return"0";const a=Number(r);return a>=1e6?(a/1e6).toFixed(2):a>=1e3?(a/1e6).toFixed(4):(a/1e6).toFixed(6)},et=r=>{if(!r)return"从未使用";const a=new Date(r),l=new Date-a;return l<6e4?"刚刚":l<36e5?`${Math.floor(l/6e4)} 分钟前`:l<864e5?`${Math.floor(l/36e5)} 小时前`:l<6048e5?`${Math.floor(l/864e5)} 天前`:a.toLocaleDateString("zh-CN")},Pe=()=>{Q.value="",se.value=1},St=async(r=!1)=>{if(!(!r&&ie.value))try{const a=await z.get("/admin/accounts/binding-counts");a.success&&(B.value=a.data||{},ie.value=!0)}catch{B.value={}}},Xt=async(r=!1)=>{var a;if(!(!r&&P.value))try{const b=await z.get("/admin/api-keys");b.success&&(X.value=((a=b.data)==null?void 0:a.items)||b.data||[],P.value=!0)}catch{}},es=async(r=!1)=>{if(!(!r&&le.value))try{const a=await z.get("/admin/account-groups");a.success&&(ae.value=a.data||[],le.value=!0)}catch{}},kt=()=>{P.value=!1,ie.value=!1,le.value=!1,we.value=!1,He.value.clear()},ts=()=>{se.value=1,Ve()},ss=()=>{se.value=1,Ve()};function _t(r){if(!r)return null;let a=r;if(typeof r=="string")try{a=JSON.parse(r)}catch{return null}if(!a||typeof a!="object")return null;const b=a.proxy&&typeof a.proxy=="object"?a.proxy:a,l=typeof b.host=="string"?b.host.trim():b.host!==void 0&&b.host!==null?String(b.host).trim():"",q=b.port!==void 0&&b.port!==null?String(b.port).trim():"";if(!l||!q)return null;const ue=typeof b.type=="string"&&b.type.trim()?b.type.trim():"socks5",be=typeof b.username=="string"?b.username:b.username!==void 0&&b.username!==null?String(b.username):"",xe=typeof b.password=="string"?b.password:b.password!==void 0&&b.password!==null?String(b.password):"";return{type:ue,host:l,port:q,username:be,password:xe}}const Pt=r=>{const a=_t(r);if(!a)return null;const b=a.type.toLowerCase()==="socks5"?"S5":a.type.toUpperCase();let l=a.host;l.length>15&&(l=l.substring(0,12)+"...");let q=`${b}://${l}:${a.port}`;return a.username&&(q=`${b}://***@${l}:${a.port}`),q},jt=(r,a)=>{if(!r||!a)return"--";const b=new Date(r),l=new Date(a),q=b.getHours().toString().padStart(2,"0"),ue=b.getMinutes().toString().padStart(2,"0"),be=l.getHours().toString().padStart(2,"0"),xe=l.getMinutes().toString().padStart(2,"0");return`${q}:${ue} - ${be}:${xe}`},zt=r=>{if(!r||r<=0)return"已结束";const a=Math.floor(r/60),b=r%60;return a>0?`${a}小时${b}分钟`:`${b}分钟`},as=r=>{if(!r||r<=0)return"";r=Math.floor(r);const a=Math.floor(r/1440),b=r%1440,l=Math.floor(b/60),q=b%60;return a>0?l>0?`${a}天${l}小时`:`${a}天`:l>0?q>0?`${l}小时${q}分钟`:`${l}小时`:`${q}分钟`},rs=()=>{We.value=null,Ye.value=!0},Vt=()=>{Ye.value=!1,We.value=null},Rt=r=>{at.value=r,Ne.value=!0},Ot=r=>!r||!r.id?[]:X.value.filter(a=>{const b=r.id;return a.claudeAccountId===b||a.claudeConsoleAccountId===b||a.geminiAccountId===b||a.openaiAccountId===b||a.azureOpenaiAccountId===b||a.openaiAccountId===`responses:${b}`||a.geminiAccountId===`api:${b}`}),ls=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}},Lt=async r=>{var b,l;const a=ls(r);if(!a)return{success:!1,message:"不支持的账户类型"};try{const q=await z.delete(a);return q.success?{success:!0,data:q}:{success:!1,message:q.message||"删除失败"}}catch(q){return{success:!1,message:((l=(b=q.response)==null?void 0:b.data)==null?void 0:l.message)||q.message||"删除失败"}}},Et=async r=>{const b=Ot(r).length;let l=`确定要删除账户 "${r.name}" 吗?`;if(b>0&&(l+=`
|
||
|
||
⚠️ 注意:此账号有 ${b} 个 API Key 绑定。`,l+=`
|
||
删除后,这些 API Key 将自动切换为共享池模式。`),l+=`
|
||
|
||
此操作不可恢复。`,!await me("删除账户",l,"删除","取消"))return;const ue=await Lt(r);if(ue.success){const be=ue.data;let xe="账户已成功删除";(be==null?void 0:be.unboundKeys)>0&&(xe+=`,${be.unboundKeys} 个 API Key 已切换为共享池模式`),_(xe,"success"),R.value=R.value.filter(je=>je!==r.id),De(),we.value=!1,P.value=!1,ie.value=!1,Ve(),Xt(!0),St(!0)}else _(ue.message||"删除失败","error")},os=async()=>{var yt;if(R.value.length===0){_("请先选择要删除的账户","warning");return}const r=new Map(E.value.map(fe=>[fe.id,fe])),a=R.value.map(fe=>r.get(fe)).filter(fe=>!!fe);if(a.length===0){_("选中的账户已不存在","warning"),R.value=[],De();return}let b=`确定要删除选中的 ${a.length} 个账户吗?此操作不可恢复。`;const l=a.map(fe=>({account:fe,boundKeys:Ot(fe)})).filter(fe=>fe.boundKeys.length>0);if(l.length>0&&(b+=`
|
||
|
||
⚠️ 以下账户存在绑定的 API Key,将自动解绑:`,l.forEach(({account:fe,boundKeys:Ge})=>{const $t=fe.name||fe.email||fe.accountName||fe.id;b+=`
|
||
- ${$t}: ${Ge.length} 个`}),b+=`
|
||
删除后,这些 API Key 将切换为共享池模式。`),b+=`
|
||
|
||
请再次确认是否继续。`,!await me("批量删除账户",b,"删除","取消"))return;let ue=0,be=0,xe=0;const je=[];for(const fe of a){const Ge=await Lt(fe);Ge.success?(ue+=1,xe+=((yt=Ge.data)==null?void 0:yt.unboundKeys)||0):(be+=1,je.push({name:fe.name||fe.email||fe.accountName||fe.id,message:Ge.message||"删除失败"}))}if(ue>0){let fe=`成功删除 ${ue} 个账户`;xe>0&&(fe+=`,${xe} 个 API Key 已切换为共享池模式`),_(fe,be>0?"warning":"success"),R.value=[],I.value=!1,O.value=!1,we.value=!1,P.value=!1,await Ve(!0)}if(be>0){const fe=je.map(Ge=>`${Ge.name}: ${Ge.message}`).join(`
|
||
`);_(`有 ${be} 个账户删除失败:
|
||
${fe}`,ue>0?"warning":"error")}De()},ns=async r=>{if(r.isResetting)return;let a=!1;if(window.showConfirm?a=await window.showConfirm("重置账户状态","确定要重置此账户的所有异常状态吗?这将清除限流状态、401错误计数等所有异常标记。","确定重置","取消"):a=confirm("确定要重置此账户的所有异常状态吗?"),!!a)try{r.isResetting=!0;let b="";if(r.platform==="openai")b=`/admin/openai-accounts/${r.id}/reset-status`;else if(r.platform==="openai-responses")b=`/admin/openai-responses-accounts/${r.id}/reset-status`;else if(r.platform==="claude")b=`/admin/claude-accounts/${r.id}/reset-status`;else if(r.platform==="claude-console")b=`/admin/claude-console-accounts/${r.id}/reset-status`;else if(r.platform==="ccr")b=`/admin/ccr-accounts/${r.id}/reset-status`;else if(r.platform==="droid")b=`/admin/droid-accounts/${r.id}/reset-status`;else if(r.platform==="gemini-api")b=`/admin/gemini-api-accounts/${r.id}/reset-status`;else if(r.platform==="gemini")b=`/admin/gemini-accounts/${r.id}/reset-status`;else{_("不支持的账户类型","error"),r.isResetting=!1;return}const l=await z.post(b);l.success?(_("账户状态已重置","success"),Ve(!0)):_(l.message||"状态重置失败","error")}catch{_("状态重置失败","error")}finally{r.isResetting=!1}},Nt=async r=>{if(!r.isTogglingSchedulable)try{r.isTogglingSchedulable=!0;let a;if(r.platform==="claude")a=`/admin/claude-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="claude-console")a=`/admin/claude-console-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="bedrock")a=`/admin/bedrock-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini")a=`/admin/gemini-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai")a=`/admin/openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="azure_openai")a=`/admin/azure-openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai-responses")a=`/admin/openai-responses-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="ccr")a=`/admin/ccr-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="droid")a=`/admin/droid-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini-api")a=`/admin/gemini-api-accounts/${r.id}/toggle-schedulable`;else{_("该账户类型暂不支持调度控制","warning");return}const b=await z.put(a);b.success?(r.schedulable=b.schedulable,_(b.schedulable?"已启用调度":"已禁用调度","success")):_(b.message||"操作失败","error")}catch{_("切换调度状态失败","error")}finally{r.isTogglingSchedulable=!1}},qt=()=>{Ye.value=!1,_("账户创建成功","success"),kt(),Ve()},Gt=()=>{Ne.value=!1,_("账户更新成功","success"),we.value=!1,Ve()},is=r=>!r.lastRefreshAt||r.lastRefreshAt===""?"Setup":"OAuth",ds=()=>"OAuth",us=()=>"OAuth",Ft=r=>{if(!r||typeof r!="object")return"OAuth";const a=r.isApiKeyMode??r.is_api_key_mode??r.apiKeyMode??r.api_key_mode;if(a===!0||a==="true"||a===1||a==="1")return"API Key";const b=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 b=="string"&&b.trim().toLowerCase().replace(/[\s_-]/g,"")==="apikey"?"API Key":"OAuth"},ps=r=>Ft(r)==="API Key",Wt=r=>{if(!r||typeof r!="object")return 0;if(Array.isArray(r.apiKeys))return r.apiKeys.filter(b=>b.status!=="error").length;if(typeof r.apiKeys=="string"&&r.apiKeys.trim())try{const b=JSON.parse(r.apiKeys);if(Array.isArray(b))return b.filter(l=>l.status!=="error").length}catch{}const a=[r.apiKeyCount,r.api_key_count,r.apiKeysCount,r.api_keys_count];for(const b of a){const l=Number(b);if(Number.isFinite(l)&&l>=0)return l}return 0},gs=r=>{const a=Wt(r),b="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 a>0?[b,"border-cyan-200 bg-cyan-50/90 text-cyan-700 dark:border-cyan-500/40 dark:bg-cyan-900/40 dark:text-cyan-200"]:[b,"border-rose-200 bg-rose-50/90 text-rose-600 dark:border-rose-500/40 dark:bg-rose-900/40 dark:text-rose-200"]},ms=r=>{if(r.subscriptionInfo)try{const a=typeof r.subscriptionInfo=="string"?JSON.parse(r.subscriptionInfo):r.subscriptionInfo;return a.hasClaudeMax===!0?"Claude Max":a.hasClaudePro===!0?"Claude Pro":"Claude Free"}catch{return"Claude"}return"Claude"},Qt=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:"手动停止调度"},ys=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?"已暂停":"正常",cs=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",xs=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",fs=r=>et(r),Bt=(r,a=null)=>{if(!r)return"bg-gradient-to-r from-blue-500 to-indigo-600";if(a&&(a.isRateLimited||a.status==="rate_limited"||a.rateLimitStatus&&a.rateLimitStatus.isRateLimited||a.rateLimitStatus==="limited"))return"bg-gradient-to-r from-red-500 to-red-600";const l=String(r).toLowerCase();return l==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":l==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-600"},Ut=r=>r.authType==="oauth",pt=r=>!r||r.utilization===null||r.utilization===void 0?"-":`${r.utilization}%`,gt=r=>!r||r.utilization===null||r.utilization===void 0?"0%":`${r.utilization}%`,mt=r=>{const a=(r==null?void 0:r.utilization)||0;return a<60?"bg-gradient-to-r from-blue-500 to-indigo-600":a<90?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-red-500 to-red-600"},d=r=>{if(!r||!r.remainingSeconds)return"-";const a=r.remainingSeconds,b=Math.floor(a/86400),l=Math.floor(a%86400/3600),q=Math.floor(a%3600/60);return b>0?l>0?`${b}天${l}小时`:`${b}天`:l>0?q>0?`${l}小时${q}分钟`:`${l}小时`:q>0?`${q}分钟`:`${Math.floor(a%60)}秒`},t=r=>{if(!r)return null;const a=typeof r.usedPercent=="number"&&!Number.isNaN(r.usedPercent)?r.usedPercent:null,b=typeof r.resetAfterSeconds=="number"&&!Number.isNaN(r.resetAfterSeconds)?r.resetAfterSeconds:null,l=typeof r.remainingSeconds=="number"?r.remainingSeconds:null,q=r.resetAt?Date.parse(r.resetAt):null;return b!==null&&(l!==null&&l<=0||q!==null&&!Number.isNaN(q)&&Date.now()>=q)?0:a===null?null:Math.max(0,Math.min(100,a))},Z=r=>{const a=t(r);return a===null?"bg-gradient-to-r from-gray-300 to-gray-400":a>=90?"bg-gradient-to-r from-red-500 to-red-600":a>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},re=r=>{const a=t(r);return a===null?"--":`${a.toFixed(1)}%`},n=r=>{const a=t(r);return a===null?"0%":`${a}%`},de=r=>r==="secondary"?"周限":"5h",ne=r=>{if(!r)return"--";let a=r.remainingSeconds;if(a==null&&(a=r.resetAfterSeconds),a==null||Number.isNaN(Number(a)))return"--";a=Math.max(0,Math.floor(Number(a)));const b=Math.floor(a/86400),l=Math.floor(a%86400/3600),q=Math.floor(a%3600/60),ue=a%60;return b>0?l>0?`${b}天${l}小时`:`${b}天`:l>0?q>0?`${l}小时${q}分钟`:`${l}小时`:q>0?`${q}分钟`:`${ue}秒`},Oe=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),Le=r=>{var l,q;const a=Number(((q=(l=r==null?void 0:r.usage)==null?void 0:l.daily)==null?void 0:q.cost)||0),b=Number((r==null?void 0:r.dailyQuota)||0);return!b||b<=0?0:a/b*100},Ce=r=>r>=90?"bg-red-500":r>=70?"bg-yellow-500":"bg-green-500",m=r=>{const a=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!a||a<=0)return 0;const b=Number((r==null?void 0:r.activeTaskCount)||0);return Math.min(100,b/a*100)},oe=r=>r>=100?"bg-red-500":r>=80?"bg-yellow-500":"bg-green-500",Y=r=>{const a=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!a||a<=0)return"text-gray-500 dark:text-gray-400";const b=Number((r==null?void 0:r.activeTaskCount)||0);return b>=a?"text-red-600 dark:text-red-400":b>=a*.8?"text-yellow-600 dark:text-yellow-400":"text-gray-700 dark:text-gray-200"},te=r=>{var l,q;const a=Number(((q=(l=r==null?void 0:r.usage)==null?void 0:l.daily)==null?void 0:q.cost)||0),b=Number((r==null?void 0:r.dailyQuota)||0);return!b||b<=0?"0.00":Math.max(0,b-a).toFixed(2)},Ie=r=>!r.usage||!r.usage.daily?"0.0000":r.usage.daily.cost!==void 0?Oe(r.usage.daily.cost):"0.0000";pe(Q,()=>{se.value=1,De()}),pe(j,r=>{localStorage.setItem(Is,r.toString()),De()}),pe(()=>Je.value.length,()=>{se.value>x.value&&(se.value=x.value||1),De()}),pe(w,r=>{const a={name:"name",dailyTokens:"dailyTokens",dailyRequests:"dailyRequests",totalTokens:"totalTokens",lastUsed:"lastUsed"};a[r]&&Xe(a[r])}),pe(se,()=>{De()}),pe(Qe,()=>{De()}),pe(E,()=>{vt()});const $e=r=>r?new Date(r).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit"}):"",ht=r=>r?new Date(r)<new Date:!1,wt=r=>{if(!r)return!1;const a=new Date,l=(new Date(r)-a)/(1e3*60*60*24);return l>0&&l<=7},bs=r=>{L.value=r},$s=()=>{L.value=null},Ds=async({accountId:r,expiresAt:a})=>{try{const b=E.value.find(ue=>ue.id===r);if(!b){_("未找到账户","error");return}let l="";switch(b.platform){case"claude":case"claude-oauth":l=`/admin/claude-accounts/${r}`;break;case"gemini":l=`/admin/gemini-accounts/${r}`;break;case"claude-console":l=`/admin/claude-console-accounts/${r}`;break;case"bedrock":l=`/admin/bedrock-accounts/${r}`;break;case"ccr":l=`/admin/ccr-accounts/${r}`;break;case"openai":l=`/admin/openai-accounts/${r}`;break;case"droid":l=`/admin/droid-accounts/${r}`;break;case"azure_openai":l=`/admin/azure-openai-accounts/${r}`;break;case"openai-responses":l=`/admin/openai-responses-accounts/${r}`;break;default:_(`不支持的平台类型: ${b.platform}`,"error");return}const q=await z.put(l,{expiresAt:a||null});q.success?(_("账户到期时间已更新","success"),b.expiresAt=a||null,$s()):(_(q.message||"更新失败","error"),A.value&&A.value.resetSaving())}catch(b){console.error("更新账户过期时间失败:",b),_("更新失败","error"),A.value&&A.value.resetSaving()}};return Yt(()=>{Ve(!0)}),(r,a)=>{const b=Ss;return o(),i("div",Sg,[e("div",_g,[e("div",jg,[a[36]||(a[36]=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",zg,[e("div",Vg,[e("div",Rg,[a[25]||(a[25]=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)),tt(hs,{modelValue:w.value,"onUpdate:modelValue":a[0]||(a[0]=l=>w.value=l),icon:"fa-sort-amount-down","icon-color":"text-indigo-500",options:st.value,placeholder:"选择排序",onChange:a[1]||(a[1]=l=>Xe())},null,8,["modelValue","options"])]),e("div",Og,[a[26]||(a[26]=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)),tt(hs,{modelValue:H.value,"onUpdate:modelValue":a[2]||(a[2]=l=>H.value=l),icon:"fa-server","icon-color":"text-blue-500",options:Ct.value,placeholder:"选择平台",onChange:ts},null,8,["modelValue","options"])]),e("div",Lg,[a[27]||(a[27]=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)),tt(hs,{modelValue:F.value,"onUpdate:modelValue":a[3]||(a[3]=l=>F.value=l),icon:"fa-layer-group","icon-color":"text-purple-500",options:T.value,placeholder:"选择分组",onChange:ss},null,8,["modelValue","options"])]),e("div",Eg,[a[30]||(a[30]=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",Ng,[v(e("input",{"onUpdate:modelValue":a[4]||(a[4]=l=>Q.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),[[S,Q.value]]),a[29]||(a[29]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),Q.value?(o(),i("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:Pe},a[28]||(a[28]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):f("",!0)])])]),e("div",qg,[e("div",Gg,[tt(b,{content:"刷新数据 (Ctrl/⌘+点击强制刷新所有缓存)",effect:"dark",placement:"bottom"},{default:Ht(()=>[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:C.value,onClick:[a[5]||(a[5]=At(l=>Ve(!0),["ctrl","exact"])),a[6]||(a[6]=At(l=>Ve(!1),["exact"])),a[7]||(a[7]=At(l=>Ve(!0),["meta","exact"]))]},[a[31]||(a[31]=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:K(["fas relative text-green-500",C.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),a[32]||(a[32]=e("span",{class:"relative"},"刷新",-1))],8,Fg)]),_:1})]),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:ut},[e("i",{class:K(ke.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,p(ke.value?"取消选择":"选择"),1)]),R.value.length>0?(o(),i("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:os},[a[33]||(a[33]=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)),a[34]||(a[34]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",Wg,"删除选中 ("+p(R.value.length)+")",1)])):f("",!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:At(rs,["stop"])},a[35]||(a[35]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"添加账户",-1)]))])])]),C.value?(o(),i("div",Qg,a[37]||(a[37]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载账户...",-1)]))):Je.value.length===0?(o(),i("div",Bg,a[38]||(a[38]=[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(),i("div",Hg,[e("table",Jg,[e("thead",Yg,[e("tr",null,[nt.value?(o(),i("th",Zg,[e("div",Xg,[v(e("input",{"onUpdate:modelValue":a[8]||(a[8]=l=>I.value=l),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:O.value,type:"checkbox",onChange:dt},null,40,em),[[Me,I.value]])])])):f("",!0),e("th",{class:"w-[22%] 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",onClick:a[9]||(a[9]=l=>Xe("name"))},[a[39]||(a[39]=$(" 名称 ",-1)),k.value==="name"?(o(),i("i",{key:0,class:K(["fas",V.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),i("i",tm))]),e("th",{class:"w-[15%] min-w-[120px] 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:a[10]||(a[10]=l=>Xe("platform"))},[a[40]||(a[40]=$(" 平台/类型 ",-1)),k.value==="platform"?(o(),i("i",{key:0,class:K(["fas",V.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),i("i",sm))]),e("th",{class:"w-[12%] 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:a[11]||(a[11]=l=>Xe("expiresAt"))},[a[41]||(a[41]=$(" 到期时间 ",-1)),k.value==="expiresAt"?(o(),i("i",{key:0,class:K(["fas",V.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),i("i",am))]),e("th",{class:"w-[12%] min-w-[100px] 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:a[12]||(a[12]=l=>Xe("status"))},[a[42]||(a[42]=$(" 状态 ",-1)),k.value==="status"?(o(),i("i",{key:0,class:K(["fas",V.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),i("i",rm))]),e("th",{class:"w-[8%] 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:a[13]||(a[13]=l=>Xe("priority"))},[a[43]||(a[43]=$(" 优先级 ",-1)),k.value==="priority"?(o(),i("i",{key:0,class:K(["fas",V.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),i("i",lm))]),a[47]||(a[47]=e("th",{class:"w-[10%] min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 代理 ",-1)),a[48]||(a[48]=e("th",{class:"w-[10%] min-w-[90px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 今日使用 ",-1)),e("th",om,[e("div",nm,[a[46]||(a[46]=e("span",null,"会话窗口",-1)),tt(b,{placement:"top"},{content:Ht(()=>a[44]||(a[44]=[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"},"Opus 窗口:7天Opus模型专用限额。")]),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:Ht(()=>[a[45]||(a[45]=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,__:[45]})])]),a[49]||(a[49]=e("th",{class:"w-[8%] min-w-[80px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),a[50]||(a[50]=e("th",{class:"w-[15%] min-w-[180px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",im,[(o(!0),i(ve,null,Se(Qe.value,l=>{var q,ue,be;return o(),i("tr",{key:l.id,class:"table-row"},[nt.value?(o(),i("td",dm,[e("div",um,[v(e("input",{"onUpdate:modelValue":a[14]||(a[14]=xe=>R.value=xe),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:De},null,40,pm),[[Me,R.value]])])])):f("",!0),e("td",gm,[e("div",mm,[a[55]||(a[55]=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",ym,[e("div",cm,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:l.name},p(l.name),9,xm),l.accountType==="dedicated"?(o(),i("span",fm,a[51]||(a[51]=[e("i",{class:"fas fa-lock mr-1"},null,-1),$("专属 ",-1)]))):l.accountType==="group"?(o(),i("span",bm,a[52]||(a[52]=[e("i",{class:"fas fa-layer-group mr-1"},null,-1),$("分组调度 ",-1)]))):(o(),i("span",vm,a[53]||(a[53]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),$("共享 ",-1)])))]),l.groupInfos&&l.groupInfos.length>0?(o(),i("div",km,[(o(!0),i(ve,null,Se(l.groupInfos,xe=>(o(),i("span",{key:xe.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:`所属分组: ${xe.name}`},[a[54]||(a[54]=e("i",{class:"fas fa-folder mr-1"},null,-1)),$(p(xe.name),1)],8,hm))),128))])):f("",!0),e("div",{class:"truncate text-xs text-gray-500 dark:text-gray-400",title:l.id},p(l.id),9,wm)])])]),e("td",$m,[e("div",Am,[l.platform==="gemini"?(o(),i("div",Cm,[a[56]||(a[56]=e("i",{class:"fas fa-robot text-xs text-yellow-700"},null,-1)),a[57]||(a[57]=e("span",{class:"text-xs font-semibold text-yellow-800"},"Gemini",-1)),a[58]||(a[58]=e("span",{class:"mx-1 h-4 w-px bg-yellow-300"},null,-1)),e("span",Um,p(ds()),1)])):l.platform==="claude-console"?(o(),i("div",Im,a[59]||(a[59]=[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(),i("div",Tm,a[60]||(a[60]=[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(),i("div",Km,[a[61]||(a[61]=e("div",{class:"fa-openai"},null,-1)),a[62]||(a[62]=e("span",{class:"text-xs font-semibold text-gray-950"},"OpenAi",-1)),a[63]||(a[63]=e("span",{class:"mx-1 h-4 w-px bg-gray-400"},null,-1)),e("span",Pm,p(us()),1)])):l.platform==="azure_openai"?(o(),i("div",Mm,a[64]||(a[64]=[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(),i("div",Dm,a[65]||(a[65]=[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-Responses",-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(),i("div",Sm,[a[66]||(a[66]=e("i",{class:"fas fa-brain text-xs text-indigo-700"},null,-1)),e("span",_m,p(ms(l)),1),a[67]||(a[67]=e("span",{class:"mx-1 h-4 w-px bg-indigo-300"},null,-1)),e("span",jm,p(is(l)),1)])):l.platform==="ccr"?(o(),i("div",zm,a[68]||(a[68]=[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(),i("div",Vm,[a[70]||(a[70]=e("i",{class:"fas fa-robot text-xs text-cyan-700 dark:text-cyan-400"},null,-1)),a[71]||(a[71]=e("span",{class:"text-xs font-semibold text-cyan-800 dark:text-cyan-300"},"Droid",-1)),a[72]||(a[72]=e("span",{class:"mx-1 h-4 w-px bg-cyan-300 dark:bg-cyan-600"},null,-1)),e("span",Rm,p(Ft(l)),1),ps(l)?(o(),i("span",{key:0,class:K(gs(l))},[a[69]||(a[69]=e("i",{class:"fas fa-key text-[9px]"},null,-1)),e("span",null,"x"+p(Wt(l)),1)],2)):f("",!0)])):l.platform==="gemini-api"?(o(),i("div",Om,a[73]||(a[73]=[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(),i("div",Lm,a[74]||(a[74]=[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",Em,[e("div",Nm,[l.expiresAt?(o(),i("span",qm,[ht(l.expiresAt)?(o(),i("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:At(xe=>bs(l),["stop"])},a[75]||(a[75]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),$(" 已过期 ",-1)]),8,Gm)):wt(l.expiresAt)?(o(),i("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:At(xe=>bs(l),["stop"])},[a[76]||(a[76]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),$(" "+p($e(l.expiresAt)),1)],8,Fm)):(o(),i("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:At(xe=>bs(l),["stop"])},p($e(l.expiresAt)),9,Wm))])):(o(),i("span",{key:1,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:At(xe=>bs(l),["stop"])},a[77]||(a[77]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),$(" 永不过期 ",-1)]),8,Qm))])]),e("td",Bm,[e("div",Hm,[e("span",{class:K(["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:K(["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),$(" "+p(l.status==="blocked"?"已封锁":l.status==="unauthorized"?"异常":l.status==="temp_error"?"临时异常":l.isActive?"正常":"异常"),1)],2),l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"?(o(),i("span",Jm,[a[78]||(a[78]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),a[79]||(a[79]=$(" 限流中 ",-1)),l.rateLimitStatus&&typeof l.rateLimitStatus=="object"&&l.rateLimitStatus.minutesRemaining>0?(o(),i("span",Ym,"("+p(as(l.rateLimitStatus.minutesRemaining))+")",1)):f("",!0)])):f("",!0),l.schedulable===!1?(o(),i("span",Zm,[a[81]||(a[81]=e("i",{class:"fas fa-pause-circle mr-1"},null,-1)),a[82]||(a[82]=$(" 不可调度 ",-1)),Qt(l)?(o(),Fe(b,{key:0,content:Qt(l),effect:"dark",placement:"top"},{default:Ht(()=>a[80]||(a[80]=[e("i",{class:"fas fa-question-circle ml-1 cursor-help text-gray-500"},null,-1)])),_:2,__:[80]},1032,["content"])):f("",!0)])):f("",!0),l.status==="blocked"&&l.errorMessage?(o(),i("span",{key:2,class:"mt-1 max-w-xs truncate text-xs text-gray-500 dark:text-gray-400",title:l.errorMessage},p(l.errorMessage),9,Xm)):f("",!0),l.accountType==="dedicated"?(o(),i("span",ey," 绑定: "+p(l.boundApiKeysCount||0)+" 个API Key ",1)):f("",!0)])]),e("td",ty,[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(),i("div",sy,[e("div",ay,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-green-500 to-blue-600 transition-all duration-300",style:Re({width:101-(l.priority||50)+"%"})},null,4)]),e("span",ry,p(l.priority||50),1)])):(o(),i("div",ly,a[83]||(a[83]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",oy,[Pt(l.proxy)?(o(),i("div",{key:0,class:"break-all rounded bg-blue-50 px-2 py-1 font-mono text-xs",title:Pt(l.proxy)},p(Pt(l.proxy)),9,ny)):(o(),i("div",iy,"无代理"))]),e("td",dy,[l.usage&&l.usage.daily?(o(),i("div",uy,[e("div",py,[a[84]||(a[84]=e("div",{class:"h-2 w-2 rounded-full bg-blue-500"},null,-1)),e("span",gy,p(l.usage.daily.requests||0)+" 次",1)]),e("div",my,[a[85]||(a[85]=e("div",{class:"h-2 w-2 rounded-full bg-purple-500"},null,-1)),e("span",yy,p(ot(l.usage.daily.allTokens||0))+"M",1)]),e("div",cy,[a[86]||(a[86]=e("div",{class:"h-2 w-2 rounded-full bg-green-500"},null,-1)),e("span",xy,"$"+p(Ie(l)),1)]),l.usage.averages&&l.usage.averages.rpm>0?(o(),i("div",fy," 平均 "+p(l.usage.averages.rpm.toFixed(2))+" RPM ",1)):f("",!0)])):(o(),i("div",by,"暂无数据"))]),e("td",vy,[l.platform==="claude"?(o(),i("div",ky,[Ut(l)&&l.claudeUsage?(o(),i("div",hy,[e("div",wy,[e("div",$y,[a[87]||(a[87]=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",Ay,[e("div",Cy,[e("div",Uy,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",mt(l.claudeUsage.fiveHour)]),style:Re({width:gt(l.claudeUsage.fiveHour)})},null,6)]),e("span",Iy,p(pt(l.claudeUsage.fiveHour)),1)])])]),e("div",Ty," 重置剩余 "+p(d(l.claudeUsage.fiveHour)),1)]),e("div",Ky,[e("div",Py,[a[88]||(a[88]=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",My,[e("div",Dy,[e("div",Sy,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",mt(l.claudeUsage.sevenDay)]),style:Re({width:gt(l.claudeUsage.sevenDay)})},null,6)]),e("span",_y,p(pt(l.claudeUsage.sevenDay)),1)])])]),e("div",jy," 重置剩余 "+p(d(l.claudeUsage.sevenDay)),1)]),e("div",zy,[e("div",Vy,[a[89]||(a[89]=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",Ry,[e("div",Oy,[e("div",Ly,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",mt(l.claudeUsage.sevenDayOpus)]),style:Re({width:gt(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",Ey,p(pt(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",Ny," 重置剩余 "+p(d(l.claudeUsage.sevenDayOpus)),1)])])):!Ut(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),i("div",qy,[l.usage&&l.usage.sessionWindow?(o(),i("div",Gy,[e("div",Fy,[a[90]||(a[90]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("span",Wy,p(ot(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",Qy,[a[91]||(a[91]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("span",By," $"+p(Oe(l.usage.sessionWindow.totalCost)),1)])])):f("",!0),e("div",Hy,[e("div",Jy,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",Bt(l.sessionWindow.sessionWindowStatus,l)]),style:Re({width:l.sessionWindow.progress+"%"})},null,6)]),e("span",Yy,p(l.sessionWindow.progress)+"% ",1)]),e("div",Zy,[e("div",null,p(jt(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),i("div",Xy," 剩余 "+p(zt(l.sessionWindow.remainingTime)),1)):f("",!0)])])):(o(),i("div",ec,"暂无统计"))])):l.platform==="claude-console"?(o(),i("div",tc,[e("div",null,[Number(l.dailyQuota)>0?(o(),i(ve,{key:0},[e("div",sc,[a[92]||(a[92]=e("span",{class:"text-gray-600 dark:text-gray-300"},"额度进度",-1)),e("span",ac,p(Le(l).toFixed(1))+"% ",1)]),e("div",rc,[e("div",lc,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",Ce(Le(l))]),style:Re({width:Math.min(100,Le(l))+"%"})},null,6)]),e("span",oc," $"+p(Oe(((ue=(q=l.usage)==null?void 0:q.daily)==null?void 0:ue.cost)||0))+" / $"+p(Number(l.dailyQuota).toFixed(2)),1)]),e("div",nc,[$(" 剩余 $"+p(te(l))+" ",1),e("span",ic,"重置 "+p(l.quotaResetTime||"00:00"),1)])],64)):(o(),i("div",dc,a[93]||(a[93]=[e("i",{class:"fas fa-minus"},null,-1)])))]),e("div",uc,[e("div",pc,[a[94]||(a[94]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发状态",-1)),Number(l.maxConcurrentTasks||0)>0?(o(),i("span",gc,p(m(l).toFixed(0))+"% ",1)):f("",!0)]),Number(l.maxConcurrentTasks||0)>0?(o(),i("div",mc,[e("div",yc,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",oe(m(l))]),style:Re({width:Math.min(100,m(l))+"%"})},null,6)]),e("span",{class:K(["min-w-[48px] text-xs font-medium",Y(l)])},p(Number(l.activeTaskCount||0))+" / "+p(Number(l.maxConcurrentTasks||0)),3)])):(o(),i("div",cc,a[95]||(a[95]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),$("并发无限制 ",-1)])))])])):l.platform==="openai"?(o(),i("div",xc,[l.codexUsage?(o(),i("div",fc,[e("div",bc,[e("div",vc,[e("span",kc,p(de("primary")),1),e("div",hc,[e("div",wc,[e("div",$c,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",Z(l.codexUsage.primary)]),style:Re({width:n(l.codexUsage.primary)})},null,6)]),e("span",Ac,p(re(l.codexUsage.primary)),1)])])]),e("div",Cc," 重置剩余 "+p(ne(l.codexUsage.primary)),1)]),e("div",Uc,[e("div",Ic,[e("span",Tc,p(de("secondary")),1),e("div",Kc,[e("div",Pc,[e("div",Mc,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",Z(l.codexUsage.secondary)]),style:Re({width:n(l.codexUsage.secondary)})},null,6)]),e("span",Dc,p(re(l.codexUsage.secondary)),1)])])]),e("div",Sc," 重置剩余 "+p(ne(l.codexUsage.secondary)),1)])])):(o(),i("div",_c,a[96]||(a[96]=[e("span",{class:"text-xs"},"N/A",-1)])))])):(o(),i("div",jc,a[97]||(a[97]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",zc,p(et(l.lastUsedAt)),1),e("td",Vc,[e("div",Rc,[(l.platform==="claude"||l.platform==="claude-console"||l.platform==="openai"||l.platform==="openai-responses"||l.platform==="gemini"||l.platform==="gemini-api"||l.platform==="ccr")&&(l.status==="unauthorized"||l.status!=="active"||(be=l.rateLimitStatus)!=null&&be.isRateLimited||l.rateLimitStatus==="limited"||!l.isActive)?(o(),i("button",{key:0,class:K(["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:xe=>ns(l)},[e("i",{class:K(["fas fa-redo",l.isResetting?"animate-spin":""])},null,2),a[98]||(a[98]=e("span",{class:"ml-1"},"重置状态",-1))],10,Oc)):f("",!0),e("button",{class:K(["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:xe=>Nt(l)},[e("i",{class:K(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",Ec,p(l.schedulable?"调度":"停用"),1)],10,Lc),Ze(l)?(o(),i("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:xe=>ft(l)},a[99]||(a[99]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,Nc)):f("",!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:xe=>Rt(l)},a[100]||(a[100]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,qc),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:xe=>Et(l)},a[101]||(a[101]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,Gc)])])])}),128))])])])),!C.value&&Je.value.length>0?(o(),i("div",Fc,[(o(!0),i(ve,null,Se(Qe.value,l=>{var q,ue,be,xe;return o(),i("div",{key:l.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",Wc,[e("div",Qc,[nt.value?v((o(),i("input",{key:0,"onUpdate:modelValue":a[15]||(a[15]=je=>R.value=je),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:De},null,40,Bc)),[[Me,R.value]]):f("",!0),e("div",{class:K(["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:K(["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",Hc,p(l.name||l.email),1),e("div",Jc,[e("span",Yc,p(l.platform),1),a[102]||(a[102]=e("span",{class:"text-xs text-gray-400"},"|",-1)),e("span",Zc,p(l.type),1)])])]),e("span",{class:K(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",cs(l)])},[e("div",{class:K(["mr-1.5 h-1.5 w-1.5 rounded-full",xs(l)])},null,2),$(" "+p(ys(l)),1)],2)]),e("div",Xc,[e("div",null,[a[106]||(a[106]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"今日使用",-1)),e("div",ex,[e("div",tx,[a[103]||(a[103]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-blue-500"},null,-1)),e("p",sx,p(((ue=(q=l.usage)==null?void 0:q.daily)==null?void 0:ue.requests)||0)+" 次 ",1)]),e("div",ax,[a[104]||(a[104]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",rx,p(ot(((xe=(be=l.usage)==null?void 0:be.daily)==null?void 0:xe.allTokens)||0))+"M ",1)]),e("div",lx,[a[105]||(a[105]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",ox," $"+p(Ie(l)),1)])])]),e("div",null,[a[109]||(a[109]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"会话窗口",-1)),l.usage&&l.usage.sessionWindow?(o(),i("div",nx,[e("div",ix,[a[107]||(a[107]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",dx,p(ot(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",ux,[a[108]||(a[108]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",px," $"+p(Oe(l.usage.sessionWindow.totalCost)),1)])])):(o(),i("div",gx,"-"))])]),e("div",mx,[l.platform==="claude"?(o(),i("div",yx,[Ut(l)&&l.claudeUsage?(o(),i("div",cx,[e("div",xx,[e("div",fx,[a[110]||(a[110]=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",bx,[e("div",vx,[e("div",kx,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",mt(l.claudeUsage.fiveHour)]),style:Re({width:gt(l.claudeUsage.fiveHour)})},null,6)]),e("span",hx,p(pt(l.claudeUsage.fiveHour)),1)])])]),e("div",wx," 重置剩余 "+p(d(l.claudeUsage.fiveHour)),1)]),e("div",$x,[e("div",Ax,[a[111]||(a[111]=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",Cx,[e("div",Ux,[e("div",Ix,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",mt(l.claudeUsage.sevenDay)]),style:Re({width:gt(l.claudeUsage.sevenDay)})},null,6)]),e("span",Tx,p(pt(l.claudeUsage.sevenDay)),1)])])]),e("div",Kx," 重置剩余 "+p(d(l.claudeUsage.sevenDay)),1)]),e("div",Px,[e("div",Mx,[a[112]||(a[112]=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",Dx,[e("div",Sx,[e("div",_x,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",mt(l.claudeUsage.sevenDayOpus)]),style:Re({width:gt(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",jx,p(pt(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",zx," 重置剩余 "+p(d(l.claudeUsage.sevenDayOpus)),1)])])):!Ut(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),i("div",Vx,[e("div",Rx,[e("div",Ox,[a[114]||(a[114]=e("span",{class:"font-medium text-gray-600 dark:text-gray-300"},"会话窗口",-1)),tt(b,{content:"会话窗口进度不代表使用量,仅表示距离下一个5小时窗口的剩余时间",placement:"top"},{default:Ht(()=>a[113]||(a[113]=[e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600"},null,-1)])),_:1,__:[113]})]),e("span",Lx,p(l.sessionWindow.progress)+"% ",1)]),e("div",Ex,[e("div",{class:K(["h-full transition-all duration-300",Bt(l.sessionWindow.sessionWindowStatus,l)]),style:Re({width:l.sessionWindow.progress+"%"})},null,6)]),e("div",Nx,[e("span",qx,p(jt(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),i("span",Gx," 剩余 "+p(zt(l.sessionWindow.remainingTime)),1)):(o(),i("span",Fx," 已结束 "))])])):(o(),i("div",Wx,"暂无统计"))])):l.platform==="openai"?(o(),i("div",Qx,[l.codexUsage?(o(),i("div",Bx,[e("div",Hx,[e("div",Jx,[e("span",Yx,p(de("primary")),1),e("div",Zx,[e("div",Xx,[e("div",ef,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",Z(l.codexUsage.primary)]),style:Re({width:n(l.codexUsage.primary)})},null,6)]),e("span",tf,p(re(l.codexUsage.primary)),1)])])]),e("div",sf," 重置剩余 "+p(ne(l.codexUsage.primary)),1)]),e("div",af,[e("div",rf,[e("span",lf,p(de("secondary")),1),e("div",of,[e("div",nf,[e("div",df,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",Z(l.codexUsage.secondary)]),style:Re({width:n(l.codexUsage.secondary)})},null,6)]),e("span",uf,p(re(l.codexUsage.secondary)),1)])])]),e("div",pf," 重置剩余 "+p(ne(l.codexUsage.secondary)),1)])])):f("",!0),l.codexUsage?f("",!0):(o(),i("div",gf,"暂无统计"))])):f("",!0),e("div",mf,[a[115]||(a[115]=e("span",{class:"text-gray-500 dark:text-gray-400"},"最后使用",-1)),e("span",yf,p(l.lastUsedAt?fs(l.lastUsedAt):"从未使用"),1)]),l.proxyConfig&&l.proxyConfig.type!=="none"?(o(),i("div",cf,[a[116]||(a[116]=e("span",{class:"text-gray-500 dark:text-gray-400"},"代理",-1)),e("span",xf,p(l.proxyConfig.type.toUpperCase()),1)])):f("",!0),e("div",ff,[a[117]||(a[117]=e("span",{class:"text-gray-500 dark:text-gray-400"},"优先级",-1)),e("span",bf,p(l.priority||50),1)])]),e("div",vf,[e("button",{class:K(["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:je=>Nt(l)},[e("i",{class:K(["fas",l.schedulable?"fa-pause":"fa-play"])},null,2),$(" "+p(l.schedulable?"暂停":"启用"),1)],10,kf),Ze(l)?(o(),i("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:je=>ft(l)},a[118]||(a[118]=[e("i",{class:"fas fa-chart-line"},null,-1),$(" 详情 ",-1)]),8,hf)):f("",!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:je=>Rt(l)},a[119]||(a[119]=[e("i",{class:"fas fa-edit mr-1"},null,-1),$(" 编辑 ",-1)]),8,wf),e("button",{class:"rounded-lg bg-red-50 px-3 py-2 text-xs text-red-600 transition-colors hover:bg-red-100",onClick:je=>Et(l)},a[120]||(a[120]=[e("i",{class:"fas fa-trash"},null,-1)]),8,$f)])])}),128))])):f("",!0)]),!C.value&&Je.value.length>0?(o(),i("div",Af,[e("div",Cf,[e("span",Uf," 共 "+p(Je.value.length)+" 条记录 ",1),e("div",If,[a[121]||(a[121]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),v(e("select",{"onUpdate:modelValue":a[16]||(a[16]=l=>j.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:a[17]||(a[17]=l=>se.value=1)},[(o(),i(ve,null,Se(y,l=>e("option",{key:l,value:l},p(l),9,Tf)),64))],544),[[ks,j.value]]),a[122]||(a[122]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",Kf,[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:se.value===1,onClick:a[18]||(a[18]=l=>se.value--)},a[123]||(a[123]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,Pf),e("div",Mf,[D.value?(o(),i("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:a[19]||(a[19]=l=>se.value=1)}," 1 ")):f("",!0),Tt.value?(o(),i("span",Df," ... ")):f("",!0),(o(!0),i(ve,null,Se(c.value,l=>(o(),i("button",{key:l,class:K(["rounded-md border px-3 py-1 text-xs font-medium transition-colors sm:text-sm",l===se.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:q=>se.value=l},p(l),11,Sf))),128)),lt.value?(o(),i("span",_f," ... ")):f("",!0),qe.value?(o(),i("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:a[20]||(a[20]=l=>se.value=x.value)},p(x.value),1)):f("",!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:se.value===x.value||x.value===0,onClick:a[21]||(a[21]=l=>se.value++)},a[124]||(a[124]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,jf)])])):f("",!0),Ye.value&&(!We.value||We.value!=="ccr")?(o(),Fe(Cs,{key:1,onClose:Vt,onPlatformChanged:a[22]||(a[22]=l=>We.value=l),onSuccess:qt})):Ye.value&&We.value==="ccr"?(o(),Fe(Us,{key:2,onClose:Vt,onSuccess:qt})):f("",!0),Ne.value&&at.value&&at.value.platform==="ccr"?(o(),Fe(Us,{key:3,account:at.value,onClose:a[23]||(a[23]=l=>Ne.value=!1),onSuccess:Gt},null,8,["account"])):Ne.value?(o(),Fe(Cs,{key:4,account:at.value,onClose:a[24]||(a[24]=l=>Ne.value=!1),onSuccess:Gt},null,8,["account"])):f("",!0),tt(Ks,{"cancel-text":Be(g).cancelText,"confirm-text":Be(g).confirmText,message:Be(g).message,show:Be(Ke),title:Be(g).title,onCancel:Be(G),onConfirm:Be(M)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),_e.value?(o(),Fe(dg,{key:5,account:u.value||{},"generated-at":s.value,history:J.value,loading:N.value,overview:Ae.value,show:_e.value,summary:ee.value,onClose:bt},null,8,["account","generated-at","history","loading","overview","show","summary"])):f("",!0),tt(Dg,{ref_key:"expiryEditModalRef",ref:A,account:L.value||{id:null,expiresAt:null,name:""},show:!!L.value,onClose:$s,onSave:Ds},null,8,["account","show"])])}}},Gf=Zt(zf,[["__scopeId","data-v-38844457"]]);export{Gf as default};
|