mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-22 16:43:35 +00:00
72 lines
434 KiB
JavaScript
72 lines
434 KiB
JavaScript
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"},"项目 ID(Project ID)"),x(",通常是字符串格式 ")]),e("li",{class:"text-red-600"}," ⚠️ 注意:要复制项目 ID(Project ID),不要复制项目编号(Project Number)! ")])]),e("p",{class:"mt-2"},[e("strong",null,"提示:"),x("如果您的账号是普通个人账号(未绑定 Google Cloud),请留空此字段。 ")])])])],-1))])):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 Token,Token 过期后需要手动更新。 ")):(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&<.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};
|