mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-23 00:53:33 +00:00
45 lines
378 KiB
JavaScript
45 lines
378 KiB
JavaScript
import{a as Bs}from"./element-plus-CqiD73Lu.js";import{r as $,aP as Hs,o as ye,V as zs,x as n,y as o,z as e,L as y,K as h,al as Ve,aT as Vt,O as x,aq as z,aa as Js,P as u,aV as Ds,aY as ps,C as I,c as ne,Z as Ys,an as Ie,Q as be,q as gs,I as Ye,ac as qe,a5 as Rt,R as st,B as Qe,u as at,aX as Zs,D as Rs,_ as Xs,J as us,Y as Kt}from"./vue-vendor-Bsazo-x0.js";import{c as O,s as j,_ as cs,a as ea,A as Ls}from"./index-B1JXFQJW.js";import{C as Gs}from"./ConfirmModal-Dg9ajIkX.js";import{C as ta}from"./chart-yFHxLHpB.js";import{C as Vs,_ as sa}from"./ActionDropdown-_QtKEMVf.js";import"./vendor-Dr8jvgFu.js";const Ss=$(!1),Es=$({title:"",message:"",confirmText:"继续",cancelText:"取消"}),jt=$(null);function Fs(){return{showConfirmModal:Ss,confirmOptions:Es,showConfirm:(Q,U,H="继续",V="取消")=>new Promise(K=>{Es.value={title:Q,message:U,confirmText:H,cancelText:V},jt.value=K,Ss.value=!0}),handleConfirm:()=>{Ss.value=!1,jt.value&&(jt.value(!0),jt.value=null)},handleCancel:()=>{Ss.value=!1,jt.value&&(jt.value(!1),jt.value=null)}}}const Qs=Hs("accounts",()=>{const J=$([]),Me=$([]),m=$([]),Q=$([]),U=$([]),H=$([]),V=$([]),K=$([]),f=$(!1),k=$(null),F=$(""),ee=$("asc"),ae=async()=>{f.value=!0,k.value=null;try{const v=await O.get("/admin/claude-accounts");if(v.success)J.value=v.data||[];else throw new Error(v.message||"获取Claude账户失败")}catch(v){throw k.value=v.message,v}finally{f.value=!1}},ge=async()=>{f.value=!0,k.value=null;try{const v=await O.get("/admin/claude-console-accounts");if(v.success)Me.value=v.data||[];else throw new Error(v.message||"获取Claude Console账户失败")}catch(v){throw k.value=v.message,v}finally{f.value=!1}},Z=async()=>{f.value=!0,k.value=null;try{const v=await O.get("/admin/bedrock-accounts");if(v.success)m.value=v.data||[];else throw new Error(v.message||"获取Bedrock账户失败")}catch(v){throw k.value=v.message,v}finally{f.value=!1}},q=async()=>{f.value=!0,k.value=null;try{const v=await O.get("/admin/gemini-accounts");if(v.success)Q.value=v.data||[];else throw new Error(v.message||"获取Gemini账户失败")}catch(v){throw k.value=v.message,v}finally{f.value=!1}},X=async()=>{f.value=!0,k.value=null;try{const v=await O.get("/admin/openai-accounts");if(v.success)U.value=v.data||[];else throw new Error(v.message||"获取OpenAI账户失败")}catch(v){throw k.value=v.message,v}finally{f.value=!1}},w=async()=>{f.value=!0,k.value=null;try{const v=await O.get("/admin/azure-openai-accounts");if(v.success)H.value=v.data||[];else throw new Error(v.message||"获取Azure OpenAI账户失败")}catch(v){throw k.value=v.message,v}finally{f.value=!1}},p=async()=>{f.value=!0,k.value=null;try{const v=await O.get("/admin/openai-responses-accounts");if(v.success)V.value=v.data||[];else throw new Error(v.message||"获取OpenAI-Responses账户失败")}catch(v){throw k.value=v.message,v}finally{f.value=!1}},P=async()=>{f.value=!0,k.value=null;try{const v=await O.get("/admin/droid-accounts");if(v.success)K.value=v.data||[];else throw new Error(v.message||"获取Droid账户失败")}catch(v){throw k.value=v.message,v}finally{f.value=!1}};return{claudeAccounts:J,claudeConsoleAccounts:Me,bedrockAccounts:m,geminiAccounts:Q,openaiAccounts:U,azureOpenaiAccounts:H,openaiResponsesAccounts:V,droidAccounts:K,loading:f,error:k,sortBy:F,sortOrder:ee,fetchClaudeAccounts:ae,fetchClaudeConsoleAccounts:ge,fetchBedrockAccounts:Z,fetchGeminiAccounts:q,fetchOpenAIAccounts:X,fetchAzureOpenAIAccounts:w,fetchOpenAIResponsesAccounts:p,fetchDroidAccounts:P,fetchAllAccounts:async()=>{f.value=!0,k.value=null;try{await Promise.all([ae(),ge(),Z(),q(),X(),w(),p(),P()])}catch(v){throw k.value=v.message,v}finally{f.value=!1}},createClaudeAccount:async v=>{f.value=!0,k.value=null;try{const c=await O.post("/admin/claude-accounts",v);if(c.success)return await ae(),c.data;throw new Error(c.message||"创建Claude账户失败")}catch(c){throw k.value=c.message,c}finally{f.value=!1}},createClaudeConsoleAccount:async v=>{f.value=!0,k.value=null;try{const c=await O.post("/admin/claude-console-accounts",v);if(c.success)return await ge(),c.data;throw new Error(c.message||"创建Claude Console账户失败")}catch(c){throw k.value=c.message,c}finally{f.value=!1}},createBedrockAccount:async v=>{f.value=!0,k.value=null;try{const c=await O.post("/admin/bedrock-accounts",v);if(c.success)return await Z(),c.data;throw new Error(c.message||"创建Bedrock账户失败")}catch(c){throw k.value=c.message,c}finally{f.value=!1}},createGeminiAccount:async v=>{f.value=!0,k.value=null;try{const c=await O.post("/admin/gemini-accounts",v);if(c.success)return await q(),c.data;throw new Error(c.message||"创建Gemini账户失败")}catch(c){throw k.value=c.message,c}finally{f.value=!1}},createOpenAIAccount:async v=>{f.value=!0,k.value=null;try{const c=await O.post("/admin/openai-accounts",v);if(c.success)return await X(),c.data;throw new Error(c.message||"创建OpenAI账户失败")}catch(c){throw k.value=c.message,c}finally{f.value=!1}},createDroidAccount:async v=>{f.value=!0,k.value=null;try{const c=await O.post("/admin/droid-accounts",v);if(c.success)return await P(),c.data;throw new Error(c.message||"创建Droid账户失败")}catch(c){throw k.value=c.message,c}finally{f.value=!1}},updateDroidAccount:async(v,c)=>{f.value=!0,k.value=null;try{const D=await O.put(`/admin/droid-accounts/${v}`,c);if(D.success)return await P(),D.data;throw new Error(D.message||"更新Droid账户失败")}catch(D){throw k.value=D.message,D}finally{f.value=!1}},createAzureOpenAIAccount:async v=>{f.value=!0,k.value=null;try{const c=await O.post("/admin/azure-openai-accounts",v);if(c.success)return await w(),c.data;throw new Error(c.message||"创建Azure OpenAI账户失败")}catch(c){throw k.value=c.message,c}finally{f.value=!1}},createOpenAIResponsesAccount:async v=>{f.value=!0,k.value=null;try{const c=await O.post("/admin/openai-responses-accounts",v);if(c.success)return await p(),c.data;throw new Error(c.message||"创建OpenAI-Responses账户失败")}catch(c){throw k.value=c.message,c}finally{f.value=!1}},createGeminiApiAccount:async v=>{f.value=!0,k.value=null;try{const c=await O.post("/admin/gemini-api-accounts",v);if(c.success)return await q(),c.data;throw new Error(c.message||"创建Gemini API账户失败")}catch(c){throw k.value=c.message,c}finally{f.value=!1}},updateClaudeAccount:async(v,c)=>{f.value=!0,k.value=null;try{const D=await O.put(`/admin/claude-accounts/${v}`,c);if(D.success)return await ae(),D;throw new Error(D.message||"更新Claude账户失败")}catch(D){throw k.value=D.message,D}finally{f.value=!1}},updateClaudeConsoleAccount:async(v,c)=>{f.value=!0,k.value=null;try{const D=await O.put(`/admin/claude-console-accounts/${v}`,c);if(D.success)return await ge(),D;throw new Error(D.message||"更新Claude Console账户失败")}catch(D){throw k.value=D.message,D}finally{f.value=!1}},updateBedrockAccount:async(v,c)=>{f.value=!0,k.value=null;try{const D=await O.put(`/admin/bedrock-accounts/${v}`,c);if(D.success)return await Z(),D;throw new Error(D.message||"更新Bedrock账户失败")}catch(D){throw k.value=D.message,D}finally{f.value=!1}},updateGeminiAccount:async(v,c)=>{f.value=!0,k.value=null;try{const D=await O.put(`/admin/gemini-accounts/${v}`,c);if(D.success)return await q(),D;throw new Error(D.message||"更新Gemini账户失败")}catch(D){throw k.value=D.message,D}finally{f.value=!1}},updateOpenAIAccount:async(v,c)=>{f.value=!0,k.value=null;try{const D=await O.put(`/admin/openai-accounts/${v}`,c);if(D.success)return await X(),D;throw new Error(D.message||"更新OpenAI账户失败")}catch(D){throw k.value=D.message,D}finally{f.value=!1}},updateAzureOpenAIAccount:async(v,c)=>{f.value=!0,k.value=null;try{const D=await O.put(`/admin/azure-openai-accounts/${v}`,c);if(D.success)return await w(),D;throw new Error(D.message||"更新Azure OpenAI账户失败")}catch(D){throw k.value=D.message,D}finally{f.value=!1}},updateOpenAIResponsesAccount:async(v,c)=>{f.value=!0,k.value=null;try{const D=await O.put(`/admin/openai-responses-accounts/${v}`,c);if(D.success)return await p(),D;throw new Error(D.message||"更新OpenAI-Responses账户失败")}catch(D){throw k.value=D.message,D}finally{f.value=!1}},updateGeminiApiAccount:async(v,c)=>{f.value=!0,k.value=null;try{const D=await O.put(`/admin/gemini-api-accounts/${v}`,c);if(D.success)return await q(),D;throw new Error(D.message||"更新Gemini API账户失败")}catch(D){throw k.value=D.message,D}finally{f.value=!1}},toggleAccount:async(v,c)=>{f.value=!0,k.value=null;try{let D;v==="claude"?D=`/admin/claude-accounts/${c}/toggle`:v==="claude-console"?D=`/admin/claude-console-accounts/${c}/toggle`:v==="bedrock"?D=`/admin/bedrock-accounts/${c}/toggle`:v==="gemini"?D=`/admin/gemini-accounts/${c}/toggle`:v==="openai"?D=`/admin/openai-accounts/${c}/toggle`:v==="azure_openai"?D=`/admin/azure-openai-accounts/${c}/toggle`:v==="openai-responses"?D=`/admin/openai-responses-accounts/${c}/toggle`:D=`/admin/openai-accounts/${c}/toggle`;const Fe=await O.put(D);if(Fe.success)return v==="claude"?await ae():v==="claude-console"?await ge():v==="bedrock"?await Z():v==="gemini"?await q():v==="openai"?await X():v==="azure_openai"?await w():v==="openai-responses"?await p():await X(),Fe;throw new Error(Fe.message||"切换状态失败")}catch(D){throw k.value=D.message,D}finally{f.value=!1}},deleteAccount:async(v,c)=>{f.value=!0,k.value=null;try{let D;v==="claude"?D=`/admin/claude-accounts/${c}`:v==="claude-console"?D=`/admin/claude-console-accounts/${c}`:v==="bedrock"?D=`/admin/bedrock-accounts/${c}`:v==="gemini"?D=`/admin/gemini-accounts/${c}`:v==="openai"?D=`/admin/openai-accounts/${c}`:v==="azure_openai"?D=`/admin/azure-openai-accounts/${c}`:v==="openai-responses"?D=`/admin/openai-responses-accounts/${c}`:D=`/admin/openai-accounts/${c}`;const Fe=await O.delete(D);if(Fe.success)return v==="claude"?await ae():v==="claude-console"?await ge():v==="bedrock"?await Z():v==="gemini"?await q():v==="openai"?await X():v==="azure_openai"?await w():v==="openai-responses"?await p():await X(),Fe;throw new Error(Fe.message||"删除失败")}catch(D){throw k.value=D.message,D}finally{f.value=!1}},refreshClaudeToken:async v=>{f.value=!0,k.value=null;try{const c=await O.post(`/admin/claude-accounts/${v}/refresh`);if(c.success)return await ae(),c;throw new Error(c.message||"Token刷新失败")}catch(c){throw k.value=c.message,c}finally{f.value=!1}},generateClaudeAuthUrl:async v=>{try{const c=await O.post("/admin/claude-accounts/generate-auth-url",v);if(c.success)return c.data;throw new Error(c.message||"生成授权URL失败")}catch(c){throw k.value=c.message,c}},exchangeClaudeCode:async v=>{try{const c=await O.post("/admin/claude-accounts/exchange-code",v);if(c.success)return c.data;throw new Error(c.message||"交换授权码失败")}catch(c){throw k.value=c.message,c}},generateClaudeSetupTokenUrl:async v=>{try{const c=await O.post("/admin/claude-accounts/generate-setup-token-url",v);if(c.success)return c.data;throw new Error(c.message||"生成Setup Token URL失败")}catch(c){throw k.value=c.message,c}},exchangeClaudeSetupTokenCode:async v=>{try{const c=await O.post("/admin/claude-accounts/exchange-setup-token-code",v);if(c.success)return c.data;throw new Error(c.message||"交换Setup Token授权码失败")}catch(c){throw k.value=c.message,c}},oauthWithCookie:async v=>{try{const c=await O.post("/admin/claude-accounts/oauth-with-cookie",v);if(c.success)return c.data;throw new Error(c.message||"Cookie授权失败")}catch(c){throw k.value=c.message,c}},oauthSetupTokenWithCookie:async v=>{try{const c=await O.post("/admin/claude-accounts/setup-token-with-cookie",v);if(c.success)return c.data;throw new Error(c.message||"Cookie授权失败")}catch(c){throw k.value=c.message,c}},generateGeminiAuthUrl:async v=>{try{const c=await O.post("/admin/gemini-accounts/generate-auth-url",v);if(c.success)return c.data;throw new Error(c.message||"生成授权URL失败")}catch(c){throw k.value=c.message,c}},exchangeGeminiCode:async v=>{try{const c=await O.post("/admin/gemini-accounts/exchange-code",v);if(c.success)return c.data;throw new Error(c.message||"交换授权码失败")}catch(c){throw k.value=c.message,c}},generateOpenAIAuthUrl:async v=>{try{const c=await O.post("/admin/openai-accounts/generate-auth-url",v);if(c.success)return c.data;throw new Error(c.message||"生成授权URL失败")}catch(c){throw k.value=c.message,c}},exchangeOpenAICode:async v=>{try{const c=await O.post("/admin/openai-accounts/exchange-code",v);if(c.success)return c.data;throw new Error(c.message||"交换授权码失败")}catch(c){throw k.value=c.message,c}},generateDroidAuthUrl:async v=>{k.value=null;try{const c=await O.post("/admin/droid-accounts/generate-auth-url",v);if(c.success)return c.data;throw new Error(c.message||"生成授权URL失败")}catch(c){throw k.value=c.message,c}},exchangeDroidCode:async v=>{k.value=null;try{return await O.post("/admin/droid-accounts/exchange-code",v)}catch(c){throw k.value=c.message,c}},sortAccounts:v=>{F.value===v?ee.value=ee.value==="asc"?"desc":"asc":(F.value=v,ee.value="asc")},reset:()=>{J.value=[],Me.value=[],m.value=[],Q.value=[],U.value=[],H.value=[],V.value=[],K.value=[],f.value=!1,k.value=null,F.value="",ee.value="asc"}}}),aa={class:"space-y-4"},ra={class:"flex items-center justify-between"},la={class:"flex cursor-pointer items-center"},oa={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"},na={class:"relative"},ia={key:0,class:"mt-1 text-xs text-red-500"},da={key:1,class:"mt-1 text-xs text-green-500"},ua={class:"grid grid-cols-2 gap-4"},pa={class:"space-y-4"},ga={class:"flex items-center"},ca={key:0,class:"grid grid-cols-2 gap-4"},ma={class:"relative"},ya=["type"],Os={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(J,{emit:Me}){const m=J,Q=Me,U=$({...m.modelValue}),H=$(!!(U.value.username||U.value.password)),V=$(!1),K=$(""),f=$(""),k=$(!1);ye(()=>m.modelValue,X=>{JSON.stringify(X)!==JSON.stringify(U.value)&&(U.value={...X},H.value=!!(X.username||X.password))},{deep:!0}),ye(()=>U.value.enabled,()=>{ee()}),ye(()=>U.value.type,()=>{ee()}),ye(()=>U.value.host,()=>{ee()}),ye(()=>U.value.port,()=>{ee()}),ye(()=>U.value.username,()=>{ee()}),ye(()=>U.value.password,()=>{ee()}),ye(H,X=>{X||(U.value.username="",U.value.password="",ee())});let F=null;function ee(){F&&clearTimeout(F),F=setTimeout(()=>{const X={...U.value};H.value||(X.username="",X.password=""),Q("update:modelValue",X)},100)}function ae(){if(f.value="",k.value=!1,!!K.value)try{const X=K.value.split("#")[0].trim();if(!X)return;const w=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,p=X.match(w);if(!p){const ve=/^([^:]+):(\d+)$/,ie=X.match(ve);if(ie){U.value.type="socks5",U.value.host=ie[1],U.value.port=ie[2],U.value.username="",U.value.password="",H.value=!1,k.value=!0,ee(),setTimeout(()=>{k.value=!1},3e3);return}f.value="无效的代理URL格式,请检查输入";return}const[,P,te,Y,_,W]=p;U.value.type=P.toLowerCase(),U.value.host=_,U.value.port=W,te&&Y?(U.value.username=decodeURIComponent(te),U.value.password=decodeURIComponent(Y),H.value=!0):(U.value.username="",U.value.password="",H.value=!1),k.value=!0,ee(),setTimeout(()=>{k.value=!1},3e3)}catch{f.value="解析失败,请检查URL格式"}}function ge(){K.value="",f.value="",k.value=!1}function Z(){setTimeout(()=>{ae()},0)}function q(){const X=K.value.trim();X.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(X)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(X))&&ae():/^[^:]+:\d{2,5}$/.test(X)&&ae()}return zs(()=>{F&&clearTimeout(F)}),(X,w)=>(o(),n("div",aa,[e("div",ra,[w[10]||(w[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",la,[h(e("input",{"onUpdate:modelValue":w[0]||(w[0]=p=>U.value.enabled=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Ve,U.value.enabled]]),w[9]||(w[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),U.value.enabled?(o(),n("div",oa,[w[22]||(w[22]=Vt('<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,[w[14]||(w[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[x(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",na,[h(e("input",{"onUpdate:modelValue":w[1]||(w[1]=p=>K.value=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: socks5://username:password@host:port 或 http://host:port",type:"text",onInput:q,onKeyup:Js(ae,["enter"]),onPaste:Z},null,544),[[z,K.value]]),K.value?(o(),n("button",{key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:ge},w[11]||(w[11]=[e("i",{class:"fas fa-times"},null,-1)]))):y("",!0)]),f.value?(o(),n("p",ia,[w[12]||(w[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),x(" "+u(f.value),1)])):k.value?(o(),n("p",da,w[13]||(w[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),x(" 代理配置已自动填充 ",-1)]))):y("",!0)]),w[23]||(w[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[w[16]||(w[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),h(e("select",{"onUpdate:modelValue":w[2]||(w[2]=p=>U.value.type=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},w[15]||(w[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[Ds,U.value.type]])]),e("div",ua,[e("div",null,[w[17]||(w[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),h(e("input",{"onUpdate:modelValue":w[3]||(w[3]=p=>U.value.host=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 192.168.1.100",type:"text"},null,512),[[z,U.value.host]])]),e("div",null,[w[18]||(w[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),h(e("input",{"onUpdate:modelValue":w[4]||(w[4]=p=>U.value.port=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 1080",type:"number"},null,512),[[z,U.value.port]])])]),e("div",pa,[e("div",ga,[h(e("input",{id:"proxyAuth","onUpdate:modelValue":w[5]||(w[5]=p=>H.value=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Ve,H.value]]),w[19]||(w[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),H.value?(o(),n("div",ca,[e("div",null,[w[20]||(w[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),h(e("input",{"onUpdate:modelValue":w[6]||(w[6]=p=>U.value.username=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理用户名",type:"text"},null,512),[[z,U.value.username]])]),e("div",null,[w[21]||(w[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",ma,[h(e("input",{"onUpdate:modelValue":w[7]||(w[7]=p=>U.value.password=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理密码",type:V.value?"text":"password"},null,8,ya),[[ps,U.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:w[8]||(w[8]=p=>V.value=!V.value)},[e("i",{class:I(V.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):y("",!0)]),w[24]||(w[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,"提示:"),x("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):y("",!0)]))}},xa={class:"space-y-6"},fa={key:0},ba={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},va={class:"flex items-start gap-4"},ka={class:"flex-1"},ha={class:"mb-4"},wa={class:"flex gap-4"},$a={class:"flex cursor-pointer items-center gap-2"},Aa={class:"flex cursor-pointer items-center gap-2"},Ca={key:0,class:"space-y-4"},Ua={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Ia={class:"mb-4"},Ta={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},Ka={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},_a={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},Pa={key:0,class:"mb-4 rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-700 dark:bg-amber-900/30"},Ma={key:1,class:"mb-4 rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-700 dark:bg-red-900/30"},Sa={class:"text-sm text-red-600 dark:text-red-400"},Da=["disabled"],za={key:0,class:"loading-spinner mr-2"},ja={key:1,class:"fas fa-magic mr-2"},Va={key:1},Ra={class:"space-y-4"},Oa={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},La={class:"flex items-start gap-3"},Ea={class:"flex-1"},Na=["disabled"],qa={key:0,class:"fas fa-link mr-2"},Wa={key:1,class:"loading-spinner mr-2"},Ga={key:1,class:"space-y-3"},Fa={class:"flex items-center gap-2"},Qa=["value"],Ba={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Ha={class:"flex items-start gap-3"},Ja={class:"flex-1"},Ya={class:"space-y-3"},Za={key:1},Xa={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},er={class:"flex items-start gap-4"},tr={class:"flex-1"},sr={class:"space-y-4"},ar={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},rr={class:"flex items-start gap-3"},lr={class:"flex-1"},or=["disabled"],nr={key:0,class:"fas fa-link mr-2"},ir={key:1,class:"loading-spinner mr-2"},dr={key:1,class:"space-y-3"},ur={class:"flex items-center gap-2"},pr=["value"],gr={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},cr={class:"flex items-start gap-3"},mr={class:"flex-1"},yr={class:"space-y-3"},xr={key:2},fr={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},br={class:"flex items-start gap-4"},vr={class:"flex-1"},kr={class:"space-y-4"},hr={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},wr={class:"flex items-start gap-3"},$r={class:"flex-1"},Ar=["disabled"],Cr={key:0,class:"fas fa-link mr-2"},Ur={key:1,class:"loading-spinner mr-2"},Ir={key:1,class:"space-y-3"},Tr={class:"flex items-center gap-2"},Kr=["value"],_r={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Pr={class:"flex items-start gap-3"},Mr={class:"flex-1"},Sr={class:"space-y-3"},Dr={key:3},zr={class:"rounded-lg border border-cyan-200 bg-cyan-50 p-6 dark:border-cyan-700 dark:bg-cyan-900/30"},jr={class:"flex items-start gap-4"},Vr={class:"flex-1"},Rr={class:"space-y-4"},Or={class:"rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"},Lr={class:"flex items-start gap-3"},Er={class:"flex-1"},Nr=["disabled"],qr={key:0,class:"fas fa-link mr-2"},Wr={key:1,class:"loading-spinner mr-2"},Gr={key:1,class:"space-y-4"},Fr={class:"space-y-2"},Qr={class:"flex flex-col gap-2 rounded-md border border-cyan-200 bg-white p-3 dark:border-cyan-700 dark:bg-gray-800"},Br={class:"flex items-center gap-2"},Hr=["value"],Jr={class:"space-y-2"},Yr={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"},Zr={class:"font-mono text-xl font-semibold text-cyan-700 dark:text-cyan-200"},Xr={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},el={class:"flex gap-3 pt-4"},tl=["disabled"],sl={key:0,class:"loading-spinner mr-2"},al={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(J,{expose:Me,emit:m}){const Q=J,U=m,H=Qs(),V=$(!1),K=$(!1),f=$(""),k=$(""),F=$(!1),ee=$(""),ae=$(""),ge=$(""),Z=$(""),q=$(0);let X=null;const w=$("manual"),p=$(""),P=$(!1),te=$(""),Y=$(!1),_=$({current:0,total:0}),W=ne(()=>p.value.split(`
|
||
`).map(G=>G.trim()).filter(G=>G.length>0).length),ve=ne(()=>Q.platform==="droid"?!!ee.value:f.value&&k.value.trim()),ie=ne(()=>{if(!q.value||q.value<=0)return"00:00";const G=Math.floor(q.value/60),g=q.value%60;return`${G.toString().padStart(2,"0")}:${g.toString().padStart(2,"0")}`}),L=G=>{if(C(),!G||G<=0){q.value=0;return}q.value=Math.floor(G),X=setInterval(()=>{q.value<=1?(q.value=0,C()):q.value-=1},1e3)},C=()=>{X&&(clearInterval(X),X=null)};ye(k,G=>{if(Q.platform==="droid"||!G||typeof G!="string")return;const g=G.trim();if(!g)return;if(g.startsWith("http://")||g.startsWith("https://"))if(g.startsWith("http://localhost:45462")||g.startsWith("http://localhost:1455"))try{const Ae=new URL(g).searchParams.get("code");Ae?(k.value=Ae,j("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):j("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(ce){console.error("Failed to parse URL:",ce),j("链接格式错误,请检查是否为完整的 URL","error")}else if(Q.platform==="gemini"||Q.platform==="openai")try{const Ae=new URL(g).searchParams.get("code");Ae&&(k.value=Ae,j("成功提取授权码!","success"))}catch{}else j("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const we=async()=>{var G;C(),f.value="",k.value="",ae.value="",ge.value="",Z.value="",q.value=0,ee.value="",F.value=!1,V.value=!0;try{const g=(G=Q.proxy)!=null&&G.enabled?{proxy:{type:Q.proxy.type,host:Q.proxy.host,port:parseInt(Q.proxy.port),username:Q.proxy.username||null,password:Q.proxy.password||null}}:{};if(Q.platform==="claude"){const s=await H.generateClaudeAuthUrl(g);f.value=s.authUrl,ee.value=s.sessionId}else if(Q.platform==="gemini"){const s=await H.generateGeminiAuthUrl(g);f.value=s.authUrl,ee.value=s.sessionId}else if(Q.platform==="openai"){const s=await H.generateOpenAIAuthUrl(g);f.value=s.authUrl,ee.value=s.sessionId}else if(Q.platform==="droid"){const s=await H.generateDroidAuthUrl(g);f.value=s.verificationUriComplete||s.verificationUri,ge.value=s.verificationUri,Z.value=s.verificationUriComplete||s.verificationUri,ae.value=s.userCode,L(s.expiresIn||300),ee.value=s.sessionId}}catch(g){j(g.message||"生成授权链接失败","error")}finally{V.value=!1}},de=()=>{C(),f.value="",k.value="",ae.value="",ge.value="",Z.value="",q.value=0,ee.value="",we()},$e=async()=>{if(!f.value){j("请先生成授权链接","warning");return}try{await navigator.clipboard.writeText(f.value),F.value=!0,j("链接已复制","success"),setTimeout(()=>{F.value=!1},2e3)}catch{const g=document.createElement("input");g.value=f.value,document.body.appendChild(g),g.select(),document.execCommand("copy"),document.body.removeChild(g),F.value=!0,j("链接已复制","success"),setTimeout(()=>{F.value=!1},2e3)}},Ce=async()=>{if(!ae.value){j("请先生成授权验证码","warning");return}try{await navigator.clipboard.writeText(ae.value),j("验证码已复制","success")}catch{const g=document.createElement("input");g.value=ae.value,document.body.appendChild(g),g.select(),document.execCommand("copy"),document.body.removeChild(g),j("验证码已复制","success")}},Re=()=>{Z.value?window.open(Z.value,"_blank","noopener"):ge.value&&window.open(ge.value,"_blank","noopener")},B=async()=>{var G;if(ve.value){K.value=!0;try{let g={};Q.platform==="claude"?g={sessionId:ee.value,callbackUrl:k.value.trim()}:Q.platform==="gemini"?g={code:k.value.trim(),sessionId:ee.value}:Q.platform==="openai"?g={code:k.value.trim(),sessionId:ee.value}:Q.platform==="droid"&&(g={sessionId:ee.value}),(G=Q.proxy)!=null&&G.enabled&&(g.proxy={type:Q.proxy.type,host:Q.proxy.host,port:parseInt(Q.proxy.port),username:Q.proxy.username||null,password:Q.proxy.password||null});let s;if(Q.platform==="claude")s=await H.exchangeClaudeCode(g);else if(Q.platform==="gemini")s=await H.exchangeGeminiCode(g);else if(Q.platform==="openai")s=await H.exchangeOpenAICode(g);else if(Q.platform==="droid"){const ce=await H.exchangeDroidCode(g);if(!ce.success){if(ce.pending){const Ae=ce.message||"授权尚未完成,请在浏览器确认后稍候再次尝试。";j(Ae,"info"),typeof ce.expiresIn=="number"&&ce.expiresIn>=0&&L(ce.expiresIn);return}throw new Error(ce.message||"授权失败,请重试")}s=ce.data,C()}U("success",s)}catch(g){j(g.message||"授权失败,请检查授权码是否正确","error")}finally{K.value=!1}}};Ys(()=>{C()});const A=async()=>{var Ae;const G=p.value.split(`
|
||
`).map(Le=>Le.trim()).filter(Le=>Le.length>0);if(G.length===0){te.value="请输入至少一个 sessionKey";return}P.value=!0,te.value="",_.value={current:0,total:G.length};const g=(Ae=Q.proxy)!=null&&Ae.enabled?{type:Q.proxy.type,host:Q.proxy.host,port:parseInt(Q.proxy.port),username:Q.proxy.username||null,password:Q.proxy.password||null}:null,s=[],ce=[];for(let Le=0;Le<G.length;Le++){_.value.current=Le+1;try{const Oe=await H.oauthWithCookie({sessionKey:G[Le],proxy:g});s.push(Oe)}catch(Oe){ce.push({index:Le+1,key:G[Le].substring(0,20)+"...",error:Oe.message})}}_.value={current:0,total:0},s.length>0?U("success",s):P.value=!1,ce.length>0&&s.length===0?te.value="全部授权失败,请检查 sessionKey 是否有效":ce.length>0&&(te.value=`${ce.length} 个授权失败`)},R=()=>{p.value="",te.value="",P.value=!1,_.value={current:0,total:0}},ue=()=>{R(),f.value="",k.value="",ee.value=""};return Me({resetCookieAuth:R}),(G,g)=>(o(),n("div",xa,[J.platform==="claude"?(o(),n("div",fa,[e("div",ba,[e("div",va,[g[29]||(g[29]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-link text-white"})],-1)),e("div",ka,[g[28]||(g[28]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"},"Claude 账户授权",-1)),e("div",ha,[g[10]||(g[10]=e("label",{class:"mb-2 block text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式 ",-1)),e("div",wa,[e("label",$a,[h(e("input",{"onUpdate:modelValue":g[0]||(g[0]=s=>w.value=s),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"manual",onChange:ue},null,544),[[Ie,w.value]]),g[8]||(g[8]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"手动授权",-1))]),e("label",Aa,[h(e("input",{"onUpdate:modelValue":g[1]||(g[1]=s=>w.value=s),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"cookie",onChange:ue},null,544),[[Ie,w.value]]),g[9]||(g[9]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"Cookie自动授权",-1))])])]),w.value==="cookie"?(o(),n("div",Ca,[e("div",Ua,[g[17]||(g[17]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 使用 claude.ai 的 sessionKey 自动完成 OAuth 授权流程,无需手动打开浏览器。 ",-1)),e("div",Ia,[e("label",Ta,[g[12]||(g[12]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),g[13]||(g[13]=x(" sessionKey ",-1)),W.value>1?(o(),n("span",Ka,u(W.value)+" 个 ",1)):y("",!0),e("button",{class:"text-blue-500 hover:text-blue-600",type:"button",onClick:g[2]||(g[2]=s=>Y.value=!Y.value)},g[11]||(g[11]=[e("i",{class:"fas fa-question-circle"},null,-1)]))]),h(e("textarea",{"onUpdate:modelValue":g[3]||(g[3]=s=>p.value=s),class:"form-input w-full resize-y font-mono text-sm",placeholder:`每行一个 sessionKey,例如:
|
||
sk-ant-sid01-xxxxx...
|
||
sk-ant-sid01-yyyyy...`,rows:"3"},null,512),[[z,p.value]]),W.value>1?(o(),n("p",_a,[g[14]||(g[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),x(" 将批量创建 "+u(W.value)+" 个账户 ",1)])):y("",!0)]),Y.value?(o(),n("div",Pa,g[15]||(g[15]=[Vt('<h5 class="mb-2 font-semibold text-amber-800 dark:text-amber-200"><i class="fas fa-lightbulb mr-1"></i>如何获取 sessionKey </h5><ol class="list-inside list-decimal space-y-1 text-xs text-amber-700 dark:text-amber-300"><li>在浏览器中登录 <strong>claude.ai</strong></li><li> 按 <kbd class="rounded bg-gray-200 px-1 dark:bg-gray-700">F12</kbd> 打开开发者工具 </li><li>切换到 <strong>Application</strong>(应用)标签页</li><li> 在左侧找到 <strong>Cookies</strong> → <strong>https://claude.ai</strong></li><li>找到键为 <strong>sessionKey</strong> 的那一行</li><li>复制其 <strong>Value</strong>(值)列的内容</li></ol><p class="mt-2 text-xs text-amber-600 dark:text-amber-400"><i class="fas fa-info-circle mr-1"></i> sessionKey 通常以 <code class="rounded bg-gray-200 px-1 dark:bg-gray-700">sk-ant-sid01-</code> 开头 </p>',3)]))):y("",!0),te.value?(o(),n("div",Ma,[e("p",Sa,[g[16]||(g[16]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),x(" "+u(te.value),1)])])):y("",!0),e("button",{class:"btn btn-primary w-full px-4 py-3 text-base font-semibold",disabled:P.value||!p.value.trim(),type:"button",onClick:A},[P.value?(o(),n("div",za)):(o(),n("i",ja)),P.value&&_.value.total>1?(o(),n(be,{key:2},[x(" 正在授权 "+u(_.value.current)+"/"+u(_.value.total)+"... ",1)],64)):P.value?(o(),n(be,{key:3},[x(" 正在授权... ")],64)):(o(),n(be,{key:4},[x(" 开始自动授权 ")],64))],8,Da)])])):(o(),n("div",Va,[g[27]||(g[27]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤完成 Claude 账户的授权: ",-1)),e("div",Ra,[e("div",Oa,[e("div",La,[g[20]||(g[20]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Ea,[g[19]||(g[19]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),f.value?(o(),n("div",Ga,[e("div",Fa,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:f.value},null,8,Qa),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:$e},[e("i",{class:I(F.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:de},g[18]||(g[18]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:V.value,onClick:we},[V.value?(o(),n("div",Wa)):(o(),n("i",qa)),x(" "+u(V.value?"生成中...":"生成授权链接"),1)],8,Na))])])]),g[26]||(g[26]=Vt('<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",Ba,[e("div",Ha,[g[25]||(g[25]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Ja,[g[23]||(g[23]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),g[24]||(g[24]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"},[x(" 授权完成后,页面会显示一个 "),e("strong",null,"Authorization Code"),x(",请将其复制并粘贴到下方输入框: ")],-1)),e("div",Ya,[e("div",null,[g[21]||(g[21]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),x("Authorization Code ")],-1)),h(e("textarea",{"onUpdate:modelValue":g[4]||(g[4]=s=>k.value=s),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[z,k.value]])]),g[22]||(g[22]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 请粘贴从Claude页面复制的Authorization Code ")],-1))])])])])])]))])])])])):J.platform==="gemini"?(o(),n("div",Za,[e("div",Xa,[e("div",er,[g[41]||(g[41]=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",tr,[g[39]||(g[39]=e("h4",{class:"mb-3 font-semibold text-green-900 dark:text-green-200"},"Gemini 账户授权",-1)),g[40]||(g[40]=e("p",{class:"mb-4 text-sm text-green-800 dark:text-green-300"}," 请按照以下步骤完成 Gemini 账户的授权: ",-1)),e("div",sr,[e("div",ar,[e("div",rr,[g[32]||(g[32]=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",lr,[g[31]||(g[31]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 点击下方按钮生成授权链接 ",-1)),f.value?(o(),n("div",dr,[e("div",ur,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:f.value},null,8,pr),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:$e},[e("i",{class:I(F.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:de},g[30]||(g[30]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:V.value,onClick:we},[V.value?(o(),n("div",ir)):(o(),n("i",nr)),x(" "+u(V.value?"生成中...":"生成授权链接"),1)],8,or))])])]),g[38]||(g[38]=Vt('<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",gr,[e("div",cr,[g[37]||(g[37]=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",mr,[g[35]||(g[35]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 输入 Authorization Code ",-1)),g[36]||(g[36]=e("p",{class:"mb-3 text-sm text-green-700 dark:text-green-300"}," 授权完成后,页面会显示一个 Authorization Code,请将其复制并粘贴到下方输入框: ",-1)),e("div",yr,[e("div",null,[g[33]||(g[33]=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"}),x("Authorization Code ")],-1)),h(e("textarea",{"onUpdate:modelValue":g[5]||(g[5]=s=>k.value=s),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[z,k.value]])]),g[34]||(g[34]=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"}),x(" 请粘贴从Gemini页面复制的Authorization Code ")])],-1))])])])])])])])])])):J.platform==="openai"?(o(),n("div",xr,[e("div",fr,[e("div",br,[g[53]||(g[53]=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",vr,[g[51]||(g[51]=e("h4",{class:"mb-3 font-semibold text-orange-900 dark:text-orange-200"},"OpenAI 账户授权",-1)),g[52]||(g[52]=e("p",{class:"mb-4 text-sm text-orange-800 dark:text-orange-300"}," 请按照以下步骤完成 OpenAI 账户的授权: ",-1)),e("div",kr,[e("div",hr,[e("div",wr,[g[44]||(g[44]=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",$r,[g[43]||(g[43]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 点击下方按钮生成授权链接 ",-1)),f.value?(o(),n("div",Ir,[e("div",Tr,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:f.value},null,8,Kr),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:$e},[e("i",{class:I(F.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:de},g[42]||(g[42]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:V.value,onClick:we},[V.value?(o(),n("div",Ur)):(o(),n("i",Cr)),x(" "+u(V.value?"生成中...":"生成授权链接"),1)],8,Ar))])])]),g[50]||(g[50]=Vt('<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",_r,[e("div",Pr,[g[49]||(g[49]=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",Mr,[g[47]||(g[47]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 输入授权链接或 Code ",-1)),g[48]||(g[48]=e("p",{class:"mb-3 text-sm text-orange-700 dark:text-orange-300"},[x(" 授权完成后,当页面地址变为 "),e("strong",{class:"font-mono"},"http://localhost:1455/..."),x(" 时: ")],-1)),e("div",Sr,[e("div",null,[g[45]||(g[45]=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"}),x("授权链接或 Code ")],-1)),h(e("textarea",{"onUpdate:modelValue":g[6]||(g[6]=s=>k.value=s),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),[[z,k.value]])]),g[46]||(g[46]=Vt('<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))])])])])])])])])])):J.platform==="droid"?(o(),n("div",Dr,[e("div",zr,[e("div",jr,[g[65]||(g[65]=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",Vr,[g[63]||(g[63]=e("h4",{class:"mb-3 font-semibold text-cyan-900 dark:text-cyan-200"},"Droid 账户授权",-1)),g[64]||(g[64]=e("p",{class:"mb-4 text-sm text-cyan-800 dark:text-cyan-300"}," 请按照以下步骤完成 Factory (Droid) 账户的授权: ",-1)),e("div",Rr,[e("div",Or,[e("div",Lr,[g[61]||(g[61]=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",Er,[g[60]||(g[60]=e("p",{class:"mb-2 font-medium text-cyan-900 dark:text-cyan-200"}," 点击下方按钮生成授权链接 ",-1)),f.value?(o(),n("div",Gr,[e("div",Fr,[g[56]||(g[56]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权链接",-1)),e("div",Qr,[e("div",Br,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:f.value},null,8,Hr),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:$e},[e("i",{class:I(F.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:Re},g[54]||(g[54]=[e("i",{class:"fas fa-external-link-alt text-xs"},null,-1),x(" 在新标签中打开 ",-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:de},g[55]||(g[55]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),x("重新生成 ",-1)]))])])]),e("div",Jr,[g[58]||(g[58]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权验证码",-1)),e("div",Yr,[e("span",Zr,u(ae.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:Ce},g[57]||(g[57]=[e("i",{class:"fas fa-copy mr-1"},null,-1),x("复制 ",-1)]))])]),e("div",Xr,[e("span",null,[g[59]||(g[59]=e("i",{class:"fas fa-hourglass-half mr-1 text-cyan-500"},null,-1)),x(" 剩余有效期:"+u(ie.value),1)])])])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:V.value,onClick:we},[V.value?(o(),n("div",Wr)):(o(),n("i",qr)),x(" "+u(V.value?"生成中...":"生成授权链接"),1)],8,Nr))])])]),g[62]||(g[62]=Vt('<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))])])])])])):y("",!0),e("div",el,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:g[7]||(g[7]=s=>G.$emit("back"))}," 上一步 "),J.platform==="claude"&&w.value==="cookie"?y("",!0):(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!ve.value||K.value,type:"button",onClick:B},[K.value?(o(),n("div",sl)):y("",!0),x(" "+u(K.value?"验证中...":"完成授权"),1)],8,tl))])]))}},rl={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},ll={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"},ol={class:"mb-4 flex items-center justify-between sm:mb-6"},nl={class:"mb-6"},il={key:0,class:"mb-6 rounded-lg border border-blue-200 bg-blue-50 p-4"},dl={class:"space-y-4"},ul={class:"flex gap-4"},pl={class:"flex cursor-pointer items-center"},gl={class:"flex cursor-pointer items-center"},cl={class:"flex cursor-pointer items-center"},ml={class:"flex cursor-pointer items-center"},yl={class:"flex gap-3"},xl=["disabled"],fl={key:0,class:"loading-spinner mr-2"},bl={class:"space-y-4"},vl={key:0,class:"py-8 text-center"},kl={key:1,class:"rounded-lg bg-gray-50 py-8 text-center"},hl={key:2,class:"grid grid-cols-1 gap-4 md:grid-cols-2"},wl={class:"mb-3 flex items-start justify-between"},$l={class:"flex-1"},Al={class:"font-semibold text-gray-900"},Cl={class:"mt-1 text-sm text-gray-500"},Ul={class:"ml-4 flex items-center gap-2"},Il={class:"flex items-center justify-between text-sm text-gray-600"},Tl={class:"flex items-center gap-4"},Kl={class:"flex items-center gap-2"},_l=["onClick"],Pl=["disabled","onClick"],Ml={key:1,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Sl={class:"modal-content w-full max-w-lg p-4 sm:p-6"},Dl={class:"space-y-4"},zl={class:"rounded-lg bg-gray-100 px-3 py-2 text-sm text-gray-600"},jl={class:"flex gap-3 pt-4"},Vl=["disabled"],Rl={key:0,class:"loading-spinner mr-2"},Ol={__name:"GroupManagementModal",emits:["close","refresh"],setup(J,{emit:Me}){const m=Me,Q=$(!0),U=$(!1),H=$([]),V=$(!1),K=$(!1),f=$({name:"",platform:"claude",description:""}),k=$(!1),F=$(!1),ee=$(null),ae=$({name:"",platform:"",description:""}),ge=Y=>Y?new Date(Y).toLocaleDateString("zh-CN"):"-",Z=async()=>{U.value=!0;try{const Y=await O.get("/admin/account-groups");H.value=Y.data||[]}catch{j("加载分组列表失败","error")}finally{U.value=!1}},q=async()=>{var Y,_;if(!f.value.name||!f.value.platform){j("请填写必填项","error");return}K.value=!0;try{await O.post("/admin/account-groups",{name:f.value.name,platform:f.value.platform,description:f.value.description}),j("分组创建成功","success"),X(),await Z(),m("refresh")}catch(W){j(((_=(Y=W.response)==null?void 0:Y.data)==null?void 0:_.error)||"创建分组失败","error")}finally{K.value=!1}},X=()=>{V.value=!1,f.value={name:"",platform:"claude",description:""}},w=Y=>{ee.value=Y,ae.value={name:Y.name,platform:Y.platform,description:Y.description||""},k.value=!0},p=async()=>{var Y,_;if(!ae.value.name){j("请填写分组名称","error");return}F.value=!0;try{await O.put(`/admin/account-groups/${ee.value.id}`,{name:ae.value.name,description:ae.value.description}),j("分组更新成功","success"),P(),await Z(),m("refresh")}catch(W){j(((_=(Y=W.response)==null?void 0:Y.data)==null?void 0:_.error)||"更新分组失败","error")}finally{F.value=!1}},P=()=>{k.value=!1,ee.value=null,ae.value={name:"",platform:"",description:""}},te=async Y=>{var _,W;if(Y.memberCount>0){j("分组内还有成员,无法删除","error");return}if(confirm(`确定要删除分组 "${Y.name}" 吗?`))try{await O.delete(`/admin/account-groups/${Y.id}`),j("分组删除成功","success"),await Z(),m("refresh")}catch(ve){j(((W=(_=ve.response)==null?void 0:_.data)==null?void 0:W.error)||"删除分组失败","error")}};return gs(()=>{Z()}),(Y,_)=>(o(),Ye(Rt,{to:"body"},[Q.value?(o(),n("div",rl,[e("div",ll,[e("div",ol,[_[11]||(_[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:_[0]||(_[0]=W=>Y.$emit("close"))},_[10]||(_[10]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",nl,[e("button",{class:"btn btn-primary px-4 py-2",onClick:_[1]||(_[1]=W=>V.value=!0)},_[12]||(_[12]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 创建新分组 ",-1)]))]),V.value?(o(),n("div",il,[_[20]||(_[20]=e("h4",{class:"mb-4 text-lg font-semibold text-gray-900"},"创建新分组",-1)),e("div",dl,[e("div",null,[_[13]||(_[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),h(e("input",{"onUpdate:modelValue":_[2]||(_[2]=W=>f.value.name=W),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[z,f.value.name]])]),e("div",null,[_[18]||(_[18]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型 *",-1)),e("div",ul,[e("label",pl,[h(e("input",{"onUpdate:modelValue":_[3]||(_[3]=W=>f.value.platform=W),class:"mr-2",type:"radio",value:"claude"},null,512),[[Ie,f.value.platform]]),_[14]||(_[14]=e("span",{class:"text-sm text-gray-700"},"Claude",-1))]),e("label",gl,[h(e("input",{"onUpdate:modelValue":_[4]||(_[4]=W=>f.value.platform=W),class:"mr-2",type:"radio",value:"gemini"},null,512),[[Ie,f.value.platform]]),_[15]||(_[15]=e("span",{class:"text-sm text-gray-700"},"Gemini",-1))]),e("label",cl,[h(e("input",{"onUpdate:modelValue":_[5]||(_[5]=W=>f.value.platform=W),class:"mr-2",type:"radio",value:"openai"},null,512),[[Ie,f.value.platform]]),_[16]||(_[16]=e("span",{class:"text-sm text-gray-700"},"OpenAI",-1))]),e("label",ml,[h(e("input",{"onUpdate:modelValue":_[6]||(_[6]=W=>f.value.platform=W),class:"mr-2",type:"radio",value:"droid"},null,512),[[Ie,f.value.platform]]),_[17]||(_[17]=e("span",{class:"text-sm text-gray-700"},"Droid",-1))])])]),e("div",null,[_[19]||(_[19]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),h(e("textarea",{"onUpdate:modelValue":_[7]||(_[7]=W=>f.value.description=W),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[z,f.value.description]])]),e("div",yl,[e("button",{class:"btn btn-primary px-4 py-2",disabled:!f.value.name||!f.value.platform||K.value,onClick:q},[K.value?(o(),n("div",fl)):y("",!0),x(" "+u(K.value?"创建中...":"创建"),1)],8,xl),e("button",{class:"btn btn-secondary px-4 py-2",onClick:X},"取消")])])])):y("",!0),e("div",bl,[U.value?(o(),n("div",vl,_[21]||(_[21]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500"},"加载中...",-1)]))):H.value.length===0?(o(),n("div",kl,_[22]||(_[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(),n("div",hl,[(o(!0),n(be,null,qe(H.value,W=>(o(),n("div",{key:W.id,class:"rounded-lg border bg-white p-4 transition-shadow hover:shadow-md"},[e("div",wl,[e("div",$l,[e("h4",Al,u(W.name),1),e("p",Cl,u(W.description||"暂无描述"),1)]),e("div",Ul,[e("span",{class:I(["rounded-full px-2 py-1 text-xs font-medium",W.platform==="claude"?"bg-purple-100 text-purple-700":W.platform==="gemini"?"bg-blue-100 text-blue-700":W.platform==="openai"?"bg-gray-100 text-gray-700":"bg-cyan-100 text-cyan-700"])},u(W.platform==="claude"?"Claude":W.platform==="gemini"?"Gemini":W.platform==="openai"?"OpenAI":"Droid"),3)])]),e("div",Il,[e("div",Tl,[e("span",null,[_[23]||(_[23]=e("i",{class:"fas fa-users mr-1"},null,-1)),x(" "+u(W.memberCount||0)+" 个成员 ",1)]),e("span",null,[_[24]||(_[24]=e("i",{class:"fas fa-clock mr-1"},null,-1)),x(" "+u(ge(W.createdAt)),1)])]),e("div",Kl,[e("button",{class:"text-blue-600 transition-colors hover:text-blue-800",title:"编辑",onClick:ve=>w(W)},_[25]||(_[25]=[e("i",{class:"fas fa-edit"},null,-1)]),8,_l),e("button",{class:"text-red-600 transition-colors hover:text-red-800",disabled:W.memberCount>0,title:"删除",onClick:ve=>te(W)},_[26]||(_[26]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Pl)])])]))),128))]))])])])):y("",!0),k.value?(o(),n("div",Ml,[e("div",Sl,[e("div",{class:"mb-4 flex items-center justify-between"},[_[28]||(_[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:P},_[27]||(_[27]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",Dl,[e("div",null,[_[29]||(_[29]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),h(e("input",{"onUpdate:modelValue":_[8]||(_[8]=W=>ae.value.name=W),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[z,ae.value.name]])]),e("div",null,[_[31]||(_[31]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型",-1)),e("div",zl,[x(u(ae.value.platform==="claude"?"Claude":ae.value.platform==="gemini"?"Gemini":"OpenAI")+" ",1),_[30]||(_[30]=e("span",{class:"ml-2 text-xs text-gray-500"},"(不可修改)",-1))])]),e("div",null,[_[32]||(_[32]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),h(e("textarea",{"onUpdate:modelValue":_[9]||(_[9]=W=>ae.value.description=W),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[z,ae.value.description]])]),e("div",jl,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!ae.value.name||F.value,onClick:p},[F.value?(o(),n("div",Rl)):y("",!0),x(" "+u(F.value?"更新中...":"更新"),1)],8,Vl),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:P},"取消")])])])])):y("",!0)]))}},Ll={key:0,class:"modal fixed inset-0 z-[60] flex items-center justify-center p-3 sm:p-4"},El={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"},Nl={class:"mb-4 flex items-center justify-between sm:mb-6"},ql={class:"flex items-center gap-2 sm:gap-3"},Wl={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Gl={class:"flex items-center gap-2"},Fl=["disabled"],Ql={key:0,class:"py-8 text-center"},Bl={key:1,class:"rounded-lg bg-gray-50 py-8 text-center dark:bg-gray-800"},Hl={key:2},Jl={class:"mb-4 space-y-3"},Yl={class:"rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-800"},Zl={class:"mb-3 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},Xl={class:"flex items-center gap-2"},eo={class:"flex gap-1"},to={class:"flex flex-1 items-center gap-2 lg:max-w-md"},so={class:"relative flex-1"},ao={class:"flex gap-1"},ro={class:"flex flex-wrap items-center justify-between gap-2"},lo={class:"flex flex-wrap items-center gap-2"},oo=["disabled"],no=["disabled"],io=["disabled"],uo=["disabled"],po={class:"flex items-center gap-2 rounded-md bg-purple-50 px-3 py-1.5 dark:bg-purple-900/20"},go={class:"text-xs font-medium text-purple-700 dark:text-purple-300"},co={class:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"},mo={key:0,class:"absolute -left-2 -top-2 z-10"},yo=["title"],xo={class:"flex flex-col gap-3"},fo={class:"flex items-start justify-between gap-2"},bo=["title"],vo={class:"flex items-center gap-1"},ko=["onClick"],ho=["disabled","onClick"],wo={key:0,class:"loading-spinner-sm"},$o={key:1,class:"fas fa-redo"},Ao=["disabled","onClick"],Co={key:0,class:"loading-spinner-sm"},Uo={key:1,class:"fas fa-trash"},Io={class:"flex flex-wrap items-center gap-3 text-xs text-gray-600 dark:text-gray-400"},To={key:0},Ko={key:0,class:"mt-4 flex items-center justify-between"},_o={class:"text-sm text-gray-600 dark:text-gray-400"},Po={class:"flex items-center gap-2"},Mo=["disabled"],So=["disabled"],Do={class:"px-3 py-1.5 text-sm font-medium text-gray-700 dark:text-gray-300"},zo=["disabled"],jo=["disabled"],Vo={__name:"ApiKeyManagementModal",props:{accountId:{type:String,required:!0},accountName:{type:String,default:""}},emits:["close","refresh"],setup(J,{emit:Me}){const m=J,Q=Me,U=$(!0),H=$(!1),V=$(null),K=$(null),f=$([]),k=$(1),F=$(15),ee=$(!1),ae=$("all"),ge=$(""),Z=$("fuzzy"),q=$(!1),X=B=>!B||B.length<12?B:`${B.substring(0,8)}...${B.substring(B.length-4)}`,w=ne(()=>{let B=f.value;if(ae.value!=="all"&&(B=B.filter(A=>A.status===ae.value)),ge.value.trim()){const A=ge.value.trim();B=B.filter(R=>{const ue=R.key;return Z.value==="exact"?ue===A:ue.toLowerCase().includes(A.toLowerCase())})}return B}),p=ne(()=>w.value.length),P=ne(()=>Math.ceil(p.value/F.value)),te=ne(()=>{const B=(k.value-1)*F.value,A=B+F.value;return w.value.slice(B,A)}),Y=ne(()=>f.value.filter(B=>B.status==="active").length),_=ne(()=>f.value.filter(B=>B.status==="error").length),W=async()=>{H.value=!0;try{const A=(await O.get(`/admin/droid-accounts/${m.accountId}`)).data;let R=[];if(Array.isArray(A.apiKeys))R=A.apiKeys;else if(typeof A.apiKeys=="string")try{R=JSON.parse(A.apiKeys)}catch(G){console.error("Failed to parse apiKeys:",G)}const ue=R.map(G=>typeof G=="string"?{key:G,usageCount:0,status:"active",lastUsedAt:null,errorMessage:""}:typeof G=="object"&&G!==null?{key:G.key||G.apiKey||"",usageCount:G.usageCount||G.count||0,status:G.status||"active",lastUsedAt:G.lastUsedAt||G.lastUsed||null,errorMessage:G.errorMessage||""}:{key:String(G),usageCount:0,status:"active",lastUsedAt:null,errorMessage:""});f.value=ue.sort((G,g)=>G.lastUsedAt&&g.lastUsedAt?new Date(g.lastUsedAt)-new Date(G.lastUsedAt):G.lastUsedAt&&!g.lastUsedAt?-1:!G.lastUsedAt&&g.lastUsedAt?1:(g.usageCount||0)-(G.usageCount||0))}catch(B){console.error("Failed to load API keys:",B),j("加载 API Key 失败","error")}finally{H.value=!1,k.value=1}},ve=async B=>{var A,R;if(confirm(`确定要删除 API Key "${X(B.key)}" 吗?`)){V.value=B.key;try{const ue={removeApiKeys:[B.key],apiKeyUpdateMode:"delete"};await O.put(`/admin/droid-accounts/${m.accountId}`,ue),j("API Key 已删除","success"),await W(),Q("refresh")}catch(ue){console.error("Failed to delete API key:",ue),j(((R=(A=ue.response)==null?void 0:A.data)==null?void 0:R.error)||"删除 API Key 失败","error")}finally{V.value=null}}},ie=async B=>{var A,R;if(confirm(`确定要重置 API Key "${X(B.key)}" 的状态吗?这将清除错误信息并恢复为正常状态。`)){K.value=B.key;try{const ue={apiKeys:[{key:B.key,status:"active",errorMessage:""}],apiKeyUpdateMode:"update"};await O.put(`/admin/droid-accounts/${m.accountId}`,ue),j("API Key 状态已重置","success"),await W(),Q("refresh")}catch(ue){console.error("Failed to reset API key status:",ue),j(((R=(A=ue.response)==null?void 0:A.data)==null?void 0:R.error)||"重置 API Key 状态失败","error")}finally{K.value=null}}},L=async()=>{var A,R;const B=f.value.filter(ue=>ue.status==="error");if(B.length===0){j("没有异常状态的 API Key","warning");return}if(confirm(`确定要删除所有 ${B.length} 个异常状态的 API Key 吗?此操作不可恢复!`)){q.value=!0;try{const G={removeApiKeys:B.map(g=>g.key),apiKeyUpdateMode:"delete"};await O.put(`/admin/droid-accounts/${m.accountId}`,G),j(`成功删除 ${B.length} 个异常 API Key`,"success"),await W(),Q("refresh")}catch(ue){console.error("Failed to delete error API keys:",ue),j(((R=(A=ue.response)==null?void 0:A.data)==null?void 0:R.error)||"批量删除失败","error")}finally{q.value=!1}}},C=async()=>{var B,A;if(f.value.length===0){j("没有可删除的 API Key","warning");return}if(confirm(`确定要删除所有 ${f.value.length} 个 API Key 吗?此操作不可恢复!
|
||
|
||
请再次确认:这将删除该账户下的所有 API Key。`)&&confirm("最后确认:真的要删除所有 API Key 吗?")){q.value=!0;try{const R=f.value.map(G=>G.key),ue={removeApiKeys:R,apiKeyUpdateMode:"delete"};await O.put(`/admin/droid-accounts/${m.accountId}`,ue),j(`成功删除所有 ${R.length} 个 API Key`,"success"),await W(),Q("refresh")}catch(R){console.error("Failed to delete all API keys:",R),j(((A=(B=R.response)==null?void 0:B.data)==null?void 0:A.error)||"批量删除失败","error")}finally{q.value=!1}}},we=B=>{let A=[],R="";if(B==="error"?(A=f.value.filter(ce=>ce.status==="error"),R=`error_api_keys_${m.accountName}_${new Date().toISOString().split("T")[0]}.txt`):(A=f.value,R=`all_api_keys_${m.accountName}_${new Date().toISOString().split("T")[0]}.txt`),A.length===0){j("没有可导出的 API Key","warning");return}const ue=A.map(ce=>ce.key).join(`
|
||
`),G=new Blob([ue],{type:"text/plain;charset=utf-8"}),g=URL.createObjectURL(G),s=document.createElement("a");s.href=g,s.download=R,document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(g),j(`成功导出 ${A.length} 个 API Key`,"success")},de=async B=>{if(typeof navigator<"u"&&navigator.clipboard&&typeof navigator.clipboard.writeText=="function"&&(typeof window>"u"||window.isSecureContext!==!1)){await navigator.clipboard.writeText(B);return}if(typeof document>"u")throw new Error("clipboard unavailable");const R=document.createElement("textarea");R.value=B,R.setAttribute("readonly",""),R.style.position="fixed",R.style.opacity="0",R.style.pointerEvents="none",document.body.appendChild(R),R.select();try{const ue=document.execCommand("copy");if(document.body.removeChild(R),!ue)throw new Error("execCommand failed")}catch(ue){throw document.body.removeChild(R),ue}},$e=async B=>{try{await de(B),j("API Key 已复制","success")}catch(A){console.error("Failed to copy:",A),j("复制失败,请手动复制","error")}},Ce=async()=>{if(!(!f.value.length||ee.value)){ee.value=!0;try{const B=f.value.map(A=>A.key).join(`
|
||
`);await de(B),j(`已复制 ${f.value.length} 条 API Key`,"success")}catch(B){console.error("Failed to copy all keys:",B),j("复制全部 API Key 失败,请手动复制","error")}finally{ee.value=!1}}},Re=B=>{if(!B)return"-";try{return new Date(B).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return"-"}};return gs(()=>{W()}),(B,A)=>(o(),Ye(Rt,{to:"body"},[U.value?(o(),n("div",Ll,[e("div",El,[e("div",Nl,[e("div",ql,[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",Wl,u(J.accountName),1)])]),e("div",Gl,[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:H.value||f.value.length===0||ee.value,onClick:Ce},[e("i",{class:I(["text-sm sm:text-base",ee.value?"fas fa-spinner fa-spin":"fas fa-clipboard-list"])},null,2),A[15]||(A[15]=e("span",null,"复制全部 Key",-1))],8,Fl),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]=R=>B.$emit("close"))},A[16]||(A[16]=[e("i",{class:"fas fa-times text-base sm:text-lg"},null,-1)]))])]),H.value?(o(),n("div",Ql,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)]))):y("",!0),!H.value&&f.value.length===0?(o(),n("div",Bl,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)]))):y("",!0),!H.value&&f.value.length>0?(o(),n("div",Hl,[e("div",Jl,[e("div",Yl,[e("div",Zl,[e("div",Xl,[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",eo,[e("button",{class:I(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",ae.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]=R=>ae.value="all")}," 全部 ("+u(f.value.length)+") ",3),e("button",{class:I(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",ae.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]=R=>ae.value="active")},[A[19]||(A[19]=e("i",{class:"fas fa-check-circle mr-1"},null,-1)),x(" 正常 ("+u(Y.value)+") ",1)],2),e("button",{class:I(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",ae.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]=R=>ae.value="error")},[A[20]||(A[20]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),x(" 异常 ("+u(_.value)+") ",1)],2)])]),e("div",to,[e("div",so,[h(e("input",{"onUpdate:modelValue":A[4]||(A[4]=R=>ge.value=R),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),[[z,ge.value]]),A[23]||(A[23]=e("i",{class:"fas fa-search absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 dark:text-gray-500"},null,-1))]),e("div",ao,[e("button",{class:I(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",Z.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]=R=>Z.value="fuzzy")},A[24]||(A[24]=[e("i",{class:"fas fa-search mr-1"},null,-1),x(" 模糊 ",-1)]),2),e("button",{class:I(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",Z.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]=R=>Z.value="exact")},A[25]||(A[25]=[e("i",{class:"fas fa-equals mr-1"},null,-1),x(" 精确 ",-1)]),2)])])]),A[35]||(A[35]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-700"},null,-1)),e("div",ro,[e("div",lo,[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:_.value===0||q.value,title:"删除所有异常状态的 API Key",onClick:L},A[26]||(A[26]=[e("i",{class:"fas fa-trash-alt mr-1"},null,-1),x(" 删除异常 ",-1)]),8,oo),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:f.value.length===0||q.value,title:"删除所有 API Key",onClick:C},A[27]||(A[27]=[e("i",{class:"fas fa-trash mr-1"},null,-1),x(" 删除全部 ",-1)]),8,no),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:_.value===0,title:"导出所有异常状态的 API Key",onClick:A[7]||(A[7]=R=>we("error"))},A[28]||(A[28]=[e("i",{class:"fas fa-download mr-1"},null,-1),x(" 导出异常 ",-1)]),8,io),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:f.value.length===0,title:"导出所有 API Key",onClick:A[8]||(A[8]=R=>we("all"))},A[29]||(A[29]=[e("i",{class:"fas fa-file-export mr-1"},null,-1),x(" 导出全部 ",-1)]),8,uo)]),e("div",po,[A[34]||(A[34]=e("i",{class:"fas fa-info-circle text-purple-500 dark:text-purple-400"},null,-1)),e("span",go,[A[32]||(A[32]=x(" 显示 ",-1)),e("strong",null,u(w.value.length),1),A[33]||(A[33]=x(" 个 ",-1))])])])])]),e("div",co,[(o(!0),n(be,null,qe(te.value,(R,ue)=>(o(),n("div",{key:ue,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"},[(R.status==="error"||R.status==="disabled")&&R.errorMessage?(o(),n("div",mo,[e("span",{class:I(["inline-flex items-center justify-center rounded-full px-2 py-0.5 text-[10px] font-semibold shadow-sm",[R.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:`错误状态码: ${R.errorMessage}`},u(R.errorMessage),11,yo)])):y("",!0),e("div",xo,[e("div",fo,[e("span",{class:"flex-1 break-all font-mono text-xs font-medium text-gray-900 dark:text-gray-100",title:R.key},u(X(R.key)),9,bo),e("div",vo,[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:G=>$e(R.key)},A[36]||(A[36]=[e("i",{class:"fas fa-copy"},null,-1)]),8,ko),R.status==="error"||R.status==="disabled"?(o(),n("button",{key:0,class:I(["text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-50",[R.status==="error"?"text-orange-500 hover:text-orange-700 dark:text-orange-400 dark:hover:text-orange-300":"text-yellow-500 hover:text-yellow-700 dark:text-yellow-400 dark:hover:text-yellow-300"]]),disabled:K.value===R.key,title:"重置状态",onClick:G=>ie(R)},[K.value===R.key?(o(),n("div",wo)):(o(),n("i",$o))],10,ho)):y("",!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:V.value===R.key,onClick:G=>ve(R)},[V.value===R.key?(o(),n("div",Co)):(o(),n("i",Uo))],8,Ao)])]),e("div",Io,[e("div",null,[e("span",{class:I([R.status==="active"?"text-green-600 dark:text-green-400":R.status==="error"?"text-red-600 dark:text-red-400":"text-yellow-600 dark:text-yellow-400"])},[e("i",{class:I(["mr-1",[R.status==="active"?"fas fa-check-circle":R.status==="error"?"fas fa-exclamation-triangle":"fas fa-exclamation-circle"]])},null,2),x(" "+u(R.status==="active"?"正常":R.status==="error"?"异常":R.status==="disabled"?"禁用":R.status||"未知"),1)],2)]),e("div",null,[e("span",null,[A[37]||(A[37]=x("使用: ",-1)),e("strong",null,u(R.usageCount||0),1),A[38]||(A[38]=x("次",-1))])]),R.lastUsedAt?(o(),n("div",To,[e("span",null,u(Re(R.lastUsedAt)),1)])):y("",!0)])])]))),128))]),P.value>1?(o(),n("div",Ko,[e("div",_o," 显示 "+u((k.value-1)*F.value+1)+"-"+u(Math.min(k.value*F.value,p.value))+" 项,共 "+u(p.value)+" 项 ",1),e("div",Po,[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]=R=>k.value=1)},A[39]||(A[39]=[e("i",{class:"fas fa-angle-double-left"},null,-1)]),8,Mo),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]=R=>k.value--)},A[40]||(A[40]=[e("i",{class:"fas fa-angle-left"},null,-1)]),8,So),e("span",Do,u(k.value)+" / "+u(P.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===P.value,onClick:A[11]||(A[11]=R=>k.value++)},A[41]||(A[41]=[e("i",{class:"fas fa-angle-right"},null,-1)]),8,zo),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===P.value,onClick:A[12]||(A[12]=R=>k.value=P.value)},A[42]||(A[42]=[e("i",{class:"fas fa-angle-double-right"},null,-1)]),8,jo)])])):y("",!0)])):y("",!0)])])):y("",!0)]))}},Ro={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"},Lo={class:"mb-4 flex items-center justify-between sm:mb-6"},Eo={class:"flex items-center gap-2 sm:gap-3"},No={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},qo={key:0,class:"mb-4 flex items-center justify-center sm:mb-8"},Wo={class:"flex items-center space-x-2 sm:space-x-4"},Go={class:"flex items-center"},Fo={class:"flex items-center"},Qo={key:1},Bo={class:"space-y-6"},Ho={key:0},Jo={class:"space-y-3"},Yo={class:"grid grid-cols-2 gap-2 sm:grid-cols-4"},Zo={class:"p-3"},Xo={class:"flex items-center justify-between"},en={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-indigo-500"},tn={class:"p-3"},sn={class:"flex items-center justify-between"},an={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-emerald-500"},rn={class:"p-3"},ln={class:"flex items-center justify-between"},on={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-blue-500"},nn={class:"p-3"},dn={class:"flex items-center justify-between"},un={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-rose-500"},pn={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"},gn={class:"grid grid-cols-2 gap-2 sm:grid-cols-3"},cn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-indigo-500"},mn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},yn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-orange-500"},xn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-cyan-500"},fn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-emerald-500"},bn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-teal-500"},vn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},kn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},hn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-amber-500"},wn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-rose-500"},$n={key:1},An={class:"flex flex-wrap gap-4"},Cn={class:"flex cursor-pointer items-center"},Un={class:"text-sm text-gray-700 dark:text-gray-300"},In={key:0},Tn={key:0,class:"flex cursor-pointer items-center"},Kn={class:"flex cursor-pointer items-center"},_n={key:1,class:"flex cursor-pointer items-center"},Pn={key:0,class:"mt-1 text-xs text-red-500"},Mn={class:"flex gap-4"},Sn={class:"flex cursor-pointer items-center"},Dn={class:"flex cursor-pointer items-center"},zn={class:"flex cursor-pointer items-center"},jn={key:2},Vn={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Rn={key:0,class:"mt-3"},On=["min"],Ln={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},En={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Nn={key:3},qn={class:"flex gap-2"},Wn={class:"flex-1"},Gn={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},Fn={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},Qn=["value"],Bn={class:"text-sm text-gray-700 dark:text-gray-200"},Hn={key:4},Jn={key:5,class:"space-y-4"},Yn={key:0,class:"mt-1 text-xs text-red-500"},Zn={key:0,class:"mt-1 text-xs text-red-500"},Xn={key:0,class:"mt-1 text-xs text-red-500"},ei={key:6,class:"space-y-4"},ti={key:0,class:"mt-1 text-xs text-red-500"},si={key:0,class:"mt-1 text-xs text-red-500"},ai={key:0,class:"mt-1 text-xs text-red-500"},ri={class:"flex flex-wrap gap-2"},li=["value"],oi={class:"text-sm text-gray-700 dark:text-gray-300"},ni={key:7},ii={class:"mb-3"},di={class:"inline-flex cursor-pointer items-center"},ui={key:0},pi={key:8,class:"space-y-4"},gi={key:0,class:"mt-1 text-xs text-red-500"},ci={key:0,class:"mt-1 text-xs text-red-500"},mi={class:"grid grid-cols-2 gap-4"},yi={class:"mb-4 flex gap-2"},xi={key:0},fi={class:"mb-3 grid grid-cols-2 gap-2"},bi=["value"],vi={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},ki={class:"text-xs text-gray-500 dark:text-gray-400"},hi={key:0},wi={key:1},$i={class:"mb-3 space-y-2"},Ai=["onUpdate:modelValue"],Ci=["onUpdate:modelValue"],Ui=["onClick"],Ii={class:"mt-3 flex flex-wrap gap-2"},Ti={class:"mb-3"},Ki={class:"inline-flex cursor-pointer items-center"},_i={key:0},Pi={key:9,class:"space-y-4"},Mi={class:"relative"},Si=["type"],Di={key:10,class:"space-y-4"},zi={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},ji={class:"relative"},Vi=["type"],Ri={key:11},Oi={class:"flex gap-4"},Li={class:"flex cursor-pointer items-center"},Ei={class:"flex cursor-pointer items-center"},Ni={key:12,class:"mt-4"},qi={class:"flex items-start"},Wi={key:13,class:"mt-4"},Gi={class:"flex items-start"},Fi={class:"ml-3"},Qi={key:0,class:"mt-1"},Bi={class:"flex items-center justify-between"},Hi={class:"text-xs text-green-600 dark:text-green-400"},Ji=["disabled"],Yi={key:0,class:"fas fa-trash-alt mr-1"},Zi={key:1,class:"loading-spinner mr-1"},Xi={key:1,class:"mt-1"},ed={key:14,class:"mt-4"},td={class:"flex items-start"},sd={class:"ml-3 flex-1"},ad={key:0,class:"mt-3"},rd={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},ld={class:"flex items-center gap-2"},od={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"},nd={class:"text-blue-600 dark:text-blue-400"},id={class:"text-gray-500 dark:text-gray-500"},dd={class:"text-blue-600 dark:text-blue-400"},ud={key:15,class:"space-y-4 rounded-lg border border-blue-200 bg-blue-50 p-4"},pd={class:"mb-4 flex items-start gap-3"},gd={key:0,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},cd={key:1,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},md={key:2,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},yd={key:3,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},xd={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"},fd={key:0,class:"text-xs text-blue-800 dark:text-blue-300"},bd={key:1,class:"text-xs text-blue-800 dark:text-blue-300"},vd={key:2,class:"text-xs text-blue-800 dark:text-blue-300"},kd={key:3,class:"text-xs text-blue-800 dark:text-blue-300"},hd={key:4,class:"text-xs text-blue-600 dark:text-blue-400"},wd={key:5,class:"text-xs text-red-600 dark:text-red-400"},$d={key:0},Ad={key:1},Cd={key:0,class:"mt-1 text-xs text-red-500"},Ud={key:2},Id={key:0,class:"mt-1 text-xs text-red-500"},Td={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Kd={key:3},_d={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"},Pd={key:0,class:"mt-1 text-xs text-red-500"},Md={class:"flex gap-3 pt-4"},Sd=["disabled"],Dd=["disabled"],zd={key:0,class:"loading-spinner mr-2"},jd={key:3,class:"space-y-6"},Vd={key:0},Rd={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"},Ld={class:"flex-1"},Ed={class:"mb-4"},Nd={class:"flex flex-wrap gap-4"},qd={class:"flex cursor-pointer items-center"},Wd={class:"flex cursor-pointer items-center"},Gd={key:0,class:"space-y-4"},Fd={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Qd={class:"flex items-start gap-3"},Bd={class:"flex-1"},Hd=["disabled"],Jd={key:0,class:"fas fa-link mr-2"},Yd={key:1,class:"loading-spinner mr-2"},Zd={key:1,class:"space-y-3"},Xd={class:"flex items-center gap-2"},e0=["value"],t0={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},s0={class:"flex items-start gap-3"},a0={class:"flex-1"},r0={class:"space-y-3"},l0={key:1,class:"space-y-4"},o0={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},n0={class:"space-y-4"},i0={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},d0={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},u0={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},p0={key:1,class:"mt-1 text-xs text-red-500"},g0={key:0,class:"mt-3 rounded border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-700"},c0=["disabled"],m0={key:0,class:"loading-spinner mr-2"},y0={key:1,class:"fas fa-magic mr-2"},x0={class:"flex gap-3 pt-4"},f0=["disabled"],b0={key:0,class:"loading-spinner mr-2"},v0={key:4,class:"space-y-6"},k0={class:"flex gap-4"},h0={class:"flex cursor-pointer items-center"},w0={class:"flex cursor-pointer items-center"},$0={class:"flex cursor-pointer items-center"},A0={key:0},C0={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},U0={key:0,class:"mt-3"},I0=["min"],T0={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},K0={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},_0={key:1},P0={class:"flex gap-2"},M0={class:"flex-1"},S0={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},D0={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},z0=["value"],j0={class:"text-sm text-gray-700 dark:text-gray-200"},V0={key:2},R0={key:3},O0={class:"flex gap-4"},L0={class:"flex cursor-pointer items-center"},E0={class:"flex cursor-pointer items-center"},N0={key:4,class:"mt-4"},q0={class:"flex items-start"},W0={key:5,class:"mt-4"},G0={class:"flex items-start"},F0={class:"ml-3"},Q0={key:0,class:"mt-1"},B0={class:"flex items-center justify-between"},H0={class:"text-xs text-green-600 dark:text-green-400"},J0=["disabled"],Y0={key:0,class:"fas fa-trash-alt mr-1"},Z0={key:1,class:"loading-spinner mr-1"},X0={key:1,class:"mt-1"},eu={key:6,class:"mt-4"},tu={class:"flex items-start"},su={class:"ml-3 flex-1"},au={key:0,class:"mt-3"},ru={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},lu={class:"flex items-center gap-2"},ou={class:"block w-full select-all break-all rounded bg-gray-100 px-3 py-2 font-mono text-xs text-gray-700 dark:bg-gray-900 dark:text-gray-300"},nu={class:"text-blue-600 dark:text-blue-400"},iu={class:"text-gray-500 dark:text-gray-500"},du={class:"text-blue-600 dark:text-blue-400"},uu={key:7,class:"space-y-4"},pu={class:"grid grid-cols-2 gap-4"},gu={key:0,class:"rounded-lg bg-gray-50 p-4 dark:bg-gray-800"},cu={class:"mb-2 flex items-center justify-between"},mu={class:"text-sm text-gray-500 dark:text-gray-400"},yu={class:"relative h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},xu={class:"mt-2 flex items-center justify-between text-xs"},fu={class:"text-gray-500 dark:text-gray-400"},bu={class:"text-gray-500 dark:text-gray-400"},vu={class:"mb-4 flex gap-2"},ku={key:0},hu={class:"mb-3 grid grid-cols-2 gap-2"},wu=["value"],$u={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Au={class:"text-xs text-gray-500 dark:text-gray-400"},Cu={key:0},Uu={key:1},Iu={class:"mb-3 space-y-2"},Tu=["onUpdate:modelValue"],Ku=["onUpdate:modelValue"],_u=["onClick"],Pu={class:"mt-3 flex flex-wrap gap-2"},Mu={class:"mb-3"},Su={class:"inline-flex cursor-pointer items-center"},Du={key:0},zu={key:8,class:"space-y-4"},ju={class:"relative"},Vu=["type"],Ru={class:"grid grid-cols-2 gap-4"},Ou={key:9,class:"space-y-4"},Lu={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},Eu={class:"relative"},Nu=["type"],qu={key:10,class:"space-y-4"},Wu={class:"mb-3"},Gu={class:"inline-flex cursor-pointer items-center"},Fu={key:0},Qu={key:11,class:"space-y-4"},Bu={key:0,class:"mt-1 text-xs text-red-500"},Hu={key:0,class:"mt-1 text-xs text-red-500"},Ju={key:0,class:"mt-1 text-xs text-red-500"},Yu={class:"flex flex-wrap gap-2"},Zu=["value"],Xu={class:"text-sm text-gray-700 dark:text-gray-300"},ep={key:12,class:"rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},tp={class:"mb-4 flex items-start gap-3"},sp={class:"flex-1"},ap={class:"mb-2 flex items-center justify-between"},rp={class:"mb-1 text-sm text-purple-800 dark:text-purple-200"},lp={class:"space-y-4"},op={key:0,class:"mt-1 text-xs text-red-500"},np={class:"space-y-2"},ip={class:"flex items-center justify-between"},dp={class:"text-xs text-purple-600 dark:text-purple-300"},up={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"},pp=["onClick"],gp={class:"text-xs text-purple-700 dark:text-purple-300"},cp={key:13,class:"rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-700 dark:bg-amber-900/30"},mp={class:"space-y-4"},yp={class:"flex gap-3 pt-4"},xp=["disabled"],fp={key:0,class:"loading-spinner mr-2"},bp={__name:"AccountForm",props:{account:{type:Object,default:null}},emits:["close","success","platform-changed"],setup(J,{emit:Me}){var ks,es,Ft,ts,hs,ss,Qt,ws,as,Bt,rs,ls,$s,As,Cs,os,Us,ns,Is,Ts,is,Ks,_s,Ps,Ms,ds,zt,ft,bt,vt,kt,Ht;const m=J,Q=Me,U=Qs(),{showConfirmModal:H,confirmOptions:V,showConfirm:K,handleConfirm:f,handleCancel:k}=Fs(),F=ne(()=>!!m.account),ee=$(!0),ae=$(null),ge=$(1),Z=$(!1),q=$(!1),X=$(!1),w=$(!1),p=$(""),P=$(""),te=$(!1),Y=$(""),_=$("manual"),W=$(""),ve=$(!1),ie=$(""),L=$(!1),C=$({current:0,total:0}),we=ne(()=>W.value.split(`
|
||
`).map(d=>d.trim()).filter(d=>d.length>0).length),de=$(""),$e=$(!1),Ce=$(""),Re=$(!1),B=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":"",A=()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""}),R=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 se=typeof t.host=="string"?t.host.trim():t.host!==void 0&&t.host!==null?String(t.host).trim():"",oe=t.port!==void 0&&t.port!==null?String(t.port).trim():"",i=typeof t.type=="string"&&t.type.trim()?t.type.trim():"socks5",re=typeof t.username=="string"?t.username:t.username!==void 0&&t.username!==null?String(t.username):"",le=typeof t.password=="string"?t.password:t.password!==void 0&&t.password!==null?String(t.password):"";return{type:i,host:se,port:oe,username:re,password:le}},ue=d=>{const t=R(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||""}:A()},G=d=>{if(!d||!d.enabled)return null;const t=(d.host||"").trim(),se=Number.parseInt(d.port,10);if(!t||Number.isNaN(se)||se<=0)return null;const oe=d.username?d.username.trim():"",i=d.password?d.password.trim():"";return{type:d.type||"socks5",host:t,port:se,username:oe||null,password:i||null}},g=()=>{var d;return ue((d=m.account)==null?void 0:d.proxy)},s=$({platform:((ks=m.account)==null?void 0:ks.platform)||"claude",addType:(()=>{var t;const d=((t=m.account)==null?void 0:t.platform)||"claude";return d==="gemini"||d==="openai"||d==="claude"?"oauth":"manual"})(),name:((es=m.account)==null?void 0:es.name)||"",description:((Ft=m.account)==null?void 0:Ft.description)||"",accountType:((ts=m.account)==null?void 0:ts.accountType)||"shared",authenticationMethod:((hs=m.account)==null?void 0:hs.authenticationMethod)||"",subscriptionType:"claude_max",autoStopOnWarning:((ss=m.account)==null?void 0:ss.autoStopOnWarning)||!1,useUnifiedUserAgent:((Qt=m.account)==null?void 0:Qt.useUnifiedUserAgent)||!1,useUnifiedClientId:((ws=m.account)==null?void 0:ws.useUnifiedClientId)||!1,unifiedClientId:((as=m.account)==null?void 0:as.unifiedClientId)||"",groupId:"",groupIds:[],projectId:((Bt=m.account)==null?void 0:Bt.projectId)||"",accessToken:"",refreshToken:"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:g(),apiUrl:((rs=m.account)==null?void 0:rs.apiUrl)||"",apiKey:((ls=m.account)==null?void 0:ls.apiKey)||"",priority:(($s=m.account)==null?void 0:$s.priority)||50,endpointType:((As=m.account)==null?void 0:As.endpointType)||"anthropic",baseApi:((Cs=m.account)==null?void 0:Cs.baseApi)||"",baseUrl:((os=m.account)==null?void 0:os.baseUrl)||"https://generativelanguage.googleapis.com",rateLimitDuration:((Us=m.account)==null?void 0:Us.rateLimitDuration)||60,supportedModels:(()=>{var t;const d=(t=m.account)==null?void 0:t.supportedModels;return d?typeof d=="object"&&!Array.isArray(d)?Object.keys(d):Array.isArray(d)?d:[]:[]})(),userAgent:((ns=m.account)==null?void 0:ns.userAgent)||"",enableRateLimit:m.account?m.account.rateLimitDuration>0:!0,dailyQuota:((Is=m.account)==null?void 0:Is.dailyQuota)||0,dailyUsage:((Ts=m.account)==null?void 0:Ts.dailyUsage)||0,quotaResetTime:((is=m.account)==null?void 0:is.quotaResetTime)||"00:00",maxConcurrentTasks:((Ks=m.account)==null?void 0:Ks.maxConcurrentTasks)||0,accessKeyId:((_s=m.account)==null?void 0:_s.accessKeyId)||"",secretAccessKey:((Ps=m.account)==null?void 0:Ps.secretAccessKey)||"",region:((Ms=m.account)==null?void 0:Ms.region)||"",sessionToken:((ds=m.account)==null?void 0:ds.sessionToken)||"",defaultModel:((zt=m.account)==null?void 0:zt.defaultModel)||"",smallFastModel:((ft=m.account)==null?void 0:ft.smallFastModel)||"",azureEndpoint:((bt=m.account)==null?void 0:bt.azureEndpoint)||"",apiVersion:((vt=m.account)==null?void 0:vt.apiVersion)||"",deploymentName:((kt=m.account)==null?void 0:kt.deploymentName)||"",expireDuration:(()=>{var d;return(d=m.account)!=null&&d.expiresAt?"custom":""})(),customExpireDate:(()=>{var d;return(d=m.account)!=null&&d.expiresAt?new Date(m.account.expiresAt).toISOString().slice(0,16):""})(),expiresAt:((Ht=m.account)==null?void 0:Ht.expiresAt)||null}),ce=$("whitelist"),Ae=$(["claude-sonnet-4-20250514","claude-sonnet-4-5-20250929","claude-3-5-haiku-20241022"]),Le=[{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"}],Oe=$([]),$t=()=>{var d;if((d=m.account)!=null&&d.supportedModels)if(typeof m.account.supportedModels=="object"&&!Array.isArray(m.account.supportedModels)){const t=Object.entries(m.account.supportedModels);t.every(([oe,i])=>oe===i)?(ce.value="whitelist",Ae.value=t.map(([oe])=>oe),Oe.value=t.map(([oe,i])=>({from:oe,to:i}))):(ce.value="mapping",Oe.value=t.map(([oe,i])=>({from:oe,to:i})))}else Array.isArray(m.account.supportedModels)&&(ce.value="whitelist",Ae.value=m.account.supportedModels,Oe.value=m.account.supportedModels.map(t=>({from:t,to:t})))},dt=d=>{if(!d||typeof d!="string")return[];const t=d.split(/\r?\n/).map(oe=>oe.trim()).filter(oe=>oe.length>0);return t.length===0?[]:Array.from(new Set(t))},Ge=[{value:"append",label:"追加模式",description:"保留现有 Key,并在末尾追加新 Key 列表。"},{value:"replace",label:"覆盖模式",description:"先清空旧 Key,再写入上方的新 Key 列表。"},{value:"delete",label:"删除模式",description:"输入要移除的 Key,可精准删除失效或被封禁的 Key。"}],ut=ne(()=>{const d=Math.max(Ge.findIndex(se=>se.value===s.value.apiKeyUpdateMode),0),t=100/Ge.length;return{width:`${t}%`,left:`${d*t}%`}}),lt=ne(()=>{const d=Ge.find(t=>t.value===s.value.apiKeyUpdateMode);return d?d.label:Ge[0].label}),ot=ne(()=>{const d=Ge.find(t=>t.value===s.value.apiKeyUpdateMode);return d?d.description:Ge[0].description}),T=$({name:"",refreshToken:"",accessToken:"",apiKeys:"",apiUrl:"",apiKey:"",baseApi:"",accessKeyId:"",secretAccessKey:"",region:"",azureEndpoint:"",deploymentName:""}),_t=ne(()=>{var d;return((d=s.value.name)==null?void 0:d.trim())&&s.value.platform}),At=ne(()=>p.value&&P.value.trim()),nt=()=>{var d;return!F.value||!((d=m.account)!=null&&d.id)?0:typeof s.value.dailyUsage=="number"?s.value.dailyUsage:0},pt=ne(()=>!s.value.dailyQuota||s.value.dailyQuota<=0?0:nt()/s.value.dailyQuota*100),Pt=ne(()=>{if(!m.account||m.account.platform!=="droid")return 0;let d=0;if(Array.isArray(m.account.apiKeys))d=m.account.apiKeys.length;else if(typeof m.account.apiKeys=="string")try{const se=JSON.parse(m.account.apiKeys);Array.isArray(se)&&(d=se.length)}catch{d=0}const t=m.account.apiKeyCount??m.account.apiKeysCount??m.account.api_key_count??d;return Number(t)||0}),v=ne(()=>{var t,se,oe;if(!F.value||s.value.platform!=="droid")return!1;const d=s.value.authenticationMethod||((t=m.account)==null?void 0:t.authenticationMethod)||((se=m.account)==null?void 0:se.authMethod)||((oe=m.account)==null?void 0:oe.authentication_mode)||"";return typeof d!="string"?!1:d.trim().toLowerCase()==="api_key"}),c=async()=>{var d;if(!(!F.value||!((d=m.account)!=null&&d.id)))try{const t=await O.get(`/admin/claude-console-accounts/${m.account.id}/usage`);t&&(s.value.dailyUsage=t.dailyUsage||0)}catch{}},D=d=>{Ce.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")},Fe=async()=>{if(T.value.name="",!_t.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)){j("请选择一个分组","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"&&ge.value===1&&s.value.addType==="oauth"&&(!s.value.projectId||s.value.projectId.trim()==="")&&!await K("项目 ID 未填写",`您尚未填写项目 ID。
|
||
|
||
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
|
||
如果您使用的是普通个人账号,可以继续不填写。`,"继续","返回填写"))&&(ge.value=2)},yt=async()=>{X.value=!0;try{const d=G(s.value.proxy),t=d?{proxy:d}:{},se=await U.generateClaudeSetupTokenUrl(t);p.value=se.authUrl,Y.value=se.sessionId}catch(d){j(d.message||"生成Setup Token授权链接失败","error")}finally{X.value=!1}},Ot=()=>{p.value="",P.value="",yt()},it=async()=>{try{await navigator.clipboard.writeText(p.value),te.value=!0,j("链接已复制","success"),setTimeout(()=>{te.value=!1},2e3)}catch{const t=document.createElement("textarea");t.value=p.value,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")?(te.value=!0,j("链接已复制","success")):j("复制失败,请手动复制","error")}catch{j("复制失败,请手动复制","error")}document.body.removeChild(t),setTimeout(()=>{te.value=!1},2e3)}},tt=async()=>{if(At.value){w.value=!0;try{const d={sessionId:Y.value,callbackUrl:P.value.trim()},t=G(s.value.proxy);t&&(d.proxy=t);const se=await U.exchangeClaudeSetupTokenCode(d);s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=xt()),await Ut(se)}catch(d){j(d.message||"Setup Token授权失败,请检查授权码是否正确","error")}finally{w.value=!1}}},mt=async()=>{const d=W.value.split(`
|
||
`).map(re=>re.trim()).filter(re=>re.length>0);if(d.length===0){ie.value="请输入至少一个 sessionKey";return}ve.value=!0,ie.value="",C.value={current:0,total:d.length};const t=s.value.addType==="setup-token",se=G(s.value.proxy),oe=[],i=[];for(let re=0;re<d.length;re++){C.value.current=re+1;try{const le={sessionKey:d[re],...se&&{proxy:se}};let Se;t?Se=await U.oauthSetupTokenWithCookie(le):Se=await U.oauthWithCookie(le),oe.push(Se)}catch(le){i.push({index:re+1,key:d[re].substring(0,20)+"...",error:le.message})}}if(C.value={current:0,total:0},oe.length>0)try{await Ut(oe)}finally{ve.value=!1}else ve.value=!1;i.length>0&&oe.length===0?ie.value="全部授权失败,请检查 sessionKey 是否有效":i.length>0&&(ie.value=`${i.length} 个授权失败`)},Mt=()=>{W.value="",ie.value="",L.value=!1,C.value={current:0,total:0}},Ct=()=>{_.value==="manual"?Mt():(p.value="",P.value="",Y.value="")},Lt=(d,t,se)=>{var le,Se;const oe=G(s.value.proxy),i=d.claudeAiOauth||d,re={name:t,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:oe,claudeAiOauth:i,priority:s.value.priority||50,autoStopOnWarning:s.value.autoStopOnWarning||!1,useUnifiedUserAgent:s.value.useUnifiedUserAgent||!1,useUnifiedClientId:s.value.useUnifiedClientId||!1,unifiedClientId:se,subscriptionInfo:{accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}};if(i){const ze={},_e=i.extInfo;_e!=null&&_e.org_uuid&&(ze.org_uuid=_e.org_uuid),_e!=null&&_e.account_uuid&&(ze.account_uuid=_e.account_uuid),_e||((le=i.organization)!=null&&le.uuid&&(ze.org_uuid=i.organization.uuid),(Se=i.account)!=null&&Se.uuid&&(ze.account_uuid=i.account.uuid)),Object.keys(ze).length>0&&(re.extInfo=ze)}return re},Ut=async d=>{var t,se,oe,i,re,le,Se,ze,_e;Z.value=!0;try{const M=s.value.platform;if(M==="claude"&&Array.isArray(d)){const Ke=d,Pe=Ke.length>1,Te=s.value.name,rt=[],He=[];for(let gt=0;gt<Ke.length;gt++){const a=Ke[gt],r=Pe?`${Te}_${gt+1}`:Te,b=s.value.useUnifiedClientId?xt():"",l=Lt(a,r,b);try{const E=await U.createClaudeAccount(l);rt.push(E)}catch(E){He.push({name:r,error:E.message})}}if(rt.length>0){const gt=Pe?`成功创建 ${rt.length}/${Ke.length} 个账户`:"账户创建成功";j(gt,"success"),Q("success",rt[0])}He.length>0&&j(`${He.length} 个账户创建失败`,"error");return}const S=Array.isArray(d)?d[0]:d;s.value.platform==="claude"&&s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=xt());const xe=G(s.value.proxy),N={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:xe};if(M==="claude"){const Ke=S.claudeAiOauth||S;if(N.claudeAiOauth=Ke,Ke){const Pe={},Te=Ke.extInfo;if(Te&&typeof Te=="object"&&(Te.org_uuid&&(Pe.org_uuid=Te.org_uuid),Te.account_uuid&&(Pe.account_uuid=Te.account_uuid)),!Te){const rt=(t=Ke.organization)==null?void 0:t.uuid,He=(se=Ke.account)==null?void 0:se.uuid;rt&&(Pe.org_uuid=rt),He&&(Pe.account_uuid=He)}Object.keys(Pe).length>0&&(N.extInfo=Pe)}N.priority=s.value.priority||50,N.autoStopOnWarning=s.value.autoStopOnWarning||!1,N.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,N.useUnifiedClientId=s.value.useUnifiedClientId||!1,N.unifiedClientId=s.value.unifiedClientId||"",N.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(M==="gemini")N.geminiOauth=S.tokens||S,s.value.projectId&&(N.projectId=s.value.projectId),N.priority=s.value.priority||50;else if(M==="openai")N.openaiOauth=S.tokens||S,N.accountInfo=S.accountInfo,N.priority=s.value.priority||50;else if(M==="droid"){const Ke=S.tokens||S||{},Pe={accessToken:Ke.accessToken||Ke.access_token||"",refreshToken:Ke.refreshToken||Ke.refresh_token||"",expiresAt:Ke.expiresAt||Ke.expires_at||"",expiresIn:Ke.expiresIn||Ke.expires_in||null,tokenType:Ke.tokenType||Ke.token_type||"Bearer",organizationId:Ke.organizationId||Ke.organization_id||"",authenticationMethod:Ke.authenticationMethod||Ke.authentication_method||""};if(!Pe.refreshToken){Z.value=!1,j("授权成功但未返回 Refresh Token,请确认已授予离线访问权限后重试。","error");return}if(N.refreshToken=Pe.refreshToken,N.accessToken=Pe.accessToken,N.expiresAt=Pe.expiresAt,Pe.expiresIn!==null&&Pe.expiresIn!==void 0&&(N.expiresIn=Pe.expiresIn),N.priority=s.value.priority||50,N.endpointType=s.value.endpointType||"anthropic",N.platform="droid",N.tokenType=Pe.tokenType,N.authenticationMethod=Pe.authenticationMethod,Pe.organizationId&&(N.organizationId=Pe.organizationId),Ke.user){const Te=Ke.user,rt=[];typeof Te.first_name=="string"&&Te.first_name.trim()&&rt.push(Te.first_name.trim()),typeof Te.last_name=="string"&&Te.last_name.trim()&&rt.push(Te.last_name.trim());const He=rt.join(" ").trim()||(typeof Te.name=="string"?Te.name.trim():"")||(typeof Te.display_name=="string"?Te.display_name.trim():"");typeof Te.email=="string"&&Te.email.trim()&&(N.ownerEmail=Te.email.trim()),He?(N.ownerName=He,N.ownerDisplayName=He):N.ownerEmail&&(N.ownerName=N.ownerName||N.ownerEmail,N.ownerDisplayName=N.ownerDisplayName||N.ownerEmail),typeof Te.id=="string"&&Te.id.trim()&&(N.userId=Te.id.trim())}}let Ue;M==="claude"?Ue=await U.createClaudeAccount(N):M==="gemini"?Ue=await U.createGeminiAccount(N):M==="openai"?Ue=await U.createOpenAIAccount(N):M==="droid"?Ue=await U.createDroidAccount(N):Ue=await U.createGeminiAccount(N),Q("success",Ue)}catch(M){const S=((i=(oe=M.response)==null?void 0:oe.data)==null?void 0:i.error)||M.message||"账户创建失败",xe=((le=(re=M.response)==null?void 0:re.data)==null?void 0:le.suggestion)||"",N=((ze=(Se=M.response)==null?void 0:Se.data)==null?void 0:ze.errorDetails)||null;let Ue=S;xe&&(Ue+=`
|
||
${xe}`),N&&N.error_description?Ue+=`
|
||
详细信息: ${N.error_description}`:N&&N.error&&N.error.message&&(Ue+=`
|
||
详细信息: ${N.error.message}`),j(Ue,"error","",8e3)}finally{Z.value=!1,(_e=ae.value)==null||_e.resetCookieAuth()}},Ze=async()=>{var t,se,oe,i,re,le,Se,ze;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),!s.value.baseUrl||s.value.baseUrl.trim()===""?(T.value.baseUrl="请填写 API 基础地址",d=!0):s.value.baseUrl.trim().endsWith("/models")||(T.value.baseUrl="API 基础地址必须以 /models 结尾",d=!0)):dt(s.value.apiKeysInput).length===0&&(T.value.apiKeys="请至少填写一个 API Key",d=!0)),s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)&&(j("请选择一个分组","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){Z.value=!0;try{const _e=G(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:_e};if(s.value.platform==="claude"){const xe=s.value.refreshToken?6e5:31536e6;s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=xt()),M.claudeAiOauth={accessToken:s.value.accessToken,refreshToken:s.value.refreshToken||"",expiresAt:Date.now()+xe,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 xe=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()+xe},s.value.projectId&&(M.projectId=s.value.projectId),M.priority=s.value.priority||50}else if(s.value.platform==="openai"){const xe=s.value.refreshToken?6e5:31536e6;M.openaiOauth={idToken:"",accessToken:s.value.accessToken||"",refreshToken:s.value.refreshToken,expires_in:Math.floor(xe/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 xe=dt(s.value.apiKeysInput);M.apiKeys=xe,M.authenticationMethod="api_key",M.isActive=!0,M.schedulable=!0}else{const xe=((t=s.value.accessToken)==null?void 0:t.trim())||"",N=((se=s.value.refreshToken)==null?void 0:se.trim())||"",Ue=new Date(Date.now()+8*60*60*1e3).toISOString();M.accessToken=xe,M.refreshToken=N,M.expiresAt=Ue,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=ys()||{},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 S;if(s.value.platform==="claude")S=await U.createClaudeAccount(M);else if(s.value.platform==="claude-console"||s.value.platform==="ccr")S=await U.createClaudeConsoleAccount(M);else if(s.value.platform==="droid")S=await U.createDroidAccount(M);else if(s.value.platform==="openai-responses")S=await U.createOpenAIResponsesAccount(M);else if(s.value.platform==="bedrock")S=await U.createBedrockAccount(M);else if(s.value.platform==="openai")S=await U.createOpenAIAccount(M);else if(s.value.platform==="azure_openai")S=await U.createAzureOpenAIAccount(M);else if(s.value.platform==="gemini")S=await U.createGeminiAccount(M);else if(s.value.platform==="gemini-api")S=await U.createGeminiApiAccount(M);else throw new Error(`不支持的平台: ${s.value.platform}`);Q("success",S)}catch(_e){const M=((i=(oe=_e.response)==null?void 0:oe.data)==null?void 0:i.error)||_e.message||"账户创建失败",S=((le=(re=_e.response)==null?void 0:re.data)==null?void 0:le.suggestion)||"",xe=((ze=(Se=_e.response)==null?void 0:Se.data)==null?void 0:ze.errorDetails)||null;let N=M;S&&(N+=`
|
||
${S}`),xe&&xe.error_description?N+=`
|
||
详细信息: ${xe.error_description}`:xe&&xe.error&&xe.error.message&&(N+=`
|
||
详细信息: ${xe.error.message}`),j(N,"error","",8e3)}finally{Z.value=!1}}},Xe=async()=>{var d,t,se,oe,i,re,le,Se,ze,_e;if(T.value.name="",T.value.apiKeys="",T.value.baseUrl="",!s.value.name||s.value.name.trim()===""){T.value.name="请填写账户名称";return}if(s.value.platform==="gemini-api"){const M=((d=s.value.baseUrl)==null?void 0:d.trim())||"";if(!M){T.value.baseUrl="请填写 API 基础地址";return}if(!M.endsWith("/models")){T.value.baseUrl="API 基础地址必须以 /models 结尾";return}}if(s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)){j("请选择一个分组","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 K("项目 ID 未填写",`您尚未填写项目 ID。
|
||
|
||
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
|
||
如果您使用的是普通个人账号,可以继续不填写。`,"继续保存","返回填写"))){Z.value=!0;try{const M=G(s.value.proxy),S={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:M};if(s.value.accessToken||s.value.refreshToken){const xe=((t=s.value.accessToken)==null?void 0:t.trim())||"",N=((se=s.value.refreshToken)==null?void 0:se.trim())||"";if(m.account.platform==="claude"){const Ue=s.value.refreshToken?6e5:31536e6;S.claudeAiOauth={accessToken:xe||"",refreshToken:N||"",expiresAt:Date.now()+Ue,scopes:m.account.scopes||[]}}else if(m.account.platform==="gemini"){const Ue=s.value.refreshToken?6e5:31536e6;S.geminiOauth={access_token:xe||"",refresh_token:N||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+Ue}}else if(m.account.platform==="openai"){const Ue=s.value.refreshToken?6e5:31536e6;S.openaiOauth={idToken:"",accessToken:xe||"",refreshToken:N||"",expires_in:Math.floor(Ue/1e3)},N&&N!==m.account.refreshToken&&(S.needsImmediateRefresh=!0,S.requireRefreshSuccess=!0)}else m.account.platform==="droid"&&(xe&&(S.accessToken=xe),N&&(S.refreshToken=N))}if(m.account.platform==="droid"){const xe=((oe=s.value.apiKeysInput)==null?void 0:oe.trim())||"",N=s.value.apiKeyUpdateMode||"append";if(N==="delete"){if(!xe){T.value.apiKeys="请填写需要删除的 API Key",Z.value=!1;return}const Ue=dt(xe);if(Ue.length===0){T.value.apiKeys="请填写需要删除的 API Key",Z.value=!1;return}S.removeApiKeys=Ue,S.apiKeyUpdateMode="delete"}else{if(xe){const Ue=dt(xe);if(Ue.length===0){T.value.apiKeys="请至少填写一个 API Key",Z.value=!1;return}S.apiKeys=Ue}else N==="replace"&&(S.apiKeys=[]);(N!=="append"||xe)&&(S.apiKeyUpdateMode=N)}v.value&&(S.authenticationMethod="api_key")}if(m.account.platform==="gemini"&&(S.projectId=s.value.projectId||""),m.account.platform==="droid"&&(S.priority=s.value.priority||50,S.endpointType=s.value.endpointType||"anthropic"),m.account.platform==="claude"&&(s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=xt()),S.priority=s.value.priority||50,S.autoStopOnWarning=s.value.autoStopOnWarning||!1,S.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,S.useUnifiedClientId=s.value.useUnifiedClientId||!1,S.unifiedClientId=s.value.unifiedClientId||"",S.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}),m.account.platform==="openai"&&(S.priority=s.value.priority||50),m.account.platform==="gemini"&&(S.priority=s.value.priority||50),m.account.platform==="claude-console"&&(S.apiUrl=s.value.apiUrl,s.value.apiKey&&(S.apiKey=s.value.apiKey),S.priority=s.value.priority||50,S.supportedModels=ys()||{},S.userAgent=s.value.userAgent||null,S.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0,S.dailyQuota=s.value.dailyQuota||0,S.quotaResetTime=s.value.quotaResetTime||"00:00",S.maxConcurrentTasks=s.value.maxConcurrentTasks||0),m.account.platform==="openai-responses"&&(S.baseApi=s.value.baseApi,s.value.apiKey&&(S.apiKey=s.value.apiKey),S.userAgent=s.value.userAgent||"",S.priority=s.value.priority||50,S.dailyQuota=s.value.dailyQuota||0,S.quotaResetTime=s.value.quotaResetTime||"00:00"),m.account.platform==="bedrock"&&((s.value.accessKeyId||s.value.secretAccessKey||s.value.sessionToken)&&(S.awsCredentials={},s.value.accessKeyId&&(S.awsCredentials.accessKeyId=s.value.accessKeyId),s.value.secretAccessKey&&(S.awsCredentials.secretAccessKey=s.value.secretAccessKey),s.value.sessionToken!==void 0&&(S.awsCredentials.sessionToken=s.value.sessionToken||null)),s.value.region&&(S.region=s.value.region),S.defaultModel=s.value.defaultModel||null,S.smallFastModel=s.value.smallFastModel||null,S.priority=s.value.priority||50,S.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0),m.account.platform==="azure_openai"&&(S.azureEndpoint=s.value.azureEndpoint,S.apiVersion=s.value.apiVersion||"2024-02-01",S.deploymentName=s.value.deploymentName,S.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[],S.priority=s.value.priority||50,s.value.apiKey&&s.value.apiKey.trim()&&(S.apiKey=s.value.apiKey)),m.account.platform==="gemini-api"&&(S.baseUrl=s.value.baseUrl||"https://generativelanguage.googleapis.com",s.value.apiKey&&s.value.apiKey.trim()&&(S.apiKey=s.value.apiKey),S.priority=s.value.priority||50,S.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[]),m.account.platform==="claude")await U.updateClaudeAccount(m.account.id,S);else if(m.account.platform==="claude-console")await U.updateClaudeConsoleAccount(m.account.id,S);else if(m.account.platform==="openai-responses")await U.updateOpenAIResponsesAccount(m.account.id,S);else if(m.account.platform==="bedrock")await U.updateBedrockAccount(m.account.id,S);else if(m.account.platform==="openai")await U.updateOpenAIAccount(m.account.id,S);else if(m.account.platform==="azure_openai")await U.updateAzureOpenAIAccount(m.account.id,S);else if(m.account.platform==="gemini")await U.updateGeminiAccount(m.account.id,S);else if(m.account.platform==="gemini-api")await U.updateGeminiApiAccount(m.account.id,S);else if(m.account.platform==="droid")await U.updateDroidAccount(m.account.id,S);else throw new Error(`不支持的平台: ${m.account.platform}`);Q("success")}catch(M){const S=((re=(i=M.response)==null?void 0:i.data)==null?void 0:re.error)||M.message||"账户更新失败",xe=((Se=(le=M.response)==null?void 0:le.data)==null?void 0:Se.suggestion)||"",N=((_e=(ze=M.response)==null?void 0:ze.data)==null?void 0:_e.errorDetails)||null;let Ue=S;xe&&(Ue+=`
|
||
${xe}`),N&&N.error_description?Ue+=`
|
||
详细信息: ${N.error_description}`:N&&N.error&&N.error.message&&(Ue+=`
|
||
详细信息: ${N.error.message}`),j(Ue,"error","",8e3)}finally{Z.value=!1}}};ye(()=>s.value.name,()=>{var d;T.value.name&&((d=s.value.name)!=null&&d.trim())&&(T.value.name="")}),ye(()=>s.value.accessToken,()=>{var d;T.value.accessToken&&((d=s.value.accessToken)!=null&&d.trim())&&(T.value.accessToken="")}),ye(()=>s.value.refreshToken,()=>{var d;T.value.refreshToken&&((d=s.value.refreshToken)!=null&&d.trim())&&(T.value.refreshToken="")}),ye(()=>s.value.apiUrl,()=>{var d;T.value.apiUrl&&((d=s.value.apiUrl)!=null&&d.trim())&&(T.value.apiUrl="")}),ye(()=>s.value.apiKey,()=>{var d;T.value.apiKey&&((d=s.value.apiKey)!=null&&d.trim())&&(T.value.apiKey="")}),ye(()=>s.value.azureEndpoint,()=>{var d;T.value.azureEndpoint&&((d=s.value.azureEndpoint)!=null&&d.trim())&&(T.value.azureEndpoint="")}),ye(()=>s.value.deploymentName,()=>{var d;T.value.deploymentName&&((d=s.value.deploymentName)!=null&&d.trim())&&(T.value.deploymentName="")});const St=$([]),Et=$(!1),Dt=$(!1),Be=ne(()=>{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"),St.value.filter(t=>t.platform===d)}),Nt=async()=>{Et.value=!0;try{const d=await O.get("/admin/account-groups");St.value=d.data||[]}catch{j("加载分组列表失败","error"),St.value=[]}finally{Et.value=!1}},qt=async()=>{await Nt(),j("分组列表已刷新","success")},It=()=>{Dt.value=!0},js=async()=>{await Nt()},Wt=async()=>{var t;if(!((t=m.account)!=null&&t.id))return;const d=[typeof U.fetchDroidAccounts=="function"?U.fetchDroidAccounts:null,typeof U.fetchAllAccounts=="function"?U.fetchAllAccounts:null].filter(Boolean);for(const se of d)try{await se();return}catch(oe){console.error("刷新账户列表失败:",oe)}};ye(()=>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=[])}),ye(()=>s.value.groupIds,d=>{s.value.accountType==="group"&&(d&&d.length>0?s.value.groupId=d[0]:s.value.groupId="")},{deep:!0}),ye(()=>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="",F.value||(s.value.authenticationMethod="")))}),ye(()=>s.value.apiKeyUpdateMode,(d,t)=>{d!==t&&T.value.apiKeys&&(T.value.apiKeys="")}),ye(()=>s.value.apiKeysInput,d=>{if(!T.value.apiKeys)return;const t=dt(d),se=s.value.apiKeyUpdateMode;if(se==="append"&&t.length>0){T.value.apiKeys="";return}if(se==="replace"){(t.length>0||!d||d.trim()==="")&&(T.value.apiKeys="");return}se==="delete"&&t.length>0&&(T.value.apiKeys="")}),ye(P,d=>{if(!d||typeof d!="string")return;const t=d.trim();if(!t)return;if(t.startsWith("http://")||t.startsWith("https://"))if(t.startsWith("http://localhost:45462"))try{const i=new URL(t).searchParams.get("code");i?(P.value=i,j("成功提取授权码!","success")):j("URL 中未找到授权码参数,请检查链接是否正确","error")}catch{j("链接格式错误,请检查是否为完整的 URL","error")}else j("请粘贴以 http://localhost:45462 开头的链接","error")}),ye(()=>s.value.platform,d=>{F.value||Q("platform-changed",d)}),ye(()=>s.value.accountType,d=>{d==="group"&&St.value.length===0&&Nt()}),ye(()=>s.value.groupId,d=>{d==="__new__"&&(s.value.groupId="",Dt.value=!0)});const Jt=()=>{Oe.value.push({from:"",to:""})},ms=d=>{Oe.value.splice(d,1)},De=(d,t)=>{if(Oe.value.some(oe=>oe.from===d)){j(`模型 ${d} 的映射已存在`,"info");return}Oe.value.push({from:d,to:t}),j(`已添加映射: ${d} → ${t}`,"success")},ys=()=>{const d={};return ce.value==="whitelist"?Ae.value.forEach(t=>{d[t]=t}):Oe.value.forEach(t=>{t.from&&t.to&&(d[t.from]=t.to)}),Object.keys(d).length>0?d:null};ye(()=>m.account,d=>{if(d){$t();const t=ue(d.proxy),se=typeof d.authenticationMethod=="string"?d.authenticationMethod.trim().toLowerCase():"",oe=se==="api_key"?"apikey":se==="manual"?"manual":"oauth";let i="";d.accountType==="group"&&(i=d.groupId||d.groupInfo&&d.groupInfo.id||"");let re="claude_max";if(d.subscriptionInfo){const le=typeof d.subscriptionInfo=="string"?JSON.parse(d.subscriptionInfo):d.subscriptionInfo;le.accountType?re=le.accountType:le.hasClaudeMax?re="claude_max":le.hasClaudePro?re="claude_pro":re="claude_free"}s.value={platform:d.platform,addType:oe,name:d.name,description:d.description||"",accountType:d.accountType||"shared",subscriptionType:re,autoStopOnWarning:d.autoStopOnWarning||!1,useUnifiedUserAgent:d.useUnifiedUserAgent||!1,useUnifiedClientId:d.useUnifiedClientId||!1,unifiedClientId:d.unifiedClientId||"",groupId:i,groupIds:[],projectId:d.projectId||"",accessToken:"",refreshToken:"",authenticationMethod:d.authenticationMethod||"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:t,apiUrl:d.apiUrl||"",apiKey:"",priority:d.priority||50,supportedModels:(()=>{const le=d.supportedModels;return le?typeof le=="object"&&!Array.isArray(le)?Object.keys(le):Array.isArray(le)?le:[]:[]})(),userAgent:d.userAgent||"",enableRateLimit:!!(d.rateLimitDuration&&d.rateLimitDuration>0),rateLimitDuration:d.rateLimitDuration||60,accessKeyId:"",secretAccessKey:"",region:d.region||"",sessionToken:"",defaultModel:d.defaultModel||"",smallFastModel:d.smallFastModel||"",azureEndpoint:d.azureEndpoint||"",apiVersion:d.apiVersion||"",deploymentName:d.deploymentName||"",baseApi:d.baseApi||"",baseUrl:d.baseUrl||"https://generativelanguage.googleapis.com",dailyQuota:d.dailyQuota||0,dailyUsage:d.dailyUsage||0,quotaResetTime:d.quotaResetTime||"00:00",maxConcurrentTasks:d.maxConcurrentTasks||0},d.platform==="claude-console"&&c(),d.accountType==="group"&&Nt().then(async()=>{const le=[];if(d.groupInfos&&Array.isArray(d.groupInfos)&&d.groupInfos.length>0)d.groupInfos.forEach(Se=>{Se&&Se.id&&le.push(Se.id)}),le.length>0&&(s.value.groupId=le[0]);else if(d.groupInfo&&d.groupInfo.id)s.value.groupId=d.groupInfo.id,le.push(d.groupInfo.id);else if(d.groupId)s.value.groupId=d.groupId,le.push(d.groupId);else if(d.groupIds&&Array.isArray(d.groupIds)&&d.groupIds.length>0)s.value.groupId=d.groupIds[0],le.push(...d.groupIds);else{const Se=St.value.map(async ze=>{try{((await O.get(`/admin/account-groups/${ze.id}/members`)).data||[]).some(S=>S.id===d.id)&&(le.push(ze.id),s.value.groupId||(s.value.groupId=ze.id))}catch{}});await Promise.all(Se)}s.value.groupIds=le})}},{immediate:!0});const xs=async()=>{try{const d=await O.get("/admin/claude-code-version");d.success&&d.userAgent?de.value=d.userAgent:de.value=""}catch{de.value=""}},fs=async()=>{$e.value=!0;try{(await O.post("/admin/claude-code-version/clear")).success?(de.value="",j("统一User-Agent缓存已清除","success")):j("清除缓存失败","error")}catch(d){j("清除缓存失败:"+(d.message||"未知错误"),"error")}finally{$e.value=!1}},xt=()=>{const d=new Uint8Array(32);return crypto.getRandomValues(d),Array.from(d,t=>t.toString(16).padStart(2,"0")).join("")},bs=()=>{s.value.unifiedClientId=xt(),j("已生成新的客户端标识","success")},Yt=()=>{s.value.useUnifiedClientId&&(s.value.useUnifiedUserAgent=!0,s.value.unifiedClientId||(s.value.unifiedClientId=xt()))},Gt=ne(()=>{const d=new Date;return d.setMinutes(d.getMinutes()+1),d.toISOString().slice(0,16)}),Zt=()=>{if(!s.value.expireDuration){s.value.expiresAt=null;return}if(s.value.expireDuration==="custom")return;const d=new Date,se=s.value.expireDuration.match(/(\d+)([d])/);if(se){const[,oe,i]=se,re=parseInt(oe);i==="d"&&d.setDate(d.getDate()+re),s.value.expiresAt=d.toISOString()}},Xt=()=>{s.value.customExpireDate&&(s.value.expiresAt=new Date(s.value.customExpireDate).toISOString())},vs=d=>d?new Date(d).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"";return gs(()=>{var d;Ce.value=B(s.value.platform),F.value&&$t(),xs(),F.value&&((d=m.account)==null?void 0:d.platform)==="claude-console"&&c()}),ye(()=>s.value.platform,d=>{d==="claude"&&xs()}),(d,t)=>{var se,oe;return o(),Ye(Rt,{to:"body"},[ee.value?(o(),n("div",Ro,[e("div",Oo,[e("div",Lo,[e("div",Eo,[t[158]||(t[158]=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",No,u(F.value?"编辑账户":"添加账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:t[0]||(t[0]=i=>d.$emit("close"))},t[159]||(t[159]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),!F.value&&(s.value.addType==="oauth"||s.value.addType==="setup-token")?(o(),n("div",qo,[e("div",Wo,[e("div",Go,[e("div",{class:I(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",ge.value>=1?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 1 ",2),t[160]||(t[160]=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[162]||(t[162]=e("div",{class:"h-0.5 w-4 bg-gray-300 sm:w-8"},null,-1)),e("div",Fo,[e("div",{class:I(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",ge.value>=2?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 2 ",2),t[161]||(t[161]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"授权认证",-1))])])])):y("",!0),ge.value===1&&!F.value?(o(),n("div",Qo,[e("div",Bo,[F.value?y("",!0):(o(),n("div",Ho,[t[200]||(t[200]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择平台",-1)),e("div",Jo,[e("div",Yo,[e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[Ce.value==="claude"?"border-indigo-500 bg-gradient-to-br from-indigo-50 to-purple-50 shadow-md dark:from-indigo-900/20 dark:to-purple-900/20":"border-gray-200 bg-white hover:border-indigo-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-indigo-600"]]),onClick:t[1]||(t[1]=i=>D("claude"))},[e("div",Zo,[e("div",Xo,[t[164]||(t[164]=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)),Ce.value==="claude"?(o(),n("div",en,t[163]||(t[163]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):y("",!0)]),t[165]||(t[165]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Claude ",-1)),t[166]||(t[166]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Anthropic",-1))])],2),e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[Ce.value==="openai"?"border-emerald-500 bg-gradient-to-br from-emerald-50 to-teal-50 shadow-md dark:from-emerald-900/20 dark:to-teal-900/20":"border-gray-200 bg-white hover:border-emerald-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-emerald-600"]]),onClick:t[2]||(t[2]=i=>D("openai"))},[e("div",tn,[e("div",sn,[t[168]||(t[168]=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)),Ce.value==="openai"?(o(),n("div",an,t[167]||(t[167]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):y("",!0)]),t[169]||(t[169]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," OpenAI ",-1)),t[170]||(t[170]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"GPT 系列",-1))])],2),e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[Ce.value==="gemini"?"border-blue-500 bg-gradient-to-br from-blue-50 to-indigo-50 shadow-md dark:from-blue-900/20 dark:to-indigo-900/20":"border-gray-200 bg-white hover:border-blue-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-600"]]),onClick:t[3]||(t[3]=i=>D("gemini"))},[e("div",rn,[e("div",ln,[t[172]||(t[172]=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)),Ce.value==="gemini"?(o(),n("div",on,t[171]||(t[171]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):y("",!0)]),t[173]||(t[173]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Gemini ",-1)),t[174]||(t[174]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Google AI",-1))])],2),e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[Ce.value==="droid"?"border-rose-500 bg-gradient-to-br from-rose-50 to-orange-50 shadow-md dark:from-rose-900/20 dark:to-orange-900/20":"border-gray-200 bg-white hover:border-rose-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-rose-600"]]),onClick:t[4]||(t[4]=i=>D("droid"))},[e("div",nn,[e("div",dn,[t[176]||(t[176]=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)),Ce.value==="droid"?(o(),n("div",un,t[175]||(t[175]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):y("",!0)]),t[177]||(t[177]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Droid ",-1)),t[178]||(t[178]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Claude Droid",-1))])],2)]),Ce.value?(o(),n("div",pn,[t[199]||(t[199]=e("p",{class:"mb-2 text-xs font-medium text-gray-700 dark:text-gray-300"}," 选择具体平台类型: ",-1)),e("div",gn,[Ce.value==="claude"?(o(),n(be,{key:0},[e("label",{class:I(["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"]])},[h(e("input",{"onUpdate:modelValue":t[5]||(t[5]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"claude"},null,512),[[Ie,s.value.platform]]),t[180]||(t[180]=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(),n("div",cn,t[179]||(t[179]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):y("",!0)],2),e("label",{class:I(["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"]])},[h(e("input",{"onUpdate:modelValue":t[6]||(t[6]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"claude-console"},null,512),[[Ie,s.value.platform]]),t[182]||(t[182]=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(),n("div",mn,t[181]||(t[181]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):y("",!0)],2),e("label",{class:I(["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"]])},[h(e("input",{"onUpdate:modelValue":t[7]||(t[7]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"bedrock"},null,512),[[Ie,s.value.platform]]),t[184]||(t[184]=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(),n("div",yn,t[183]||(t[183]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):y("",!0)],2),e("label",{class:I(["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"]])},[h(e("input",{"onUpdate:modelValue":t[8]||(t[8]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"ccr"},null,512),[[Ie,s.value.platform]]),t[186]||(t[186]=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(),n("div",xn,t[185]||(t[185]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):y("",!0)],2)],64)):y("",!0),Ce.value==="openai"?(o(),n(be,{key:1},[e("label",{class:I(["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"]])},[h(e("input",{"onUpdate:modelValue":t[9]||(t[9]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"openai"},null,512),[[Ie,s.value.platform]]),t[188]||(t[188]=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(),n("div",fn,t[187]||(t[187]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):y("",!0)],2),e("label",{class:I(["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"]])},[h(e("input",{"onUpdate:modelValue":t[10]||(t[10]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"openai-responses"},null,512),[[Ie,s.value.platform]]),t[190]||(t[190]=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(),n("div",bn,t[189]||(t[189]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):y("",!0)],2),e("label",{class:I(["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"]])},[h(e("input",{"onUpdate:modelValue":t[11]||(t[11]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"azure_openai"},null,512),[[Ie,s.value.platform]]),t[192]||(t[192]=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(),n("div",vn,t[191]||(t[191]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):y("",!0)],2)],64)):y("",!0),Ce.value==="gemini"?(o(),n(be,{key:2},[e("label",{class:I(["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"]])},[h(e("input",{"onUpdate:modelValue":t[12]||(t[12]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"gemini"},null,512),[[Ie,s.value.platform]]),t[194]||(t[194]=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(),n("div",kn,t[193]||(t[193]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):y("",!0)],2),e("label",{class:I(["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"]])},[h(e("input",{"onUpdate:modelValue":t[13]||(t[13]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"gemini-api"},null,512),[[Ie,s.value.platform]]),t[196]||(t[196]=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(),n("div",hn,t[195]||(t[195]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):y("",!0)],2)],64)):y("",!0),Ce.value==="droid"?(o(),n("label",{key:3,class:I(["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"]])},[h(e("input",{"onUpdate:modelValue":t[14]||(t[14]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"droid"},null,512),[[Ie,s.value.platform]]),t[198]||(t[198]=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(),n("div",wn,t[197]||(t[197]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):y("",!0)],2)):y("",!0)])])):y("",!0)])])),!F.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(),n("div",$n,[t[205]||(t[205]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"添加方式",-1)),e("div",An,[e("label",Cn,[h(e("input",{"onUpdate:modelValue":t[15]||(t[15]=i=>s.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"oauth"},null,512),[[Ie,s.value.addType]]),e("span",Un,[t[201]||(t[201]=x(" OAuth 授权",-1)),s.value.platform==="claude"||s.value.platform==="openai"?(o(),n("span",In," (用量可视化)")):y("",!0)])]),s.value.platform==="claude"?(o(),n("label",Tn,[h(e("input",{"onUpdate:modelValue":t[16]||(t[16]=i=>s.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"setup-token"},null,512),[[Ie,s.value.addType]]),t[202]||(t[202]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Setup Token (效期长)",-1))])):y("",!0),e("label",Kn,[h(e("input",{"onUpdate:modelValue":t[17]||(t[17]=i=>s.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"manual"},null,512),[[Ie,s.value.addType]]),t[203]||(t[203]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"手动输入 Access Token",-1))]),s.value.platform==="droid"?(o(),n("label",_n,[h(e("input",{"onUpdate:modelValue":t[18]||(t[18]=i=>s.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"apikey"},null,512),[[Ie,s.value.addType]]),t[204]||(t[204]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"使用 API Key (支持多个)",-1))])):y("",!0)])])):y("",!0),e("div",null,[t[206]||(t[206]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),h(e("input",{"onUpdate:modelValue":t[19]||(t[19]=i=>s.value.name=i),class:I(["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),[[z,s.value.name]]),T.value.name?(o(),n("p",Pn,u(T.value.name),1)):y("",!0)]),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)),h(e("textarea",{"onUpdate:modelValue":t[20]||(t[20]=i=>s.value.description=i),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[z,s.value.description]])]),e("div",null,[t[211]||(t[211]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",Mn,[e("label",Sn,[h(e("input",{"onUpdate:modelValue":t[21]||(t[21]=i=>s.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[Ie,s.value.accountType]]),t[208]||(t[208]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",Dn,[h(e("input",{"onUpdate:modelValue":t[22]||(t[22]=i=>s.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[Ie,s.value.accountType]]),t[209]||(t[209]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",zn,[h(e("input",{"onUpdate:modelValue":t[23]||(t[23]=i=>s.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[Ie,s.value.accountType]]),t[210]||(t[210]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[212]||(t[212]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),!F.value&&s.value.platform!=="gemini-api"?(o(),n("div",jn,[t[216]||(t[216]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",Vn,[h(e("select",{"onUpdate:modelValue":t[24]||(t[24]=i=>s.value.expireDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:Zt},t[213]||(t[213]=[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),[[Ds,s.value.expireDuration]]),s.value.expireDuration==="custom"?(o(),n("div",Rn,[h(e("input",{"onUpdate:modelValue":t[25]||(t[25]=i=>s.value.customExpireDate=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Gt.value,type:"datetime-local",onChange:Xt},null,40,On),[[z,s.value.customExpireDate]])])):y("",!0),s.value.expiresAt?(o(),n("p",Ln,[t[214]||(t[214]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),x(" 将于 "+u(vs(s.value.expiresAt))+" 过期 ",1)])):(o(),n("p",En,t[215]||(t[215]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),x(" 账户永不过期 ",-1)])))]),t[217]||(t[217]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])):y("",!0),s.value.accountType==="group"?(o(),n("div",Nn,[t[219]||(t[219]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",qn,[e("div",Wn,[e("div",Gn,[Be.value.length===0?(o(),n("div",Fn," 暂无可用分组 ")):y("",!0),(o(!0),n(be,null,qe(Be.value,i=>(o(),n("label",{key:i.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[h(e("input",{"onUpdate:modelValue":t[26]||(t[26]=re=>s.value.groupIds=re),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i.id},null,8,Qn),[[Ve,s.value.groupIds]]),e("span",Bn,u(i.name)+" ("+u(i.memberCount||0)+" 个成员) ",1)]))),128)),e("div",{class:"border-t pt-2 dark:border-gray-600"},[e("button",{class:"flex items-center gap-2 text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",type:"button",onClick:It},t[218]||(t[218]=[e("i",{class:"fas fa-plus"},null,-1),x(" 新建分组 ",-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:qt},[e("i",{class:I(["fas fa-sync-alt",{"animate-spin":Et.value}])},null,2)])])])):y("",!0),s.value.platform==="gemini"?(o(),n("div",Hn,[t[220]||(t[220]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),h(e("input",{"onUpdate:modelValue":t[27]||(t[27]=i=>s.value.projectId=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[z,s.value.projectId]]),t[221]||(t[221]=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,[x(" 访问 "),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,[x(" 复制"),e("span",{class:"font-semibold text-red-600"},"项目 ID(Project ID)"),x(",通常是字符串格式 ")]),e("li",{class:"text-red-600"}," ⚠️ 注意:要复制项目 ID(Project ID),不要复制项目编号(Project Number)! ")])]),e("p",{class:"mt-2"},[e("strong",null,"提示:"),x("如果您的账号是普通个人账号(未绑定 Google Cloud),请留空此字段。 ")])])])],-1))])):y("",!0),s.value.platform==="bedrock"&&!F.value?(o(),n("div",Jn,[e("div",null,[t[222]||(t[222]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 访问密钥 ID *",-1)),h(e("input",{"onUpdate:modelValue":t[28]||(t[28]=i=>s.value.accessKeyId=i),class:I(["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),[[z,s.value.accessKeyId]]),T.value.accessKeyId?(o(),n("p",Yn,u(T.value.accessKeyId),1)):y("",!0)]),e("div",null,[t[223]||(t[223]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 秘密访问密钥 *",-1)),h(e("input",{"onUpdate:modelValue":t[29]||(t[29]=i=>s.value.secretAccessKey=i),class:I(["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),[[z,s.value.secretAccessKey]]),T.value.secretAccessKey?(o(),n("p",Zn,u(T.value.secretAccessKey),1)):y("",!0)]),e("div",null,[t[224]||(t[224]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 区域 *",-1)),h(e("input",{"onUpdate:modelValue":t[30]||(t[30]=i=>s.value.region=i),class:I(["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),[[z,s.value.region]]),T.value.region?(o(),n("p",Xn,u(T.value.region),1)):y("",!0),t[225]||(t[225]=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[226]||(t[226]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"会话令牌 (可选)",-1)),h(e("input",{"onUpdate:modelValue":t[31]||(t[31]=i=>s.value.sessionToken=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"如果使用临时凭证,请输入会话令牌",type:"password"},null,512),[[z,s.value.sessionToken]]),t[227]||(t[227]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 仅在使用临时 AWS 凭证时需要填写 ",-1))]),e("div",null,[t[228]||(t[228]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"默认主模型 (可选)",-1)),h(e("input",{"onUpdate:modelValue":t[32]||(t[32]=i=>s.value.defaultModel=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[z,s.value.defaultModel]]),t[229]||(t[229]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1)),t[230]||(t[230]=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[231]||(t[231]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),h(e("input",{"onUpdate:modelValue":t[33]||(t[33]=i=>s.value.smallFastModel=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[z,s.value.smallFastModel]]),t[232]||(t[232]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 用于快速响应的轻量级模型,留空将使用系统默认 ",-1))])])):y("",!0),s.value.platform==="azure_openai"&&!F.value?(o(),n("div",ei,[e("div",null,[t[233]||(t[233]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint *",-1)),h(e("input",{"onUpdate:modelValue":t[34]||(t[34]=i=>s.value.azureEndpoint=i),class:I(["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),[[z,s.value.azureEndpoint]]),T.value.azureEndpoint?(o(),n("p",ti,u(T.value.azureEndpoint),1)):y("",!0),t[234]||(t[234]=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[235]||(t[235]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),h(e("input",{"onUpdate:modelValue":t[35]||(t[35]=i=>s.value.apiVersion=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[z,s.value.apiVersion]]),t[236]||(t[236]=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[237]||(t[237]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称 *",-1)),h(e("input",{"onUpdate:modelValue":t[36]||(t[36]=i=>s.value.deploymentName=i),class:I(["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),[[z,s.value.deploymentName]]),T.value.deploymentName?(o(),n("p",si,u(T.value.deploymentName),1)):y("",!0),t[238]||(t[238]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Azure OpenAI Studio 中创建的部署名称 ",-1))]),e("div",null,[t[239]||(t[239]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),h(e("input",{"onUpdate:modelValue":t[37]||(t[37]=i=>s.value.apiKey=i),class:I(["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),[[z,s.value.apiKey]]),T.value.apiKey?(o(),n("p",ai,u(T.value.apiKey),1)):y("",!0),t[240]||(t[240]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Azure 门户获取的 API 密钥 ",-1))]),e("div",null,[t[241]||(t[241]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",ri,[(o(),n(be,null,qe(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],i=>e("label",{key:i,class:"flex cursor-pointer items-center"},[h(e("input",{"onUpdate:modelValue":t[38]||(t[38]=re=>s.value.supportedModels=re),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,li),[[Ve,s.value.supportedModels]]),e("span",oi,u(i),1)])),64))]),t[242]||(t[242]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 选择此部署支持的模型类型 ",-1))])])):y("",!0),s.value.platform==="bedrock"&&!F.value?(o(),n("div",ni,[e("div",null,[t[247]||(t[247]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",ii,[e("label",di,[h(e("input",{"onUpdate:modelValue":t[39]||(t[39]=i=>s.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Ve,s.value.enableRateLimit]]),t[243]||(t[243]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[244]||(t[244]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(o(),n("div",ui,[t[245]||(t[245]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),h(e("input",{"onUpdate:modelValue":t[40]||(t[40]=i=>s.value.rateLimitDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[z,s.value.rateLimitDuration,void 0,{number:!0}]]),t[246]||(t[246]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):y("",!0)])])):y("",!0),(s.value.platform==="claude-console"||s.value.platform==="ccr")&&!F.value?(o(),n("div",pi,[e("div",null,[t[248]||(t[248]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),h(e("input",{"onUpdate:modelValue":t[41]||(t[41]=i=>s.value.apiUrl=i),class:I(["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),[[z,s.value.apiUrl]]),T.value.apiUrl?(o(),n("p",gi,u(T.value.apiUrl),1)):y("",!0)]),e("div",null,[t[249]||(t[249]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),h(e("input",{"onUpdate:modelValue":t[42]||(t[42]=i=>s.value.apiKey=i),class:I(["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),[[z,s.value.apiKey]]),T.value.apiKey?(o(),n("p",ci,u(T.value.apiKey),1)):y("",!0)]),e("div",mi,[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)),h(e("input",{"onUpdate:modelValue":t[43]||(t[43]=i=>s.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[z,s.value.dailyQuota,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[252]||(t[252]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),h(e("input",{"onUpdate:modelValue":t[44]||(t[44]=i=>s.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[z,s.value.quotaResetTime]]),t[253]||(t[253]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 每日自动重置额度的时间 ",-1))])]),e("div",null,[t[254]||(t[254]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),h(e("input",{"onUpdate:modelValue":t[45]||(t[45]=i=>s.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[z,s.value.maxConcurrentTasks,void 0,{number:!0}]]),t[255]||(t[255]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))]),e("div",null,[t[263]||(t[263]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",yi,[e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",ce.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]=i=>ce.value="whitelist")},t[256]||(t[256]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),x(" 模型白名单 ",-1)]),2),e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",ce.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]=i=>ce.value="mapping")},t[257]||(t[257]=[e("i",{class:"fas fa-random mr-2"},null,-1),x(" 模型映射 ",-1)]),2)]),ce.value==="whitelist"?(o(),n("div",xi,[t[258]||(t[258]=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"}),x(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",fi,[(o(),n(be,null,qe(Le,i=>e("label",{key:i.value,class:I(["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",Ae.value.includes(i.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[h(e("input",{"onUpdate:modelValue":t[48]||(t[48]=re=>Ae.value=re),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,bi),[[Ve,Ae.value]]),e("span",vi,u(i.label),1)],2)),64))]),e("p",ki,[x(" 已选择 "+u(Ae.value.length)+" 个模型 ",1),Ae.value.length===0?(o(),n("span",hi,"(支持所有模型)")):y("",!0)])])):(o(),n("div",wi,[t[262]||(t[262]=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"}),x(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",$i,[(o(!0),n(be,null,qe(Oe.value,(i,re)=>(o(),n("div",{key:re,class:"flex items-center gap-2"},[h(e("input",{"onUpdate:modelValue":le=>i.from=le,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,Ai),[[z,i.from]]),t[260]||(t[260]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),h(e("input",{"onUpdate:modelValue":le=>i.to=le,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"映射后的模型名称",type:"text"},null,8,Ci),[[z,i.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:le=>ms(re)},t[259]||(t[259]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Ui)]))),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:Jt},t[261]||(t[261]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 添加模型映射 ",-1)])),e("div",Ii,[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]=i=>De("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),e("button",{class:"rounded-lg bg-indigo-100 px-3 py-1 text-xs text-indigo-700 transition-colors hover:bg-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-400 dark:hover:bg-indigo-900/50",type:"button",onClick:t[50]||(t[50]=i=>De("claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929"))}," + Sonnet 4.5 "),e("button",{class:"rounded-lg bg-purple-100 px-3 py-1 text-xs text-purple-700 transition-colors hover:bg-purple-200 dark:bg-purple-900/30 dark:text-purple-400 dark:hover:bg-purple-900/50",type:"button",onClick:t[51]||(t[51]=i=>De("claude-opus-4-1-20250805","claude-opus-4-1-20250805"))}," + Opus 4.1 "),e("button",{class:"rounded-lg bg-green-100 px-3 py-1 text-xs text-green-700 transition-colors hover:bg-green-200 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",type:"button",onClick:t[52]||(t[52]=i=>De("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),e("button",{class:"rounded-lg bg-emerald-100 px-3 py-1 text-xs text-emerald-700 transition-colors hover:bg-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-900/50",type:"button",onClick:t[53]||(t[53]=i=>De("claude-haiku-4-5-20251001","claude-haiku-4-5-20251001"))}," + Haiku 4.5 "),e("button",{class:"rounded-lg bg-cyan-100 px-3 py-1 text-xs text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:hover:bg-cyan-900/50",type:"button",onClick:t[54]||(t[54]=i=>De("deepseek-chat","deepseek-chat"))}," + DeepSeek "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:hover:bg-orange-900/50",type:"button",onClick:t[55]||(t[55]=i=>De("Qwen","Qwen"))}," + Qwen "),e("button",{class:"rounded-lg bg-pink-100 px-3 py-1 text-xs text-pink-700 transition-colors hover:bg-pink-200 dark:bg-pink-900/30 dark:text-pink-400 dark:hover:bg-pink-900/50",type:"button",onClick:t[56]||(t[56]=i=>De("Kimi","Kimi"))}," + Kimi "),e("button",{class:"rounded-lg bg-teal-100 px-3 py-1 text-xs text-teal-700 transition-colors hover:bg-teal-200 dark:bg-teal-900/30 dark:text-teal-400 dark:hover:bg-teal-900/50",type:"button",onClick:t[57]||(t[57]=i=>De("GLM","GLM"))}," + GLM "),e("button",{class:"rounded-lg bg-amber-100 px-3 py-1 text-xs text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50",type:"button",onClick:t[58]||(t[58]=i=>De("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[264]||(t[264]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),h(e("input",{"onUpdate:modelValue":t[59]||(t[59]=i=>s.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[z,s.value.userAgent]]),t[265]||(t[265]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[270]||(t[270]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",Ti,[e("label",Ki,[h(e("input",{"onUpdate:modelValue":t[60]||(t[60]=i=>s.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Ve,s.value.enableRateLimit]]),t[266]||(t[266]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[267]||(t[267]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(o(),n("div",_i,[t[268]||(t[268]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),h(e("input",{"onUpdate:modelValue":t[61]||(t[61]=i=>s.value.rateLimitDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[z,s.value.rateLimitDuration,void 0,{number:!0}]]),t[269]||(t[269]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):y("",!0)])])):y("",!0),s.value.platform==="openai-responses"&&!F.value?(o(),n("div",Pi,[e("div",null,[t[271]||(t[271]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),h(e("input",{"onUpdate:modelValue":t[62]||(t[62]=i=>s.value.baseApi=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"https://api.example.com/v1",required:"",type:"url"},null,512),[[z,s.value.baseApi]]),t[272]||(t[272]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方 OpenAI 兼容 API 的基础地址,不要包含具体路径 ",-1))]),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)),e("div",Mi,[h(e("input",{"onUpdate:modelValue":t[63]||(t[63]=i=>s.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"sk-xxxxxxxxxxxx",required:"",type:q.value?"text":"password"},null,8,Si),[[ps,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]=i=>q.value=!q.value)},[e("i",{class:I(q.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[274]||(t[274]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方服务提供的 API 密钥 ",-1))]),e("div",null,[t[275]||(t[275]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),h(e("input",{"onUpdate:modelValue":t[65]||(t[65]=i=>s.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传原始请求的 User-Agent",type:"text"},null,512),[[z,s.value.userAgent]]),t[276]||(t[276]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可选项。如果设置,所有请求将使用此 User-Agent;否则透传客户端的 User-Agent ",-1))]),h(e("input",{"onUpdate:modelValue":t[66]||(t[66]=i=>s.value.rateLimitDuration=i),type:"hidden",value:"60"},null,512),[[z,s.value.rateLimitDuration,void 0,{number:!0}]])])):y("",!0),s.value.platform==="gemini-api"&&!F.value?(o(),n("div",Di,[e("div",null,[t[277]||(t[277]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),h(e("input",{"onUpdate:modelValue":t[67]||(t[67]=i=>s.value.baseUrl=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500 dark:border-red-400":T.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",required:"",type:"url"},null,2),[[z,s.value.baseUrl]]),T.value.baseUrl?(o(),n("p",zi,u(T.value.baseUrl),1)):y("",!0),t[278]||(t[278]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[x(" 填写 API 基础地址,必须以 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/models"),x(" 结尾。系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/{model}:generateContent")],-1)),t[279]||(t[279]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[x(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com/v1beta/models")],-1)),t[280]||(t[280]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[x(" 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini/v1beta/models")],-1))]),e("div",null,[t[281]||(t[281]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",ji,[h(e("input",{"onUpdate:modelValue":t[68]||(t[68]=i=>s.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"AIzaSy...",required:"",type:q.value?"text":"password"},null,8,Vi),[[ps,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]=i=>q.value=!q.value)},[e("i",{class:I(q.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[282]||(t[282]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Google AI Studio 获取的 API 密钥 ",-1))])])):y("",!0),s.value.platform==="claude"?(o(),n("div",Ri,[t[285]||(t[285]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",Oi,[e("label",Li,[h(e("input",{"onUpdate:modelValue":t[70]||(t[70]=i=>s.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[Ie,s.value.subscriptionType]]),t[283]||(t[283]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",Ei,[h(e("input",{"onUpdate:modelValue":t[71]||(t[71]=i=>s.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[Ie,s.value.subscriptionType]]),t[284]||(t[284]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[286]||(t[286]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):y("",!0),s.value.platform==="claude"?(o(),n("div",Ni,[e("label",qi,[h(e("input",{"onUpdate:modelValue":t[72]||(t[72]=i=>s.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Ve,s.value.autoStopOnWarning]]),t[287]||(t[287]=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))])])):y("",!0),s.value.platform==="claude"?(o(),n("div",Wi,[e("label",Gi,[h(e("input",{"onUpdate:modelValue":t[73]||(t[73]=i=>s.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Ve,s.value.useUnifiedUserAgent]]),e("div",Fi,[t[289]||(t[289]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[290]||(t[290]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),de.value?(o(),n("div",Qi,[e("div",Bi,[e("p",Hi," 💡 当前统一版本:"+u(de.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:$e.value,type:"button",onClick:fs},[$e.value?(o(),n("div",Zi)):(o(),n("i",Yi)),x(" "+u($e.value?"清除中...":"清除缓存"),1)],8,Ji)])])):(o(),n("div",Xi,t[288]||(t[288]=[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)])))])])])):y("",!0),s.value.platform==="claude"?(o(),n("div",ed,[e("label",td,[h(e("input",{"onUpdate:modelValue":t[74]||(t[74]=i=>s.value.useUnifiedClientId=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:Yt},null,544),[[Ve,s.value.useUnifiedClientId]]),e("div",sd,[t[294]||(t[294]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[295]||(t[295]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),s.value.useUnifiedClientId?(o(),n("div",ad,[e("div",rd,[e("div",{class:"mb-2 flex items-center justify-between"},[t[292]||(t[292]=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:bs},t[291]||(t[291]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x(" 重新生成 ",-1)]))]),e("div",ld,[e("code",od,[e("span",nd,u(s.value.unifiedClientId.substring(0,8)),1),e("span",id,u(s.value.unifiedClientId.substring(8,56)),1),e("span",dd,u(s.value.unifiedClientId.substring(56)),1)])]),t[293]||(t[293]=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"}),x(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):y("",!0)])])])):y("",!0),e("div",null,[t[296]||(t[296]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),h(e("input",{"onUpdate:modelValue":t[75]||(t[75]=i=>s.value.priority=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高,默认50",type:"number"},null,512),[[z,s.value.priority,void 0,{number:!0}]]),t[297]||(t[297]=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(),n("div",ud,[e("div",pd,[t[302]||(t[302]=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[301]||(t[301]=e("h5",{class:"mb-2 font-semibold text-blue-900 dark:text-blue-300"}," 手动输入 Token ",-1)),s.value.platform==="claude"?(o(),n("p",gd," 请输入有效的 Claude Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="gemini"?(o(),n("p",cd," 请输入有效的 Gemini Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="openai"?(o(),n("p",md," 请输入有效的 OpenAI Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="droid"?(o(),n("p",yd," 请输入有效的 Droid Access Token,并同时提供 Refresh Token 以支持自动刷新。 ")):y("",!0),e("div",xd,[t[300]||(t[300]=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"}),x(" 获取 Access Token 的方法: ")],-1)),s.value.platform==="claude"?(o(),n("p",fd,t[298]||(t[298]=[x(" 请从已登录 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),x(" 文件中的凭证, 请勿使用 Claude 官网 API Keys 页面的密钥。 ",-1)]))):s.value.platform==="gemini"?(o(),n("p",bd,t[299]||(t[299]=[x(" 请从已登录 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),x(" 文件中的凭证。 ",-1)]))):s.value.platform==="openai"?(o(),n("p",vd," 请从已登录 OpenAI 账户的机器上获取认证凭证, 或通过 OAuth 授权流程获取 Access Token。 ")):s.value.platform==="droid"?(o(),n("p",kd," 请从已完成授权的 Droid CLI 或 Factory.ai 导出的凭证中获取 Access Token 与 Refresh Token。 ")):y("",!0)]),s.value.platform!=="droid"?(o(),n("p",hd," 💡 如果未填写 Refresh Token,Token 过期后需要手动更新。 ")):(o(),n("p",wd," ⚠️ Droid 账户必须填写 Refresh Token,缺失将导致无法自动刷新 Access Token。 "))])]),s.value.platform==="openai"?(o(),n("div",$d,[t[303]||(t[303]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token (可选)",-1)),h(e("textarea",{"onUpdate:modelValue":t[76]||(t[76]=i=>s.value.accessToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"可选:如果不填写,系统会自动通过 Refresh Token 获取...",rows:"4"},null,512),[[z,s.value.accessToken]]),t[304]||(t[304]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。 ")],-1))])):(o(),n("div",Ad,[t[305]||(t[305]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token *",-1)),h(e("textarea",{"onUpdate:modelValue":t[77]||(t[77]=i=>s.value.accessToken=i),class:I(["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),[[z,s.value.accessToken]]),T.value.accessToken?(o(),n("p",Cd,u(T.value.accessToken),1)):y("",!0)])),s.value.platform==="openai"||s.value.platform==="droid"?(o(),n("div",Ud,[t[307]||(t[307]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token *",-1)),h(e("textarea",{"onUpdate:modelValue":t[78]||(t[78]=i=>s.value.refreshToken=i),class:I(["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),[[z,s.value.refreshToken]]),T.value.refreshToken?(o(),n("p",Id,u(T.value.refreshToken),1)):y("",!0),e("p",Td,[t[306]||(t[306]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),s.value.platform==="openai"?(o(),n(be,{key:0},[x(" 系统将使用 Refresh Token 自动获取 Access Token 和用户信息 ")],64)):(o(),n(be,{key:1},[x(" 系统将使用 Refresh Token 自动刷新 Factory.ai 访问令牌,确保账户保持可用。 ")],64))])])):(o(),n("div",Kd,[t[308]||(t[308]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token (可选)",-1)),h(e("textarea",{"onUpdate:modelValue":t[79]||(t[79]=i=>s.value.refreshToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"请输入 Refresh Token...",rows:"4"},null,512),[[z,s.value.refreshToken]])]))])):y("",!0),s.value.addType==="apikey"&&s.value.platform==="droid"?(o(),n("div",_d,[t[311]||(t[311]=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[309]||(t[309]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 列表 *",-1)),h(e("textarea",{"onUpdate:modelValue":t[80]||(t[80]=i=>s.value.apiKeysInput=i),class:I(["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),[[z,s.value.apiKeysInput]]),T.value.apiKeys?(o(),n("p",Pd,u(T.value.apiKeys),1)):y("",!0),t[310]||(t[310]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 建议为每条 Key 提供独立额度;系统会自动去重并忽略空白行。 ")],-1))]),t[312]||(t[312]=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"}),x("分配策略说明")]),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))])):y("",!0),st(Os,{modelValue:s.value.proxy,"onUpdate:modelValue":t[81]||(t[81]=i=>s.value.proxy=i)},null,8,["modelValue"]),e("div",Md,[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]=i=>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(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:Z.value,type:"button",onClick:Fe}," 下一步 ",8,Sd)):(o(),n("button",{key:1,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:Z.value,type:"button",onClick:Ze},[Z.value?(o(),n("div",zd)):y("",!0),x(" "+u(Z.value?"创建中...":"创建"),1)],8,Dd))])])])):y("",!0),ge.value===2&&s.value.addType==="oauth"?(o(),Ye(al,{key:2,ref_key:"oauthFlowRef",ref:ae,platform:s.value.platform,proxy:s.value.proxy,onBack:t[83]||(t[83]=i=>ge.value=1),onSuccess:Ut},null,8,["platform","proxy"])):y("",!0),ge.value===2&&s.value.addType==="setup-token"?(o(),n("div",jd,[s.value.platform==="claude"?(o(),n("div",Vd,[e("div",Rd,[e("div",Od,[t[334]||(t[334]=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",Ld,[t[333]||(t[333]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"}," Claude Setup Token 授权 ",-1)),e("div",Ed,[t[315]||(t[315]=e("p",{class:"mb-3 text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式: ",-1)),e("div",Nd,[e("label",qd,[h(e("input",{"onUpdate:modelValue":t[84]||(t[84]=i=>_.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"manual",onChange:Ct},null,544),[[Ie,_.value]]),t[313]||(t[313]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-link mr-1"}),x("手动授权 ")],-1))]),e("label",Wd,[h(e("input",{"onUpdate:modelValue":t[85]||(t[85]=i=>_.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"cookie",onChange:Ct},null,544),[[Ie,_.value]]),t[314]||(t[314]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-cookie mr-1"}),x("Cookie 自动授权 ")],-1))])])]),_.value==="manual"?(o(),n("div",Gd,[t[324]||(t[324]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤通过 Setup Token 完成 Claude 账户的授权: ",-1)),e("div",Fd,[e("div",Qd,[t[318]||(t[318]=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",Bd,[t[317]||(t[317]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),p.value?(o(),n("div",Zd,[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:p.value},null,8,e0),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:it},[e("i",{class:I(te.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:Ot},t[316]||(t[316]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:X.value,onClick:yt},[X.value?(o(),n("div",Yd)):(o(),n("i",Jd)),x(" "+u(X.value?"生成中...":"生成 Setup Token 授权链接"),1)],8,Hd))])])]),t[325]||(t[325]=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,"注意:"),x("如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 ")])])])])],-1)),e("div",t0,[e("div",s0,[t[323]||(t[323]=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",a0,[t[321]||(t[321]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),t[322]||(t[322]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 授权完成后,从返回页面复制 Authorization Code,并粘贴到下方输入框: ",-1)),e("div",r0,[e("div",null,[t[319]||(t[319]=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"}),x("Authorization Code ")],-1)),h(e("textarea",{"onUpdate:modelValue":t[86]||(t[86]=i=>P.value=i),class:"form-input w-full resize-none border-gray-300 font-mono text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"粘贴从Claude Code授权页面获取的Authorization Code...",rows:"3"},null,512),[[z,P.value]])]),t[320]||(t[320]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 请粘贴从Claude Code授权页面复制的Authorization Code ")],-1))])])])])])):y("",!0),_.value==="cookie"?(o(),n("div",l0,[t[331]||(t[331]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 使用 sessionKey 自动完成授权,无需手动打开链接。 ",-1)),e("div",o0,[e("div",n0,[e("div",null,[e("label",i0,[t[326]||(t[326]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),t[327]||(t[327]=x("sessionKey ",-1)),we.value>1?(o(),n("span",d0,u(we.value)+" 个 ",1)):y("",!0)]),h(e("textarea",{"onUpdate:modelValue":t[87]||(t[87]=i=>W.value=i),class:I(["form-input w-full resize-y border-gray-300 font-mono text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":ie.value}]),placeholder:`每行一个 sessionKey,例如:
|
||
sk-ant-sid01-xxxxx...
|
||
sk-ant-sid01-yyyyy...`,rows:"3"},null,2),[[z,W.value]]),we.value>1?(o(),n("p",u0,[t[328]||(t[328]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),x(" 将批量创建 "+u(we.value)+" 个账户 ",1)])):y("",!0),ie.value?(o(),n("p",p0,u(ie.value),1)):y("",!0)]),e("div",null,[e("button",{class:"flex items-center text-xs text-blue-600 hover:text-blue-700",type:"button",onClick:t[88]||(t[88]=i=>L.value=!L.value)},[e("i",{class:I(L.value?"fas fa-chevron-down mr-1":"fas fa-chevron-right mr-1")},null,2),t[329]||(t[329]=x(" 如何获取 sessionKey? ",-1))]),L.value?(o(),n("div",g0,t[330]||(t[330]=[e("ol",{class:"space-y-2 text-xs text-gray-600 dark:text-gray-300"},[e("li",null,[x("1. 在浏览器中登录 "),e("strong",null,"claude.ai")]),e("li",null,[x("2. 按 "),e("strong",null,"F12"),x(" 打开开发者工具")]),e("li",null,[x("3. 切换到 "),e("strong",null,'"Application"'),x(" (应用) 标签页")]),e("li",null,[x(" 4. 在左侧选择 "),e("strong",null,'"Cookies"'),x(" → "),e("strong",null,'"https://claude.ai"')]),e("li",null,[x("5. 找到键为 "),e("strong",null,'"sessionKey"'),x(" 的那一行")]),e("li",null,[x("6. 复制其 "),e("strong",null,'"Value"'),x(" (值) 列的内容")])],-1),e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(' sessionKey 通常以 "sk-ant-" 开头 ')],-1)]))):y("",!0)]),e("button",{class:"btn btn-primary w-full px-4 py-3",disabled:ve.value||!W.value.trim(),type:"button",onClick:mt},[ve.value?(o(),n("div",m0)):(o(),n("i",y0)),ve.value&&C.value.total>1?(o(),n(be,{key:2},[x(" 正在授权 "+u(C.value.current)+"/"+u(C.value.total)+"... ",1)],64)):ve.value?(o(),n(be,{key:3},[x(" 授权中... ")],64)):(o(),n(be,{key:4},[x(" 开始自动授权 ")],64))],8,c0)])]),t[332]||(t[332]=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,"提示:"),x("如果您设置了代理,Cookie授权也会使用相同的代理配置。 ")])],-1))])):y("",!0)])])])])):y("",!0),e("div",x0,[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[89]||(t[89]=i=>ge.value=1)}," 上一步 "),_.value==="manual"?(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!At.value||w.value,type:"button",onClick:tt},[w.value?(o(),n("div",b0)):y("",!0),x(" "+u(w.value?"验证中...":"完成授权"),1)],8,f0)):y("",!0)])])):y("",!0),F.value?(o(),n("div",v0,[e("div",null,[t[335]||(t[335]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),h(e("input",{"onUpdate:modelValue":t[90]||(t[90]=i=>s.value.name=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,512),[[z,s.value.name]])]),e("div",null,[t[336]||(t[336]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),h(e("textarea",{"onUpdate:modelValue":t[91]||(t[91]=i=>s.value.description=i),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[z,s.value.description]])]),e("div",null,[t[340]||(t[340]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",k0,[e("label",h0,[h(e("input",{"onUpdate:modelValue":t[92]||(t[92]=i=>s.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[Ie,s.value.accountType]]),t[337]||(t[337]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",w0,[h(e("input",{"onUpdate:modelValue":t[93]||(t[93]=i=>s.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[Ie,s.value.accountType]]),t[338]||(t[338]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",$0,[h(e("input",{"onUpdate:modelValue":t[94]||(t[94]=i=>s.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[Ie,s.value.accountType]]),t[339]||(t[339]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[341]||(t[341]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),F.value?y("",!0):(o(),n("div",A0,[t[345]||(t[345]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",C0,[h(e("select",{"onUpdate:modelValue":t[95]||(t[95]=i=>s.value.expireDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:Zt},t[342]||(t[342]=[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),[[Ds,s.value.expireDuration]]),s.value.expireDuration==="custom"?(o(),n("div",U0,[h(e("input",{"onUpdate:modelValue":t[96]||(t[96]=i=>s.value.customExpireDate=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Gt.value,type:"datetime-local",onChange:Xt},null,40,I0),[[z,s.value.customExpireDate]])])):y("",!0),s.value.expiresAt?(o(),n("p",T0,[t[343]||(t[343]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),x(" 将于 "+u(vs(s.value.expiresAt))+" 过期 ",1)])):(o(),n("p",K0,t[344]||(t[344]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),x(" 账户永不过期 ",-1)])))]),t[346]||(t[346]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])),s.value.accountType==="group"?(o(),n("div",_0,[t[348]||(t[348]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",P0,[e("div",M0,[e("div",S0,[Be.value.length===0?(o(),n("div",D0," 暂无可用分组 ")):y("",!0),(o(!0),n(be,null,qe(Be.value,i=>(o(),n("label",{key:i.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[h(e("input",{"onUpdate:modelValue":t[97]||(t[97]=re=>s.value.groupIds=re),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i.id},null,8,z0),[[Ve,s.value.groupIds]]),e("span",j0,u(i.name)+" ("+u(i.memberCount||0)+" 个成员) ",1)]))),128)),e("div",{class:"border-t pt-2 dark:border-gray-600"},[e("button",{class:"flex items-center gap-2 text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",type:"button",onClick:It},t[347]||(t[347]=[e("i",{class:"fas fa-plus"},null,-1),x(" 新建分组 ",-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:qt},[e("i",{class:I(["fas fa-sync-alt",{"animate-spin":Et.value}])},null,2)])])])):y("",!0),s.value.platform==="gemini"?(o(),n("div",V0,[t[349]||(t[349]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),h(e("input",{"onUpdate:modelValue":t[98]||(t[98]=i=>s.value.projectId=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[z,s.value.projectId]]),t[350]||(t[350]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," Google Cloud/Workspace 账号可能需要提供项目 ID ",-1))])):y("",!0),s.value.platform==="claude"?(o(),n("div",R0,[t[353]||(t[353]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",O0,[e("label",L0,[h(e("input",{"onUpdate:modelValue":t[99]||(t[99]=i=>s.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[Ie,s.value.subscriptionType]]),t[351]||(t[351]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",E0,[h(e("input",{"onUpdate:modelValue":t[100]||(t[100]=i=>s.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[Ie,s.value.subscriptionType]]),t[352]||(t[352]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[354]||(t[354]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):y("",!0),s.value.platform==="claude"?(o(),n("div",N0,[e("label",q0,[h(e("input",{"onUpdate:modelValue":t[101]||(t[101]=i=>s.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Ve,s.value.autoStopOnWarning]]),t[355]||(t[355]=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))])])):y("",!0),s.value.platform==="claude"?(o(),n("div",W0,[e("label",G0,[h(e("input",{"onUpdate:modelValue":t[102]||(t[102]=i=>s.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Ve,s.value.useUnifiedUserAgent]]),e("div",F0,[t[357]||(t[357]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[358]||(t[358]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),de.value?(o(),n("div",Q0,[e("div",B0,[e("p",H0," 💡 当前统一版本:"+u(de.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:$e.value,type:"button",onClick:fs},[$e.value?(o(),n("div",Z0)):(o(),n("i",Y0)),x(" "+u($e.value?"清除中...":"清除缓存"),1)],8,J0)])])):(o(),n("div",X0,t[356]||(t[356]=[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)])))])])])):y("",!0),s.value.platform==="claude"?(o(),n("div",eu,[e("label",tu,[h(e("input",{"onUpdate:modelValue":t[103]||(t[103]=i=>s.value.useUnifiedClientId=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:Yt},null,544),[[Ve,s.value.useUnifiedClientId]]),e("div",su,[t[362]||(t[362]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[363]||(t[363]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),s.value.useUnifiedClientId?(o(),n("div",au,[e("div",ru,[e("div",{class:"mb-2 flex items-center justify-between"},[t[360]||(t[360]=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:bs},t[359]||(t[359]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x(" 重新生成 ",-1)]))]),e("div",lu,[e("code",ou,[e("span",nu,u(s.value.unifiedClientId.substring(0,8)),1),e("span",iu,u(s.value.unifiedClientId.substring(8,56)),1),e("span",du,u(s.value.unifiedClientId.substring(56)),1)])]),t[361]||(t[361]=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"}),x(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):y("",!0)])])])):y("",!0),e("div",null,[t[364]||(t[364]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),h(e("input",{"onUpdate:modelValue":t[104]||(t[104]=i=>s.value.priority=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高",type:"number"},null,512),[[z,s.value.priority,void 0,{number:!0}]]),t[365]||(t[365]=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(),n("div",uu,[e("div",null,[t[366]||(t[366]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API URL",-1)),h(e("input",{"onUpdate:modelValue":t[105]||(t[105]=i=>s.value.apiUrl=i),class:"form-input w-full",placeholder:"例如:https://api.example.com",required:"",type:"text"},null,512),[[z,s.value.apiUrl]])]),e("div",null,[t[367]||(t[367]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API Key",-1)),h(e("input",{"onUpdate:modelValue":t[106]||(t[106]=i=>s.value.apiKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[z,s.value.apiKey]]),t[368]||(t[368]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",pu,[e("div",null,[t[369]||(t[369]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),h(e("input",{"onUpdate:modelValue":t[107]||(t[107]=i=>s.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[z,s.value.dailyQuota,void 0,{number:!0}]]),t[370]||(t[370]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[371]||(t[371]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),h(e("input",{"onUpdate:modelValue":t[108]||(t[108]=i=>s.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[z,s.value.quotaResetTime]]),t[372]||(t[372]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),F.value&&s.value.dailyQuota>0?(o(),n("div",gu,[e("div",cu,[t[373]||(t[373]=e("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"}," 今日使用情况 ",-1)),e("span",mu," $"+u(nt().toFixed(4))+" / $"+u(s.value.dailyQuota.toFixed(2)),1)]),e("div",yu,[e("div",{class:I(["absolute left-0 top-0 h-full rounded-full transition-all",pt.value>=90?"bg-red-500":pt.value>=70?"bg-yellow-500":"bg-green-500"]),style:Qe({width:`${Math.min(pt.value,100)}%`})},null,6)]),e("div",xu,[e("span",fu," 剩余: $"+u(Math.max(0,s.value.dailyQuota-nt()).toFixed(2)),1),e("span",bu,u(pt.value.toFixed(1))+"% 已使用 ",1)])])):y("",!0),e("div",null,[t[374]||(t[374]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),h(e("input",{"onUpdate:modelValue":t[109]||(t[109]=i=>s.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[z,s.value.maxConcurrentTasks,void 0,{number:!0}]]),t[375]||(t[375]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))]),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)),e("div",vu,[e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",ce.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[110]||(t[110]=i=>ce.value="whitelist")},t[376]||(t[376]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),x(" 模型白名单 ",-1)]),2),e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",ce.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[111]||(t[111]=i=>ce.value="mapping")},t[377]||(t[377]=[e("i",{class:"fas fa-random mr-2"},null,-1),x(" 模型映射 ",-1)]),2)]),ce.value==="whitelist"?(o(),n("div",ku,[t[378]||(t[378]=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"}),x(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",hu,[(o(),n(be,null,qe(Le,i=>e("label",{key:i.value,class:I(["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",Ae.value.includes(i.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[h(e("input",{"onUpdate:modelValue":t[112]||(t[112]=re=>Ae.value=re),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,wu),[[Ve,Ae.value]]),e("span",$u,u(i.label),1)],2)),64))]),e("p",Au,[x(" 已选择 "+u(Ae.value.length)+" 个模型 ",1),Ae.value.length===0?(o(),n("span",Cu,"(支持所有模型)")):y("",!0)])])):(o(),n("div",Uu,[t[382]||(t[382]=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"}),x(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",Iu,[(o(!0),n(be,null,qe(Oe.value,(i,re)=>(o(),n("div",{key:re,class:"flex items-center gap-2"},[h(e("input",{"onUpdate:modelValue":le=>i.from=le,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,Tu),[[z,i.from]]),t[380]||(t[380]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),h(e("input",{"onUpdate:modelValue":le=>i.to=le,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,Ku),[[z,i.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:le=>ms(re)},t[379]||(t[379]=[e("i",{class:"fas fa-trash"},null,-1)]),8,_u)]))),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:Jt},t[381]||(t[381]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 添加模型映射 ",-1)])),e("div",Pu,[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[113]||(t[113]=i=>De("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),e("button",{class:"rounded-lg bg-indigo-100 px-3 py-1 text-xs text-indigo-700 transition-colors hover:bg-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-400 dark:hover:bg-indigo-900/50",type:"button",onClick:t[114]||(t[114]=i=>De("claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929"))}," + Sonnet 4.5 "),e("button",{class:"rounded-lg bg-purple-100 px-3 py-1 text-xs text-purple-700 transition-colors hover:bg-purple-200 dark:bg-purple-900/30 dark:text-purple-400 dark:hover:bg-purple-900/50",type:"button",onClick:t[115]||(t[115]=i=>De("claude-opus-4-1-20250805","claude-opus-4-1-20250805"))}," + Opus 4.1 "),e("button",{class:"rounded-lg bg-green-100 px-3 py-1 text-xs text-green-700 transition-colors hover:bg-green-200 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",type:"button",onClick:t[116]||(t[116]=i=>De("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),e("button",{class:"rounded-lg bg-emerald-100 px-3 py-1 text-xs text-emerald-700 transition-colors hover:bg-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-900/50",type:"button",onClick:t[117]||(t[117]=i=>De("claude-haiku-4-5-20251001","claude-haiku-4-5-20251001"))}," + Haiku 4.5 "),e("button",{class:"rounded-lg bg-cyan-100 px-3 py-1 text-xs text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:hover:bg-cyan-900/50",type:"button",onClick:t[118]||(t[118]=i=>De("deepseek-chat","deepseek-chat"))}," + DeepSeek "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:hover:bg-orange-900/50",type:"button",onClick:t[119]||(t[119]=i=>De("Qwen","Qwen"))}," + Qwen "),e("button",{class:"rounded-lg bg-pink-100 px-3 py-1 text-xs text-pink-700 transition-colors hover:bg-pink-200 dark:bg-pink-900/30 dark:text-pink-400 dark:hover:bg-pink-900/50",type:"button",onClick:t[120]||(t[120]=i=>De("Kimi","Kimi"))}," + Kimi "),e("button",{class:"rounded-lg bg-teal-100 px-3 py-1 text-xs text-teal-700 transition-colors hover:bg-teal-200 dark:bg-teal-900/30 dark:text-teal-400 dark:hover:bg-teal-900/50",type:"button",onClick:t[121]||(t[121]=i=>De("GLM","GLM"))}," + GLM "),e("button",{class:"rounded-lg bg-amber-100 px-3 py-1 text-xs text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50",type:"button",onClick:t[122]||(t[122]=i=>De("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[384]||(t[384]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent (可选)",-1)),h(e("input",{"onUpdate:modelValue":t[123]||(t[123]=i=>s.value.userAgent=i),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[z,s.value.userAgent]]),t[385]||(t[385]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[390]||(t[390]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",Mu,[e("label",Su,[h(e("input",{"onUpdate:modelValue":t[124]||(t[124]=i=>s.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[Ve,s.value.enableRateLimit]]),t[386]||(t[386]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[387]||(t[387]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(o(),n("div",Du,[t[388]||(t[388]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),h(e("input",{"onUpdate:modelValue":t[125]||(t[125]=i=>s.value.rateLimitDuration=i),class:"form-input w-full",min:"1",type:"number"},null,512),[[z,s.value.rateLimitDuration,void 0,{number:!0}]]),t[389]||(t[389]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):y("",!0)])])):y("",!0),s.value.platform==="openai-responses"?(o(),n("div",zu,[e("div",null,[t[391]||(t[391]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 基础地址",-1)),h(e("input",{"onUpdate:modelValue":t[126]||(t[126]=i=>s.value.baseApi=i),class:"form-input w-full",placeholder:"https://api.example.com/v1",type:"url"},null,512),[[z,s.value.baseApi]])]),e("div",null,[t[392]||(t[392]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 密钥",-1)),e("div",ju,[h(e("input",{"onUpdate:modelValue":t[127]||(t[127]=i=>s.value.apiKey=i),class:"form-input w-full pr-10",placeholder:"留空表示不更新",type:q.value?"text":"password"},null,8,Vu),[[ps,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[128]||(t[128]=i=>q.value=!q.value)},[e("i",{class:I(q.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[393]||(t[393]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",null,[t[394]||(t[394]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent",-1)),h(e("input",{"onUpdate:modelValue":t[129]||(t[129]=i=>s.value.userAgent=i),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[z,s.value.userAgent]]),t[395]||(t[395]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),h(e("input",{"onUpdate:modelValue":t[130]||(t[130]=i=>s.value.rateLimitDuration=i),type:"hidden"},null,512),[[z,s.value.rateLimitDuration,void 0,{number:!0}]]),e("div",Ru,[e("div",null,[t[396]||(t[396]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),h(e("input",{"onUpdate:modelValue":t[131]||(t[131]=i=>s.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[z,s.value.dailyQuota,void 0,{number:!0}]])]),e("div",null,[t[397]||(t[397]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),h(e("input",{"onUpdate:modelValue":t[132]||(t[132]=i=>s.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",type:"time"},null,512),[[z,s.value.quotaResetTime]])])]),e("div",null,[t[398]||(t[398]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),h(e("input",{"onUpdate:modelValue":t[133]||(t[133]=i=>s.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[z,s.value.maxConcurrentTasks,void 0,{number:!0}]]),t[399]||(t[399]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))])])):y("",!0),s.value.platform==="gemini-api"?(o(),n("div",Ou,[e("div",null,[t[400]||(t[400]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址",-1)),h(e("input",{"onUpdate:modelValue":t[134]||(t[134]=i=>s.value.baseUrl=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500 dark:border-red-400":T.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",type:"url"},null,2),[[z,s.value.baseUrl]]),T.value.baseUrl?(o(),n("p",Lu,u(T.value.baseUrl),1)):y("",!0),t[401]||(t[401]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[x(" 填写 API 基础地址,必须以 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/models"),x(" 结尾。系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/{model}:generateContent")],-1)),t[402]||(t[402]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[x(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com/v1beta/models")],-1)),t[403]||(t[403]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[x(" 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini/v1beta/models")],-1))]),e("div",null,[t[404]||(t[404]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥",-1)),e("div",Eu,[h(e("input",{"onUpdate:modelValue":t[135]||(t[135]=i=>s.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"留空表示不更新",type:q.value?"text":"password"},null,8,Nu),[[ps,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[136]||(t[136]=i=>q.value=!q.value)},[e("i",{class:I(q.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[405]||(t[405]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))])])):y("",!0),s.value.platform==="bedrock"?(o(),n("div",qu,[e("div",null,[t[406]||(t[406]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 访问密钥 ID",-1)),h(e("input",{"onUpdate:modelValue":t[137]||(t[137]=i=>s.value.accessKeyId=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"text"},null,512),[[z,s.value.accessKeyId]]),t[407]||(t[407]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Access Key ID",-1))]),e("div",null,[t[408]||(t[408]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 秘密访问密钥",-1)),h(e("input",{"onUpdate:modelValue":t[138]||(t[138]=i=>s.value.secretAccessKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[z,s.value.secretAccessKey]]),t[409]||(t[409]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Secret Access Key",-1))]),e("div",null,[t[410]||(t[410]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 区域",-1)),h(e("input",{"onUpdate:modelValue":t[139]||(t[139]=i=>s.value.region=i),class:"form-input w-full",placeholder:"例如:us-east-1",type:"text"},null,512),[[z,s.value.region]]),t[411]||(t[411]=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[412]||(t[412]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"会话令牌 (可选)",-1)),h(e("input",{"onUpdate:modelValue":t[140]||(t[140]=i=>s.value.sessionToken=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[z,s.value.sessionToken]])]),e("div",null,[t[413]||(t[413]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"默认主模型 (可选)",-1)),h(e("input",{"onUpdate:modelValue":t[141]||(t[141]=i=>s.value.defaultModel=i),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[z,s.value.defaultModel]]),t[414]||(t[414]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1))]),e("div",null,[t[415]||(t[415]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),h(e("input",{"onUpdate:modelValue":t[142]||(t[142]=i=>s.value.smallFastModel=i),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[z,s.value.smallFastModel]]),t[416]||(t[416]=e("p",{class:"mt-1 text-xs text-gray-500"},"用于快速响应的轻量级模型,留空将使用系统默认",-1))]),e("div",null,[t[421]||(t[421]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",Wu,[e("label",Gu,[h(e("input",{"onUpdate:modelValue":t[143]||(t[143]=i=>s.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[Ve,s.value.enableRateLimit]]),t[417]||(t[417]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[418]||(t[418]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(o(),n("div",Fu,[t[419]||(t[419]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),h(e("input",{"onUpdate:modelValue":t[144]||(t[144]=i=>s.value.rateLimitDuration=i),class:"form-input w-full",min:"1",type:"number"},null,512),[[z,s.value.rateLimitDuration,void 0,{number:!0}]]),t[420]||(t[420]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):y("",!0)])])):y("",!0),s.value.platform==="azure_openai"?(o(),n("div",Qu,[e("div",null,[t[422]||(t[422]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint",-1)),h(e("input",{"onUpdate:modelValue":t[145]||(t[145]=i=>s.value.azureEndpoint=i),class:I(["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),[[z,s.value.azureEndpoint]]),T.value.azureEndpoint?(o(),n("p",Bu,u(T.value.azureEndpoint),1)):y("",!0)]),e("div",null,[t[423]||(t[423]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),h(e("input",{"onUpdate:modelValue":t[146]||(t[146]=i=>s.value.apiVersion=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[z,s.value.apiVersion]]),t[424]||(t[424]=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[425]||(t[425]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称",-1)),h(e("input",{"onUpdate:modelValue":t[147]||(t[147]=i=>s.value.deploymentName=i),class:I(["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),[[z,s.value.deploymentName]]),T.value.deploymentName?(o(),n("p",Hu,u(T.value.deploymentName),1)):y("",!0)]),e("div",null,[t[426]||(t[426]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),h(e("input",{"onUpdate:modelValue":t[148]||(t[148]=i=>s.value.apiKey=i),class:I(["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),[[z,s.value.apiKey]]),T.value.apiKey?(o(),n("p",Ju,u(T.value.apiKey),1)):y("",!0),t[427]||(t[427]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))]),e("div",null,[t[428]||(t[428]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",Yu,[(o(),n(be,null,qe(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],i=>e("label",{key:i,class:"flex cursor-pointer items-center"},[h(e("input",{"onUpdate:modelValue":t[149]||(t[149]=re=>s.value.supportedModels=re),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,Zu),[[Ve,s.value.supportedModels]]),e("span",Xu,u(i),1)])),64))]),t[429]||(t[429]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"选择此部署支持的模型类型",-1))])])):y("",!0),F.value&&v.value?(o(),n("div",ep,[e("div",tp,[t[435]||(t[435]=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",sp,[e("div",ap,[t[431]||(t[431]=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[150]||(t[150]=i=>Re.value=!0)},t[430]||(t[430]=[e("i",{class:"fas fa-list-ul"},null,-1),e("span",null,"管理 API Key",-1)]))]),e("p",rp,[t[432]||(t[432]=x(" 当前已保存 ",-1)),e("strong",null,u(Pt.value),1),t[433]||(t[433]=x(" 条 API Key。您可以追加新的 Key,或通过下方模式快速覆盖、删除指定 Key。 ",-1))]),t[434]||(t[434]=e("p",{class:"text-xs text-purple-700 dark:text-purple-300"}," 留空表示保留现有 Key 不变;根据所选模式决定是追加、覆盖还是删除输入的 Key。 ",-1))])]),e("div",lp,[e("div",null,[t[436]||(t[436]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 API Key 列表",-1)),h(e("textarea",{"onUpdate:modelValue":t[151]||(t[151]=i=>s.value.apiKeysInput=i),class:I(["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),[[z,s.value.apiKeysInput]]),T.value.apiKeys?(o(),n("p",op,u(T.value.apiKeys),1)):y("",!0)]),e("div",np,[e("div",ip,[t[437]||(t[437]=e("span",{class:"text-sm font-semibold text-purple-800 dark:text-purple-100"},"API Key 更新模式",-1)),e("span",dp,u(lt.value),1)]),e("div",up,[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:Qe(ut.value)},null,4),(o(),n(be,null,qe(Ge,i=>e("button",{key:i.value,class:I(["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===i.value?"text-white drop-shadow-sm":"text-purple-500/80 hover:text-purple-700 dark:text-purple-200/70 dark:hover:text-purple-100"]),type:"button",onClick:re=>s.value.apiKeyUpdateMode=i.value},u(i.label),11,pp)),64))]),e("p",gp,u(ot.value),1)]),t[438]||(t[438]=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"}),x("小提示")]),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))])])):y("",!0),!(F.value&&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"?(o(),n("div",cp,[t[441]||(t[441]=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",mp,[e("div",null,[t[439]||(t[439]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Access Token",-1)),h(e("textarea",{"onUpdate:modelValue":t[152]||(t[152]=i=>s.value.accessToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[z,s.value.accessToken]])]),e("div",null,[t[440]||(t[440]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Refresh Token",-1)),h(e("textarea",{"onUpdate:modelValue":t[153]||(t[153]=i=>s.value.refreshToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[z,s.value.refreshToken]])])])])):y("",!0),st(Os,{modelValue:s.value.proxy,"onUpdate:modelValue":t[154]||(t[154]=i=>s.value.proxy=i)},null,8,["modelValue"]),e("div",yp,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[155]||(t[155]=i=>d.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:Z.value,type:"button",onClick:Xe},[Z.value?(o(),n("div",fp)):y("",!0),x(" "+u(Z.value?"更新中...":"更新"),1)],8,xp)])])):y("",!0)])])):y("",!0),st(Gs,{"cancel-text":at(V).cancelText,"confirm-text":at(V).confirmText,message:at(V).message,show:at(H),title:at(V).title,onCancel:at(k),onConfirm:at(f)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),Dt.value?(o(),Ye(Ol,{key:1,onClose:t[156]||(t[156]=i=>Dt.value=!1),onRefresh:js})):y("",!0),Re.value?(o(),Ye(Vo,{key:2,"account-id":(se=m.account)==null?void 0:se.id,"account-name":(oe=m.account)==null?void 0:oe.name,onClose:t[157]||(t[157]=i=>Re.value=!1),onRefresh:Wt},null,8,["account-id","account-name"])):y("",!0)])}}},Ns=cs(bp,[["__scopeId","data-v-0d0f5745"]]),vp={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},kp={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"},hp={class:"mb-4 flex items-center justify-between sm:mb-6"},wp={class:"flex items-center gap-2 sm:gap-3"},$p={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Ap={class:"space-y-6"},Cp={key:0,class:"mt-1 text-xs text-red-500"},Up={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Ip={key:0,class:"mt-1 text-xs text-red-500"},Tp={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},Kp=["placeholder","required"],_p={key:0,class:"mt-1 text-xs text-red-500"},Pp={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Mp={class:"mb-3"},Sp={class:"inline-flex cursor-pointer items-center"},Dp={key:0},zp={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},jp={class:"mb-3 space-y-2"},Vp=["onUpdate:modelValue"],Rp=["onUpdate:modelValue"],Op=["onClick"],Lp={class:"mt-2 flex gap-3"},Ep=["disabled"],Np={key:0,class:"loading-spinner mr-2"},qp={__name:"CcrAccountForm",props:{account:{type:Object,default:null}},emits:["close","success"],setup(J,{emit:Me}){const m=J,Q=Me,U=$(!0),H=ne(()=>!!m.account),V=$(!1),K=$({name:"",description:"",apiUrl:"",apiKey:"",priority:50,userAgent:"",rateLimitDuration:60,dailyQuota:0,quotaResetTime:"00:00",proxy:null,supportedModels:{}}),f=$(!0),k=$({}),F=$([]),ee=()=>{const w={};for(const p of F.value){const P=(p.from||"").trim(),te=(p.to||"").trim();P&&te&&(w[P]=te)}return w},ae=()=>{F.value.push({from:"",to:""})},ge=w=>{F.value.splice(w,1)},Z=()=>{const w={};return(!K.value.name||K.value.name.trim().length===0)&&(w.name="名称不能为空"),(!K.value.apiUrl||K.value.apiUrl.trim().length===0)&&(w.apiUrl="API URL 不能为空"),!H.value&&(!K.value.apiKey||K.value.apiKey.trim().length===0)&&(w.apiKey="API Key 不能为空"),k.value=w,Object.keys(w).length===0},q=async()=>{if(Z()){V.value=!0;try{if(H.value){const w={name:K.value.name,description:K.value.description,apiUrl:K.value.apiUrl,priority:K.value.priority,userAgent:K.value.userAgent,rateLimitDuration:f.value?Number(K.value.rateLimitDuration||60):0,dailyQuota:Number(K.value.dailyQuota||0),quotaResetTime:K.value.quotaResetTime||"00:00",proxy:K.value.proxy||null,supportedModels:ee()};K.value.apiKey&&K.value.apiKey.trim().length>0&&(w.apiKey=K.value.apiKey);const p=await O.put(`/admin/ccr-accounts/${m.account.id}`,w);p.success?Q("success"):j(p.message||"保存失败","error")}else{const w={name:K.value.name,description:K.value.description,apiUrl:K.value.apiUrl,apiKey:K.value.apiKey,priority:Number(K.value.priority||50),supportedModels:ee(),userAgent:K.value.userAgent,rateLimitDuration:f.value?Number(K.value.rateLimitDuration||60):0,proxy:K.value.proxy,accountType:"shared",dailyQuota:Number(K.value.dailyQuota||0),quotaResetTime:K.value.quotaResetTime||"00:00"},p=await O.post("/admin/ccr-accounts",w);p.success?Q("success"):j(p.message||"创建失败","error")}}catch(w){j(w.message||"请求失败","error")}finally{V.value=!1}}},X=()=>{if(!m.account)return;const w=m.account;K.value.name=w.name||"",K.value.description=w.description||"",K.value.apiUrl=w.apiUrl||"",K.value.priority=Number(w.priority||50),K.value.userAgent=w.userAgent||"",K.value.rateLimitDuration=Number(w.rateLimitDuration||60),K.value.dailyQuota=Number(w.dailyQuota||0),K.value.quotaResetTime=w.quotaResetTime||"00:00",K.value.proxy=w.proxy||null,f.value=K.value.rateLimitDuration>0,F.value=[];const p=w.supportedModels||{};if(p&&typeof p=="object")for(const P of Object.keys(p))F.value.push({from:P,to:p[P]})};return gs(()=>{H.value&&X()}),ye(()=>m.account,()=>{H.value&&X()}),(w,p)=>(o(),Ye(Rt,{to:"body"},[U.value?(o(),n("div",vp,[e("div",kp,[e("div",hp,[e("div",wp,[p[13]||(p[13]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-teal-500 to-emerald-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-code-branch text-sm text-white sm:text-base"})],-1)),e("h3",$p,u(H.value?"编辑 CCR 账户":"添加 CCR 账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:p[0]||(p[0]=P=>w.$emit("close"))},p[14]||(p[14]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",Ap,[e("div",null,[p[15]||(p[15]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称 *",-1)),h(e("input",{"onUpdate:modelValue":p[1]||(p[1]=P=>K.value.name=P),class:I(["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),[[z,K.value.name]]),k.value.name?(o(),n("p",Cp,u(k.value.name),1)):y("",!0)]),e("div",null,[p[16]||(p[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),h(e("textarea",{"onUpdate:modelValue":p[2]||(p[2]=P=>K.value.description=P),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),[[z,K.value.description]])]),e("div",Up,[e("div",null,[p[17]||(p[17]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),h(e("input",{"onUpdate:modelValue":p[3]||(p[3]=P=>K.value.apiUrl=P),class:I(["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),[[z,K.value.apiUrl]]),k.value.apiUrl?(o(),n("p",Ip,u(k.value.apiUrl),1)):y("",!0)]),e("div",null,[e("label",Tp,"API Key "+u(H.value?"(留空不更新)":"*"),1),h(e("input",{"onUpdate:modelValue":p[4]||(p[4]=P=>K.value.apiKey=P),class:I(["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:H.value?"留空表示不更新":"必填",required:!H.value,type:"password"},null,10,Kp),[[z,K.value.apiKey]]),k.value.apiKey?(o(),n("p",_p,u(k.value.apiKey),1)):y("",!0)])]),e("div",Pp,[e("div",null,[p[18]||(p[18]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"优先级",-1)),h(e("input",{"onUpdate:modelValue":p[5]||(p[5]=P=>K.value.priority=P),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),[[z,K.value.priority,void 0,{number:!0}]]),p[19]||(p[19]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议范围:1-100,数字越小优先级越高 ",-1))]),e("div",null,[p[20]||(p[20]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),h(e("input",{"onUpdate:modelValue":p[6]||(p[6]=P=>K.value.userAgent=P),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),[[z,K.value.userAgent]])])]),e("div",null,[p[24]||(p[24]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",Mp,[e("label",Sp,[h(e("input",{"onUpdate:modelValue":p[7]||(p[7]=P=>f.value=P),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),[[Ve,f.value]]),p[21]||(p[21]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制(429 时暂停调度)",-1))])]),f.value?(o(),n("div",Dp,[p[22]||(p[22]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),h(e("input",{"onUpdate:modelValue":p[8]||(p[8]=P=>K.value.rateLimitDuration=P),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),[[z,K.value.rateLimitDuration,void 0,{number:!0}]]),p[23]||(p[23]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):y("",!0)]),e("div",zp,[e("div",null,[p[25]||(p[25]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日额度限制 ($)",-1)),h(e("input",{"onUpdate:modelValue":p[9]||(p[9]=P=>K.value.dailyQuota=P),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),[[z,K.value.dailyQuota,void 0,{number:!0}]]),p[26]||(p[26]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[p[27]||(p[27]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"额度重置时间",-1)),h(e("input",{"onUpdate:modelValue":p[10]||(p[10]=P=>K.value.quotaResetTime=P),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),[[z,K.value.quotaResetTime]]),p[28]||(p[28]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),e("div",null,[p[32]||(p[32]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型映射表 (可选)",-1)),p[33]||(p[33]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",jp,[(o(!0),n(be,null,qe(F.value,(P,te)=>(o(),n("div",{key:te,class:"flex items-center gap-2"},[h(e("input",{"onUpdate:modelValue":Y=>P.from=Y,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,Vp),[[z,P.from]]),p[30]||(p[30]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),h(e("input",{"onUpdate:modelValue":Y=>P.to=Y,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,Rp),[[z,P.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:Y=>ge(te)},p[29]||(p[29]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Op)]))),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:ae},p[31]||(p[31]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 添加模型映射 ",-1)]))]),e("div",null,[st(Os,{modelValue:K.value.proxy,"onUpdate:modelValue":p[11]||(p[11]=P=>K.value.proxy=P)},null,8,["modelValue"])]),e("div",Lp,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:p[12]||(p[12]=P=>w.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:V.value,type:"button",onClick:q},[V.value?(o(),n("div",Np)):y("",!0),x(" "+u(V.value?H.value?"保存中...":"创建中...":H.value?"保存":"创建"),1)],8,Ep)])])])])):y("",!0)]))}},qs=cs(qp,[["__scopeId","data-v-2a966370"]]),Wp={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Gp={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"},Fp={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"},Qp={class:"flex flex-1 items-start gap-3"},Bp={class:"space-y-1"},Hp={class:"flex flex-wrap items-center gap-2"},Jp={class:"text-lg font-semibold text-gray-900 dark:text-gray-100 sm:text-xl"},Yp={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"},Zp={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"},Xp={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},eg={key:0},tg={class:"flex-1 overflow-y-auto px-5 py-4 sm:px-6"},sg={key:0,class:"flex h-[50vh] items-center justify-center"},ag={class:"mb-5 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4"},rg={class:"flex items-start justify-between"},lg={class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"},og={class:"mt-2 text-xl font-semibold text-gray-900 dark:text-gray-100"},ng={class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},ig={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gray-50 dark:bg-gray-800"},dg={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},ug={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"},pg={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"},gg={class:"flex items-center justify-between"},cg={class:"font-semibold text-gray-900 dark:text-gray-100"},mg={class:"mt-2 flex items-center justify-between"},yg={class:"font-semibold text-gray-900 dark:text-gray-100"},xg={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},fg={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"},bg={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"},vg={class:"flex items-center justify-between"},kg={class:"font-semibold text-gray-900 dark:text-gray-100"},hg={class:"mt-2 flex items-center justify-between"},wg={class:"font-semibold text-gray-900 dark:text-gray-100"},$g={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Ag={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"},Cg={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"},Ug={class:"flex items-center justify-between"},Ig={class:"font-semibold text-gray-900 dark:text-gray-100"},Tg={class:"mt-2 flex items-center justify-between"},Kg={class:"font-semibold text-gray-900 dark:text-gray-100"},_g={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Pg={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},Mg={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},Sg={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},Dg={class:"flex items-center justify-between"},zg={class:"font-semibold text-gray-900 dark:text-gray-100"},jg={class:"flex items-center justify-between"},Vg={class:"font-semibold text-gray-900 dark:text-gray-100"},Rg={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Og={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},Lg={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},Eg={class:"flex items-center justify-between"},Ng={class:"font-semibold text-gray-900 dark:text-gray-100"},qg={class:"flex items-center justify-between"},Wg={class:"font-semibold text-gray-900 dark:text-gray-100"},Gg={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Fg={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},Qg={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},Bg={class:"flex items-center justify-between"},Hg={class:"font-semibold text-gray-900 dark:text-gray-100"},Jg={class:"flex items-center justify-between"},Yg={class:"font-semibold text-gray-900 dark:text-gray-100"},Zg={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Xg={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"},ec={class:"mb-4 flex flex-wrap items-center justify-between gap-2"},tc={class:"text-xs text-gray-400 dark:text-gray-500"},sc={class:"h-[260px] sm:h-[300px]"},ac={__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(J,{emit:Me}){const m=J,Q=Me,U=ea(),{isDarkMode:H}=Zs(U),V=$(null);let K=null;const f={claude:"Claude","claude-console":"Claude Console",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid"},k=ne(()=>{var L;return f[(L=m.account)==null?void 0:L.platform]||"未知平台"}),F=ne(()=>{var L;return(L=m.account)!=null&&L.accountType?m.account.accountType==="dedicated"?"专属":m.account.accountType==="group"?"分组":"共享":"共享"}),ee=ne(()=>({text:H.value?"#e5e7eb":"#374151",grid:H.value?"rgba(75, 85, 99, 0.25)":"rgba(209, 213, 219, 0.4)",cost:"#3b82f6",costFill:"rgba(59, 130, 246, 0.15)",requests:"#f97316"})),ae=ne(()=>{var L;return((L=m.summary)==null?void 0:L.totalTokens)||0}),ge=ne(()=>{var L,C;return((C=(L=m.overview)==null?void 0:L.total)==null?void 0:C.inputTokens)||0}),Z=ne(()=>{var L,C;return((C=(L=m.overview)==null?void 0:L.total)==null?void 0:C.outputTokens)||0}),q=L=>{const C=Number(L||0);return C>=1e6?`${(C/1e6).toFixed(2)}M`:C>=1e3?`${(C/1e3).toFixed(2)}K`:C.toLocaleString()},X=L=>{const C=Number(L||0);return Number.isNaN(C)?"$0.000000":C>=1?`$${C.toFixed(2)}`:C>=.01?`$${C.toFixed(3)}`:`$${C.toFixed(6)}`},w=L=>Math.round((Number(L)||0)*100)/100,p=L=>{if(!L)return"-";const C=new Date(L);if(Number.isNaN(C.getTime())){const $e=L.split("-");return $e.length===3?`${$e[1]}-${$e[2]}`:L}const we=String(C.getMonth()+1).padStart(2,"0"),de=String(C.getDate()).padStart(2,"0");return`${we}-${de}`},P=L=>{if(!L)return"暂无";const C=new Date(L);return Number.isNaN(C.getTime())?L:`${C.getFullYear()}-${String(C.getMonth()+1).padStart(2,"0")}-${String(C.getDate()).padStart(2,"0")} ${String(C.getHours()).padStart(2,"0")}:${String(C.getMinutes()).padStart(2,"0")}`},te=(L,C)=>{if(!L)return 0;const we=m.history.find(de=>de.date===L);return we&&we[C]||0},Y=ne(()=>{var L,C;return m.generatedAt||((L=m.summary)==null?void 0:L.generatedAt)||((C=m.summary)==null?void 0:C.generated_at)||""}),_=ne(()=>{var L,C,we,de,$e,Ce,Re,B;return[{key:"totalCost",label:"30天总费用",value:((L=m.summary)==null?void 0:L.totalCostFormatted)||"$0.000000",subtitle:"累计成本",icon:"fa-file-invoice-dollar",iconClass:"text-emerald-500"},{key:"totalRequests",label:"30天总请求",value:q(((C=m.summary)==null?void 0:C.totalRequests)||0),subtitle:"调用次数",icon:"fa-paper-plane",iconClass:"text-blue-500"},{key:"avgCost",label:"日均费用",value:((we=m.summary)==null?void 0:we.avgDailyCostFormatted)||X(((de=m.summary)==null?void 0:de.avgDailyCost)||0),subtitle:($e=m.summary)!=null&&$e.actualDaysUsed&&((Ce=m.summary)==null?void 0:Ce.actualDaysUsed)<((Re=m.summary)==null?void 0:Re.days)?`基于 ${m.summary.actualDaysUsed} 天实际使用`:"平均每日成本",icon:"fa-wave-square",iconClass:"text-purple-500"},{key:"avgRequests",label:"日均请求",value:q(w(((B=m.summary)==null?void 0:B.avgDailyRequests)||0)),subtitle:"平均每日调用",icon:"fa-chart-line",iconClass:"text-orange-500"}]}),W=async()=>{if(await Rs(),!m.show||!V.value)return;if(K&&K.destroy(),!m.history||m.history.length===0){K=null;return}const L=m.history.map(de=>de.label),C=m.history.map(de=>de.cost||0),we=m.history.map(de=>de.requests||0);K=new ta(V.value,{type:"line",data:{labels:L,datasets:[{label:"费用 (USD)",data:C,borderColor:ee.value.cost,backgroundColor:ee.value.costFill,tension:.35,fill:!0,yAxisID:"y"},{label:"请求次数",data:we,borderColor:ee.value.requests,backgroundColor:"transparent",tension:.35,yAxisID:"y1"}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{labels:{color:ee.value.text}},tooltip:{callbacks:{label(de){return de.dataset.label==="费用 (USD)"?`${de.dataset.label}: ${X(de.parsed.y)}`:`${de.dataset.label}: ${q(de.parsed.y)} 次`}}}},scales:{x:{ticks:{color:ee.value.text},grid:{color:ee.value.grid}},y:{position:"left",ticks:{color:ee.value.text,callback:de=>X(de)},grid:{color:ee.value.grid}},y1:{position:"right",ticks:{color:ee.value.text,callback:de=>q(de)},grid:{drawOnChartArea:!1}}}}})},ve=()=>{K&&(K.destroy(),K=null)},ie=()=>{ve(),Q("close")};return ye(()=>m.show,L=>{L&&!m.loading?W():L||ve()}),ye(()=>m.loading,L=>{!L&&m.show&&W()}),ye(()=>m.history,()=>{m.show&&!m.loading&&W()},{deep:!0}),ye(H,()=>{m.show&&!m.loading&&W()}),zs(()=>{ve()}),(L,C)=>{var we,de,$e,Ce,Re,B,A,R,ue,G,g,s,ce,Ae,Le,Oe,$t,dt,Ge,ut,lt,ot,T,_t,At,nt,pt,Pt,v,c,D,Fe,yt,Ot,it,tt,mt,Mt,Ct,Lt,Ut;return o(),Ye(Rt,{to:"body"},[J.show?(o(),n("div",Wp,[e("div",{class:"absolute inset-0",onClick:ie}),e("div",Gp,[e("div",Fp,[e("div",Qp,[C[2]||(C[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",Bp,[e("div",Hp,[e("h3",Jp,u(((we=J.account)==null?void 0:we.name)||((de=J.account)==null?void 0:de.email)||"账号使用详情"),1),($e=J.account)!=null&&$e.platform?(o(),n("span",Yp,[C[0]||(C[0]=e("i",{class:"fas fa-layer-group mr-1"},null,-1)),x(u(k.value),1)])):y("",!0),(Ce=J.account)!=null&&Ce.accountType?(o(),n("span",Zp,[C[1]||(C[1]=e("i",{class:"fas fa-user-tag mr-1"},null,-1)),x(u(F.value),1)])):y("",!0)]),e("p",Xp,[x(" 近 "+u(((Re=J.summary)==null?void 0:Re.days)||30)+" 天内的费用与请求趋势 ",1),(B=J.summary)!=null&&B.actualDaysUsed&&((A=J.summary)==null?void 0:A.actualDaysUsed)<((R=J.summary)==null?void 0:R.days)?(o(),n("span",eg," (日均基于实际使用 "+u(J.summary.actualDaysUsed)+" 天) ",1)):y("",!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:ie},C[3]||(C[3]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",tg,[J.loading?(o(),n("div",sg,C[4]||(C[4]=[e("div",{class:"loading-spinner h-12 w-12 border-4 border-blue-500"},null,-1)]))):(o(),n(be,{key:1},[e("div",ag,[(o(!0),n(be,null,qe(_.value,Ze=>(o(),n("div",{key:Ze.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",rg,[e("div",null,[e("p",lg,u(Ze.label),1),e("p",og,u(Ze.value),1),e("p",ng,u(Ze.subtitle),1)]),e("div",ig,[e("i",{class:I(["fas",Ze.icon,Ze.iconClass])},null,2)])])]))),128))]),e("div",dg,[e("div",ug,[C[8]||(C[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"}),x(" 今日概览 ")],-1)),e("div",pg,[e("div",gg,[C[5]||(C[5]=e("span",null,"费用",-1)),e("span",cg,u(((G=(ue=J.summary)==null?void 0:ue.today)==null?void 0:G.costFormatted)||"$0.000000"),1)]),e("div",mg,[C[6]||(C[6]=e("span",null,"请求",-1)),e("span",yg,u(q(((s=(g=J.summary)==null?void 0:g.today)==null?void 0:s.requests)||0)),1)]),e("div",xg,[C[7]||(C[7]=e("span",null,"Tokens",-1)),e("span",null,u(q(((Ae=(ce=J.summary)==null?void 0:ce.today)==null?void 0:Ae.tokens)||0)),1)])])]),e("div",fg,[C[12]||(C[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"}),x(" 最高费用日 ")],-1)),e("div",bg,[e("div",vg,[C[9]||(C[9]=e("span",null,"日期",-1)),e("span",kg,u(p((Oe=(Le=J.summary)==null?void 0:Le.highestCostDay)==null?void 0:Oe.date)),1)]),e("div",hg,[C[10]||(C[10]=e("span",null,"费用",-1)),e("span",wg,u(((dt=($t=J.summary)==null?void 0:$t.highestCostDay)==null?void 0:dt.formattedCost)||"$0.000000"),1)]),e("div",$g,[C[11]||(C[11]=e("span",null,"请求",-1)),e("span",null,u(q(te((ut=(Ge=J.summary)==null?void 0:Ge.highestCostDay)==null?void 0:ut.date,"requests"))),1)])])]),e("div",Ag,[C[16]||(C[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"}),x(" 最高请求日 ")],-1)),e("div",Cg,[e("div",Ug,[C[13]||(C[13]=e("span",null,"日期",-1)),e("span",Ig,u(p((ot=(lt=J.summary)==null?void 0:lt.highestRequestDay)==null?void 0:ot.date)),1)]),e("div",Tg,[C[14]||(C[14]=e("span",null,"请求",-1)),e("span",Kg,u(q(((_t=(T=J.summary)==null?void 0:T.highestRequestDay)==null?void 0:_t.requests)||0)),1)]),e("div",_g,[C[15]||(C[15]=e("span",null,"费用",-1)),e("span",null,u(X(te((nt=(At=J.summary)==null?void 0:At.highestRequestDay)==null?void 0:nt.date,"cost"))),1)])])])]),e("div",Pg,[e("div",Mg,[C[20]||(C[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"}),x(" 累计 Token ")],-1)),e("div",Sg,[e("div",Dg,[C[17]||(C[17]=e("span",null,"30天总计",-1)),e("span",zg,u(q(ae.value)),1)]),e("div",jg,[C[18]||(C[18]=e("span",null,"日均 Token",-1)),e("span",Vg,u(q(Math.round(((pt=J.summary)==null?void 0:pt.avgDailyTokens)||0))),1)]),e("div",Rg,[C[19]||(C[19]=e("span",null,"输入 / 输出",-1)),e("span",null,u(q(ge.value))+" / "+u(q(Z.value)),1)])])]),e("div",Og,[C[24]||(C[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"}),x(" 平均速率 ")],-1)),e("div",Lg,[e("div",Eg,[C[21]||(C[21]=e("span",null,"RPM",-1)),e("span",Ng,u(((v=(Pt=J.overview)==null?void 0:Pt.averages)==null?void 0:v.rpm)??0),1)]),e("div",qg,[C[22]||(C[22]=e("span",null,"TPM",-1)),e("span",Wg,u(((D=(c=J.overview)==null?void 0:c.averages)==null?void 0:D.tpm)??0),1)]),e("div",Gg,[C[23]||(C[23]=e("span",null,"日均请求 / Token",-1)),e("span",null,u(q(Math.round((((yt=(Fe=J.overview)==null?void 0:Fe.averages)==null?void 0:yt.dailyRequests)||0)*100)/100))+" / "+u(q(Math.round((((it=(Ot=J.overview)==null?void 0:Ot.averages)==null?void 0:it.dailyTokens)||0)*100)/100)),1)])])]),e("div",Fg,[C[28]||(C[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"}),x(" 最近统计 ")],-1)),e("div",Qg,[e("div",Bg,[C[25]||(C[25]=e("span",null,"今日请求",-1)),e("span",Hg,u(q(((mt=(tt=J.overview)==null?void 0:tt.daily)==null?void 0:mt.requests)||0)),1)]),e("div",Jg,[C[26]||(C[26]=e("span",null,"今日 Token",-1)),e("span",Yg,u(q(((Ct=(Mt=J.overview)==null?void 0:Mt.daily)==null?void 0:Ct.allTokens)||0)),1)]),e("div",Zg,[C[27]||(C[27]=e("span",null,"今日费用",-1)),e("span",null,u(X(((Ut=(Lt=J.overview)==null?void 0:Lt.daily)==null?void 0:Ut.cost)||0)),1)])])])]),e("div",Xg,[e("div",ec,[C[29]||(C[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"}),x(" 30天费用与请求趋势 ")],-1)),e("span",tc," 最新更新时间:"+u(P(Y.value)),1)]),e("div",sc,[e("canvas",{ref_key:"chartCanvas",ref:V,class:"h-full w-full"},null,512)])])],64))])])])):y("",!0)])}}},rc=cs(ac,[["__scopeId","data-v-2d353513"]]),lc={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},oc={class:"modal-content relative mx-auto w-full max-w-lg p-8"},nc={class:"mb-6 flex items-center justify-between"},ic={class:"flex items-center gap-3"},dc={class:"text-sm text-gray-600 dark:text-gray-400"},uc={class:"space-y-6"},pc={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"},gc={class:"flex items-center justify-between"},cc={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},mc={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},yc={class:"mb-3 grid grid-cols-3 gap-2"},xc=["onClick"],fc={key:0,class:"animate-fadeIn"},bc=["min"],vc={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"},kc={class:"flex items-center justify-between"},hc={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},wc={class:"flex gap-3 pt-2"},$c=["disabled"],Ac={key:0,class:"loading-spinner mr-2"},Cc={key:1,class:"fas fa-save mr-2"},Uc={__name:"AccountExpiryEditModal",props:{show:{type:Boolean,required:!0},account:{type:Object,required:!0}},emits:["close","save"],setup(J,{expose:Me,emit:m}){const Q=J,U=m,H=$(!1),V=Xs({expireDuration:"",customExpireDate:"",expiresAt:null}),K=[{value:"",label:"永不过期"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],f=ne(()=>{const w=new Date;return w.setMinutes(w.getMinutes()+1),w.toISOString().slice(0,16)});ye(()=>Q.show,w=>{w&&k()}),ye(()=>{var w;return(w=Q.account)==null?void 0:w.id},w=>{w&&Q.show&&k()});const k=()=>{H.value=!1,Q.account.expiresAt?(V.expireDuration="custom",V.customExpireDate=new Date(Q.account.expiresAt).toISOString().slice(0,16),V.expiresAt=Q.account.expiresAt):(V.expireDuration="",V.customExpireDate="",V.expiresAt=null)},F=w=>{if(V.expireDuration=w,!w){V.expiresAt=null;return}if(w==="custom")return;const p=new Date,P=w.match(/(\d+)([dhmy])/);if(P){const[,te,Y]=P,_=parseInt(te);switch(Y){case"d":p.setDate(p.getDate()+_);break;case"h":p.setHours(p.getHours()+_);break;case"m":p.setMonth(p.getMonth()+_);break;case"y":p.setFullYear(p.getFullYear()+_);break}V.expiresAt=p.toISOString()}},ee=()=>{if(V.customExpireDate)try{const[w,p]=V.customExpireDate.split("T"),[P,te,Y]=w.split("-").map(Number),[_,W]=p.split(":").map(Number),ve=new Date(P,te-1,Y,_,W,0,0);if(isNaN(ve.getTime())){console.error("Invalid date:",V.customExpireDate);return}V.expiresAt=ve.toISOString()}catch(w){console.error("Failed to parse custom expire date:",w)}},ae=w=>w?new Date(w).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",ge=w=>w?new Date(w)<new Date:!1,Z=w=>{if(!w)return null;const p=new Date,te=new Date(w)-p,Y=Math.ceil(te/(1e3*60*60*24));return te<0?{text:"已过期",class:"text-red-600"}:Y<=7?{text:`${Y} 天后过期`,class:"text-orange-600"}:Y<=30?{text:`${Y} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(Y/30)} 个月后过期`,class:"text-green-600"}},q=()=>{H.value=!0,U("save",{accountId:Q.account.id,expiresAt:V.expiresAt})};return Me({resetSaving:()=>{H.value=!1}}),(w,p)=>(o(),Ye(Rt,{to:"body"},[J.show?(o(),n("div",lc,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:p[0]||(p[0]=P=>w.$emit("close"))}),e("div",oc,[e("div",nc,[e("div",ic,[p[6]||(p[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600"},[e("i",{class:"fas fa-clock text-white"})],-1)),e("div",null,[p[5]||(p[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改到期时间",-1)),e("p",dc,' 为 "'+u(J.account.name||"Account")+'" 设置新的到期时间 ',1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:p[1]||(p[1]=P=>w.$emit("close"))},p[7]||(p[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",uc,[e("div",pc,[e("div",gc,[e("div",null,[p[10]||(p[10]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",cc,[J.account.expiresAt?(o(),n(be,{key:0},[x(u(ae(J.account.expiresAt))+" ",1),Z(J.account.expiresAt)?(o(),n("span",{key:0,class:I(["ml-2 text-xs font-normal",Z(J.account.expiresAt).class])}," ("+u(Z(J.account.expiresAt).text)+") ",3)):y("",!0)],64)):(o(),n(be,{key:1},[p[8]||(p[8]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),p[9]||(p[9]=x(" 永不过期 ",-1))],64))])]),e("div",mc,[e("i",{class:I(["fas fa-hourglass-half text-lg",J.account.expiresAt&&ge(J.account.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),e("div",null,[p[12]||(p[12]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",yc,[(o(),n(be,null,qe(K,P=>e("button",{key:P.value,class:I(["rounded-lg px-3 py-2 text-sm font-medium transition-all",V.expireDuration===P.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:te=>F(P.value)},u(P.label),11,xc)),64)),e("button",{class:I(["rounded-lg px-3 py-2 text-sm font-medium transition-all",V.expireDuration==="custom"?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:p[2]||(p[2]=P=>F("custom"))},p[11]||(p[11]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),x(" 自定义 ",-1)]),2)])]),V.expireDuration==="custom"?(o(),n("div",fc,[p[13]||(p[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),h(e("input",{"onUpdate:modelValue":p[3]||(p[3]=P=>V.customExpireDate=P),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:f.value,type:"datetime-local",onChange:ee},null,40,bc),[[z,V.customExpireDate]]),p[14]||(p[14]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为到期时间 ",-1))])):y("",!0),V.expiresAt!==J.account.expiresAt?(o(),n("div",vc,[e("div",kc,[e("div",null,[p[17]||(p[17]=e("p",{class:"mb-1 text-xs font-medium text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-arrow-right mr-1"}),x(" 新的到期时间 ")],-1)),e("p",hc,[V.expiresAt?(o(),n(be,{key:0},[x(u(ae(V.expiresAt))+" ",1),Z(V.expiresAt)?(o(),n("span",{key:0,class:I(["ml-2 text-xs font-normal",Z(V.expiresAt).class])}," ("+u(Z(V.expiresAt).text)+") ",3)):y("",!0)],64)):(o(),n(be,{key:1},[p[15]||(p[15]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),p[16]||(p[16]=x(" 永不过期 ",-1))],64))])]),p[18]||(p[18]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},[e("i",{class:"fas fa-check text-lg text-green-500"})],-1))])])):y("",!0),e("div",wc,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:p[4]||(p[4]=P=>w.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:H.value||V.expiresAt===J.account.expiresAt,onClick:q},[H.value?(o(),n("div",Ac)):(o(),n("i",Cc)),x(" "+u(H.value?"保存中...":"保存更改"),1)],8,$c)])])])])):y("",!0)]))}},Ic=cs(Uc,[["__scopeId","data-v-f19e4a71"]]),Tc={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Kc={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},_c={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},Pc={class:"flex items-center gap-3"},Mc={class:"text-xs text-gray-500 dark:text-gray-400"},Sc=["disabled"],Dc={class:"px-5 py-4"},zc={class:"mb-4 space-y-2"},jc={class:"flex items-center justify-between text-sm"},Vc={class:"flex items-center justify-between text-sm"},Rc={class:"font-medium text-gray-700 dark:text-gray-300"},Oc={class:"flex items-center gap-3"},Lc={class:"text-xs text-gray-500 dark:text-gray-400"},Ec={key:0,class:"mb-4 overflow-hidden rounded-xl border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"},Nc={class:"flex items-center justify-between border-b border-gray-200 bg-gray-100 px-3 py-2 dark:border-gray-700 dark:bg-gray-800"},qc={key:0,class:"text-xs text-gray-500 dark:text-gray-500"},Wc={class:"max-h-40 overflow-y-auto p-3"},Gc={key:0,class:"whitespace-pre-wrap text-sm text-gray-700 dark:text-gray-300"},Fc={key:0,class:"inline-block h-4 w-1 animate-pulse bg-blue-500"},Qc={key:1,class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Bc={key:2,class:"text-sm text-red-600 dark:text-red-400"},Hc={key:1,class:"mb-4 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-gray-400"},Jc={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},Yc=["disabled"],Zc=["disabled"],Xc={__name:"AccountTestModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:null}},emits:["close"],setup(J,{emit:Me}){const m=J,Q=Me,U=$("idle"),H=$(""),V=$(""),K=$(0),f=$(null),k=$(null),F=$("claude-sonnet-4-5-20250929"),ee=ne(()=>{if(!m.account)return"未知";const ie=m.account.platform;return ie==="claude"?"Claude OAuth":ie==="claude-console"?"Claude Console":ie}),ae=ne(()=>{if(!m.account)return"fas fa-question";const ie=m.account.platform;return ie==="claude"||ie==="claude-console"?"fas fa-brain":"fas fa-robot"}),ge=ne(()=>{if(!m.account)return"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300";const ie=m.account.platform;return ie==="claude"?"bg-indigo-100 text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300":ie==="claude-console"?"bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300":"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300"}),Z=ne(()=>{switch(U.value){case"idle":return"准备就绪";case"testing":return"正在测试...";case"success":return"测试成功";case"error":return"测试失败";default:return"未知状态"}}),q=ne(()=>{switch(U.value){case"idle":return"点击下方按钮开始测试账户连通性";case"testing":return"正在发送测试请求并等待响应";case"success":return"账户可以正常访问 Claude API";case"error":return V.value||"无法连接到 Claude API";default:return""}}),X=ne(()=>{switch(U.value){case"idle":return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50";case"testing":return"border-blue-200 bg-blue-50 dark:border-blue-500/30 dark:bg-blue-900/20";case"success":return"border-green-200 bg-green-50 dark:border-green-500/30 dark:bg-green-900/20";case"error":return"border-red-200 bg-red-50 dark:border-red-500/30 dark:bg-red-900/20";default:return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"}}),w=ne(()=>{switch(U.value){case"idle":return"bg-gray-200 dark:bg-gray-700";case"testing":return"bg-blue-100 dark:bg-blue-500/30";case"success":return"bg-green-100 dark:bg-green-500/30";case"error":return"bg-red-100 dark:bg-red-500/30";default:return"bg-gray-200 dark:bg-gray-700"}}),p=ne(()=>{switch(U.value){case"idle":return"fa-hourglass-start";case"testing":return"fa-spinner fa-spin";case"success":return"fa-check-circle";case"error":return"fa-exclamation-circle";default:return"fa-question-circle"}}),P=ne(()=>{switch(U.value){case"idle":return"text-gray-500 dark:text-gray-400";case"testing":return"text-blue-500 dark:text-blue-400";case"success":return"text-green-500 dark:text-green-400";case"error":return"text-red-500 dark:text-red-400";default:return"text-gray-500 dark:text-gray-400"}}),te=ne(()=>{switch(U.value){case"idle":return"text-gray-700 dark:text-gray-300";case"testing":return"text-blue-700 dark:text-blue-300";case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";default:return"text-gray-700 dark:text-gray-300"}});function Y(){if(!m.account)return"";const ie=m.account.platform;return ie==="claude"?`${Ls}/admin/claude-accounts/${m.account.id}/test`:ie==="claude-console"?`${Ls}/admin/claude-console-accounts/${m.account.id}/test`:""}async function _(){if(!m.account)return;U.value="testing",H.value="",V.value="",K.value=0,f.value=Date.now(),k.value&&k.value.close();const ie=Y();if(!ie){U.value="error",V.value="不支持的账户类型";return}try{const L=localStorage.getItem("authToken"),C=await fetch(ie,{method:"POST",headers:{"Content-Type":"application/json",Authorization:L?`Bearer ${L}`:""},body:JSON.stringify({model:F.value})});if(!C.ok){const Ce=await C.json().catch(()=>({}));throw new Error(Ce.message||`HTTP ${C.status}`)}const we=C.body.getReader(),de=new TextDecoder;let $e=!1;for(;!$e;){const{done:Ce,value:Re}=await we.read();if(Ce){$e=!0;continue}const A=de.decode(Re).split(`
|
||
`);for(const R of A)if(R.startsWith("data: "))try{const ue=JSON.parse(R.substring(6));W(ue)}catch{}}}catch(L){U.value="error",V.value=L.message||"连接失败",K.value=Date.now()-f.value}}function W(ie){switch(ie.type){case"test_start":break;case"content":H.value+=ie.text;break;case"message_stop":break;case"test_complete":K.value=Date.now()-f.value,ie.success?U.value="success":(U.value="error",V.value=ie.error||"测试失败");break;case"error":U.value="error",V.value=ie.error||"未知错误",K.value=Date.now()-f.value;break}}function ve(){U.value!=="testing"&&(k.value&&(k.value.close(),k.value=null),U.value="idle",H.value="",V.value="",K.value=0,Q("close"))}return ye(()=>m.show,ie=>{ie&&(U.value="idle",H.value="",V.value="",K.value=0)}),zs(()=>{k.value&&k.value.close()}),(ie,L)=>{var C;return o(),Ye(Rt,{to:"body"},[J.show?(o(),n("div",Tc,[e("div",{class:"absolute inset-0",onClick:ve}),e("div",Kc,[e("div",_c,[e("div",Pc,[e("div",{class:I(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl text-white shadow-lg",U.value==="success"?"bg-gradient-to-br from-green-500 to-emerald-500":U.value==="error"?"bg-gradient-to-br from-red-500 to-pink-500":"bg-gradient-to-br from-blue-500 to-indigo-500"])},[e("i",{class:I(["fas",U.value==="idle"?"fa-vial":U.value==="testing"?"fa-spinner fa-spin":U.value==="success"?"fa-check":"fa-times"])},null,2)],2),e("div",null,[L[0]||(L[0]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},"账户连通性测试",-1)),e("p",Mc,u(((C=J.account)==null?void 0:C.name)||"未知账户"),1)])]),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:U.value==="testing",onClick:ve},L[1]||(L[1]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,Sc)]),e("div",Dc,[e("div",zc,[e("div",jc,[L[2]||(L[2]=e("span",{class:"text-gray-500 dark:text-gray-400"},"平台类型",-1)),e("span",{class:I(["inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium",ge.value])},[e("i",{class:I(ae.value)},null,2),x(" "+u(ee.value),1)],2)]),e("div",Vc,[L[3]||(L[3]=e("span",{class:"text-gray-500 dark:text-gray-400"},"测试模型",-1)),e("span",Rc,u(F.value),1)])]),e("div",{class:I(["mb-4 rounded-xl border p-4 transition-all duration-300",X.value])},[e("div",Oc,[e("div",{class:I(["flex h-8 w-8 items-center justify-center rounded-lg",w.value])},[e("i",{class:I(["fas text-sm",p.value,P.value])},null,2)],2),e("div",null,[e("p",{class:I(["font-medium",te.value])},u(Z.value),3),e("p",Lc,u(q.value),1)])])],2),U.value!=="idle"?(o(),n("div",Ec,[e("div",Nc,[L[4]||(L[4]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"AI 响应",-1)),H.value?(o(),n("span",qc,u(H.value.length)+" 字符 ",1)):y("",!0)]),e("div",Wc,[H.value?(o(),n("p",Gc,[x(u(H.value)+" ",1),U.value==="testing"?(o(),n("span",Fc)):y("",!0)])):U.value==="testing"?(o(),n("p",Qc,L[5]||(L[5]=[e("i",{class:"fas fa-circle-notch fa-spin"},null,-1),x(" 等待响应中... ",-1)]))):U.value==="error"&&V.value?(o(),n("p",Bc,u(V.value),1)):y("",!0)])])):y("",!0),K.value>0?(o(),n("div",Hc,[L[6]||(L[6]=e("i",{class:"fas fa-clock"},null,-1)),e("span",null,"耗时 "+u((K.value/1e3).toFixed(2))+" 秒",1)])):y("",!0)]),e("div",Jc,[e("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:U.value==="testing",onClick:ve}," 关闭 ",8,Yc),e("button",{class:I(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",U.value==="testing"?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:U.value==="testing",onClick:_},[e("i",{class:I(["fas",U.value==="testing"?"fa-spinner fa-spin":"fa-play"])},null,2),x(" "+u(U.value==="testing"?"测试中...":U.value==="idle"?"开始测试":"重新测试"),1)],10,Zc)])])])):y("",!0)])}}},em={class:"accounts-container"},tm={class:"card p-4 sm:p-6"},sm={class:"mb-4 flex flex-col gap-4 sm:mb-6"},am={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},rm={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},lm={class:"group relative min-w-[160px]"},om={class:"group relative min-w-[140px]"},nm={class:"group relative min-w-[160px]"},im={class:"group relative min-w-[200px]"},dm={class:"relative flex items-center"},um={class:"flex w-full flex-col gap-3 sm:w-auto sm:flex-row sm:items-center sm:gap-3"},pm={class:"relative"},gm=["disabled"],cm={class:"relative"},mm={key:0,class:"py-12 text-center"},ym={key:1,class:"py-12 text-center"},xm={key:2,class:"table-wrapper hidden md:block"},fm={class:"w-full"},bm={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},vm={key:0,class:"checkbox-column sticky left-0 z-20 min-w-[50px] px-3 py-4 text-left"},km={class:"flex items-center"},hm=["indeterminate"],wm={key:1,class:"fas fa-sort ml-1 text-gray-400"},$m={key:1,class:"fas fa-sort ml-1 text-gray-400"},Am={key:1,class:"fas fa-sort ml-1 text-gray-400"},Cm={class:"min-w-[210px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},Um={class:"flex items-center gap-2"},Im={key:1,class:"fas fa-sort ml-1 text-gray-400"},Tm={key:1,class:"fas fa-sort ml-1 text-gray-400"},Km={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},_m={key:0,class:"checkbox-column sticky left-0 z-10 px-3 py-3"},Pm={class:"flex items-center"},Mm=["value"],Sm={class:"flex items-center"},Dm={class:"min-w-0"},zm={class:"flex items-center gap-2"},jm=["title"],Vm={key:0,class:"inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-800"},Rm={key:1,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800"},Om={key:2,class:"inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800"},Lm={key:0,class:"my-2 flex flex-wrap items-center gap-2"},Em=["title"],Nm=["title"],qm={class:"px-3 py-4"},Wm={class:"flex items-center gap-1"},Gm={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"},Fm={class:"text-xs font-medium text-yellow-700"},Qm={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"},Bm={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"},Hm={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"},Jm={class:"text-xs font-medium text-gray-950"},Ym={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"},Zm={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"},Xm={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"},ey={class:"text-xs font-semibold text-indigo-800"},ty={class:"text-xs font-medium text-indigo-700"},sy={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"},ay={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"},ry={class:"text-xs font-medium text-cyan-700 dark:text-cyan-300"},ly={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"},oy={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"},ny={class:"w-[100px] min-w-[100px] max-w-[100px] whitespace-nowrap px-3 py-4"},iy={class:"flex flex-col gap-1"},dy={key:0,class:"inline-flex items-center rounded-full bg-yellow-100 px-3 py-1 text-xs font-semibold text-yellow-800"},uy={key:0},py={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-3 py-1 text-xs font-semibold text-gray-700"},gy=["title"],cy={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},my={class:"whitespace-nowrap px-3 py-4 text-sm"},yy={key:0,class:"space-y-1"},xy={class:"flex items-center gap-2"},fy={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},by={class:"flex items-center gap-2"},vy={class:"text-xs text-gray-600 dark:text-gray-300"},ky={class:"flex items-center gap-2"},hy={class:"text-xs text-gray-600 dark:text-gray-300"},wy={key:0,class:"text-xs text-gray-500 dark:text-gray-400"},$y={key:1,class:"text-xs text-gray-400"},Ay={class:"whitespace-nowrap px-3 py-4"},Cy={key:0,class:"space-y-2"},Uy={key:0,class:"space-y-2"},Iy={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Ty={class:"flex items-center gap-2"},Ky={class:"flex-1"},_y={class:"flex items-center gap-2"},Py={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},My={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Sy={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Dy={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},zy={class:"flex items-center gap-2"},jy={class:"flex-1"},Vy={class:"flex items-center gap-2"},Ry={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Oy={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Ly={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Ey={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Ny={class:"flex items-center gap-2"},qy={class:"flex-1"},Wy={class:"flex items-center gap-2"},Gy={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Fy={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Qy={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},By={key:1,class:"space-y-2"},Hy={key:0,class:"flex items-center gap-3 text-xs"},Jy={class:"flex items-center gap-1"},Yy={class:"font-medium text-gray-900 dark:text-gray-100"},Zy={class:"flex items-center gap-1"},Xy={class:"font-medium text-gray-900 dark:text-gray-100"},ex={class:"flex items-center gap-2"},tx={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},sx={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},ax={class:"text-xs text-gray-600 dark:text-gray-400"},rx={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},lx={key:2,class:"text-xs text-gray-400"},ox={key:1,class:"space-y-3"},nx={class:"flex items-center justify-between text-xs"},ix={class:"font-medium text-gray-700 dark:text-gray-200"},dx={class:"flex items-center gap-2"},ux={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},px={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},gx={class:"text-xs text-gray-600 dark:text-gray-400"},cx={class:"ml-2 text-gray-400"},mx={key:1,class:"text-sm text-gray-400"},yx={class:"space-y-1"},xx={class:"flex items-center justify-between text-xs"},fx={key:0,class:"font-medium text-gray-700 dark:text-gray-200"},bx={key:0,class:"flex items-center gap-2"},vx={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},kx={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"},hx={key:2,class:"space-y-2"},wx={key:0,class:"space-y-2"},$x={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Ax={class:"flex items-center gap-2"},Cx={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"},Ux={class:"flex-1"},Ix={class:"flex items-center gap-2"},Tx={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Kx={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},_x={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"},Sx={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"},Dx={class:"flex-1"},zx={class:"flex items-center gap-2"},jx={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Vx={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Rx={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Ox={key:1,class:"text-sm text-gray-400"},Lx={key:3,class:"text-sm text-gray-400"},Ex={class:"whitespace-nowrap px-3 py-4 text-sm text-gray-600 dark:text-gray-300"},Nx={class:"whitespace-nowrap px-3 py-4"},qx={key:0,class:"flex items-center gap-2"},Wx={class:"h-2 w-16 rounded-full bg-gray-200"},Gx={class:"min-w-[20px] text-xs font-medium text-gray-700 dark:text-gray-200"},Fx={key:1,class:"text-sm text-gray-400"},Qx={class:"px-3 py-4 text-sm text-gray-600"},Bx=["title"],Hx={key:1,class:"text-gray-400"},Jx={class:"whitespace-nowrap px-3 py-4"},Yx={class:"flex flex-col gap-1"},Zx={key:0},Xx=["onClick"],ef=["onClick"],tf=["onClick"],sf=["onClick"],af={class:"operations-column sticky right-0 z-10 whitespace-nowrap px-3 py-4 text-sm font-medium"},rf={key:0,class:"flex items-center gap-1"},lf=["disabled","title","onClick"],of=["disabled","title","onClick"],nf={class:"ml-1"},df=["onClick"],uf=["onClick"],pf=["onClick"],gf=["onClick"],cf={key:1,class:"flex items-center gap-1"},mf=["disabled","title","onClick"],yf={class:"ml-1"},xf=["onClick"],ff={key:3,class:"space-y-3 md:hidden"},bf={class:"mb-3 flex items-start justify-between"},vf={class:"flex items-center gap-3"},kf=["value"],hf={class:"text-sm font-semibold text-gray-900"},wf={class:"mt-0.5 flex items-center gap-2"},$f={class:"text-xs text-gray-500 dark:text-gray-400"},Af={class:"text-xs text-gray-500 dark:text-gray-400"},Cf={class:"mb-3 grid grid-cols-2 gap-3"},Uf={class:"space-y-1"},If={class:"flex items-center gap-1.5"},Tf={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Kf={class:"flex items-center gap-1.5"},_f={class:"text-xs text-gray-600 dark:text-gray-400"},Pf={class:"flex items-center gap-1.5"},Mf={class:"text-xs text-gray-600 dark:text-gray-400"},Sf={key:0,class:"space-y-1"},Df={class:"flex items-center gap-1.5"},zf={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},jf={class:"flex items-center gap-1.5"},Vf={class:"text-xs text-gray-600 dark:text-gray-400"},Rf={key:1,class:"text-sm font-semibold text-gray-400"},Of={class:"mb-3 space-y-2"},Lf={key:0,class:"space-y-2"},Ef={key:0,class:"space-y-2"},Nf={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},qf={class:"flex items-center gap-2"},Wf={class:"flex-1"},Gf={class:"flex items-center gap-2"},Ff={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Qf={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Bf={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Hf={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Jf={class:"flex items-center gap-2"},Yf={class:"flex-1"},Zf={class:"flex items-center gap-2"},Xf={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},eb={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},tb={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},sb={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},ab={class:"flex items-center gap-2"},rb={class:"flex-1"},lb={class:"flex items-center gap-2"},ob={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},nb={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},ib={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},db={key:1,class:"space-y-1.5 rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},ub={class:"flex items-center justify-between text-xs"},pb={class:"flex items-center gap-1"},gb={class:"font-medium text-gray-700 dark:text-gray-200"},cb={class:"h-2 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-600"},mb={class:"flex items-center justify-between text-xs"},yb={class:"text-gray-500 dark:text-gray-400"},xb={key:0,class:"font-medium text-indigo-600"},fb={key:1,class:"text-gray-500"},bb={key:2,class:"text-xs text-gray-400"},vb={key:1,class:"space-y-2"},kb={key:0,class:"space-y-2"},hb={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},wb={class:"flex items-center gap-2"},$b={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"},Ab={class:"flex-1"},Cb={class:"flex items-center gap-2"},Ub={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Ib={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Tb={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Kb={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},_b={class:"flex items-center gap-2"},Pb={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"},Mb={class:"flex-1"},Sb={class:"flex items-center gap-2"},Db={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},zb={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},jb={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Vb={key:1,class:"text-xs text-gray-400"},Rb={class:"flex items-center justify-between text-xs"},Ob={class:"text-gray-700 dark:text-gray-200"},Lb={key:2,class:"flex items-center justify-between text-xs"},Eb={class:"text-gray-700 dark:text-gray-200"},Nb={class:"flex items-center justify-between text-xs"},qb={class:"font-medium text-gray-700 dark:text-gray-200"},Wb={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3"},Gb=["disabled","onClick"],Fb=["onClick"],Qb=["onClick"],Bb=["onClick"],Hb=["onClick"],Jb={key:0,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},Yb={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},Zb={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},Xb={class:"flex items-center gap-2"},ev=["value"],tv={class:"flex items-center gap-2"},sv=["disabled"],av={class:"flex items-center gap-1"},rv={key:1,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},lv=["onClick"],ov={key:2,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},nv=["disabled"],Ws="accountsPageSize",iv={__name:"AccountsView",setup(J){const{showConfirmModal:Me,confirmOptions:m,showConfirm:Q,handleConfirm:U,handleCancel:H}=Fs(),V=$([]),K=$(!1),f=$("name"),k=$("asc"),F=$([]),ee=$({}),ae=$([]),ge=$("all"),Z=$("all"),q=$(""),X=()=>{const a=localStorage.getItem(Ws);if(a){const r=parseInt(a,10);if([10,20,50,100].includes(r))return r}return 10},w=[10,20,50,100],p=$(X()),P=$(1),te=$([]),Y=$(!1),_=$(!1),W=$(!1),ve=$(!1),ie=$(!1),L=$(null),C=$([]),we=$({}),de=$({}),$e=$(""),Ce=["claude","claude-console","openai","openai-responses","gemini","droid","gemini-api"],Re=$(null),B=$(null),A=$(!1),R=$(null),ue=$(null),G=$(!1),g=$(!1),s=$(!1),ce=$(!1),Ae=$(!1),Le=$(new Map),Oe=$([{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"}]),$t=$([{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"}]),dt=ne(()=>{const a=[{value:"all",label:"所有账户",icon:"fa-globe"},{value:"ungrouped",label:"未分组账户",icon:"fa-user"}];return ae.value.forEach(r=>{a.push({value:r.id,label:`${r.name} (${r.platform==="claude"?"Claude":r.platform==="gemini"?"Gemini":r.platform==="openai"?"OpenAI":"Droid"})`,icon:r.platform==="claude"?"fa-brain":r.platform==="gemini"?"fa-robot":r.platform==="openai"?"fa-openai":"fa-robot"})}),a}),Ge=ne(()=>W.value),ut=$(!1),lt=$(null),ot=$(!1),T=$(null),_t=a=>{const r=new Set;return[a==null?void 0:a.name,a==null?void 0:a.email,a==null?void 0:a.accountName,a==null?void 0:a.owner,a==null?void 0:a.ownerName,a==null?void 0:a.ownerDisplayName,a==null?void 0:a.displayName,a==null?void 0:a.username,a==null?void 0:a.identifier,a==null?void 0:a.alias,a==null?void 0:a.title,a==null?void 0:a.label].forEach(l=>{if(typeof l=="string"){const E=l.trim();E&&r.add(E)}}),Array.isArray(a==null?void 0:a.groupInfos)&&a.groupInfos.forEach(l=>{if(l&&typeof l.name=="string"){const E=l.name.trim();E&&r.add(E)}}),Object.entries(a||{}).forEach(([l,E])=>{if(typeof E=="string"){const me=l.toLowerCase();if(me.includes("name")||me.includes("email")){const pe=E.trim();pe&&r.add(pe)}}}),Array.from(r)},At=(a,r)=>r?_t(a).some(b=>b.toLowerCase().includes(r)):!0,nt=a=>!!a&&Ce.includes(a.platform),pt=a=>{var b;return["claude","claude-console","openai","openai-responses","gemini","gemini-api","ccr"].includes(a.platform)&&(a.status==="unauthorized"||a.status!=="active"||((b=a.rateLimitStatus)==null?void 0:b.isRateLimited)||a.rateLimitStatus==="limited"||!a.isActive)},Pt=a=>{const r=[];return pt(a)&&r.push({key:"reset",label:"重置状态",icon:"fa-redo",color:"orange",handler:()=>as(a)}),nt(a)&&r.push({key:"usage",label:"详情",icon:"fa-chart-line",color:"indigo",handler:()=>v(a)}),Fe(a)&&r.push({key:"test",label:"测试",icon:"fa-vial",color:"blue",handler:()=>yt(a)}),r.push({key:"delete",label:"删除",icon:"fa-trash",color:"red",handler:()=>Qt(a)}),r},v=async a=>{if(!nt(a)){j("该账户类型暂不支持查看详情","warning");return}L.value=a,ve.value=!0,ie.value=!0,C.value=[],we.value={},de.value={},$e.value="";try{const r=await O.get(`/admin/accounts/${a.id}/usage-history?platform=${a.platform}&days=30`);if(r.success){const b=r.data||{};C.value=b.history||[],we.value=b.summary||{},de.value=b.overview||{},$e.value=b.generatedAt||""}else j(r.error||"加载账号使用详情失败","error")}catch{j("加载账号使用详情失败","error")}finally{ie.value=!1}},c=()=>{ve.value=!1,ie.value=!1,L.value=null},D=["claude","claude-console"],Fe=a=>!!a&&D.includes(a.platform),yt=a=>{if(!Fe(a)){j("该账户类型暂不支持测试","warning");return}R.value=a,A.value=!0},Ot=()=>{A.value=!1,R.value=null},it=ne(()=>{let a=V.value;const r=q.value.trim();if(r){const l=r.toLowerCase();a=a.filter(E=>At(E,l))}return f.value?[...a].sort((l,E)=>{var Ee,Ne,ht,he,et,Tt,Je,ct,wt,fe,ke,We;let me=l[f.value],pe=E[f.value];return f.value==="dailyTokens"?(me=((Ne=(Ee=l.usage)==null?void 0:Ee.daily)==null?void 0:Ne.allTokens)||0,pe=((he=(ht=E.usage)==null?void 0:ht.daily)==null?void 0:he.allTokens)||0):f.value==="dailyRequests"?(me=((Tt=(et=l.usage)==null?void 0:et.daily)==null?void 0:Tt.requests)||0,pe=((ct=(Je=E.usage)==null?void 0:Je.daily)==null?void 0:ct.requests)||0):f.value==="totalTokens"&&(me=((fe=(wt=l.usage)==null?void 0:wt.total)==null?void 0:fe.allTokens)||0,pe=((We=(ke=E.usage)==null?void 0:ke.total)==null?void 0:We.allTokens)||0),f.value==="lastUsed"&&(me=l.lastUsedAt?new Date(l.lastUsedAt).getTime():0,pe=E.lastUsedAt?new Date(E.lastUsedAt).getTime():0),f.value==="status"&&(me=l.isActive?1:0,pe=E.isActive?1:0),me<pe?k.value==="asc"?-1:1:me>pe?k.value==="asc"?1:-1:0}):a}),tt=ne(()=>{const a=it.value.length;return Math.ceil(a/p.value)||0}),mt=ne(()=>{const a=tt.value,r=P.value,b=[];if(a<=7)for(let l=1;l<=a;l++)b.push(l);else{let l=Math.max(1,r-2),E=Math.min(a,r+2);r<=3?E=5:r>=a-2&&(l=a-4);for(let me=l;me<=E;me++)b.push(me)}return b}),Mt=ne(()=>{const a=mt.value;return a.length===0?!1:a[0]>1}),Ct=ne(()=>{const a=mt.value;return a.length===0?!1:a[a.length-1]<tt.value}),Lt=ne(()=>{const a=mt.value;return a.length===0?!1:Mt.value&&a[0]>2}),Ut=ne(()=>{const a=mt.value;return a.length===0?!1:Ct.value&&a[a.length-1]<tt.value-1}),Ze=ne(()=>{const a=(P.value-1)*p.value,r=a+p.value;return it.value.slice(a,r)}),Xe=()=>{const a=Ze.value.map(l=>l.id),r=a.filter(l=>te.value.includes(l)).length,b=a.length;r===0?(Y.value=!1,_.value=!1):r===b?(Y.value=!0,_.value=!1):(Y.value=!1,_.value=!0)},St=()=>{if(Y.value)Ze.value.forEach(a=>{te.value.includes(a.id)||te.value.push(a.id)});else{const a=new Set(Ze.value.map(r=>r.id));te.value=te.value.filter(r=>!a.has(r))}Xe()},Et=()=>{W.value=!W.value,W.value?Xe():(te.value=[],Y.value=!1,_.value=!1)},Dt=()=>{const a=new Set(V.value.map(r=>r.id));te.value=te.value.filter(r=>a.has(r)),Xe()},Be=async(a=!1)=>{K.value=!0;try{const r={};Z.value!=="all"&&(r.platform=Z.value),ge.value!=="all"&&(r.groupId=ge.value);const b=[];if(Z.value==="all")b.push(O.get("/admin/claude-accounts",{params:r}),O.get("/admin/claude-console-accounts",{params:r}),O.get("/admin/bedrock-accounts",{params:r}),O.get("/admin/gemini-accounts",{params:r}),O.get("/admin/openai-accounts",{params:r}),O.get("/admin/azure-openai-accounts",{params:r}),O.get("/admin/openai-responses-accounts",{params:r}),O.get("/admin/ccr-accounts",{params:r}),O.get("/admin/droid-accounts",{params:r}),O.get("/admin/gemini-api-accounts",{params:r}));else switch(Z.value){case"claude":b.push(O.get("/admin/claude-accounts",{params:r}),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:[]}),O.get("/admin/claude-console-accounts",{params:r}),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:[]}),O.get("/admin/bedrock-accounts",{params:r}),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:[]}),O.get("/admin/gemini-accounts",{params:r}),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:[]}),O.get("/admin/openai-accounts",{params:r}),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:[]}),O.get("/admin/azure-openai-accounts",{params:r}),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:[]}),O.get("/admin/openai-responses-accounts",{params:r}),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:[]}),O.get("/admin/ccr-accounts",{params:r}),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:[]}),O.get("/admin/droid-accounts",{params:r}),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:[]}),O.get("/admin/gemini-api-accounts",{params:r}));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([De(a),xs(a)]);const[l,E,me,pe,Ee,Ne,ht,he,et,Tt]=await Promise.all(b),Je=[],ct=ee.value;if(l.success){const fe=(l.data||[]).map(ke=>{var je;const We=((je=ct.claudeAccountId)==null?void 0:je[ke.id])||0;return{...ke,platform:"claude",boundApiKeysCount:We}});Je.push(...fe)}if(E.success){const fe=(E.data||[]).map(ke=>{var je;const We=((je=ct.claudeConsoleAccountId)==null?void 0:je[ke.id])||0;return{...ke,platform:"claude-console",boundApiKeysCount:We}});Je.push(...fe)}if(me.success){const fe=(me.data||[]).map(ke=>({...ke,platform:"bedrock",boundApiKeysCount:0}));Je.push(...fe)}if(pe.success){const fe=(pe.data||[]).map(ke=>{var je;const We=((je=ct.geminiAccountId)==null?void 0:je[ke.id])||0;return{...ke,platform:"gemini",boundApiKeysCount:We}});Je.push(...fe)}if(Ee.success){const fe=(Ee.data||[]).map(ke=>{var je;const We=((je=ct.openaiAccountId)==null?void 0:je[ke.id])||0;return{...ke,platform:"openai",boundApiKeysCount:We}});Je.push(...fe)}if(Ne&&Ne.success){const fe=(Ne.data||[]).map(ke=>{var je;const We=((je=ct.azureOpenaiAccountId)==null?void 0:je[ke.id])||0;return{...ke,platform:"azure_openai",boundApiKeysCount:We}});Je.push(...fe)}if(ht&&ht.success){const fe=(ht.data||[]).map(ke=>{var je;const We=((je=ct.openaiAccountId)==null?void 0:je[`responses:${ke.id}`])||0;return{...ke,platform:"openai-responses",boundApiKeysCount:We}});Je.push(...fe)}if(he&&he.success){const fe=(he.data||[]).map(ke=>({...ke,platform:"ccr",boundApiKeysCount:0}));Je.push(...fe)}if(et&&et.success){const fe=(et.data||[]).map(ke=>{var je;const We=((je=ct.droidAccountId)==null?void 0:je[ke.id])||ke.boundApiKeysCount||0;return{...ke,platform:"droid",boundApiKeysCount:We}});Je.push(...fe)}if(Tt&&Tt.success){const fe=(Tt.data||[]).map(ke=>{var je;const We=((je=ct.geminiAccountId)==null?void 0:je[`api:${ke.id}`])||0;return{...ke,platform:"gemini-api",boundApiKeysCount:We}});Je.push(...fe)}let wt=Je;ge.value!=="all"&&(ge.value==="ungrouped"?wt=Je.filter(fe=>!fe.groupInfos||fe.groupInfos.length===0):wt=Je.filter(fe=>!fe.groupInfos||fe.groupInfos.length===0?!1:fe.groupInfos.some(ke=>ke.id===ge.value))),wt=wt.map(fe=>{const ke=Yt(fe.proxyConfig||fe.proxy);return{...fe,proxyConfig:ke||null}}),V.value=wt,Dt(),wt.some(fe=>fe.platform==="claude")&&Nt().catch(fe=>{console.debug("Claude usage loading failed:",fe)})}catch{j("加载账户失败","error")}finally{K.value=!1}},Nt=async()=>{try{const a=await O.get("/admin/claude-accounts/usage");if(a.success&&a.data){const r=a.data;V.value=V.value.map(b=>b.platform==="claude"&&r[b.id]?{...b,claudeUsage:r[b.id]}:b)}}catch(a){console.debug("Failed to load Claude usage data:",a)}};let qt="name";const It=a=>{a&&(f.value===a?k.value=k.value==="asc"?"desc":"asc":(f.value=a,k.value="asc"),qt=a)},js=a=>{a===qt?k.value=k.value==="asc"?"desc":"asc":k.value="asc",qt=a},Wt=a=>{if(a==null)return"0";const r=Number(a);return r>=1e6?(r/1e6).toFixed(2):r>=1e3?(r/1e6).toFixed(4):(r/1e6).toFixed(6)},Jt=a=>{if(!a)return"从未使用";const r=new Date(a),l=new Date-r;return l<6e4?"刚刚":l<36e5?`${Math.floor(l/6e4)} 分钟前`:l<864e5?`${Math.floor(l/36e5)} 小时前`:l<6048e5?`${Math.floor(l/864e5)} 天前`:r.toLocaleDateString("zh-CN")},ms=()=>{q.value="",P.value=1},De=async(a=!1)=>{if(!(!a&&s.value))try{const r=await O.get("/admin/accounts/binding-counts");r.success&&(ee.value=r.data||{},s.value=!0)}catch{ee.value={}}},ys=async(a=!1)=>{var r;if(!(!a&&g.value))try{const b=await O.get("/admin/api-keys");b.success&&(F.value=((r=b.data)==null?void 0:r.items)||b.data||[],g.value=!0)}catch{}},xs=async(a=!1)=>{if(!(!a&&ce.value))try{const r=await O.get("/admin/account-groups");r.success&&(ae.value=r.data||[],ce.value=!0)}catch{}},fs=()=>{g.value=!1,s.value=!1,ce.value=!1,Ae.value=!1,Le.value.clear()},xt=()=>{P.value=1,Be()},bs=()=>{P.value=1,Be()};function Yt(a){if(!a)return null;let r=a;if(typeof a=="string")try{r=JSON.parse(a)}catch{return null}if(!r||typeof r!="object")return null;const b=r.proxy&&typeof r.proxy=="object"?r.proxy:r,l=typeof b.host=="string"?b.host.trim():b.host!==void 0&&b.host!==null?String(b.host).trim():"",E=b.port!==void 0&&b.port!==null?String(b.port).trim():"";if(!l||!E)return null;const me=typeof b.type=="string"&&b.type.trim()?b.type.trim():"socks5",pe=typeof b.username=="string"?b.username:b.username!==void 0&&b.username!==null?String(b.username):"",Ee=typeof b.password=="string"?b.password:b.password!==void 0&&b.password!==null?String(b.password):"";return{type:me,host:l,port:E,username:pe,password:Ee}}const Gt=a=>{const r=Yt(a);if(!r)return null;const b=r.type.toLowerCase()==="socks5"?"S5":r.type.toUpperCase();let l=r.host;l.length>15&&(l=l.substring(0,12)+"...");let E=`${b}://${l}:${r.port}`;return r.username&&(E=`${b}://***@${l}:${r.port}`),E},Zt=(a,r)=>{if(!a||!r)return"--";const b=new Date(a),l=new Date(r),E=b.getHours().toString().padStart(2,"0"),me=b.getMinutes().toString().padStart(2,"0"),pe=l.getHours().toString().padStart(2,"0"),Ee=l.getMinutes().toString().padStart(2,"0");return`${E}:${me} - ${pe}:${Ee}`},Xt=a=>{if(!a||a<=0)return"已结束";const r=Math.floor(a/60),b=a%60;return r>0?`${r}小时${b}分钟`:`${b}分钟`},vs=a=>{if(!a||a<=0)return"";a=Math.floor(a);const r=Math.floor(a/1440),b=a%1440,l=Math.floor(b/60),E=b%60;return r>0?l>0?`${r}天${l}小时`:`${r}天`:l>0?E>0?`${l}小时${E}分钟`:`${l}小时`:`${E}分钟`},ks=()=>{lt.value=null,ut.value=!0},es=()=>{ut.value=!1,lt.value=null},Ft=a=>{T.value=a,ot.value=!0},ts=a=>!a||!a.id?[]:F.value.filter(r=>{const b=a.id;return r.claudeAccountId===b||r.claudeConsoleAccountId===b||r.geminiAccountId===b||r.openaiAccountId===b||r.azureOpenaiAccountId===b||r.openaiAccountId===`responses:${b}`||r.geminiAccountId===`api:${b}`}),hs=a=>{switch(a.platform){case"claude":return`/admin/claude-accounts/${a.id}`;case"claude-console":return`/admin/claude-console-accounts/${a.id}`;case"bedrock":return`/admin/bedrock-accounts/${a.id}`;case"openai":return`/admin/openai-accounts/${a.id}`;case"azure_openai":return`/admin/azure-openai-accounts/${a.id}`;case"openai-responses":return`/admin/openai-responses-accounts/${a.id}`;case"ccr":return`/admin/ccr-accounts/${a.id}`;case"gemini":return`/admin/gemini-accounts/${a.id}`;case"droid":return`/admin/droid-accounts/${a.id}`;case"gemini-api":return`/admin/gemini-api-accounts/${a.id}`;default:return null}},ss=async a=>{var b,l;const r=hs(a);if(!r)return{success:!1,message:"不支持的账户类型"};try{const E=await O.delete(r);return E.success?{success:!0,data:E}:{success:!1,message:E.message||"删除失败"}}catch(E){return{success:!1,message:((l=(b=E.response)==null?void 0:b.data)==null?void 0:l.message)||E.message||"删除失败"}}},Qt=async a=>{const b=ts(a).length;let l=`确定要删除账户 "${a.name}" 吗?`;if(b>0&&(l+=`
|
||
|
||
⚠️ 注意:此账号有 ${b} 个 API Key 绑定。`,l+=`
|
||
删除后,这些 API Key 将自动切换为共享池模式。`),l+=`
|
||
|
||
此操作不可恢复。`,!await Q("删除账户",l,"删除","取消"))return;const me=await ss(a);if(me.success){const pe=me.data;let Ee="账户已成功删除";(pe==null?void 0:pe.unboundKeys)>0&&(Ee+=`,${pe.unboundKeys} 个 API Key 已切换为共享池模式`),j(Ee,"success"),te.value=te.value.filter(Ne=>Ne!==a.id),Xe(),Ae.value=!1,g.value=!1,s.value=!1,Be(),ys(!0),De(!0)}else j(me.message||"删除失败","error")},ws=async()=>{var ht;if(te.value.length===0){j("请先选择要删除的账户","warning");return}const a=new Map(V.value.map(he=>[he.id,he])),r=te.value.map(he=>a.get(he)).filter(he=>!!he);if(r.length===0){j("选中的账户已不存在","warning"),te.value=[],Xe();return}let b=`确定要删除选中的 ${r.length} 个账户吗?此操作不可恢复。`;const l=r.map(he=>({account:he,boundKeys:ts(he)})).filter(he=>he.boundKeys.length>0);if(l.length>0&&(b+=`
|
||
|
||
⚠️ 以下账户存在绑定的 API Key,将自动解绑:`,l.forEach(({account:he,boundKeys:et})=>{const Tt=he.name||he.email||he.accountName||he.id;b+=`
|
||
- ${Tt}: ${et.length} 个`}),b+=`
|
||
删除后,这些 API Key 将切换为共享池模式。`),b+=`
|
||
|
||
请再次确认是否继续。`,!await Q("批量删除账户",b,"删除","取消"))return;let me=0,pe=0,Ee=0;const Ne=[];for(const he of r){const et=await ss(he);et.success?(me+=1,Ee+=((ht=et.data)==null?void 0:ht.unboundKeys)||0):(pe+=1,Ne.push({name:he.name||he.email||he.accountName||he.id,message:et.message||"删除失败"}))}if(me>0){let he=`成功删除 ${me} 个账户`;Ee>0&&(he+=`,${Ee} 个 API Key 已切换为共享池模式`),j(he,pe>0?"warning":"success"),te.value=[],Y.value=!1,_.value=!1,Ae.value=!1,g.value=!1,await Be(!0)}if(pe>0){const he=Ne.map(et=>`${et.name}: ${et.message}`).join(`
|
||
`);j(`有 ${pe} 个账户删除失败:
|
||
${he}`,me>0?"warning":"error")}Xe()},as=async a=>{if(a.isResetting)return;let r=!1;if(window.showConfirm?r=await window.showConfirm("重置账户状态","确定要重置此账户的所有异常状态吗?这将清除限流状态、401错误计数等所有异常标记。","确定重置","取消"):r=confirm("确定要重置此账户的所有异常状态吗?"),!!r)try{a.isResetting=!0;let b="";if(a.platform==="openai")b=`/admin/openai-accounts/${a.id}/reset-status`;else if(a.platform==="openai-responses")b=`/admin/openai-responses-accounts/${a.id}/reset-status`;else if(a.platform==="claude")b=`/admin/claude-accounts/${a.id}/reset-status`;else if(a.platform==="claude-console")b=`/admin/claude-console-accounts/${a.id}/reset-status`;else if(a.platform==="ccr")b=`/admin/ccr-accounts/${a.id}/reset-status`;else if(a.platform==="droid")b=`/admin/droid-accounts/${a.id}/reset-status`;else if(a.platform==="gemini-api")b=`/admin/gemini-api-accounts/${a.id}/reset-status`;else if(a.platform==="gemini")b=`/admin/gemini-accounts/${a.id}/reset-status`;else{j("不支持的账户类型","error"),a.isResetting=!1;return}const l=await O.post(b);l.success?(j("账户状态已重置","success"),Be(!0)):j(l.message||"状态重置失败","error")}catch{j("状态重置失败","error")}finally{a.isResetting=!1}},Bt=async a=>{if(!a.isTogglingSchedulable)try{a.isTogglingSchedulable=!0;let r;if(a.platform==="claude")r=`/admin/claude-accounts/${a.id}/toggle-schedulable`;else if(a.platform==="claude-console")r=`/admin/claude-console-accounts/${a.id}/toggle-schedulable`;else if(a.platform==="bedrock")r=`/admin/bedrock-accounts/${a.id}/toggle-schedulable`;else if(a.platform==="gemini")r=`/admin/gemini-accounts/${a.id}/toggle-schedulable`;else if(a.platform==="openai")r=`/admin/openai-accounts/${a.id}/toggle-schedulable`;else if(a.platform==="azure_openai")r=`/admin/azure-openai-accounts/${a.id}/toggle-schedulable`;else if(a.platform==="openai-responses")r=`/admin/openai-responses-accounts/${a.id}/toggle-schedulable`;else if(a.platform==="ccr")r=`/admin/ccr-accounts/${a.id}/toggle-schedulable`;else if(a.platform==="droid")r=`/admin/droid-accounts/${a.id}/toggle-schedulable`;else if(a.platform==="gemini-api")r=`/admin/gemini-api-accounts/${a.id}/toggle-schedulable`;else{j("该账户类型暂不支持调度控制","warning");return}const b=await O.put(r);b.success?(a.schedulable=b.schedulable,j(b.schedulable?"已启用调度":"已禁用调度","success")):j(b.message||"操作失败","error")}catch{j("切换调度状态失败","error")}finally{a.isTogglingSchedulable=!1}},rs=()=>{ut.value=!1,j("账户创建成功","success"),fs(),Be()},ls=()=>{ot.value=!1,j("账户更新成功","success"),Ae.value=!1,Be()},$s=a=>!a.lastRefreshAt||a.lastRefreshAt===""?"Setup":"OAuth",As=()=>"OAuth",Cs=()=>"OAuth",os=a=>{if(!a||typeof a!="object")return"OAuth";const r=a.isApiKeyMode??a.is_api_key_mode??a.apiKeyMode??a.api_key_mode;if(r===!0||r==="true"||r===1||r==="1")return"API Key";const b=a.authenticationMethod||a.authMethod||a.authentication_mode||a.authenticationMode||a.authentication_method||a.auth_type||a.authType||a.authentication_type||a.authenticationType||a.droidAuthType||a.droidAuthenticationMethod||a.method||a.auth||"";return typeof b=="string"&&b.trim().toLowerCase().replace(/[\s_-]/g,"")==="apikey"?"API Key":"OAuth"},Us=a=>os(a)==="API Key",ns=a=>{if(!a||typeof a!="object")return 0;if(Array.isArray(a.apiKeys))return a.apiKeys.filter(b=>b.status!=="error").length;if(typeof a.apiKeys=="string"&&a.apiKeys.trim())try{const b=JSON.parse(a.apiKeys);if(Array.isArray(b))return b.filter(l=>l.status!=="error").length}catch{}const r=[a.apiKeyCount,a.api_key_count,a.apiKeysCount,a.api_keys_count];for(const b of r){const l=Number(b);if(Number.isFinite(l)&&l>=0)return l}return 0},Is=a=>{const r=ns(a),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 r>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"]},Ts=a=>{if(a.subscriptionInfo)try{const r=typeof a.subscriptionInfo=="string"?JSON.parse(a.subscriptionInfo):a.subscriptionInfo;return r.hasClaudeMax===!0?"Claude Max":r.hasClaudePro===!0?"Claude Pro":"Claude Free"}catch{return"Claude"}return"Claude"},is=a=>{if(a.schedulable!==!1)return null;if(a.platform==="claude-console"){if(a.status==="unauthorized")return"API Key无效或已过期(401错误)";if(a.overloadStatus==="overloaded")return"服务过载(529错误)";if(a.rateLimitStatus==="limited")return"触发限流(429错误)";if(a.status==="blocked"&&a.errorMessage)return a.errorMessage}if(a.platform==="claude"){if(a.status==="unauthorized")return"认证失败(401错误)";if(a.status==="temp_error"&&a.errorMessage||a.status==="error"&&a.errorMessage)return a.errorMessage;if(a.isRateLimited)return"触发限流(429错误)";if(a.stoppedReason)return a.stoppedReason;if(a.fiveHourAutoStopped==="true"||a.fiveHourAutoStopped===!0)return"5小时使用量接近限制,已自动停止调度"}if(a.platform==="openai"){if(a.status==="unauthorized")return"认证失败(401错误)";if(a.rateLimitStatus&&a.rateLimitStatus.isRateLimited||a.isRateLimited)return"触发限流(429错误)";if(a.status==="error"&&a.errorMessage)return a.errorMessage}if(a.platform==="openai-responses"){if(a.status==="unauthorized")return"认证失败(401错误)";if(a.rateLimitStatus&&a.rateLimitStatus.isRateLimited||a.isRateLimited)return"触发限流(429错误)";if(a.status==="error"&&a.errorMessage)return a.errorMessage;if(a.status==="rateLimited")return"触发限流(429错误)"}return a.stoppedReason?a.stoppedReason:a.errorMessage?a.errorMessage:"手动停止调度"},Ks=a=>a.status==="blocked"?"已封锁":a.status==="unauthorized"?"异常":a.isRateLimited||a.status==="rate_limited"||a.rateLimitStatus&&a.rateLimitStatus.isRateLimited||a.rateLimitStatus==="limited"?"限流中":a.status==="temp_error"?"临时异常":a.status==="error"||!a.isActive?"错误":a.schedulable===!1?"已暂停":"正常",_s=a=>a.status==="blocked"||a.status==="unauthorized"?"bg-red-100 text-red-800":a.isRateLimited||a.status==="rate_limited"||a.rateLimitStatus&&a.rateLimitStatus.isRateLimited||a.rateLimitStatus==="limited"||a.status==="temp_error"?"bg-orange-100 text-orange-800":a.status==="error"||!a.isActive?"bg-red-100 text-red-800":a.schedulable===!1?"bg-gray-100 text-gray-800":"bg-green-100 text-green-800",Ps=a=>a.status==="blocked"||a.status==="unauthorized"?"bg-red-500":a.isRateLimited||a.status==="rate_limited"||a.rateLimitStatus&&a.rateLimitStatus.isRateLimited||a.rateLimitStatus==="limited"||a.status==="temp_error"?"bg-orange-500":a.status==="error"||!a.isActive?"bg-red-500":a.schedulable===!1?"bg-gray-500":"bg-green-500",Ms=a=>Jt(a),ds=(a,r=null)=>{if(!a)return"bg-gradient-to-r from-blue-500 to-indigo-600";if(r&&(r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"))return"bg-gradient-to-r from-red-500 to-red-600";const l=String(a).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"},zt=a=>a.authType==="oauth",ft=a=>!a||a.utilization===null||a.utilization===void 0?"-":`${a.utilization}%`,bt=a=>!a||a.utilization===null||a.utilization===void 0?"0%":`${a.utilization}%`,vt=a=>{const r=(a==null?void 0:a.utilization)||0;return r<60?"bg-gradient-to-r from-blue-500 to-indigo-600":r<90?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-red-500 to-red-600"},kt=a=>{if(!a||!a.remainingSeconds)return"-";const r=a.remainingSeconds,b=Math.floor(r/86400),l=Math.floor(r%86400/3600),E=Math.floor(r%3600/60);return b>0?l>0?`${b}天${l}小时`:`${b}天`:l>0?E>0?`${l}小时${E}分钟`:`${l}小时`:E>0?`${E}分钟`:`${Math.floor(r%60)}秒`},Ht=a=>{if(!a)return null;const r=typeof a.usedPercent=="number"&&!Number.isNaN(a.usedPercent)?a.usedPercent:null,b=typeof a.resetAfterSeconds=="number"&&!Number.isNaN(a.resetAfterSeconds)?a.resetAfterSeconds:null,l=typeof a.remainingSeconds=="number"?a.remainingSeconds:null,E=a.resetAt?Date.parse(a.resetAt):null;return b!==null&&(l!==null&&l<=0||E!==null&&!Number.isNaN(E)&&Date.now()>=E)?0:r===null?null:Math.max(0,Math.min(100,r))},d=a=>{const r=Ht(a);return r===null?"bg-gradient-to-r from-gray-300 to-gray-400":r>=90?"bg-gradient-to-r from-red-500 to-red-600":r>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},t=a=>{const r=Ht(a);return r===null?"--":`${r.toFixed(1)}%`},se=a=>{const r=Ht(a);return r===null?"0%":`${r}%`},oe=a=>a==="secondary"?"周限":"5h",i=a=>{if(!a)return"--";let r=a.remainingSeconds;if(r==null&&(r=a.resetAfterSeconds),r==null||Number.isNaN(Number(r)))return"--";r=Math.max(0,Math.floor(Number(r)));const b=Math.floor(r/86400),l=Math.floor(r%86400/3600),E=Math.floor(r%3600/60),me=r%60;return b>0?l>0?`${b}天${l}小时`:`${b}天`:l>0?E>0?`${l}小时${E}分钟`:`${l}小时`:E>0?`${E}分钟`:`${me}秒`},re=a=>!a||a===0?"0.0000":a<1e-4?a.toExponential(2):a<.01?a.toFixed(6):a<1?a.toFixed(4):a.toFixed(2),le=a=>{var l,E;const r=Number(((E=(l=a==null?void 0:a.usage)==null?void 0:l.daily)==null?void 0:E.cost)||0),b=Number((a==null?void 0:a.dailyQuota)||0);return!b||b<=0?0:r/b*100},Se=a=>a>=90?"bg-red-500":a>=70?"bg-yellow-500":"bg-green-500",ze=a=>{const r=Number((a==null?void 0:a.maxConcurrentTasks)||0);if(!r||r<=0)return 0;const b=Number((a==null?void 0:a.activeTaskCount)||0);return Math.min(100,b/r*100)},_e=a=>a>=100?"bg-red-500":a>=80?"bg-yellow-500":"bg-green-500",M=a=>{const r=Number((a==null?void 0:a.maxConcurrentTasks)||0);if(!r||r<=0)return"text-gray-500 dark:text-gray-400";const b=Number((a==null?void 0:a.activeTaskCount)||0);return b>=r?"text-red-600 dark:text-red-400":b>=r*.8?"text-yellow-600 dark:text-yellow-400":"text-gray-700 dark:text-gray-200"},S=a=>{var l,E;const r=Number(((E=(l=a==null?void 0:a.usage)==null?void 0:l.daily)==null?void 0:E.cost)||0),b=Number((a==null?void 0:a.dailyQuota)||0);return!b||b<=0?"0.00":Math.max(0,b-r).toFixed(2)},xe=a=>!a.usage||!a.usage.daily?"0.0000":a.usage.daily.cost!==void 0?re(a.usage.daily.cost):"0.0000";ye(q,()=>{P.value=1,Xe()}),ye(p,a=>{localStorage.setItem(Ws,a.toString()),Xe()}),ye(()=>it.value.length,()=>{P.value>tt.value&&(P.value=tt.value||1),Xe()}),ye(P,()=>{Xe()}),ye(Ze,()=>{Xe(),Rs(()=>{He()})}),ye(V,()=>{Dt()});const N=a=>a?new Date(a).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit"}):"",Ue=a=>a?new Date(a)<new Date:!1,Ke=a=>{if(!a)return!1;const r=new Date,l=(new Date(a)-r)/(1e3*60*60*24);return l>0&&l<=7},Pe=a=>{Re.value=a},Te=()=>{Re.value=null},rt=async({accountId:a,expiresAt:r})=>{try{const b=V.value.find(me=>me.id===a);if(!b){j("未找到账户","error");return}let l="";switch(b.platform){case"claude":case"claude-oauth":l=`/admin/claude-accounts/${a}`;break;case"gemini":l=`/admin/gemini-accounts/${a}`;break;case"claude-console":l=`/admin/claude-console-accounts/${a}`;break;case"bedrock":l=`/admin/bedrock-accounts/${a}`;break;case"ccr":l=`/admin/ccr-accounts/${a}`;break;case"openai":l=`/admin/openai-accounts/${a}`;break;case"droid":l=`/admin/droid-accounts/${a}`;break;case"azure_openai":l=`/admin/azure-openai-accounts/${a}`;break;case"openai-responses":l=`/admin/openai-responses-accounts/${a}`;break;default:j(`不支持的平台类型: ${b.platform}`,"error");return}const E=await O.put(l,{expiresAt:r||null});E.success?(j("账户到期时间已更新","success"),b.expiresAt=r||null,Te()):(j(E.message||"更新失败","error"),B.value&&B.value.resetSaving())}catch(b){console.error("更新账户过期时间失败:",b),j("更新失败","error"),B.value&&B.value.resetSaving()}},He=()=>{ue.value&&(G.value=ue.value.scrollWidth>ue.value.clientWidth)};let gt=null;return gs(()=>{Be(!0),Rs(()=>{ue.value&&(gt=new ResizeObserver(()=>{He()}),gt.observe(ue.value),He())}),window.addEventListener("resize",He)}),zs(()=>{gt&>.disconnect(),window.removeEventListener("resize",He)}),(a,r)=>{const b=Bs;return o(),n("div",em,[e("div",tm,[e("div",sm,[r[35]||(r[35]=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",am,[e("div",rm,[e("div",lm,[r[24]||(r[24]=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)),st(Vs,{modelValue:f.value,"onUpdate:modelValue":r[0]||(r[0]=l=>f.value=l),icon:k.value==="asc"?"fa-sort-amount-up":"fa-sort-amount-down","icon-color":"text-indigo-500",options:Oe.value,placeholder:"选择排序",onChange:js},null,8,["modelValue","icon","options"])]),e("div",om,[r[25]||(r[25]=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)),st(Vs,{modelValue:Z.value,"onUpdate:modelValue":r[1]||(r[1]=l=>Z.value=l),icon:"fa-server","icon-color":"text-blue-500",options:$t.value,placeholder:"选择平台",onChange:xt},null,8,["modelValue","options"])]),e("div",nm,[r[26]||(r[26]=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)),st(Vs,{modelValue:ge.value,"onUpdate:modelValue":r[2]||(r[2]=l=>ge.value=l),icon:"fa-layer-group","icon-color":"text-purple-500",options:dt.value,placeholder:"选择分组",onChange:bs},null,8,["modelValue","options"])]),e("div",im,[r[29]||(r[29]=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",dm,[h(e("input",{"onUpdate:modelValue":r[3]||(r[3]=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),[[z,q.value]]),r[28]||(r[28]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),q.value?(o(),n("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:ms},r[27]||(r[27]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):y("",!0)])])]),e("div",um,[e("div",pm,[st(b,{content:"刷新数据 (Ctrl/⌘+点击强制刷新所有缓存)",effect:"dark",placement:"bottom"},{default:us(()=>[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:K.value,onClick:[r[4]||(r[4]=Kt(l=>Be(!0),["ctrl","exact"])),r[5]||(r[5]=Kt(l=>Be(!1),["exact"])),r[6]||(r[6]=Kt(l=>Be(!0),["meta","exact"]))]},[r[30]||(r[30]=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:I(["fas relative text-green-500",K.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),r[31]||(r[31]=e("span",{class:"relative"},"刷新",-1))],8,gm)]),_: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:Et},[e("i",{class:I(W.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,u(W.value?"取消选择":"选择"),1)]),te.value.length>0?(o(),n("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:ws},[r[32]||(r[32]=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)),r[33]||(r[33]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",cm,"删除选中 ("+u(te.value.length)+")",1)])):y("",!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:Kt(ks,["stop"])},r[34]||(r[34]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"添加账户",-1)]))])])]),K.value?(o(),n("div",mm,r[36]||(r[36]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载账户...",-1)]))):it.value.length===0?(o(),n("div",ym,r[37]||(r[37]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-user-circle text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无账户",-1),e("p",{class:"mt-2 text-sm text-gray-400 dark:text-gray-500"},"点击上方按钮添加您的第一个账户",-1)]))):(o(),n("div",xm,[e("div",{ref_key:"tableContainerRef",ref:ue,class:"table-container"},[e("table",fm,[e("thead",bm,[e("tr",null,[Ge.value?(o(),n("th",vm,[e("div",km,[h(e("input",{"onUpdate:modelValue":r[7]||(r[7]=l=>Y.value=l),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:_.value,type:"checkbox",onChange:St},null,40,hm),[[Ve,Y.value]])])])):y("",!0),e("th",{class:I(["name-column sticky z-20 min-w-[180px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",Ge.value?"left-[50px]":"left-0"]),onClick:r[8]||(r[8]=l=>It("name"))},[r[38]||(r[38]=x(" 名称 ",-1)),f.value==="name"?(o(),n("i",{key:0,class:I(["fas",k.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",wm))],2),e("th",{class:"min-w-[220px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:r[9]||(r[9]=l=>It("platform"))},[r[39]||(r[39]=x(" 平台/类型 ",-1)),f.value==="platform"?(o(),n("i",{key:0,class:I(["fas",k.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",$m))]),e("th",{class:"w-[120px] min-w-[180px] max-w-[200px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:r[10]||(r[10]=l=>It("status"))},[r[40]||(r[40]=x(" 状态 ",-1)),f.value==="status"?(o(),n("i",{key:0,class:I(["fas",k.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Am))]),r[46]||(r[46]=e("th",{class:"min-w-[150px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 今日使用 ",-1)),e("th",Cm,[e("div",Um,[r[43]||(r[43]=e("span",null,"会话窗口",-1)),st(b,{placement:"top"},{content:us(()=>r[41]||(r[41]=[e("div",{class:"w-[260px] space-y-3 text-xs leading-relaxed text-white dark:text-gray-800"},[e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude 系列 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 会话窗口进度表示 5 小时窗口的时间推移,颜色提示当前调度状态。 "),e("div",{class:"space-y-1 pt-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-blue-500 to-indigo-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"正常:请求正常处理")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-yellow-500 to-orange-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"警告:接近限制")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-red-500 to-red-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"拒绝:达到速率限制")])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," OpenAI "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 进度条分别展示 5h 与周限窗口的额度使用比例,颜色含义与上方保持一致。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时使用量进度,到达重置时间后会自动归零。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-history mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"周限窗口:7天使用量进度,重置时同样回到 0%。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},'当"重置剩余"为 0 时,进度条与百分比会同步清零。')])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude OAuth 账户 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 展示三个窗口的使用率(utilization百分比),颜色含义同上。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时滑动窗口的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-calendar-alt mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"7d 窗口:7天总限额的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-gem mt-[2px] text-[10px] text-purple-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"Sonnet窗口:7天Sonnet模型专用限额。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-sync-alt mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"到达重置时间后自动归零。")])])])],-1)])),default:us(()=>[r[42]||(r[42]=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,__:[42]})])]),r[47]||(r[47]=e("th",{class:"min-w-[80px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),e("th",{class:"min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:r[11]||(r[11]=l=>It("priority"))},[r[44]||(r[44]=x(" 优先级 ",-1)),f.value==="priority"?(o(),n("i",{key:0,class:I(["fas",k.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Im))]),r[48]||(r[48]=e("th",{class:"min-w-[150px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 代理 ",-1)),e("th",{class:"min-w-[110px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:r[12]||(r[12]=l=>It("expiresAt"))},[r[45]||(r[45]=x(" 到期时间 ",-1)),f.value==="expiresAt"?(o(),n("i",{key:0,class:I(["fas",k.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Tm))]),e("th",{class:I(["operations-column sticky right-0 z-20 px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300",G.value?"min-w-[170px]":"min-w-[200px]"])}," 操作 ",2)])]),e("tbody",Km,[(o(!0),n(be,null,qe(Ze.value,l=>{var E,me;return o(),n("tr",{key:l.id,class:"table-row"},[Ge.value?(o(),n("td",_m,[e("div",Pm,[h(e("input",{"onUpdate:modelValue":r[13]||(r[13]=pe=>te.value=pe),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:Xe},null,40,Mm),[[Ve,te.value]])])])):y("",!0),e("td",{class:I(["name-column sticky z-10 px-3 py-4",Ge.value?"left-[50px]":"left-0"])},[e("div",Sm,[r[53]||(r[53]=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",Dm,[e("div",zm,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:l.name},u(l.name),9,jm),l.accountType==="dedicated"?(o(),n("span",Vm,r[49]||(r[49]=[e("i",{class:"fas fa-lock mr-1"},null,-1),x("专属 ",-1)]))):l.accountType==="group"?(o(),n("span",Rm,r[50]||(r[50]=[e("i",{class:"fas fa-layer-group mr-1"},null,-1),x("分组调度 ",-1)]))):(o(),n("span",Om,r[51]||(r[51]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),x("共享 ",-1)])))]),l.groupInfos&&l.groupInfos.length>0?(o(),n("div",Lm,[(o(!0),n(be,null,qe(l.groupInfos,pe=>(o(),n("span",{key:pe.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:`所属分组: ${pe.name}`},[r[52]||(r[52]=e("i",{class:"fas fa-folder mr-1"},null,-1)),x(u(pe.name),1)],8,Em))),128))])):y("",!0),e("div",{class:"truncate text-xs text-gray-500 dark:text-gray-400",title:l.id},u(l.id),9,Nm)])])],2),e("td",qm,[e("div",Wm,[l.platform==="gemini"?(o(),n("div",Gm,[r[54]||(r[54]=e("i",{class:"fas fa-robot text-xs text-yellow-700"},null,-1)),r[55]||(r[55]=e("span",{class:"text-xs font-semibold text-yellow-800"},"Gemini",-1)),r[56]||(r[56]=e("span",{class:"mx-1 h-4 w-px bg-yellow-300"},null,-1)),e("span",Fm,u(As()),1)])):l.platform==="claude-console"?(o(),n("div",Qm,r[57]||(r[57]=[e("i",{class:"fas fa-terminal text-xs text-purple-700"},null,-1),e("span",{class:"text-xs font-semibold text-purple-800"},"Console",-1),e("span",{class:"mx-1 h-4 w-px bg-purple-300"},null,-1),e("span",{class:"text-xs font-medium text-purple-700"},"API Key",-1)]))):l.platform==="bedrock"?(o(),n("div",Bm,r[58]||(r[58]=[e("i",{class:"fab fa-aws text-xs text-orange-700"},null,-1),e("span",{class:"text-xs font-semibold text-orange-800"},"Bedrock",-1),e("span",{class:"mx-1 h-4 w-px bg-orange-300"},null,-1),e("span",{class:"text-xs font-medium text-orange-700"},"AWS",-1)]))):l.platform==="openai"?(o(),n("div",Hm,[r[59]||(r[59]=e("div",{class:"fa-openai"},null,-1)),r[60]||(r[60]=e("span",{class:"text-xs font-semibold text-gray-950"},"OpenAi",-1)),r[61]||(r[61]=e("span",{class:"mx-1 h-4 w-px bg-gray-400"},null,-1)),e("span",Jm,u(Cs()),1)])):l.platform==="azure_openai"?(o(),n("div",Ym,r[62]||(r[62]=[e("i",{class:"fab fa-microsoft text-xs text-blue-700 dark:text-blue-400"},null,-1),e("span",{class:"text-xs font-semibold text-blue-800 dark:text-blue-300"},"Azure OpenAI",-1),e("span",{class:"mx-1 h-4 w-px bg-blue-300 dark:bg-blue-600"},null,-1),e("span",{class:"text-xs font-medium text-blue-700 dark:text-blue-400"},"API Key",-1)]))):l.platform==="openai-responses"?(o(),n("div",Zm,r[63]||(r[63]=[e("i",{class:"fas fa-server text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"OpenAI-Api",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-400"},"API Key",-1)]))):l.platform==="claude"||l.platform==="claude-oauth"?(o(),n("div",Xm,[r[64]||(r[64]=e("i",{class:"fas fa-brain text-xs text-indigo-700"},null,-1)),e("span",ey,u(Ts(l)),1),r[65]||(r[65]=e("span",{class:"mx-1 h-4 w-px bg-indigo-300"},null,-1)),e("span",ty,u($s(l)),1)])):l.platform==="ccr"?(o(),n("div",sy,r[66]||(r[66]=[e("i",{class:"fas fa-code-branch text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"CCR",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-300"},"Relay",-1)]))):l.platform==="droid"?(o(),n("div",ay,[r[68]||(r[68]=e("i",{class:"fas fa-robot text-xs text-cyan-700 dark:text-cyan-400"},null,-1)),r[69]||(r[69]=e("span",{class:"text-xs font-semibold text-cyan-800 dark:text-cyan-300"},"Droid",-1)),r[70]||(r[70]=e("span",{class:"mx-1 h-4 w-px bg-cyan-300 dark:bg-cyan-600"},null,-1)),e("span",ry,u(os(l)),1),Us(l)?(o(),n("span",{key:0,class:I(Is(l))},[r[67]||(r[67]=e("i",{class:"fas fa-key text-[9px]"},null,-1)),e("span",null,"x"+u(ns(l)),1)],2)):y("",!0)])):l.platform==="gemini-api"?(o(),n("div",ly,r[71]||(r[71]=[e("i",{class:"fas fa-robot text-xs text-amber-700 dark:text-amber-400"},null,-1),e("span",{class:"text-xs font-semibold text-amber-800 dark:text-amber-300"},"Gemini-API",-1),e("span",{class:"mx-1 h-4 w-px bg-amber-300 dark:bg-amber-600"},null,-1),e("span",{class:"text-xs font-medium text-amber-700 dark:text-amber-400"},"API Key",-1)]))):(o(),n("div",oy,r[72]||(r[72]=[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",ny,[e("div",iy,[e("span",{class:I(["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:I(["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),x(" "+u(l.status==="blocked"?"已封锁":l.status==="unauthorized"?"异常":l.status==="temp_error"?"临时异常":l.isActive?"正常":"异常"),1)],2),l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"?(o(),n("span",dy,[r[73]||(r[73]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),r[74]||(r[74]=x(" 限流中 ",-1)),l.rateLimitStatus&&typeof l.rateLimitStatus=="object"&&l.rateLimitStatus.minutesRemaining>0?(o(),n("span",uy,"("+u(vs(l.rateLimitStatus.minutesRemaining))+")",1)):y("",!0)])):y("",!0),l.schedulable===!1?(o(),n("span",py,[r[76]||(r[76]=e("i",{class:"fas fa-pause-circle mr-1"},null,-1)),r[77]||(r[77]=x(" 不可调度 ",-1)),is(l)?(o(),Ye(b,{key:0,content:is(l),effect:"dark",placement:"top"},{default:us(()=>r[75]||(r[75]=[e("i",{class:"fas fa-question-circle ml-1 cursor-help text-gray-500"},null,-1)])),_:2,__:[75]},1032,["content"])):y("",!0)])):y("",!0),l.status==="blocked"&&l.errorMessage?(o(),n("span",{key:2,class:"mt-1 max-w-xs truncate text-xs text-gray-500 dark:text-gray-400",title:l.errorMessage},u(l.errorMessage),9,gy)):y("",!0),l.accountType==="dedicated"?(o(),n("span",cy," 绑定: "+u(l.boundApiKeysCount||0)+" 个API Key ",1)):y("",!0)])]),e("td",my,[l.usage&&l.usage.daily?(o(),n("div",yy,[e("div",xy,[r[78]||(r[78]=e("div",{class:"h-2 w-2 rounded-full bg-blue-500"},null,-1)),e("span",fy,u(l.usage.daily.requests||0)+" 次",1)]),e("div",by,[r[79]||(r[79]=e("div",{class:"h-2 w-2 rounded-full bg-purple-500"},null,-1)),e("span",vy,u(Wt(l.usage.daily.allTokens||0))+"M",1)]),e("div",ky,[r[80]||(r[80]=e("div",{class:"h-2 w-2 rounded-full bg-green-500"},null,-1)),e("span",hy,"$"+u(xe(l)),1)]),l.usage.averages&&l.usage.averages.rpm>0?(o(),n("div",wy," 平均 "+u(l.usage.averages.rpm.toFixed(2))+" RPM ",1)):y("",!0)])):(o(),n("div",$y,"暂无数据"))]),e("td",Ay,[l.platform==="claude"?(o(),n("div",Cy,[zt(l)&&l.claudeUsage?(o(),n("div",Uy,[e("div",Iy,[e("div",Ty,[r[81]||(r[81]=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",Ky,[e("div",_y,[e("div",Py,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",vt(l.claudeUsage.fiveHour)]),style:Qe({width:bt(l.claudeUsage.fiveHour)})},null,6)]),e("span",My,u(ft(l.claudeUsage.fiveHour)),1)])])]),e("div",Sy," 重置剩余 "+u(kt(l.claudeUsage.fiveHour)),1)]),e("div",Dy,[e("div",zy,[r[82]||(r[82]=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",jy,[e("div",Vy,[e("div",Ry,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",vt(l.claudeUsage.sevenDay)]),style:Qe({width:bt(l.claudeUsage.sevenDay)})},null,6)]),e("span",Oy,u(ft(l.claudeUsage.sevenDay)),1)])])]),e("div",Ly," 重置剩余 "+u(kt(l.claudeUsage.sevenDay)),1)]),e("div",Ey,[e("div",Ny,[r[83]||(r[83]=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",qy,[e("div",Wy,[e("div",Gy,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",vt(l.claudeUsage.sevenDayOpus)]),style:Qe({width:bt(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",Fy,u(ft(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",Qy," 重置剩余 "+u(kt(l.claudeUsage.sevenDayOpus)),1)])])):!zt(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",By,[l.usage&&l.usage.sessionWindow?(o(),n("div",Hy,[e("div",Jy,[r[84]||(r[84]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("span",Yy,u(Wt(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",Zy,[r[85]||(r[85]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("span",Xy," $"+u(re(l.usage.sessionWindow.totalCost)),1)])])):y("",!0),e("div",ex,[e("div",tx,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ds(l.sessionWindow.sessionWindowStatus,l)]),style:Qe({width:l.sessionWindow.progress+"%"})},null,6)]),e("span",sx,u(l.sessionWindow.progress)+"% ",1)]),e("div",ax,[e("div",null,u(Zt(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("div",rx," 剩余 "+u(Xt(l.sessionWindow.remainingTime)),1)):y("",!0)])])):(o(),n("div",lx,"暂无统计"))])):l.platform==="claude-console"?(o(),n("div",ox,[e("div",null,[Number(l.dailyQuota)>0?(o(),n(be,{key:0},[e("div",nx,[r[86]||(r[86]=e("span",{class:"text-gray-600 dark:text-gray-300"},"额度进度",-1)),e("span",ix,u(le(l).toFixed(1))+"% ",1)]),e("div",dx,[e("div",ux,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",Se(le(l))]),style:Qe({width:Math.min(100,le(l))+"%"})},null,6)]),e("span",px," $"+u(re(((me=(E=l.usage)==null?void 0:E.daily)==null?void 0:me.cost)||0))+" / $"+u(Number(l.dailyQuota).toFixed(2)),1)]),e("div",gx,[x(" 剩余 $"+u(S(l))+" ",1),e("span",cx,"重置 "+u(l.quotaResetTime||"00:00"),1)])],64)):(o(),n("div",mx,r[87]||(r[87]=[e("i",{class:"fas fa-minus"},null,-1)])))]),e("div",yx,[e("div",xx,[r[88]||(r[88]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发状态",-1)),Number(l.maxConcurrentTasks||0)>0?(o(),n("span",fx,u(ze(l).toFixed(0))+"% ",1)):y("",!0)]),Number(l.maxConcurrentTasks||0)>0?(o(),n("div",bx,[e("div",vx,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",_e(ze(l))]),style:Qe({width:Math.min(100,ze(l))+"%"})},null,6)]),e("span",{class:I(["min-w-[48px] text-xs font-medium",M(l)])},u(Number(l.activeTaskCount||0))+" / "+u(Number(l.maxConcurrentTasks||0)),3)])):(o(),n("div",kx,r[89]||(r[89]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),x("并发无限制 ",-1)])))])])):l.platform==="openai"?(o(),n("div",hx,[l.codexUsage?(o(),n("div",wx,[e("div",$x,[e("div",Ax,[e("span",Cx,u(oe("primary")),1),e("div",Ux,[e("div",Ix,[e("div",Tx,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",d(l.codexUsage.primary)]),style:Qe({width:se(l.codexUsage.primary)})},null,6)]),e("span",Kx,u(t(l.codexUsage.primary)),1)])])]),e("div",_x," 重置剩余 "+u(i(l.codexUsage.primary)),1)]),e("div",Px,[e("div",Mx,[e("span",Sx,u(oe("secondary")),1),e("div",Dx,[e("div",zx,[e("div",jx,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",d(l.codexUsage.secondary)]),style:Qe({width:se(l.codexUsage.secondary)})},null,6)]),e("span",Vx,u(t(l.codexUsage.secondary)),1)])])]),e("div",Rx," 重置剩余 "+u(i(l.codexUsage.secondary)),1)])])):(o(),n("div",Ox,r[90]||(r[90]=[e("span",{class:"text-xs"},"N/A",-1)])))])):(o(),n("div",Lx,r[91]||(r[91]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",Ex,u(Jt(l.lastUsedAt)),1),e("td",Nx,[l.platform==="claude"||l.platform==="claude-console"||l.platform==="bedrock"||l.platform==="gemini"||l.platform==="openai"||l.platform==="openai-responses"||l.platform==="azure_openai"||l.platform==="ccr"||l.platform==="droid"||l.platform==="gemini-api"?(o(),n("div",qx,[e("div",Wx,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-green-500 to-blue-600 transition-all duration-300",style:Qe({width:101-(l.priority||50)+"%"})},null,4)]),e("span",Gx,u(l.priority||50),1)])):(o(),n("div",Fx,r[92]||(r[92]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",Qx,[Gt(l.proxy)?(o(),n("div",{key:0,class:"break-all rounded bg-blue-50 px-2 py-1 font-mono text-xs",title:Gt(l.proxy)},u(Gt(l.proxy)),9,Bx)):(o(),n("div",Hx,"无代理"))]),e("td",Jx,[e("div",Yx,[l.expiresAt?(o(),n("span",Zx,[Ue(l.expiresAt)?(o(),n("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:Kt(pe=>Pe(l),["stop"])},r[93]||(r[93]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),x(" 已过期 ",-1)]),8,Xx)):Ke(l.expiresAt)?(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:Kt(pe=>Pe(l),["stop"])},[r[94]||(r[94]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),x(" "+u(N(l.expiresAt)),1)],8,ef)):(o(),n("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:Kt(pe=>Pe(l),["stop"])},u(N(l.expiresAt)),9,tf))])):(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:Kt(pe=>Pe(l),["stop"])},r[95]||(r[95]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),x(" 永不过期 ",-1)]),8,sf))])]),e("td",af,[G.value?(o(),n("div",cf,[e("button",{class:I(["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:pe=>Bt(l)},[e("i",{class:I(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",yf,u(l.schedulable?"调度":"停用"),1)],10,mf),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:pe=>Ft(l)},r[101]||(r[101]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,xf),st(sa,{actions:Pt(l)},null,8,["actions"])])):(o(),n("div",rf,[pt(l)?(o(),n("button",{key:0,class:I(["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:pe=>as(l)},[e("i",{class:I(["fas fa-redo",l.isResetting?"animate-spin":""])},null,2),r[96]||(r[96]=e("span",{class:"ml-1"},"重置状态",-1))],10,lf)):y("",!0),e("button",{class:I(["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:pe=>Bt(l)},[e("i",{class:I(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",nf,u(l.schedulable?"调度":"停用"),1)],10,of),nt(l)?(o(),n("button",{key:1,class:"rounded bg-indigo-100 px-2.5 py-1 text-xs font-medium text-indigo-700 transition-colors hover:bg-indigo-200",title:"查看使用详情",onClick:pe=>v(l)},r[97]||(r[97]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,df)):y("",!0),Fe(l)?(o(),n("button",{key:2,class:"rounded bg-cyan-100 px-2.5 py-1 text-xs font-medium text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/40 dark:text-cyan-300 dark:hover:bg-cyan-800/50",title:"测试账户连通性",onClick:pe=>yt(l)},r[98]||(r[98]=[e("i",{class:"fas fa-vial"},null,-1),e("span",{class:"ml-1"},"测试",-1)]),8,uf)):y("",!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:pe=>Ft(l)},r[99]||(r[99]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,pf),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:pe=>Qt(l)},r[100]||(r[100]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,gf)]))])])}),128))])])],512)])),!K.value&&it.value.length>0?(o(),n("div",ff,[(o(!0),n(be,null,qe(Ze.value,l=>{var E,me,pe,Ee;return o(),n("div",{key:l.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",bf,[e("div",vf,[Ge.value?h((o(),n("input",{key:0,"onUpdate:modelValue":r[14]||(r[14]=Ne=>te.value=Ne),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:Xe},null,40,kf)),[[Ve,te.value]]):y("",!0),e("div",{class:I(["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:I(["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",hf,u(l.name||l.email),1),e("div",wf,[e("span",$f,u(l.platform),1),r[102]||(r[102]=e("span",{class:"text-xs text-gray-400"},"|",-1)),e("span",Af,u(l.type),1)])])]),e("span",{class:I(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",_s(l)])},[e("div",{class:I(["mr-1.5 h-1.5 w-1.5 rounded-full",Ps(l)])},null,2),x(" "+u(Ks(l)),1)],2)]),e("div",Cf,[e("div",null,[r[106]||(r[106]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"今日使用",-1)),e("div",Uf,[e("div",If,[r[103]||(r[103]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-blue-500"},null,-1)),e("p",Tf,u(((me=(E=l.usage)==null?void 0:E.daily)==null?void 0:me.requests)||0)+" 次 ",1)]),e("div",Kf,[r[104]||(r[104]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",_f,u(Wt(((Ee=(pe=l.usage)==null?void 0:pe.daily)==null?void 0:Ee.allTokens)||0))+"M ",1)]),e("div",Pf,[r[105]||(r[105]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",Mf," $"+u(xe(l)),1)])])]),e("div",null,[r[109]||(r[109]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"会话窗口",-1)),l.usage&&l.usage.sessionWindow?(o(),n("div",Sf,[e("div",Df,[r[107]||(r[107]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",zf,u(Wt(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",jf,[r[108]||(r[108]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",Vf," $"+u(re(l.usage.sessionWindow.totalCost)),1)])])):(o(),n("div",Rf,"-"))])]),e("div",Of,[l.platform==="claude"?(o(),n("div",Lf,[zt(l)&&l.claudeUsage?(o(),n("div",Ef,[e("div",Nf,[e("div",qf,[r[110]||(r[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",Wf,[e("div",Gf,[e("div",Ff,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",vt(l.claudeUsage.fiveHour)]),style:Qe({width:bt(l.claudeUsage.fiveHour)})},null,6)]),e("span",Qf,u(ft(l.claudeUsage.fiveHour)),1)])])]),e("div",Bf," 重置剩余 "+u(kt(l.claudeUsage.fiveHour)),1)]),e("div",Hf,[e("div",Jf,[r[111]||(r[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",Yf,[e("div",Zf,[e("div",Xf,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",vt(l.claudeUsage.sevenDay)]),style:Qe({width:bt(l.claudeUsage.sevenDay)})},null,6)]),e("span",eb,u(ft(l.claudeUsage.sevenDay)),1)])])]),e("div",tb," 重置剩余 "+u(kt(l.claudeUsage.sevenDay)),1)]),e("div",sb,[e("div",ab,[r[112]||(r[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",rb,[e("div",lb,[e("div",ob,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",vt(l.claudeUsage.sevenDayOpus)]),style:Qe({width:bt(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",nb,u(ft(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",ib," 重置剩余 "+u(kt(l.claudeUsage.sevenDayOpus)),1)])])):!zt(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",db,[e("div",ub,[e("div",pb,[r[114]||(r[114]=e("span",{class:"font-medium text-gray-600 dark:text-gray-300"},"会话窗口",-1)),st(b,{content:"会话窗口进度不代表使用量,仅表示距离下一个5小时窗口的剩余时间",placement:"top"},{default:us(()=>r[113]||(r[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",gb,u(l.sessionWindow.progress)+"% ",1)]),e("div",cb,[e("div",{class:I(["h-full transition-all duration-300",ds(l.sessionWindow.sessionWindowStatus,l)]),style:Qe({width:l.sessionWindow.progress+"%"})},null,6)]),e("div",mb,[e("span",yb,u(Zt(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("span",xb," 剩余 "+u(Xt(l.sessionWindow.remainingTime)),1)):(o(),n("span",fb," 已结束 "))])])):(o(),n("div",bb,"暂无统计"))])):l.platform==="openai"?(o(),n("div",vb,[l.codexUsage?(o(),n("div",kb,[e("div",hb,[e("div",wb,[e("span",$b,u(oe("primary")),1),e("div",Ab,[e("div",Cb,[e("div",Ub,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",d(l.codexUsage.primary)]),style:Qe({width:se(l.codexUsage.primary)})},null,6)]),e("span",Ib,u(t(l.codexUsage.primary)),1)])])]),e("div",Tb," 重置剩余 "+u(i(l.codexUsage.primary)),1)]),e("div",Kb,[e("div",_b,[e("span",Pb,u(oe("secondary")),1),e("div",Mb,[e("div",Sb,[e("div",Db,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",d(l.codexUsage.secondary)]),style:Qe({width:se(l.codexUsage.secondary)})},null,6)]),e("span",zb,u(t(l.codexUsage.secondary)),1)])])]),e("div",jb," 重置剩余 "+u(i(l.codexUsage.secondary)),1)])])):y("",!0),l.codexUsage?y("",!0):(o(),n("div",Vb,"暂无统计"))])):y("",!0),e("div",Rb,[r[115]||(r[115]=e("span",{class:"text-gray-500 dark:text-gray-400"},"最后使用",-1)),e("span",Ob,u(l.lastUsedAt?Ms(l.lastUsedAt):"从未使用"),1)]),l.proxyConfig&&l.proxyConfig.type!=="none"?(o(),n("div",Lb,[r[116]||(r[116]=e("span",{class:"text-gray-500 dark:text-gray-400"},"代理",-1)),e("span",Eb,u(l.proxyConfig.type.toUpperCase()),1)])):y("",!0),e("div",Nb,[r[117]||(r[117]=e("span",{class:"text-gray-500 dark:text-gray-400"},"优先级",-1)),e("span",qb,u(l.priority||50),1)])]),e("div",Wb,[e("button",{class:I(["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:Ne=>Bt(l)},[e("i",{class:I(["fas",l.schedulable?"fa-pause":"fa-play"])},null,2),x(" "+u(l.schedulable?"暂停":"启用"),1)],10,Gb),nt(l)?(o(),n("button",{key:0,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-indigo-50 px-3 py-2 text-xs text-indigo-600 transition-colors hover:bg-indigo-100",onClick:Ne=>v(l)},r[118]||(r[118]=[e("i",{class:"fas fa-chart-line"},null,-1),x(" 详情 ",-1)]),8,Fb)):y("",!0),Fe(l)?(o(),n("button",{key:1,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-cyan-50 px-3 py-2 text-xs text-cyan-600 transition-colors hover:bg-cyan-100 dark:bg-cyan-900/40 dark:text-cyan-300 dark:hover:bg-cyan-800/50",onClick:Ne=>yt(l)},r[119]||(r[119]=[e("i",{class:"fas fa-vial"},null,-1),x(" 测试 ",-1)]),8,Qb)):y("",!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:Ne=>Ft(l)},r[120]||(r[120]=[e("i",{class:"fas fa-edit mr-1"},null,-1),x(" 编辑 ",-1)]),8,Bb),e("button",{class:"rounded-lg bg-red-50 px-3 py-2 text-xs text-red-600 transition-colors hover:bg-red-100",onClick:Ne=>Qt(l)},r[121]||(r[121]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Hb)])])}),128))])):y("",!0)]),!K.value&&it.value.length>0?(o(),n("div",Jb,[e("div",Yb,[e("span",Zb," 共 "+u(it.value.length)+" 条记录 ",1),e("div",Xb,[r[122]||(r[122]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),h(e("select",{"onUpdate:modelValue":r[15]||(r[15]=l=>p.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:r[16]||(r[16]=l=>P.value=1)},[(o(),n(be,null,qe(w,l=>e("option",{key:l,value:l},u(l),9,ev)),64))],544),[[Ds,p.value]]),r[123]||(r[123]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",tv,[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:P.value===1,onClick:r[17]||(r[17]=l=>P.value--)},r[124]||(r[124]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,sv),e("div",av,[Mt.value?(o(),n("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:r[18]||(r[18]=l=>P.value=1)}," 1 ")):y("",!0),Lt.value?(o(),n("span",rv," ... ")):y("",!0),(o(!0),n(be,null,qe(mt.value,l=>(o(),n("button",{key:l,class:I(["rounded-md border px-3 py-1 text-xs font-medium transition-colors sm:text-sm",l===P.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:E=>P.value=l},u(l),11,lv))),128)),Ut.value?(o(),n("span",ov," ... ")):y("",!0),Ct.value?(o(),n("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:r[19]||(r[19]=l=>P.value=tt.value)},u(tt.value),1)):y("",!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:P.value===tt.value||tt.value===0,onClick:r[20]||(r[20]=l=>P.value++)},r[125]||(r[125]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,nv)])])):y("",!0),ut.value&&(!lt.value||lt.value!=="ccr")?(o(),Ye(Ns,{key:1,onClose:es,onPlatformChanged:r[21]||(r[21]=l=>lt.value=l),onSuccess:rs})):ut.value&<.value==="ccr"?(o(),Ye(qs,{key:2,onClose:es,onSuccess:rs})):y("",!0),ot.value&&T.value&&T.value.platform==="ccr"?(o(),Ye(qs,{key:3,account:T.value,onClose:r[22]||(r[22]=l=>ot.value=!1),onSuccess:ls},null,8,["account"])):ot.value?(o(),Ye(Ns,{key:4,account:T.value,onClose:r[23]||(r[23]=l=>ot.value=!1),onSuccess:ls},null,8,["account"])):y("",!0),st(Gs,{"cancel-text":at(m).cancelText,"confirm-text":at(m).confirmText,message:at(m).message,show:at(Me),title:at(m).title,onCancel:at(H),onConfirm:at(U)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),ve.value?(o(),Ye(rc,{key:5,account:L.value||{},"generated-at":$e.value,history:C.value,loading:ie.value,overview:de.value,show:ve.value,summary:we.value,onClose:c},null,8,["account","generated-at","history","loading","overview","show","summary"])):y("",!0),st(Ic,{ref_key:"expiryEditModalRef",ref:B,account:Re.value||{id:null,expiresAt:null,name:""},show:!!Re.value,onClose:Te,onSave:rt},null,8,["account","show"]),st(Xc,{account:R.value,show:A.value,onClose:Ot},null,8,["account","show"])])}}},xv=cs(iv,[["__scopeId","data-v-48c4f03f"]]);export{xv as default};
|