Files
claude-relay-service/assets/AccountsView-G6_okn5O.js
2026-01-22 07:19:11 +00:00

72 lines
434 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import{b as Kr,e as br,f as Sr}from"./element-plus-BUfCkBQO.js";import{r as $,aP as Mr,o as $e,V as Ya,x as n,y as o,z as e,L as c,K as b,al as ze,aT as Ot,O as x,aq as z,aa as Dr,P as u,aV as Ja,aY as va,C as I,c as se,Z as Pr,an as _e,Q as Ce,q as aa,I as Ye,ac as We,a5 as Kt,R as Ee,B as He,u as st,aX as jr,aU as Lr,D as ar,_ as vr,J as nt,Y as _t}from"./vue-vendor-R8HMg95E.js";import{c as G,s as P,_ as ra,a as Vr,A as ka}from"./index-B3t2NHq9.js";import{C as kr}from"./ConfirmModal-BAFPIqcc.js";import{C as zr}from"./chart-yFHxLHpB.js";import{C as Qa,_ as Rr}from"./ActionDropdown-4ngn0-GS.js";import"./vendor-Dr8jvgFu.js";const Ha=$(!1),pr=$({title:"",message:"",confirmText:"继续",cancelText:"取消"}),Rt=$(null);function hr(){return{showConfirmModal:Ha,confirmOptions:pr,showConfirm:(N,K,V="继续",U="取消")=>new Promise(C=>{pr.value={title:N,message:K,confirmText:V,cancelText:U},Rt.value=C,Ha.value=!0}),handleConfirm:()=>{Ha.value=!1,Rt.value&&(Rt.value(!0),Rt.value=null)},handleCancel:()=>{Ha.value=!1,Rt.value&&(Rt.value(!1),Rt.value=null)}}}const wr=Mr("accounts",()=>{const H=$([]),Pe=$([]),p=$([]),N=$([]),K=$([]),V=$([]),U=$([]),C=$([]),v=$(!1),k=$(null),j=$(""),oe=$("asc"),Z=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/claude-accounts");if(w.success)H.value=w.data||[];else throw new Error(w.message||"获取Claude账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},pe=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/claude-console-accounts");if(w.success)Pe.value=w.data||[];else throw new Error(w.message||"获取Claude Console账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},J=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/bedrock-accounts");if(w.success)p.value=w.data||[];else throw new Error(w.message||"获取Bedrock账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},W=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/gemini-accounts");if(w.success)N.value=w.data||[];else throw new Error(w.message||"获取Gemini账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},O=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/openai-accounts");if(w.success)K.value=w.data||[];else throw new Error(w.message||"获取OpenAI账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},y=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/azure-openai-accounts");if(w.success)V.value=w.data||[];else throw new Error(w.message||"获取Azure OpenAI账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},g=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/openai-responses-accounts");if(w.success)U.value=w.data||[];else throw new Error(w.message||"获取OpenAI-Responses账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},D=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/droid-accounts");if(w.success)C.value=w.data||[];else throw new Error(w.message||"获取Droid账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}};return{claudeAccounts:H,claudeConsoleAccounts:Pe,bedrockAccounts:p,geminiAccounts:N,openaiAccounts:K,azureOpenaiAccounts:V,openaiResponsesAccounts:U,droidAccounts:C,loading:v,error:k,sortBy:j,sortOrder:oe,fetchClaudeAccounts:Z,fetchClaudeConsoleAccounts:pe,fetchBedrockAccounts:J,fetchGeminiAccounts:W,fetchOpenAIAccounts:O,fetchAzureOpenAIAccounts:y,fetchOpenAIResponsesAccounts:g,fetchDroidAccounts:D,fetchAllAccounts:async()=>{v.value=!0,k.value=null;try{await Promise.all([Z(),pe(),J(),W(),O(),y(),g(),D()])}catch(w){throw k.value=w.message,w}finally{v.value=!1}},createClaudeAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/claude-accounts",w);if(m.success)return await Z(),m.data;throw new Error(m.message||"创建Claude账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createClaudeConsoleAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/claude-console-accounts",w);if(m.success)return await pe(),m.data;throw new Error(m.message||"创建Claude Console账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createBedrockAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/bedrock-accounts",w);if(m.success)return await J(),m.data;throw new Error(m.message||"创建Bedrock账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createGeminiAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/gemini-accounts",w);if(m.success)return await W(),m.data;throw new Error(m.message||"创建Gemini账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createOpenAIAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/openai-accounts",w);if(m.success)return await O(),m.data;throw new Error(m.message||"创建OpenAI账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createDroidAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/droid-accounts",w);if(m.success)return await D(),m.data;throw new Error(m.message||"创建Droid账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},updateDroidAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/droid-accounts/${w}`,m);if(E.success)return await D(),E.data;throw new Error(E.message||"更新Droid账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},createAzureOpenAIAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/azure-openai-accounts",w);if(m.success)return await y(),m.data;throw new Error(m.message||"创建Azure OpenAI账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createOpenAIResponsesAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/openai-responses-accounts",w);if(m.success)return await g(),m.data;throw new Error(m.message||"创建OpenAI-Responses账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createGeminiApiAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/gemini-api-accounts",w);if(m.success)return await W(),m.data;throw new Error(m.message||"创建Gemini API账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},updateClaudeAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/claude-accounts/${w}`,m);if(E.success)return await Z(),E;throw new Error(E.message||"更新Claude账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateClaudeConsoleAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/claude-console-accounts/${w}`,m);if(E.success)return await pe(),E;throw new Error(E.message||"更新Claude Console账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateBedrockAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/bedrock-accounts/${w}`,m);if(E.success)return await J(),E;throw new Error(E.message||"更新Bedrock账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateGeminiAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/gemini-accounts/${w}`,m);if(E.success)return await W(),E;throw new Error(E.message||"更新Gemini账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateOpenAIAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/openai-accounts/${w}`,m);if(E.success)return await O(),E;throw new Error(E.message||"更新OpenAI账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateAzureOpenAIAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/azure-openai-accounts/${w}`,m);if(E.success)return await y(),E;throw new Error(E.message||"更新Azure OpenAI账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateOpenAIResponsesAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/openai-responses-accounts/${w}`,m);if(E.success)return await g(),E;throw new Error(E.message||"更新OpenAI-Responses账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateGeminiApiAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/gemini-api-accounts/${w}`,m);if(E.success)return await W(),E;throw new Error(E.message||"更新Gemini API账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},toggleAccount:async(w,m)=>{v.value=!0,k.value=null;try{let E;w==="claude"?E=`/admin/claude-accounts/${m}/toggle`:w==="claude-console"?E=`/admin/claude-console-accounts/${m}/toggle`:w==="bedrock"?E=`/admin/bedrock-accounts/${m}/toggle`:w==="gemini"?E=`/admin/gemini-accounts/${m}/toggle`:w==="openai"?E=`/admin/openai-accounts/${m}/toggle`:w==="azure_openai"?E=`/admin/azure-openai-accounts/${m}/toggle`:w==="openai-responses"?E=`/admin/openai-responses-accounts/${m}/toggle`:E=`/admin/openai-accounts/${m}/toggle`;const Qe=await G.put(E);if(Qe.success)return w==="claude"?await Z():w==="claude-console"?await pe():w==="bedrock"?await J():w==="gemini"?await W():w==="openai"?await O():w==="azure_openai"?await y():w==="openai-responses"?await g():await O(),Qe;throw new Error(Qe.message||"切换状态失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},deleteAccount:async(w,m)=>{v.value=!0,k.value=null;try{let E;w==="claude"?E=`/admin/claude-accounts/${m}`:w==="claude-console"?E=`/admin/claude-console-accounts/${m}`:w==="bedrock"?E=`/admin/bedrock-accounts/${m}`:w==="gemini"?E=`/admin/gemini-accounts/${m}`:w==="openai"?E=`/admin/openai-accounts/${m}`:w==="azure_openai"?E=`/admin/azure-openai-accounts/${m}`:w==="openai-responses"?E=`/admin/openai-responses-accounts/${m}`:E=`/admin/openai-accounts/${m}`;const Qe=await G.delete(E);if(Qe.success)return w==="claude"?await Z():w==="claude-console"?await pe():w==="bedrock"?await J():w==="gemini"?await W():w==="openai"?await O():w==="azure_openai"?await y():w==="openai-responses"?await g():await O(),Qe;throw new Error(Qe.message||"删除失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},refreshClaudeToken:async w=>{v.value=!0,k.value=null;try{const m=await G.post(`/admin/claude-accounts/${w}/refresh`);if(m.success)return await Z(),m;throw new Error(m.message||"Token刷新失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},generateClaudeAuthUrl:async w=>{try{const m=await G.post("/admin/claude-accounts/generate-auth-url",w);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeClaudeCode:async w=>{try{const m=await G.post("/admin/claude-accounts/exchange-code",w);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateClaudeSetupTokenUrl:async w=>{try{const m=await G.post("/admin/claude-accounts/generate-setup-token-url",w);if(m.success)return m.data;throw new Error(m.message||"生成Setup Token URL失败")}catch(m){throw k.value=m.message,m}},exchangeClaudeSetupTokenCode:async w=>{try{const m=await G.post("/admin/claude-accounts/exchange-setup-token-code",w);if(m.success)return m.data;throw new Error(m.message||"交换Setup Token授权码失败")}catch(m){throw k.value=m.message,m}},oauthWithCookie:async w=>{try{const m=await G.post("/admin/claude-accounts/oauth-with-cookie",w);if(m.success)return m.data;throw new Error(m.message||"Cookie授权失败")}catch(m){throw k.value=m.message,m}},oauthSetupTokenWithCookie:async w=>{try{const m=await G.post("/admin/claude-accounts/setup-token-with-cookie",w);if(m.success)return m.data;throw new Error(m.message||"Cookie授权失败")}catch(m){throw k.value=m.message,m}},generateGeminiAuthUrl:async w=>{try{const m=await G.post("/admin/gemini-accounts/generate-auth-url",w);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeGeminiCode:async w=>{try{const m=await G.post("/admin/gemini-accounts/exchange-code",w);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateOpenAIAuthUrl:async w=>{try{const m=await G.post("/admin/openai-accounts/generate-auth-url",w);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeOpenAICode:async w=>{try{const m=await G.post("/admin/openai-accounts/exchange-code",w);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateDroidAuthUrl:async w=>{k.value=null;try{const m=await G.post("/admin/droid-accounts/generate-auth-url",w);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeDroidCode:async w=>{k.value=null;try{return await G.post("/admin/droid-accounts/exchange-code",w)}catch(m){throw k.value=m.message,m}},sortAccounts:w=>{j.value===w?oe.value=oe.value==="asc"?"desc":"asc":(j.value=w,oe.value="asc")},reset:()=>{H.value=[],Pe.value=[],p.value=[],N.value=[],K.value=[],V.value=[],U.value=[],C.value=[],v.value=!1,k.value=null,j.value="",oe.value="asc"}}}),Or={class:"space-y-4"},Er={class:"flex items-center justify-between"},Nr={class:"flex cursor-pointer items-center"},qr={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"},Wr={class:"relative"},Fr={key:0,class:"mt-1 text-xs text-red-500"},Br={key:1,class:"mt-1 text-xs text-green-500"},Gr={class:"grid grid-cols-2 gap-4"},Qr={class:"space-y-4"},Hr={class:"flex items-center"},Jr={key:0,class:"grid grid-cols-2 gap-4"},Yr={class:"relative"},Zr=["type"],rr={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$({...p.modelValue}),V=$(!!(K.value.username||K.value.password)),U=$(!1),C=$(""),v=$(""),k=$(!1);$e(()=>p.modelValue,O=>{JSON.stringify(O)!==JSON.stringify(K.value)&&(K.value={...O},V.value=!!(O.username||O.password))},{deep:!0}),$e(()=>K.value.enabled,()=>{oe()}),$e(()=>K.value.type,()=>{oe()}),$e(()=>K.value.host,()=>{oe()}),$e(()=>K.value.port,()=>{oe()}),$e(()=>K.value.username,()=>{oe()}),$e(()=>K.value.password,()=>{oe()}),$e(V,O=>{O||(K.value.username="",K.value.password="",oe())});let j=null;function oe(){j&&clearTimeout(j),j=setTimeout(()=>{const O={...K.value};V.value||(O.username="",O.password=""),N("update:modelValue",O)},100)}function Z(){if(v.value="",k.value=!1,!!C.value)try{const O=C.value.split("#")[0].trim();if(!O)return;const y=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,g=O.match(y);if(!g){const we=/^([^:]+):(\d+)$/,Ke=O.match(we);if(Ke){K.value.type="socks5",K.value.host=Ke[1],K.value.port=Ke[2],K.value.username="",K.value.password="",V.value=!1,k.value=!0,oe(),setTimeout(()=>{k.value=!1},3e3);return}v.value="无效的代理URL格式请检查输入";return}const[,D,ce,B,_,Q]=g;K.value.type=D.toLowerCase(),K.value.host=_,K.value.port=Q,ce&&B?(K.value.username=decodeURIComponent(ce),K.value.password=decodeURIComponent(B),V.value=!0):(K.value.username="",K.value.password="",V.value=!1),k.value=!0,oe(),setTimeout(()=>{k.value=!1},3e3)}catch{v.value="解析失败请检查URL格式"}}function pe(){C.value="",v.value="",k.value=!1}function J(){setTimeout(()=>{Z()},0)}function W(){const O=C.value.trim();O.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(O)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(O))&&Z():/^[^:]+:\d{2,5}$/.test(O)&&Z()}return Ya(()=>{j&&clearTimeout(j)}),(O,y)=>(o(),n("div",Or,[e("div",Er,[y[10]||(y[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",Nr,[b(e("input",{"onUpdate:modelValue":y[0]||(y[0]=g=>K.value.enabled=g),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ze,K.value.enabled]]),y[9]||(y[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),K.value.enabled?(o(),n("div",qr,[y[22]||(y[22]=Ot('<div class="mb-3 flex items-start gap-3"><div class="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-gray-500"><i class="fas fa-server text-sm text-white"></i></div><div class="flex-1"><p class="text-sm text-gray-700 dark:text-gray-300"> 配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。 </p><p class="mt-1 text-xs text-gray-500 dark:text-gray-400"> 请确保代理服务器稳定可用,否则会影响账户的正常使用。 </p></div></div>',1)),e("div",null,[y[14]||(y[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[x(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",Wr,[b(e("input",{"onUpdate:modelValue":y[1]||(y[1]=g=>C.value=g),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:W,onKeyup:Dr(Z,["enter"]),onPaste:J},null,544),[[z,C.value]]),C.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:pe},y[11]||(y[11]=[e("i",{class:"fas fa-times"},null,-1)]))):c("",!0)]),v.value?(o(),n("p",Fr,[y[12]||(y[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),x(" "+u(v.value),1)])):k.value?(o(),n("p",Br,y[13]||(y[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),x(" 代理配置已自动填充 ",-1)]))):c("",!0)]),y[23]||(y[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[y[16]||(y[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),b(e("select",{"onUpdate:modelValue":y[2]||(y[2]=g=>K.value.type=g),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},y[15]||(y[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[Ja,K.value.type]])]),e("div",Gr,[e("div",null,[y[17]||(y[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),b(e("input",{"onUpdate:modelValue":y[3]||(y[3]=g=>K.value.host=g),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,K.value.host]])]),e("div",null,[y[18]||(y[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),b(e("input",{"onUpdate:modelValue":y[4]||(y[4]=g=>K.value.port=g),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,K.value.port]])])]),e("div",Qr,[e("div",Hr,[b(e("input",{id:"proxyAuth","onUpdate:modelValue":y[5]||(y[5]=g=>V.value=g),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ze,V.value]]),y[19]||(y[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),V.value?(o(),n("div",Jr,[e("div",null,[y[20]||(y[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),b(e("input",{"onUpdate:modelValue":y[6]||(y[6]=g=>K.value.username=g),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,K.value.username]])]),e("div",null,[y[21]||(y[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",Yr,[b(e("input",{"onUpdate:modelValue":y[7]||(y[7]=g=>K.value.password=g),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:U.value?"text":"password"},null,8,Zr),[[va,K.value.password]]),e("button",{class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:y[8]||(y[8]=g=>U.value=!U.value)},[e("i",{class:I(U.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):c("",!0)]),y[24]||(y[24]=e("div",{class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-info-circle mr-1"}),e("strong",null,"提示:"),x("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):c("",!0)]))}},Xr={class:"space-y-6"},es={key:0},ts={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},as={class:"flex items-start gap-4"},rs={class:"flex-1"},ss={class:"mb-4"},ls={class:"flex gap-4"},os={class:"flex cursor-pointer items-center gap-2"},ns={class:"flex cursor-pointer items-center gap-2"},is={key:0,class:"space-y-4"},ds={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},us={class:"mb-4"},gs={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},ps={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},cs={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},ys={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"},ms={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"},xs={class:"text-sm text-red-600 dark:text-red-400"},fs=["disabled"],bs={key:0,class:"loading-spinner mr-2"},vs={key:1,class:"fas fa-magic mr-2"},ks={key:1},hs={class:"space-y-4"},ws={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},$s={class:"flex items-start gap-3"},As={class:"flex-1"},Cs=["disabled"],Ts={key:0,class:"fas fa-link mr-2"},Is={key:1,class:"loading-spinner mr-2"},Us={key:1,class:"space-y-3"},_s={class:"flex items-center gap-2"},Ks=["value"],Ss={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Ms={class:"flex items-start gap-3"},Ds={class:"flex-1"},Ps={class:"space-y-3"},js={key:1},Ls={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},Vs={class:"flex items-start gap-4"},zs={class:"flex-1"},Rs={class:"mb-4"},Os={class:"text-sm text-green-800 dark:text-green-300"},Es={class:"font-semibold"},Ns={class:"space-y-4"},qs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Ws={class:"flex items-start gap-3"},Fs={class:"flex-1"},Bs=["disabled"],Gs={key:0,class:"fas fa-link mr-2"},Qs={key:1,class:"loading-spinner mr-2"},Hs={key:1,class:"space-y-3"},Js={class:"flex items-center gap-2"},Ys=["value"],Zs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Xs={class:"flex items-start gap-3"},el={class:"flex-1"},tl={class:"space-y-3"},al={key:2},rl={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},sl={class:"flex items-start gap-4"},ll={class:"flex-1"},ol={class:"space-y-4"},nl={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},il={class:"flex items-start gap-3"},dl={class:"flex-1"},ul=["disabled"],gl={key:0,class:"fas fa-link mr-2"},pl={key:1,class:"loading-spinner mr-2"},cl={key:1,class:"space-y-3"},yl={class:"flex items-center gap-2"},ml=["value"],xl={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},fl={class:"flex items-start gap-3"},bl={class:"flex-1"},vl={class:"space-y-3"},kl={key:3},hl={class:"rounded-lg border border-cyan-200 bg-cyan-50 p-6 dark:border-cyan-700 dark:bg-cyan-900/30"},wl={class:"flex items-start gap-4"},$l={class:"flex-1"},Al={class:"space-y-4"},Cl={class:"rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"},Tl={class:"flex items-start gap-3"},Il={class:"flex-1"},Ul=["disabled"],_l={key:0,class:"fas fa-link mr-2"},Kl={key:1,class:"loading-spinner mr-2"},Sl={key:1,class:"space-y-4"},Ml={class:"space-y-2"},Dl={class:"flex flex-col gap-2 rounded-md border border-cyan-200 bg-white p-3 dark:border-cyan-700 dark:bg-gray-800"},Pl={class:"flex items-center gap-2"},jl=["value"],Ll={class:"space-y-2"},Vl={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"},zl={class:"font-mono text-xl font-semibold text-cyan-700 dark:text-cyan-200"},Rl={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Ol={class:"flex gap-3 pt-4"},El=["disabled"],Nl={key:0,class:"loading-spinner mr-2"},ql={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(H,{expose:Pe,emit:p}){const N=H,K=p,V=wr(),U=$(!1),C=$(!1),v=$(""),k=$(""),j=$(!1),oe=se(()=>N.platform==="gemini-antigravity"?"antigravity":"gemini-cli"),Z=$(""),pe=$(""),J=$(""),W=$(""),O=$(0);let y=null;const g=$("manual"),D=$(""),ce=$(!1),B=$(""),_=$(!1),Q=$({current:0,total:0}),we=se(()=>D.value.split(`
`).map(de=>de.trim()).filter(de=>de.length>0).length),Ke=se(()=>N.platform==="droid"?!!Z.value:v.value&&k.value.trim()),F=se(()=>{if(!O.value||O.value<=0)return"00:00";const de=Math.floor(O.value/60),a=O.value%60;return`${de.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}`}),ee=de=>{if(S(),!de||de<=0){O.value=0;return}O.value=Math.floor(de),y=setInterval(()=>{O.value<=1?(O.value=0,S()):O.value-=1},1e3)},S=()=>{y&&(clearInterval(y),y=null)};$e(k,de=>{if(N.platform==="droid"||!de||typeof de!="string")return;const a=de.trim();if(!a)return;if(a.startsWith("http://")||a.startsWith("https://"))if(a.startsWith("http://localhost:45462")||a.startsWith("http://localhost:1455"))try{const Ge=new URL(a).searchParams.get("code");Ge?(k.value=Ge,P("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):P("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(Ae){console.error("Failed to parse URL:",Ae),P("链接格式错误,请检查是否为完整的 URL","error")}else if(N.platform==="gemini"||N.platform==="gemini-antigravity"||N.platform==="openai")try{const Ge=new URL(a).searchParams.get("code");Ge&&(k.value=Ge,P("成功提取授权码!","success"))}catch{}else P("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const h=async()=>{var de;S(),v.value="",k.value="",pe.value="",J.value="",W.value="",O.value=0,Z.value="",j.value=!1,U.value=!0;try{const a=(de=N.proxy)!=null&&de.enabled?{proxy:{type:N.proxy.type,host:N.proxy.host,port:parseInt(N.proxy.port),username:N.proxy.username||null,password:N.proxy.password||null}}:{};if(N.platform==="claude"){const te=await V.generateClaudeAuthUrl(a);v.value=te.authUrl,Z.value=te.sessionId}else if(N.platform==="gemini"||N.platform==="gemini-antigravity"){const te=await V.generateGeminiAuthUrl({...a,oauthProvider:oe.value});v.value=te.authUrl,Z.value=te.sessionId}else if(N.platform==="openai"){const te=await V.generateOpenAIAuthUrl(a);v.value=te.authUrl,Z.value=te.sessionId}else if(N.platform==="droid"){const te=await V.generateDroidAuthUrl(a);v.value=te.verificationUriComplete||te.verificationUri,J.value=te.verificationUri,W.value=te.verificationUriComplete||te.verificationUri,pe.value=te.userCode,ee(te.expiresIn||300),Z.value=te.sessionId}}catch(a){P(a.message||"生成授权链接失败","error")}finally{U.value=!1}},fe=()=>{S(),v.value="",k.value="",pe.value="",J.value="",W.value="",O.value=0,Z.value="",h()},le=async()=>{if(!v.value){P("请先生成授权链接","warning");return}try{await navigator.clipboard.writeText(v.value),j.value=!0,P("链接已复制","success"),setTimeout(()=>{j.value=!1},2e3)}catch{const a=document.createElement("input");a.value=v.value,document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a),j.value=!0,P("链接已复制","success"),setTimeout(()=>{j.value=!1},2e3)}},je=async()=>{if(!pe.value){P("请先生成授权验证码","warning");return}try{await navigator.clipboard.writeText(pe.value),P("验证码已复制","success")}catch{const a=document.createElement("input");a.value=pe.value,document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a),P("验证码已复制","success")}},Y=()=>{W.value?window.open(W.value,"_blank","noopener"):J.value&&window.open(J.value,"_blank","noopener")},T=async()=>{var de;if(Ke.value){C.value=!0;try{let a={};N.platform==="claude"?a={sessionId:Z.value,callbackUrl:k.value.trim()}:N.platform==="gemini"||N.platform==="gemini-antigravity"?a={code:k.value.trim(),sessionId:Z.value,oauthProvider:oe.value}:N.platform==="openai"?a={code:k.value.trim(),sessionId:Z.value}:N.platform==="droid"&&(a={sessionId:Z.value}),(de=N.proxy)!=null&&de.enabled&&(a.proxy={type:N.proxy.type,host:N.proxy.host,port:parseInt(N.proxy.port),username:N.proxy.username||null,password:N.proxy.password||null});let te;if(N.platform==="claude")te=await V.exchangeClaudeCode(a);else if(N.platform==="gemini"||N.platform==="gemini-antigravity")te=await V.exchangeGeminiCode(a),te&&(te.oauthProvider=oe.value);else if(N.platform==="openai")te=await V.exchangeOpenAICode(a);else if(N.platform==="droid"){const Ae=await V.exchangeDroidCode(a);if(!Ae.success){if(Ae.pending){const Ge=Ae.message||"授权尚未完成,请在浏览器确认后稍候再次尝试。";P(Ge,"info"),typeof Ae.expiresIn=="number"&&Ae.expiresIn>=0&&ee(Ae.expiresIn);return}throw new Error(Ae.message||"授权失败,请重试")}te=Ae.data,S()}K("success",te)}catch(a){P(a.message||"授权失败,请检查授权码是否正确","error")}finally{C.value=!1}}};Pr(()=>{S()});const q=async()=>{var Ge;const de=D.value.split(`
`).map(De=>De.trim()).filter(De=>De.length>0);if(de.length===0){B.value="请输入至少一个 sessionKey";return}ce.value=!0,B.value="",Q.value={current:0,total:de.length};const a=(Ge=N.proxy)!=null&&Ge.enabled?{type:N.proxy.type,host:N.proxy.host,port:parseInt(N.proxy.port),username:N.proxy.username||null,password:N.proxy.password||null}:null,te=[],Ae=[];for(let De=0;De<de.length;De++){Q.value.current=De+1;try{const at=await V.oauthWithCookie({sessionKey:de[De],proxy:a});te.push(at)}catch(at){Ae.push({index:De+1,key:de[De].substring(0,20)+"...",error:at.message})}}Q.value={current:0,total:0},te.length>0?K("success",te):ce.value=!1,Ae.length>0&&te.length===0?B.value="全部授权失败,请检查 sessionKey 是否有效":Ae.length>0&&(B.value=`${Ae.length} 个授权失败`)},be=()=>{D.value="",B.value="",ce.value=!1,Q.value={current:0,total:0}},ge=()=>{be(),v.value="",k.value="",Z.value=""};return Pe({resetCookieAuth:be}),(de,a)=>(o(),n("div",Xr,[H.platform==="claude"?(o(),n("div",es,[e("div",ts,[e("div",as,[a[29]||(a[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",rs,[a[28]||(a[28]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"},"Claude 账户授权",-1)),e("div",ss,[a[10]||(a[10]=e("label",{class:"mb-2 block text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式 ",-1)),e("div",ls,[e("label",os,[b(e("input",{"onUpdate:modelValue":a[0]||(a[0]=te=>g.value=te),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"manual",onChange:ge},null,544),[[_e,g.value]]),a[8]||(a[8]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"手动授权",-1))]),e("label",ns,[b(e("input",{"onUpdate:modelValue":a[1]||(a[1]=te=>g.value=te),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"cookie",onChange:ge},null,544),[[_e,g.value]]),a[9]||(a[9]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"Cookie自动授权",-1))])])]),g.value==="cookie"?(o(),n("div",is,[e("div",ds,[a[17]||(a[17]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 使用 claude.ai 的 sessionKey 自动完成 OAuth 授权流程,无需手动打开浏览器。 ",-1)),e("div",us,[e("label",gs,[a[12]||(a[12]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),a[13]||(a[13]=x(" sessionKey ",-1)),we.value>1?(o(),n("span",ps,u(we.value)+" 个 ",1)):c("",!0),e("button",{class:"text-blue-500 hover:text-blue-600",type:"button",onClick:a[2]||(a[2]=te=>_.value=!_.value)},a[11]||(a[11]=[e("i",{class:"fas fa-question-circle"},null,-1)]))]),b(e("textarea",{"onUpdate:modelValue":a[3]||(a[3]=te=>D.value=te),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,D.value]]),we.value>1?(o(),n("p",cs,[a[14]||(a[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),x(" 将批量创建 "+u(we.value)+" 个账户 ",1)])):c("",!0)]),_.value?(o(),n("div",ys,a[15]||(a[15]=[Ot('<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)]))):c("",!0),B.value?(o(),n("div",ms,[e("p",xs,[a[16]||(a[16]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),x(" "+u(B.value),1)])])):c("",!0),e("button",{class:"btn btn-primary w-full px-4 py-3 text-base font-semibold",disabled:ce.value||!D.value.trim(),type:"button",onClick:q},[ce.value?(o(),n("div",bs)):(o(),n("i",vs)),ce.value&&Q.value.total>1?(o(),n(Ce,{key:2},[x(" 正在授权 "+u(Q.value.current)+"/"+u(Q.value.total)+"... ",1)],64)):ce.value?(o(),n(Ce,{key:3},[x(" 正在授权... ")],64)):(o(),n(Ce,{key:4},[x(" 开始自动授权 ")],64))],8,fs)])])):(o(),n("div",ks,[a[27]||(a[27]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤完成 Claude 账户的授权: ",-1)),e("div",hs,[e("div",ws,[e("div",$s,[a[20]||(a[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",As,[a[19]||(a[19]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),v.value?(o(),n("div",Us,[e("div",_s,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:v.value},null,8,Ks),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:le},[e("i",{class:I(j.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:fe},a[18]||(a[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:U.value,onClick:h},[U.value?(o(),n("div",Is)):(o(),n("i",Ts)),x(" "+u(U.value?"生成中...":"生成授权链接"),1)],8,Cs))])])]),a[26]||(a[26]=Ot('<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",Ss,[e("div",Ms,[a[25]||(a[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",Ds,[a[23]||(a[23]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),a[24]||(a[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",Ps,[e("div",null,[a[21]||(a[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)),b(e("textarea",{"onUpdate:modelValue":a[4]||(a[4]=te=>k.value=te),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[z,k.value]])]),a[22]||(a[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))])])])])])]))])])])])):H.platform==="gemini"||H.platform==="gemini-antigravity"?(o(),n("div",js,[e("div",Ls,[e("div",Vs,[a[43]||(a[43]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-green-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",zs,[a[41]||(a[41]=e("h4",{class:"mb-3 font-semibold text-green-900 dark:text-green-200"},"Gemini 账户授权",-1)),a[42]||(a[42]=e("p",{class:"mb-4 text-sm text-green-800 dark:text-green-300"}," 请按照以下步骤完成 Gemini 账户的授权: ",-1)),e("div",Rs,[e("p",Os,[a[30]||(a[30]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),a[31]||(a[31]=x(" 授权类型:",-1)),e("span",Es,u(H.platform==="gemini-antigravity"?"Antigravity OAuth":"Gemini CLI OAuth"),1)])]),e("div",Ns,[e("div",qs,[e("div",Ws,[a[34]||(a[34]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Fs,[a[33]||(a[33]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 点击下方按钮生成授权链接 ",-1)),v.value?(o(),n("div",Hs,[e("div",Js,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:v.value},null,8,Ys),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:le},[e("i",{class:I(j.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:fe},a[32]||(a[32]=[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:U.value,onClick:h},[U.value?(o(),n("div",Qs)):(o(),n("i",Gs)),x(" "+u(U.value?"生成中...":"生成授权链接"),1)],8,Bs))])])]),a[40]||(a[40]=Ot('<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",Zs,[e("div",Xs,[a[39]||(a[39]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",el,[a[37]||(a[37]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 输入 Authorization Code ",-1)),a[38]||(a[38]=e("p",{class:"mb-3 text-sm text-green-700 dark:text-green-300"}," 授权完成后,页面会显示一个 Authorization Code请将其复制并粘贴到下方输入框 ",-1)),e("div",tl,[e("div",null,[a[35]||(a[35]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-green-500"}),x("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":a[5]||(a[5]=te=>k.value=te),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[z,k.value]])]),a[36]||(a[36]=e("div",{class:"mt-2 space-y-1"},[e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-check-circle mr-1 text-green-500"}),x(" 请粘贴从Gemini页面复制的Authorization Code ")])],-1))])])])])])])])])])):H.platform==="openai"?(o(),n("div",al,[e("div",rl,[e("div",sl,[a[55]||(a[55]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-orange-500"},[e("i",{class:"fas fa-brain text-white"})],-1)),e("div",ll,[a[53]||(a[53]=e("h4",{class:"mb-3 font-semibold text-orange-900 dark:text-orange-200"},"OpenAI 账户授权",-1)),a[54]||(a[54]=e("p",{class:"mb-4 text-sm text-orange-800 dark:text-orange-300"}," 请按照以下步骤完成 OpenAI 账户的授权: ",-1)),e("div",ol,[e("div",nl,[e("div",il,[a[46]||(a[46]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",dl,[a[45]||(a[45]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 点击下方按钮生成授权链接 ",-1)),v.value?(o(),n("div",cl,[e("div",yl,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:v.value},null,8,ml),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:le},[e("i",{class:I(j.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:fe},a[44]||(a[44]=[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:U.value,onClick:h},[U.value?(o(),n("div",pl)):(o(),n("i",gl)),x(" "+u(U.value?"生成中...":"生成授权链接"),1)],8,ul))])])]),a[52]||(a[52]=Ot('<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",xl,[e("div",fl,[a[51]||(a[51]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",bl,[a[49]||(a[49]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 输入授权链接或 Code ",-1)),a[50]||(a[50]=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",vl,[e("div",null,[a[47]||(a[47]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-link mr-2 text-orange-500"}),x("授权链接或 Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":a[6]||(a[6]=te=>k.value=te),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]])]),a[48]||(a[48]=Ot('<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))])])])])])])])])])):H.platform==="droid"?(o(),n("div",kl,[e("div",hl,[e("div",wl,[a[67]||(a[67]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-cyan-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",$l,[a[65]||(a[65]=e("h4",{class:"mb-3 font-semibold text-cyan-900 dark:text-cyan-200"},"Droid 账户授权",-1)),a[66]||(a[66]=e("p",{class:"mb-4 text-sm text-cyan-800 dark:text-cyan-300"}," 请按照以下步骤完成 Factory (Droid) 账户的授权: ",-1)),e("div",Al,[e("div",Cl,[e("div",Tl,[a[63]||(a[63]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Il,[a[62]||(a[62]=e("p",{class:"mb-2 font-medium text-cyan-900 dark:text-cyan-200"}," 点击下方按钮生成授权链接 ",-1)),v.value?(o(),n("div",Sl,[e("div",Ml,[a[58]||(a[58]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权链接",-1)),e("div",Dl,[e("div",Pl,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:v.value},null,8,jl),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:le},[e("i",{class:I(j.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:Y},a[56]||(a[56]=[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:fe},a[57]||(a[57]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),x("重新生成 ",-1)]))])])]),e("div",Ll,[a[60]||(a[60]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权验证码",-1)),e("div",Vl,[e("span",zl,u(pe.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:je},a[59]||(a[59]=[e("i",{class:"fas fa-copy mr-1"},null,-1),x("复制 ",-1)]))])]),e("div",Rl,[e("span",null,[a[61]||(a[61]=e("i",{class:"fas fa-hourglass-half mr-1 text-cyan-500"},null,-1)),x(" 剩余有效期:"+u(F.value),1)])])])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:U.value,onClick:h},[U.value?(o(),n("div",Kl)):(o(),n("i",_l)),x(" "+u(U.value?"生成中...":"生成授权链接"),1)],8,Ul))])])]),a[64]||(a[64]=Ot('<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))])])])])])):c("",!0),e("div",Ol,[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:a[7]||(a[7]=te=>de.$emit("back"))}," 上一步 "),H.platform==="claude"&&g.value==="cookie"?c("",!0):(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!Ke.value||C.value,type:"button",onClick:T},[C.value?(o(),n("div",Nl)):c("",!0),x(" "+u(C.value?"验证中...":"完成授权"),1)],8,El))])]))}},Wl={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Fl={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"},Bl={class:"mb-4 flex items-center justify-between sm:mb-6"},Gl={class:"mb-6"},Ql={key:0,class:"mb-6 rounded-lg border border-blue-200 bg-blue-50 p-4"},Hl={class:"space-y-4"},Jl={class:"flex gap-4"},Yl={class:"flex cursor-pointer items-center"},Zl={class:"flex cursor-pointer items-center"},Xl={class:"flex cursor-pointer items-center"},eo={class:"flex cursor-pointer items-center"},to={class:"flex gap-3"},ao=["disabled"],ro={key:0,class:"loading-spinner mr-2"},so={class:"space-y-4"},lo={key:0,class:"py-8 text-center"},oo={key:1,class:"rounded-lg bg-gray-50 py-8 text-center"},no={key:2,class:"grid grid-cols-1 gap-4 md:grid-cols-2"},io={class:"mb-3 flex items-start justify-between"},uo={class:"flex-1"},go={class:"font-semibold text-gray-900"},po={class:"mt-1 text-sm text-gray-500"},co={class:"ml-4 flex items-center gap-2"},yo={class:"flex items-center justify-between text-sm text-gray-600"},mo={class:"flex items-center gap-4"},xo={class:"flex items-center gap-2"},fo=["onClick"],bo=["disabled","onClick"],vo={key:1,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},ko={class:"modal-content w-full max-w-lg p-4 sm:p-6"},ho={class:"space-y-4"},wo={class:"rounded-lg bg-gray-100 px-3 py-2 text-sm text-gray-600"},$o={class:"flex gap-3 pt-4"},Ao=["disabled"],Co={key:0,class:"loading-spinner mr-2"},To={__name:"GroupManagementModal",emits:["close","refresh"],setup(H,{emit:Pe}){const p=Pe,N=$(!0),K=$(!1),V=$([]),U=$(!1),C=$(!1),v=$({name:"",platform:"claude",description:""}),k=$(!1),j=$(!1),oe=$(null),Z=$({name:"",platform:"",description:""}),pe=B=>B?new Date(B).toLocaleDateString("zh-CN"):"-",J=async()=>{K.value=!0;try{const B=await G.get("/admin/account-groups");V.value=B.data||[]}catch{P("加载分组列表失败","error")}finally{K.value=!1}},W=async()=>{var B,_;if(!v.value.name||!v.value.platform){P("请填写必填项","error");return}C.value=!0;try{await G.post("/admin/account-groups",{name:v.value.name,platform:v.value.platform,description:v.value.description}),P("分组创建成功","success"),O(),await J(),p("refresh")}catch(Q){P(((_=(B=Q.response)==null?void 0:B.data)==null?void 0:_.error)||"创建分组失败","error")}finally{C.value=!1}},O=()=>{U.value=!1,v.value={name:"",platform:"claude",description:""}},y=B=>{oe.value=B,Z.value={name:B.name,platform:B.platform,description:B.description||""},k.value=!0},g=async()=>{var B,_;if(!Z.value.name){P("请填写分组名称","error");return}j.value=!0;try{await G.put(`/admin/account-groups/${oe.value.id}`,{name:Z.value.name,description:Z.value.description}),P("分组更新成功","success"),D(),await J(),p("refresh")}catch(Q){P(((_=(B=Q.response)==null?void 0:B.data)==null?void 0:_.error)||"更新分组失败","error")}finally{j.value=!1}},D=()=>{k.value=!1,oe.value=null,Z.value={name:"",platform:"",description:""}},ce=async B=>{var _,Q;if(B.memberCount>0){P("分组内还有成员,无法删除","error");return}if(confirm(`确定要删除分组 "${B.name}" 吗?`))try{await G.delete(`/admin/account-groups/${B.id}`),P("分组删除成功","success"),await J(),p("refresh")}catch(we){P(((Q=(_=we.response)==null?void 0:_.data)==null?void 0:Q.error)||"删除分组失败","error")}};return aa(()=>{J()}),(B,_)=>(o(),Ye(Kt,{to:"body"},[N.value?(o(),n("div",Wl,[e("div",Fl,[e("div",Bl,[_[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]=Q=>B.$emit("close"))},_[10]||(_[10]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",Gl,[e("button",{class:"btn btn-primary px-4 py-2",onClick:_[1]||(_[1]=Q=>U.value=!0)},_[12]||(_[12]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 创建新分组 ",-1)]))]),U.value?(o(),n("div",Ql,[_[20]||(_[20]=e("h4",{class:"mb-4 text-lg font-semibold text-gray-900"},"创建新分组",-1)),e("div",Hl,[e("div",null,[_[13]||(_[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),b(e("input",{"onUpdate:modelValue":_[2]||(_[2]=Q=>v.value.name=Q),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[z,v.value.name]])]),e("div",null,[_[18]||(_[18]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型 *",-1)),e("div",Jl,[e("label",Yl,[b(e("input",{"onUpdate:modelValue":_[3]||(_[3]=Q=>v.value.platform=Q),class:"mr-2",type:"radio",value:"claude"},null,512),[[_e,v.value.platform]]),_[14]||(_[14]=e("span",{class:"text-sm text-gray-700"},"Claude",-1))]),e("label",Zl,[b(e("input",{"onUpdate:modelValue":_[4]||(_[4]=Q=>v.value.platform=Q),class:"mr-2",type:"radio",value:"gemini"},null,512),[[_e,v.value.platform]]),_[15]||(_[15]=e("span",{class:"text-sm text-gray-700"},"Gemini",-1))]),e("label",Xl,[b(e("input",{"onUpdate:modelValue":_[5]||(_[5]=Q=>v.value.platform=Q),class:"mr-2",type:"radio",value:"openai"},null,512),[[_e,v.value.platform]]),_[16]||(_[16]=e("span",{class:"text-sm text-gray-700"},"OpenAI",-1))]),e("label",eo,[b(e("input",{"onUpdate:modelValue":_[6]||(_[6]=Q=>v.value.platform=Q),class:"mr-2",type:"radio",value:"droid"},null,512),[[_e,v.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)),b(e("textarea",{"onUpdate:modelValue":_[7]||(_[7]=Q=>v.value.description=Q),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[z,v.value.description]])]),e("div",to,[e("button",{class:"btn btn-primary px-4 py-2",disabled:!v.value.name||!v.value.platform||C.value,onClick:W},[C.value?(o(),n("div",ro)):c("",!0),x(" "+u(C.value?"创建中...":"创建"),1)],8,ao),e("button",{class:"btn btn-secondary px-4 py-2",onClick:O},"取消")])])])):c("",!0),e("div",so,[K.value?(o(),n("div",lo,_[21]||(_[21]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500"},"加载中...",-1)]))):V.value.length===0?(o(),n("div",oo,_[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",no,[(o(!0),n(Ce,null,We(V.value,Q=>(o(),n("div",{key:Q.id,class:"rounded-lg border bg-white p-4 transition-shadow hover:shadow-md"},[e("div",io,[e("div",uo,[e("h4",go,u(Q.name),1),e("p",po,u(Q.description||"暂无描述"),1)]),e("div",co,[e("span",{class:I(["rounded-full px-2 py-1 text-xs font-medium",Q.platform==="claude"?"bg-purple-100 text-purple-700":Q.platform==="gemini"?"bg-blue-100 text-blue-700":Q.platform==="openai"?"bg-gray-100 text-gray-700":"bg-cyan-100 text-cyan-700"])},u(Q.platform==="claude"?"Claude":Q.platform==="gemini"?"Gemini":Q.platform==="openai"?"OpenAI":"Droid"),3)])]),e("div",yo,[e("div",mo,[e("span",null,[_[23]||(_[23]=e("i",{class:"fas fa-users mr-1"},null,-1)),x(" "+u(Q.memberCount||0)+" 个成员 ",1)]),e("span",null,[_[24]||(_[24]=e("i",{class:"fas fa-clock mr-1"},null,-1)),x(" "+u(pe(Q.createdAt)),1)])]),e("div",xo,[e("button",{class:"text-blue-600 transition-colors hover:text-blue-800",title:"编辑",onClick:we=>y(Q)},_[25]||(_[25]=[e("i",{class:"fas fa-edit"},null,-1)]),8,fo),e("button",{class:"text-red-600 transition-colors hover:text-red-800",disabled:Q.memberCount>0,title:"删除",onClick:we=>ce(Q)},_[26]||(_[26]=[e("i",{class:"fas fa-trash"},null,-1)]),8,bo)])])]))),128))]))])])])):c("",!0),k.value?(o(),n("div",vo,[e("div",ko,[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:D},_[27]||(_[27]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",ho,[e("div",null,[_[29]||(_[29]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),b(e("input",{"onUpdate:modelValue":_[8]||(_[8]=Q=>Z.value.name=Q),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[z,Z.value.name]])]),e("div",null,[_[31]||(_[31]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型",-1)),e("div",wo,[x(u(Z.value.platform==="claude"?"Claude":Z.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)),b(e("textarea",{"onUpdate:modelValue":_[9]||(_[9]=Q=>Z.value.description=Q),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[z,Z.value.description]])]),e("div",$o,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!Z.value.name||j.value,onClick:g},[j.value?(o(),n("div",Co)):c("",!0),x(" "+u(j.value?"更新中...":"更新"),1)],8,Ao),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:D},"取消")])])])])):c("",!0)]))}},Io={key:0,class:"modal fixed inset-0 z-[60] flex items-center justify-center p-3 sm:p-4"},Uo={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"},_o={class:"mb-4 flex items-center justify-between sm:mb-6"},Ko={class:"flex items-center gap-2 sm:gap-3"},So={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Mo={class:"flex items-center gap-2"},Do=["disabled"],Po={key:0,class:"py-8 text-center"},jo={key:1,class:"rounded-lg bg-gray-50 py-8 text-center dark:bg-gray-800"},Lo={key:2},Vo={class:"mb-4 space-y-3"},zo={class:"rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-800"},Ro={class:"mb-3 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},Oo={class:"flex items-center gap-2"},Eo={class:"flex gap-1"},No={class:"flex flex-1 items-center gap-2 lg:max-w-md"},qo={class:"relative flex-1"},Wo={class:"flex gap-1"},Fo={class:"flex flex-wrap items-center justify-between gap-2"},Bo={class:"flex flex-wrap items-center gap-2"},Go=["disabled"],Qo=["disabled"],Ho=["disabled"],Jo=["disabled"],Yo={class:"flex items-center gap-2 rounded-md bg-purple-50 px-3 py-1.5 dark:bg-purple-900/20"},Zo={class:"text-xs font-medium text-purple-700 dark:text-purple-300"},Xo={class:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"},en={key:0,class:"absolute -left-2 -top-2 z-10"},tn=["title"],an={class:"flex flex-col gap-3"},rn={class:"flex items-start justify-between gap-2"},sn=["title"],ln={class:"flex items-center gap-1"},on=["onClick"],nn=["disabled","onClick"],dn={key:0,class:"loading-spinner-sm"},un={key:1,class:"fas fa-redo"},gn=["disabled","onClick"],pn={key:0,class:"loading-spinner-sm"},cn={key:1,class:"fas fa-trash"},yn={class:"flex flex-wrap items-center gap-3 text-xs text-gray-600 dark:text-gray-400"},mn={key:0},xn={key:0,class:"mt-4 flex items-center justify-between"},fn={class:"text-sm text-gray-600 dark:text-gray-400"},bn={class:"flex items-center gap-2"},vn=["disabled"],kn=["disabled"],hn={class:"px-3 py-1.5 text-sm font-medium text-gray-700 dark:text-gray-300"},wn=["disabled"],$n=["disabled"],An={__name:"ApiKeyManagementModal",props:{accountId:{type:String,required:!0},accountName:{type:String,default:""}},emits:["close","refresh"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$(!0),V=$(!1),U=$(null),C=$(null),v=$([]),k=$(1),j=$(15),oe=$(!1),Z=$("all"),pe=$(""),J=$("fuzzy"),W=$(!1),O=Y=>!Y||Y.length<12?Y:`${Y.substring(0,8)}...${Y.substring(Y.length-4)}`,y=se(()=>{let Y=v.value;if(Z.value!=="all"&&(Y=Y.filter(T=>T.status===Z.value)),pe.value.trim()){const T=pe.value.trim();Y=Y.filter(q=>{const be=q.key;return J.value==="exact"?be===T:be.toLowerCase().includes(T.toLowerCase())})}return Y}),g=se(()=>y.value.length),D=se(()=>Math.ceil(g.value/j.value)),ce=se(()=>{const Y=(k.value-1)*j.value,T=Y+j.value;return y.value.slice(Y,T)}),B=se(()=>v.value.filter(Y=>Y.status==="active").length),_=se(()=>v.value.filter(Y=>Y.status==="error").length),Q=async()=>{V.value=!0;try{const T=(await G.get(`/admin/droid-accounts/${p.accountId}`)).data;let q=[];if(Array.isArray(T.apiKeys))q=T.apiKeys;else if(typeof T.apiKeys=="string")try{q=JSON.parse(T.apiKeys)}catch(ge){console.error("Failed to parse apiKeys:",ge)}const be=q.map(ge=>typeof ge=="string"?{key:ge,usageCount:0,status:"active",lastUsedAt:null,errorMessage:""}:typeof ge=="object"&&ge!==null?{key:ge.key||ge.apiKey||"",usageCount:ge.usageCount||ge.count||0,status:ge.status||"active",lastUsedAt:ge.lastUsedAt||ge.lastUsed||null,errorMessage:ge.errorMessage||""}:{key:String(ge),usageCount:0,status:"active",lastUsedAt:null,errorMessage:""});v.value=be.sort((ge,de)=>ge.lastUsedAt&&de.lastUsedAt?new Date(de.lastUsedAt)-new Date(ge.lastUsedAt):ge.lastUsedAt&&!de.lastUsedAt?-1:!ge.lastUsedAt&&de.lastUsedAt?1:(de.usageCount||0)-(ge.usageCount||0))}catch(Y){console.error("Failed to load API keys:",Y),P("加载 API Key 失败","error")}finally{V.value=!1,k.value=1}},we=async Y=>{var T,q;if(confirm(`确定要删除 API Key "${O(Y.key)}" 吗?`)){U.value=Y.key;try{const be={removeApiKeys:[Y.key],apiKeyUpdateMode:"delete"};await G.put(`/admin/droid-accounts/${p.accountId}`,be),P("API Key 已删除","success"),await Q(),N("refresh")}catch(be){console.error("Failed to delete API key:",be),P(((q=(T=be.response)==null?void 0:T.data)==null?void 0:q.error)||"删除 API Key 失败","error")}finally{U.value=null}}},Ke=async Y=>{var T,q;if(confirm(`确定要重置 API Key "${O(Y.key)}" 的状态吗?这将清除错误信息并恢复为正常状态。`)){C.value=Y.key;try{const be={apiKeys:[{key:Y.key,status:"active",errorMessage:""}],apiKeyUpdateMode:"update"};await G.put(`/admin/droid-accounts/${p.accountId}`,be),P("API Key 状态已重置","success"),await Q(),N("refresh")}catch(be){console.error("Failed to reset API key status:",be),P(((q=(T=be.response)==null?void 0:T.data)==null?void 0:q.error)||"重置 API Key 状态失败","error")}finally{C.value=null}}},F=async()=>{var T,q;const Y=v.value.filter(be=>be.status==="error");if(Y.length===0){P("没有异常状态的 API Key","warning");return}if(confirm(`确定要删除所有 ${Y.length} 个异常状态的 API Key 吗?此操作不可恢复!`)){W.value=!0;try{const ge={removeApiKeys:Y.map(de=>de.key),apiKeyUpdateMode:"delete"};await G.put(`/admin/droid-accounts/${p.accountId}`,ge),P(`成功删除 ${Y.length} 个异常 API Key`,"success"),await Q(),N("refresh")}catch(be){console.error("Failed to delete error API keys:",be),P(((q=(T=be.response)==null?void 0:T.data)==null?void 0:q.error)||"批量删除失败","error")}finally{W.value=!1}}},ee=async()=>{var Y,T;if(v.value.length===0){P("没有可删除的 API Key","warning");return}if(confirm(`确定要删除所有 ${v.value.length} 个 API Key 吗?此操作不可恢复!
请再次确认:这将删除该账户下的所有 API Key。`)&&confirm("最后确认:真的要删除所有 API Key 吗?")){W.value=!0;try{const q=v.value.map(ge=>ge.key),be={removeApiKeys:q,apiKeyUpdateMode:"delete"};await G.put(`/admin/droid-accounts/${p.accountId}`,be),P(`成功删除所有 ${q.length} 个 API Key`,"success"),await Q(),N("refresh")}catch(q){console.error("Failed to delete all API keys:",q),P(((T=(Y=q.response)==null?void 0:Y.data)==null?void 0:T.error)||"批量删除失败","error")}finally{W.value=!1}}},S=Y=>{let T=[],q="";if(Y==="error"?(T=v.value.filter(te=>te.status==="error"),q=`error_api_keys_${p.accountName}_${new Date().toISOString().split("T")[0]}.txt`):(T=v.value,q=`all_api_keys_${p.accountName}_${new Date().toISOString().split("T")[0]}.txt`),T.length===0){P("没有可导出的 API Key","warning");return}const be=T.map(te=>te.key).join(`
`),ge=new Blob([be],{type:"text/plain;charset=utf-8"}),de=URL.createObjectURL(ge),a=document.createElement("a");a.href=de,a.download=q,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(de),P(`成功导出 ${T.length} 个 API Key`,"success")},h=async Y=>{if(typeof navigator<"u"&&navigator.clipboard&&typeof navigator.clipboard.writeText=="function"&&(typeof window>"u"||window.isSecureContext!==!1)){await navigator.clipboard.writeText(Y);return}if(typeof document>"u")throw new Error("clipboard unavailable");const q=document.createElement("textarea");q.value=Y,q.setAttribute("readonly",""),q.style.position="fixed",q.style.opacity="0",q.style.pointerEvents="none",document.body.appendChild(q),q.select();try{const be=document.execCommand("copy");if(document.body.removeChild(q),!be)throw new Error("execCommand failed")}catch(be){throw document.body.removeChild(q),be}},fe=async Y=>{try{await h(Y),P("API Key 已复制","success")}catch(T){console.error("Failed to copy:",T),P("复制失败,请手动复制","error")}},le=async()=>{if(!(!v.value.length||oe.value)){oe.value=!0;try{const Y=v.value.map(T=>T.key).join(`
`);await h(Y),P(`已复制 ${v.value.length} 条 API Key`,"success")}catch(Y){console.error("Failed to copy all keys:",Y),P("复制全部 API Key 失败,请手动复制","error")}finally{oe.value=!1}}},je=Y=>{if(!Y)return"-";try{return new Date(Y).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return"-"}};return aa(()=>{Q()}),(Y,T)=>(o(),Ye(Kt,{to:"body"},[K.value?(o(),n("div",Io,[e("div",Uo,[e("div",_o,[e("div",Ko,[T[14]||(T[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,[T[13]||(T[13]=e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," API Key 管理 ",-1)),e("p",So,u(H.accountName),1)])]),e("div",Mo,[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:V.value||v.value.length===0||oe.value,onClick:le},[e("i",{class:I(["text-sm sm:text-base",oe.value?"fas fa-spinner fa-spin":"fas fa-clipboard-list"])},null,2),T[15]||(T[15]=e("span",null,"复制全部 Key",-1))],8,Do),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:T[0]||(T[0]=q=>Y.$emit("close"))},T[16]||(T[16]=[e("i",{class:"fas fa-times text-base sm:text-lg"},null,-1)]))])]),V.value?(o(),n("div",Po,T[17]||(T[17]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):c("",!0),!V.value&&v.value.length===0?(o(),n("div",jo,T[18]||(T[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)]))):c("",!0),!V.value&&v.value.length>0?(o(),n("div",Lo,[e("div",Vo,[e("div",zo,[e("div",Ro,[e("div",Oo,[T[21]||(T[21]=e("i",{class:"fas fa-filter text-gray-400 dark:text-gray-500"},null,-1)),T[22]||(T[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",Z.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:T[1]||(T[1]=q=>Z.value="all")}," 全部 ("+u(v.value.length)+") ",3),e("button",{class:I(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",Z.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:T[2]||(T[2]=q=>Z.value="active")},[T[19]||(T[19]=e("i",{class:"fas fa-check-circle mr-1"},null,-1)),x(" 正常 ("+u(B.value)+") ",1)],2),e("button",{class:I(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",Z.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:T[3]||(T[3]=q=>Z.value="error")},[T[20]||(T[20]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),x(" 异常 ("+u(_.value)+") ",1)],2)])]),e("div",No,[e("div",qo,[b(e("input",{"onUpdate:modelValue":T[4]||(T[4]=q=>pe.value=q),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,pe.value]]),T[23]||(T[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",Wo,[e("button",{class:I(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",J.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:T[5]||(T[5]=q=>J.value="fuzzy")},T[24]||(T[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",J.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:T[6]||(T[6]=q=>J.value="exact")},T[25]||(T[25]=[e("i",{class:"fas fa-equals mr-1"},null,-1),x(" 精确 ",-1)]),2)])])]),T[35]||(T[35]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-700"},null,-1)),e("div",Fo,[e("div",Bo,[T[30]||(T[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||W.value,title:"删除所有异常状态的 API Key",onClick:F},T[26]||(T[26]=[e("i",{class:"fas fa-trash-alt mr-1"},null,-1),x(" 删除异常 ",-1)]),8,Go),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:v.value.length===0||W.value,title:"删除所有 API Key",onClick:ee},T[27]||(T[27]=[e("i",{class:"fas fa-trash mr-1"},null,-1),x(" 删除全部 ",-1)]),8,Qo),T[31]||(T[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:T[7]||(T[7]=q=>S("error"))},T[28]||(T[28]=[e("i",{class:"fas fa-download mr-1"},null,-1),x(" 导出异常 ",-1)]),8,Ho),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:v.value.length===0,title:"导出所有 API Key",onClick:T[8]||(T[8]=q=>S("all"))},T[29]||(T[29]=[e("i",{class:"fas fa-file-export mr-1"},null,-1),x(" 导出全部 ",-1)]),8,Jo)]),e("div",Yo,[T[34]||(T[34]=e("i",{class:"fas fa-info-circle text-purple-500 dark:text-purple-400"},null,-1)),e("span",Zo,[T[32]||(T[32]=x(" 显示 ",-1)),e("strong",null,u(y.value.length),1),T[33]||(T[33]=x(" 个 ",-1))])])])])]),e("div",Xo,[(o(!0),n(Ce,null,We(ce.value,(q,be)=>(o(),n("div",{key:be,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"},[(q.status==="error"||q.status==="disabled")&&q.errorMessage?(o(),n("div",en,[e("span",{class:I(["inline-flex items-center justify-center rounded-full px-2 py-0.5 text-[10px] font-semibold shadow-sm",[q.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:`错误状态码: ${q.errorMessage}`},u(q.errorMessage),11,tn)])):c("",!0),e("div",an,[e("div",rn,[e("span",{class:"flex-1 break-all font-mono text-xs font-medium text-gray-900 dark:text-gray-100",title:q.key},u(O(q.key)),9,sn),e("div",ln,[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:ge=>fe(q.key)},T[36]||(T[36]=[e("i",{class:"fas fa-copy"},null,-1)]),8,on),q.status==="error"||q.status==="disabled"?(o(),n("button",{key:0,class:I(["text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-50",[q.status==="error"?"text-orange-500 hover:text-orange-700 dark:text-orange-400 dark:hover:text-orange-300":"text-yellow-500 hover:text-yellow-700 dark:text-yellow-400 dark:hover:text-yellow-300"]]),disabled:C.value===q.key,title:"重置状态",onClick:ge=>Ke(q)},[C.value===q.key?(o(),n("div",dn)):(o(),n("i",un))],10,nn)):c("",!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:U.value===q.key,onClick:ge=>we(q)},[U.value===q.key?(o(),n("div",pn)):(o(),n("i",cn))],8,gn)])]),e("div",yn,[e("div",null,[e("span",{class:I([q.status==="active"?"text-green-600 dark:text-green-400":q.status==="error"?"text-red-600 dark:text-red-400":"text-yellow-600 dark:text-yellow-400"])},[e("i",{class:I(["mr-1",[q.status==="active"?"fas fa-check-circle":q.status==="error"?"fas fa-exclamation-triangle":"fas fa-exclamation-circle"]])},null,2),x(" "+u(q.status==="active"?"正常":q.status==="error"?"异常":q.status==="disabled"?"禁用":q.status||"未知"),1)],2)]),e("div",null,[e("span",null,[T[37]||(T[37]=x("使用: ",-1)),e("strong",null,u(q.usageCount||0),1),T[38]||(T[38]=x("次",-1))])]),q.lastUsedAt?(o(),n("div",mn,[e("span",null,u(je(q.lastUsedAt)),1)])):c("",!0)])])]))),128))]),D.value>1?(o(),n("div",xn,[e("div",fn," 显示 "+u((k.value-1)*j.value+1)+"-"+u(Math.min(k.value*j.value,g.value))+" 项,共 "+u(g.value)+" 项 ",1),e("div",bn,[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:T[9]||(T[9]=q=>k.value=1)},T[39]||(T[39]=[e("i",{class:"fas fa-angle-double-left"},null,-1)]),8,vn),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:T[10]||(T[10]=q=>k.value--)},T[40]||(T[40]=[e("i",{class:"fas fa-angle-left"},null,-1)]),8,kn),e("span",hn,u(k.value)+" / "+u(D.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===D.value,onClick:T[11]||(T[11]=q=>k.value++)},T[41]||(T[41]=[e("i",{class:"fas fa-angle-right"},null,-1)]),8,wn),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===D.value,onClick:T[12]||(T[12]=q=>k.value=D.value)},T[42]||(T[42]=[e("i",{class:"fas fa-angle-double-right"},null,-1)]),8,$n)])])):c("",!0)])):c("",!0)])])):c("",!0)]))}},Cn={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Tn={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"},In={class:"mb-4 flex items-center justify-between sm:mb-6"},Un={class:"flex items-center gap-2 sm:gap-3"},_n={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Kn={key:0,class:"mb-4 flex items-center justify-center sm:mb-8"},Sn={class:"flex items-center space-x-2 sm:space-x-4"},Mn={class:"flex items-center"},Dn={class:"flex items-center"},Pn={key:1},jn={class:"space-y-6"},Ln={key:0},Vn={class:"space-y-3"},zn={class:"grid grid-cols-2 gap-2 sm:grid-cols-4"},Rn={class:"p-3"},On={class:"flex items-center justify-between"},En={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-indigo-500"},Nn={class:"p-3"},qn={class:"flex items-center justify-between"},Wn={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-emerald-500"},Fn={class:"p-3"},Bn={class:"flex items-center justify-between"},Gn={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-blue-500"},Qn={class:"p-3"},Hn={class:"flex items-center justify-between"},Jn={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-rose-500"},Yn={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"},Zn={class:"grid grid-cols-2 gap-2 sm:grid-cols-3"},Xn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-indigo-500"},ei={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},ti={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-orange-500"},ai={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-cyan-500"},ri={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-emerald-500"},si={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-teal-500"},li={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},oi={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},ni={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},ii={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-amber-500"},di={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-rose-500"},ui={key:1},gi={class:"flex flex-wrap gap-4"},pi={class:"flex cursor-pointer items-center"},ci={class:"text-sm text-gray-700 dark:text-gray-300"},yi={key:0},mi={key:0,class:"flex cursor-pointer items-center"},xi={class:"flex cursor-pointer items-center"},fi={key:1,class:"flex cursor-pointer items-center"},bi={key:0,class:"mt-1 text-xs text-red-500"},vi={class:"flex gap-4"},ki={class:"flex cursor-pointer items-center"},hi={class:"flex cursor-pointer items-center"},wi={class:"flex cursor-pointer items-center"},$i={key:2},Ai={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Ci={key:0,class:"mt-3"},Ti=["min"],Ii={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Ui={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},_i={key:3},Ki={class:"flex gap-2"},Si={class:"flex-1"},Mi={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},Di={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},Pi=["value"],ji={class:"text-sm text-gray-700 dark:text-gray-200"},Li={key:4},Vi={key:5,class:"space-y-4"},zi={key:0,class:"flex gap-4"},Ri={class:"flex cursor-pointer items-center"},Oi={class:"flex cursor-pointer items-center"},Ei={key:1,class:"flex gap-4"},Ni={class:"flex items-center opacity-60"},qi={class:"flex items-center opacity-60"},Wi={class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},Fi={class:"flex items-start gap-2"},Bi={class:"text-xs text-blue-700 dark:text-blue-300"},Gi={key:0,class:"font-medium"},Qi={key:1,class:"font-medium"},Hi={key:2,class:"mt-1 text-xs italic"},Ji={key:0},Yi={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},Zi=["placeholder","required"],Xi={key:0,class:"mt-1 text-xs text-red-500"},ed={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},td={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},ad=["placeholder","required"],rd={key:0,class:"mt-1 text-xs text-red-500"},sd={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},ld=["placeholder"],od={key:1},nd={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},id=["placeholder","required"],dd={key:0,class:"mt-1 text-xs text-red-500"},ud={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},gd={key:0,class:"mt-1 text-xs text-red-500"},pd={key:6,class:"space-y-4"},cd={key:0,class:"mt-1 text-xs text-red-500"},yd={key:0,class:"mt-1 text-xs text-red-500"},md={key:0,class:"mt-1 text-xs text-red-500"},xd={class:"flex flex-wrap gap-2"},fd=["value"],bd={class:"text-sm text-gray-700 dark:text-gray-300"},vd={key:7},kd={class:"mb-3"},hd={class:"inline-flex cursor-pointer items-center"},wd={key:0},$d={key:8,class:"space-y-4"},Ad={key:0,class:"mt-1 text-xs text-red-500"},Cd={key:0,class:"mt-1 text-xs text-red-500"},Td={class:"grid grid-cols-2 gap-4"},Id={class:"mb-4 flex gap-2"},Ud={key:0},_d={class:"mb-3 grid grid-cols-2 gap-2"},Kd=["value"],Sd={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Md={class:"text-xs text-gray-500 dark:text-gray-400"},Dd={key:0},Pd={key:1},jd={class:"mb-3 space-y-2"},Ld=["onUpdate:modelValue"],Vd=["onUpdate:modelValue"],zd=["onClick"],Rd={class:"mt-3 flex flex-wrap gap-2"},Od={class:"mb-3"},Ed={class:"inline-flex cursor-pointer items-center"},Nd={key:0},qd={key:0},Wd={class:"inline-flex cursor-pointer items-center"},Fd={key:9,class:"space-y-4"},Bd={class:"relative"},Gd=["type"],Qd={key:10,class:"space-y-4"},Hd={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},Jd={class:"relative"},Yd=["type"],Zd={key:11},Xd={class:"flex gap-4"},e0={class:"flex cursor-pointer items-center"},t0={class:"flex cursor-pointer items-center"},a0={key:12,class:"mt-4"},r0={class:"flex items-start"},s0={key:13,class:"mt-4"},l0={class:"flex items-start"},o0={key:14,class:"mt-4"},n0={class:"flex items-start"},i0={key:15,class:"mt-4"},d0={class:"flex items-start"},u0={class:"ml-3"},g0={key:0,class:"mt-1"},p0={class:"flex items-center justify-between"},c0={class:"text-xs text-green-600 dark:text-green-400"},y0=["disabled"],m0={key:0,class:"fas fa-trash-alt mr-1"},x0={key:1,class:"loading-spinner mr-1"},f0={key:1,class:"mt-1"},b0={key:16,class:"mt-4"},v0={class:"flex items-start"},k0={class:"ml-3 flex-1"},h0={key:0,class:"mt-3"},w0={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},$0={class:"flex items-center gap-2"},A0={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"},C0={class:"text-blue-600 dark:text-blue-400"},T0={class:"text-gray-500 dark:text-gray-500"},I0={class:"text-blue-600 dark:text-blue-400"},U0={key:17,class:"space-y-4 rounded-lg border border-blue-200 bg-blue-50 p-4"},_0={class:"mb-4 flex items-start gap-3"},K0={key:0,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},S0={key:1,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},M0={key:2,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},D0={key:3,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},P0={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"},j0={key:0,class:"text-xs text-blue-800 dark:text-blue-300"},L0={key:1,class:"text-xs text-blue-800 dark:text-blue-300"},V0={key:2,class:"text-xs text-blue-800 dark:text-blue-300"},z0={key:3,class:"text-xs text-blue-800 dark:text-blue-300"},R0={key:4,class:"text-xs text-blue-600 dark:text-blue-400"},O0={key:5,class:"text-xs text-red-600 dark:text-red-400"},E0={key:0},N0={key:1},q0={key:0,class:"mt-1 text-xs text-red-500"},W0={key:2},F0={key:0,class:"mt-1 text-xs text-red-500"},B0={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},G0={key:3},Q0={key:4},H0={key:18,class:"space-y-4 rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},J0={key:0,class:"mt-1 text-xs text-red-500"},Y0={class:"flex gap-3 pt-4"},Z0=["disabled"],X0=["disabled"],eu={key:0,class:"loading-spinner mr-2"},tu={key:3,class:"space-y-6"},au={key:0},ru={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},su={class:"flex items-start gap-4"},lu={class:"flex-1"},ou={class:"mb-4"},nu={class:"flex flex-wrap gap-4"},iu={class:"flex cursor-pointer items-center"},du={class:"flex cursor-pointer items-center"},uu={key:0,class:"space-y-4"},gu={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},pu={class:"flex items-start gap-3"},cu={class:"flex-1"},yu=["disabled"],mu={key:0,class:"fas fa-link mr-2"},xu={key:1,class:"loading-spinner mr-2"},fu={key:1,class:"space-y-3"},bu={class:"flex items-center gap-2"},vu=["value"],ku={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},hu={class:"flex items-start gap-3"},wu={class:"flex-1"},$u={class:"space-y-3"},Au={key:1,class:"space-y-4"},Cu={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Tu={class:"space-y-4"},Iu={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},Uu={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},_u={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},Ku={key:1,class:"mt-1 text-xs text-red-500"},Su={key:0,class:"mt-3 rounded border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-700"},Mu=["disabled"],Du={key:0,class:"loading-spinner mr-2"},Pu={key:1,class:"fas fa-magic mr-2"},ju={class:"flex gap-3 pt-4"},Lu=["disabled"],Vu={key:0,class:"loading-spinner mr-2"},zu={key:4,class:"space-y-6"},Ru={class:"flex gap-4"},Ou={class:"flex cursor-pointer items-center"},Eu={class:"flex cursor-pointer items-center"},Nu={class:"flex cursor-pointer items-center"},qu={key:0},Wu={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Fu={key:0,class:"mt-3"},Bu=["min"],Gu={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Qu={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Hu={key:1},Ju={class:"flex gap-2"},Yu={class:"flex-1"},Zu={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},Xu={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},eg=["value"],tg={class:"text-sm text-gray-700 dark:text-gray-200"},ag={key:2},rg={key:3},sg={class:"flex gap-4"},lg={class:"flex cursor-pointer items-center"},og={class:"flex cursor-pointer items-center"},ng={key:4,class:"mt-4"},ig={class:"flex items-start"},dg={key:5,class:"mt-4"},ug={class:"flex items-start"},gg={key:6,class:"mt-4"},pg={class:"flex items-start"},cg={key:7,class:"mt-4"},yg={class:"flex items-start"},mg={class:"ml-3"},xg={key:0,class:"mt-1"},fg={class:"flex items-center justify-between"},bg={class:"text-xs text-green-600 dark:text-green-400"},vg=["disabled"],kg={key:0,class:"fas fa-trash-alt mr-1"},hg={key:1,class:"loading-spinner mr-1"},wg={key:1,class:"mt-1"},$g={key:8,class:"mt-4"},Ag={class:"flex items-start"},Cg={class:"ml-3 flex-1"},Tg={key:0,class:"mt-3"},Ig={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Ug={class:"flex items-center gap-2"},_g={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"},Kg={class:"text-blue-600 dark:text-blue-400"},Sg={class:"text-gray-500 dark:text-gray-500"},Mg={class:"text-blue-600 dark:text-blue-400"},Dg={key:9,class:"space-y-4"},Pg={class:"grid grid-cols-2 gap-4"},jg={key:0,class:"rounded-lg bg-gray-50 p-4 dark:bg-gray-800"},Lg={class:"mb-2 flex items-center justify-between"},Vg={class:"text-sm text-gray-500 dark:text-gray-400"},zg={class:"relative h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Rg={class:"mt-2 flex items-center justify-between text-xs"},Og={class:"text-gray-500 dark:text-gray-400"},Eg={class:"text-gray-500 dark:text-gray-400"},Ng={class:"mb-4 flex gap-2"},qg={key:0},Wg={class:"mb-3 grid grid-cols-2 gap-2"},Fg=["value"],Bg={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Gg={class:"text-xs text-gray-500 dark:text-gray-400"},Qg={key:0},Hg={key:1},Jg={class:"mb-3 space-y-2"},Yg=["onUpdate:modelValue"],Zg=["onUpdate:modelValue"],Xg=["onClick"],ep={class:"mt-3 flex flex-wrap gap-2"},tp={class:"mb-3"},ap={class:"inline-flex cursor-pointer items-center"},rp={key:0},sp={key:1},lp={class:"inline-flex cursor-pointer items-center"},op={key:10,class:"space-y-4"},np={class:"relative"},ip=["type"],dp={class:"grid grid-cols-2 gap-4"},up={key:11,class:"space-y-4"},gp={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},pp={class:"relative"},cp=["type"],yp={key:12,class:"space-y-4"},mp={class:"mb-3"},xp={class:"inline-flex cursor-pointer items-center"},fp={key:0},bp={key:13,class:"space-y-4"},vp={key:0,class:"mt-1 text-xs text-red-500"},kp={key:0,class:"mt-1 text-xs text-red-500"},hp={key:0,class:"mt-1 text-xs text-red-500"},wp={class:"flex flex-wrap gap-2"},$p=["value"],Ap={class:"text-sm text-gray-700 dark:text-gray-300"},Cp={key:14,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"},Ip={class:"flex-1"},Up={class:"mb-2 flex items-center justify-between"},_p={class:"mb-1 text-sm text-purple-800 dark:text-purple-200"},Kp={class:"space-y-4"},Sp={key:0,class:"mt-1 text-xs text-red-500"},Mp={class:"space-y-2"},Dp={class:"flex items-center justify-between"},Pp={class:"text-xs text-purple-600 dark:text-purple-300"},jp={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"},Lp=["onClick"],Vp={class:"text-xs text-purple-700 dark:text-purple-300"},zp={key:15,class:"rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-700 dark:bg-amber-900/30"},Rp={class:"space-y-4"},Op={key:16},Ep={class:"flex gap-3 pt-4"},Np=["disabled"],qp={key:0,class:"loading-spinner mr-2"},Wp={__name:"AccountForm",props:{account:{type:Object,default:null}},emits:["close","success","platform-changed"],setup(H,{emit:Pe}){var Qt,na,Ia,tt,Ua,_a,ia,Ka,rt,Sa,Ht,Tt,Ma,zt,da,Da,ua,Pa,ja,La,Va,za,ga,Jt,pa,ca,Ra,ft,bt,Oa,ya,Yt,ma,Ea,xa,Zt,Na,fa;const p=H,N=Pe,K=wr(),{showConfirmModal:V,confirmOptions:U,showConfirm:C,handleConfirm:v,handleCancel:k}=hr(),j=se(()=>!!p.account),oe=$(!0),Z=$(null),pe=$(1),J=$(!1),W=$(!1),O=$(!1),y=$(!1),g=$(""),D=$(""),ce=$(!1),B=$(""),_=$("manual"),Q=$(""),we=$(!1),Ke=$(""),F=$(!1),ee=$({current:0,total:0}),S=se(()=>Q.value.split(`
`).map(d=>d.trim()).filter(d=>d.length>0).length),h=$(""),fe=$(!1),le=$(""),je=$(!1),Y=d=>["claude","claude-console","ccr","bedrock"].includes(d)?"claude":["openai","openai-responses","azure_openai"].includes(d)?"openai":["gemini","gemini-antigravity","gemini-api"].includes(d)?"gemini":d==="droid"?"droid":"",T=()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""}),q=d=>{if(!d)return null;let t=d;if(typeof d=="string")try{t=JSON.parse(d)}catch{return null}if(t&&typeof t=="object"&&t.proxy&&typeof t.proxy=="object"&&(t=t.proxy),!t||typeof t!="object")return null;const ie=typeof t.host=="string"?t.host.trim():t.host!==void 0&&t.host!==null?String(t.host).trim():"",ve=t.port!==void 0&&t.port!==null?String(t.port).trim():"",i=typeof t.type=="string"&&t.type.trim()?t.type.trim():"socks5",ye=typeof t.username=="string"?t.username:t.username!==void 0&&t.username!==null?String(t.username):"",me=typeof t.password=="string"?t.password:t.password!==void 0&&t.password!==null?String(t.password):"";return{type:i,host:ie,port:ve,username:ye,password:me}},be=d=>{const t=q(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||""}:T()},ge=d=>{if(!d||!d.enabled)return null;const t=(d.host||"").trim(),ie=Number.parseInt(d.port,10);if(!t||Number.isNaN(ie)||ie<=0)return null;const ve=d.username?d.username.trim():"",i=d.password?d.password.trim():"";return{type:d.type||"socks5",host:t,port:ie,username:ve||null,password:i||null}},de=()=>{var d;return be((d=p.account)==null?void 0:d.proxy)},a=$({platform:((Qt=p.account)==null?void 0:Qt.platform)||"claude",addType:(()=>{var t;const d=((t=p.account)==null?void 0:t.platform)||"claude";return d==="gemini"||d==="gemini-antigravity"||d==="openai"||d==="claude"?"oauth":"manual"})(),name:((na=p.account)==null?void 0:na.name)||"",description:((Ia=p.account)==null?void 0:Ia.description)||"",accountType:((tt=p.account)==null?void 0:tt.accountType)||"shared",authenticationMethod:((Ua=p.account)==null?void 0:Ua.authenticationMethod)||"",subscriptionType:"claude_max",autoStopOnWarning:((_a=p.account)==null?void 0:_a.autoStopOnWarning)||!1,useUnifiedUserAgent:((ia=p.account)==null?void 0:ia.useUnifiedUserAgent)||!1,useUnifiedClientId:((Ka=p.account)==null?void 0:Ka.useUnifiedClientId)||!1,unifiedClientId:((rt=p.account)==null?void 0:rt.unifiedClientId)||"",serialQueueEnabled:(((Sa=p.account)==null?void 0:Sa.maxConcurrency)||0)>0,interceptWarmup:((Ht=p.account)==null?void 0:Ht.interceptWarmup)===!0||((Tt=p.account)==null?void 0:Tt.interceptWarmup)==="true",groupId:"",groupIds:[],projectId:((Ma=p.account)==null?void 0:Ma.projectId)||"",accessToken:"",refreshToken:"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:de(),apiUrl:((zt=p.account)==null?void 0:zt.apiUrl)||"",apiKey:((da=p.account)==null?void 0:da.apiKey)||"",priority:((Da=p.account)==null?void 0:Da.priority)||50,endpointType:((ua=p.account)==null?void 0:ua.endpointType)||"anthropic",baseApi:((Pa=p.account)==null?void 0:Pa.baseApi)||"",baseUrl:((ja=p.account)==null?void 0:ja.baseUrl)||"https://generativelanguage.googleapis.com",rateLimitDuration:((La=p.account)==null?void 0:La.rateLimitDuration)||60,supportedModels:(()=>{var t;const d=(t=p.account)==null?void 0:t.supportedModels;return d?typeof d=="object"&&!Array.isArray(d)?Object.keys(d):Array.isArray(d)?d:[]:[]})(),userAgent:((Va=p.account)==null?void 0:Va.userAgent)||"",enableRateLimit:p.account?p.account.rateLimitDuration>0:!0,disableAutoProtection:((za=p.account)==null?void 0:za.disableAutoProtection)===!0,dailyQuota:((ga=p.account)==null?void 0:ga.dailyQuota)||0,dailyUsage:((Jt=p.account)==null?void 0:Jt.dailyUsage)||0,quotaResetTime:((pa=p.account)==null?void 0:pa.quotaResetTime)||"00:00",maxConcurrentTasks:((ca=p.account)==null?void 0:ca.maxConcurrentTasks)||0,credentialType:((Ra=p.account)==null?void 0:Ra.credentialType)||"access_key",accessKeyId:((ft=p.account)==null?void 0:ft.accessKeyId)||"",secretAccessKey:((bt=p.account)==null?void 0:bt.secretAccessKey)||"",region:((Oa=p.account)==null?void 0:Oa.region)||"",sessionToken:((ya=p.account)==null?void 0:ya.sessionToken)||"",bearerToken:((Yt=p.account)==null?void 0:Yt.bearerToken)||"",defaultModel:((ma=p.account)==null?void 0:ma.defaultModel)||"",smallFastModel:((Ea=p.account)==null?void 0:Ea.smallFastModel)||"",azureEndpoint:((xa=p.account)==null?void 0:xa.azureEndpoint)||"",apiVersion:((Zt=p.account)==null?void 0:Zt.apiVersion)||"",deploymentName:((Na=p.account)==null?void 0:Na.deploymentName)||"",expireDuration:(()=>{var d;return(d=p.account)!=null&&d.expiresAt?"custom":""})(),customExpireDate:(()=>{var d;return(d=p.account)!=null&&d.expiresAt?new Date(p.account.expiresAt).toISOString().slice(0,16):""})(),expiresAt:((fa=p.account)==null?void 0:fa.expiresAt)||null}),te=$("whitelist"),Ae=$(["claude-sonnet-4-20250514","claude-sonnet-4-5-20250929","claude-3-5-haiku-20241022"]),Ge=[{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"}],De=$([]),at=()=>{var d;if((d=p.account)!=null&&d.supportedModels)if(typeof p.account.supportedModels=="object"&&!Array.isArray(p.account.supportedModels)){const t=Object.entries(p.account.supportedModels);t.every(([ve,i])=>ve===i)?(te.value="whitelist",Ae.value=t.map(([ve])=>ve),De.value=t.map(([ve,i])=>({from:ve,to:i}))):(te.value="mapping",De.value=t.map(([ve,i])=>({from:ve,to:i})))}else Array.isArray(p.account.supportedModels)&&(te.value="whitelist",Ae.value=p.account.supportedModels,De.value=p.account.supportedModels.map(t=>({from:t,to:t})))},lt=d=>{if(!d||typeof d!="string")return[];const t=d.split(/\r?\n/).map(ve=>ve.trim()).filter(ve=>ve.length>0);return t.length===0?[]:Array.from(new Set(t))},Xe=[{value:"append",label:"追加模式",description:"保留现有 Key并在末尾追加新 Key 列表。"},{value:"replace",label:"覆盖模式",description:"先清空旧 Key再写入上方的新 Key 列表。"},{value:"delete",label:"删除模式",description:"输入要移除的 Key可精准删除失效或被封禁的 Key。"}],St=se(()=>{const d=Math.max(Xe.findIndex(ie=>ie.value===a.value.apiKeyUpdateMode),0),t=100/Xe.length;return{width:`${t}%`,left:`${d*t}%`}}),Mt=se(()=>{const d=Xe.find(t=>t.value===a.value.apiKeyUpdateMode);return d?d.label:Xe[0].label}),Dt=se(()=>{const d=Xe.find(t=>t.value===a.value.apiKeyUpdateMode);return d?d.description:Xe[0].description}),M=$({name:"",refreshToken:"",accessToken:"",apiKeys:"",apiUrl:"",apiKey:"",baseApi:"",accessKeyId:"",secretAccessKey:"",region:"",bearerToken:"",azureEndpoint:"",deploymentName:""}),ht=se(()=>{var d;return((d=a.value.name)==null?void 0:d.trim())&&a.value.platform}),pt=se(()=>g.value&&D.value.trim()),vt=()=>{var d;return!j.value||!((d=p.account)!=null&&d.id)?0:typeof a.value.dailyUsage=="number"?a.value.dailyUsage:0},ct=se(()=>!a.value.dailyQuota||a.value.dailyQuota<=0?0:vt()/a.value.dailyQuota*100),Pt=se(()=>{if(!p.account||p.account.platform!=="droid")return 0;let d=0;if(Array.isArray(p.account.apiKeys))d=p.account.apiKeys.length;else if(typeof p.account.apiKeys=="string")try{const ie=JSON.parse(p.account.apiKeys);Array.isArray(ie)&&(d=ie.length)}catch{d=0}const t=p.account.apiKeyCount??p.account.apiKeysCount??p.account.api_key_count??d;return Number(t)||0}),w=se(()=>{var t,ie,ve;if(!j.value||a.value.platform!=="droid")return!1;const d=a.value.authenticationMethod||((t=p.account)==null?void 0:t.authenticationMethod)||((ie=p.account)==null?void 0:ie.authMethod)||((ve=p.account)==null?void 0:ve.authentication_mode)||"";return typeof d!="string"?!1:d.trim().toLowerCase()==="api_key"}),m=async()=>{var d;if(!(!j.value||!((d=p.account)!=null&&d.id)))try{const t=await G.get(`/admin/claude-console-accounts/${p.account.id}/usage`);t&&(a.value.dailyUsage=t.dailyUsage||0)}catch{}},E=d=>{le.value=d,d==="claude"?a.value.platform="claude":d==="openai"?a.value.platform="openai":d==="gemini"?a.value.platform="gemini":d==="droid"&&(a.value.platform="droid")},Qe=async()=>{if(M.value.name="",!ht.value){(!a.value.name||a.value.name.trim()==="")&&(M.value.name="请填写账户名称");return}if(a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)){P("请选择一个分组","error");return}a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!((a.value.platform==="gemini"||a.value.platform==="gemini-antigravity")&&pe.value===1&&a.value.addType==="oauth"&&(!a.value.projectId||a.value.projectId.trim()==="")&&!await C("项目 ID 未填写",`您尚未填写项目 ID。
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号需要提供项目 ID。
如果您使用的是普通个人账号,可以继续不填写。`,"继续","返回填写"))&&(pe.value=2)},it=async()=>{O.value=!0;try{const d=ge(a.value.proxy),t=d?{proxy:d}:{},ie=await K.generateClaudeSetupTokenUrl(t);g.value=ie.authUrl,B.value=ie.sessionId}catch(d){P(d.message||"生成Setup Token授权链接失败","error")}finally{O.value=!1}},yt=()=>{g.value="",D.value="",it()},Et=async()=>{try{await navigator.clipboard.writeText(g.value),ce.value=!0,P("链接已复制","success"),setTimeout(()=>{ce.value=!1},2e3)}catch{const t=document.createElement("textarea");t.value=g.value,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")?(ce.value=!0,P("链接已复制","success")):P("复制失败,请手动复制","error")}catch{P("复制失败,请手动复制","error")}document.body.removeChild(t),setTimeout(()=>{ce.value=!1},2e3)}},Nt=async()=>{if(pt.value){y.value=!0;try{const d={sessionId:B.value,callbackUrl:D.value.trim()},t=ge(a.value.proxy);t&&(d.proxy=t);const ie=await K.exchangeClaudeSetupTokenCode(d);a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=xt()),await $t(ie)}catch(d){P(d.message||"Setup Token授权失败请检查授权码是否正确","error")}finally{y.value=!1}}},kt=async()=>{const d=Q.value.split(`
`).map(ye=>ye.trim()).filter(ye=>ye.length>0);if(d.length===0){Ke.value="请输入至少一个 sessionKey";return}we.value=!0,Ke.value="",ee.value={current:0,total:d.length};const t=a.value.addType==="setup-token",ie=ge(a.value.proxy),ve=[],i=[];for(let ye=0;ye<d.length;ye++){ee.value.current=ye+1;try{const me={sessionKey:d[ye],...ie&&{proxy:ie}};let Ne;t?Ne=await K.oauthSetupTokenWithCookie(me):Ne=await K.oauthWithCookie(me),ve.push(Ne)}catch(me){i.push({index:ye+1,key:d[ye].substring(0,20)+"...",error:me.message})}}if(ee.value={current:0,total:0},ve.length>0)try{await $t(ve)}finally{we.value=!1}else we.value=!1;i.length>0&&ve.length===0?Ke.value="全部授权失败,请检查 sessionKey 是否有效":i.length>0&&(Ke.value=`${i.length} 个授权失败`)},jt=()=>{Q.value="",Ke.value="",F.value=!1,ee.value={current:0,total:0}},Lt=()=>{_.value==="manual"?jt():(g.value="",D.value="",B.value="")},wt=(d,t,ie)=>{var me,Ne;const ve=ge(a.value.proxy),i=d.claudeAiOauth||d,ye={name:t,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:ve,claudeAiOauth:i,priority:a.value.priority||50,autoStopOnWarning:a.value.autoStopOnWarning||!1,interceptWarmup:a.value.interceptWarmup||!1,useUnifiedUserAgent:a.value.useUnifiedUserAgent||!1,useUnifiedClientId:a.value.useUnifiedClientId||!1,unifiedClientId:ie,maxConcurrency:a.value.serialQueueEnabled?1:0,subscriptionInfo:{accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}};if(i){const Be={},Re=i.extInfo;Re!=null&&Re.org_uuid&&(Be.org_uuid=Re.org_uuid),Re!=null&&Re.account_uuid&&(Be.account_uuid=Re.account_uuid),Re||((me=i.organization)!=null&&me.uuid&&(Be.org_uuid=i.organization.uuid),(Ne=i.account)!=null&&Ne.uuid&&(Be.account_uuid=i.account.uuid)),Object.keys(Be).length>0&&(ye.extInfo=Be)}return ye},$t=async d=>{var t,ie,ve,i,ye,me,Ne,Be,Re;J.value=!0;try{const L=a.value.platform;if(L==="claude"&&Array.isArray(d)){const Le=d,qe=Le.length>1,Me=a.value.name,Je=[],Ze=[];for(let ot=0;ot<Le.length;ot++){const It=Le[ot],Xt=qe?`${Me}_${ot+1}`:Me,ea=a.value.useUnifiedClientId?xt():"",ta=wt(It,Xt,ea);try{const Ut=await K.createClaudeAccount(ta);Je.push(Ut)}catch(Ut){Ze.push({name:Xt,error:Ut.message})}}if(Je.length>0){const ot=qe?`成功创建 ${Je.length}/${Le.length} 个账户`:"账户创建成功";P(ot,"success"),N("success",Je[0])}Ze.length>0&&P(`${Ze.length} 个账户创建失败`,"error");return}const R=Array.isArray(d)?d[0]:d;a.value.platform==="claude"&&a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=xt());const Ie=ge(a.value.proxy),X={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:Ie};if(L==="claude"){const Le=R.claudeAiOauth||R;if(X.claudeAiOauth=Le,Le){const qe={},Me=Le.extInfo;if(Me&&typeof Me=="object"&&(Me.org_uuid&&(qe.org_uuid=Me.org_uuid),Me.account_uuid&&(qe.account_uuid=Me.account_uuid)),!Me){const Je=(t=Le.organization)==null?void 0:t.uuid,Ze=(ie=Le.account)==null?void 0:ie.uuid;Je&&(qe.org_uuid=Je),Ze&&(qe.account_uuid=Ze)}Object.keys(qe).length>0&&(X.extInfo=qe)}X.priority=a.value.priority||50,X.autoStopOnWarning=a.value.autoStopOnWarning||!1,X.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,X.useUnifiedClientId=a.value.useUnifiedClientId||!1,X.unifiedClientId=a.value.unifiedClientId||"",X.maxConcurrency=a.value.serialQueueEnabled?1:0,X.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(L==="gemini"||L==="gemini-antigravity")X.geminiOauth=R.tokens||R,X.oauthProvider=L==="gemini-antigravity"?"antigravity":R.oauthProvider||"gemini-cli",a.value.projectId&&(X.projectId=a.value.projectId),X.priority=a.value.priority||50;else if(L==="openai")X.openaiOauth=R.tokens||R,X.accountInfo=R.accountInfo,X.priority=a.value.priority||50;else if(L==="droid"){const Le=R.tokens||R||{},qe={accessToken:Le.accessToken||Le.access_token||"",refreshToken:Le.refreshToken||Le.refresh_token||"",expiresAt:Le.expiresAt||Le.expires_at||"",expiresIn:Le.expiresIn||Le.expires_in||null,tokenType:Le.tokenType||Le.token_type||"Bearer",organizationId:Le.organizationId||Le.organization_id||"",authenticationMethod:Le.authenticationMethod||Le.authentication_method||""};if(!qe.refreshToken){J.value=!1,P("授权成功但未返回 Refresh Token请确认已授予离线访问权限后重试。","error");return}if(X.refreshToken=qe.refreshToken,X.accessToken=qe.accessToken,X.expiresAt=qe.expiresAt,qe.expiresIn!==null&&qe.expiresIn!==void 0&&(X.expiresIn=qe.expiresIn),X.priority=a.value.priority||50,X.endpointType=a.value.endpointType||"anthropic",X.platform="droid",X.tokenType=qe.tokenType,X.authenticationMethod=qe.authenticationMethod,qe.organizationId&&(X.organizationId=qe.organizationId),Le.user){const Me=Le.user,Je=[];typeof Me.first_name=="string"&&Me.first_name.trim()&&Je.push(Me.first_name.trim()),typeof Me.last_name=="string"&&Me.last_name.trim()&&Je.push(Me.last_name.trim());const Ze=Je.join(" ").trim()||(typeof Me.name=="string"?Me.name.trim():"")||(typeof Me.display_name=="string"?Me.display_name.trim():"");typeof Me.email=="string"&&Me.email.trim()&&(X.ownerEmail=Me.email.trim()),Ze?(X.ownerName=Ze,X.ownerDisplayName=Ze):X.ownerEmail&&(X.ownerName=X.ownerName||X.ownerEmail,X.ownerDisplayName=X.ownerDisplayName||X.ownerEmail),typeof Me.id=="string"&&Me.id.trim()&&(X.userId=Me.id.trim())}}let Se;L==="claude"?Se=await K.createClaudeAccount(X):L==="gemini"?Se=await K.createGeminiAccount(X):L==="openai"?Se=await K.createOpenAIAccount(X):L==="droid"?Se=await K.createDroidAccount(X):Se=await K.createGeminiAccount(X),N("success",Se)}catch(L){const R=((i=(ve=L.response)==null?void 0:ve.data)==null?void 0:i.error)||L.message||"账户创建失败",Ie=((me=(ye=L.response)==null?void 0:ye.data)==null?void 0:me.suggestion)||"",X=((Be=(Ne=L.response)==null?void 0:Ne.data)==null?void 0:Be.errorDetails)||null;let Se=R;Ie&&(Se+=`
${Ie}`),X&&X.error_description?Se+=`
详细信息: ${X.error_description}`:X&&X.error&&X.error.message&&(Se+=`
详细信息: ${X.error.message}`),P(Se,"error","",8e3)}finally{J.value=!1,(Re=Z.value)==null||Re.resetCookieAuth()}},qt=async()=>{var t,ie,ve,i,ye,me,Ne,Be;M.value.name="",M.value.accessToken="",M.value.refreshToken="",M.value.apiUrl="",M.value.apiKey="",M.value.apiKeys="";let d=!1;if((!a.value.name||a.value.name.trim()==="")&&(M.value.name="请填写账户名称",d=!0),a.value.platform==="claude-console"&&((!a.value.apiUrl||a.value.apiUrl.trim()==="")&&(M.value.apiUrl="请填写 API URL",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(M.value.apiKey="请填写 API Key",d=!0)),a.value.platform==="ccr"&&((!a.value.apiUrl||a.value.apiUrl.trim()==="")&&(M.value.apiUrl="请填写 API URL",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(M.value.apiKey="请填写 API Key",d=!0)),a.value.platform==="openai-responses"?((!a.value.baseApi||a.value.baseApi.trim()==="")&&(M.value.baseApi="请填写 API 基础地址",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(M.value.apiKey="请填写 API 密钥",d=!0)):a.value.platform==="bedrock"?(a.value.credentialType==="access_key"?j.value||((!a.value.accessKeyId||a.value.accessKeyId.trim()==="")&&(M.value.accessKeyId="请填写 AWS 访问密钥 ID",d=!0),(!a.value.secretAccessKey||a.value.secretAccessKey.trim()==="")&&(M.value.secretAccessKey="请填写 AWS 秘密访问密钥",d=!0)):a.value.credentialType==="bearer_token"&&(j.value||(!a.value.bearerToken||a.value.bearerToken.trim()==="")&&(M.value.bearerToken="请填写 Bearer Token",d=!0)),(!a.value.region||a.value.region.trim()==="")&&(M.value.region="请选择 AWS 区域",d=!0)):a.value.platform==="azure_openai"?((!a.value.azureEndpoint||a.value.azureEndpoint.trim()==="")&&(M.value.azureEndpoint="请填写 Azure Endpoint",d=!0),(!a.value.deploymentName||a.value.deploymentName.trim()==="")&&(M.value.deploymentName="请填写部署名称",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(M.value.apiKey="请填写 API Key",d=!0)):a.value.addType==="manual"?a.value.platform==="openai"?(!a.value.refreshToken||a.value.refreshToken.trim()==="")&&(M.value.refreshToken="请填写 Refresh Token",d=!0):a.value.platform==="gemini"?(!a.value.accessToken||a.value.accessToken.trim()==="")&&(M.value.accessToken="请填写 Access Token",d=!0):a.value.platform==="droid"?((!a.value.accessToken||a.value.accessToken.trim()==="")&&(M.value.accessToken="请填写 Access Token",d=!0),(!a.value.refreshToken||a.value.refreshToken.trim()==="")&&(M.value.refreshToken="请填写 Refresh Token",d=!0)):a.value.platform==="claude"&&(!a.value.accessToken||a.value.accessToken.trim()==="")&&(M.value.accessToken="请填写 Access Token",d=!0):a.value.addType==="apikey"&&(a.value.platform==="gemini-api"?((!a.value.apiKey||a.value.apiKey.trim()==="")&&(M.value.apiKey="请填写 API Key",d=!0),!a.value.baseUrl||a.value.baseUrl.trim()===""?(M.value.baseUrl="请填写 API 基础地址",d=!0):a.value.baseUrl.trim().endsWith("/models")||(M.value.baseUrl="API 基础地址必须以 /models 结尾",d=!0)):lt(a.value.apiKeysInput).length===0&&(M.value.apiKeys="请至少填写一个 API Key",d=!0)),a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)&&(P("请选择一个分组","error"),d=!0),a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!d){J.value=!0;try{const Re=ge(a.value.proxy),L={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:Re};if(a.value.platform==="claude"){const Ie=a.value.refreshToken?6e5:31536e6;a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=xt()),L.claudeAiOauth={accessToken:a.value.accessToken,refreshToken:a.value.refreshToken||"",expiresAt:Date.now()+Ie,scopes:[]},L.priority=a.value.priority||50,L.autoStopOnWarning=a.value.autoStopOnWarning||!1,L.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,L.useUnifiedClientId=a.value.useUnifiedClientId||!1,L.unifiedClientId=a.value.unifiedClientId||"",L.maxConcurrency=a.value.serialQueueEnabled?1:0,L.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(a.value.platform==="gemini"){const Ie=a.value.refreshToken?6e5:31536e6;L.geminiOauth={access_token:a.value.accessToken,refresh_token:a.value.refreshToken||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+Ie},a.value.projectId&&(L.projectId=a.value.projectId),L.priority=a.value.priority||50}else if(a.value.platform==="openai"){const Ie=a.value.refreshToken?6e5:31536e6;L.openaiOauth={idToken:"",accessToken:a.value.accessToken||"",refreshToken:a.value.refreshToken,expires_in:Math.floor(Ie/1e3)},L.accountInfo={accountId:"",chatgptUserId:"",organizationId:"",organizationRole:"",organizationTitle:"",planType:"",email:"",emailVerified:!1},L.needsImmediateRefresh=!0,L.requireRefreshSuccess=!0,L.priority=a.value.priority||50}else if(a.value.platform==="droid")if(L.priority=a.value.priority||50,L.endpointType=a.value.endpointType||"anthropic",L.platform="droid",a.value.addType==="apikey"){const Ie=lt(a.value.apiKeysInput);L.apiKeys=Ie,L.authenticationMethod="api_key",L.isActive=!0,L.schedulable=!0}else{const Ie=((t=a.value.accessToken)==null?void 0:t.trim())||"",X=((ie=a.value.refreshToken)==null?void 0:ie.trim())||"",Se=new Date(Date.now()+8*60*60*1e3).toISOString();L.accessToken=Ie,L.refreshToken=X,L.expiresAt=Se,L.expiresIn=8*60*60,L.tokenType="Bearer",L.authenticationMethod="manual"}else a.value.platform==="claude-console"||a.value.platform==="ccr"?(L.apiUrl=a.value.apiUrl,L.apiKey=a.value.apiKey,L.priority=a.value.priority||50,L.supportedModels=sa()||{},L.userAgent=a.value.userAgent||null,L.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0,a.value.platform==="claude-console"&&(L.disableAutoProtection=!!a.value.disableAutoProtection,L.interceptWarmup=!!a.value.interceptWarmup),L.dailyQuota=a.value.dailyQuota||0,L.quotaResetTime=a.value.quotaResetTime||"00:00",L.maxConcurrentTasks=a.value.maxConcurrentTasks||0):a.value.platform==="openai-responses"?(L.baseApi=a.value.baseApi,L.apiKey=a.value.apiKey,L.userAgent=a.value.userAgent||"",L.priority=a.value.priority||50,L.rateLimitDuration=60,L.dailyQuota=a.value.dailyQuota||0,L.quotaResetTime=a.value.quotaResetTime||"00:00"):a.value.platform==="gemini-antigravity"?(L.oauthProvider="antigravity",L.priority=a.value.priority||50):a.value.platform==="gemini-api"?(L.baseUrl=a.value.baseUrl||"https://generativelanguage.googleapis.com",L.apiKey=a.value.apiKey,L.priority=a.value.priority||50,L.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[]):a.value.platform==="bedrock"?(L.credentialType=a.value.credentialType||"access_key",a.value.credentialType==="access_key"?L.awsCredentials={accessKeyId:a.value.accessKeyId,secretAccessKey:a.value.secretAccessKey,sessionToken:a.value.sessionToken||null}:a.value.credentialType==="bearer_token"&&(L.bearerToken=a.value.bearerToken),L.region=a.value.region,L.defaultModel=a.value.defaultModel||null,L.smallFastModel=a.value.smallFastModel||null,L.priority=a.value.priority||50,L.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0):a.value.platform==="azure_openai"&&(L.azureEndpoint=a.value.azureEndpoint,L.apiKey=a.value.apiKey,L.apiVersion=a.value.apiVersion||"2024-02-01",L.deploymentName=a.value.deploymentName,L.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[],L.priority=a.value.priority||50,L.isActive=a.value.isActive!==!1,L.schedulable=a.value.schedulable!==!1);let R;if(a.value.platform==="claude")R=await K.createClaudeAccount(L);else if(a.value.platform==="claude-console"||a.value.platform==="ccr")R=await K.createClaudeConsoleAccount(L);else if(a.value.platform==="droid")R=await K.createDroidAccount(L);else if(a.value.platform==="openai-responses")R=await K.createOpenAIResponsesAccount(L);else if(a.value.platform==="bedrock")R=await K.createBedrockAccount(L);else if(a.value.platform==="openai")R=await K.createOpenAIAccount(L);else if(a.value.platform==="azure_openai")R=await K.createAzureOpenAIAccount(L);else if(a.value.platform==="gemini"||a.value.platform==="gemini-antigravity")R=await K.createGeminiAccount(L);else if(a.value.platform==="gemini-api")R=await K.createGeminiApiAccount(L);else throw new Error(`不支持的平台: ${a.value.platform}`);N("success",R)}catch(Re){const L=((i=(ve=Re.response)==null?void 0:ve.data)==null?void 0:i.error)||Re.message||"账户创建失败",R=((me=(ye=Re.response)==null?void 0:ye.data)==null?void 0:me.suggestion)||"",Ie=((Be=(Ne=Re.response)==null?void 0:Ne.data)==null?void 0:Be.errorDetails)||null;let X=L;R&&(X+=`
${R}`),Ie&&Ie.error_description?X+=`
详细信息: ${Ie.error_description}`:Ie&&Ie.error&&Ie.error.message&&(X+=`
详细信息: ${Ie.error.message}`),P(X,"error","",8e3)}finally{J.value=!1}}},dt=async()=>{var d,t,ie,ve,i,ye,me,Ne,Be,Re;if(M.value.name="",M.value.apiKeys="",M.value.baseUrl="",!a.value.name||a.value.name.trim()===""){M.value.name="请填写账户名称";return}if(a.value.platform==="gemini-api"){const L=((d=a.value.baseUrl)==null?void 0:d.trim())||"";if(!L){M.value.baseUrl="请填写 API 基础地址";return}if(!L.endsWith("/models")){M.value.baseUrl="API 基础地址必须以 /models 结尾";return}}if(a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)){P("请选择一个分组","error");return}if(a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!(a.value.platform==="gemini"&&(!a.value.projectId||a.value.projectId.trim()==="")&&!await C("项目 ID 未填写",`您尚未填写项目 ID。
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号需要提供项目 ID。
如果您使用的是普通个人账号,可以继续不填写。`,"继续保存","返回填写"))){J.value=!0;try{const L=ge(a.value.proxy),R={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:L};if(a.value.accessToken||a.value.refreshToken){const Ie=((t=a.value.accessToken)==null?void 0:t.trim())||"",X=((ie=a.value.refreshToken)==null?void 0:ie.trim())||"";if(p.account.platform==="claude"){const Se=a.value.refreshToken?6e5:31536e6;R.claudeAiOauth={accessToken:Ie||"",refreshToken:X||"",expiresAt:Date.now()+Se,scopes:p.account.scopes||[]}}else if(p.account.platform==="gemini"){const Se=a.value.refreshToken?6e5:31536e6;R.geminiOauth={access_token:Ie||"",refresh_token:X||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+Se}}else if(p.account.platform==="openai"){const Se=a.value.refreshToken?6e5:31536e6;R.openaiOauth={idToken:"",accessToken:Ie||"",refreshToken:X||"",expires_in:Math.floor(Se/1e3)},X&&X!==p.account.refreshToken&&(R.needsImmediateRefresh=!0,R.requireRefreshSuccess=!0)}else p.account.platform==="droid"&&(Ie&&(R.accessToken=Ie),X&&(R.refreshToken=X))}if(p.account.platform==="droid"){const Ie=((ve=a.value.apiKeysInput)==null?void 0:ve.trim())||"",X=a.value.apiKeyUpdateMode||"append";if(X==="delete"){if(!Ie){M.value.apiKeys="请填写需要删除的 API Key",J.value=!1;return}const Se=lt(Ie);if(Se.length===0){M.value.apiKeys="请填写需要删除的 API Key",J.value=!1;return}R.removeApiKeys=Se,R.apiKeyUpdateMode="delete"}else{if(Ie){const Se=lt(Ie);if(Se.length===0){M.value.apiKeys="请至少填写一个 API Key",J.value=!1;return}R.apiKeys=Se}else X==="replace"&&(R.apiKeys=[]);(X!=="append"||Ie)&&(R.apiKeyUpdateMode=X)}w.value&&(R.authenticationMethod="api_key")}if(p.account.platform==="gemini"&&(R.projectId=a.value.projectId||""),p.account.platform==="droid"&&(R.priority=a.value.priority||50,R.endpointType=a.value.endpointType||"anthropic"),p.account.platform==="claude"&&(a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=xt()),R.priority=a.value.priority||50,R.autoStopOnWarning=a.value.autoStopOnWarning||!1,R.interceptWarmup=a.value.interceptWarmup||!1,R.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,R.useUnifiedClientId=a.value.useUnifiedClientId||!1,R.unifiedClientId=a.value.unifiedClientId||"",R.maxConcurrency=a.value.serialQueueEnabled?1:0,R.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}),p.account.platform==="openai"&&(R.priority=a.value.priority||50),p.account.platform==="gemini"&&(R.priority=a.value.priority||50),p.account.platform==="claude-console"&&(R.apiUrl=a.value.apiUrl,a.value.apiKey&&(R.apiKey=a.value.apiKey),R.priority=a.value.priority||50,R.supportedModels=sa()||{},R.userAgent=a.value.userAgent||null,R.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0,R.disableAutoProtection=!!a.value.disableAutoProtection,R.interceptWarmup=!!a.value.interceptWarmup,R.dailyQuota=a.value.dailyQuota||0,R.quotaResetTime=a.value.quotaResetTime||"00:00",R.maxConcurrentTasks=a.value.maxConcurrentTasks||0),p.account.platform==="openai-responses"&&(R.baseApi=a.value.baseApi,a.value.apiKey&&(R.apiKey=a.value.apiKey),R.userAgent=a.value.userAgent||"",R.priority=a.value.priority||50,R.dailyQuota=a.value.dailyQuota||0,R.quotaResetTime=a.value.quotaResetTime||"00:00"),p.account.platform==="bedrock"&&(a.value.credentialType&&(R.credentialType=a.value.credentialType),a.value.credentialType==="access_key"?(a.value.accessKeyId||a.value.secretAccessKey||a.value.sessionToken)&&(R.awsCredentials={},a.value.accessKeyId&&(R.awsCredentials.accessKeyId=a.value.accessKeyId),a.value.secretAccessKey&&(R.awsCredentials.secretAccessKey=a.value.secretAccessKey),a.value.sessionToken!==void 0&&(R.awsCredentials.sessionToken=a.value.sessionToken||null)):a.value.credentialType==="bearer_token"&&a.value.bearerToken&&a.value.bearerToken.trim()&&(R.bearerToken=a.value.bearerToken),a.value.region&&(R.region=a.value.region),R.defaultModel=a.value.defaultModel||null,R.smallFastModel=a.value.smallFastModel||null,R.priority=a.value.priority||50,R.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0),p.account.platform==="azure_openai"&&(R.azureEndpoint=a.value.azureEndpoint,R.apiVersion=a.value.apiVersion||"2024-02-01",R.deploymentName=a.value.deploymentName,R.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[],R.priority=a.value.priority||50,a.value.apiKey&&a.value.apiKey.trim()&&(R.apiKey=a.value.apiKey)),p.account.platform==="gemini-api"&&(R.baseUrl=a.value.baseUrl||"https://generativelanguage.googleapis.com",a.value.apiKey&&a.value.apiKey.trim()&&(R.apiKey=a.value.apiKey),R.priority=a.value.priority||50,R.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[]),p.account.platform==="claude")await K.updateClaudeAccount(p.account.id,R);else if(p.account.platform==="claude-console")await K.updateClaudeConsoleAccount(p.account.id,R);else if(p.account.platform==="openai-responses")await K.updateOpenAIResponsesAccount(p.account.id,R);else if(p.account.platform==="bedrock")await K.updateBedrockAccount(p.account.id,R);else if(p.account.platform==="openai")await K.updateOpenAIAccount(p.account.id,R);else if(p.account.platform==="azure_openai")await K.updateAzureOpenAIAccount(p.account.id,R);else if(p.account.platform==="gemini")await K.updateGeminiAccount(p.account.id,R);else if(p.account.platform==="gemini-api")await K.updateGeminiApiAccount(p.account.id,R);else if(p.account.platform==="droid")await K.updateDroidAccount(p.account.id,R);else throw new Error(`不支持的平台: ${p.account.platform}`);N("success")}catch(L){const R=((ye=(i=L.response)==null?void 0:i.data)==null?void 0:ye.error)||L.message||"账户更新失败",Ie=((Ne=(me=L.response)==null?void 0:me.data)==null?void 0:Ne.suggestion)||"",X=((Re=(Be=L.response)==null?void 0:Be.data)==null?void 0:Re.errorDetails)||null;let Se=R;Ie&&(Se+=`
${Ie}`),X&&X.error_description?Se+=`
详细信息: ${X.error_description}`:X&&X.error&&X.error.message&&(Se+=`
详细信息: ${X.error.message}`),P(Se,"error","",8e3)}finally{J.value=!1}}};$e(()=>a.value.name,()=>{var d;M.value.name&&((d=a.value.name)!=null&&d.trim())&&(M.value.name="")}),$e(()=>a.value.accessToken,()=>{var d;M.value.accessToken&&((d=a.value.accessToken)!=null&&d.trim())&&(M.value.accessToken="")}),$e(()=>a.value.refreshToken,()=>{var d;M.value.refreshToken&&((d=a.value.refreshToken)!=null&&d.trim())&&(M.value.refreshToken="")}),$e(()=>a.value.apiUrl,()=>{var d;M.value.apiUrl&&((d=a.value.apiUrl)!=null&&d.trim())&&(M.value.apiUrl="")}),$e(()=>a.value.apiKey,()=>{var d;M.value.apiKey&&((d=a.value.apiKey)!=null&&d.trim())&&(M.value.apiKey="")}),$e(()=>a.value.azureEndpoint,()=>{var d;M.value.azureEndpoint&&((d=a.value.azureEndpoint)!=null&&d.trim())&&(M.value.azureEndpoint="")}),$e(()=>a.value.deploymentName,()=>{var d;M.value.deploymentName&&((d=a.value.deploymentName)!=null&&d.trim())&&(M.value.deploymentName="")});const et=$([]),Wt=$(!1),At=$(!1),Ft=se(()=>{let d=a.value.platform;return a.value.platform==="claude-console"||a.value.platform==="ccr"?d="claude":a.value.platform==="openai-responses"?d="openai":a.value.platform==="gemini-api"&&(d="gemini"),et.value.filter(t=>t.platform===d)}),Bt=async()=>{Wt.value=!0;try{const d=await G.get("/admin/account-groups");et.value=d.data||[]}catch{P("加载分组列表失败","error"),et.value=[]}finally{Wt.value=!1}},Gt=async()=>{await Bt(),P("分组列表已刷新","success")},Vt=()=>{At.value=!0},ha=async()=>{await Bt()},wa=async()=>{var t;if(!((t=p.account)!=null&&t.id))return;const d=[typeof K.fetchDroidAccounts=="function"?K.fetchDroidAccounts:null,typeof K.fetchAllAccounts=="function"?K.fetchAllAccounts:null].filter(Boolean);for(const ie of d)try{await ie();return}catch(ve){console.error("刷新账户列表失败:",ve)}};$e(()=>a.value.platform,d=>{d==="claude-console"||d==="ccr"||d==="bedrock"||d==="openai-responses"?a.value.addType="manual":d==="claude"||d==="gemini"||d==="openai"?a.value.addType="oauth":(d==="gemini-api"||d==="azure_openai")&&(a.value.addType="apikey"),a.value.accountType==="group"&&(a.value.groupId="",a.value.groupIds=[])}),$e(()=>a.value.groupIds,d=>{a.value.accountType==="group"&&(d&&d.length>0?a.value.groupId=d[0]:a.value.groupId="")},{deep:!0}),$e(()=>a.value.addType,(d,t)=>{d!==t&&(d==="apikey"?(a.value.accessToken="",a.value.refreshToken="",M.value.accessToken="",M.value.refreshToken="",a.value.authenticationMethod="api_key",a.value.apiKeyUpdateMode="append"):t==="apikey"&&(a.value.apiKeysInput="",a.value.apiKeyUpdateMode="append",M.value.apiKeys="",j.value||(a.value.authenticationMethod="")))}),$e(()=>a.value.apiKeyUpdateMode,(d,t)=>{d!==t&&M.value.apiKeys&&(M.value.apiKeys="")}),$e(()=>a.value.apiKeysInput,d=>{if(!M.value.apiKeys)return;const t=lt(d),ie=a.value.apiKeyUpdateMode;if(ie==="append"&&t.length>0){M.value.apiKeys="";return}if(ie==="replace"){(t.length>0||!d||d.trim()==="")&&(M.value.apiKeys="");return}ie==="delete"&&t.length>0&&(M.value.apiKeys="")}),$e(D,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?(D.value=i,P("成功提取授权码!","success")):P("URL 中未找到授权码参数,请检查链接是否正确","error")}catch{P("链接格式错误,请检查是否为完整的 URL","error")}else P("请粘贴以 http://localhost:45462 开头的链接","error")}),$e(()=>a.value.platform,d=>{j.value||N("platform-changed",d)}),$e(()=>a.value.accountType,d=>{d==="group"&&et.value.length===0&&Bt()}),$e(()=>a.value.groupId,d=>{d==="__new__"&&(a.value.groupId="",At.value=!0)});const $a=()=>{De.value.push({from:"",to:""})},mt=d=>{De.value.splice(d,1)},Ve=(d,t)=>{if(De.value.some(ve=>ve.from===d)){P(`模型 ${d} 的映射已存在`,"info");return}De.value.push({from:d,to:t}),P(`已添加映射: ${d}${t}`,"success")},sa=()=>{const d={};return te.value==="whitelist"?Ae.value.forEach(t=>{d[t]=t}):De.value.forEach(t=>{t.from&&t.to&&(d[t.from]=t.to)}),Object.keys(d).length>0?d:null};$e(()=>p.account,d=>{if(d){at();const t=be(d.proxy),ie=typeof d.authenticationMethod=="string"?d.authenticationMethod.trim().toLowerCase():"",ve=ie==="api_key"?"apikey":ie==="manual"?"manual":"oauth";let i="";d.accountType==="group"&&(i=d.groupId||d.groupInfo&&d.groupInfo.id||"");let ye="claude_max";if(d.subscriptionInfo){const me=typeof d.subscriptionInfo=="string"?JSON.parse(d.subscriptionInfo):d.subscriptionInfo;me.accountType?ye=me.accountType:me.hasClaudeMax?ye="claude_max":me.hasClaudePro?ye="claude_pro":ye="claude_free"}a.value={platform:d.platform,addType:ve,name:d.name,description:d.description||"",accountType:d.accountType||"shared",subscriptionType:ye,autoStopOnWarning:d.autoStopOnWarning||!1,interceptWarmup:d.interceptWarmup===!0||d.interceptWarmup==="true",useUnifiedUserAgent:d.useUnifiedUserAgent||!1,useUnifiedClientId:d.useUnifiedClientId||!1,unifiedClientId:d.unifiedClientId||"",serialQueueEnabled:(d.maxConcurrency||0)>0,groupId:i,groupIds:[],projectId:d.projectId||"",accessToken:"",refreshToken:"",authenticationMethod:d.authenticationMethod||"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:t,apiUrl:d.apiUrl||"",apiKey:"",priority:d.priority||50,supportedModels:(()=>{const me=d.supportedModels;return me?typeof me=="object"&&!Array.isArray(me)?Object.keys(me):Array.isArray(me)?me:[]:[]})(),userAgent:d.userAgent||"",enableRateLimit:!!(d.rateLimitDuration&&d.rateLimitDuration>0),rateLimitDuration:d.rateLimitDuration||60,accessKeyId:"",secretAccessKey:"",region:d.region||"",sessionToken:"",defaultModel:d.defaultModel||"",smallFastModel:d.smallFastModel||"",azureEndpoint:d.azureEndpoint||"",apiVersion:d.apiVersion||"",deploymentName:d.deploymentName||"",baseApi:d.baseApi||"",baseUrl:d.baseUrl||"https://generativelanguage.googleapis.com",dailyQuota:d.dailyQuota||0,dailyUsage:d.dailyUsage||0,quotaResetTime:d.quotaResetTime||"00:00",maxConcurrentTasks:d.maxConcurrentTasks||0,disableAutoProtection:d.disableAutoProtection===!0},d.platform==="claude-console"&&m(),d.accountType==="group"&&Bt().then(async()=>{const me=[];if(d.groupInfos&&Array.isArray(d.groupInfos)&&d.groupInfos.length>0)d.groupInfos.forEach(Ne=>{Ne&&Ne.id&&me.push(Ne.id)}),me.length>0&&(a.value.groupId=me[0]);else if(d.groupInfo&&d.groupInfo.id)a.value.groupId=d.groupInfo.id,me.push(d.groupInfo.id);else if(d.groupId)a.value.groupId=d.groupId,me.push(d.groupId);else if(d.groupIds&&Array.isArray(d.groupIds)&&d.groupIds.length>0)a.value.groupId=d.groupIds[0],me.push(...d.groupIds);else{const Ne=et.value.map(async Be=>{try{((await G.get(`/admin/account-groups/${Be.id}/members`)).data||[]).some(R=>R.id===d.id)&&(me.push(Be.id),a.value.groupId||(a.value.groupId=Be.id))}catch{}});await Promise.all(Ne)}a.value.groupIds=me})}},{immediate:!0});const ut=async()=>{try{const d=await G.get("/admin/claude-code-version");d.success&&d.userAgent?h.value=d.userAgent:h.value=""}catch{h.value=""}},Ct=async()=>{fe.value=!0;try{(await G.post("/admin/claude-code-version/clear")).success?(h.value="",P("统一User-Agent缓存已清除","success")):P("清除缓存失败","error")}catch(d){P("清除缓存失败:"+(d.message||"未知错误"),"error")}finally{fe.value=!1}},xt=()=>{const d=new Uint8Array(32);return crypto.getRandomValues(d),Array.from(d,t=>t.toString(16).padStart(2,"0")).join("")},la=()=>{a.value.unifiedClientId=xt(),P("已生成新的客户端标识","success")},Aa=()=>{a.value.useUnifiedClientId&&(a.value.useUnifiedUserAgent=!0,a.value.unifiedClientId||(a.value.unifiedClientId=xt()))},Ca=se(()=>{const d=new Date;return d.setMinutes(d.getMinutes()+1),d.toISOString().slice(0,16)}),gt=()=>{if(!a.value.expireDuration){a.value.expiresAt=null;return}if(a.value.expireDuration==="custom")return;const d=new Date,ie=a.value.expireDuration.match(/(\d+)([d])/);if(ie){const[,ve,i]=ie,ye=parseInt(ve);i==="d"&&d.setDate(d.getDate()+ye),a.value.expiresAt=d.toISOString()}},oa=()=>{a.value.customExpireDate&&(a.value.expiresAt=new Date(a.value.customExpireDate).toISOString())},Ta=d=>d?new Date(d).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"";return aa(()=>{var d;le.value=Y(a.value.platform),j.value&&at(),ut(),j.value&&((d=p.account)==null?void 0:d.platform)==="claude-console"&&m()}),$e(()=>a.value.platform,d=>{d==="claude"&&ut()}),(d,t)=>{var ie,ve;return o(),Ye(Kt,{to:"body"},[oe.value?(o(),n("div",Cn,[e("div",Tn,[e("div",In,[e("div",Un,[t[171]||(t[171]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-green-500 to-green-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-user-circle text-sm text-white sm:text-base"})],-1)),e("h3",_n,u(j.value?"编辑账户":"添加账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:t[0]||(t[0]=i=>d.$emit("close"))},t[172]||(t[172]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),!j.value&&(a.value.addType==="oauth"||a.value.addType==="setup-token")?(o(),n("div",Kn,[e("div",Sn,[e("div",Mn,[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",pe.value>=1?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 1 ",2),t[173]||(t[173]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"基本信息",-1))]),t[175]||(t[175]=e("div",{class:"h-0.5 w-4 bg-gray-300 sm:w-8"},null,-1)),e("div",Dn,[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",pe.value>=2?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 2 ",2),t[174]||(t[174]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"授权认证",-1))])])])):c("",!0),pe.value===1&&!j.value?(o(),n("div",Pn,[e("div",jn,[j.value?c("",!0):(o(),n("div",Ln,[t[215]||(t[215]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择平台",-1)),e("div",Vn,[e("div",zn,[e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[le.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=>E("claude"))},[e("div",Rn,[e("div",On,[t[177]||(t[177]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-indigo-500 to-purple-600"},[e("i",{class:"fas fa-brain text-sm text-white"})],-1)),le.value==="claude"?(o(),n("div",En,t[176]||(t[176]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[178]||(t[178]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Claude ",-1)),t[179]||(t[179]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Anthropic",-1))])],2),e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[le.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=>E("openai"))},[e("div",Nn,[e("div",qn,[t[181]||(t[181]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-emerald-500 to-teal-600"},[e("svg",{class:"h-5 w-5 text-white",fill:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.8956zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.4069-.6813zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"})])],-1)),le.value==="openai"?(o(),n("div",Wn,t[180]||(t[180]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[182]||(t[182]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," OpenAI ",-1)),t[183]||(t[183]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"GPT 系列",-1))])],2),e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[le.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=>E("gemini"))},[e("div",Fn,[e("div",Bn,[t[185]||(t[185]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-blue-500 to-indigo-600"},[e("i",{class:"fab fa-google text-sm text-white"})],-1)),le.value==="gemini"?(o(),n("div",Gn,t[184]||(t[184]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[186]||(t[186]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Gemini ",-1)),t[187]||(t[187]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Google AI",-1))])],2),e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[le.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=>E("droid"))},[e("div",Qn,[e("div",Hn,[t[189]||(t[189]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-rose-500 to-orange-500"},[e("i",{class:"fas fa-robot text-sm text-white"})],-1)),le.value==="droid"?(o(),n("div",Jn,t[188]||(t[188]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[190]||(t[190]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Droid ",-1)),t[191]||(t[191]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Claude Droid",-1))])],2)]),le.value?(o(),n("div",Yn,[t[214]||(t[214]=e("p",{class:"mb-2 text-xs font-medium text-gray-700 dark:text-gray-300"}," 选择具体平台类型: ",-1)),e("div",Zn,[le.value==="claude"?(o(),n(Ce,{key:0},[e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="claude"?"border-indigo-500 bg-indigo-50 dark:border-indigo-400 dark:bg-indigo-900/30":"border-gray-300 bg-white hover:border-indigo-400 hover:bg-indigo-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-indigo-500 dark:hover:bg-indigo-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[5]||(t[5]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"claude"},null,512),[[_e,a.value.platform]]),t[193]||(t[193]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-brain text-sm text-indigo-600 dark:text-indigo-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Code"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="claude"?(o(),n("div",Xn,t[192]||(t[192]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="claude-console"?"border-purple-500 bg-purple-50 dark:border-purple-400 dark:bg-purple-900/30":"border-gray-300 bg-white hover:border-purple-400 hover:bg-purple-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-purple-500 dark:hover:bg-purple-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[6]||(t[6]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"claude-console"},null,512),[[_e,a.value.platform]]),t[195]||(t[195]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-terminal text-sm text-purple-600 dark:text-purple-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Console"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"标准API")])],-1)),a.value.platform==="claude-console"?(o(),n("div",ei,t[194]||(t[194]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="bedrock"?"border-orange-500 bg-orange-50 dark:border-orange-400 dark:bg-orange-900/30":"border-gray-300 bg-white hover:border-orange-400 hover:bg-orange-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-orange-500 dark:hover:bg-orange-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[7]||(t[7]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"bedrock"},null,512),[[_e,a.value.platform]]),t[197]||(t[197]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-aws text-sm text-orange-600 dark:text-orange-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Bedrock"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"AWS")])],-1)),a.value.platform==="bedrock"?(o(),n("div",ti,t[196]||(t[196]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="ccr"?"border-cyan-500 bg-cyan-50 dark:border-cyan-400 dark:bg-cyan-900/30":"border-gray-300 bg-white hover:border-cyan-400 hover:bg-cyan-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-cyan-500 dark:hover:bg-cyan-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[8]||(t[8]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"ccr"},null,512),[[_e,a.value.platform]]),t[199]||(t[199]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-code-branch text-sm text-cyan-600 dark:text-cyan-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"CCR"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Claude Code Router")])],-1)),a.value.platform==="ccr"?(o(),n("div",ai,t[198]||(t[198]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)],64)):c("",!0),le.value==="openai"?(o(),n(Ce,{key:1},[e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="openai"?"border-emerald-500 bg-emerald-50 dark:border-emerald-400 dark:bg-emerald-900/30":"border-gray-300 bg-white hover:border-emerald-400 hover:bg-emerald-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-emerald-500 dark:hover:bg-emerald-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[9]||(t[9]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"openai"},null,512),[[_e,a.value.platform]]),t[201]||(t[201]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-emerald-600 dark:text-emerald-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Codex Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="openai"?(o(),n("div",ri,t[200]||(t[200]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="openai-responses"?"border-teal-500 bg-teal-50 dark:border-teal-400 dark:bg-teal-900/30":"border-gray-300 bg-white hover:border-teal-400 hover:bg-teal-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-teal-500 dark:hover:bg-teal-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[10]||(t[10]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"openai-responses"},null,512),[[_e,a.value.platform]]),t[203]||(t[203]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-server text-sm text-teal-600 dark:text-teal-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Responses"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Openai-Responses")])],-1)),a.value.platform==="openai-responses"?(o(),n("div",si,t[202]||(t[202]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="azure_openai"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[11]||(t[11]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"azure_openai"},null,512),[[_e,a.value.platform]]),t[205]||(t[205]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-microsoft text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Azure"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Azure Openai")])],-1)),a.value.platform==="azure_openai"?(o(),n("div",li,t[204]||(t[204]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)],64)):c("",!0),le.value==="gemini"?(o(),n(Ce,{key:2},[e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[12]||(t[12]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini"},null,512),[[_e,a.value.platform]]),t[207]||(t[207]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-google text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Gemini Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="gemini"?(o(),n("div",oi,t[206]||(t[206]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini-antigravity"?"border-purple-500 bg-purple-50 dark:border-purple-400 dark:bg-purple-900/30":"border-gray-300 bg-white hover:border-purple-400 hover:bg-purple-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-purple-500 dark:hover:bg-purple-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[13]||(t[13]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini-antigravity"},null,512),[[_e,a.value.platform]]),t[209]||(t[209]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-rocket text-sm text-purple-600 dark:text-purple-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Antigravity"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"OAuth")])],-1)),a.value.platform==="gemini-antigravity"?(o(),n("div",ni,t[208]||(t[208]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini-api"?"border-amber-500 bg-amber-50 dark:border-amber-400 dark:bg-amber-900/30":"border-gray-300 bg-white hover:border-amber-400 hover:bg-amber-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-amber-500 dark:hover:bg-amber-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[14]||(t[14]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini-api"},null,512),[[_e,a.value.platform]]),t[211]||(t[211]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-key text-sm text-amber-600 dark:text-amber-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Gemini API"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"API Key")])],-1)),a.value.platform==="gemini-api"?(o(),n("div",ii,t[210]||(t[210]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)],64)):c("",!0),le.value==="droid"?(o(),n("label",{key:3,class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="droid"?"border-rose-500 bg-rose-50 dark:border-rose-400 dark:bg-rose-900/30":"border-gray-300 bg-white hover:border-rose-400 hover:bg-rose-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-rose-500 dark:hover:bg-rose-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[15]||(t[15]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"droid"},null,512),[[_e,a.value.platform]]),t[213]||(t[213]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-rose-600 dark:text-rose-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Droid 专属"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="droid"?(o(),n("div",di,t[212]||(t[212]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)):c("",!0)])])):c("",!0)])])),!j.value&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"&&a.value.platform!=="gemini-api"?(o(),n("div",ui,[t[220]||(t[220]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"添加方式",-1)),e("div",gi,[e("label",pi,[b(e("input",{"onUpdate:modelValue":t[16]||(t[16]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"oauth"},null,512),[[_e,a.value.addType]]),e("span",ci,[t[216]||(t[216]=x(" OAuth 授权",-1)),a.value.platform==="claude"||a.value.platform==="openai"?(o(),n("span",yi," (用量可视化)")):c("",!0)])]),a.value.platform==="claude"?(o(),n("label",mi,[b(e("input",{"onUpdate:modelValue":t[17]||(t[17]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"setup-token"},null,512),[[_e,a.value.addType]]),t[217]||(t[217]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Setup Token (效期长)",-1))])):c("",!0),e("label",xi,[b(e("input",{"onUpdate:modelValue":t[18]||(t[18]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"manual"},null,512),[[_e,a.value.addType]]),t[218]||(t[218]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"手动输入 Access Token",-1))]),a.value.platform==="droid"?(o(),n("label",fi,[b(e("input",{"onUpdate:modelValue":t[19]||(t[19]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"apikey"},null,512),[[_e,a.value.addType]]),t[219]||(t[219]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"使用 API Key (支持多个)",-1))])):c("",!0)])])):c("",!0),e("div",null,[t[221]||(t[221]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),b(e("input",{"onUpdate:modelValue":t[20]||(t[20]=i=>a.value.name=i),class: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":M.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[z,a.value.name]]),M.value.name?(o(),n("p",bi,u(M.value.name),1)):c("",!0)]),e("div",null,[t[222]||(t[222]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[21]||(t[21]=i=>a.value.description=i),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[z,a.value.description]])]),e("div",null,[t[226]||(t[226]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",vi,[e("label",ki,[b(e("input",{"onUpdate:modelValue":t[22]||(t[22]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[_e,a.value.accountType]]),t[223]||(t[223]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",hi,[b(e("input",{"onUpdate:modelValue":t[23]||(t[23]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[_e,a.value.accountType]]),t[224]||(t[224]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",wi,[b(e("input",{"onUpdate:modelValue":t[24]||(t[24]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[_e,a.value.accountType]]),t[225]||(t[225]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[227]||(t[227]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户供所有API Key使用专属账户仅供特定API Key使用分组调度加入分组供分组内调度 ",-1))]),!j.value&&a.value.platform!=="gemini-api"?(o(),n("div",$i,[t[231]||(t[231]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",Ai,[b(e("select",{"onUpdate:modelValue":t[25]||(t[25]=i=>a.value.expireDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:gt},t[228]||(t[228]=[e("option",{value:""},"永不过期",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[Ja,a.value.expireDuration]]),a.value.expireDuration==="custom"?(o(),n("div",Ci,[b(e("input",{"onUpdate:modelValue":t[26]||(t[26]=i=>a.value.customExpireDate=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Ca.value,type:"datetime-local",onChange:oa},null,40,Ti),[[z,a.value.customExpireDate]])])):c("",!0),a.value.expiresAt?(o(),n("p",Ii,[t[229]||(t[229]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),x(" 将于 "+u(Ta(a.value.expiresAt))+" 过期 ",1)])):(o(),n("p",Ui,t[230]||(t[230]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),x(" 账户永不过期 ",-1)])))]),t[232]||(t[232]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])):c("",!0),a.value.accountType==="group"?(o(),n("div",_i,[t[234]||(t[234]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",Ki,[e("div",Si,[e("div",Mi,[Ft.value.length===0?(o(),n("div",Di," 暂无可用分组 ")):c("",!0),(o(!0),n(Ce,null,We(Ft.value,i=>(o(),n("label",{key:i.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[b(e("input",{"onUpdate:modelValue":t[27]||(t[27]=ye=>a.value.groupIds=ye),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,Pi),[[ze,a.value.groupIds]]),e("span",ji,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:Vt},t[233]||(t[233]=[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:Gt},[e("i",{class:I(["fas fa-sync-alt",{"animate-spin":Wt.value}])},null,2)])])])):c("",!0),a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("div",Li,[t[235]||(t[235]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[28]||(t[28]=i=>a.value.projectId=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如verdant-wares-464411-k9",type:"text"},null,512),[[z,a.value.projectId]]),t[236]||(t[236]=e("div",{class:"mt-2 rounded-lg border border-yellow-200 bg-yellow-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-yellow-600"}),e("div",{class:"text-xs text-yellow-700"},[e("p",{class:"mb-1 font-medium"},"Google Cloud/Workspace 账号需要提供项目 ID"),e("p",null," 某些 Google 账号(特别是绑定了 Google Cloud 的账号)会被识别为 Workspace 账号,需要提供额外的项目 ID。 "),e("div",{class:"mt-2 rounded border border-yellow-300 bg-white p-2"},[e("p",{class:"mb-1 font-medium"},"如何获取项目 ID"),e("ol",{class:"ml-2 list-inside list-decimal space-y-1"},[e("li",null,[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"},"项目 IDProject ID"),x(",通常是字符串格式 ")]),e("li",{class:"text-red-600"}," ⚠️ 注意:要复制项目 IDProject ID不要复制项目编号Project Number ")])]),e("p",{class:"mt-2"},[e("strong",null,"提示:"),x("如果您的账号是普通个人账号(未绑定 Google Cloud请留空此字段。 ")])])])],-1))])):c("",!0),a.value.platform==="bedrock"?(o(),n("div",Vi,[e("div",null,[t[242]||(t[242]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"凭证类型 *",-1)),j.value?(o(),n("div",Ei,[e("label",Ni,[b(e("input",{"onUpdate:modelValue":t[31]||(t[31]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",disabled:"",type:"radio",value:"access_key"},null,512),[[_e,a.value.credentialType]]),t[239]||(t[239]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"AWS Access Key访问密钥",-1))]),e("label",qi,[b(e("input",{"onUpdate:modelValue":t[32]||(t[32]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",disabled:"",type:"radio",value:"bearer_token"},null,512),[[_e,a.value.credentialType]]),t[240]||(t[240]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Bearer Token长期令牌",-1))])])):(o(),n("div",zi,[e("label",Ri,[b(e("input",{"onUpdate:modelValue":t[29]||(t[29]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"access_key"},null,512),[[_e,a.value.credentialType]]),t[237]||(t[237]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"AWS Access Key访问密钥",-1))]),e("label",Oi,[b(e("input",{"onUpdate:modelValue":t[30]||(t[30]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"bearer_token"},null,512),[[_e,a.value.credentialType]]),t[238]||(t[238]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Bearer Token长期令牌",-1))])])),e("div",Wi,[e("div",Fi,[t[241]||(t[241]=e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600 dark:text-blue-400"},null,-1)),e("div",Bi,[a.value.credentialType==="access_key"?(o(),n("p",Gi," 使用 AWS Access Key ID 和 Secret Access Key 进行身份验证(支持临时凭证) ")):(o(),n("p",Qi," 使用 AWS Bedrock API Keys 生成的 Bearer Token 进行身份验证,更简单、权限范围更小 ")),j.value?(o(),n("p",Hi," 💡 编辑模式下凭证类型不可更改,如需切换类型请重新创建账户 ")):c("",!0)])])])]),a.value.credentialType==="access_key"?(o(),n("div",Ji,[e("div",null,[e("label",Yi,"AWS 访问密钥 ID "+u(j.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[33]||(t[33]=i=>a.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":M.value.accessKeyId}]),placeholder:j.value?"留空则保持原有凭证不变":"请输入 AWS Access Key ID",required:!j.value,type:"text"},null,10,Zi),[[z,a.value.accessKeyId]]),M.value.accessKeyId?(o(),n("p",Xi,u(M.value.accessKeyId),1)):c("",!0),j.value?(o(),n("p",ed," 💡 编辑模式下,留空则保持原有 Access Key ID 不变 ")):c("",!0)]),e("div",null,[e("label",td,"AWS 秘密访问密钥 "+u(j.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[34]||(t[34]=i=>a.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":M.value.secretAccessKey}]),placeholder:j.value?"留空则保持原有凭证不变":"请输入 AWS Secret Access Key",required:!j.value,type:"password"},null,10,ad),[[z,a.value.secretAccessKey]]),M.value.secretAccessKey?(o(),n("p",rd,u(M.value.secretAccessKey),1)):c("",!0),j.value?(o(),n("p",sd," 💡 编辑模式下,留空则保持原有 Secret Access Key 不变 ")):c("",!0)]),e("div",null,[t[243]||(t[243]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"会话令牌 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[35]||(t[35]=i=>a.value.sessionToken=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:j.value?"留空则保持原有 Session Token 不变":"如果使用临时凭证,请输入会话令牌",type:"password"},null,8,ld),[[z,a.value.sessionToken]]),t[244]||(t[244]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 仅在使用临时 AWS 凭证时需要填写 ",-1))])])):c("",!0),a.value.credentialType==="bearer_token"?(o(),n("div",od,[e("label",nd,"Bearer Token "+u(j.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[36]||(t[36]=i=>a.value.bearerToken=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":M.value.bearerToken}]),placeholder:j.value?"留空则保持原有 Bearer Token 不变":"请输入 AWS Bearer Token",required:!j.value,type:"password"},null,10,id),[[z,a.value.bearerToken]]),M.value.bearerToken?(o(),n("p",dd,u(M.value.bearerToken),1)):c("",!0),j.value?(o(),n("p",ud," 💡 编辑模式下,留空则保持原有 Bearer Token 不变 ")):c("",!0),t[245]||(t[245]=e("div",{class:"mt-2 rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/30"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-key mt-0.5 text-green-600 dark:text-green-400"}),e("div",{class:"text-xs text-green-700 dark:text-green-300"},[e("p",{class:"mb-1 font-medium"},"Bearer Token 说明:"),e("ul",{class:"list-inside list-disc space-y-1 text-xs"},[e("li",null,"输入 AWS Bedrock API Keys 生成的 Bearer Token"),e("li",null,"Bearer Token 仅限 Bedrock 服务访问,权限范围更小"),e("li",null,"相比 Access Key 更简单,无需 Secret Key"),e("li",null,[x(" 参考:"),e("a",{class:"text-green-600 underline dark:text-green-400",href:"https://aws.amazon.com/cn/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/",target:"_blank"},"AWS 官方文档")])])])])],-1))])):c("",!0),e("div",null,[t[246]||(t[246]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 区域 *",-1)),b(e("input",{"onUpdate:modelValue":t[37]||(t[37]=i=>a.value.region=i),class: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":M.value.region}]),placeholder:"例如us-east-1",required:"",type:"text"},null,2),[[z,a.value.region]]),M.value.region?(o(),n("p",gd,u(M.value.region),1)):c("",!0),t[247]||(t[247]=e("div",{class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600 dark:text-blue-400"}),e("div",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("p",{class:"mb-1 font-medium"},"常用 AWS 区域参考:"),e("div",{class:"grid grid-cols-2 gap-1 text-xs"},[e("span",null,"• us-east-1 (美国东部)"),e("span",null,"• us-west-2 (美国西部)"),e("span",null,"• eu-west-1 (欧洲爱尔兰)"),e("span",null,"• ap-southeast-1 (新加坡)"),e("span",null,"• ap-northeast-1 (东京)"),e("span",null,"• eu-central-1 (法兰克福)")]),e("p",{class:"mt-2 text-blue-600 dark:text-blue-400"}," 💡 请输入完整的区域代码,如 us-east-1 ")])])],-1))]),e("div",null,[t[248]||(t[248]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"默认主模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[38]||(t[38]=i=>a.value.defaultModel=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[z,a.value.defaultModel]]),t[249]||(t[249]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1)),t[250]||(t[250]=e("div",{class:"mt-2 rounded-lg border border-amber-200 bg-amber-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-amber-600"}),e("div",{class:"text-xs text-amber-700"},[e("p",{class:"mb-1 font-medium"},"Bedrock 模型配置说明:"),e("ul",{class:"list-inside list-disc space-y-1 text-xs"},[e("li",null,"支持 Inference Profile ID推荐"),e("li",null,"支持 Application Inference Profile ARN"),e("li",null,"常用模型us.anthropic.claude-sonnet-4-20250514-v1:0"),e("li",null,"留空将使用系统配置的默认模型")])])])],-1))]),e("div",null,[t[251]||(t[251]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[39]||(t[39]=i=>a.value.smallFastModel=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[z,a.value.smallFastModel]]),t[252]||(t[252]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 用于快速响应的轻量级模型,留空将使用系统默认 ",-1))])])):c("",!0),a.value.platform==="azure_openai"&&!j.value?(o(),n("div",pd,[e("div",null,[t[253]||(t[253]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint *",-1)),b(e("input",{"onUpdate:modelValue":t[40]||(t[40]=i=>a.value.azureEndpoint=i),class: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":M.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",required:"",type:"url"},null,2),[[z,a.value.azureEndpoint]]),M.value.azureEndpoint?(o(),n("p",cd,u(M.value.azureEndpoint),1)):c("",!0),t[254]||(t[254]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI 资源的终结点 URL格式https://your-resource.openai.azure.com ",-1))]),e("div",null,[t[255]||(t[255]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),b(e("input",{"onUpdate:modelValue":t[41]||(t[41]=i=>a.value.apiVersion=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[z,a.value.apiVersion]]),t[256]||(t[256]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI API 版本,默认使用最新稳定版本 2024-02-01 ",-1))]),e("div",null,[t[257]||(t[257]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称 *",-1)),b(e("input",{"onUpdate:modelValue":t[42]||(t[42]=i=>a.value.deploymentName=i),class: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":M.value.deploymentName}]),placeholder:"gpt-4",required:"",type:"text"},null,2),[[z,a.value.deploymentName]]),M.value.deploymentName?(o(),n("p",yd,u(M.value.deploymentName),1)):c("",!0),t[258]||(t[258]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Azure OpenAI Studio 中创建的部署名称 ",-1))]),e("div",null,[t[259]||(t[259]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),b(e("input",{"onUpdate:modelValue":t[43]||(t[43]=i=>a.value.apiKey=i),class: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":M.value.apiKey}]),placeholder:"请输入 Azure OpenAI API Key",required:"",type:"password"},null,2),[[z,a.value.apiKey]]),M.value.apiKey?(o(),n("p",md,u(M.value.apiKey),1)):c("",!0),t[260]||(t[260]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Azure 门户获取的 API 密钥 ",-1))]),e("div",null,[t[261]||(t[261]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",xd,[(o(),n(Ce,null,We(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],i=>e("label",{key:i,class:"flex cursor-pointer items-center"},[b(e("input",{"onUpdate:modelValue":t[44]||(t[44]=ye=>a.value.supportedModels=ye),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,fd),[[ze,a.value.supportedModels]]),e("span",bd,u(i),1)])),64))]),t[262]||(t[262]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 选择此部署支持的模型类型 ",-1))])])):c("",!0),a.value.platform==="bedrock"&&!j.value?(o(),n("div",vd,[e("div",null,[t[267]||(t[267]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",kd,[e("label",hd,[b(e("input",{"onUpdate:modelValue":t[45]||(t[45]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.enableRateLimit]]),t[263]||(t[263]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[264]||(t[264]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",wd,[t[265]||(t[265]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[46]||(t[46]=i=>a.value.rateLimitDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]]),t[266]||(t[266]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):c("",!0)])])):c("",!0),(a.value.platform==="claude-console"||a.value.platform==="ccr")&&!j.value?(o(),n("div",$d,[e("div",null,[t[268]||(t[268]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),b(e("input",{"onUpdate:modelValue":t[47]||(t[47]=i=>a.value.apiUrl=i),class: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":M.value.apiUrl}]),placeholder:"例如https://api.example.com",required:"",type:"text"},null,2),[[z,a.value.apiUrl]]),M.value.apiUrl?(o(),n("p",Ad,u(M.value.apiUrl),1)):c("",!0)]),e("div",null,[t[269]||(t[269]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),b(e("input",{"onUpdate:modelValue":t[48]||(t[48]=i=>a.value.apiKey=i),class: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":M.value.apiKey}]),placeholder:"请输入API Key",required:"",type:"password"},null,2),[[z,a.value.apiKey]]),M.value.apiKey?(o(),n("p",Cd,u(M.value.apiKey),1)):c("",!0)]),e("div",Td,[e("div",null,[t[270]||(t[270]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[49]||(t[49]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[z,a.value.dailyQuota,void 0,{number:!0}]]),t[271]||(t[271]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度0 表示不限制 ",-1))]),e("div",null,[t[272]||(t[272]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[50]||(t[50]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[z,a.value.quotaResetTime]]),t[273]||(t[273]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 每日自动重置额度的时间 ",-1))])]),e("div",null,[t[274]||(t[274]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[51]||(t[51]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[z,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[275]||(t[275]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量0 表示不限制 ",-1))]),e("div",null,[t[283]||(t[283]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",Id,[e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",te.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[52]||(t[52]=i=>te.value="whitelist")},t[276]||(t[276]=[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",te.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[53]||(t[53]=i=>te.value="mapping")},t[277]||(t[277]=[e("i",{class:"fas fa-random mr-2"},null,-1),x(" 模型映射 ",-1)]),2)]),te.value==="whitelist"?(o(),n("div",Ud,[t[278]||(t[278]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",_d,[(o(),n(Ce,null,We(Ge,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"])},[b(e("input",{"onUpdate:modelValue":t[54]||(t[54]=ye=>Ae.value=ye),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,Kd),[[ze,Ae.value]]),e("span",Sd,u(i.label),1)],2)),64))]),e("p",Md,[x(" 已选择 "+u(Ae.value.length)+" 个模型 ",1),Ae.value.length===0?(o(),n("span",Dd,"(支持所有模型)")):c("",!0)])])):(o(),n("div",Pd,[t[282]||(t[282]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 配置模型映射关系。左侧是客户端请求的模型右侧是实际发送给API的模型。 ")])],-1)),e("div",jd,[(o(!0),n(Ce,null,We(De.value,(i,ye)=>(o(),n("div",{key:ye,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":me=>i.from=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,Ld),[[z,i.from]]),t[280]||(t[280]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":me=>i.to=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"映射后的模型名称",type:"text"},null,8,Vd),[[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:me=>mt(ye)},t[279]||(t[279]=[e("i",{class:"fas fa-trash"},null,-1)]),8,zd)]))),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:$a},t[281]||(t[281]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 添加模型映射 ",-1)])),e("div",Rd,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:t[55]||(t[55]=i=>Ve("claude-opus-4-5-20251101","claude-opus-4-5-20251101"))}," + Opus 4.5 "),e("button",{class:"rounded-lg bg-indigo-100 px-3 py-1 text-xs text-indigo-700 transition-colors hover:bg-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-400 dark:hover:bg-indigo-900/50",type:"button",onClick:t[56]||(t[56]=i=>Ve("claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929"))}," + Sonnet 4.5 "),e("button",{class:"rounded-lg bg-emerald-100 px-3 py-1 text-xs text-emerald-700 transition-colors hover:bg-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-900/50",type:"button",onClick:t[57]||(t[57]=i=>Ve("claude-haiku-4-5-20251001","claude-haiku-4-5-20251001"))}," + Haiku 4.5 "),e("button",{class:"rounded-lg bg-cyan-100 px-3 py-1 text-xs text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:hover:bg-cyan-900/50",type:"button",onClick:t[58]||(t[58]=i=>Ve("deepseek-chat","deepseek-chat"))}," + DeepSeek "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:hover:bg-orange-900/50",type:"button",onClick:t[59]||(t[59]=i=>Ve("Qwen","Qwen"))}," + Qwen "),e("button",{class:"rounded-lg bg-pink-100 px-3 py-1 text-xs text-pink-700 transition-colors hover:bg-pink-200 dark:bg-pink-900/30 dark:text-pink-400 dark:hover:bg-pink-900/50",type:"button",onClick:t[60]||(t[60]=i=>Ve("Kimi","Kimi"))}," + Kimi "),e("button",{class:"rounded-lg bg-teal-100 px-3 py-1 text-xs text-teal-700 transition-colors hover:bg-teal-200 dark:bg-teal-900/30 dark:text-teal-400 dark:hover:bg-teal-900/50",type:"button",onClick:t[61]||(t[61]=i=>Ve("GLM","GLM"))}," + GLM "),e("button",{class:"rounded-lg bg-amber-100 px-3 py-1 text-xs text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50",type:"button",onClick:t[62]||(t[62]=i=>Ve("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[284]||(t[284]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[63]||(t[63]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[z,a.value.userAgent]]),t[285]||(t[285]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空时将自动使用客户端的 User-Agent仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[290]||(t[290]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",Od,[e("label",Ed,[b(e("input",{"onUpdate:modelValue":t[64]||(t[64]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.enableRateLimit]]),t[286]||(t[286]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[287]||(t[287]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",Nd,[t[288]||(t[288]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[65]||(t[65]=i=>a.value.rateLimitDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]]),t[289]||(t[289]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):c("",!0)]),a.value.platform==="claude-console"?(o(),n("div",qd,[t[292]||(t[292]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"上游错误处理",-1)),e("label",Wd,[b(e("input",{"onUpdate:modelValue":t[66]||(t[66]=i=>a.value.disableAutoProtection=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.disableAutoProtection]]),t[291]||(t[291]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"}," 上游错误不自动暂停调度 ",-1))]),t[293]||(t[293]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 勾选后遇到 401/400/429/529 等上游错误仅记录日志并透传,不自动禁用或限流 ",-1))])):c("",!0)])):c("",!0),a.value.platform==="openai-responses"&&!j.value?(o(),n("div",Fd,[e("div",null,[t[294]||(t[294]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),b(e("input",{"onUpdate:modelValue":t[67]||(t[67]=i=>a.value.baseApi=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"https://api.example.com/v1",required:"",type:"url"},null,512),[[z,a.value.baseApi]]),t[295]||(t[295]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方 OpenAI 兼容 API 的基础地址,不要包含具体路径 ",-1))]),e("div",null,[t[296]||(t[296]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",Bd,[b(e("input",{"onUpdate:modelValue":t[68]||(t[68]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"sk-xxxxxxxxxxxx",required:"",type:W.value?"text":"password"},null,8,Gd),[[va,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[69]||(t[69]=i=>W.value=!W.value)},[e("i",{class:I(W.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[297]||(t[297]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方服务提供的 API 密钥 ",-1))]),e("div",null,[t[298]||(t[298]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[70]||(t[70]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传原始请求的 User-Agent",type:"text"},null,512),[[z,a.value.userAgent]]),t[299]||(t[299]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可选项。如果设置,所有请求将使用此 User-Agent否则透传客户端的 User-Agent ",-1))]),b(e("input",{"onUpdate:modelValue":t[71]||(t[71]=i=>a.value.rateLimitDuration=i),type:"hidden",value:"60"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]])])):c("",!0),a.value.platform==="gemini-api"&&!j.value?(o(),n("div",Qd,[e("div",null,[t[300]||(t[300]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),b(e("input",{"onUpdate:modelValue":t[72]||(t[72]=i=>a.value.baseUrl=i),class: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":M.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",required:"",type:"url"},null,2),[[z,a.value.baseUrl]]),M.value.baseUrl?(o(),n("p",Hd,u(M.value.baseUrl),1)):c("",!0),t[301]||(t[301]=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[302]||(t[302]=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[303]||(t[303]=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[304]||(t[304]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",Jd,[b(e("input",{"onUpdate:modelValue":t[73]||(t[73]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"AIzaSy...",required:"",type:W.value?"text":"password"},null,8,Yd),[[va,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[74]||(t[74]=i=>W.value=!W.value)},[e("i",{class:I(W.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[305]||(t[305]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Google AI Studio 获取的 API 密钥 ",-1))])])):c("",!0),a.value.platform==="claude"?(o(),n("div",Zd,[t[308]||(t[308]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",Xd,[e("label",e0,[b(e("input",{"onUpdate:modelValue":t[75]||(t[75]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[_e,a.value.subscriptionType]]),t[306]||(t[306]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",t0,[b(e("input",{"onUpdate:modelValue":t[76]||(t[76]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[_e,a.value.subscriptionType]]),t[307]||(t[307]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[309]||(t[309]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):c("",!0),a.value.platform==="claude"?(o(),n("div",a0,[e("label",r0,[b(e("input",{"onUpdate:modelValue":t[77]||(t[77]=i=>a.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.autoStopOnWarning]]),t[310]||(t[310]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 5小时使用量接近限制时自动停止调度 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当系统检测到账户接近5小时使用限制时自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。 ")],-1))])])):c("",!0),a.value.platform==="claude"?(o(),n("div",s0,[e("label",l0,[b(e("input",{"onUpdate:modelValue":t[78]||(t[78]=i=>a.value.serialQueueEnabled=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.serialQueueEnabled]]),t[311]||(t[311]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 启用账户级串行队列 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后强制该账户的用户消息串行处理,忽略全局串行队列设置。适用于并发限制较低的账户。 ")],-1))])])):c("",!0),a.value.platform==="claude"||a.value.platform==="claude-console"?(o(),n("div",o0,[e("label",n0,[b(e("input",{"onUpdate:modelValue":t[79]||(t[79]=i=>a.value.interceptWarmup=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.interceptWarmup]]),t[312]||(t[312]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 拦截预热请求 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后对标题生成、Warmup 等低价值请求直接返回模拟响应,不消耗上游 API 额度 ")],-1))])])):c("",!0),a.value.platform==="claude"?(o(),n("div",i0,[e("label",d0,[b(e("input",{"onUpdate:modelValue":t[80]||(t[80]=i=>a.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.useUnifiedUserAgent]]),e("div",u0,[t[314]||(t[314]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[315]||(t[315]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent提高兼容性 ",-1)),h.value?(o(),n("div",g0,[e("div",p0,[e("p",c0," 💡 当前统一版本:"+u(h.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:fe.value,type:"button",onClick:Ct},[fe.value?(o(),n("div",x0)):(o(),n("i",m0)),x(" "+u(fe.value?"清除中...":"清除缓存"),1)],8,y0)])])):(o(),n("div",f0,t[313]||(t[313]=[e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," ⏳ 等待从 Claude Code 客户端捕获 User-Agent ",-1),e("p",{class:"mt-1 text-xs text-gray-400 dark:text-gray-500"}," 💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户, 或联系开发者检查 User-Agent 格式是否发生变化 ",-1)])))])])])):c("",!0),a.value.platform==="claude"?(o(),n("div",b0,[e("label",v0,[b(e("input",{"onUpdate:modelValue":t[81]||(t[81]=i=>a.value.useUnifiedClientId=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:Aa},null,544),[[ze,a.value.useUnifiedClientId]]),e("div",k0,[t[319]||(t[319]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[320]||(t[320]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),a.value.useUnifiedClientId?(o(),n("div",h0,[e("div",w0,[e("div",{class:"mb-2 flex items-center justify-between"},[t[317]||(t[317]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"客户端标识 ID",-1)),e("button",{class:"rounded-md bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:la},t[316]||(t[316]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x(" 重新生成 ",-1)]))]),e("div",$0,[e("code",A0,[e("span",C0,u(a.value.unifiedClientId.substring(0,8)),1),e("span",T0,u(a.value.unifiedClientId.substring(8,56)),1),e("span",I0,u(a.value.unifiedClientId.substring(56)),1)])]),t[318]||(t[318]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),x(" 此ID将替换请求中的user_id客户端部分保留session部分用于粘性会话 ")],-1))])])):c("",!0)])])])):c("",!0),e("div",null,[t[321]||(t[321]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),b(e("input",{"onUpdate:modelValue":t[82]||(t[82]=i=>a.value.priority=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高默认50",type:"number"},null,512),[[z,a.value.priority,void 0,{number:!0}]]),t[322]||(t[322]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高建议范围1-100 ",-1))]),a.value.addType==="manual"&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"?(o(),n("div",U0,[e("div",_0,[t[327]||(t[327]=e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-info text-sm text-white"})],-1)),e("div",null,[t[326]||(t[326]=e("h5",{class:"mb-2 font-semibold text-blue-900 dark:text-blue-300"}," 手动输入 Token ",-1)),a.value.platform==="claude"?(o(),n("p",K0," 请输入有效的 Claude Access Token。如果您有 Refresh Token建议也一并填写以支持自动刷新。 ")):a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("p",S0," 请输入有效的 Gemini Access Token。如果您有 Refresh Token建议也一并填写以支持自动刷新。 ")):a.value.platform==="openai"?(o(),n("p",M0," 请输入有效的 OpenAI Access Token。如果您有 Refresh Token建议也一并填写以支持自动刷新。 ")):a.value.platform==="droid"?(o(),n("p",D0," 请输入有效的 Droid Access Token并同时提供 Refresh Token 以支持自动刷新。 ")):c("",!0),e("div",P0,[t[325]||(t[325]=e("p",{class:"mb-1 text-sm font-medium text-blue-900 dark:text-blue-300"},[e("i",{class:"fas fa-folder-open mr-1"}),x(" 获取 Access Token 的方法: ")],-1)),a.value.platform==="claude"?(o(),n("p",j0,t[323]||(t[323]=[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)]))):a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("p",L0,t[324]||(t[324]=[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/oauth_creds.json",-1),x(" 文件中的凭证。 ",-1)]))):a.value.platform==="openai"?(o(),n("p",V0," 请从已登录 OpenAI 账户的机器上获取认证凭证, 或通过 OAuth 授权流程获取 Access Token。 ")):a.value.platform==="droid"?(o(),n("p",z0," 请从已完成授权的 Droid CLI 或 Factory.ai 导出的凭证中获取 Access Token 与 Refresh Token。 ")):c("",!0)]),a.value.platform!=="droid"?(o(),n("p",R0," 💡 如果未填写 Refresh TokenToken 过期后需要手动更新。 ")):(o(),n("p",O0," ⚠️ Droid 账户必须填写 Refresh Token缺失将导致无法自动刷新 Access Token。 "))])]),a.value.platform==="openai"?(o(),n("div",E0,[t[328]||(t[328]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[83]||(t[83]=i=>a.value.accessToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"可选:如果不填写,系统会自动通过 Refresh Token 获取...",rows:"4"},null,512),[[z,a.value.accessToken]]),t[329]||(t[329]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。 ")],-1))])):(o(),n("div",N0,[t[330]||(t[330]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token *",-1)),b(e("textarea",{"onUpdate:modelValue":t[84]||(t[84]=i=>a.value.accessToken=i),class: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":M.value.accessToken}]),placeholder:"请输入 Access Token...",required:"",rows:"4"},null,2),[[z,a.value.accessToken]]),M.value.accessToken?(o(),n("p",q0,u(M.value.accessToken),1)):c("",!0)])),a.value.platform==="openai"||a.value.platform==="droid"?(o(),n("div",W0,[t[332]||(t[332]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token *",-1)),b(e("textarea",{"onUpdate:modelValue":t[85]||(t[85]=i=>a.value.refreshToken=i),class: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":M.value.refreshToken}]),placeholder:"请输入 Refresh Token必填...",required:"",rows:"4"},null,2),[[z,a.value.refreshToken]]),M.value.refreshToken?(o(),n("p",F0,u(M.value.refreshToken),1)):c("",!0),e("p",B0,[t[331]||(t[331]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),a.value.platform==="openai"?(o(),n(Ce,{key:0},[x(" 系统将使用 Refresh Token 自动获取 Access Token 和用户信息 ")],64)):(o(),n(Ce,{key:1},[x(" 系统将使用 Refresh Token 自动刷新 Factory.ai 访问令牌,确保账户保持可用。 ")],64))])])):(o(),n("div",G0,[t[333]||(t[333]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[86]||(t[86]=i=>a.value.refreshToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"请输入 Refresh Token...",rows:"4"},null,512),[[z,a.value.refreshToken]])])),a.value.platform==="droid"?(o(),n("div",Q0,[t[334]||(t[334]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[87]||(t[87]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[z,a.value.userAgent]]),t[335]||(t[335]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))])):c("",!0)])):c("",!0),a.value.addType==="apikey"&&a.value.platform==="droid"?(o(),n("div",H0,[t[340]||(t[340]=e("div",{class:"mb-4 flex items-start gap-3"},[e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-purple-500"},[e("i",{class:"fas fa-key text-sm text-white"})]),e("div",null,[e("h5",{class:"mb-2 font-semibold text-purple-900 dark:text-purple-200"}," 使用 API Key 调度 Droid "),e("p",{class:"text-sm text-purple-800 dark:text-purple-200"}," 请填写一个或多个 Factory.ai API Key系统会自动在请求时随机挑选并结合会话哈希维持粘性确保对话上下文保持稳定。 ")])],-1)),e("div",null,[t[336]||(t[336]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 列表 *",-1)),b(e("textarea",{"onUpdate:modelValue":t[88]||(t[88]=i=>a.value.apiKeysInput=i),class: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":M.value.apiKeys}]),placeholder:"每行一个 API Key可粘贴多行",required:"",rows:"6"},null,2),[[z,a.value.apiKeysInput]]),M.value.apiKeys?(o(),n("p",J0,u(M.value.apiKeys),1)):c("",!0),t[337]||(t[337]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 建议为每条 Key 提供独立额度;系统会自动去重并忽略空白行。 ")],-1))]),e("div",null,[t[338]||(t[338]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[89]||(t[89]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[z,a.value.userAgent]]),t[339]||(t[339]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))]),t[341]||(t[341]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-random mr-1"}),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))])):c("",!0),Ee(rr,{modelValue:a.value.proxy,"onUpdate:modelValue":t[90]||(t[90]=i=>a.value.proxy=i)},null,8,["modelValue"]),e("div",Y0,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[91]||(t[91]=i=>d.$emit("close"))}," 取消 "),(a.value.addType==="oauth"||a.value.addType==="setup-token")&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"&&a.value.platform!=="gemini-api"?(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:J.value,type:"button",onClick:Qe}," 下一步 ",8,Z0)):(o(),n("button",{key:1,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:J.value,type:"button",onClick:qt},[J.value?(o(),n("div",eu)):c("",!0),x(" "+u(J.value?"创建中...":"创建"),1)],8,X0))])])])):c("",!0),pe.value===2&&a.value.addType==="oauth"?(o(),Ye(ql,{key:2,ref_key:"oauthFlowRef",ref:Z,platform:a.value.platform,proxy:a.value.proxy,onBack:t[92]||(t[92]=i=>pe.value=1),onSuccess:$t},null,8,["platform","proxy"])):c("",!0),pe.value===2&&a.value.addType==="setup-token"?(o(),n("div",tu,[a.value.platform==="claude"?(o(),n("div",au,[e("div",ru,[e("div",su,[t[363]||(t[363]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-key text-white"})],-1)),e("div",lu,[t[362]||(t[362]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"}," Claude Setup Token 授权 ",-1)),e("div",ou,[t[344]||(t[344]=e("p",{class:"mb-3 text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式: ",-1)),e("div",nu,[e("label",iu,[b(e("input",{"onUpdate:modelValue":t[93]||(t[93]=i=>_.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"manual",onChange:Lt},null,544),[[_e,_.value]]),t[342]||(t[342]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-link mr-1"}),x("手动授权 ")],-1))]),e("label",du,[b(e("input",{"onUpdate:modelValue":t[94]||(t[94]=i=>_.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"cookie",onChange:Lt},null,544),[[_e,_.value]]),t[343]||(t[343]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-cookie mr-1"}),x("Cookie 自动授权 ")],-1))])])]),_.value==="manual"?(o(),n("div",uu,[t[353]||(t[353]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤通过 Setup Token 完成 Claude 账户的授权: ",-1)),e("div",gu,[e("div",pu,[t[347]||(t[347]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",cu,[t[346]||(t[346]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),g.value?(o(),n("div",fu,[e("div",bu,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:g.value},null,8,vu),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:Et},[e("i",{class:I(ce.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:yt},t[345]||(t[345]=[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:O.value,onClick:it},[O.value?(o(),n("div",xu)):(o(),n("i",mu)),x(" "+u(O.value?"生成中...":"生成 Setup Token 授权链接"),1)],8,yu))])])]),t[354]||(t[354]=e("div",{class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},[e("div",{class:"flex items-start gap-3"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 2 "),e("div",{class:"flex-1"},[e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 在浏览器中打开链接并完成授权 "),e("p",{class:"mb-2 text-sm text-blue-700 dark:text-blue-300"}," 请在新标签页中打开授权链接,登录您的 Claude 账户并授权 Claude Code。 "),e("div",{class:"rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"},[e("p",{class:"text-xs text-yellow-800 dark:text-yellow-300"},[e("i",{class:"fas fa-exclamation-triangle mr-1"}),e("strong",null,"注意:"),x("如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 ")])])])])],-1)),e("div",ku,[e("div",hu,[t[352]||(t[352]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",wu,[t[350]||(t[350]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),t[351]||(t[351]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 授权完成后,从返回页面复制 Authorization Code并粘贴到下方输入框 ",-1)),e("div",$u,[e("div",null,[t[348]||(t[348]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),x("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":t[95]||(t[95]=i=>D.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,D.value]])]),t[349]||(t[349]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 请粘贴从Claude Code授权页面复制的Authorization Code ")],-1))])])])])])):c("",!0),_.value==="cookie"?(o(),n("div",Au,[t[360]||(t[360]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 使用 sessionKey 自动完成授权,无需手动打开链接。 ",-1)),e("div",Cu,[e("div",Tu,[e("div",null,[e("label",Iu,[t[355]||(t[355]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),t[356]||(t[356]=x("sessionKey ",-1)),S.value>1?(o(),n("span",Uu,u(S.value)+" 个 ",1)):c("",!0)]),b(e("textarea",{"onUpdate:modelValue":t[96]||(t[96]=i=>Q.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":Ke.value}]),placeholder:`每行一个 sessionKey例如
sk-ant-sid01-xxxxx...
sk-ant-sid01-yyyyy...`,rows:"3"},null,2),[[z,Q.value]]),S.value>1?(o(),n("p",_u,[t[357]||(t[357]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),x(" 将批量创建 "+u(S.value)+" 个账户 ",1)])):c("",!0),Ke.value?(o(),n("p",Ku,u(Ke.value),1)):c("",!0)]),e("div",null,[e("button",{class:"flex items-center text-xs text-blue-600 hover:text-blue-700",type:"button",onClick:t[97]||(t[97]=i=>F.value=!F.value)},[e("i",{class:I(F.value?"fas fa-chevron-down mr-1":"fas fa-chevron-right mr-1")},null,2),t[358]||(t[358]=x(" 如何获取 sessionKey ",-1))]),F.value?(o(),n("div",Su,t[359]||(t[359]=[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)]))):c("",!0)]),e("button",{class:"btn btn-primary w-full px-4 py-3",disabled:we.value||!Q.value.trim(),type:"button",onClick:kt},[we.value?(o(),n("div",Du)):(o(),n("i",Pu)),we.value&&ee.value.total>1?(o(),n(Ce,{key:2},[x(" 正在授权 "+u(ee.value.current)+"/"+u(ee.value.total)+"... ",1)],64)):we.value?(o(),n(Ce,{key:3},[x(" 授权中... ")],64)):(o(),n(Ce,{key:4},[x(" 开始自动授权 ")],64))],8,Mu)])]),t[361]||(t[361]=e("div",{class:"rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"},[e("p",{class:"text-xs text-yellow-800 dark:text-yellow-300"},[e("i",{class:"fas fa-exclamation-triangle mr-1"}),e("strong",null,"提示:"),x("如果您设置了代理Cookie授权也会使用相同的代理配置。 ")])],-1))])):c("",!0)])])])])):c("",!0),e("div",ju,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[98]||(t[98]=i=>pe.value=1)}," 上一步 "),_.value==="manual"?(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!pt.value||y.value,type:"button",onClick:Nt},[y.value?(o(),n("div",Vu)):c("",!0),x(" "+u(y.value?"验证中...":"完成授权"),1)],8,Lu)):c("",!0)])])):c("",!0),j.value?(o(),n("div",zu,[e("div",null,[t[364]||(t[364]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),b(e("input",{"onUpdate:modelValue":t[99]||(t[99]=i=>a.value.name=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,512),[[z,a.value.name]])]),e("div",null,[t[365]||(t[365]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[100]||(t[100]=i=>a.value.description=i),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[z,a.value.description]])]),e("div",null,[t[369]||(t[369]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",Ru,[e("label",Ou,[b(e("input",{"onUpdate:modelValue":t[101]||(t[101]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[_e,a.value.accountType]]),t[366]||(t[366]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",Eu,[b(e("input",{"onUpdate:modelValue":t[102]||(t[102]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[_e,a.value.accountType]]),t[367]||(t[367]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",Nu,[b(e("input",{"onUpdate:modelValue":t[103]||(t[103]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[_e,a.value.accountType]]),t[368]||(t[368]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[370]||(t[370]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户供所有API Key使用专属账户仅供特定API Key使用分组调度加入分组供分组内调度 ",-1))]),j.value?c("",!0):(o(),n("div",qu,[t[374]||(t[374]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",Wu,[b(e("select",{"onUpdate:modelValue":t[104]||(t[104]=i=>a.value.expireDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:gt},t[371]||(t[371]=[e("option",{value:""},"永不过期",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[Ja,a.value.expireDuration]]),a.value.expireDuration==="custom"?(o(),n("div",Fu,[b(e("input",{"onUpdate:modelValue":t[105]||(t[105]=i=>a.value.customExpireDate=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Ca.value,type:"datetime-local",onChange:oa},null,40,Bu),[[z,a.value.customExpireDate]])])):c("",!0),a.value.expiresAt?(o(),n("p",Gu,[t[372]||(t[372]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),x(" 将于 "+u(Ta(a.value.expiresAt))+" 过期 ",1)])):(o(),n("p",Qu,t[373]||(t[373]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),x(" 账户永不过期 ",-1)])))]),t[375]||(t[375]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])),a.value.accountType==="group"?(o(),n("div",Hu,[t[377]||(t[377]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",Ju,[e("div",Yu,[e("div",Zu,[Ft.value.length===0?(o(),n("div",Xu," 暂无可用分组 ")):c("",!0),(o(!0),n(Ce,null,We(Ft.value,i=>(o(),n("label",{key:i.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[b(e("input",{"onUpdate:modelValue":t[106]||(t[106]=ye=>a.value.groupIds=ye),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,eg),[[ze,a.value.groupIds]]),e("span",tg,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:Vt},t[376]||(t[376]=[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:Gt},[e("i",{class:I(["fas fa-sync-alt",{"animate-spin":Wt.value}])},null,2)])])])):c("",!0),a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("div",ag,[t[378]||(t[378]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[107]||(t[107]=i=>a.value.projectId=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如verdant-wares-464411-k9",type:"text"},null,512),[[z,a.value.projectId]]),t[379]||(t[379]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," Google Cloud/Workspace 账号可能需要提供项目 ID ",-1))])):c("",!0),a.value.platform==="claude"?(o(),n("div",rg,[t[382]||(t[382]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",sg,[e("label",lg,[b(e("input",{"onUpdate:modelValue":t[108]||(t[108]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[_e,a.value.subscriptionType]]),t[380]||(t[380]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",og,[b(e("input",{"onUpdate:modelValue":t[109]||(t[109]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[_e,a.value.subscriptionType]]),t[381]||(t[381]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[383]||(t[383]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):c("",!0),a.value.platform==="claude"?(o(),n("div",ng,[e("label",ig,[b(e("input",{"onUpdate:modelValue":t[110]||(t[110]=i=>a.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.autoStopOnWarning]]),t[384]||(t[384]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 5小时使用量接近限制时自动停止调度 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当系统检测到账户接近5小时使用限制时自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。 ")],-1))])])):c("",!0),a.value.platform==="claude"?(o(),n("div",dg,[e("label",ug,[b(e("input",{"onUpdate:modelValue":t[111]||(t[111]=i=>a.value.serialQueueEnabled=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.serialQueueEnabled]]),t[385]||(t[385]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 启用账户级串行队列 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后强制该账户的用户消息串行处理,忽略全局串行队列设置。适用于并发限制较低的账户。 ")],-1))])])):c("",!0),a.value.platform==="claude"||a.value.platform==="claude-console"?(o(),n("div",gg,[e("label",pg,[b(e("input",{"onUpdate:modelValue":t[112]||(t[112]=i=>a.value.interceptWarmup=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.interceptWarmup]]),t[386]||(t[386]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 拦截预热请求 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后对标题生成、Warmup 等低价值请求直接返回模拟响应,不消耗上游 API 额度 ")],-1))])])):c("",!0),a.value.platform==="claude"?(o(),n("div",cg,[e("label",yg,[b(e("input",{"onUpdate:modelValue":t[113]||(t[113]=i=>a.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.useUnifiedUserAgent]]),e("div",mg,[t[388]||(t[388]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[389]||(t[389]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent提高兼容性 ",-1)),h.value?(o(),n("div",xg,[e("div",fg,[e("p",bg," 💡 当前统一版本:"+u(h.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:fe.value,type:"button",onClick:Ct},[fe.value?(o(),n("div",hg)):(o(),n("i",kg)),x(" "+u(fe.value?"清除中...":"清除缓存"),1)],8,vg)])])):(o(),n("div",wg,t[387]||(t[387]=[e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," ⏳ 等待从 Claude Code 客户端捕获 User-Agent ",-1),e("p",{class:"mt-1 text-xs text-gray-400 dark:text-gray-500"}," 💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户, 或联系开发者检查 User-Agent 格式是否发生变化 ",-1)])))])])])):c("",!0),a.value.platform==="claude"?(o(),n("div",$g,[e("label",Ag,[b(e("input",{"onUpdate:modelValue":t[114]||(t[114]=i=>a.value.useUnifiedClientId=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:Aa},null,544),[[ze,a.value.useUnifiedClientId]]),e("div",Cg,[t[393]||(t[393]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[394]||(t[394]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),a.value.useUnifiedClientId?(o(),n("div",Tg,[e("div",Ig,[e("div",{class:"mb-2 flex items-center justify-between"},[t[391]||(t[391]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"客户端标识 ID",-1)),e("button",{class:"rounded-md bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:la},t[390]||(t[390]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x(" 重新生成 ",-1)]))]),e("div",Ug,[e("code",_g,[e("span",Kg,u(a.value.unifiedClientId.substring(0,8)),1),e("span",Sg,u(a.value.unifiedClientId.substring(8,56)),1),e("span",Mg,u(a.value.unifiedClientId.substring(56)),1)])]),t[392]||(t[392]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),x(" 此ID将替换请求中的user_id客户端部分保留session部分用于粘性会话 ")],-1))])])):c("",!0)])])])):c("",!0),e("div",null,[t[395]||(t[395]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),b(e("input",{"onUpdate:modelValue":t[115]||(t[115]=i=>a.value.priority=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高",type:"number"},null,512),[[z,a.value.priority,void 0,{number:!0}]]),t[396]||(t[396]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高建议范围1-100 ",-1))]),a.value.platform==="claude-console"||a.value.platform==="ccr"?(o(),n("div",Dg,[e("div",null,[t[397]||(t[397]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API URL",-1)),b(e("input",{"onUpdate:modelValue":t[116]||(t[116]=i=>a.value.apiUrl=i),class:"form-input w-full",placeholder:"例如https://api.example.com",required:"",type:"text"},null,512),[[z,a.value.apiUrl]])]),e("div",null,[t[398]||(t[398]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":t[117]||(t[117]=i=>a.value.apiKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[z,a.value.apiKey]]),t[399]||(t[399]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",Pg,[e("div",null,[t[400]||(t[400]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[118]||(t[118]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[z,a.value.dailyQuota,void 0,{number:!0}]]),t[401]||(t[401]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度0 表示不限制 ",-1))]),e("div",null,[t[402]||(t[402]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[119]||(t[119]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[z,a.value.quotaResetTime]]),t[403]||(t[403]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),j.value&&a.value.dailyQuota>0?(o(),n("div",jg,[e("div",Lg,[t[404]||(t[404]=e("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"}," 今日使用情况 ",-1)),e("span",Vg," $"+u(vt().toFixed(4))+" / $"+u(a.value.dailyQuota.toFixed(2)),1)]),e("div",zg,[e("div",{class:I(["absolute left-0 top-0 h-full rounded-full transition-all",ct.value>=90?"bg-red-500":ct.value>=70?"bg-yellow-500":"bg-green-500"]),style:He({width:`${Math.min(ct.value,100)}%`})},null,6)]),e("div",Rg,[e("span",Og," 剩余: $"+u(Math.max(0,a.value.dailyQuota-vt()).toFixed(2)),1),e("span",Eg,u(ct.value.toFixed(1))+"% 已使用 ",1)])])):c("",!0),e("div",null,[t[405]||(t[405]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[120]||(t[120]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[z,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[406]||(t[406]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量0 表示不限制 ",-1))]),e("div",null,[t[414]||(t[414]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",Ng,[e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",te.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[121]||(t[121]=i=>te.value="whitelist")},t[407]||(t[407]=[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",te.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[122]||(t[122]=i=>te.value="mapping")},t[408]||(t[408]=[e("i",{class:"fas fa-random mr-2"},null,-1),x(" 模型映射 ",-1)]),2)]),te.value==="whitelist"?(o(),n("div",qg,[t[409]||(t[409]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",Wg,[(o(),n(Ce,null,We(Ge,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"])},[b(e("input",{"onUpdate:modelValue":t[123]||(t[123]=ye=>Ae.value=ye),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,Fg),[[ze,Ae.value]]),e("span",Bg,u(i.label),1)],2)),64))]),e("p",Gg,[x(" 已选择 "+u(Ae.value.length)+" 个模型 ",1),Ae.value.length===0?(o(),n("span",Qg,"(支持所有模型)")):c("",!0)])])):(o(),n("div",Hg,[t[413]||(t[413]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 配置模型映射关系。左侧是客户端请求的模型右侧是实际发送给API的模型。 ")])],-1)),e("div",Jg,[(o(!0),n(Ce,null,We(De.value,(i,ye)=>(o(),n("div",{key:ye,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":me=>i.from=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"原始模型名称",type:"text"},null,8,Yg),[[z,i.from]]),t[411]||(t[411]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":me=>i.to=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"映射后的模型名称",type:"text"},null,8,Zg),[[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:me=>mt(ye)},t[410]||(t[410]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Xg)]))),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:$a},t[412]||(t[412]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 添加模型映射 ",-1)])),e("div",ep,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:t[124]||(t[124]=i=>Ve("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),e("button",{class:"rounded-lg bg-indigo-100 px-3 py-1 text-xs text-indigo-700 transition-colors hover:bg-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-400 dark:hover:bg-indigo-900/50",type:"button",onClick:t[125]||(t[125]=i=>Ve("claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929"))}," + Sonnet 4.5 "),e("button",{class:"rounded-lg bg-purple-100 px-3 py-1 text-xs text-purple-700 transition-colors hover:bg-purple-200 dark:bg-purple-900/30 dark:text-purple-400 dark:hover:bg-purple-900/50",type:"button",onClick:t[126]||(t[126]=i=>Ve("claude-opus-4-1-20250805","claude-opus-4-1-20250805"))}," + Opus 4.1 "),e("button",{class:"rounded-lg bg-green-100 px-3 py-1 text-xs text-green-700 transition-colors hover:bg-green-200 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",type:"button",onClick:t[127]||(t[127]=i=>Ve("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),e("button",{class:"rounded-lg bg-emerald-100 px-3 py-1 text-xs text-emerald-700 transition-colors hover:bg-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-900/50",type:"button",onClick:t[128]||(t[128]=i=>Ve("claude-haiku-4-5-20251001","claude-haiku-4-5-20251001"))}," + Haiku 4.5 "),e("button",{class:"rounded-lg bg-cyan-100 px-3 py-1 text-xs text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:hover:bg-cyan-900/50",type:"button",onClick:t[129]||(t[129]=i=>Ve("deepseek-chat","deepseek-chat"))}," + DeepSeek "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:hover:bg-orange-900/50",type:"button",onClick:t[130]||(t[130]=i=>Ve("Qwen","Qwen"))}," + Qwen "),e("button",{class:"rounded-lg bg-pink-100 px-3 py-1 text-xs text-pink-700 transition-colors hover:bg-pink-200 dark:bg-pink-900/30 dark:text-pink-400 dark:hover:bg-pink-900/50",type:"button",onClick:t[131]||(t[131]=i=>Ve("Kimi","Kimi"))}," + Kimi "),e("button",{class:"rounded-lg bg-teal-100 px-3 py-1 text-xs text-teal-700 transition-colors hover:bg-teal-200 dark:bg-teal-900/30 dark:text-teal-400 dark:hover:bg-teal-900/50",type:"button",onClick:t[132]||(t[132]=i=>Ve("GLM","GLM"))}," + GLM "),e("button",{class:"rounded-lg bg-amber-100 px-3 py-1 text-xs text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50",type:"button",onClick:t[133]||(t[133]=i=>Ve("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[415]||(t[415]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[134]||(t[134]=i=>a.value.userAgent=i),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[z,a.value.userAgent]]),t[416]||(t[416]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[421]||(t[421]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",tp,[e("label",ap,[b(e("input",{"onUpdate:modelValue":t[135]||(t[135]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[ze,a.value.enableRateLimit]]),t[417]||(t[417]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[418]||(t[418]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",rp,[t[419]||(t[419]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[136]||(t[136]=i=>a.value.rateLimitDuration=i),class:"form-input w-full",min:"1",type:"number"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]]),t[420]||(t[420]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):c("",!0)]),a.value.platform==="claude-console"?(o(),n("div",sp,[t[423]||(t[423]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 上游错误处理 ",-1)),e("label",lp,[b(e("input",{"onUpdate:modelValue":t[137]||(t[137]=i=>a.value.disableAutoProtection=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.disableAutoProtection]]),t[422]||(t[422]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"}," 上游错误不自动暂停调度 ",-1))]),t[424]||(t[424]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 勾选后遇到 401/400/429/529 等上游错误仅记录日志并透传,不自动禁用或限流 ",-1))])):c("",!0)])):c("",!0),a.value.platform==="openai-responses"?(o(),n("div",op,[e("div",null,[t[425]||(t[425]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 基础地址",-1)),b(e("input",{"onUpdate:modelValue":t[138]||(t[138]=i=>a.value.baseApi=i),class:"form-input w-full",placeholder:"https://api.example.com/v1",type:"url"},null,512),[[z,a.value.baseApi]])]),e("div",null,[t[426]||(t[426]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 密钥",-1)),e("div",np,[b(e("input",{"onUpdate:modelValue":t[139]||(t[139]=i=>a.value.apiKey=i),class:"form-input w-full pr-10",placeholder:"留空表示不更新",type:W.value?"text":"password"},null,8,ip),[[va,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600",type:"button",onClick:t[140]||(t[140]=i=>W.value=!W.value)},[e("i",{class:I(W.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[427]||(t[427]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",null,[t[428]||(t[428]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent",-1)),b(e("input",{"onUpdate:modelValue":t[141]||(t[141]=i=>a.value.userAgent=i),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[z,a.value.userAgent]]),t[429]||(t[429]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent仅在需要固定特定 UA 时填写 ",-1))]),b(e("input",{"onUpdate:modelValue":t[142]||(t[142]=i=>a.value.rateLimitDuration=i),type:"hidden"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]]),e("div",dp,[e("div",null,[t[430]||(t[430]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[143]||(t[143]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[z,a.value.dailyQuota,void 0,{number:!0}]])]),e("div",null,[t[431]||(t[431]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[144]||(t[144]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",type:"time"},null,512),[[z,a.value.quotaResetTime]])])]),e("div",null,[t[432]||(t[432]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[145]||(t[145]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[z,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[433]||(t[433]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量0 表示不限制 ",-1))])])):c("",!0),a.value.platform==="gemini-api"?(o(),n("div",up,[e("div",null,[t[434]||(t[434]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址",-1)),b(e("input",{"onUpdate:modelValue":t[146]||(t[146]=i=>a.value.baseUrl=i),class: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":M.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",type:"url"},null,2),[[z,a.value.baseUrl]]),M.value.baseUrl?(o(),n("p",gp,u(M.value.baseUrl),1)):c("",!0),t[435]||(t[435]=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[436]||(t[436]=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[437]||(t[437]=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[438]||(t[438]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥",-1)),e("div",pp,[b(e("input",{"onUpdate:modelValue":t[147]||(t[147]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"留空表示不更新",type:W.value?"text":"password"},null,8,cp),[[va,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[148]||(t[148]=i=>W.value=!W.value)},[e("i",{class:I(W.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[439]||(t[439]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))])])):c("",!0),a.value.platform==="bedrock"?(o(),n("div",yp,[e("div",null,[t[440]||(t[440]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 访问密钥 ID",-1)),b(e("input",{"onUpdate:modelValue":t[149]||(t[149]=i=>a.value.accessKeyId=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"text"},null,512),[[z,a.value.accessKeyId]]),t[441]||(t[441]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Access Key ID",-1))]),e("div",null,[t[442]||(t[442]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 秘密访问密钥",-1)),b(e("input",{"onUpdate:modelValue":t[150]||(t[150]=i=>a.value.secretAccessKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[z,a.value.secretAccessKey]]),t[443]||(t[443]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Secret Access Key",-1))]),e("div",null,[t[444]||(t[444]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 区域",-1)),b(e("input",{"onUpdate:modelValue":t[151]||(t[151]=i=>a.value.region=i),class:"form-input w-full",placeholder:"例如us-east-1",type:"text"},null,512),[[z,a.value.region]]),t[445]||(t[445]=e("div",{class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600"}),e("div",{class:"text-xs text-blue-700"},[e("p",{class:"mb-1 font-medium"},"常用 AWS 区域参考:"),e("div",{class:"grid grid-cols-2 gap-1 text-xs"},[e("span",null,"• us-east-1 (美国东部)"),e("span",null,"• us-west-2 (美国西部)"),e("span",null,"• eu-west-1 (欧洲爱尔兰)"),e("span",null,"• ap-southeast-1 (新加坡)"),e("span",null,"• ap-northeast-1 (东京)"),e("span",null,"• eu-central-1 (法兰克福)")])])])],-1))]),e("div",null,[t[446]||(t[446]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"会话令牌 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[152]||(t[152]=i=>a.value.sessionToken=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[z,a.value.sessionToken]])]),e("div",null,[t[447]||(t[447]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"默认主模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[153]||(t[153]=i=>a.value.defaultModel=i),class:"form-input w-full",placeholder:"例如us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[z,a.value.defaultModel]]),t[448]||(t[448]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1))]),e("div",null,[t[449]||(t[449]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[154]||(t[154]=i=>a.value.smallFastModel=i),class:"form-input w-full",placeholder:"例如us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[z,a.value.smallFastModel]]),t[450]||(t[450]=e("p",{class:"mt-1 text-xs text-gray-500"},"用于快速响应的轻量级模型,留空将使用系统默认",-1))]),e("div",null,[t[455]||(t[455]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",mp,[e("label",xp,[b(e("input",{"onUpdate:modelValue":t[155]||(t[155]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[ze,a.value.enableRateLimit]]),t[451]||(t[451]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[452]||(t[452]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",fp,[t[453]||(t[453]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[156]||(t[156]=i=>a.value.rateLimitDuration=i),class:"form-input w-full",min:"1",type:"number"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]]),t[454]||(t[454]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):c("",!0)])])):c("",!0),a.value.platform==="azure_openai"?(o(),n("div",bp,[e("div",null,[t[456]||(t[456]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint",-1)),b(e("input",{"onUpdate:modelValue":t[157]||(t[157]=i=>a.value.azureEndpoint=i),class: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":M.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",type:"url"},null,2),[[z,a.value.azureEndpoint]]),M.value.azureEndpoint?(o(),n("p",vp,u(M.value.azureEndpoint),1)):c("",!0)]),e("div",null,[t[457]||(t[457]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),b(e("input",{"onUpdate:modelValue":t[158]||(t[158]=i=>a.value.apiVersion=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[z,a.value.apiVersion]]),t[458]||(t[458]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI API 版本,默认使用最新稳定版本 2024-02-01 ",-1))]),e("div",null,[t[459]||(t[459]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称",-1)),b(e("input",{"onUpdate:modelValue":t[159]||(t[159]=i=>a.value.deploymentName=i),class: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":M.value.deploymentName}]),placeholder:"gpt-4",type:"text"},null,2),[[z,a.value.deploymentName]]),M.value.deploymentName?(o(),n("p",kp,u(M.value.deploymentName),1)):c("",!0)]),e("div",null,[t[460]||(t[460]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":t[160]||(t[160]=i=>a.value.apiKey=i),class: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":M.value.apiKey}]),placeholder:"留空表示不更新",type:"password"},null,2),[[z,a.value.apiKey]]),M.value.apiKey?(o(),n("p",hp,u(M.value.apiKey),1)):c("",!0),t[461]||(t[461]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))]),e("div",null,[t[462]||(t[462]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",wp,[(o(),n(Ce,null,We(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],i=>e("label",{key:i,class:"flex cursor-pointer items-center"},[b(e("input",{"onUpdate:modelValue":t[161]||(t[161]=ye=>a.value.supportedModels=ye),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,$p),[[ze,a.value.supportedModels]]),e("span",Ap,u(i),1)])),64))]),t[463]||(t[463]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"选择此部署支持的模型类型",-1))])])):c("",!0),j.value&&w.value?(o(),n("div",Cp,[e("div",Tp,[t[469]||(t[469]=e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-purple-500"},[e("i",{class:"fas fa-retweet text-sm text-white"})],-1)),e("div",Ip,[e("div",Up,[t[465]||(t[465]=e("h5",{class:"font-semibold text-purple-900 dark:text-purple-200"},"更新 API Key",-1)),e("button",{class:"flex items-center gap-1.5 rounded-lg bg-purple-600 px-3 py-1.5 text-xs font-medium text-white transition-colors hover:bg-purple-700 dark:bg-purple-500 dark:hover:bg-purple-600",type:"button",onClick:t[162]||(t[162]=i=>je.value=!0)},t[464]||(t[464]=[e("i",{class:"fas fa-list-ul"},null,-1),e("span",null,"管理 API Key",-1)]))]),e("p",_p,[t[466]||(t[466]=x(" 当前已保存 ",-1)),e("strong",null,u(Pt.value),1),t[467]||(t[467]=x(" 条 API Key。您可以追加新的 Key或通过下方模式快速覆盖、删除指定 Key。 ",-1))]),t[468]||(t[468]=e("p",{class:"text-xs text-purple-700 dark:text-purple-300"}," 留空表示保留现有 Key 不变;根据所选模式决定是追加、覆盖还是删除输入的 Key。 ",-1))])]),e("div",Kp,[e("div",null,[t[470]||(t[470]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 API Key 列表",-1)),b(e("textarea",{"onUpdate:modelValue":t[163]||(t[163]=i=>a.value.apiKeysInput=i),class: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":M.value.apiKeys}]),placeholder:"根据模式填写;每行一个 API Key",rows:"6"},null,2),[[z,a.value.apiKeysInput]]),M.value.apiKeys?(o(),n("p",Sp,u(M.value.apiKeys),1)):c("",!0)]),e("div",Mp,[e("div",Dp,[t[471]||(t[471]=e("span",{class:"text-sm font-semibold text-purple-800 dark:text-purple-100"},"API Key 更新模式",-1)),e("span",Pp,u(Mt.value),1)]),e("div",jp,[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:He(St.value)},null,4),(o(),n(Ce,null,We(Xe,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",a.value.apiKeyUpdateMode===i.value?"text-white drop-shadow-sm":"text-purple-500/80 hover:text-purple-700 dark:text-purple-200/70 dark:hover:text-purple-100"]),type:"button",onClick:ye=>a.value.apiKeyUpdateMode=i.value},u(i.label),11,Lp)),64))]),e("p",Vp,u(Dt.value),1)]),t[472]||(t[472]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-lightbulb mr-1"}),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))])])):c("",!0),!(j.value&&w.value)&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"?(o(),n("div",zp,[t[475]||(t[475]=e("div",{class:"mb-4 flex items-start gap-3"},[e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-amber-500"},[e("i",{class:"fas fa-key text-sm text-white"})]),e("div",null,[e("h5",{class:"mb-2 font-semibold text-amber-900 dark:text-amber-300"},"更新 Token"),e("p",{class:"mb-2 text-sm text-amber-800 dark:text-amber-300"}," 可以更新 Access Token 和 Refresh Token。为了安全起见不会显示当前的 Token 值。 "),e("p",{class:"text-xs text-amber-600 dark:text-amber-400"},"💡 留空表示不更新该字段。")])],-1)),e("div",Rp,[e("div",null,[t[473]||(t[473]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Access Token",-1)),b(e("textarea",{"onUpdate:modelValue":t[164]||(t[164]=i=>a.value.accessToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[z,a.value.accessToken]])]),e("div",null,[t[474]||(t[474]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Refresh Token",-1)),b(e("textarea",{"onUpdate:modelValue":t[165]||(t[165]=i=>a.value.refreshToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[z,a.value.refreshToken]])])])])):c("",!0),a.value.platform==="droid"?(o(),n("div",Op,[t[476]||(t[476]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[166]||(t[166]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[z,a.value.userAgent]]),t[477]||(t[477]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))])):c("",!0),Ee(rr,{modelValue:a.value.proxy,"onUpdate:modelValue":t[167]||(t[167]=i=>a.value.proxy=i)},null,8,["modelValue"]),e("div",Ep,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[168]||(t[168]=i=>d.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:J.value,type:"button",onClick:dt},[J.value?(o(),n("div",qp)):c("",!0),x(" "+u(J.value?"更新中...":"更新"),1)],8,Np)])])):c("",!0)])])):c("",!0),Ee(kr,{"cancel-text":st(U).cancelText,"confirm-text":st(U).confirmText,message:st(U).message,show:st(V),title:st(U).title,onCancel:st(k),onConfirm:st(v)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),At.value?(o(),Ye(To,{key:1,onClose:t[169]||(t[169]=i=>At.value=!1),onRefresh:ha})):c("",!0),je.value?(o(),Ye(An,{key:2,"account-id":(ie=p.account)==null?void 0:ie.id,"account-name":(ve=p.account)==null?void 0:ve.name,onClose:t[170]||(t[170]=i=>je.value=!1),onRefresh:wa},null,8,["account-id","account-name"])):c("",!0)])}}},cr=ra(Wp,[["__scopeId","data-v-824201c5"]]),Fp={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Bp={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"},Gp={class:"mb-4 flex items-center justify-between sm:mb-6"},Qp={class:"flex items-center gap-2 sm:gap-3"},Hp={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Jp={class:"space-y-6"},Yp={key:0,class:"mt-1 text-xs text-red-500"},Zp={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Xp={key:0,class:"mt-1 text-xs text-red-500"},ec={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},tc=["placeholder","required"],ac={key:0,class:"mt-1 text-xs text-red-500"},rc={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},sc={class:"mb-3"},lc={class:"inline-flex cursor-pointer items-center"},oc={key:0},nc={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},ic={class:"mb-3 space-y-2"},dc=["onUpdate:modelValue"],uc=["onUpdate:modelValue"],gc=["onClick"],pc={class:"mt-2 flex gap-3"},cc=["disabled"],yc={key:0,class:"loading-spinner mr-2"},mc={__name:"CcrAccountForm",props:{account:{type:Object,default:null}},emits:["close","success"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$(!0),V=se(()=>!!p.account),U=$(!1),C=$({name:"",description:"",apiUrl:"",apiKey:"",priority:50,userAgent:"",rateLimitDuration:60,dailyQuota:0,quotaResetTime:"00:00",proxy:null,supportedModels:{}}),v=$(!0),k=$({}),j=$([]),oe=()=>{const y={};for(const g of j.value){const D=(g.from||"").trim(),ce=(g.to||"").trim();D&&ce&&(y[D]=ce)}return y},Z=()=>{j.value.push({from:"",to:""})},pe=y=>{j.value.splice(y,1)},J=()=>{const y={};return(!C.value.name||C.value.name.trim().length===0)&&(y.name="名称不能为空"),(!C.value.apiUrl||C.value.apiUrl.trim().length===0)&&(y.apiUrl="API URL 不能为空"),!V.value&&(!C.value.apiKey||C.value.apiKey.trim().length===0)&&(y.apiKey="API Key 不能为空"),k.value=y,Object.keys(y).length===0},W=async()=>{if(J()){U.value=!0;try{if(V.value){const y={name:C.value.name,description:C.value.description,apiUrl:C.value.apiUrl,priority:C.value.priority,userAgent:C.value.userAgent,rateLimitDuration:v.value?Number(C.value.rateLimitDuration||60):0,dailyQuota:Number(C.value.dailyQuota||0),quotaResetTime:C.value.quotaResetTime||"00:00",proxy:C.value.proxy||null,supportedModels:oe()};C.value.apiKey&&C.value.apiKey.trim().length>0&&(y.apiKey=C.value.apiKey);const g=await G.put(`/admin/ccr-accounts/${p.account.id}`,y);g.success?N("success"):P(g.message||"保存失败","error")}else{const y={name:C.value.name,description:C.value.description,apiUrl:C.value.apiUrl,apiKey:C.value.apiKey,priority:Number(C.value.priority||50),supportedModels:oe(),userAgent:C.value.userAgent,rateLimitDuration:v.value?Number(C.value.rateLimitDuration||60):0,proxy:C.value.proxy,accountType:"shared",dailyQuota:Number(C.value.dailyQuota||0),quotaResetTime:C.value.quotaResetTime||"00:00"},g=await G.post("/admin/ccr-accounts",y);g.success?N("success"):P(g.message||"创建失败","error")}}catch(y){P(y.message||"请求失败","error")}finally{U.value=!1}}},O=()=>{if(!p.account)return;const y=p.account;C.value.name=y.name||"",C.value.description=y.description||"",C.value.apiUrl=y.apiUrl||"",C.value.priority=Number(y.priority||50),C.value.userAgent=y.userAgent||"",C.value.rateLimitDuration=Number(y.rateLimitDuration||60),C.value.dailyQuota=Number(y.dailyQuota||0),C.value.quotaResetTime=y.quotaResetTime||"00:00",C.value.proxy=y.proxy||null,v.value=C.value.rateLimitDuration>0,j.value=[];const g=y.supportedModels||{};if(g&&typeof g=="object")for(const D of Object.keys(g))j.value.push({from:D,to:g[D]})};return aa(()=>{V.value&&O()}),$e(()=>p.account,()=>{V.value&&O()}),(y,g)=>(o(),Ye(Kt,{to:"body"},[K.value?(o(),n("div",Fp,[e("div",Bp,[e("div",Gp,[e("div",Qp,[g[13]||(g[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",Hp,u(V.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:g[0]||(g[0]=D=>y.$emit("close"))},g[14]||(g[14]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",Jp,[e("div",null,[g[15]||(g[15]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称 *",-1)),b(e("input",{"onUpdate:modelValue":g[1]||(g[1]=D=>C.value.name=D),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,C.value.name]]),k.value.name?(o(),n("p",Yp,u(k.value.name),1)):c("",!0)]),e("div",null,[g[16]||(g[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":g[2]||(g[2]=D=>C.value.description=D),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"账户用途说明...",rows:"3"},null,512),[[z,C.value.description]])]),e("div",Zp,[e("div",null,[g[17]||(g[17]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),b(e("input",{"onUpdate:modelValue":g[3]||(g[3]=D=>C.value.apiUrl=D),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,C.value.apiUrl]]),k.value.apiUrl?(o(),n("p",Xp,u(k.value.apiUrl),1)):c("",!0)]),e("div",null,[e("label",ec,"API Key "+u(V.value?"(留空不更新)":"*"),1),b(e("input",{"onUpdate:modelValue":g[4]||(g[4]=D=>C.value.apiKey=D),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:V.value?"留空表示不更新":"必填",required:!V.value,type:"password"},null,10,tc),[[z,C.value.apiKey]]),k.value.apiKey?(o(),n("p",ac,u(k.value.apiKey),1)):c("",!0)])]),e("div",rc,[e("div",null,[g[18]||(g[18]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"优先级",-1)),b(e("input",{"onUpdate:modelValue":g[5]||(g[5]=D=>C.value.priority=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:"100",min:"1",placeholder:"默认50数字越小优先级越高",type:"number"},null,512),[[z,C.value.priority,void 0,{number:!0}]]),g[19]||(g[19]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议范围1-100数字越小优先级越高 ",-1))]),e("div",null,[g[20]||(g[20]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":g[6]||(g[6]=D=>C.value.userAgent=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[z,C.value.userAgent]])])]),e("div",null,[g[24]||(g[24]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",sc,[e("label",lc,[b(e("input",{"onUpdate:modelValue":g[7]||(g[7]=D=>v.value=D),class:"mr-2 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,v.value]]),g[21]||(g[21]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制429 时暂停调度)",-1))])]),v.value?(o(),n("div",oc,[g[22]||(g[22]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":g[8]||(g[8]=D=>C.value.rateLimitDuration=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[z,C.value.rateLimitDuration,void 0,{number:!0}]]),g[23]||(g[23]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):c("",!0)]),e("div",nc,[e("div",null,[g[25]||(g[25]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日额度限制 ($)",-1)),b(e("input",{"onUpdate:modelValue":g[9]||(g[9]=D=>C.value.dailyQuota=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[z,C.value.dailyQuota,void 0,{number:!0}]]),g[26]||(g[26]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度0 表示不限制 ",-1))]),e("div",null,[g[27]||(g[27]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"额度重置时间",-1)),b(e("input",{"onUpdate:modelValue":g[10]||(g[10]=D=>C.value.quotaResetTime=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[z,C.value.quotaResetTime]]),g[28]||(g[28]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),e("div",null,[g[32]||(g[32]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型映射表 (可选)",-1)),g[33]||(g[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",ic,[(o(!0),n(Ce,null,We(j.value,(D,ce)=>(o(),n("div",{key:ce,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":B=>D.from=B,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,dc),[[z,D.from]]),g[30]||(g[30]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":B=>D.to=B,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,uc),[[z,D.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:B=>pe(ce)},g[29]||(g[29]=[e("i",{class:"fas fa-trash"},null,-1)]),8,gc)]))),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:Z},g[31]||(g[31]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 添加模型映射 ",-1)]))]),e("div",null,[Ee(rr,{modelValue:C.value.proxy,"onUpdate:modelValue":g[11]||(g[11]=D=>C.value.proxy=D)},null,8,["modelValue"])]),e("div",pc,[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[12]||(g[12]=D=>y.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:U.value,type:"button",onClick:W},[U.value?(o(),n("div",yc)):c("",!0),x(" "+u(U.value?V.value?"保存中...":"创建中...":V.value?"保存":"创建"),1)],8,cc)])])])])):c("",!0)]))}},yr=ra(mc,[["__scopeId","data-v-2a966370"]]),xc={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},fc={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"},bc={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"},vc={class:"flex flex-1 items-start gap-3"},kc={class:"space-y-1"},hc={class:"flex flex-wrap items-center gap-2"},wc={class:"text-lg font-semibold text-gray-900 dark:text-gray-100 sm:text-xl"},$c={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"},Ac={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"},Cc={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Tc={key:0},Ic={class:"flex-1 overflow-y-auto px-5 py-4 sm:px-6"},Uc={key:0,class:"flex h-[50vh] items-center justify-center"},_c={class:"mb-5 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4"},Kc={class:"flex items-start justify-between"},Sc={class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"},Mc={class:"mt-2 text-xl font-semibold text-gray-900 dark:text-gray-100"},Dc={class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Pc={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gray-50 dark:bg-gray-800"},jc={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},Lc={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"},Vc={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"},zc={class:"flex items-center justify-between"},Rc={class:"font-semibold text-gray-900 dark:text-gray-100"},Oc={class:"mt-2 flex items-center justify-between"},Ec={class:"font-semibold text-gray-900 dark:text-gray-100"},Nc={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},qc={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"},Wc={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"},Fc={class:"flex items-center justify-between"},Bc={class:"font-semibold text-gray-900 dark:text-gray-100"},Gc={class:"mt-2 flex items-center justify-between"},Qc={class:"font-semibold text-gray-900 dark:text-gray-100"},Hc={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Jc={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"},Yc={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"},Zc={class:"flex items-center justify-between"},Xc={class:"font-semibold text-gray-900 dark:text-gray-100"},ey={class:"mt-2 flex items-center justify-between"},ty={class:"font-semibold text-gray-900 dark:text-gray-100"},ay={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},ry={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},sy={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},ly={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},oy={class:"flex items-center justify-between"},ny={class:"font-semibold text-gray-900 dark:text-gray-100"},iy={class:"flex items-center justify-between"},dy={class:"font-semibold text-gray-900 dark:text-gray-100"},uy={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},gy={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},py={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},cy={class:"flex items-center justify-between"},yy={class:"font-semibold text-gray-900 dark:text-gray-100"},my={class:"flex items-center justify-between"},xy={class:"font-semibold text-gray-900 dark:text-gray-100"},fy={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},by={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},vy={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},ky={class:"flex items-center justify-between"},hy={class:"font-semibold text-gray-900 dark:text-gray-100"},wy={class:"flex items-center justify-between"},$y={class:"font-semibold text-gray-900 dark:text-gray-100"},Ay={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Cy={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"},Ty={class:"mb-4 flex flex-wrap items-center justify-between gap-2"},Iy={class:"text-xs text-gray-400 dark:text-gray-500"},Uy={class:"h-[260px] sm:h-[300px]"},_y={__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(H,{emit:Pe}){const p=H,N=Pe,K=Vr(),{isDarkMode:V}=jr(K),U=Lr(),C=$(null);let v=null;const k={claude:"Claude","claude-console":"Claude Console",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid",bedrock:"Claude AWS Bedrock"},j=se(()=>{var S;return k[(S=p.account)==null?void 0:S.platform]||"未知平台"}),oe=se(()=>{var S;return(S=p.account)!=null&&S.accountType?p.account.accountType==="dedicated"?"专属":p.account.accountType==="group"?"分组":"共享":"共享"}),Z=se(()=>({text:V.value?"#e5e7eb":"#374151",grid:V.value?"rgba(75, 85, 99, 0.25)":"rgba(209, 213, 219, 0.4)",cost:"#3b82f6",costFill:"rgba(59, 130, 246, 0.15)",requests:"#f97316"})),pe=se(()=>{var S;return((S=p.summary)==null?void 0:S.totalTokens)||0}),J=se(()=>{var S,h;return((h=(S=p.overview)==null?void 0:S.total)==null?void 0:h.inputTokens)||0}),W=se(()=>{var S,h;return((h=(S=p.overview)==null?void 0:S.total)==null?void 0:h.outputTokens)||0}),O=S=>{const h=Number(S||0);return h>=1e6?`${(h/1e6).toFixed(2)}M`:h>=1e3?`${(h/1e3).toFixed(2)}K`:h.toLocaleString()},y=S=>{const h=Number(S||0);return Number.isNaN(h)?"$0.000000":h>=1?`$${h.toFixed(2)}`:h>=.01?`$${h.toFixed(3)}`:`$${h.toFixed(6)}`},g=S=>Math.round((Number(S)||0)*100)/100,D=S=>{if(!S)return"-";const h=new Date(S);if(Number.isNaN(h.getTime())){const je=S.split("-");return je.length===3?`${je[1]}-${je[2]}`:S}const fe=String(h.getMonth()+1).padStart(2,"0"),le=String(h.getDate()).padStart(2,"0");return`${fe}-${le}`},ce=S=>{if(!S)return"暂无";const h=new Date(S);return Number.isNaN(h.getTime())?S:`${h.getFullYear()}-${String(h.getMonth()+1).padStart(2,"0")}-${String(h.getDate()).padStart(2,"0")} ${String(h.getHours()).padStart(2,"0")}:${String(h.getMinutes()).padStart(2,"0")}`},B=(S,h)=>{if(!S)return 0;const fe=p.history.find(le=>le.date===S);return fe&&fe[h]||0},_=se(()=>{var S,h;return p.generatedAt||((S=p.summary)==null?void 0:S.generatedAt)||((h=p.summary)==null?void 0:h.generated_at)||""}),Q=se(()=>{var S,h,fe,le,je,Y,T,q;return[{key:"totalCost",label:"30天总费用",value:((S=p.summary)==null?void 0:S.totalCostFormatted)||"$0.000000",subtitle:"累计成本",icon:"fa-file-invoice-dollar",iconClass:"text-emerald-500"},{key:"totalRequests",label:"30天总请求",value:O(((h=p.summary)==null?void 0:h.totalRequests)||0),subtitle:"调用次数",icon:"fa-paper-plane",iconClass:"text-blue-500"},{key:"avgCost",label:"日均费用",value:((fe=p.summary)==null?void 0:fe.avgDailyCostFormatted)||y(((le=p.summary)==null?void 0:le.avgDailyCost)||0),subtitle:(je=p.summary)!=null&&je.actualDaysUsed&&((Y=p.summary)==null?void 0:Y.actualDaysUsed)<((T=p.summary)==null?void 0:T.days)?`基于 ${p.summary.actualDaysUsed} 天实际使用`:"平均每日成本",icon:"fa-wave-square",iconClass:"text-purple-500"},{key:"avgRequests",label:"日均请求",value:O(g(((q=p.summary)==null?void 0:q.avgDailyRequests)||0)),subtitle:"平均每日调用",icon:"fa-chart-line",iconClass:"text-orange-500"}]}),we=async()=>{if(await ar(),!p.show||!C.value)return;if(v&&v.destroy(),!p.history||p.history.length===0){v=null;return}const S=p.history.map(le=>le.label),h=p.history.map(le=>le.cost||0),fe=p.history.map(le=>le.requests||0);v=new zr(C.value,{type:"line",data:{labels:S,datasets:[{label:"费用 (USD)",data:h,borderColor:Z.value.cost,backgroundColor:Z.value.costFill,tension:.35,fill:!0,yAxisID:"y"},{label:"请求次数",data:fe,borderColor:Z.value.requests,backgroundColor:"transparent",tension:.35,yAxisID:"y1"}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{labels:{color:Z.value.text}},tooltip:{callbacks:{label(le){return le.dataset.label==="费用 (USD)"?`${le.dataset.label}: ${y(le.parsed.y)}`:`${le.dataset.label}: ${O(le.parsed.y)}`}}}},scales:{x:{ticks:{color:Z.value.text},grid:{color:Z.value.grid}},y:{position:"left",ticks:{color:Z.value.text,callback:le=>y(le)},grid:{color:Z.value.grid}},y1:{position:"right",ticks:{color:Z.value.text,callback:le=>O(le)},grid:{drawOnChartArea:!1}}}}})},Ke=()=>{v&&(v.destroy(),v=null)},F=()=>{Ke(),N("close")},ee=()=>{var S;(S=p.account)!=null&&S.id&&U.push({path:`/accounts/${p.account.id}/usage-records`,query:{platform:p.account.platform||p.account.accountType}})};return $e(()=>p.show,S=>{S&&!p.loading?we():S||Ke()}),$e(()=>p.loading,S=>{!S&&p.show&&we()}),$e(()=>p.history,()=>{p.show&&!p.loading&&we()},{deep:!0}),$e(V,()=>{p.show&&!p.loading&&we()}),Ya(()=>{Ke()}),(S,h)=>{var fe,le,je,Y,T,q,be,ge,de,a,te,Ae,Ge,De,at,lt,Xe,St,Mt,Dt,M,ht,pt,vt,ct,Pt,w,m,E,Qe,it,yt,Et,Nt,kt,jt,Lt,wt,$t,qt,dt;return o(),Ye(Kt,{to:"body"},[H.show?(o(),n("div",xc,[e("div",{class:"absolute inset-0",onClick:F}),e("div",fc,[e("div",bc,[e("div",vc,[h[2]||(h[2]=e("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-indigo-500 text-white shadow-lg"},[e("i",{class:"fas fa-chart-area text-lg"})],-1)),e("div",kc,[e("div",hc,[e("h3",wc,u(((fe=H.account)==null?void 0:fe.name)||((le=H.account)==null?void 0:le.email)||"账号使用详情"),1),(je=H.account)!=null&&je.platform?(o(),n("span",$c,[h[0]||(h[0]=e("i",{class:"fas fa-layer-group mr-1"},null,-1)),x(u(j.value),1)])):c("",!0),(Y=H.account)!=null&&Y.accountType?(o(),n("span",Ac,[h[1]||(h[1]=e("i",{class:"fas fa-user-tag mr-1"},null,-1)),x(u(oe.value),1)])):c("",!0)]),e("p",Cc,[x(" 近 "+u(((T=H.summary)==null?void 0:T.days)||30)+" 天内的费用与请求趋势 ",1),(q=H.summary)!=null&&q.actualDaysUsed&&((be=H.summary)==null?void 0:be.actualDaysUsed)<((ge=H.summary)==null?void 0:ge.days)?(o(),n("span",Tc," (日均基于实际使用 "+u(H.summary.actualDaysUsed)+" 天) ",1)):c("",!0)])])]),e("div",{class:"flex items-center gap-2"},[e("button",{class:"flex items-center gap-2 rounded-full bg-purple-100 px-3 py-2 text-xs font-semibold text-purple-700 transition hover:bg-purple-200 dark:bg-purple-500/10 dark:text-purple-200 dark:hover:bg-purple-500/20",onClick:ee},h[3]||(h[3]=[e("i",{class:"fas fa-clock"},null,-1),x(" 请求时间线 ",-1)])),e("button",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",onClick:F},h[4]||(h[4]=[e("i",{class:"fas fa-times"},null,-1)]))])]),e("div",Ic,[H.loading?(o(),n("div",Uc,h[5]||(h[5]=[e("div",{class:"loading-spinner h-12 w-12 border-4 border-blue-500"},null,-1)]))):(o(),n(Ce,{key:1},[e("div",_c,[(o(!0),n(Ce,null,We(Q.value,et=>(o(),n("div",{key:et.key,class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm transition dark:border-gray-700 dark:bg-gray-900/70"},[e("div",Kc,[e("div",null,[e("p",Sc,u(et.label),1),e("p",Mc,u(et.value),1),e("p",Dc,u(et.subtitle),1)]),e("div",Pc,[e("i",{class:I(["fas",et.icon,et.iconClass])},null,2)])])]))),128))]),e("div",jc,[e("div",Lc,[h[9]||(h[9]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-sun"}),x(" 今日概览 ")],-1)),e("div",Vc,[e("div",zc,[h[6]||(h[6]=e("span",null,"费用",-1)),e("span",Rc,u(((a=(de=H.summary)==null?void 0:de.today)==null?void 0:a.costFormatted)||"$0.000000"),1)]),e("div",Oc,[h[7]||(h[7]=e("span",null,"请求",-1)),e("span",Ec,u(O(((Ae=(te=H.summary)==null?void 0:te.today)==null?void 0:Ae.requests)||0)),1)]),e("div",Nc,[h[8]||(h[8]=e("span",null,"Tokens",-1)),e("span",null,u(O(((De=(Ge=H.summary)==null?void 0:Ge.today)==null?void 0:De.tokens)||0)),1)])])]),e("div",qc,[h[13]||(h[13]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-amber-700 dark:text-amber-300"},[e("i",{class:"fas fa-crown"}),x(" 最高费用日 ")],-1)),e("div",Wc,[e("div",Fc,[h[10]||(h[10]=e("span",null,"日期",-1)),e("span",Bc,u(D((lt=(at=H.summary)==null?void 0:at.highestCostDay)==null?void 0:lt.date)),1)]),e("div",Gc,[h[11]||(h[11]=e("span",null,"费用",-1)),e("span",Qc,u(((St=(Xe=H.summary)==null?void 0:Xe.highestCostDay)==null?void 0:St.formattedCost)||"$0.000000"),1)]),e("div",Hc,[h[12]||(h[12]=e("span",null,"请求",-1)),e("span",null,u(O(B((Dt=(Mt=H.summary)==null?void 0:Mt.highestCostDay)==null?void 0:Dt.date,"requests"))),1)])])]),e("div",Jc,[h[17]||(h[17]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-emerald-700 dark:text-emerald-300"},[e("i",{class:"fas fa-chart-bar"}),x(" 最高请求日 ")],-1)),e("div",Yc,[e("div",Zc,[h[14]||(h[14]=e("span",null,"日期",-1)),e("span",Xc,u(D((ht=(M=H.summary)==null?void 0:M.highestRequestDay)==null?void 0:ht.date)),1)]),e("div",ey,[h[15]||(h[15]=e("span",null,"请求",-1)),e("span",ty,u(O(((vt=(pt=H.summary)==null?void 0:pt.highestRequestDay)==null?void 0:vt.requests)||0)),1)]),e("div",ay,[h[16]||(h[16]=e("span",null,"费用",-1)),e("span",null,u(y(B((Pt=(ct=H.summary)==null?void 0:ct.highestRequestDay)==null?void 0:Pt.date,"cost"))),1)])])])]),e("div",ry,[e("div",sy,[h[21]||(h[21]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-database mr-2 text-indigo-500"}),x(" 累计 Token ")],-1)),e("div",ly,[e("div",oy,[h[18]||(h[18]=e("span",null,"30天总计",-1)),e("span",ny,u(O(pe.value)),1)]),e("div",iy,[h[19]||(h[19]=e("span",null,"日均 Token",-1)),e("span",dy,u(O(Math.round(((w=H.summary)==null?void 0:w.avgDailyTokens)||0))),1)]),e("div",uy,[h[20]||(h[20]=e("span",null,"输入 / 输出",-1)),e("span",null,u(O(J.value))+" / "+u(O(W.value)),1)])])]),e("div",gy,[h[25]||(h[25]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-tachometer-alt mr-2 text-purple-500"}),x(" 平均速率 ")],-1)),e("div",py,[e("div",cy,[h[22]||(h[22]=e("span",null,"RPM",-1)),e("span",yy,u(((E=(m=H.overview)==null?void 0:m.averages)==null?void 0:E.rpm)??0),1)]),e("div",my,[h[23]||(h[23]=e("span",null,"TPM",-1)),e("span",xy,u(((it=(Qe=H.overview)==null?void 0:Qe.averages)==null?void 0:it.tpm)??0),1)]),e("div",fy,[h[24]||(h[24]=e("span",null,"日均请求 / Token",-1)),e("span",null,u(O(Math.round((((Et=(yt=H.overview)==null?void 0:yt.averages)==null?void 0:Et.dailyRequests)||0)*100)/100))+" / "+u(O(Math.round((((kt=(Nt=H.overview)==null?void 0:Nt.averages)==null?void 0:kt.dailyTokens)||0)*100)/100)),1)])])]),e("div",by,[h[29]||(h[29]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-layer-group mr-2 text-teal-500"}),x(" 最近统计 ")],-1)),e("div",vy,[e("div",ky,[h[26]||(h[26]=e("span",null,"今日请求",-1)),e("span",hy,u(O(((Lt=(jt=H.overview)==null?void 0:jt.daily)==null?void 0:Lt.requests)||0)),1)]),e("div",wy,[h[27]||(h[27]=e("span",null,"今日 Token",-1)),e("span",$y,u(O((($t=(wt=H.overview)==null?void 0:wt.daily)==null?void 0:$t.allTokens)||0)),1)]),e("div",Ay,[h[28]||(h[28]=e("span",null,"今日费用",-1)),e("span",null,u(y(((dt=(qt=H.overview)==null?void 0:qt.daily)==null?void 0:dt.cost)||0)),1)])])])]),e("div",Cy,[e("div",Ty,[h[30]||(h[30]=e("h4",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-line mr-2 text-blue-500"}),x(" 30天费用与请求趋势 ")],-1)),e("span",Iy," 最新更新时间:"+u(ce(_.value)),1)]),e("div",Uy,[e("canvas",{ref_key:"chartCanvas",ref:C,class:"h-full w-full"},null,512)])])],64))])])])):c("",!0)])}}},Ky=ra(_y,[["__scopeId","data-v-f40122f9"]]),Sy={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},My={class:"modal-content relative mx-auto w-full max-w-lg p-8"},Dy={class:"mb-6 flex items-center justify-between"},Py={class:"flex items-center gap-3"},jy={class:"text-sm text-gray-600 dark:text-gray-400"},Ly={class:"space-y-6"},Vy={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"},zy={class:"flex items-center justify-between"},Ry={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},Oy={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},Ey={class:"mb-3 grid grid-cols-3 gap-2"},Ny=["onClick"],qy={key:0,class:"animate-fadeIn"},Wy=["min"],Fy={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"},By={class:"flex items-center justify-between"},Gy={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},Qy={class:"flex gap-3 pt-2"},Hy=["disabled"],Jy={key:0,class:"loading-spinner mr-2"},Yy={key:1,class:"fas fa-save mr-2"},Zy={__name:"AccountExpiryEditModal",props:{show:{type:Boolean,required:!0},account:{type:Object,required:!0}},emits:["close","save"],setup(H,{expose:Pe,emit:p}){const N=H,K=p,V=$(!1),U=vr({expireDuration:"",customExpireDate:"",expiresAt:null}),C=[{value:"",label:"永不过期"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],v=se(()=>{const y=new Date;return y.setMinutes(y.getMinutes()+1),y.toISOString().slice(0,16)});$e(()=>N.show,y=>{y&&k()}),$e(()=>{var y;return(y=N.account)==null?void 0:y.id},y=>{y&&N.show&&k()});const k=()=>{V.value=!1,N.account.expiresAt?(U.expireDuration="custom",U.customExpireDate=new Date(N.account.expiresAt).toISOString().slice(0,16),U.expiresAt=N.account.expiresAt):(U.expireDuration="",U.customExpireDate="",U.expiresAt=null)},j=y=>{if(U.expireDuration=y,!y){U.expiresAt=null;return}if(y==="custom")return;const g=new Date,D=y.match(/(\d+)([dhmy])/);if(D){const[,ce,B]=D,_=parseInt(ce);switch(B){case"d":g.setDate(g.getDate()+_);break;case"h":g.setHours(g.getHours()+_);break;case"m":g.setMonth(g.getMonth()+_);break;case"y":g.setFullYear(g.getFullYear()+_);break}U.expiresAt=g.toISOString()}},oe=()=>{if(U.customExpireDate)try{const[y,g]=U.customExpireDate.split("T"),[D,ce,B]=y.split("-").map(Number),[_,Q]=g.split(":").map(Number),we=new Date(D,ce-1,B,_,Q,0,0);if(isNaN(we.getTime())){console.error("Invalid date:",U.customExpireDate);return}U.expiresAt=we.toISOString()}catch(y){console.error("Failed to parse custom expire date:",y)}},Z=y=>y?new Date(y).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",pe=y=>y?new Date(y)<new Date:!1,J=y=>{if(!y)return null;const g=new Date,ce=new Date(y)-g,B=Math.ceil(ce/(1e3*60*60*24));return ce<0?{text:"已过期",class:"text-red-600"}:B<=7?{text:`${B} 天后过期`,class:"text-orange-600"}:B<=30?{text:`${B} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(B/30)} 个月后过期`,class:"text-green-600"}},W=()=>{V.value=!0,K("save",{accountId:N.account.id,expiresAt:U.expiresAt})};return Pe({resetSaving:()=>{V.value=!1}}),(y,g)=>(o(),Ye(Kt,{to:"body"},[H.show?(o(),n("div",Sy,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:g[0]||(g[0]=D=>y.$emit("close"))}),e("div",My,[e("div",Dy,[e("div",Py,[g[6]||(g[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,[g[5]||(g[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改到期时间",-1)),e("p",jy,' 为 "'+u(H.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:g[1]||(g[1]=D=>y.$emit("close"))},g[7]||(g[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Ly,[e("div",Vy,[e("div",zy,[e("div",null,[g[10]||(g[10]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",Ry,[H.account.expiresAt?(o(),n(Ce,{key:0},[x(u(Z(H.account.expiresAt))+" ",1),J(H.account.expiresAt)?(o(),n("span",{key:0,class:I(["ml-2 text-xs font-normal",J(H.account.expiresAt).class])}," ("+u(J(H.account.expiresAt).text)+") ",3)):c("",!0)],64)):(o(),n(Ce,{key:1},[g[8]||(g[8]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),g[9]||(g[9]=x(" 永不过期 ",-1))],64))])]),e("div",Oy,[e("i",{class:I(["fas fa-hourglass-half text-lg",H.account.expiresAt&&pe(H.account.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),e("div",null,[g[12]||(g[12]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",Ey,[(o(),n(Ce,null,We(C,D=>e("button",{key:D.value,class:I(["rounded-lg px-3 py-2 text-sm font-medium transition-all",U.expireDuration===D.value?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:ce=>j(D.value)},u(D.label),11,Ny)),64)),e("button",{class:I(["rounded-lg px-3 py-2 text-sm font-medium transition-all",U.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:g[2]||(g[2]=D=>j("custom"))},g[11]||(g[11]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),x(" 自定义 ",-1)]),2)])]),U.expireDuration==="custom"?(o(),n("div",qy,[g[13]||(g[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),b(e("input",{"onUpdate:modelValue":g[3]||(g[3]=D=>U.customExpireDate=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:v.value,type:"datetime-local",onChange:oe},null,40,Wy),[[z,U.customExpireDate]]),g[14]||(g[14]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为到期时间 ",-1))])):c("",!0),U.expiresAt!==H.account.expiresAt?(o(),n("div",Fy,[e("div",By,[e("div",null,[g[17]||(g[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",Gy,[U.expiresAt?(o(),n(Ce,{key:0},[x(u(Z(U.expiresAt))+" ",1),J(U.expiresAt)?(o(),n("span",{key:0,class:I(["ml-2 text-xs font-normal",J(U.expiresAt).class])}," ("+u(J(U.expiresAt).text)+") ",3)):c("",!0)],64)):(o(),n(Ce,{key:1},[g[15]||(g[15]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),g[16]||(g[16]=x(" 永不过期 ",-1))],64))])]),g[18]||(g[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))])])):c("",!0),e("div",Qy,[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:g[4]||(g[4]=D=>y.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:V.value||U.expiresAt===H.account.expiresAt,onClick:W},[V.value?(o(),n("div",Jy)):(o(),n("i",Yy)),x(" "+u(V.value?"保存中...":"保存更改"),1)],8,Hy)])])])])):c("",!0)]))}},Xy=ra(Zy,[["__scopeId","data-v-f19e4a71"]]),em={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},tm={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"},am={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"},rm={class:"flex items-center gap-3"},sm={class:"text-xs text-gray-500 dark:text-gray-400"},lm=["disabled"],om={class:"px-5 py-4"},nm={class:"mb-4 space-y-2"},im={class:"flex items-center justify-between text-sm"},dm={key:0,class:"flex items-center justify-between text-sm"},um={class:"flex items-center justify-between text-sm"},gm={class:"font-medium text-gray-700 dark:text-gray-300"},pm={class:"flex items-center gap-3"},cm={class:"text-xs text-gray-500 dark:text-gray-400"},ym={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"},mm={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"},xm={key:0,class:"text-xs text-gray-500 dark:text-gray-500"},fm={class:"max-h-40 overflow-y-auto p-3"},bm={key:0,class:"whitespace-pre-wrap text-sm text-gray-700 dark:text-gray-300"},vm={key:0,class:"inline-block h-4 w-1 animate-pulse bg-blue-500"},km={key:1,class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},hm={key:2,class:"text-sm text-red-600 dark:text-red-400"},wm={key:1,class:"mb-4 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-gray-400"},$m={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"},Am=["disabled"],Cm=["disabled"],Tm={__name:"AccountTestModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:null}},emits:["close"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$("idle"),V=$(""),U=$(""),C=$(0),v=$(null),k=$(null),j=$("claude-sonnet-4-5-20250929"),oe=se(()=>{if(!p.account)return"未知";const S=p.account.platform;return S==="claude"?"Claude OAuth":S==="claude-console"?"Claude Console":S==="bedrock"?"AWS Bedrock":S}),Z=se(()=>{if(!p.account)return"fas fa-question";const S=p.account.platform;return S==="claude"||S==="claude-console"||S==="bedrock"?"fas fa-brain":"fas fa-robot"}),pe=se(()=>{if(!p.account)return"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300";const S=p.account.platform;return S==="claude"?"bg-indigo-100 text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300":S==="claude-console"?"bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300":S==="bedrock"?"bg-orange-100 text-orange-700 dark:bg-orange-500/20 dark:text-orange-300":"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300"}),J=se(()=>{if(!p.account||p.account.platform!=="bedrock")return"";const S=p.account.credentialType;return S==="access_key"?"Access Key":S==="bearer_token"?"Bearer Token":"Unknown"}),W=se(()=>{if(!p.account||p.account.platform!=="bedrock")return"";const S=p.account.credentialType;return S==="access_key"?"fas fa-key":S==="bearer_token"?"fas fa-ticket":"fas fa-question"}),O=se(()=>{if(!p.account||p.account.platform!=="bedrock")return"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300";const S=p.account.credentialType;return S==="access_key"?"bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300":S==="bearer_token"?"bg-green-100 text-green-700 dark:bg-green-500/20 dark:text-green-300":"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300"}),y=se(()=>{switch(K.value){case"idle":return"准备就绪";case"testing":return"正在测试...";case"success":return"测试成功";case"error":return"测试失败";default:return"未知状态"}}),g=se(()=>{switch(K.value){case"idle":return"点击下方按钮开始测试账户连通性";case"testing":return"正在发送测试请求并等待响应";case"success":return"账户可以正常访问 Claude API";case"error":return U.value||"无法连接到 Claude API";default:return""}}),D=se(()=>{switch(K.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"}}),ce=se(()=>{switch(K.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"}}),B=se(()=>{switch(K.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"}}),_=se(()=>{switch(K.value){case"idle":return"text-gray-500 dark:text-gray-400";case"testing":return"text-blue-500 dark:text-blue-400";case"success":return"text-green-500 dark:text-green-400";case"error":return"text-red-500 dark:text-red-400";default:return"text-gray-500 dark:text-gray-400"}}),Q=se(()=>{switch(K.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 we(){if(!p.account)return"";const S=p.account.platform;return S==="claude"?`${ka}/admin/claude-accounts/${p.account.id}/test`:S==="claude-console"?`${ka}/admin/claude-console-accounts/${p.account.id}/test`:S==="bedrock"?`${ka}/admin/bedrock-accounts/${p.account.id}/test`:""}async function Ke(){if(!p.account)return;K.value="testing",V.value="",U.value="",C.value=0,v.value=Date.now(),k.value&&k.value.close();const S=we();if(!S){K.value="error",U.value="不支持的账户类型";return}try{const h=localStorage.getItem("authToken"),fe=await fetch(S,{method:"POST",headers:{"Content-Type":"application/json",Authorization:h?`Bearer ${h}`:""},body:JSON.stringify({model:j.value})});if(!fe.ok){const T=await fe.json().catch(()=>({}));throw new Error(T.message||`HTTP ${fe.status}`)}const le=fe.body.getReader(),je=new TextDecoder;let Y=!1;for(;!Y;){const{done:T,value:q}=await le.read();if(T){Y=!0;continue}const ge=je.decode(q).split(`
`);for(const de of ge)if(de.startsWith("data: "))try{const a=JSON.parse(de.substring(6));F(a)}catch{}}}catch(h){K.value="error",U.value=h.message||"连接失败",C.value=Date.now()-v.value}}function F(S){switch(S.type){case"test_start":break;case"content":V.value+=S.text;break;case"message_stop":break;case"test_complete":C.value=Date.now()-v.value,S.success?K.value="success":(K.value="error",U.value=S.error||"测试失败");break;case"error":K.value="error",U.value=S.error||"未知错误",C.value=Date.now()-v.value;break}}function ee(){K.value!=="testing"&&(k.value&&(k.value.close(),k.value=null),K.value="idle",V.value="",U.value="",C.value=0,N("close"))}return $e(()=>p.show,S=>{var h;S&&(K.value="idle",V.value="",U.value="",C.value=0,((h=p.account)==null?void 0:h.platform)==="bedrock"?p.account.credentialType==="bearer_token"?j.value="us.anthropic.claude-sonnet-4-5-20250929-v1:0":j.value="us.anthropic.claude-3-5-haiku-20241022-v1:0":j.value="claude-sonnet-4-5-20250929")}),Ya(()=>{k.value&&k.value.close()}),(S,h)=>{var fe,le;return o(),Ye(Kt,{to:"body"},[H.show?(o(),n("div",em,[e("div",{class:"absolute inset-0",onClick:ee}),e("div",tm,[e("div",am,[e("div",rm,[e("div",{class:I(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl text-white shadow-lg",K.value==="success"?"bg-gradient-to-br from-green-500 to-emerald-500":K.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",K.value==="idle"?"fa-vial":K.value==="testing"?"fa-spinner fa-spin":K.value==="success"?"fa-check":"fa-times"])},null,2)],2),e("div",null,[h[0]||(h[0]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},"账户连通性测试",-1)),e("p",sm,u(((fe=H.account)==null?void 0:fe.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:K.value==="testing",onClick:ee},h[1]||(h[1]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,lm)]),e("div",om,[e("div",nm,[e("div",im,[h[2]||(h[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",pe.value])},[e("i",{class:I(Z.value)},null,2),x(" "+u(oe.value),1)],2)]),((le=p.account)==null?void 0:le.platform)==="bedrock"?(o(),n("div",dm,[h[3]||(h[3]=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",O.value])},[e("i",{class:I(W.value)},null,2),x(" "+u(J.value),1)],2)])):c("",!0),e("div",um,[h[4]||(h[4]=e("span",{class:"text-gray-500 dark:text-gray-400"},"测试模型",-1)),e("span",gm,u(j.value),1)])]),e("div",{class:I(["mb-4 rounded-xl border p-4 transition-all duration-300",D.value])},[e("div",pm,[e("div",{class:I(["flex h-8 w-8 items-center justify-center rounded-lg",ce.value])},[e("i",{class:I(["fas text-sm",B.value,_.value])},null,2)],2),e("div",null,[e("p",{class:I(["font-medium",Q.value])},u(y.value),3),e("p",cm,u(g.value),1)])])],2),K.value!=="idle"?(o(),n("div",ym,[e("div",mm,[h[5]||(h[5]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"AI 响应",-1)),V.value?(o(),n("span",xm,u(V.value.length)+" 字符 ",1)):c("",!0)]),e("div",fm,[V.value?(o(),n("p",bm,[x(u(V.value)+" ",1),K.value==="testing"?(o(),n("span",vm)):c("",!0)])):K.value==="testing"?(o(),n("p",km,h[6]||(h[6]=[e("i",{class:"fas fa-circle-notch fa-spin"},null,-1),x(" 等待响应中... ",-1)]))):K.value==="error"&&U.value?(o(),n("p",hm,u(U.value),1)):c("",!0)])])):c("",!0),C.value>0?(o(),n("div",wm,[h[7]||(h[7]=e("i",{class:"fas fa-clock"},null,-1)),e("span",null,"耗时 "+u((C.value/1e3).toFixed(2))+" 秒",1)])):c("",!0)]),e("div",$m,[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:K.value==="testing",onClick:ee}," 关闭 ",8,Am),e("button",{class:I(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",K.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:K.value==="testing",onClick:Ke},[e("i",{class:I(["fas",K.value==="testing"?"fa-spinner fa-spin":"fa-play"])},null,2),x(" "+u(K.value==="testing"?"测试中...":K.value==="idle"?"开始测试":"重新测试"),1)],10,Cm)])])])):c("",!0)])}}},Im={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Um={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"},_m={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"},Km={class:"flex items-center gap-3"},Sm={class:"text-xs text-gray-500 dark:text-gray-400"},Mm=["disabled"],Dm={class:"px-5 py-4"},Pm={key:0,class:"flex items-center justify-center py-8"},jm={class:"mb-5 flex items-center justify-between"},Lm={class:"mb-5"},Vm=["disabled"],zm={class:"mb-5"},Rm={class:"flex flex-wrap gap-2"},Om=["disabled","onClick"],Em={class:"mb-5"},Nm=["disabled"],qm={class:"mt-2 flex flex-wrap gap-2"},Wm=["disabled","onClick"],Fm={key:0,class:"mb-4"},Bm={class:"max-h-40 space-y-2 overflow-y-auto rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Gm={class:"flex items-center gap-2"},Qm={class:"text-gray-600 dark:text-gray-400"},Hm={key:0,class:"text-gray-500 dark:text-gray-500"},Jm=["title"],Ym={key:1,class:"mb-4 rounded-lg border border-gray-200 bg-gray-50 p-4 text-center text-sm text-gray-500 dark:border-gray-700 dark:bg-gray-800/50 dark:text-gray-400"},Zm={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"},Xm=["disabled"],ex=["disabled"],tx={__name:"AccountScheduledTestModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:null}},emits:["close","saved"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$(!1),V=$(!1),U=$({enabled:!1,cronExpression:"0 8 * * *",model:"claude-sonnet-4-5-20250929"}),C=$([]),v=[{label:"每天 8:00",value:"0 8 * * *"},{label:"每天 12:00",value:"0 12 * * *"},{label:"每天 18:00",value:"0 18 * * *"},{label:"每6小时",value:"0 */6 * * *"},{label:"每12小时",value:"0 */12 * * *"},{label:"工作日 9:00",value:"0 9 * * 1-5"}],k=[{label:"Claude Sonnet 4.5",value:"claude-sonnet-4-5-20250929"},{label:"Claude Haiku 4.5",value:"claude-haiku-4-5-20251001"},{label:"Claude Opus 4.5",value:"claude-opus-4-5-20251101"}];function j(J){return J?new Date(J).toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"未知"}async function oe(){var J,W;if(p.account){K.value=!0;try{const O=localStorage.getItem("authToken"),y=p.account.platform;let g="";if(y==="claude")g=`${ka}/admin/claude-accounts/${p.account.id}/test-config`;else{K.value=!1;return}const D=await fetch(g,{headers:{Authorization:O?`Bearer ${O}`:""}});if(D.ok){const _=await D.json();_.success&&((J=_.data)!=null&&J.config)&&(U.value={enabled:_.data.config.enabled||!1,cronExpression:_.data.config.cronExpression||"0 8 * * *",model:_.data.config.model||"claude-sonnet-4-5-20250929"})}const ce=g.replace("/test-config","/test-history"),B=await fetch(ce,{headers:{Authorization:O?`Bearer ${O}`:""}});if(B.ok){const _=await B.json();_.success&&((W=_.data)!=null&&W.history)&&(C.value=_.data.history)}}catch(O){P("加载配置失败: "+O.message,"error")}finally{K.value=!1}}}async function Z(){if(p.account){V.value=!0;try{const J=localStorage.getItem("authToken"),W=p.account.platform;let O="";if(W==="claude")O=`${ka}/admin/claude-accounts/${p.account.id}/test-config`;else{V.value=!1;return}const y=await fetch(O,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:J?`Bearer ${J}`:""},body:JSON.stringify({enabled:U.value.enabled,cronExpression:U.value.cronExpression,model:U.value.model})});if(y.ok)P("配置已保存","success"),N("saved"),pe();else{const g=await y.json().catch(()=>({}));P(g.message||"保存失败","error")}}catch(J){P("保存失败: "+J.message,"error")}finally{V.value=!1}}}function pe(){V.value||N("close")}return $e(()=>p.show,J=>{J&&(U.value={enabled:!1,cronExpression:"0 8 * * *",model:"claude-sonnet-4-5-20250929"},C.value=[],oe())}),(J,W)=>{var O;return o(),Ye(Kt,{to:"body"},[H.show?(o(),n("div",Im,[e("div",{class:"absolute inset-0",onClick:pe}),e("div",Um,[e("div",_m,[e("div",Km,[W[4]||(W[4]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-500 text-white shadow-lg"},[e("i",{class:"fas fa-clock"})],-1)),e("div",null,[W[3]||(W[3]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},"定时测试配置",-1)),e("p",Sm,u(((O=H.account)==null?void 0:O.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:V.value,onClick:pe},W[5]||(W[5]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,Mm)]),e("div",Dm,[K.value?(o(),n("div",Pm,W[6]||(W[6]=[e("i",{class:"fas fa-spinner fa-spin mr-2 text-blue-500"},null,-1),e("span",{class:"text-gray-500 dark:text-gray-400"},"加载配置中...",-1)]))):(o(),n(Ce,{key:1},[e("div",jm,[W[7]||(W[7]=e("div",null,[e("p",{class:"font-medium text-gray-700 dark:text-gray-300"},"启用定时测试"),e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"按计划自动测试账户连通性")],-1)),e("button",{class:I(["relative h-6 w-11 rounded-full transition-colors duration-200",U.value.enabled?"bg-green-500":"bg-gray-300 dark:bg-gray-600"]),onClick:W[0]||(W[0]=y=>U.value.enabled=!U.value.enabled)},[e("span",{class:I(["absolute top-0.5 h-5 w-5 rounded-full bg-white shadow-md transition-transform duration-200",U.value.enabled?"left-5":"left-0.5"])},null,2)],2)]),e("div",Lm,[W[8]||(W[8]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," Cron 表达式 ",-1)),b(e("input",{"onUpdate:modelValue":W[1]||(W[1]=y=>U.value.cronExpression=y),class:"w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm text-gray-700 placeholder-gray-400 transition focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:placeholder-gray-500",disabled:!U.value.enabled,placeholder:"0 8 * * *",type:"text"},null,8,Vm),[[z,U.value.cronExpression]]),W[9]||(W[9]=e("p",{class:"mt-1.5 text-xs text-gray-500 dark:text-gray-400"},' 格式: 分 时 日 月 周 (例: "0 8 * * *" = 每天8:00) ',-1))]),e("div",zm,[W[10]||(W[10]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 快捷设置 ",-1)),e("div",Rm,[(o(),n(Ce,null,We(v,y=>e("button",{key:y.value,class:I(["rounded-lg border px-3 py-1.5 text-xs font-medium transition",U.value.cronExpression===y.value?"border-blue-500 bg-blue-50 text-blue-700 dark:border-blue-400 dark:bg-blue-900/30 dark:text-blue-300":"border-gray-200 bg-gray-50 text-gray-600 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700",!U.value.enabled&&"cursor-not-allowed opacity-50"]),disabled:!U.value.enabled,onClick:g=>U.value.cronExpression=y.value},u(y.label),11,Om)),64))])]),e("div",Em,[W[11]||(W[11]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 测试模型 ",-1)),b(e("input",{"onUpdate:modelValue":W[2]||(W[2]=y=>U.value.model=y),class:"w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm text-gray-700 placeholder-gray-400 transition focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:placeholder-gray-500",disabled:!U.value.enabled,placeholder:"claude-sonnet-4-5-20250929",type:"text"},null,8,Nm),[[z,U.value.model]]),e("div",qm,[(o(),n(Ce,null,We(k,y=>e("button",{key:y.value,class:I(["rounded-lg border px-3 py-1.5 text-xs font-medium transition",U.value.model===y.value?"border-blue-500 bg-blue-50 text-blue-700 dark:border-blue-400 dark:bg-blue-900/30 dark:text-blue-300":"border-gray-200 bg-gray-50 text-gray-600 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700",!U.value.enabled&&"cursor-not-allowed opacity-50"]),disabled:!U.value.enabled,onClick:g=>U.value.model=y.value},u(y.label),11,Wm)),64))])]),C.value.length>0?(o(),n("div",Fm,[W[12]||(W[12]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最近测试记录 ",-1)),e("div",Bm,[(o(!0),n(Ce,null,We(C.value,(y,g)=>(o(),n("div",{key:g,class:"flex items-center justify-between text-xs"},[e("div",Gm,[e("i",{class:I(["fas",y.success?"fa-check-circle text-green-500":"fa-times-circle text-red-500"])},null,2),e("span",Qm,u(j(y.timestamp)),1)]),y.latencyMs?(o(),n("span",Hm,u(y.latencyMs)+"ms ",1)):y.error?(o(),n("span",{key:1,class:"max-w-[150px] truncate text-red-500",title:y.error},u(y.error),9,Jm)):c("",!0)]))),128))])])):(o(),n("div",Ym,W[13]||(W[13]=[e("i",{class:"fas fa-history mb-2 text-2xl text-gray-300 dark:text-gray-600"},null,-1),e("p",null,"暂无测试记录",-1)])))],64))]),e("div",Zm,[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:V.value,onClick:pe}," 取消 ",8,Xm),e("button",{class:I(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",V.value?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:V.value||K.value,onClick:Z},[e("i",{class:I(["fas",V.value?"fa-spinner fa-spin":"fa-save"])},null,2),x(" "+u(V.value?"保存中...":"保存配置"),1)],10,ex)])])])):c("",!0)])}}},ax={class:"min-w-[200px] space-y-1"},rx={key:0,class:"flex items-center gap-2"},sx={key:1,class:"flex items-center gap-2"},lx={class:"text-xs text-red-600 dark:text-red-400"},ox=["disabled"],nx={key:2,class:"space-y-1"},ix={key:0,class:"text-xs text-red-500"},dx={class:"flex items-center justify-between gap-2"},ux={class:"flex items-center gap-2"},gx={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},px=["disabled","title"],cx={key:1,class:"space-y-2"},yx={class:"flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},mx={class:"space-y-1"},xx=["title"],fx={class:"flex w-[94px] flex-col gap-0.5"},bx={class:"h-1.5 w-full rounded-full bg-gray-200 dark:bg-gray-600"},vx={class:"flex items-center justify-between text-[11px] text-gray-500 dark:text-gray-300"},kx={key:0,class:"text-gray-400 dark:text-gray-400"},hx={key:2,class:"space-y-1"},wx={class:"flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},$x={class:"h-1.5 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Ax={class:"flex items-center justify-between text-xs"},Cx={class:"text-gray-500 dark:text-gray-400"},Tx={key:0,class:"text-gray-400 dark:text-gray-500"},Ix={key:3,class:"flex items-center gap-2"},Ux={key:4,class:"text-xs text-gray-400 dark:text-gray-500"},_x={key:3,class:"text-xs text-gray-400 dark:text-gray-500"},mr={__name:"BalanceDisplay",props:{accountId:{type:String,required:!0},platform:{type:String,required:!0},initialBalance:{type:Object,default:null},hideRefresh:{type:Boolean,default:!1},autoLoad:{type:Boolean,default:!0},queryMode:{type:String,default:"local"}},emits:["refreshed","error"],setup(H,{expose:Pe,emit:p}){const N=H,K=p,V=$(N.initialBalance),U=$(!1),C=$(!1),v=$(null),k=se(()=>{var ee;const F=(ee=V.value)==null?void 0:ee.source;return{"bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-300":F==="api","bg-gray-100 text-gray-600 dark:bg-gray-700/60 dark:text-gray-300":F==="cache","bg-yellow-100 text-yellow-700 dark:bg-yellow-900/40 dark:text-yellow-300":F==="local"}}),j=se(()=>{var ee;const F=(ee=V.value)==null?void 0:ee.source;return{api:"API",cache:"缓存",local:"本地"}[F]||"未知"}),oe=se(()=>{var ee;const F=(ee=V.value)==null?void 0:ee.quota;return!F||F.unlimited||typeof F.percentage!="number"||!Number.isFinite(F.percentage)?null:{used:F.used??0,remaining:F.remaining??0,percentage:F.percentage,resetAt:F.resetAt||null}}),Z=se(()=>{var F,ee;return((ee=(F=V.value)==null?void 0:F.quota)==null?void 0:ee.type)==="antigravity"}),pe=se(()=>{var le,je;if(!Z.value)return[];const F=(je=(le=V.value)==null?void 0:le.quota)==null?void 0:je.buckets,ee=Array.isArray(F)?F:[],S=new Map(ee.map(Y=>[Y==null?void 0:Y.category,Y])),h=["Gemini Pro","Claude","Gemini Flash","Gemini Image"],fe={"Gemini Pro":{dotClass:"bg-blue-500",barClass:"bg-blue-500 dark:bg-blue-400"},Claude:{dotClass:"bg-purple-500",barClass:"bg-purple-500 dark:bg-purple-400"},"Gemini Flash":{dotClass:"bg-cyan-500",barClass:"bg-cyan-500 dark:bg-cyan-400"},"Gemini Image":{dotClass:"bg-emerald-500",barClass:"bg-emerald-500 dark:bg-emerald-400"}};return h.map(Y=>{var ge,de;const T=S.get(Y)||null,q=T==null?void 0:T.remaining,be=Number.isFinite(Number(q))?Math.max(0,Math.min(100,Number(q))):null;return{category:Y,remainingPercent:be,remainingText:be===null?"—":`${Math.round(be)}%`,resetAt:(T==null?void 0:T.resetAt)||null,dotClass:((ge=fe[Y])==null?void 0:ge.dotClass)||"bg-gray-400",barClass:((de=fe[Y])==null?void 0:de.barClass)||"bg-gray-400"}})}),J=se(()=>{var ee;const F=((ee=oe.value)==null?void 0:ee.percentage)||0;return F>=90?"bg-red-500 dark:bg-red-600":F>=70?"bg-yellow-500 dark:bg-yellow-600":"bg-green-500 dark:bg-green-600"}),W=se(()=>{if(N.queryMode==="api"||N.queryMode==="auto")return!0;const F=V.value;return!F||F.scriptEnabled===!1?!1:!!F.scriptConfigured}),O=se(()=>{var F;return C.value?"刷新中...":W.value?Z.value?"刷新配额(调用 Antigravity API":"刷新余额(调用脚本配置的余额 API":((F=V.value)==null?void 0:F.scriptEnabled)===!1?"余额脚本功能已禁用":"请先配置余额脚本"}),y=se(()=>{var ee,S,h,fe;if((S=(ee=V.value)==null?void 0:ee.balance)!=null&&S.formattedAmount)return V.value.balance.formattedAmount;const F=Number(((fe=(h=V.value)==null?void 0:h.statistics)==null?void 0:fe.dailyCost)||0);return`今日成本 ${Q(F)}`}),g=async()=>{if(N.autoLoad&&!(!N.accountId||!N.platform)){U.value=!0,v.value=null;try{const F=await G.get(`/admin/accounts/${N.accountId}/balance`,{params:{platform:N.platform,queryApi:N.queryMode==="api"?!0:N.queryMode==="auto"?"auto":!1}});F!=null&&F.success?V.value=F.data:v.value=(F==null?void 0:F.error)||"加载失败"}catch(F){v.value=F.message||"网络错误",K("error",F)}finally{U.value=!1}}},D=async()=>{if(!(!N.accountId||!N.platform)&&!C.value&&W.value){C.value=!0,v.value=null;try{const F=await G.post(`/admin/accounts/${N.accountId}/balance/refresh`,{platform:N.platform});F!=null&&F.success?(V.value=F.data,K("refreshed",F.data)):v.value=(F==null?void 0:F.error)||"刷新失败"}catch(F){v.value=F.message||"网络错误",K("error",F)}finally{C.value=!1}}},ce=async()=>{await g()},B=F=>{if(F===1/0)return"∞";const ee=Number(F);return Number.isFinite(ee)?ee.toLocaleString("zh-CN",{maximumFractionDigits:2}):"N/A"},_=F=>{if(F===1/0)return"∞";const ee=Number(F);return Number.isFinite(ee)?Z.value?`${Math.round(ee)}%`:B(ee):"N/A"},Q=F=>{const ee=Number(F);return Number.isFinite(ee)?ee>=1?`$${ee.toFixed(2)}`:ee>=.01?`$${ee.toFixed(3)}`:`$${ee.toFixed(6)}`:"$0.00"},we=F=>{const ee=new Date(F),S=new Date,h=ee.getTime()-S.getTime();if(!Number.isFinite(h))return"未知";if(h<0)return"已过期";const fe=Math.floor(h/(1e3*60)),le=Math.floor(fe/60),je=fe%60;return le>=24?`${Math.floor(le/24)}天后`:`${le}小时${je}分钟`},Ke=F=>{const ee=new Date(F);return Number.isNaN(ee.getTime())?"未知":ee.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"})};return $e(()=>N.initialBalance,F=>{F&&(V.value=F)}),aa(()=>{N.initialBalance||g()}),Pe({refresh:D,reload:ce}),(F,ee)=>{var S;return o(),n("div",ax,[U.value?(o(),n("div",rx,ee[0]||(ee[0]=[e("i",{class:"fas fa-spinner fa-spin text-gray-400 dark:text-gray-500"},null,-1),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):v.value?(o(),n("div",sx,[ee[1]||(ee[1]=e("i",{class:"fas fa-exclamation-circle text-red-500"},null,-1)),e("span",lx,u(v.value),1),e("button",{class:"text-xs text-blue-500 hover:text-blue-600 dark:text-blue-400",disabled:C.value,onClick:ce}," 重试 ",8,ox)])):V.value?(o(),n("div",nx,[V.value.status==="error"&&V.value.error?(o(),n("div",ix,u(V.value.error),1)):c("",!0),e("div",dx,[e("div",ux,[e("i",{class:I(["fas",V.value.balance?"fa-wallet text-green-600 dark:text-green-400":"fa-chart-line text-gray-500 dark:text-gray-400"])},null,2),e("span",gx,u(y.value),1),e("span",{class:I(["rounded px-1.5 py-0.5 text-xs",k.value])},u(j.value),3)]),H.hideRefresh?c("",!0):(o(),n("button",{key:0,class:"text-xs text-gray-500 hover:text-blue-600 disabled:cursor-not-allowed disabled:opacity-40 dark:text-gray-400 dark:hover:text-blue-400",disabled:C.value||!W.value,title:O.value,onClick:D},[e("i",{class:I(["fas fa-sync-alt",{"fa-spin":C.value}])},null,2)],8,px))]),oe.value&&Z.value?(o(),n("div",cx,[e("div",yx,[ee[2]||(ee[2]=e("span",null,"剩余",-1)),e("span",null,u(_(oe.value.remaining)),1)]),e("div",mx,[(o(!0),n(Ce,null,We(pe.value,h=>(o(),n("div",{key:h.category,class:"flex items-center gap-2 rounded-md bg-gray-50 px-2 py-1.5 dark:bg-gray-700/60"},[e("span",{class:I(["h-2 w-2 shrink-0 rounded-full",h.dotClass])},null,2),e("span",{class:"min-w-0 flex-1 truncate text-xs font-medium text-gray-800 dark:text-gray-100",title:h.category},u(h.category),9,xx),e("div",fx,[e("div",bx,[e("div",{class:I(["h-1.5 rounded-full transition-all",h.barClass]),style:He({width:`${h.remainingPercent??0}%`})},null,6)]),e("div",vx,[e("span",null,u(h.remainingText),1),h.resetAt?(o(),n("span",kx,u(we(h.resetAt)),1)):c("",!0)])])]))),128))])])):oe.value?(o(),n("div",hx,[e("div",wx,[e("span",null,"已用: "+u(_(oe.value.used)),1),e("span",null,"剩余: "+u(_(oe.value.remaining)),1)]),e("div",$x,[e("div",{class:I(["h-1.5 rounded-full transition-all",J.value]),style:He({width:`${Math.min(100,oe.value.percentage)}%`})},null,6)]),e("div",Ax,[e("span",Cx,u(oe.value.percentage.toFixed(1))+"% 已使用 ",1),oe.value.resetAt?(o(),n("span",Tx," 重置: "+u(we(oe.value.resetAt)),1)):c("",!0)])])):(S=V.value.quota)!=null&&S.unlimited?(o(),n("div",Ix,ee[3]||(ee[3]=[e("i",{class:"fas fa-infinity text-blue-500 dark:text-blue-400"},null,-1),e("span",{class:"text-xs text-gray-600 dark:text-gray-400"},"无限制",-1)]))):c("",!0),V.value.cacheExpiresAt&&V.value.source==="cache"?(o(),n("div",Ux," 缓存至: "+u(Ke(V.value.cacheExpiresAt)),1)):c("",!0)])):(o(),n("div",_x,"暂无余额数据"))])}}},Kx={class:"space-y-4"},Sx={class:"grid gap-3 md:grid-cols-2"},Mx={class:"space-y-2"},Dx={class:"space-y-2"},Px={class:"space-y-2"},jx={class:"space-y-2"},Lx={class:"space-y-2"},Vx={class:"space-y-2"},zx={key:0,class:"rounded-lg bg-gray-50 p-3 text-sm dark:bg-gray-800/60"},Rx={class:"flex items-center justify-between"},Ox={class:"mt-2 text-xs text-gray-600 dark:text-gray-300"},Ex={key:0},Nx={key:1,class:"text-red-500"},qx={class:"text-xs text-gray-500 dark:text-gray-400"},Wx={class:"mt-1 whitespace-pre-wrap break-all"},Fx={class:"text-xs text-gray-500 dark:text-gray-400"},Bx={class:"mt-1 whitespace-pre-wrap break-all"},Gx={class:"flex items-center gap-2"},xr=`({
request: {
url: "{{baseUrl}}/api/user/self",
method: "GET",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer {{apiKey}}",
"New-Api-User": "{{extra}}"
}
},
extractor: function (response) {
if (response && response.success && response.data) {
const quota = response.data.quota || 0;
const used = response.data.used_quota || 0;
return {
planName: response.data.group || "默认套餐",
remaining: quota / 500000,
used: used / 500000,
total: (quota + used) / 500000,
unit: "USD"
};
}
return {
isValid: false,
invalidMessage: (response && response.message) || "查询失败"
};
}
})`,Qx={__name:"AccountBalanceScriptModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:()=>({})}},emits:["close","saved"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$(!1),V=$(!1),U=$(null),C=vr({baseUrl:"",apiKey:"",token:"",extra:"",timeoutSeconds:10,autoIntervalMinutes:0,scriptBody:""}),v=()=>({baseUrl:"",apiKey:"",token:"",extra:"",timeoutSeconds:10,autoIntervalMinutes:0,scriptBody:xr}),k=()=>N("close"),j=()=>{Object.assign(C,v()),U.value=null,K.value=!1,V.value=!1},oe=async()=>{var y,g;if(!(!((y=p.account)!=null&&y.id)||!((g=p.account)!=null&&g.platform)))try{const D=await G.get(`/admin/accounts/${p.account.id}/balance/script?platform=${p.account.platform}`);D!=null&&D.success&&D.data&&Object.assign(C,D.data)}catch{P("加载脚本配置失败","error")}},Z=async()=>{var y,g;if(!(!((y=p.account)!=null&&y.id)||!((g=p.account)!=null&&g.platform))){K.value=!0;try{await G.put(`/admin/accounts/${p.account.id}/balance/script?platform=${p.account.platform}`,{...C}),P("已保存","success"),N("saved")}catch(D){P(D.message||"保存失败","error")}finally{K.value=!1}}},pe=async()=>{var y,g;if(!(!((y=p.account)!=null&&y.id)||!((g=p.account)!=null&&g.platform))){V.value=!0,U.value=null;try{const D=await G.post(`/admin/accounts/${p.account.id}/balance/script/test?platform=${p.account.platform}`,{...C});D!=null&&D.success?(U.value=D.data,P("测试完成","success")):P((D==null?void 0:D.error)||"测试失败","error")}catch(D){P(D.message||"测试失败","error")}finally{V.value=!1}}},J=()=>{C.scriptBody=xr},W=y=>y==null||Number.isNaN(Number(y))?"—":Number(y).toFixed(2),O=y=>{try{return JSON.stringify(y,null,2)}catch{return String(y)}};return $e(()=>p.show,y=>{y&&(j(),oe())}),(y,g)=>{var B;const D=Kr,ce=br;return o(),Ye(ce,{"append-to-body":!0,class:"balance-script-dialog","close-on-click-modal":!1,"destroy-on-close":!0,"model-value":H.show,title:`配置余额脚本 - ${((B=H.account)==null?void 0:B.name)||""}`,top:"5vh",width:"720px",onClose:k},{footer:nt(()=>[e("div",Gx,[Ee(D,{loading:V.value,onClick:pe},{default:nt(()=>g[20]||(g[20]=[x("测试脚本",-1)])),_:1,__:[20]},8,["loading"]),Ee(D,{loading:K.value,type:"primary",onClick:Z},{default:nt(()=>g[21]||(g[21]=[x("保存配置",-1)])),_:1,__:[21]},8,["loading"]),Ee(D,{onClick:k},{default:nt(()=>g[22]||(g[22]=[x("取消",-1)])),_:1,__:[22]})])]),default:nt(()=>{var _,Q,we,Ke,F,ee;return[e("div",Kx,[e("div",Sx,[e("div",Mx,[g[7]||(g[7]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":g[0]||(g[0]=S=>C.apiKey=S),class:"input-text",placeholder:"access token / key"},null,512),[[z,C.apiKey]])]),e("div",Dx,[g[8]||(g[8]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"请求地址baseUrl",-1)),b(e("input",{"onUpdate:modelValue":g[1]||(g[1]=S=>C.baseUrl=S),class:"input-text",placeholder:"https://api.example.com"},null,512),[[z,C.baseUrl]])]),e("div",Px,[g[9]||(g[9]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"Token可选",-1)),b(e("input",{"onUpdate:modelValue":g[2]||(g[2]=S=>C.token=S),class:"input-text",placeholder:"Bearer token"},null,512),[[z,C.token]])]),e("div",jx,[g[10]||(g[10]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"额外参数 (extra / userId)",-1)),b(e("input",{"onUpdate:modelValue":g[3]||(g[3]=S=>C.extra=S),class:"input-text",placeholder:"用户ID等"},null,512),[[z,C.extra]])]),e("div",Lx,[g[11]||(g[11]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"超时时间(秒)",-1)),b(e("input",{"onUpdate:modelValue":g[4]||(g[4]=S=>C.timeoutSeconds=S),class:"input-text",min:"1",type:"number"},null,512),[[z,C.timeoutSeconds,void 0,{number:!0}]])]),e("div",Vx,[g[12]||(g[12]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"自动查询间隔(分钟)",-1)),b(e("input",{"onUpdate:modelValue":g[5]||(g[5]=S=>C.autoIntervalMinutes=S),class:"input-text",min:"0",type:"number"},null,512),[[z,C.autoIntervalMinutes,void 0,{number:!0}]]),g[13]||(g[13]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"0 表示仅手动刷新",-1))]),g[14]||(g[14]=e("div",{class:"text-xs text-gray-500 dark:text-gray-400 md:col-span-2"}," 可用变量:"+u("{")+u("{")+"baseUrl"+u("}")+u("}")+"、"+u("{")+u("{")+"apiKey"+u("}")+u("}")+"、"+u("{")+u("{")+"token"+u("}")+u("}")+"、"+u("{")+u("{")+"accountId"+u("}")+u("}")+"、"+u("{")+u("{")+"platform"+u("}")+u("}")+"、"+u("{")+u("{")+"extra"+u("}")+u("}"),-1))]),e("div",null,[e("div",{class:"mb-2 flex items-center justify-between"},[g[15]||(g[15]=e("div",{class:"text-sm font-semibold text-gray-800 dark:text-gray-100"},"提取器代码",-1)),e("button",{class:"rounded bg-gray-200 px-2 py-1 text-xs dark:bg-gray-700",onClick:J}," 使用示例 ")]),b(e("textarea",{"onUpdate:modelValue":g[6]||(g[6]=S=>C.scriptBody=S),class:"min-h-[260px] w-full rounded-xl bg-gray-900 font-mono text-sm text-gray-100 shadow-inner focus:outline-none focus:ring-2 focus:ring-indigo-500",spellcheck:"false"},null,512),[[z,C.scriptBody]]),g[16]||(g[16]=e("div",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," extractor 可返回isValid、invalidMessage、remaining、unit、planName、total、used、extra ",-1))]),U.value?(o(),n("div",zx,[e("div",Rx,[g[17]||(g[17]=e("span",{class:"font-semibold"},"测试结果",-1)),e("span",{class:I(["rounded px-2 py-0.5 text-xs",((_=U.value.mapped)==null?void 0:_.status)==="success"?"bg-emerald-100 text-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-200":"bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-200"])},u(((Q=U.value.mapped)==null?void 0:Q.status)||"unknown"),3)]),e("div",Ox,[e("div",null,"余额: "+u(W((we=U.value.mapped)==null?void 0:we.balance)),1),e("div",null,"单位: "+u(((Ke=U.value.mapped)==null?void 0:Ke.currency)||"—"),1),(F=U.value.mapped)!=null&&F.planName?(o(),n("div",Ex,"套餐: "+u(U.value.mapped.planName),1)):c("",!0),(ee=U.value.mapped)!=null&&ee.errorMessage?(o(),n("div",Nx," 错误: "+u(U.value.mapped.errorMessage),1)):c("",!0)]),e("details",qx,[g[18]||(g[18]=e("summary",{class:"cursor-pointer"},"查看 extractor 输出",-1)),e("pre",Wx,u(O(U.value.extracted)),1)]),e("details",Fx,[g[19]||(g[19]=e("summary",{class:"cursor-pointer"},"查看原始响应",-1)),e("pre",Bx,u(O(U.value.response)),1)])])):c("",!0)])]}),_:1},8,["model-value","title"])}}},Hx=ra(Qx,[["__scopeId","data-v-13083b1f"]]),Jx={class:"accounts-container"},Yx={class:"card p-4 sm:p-6"},Zx={class:"mb-4 flex flex-col gap-4 sm:mb-6"},Xx={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},ef={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},tf={class:"group relative min-w-[160px]"},af={class:"group relative min-w-[140px]"},rf={class:"group relative min-w-[160px]"},sf={class:"group relative min-w-[120px]"},lf={class:"group relative min-w-[200px]"},of={class:"relative flex items-center"},nf={class:"flex w-full flex-col gap-3 sm:w-auto sm:flex-row sm:items-center sm:gap-3"},df={class:"relative"},uf={class:"relative"},gf=["disabled"],pf={class:"relative"},cf=["disabled"],yf={class:"relative"},mf={key:0,class:"py-12 text-center"},xf={key:1,class:"py-12 text-center"},ff={key:2,class:"table-wrapper hidden md:block"},bf={class:"w-full"},vf={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"},kf={key:0,class:"checkbox-column sticky left-0 z-20 min-w-[50px] px-3 py-4 text-left"},hf={class:"flex items-center"},wf=["indeterminate"],$f={key:1,class:"fas fa-sort ml-1 text-gray-400"},Af={key:1,class:"fas fa-sort ml-1 text-gray-400"},Cf={key:1,class:"fas fa-sort ml-1 text-gray-400"},Tf={class:"min-w-[210px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},If={class:"flex items-center gap-2"},Uf={key:1,class:"fas fa-sort ml-1 text-gray-400"},_f={key:1,class:"fas fa-sort ml-1 text-gray-400"},Kf={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Sf={key:0,class:"checkbox-column sticky left-0 z-10 px-3 py-3"},Mf={class:"flex items-center"},Df=["value"],Pf={class:"flex items-center"},jf={class:"min-w-0"},Lf={class:"flex items-center gap-2"},Vf=["title"],zf={key:0,class:"inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-800"},Rf={key:1,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800"},Of={key:2,class:"inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800"},Ef={key:0,class:"my-2 flex flex-wrap items-center gap-2"},Nf=["title"],qf=["title"],Wf={class:"px-3 py-4"},Ff={class:"flex items-center gap-1"},Bf={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"},Gf={class:"text-xs font-medium text-yellow-700"},Qf={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"},Hf={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"},Jf={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"},Yf={class:"text-xs font-medium text-gray-950"},Zf={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"},Xf={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"},eb={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"},tb={class:"text-xs font-semibold text-indigo-800"},ab={class:"text-xs font-medium text-indigo-700"},rb={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"},sb={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"},lb={class:"text-xs font-medium text-cyan-700 dark:text-cyan-300"},ob={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"},nb={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"},ib={class:"w-[100px] min-w-[100px] max-w-[100px] whitespace-nowrap px-3 py-4"},db={class:"flex flex-col gap-1"},ub={key:0,class:"inline-flex items-center rounded-full bg-yellow-100 px-3 py-1 text-xs font-semibold text-yellow-800"},gb={key:0},pb={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-3 py-1 text-xs font-semibold text-gray-700"},cb=["title"],yb={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},mb={class:"whitespace-nowrap px-3 py-4 text-sm"},xb={key:0,class:"space-y-1"},fb={class:"flex items-center gap-2"},bb={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},vb={class:"flex items-center gap-2"},kb={class:"text-xs text-gray-600 dark:text-gray-300"},hb={class:"flex items-center gap-2"},wb={class:"text-xs text-gray-600 dark:text-gray-300"},$b={key:0,class:"text-xs text-gray-500 dark:text-gray-400"},Ab={key:1,class:"text-xs text-gray-400"},Cb={class:"whitespace-nowrap px-3 py-4"},Tb={class:"mt-1 text-xs"},Ib=["onClick"],Ub={class:"whitespace-nowrap px-3 py-4"},_b={key:0,class:"space-y-2"},Kb={key:0,class:"space-y-2"},Sb={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Mb={class:"flex items-center gap-2"},Db={class:"flex-1"},Pb={class:"flex items-center gap-2"},jb={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Lb={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Vb={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},zb={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Rb={class:"flex items-center gap-2"},Ob={class:"flex-1"},Eb={class:"flex items-center gap-2"},Nb={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},qb={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Wb={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Fb={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Bb={class:"flex items-center gap-2"},Gb={class:"flex-1"},Qb={class:"flex items-center gap-2"},Hb={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Jb={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Yb={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Zb={key:1,class:"space-y-2"},Xb={key:0,class:"flex items-center gap-3 text-xs"},ev={class:"flex items-center gap-1"},tv={class:"font-medium text-gray-900 dark:text-gray-100"},av={class:"flex items-center gap-1"},rv={class:"font-medium text-gray-900 dark:text-gray-100"},sv={class:"flex items-center gap-2"},lv={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},ov={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},nv={class:"text-xs text-gray-600 dark:text-gray-400"},iv={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},dv={key:2,class:"text-xs text-gray-400"},uv={key:1,class:"space-y-3"},gv={class:"flex items-center justify-between text-xs"},pv={class:"font-medium text-gray-700 dark:text-gray-200"},cv={class:"flex items-center gap-2"},yv={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},mv={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},xv={class:"text-xs text-gray-600 dark:text-gray-400"},fv={class:"ml-2 text-gray-400"},bv={key:1,class:"text-sm text-gray-400"},vv={class:"space-y-1"},kv={class:"flex items-center justify-between text-xs"},hv={key:0,class:"font-medium text-gray-700 dark:text-gray-200"},wv={key:0,class:"flex items-center gap-2"},$v={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},Av={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"},Cv={key:2,class:"space-y-2"},Tv={key:0,class:"space-y-2"},Iv={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Uv={class:"flex items-center gap-2"},_v={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"},Kv={class:"flex-1"},Sv={class:"flex items-center gap-2"},Mv={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Dv={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Pv={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},jv={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Lv={class:"flex items-center gap-2"},Vv={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"},zv={class:"flex-1"},Rv={class:"flex items-center gap-2"},Ov={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Ev={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Nv={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},qv={key:1,class:"text-sm text-gray-400"},Wv={key:3,class:"text-sm text-gray-400"},Fv={class:"whitespace-nowrap px-3 py-4 text-sm text-gray-600 dark:text-gray-300"},Bv={class:"whitespace-nowrap px-3 py-4"},Gv={key:0,class:"flex items-center gap-2"},Qv={class:"h-2 w-16 rounded-full bg-gray-200"},Hv={class:"min-w-[20px] text-xs font-medium text-gray-700 dark:text-gray-200"},Jv={key:1,class:"text-sm text-gray-400"},Yv={class:"px-3 py-4 text-sm text-gray-600"},Zv=["title"],Xv={key:1,class:"text-gray-400"},e1={class:"whitespace-nowrap px-3 py-4"},t1={class:"flex flex-col gap-1"},a1={key:0},r1=["onClick"],s1=["onClick"],l1=["onClick"],o1=["onClick"],n1={class:"operations-column sticky right-0 z-10 whitespace-nowrap px-3 py-4 text-sm font-medium"},i1={key:0,class:"flex items-center gap-1"},d1=["disabled","title","onClick"],u1=["disabled","title","onClick"],g1={class:"ml-1"},p1=["onClick"],c1=["onClick"],y1=["onClick"],m1=["onClick"],x1=["onClick"],f1={key:1,class:"flex items-center gap-1"},b1=["disabled","title","onClick"],v1={class:"ml-1"},k1=["onClick"],h1={key:3,class:"space-y-3 md:hidden"},w1={class:"mb-3 flex items-start justify-between"},$1={class:"flex items-center gap-3"},A1=["value"],C1={class:"text-sm font-semibold text-gray-900"},T1={class:"mt-0.5 flex items-center gap-2"},I1={class:"text-xs text-gray-500 dark:text-gray-400"},U1={class:"text-xs text-gray-500 dark:text-gray-400"},_1={class:"mb-3 grid grid-cols-2 gap-3"},K1={class:"space-y-1"},S1={class:"flex items-center gap-1.5"},M1={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},D1={class:"flex items-center gap-1.5"},P1={class:"text-xs text-gray-600 dark:text-gray-400"},j1={class:"flex items-center gap-1.5"},L1={class:"text-xs text-gray-600 dark:text-gray-400"},V1={key:0,class:"space-y-1"},z1={class:"flex items-center gap-1.5"},R1={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},O1={class:"flex items-center gap-1.5"},E1={class:"text-xs text-gray-600 dark:text-gray-400"},N1={key:1,class:"text-sm font-semibold text-gray-400"},q1={class:"mb-3"},W1={class:"mt-1 text-xs"},F1=["onClick"],B1={class:"mb-3 space-y-2"},G1={key:0,class:"space-y-2"},Q1={key:0,class:"space-y-2"},H1={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},J1={class:"flex items-center gap-2"},Y1={class:"flex-1"},Z1={class:"flex items-center gap-2"},X1={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},ek={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},tk={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},ak={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},rk={class:"flex items-center gap-2"},sk={class:"flex-1"},lk={class:"flex items-center gap-2"},ok={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},nk={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},ik={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},dk={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},uk={class:"flex items-center gap-2"},gk={class:"flex-1"},pk={class:"flex items-center gap-2"},ck={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},yk={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},mk={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},xk={key:1,class:"space-y-1.5 rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},fk={class:"flex items-center justify-between text-xs"},bk={class:"flex items-center gap-1"},vk={class:"font-medium text-gray-700 dark:text-gray-200"},kk={class:"h-2 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-600"},hk={class:"flex items-center justify-between text-xs"},wk={class:"text-gray-500 dark:text-gray-400"},$k={key:0,class:"font-medium text-indigo-600"},Ak={key:1,class:"text-gray-500"},Ck={key:2,class:"text-xs text-gray-400"},Tk={key:1,class:"space-y-2"},Ik={key:0,class:"space-y-2"},Uk={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},_k={class:"flex items-center gap-2"},Kk={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"},Sk={class:"flex-1"},Mk={class:"flex items-center gap-2"},Dk={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Pk={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},jk={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Lk={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Vk={class:"flex items-center gap-2"},zk={class:"inline-flex min-w-[32px] justify-center rounded-full bg-blue-100 px-2 py-0.5 text-[11px] font-medium text-blue-600 dark:bg-blue-500/20 dark:text-blue-300"},Rk={class:"flex-1"},Ok={class:"flex items-center gap-2"},Ek={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Nk={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},qk={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Wk={key:1,class:"text-xs text-gray-400"},Fk={class:"flex items-center justify-between text-xs"},Bk={class:"text-gray-700 dark:text-gray-200"},Gk={key:2,class:"flex items-center justify-between text-xs"},Qk={class:"text-gray-700 dark:text-gray-200"},Hk={class:"flex items-center justify-between text-xs"},Jk={class:"font-medium text-gray-700 dark:text-gray-200"},Yk={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3"},Zk=["disabled","onClick"],Xk=["onClick"],e2=["onClick"],t2=["onClick"],a2=["onClick"],r2=["onClick"],s2={key:0,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},l2={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},o2={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},n2={class:"flex items-center gap-2"},i2=["value"],d2={class:"flex items-center gap-2"},u2=["disabled"],g2={class:"flex items-center gap-1"},p2={key:1,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},c2=["onClick"],y2={key:2,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},m2=["disabled"],x2={class:"space-y-4"},f2={class:"overflow-x-auto"},b2={class:"w-full border-collapse text-sm",style:{"min-width":"1000px"}},v2={class:"border border-gray-300 px-4 py-2 font-medium dark:border-gray-600"},k2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},h2={class:"text-green-600 dark:text-green-400"},w2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},$2={class:"text-yellow-600 dark:text-yellow-400"},A2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},C2={class:"text-orange-600 dark:text-orange-400"},T2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},I2={class:"text-orange-600 dark:text-orange-400"},U2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},_2={class:"text-orange-600 dark:text-orange-400"},K2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},S2={class:"text-orange-600 dark:text-orange-400"},M2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},D2={class:"text-orange-600 dark:text-orange-400"},P2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},j2={class:"text-red-600 dark:text-red-400"},L2={class:"border border-gray-300 bg-blue-50 px-4 py-2 text-center font-bold dark:border-gray-600 dark:bg-blue-900/30"},V2={class:"bg-blue-50 font-bold dark:bg-blue-900/30"},z2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},R2={class:"text-green-600 dark:text-green-400"},O2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},E2={class:"text-yellow-600 dark:text-yellow-400"},N2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},q2={class:"text-orange-600 dark:text-orange-400"},W2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},F2={class:"text-orange-600 dark:text-orange-400"},B2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},G2={class:"text-orange-600 dark:text-orange-400"},Q2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},H2={class:"text-orange-600 dark:text-orange-400"},J2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},Y2={class:"text-orange-600 dark:text-orange-400"},Z2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},X2={class:"text-red-600 dark:text-red-400"},e3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},fr="accountsPageSize",t3={__name:"AccountsView",setup(H){const{showConfirmModal:Pe,confirmOptions:p,showConfirm:N,handleConfirm:K,handleCancel:V}=hr(),U=$([]),C=$(!1),v=$(!1),k=$("name"),j=$("asc"),oe=$([]),Z=$({}),pe=$([]),J=$("all"),W=$("all"),O=$("all"),y=$(""),g=()=>{const r=localStorage.getItem(fr);if(r){const s=parseInt(r,10);if([10,20,50,100].includes(s))return s}return 10},D=[10,20,50,100],ce=$(g()),B=$(1),_=$([]),Q=$(!1),we=$(!1),Ke=$(!1),F=$(!1),ee=$(!1),S=$(null),h=$([]),fe=$({}),le=$({}),je=$(""),Y=["claude","claude-console","openai","openai-responses","gemini","droid","gemini-api","bedrock"],T=$(null),q=$(null),be=$(!1),ge=$(null),de=$(!1),a=$(null),te=$(!1),Ae=$(null),Ge=$(!1),De=$(!1),at=$(!1),lt=$(!1),Xe=$(!1),St=$(new Map),Mt=$([{value:"name",label:"按名称排序",icon:"fa-font"},{value:"dailyTokens",label:"按今日Token排序",icon:"fa-coins"},{value:"dailyRequests",label:"按今日请求数排序",icon:"fa-chart-line"},{value:"totalTokens",label:"按总Token排序",icon:"fa-database"},{value:"lastUsed",label:"按最后使用排序",icon:"fa-clock"},{value:"rateLimitTime",label:"按限流时间排序",icon:"fa-hourglass"}]),Dt=[{value:"group-claude",label:"Claude全部",icon:"fa-brain",children:[{value:"claude",label:"Claude 官方/OAuth",icon:"fa-brain"},{value:"claude-console",label:"Claude Console",icon:"fa-terminal"},{value:"bedrock",label:"Bedrock",icon:"fab fa-aws"},{value:"ccr",label:"CCR Relay",icon:"fa-code-branch"}]},{value:"group-openai",label:"Codex / OpenAI全部",icon:"fa-openai",children:[{value:"openai",label:"OpenAI 官方",icon:"fa-openai"},{value:"openai-responses",label:"OpenAI-Responses (Codex)",icon:"fa-server"},{value:"azure_openai",label:"Azure OpenAI",icon:"fab fa-microsoft"}]},{value:"group-gemini",label:"Gemini全部",icon:"fab fa-google",children:[{value:"gemini",label:"Gemini OAuth",icon:"fab fa-google"},{value:"gemini-api",label:"Gemini API",icon:"fa-key"}]},{value:"group-droid",label:"Droid全部",icon:"fa-robot",children:[{value:"droid",label:"Droid",icon:"fa-robot"}]}],M={"group-claude":["claude","claude-console","bedrock","ccr"],"group-openai":["openai","openai-responses","azure_openai"],"group-gemini":["gemini","gemini-api"],"group-droid":["droid"]},ht={claude:r=>G.get("/admin/claude-accounts",{params:r}),"claude-console":r=>G.get("/admin/claude-console-accounts",{params:r}),bedrock:r=>G.get("/admin/bedrock-accounts",{params:r}),gemini:r=>G.get("/admin/gemini-accounts",{params:r}),openai:r=>G.get("/admin/openai-accounts",{params:r}),azure_openai:r=>G.get("/admin/azure-openai-accounts",{params:r}),"openai-responses":r=>G.get("/admin/openai-responses-accounts",{params:r}),ccr:r=>G.get("/admin/ccr-accounts",{params:r}),droid:r=>G.get("/admin/droid-accounts",{params:r}),"gemini-api":r=>G.get("/admin/gemini-api-accounts",{params:r})},pt=Object.keys(ht),vt=r=>r==="all"?pt:M[r]?M[r]:pt.includes(r)?[r]:pt,ct=se(()=>{const r=[{value:"all",label:"所有平台",icon:"fa-globe",indent:0}];return Dt.forEach(s=>{var f;r.push({...s,indent:0,isGroup:!0}),(f=s.children)==null||f.forEach(A=>{r.push({...A,indent:1,parent:s.value})})}),r}),Pt=$([{value:"normal",label:"正常",icon:"fa-check-circle"},{value:"unschedulable",label:"不可调度",icon:"fa-ban"},{value:"rateLimited",label:"限流",icon:"fa-hourglass-half"},{value:"other",label:"其他",icon:"fa-exclamation-triangle"},{value:"all",label:"全部状态",icon:"fa-list"}]),w=se(()=>{const r=[{value:"all",label:"所有账户",icon:"fa-globe"},{value:"ungrouped",label:"未分组账户",icon:"fa-user"}];return pe.value.forEach(s=>{r.push({value:s.id,label:`${s.name} (${s.platform==="claude"?"Claude":s.platform==="gemini"?"Gemini":s.platform==="openai"?"OpenAI":"Droid"})`,icon:s.platform==="claude"?"fa-brain":s.platform==="gemini"?"fa-robot":s.platform==="openai"?"fa-openai":"fa-robot"})}),r}),m=se(()=>Ke.value),E=$(!1),Qe=$(null),it=$(!1),yt=$(null),Et=r=>{const s=new Set;return[r==null?void 0:r.name,r==null?void 0:r.email,r==null?void 0:r.accountName,r==null?void 0:r.owner,r==null?void 0:r.ownerName,r==null?void 0:r.ownerDisplayName,r==null?void 0:r.displayName,r==null?void 0:r.username,r==null?void 0:r.identifier,r==null?void 0:r.alias,r==null?void 0:r.title,r==null?void 0:r.label].forEach(A=>{if(typeof A=="string"){const l=A.trim();l&&s.add(l)}}),Array.isArray(r==null?void 0:r.groupInfos)&&r.groupInfos.forEach(A=>{if(A&&typeof A.name=="string"){const l=A.name.trim();l&&s.add(l)}}),Object.entries(r||{}).forEach(([A,l])=>{if(typeof l=="string"){const ae=A.toLowerCase();if(ae.includes("name")||ae.includes("email")){const Te=l.trim();Te&&s.add(Te)}}}),Array.from(s)},Nt=(r,s)=>s?Et(r).some(f=>f.toLowerCase().includes(s)):!0,kt=r=>!!r&&Y.includes(r.platform),jt=r=>{var f;return["claude","claude-console","openai","openai-responses","gemini","gemini-api","ccr"].includes(r.platform)&&(r.status==="unauthorized"||r.status!=="active"||((f=r.rateLimitStatus)==null?void 0:f.isRateLimited)||r.rateLimitStatus==="limited"||!r.isActive)},Lt=r=>{const s=[];return jt(r)&&s.push({key:"reset",label:"重置状态",icon:"fa-redo",color:"orange",handler:()=>fa(r)}),kt(r)&&s.push({key:"usage",label:"详情",icon:"fa-chart-line",color:"indigo",handler:()=>wt(r)}),dt(r)&&(s.push({key:"test",label:"测试",icon:"fa-vial",color:"blue",handler:()=>et(r)}),s.push({key:"scheduled-test",label:"定时测试",icon:"fa-clock",color:"amber",handler:()=>At(r)})),s.push({key:"delete",label:"删除",icon:"fa-trash",color:"red",handler:()=>Zt(r)}),s},wt=async r=>{if(!kt(r)){P("该账户类型暂不支持查看详情","warning");return}S.value=r,F.value=!0,ee.value=!0,h.value=[],fe.value={},le.value={},je.value="";try{const s=await G.get(`/admin/accounts/${r.id}/usage-history?platform=${r.platform}&days=30`);if(s.success){const f=s.data||{};h.value=f.history||[],fe.value=f.summary||{},le.value=f.overview||{},je.value=f.generatedAt||""}else P(s.error||"加载账号使用详情失败","error")}catch{P("加载账号使用详情失败","error")}finally{ee.value=!1}},$t=()=>{F.value=!1,ee.value=!1,S.value=null},qt=["claude","claude-console","bedrock"],dt=r=>!!r&&qt.includes(r.platform),et=r=>{if(!dt(r)){P("该账户类型暂不支持测试","warning");return}ge.value=r,be.value=!0},Wt=()=>{be.value=!1,ge.value=null},At=r=>{if(!dt(r)){P("该账户类型暂不支持定时测试","warning");return}a.value=r,de.value=!0},Ft=()=>{de.value=!1,a.value=null},Bt=()=>{P("定时测试配置已保存","success")},Gt=$(!1),Vt=$(null),ha=r=>{Vt.value=r,Gt.value=!0},wa=()=>{Gt.value=!1,Vt.value=null},$a=async()=>{P("余额脚本已保存","success");const r=Vt.value;if(wa(),!(!(r!=null&&r.id)||!(r!=null&&r.platform)))try{const s=await G.get(`/admin/accounts/${r.id}/balance`,{params:{platform:r.platform,queryApi:!1}});s!=null&&s.success&&s.data&&Qt(r.id,s.data)}catch(s){console.debug("Failed to reload balance after saving script:",s)}},mt=se(()=>{let r=U.value;const s=y.value.trim();if(s){const A=s.toLowerCase();r=r.filter(l=>Nt(l,A))}return O.value!=="all"&&(r=r.filter(A=>{const l=ft(A),ae=A.status==="blocked"||A.status==="unauthorized";return O.value==="rateLimited"?A.isActive&&l:O.value==="normal"?A.isActive&&!l&&!ae&&A.schedulable!==!1:O.value==="unschedulable"?A.isActive&&!l&&!ae&&A.schedulable===!1:O.value==="other"?!l&&(!A.isActive||ae):!0})),k.value?[...r].sort((A,l)=>{var xe,Ue,re,he,ke,ne,ue,Oe,Fe,nr,ir,dr;let ae=A[k.value],Te=l[k.value];if(k.value==="dailyTokens"?(ae=((Ue=(xe=A.usage)==null?void 0:xe.daily)==null?void 0:Ue.allTokens)||0,Te=((he=(re=l.usage)==null?void 0:re.daily)==null?void 0:he.allTokens)||0):k.value==="dailyRequests"?(ae=((ne=(ke=A.usage)==null?void 0:ke.daily)==null?void 0:ne.requests)||0,Te=((Oe=(ue=l.usage)==null?void 0:ue.daily)==null?void 0:Oe.requests)||0):k.value==="totalTokens"&&(ae=((nr=(Fe=A.usage)==null?void 0:Fe.total)==null?void 0:nr.allTokens)||0,Te=((dr=(ir=l.usage)==null?void 0:ir.total)==null?void 0:dr.allTokens)||0),k.value==="lastUsed"&&(ae=A.lastUsedAt?new Date(A.lastUsedAt).getTime():0,Te=l.lastUsedAt?new Date(l.lastUsedAt).getTime():0),k.value==="status"&&(ae=A.isActive?1:0,Te=l.isActive?1:0),k.value==="rateLimitTime"){const er=ft(A),tr=ft(l),ur=er?bt(A):0,gr=tr?bt(l):0;return!er&&tr?-1:er&&!tr?1:ur<gr?-1:ur>gr?1:0}return ae<Te?j.value==="asc"?-1:1:ae>Te?j.value==="asc"?1:-1:0}):r}),Ve=se(()=>{const r=mt.value.length;return Math.ceil(r/ce.value)||0}),sa=se(()=>[{value:"claude",label:"Claude"},{value:"claude-console",label:"Claude Console"},{value:"gemini",label:"Gemini"},{value:"gemini-api",label:"Gemini API"},{value:"openai",label:"OpenAI"},{value:"azure_openai",label:"Azure OpenAI"},{value:"bedrock",label:"Bedrock"},{value:"openai-responses",label:"OpenAI-Responses"},{value:"ccr",label:"CCR"},{value:"droid",label:"Droid"}].map(s=>{const f=U.value.filter(ne=>ne.platform===s.value),A=f.filter(ne=>ft(ne)),l=f.filter(ne=>{const ue=ft(ne),Oe=ne.status==="blocked"||ne.status==="unauthorized";return!ue&&ne.isActive&&!Oe&&ne.schedulable!==!1}).length,ae=f.filter(ne=>{const ue=ft(ne),Oe=ne.status==="blocked"||ne.status==="unauthorized";return!ue&&ne.isActive&&!Oe&&ne.schedulable===!1}).length,Te=f.filter(ne=>{const ue=ft(ne),Oe=ne.status==="blocked"||ne.status==="unauthorized";return!ue&&(!ne.isActive||Oe)}).length,xe=A.filter(ne=>{const ue=bt(ne);return ue>0&&ue<=60}).length,Ue=A.filter(ne=>{const ue=bt(ne);return ue>60&&ue<=300}).length,re=A.filter(ne=>{const ue=bt(ne);return ue>300&&ue<=720}).length,he=A.filter(ne=>{const ue=bt(ne);return ue>720&&ue<=1440}).length,ke=A.filter(ne=>bt(ne)>1440).length;return{platform:s.value,platformLabel:s.label,normal:l,unschedulable:ae,rateLimit0_1h:xe,rateLimit1_5h:Ue,rateLimit5_12h:re,rateLimit12_24h:he,rateLimitOver24h:ke,other:Te,total:f.length}}).filter(s=>s.total>0)),ut=se(()=>sa.value.reduce((r,s)=>(r.normal+=s.normal,r.unschedulable+=s.unschedulable,r.rateLimit0_1h+=s.rateLimit0_1h,r.rateLimit1_5h+=s.rateLimit1_5h,r.rateLimit5_12h+=s.rateLimit5_12h,r.rateLimit12_24h+=s.rateLimit12_24h,r.rateLimitOver24h+=s.rateLimitOver24h,r.other+=s.other,r.total+=s.total,r),{normal:0,unschedulable:0,rateLimit0_1h:0,rateLimit1_5h:0,rateLimit5_12h:0,rateLimit12_24h:0,rateLimitOver24h:0,other:0,total:0})),Ct=se(()=>{const r=Ve.value,s=B.value,f=[];if(r<=7)for(let A=1;A<=r;A++)f.push(A);else{let A=Math.max(1,s-2),l=Math.min(r,s+2);s<=3?l=5:s>=r-2&&(A=r-4);for(let ae=A;ae<=l;ae++)f.push(ae)}return f}),xt=se(()=>{const r=Ct.value;return r.length===0?!1:r[0]>1}),la=se(()=>{const r=Ct.value;return r.length===0?!1:r[r.length-1]<Ve.value}),Aa=se(()=>{const r=Ct.value;return r.length===0?!1:xt.value&&r[0]>2}),Ca=se(()=>{const r=Ct.value;return r.length===0?!1:la.value&&r[r.length-1]<Ve.value-1}),gt=se(()=>{const r=(B.value-1)*ce.value,s=r+ce.value;return mt.value.slice(r,s)}),oa=se(()=>{const r=gt.value;return!Array.isArray(r)||r.length===0?!1:r.some(s=>{const f=s==null?void 0:s.balanceInfo;return(f==null?void 0:f.scriptEnabled)!==!1&&!!(f!=null&&f.scriptConfigured)})}),Ta=se(()=>C.value?"正在加载账户...":v.value?"刷新中...":oa.value?"刷新当前页余额(仅对已配置余额脚本的账户生效)":"当前页未配置余额脚本,无法刷新"),Qt=(r,s)=>{U.value=U.value.map(f=>f.id!==r?f:{...f,balanceInfo:s})},na=(r,s)=>{const f=(s==null?void 0:s.message)||"余额查询失败";P(f,"error")},Ia=async()=>{if(v.value)return;const r=gt.value;if(!r||r.length===0)return;const s=r.filter(A=>{const l=A==null?void 0:A.balanceInfo;return(l==null?void 0:l.scriptEnabled)!==!1&&!!(l!=null&&l.scriptConfigured)});if(s.length===0){P("当前页没有配置余额脚本的账户","warning");return}const f=r.length-s.length;v.value=!0;try{const A=await Promise.all(s.map(async Ue=>{try{const re=await G.post(`/admin/accounts/${Ue.id}/balance/refresh`,{platform:Ue.platform});return{id:Ue.id,success:!!(re!=null&&re.success),data:(re==null?void 0:re.data)||null}}catch(re){return{id:Ue.id,success:!1,error:(re==null?void 0:re.message)||"刷新失败"}}})),l=A.reduce((Ue,re)=>(re.success&&re.data&&(Ue[re.id]=re.data),Ue),{}),ae=A.filter(Ue=>Ue.success).length,Te=A.length-ae,xe=f>0?`,跳过 ${f} 个未配置脚本`:"";Object.keys(l).length>0&&(U.value=U.value.map(Ue=>{const re=l[Ue.id];return re?{...Ue,balanceInfo:re}:Ue})),Te===0?P(`成功刷新 ${ae} 个账户余额${xe}`,"success"):P(`刷新完成:${ae} 成功,${Te} 失败${xe}`,"warning")}finally{v.value=!1}},tt=()=>{const r=gt.value.map(A=>A.id),s=r.filter(A=>_.value.includes(A)).length,f=r.length;s===0?(Q.value=!1,we.value=!1):s===f?(Q.value=!0,we.value=!1):(Q.value=!1,we.value=!0)},Ua=()=>{if(Q.value)gt.value.forEach(r=>{_.value.includes(r.id)||_.value.push(r.id)});else{const r=new Set(gt.value.map(s=>s.id));_.value=_.value.filter(s=>!r.has(s))}tt()},_a=()=>{Ke.value=!Ke.value,Ke.value?tt():(_.value=[],Q.value=!1,we.value=!1)},ia=()=>{const r=new Set(U.value.map(s=>s.id));_.value=_.value.filter(s=>r.has(s)),tt()},Ka=async()=>{const r=U.value;if(!Array.isArray(r)||r.length===0)return;const s=Array.from(new Set(r.map(l=>l.platform).filter(Boolean)));if(s.length===0)return;const A=(await Promise.all(s.map(async l=>{try{const ae=await G.get(`/admin/accounts/balance/platform/${l}`,{params:{queryApi:!1}});return{platform:l,success:!!(ae!=null&&ae.success),data:(ae==null?void 0:ae.data)||[]}}catch(ae){return console.debug(`Failed to load balance cache for ${l}:`,ae),{platform:l,success:!1,data:[]}}}))).reduce((l,ae)=>(ae.success&&(Array.isArray(ae.data)?ae.data:[]).forEach(xe=>{var re;const Ue=(re=xe==null?void 0:xe.data)==null?void 0:re.accountId;Ue&&(l[Ue]=xe.data)}),l),{});Object.keys(A).length!==0&&(U.value=U.value.map(l=>({...l,balanceInfo:A[l.id]||l.balanceInfo||null})))},rt=async(r=!1)=>{C.value=!0;try{const s={};W.value!=="all"&&!M[W.value]&&(s.platform=W.value),J.value!=="all"&&(s.groupId=J.value);const f=vt(W.value);await Promise.all([ua(r),ja(r)]);const A=await Promise.all(f.map(async re=>{const he=ht[re];if(!he)return{platform:re,success:!0,data:[]};try{const ke=await he(s);return{platform:re,success:ke==null?void 0:ke.success,data:ke==null?void 0:ke.data}}catch(ke){return console.debug(`Failed to load ${re} accounts:`,ke),{platform:re,success:!1,data:[]}}})),l=[],ae=Z.value||{};let Te=[];const xe=(re,he)=>{const ke=Array.isArray(he)?he:[];if(ke.length!==0)switch(re){case"claude":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.claudeAccountId)==null?void 0:Fe[ue.id])||0;return{...ue,platform:"claude",boundApiKeysCount:Oe}});l.push(...ne);break}case"claude-console":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.claudeConsoleAccountId)==null?void 0:Fe[ue.id])||0;return{...ue,platform:"claude-console",boundApiKeysCount:Oe}});l.push(...ne);break}case"bedrock":{const ne=ke.map(ue=>({...ue,platform:"bedrock",boundApiKeysCount:0}));l.push(...ne);break}case"gemini":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.geminiAccountId)==null?void 0:Fe[ue.id])||0;return{...ue,platform:"gemini",boundApiKeysCount:Oe}});l.push(...ne);break}case"openai":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.openaiAccountId)==null?void 0:Fe[ue.id])||0;return{...ue,platform:"openai",boundApiKeysCount:Oe}});l.push(...ne);break}case"azure_openai":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.azureOpenaiAccountId)==null?void 0:Fe[ue.id])||0;return{...ue,platform:"azure_openai",boundApiKeysCount:Oe}});l.push(...ne);break}case"openai-responses":{Te=ke;break}case"ccr":{const ne=ke.map(ue=>({...ue,platform:"ccr",boundApiKeysCount:0}));l.push(...ne);break}case"droid":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.droidAccountId)==null?void 0:Fe[ue.id])||ue.boundApiKeysCount||0;return{...ue,platform:"droid",boundApiKeysCount:Oe}});l.push(...ne);break}case"gemini-api":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.geminiAccountId)==null?void 0:Fe[`api:${ue.id}`])||0;return{...ue,platform:"gemini-api",boundApiKeysCount:Oe}});l.push(...ne);break}default:break}};if(A.forEach(({platform:re,success:he,data:ke})=>{he&&xe(re,ke||[])}),Te.length>0){let re={};try{const ke=await G.get("/admin/openai-responses-accounts/auto-recovery-configs");ke.success&&Array.isArray(ke.data)&&(re=ke.data.reduce((ne,ue)=>(ue!=null&&ue.accountId&&(ne[ue.accountId]=ue),ne),{}))}catch(ke){console.debug("Failed to load auto-recovery configs:",ke)}const he=Te.map(ke=>{var Oe;const ne=((Oe=ae.openaiAccountId)==null?void 0:Oe[`responses:${ke.id}`])||0,ue=re[ke.id]||ke.autoRecoveryConfig||null;return{...ke,platform:"openai-responses",boundApiKeysCount:ne,autoRecoveryConfig:ue}});l.push(...he)}let Ue=l;J.value!=="all"&&(J.value==="ungrouped"?Ue=l.filter(re=>!re.groupInfos||re.groupInfos.length===0):Ue=l.filter(re=>!re.groupInfos||re.groupInfos.length===0?!1:re.groupInfos.some(he=>he.id===J.value))),Ue=Ue.map(re=>{const he=ga(re.proxyConfig||re.proxy);return{...re,proxyConfig:he||null}}),U.value=Ue,ia(),Ue.some(re=>re.platform==="claude")&&Sa().catch(re=>{console.debug("Claude usage loading failed:",re)}),Ka().catch(re=>{console.debug("Balance cache loading failed:",re)})}catch{P("加载账户失败","error")}finally{C.value=!1}},Sa=async()=>{try{const r=await G.get("/admin/claude-accounts/usage");if(r.success&&r.data){const s=r.data;U.value=U.value.map(f=>f.platform==="claude"&&s[f.id]?{...f,claudeUsage:s[f.id]}:f)}}catch(r){console.debug("Failed to load Claude usage data:",r)}};let Ht="name";const Tt=r=>{r&&(k.value===r?j.value=j.value==="asc"?"desc":"asc":(k.value=r,j.value="asc"),Ht=r)},Ma=r=>{r===Ht?j.value=j.value==="asc"?"desc":"asc":j.value="asc",Ht=r},zt=r=>{if(r==null)return"0";const s=Number(r);return s>=1e6?(s/1e6).toFixed(2):s>=1e3?(s/1e6).toFixed(4):(s/1e6).toFixed(6)},da=r=>{if(!r)return"从未使用";const s=new Date(r),A=new Date-s;return A<6e4?"刚刚":A<36e5?`${Math.floor(A/6e4)} 分钟前`:A<864e5?`${Math.floor(A/36e5)} 小时前`:A<6048e5?`${Math.floor(A/864e5)} 天前`:s.toLocaleDateString("zh-CN")},Da=()=>{y.value="",B.value=1},ua=async(r=!1)=>{if(!(!r&&at.value))try{const s=await G.get("/admin/accounts/binding-counts");s.success&&(Z.value=s.data||{},at.value=!0)}catch{Z.value={}}},Pa=async(r=!1)=>{var s;if(!(!r&&De.value))try{const f=await G.get("/admin/api-keys");f.success&&(oe.value=((s=f.data)==null?void 0:s.items)||f.data||[],De.value=!0)}catch{}},ja=async(r=!1)=>{if(!(!r&&lt.value))try{const s=await G.get("/admin/account-groups");s.success&&(pe.value=s.data||[],lt.value=!0)}catch{}},La=()=>{De.value=!1,at.value=!1,lt.value=!1,Xe.value=!1,St.value.clear()},Va=()=>{B.value=1,rt()},za=()=>{B.value=1,rt()};function ga(r){if(!r)return null;let s=r;if(typeof r=="string")try{s=JSON.parse(r)}catch{return null}if(!s||typeof s!="object")return null;const f=s.proxy&&typeof s.proxy=="object"?s.proxy:s,A=typeof f.host=="string"?f.host.trim():f.host!==void 0&&f.host!==null?String(f.host).trim():"",l=f.port!==void 0&&f.port!==null?String(f.port).trim():"";if(!A||!l)return null;const ae=typeof f.type=="string"&&f.type.trim()?f.type.trim():"socks5",Te=typeof f.username=="string"?f.username:f.username!==void 0&&f.username!==null?String(f.username):"",xe=typeof f.password=="string"?f.password:f.password!==void 0&&f.password!==null?String(f.password):"";return{type:ae,host:A,port:l,username:Te,password:xe}}const Jt=r=>{const s=ga(r);if(!s)return null;const f=s.type.toLowerCase()==="socks5"?"S5":s.type.toUpperCase();let A=s.host;A.length>15&&(A=A.substring(0,12)+"...");let l=`${f}://${A}:${s.port}`;return s.username&&(l=`${f}://***@${A}:${s.port}`),l},pa=(r,s)=>{if(!r||!s)return"--";const f=new Date(r),A=new Date(s),l=f.getHours().toString().padStart(2,"0"),ae=f.getMinutes().toString().padStart(2,"0"),Te=A.getHours().toString().padStart(2,"0"),xe=A.getMinutes().toString().padStart(2,"0");return`${l}:${ae} - ${Te}:${xe}`},ca=r=>{if(!r||r<=0)return"已结束";const s=Math.floor(r/60),f=r%60;return s>0?`${s}小时${f}分钟`:`${f}分钟`},Ra=r=>{if(!r||r<=0)return"";r=Math.floor(r);const s=Math.floor(r/1440),f=r%1440,A=Math.floor(f/60),l=f%60;return s>0?A>0?`${s}${A}小时`:`${s}`:A>0?l>0?`${A}小时${l}分钟`:`${A}小时`:`${l}分钟`},ft=r=>r?!!(r.rateLimitStatus&&(typeof r.rateLimitStatus=="string"&&r.rateLimitStatus==="limited"||typeof r.rateLimitStatus=="object"&&r.rateLimitStatus.isRateLimited===!0)):!1,bt=r=>{if(!r||!r.rateLimitStatus)return 0;if(typeof r.rateLimitStatus=="object"){const s=r.rateLimitStatus;if(Number.isFinite(s.minutesRemaining))return Math.max(0,Math.ceil(s.minutesRemaining));if(Number.isFinite(s.remainingMinutes))return Math.max(0,Math.ceil(s.remainingMinutes));if(Number.isFinite(s.remainingSeconds))return Math.max(0,Math.ceil(s.remainingSeconds/60));if(s.rateLimitResetAt){const f=new Date(s.rateLimitResetAt).getTime()-Date.now();return f>0?Math.ceil(f/6e4):0}}if(r.rateLimitUntil){const s=new Date().getTime(),A=new Date(r.rateLimitUntil).getTime()-s;return A>0?Math.ceil(A/6e4):0}return 0},Oa=()=>{Qe.value=null,E.value=!0},ya=()=>{E.value=!1,Qe.value=null},Yt=r=>{yt.value=r,it.value=!0},ma=r=>!r||!r.id?[]:oe.value.filter(s=>{const f=r.id;return s.claudeAccountId===f||s.claudeConsoleAccountId===f||s.geminiAccountId===f||s.openaiAccountId===f||s.azureOpenaiAccountId===f||s.openaiAccountId===`responses:${f}`||s.geminiAccountId===`api:${f}`}),Ea=r=>{switch(r.platform){case"claude":return`/admin/claude-accounts/${r.id}`;case"claude-console":return`/admin/claude-console-accounts/${r.id}`;case"bedrock":return`/admin/bedrock-accounts/${r.id}`;case"openai":return`/admin/openai-accounts/${r.id}`;case"azure_openai":return`/admin/azure-openai-accounts/${r.id}`;case"openai-responses":return`/admin/openai-responses-accounts/${r.id}`;case"ccr":return`/admin/ccr-accounts/${r.id}`;case"gemini":return`/admin/gemini-accounts/${r.id}`;case"droid":return`/admin/droid-accounts/${r.id}`;case"gemini-api":return`/admin/gemini-api-accounts/${r.id}`;default:return null}},xa=async r=>{var f,A;const s=Ea(r);if(!s)return{success:!1,message:"不支持的账户类型"};try{const l=await G.delete(s);return l.success?{success:!0,data:l}:{success:!1,message:l.message||"删除失败"}}catch(l){return{success:!1,message:((A=(f=l.response)==null?void 0:f.data)==null?void 0:A.message)||l.message||"删除失败"}}},Zt=async r=>{const f=ma(r).length;let A=`确定要删除账户 "${r.name}" 吗?`;if(f>0&&(A+=`
⚠️ 注意:此账号有 ${f} 个 API Key 绑定。`,A+=`
删除后,这些 API Key 将自动切换为共享池模式。`),A+=`
此操作不可恢复。`,!await N("删除账户",A,"删除","取消"))return;const ae=await xa(r);if(ae.success){const Te=ae.data;let xe="账户已成功删除";(Te==null?void 0:Te.unboundKeys)>0&&(xe+=`${Te.unboundKeys} 个 API Key 已切换为共享池模式`),P(xe,"success"),_.value=_.value.filter(Ue=>Ue!==r.id),tt(),Xe.value=!1,De.value=!1,at.value=!1,rt(),Pa(!0),ua(!0)}else P(ae.message||"删除失败","error")},Na=async()=>{var re;if(_.value.length===0){P("请先选择要删除的账户","warning");return}const r=new Map(U.value.map(he=>[he.id,he])),s=_.value.map(he=>r.get(he)).filter(he=>!!he);if(s.length===0){P("选中的账户已不存在","warning"),_.value=[],tt();return}let f=`确定要删除选中的 ${s.length} 个账户吗?此操作不可恢复。`;const A=s.map(he=>({account:he,boundKeys:ma(he)})).filter(he=>he.boundKeys.length>0);if(A.length>0&&(f+=`
⚠️ 以下账户存在绑定的 API Key将自动解绑`,A.forEach(({account:he,boundKeys:ke})=>{const ne=he.name||he.email||he.accountName||he.id;f+=`
- ${ne}: ${ke.length}`}),f+=`
删除后,这些 API Key 将切换为共享池模式。`),f+=`
请再次确认是否继续。`,!await N("批量删除账户",f,"删除","取消"))return;let ae=0,Te=0,xe=0;const Ue=[];for(const he of s){const ke=await xa(he);ke.success?(ae+=1,xe+=((re=ke.data)==null?void 0:re.unboundKeys)||0):(Te+=1,Ue.push({name:he.name||he.email||he.accountName||he.id,message:ke.message||"删除失败"}))}if(ae>0){let he=`成功删除 ${ae} 个账户`;xe>0&&(he+=`${xe} 个 API Key 已切换为共享池模式`),P(he,Te>0?"warning":"success"),_.value=[],Q.value=!1,we.value=!1,Xe.value=!1,De.value=!1,await rt(!0)}if(Te>0){const he=Ue.map(ke=>`${ke.name}: ${ke.message}`).join(`
`);P(`${Te} 个账户删除失败:
${he}`,ae>0?"warning":"error")}tt()},fa=async r=>{if(r.isResetting)return;let s=!1;if(window.showConfirm?s=await window.showConfirm("重置账户状态","确定要重置此账户的所有异常状态吗这将清除限流状态、401错误计数等所有异常标记。","确定重置","取消"):s=confirm("确定要重置此账户的所有异常状态吗?"),!!s)try{r.isResetting=!0;let f="";if(r.platform==="openai")f=`/admin/openai-accounts/${r.id}/reset-status`;else if(r.platform==="openai-responses")f=`/admin/openai-responses-accounts/${r.id}/reset-status`;else if(r.platform==="claude")f=`/admin/claude-accounts/${r.id}/reset-status`;else if(r.platform==="claude-console")f=`/admin/claude-console-accounts/${r.id}/reset-status`;else if(r.platform==="ccr")f=`/admin/ccr-accounts/${r.id}/reset-status`;else if(r.platform==="droid")f=`/admin/droid-accounts/${r.id}/reset-status`;else if(r.platform==="gemini-api")f=`/admin/gemini-api-accounts/${r.id}/reset-status`;else if(r.platform==="gemini")f=`/admin/gemini-accounts/${r.id}/reset-status`;else{P("不支持的账户类型","error"),r.isResetting=!1;return}const A=await G.post(f);A.success?(P("账户状态已重置","success"),rt(!0)):P(A.message||"状态重置失败","error")}catch{P("状态重置失败","error")}finally{r.isResetting=!1}},d=async r=>{if(!r.isTogglingSchedulable)try{r.isTogglingSchedulable=!0;let s;if(r.platform==="claude")s=`/admin/claude-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="claude-console")s=`/admin/claude-console-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="bedrock")s=`/admin/bedrock-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini")s=`/admin/gemini-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai")s=`/admin/openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="azure_openai")s=`/admin/azure-openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai-responses")s=`/admin/openai-responses-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="ccr")s=`/admin/ccr-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="droid")s=`/admin/droid-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini-api")s=`/admin/gemini-api-accounts/${r.id}/toggle-schedulable`;else{P("该账户类型暂不支持调度控制","warning");return}const f=await G.put(s);f.success?(r.schedulable=f.schedulable,P(f.schedulable?"已启用调度":"已禁用调度","success")):P(f.message||"操作失败","error")}catch{P("切换调度状态失败","error")}finally{r.isTogglingSchedulable=!1}},t=()=>{E.value=!1,P("账户创建成功","success"),La(),rt()},ie=()=>{it.value=!1,P("账户更新成功","success"),Xe.value=!1,rt()},ve=r=>!r.lastRefreshAt||r.lastRefreshAt===""?"Setup":"OAuth",i=()=>"OAuth",ye=()=>"OAuth",me=r=>{if(!r||typeof r!="object")return"OAuth";const s=r.isApiKeyMode??r.is_api_key_mode??r.apiKeyMode??r.api_key_mode;if(s===!0||s==="true"||s===1||s==="1")return"API Key";const f=r.authenticationMethod||r.authMethod||r.authentication_mode||r.authenticationMode||r.authentication_method||r.auth_type||r.authType||r.authentication_type||r.authenticationType||r.droidAuthType||r.droidAuthenticationMethod||r.method||r.auth||"";return typeof f=="string"&&f.trim().toLowerCase().replace(/[\s_-]/g,"")==="apikey"?"API Key":"OAuth"},Ne=r=>me(r)==="API Key",Be=r=>{if(!r||typeof r!="object")return 0;if(Array.isArray(r.apiKeys))return r.apiKeys.filter(f=>f.status!=="error").length;if(typeof r.apiKeys=="string"&&r.apiKeys.trim())try{const f=JSON.parse(r.apiKeys);if(Array.isArray(f))return f.filter(A=>A.status!=="error").length}catch{}const s=[r.apiKeyCount,r.api_key_count,r.apiKeysCount,r.api_keys_count];for(const f of s){const A=Number(f);if(Number.isFinite(A)&&A>=0)return A}return 0},Re=r=>{const s=Be(r),f="ml-1 inline-flex items-center gap-1 rounded-md border px-1.5 py-[1px] text-[10px] font-medium shadow-sm backdrop-blur-sm";return s>0?[f,"border-cyan-200 bg-cyan-50/90 text-cyan-700 dark:border-cyan-500/40 dark:bg-cyan-900/40 dark:text-cyan-200"]:[f,"border-rose-200 bg-rose-50/90 text-rose-600 dark:border-rose-500/40 dark:bg-rose-900/40 dark:text-rose-200"]},L=r=>{if(r.subscriptionInfo)try{const s=typeof r.subscriptionInfo=="string"?JSON.parse(r.subscriptionInfo):r.subscriptionInfo;return s.hasClaudeMax===!0?"Claude Max":s.hasClaudePro===!0?"Claude Pro":"Claude Free"}catch{return"Claude"}return"Claude"},R=r=>{if(r.schedulable!==!1)return null;if(r.platform==="claude-console"){if(r.status==="unauthorized")return"API Key无效或已过期401错误";if(r.overloadStatus==="overloaded")return"服务过载529错误";if(r.rateLimitStatus==="limited")return"触发限流429错误";if(r.status==="blocked"&&r.errorMessage)return r.errorMessage}if(r.platform==="claude"){if(r.status==="unauthorized")return"认证失败401错误";if(r.status==="temp_error"&&r.errorMessage||r.status==="error"&&r.errorMessage)return r.errorMessage;if(r.isRateLimited)return"触发限流429错误";if(r.stoppedReason)return r.stoppedReason;if(r.fiveHourAutoStopped==="true"||r.fiveHourAutoStopped===!0)return"5小时使用量接近限制已自动停止调度"}if(r.platform==="openai"){if(r.status==="unauthorized")return"认证失败401错误";if(r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.isRateLimited)return"触发限流429错误";if(r.status==="error"&&r.errorMessage)return r.errorMessage}if(r.platform==="openai-responses"){if(r.status==="unauthorized")return"认证失败401错误";if(r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.isRateLimited)return"触发限流429错误";if(r.status==="error"&&r.errorMessage)return r.errorMessage;if(r.status==="rateLimited")return"触发限流429错误"}return r.stoppedReason?r.stoppedReason:r.errorMessage?r.errorMessage:"手动停止调度"},Ie=r=>r.status==="blocked"?"已封锁":r.status==="unauthorized"?"异常":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"?"限流中":r.status==="temp_error"?"临时异常":r.status==="error"||!r.isActive?"错误":r.schedulable===!1?"已暂停":"正常",X=r=>r.status==="blocked"||r.status==="unauthorized"?"bg-red-100 text-red-800":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"||r.status==="temp_error"?"bg-orange-100 text-orange-800":r.status==="error"||!r.isActive?"bg-red-100 text-red-800":r.schedulable===!1?"bg-gray-100 text-gray-800":"bg-green-100 text-green-800",Se=r=>r.status==="blocked"||r.status==="unauthorized"?"bg-red-500":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"||r.status==="temp_error"?"bg-orange-500":r.status==="error"||!r.isActive?"bg-red-500":r.schedulable===!1?"bg-gray-500":"bg-green-500",Le=r=>da(r),qe=(r,s=null)=>{if(!r)return"bg-gradient-to-r from-blue-500 to-indigo-600";if(s&&(s.isRateLimited||s.status==="rate_limited"||s.rateLimitStatus&&s.rateLimitStatus.isRateLimited||s.rateLimitStatus==="limited"))return"bg-gradient-to-r from-red-500 to-red-600";const A=String(r).toLowerCase();return A==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":A==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-600"},Me=r=>r.authType==="oauth",Je=r=>!r||r.utilization===null||r.utilization===void 0?"-":`${r.utilization}%`,Ze=r=>!r||r.utilization===null||r.utilization===void 0?"0%":`${r.utilization}%`,ot=r=>{const s=(r==null?void 0:r.utilization)||0;return s<60?"bg-gradient-to-r from-blue-500 to-indigo-600":s<90?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-red-500 to-red-600"},It=r=>{if(!r||!r.remainingSeconds)return"-";const s=r.remainingSeconds,f=Math.floor(s/86400),A=Math.floor(s%86400/3600),l=Math.floor(s%3600/60);return f>0?A>0?`${f}${A}小时`:`${f}`:A>0?l>0?`${A}小时${l}分钟`:`${A}小时`:l>0?`${l}分钟`:`${Math.floor(s%60)}`},Xt=r=>{if(!r)return null;const s=typeof r.usedPercent=="number"&&!Number.isNaN(r.usedPercent)?r.usedPercent:null,f=typeof r.resetAfterSeconds=="number"&&!Number.isNaN(r.resetAfterSeconds)?r.resetAfterSeconds:null,A=typeof r.remainingSeconds=="number"?r.remainingSeconds:null,l=r.resetAt?Date.parse(r.resetAt):null;return f!==null&&(A!==null&&A<=0||l!==null&&!Number.isNaN(l)&&Date.now()>=l)?0:s===null?null:Math.max(0,Math.min(100,s))},ea=r=>{const s=Xt(r);return s===null?"bg-gradient-to-r from-gray-300 to-gray-400":s>=90?"bg-gradient-to-r from-red-500 to-red-600":s>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},ta=r=>{const s=Xt(r);return s===null?"--":`${s.toFixed(1)}%`},Ut=r=>{const s=Xt(r);return s===null?"0%":`${s}%`},qa=r=>r==="secondary"?"周限":"5h",Wa=r=>{if(!r)return"--";let s=r.remainingSeconds;if(s==null&&(s=r.resetAfterSeconds),s==null||Number.isNaN(Number(s)))return"--";s=Math.max(0,Math.floor(Number(s)));const f=Math.floor(s/86400),A=Math.floor(s%86400/3600),l=Math.floor(s%3600/60),ae=s%60;return f>0?A>0?`${f}${A}小时`:`${f}`:A>0?l>0?`${A}小时${l}分钟`:`${A}小时`:l>0?`${l}分钟`:`${ae}`},Fa=r=>!r||r===0?"0.0000":r<1e-4?r.toExponential(2):r<.01?r.toFixed(6):r<1?r.toFixed(4):r.toFixed(2),Za=r=>{var A,l;const s=Number(((l=(A=r==null?void 0:r.usage)==null?void 0:A.daily)==null?void 0:l.cost)||0),f=Number((r==null?void 0:r.dailyQuota)||0);return!f||f<=0?0:s/f*100},$r=r=>r>=90?"bg-red-500":r>=70?"bg-yellow-500":"bg-green-500",Xa=r=>{const s=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!s||s<=0)return 0;const f=Number((r==null?void 0:r.activeTaskCount)||0);return Math.min(100,f/s*100)},Ar=r=>r>=100?"bg-red-500":r>=80?"bg-yellow-500":"bg-green-500",Cr=r=>{const s=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!s||s<=0)return"text-gray-500 dark:text-gray-400";const f=Number((r==null?void 0:r.activeTaskCount)||0);return f>=s?"text-red-600 dark:text-red-400":f>=s*.8?"text-yellow-600 dark:text-yellow-400":"text-gray-700 dark:text-gray-200"},Tr=r=>{var A,l;const s=Number(((l=(A=r==null?void 0:r.usage)==null?void 0:A.daily)==null?void 0:l.cost)||0),f=Number((r==null?void 0:r.dailyQuota)||0);return!f||f<=0?"0.00":Math.max(0,f-s).toFixed(2)},sr=r=>!r.usage||!r.usage.daily?"0.0000":r.usage.daily.cost!==void 0?Fa(r.usage.daily.cost):"0.0000";$e(y,()=>{B.value=1,tt()}),$e(ce,r=>{localStorage.setItem(fr,r.toString()),tt()}),$e(()=>mt.value.length,()=>{B.value>Ve.value&&(B.value=Ve.value||1),tt()}),$e(B,()=>{tt()}),$e(gt,()=>{tt(),ar(()=>{ba()})}),$e(U,()=>{ia()});const lr=r=>r?new Date(r).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit"}):"",Ir=r=>r?new Date(r)<new Date:!1,Ur=r=>{if(!r)return!1;const s=new Date,A=(new Date(r)-s)/(1e3*60*60*24);return A>0&&A<=7},Ba=r=>{T.value=r},or=()=>{T.value=null},_r=async({accountId:r,expiresAt:s})=>{try{const f=U.value.find(ae=>ae.id===r);if(!f){P("未找到账户","error");return}let A="";switch(f.platform){case"claude":case"claude-oauth":A=`/admin/claude-accounts/${r}`;break;case"gemini":A=`/admin/gemini-accounts/${r}`;break;case"claude-console":A=`/admin/claude-console-accounts/${r}`;break;case"bedrock":A=`/admin/bedrock-accounts/${r}`;break;case"ccr":A=`/admin/ccr-accounts/${r}`;break;case"openai":A=`/admin/openai-accounts/${r}`;break;case"droid":A=`/admin/droid-accounts/${r}`;break;case"azure_openai":A=`/admin/azure-openai-accounts/${r}`;break;case"openai-responses":A=`/admin/openai-responses-accounts/${r}`;break;default:P(`不支持的平台类型: ${f.platform}`,"error");return}const l=await G.put(A,{expiresAt:s||null});l.success?(P("账户到期时间已更新","success"),f.expiresAt=s||null,or()):(P(l.message||"更新失败","error"),q.value&&q.value.resetSaving())}catch(f){console.error("更新账户过期时间失败:",f),P("更新失败","error"),q.value&&q.value.resetSaving()}},ba=()=>{Ae.value&&(Ge.value=Ae.value.scrollWidth>Ae.value.clientWidth)};let Ga=null;return aa(()=>{rt(!0),ar(()=>{Ae.value&&(Ga=new ResizeObserver(()=>{ba()}),Ga.observe(Ae.value),ba())}),window.addEventListener("resize",ba)}),Ya(()=>{Ga&&Ga.disconnect(),window.removeEventListener("resize",ba)}),(r,s)=>{const f=Sr,A=br;return o(),n("div",Jx,[e("div",Yx,[e("div",Zx,[s[42]||(s[42]=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",Xx,[e("div",ef,[e("div",tf,[s[27]||(s[27]=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)),Ee(Qa,{modelValue:k.value,"onUpdate:modelValue":s[0]||(s[0]=l=>k.value=l),icon:j.value==="asc"?"fa-sort-amount-up":"fa-sort-amount-down","icon-color":"text-indigo-500",options:Mt.value,placeholder:"选择排序",onChange:Ma},null,8,["modelValue","icon","options"])]),e("div",af,[s[28]||(s[28]=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)),Ee(Qa,{modelValue:W.value,"onUpdate:modelValue":s[1]||(s[1]=l=>W.value=l),icon:"fa-server","icon-color":"text-blue-500",options:ct.value,placeholder:"选择平台",onChange:Va},null,8,["modelValue","options"])]),e("div",rf,[s[29]||(s[29]=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)),Ee(Qa,{modelValue:J.value,"onUpdate:modelValue":s[2]||(s[2]=l=>J.value=l),icon:"fa-layer-group","icon-color":"text-purple-500",options:w.value,placeholder:"选择分组",onChange:za},null,8,["modelValue","options"])]),e("div",sf,[s[30]||(s[30]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-emerald-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ee(Qa,{modelValue:O.value,"onUpdate:modelValue":s[3]||(s[3]=l=>O.value=l),icon:"fa-check-circle","icon-color":"text-green-500",options:Pt.value,placeholder:"选择状态"},null,8,["modelValue","options"])]),e("div",lf,[s[33]||(s[33]=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",of,[b(e("input",{"onUpdate:modelValue":s[4]||(s[4]=l=>y.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,y.value]]),s[32]||(s[32]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),y.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:Da},s[31]||(s[31]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):c("",!0)])])]),e("div",nf,[e("div",df,[Ee(f,{content:"查看账户统计汇总",effect:"dark",placement:"bottom"},{default:nt(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",onClick:s[5]||(s[5]=l=>te.value=!0)},s[34]||(s[34]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-violet-500 to-purple-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-chart-bar relative text-violet-500"},null,-1),e("span",{class:"relative"},"统计",-1)]))]),_:1})]),e("div",uf,[Ee(f,{content:"刷新数据 (Ctrl/⌘+点击强制刷新所有缓存)",effect:"dark",placement:"bottom"},{default:nt(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",disabled:C.value,onClick:[s[6]||(s[6]=_t(l=>rt(!0),["ctrl","exact"])),s[7]||(s[7]=_t(l=>rt(!1),["exact"])),s[8]||(s[8]=_t(l=>rt(!0),["meta","exact"]))]},[s[35]||(s[35]=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",C.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),s[36]||(s[36]=e("span",{class:"relative"},"刷新",-1))],8,gf)]),_:1})]),e("div",pf,[Ee(f,{content:Ta.value,effect:"dark",placement:"bottom"},{default:nt(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",disabled:C.value||v.value||!oa.value,onClick:Ia},[s[37]||(s[37]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:I(["fas relative text-blue-500",v.value?"fa-spinner fa-spin":"fa-wallet"])},null,2),s[38]||(s[38]=e("span",{class:"relative"},"刷新余额",-1))],8,cf)]),_:1},8,["content"])]),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:_a},[e("i",{class:I(Ke.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,u(Ke.value?"取消选择":"选择"),1)]),_.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:Na},[s[39]||(s[39]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),s[40]||(s[40]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",yf,"删除选中 ("+u(_.value.length)+")",1)])):c("",!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:_t(Oa,["stop"])},s[41]||(s[41]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"添加账户",-1)]))])])]),C.value?(o(),n("div",mf,s[43]||(s[43]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载账户...",-1)]))):mt.value.length===0?(o(),n("div",xf,s[44]||(s[44]=[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",ff,[e("div",{ref_key:"tableContainerRef",ref:Ae,class:"table-container"},[e("table",bf,[e("thead",vf,[e("tr",null,[m.value?(o(),n("th",kf,[e("div",hf,[b(e("input",{"onUpdate:modelValue":s[9]||(s[9]=l=>Q.value=l),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:we.value,type:"checkbox",onChange:Ua},null,40,wf),[[ze,Q.value]])])])):c("",!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",m.value?"left-[50px]":"left-0"]),onClick:s[10]||(s[10]=l=>Tt("name"))},[s[45]||(s[45]=x(" 名称 ",-1)),k.value==="name"?(o(),n("i",{key:0,class:I(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",$f))],2),e("th",{class:"min-w-[220px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[11]||(s[11]=l=>Tt("platform"))},[s[46]||(s[46]=x(" 平台/类型 ",-1)),k.value==="platform"?(o(),n("i",{key:0,class:I(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Af))]),e("th",{class:"w-[120px] min-w-[180px] max-w-[200px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[12]||(s[12]=l=>Tt("status"))},[s[47]||(s[47]=x(" 状态 ",-1)),k.value==="status"?(o(),n("i",{key:0,class:I(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Cf))]),s[53]||(s[53]=e("th",{class:"min-w-[150px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 今日使用 ",-1)),s[54]||(s[54]=e("th",{class:"min-w-[220px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 余额/配额 ",-1)),e("th",Tf,[e("div",If,[s[50]||(s[50]=e("span",null,"会话窗口",-1)),Ee(f,{placement:"top"},{content:nt(()=>s[48]||(s[48]=[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:nt(()=>[s[49]||(s[49]=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,__:[49]})])]),s[55]||(s[55]=e("th",{class:"min-w-[80px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),e("th",{class:"min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[13]||(s[13]=l=>Tt("priority"))},[s[51]||(s[51]=x(" 优先级 ",-1)),k.value==="priority"?(o(),n("i",{key:0,class:I(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Uf))]),s[56]||(s[56]=e("th",{class:"min-w-[150px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 代理 ",-1)),e("th",{class:"min-w-[110px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[14]||(s[14]=l=>Tt("expiresAt"))},[s[52]||(s[52]=x(" 到期时间 ",-1)),k.value==="expiresAt"?(o(),n("i",{key:0,class:I(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",_f))]),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",Ge.value?"min-w-[170px]":"min-w-[200px]"])}," 操作 ",2)])]),e("tbody",Kf,[(o(!0),n(Ce,null,We(gt.value,l=>{var ae,Te;return o(),n("tr",{key:l.id,class:"table-row"},[m.value?(o(),n("td",Sf,[e("div",Mf,[b(e("input",{"onUpdate:modelValue":s[15]||(s[15]=xe=>_.value=xe),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:tt},null,40,Df),[[ze,_.value]])])])):c("",!0),e("td",{class:I(["name-column sticky z-10 px-3 py-4",m.value?"left-[50px]":"left-0"])},[e("div",Pf,[s[61]||(s[61]=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",jf,[e("div",Lf,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:l.name},u(l.name),9,Vf),l.accountType==="dedicated"?(o(),n("span",zf,s[57]||(s[57]=[e("i",{class:"fas fa-lock mr-1"},null,-1),x("专属 ",-1)]))):l.accountType==="group"?(o(),n("span",Rf,s[58]||(s[58]=[e("i",{class:"fas fa-layer-group mr-1"},null,-1),x("分组调度 ",-1)]))):(o(),n("span",Of,s[59]||(s[59]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),x("共享 ",-1)])))]),l.groupInfos&&l.groupInfos.length>0?(o(),n("div",Ef,[(o(!0),n(Ce,null,We(l.groupInfos,xe=>(o(),n("span",{key:xe.id,class:"inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-600 dark:bg-gray-700 dark:text-gray-400",title:`所属分组: ${xe.name}`},[s[60]||(s[60]=e("i",{class:"fas fa-folder mr-1"},null,-1)),x(u(xe.name),1)],8,Nf))),128))])):c("",!0),e("div",{class:"truncate text-xs text-gray-500 dark:text-gray-400",title:l.id},u(l.id),9,qf)])])],2),e("td",Wf,[e("div",Ff,[l.platform==="gemini"?(o(),n("div",Bf,[s[62]||(s[62]=e("i",{class:"fas fa-robot text-xs text-yellow-700"},null,-1)),s[63]||(s[63]=e("span",{class:"text-xs font-semibold text-yellow-800"},"Gemini",-1)),s[64]||(s[64]=e("span",{class:"mx-1 h-4 w-px bg-yellow-300"},null,-1)),e("span",Gf,u(i()),1)])):l.platform==="claude-console"?(o(),n("div",Qf,s[65]||(s[65]=[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",Hf,s[66]||(s[66]=[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",Jf,[s[67]||(s[67]=e("div",{class:"fa-openai"},null,-1)),s[68]||(s[68]=e("span",{class:"text-xs font-semibold text-gray-950"},"OpenAi",-1)),s[69]||(s[69]=e("span",{class:"mx-1 h-4 w-px bg-gray-400"},null,-1)),e("span",Yf,u(ye()),1)])):l.platform==="azure_openai"?(o(),n("div",Zf,s[70]||(s[70]=[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",Xf,s[71]||(s[71]=[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",eb,[s[72]||(s[72]=e("i",{class:"fas fa-brain text-xs text-indigo-700"},null,-1)),e("span",tb,u(L(l)),1),s[73]||(s[73]=e("span",{class:"mx-1 h-4 w-px bg-indigo-300"},null,-1)),e("span",ab,u(ve(l)),1)])):l.platform==="ccr"?(o(),n("div",rb,s[74]||(s[74]=[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",sb,[s[76]||(s[76]=e("i",{class:"fas fa-robot text-xs text-cyan-700 dark:text-cyan-400"},null,-1)),s[77]||(s[77]=e("span",{class:"text-xs font-semibold text-cyan-800 dark:text-cyan-300"},"Droid",-1)),s[78]||(s[78]=e("span",{class:"mx-1 h-4 w-px bg-cyan-300 dark:bg-cyan-600"},null,-1)),e("span",lb,u(me(l)),1),Ne(l)?(o(),n("span",{key:0,class:I(Re(l))},[s[75]||(s[75]=e("i",{class:"fas fa-key text-[9px]"},null,-1)),e("span",null,"x"+u(Be(l)),1)],2)):c("",!0)])):l.platform==="gemini-api"?(o(),n("div",ob,s[79]||(s[79]=[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",nb,s[80]||(s[80]=[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",ib,[e("div",db,[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",ub,[s[81]||(s[81]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),s[82]||(s[82]=x(" 限流中 ",-1)),l.rateLimitStatus&&typeof l.rateLimitStatus=="object"&&l.rateLimitStatus.minutesRemaining>0?(o(),n("span",gb,"("+u(Ra(l.rateLimitStatus.minutesRemaining))+")",1)):c("",!0)])):c("",!0),l.schedulable===!1?(o(),n("span",pb,[s[84]||(s[84]=e("i",{class:"fas fa-pause-circle mr-1"},null,-1)),s[85]||(s[85]=x(" 不可调度 ",-1)),R(l)?(o(),Ye(f,{key:0,content:R(l),effect:"dark",placement:"top"},{default:nt(()=>s[83]||(s[83]=[e("i",{class:"fas fa-question-circle ml-1 cursor-help text-gray-500"},null,-1)])),_:2,__:[83]},1032,["content"])):c("",!0)])):c("",!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,cb)):c("",!0),l.accountType==="dedicated"?(o(),n("span",yb," 绑定: "+u(l.boundApiKeysCount||0)+" 个API Key ",1)):c("",!0)])]),e("td",mb,[l.usage&&l.usage.daily?(o(),n("div",xb,[e("div",fb,[s[86]||(s[86]=e("div",{class:"h-2 w-2 rounded-full bg-blue-500"},null,-1)),e("span",bb,u(l.usage.daily.requests||0)+" 次",1)]),e("div",vb,[s[87]||(s[87]=e("div",{class:"h-2 w-2 rounded-full bg-purple-500"},null,-1)),e("span",kb,u(zt(l.usage.daily.allTokens||0))+"M",1)]),e("div",hb,[s[88]||(s[88]=e("div",{class:"h-2 w-2 rounded-full bg-green-500"},null,-1)),e("span",wb,"$"+u(sr(l)),1)]),l.usage.averages&&l.usage.averages.rpm>0?(o(),n("div",$b," 平均 "+u(l.usage.averages.rpm.toFixed(2))+" RPM ",1)):c("",!0)])):(o(),n("div",Ab,"暂无数据"))]),e("td",Cb,[Ee(mr,{"account-id":l.id,"initial-balance":l.balanceInfo,platform:l.platform,"query-mode":l.platform==="gemini"&&l.oauthProvider==="antigravity"?"auto":"local",onError:xe=>na(l.id,xe),onRefreshed:xe=>Qt(l.id,xe)},null,8,["account-id","initial-balance","platform","query-mode","onError","onRefreshed"]),e("div",Tb,[l.platform==="gemini"&&l.oauthProvider==="antigravity"?c("",!0):(o(),n("button",{key:0,class:"text-blue-500 hover:underline dark:text-blue-300",onClick:xe=>ha(l)}," 配置余额脚本 ",8,Ib))])]),e("td",Ub,[l.platform==="claude"?(o(),n("div",_b,[Me(l)&&l.claudeUsage?(o(),n("div",Kb,[e("div",Sb,[e("div",Mb,[s[89]||(s[89]=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",Db,[e("div",Pb,[e("div",jb,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.fiveHour)]),style:He({width:Ze(l.claudeUsage.fiveHour)})},null,6)]),e("span",Lb,u(Je(l.claudeUsage.fiveHour)),1)])])]),e("div",Vb," 重置剩余 "+u(It(l.claudeUsage.fiveHour)),1)]),e("div",zb,[e("div",Rb,[s[90]||(s[90]=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",Ob,[e("div",Eb,[e("div",Nb,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.sevenDay)]),style:He({width:Ze(l.claudeUsage.sevenDay)})},null,6)]),e("span",qb,u(Je(l.claudeUsage.sevenDay)),1)])])]),e("div",Wb," 重置剩余 "+u(It(l.claudeUsage.sevenDay)),1)]),e("div",Fb,[e("div",Bb,[s[91]||(s[91]=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",Gb,[e("div",Qb,[e("div",Hb,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.sevenDayOpus)]),style:He({width:Ze(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",Jb,u(Je(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",Yb," 重置剩余 "+u(It(l.claudeUsage.sevenDayOpus)),1)])])):!Me(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",Zb,[l.usage&&l.usage.sessionWindow?(o(),n("div",Xb,[e("div",ev,[s[92]||(s[92]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("span",tv,u(zt(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",av,[s[93]||(s[93]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("span",rv," $"+u(Fa(l.usage.sessionWindow.totalCost)),1)])])):c("",!0),e("div",sv,[e("div",lv,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",qe(l.sessionWindow.sessionWindowStatus,l)]),style:He({width:l.sessionWindow.progress+"%"})},null,6)]),e("span",ov,u(l.sessionWindow.progress)+"% ",1)]),e("div",nv,[e("div",null,u(pa(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("div",iv," 剩余 "+u(ca(l.sessionWindow.remainingTime)),1)):c("",!0)])])):(o(),n("div",dv,"暂无统计"))])):l.platform==="claude-console"?(o(),n("div",uv,[e("div",null,[Number(l.dailyQuota)>0?(o(),n(Ce,{key:0},[e("div",gv,[s[94]||(s[94]=e("span",{class:"text-gray-600 dark:text-gray-300"},"额度进度",-1)),e("span",pv,u(Za(l).toFixed(1))+"% ",1)]),e("div",cv,[e("div",yv,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",$r(Za(l))]),style:He({width:Math.min(100,Za(l))+"%"})},null,6)]),e("span",mv," $"+u(Fa(((Te=(ae=l.usage)==null?void 0:ae.daily)==null?void 0:Te.cost)||0))+" / $"+u(Number(l.dailyQuota).toFixed(2)),1)]),e("div",xv,[x(" 剩余 $"+u(Tr(l))+" ",1),e("span",fv,"重置 "+u(l.quotaResetTime||"00:00"),1)])],64)):(o(),n("div",bv,s[95]||(s[95]=[e("i",{class:"fas fa-minus"},null,-1)])))]),e("div",vv,[e("div",kv,[s[96]||(s[96]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发状态",-1)),Number(l.maxConcurrentTasks||0)>0?(o(),n("span",hv,u(Xa(l).toFixed(0))+"% ",1)):c("",!0)]),Number(l.maxConcurrentTasks||0)>0?(o(),n("div",wv,[e("div",$v,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",Ar(Xa(l))]),style:He({width:Math.min(100,Xa(l))+"%"})},null,6)]),e("span",{class:I(["min-w-[48px] text-xs font-medium",Cr(l)])},u(Number(l.activeTaskCount||0))+" / "+u(Number(l.maxConcurrentTasks||0)),3)])):(o(),n("div",Av,s[97]||(s[97]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),x("并发无限制 ",-1)])))])])):l.platform==="openai"?(o(),n("div",Cv,[l.codexUsage?(o(),n("div",Tv,[e("div",Iv,[e("div",Uv,[e("span",_v,u(qa("primary")),1),e("div",Kv,[e("div",Sv,[e("div",Mv,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.primary)]),style:He({width:Ut(l.codexUsage.primary)})},null,6)]),e("span",Dv,u(ta(l.codexUsage.primary)),1)])])]),e("div",Pv," 重置剩余 "+u(Wa(l.codexUsage.primary)),1)]),e("div",jv,[e("div",Lv,[e("span",Vv,u(qa("secondary")),1),e("div",zv,[e("div",Rv,[e("div",Ov,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.secondary)]),style:He({width:Ut(l.codexUsage.secondary)})},null,6)]),e("span",Ev,u(ta(l.codexUsage.secondary)),1)])])]),e("div",Nv," 重置剩余 "+u(Wa(l.codexUsage.secondary)),1)])])):(o(),n("div",qv,s[98]||(s[98]=[e("span",{class:"text-xs"},"N/A",-1)])))])):(o(),n("div",Wv,s[99]||(s[99]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",Fv,u(da(l.lastUsedAt)),1),e("td",Bv,[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",Gv,[e("div",Qv,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-green-500 to-blue-600 transition-all duration-300",style:He({width:101-(l.priority||50)+"%"})},null,4)]),e("span",Hv,u(l.priority||50),1)])):(o(),n("div",Jv,s[100]||(s[100]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",Yv,[Jt(l.proxy)?(o(),n("div",{key:0,class:"break-all rounded bg-blue-50 px-2 py-1 font-mono text-xs",title:Jt(l.proxy)},u(Jt(l.proxy)),9,Zv)):(o(),n("div",Xv,"无代理"))]),e("td",e1,[e("div",t1,[l.expiresAt?(o(),n("span",a1,[Ir(l.expiresAt)?(o(),n("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:_t(xe=>Ba(l),["stop"])},s[101]||(s[101]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),x(" 已过期 ",-1)]),8,r1)):Ur(l.expiresAt)?(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:_t(xe=>Ba(l),["stop"])},[s[102]||(s[102]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),x(" "+u(lr(l.expiresAt)),1)],8,s1)):(o(),n("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:_t(xe=>Ba(l),["stop"])},u(lr(l.expiresAt)),9,l1))])):(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:_t(xe=>Ba(l),["stop"])},s[103]||(s[103]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),x(" 永不过期 ",-1)]),8,o1))])]),e("td",n1,[Ge.value?(o(),n("div",f1,[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:xe=>d(l)},[e("i",{class:I(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",v1,u(l.schedulable?"调度":"停用"),1)],10,b1),e("button",{class:"rounded bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200",title:"编辑账户",onClick:xe=>Yt(l)},s[110]||(s[110]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,k1),Ee(Rr,{actions:Lt(l)},null,8,["actions"])])):(o(),n("div",i1,[jt(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:xe=>fa(l)},[e("i",{class:I(["fas fa-redo",l.isResetting?"animate-spin":""])},null,2),s[104]||(s[104]=e("span",{class:"ml-1"},"重置状态",-1))],10,d1)):c("",!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:xe=>d(l)},[e("i",{class:I(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",g1,u(l.schedulable?"调度":"停用"),1)],10,u1),kt(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:xe=>wt(l)},s[105]||(s[105]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,p1)):c("",!0),dt(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:xe=>et(l)},s[106]||(s[106]=[e("i",{class:"fas fa-vial"},null,-1),e("span",{class:"ml-1"},"测试",-1)]),8,c1)):c("",!0),dt(l)?(o(),n("button",{key:3,class:"rounded bg-amber-100 px-2.5 py-1 text-xs font-medium text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/40 dark:text-amber-300 dark:hover:bg-amber-800/50",title:"定时测试配置",onClick:xe=>At(l)},s[107]||(s[107]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1"},"定时",-1)]),8,y1)):c("",!0),e("button",{class:"rounded bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200",title:"编辑账户",onClick:xe=>Yt(l)},s[108]||(s[108]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,m1),e("button",{class:"rounded bg-red-100 px-2.5 py-1 text-xs font-medium text-red-700 transition-colors hover:bg-red-200",title:"删除账户",onClick:xe=>Zt(l)},s[109]||(s[109]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,x1)]))])])}),128))])])],512)])),!C.value&&mt.value.length>0?(o(),n("div",h1,[(o(!0),n(Ce,null,We(gt.value,l=>{var ae,Te,xe,Ue;return o(),n("div",{key:l.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",w1,[e("div",$1,[m.value?b((o(),n("input",{key:0,"onUpdate:modelValue":s[16]||(s[16]=re=>_.value=re),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:tt},null,40,A1)),[[ze,_.value]]):c("",!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",C1,u(l.name||l.email),1),e("div",T1,[e("span",I1,u(l.platform),1),s[111]||(s[111]=e("span",{class:"text-xs text-gray-400"},"|",-1)),e("span",U1,u(l.type),1)])])]),e("span",{class:I(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",X(l)])},[e("div",{class:I(["mr-1.5 h-1.5 w-1.5 rounded-full",Se(l)])},null,2),x(" "+u(Ie(l)),1)],2)]),e("div",_1,[e("div",null,[s[115]||(s[115]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"今日使用",-1)),e("div",K1,[e("div",S1,[s[112]||(s[112]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-blue-500"},null,-1)),e("p",M1,u(((Te=(ae=l.usage)==null?void 0:ae.daily)==null?void 0:Te.requests)||0)+" 次 ",1)]),e("div",D1,[s[113]||(s[113]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",P1,u(zt(((Ue=(xe=l.usage)==null?void 0:xe.daily)==null?void 0:Ue.allTokens)||0))+"M ",1)]),e("div",j1,[s[114]||(s[114]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",L1," $"+u(sr(l)),1)])])]),e("div",null,[s[118]||(s[118]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"会话窗口",-1)),l.usage&&l.usage.sessionWindow?(o(),n("div",V1,[e("div",z1,[s[116]||(s[116]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",R1,u(zt(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",O1,[s[117]||(s[117]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",E1," $"+u(Fa(l.usage.sessionWindow.totalCost)),1)])])):(o(),n("div",N1,"-"))])]),e("div",q1,[s[119]||(s[119]=e("p",{class:"mb-1 text-xs text-gray-500 dark:text-gray-400"},"余额/配额",-1)),Ee(mr,{"account-id":l.id,"initial-balance":l.balanceInfo,platform:l.platform,"query-mode":l.platform==="gemini"&&l.oauthProvider==="antigravity"?"auto":"local",onError:re=>na(l.id,re),onRefreshed:re=>Qt(l.id,re)},null,8,["account-id","initial-balance","platform","query-mode","onError","onRefreshed"]),e("div",W1,[l.platform==="gemini"&&l.oauthProvider==="antigravity"?c("",!0):(o(),n("button",{key:0,class:"text-blue-500 hover:underline dark:text-blue-300",onClick:re=>ha(l)}," 配置余额脚本 ",8,F1))])]),e("div",B1,[l.platform==="claude"?(o(),n("div",G1,[Me(l)&&l.claudeUsage?(o(),n("div",Q1,[e("div",H1,[e("div",J1,[s[120]||(s[120]=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",Y1,[e("div",Z1,[e("div",X1,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.fiveHour)]),style:He({width:Ze(l.claudeUsage.fiveHour)})},null,6)]),e("span",ek,u(Je(l.claudeUsage.fiveHour)),1)])])]),e("div",tk," 重置剩余 "+u(It(l.claudeUsage.fiveHour)),1)]),e("div",ak,[e("div",rk,[s[121]||(s[121]=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",sk,[e("div",lk,[e("div",ok,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.sevenDay)]),style:He({width:Ze(l.claudeUsage.sevenDay)})},null,6)]),e("span",nk,u(Je(l.claudeUsage.sevenDay)),1)])])]),e("div",ik," 重置剩余 "+u(It(l.claudeUsage.sevenDay)),1)]),e("div",dk,[e("div",uk,[s[122]||(s[122]=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",gk,[e("div",pk,[e("div",ck,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.sevenDayOpus)]),style:He({width:Ze(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",yk,u(Je(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",mk," 重置剩余 "+u(It(l.claudeUsage.sevenDayOpus)),1)])])):!Me(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",xk,[e("div",fk,[e("div",bk,[s[124]||(s[124]=e("span",{class:"font-medium text-gray-600 dark:text-gray-300"},"会话窗口",-1)),Ee(f,{content:"会话窗口进度不代表使用量仅表示距离下一个5小时窗口的剩余时间",placement:"top"},{default:nt(()=>s[123]||(s[123]=[e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600"},null,-1)])),_:1,__:[123]})]),e("span",vk,u(l.sessionWindow.progress)+"% ",1)]),e("div",kk,[e("div",{class:I(["h-full transition-all duration-300",qe(l.sessionWindow.sessionWindowStatus,l)]),style:He({width:l.sessionWindow.progress+"%"})},null,6)]),e("div",hk,[e("span",wk,u(pa(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("span",$k," 剩余 "+u(ca(l.sessionWindow.remainingTime)),1)):(o(),n("span",Ak," 已结束 "))])])):(o(),n("div",Ck,"暂无统计"))])):l.platform==="openai"?(o(),n("div",Tk,[l.codexUsage?(o(),n("div",Ik,[e("div",Uk,[e("div",_k,[e("span",Kk,u(qa("primary")),1),e("div",Sk,[e("div",Mk,[e("div",Dk,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.primary)]),style:He({width:Ut(l.codexUsage.primary)})},null,6)]),e("span",Pk,u(ta(l.codexUsage.primary)),1)])])]),e("div",jk," 重置剩余 "+u(Wa(l.codexUsage.primary)),1)]),e("div",Lk,[e("div",Vk,[e("span",zk,u(qa("secondary")),1),e("div",Rk,[e("div",Ok,[e("div",Ek,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.secondary)]),style:He({width:Ut(l.codexUsage.secondary)})},null,6)]),e("span",Nk,u(ta(l.codexUsage.secondary)),1)])])]),e("div",qk," 重置剩余 "+u(Wa(l.codexUsage.secondary)),1)])])):c("",!0),l.codexUsage?c("",!0):(o(),n("div",Wk,"暂无统计"))])):c("",!0),e("div",Fk,[s[125]||(s[125]=e("span",{class:"text-gray-500 dark:text-gray-400"},"最后使用",-1)),e("span",Bk,u(l.lastUsedAt?Le(l.lastUsedAt):"从未使用"),1)]),l.proxyConfig&&l.proxyConfig.type!=="none"?(o(),n("div",Gk,[s[126]||(s[126]=e("span",{class:"text-gray-500 dark:text-gray-400"},"代理",-1)),e("span",Qk,u(l.proxyConfig.type.toUpperCase()),1)])):c("",!0),e("div",Hk,[s[127]||(s[127]=e("span",{class:"text-gray-500 dark:text-gray-400"},"优先级",-1)),e("span",Jk,u(l.priority||50),1)])]),e("div",Yk,[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:re=>d(l)},[e("i",{class:I(["fas",l.schedulable?"fa-pause":"fa-play"])},null,2),x(" "+u(l.schedulable?"暂停":"启用"),1)],10,Zk),kt(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:re=>wt(l)},s[128]||(s[128]=[e("i",{class:"fas fa-chart-line"},null,-1),x(" 详情 ",-1)]),8,Xk)):c("",!0),dt(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:re=>et(l)},s[129]||(s[129]=[e("i",{class:"fas fa-vial"},null,-1),x(" 测试 ",-1)]),8,e2)):c("",!0),dt(l)?(o(),n("button",{key:2,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-amber-50 px-3 py-2 text-xs text-amber-600 transition-colors hover:bg-amber-100 dark:bg-amber-900/40 dark:text-amber-300 dark:hover:bg-amber-800/50",onClick:re=>At(l)},s[130]||(s[130]=[e("i",{class:"fas fa-clock"},null,-1),x(" 定时 ",-1)]),8,t2)):c("",!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:re=>Yt(l)},s[131]||(s[131]=[e("i",{class:"fas fa-edit mr-1"},null,-1),x(" 编辑 ",-1)]),8,a2),e("button",{class:"rounded-lg bg-red-50 px-3 py-2 text-xs text-red-600 transition-colors hover:bg-red-100",onClick:re=>Zt(l)},s[132]||(s[132]=[e("i",{class:"fas fa-trash"},null,-1)]),8,r2)])])}),128))])):c("",!0)]),!C.value&&mt.value.length>0?(o(),n("div",s2,[e("div",l2,[e("span",o2," 共 "+u(mt.value.length)+" 条记录 ",1),e("div",n2,[s[133]||(s[133]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),b(e("select",{"onUpdate:modelValue":s[17]||(s[17]=l=>ce.value=l),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm",onChange:s[18]||(s[18]=l=>B.value=1)},[(o(),n(Ce,null,We(D,l=>e("option",{key:l,value:l},u(l),9,i2)),64))],544),[[Ja,ce.value]]),s[134]||(s[134]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",d2,[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:B.value===1,onClick:s[19]||(s[19]=l=>B.value--)},s[135]||(s[135]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,u2),e("div",g2,[xt.value?(o(),n("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:s[20]||(s[20]=l=>B.value=1)}," 1 ")):c("",!0),Aa.value?(o(),n("span",p2," ... ")):c("",!0),(o(!0),n(Ce,null,We(Ct.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===B.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:ae=>B.value=l},u(l),11,c2))),128)),Ca.value?(o(),n("span",y2," ... ")):c("",!0),la.value?(o(),n("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:s[21]||(s[21]=l=>B.value=Ve.value)},u(Ve.value),1)):c("",!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:B.value===Ve.value||Ve.value===0,onClick:s[22]||(s[22]=l=>B.value++)},s[136]||(s[136]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,m2)])])):c("",!0),E.value&&(!Qe.value||Qe.value!=="ccr")?(o(),Ye(cr,{key:1,onClose:ya,onPlatformChanged:s[23]||(s[23]=l=>Qe.value=l),onSuccess:t})):E.value&&Qe.value==="ccr"?(o(),Ye(yr,{key:2,onClose:ya,onSuccess:t})):c("",!0),it.value&&yt.value&&yt.value.platform==="ccr"?(o(),Ye(yr,{key:3,account:yt.value,onClose:s[24]||(s[24]=l=>it.value=!1),onSuccess:ie},null,8,["account"])):it.value?(o(),Ye(cr,{key:4,account:yt.value,onClose:s[25]||(s[25]=l=>it.value=!1),onSuccess:ie},null,8,["account"])):c("",!0),Ee(kr,{"cancel-text":st(p).cancelText,"confirm-text":st(p).confirmText,message:st(p).message,show:st(Pe),title:st(p).title,onCancel:st(V),onConfirm:st(K)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),F.value?(o(),Ye(Ky,{key:5,account:S.value||{},"generated-at":je.value,history:h.value,loading:ee.value,overview:le.value,show:F.value,summary:fe.value,onClose:$t},null,8,["account","generated-at","history","loading","overview","show","summary"])):c("",!0),Ee(Xy,{ref_key:"expiryEditModalRef",ref:q,account:T.value||{id:null,expiresAt:null,name:""},show:!!T.value,onClose:or,onSave:_r},null,8,["account","show"]),Ee(Tm,{account:ge.value,show:be.value,onClose:Wt},null,8,["account","show"]),Ee(tx,{account:a.value,show:de.value,onClose:Ft,onSaved:Bt},null,8,["account","show"]),Ee(Hx,{account:Vt.value,show:Gt.value,onClose:wa,onSaved:$a},null,8,["account","show"]),Ee(A,{modelValue:te.value,"onUpdate:modelValue":s[26]||(s[26]=l=>te.value=l),style:{maxWidth:"1200px"},title:"账户统计汇总",width:"90%"},{default:nt(()=>[e("div",x2,[e("div",f2,[e("table",b2,[s[138]||(s[138]=e("thead",{class:"bg-gray-100 dark:bg-gray-700"},[e("tr",null,[e("th",{class:"border border-gray-300 px-4 py-2 text-left dark:border-gray-600"}," 平台类型 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 正常 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 不可调度 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流0-1h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流1-5h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流5-12h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流12-24h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流>24h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 其他 "),e("th",{class:"border border-gray-300 bg-blue-50 px-4 py-2 text-center font-bold dark:border-gray-600 dark:bg-blue-900/30"}," 合计 ")])],-1)),e("tbody",null,[(o(!0),n(Ce,null,We(sa.value,l=>(o(),n("tr",{key:l.platform},[e("td",v2,u(l.platformLabel),1),e("td",k2,[e("span",h2,u(l.normal),1)]),e("td",w2,[e("span",$2,u(l.unschedulable),1)]),e("td",A2,[e("span",C2,u(l.rateLimit0_1h),1)]),e("td",T2,[e("span",I2,u(l.rateLimit1_5h),1)]),e("td",U2,[e("span",_2,u(l.rateLimit5_12h),1)]),e("td",K2,[e("span",S2,u(l.rateLimit12_24h),1)]),e("td",M2,[e("span",D2,u(l.rateLimitOver24h),1)]),e("td",P2,[e("span",j2,u(l.other),1)]),e("td",L2,u(l.total),1)]))),128)),e("tr",V2,[s[137]||(s[137]=e("td",{class:"border border-gray-300 px-4 py-2 dark:border-gray-600"},"合计",-1)),e("td",z2,[e("span",R2,u(ut.value.normal),1)]),e("td",O2,[e("span",E2,u(ut.value.unschedulable),1)]),e("td",N2,[e("span",q2,u(ut.value.rateLimit0_1h),1)]),e("td",W2,[e("span",F2,u(ut.value.rateLimit1_5h),1)]),e("td",B2,[e("span",G2,u(ut.value.rateLimit5_12h),1)]),e("td",Q2,[e("span",H2,u(ut.value.rateLimit12_24h),1)]),e("td",J2,[e("span",Y2,u(ut.value.rateLimitOver24h),1)]),e("td",Z2,[e("span",X2,u(ut.value.other),1)]),e("td",e3,u(ut.value.total),1)])])])]),s[139]||(s[139]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," 注:限流时间列表示剩余限流时间在指定范围内的账户数量 ",-1))])]),_:1},8,["modelValue"])])}}},d3=ra(t3,[["__scopeId","data-v-9813ec02"]]);export{d3 as default};