mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-22 16:43:35 +00:00
45 lines
402 KiB
JavaScript
45 lines
402 KiB
JavaScript
import{e as cr,f as mr}from"./element-plus-BQHxDbdW.js";import{r as $,aP as xr,o as ve,V as Fa,x as n,y as o,z as e,L as c,K as v,al as je,aT as zt,O as f,aq as z,aa as fr,P as u,aV as Na,aY as ma,C as U,c as ie,Z as br,an as Se,Q as he,q as xa,I as Je,ac as We,a5 as Tt,R as Be,B as He,u as rt,aX as vr,aU as kr,D as Ha,_ as hr,J as Pt,Y as It}from"./vue-vendor-R8HMg95E.js";import{c as Q,s as L,_ as fa,a as wr,A as Wa}from"./index-CALK15rm.js";import{C as ir}from"./ConfirmModal-Dbea5jq0.js";import{C as $r}from"./chart-yFHxLHpB.js";import{C as Oa,_ as Ar}from"./ActionDropdown-CB8fMlXn.js";import"./vendor-Dr8jvgFu.js";const Ea=$(!1),sr=$({title:"",message:"",confirmText:"继续",cancelText:"取消"}),Lt=$(null);function dr(){return{showConfirmModal:Ea,confirmOptions:sr,showConfirm:(B,I,N="继续",S="取消")=>new Promise(M=>{sr.value={title:B,message:I,confirmText:N,cancelText:S},Lt.value=M,Ea.value=!0}),handleConfirm:()=>{Ea.value=!1,Lt.value&&(Lt.value(!0),Lt.value=null)},handleCancel:()=>{Ea.value=!1,Lt.value&&(Lt.value(!1),Lt.value=null)}}}const ur=xr("accounts",()=>{const J=$([]),Le=$([]),g=$([]),B=$([]),I=$([]),N=$([]),S=$([]),M=$([]),b=$(!1),w=$(null),q=$(""),se=$("asc"),ee=async()=>{b.value=!0,w.value=null;try{const k=await Q.get("/admin/claude-accounts");if(k.success)J.value=k.data||[];else throw new Error(k.message||"获取Claude账户失败")}catch(k){throw w.value=k.message,k}finally{b.value=!1}},ue=async()=>{b.value=!0,w.value=null;try{const k=await Q.get("/admin/claude-console-accounts");if(k.success)Le.value=k.data||[];else throw new Error(k.message||"获取Claude Console账户失败")}catch(k){throw w.value=k.message,k}finally{b.value=!1}},G=async()=>{b.value=!0,w.value=null;try{const k=await Q.get("/admin/bedrock-accounts");if(k.success)g.value=k.data||[];else throw new Error(k.message||"获取Bedrock账户失败")}catch(k){throw w.value=k.message,k}finally{b.value=!1}},V=async()=>{b.value=!0,w.value=null;try{const k=await Q.get("/admin/gemini-accounts");if(k.success)B.value=k.data||[];else throw new Error(k.message||"获取Gemini账户失败")}catch(k){throw w.value=k.message,k}finally{b.value=!1}},E=async()=>{b.value=!0,w.value=null;try{const k=await Q.get("/admin/openai-accounts");if(k.success)I.value=k.data||[];else throw new Error(k.message||"获取OpenAI账户失败")}catch(k){throw w.value=k.message,k}finally{b.value=!1}},x=async()=>{b.value=!0,w.value=null;try{const k=await Q.get("/admin/azure-openai-accounts");if(k.success)N.value=k.data||[];else throw new Error(k.message||"获取Azure OpenAI账户失败")}catch(k){throw w.value=k.message,k}finally{b.value=!1}},p=async()=>{b.value=!0,w.value=null;try{const k=await Q.get("/admin/openai-responses-accounts");if(k.success)S.value=k.data||[];else throw new Error(k.message||"获取OpenAI-Responses账户失败")}catch(k){throw w.value=k.message,k}finally{b.value=!1}},R=async()=>{b.value=!0,w.value=null;try{const k=await Q.get("/admin/droid-accounts");if(k.success)M.value=k.data||[];else throw new Error(k.message||"获取Droid账户失败")}catch(k){throw w.value=k.message,k}finally{b.value=!1}};return{claudeAccounts:J,claudeConsoleAccounts:Le,bedrockAccounts:g,geminiAccounts:B,openaiAccounts:I,azureOpenaiAccounts:N,openaiResponsesAccounts:S,droidAccounts:M,loading:b,error:w,sortBy:q,sortOrder:se,fetchClaudeAccounts:ee,fetchClaudeConsoleAccounts:ue,fetchBedrockAccounts:G,fetchGeminiAccounts:V,fetchOpenAIAccounts:E,fetchAzureOpenAIAccounts:x,fetchOpenAIResponsesAccounts:p,fetchDroidAccounts:R,fetchAllAccounts:async()=>{b.value=!0,w.value=null;try{await Promise.all([ee(),ue(),G(),V(),E(),x(),p(),R()])}catch(k){throw w.value=k.message,k}finally{b.value=!1}},createClaudeAccount:async k=>{b.value=!0,w.value=null;try{const y=await Q.post("/admin/claude-accounts",k);if(y.success)return await ee(),y.data;throw new Error(y.message||"创建Claude账户失败")}catch(y){throw w.value=y.message,y}finally{b.value=!1}},createClaudeConsoleAccount:async k=>{b.value=!0,w.value=null;try{const y=await Q.post("/admin/claude-console-accounts",k);if(y.success)return await ue(),y.data;throw new Error(y.message||"创建Claude Console账户失败")}catch(y){throw w.value=y.message,y}finally{b.value=!1}},createBedrockAccount:async k=>{b.value=!0,w.value=null;try{const y=await Q.post("/admin/bedrock-accounts",k);if(y.success)return await G(),y.data;throw new Error(y.message||"创建Bedrock账户失败")}catch(y){throw w.value=y.message,y}finally{b.value=!1}},createGeminiAccount:async k=>{b.value=!0,w.value=null;try{const y=await Q.post("/admin/gemini-accounts",k);if(y.success)return await V(),y.data;throw new Error(y.message||"创建Gemini账户失败")}catch(y){throw w.value=y.message,y}finally{b.value=!1}},createOpenAIAccount:async k=>{b.value=!0,w.value=null;try{const y=await Q.post("/admin/openai-accounts",k);if(y.success)return await E(),y.data;throw new Error(y.message||"创建OpenAI账户失败")}catch(y){throw w.value=y.message,y}finally{b.value=!1}},createDroidAccount:async k=>{b.value=!0,w.value=null;try{const y=await Q.post("/admin/droid-accounts",k);if(y.success)return await R(),y.data;throw new Error(y.message||"创建Droid账户失败")}catch(y){throw w.value=y.message,y}finally{b.value=!1}},updateDroidAccount:async(k,y)=>{b.value=!0,w.value=null;try{const P=await Q.put(`/admin/droid-accounts/${k}`,y);if(P.success)return await R(),P.data;throw new Error(P.message||"更新Droid账户失败")}catch(P){throw w.value=P.message,P}finally{b.value=!1}},createAzureOpenAIAccount:async k=>{b.value=!0,w.value=null;try{const y=await Q.post("/admin/azure-openai-accounts",k);if(y.success)return await x(),y.data;throw new Error(y.message||"创建Azure OpenAI账户失败")}catch(y){throw w.value=y.message,y}finally{b.value=!1}},createOpenAIResponsesAccount:async k=>{b.value=!0,w.value=null;try{const y=await Q.post("/admin/openai-responses-accounts",k);if(y.success)return await p(),y.data;throw new Error(y.message||"创建OpenAI-Responses账户失败")}catch(y){throw w.value=y.message,y}finally{b.value=!1}},createGeminiApiAccount:async k=>{b.value=!0,w.value=null;try{const y=await Q.post("/admin/gemini-api-accounts",k);if(y.success)return await V(),y.data;throw new Error(y.message||"创建Gemini API账户失败")}catch(y){throw w.value=y.message,y}finally{b.value=!1}},updateClaudeAccount:async(k,y)=>{b.value=!0,w.value=null;try{const P=await Q.put(`/admin/claude-accounts/${k}`,y);if(P.success)return await ee(),P;throw new Error(P.message||"更新Claude账户失败")}catch(P){throw w.value=P.message,P}finally{b.value=!1}},updateClaudeConsoleAccount:async(k,y)=>{b.value=!0,w.value=null;try{const P=await Q.put(`/admin/claude-console-accounts/${k}`,y);if(P.success)return await ue(),P;throw new Error(P.message||"更新Claude Console账户失败")}catch(P){throw w.value=P.message,P}finally{b.value=!1}},updateBedrockAccount:async(k,y)=>{b.value=!0,w.value=null;try{const P=await Q.put(`/admin/bedrock-accounts/${k}`,y);if(P.success)return await G(),P;throw new Error(P.message||"更新Bedrock账户失败")}catch(P){throw w.value=P.message,P}finally{b.value=!1}},updateGeminiAccount:async(k,y)=>{b.value=!0,w.value=null;try{const P=await Q.put(`/admin/gemini-accounts/${k}`,y);if(P.success)return await V(),P;throw new Error(P.message||"更新Gemini账户失败")}catch(P){throw w.value=P.message,P}finally{b.value=!1}},updateOpenAIAccount:async(k,y)=>{b.value=!0,w.value=null;try{const P=await Q.put(`/admin/openai-accounts/${k}`,y);if(P.success)return await E(),P;throw new Error(P.message||"更新OpenAI账户失败")}catch(P){throw w.value=P.message,P}finally{b.value=!1}},updateAzureOpenAIAccount:async(k,y)=>{b.value=!0,w.value=null;try{const P=await Q.put(`/admin/azure-openai-accounts/${k}`,y);if(P.success)return await x(),P;throw new Error(P.message||"更新Azure OpenAI账户失败")}catch(P){throw w.value=P.message,P}finally{b.value=!1}},updateOpenAIResponsesAccount:async(k,y)=>{b.value=!0,w.value=null;try{const P=await Q.put(`/admin/openai-responses-accounts/${k}`,y);if(P.success)return await p(),P;throw new Error(P.message||"更新OpenAI-Responses账户失败")}catch(P){throw w.value=P.message,P}finally{b.value=!1}},updateGeminiApiAccount:async(k,y)=>{b.value=!0,w.value=null;try{const P=await Q.put(`/admin/gemini-api-accounts/${k}`,y);if(P.success)return await V(),P;throw new Error(P.message||"更新Gemini API账户失败")}catch(P){throw w.value=P.message,P}finally{b.value=!1}},toggleAccount:async(k,y)=>{b.value=!0,w.value=null;try{let P;k==="claude"?P=`/admin/claude-accounts/${y}/toggle`:k==="claude-console"?P=`/admin/claude-console-accounts/${y}/toggle`:k==="bedrock"?P=`/admin/bedrock-accounts/${y}/toggle`:k==="gemini"?P=`/admin/gemini-accounts/${y}/toggle`:k==="openai"?P=`/admin/openai-accounts/${y}/toggle`:k==="azure_openai"?P=`/admin/azure-openai-accounts/${y}/toggle`:k==="openai-responses"?P=`/admin/openai-responses-accounts/${y}/toggle`:P=`/admin/openai-accounts/${y}/toggle`;const Qe=await Q.put(P);if(Qe.success)return k==="claude"?await ee():k==="claude-console"?await ue():k==="bedrock"?await G():k==="gemini"?await V():k==="openai"?await E():k==="azure_openai"?await x():k==="openai-responses"?await p():await E(),Qe;throw new Error(Qe.message||"切换状态失败")}catch(P){throw w.value=P.message,P}finally{b.value=!1}},deleteAccount:async(k,y)=>{b.value=!0,w.value=null;try{let P;k==="claude"?P=`/admin/claude-accounts/${y}`:k==="claude-console"?P=`/admin/claude-console-accounts/${y}`:k==="bedrock"?P=`/admin/bedrock-accounts/${y}`:k==="gemini"?P=`/admin/gemini-accounts/${y}`:k==="openai"?P=`/admin/openai-accounts/${y}`:k==="azure_openai"?P=`/admin/azure-openai-accounts/${y}`:k==="openai-responses"?P=`/admin/openai-responses-accounts/${y}`:P=`/admin/openai-accounts/${y}`;const Qe=await Q.delete(P);if(Qe.success)return k==="claude"?await ee():k==="claude-console"?await ue():k==="bedrock"?await G():k==="gemini"?await V():k==="openai"?await E():k==="azure_openai"?await x():k==="openai-responses"?await p():await E(),Qe;throw new Error(Qe.message||"删除失败")}catch(P){throw w.value=P.message,P}finally{b.value=!1}},refreshClaudeToken:async k=>{b.value=!0,w.value=null;try{const y=await Q.post(`/admin/claude-accounts/${k}/refresh`);if(y.success)return await ee(),y;throw new Error(y.message||"Token刷新失败")}catch(y){throw w.value=y.message,y}finally{b.value=!1}},generateClaudeAuthUrl:async k=>{try{const y=await Q.post("/admin/claude-accounts/generate-auth-url",k);if(y.success)return y.data;throw new Error(y.message||"生成授权URL失败")}catch(y){throw w.value=y.message,y}},exchangeClaudeCode:async k=>{try{const y=await Q.post("/admin/claude-accounts/exchange-code",k);if(y.success)return y.data;throw new Error(y.message||"交换授权码失败")}catch(y){throw w.value=y.message,y}},generateClaudeSetupTokenUrl:async k=>{try{const y=await Q.post("/admin/claude-accounts/generate-setup-token-url",k);if(y.success)return y.data;throw new Error(y.message||"生成Setup Token URL失败")}catch(y){throw w.value=y.message,y}},exchangeClaudeSetupTokenCode:async k=>{try{const y=await Q.post("/admin/claude-accounts/exchange-setup-token-code",k);if(y.success)return y.data;throw new Error(y.message||"交换Setup Token授权码失败")}catch(y){throw w.value=y.message,y}},oauthWithCookie:async k=>{try{const y=await Q.post("/admin/claude-accounts/oauth-with-cookie",k);if(y.success)return y.data;throw new Error(y.message||"Cookie授权失败")}catch(y){throw w.value=y.message,y}},oauthSetupTokenWithCookie:async k=>{try{const y=await Q.post("/admin/claude-accounts/setup-token-with-cookie",k);if(y.success)return y.data;throw new Error(y.message||"Cookie授权失败")}catch(y){throw w.value=y.message,y}},generateGeminiAuthUrl:async k=>{try{const y=await Q.post("/admin/gemini-accounts/generate-auth-url",k);if(y.success)return y.data;throw new Error(y.message||"生成授权URL失败")}catch(y){throw w.value=y.message,y}},exchangeGeminiCode:async k=>{try{const y=await Q.post("/admin/gemini-accounts/exchange-code",k);if(y.success)return y.data;throw new Error(y.message||"交换授权码失败")}catch(y){throw w.value=y.message,y}},generateOpenAIAuthUrl:async k=>{try{const y=await Q.post("/admin/openai-accounts/generate-auth-url",k);if(y.success)return y.data;throw new Error(y.message||"生成授权URL失败")}catch(y){throw w.value=y.message,y}},exchangeOpenAICode:async k=>{try{const y=await Q.post("/admin/openai-accounts/exchange-code",k);if(y.success)return y.data;throw new Error(y.message||"交换授权码失败")}catch(y){throw w.value=y.message,y}},generateDroidAuthUrl:async k=>{w.value=null;try{const y=await Q.post("/admin/droid-accounts/generate-auth-url",k);if(y.success)return y.data;throw new Error(y.message||"生成授权URL失败")}catch(y){throw w.value=y.message,y}},exchangeDroidCode:async k=>{w.value=null;try{return await Q.post("/admin/droid-accounts/exchange-code",k)}catch(y){throw w.value=y.message,y}},sortAccounts:k=>{q.value===k?se.value=se.value==="asc"?"desc":"asc":(q.value=k,se.value="asc")},reset:()=>{J.value=[],Le.value=[],g.value=[],B.value=[],I.value=[],N.value=[],S.value=[],M.value=[],b.value=!1,w.value=null,q.value="",se.value="asc"}}}),Cr={class:"space-y-4"},Ur={class:"flex items-center justify-between"},Ir={class:"flex cursor-pointer items-center"},Tr={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"},_r={class:"relative"},Kr={key:0,class:"mt-1 text-xs text-red-500"},Mr={key:1,class:"mt-1 text-xs text-green-500"},Sr={class:"grid grid-cols-2 gap-4"},Dr={class:"space-y-4"},jr={class:"flex items-center"},Pr={key:0,class:"grid grid-cols-2 gap-4"},Lr={class:"relative"},zr=["type"],Ja={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(J,{emit:Le}){const g=J,B=Le,I=$({...g.modelValue}),N=$(!!(I.value.username||I.value.password)),S=$(!1),M=$(""),b=$(""),w=$(!1);ve(()=>g.modelValue,E=>{JSON.stringify(E)!==JSON.stringify(I.value)&&(I.value={...E},N.value=!!(E.username||E.password))},{deep:!0}),ve(()=>I.value.enabled,()=>{se()}),ve(()=>I.value.type,()=>{se()}),ve(()=>I.value.host,()=>{se()}),ve(()=>I.value.port,()=>{se()}),ve(()=>I.value.username,()=>{se()}),ve(()=>I.value.password,()=>{se()}),ve(N,E=>{E||(I.value.username="",I.value.password="",se())});let q=null;function se(){q&&clearTimeout(q),q=setTimeout(()=>{const E={...I.value};N.value||(E.username="",E.password=""),B("update:modelValue",E)},100)}function ee(){if(b.value="",w.value=!1,!!M.value)try{const E=M.value.split("#")[0].trim();if(!E)return;const x=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,p=E.match(x);if(!p){const Ae=/^([^:]+):(\d+)$/,pe=E.match(Ae);if(pe){I.value.type="socks5",I.value.host=pe[1],I.value.port=pe[2],I.value.username="",I.value.password="",N.value=!1,w.value=!0,se(),setTimeout(()=>{w.value=!1},3e3);return}b.value="无效的代理URL格式,请检查输入";return}const[,R,te,F,T,Y]=p;I.value.type=R.toLowerCase(),I.value.host=T,I.value.port=Y,te&&F?(I.value.username=decodeURIComponent(te),I.value.password=decodeURIComponent(F),N.value=!0):(I.value.username="",I.value.password="",N.value=!1),w.value=!0,se(),setTimeout(()=>{w.value=!1},3e3)}catch{b.value="解析失败,请检查URL格式"}}function ue(){M.value="",b.value="",w.value=!1}function G(){setTimeout(()=>{ee()},0)}function V(){const E=M.value.trim();E.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(E)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(E))&&ee():/^[^:]+:\d{2,5}$/.test(E)&&ee()}return Fa(()=>{q&&clearTimeout(q)}),(E,x)=>(o(),n("div",Cr,[e("div",Ur,[x[10]||(x[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",Ir,[v(e("input",{"onUpdate:modelValue":x[0]||(x[0]=p=>I.value.enabled=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[je,I.value.enabled]]),x[9]||(x[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),I.value.enabled?(o(),n("div",Tr,[x[22]||(x[22]=zt('<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,[x[14]||(x[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[f(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",_r,[v(e("input",{"onUpdate:modelValue":x[1]||(x[1]=p=>M.value=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: socks5://username:password@host:port 或 http://host:port",type:"text",onInput:V,onKeyup:fr(ee,["enter"]),onPaste:G},null,544),[[z,M.value]]),M.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:ue},x[11]||(x[11]=[e("i",{class:"fas fa-times"},null,-1)]))):c("",!0)]),b.value?(o(),n("p",Kr,[x[12]||(x[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),f(" "+u(b.value),1)])):w.value?(o(),n("p",Mr,x[13]||(x[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),f(" 代理配置已自动填充 ",-1)]))):c("",!0)]),x[23]||(x[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[x[16]||(x[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),v(e("select",{"onUpdate:modelValue":x[2]||(x[2]=p=>I.value.type=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},x[15]||(x[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[Na,I.value.type]])]),e("div",Sr,[e("div",null,[x[17]||(x[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),v(e("input",{"onUpdate:modelValue":x[3]||(x[3]=p=>I.value.host=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 192.168.1.100",type:"text"},null,512),[[z,I.value.host]])]),e("div",null,[x[18]||(x[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),v(e("input",{"onUpdate:modelValue":x[4]||(x[4]=p=>I.value.port=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 1080",type:"number"},null,512),[[z,I.value.port]])])]),e("div",Dr,[e("div",jr,[v(e("input",{id:"proxyAuth","onUpdate:modelValue":x[5]||(x[5]=p=>N.value=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[je,N.value]]),x[19]||(x[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),N.value?(o(),n("div",Pr,[e("div",null,[x[20]||(x[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),v(e("input",{"onUpdate:modelValue":x[6]||(x[6]=p=>I.value.username=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理用户名",type:"text"},null,512),[[z,I.value.username]])]),e("div",null,[x[21]||(x[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",Lr,[v(e("input",{"onUpdate:modelValue":x[7]||(x[7]=p=>I.value.password=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理密码",type:S.value?"text":"password"},null,8,zr),[[ma,I.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:x[8]||(x[8]=p=>S.value=!S.value)},[e("i",{class:U(S.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):c("",!0)]),x[24]||(x[24]=e("div",{class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-info-circle mr-1"}),e("strong",null,"提示:"),f("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):c("",!0)]))}},Rr={class:"space-y-6"},Vr={key:0},Or={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},Er={class:"flex items-start gap-4"},Nr={class:"flex-1"},Wr={class:"mb-4"},Fr={class:"flex gap-4"},qr={class:"flex cursor-pointer items-center gap-2"},Gr={class:"flex cursor-pointer items-center gap-2"},Qr={key:0,class:"space-y-4"},Br={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Hr={class:"mb-4"},Jr={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},Yr={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},Zr={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},Xr={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"},es={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"},ts={class:"text-sm text-red-600 dark:text-red-400"},as=["disabled"],rs={key:0,class:"loading-spinner mr-2"},ss={key:1,class:"fas fa-magic mr-2"},ls={key:1},os={class:"space-y-4"},ns={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},is={class:"flex items-start gap-3"},ds={class:"flex-1"},us=["disabled"],gs={key:0,class:"fas fa-link mr-2"},ps={key:1,class:"loading-spinner mr-2"},ys={key:1,class:"space-y-3"},cs={class:"flex items-center gap-2"},ms=["value"],xs={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},fs={class:"flex items-start gap-3"},bs={class:"flex-1"},vs={class:"space-y-3"},ks={key:1},hs={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},ws={class:"flex items-start gap-4"},$s={class:"flex-1"},As={class:"space-y-4"},Cs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Us={class:"flex items-start gap-3"},Is={class:"flex-1"},Ts=["disabled"],_s={key:0,class:"fas fa-link mr-2"},Ks={key:1,class:"loading-spinner mr-2"},Ms={key:1,class:"space-y-3"},Ss={class:"flex items-center gap-2"},Ds=["value"],js={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Ps={class:"flex items-start gap-3"},Ls={class:"flex-1"},zs={class:"space-y-3"},Rs={key:2},Vs={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},Os={class:"flex items-start gap-4"},Es={class:"flex-1"},Ns={class:"space-y-4"},Ws={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Fs={class:"flex items-start gap-3"},qs={class:"flex-1"},Gs=["disabled"],Qs={key:0,class:"fas fa-link mr-2"},Bs={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-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Xs={class:"flex items-start gap-3"},el={class:"flex-1"},tl={class:"space-y-3"},al={key:3},rl={class:"rounded-lg border border-cyan-200 bg-cyan-50 p-6 dark:border-cyan-700 dark:bg-cyan-900/30"},sl={class:"flex items-start gap-4"},ll={class:"flex-1"},ol={class:"space-y-4"},nl={class:"rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-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"},yl={key:1,class:"space-y-4"},cl={class:"space-y-2"},ml={class:"flex flex-col gap-2 rounded-md border border-cyan-200 bg-white p-3 dark:border-cyan-700 dark:bg-gray-800"},xl={class:"flex items-center gap-2"},fl=["value"],bl={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"},kl={class:"font-mono text-xl font-semibold text-cyan-700 dark:text-cyan-200"},hl={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},wl={class:"flex gap-3 pt-4"},$l=["disabled"],Al={key:0,class:"loading-spinner mr-2"},Cl={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(J,{expose:Le,emit:g}){const B=J,I=g,N=ur(),S=$(!1),M=$(!1),b=$(""),w=$(""),q=$(!1),se=$(""),ee=$(""),ue=$(""),G=$(""),V=$(0);let E=null;const x=$("manual"),p=$(""),R=$(!1),te=$(""),F=$(!1),T=$({current:0,total:0}),Y=ie(()=>p.value.split(`
|
||
`).map(H=>H.trim()).filter(H=>H.length>0).length),Ae=ie(()=>B.platform==="droid"?!!se.value:b.value&&w.value.trim()),pe=ie(()=>{if(!V.value||V.value<=0)return"00:00";const H=Math.floor(V.value/60),m=V.value%60;return`${H.toString().padStart(2,"0")}:${m.toString().padStart(2,"0")}`}),we=H=>{if(De(),!H||H<=0){V.value=0;return}V.value=Math.floor(H),E=setInterval(()=>{V.value<=1?(V.value=0,De()):V.value-=1},1e3)},De=()=>{E&&(clearInterval(E),E=null)};ve(w,H=>{if(B.platform==="droid"||!H||typeof H!="string")return;const m=H.trim();if(!m)return;if(m.startsWith("http://")||m.startsWith("https://"))if(m.startsWith("http://localhost:45462")||m.startsWith("http://localhost:1455"))try{const Te=new URL(m).searchParams.get("code");Te?(w.value=Te,L("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):L("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(ce){console.error("Failed to parse URL:",ce),L("链接格式错误,请检查是否为完整的 URL","error")}else if(B.platform==="gemini"||B.platform==="openai")try{const Te=new URL(m).searchParams.get("code");Te&&(w.value=Te,L("成功提取授权码!","success"))}catch{}else L("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const X=async()=>{var H;De(),b.value="",w.value="",ee.value="",ue.value="",G.value="",V.value=0,se.value="",q.value=!1,S.value=!0;try{const m=(H=B.proxy)!=null&&H.enabled?{proxy:{type:B.proxy.type,host:B.proxy.host,port:parseInt(B.proxy.port),username:B.proxy.username||null,password:B.proxy.password||null}}:{};if(B.platform==="claude"){const a=await N.generateClaudeAuthUrl(m);b.value=a.authUrl,se.value=a.sessionId}else if(B.platform==="gemini"){const a=await N.generateGeminiAuthUrl(m);b.value=a.authUrl,se.value=a.sessionId}else if(B.platform==="openai"){const a=await N.generateOpenAIAuthUrl(m);b.value=a.authUrl,se.value=a.sessionId}else if(B.platform==="droid"){const a=await N.generateDroidAuthUrl(m);b.value=a.verificationUriComplete||a.verificationUri,ue.value=a.verificationUri,G.value=a.verificationUriComplete||a.verificationUri,ee.value=a.userCode,we(a.expiresIn||300),se.value=a.sessionId}}catch(m){L(m.message||"生成授权链接失败","error")}finally{S.value=!1}},_=()=>{De(),b.value="",w.value="",ee.value="",ue.value="",G.value="",V.value=0,se.value="",X()},Ce=async()=>{if(!b.value){L("请先生成授权链接","warning");return}try{await navigator.clipboard.writeText(b.value),q.value=!0,L("链接已复制","success"),setTimeout(()=>{q.value=!1},2e3)}catch{const m=document.createElement("input");m.value=b.value,document.body.appendChild(m),m.select(),document.execCommand("copy"),document.body.removeChild(m),q.value=!0,L("链接已复制","success"),setTimeout(()=>{q.value=!1},2e3)}},ne=async()=>{if(!ee.value){L("请先生成授权验证码","warning");return}try{await navigator.clipboard.writeText(ee.value),L("验证码已复制","success")}catch{const m=document.createElement("input");m.value=ee.value,document.body.appendChild(m),m.select(),document.execCommand("copy"),document.body.removeChild(m),L("验证码已复制","success")}},Fe=()=>{G.value?window.open(G.value,"_blank","noopener"):ue.value&&window.open(ue.value,"_blank","noopener")},Z=async()=>{var H;if(Ae.value){M.value=!0;try{let m={};B.platform==="claude"?m={sessionId:se.value,callbackUrl:w.value.trim()}:B.platform==="gemini"?m={code:w.value.trim(),sessionId:se.value}:B.platform==="openai"?m={code:w.value.trim(),sessionId:se.value}:B.platform==="droid"&&(m={sessionId:se.value}),(H=B.proxy)!=null&&H.enabled&&(m.proxy={type:B.proxy.type,host:B.proxy.host,port:parseInt(B.proxy.port),username:B.proxy.username||null,password:B.proxy.password||null});let a;if(B.platform==="claude")a=await N.exchangeClaudeCode(m);else if(B.platform==="gemini")a=await N.exchangeGeminiCode(m);else if(B.platform==="openai")a=await N.exchangeOpenAICode(m);else if(B.platform==="droid"){const ce=await N.exchangeDroidCode(m);if(!ce.success){if(ce.pending){const Te=ce.message||"授权尚未完成,请在浏览器确认后稍候再次尝试。";L(Te,"info"),typeof ce.expiresIn=="number"&&ce.expiresIn>=0&&we(ce.expiresIn);return}throw new Error(ce.message||"授权失败,请重试")}a=ce.data,De()}I("success",a)}catch(m){L(m.message||"授权失败,请检查授权码是否正确","error")}finally{M.value=!1}}};br(()=>{De()});const A=async()=>{var Te;const H=p.value.split(`
|
||
`).map(Oe=>Oe.trim()).filter(Oe=>Oe.length>0);if(H.length===0){te.value="请输入至少一个 sessionKey";return}R.value=!0,te.value="",T.value={current:0,total:H.length};const m=(Te=B.proxy)!=null&&Te.enabled?{type:B.proxy.type,host:B.proxy.host,port:parseInt(B.proxy.port),username:B.proxy.username||null,password:B.proxy.password||null}:null,a=[],ce=[];for(let Oe=0;Oe<H.length;Oe++){T.value.current=Oe+1;try{const Ee=await N.oauthWithCookie({sessionKey:H[Oe],proxy:m});a.push(Ee)}catch(Ee){ce.push({index:Oe+1,key:H[Oe].substring(0,20)+"...",error:Ee.message})}}T.value={current:0,total:0},a.length>0?I("success",a):R.value=!1,ce.length>0&&a.length===0?te.value="全部授权失败,请检查 sessionKey 是否有效":ce.length>0&&(te.value=`${ce.length} 个授权失败`)},O=()=>{p.value="",te.value="",R.value=!1,T.value={current:0,total:0}},xe=()=>{O(),b.value="",w.value="",se.value=""};return Le({resetCookieAuth:O}),(H,m)=>(o(),n("div",Rr,[J.platform==="claude"?(o(),n("div",Vr,[e("div",Or,[e("div",Er,[m[29]||(m[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",Nr,[m[28]||(m[28]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"},"Claude 账户授权",-1)),e("div",Wr,[m[10]||(m[10]=e("label",{class:"mb-2 block text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式 ",-1)),e("div",Fr,[e("label",qr,[v(e("input",{"onUpdate:modelValue":m[0]||(m[0]=a=>x.value=a),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"manual",onChange:xe},null,544),[[Se,x.value]]),m[8]||(m[8]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"手动授权",-1))]),e("label",Gr,[v(e("input",{"onUpdate:modelValue":m[1]||(m[1]=a=>x.value=a),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"cookie",onChange:xe},null,544),[[Se,x.value]]),m[9]||(m[9]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"Cookie自动授权",-1))])])]),x.value==="cookie"?(o(),n("div",Qr,[e("div",Br,[m[17]||(m[17]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 使用 claude.ai 的 sessionKey 自动完成 OAuth 授权流程,无需手动打开浏览器。 ",-1)),e("div",Hr,[e("label",Jr,[m[12]||(m[12]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),m[13]||(m[13]=f(" sessionKey ",-1)),Y.value>1?(o(),n("span",Yr,u(Y.value)+" 个 ",1)):c("",!0),e("button",{class:"text-blue-500 hover:text-blue-600",type:"button",onClick:m[2]||(m[2]=a=>F.value=!F.value)},m[11]||(m[11]=[e("i",{class:"fas fa-question-circle"},null,-1)]))]),v(e("textarea",{"onUpdate:modelValue":m[3]||(m[3]=a=>p.value=a),class:"form-input w-full resize-y font-mono text-sm",placeholder:`每行一个 sessionKey,例如:
|
||
sk-ant-sid01-xxxxx...
|
||
sk-ant-sid01-yyyyy...`,rows:"3"},null,512),[[z,p.value]]),Y.value>1?(o(),n("p",Zr,[m[14]||(m[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),f(" 将批量创建 "+u(Y.value)+" 个账户 ",1)])):c("",!0)]),F.value?(o(),n("div",Xr,m[15]||(m[15]=[zt('<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),te.value?(o(),n("div",es,[e("p",ts,[m[16]||(m[16]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),f(" "+u(te.value),1)])])):c("",!0),e("button",{class:"btn btn-primary w-full px-4 py-3 text-base font-semibold",disabled:R.value||!p.value.trim(),type:"button",onClick:A},[R.value?(o(),n("div",rs)):(o(),n("i",ss)),R.value&&T.value.total>1?(o(),n(he,{key:2},[f(" 正在授权 "+u(T.value.current)+"/"+u(T.value.total)+"... ",1)],64)):R.value?(o(),n(he,{key:3},[f(" 正在授权... ")],64)):(o(),n(he,{key:4},[f(" 开始自动授权 ")],64))],8,as)])])):(o(),n("div",ls,[m[27]||(m[27]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤完成 Claude 账户的授权: ",-1)),e("div",os,[e("div",ns,[e("div",is,[m[20]||(m[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",ds,[m[19]||(m[19]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),b.value?(o(),n("div",ys,[e("div",cs,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:b.value},null,8,ms),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:Ce},[e("i",{class:U(q.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:_},m[18]||(m[18]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:S.value,onClick:X},[S.value?(o(),n("div",ps)):(o(),n("i",gs)),f(" "+u(S.value?"生成中...":"生成授权链接"),1)],8,us))])])]),m[26]||(m[26]=zt('<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",xs,[e("div",fs,[m[25]||(m[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",bs,[m[23]||(m[23]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),m[24]||(m[24]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"},[f(" 授权完成后,页面会显示一个 "),e("strong",null,"Authorization Code"),f(",请将其复制并粘贴到下方输入框: ")],-1)),e("div",vs,[e("div",null,[m[21]||(m[21]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),f("Authorization Code ")],-1)),v(e("textarea",{"onUpdate:modelValue":m[4]||(m[4]=a=>w.value=a),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[z,w.value]])]),m[22]||(m[22]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 请粘贴从Claude页面复制的Authorization Code ")],-1))])])])])])]))])])])])):J.platform==="gemini"?(o(),n("div",ks,[e("div",hs,[e("div",ws,[m[41]||(m[41]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-green-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",$s,[m[39]||(m[39]=e("h4",{class:"mb-3 font-semibold text-green-900 dark:text-green-200"},"Gemini 账户授权",-1)),m[40]||(m[40]=e("p",{class:"mb-4 text-sm text-green-800 dark:text-green-300"}," 请按照以下步骤完成 Gemini 账户的授权: ",-1)),e("div",As,[e("div",Cs,[e("div",Us,[m[32]||(m[32]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Is,[m[31]||(m[31]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 点击下方按钮生成授权链接 ",-1)),b.value?(o(),n("div",Ms,[e("div",Ss,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:b.value},null,8,Ds),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:Ce},[e("i",{class:U(q.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:_},m[30]||(m[30]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:S.value,onClick:X},[S.value?(o(),n("div",Ks)):(o(),n("i",_s)),f(" "+u(S.value?"生成中...":"生成授权链接"),1)],8,Ts))])])]),m[38]||(m[38]=zt('<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",js,[e("div",Ps,[m[37]||(m[37]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Ls,[m[35]||(m[35]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 输入 Authorization Code ",-1)),m[36]||(m[36]=e("p",{class:"mb-3 text-sm text-green-700 dark:text-green-300"}," 授权完成后,页面会显示一个 Authorization Code,请将其复制并粘贴到下方输入框: ",-1)),e("div",zs,[e("div",null,[m[33]||(m[33]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-green-500"}),f("Authorization Code ")],-1)),v(e("textarea",{"onUpdate:modelValue":m[5]||(m[5]=a=>w.value=a),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[z,w.value]])]),m[34]||(m[34]=e("div",{class:"mt-2 space-y-1"},[e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-check-circle mr-1 text-green-500"}),f(" 请粘贴从Gemini页面复制的Authorization Code ")])],-1))])])])])])])])])])):J.platform==="openai"?(o(),n("div",Rs,[e("div",Vs,[e("div",Os,[m[53]||(m[53]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-orange-500"},[e("i",{class:"fas fa-brain text-white"})],-1)),e("div",Es,[m[51]||(m[51]=e("h4",{class:"mb-3 font-semibold text-orange-900 dark:text-orange-200"},"OpenAI 账户授权",-1)),m[52]||(m[52]=e("p",{class:"mb-4 text-sm text-orange-800 dark:text-orange-300"}," 请按照以下步骤完成 OpenAI 账户的授权: ",-1)),e("div",Ns,[e("div",Ws,[e("div",Fs,[m[44]||(m[44]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",qs,[m[43]||(m[43]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 点击下方按钮生成授权链接 ",-1)),b.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:b.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:Ce},[e("i",{class:U(q.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:_},m[42]||(m[42]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:S.value,onClick:X},[S.value?(o(),n("div",Bs)):(o(),n("i",Qs)),f(" "+u(S.value?"生成中...":"生成授权链接"),1)],8,Gs))])])]),m[50]||(m[50]=zt('<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",Zs,[e("div",Xs,[m[49]||(m[49]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",el,[m[47]||(m[47]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 输入授权链接或 Code ",-1)),m[48]||(m[48]=e("p",{class:"mb-3 text-sm text-orange-700 dark:text-orange-300"},[f(" 授权完成后,当页面地址变为 "),e("strong",{class:"font-mono"},"http://localhost:1455/..."),f(" 时: ")],-1)),e("div",tl,[e("div",null,[m[45]||(m[45]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-link mr-2 text-orange-500"}),f("授权链接或 Code ")],-1)),v(e("textarea",{"onUpdate:modelValue":m[6]||(m[6]=a=>w.value=a),class:"form-input w-full resize-none font-mono text-sm",placeholder:`方式1:复制完整的链接(http://localhost:1455/auth/callback?code=...)
|
||
方式2:仅复制 code 参数的值
|
||
系统会自动识别并提取所需信息`,rows:"3"},null,512),[[z,w.value]])]),m[46]||(m[46]=zt('<div class="rounded border border-blue-300 bg-blue-50 p-2 dark:border-blue-700 dark:bg-blue-900/30"><p class="text-xs text-blue-700 dark:text-blue-300"><i class="fas fa-lightbulb mr-1"></i><strong>提示:</strong>您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别。 </p><p class="mt-1 text-xs text-blue-600 dark:text-blue-400"> • 完整链接示例:<span class="font-mono">http://localhost:1455/auth/callback?code=ac_4hm8...</span></p><p class="text-xs text-blue-600"> • 仅 Code 示例:<span class="font-mono">ac_4hm8iqmx9A2fzMy_cwye7U3W7...</span></p></div>',1))])])])])])])])])])):J.platform==="droid"?(o(),n("div",al,[e("div",rl,[e("div",sl,[m[65]||(m[65]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-cyan-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",ll,[m[63]||(m[63]=e("h4",{class:"mb-3 font-semibold text-cyan-900 dark:text-cyan-200"},"Droid 账户授权",-1)),m[64]||(m[64]=e("p",{class:"mb-4 text-sm text-cyan-800 dark:text-cyan-300"}," 请按照以下步骤完成 Factory (Droid) 账户的授权: ",-1)),e("div",ol,[e("div",nl,[e("div",il,[m[61]||(m[61]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",dl,[m[60]||(m[60]=e("p",{class:"mb-2 font-medium text-cyan-900 dark:text-cyan-200"}," 点击下方按钮生成授权链接 ",-1)),b.value?(o(),n("div",yl,[e("div",cl,[m[56]||(m[56]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权链接",-1)),e("div",ml,[e("div",xl,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:b.value},null,8,fl),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:Ce},[e("i",{class:U(q.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:Fe},m[54]||(m[54]=[e("i",{class:"fas fa-external-link-alt text-xs"},null,-1),f(" 在新标签中打开 ",-1)])),e("button",{class:"inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-xs font-medium text-cyan-600 transition-colors hover:text-cyan-700 dark:text-cyan-300 dark:hover:text-cyan-200",onClick:_},m[55]||(m[55]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),f("重新生成 ",-1)]))])])]),e("div",bl,[m[58]||(m[58]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权验证码",-1)),e("div",vl,[e("span",kl,u(ee.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:ne},m[57]||(m[57]=[e("i",{class:"fas fa-copy mr-1"},null,-1),f("复制 ",-1)]))])]),e("div",hl,[e("span",null,[m[59]||(m[59]=e("i",{class:"fas fa-hourglass-half mr-1 text-cyan-500"},null,-1)),f(" 剩余有效期:"+u(pe.value),1)])])])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:S.value,onClick:X},[S.value?(o(),n("div",pl)):(o(),n("i",gl)),f(" "+u(S.value?"生成中...":"生成授权链接"),1)],8,ul))])])]),m[62]||(m[62]=zt('<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",wl,[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:m[7]||(m[7]=a=>H.$emit("back"))}," 上一步 "),J.platform==="claude"&&x.value==="cookie"?c("",!0):(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!Ae.value||M.value,type:"button",onClick:Z},[M.value?(o(),n("div",Al)):c("",!0),f(" "+u(M.value?"验证中...":"完成授权"),1)],8,$l))])]))}},Ul={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Il={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"},Tl={class:"mb-4 flex items-center justify-between sm:mb-6"},_l={class:"mb-6"},Kl={key:0,class:"mb-6 rounded-lg border border-blue-200 bg-blue-50 p-4"},Ml={class:"space-y-4"},Sl={class:"flex gap-4"},Dl={class:"flex cursor-pointer items-center"},jl={class:"flex cursor-pointer items-center"},Pl={class:"flex cursor-pointer items-center"},Ll={class:"flex cursor-pointer items-center"},zl={class:"flex gap-3"},Rl=["disabled"],Vl={key:0,class:"loading-spinner mr-2"},Ol={class:"space-y-4"},El={key:0,class:"py-8 text-center"},Nl={key:1,class:"rounded-lg bg-gray-50 py-8 text-center"},Wl={key:2,class:"grid grid-cols-1 gap-4 md:grid-cols-2"},Fl={class:"mb-3 flex items-start justify-between"},ql={class:"flex-1"},Gl={class:"font-semibold text-gray-900"},Ql={class:"mt-1 text-sm text-gray-500"},Bl={class:"ml-4 flex items-center gap-2"},Hl={class:"flex items-center justify-between text-sm text-gray-600"},Jl={class:"flex items-center gap-4"},Yl={class:"flex items-center gap-2"},Zl=["onClick"],Xl=["disabled","onClick"],eo={key:1,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},to={class:"modal-content w-full max-w-lg p-4 sm:p-6"},ao={class:"space-y-4"},ro={class:"rounded-lg bg-gray-100 px-3 py-2 text-sm text-gray-600"},so={class:"flex gap-3 pt-4"},lo=["disabled"],oo={key:0,class:"loading-spinner mr-2"},no={__name:"GroupManagementModal",emits:["close","refresh"],setup(J,{emit:Le}){const g=Le,B=$(!0),I=$(!1),N=$([]),S=$(!1),M=$(!1),b=$({name:"",platform:"claude",description:""}),w=$(!1),q=$(!1),se=$(null),ee=$({name:"",platform:"",description:""}),ue=F=>F?new Date(F).toLocaleDateString("zh-CN"):"-",G=async()=>{I.value=!0;try{const F=await Q.get("/admin/account-groups");N.value=F.data||[]}catch{L("加载分组列表失败","error")}finally{I.value=!1}},V=async()=>{var F,T;if(!b.value.name||!b.value.platform){L("请填写必填项","error");return}M.value=!0;try{await Q.post("/admin/account-groups",{name:b.value.name,platform:b.value.platform,description:b.value.description}),L("分组创建成功","success"),E(),await G(),g("refresh")}catch(Y){L(((T=(F=Y.response)==null?void 0:F.data)==null?void 0:T.error)||"创建分组失败","error")}finally{M.value=!1}},E=()=>{S.value=!1,b.value={name:"",platform:"claude",description:""}},x=F=>{se.value=F,ee.value={name:F.name,platform:F.platform,description:F.description||""},w.value=!0},p=async()=>{var F,T;if(!ee.value.name){L("请填写分组名称","error");return}q.value=!0;try{await Q.put(`/admin/account-groups/${se.value.id}`,{name:ee.value.name,description:ee.value.description}),L("分组更新成功","success"),R(),await G(),g("refresh")}catch(Y){L(((T=(F=Y.response)==null?void 0:F.data)==null?void 0:T.error)||"更新分组失败","error")}finally{q.value=!1}},R=()=>{w.value=!1,se.value=null,ee.value={name:"",platform:"",description:""}},te=async F=>{var T,Y;if(F.memberCount>0){L("分组内还有成员,无法删除","error");return}if(confirm(`确定要删除分组 "${F.name}" 吗?`))try{await Q.delete(`/admin/account-groups/${F.id}`),L("分组删除成功","success"),await G(),g("refresh")}catch(Ae){L(((Y=(T=Ae.response)==null?void 0:T.data)==null?void 0:Y.error)||"删除分组失败","error")}};return xa(()=>{G()}),(F,T)=>(o(),Je(Tt,{to:"body"},[B.value?(o(),n("div",Ul,[e("div",Il,[e("div",Tl,[T[11]||(T[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:T[0]||(T[0]=Y=>F.$emit("close"))},T[10]||(T[10]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",_l,[e("button",{class:"btn btn-primary px-4 py-2",onClick:T[1]||(T[1]=Y=>S.value=!0)},T[12]||(T[12]=[e("i",{class:"fas fa-plus mr-2"},null,-1),f(" 创建新分组 ",-1)]))]),S.value?(o(),n("div",Kl,[T[20]||(T[20]=e("h4",{class:"mb-4 text-lg font-semibold text-gray-900"},"创建新分组",-1)),e("div",Ml,[e("div",null,[T[13]||(T[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),v(e("input",{"onUpdate:modelValue":T[2]||(T[2]=Y=>b.value.name=Y),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[z,b.value.name]])]),e("div",null,[T[18]||(T[18]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型 *",-1)),e("div",Sl,[e("label",Dl,[v(e("input",{"onUpdate:modelValue":T[3]||(T[3]=Y=>b.value.platform=Y),class:"mr-2",type:"radio",value:"claude"},null,512),[[Se,b.value.platform]]),T[14]||(T[14]=e("span",{class:"text-sm text-gray-700"},"Claude",-1))]),e("label",jl,[v(e("input",{"onUpdate:modelValue":T[4]||(T[4]=Y=>b.value.platform=Y),class:"mr-2",type:"radio",value:"gemini"},null,512),[[Se,b.value.platform]]),T[15]||(T[15]=e("span",{class:"text-sm text-gray-700"},"Gemini",-1))]),e("label",Pl,[v(e("input",{"onUpdate:modelValue":T[5]||(T[5]=Y=>b.value.platform=Y),class:"mr-2",type:"radio",value:"openai"},null,512),[[Se,b.value.platform]]),T[16]||(T[16]=e("span",{class:"text-sm text-gray-700"},"OpenAI",-1))]),e("label",Ll,[v(e("input",{"onUpdate:modelValue":T[6]||(T[6]=Y=>b.value.platform=Y),class:"mr-2",type:"radio",value:"droid"},null,512),[[Se,b.value.platform]]),T[17]||(T[17]=e("span",{class:"text-sm text-gray-700"},"Droid",-1))])])]),e("div",null,[T[19]||(T[19]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),v(e("textarea",{"onUpdate:modelValue":T[7]||(T[7]=Y=>b.value.description=Y),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[z,b.value.description]])]),e("div",zl,[e("button",{class:"btn btn-primary px-4 py-2",disabled:!b.value.name||!b.value.platform||M.value,onClick:V},[M.value?(o(),n("div",Vl)):c("",!0),f(" "+u(M.value?"创建中...":"创建"),1)],8,Rl),e("button",{class:"btn btn-secondary px-4 py-2",onClick:E},"取消")])])])):c("",!0),e("div",Ol,[I.value?(o(),n("div",El,T[21]||(T[21]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500"},"加载中...",-1)]))):N.value.length===0?(o(),n("div",Nl,T[22]||(T[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",Wl,[(o(!0),n(he,null,We(N.value,Y=>(o(),n("div",{key:Y.id,class:"rounded-lg border bg-white p-4 transition-shadow hover:shadow-md"},[e("div",Fl,[e("div",ql,[e("h4",Gl,u(Y.name),1),e("p",Ql,u(Y.description||"暂无描述"),1)]),e("div",Bl,[e("span",{class:U(["rounded-full px-2 py-1 text-xs font-medium",Y.platform==="claude"?"bg-purple-100 text-purple-700":Y.platform==="gemini"?"bg-blue-100 text-blue-700":Y.platform==="openai"?"bg-gray-100 text-gray-700":"bg-cyan-100 text-cyan-700"])},u(Y.platform==="claude"?"Claude":Y.platform==="gemini"?"Gemini":Y.platform==="openai"?"OpenAI":"Droid"),3)])]),e("div",Hl,[e("div",Jl,[e("span",null,[T[23]||(T[23]=e("i",{class:"fas fa-users mr-1"},null,-1)),f(" "+u(Y.memberCount||0)+" 个成员 ",1)]),e("span",null,[T[24]||(T[24]=e("i",{class:"fas fa-clock mr-1"},null,-1)),f(" "+u(ue(Y.createdAt)),1)])]),e("div",Yl,[e("button",{class:"text-blue-600 transition-colors hover:text-blue-800",title:"编辑",onClick:Ae=>x(Y)},T[25]||(T[25]=[e("i",{class:"fas fa-edit"},null,-1)]),8,Zl),e("button",{class:"text-red-600 transition-colors hover:text-red-800",disabled:Y.memberCount>0,title:"删除",onClick:Ae=>te(Y)},T[26]||(T[26]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Xl)])])]))),128))]))])])])):c("",!0),w.value?(o(),n("div",eo,[e("div",to,[e("div",{class:"mb-4 flex items-center justify-between"},[T[28]||(T[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:R},T[27]||(T[27]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",ao,[e("div",null,[T[29]||(T[29]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),v(e("input",{"onUpdate:modelValue":T[8]||(T[8]=Y=>ee.value.name=Y),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[z,ee.value.name]])]),e("div",null,[T[31]||(T[31]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型",-1)),e("div",ro,[f(u(ee.value.platform==="claude"?"Claude":ee.value.platform==="gemini"?"Gemini":"OpenAI")+" ",1),T[30]||(T[30]=e("span",{class:"ml-2 text-xs text-gray-500"},"(不可修改)",-1))])]),e("div",null,[T[32]||(T[32]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),v(e("textarea",{"onUpdate:modelValue":T[9]||(T[9]=Y=>ee.value.description=Y),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[z,ee.value.description]])]),e("div",so,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!ee.value.name||q.value,onClick:p},[q.value?(o(),n("div",oo)):c("",!0),f(" "+u(q.value?"更新中...":"更新"),1)],8,lo),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:R},"取消")])])])])):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"},go={class:"mb-4 flex items-center justify-between sm:mb-6"},po={class:"flex items-center gap-2 sm:gap-3"},yo={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},co={class:"flex items-center gap-2"},mo=["disabled"],xo={key:0,class:"py-8 text-center"},fo={key:1,class:"rounded-lg bg-gray-50 py-8 text-center dark:bg-gray-800"},bo={key:2},vo={class:"mb-4 space-y-3"},ko={class:"rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-800"},ho={class:"mb-3 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},wo={class:"flex items-center gap-2"},$o={class:"flex gap-1"},Ao={class:"flex flex-1 items-center gap-2 lg:max-w-md"},Co={class:"relative flex-1"},Uo={class:"flex gap-1"},Io={class:"flex flex-wrap items-center justify-between gap-2"},To={class:"flex flex-wrap items-center gap-2"},_o=["disabled"],Ko=["disabled"],Mo=["disabled"],So=["disabled"],Do={class:"flex items-center gap-2 rounded-md bg-purple-50 px-3 py-1.5 dark:bg-purple-900/20"},jo={class:"text-xs font-medium text-purple-700 dark:text-purple-300"},Po={class:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"},Lo={key:0,class:"absolute -left-2 -top-2 z-10"},zo=["title"],Ro={class:"flex flex-col gap-3"},Vo={class:"flex items-start justify-between gap-2"},Oo=["title"],Eo={class:"flex items-center gap-1"},No=["onClick"],Wo=["disabled","onClick"],Fo={key:0,class:"loading-spinner-sm"},qo={key:1,class:"fas fa-redo"},Go=["disabled","onClick"],Qo={key:0,class:"loading-spinner-sm"},Bo={key:1,class:"fas fa-trash"},Ho={class:"flex flex-wrap items-center gap-3 text-xs text-gray-600 dark:text-gray-400"},Jo={key:0},Yo={key:0,class:"mt-4 flex items-center justify-between"},Zo={class:"text-sm text-gray-600 dark:text-gray-400"},Xo={class:"flex items-center gap-2"},en=["disabled"],tn=["disabled"],an={class:"px-3 py-1.5 text-sm font-medium text-gray-700 dark:text-gray-300"},rn=["disabled"],sn=["disabled"],ln={__name:"ApiKeyManagementModal",props:{accountId:{type:String,required:!0},accountName:{type:String,default:""}},emits:["close","refresh"],setup(J,{emit:Le}){const g=J,B=Le,I=$(!0),N=$(!1),S=$(null),M=$(null),b=$([]),w=$(1),q=$(15),se=$(!1),ee=$("all"),ue=$(""),G=$("fuzzy"),V=$(!1),E=Z=>!Z||Z.length<12?Z:`${Z.substring(0,8)}...${Z.substring(Z.length-4)}`,x=ie(()=>{let Z=b.value;if(ee.value!=="all"&&(Z=Z.filter(A=>A.status===ee.value)),ue.value.trim()){const A=ue.value.trim();Z=Z.filter(O=>{const xe=O.key;return G.value==="exact"?xe===A:xe.toLowerCase().includes(A.toLowerCase())})}return Z}),p=ie(()=>x.value.length),R=ie(()=>Math.ceil(p.value/q.value)),te=ie(()=>{const Z=(w.value-1)*q.value,A=Z+q.value;return x.value.slice(Z,A)}),F=ie(()=>b.value.filter(Z=>Z.status==="active").length),T=ie(()=>b.value.filter(Z=>Z.status==="error").length),Y=async()=>{N.value=!0;try{const A=(await Q.get(`/admin/droid-accounts/${g.accountId}`)).data;let O=[];if(Array.isArray(A.apiKeys))O=A.apiKeys;else if(typeof A.apiKeys=="string")try{O=JSON.parse(A.apiKeys)}catch(H){console.error("Failed to parse apiKeys:",H)}const xe=O.map(H=>typeof H=="string"?{key:H,usageCount:0,status:"active",lastUsedAt:null,errorMessage:""}:typeof H=="object"&&H!==null?{key:H.key||H.apiKey||"",usageCount:H.usageCount||H.count||0,status:H.status||"active",lastUsedAt:H.lastUsedAt||H.lastUsed||null,errorMessage:H.errorMessage||""}:{key:String(H),usageCount:0,status:"active",lastUsedAt:null,errorMessage:""});b.value=xe.sort((H,m)=>H.lastUsedAt&&m.lastUsedAt?new Date(m.lastUsedAt)-new Date(H.lastUsedAt):H.lastUsedAt&&!m.lastUsedAt?-1:!H.lastUsedAt&&m.lastUsedAt?1:(m.usageCount||0)-(H.usageCount||0))}catch(Z){console.error("Failed to load API keys:",Z),L("加载 API Key 失败","error")}finally{N.value=!1,w.value=1}},Ae=async Z=>{var A,O;if(confirm(`确定要删除 API Key "${E(Z.key)}" 吗?`)){S.value=Z.key;try{const xe={removeApiKeys:[Z.key],apiKeyUpdateMode:"delete"};await Q.put(`/admin/droid-accounts/${g.accountId}`,xe),L("API Key 已删除","success"),await Y(),B("refresh")}catch(xe){console.error("Failed to delete API key:",xe),L(((O=(A=xe.response)==null?void 0:A.data)==null?void 0:O.error)||"删除 API Key 失败","error")}finally{S.value=null}}},pe=async Z=>{var A,O;if(confirm(`确定要重置 API Key "${E(Z.key)}" 的状态吗?这将清除错误信息并恢复为正常状态。`)){M.value=Z.key;try{const xe={apiKeys:[{key:Z.key,status:"active",errorMessage:""}],apiKeyUpdateMode:"update"};await Q.put(`/admin/droid-accounts/${g.accountId}`,xe),L("API Key 状态已重置","success"),await Y(),B("refresh")}catch(xe){console.error("Failed to reset API key status:",xe),L(((O=(A=xe.response)==null?void 0:A.data)==null?void 0:O.error)||"重置 API Key 状态失败","error")}finally{M.value=null}}},we=async()=>{var A,O;const Z=b.value.filter(xe=>xe.status==="error");if(Z.length===0){L("没有异常状态的 API Key","warning");return}if(confirm(`确定要删除所有 ${Z.length} 个异常状态的 API Key 吗?此操作不可恢复!`)){V.value=!0;try{const H={removeApiKeys:Z.map(m=>m.key),apiKeyUpdateMode:"delete"};await Q.put(`/admin/droid-accounts/${g.accountId}`,H),L(`成功删除 ${Z.length} 个异常 API Key`,"success"),await Y(),B("refresh")}catch(xe){console.error("Failed to delete error API keys:",xe),L(((O=(A=xe.response)==null?void 0:A.data)==null?void 0:O.error)||"批量删除失败","error")}finally{V.value=!1}}},De=async()=>{var Z,A;if(b.value.length===0){L("没有可删除的 API Key","warning");return}if(confirm(`确定要删除所有 ${b.value.length} 个 API Key 吗?此操作不可恢复!
|
||
|
||
请再次确认:这将删除该账户下的所有 API Key。`)&&confirm("最后确认:真的要删除所有 API Key 吗?")){V.value=!0;try{const O=b.value.map(H=>H.key),xe={removeApiKeys:O,apiKeyUpdateMode:"delete"};await Q.put(`/admin/droid-accounts/${g.accountId}`,xe),L(`成功删除所有 ${O.length} 个 API Key`,"success"),await Y(),B("refresh")}catch(O){console.error("Failed to delete all API keys:",O),L(((A=(Z=O.response)==null?void 0:Z.data)==null?void 0:A.error)||"批量删除失败","error")}finally{V.value=!1}}},X=Z=>{let A=[],O="";if(Z==="error"?(A=b.value.filter(ce=>ce.status==="error"),O=`error_api_keys_${g.accountName}_${new Date().toISOString().split("T")[0]}.txt`):(A=b.value,O=`all_api_keys_${g.accountName}_${new Date().toISOString().split("T")[0]}.txt`),A.length===0){L("没有可导出的 API Key","warning");return}const xe=A.map(ce=>ce.key).join(`
|
||
`),H=new Blob([xe],{type:"text/plain;charset=utf-8"}),m=URL.createObjectURL(H),a=document.createElement("a");a.href=m,a.download=O,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(m),L(`成功导出 ${A.length} 个 API Key`,"success")},_=async Z=>{if(typeof navigator<"u"&&navigator.clipboard&&typeof navigator.clipboard.writeText=="function"&&(typeof window>"u"||window.isSecureContext!==!1)){await navigator.clipboard.writeText(Z);return}if(typeof document>"u")throw new Error("clipboard unavailable");const O=document.createElement("textarea");O.value=Z,O.setAttribute("readonly",""),O.style.position="fixed",O.style.opacity="0",O.style.pointerEvents="none",document.body.appendChild(O),O.select();try{const xe=document.execCommand("copy");if(document.body.removeChild(O),!xe)throw new Error("execCommand failed")}catch(xe){throw document.body.removeChild(O),xe}},Ce=async Z=>{try{await _(Z),L("API Key 已复制","success")}catch(A){console.error("Failed to copy:",A),L("复制失败,请手动复制","error")}},ne=async()=>{if(!(!b.value.length||se.value)){se.value=!0;try{const Z=b.value.map(A=>A.key).join(`
|
||
`);await _(Z),L(`已复制 ${b.value.length} 条 API Key`,"success")}catch(Z){console.error("Failed to copy all keys:",Z),L("复制全部 API Key 失败,请手动复制","error")}finally{se.value=!1}}},Fe=Z=>{if(!Z)return"-";try{return new Date(Z).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return"-"}};return xa(()=>{Y()}),(Z,A)=>(o(),Je(Tt,{to:"body"},[I.value?(o(),n("div",io,[e("div",uo,[e("div",go,[e("div",po,[A[14]||(A[14]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-key text-sm text-white sm:text-base"})],-1)),e("div",null,[A[13]||(A[13]=e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," API Key 管理 ",-1)),e("p",yo,u(J.accountName),1)])]),e("div",co,[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:N.value||b.value.length===0||se.value,onClick:ne},[e("i",{class:U(["text-sm sm:text-base",se.value?"fas fa-spinner fa-spin":"fas fa-clipboard-list"])},null,2),A[15]||(A[15]=e("span",null,"复制全部 Key",-1))],8,mo),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-400 transition-colors hover:text-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:text-gray-200 sm:h-10 sm:w-10",title:"关闭",onClick:A[0]||(A[0]=O=>Z.$emit("close"))},A[16]||(A[16]=[e("i",{class:"fas fa-times text-base sm:text-lg"},null,-1)]))])]),N.value?(o(),n("div",xo,A[17]||(A[17]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):c("",!0),!N.value&&b.value.length===0?(o(),n("div",fo,A[18]||(A[18]=[e("i",{class:"fas fa-key mb-4 text-4xl text-gray-300 dark:text-gray-600"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"暂无 API Key",-1)]))):c("",!0),!N.value&&b.value.length>0?(o(),n("div",bo,[e("div",vo,[e("div",ko,[e("div",ho,[e("div",wo,[A[21]||(A[21]=e("i",{class:"fas fa-filter text-gray-400 dark:text-gray-500"},null,-1)),A[22]||(A[22]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"筛选:",-1)),e("div",$o,[e("button",{class:U(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",ee.value==="all"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:A[1]||(A[1]=O=>ee.value="all")}," 全部 ("+u(b.value.length)+") ",3),e("button",{class:U(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",ee.value==="active"?"bg-green-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:A[2]||(A[2]=O=>ee.value="active")},[A[19]||(A[19]=e("i",{class:"fas fa-check-circle mr-1"},null,-1)),f(" 正常 ("+u(F.value)+") ",1)],2),e("button",{class:U(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",ee.value==="error"?"bg-red-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:A[3]||(A[3]=O=>ee.value="error")},[A[20]||(A[20]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),f(" 异常 ("+u(T.value)+") ",1)],2)])]),e("div",Ao,[e("div",Co,[v(e("input",{"onUpdate:modelValue":A[4]||(A[4]=O=>ue.value=O),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,ue.value]]),A[23]||(A[23]=e("i",{class:"fas fa-search absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 dark:text-gray-500"},null,-1))]),e("div",Uo,[e("button",{class:U(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",G.value==="fuzzy"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),title:"模糊搜索:包含查询字符串即可",onClick:A[5]||(A[5]=O=>G.value="fuzzy")},A[24]||(A[24]=[e("i",{class:"fas fa-search mr-1"},null,-1),f(" 模糊 ",-1)]),2),e("button",{class:U(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",G.value==="exact"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),title:"精确搜索:完全匹配完整 Key",onClick:A[6]||(A[6]=O=>G.value="exact")},A[25]||(A[25]=[e("i",{class:"fas fa-equals mr-1"},null,-1),f(" 精确 ",-1)]),2)])])]),A[35]||(A[35]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-700"},null,-1)),e("div",Io,[e("div",To,[A[30]||(A[30]=e("span",{class:"text-xs font-medium text-gray-500 dark:text-gray-400"},"批量操作:",-1)),e("button",{class:"group rounded-md bg-gradient-to-r from-red-500 to-red-600 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-red-600 hover:to-red-700 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:T.value===0||V.value,title:"删除所有异常状态的 API Key",onClick:we},A[26]||(A[26]=[e("i",{class:"fas fa-trash-alt mr-1"},null,-1),f(" 删除异常 ",-1)]),8,_o),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:b.value.length===0||V.value,title:"删除所有 API Key",onClick:De},A[27]||(A[27]=[e("i",{class:"fas fa-trash mr-1"},null,-1),f(" 删除全部 ",-1)]),8,Ko),A[31]||(A[31]=e("div",{class:"mx-1 h-5 w-px bg-gray-300 dark:bg-gray-600"},null,-1)),e("button",{class:"rounded-md bg-gradient-to-r from-blue-500 to-blue-600 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-blue-600 hover:to-blue-700 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:T.value===0,title:"导出所有异常状态的 API Key",onClick:A[7]||(A[7]=O=>X("error"))},A[28]||(A[28]=[e("i",{class:"fas fa-download mr-1"},null,-1),f(" 导出异常 ",-1)]),8,Mo),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:b.value.length===0,title:"导出所有 API Key",onClick:A[8]||(A[8]=O=>X("all"))},A[29]||(A[29]=[e("i",{class:"fas fa-file-export mr-1"},null,-1),f(" 导出全部 ",-1)]),8,So)]),e("div",Do,[A[34]||(A[34]=e("i",{class:"fas fa-info-circle text-purple-500 dark:text-purple-400"},null,-1)),e("span",jo,[A[32]||(A[32]=f(" 显示 ",-1)),e("strong",null,u(x.value.length),1),A[33]||(A[33]=f(" 个 ",-1))])])])])]),e("div",Po,[(o(!0),n(he,null,We(te.value,(O,xe)=>(o(),n("div",{key:xe,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"},[(O.status==="error"||O.status==="disabled")&&O.errorMessage?(o(),n("div",Lo,[e("span",{class:U(["inline-flex items-center justify-center rounded-full px-2 py-0.5 text-[10px] font-semibold shadow-sm",[O.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:`错误状态码: ${O.errorMessage}`},u(O.errorMessage),11,zo)])):c("",!0),e("div",Ro,[e("div",Vo,[e("span",{class:"flex-1 break-all font-mono text-xs font-medium text-gray-900 dark:text-gray-100",title:O.key},u(E(O.key)),9,Oo),e("div",Eo,[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:H=>Ce(O.key)},A[36]||(A[36]=[e("i",{class:"fas fa-copy"},null,-1)]),8,No),O.status==="error"||O.status==="disabled"?(o(),n("button",{key:0,class:U(["text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-50",[O.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:M.value===O.key,title:"重置状态",onClick:H=>pe(O)},[M.value===O.key?(o(),n("div",Fo)):(o(),n("i",qo))],10,Wo)):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:S.value===O.key,onClick:H=>Ae(O)},[S.value===O.key?(o(),n("div",Qo)):(o(),n("i",Bo))],8,Go)])]),e("div",Ho,[e("div",null,[e("span",{class:U([O.status==="active"?"text-green-600 dark:text-green-400":O.status==="error"?"text-red-600 dark:text-red-400":"text-yellow-600 dark:text-yellow-400"])},[e("i",{class:U(["mr-1",[O.status==="active"?"fas fa-check-circle":O.status==="error"?"fas fa-exclamation-triangle":"fas fa-exclamation-circle"]])},null,2),f(" "+u(O.status==="active"?"正常":O.status==="error"?"异常":O.status==="disabled"?"禁用":O.status||"未知"),1)],2)]),e("div",null,[e("span",null,[A[37]||(A[37]=f("使用: ",-1)),e("strong",null,u(O.usageCount||0),1),A[38]||(A[38]=f("次",-1))])]),O.lastUsedAt?(o(),n("div",Jo,[e("span",null,u(Fe(O.lastUsedAt)),1)])):c("",!0)])])]))),128))]),R.value>1?(o(),n("div",Yo,[e("div",Zo," 显示 "+u((w.value-1)*q.value+1)+"-"+u(Math.min(w.value*q.value,p.value))+" 项,共 "+u(p.value)+" 项 ",1),e("div",Xo,[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:w.value===1,onClick:A[9]||(A[9]=O=>w.value=1)},A[39]||(A[39]=[e("i",{class:"fas fa-angle-double-left"},null,-1)]),8,en),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:w.value===1,onClick:A[10]||(A[10]=O=>w.value--)},A[40]||(A[40]=[e("i",{class:"fas fa-angle-left"},null,-1)]),8,tn),e("span",an,u(w.value)+" / "+u(R.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:w.value===R.value,onClick:A[11]||(A[11]=O=>w.value++)},A[41]||(A[41]=[e("i",{class:"fas fa-angle-right"},null,-1)]),8,rn),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:w.value===R.value,onClick:A[12]||(A[12]=O=>w.value=R.value)},A[42]||(A[42]=[e("i",{class:"fas fa-angle-double-right"},null,-1)]),8,sn)])])):c("",!0)])):c("",!0)])])):c("",!0)]))}},on={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},nn={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto p-4 sm:p-6 md:p-8"},dn={class:"mb-4 flex items-center justify-between sm:mb-6"},un={class:"flex items-center gap-2 sm:gap-3"},gn={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},pn={key:0,class:"mb-4 flex items-center justify-center sm:mb-8"},yn={class:"flex items-center space-x-2 sm:space-x-4"},cn={class:"flex items-center"},mn={class:"flex items-center"},xn={key:1},fn={class:"space-y-6"},bn={key:0},vn={class:"space-y-3"},kn={class:"grid grid-cols-2 gap-2 sm:grid-cols-4"},hn={class:"p-3"},wn={class:"flex items-center justify-between"},$n={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-indigo-500"},An={class:"p-3"},Cn={class:"flex items-center justify-between"},Un={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-emerald-500"},In={class:"p-3"},Tn={class:"flex items-center justify-between"},_n={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-blue-500"},Kn={class:"p-3"},Mn={class:"flex items-center justify-between"},Sn={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-rose-500"},Dn={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"},jn={class:"grid grid-cols-2 gap-2 sm:grid-cols-3"},Pn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-indigo-500"},Ln={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},zn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-orange-500"},Rn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-cyan-500"},Vn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-emerald-500"},On={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-teal-500"},En={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},Nn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},Wn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-amber-500"},Fn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-rose-500"},qn={key:1},Gn={class:"flex flex-wrap gap-4"},Qn={class:"flex cursor-pointer items-center"},Bn={class:"text-sm text-gray-700 dark:text-gray-300"},Hn={key:0},Jn={key:0,class:"flex cursor-pointer items-center"},Yn={class:"flex cursor-pointer items-center"},Zn={key:1,class:"flex cursor-pointer items-center"},Xn={key:0,class:"mt-1 text-xs text-red-500"},ei={class:"flex gap-4"},ti={class:"flex cursor-pointer items-center"},ai={class:"flex cursor-pointer items-center"},ri={class:"flex cursor-pointer items-center"},si={key:2},li={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},oi={key:0,class:"mt-3"},ni=["min"],ii={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},di={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},ui={key:3},gi={class:"flex gap-2"},pi={class:"flex-1"},yi={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},ci={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},mi=["value"],xi={class:"text-sm text-gray-700 dark:text-gray-200"},fi={key:4},bi={key:5,class:"space-y-4"},vi={key:0,class:"mt-1 text-xs text-red-500"},ki={key:0,class:"mt-1 text-xs text-red-500"},hi={key:0,class:"mt-1 text-xs text-red-500"},wi={key:6,class:"space-y-4"},$i={key:0,class:"mt-1 text-xs text-red-500"},Ai={key:0,class:"mt-1 text-xs text-red-500"},Ci={key:0,class:"mt-1 text-xs text-red-500"},Ui={class:"flex flex-wrap gap-2"},Ii=["value"],Ti={class:"text-sm text-gray-700 dark:text-gray-300"},_i={key:7},Ki={class:"mb-3"},Mi={class:"inline-flex cursor-pointer items-center"},Si={key:0},Di={key:8,class:"space-y-4"},ji={key:0,class:"mt-1 text-xs text-red-500"},Pi={key:0,class:"mt-1 text-xs text-red-500"},Li={class:"grid grid-cols-2 gap-4"},zi={class:"mb-4 flex gap-2"},Ri={key:0},Vi={class:"mb-3 grid grid-cols-2 gap-2"},Oi=["value"],Ei={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Ni={class:"text-xs text-gray-500 dark:text-gray-400"},Wi={key:0},Fi={key:1},qi={class:"mb-3 space-y-2"},Gi=["onUpdate:modelValue"],Qi=["onUpdate:modelValue"],Bi=["onClick"],Hi={class:"mt-3 flex flex-wrap gap-2"},Ji={class:"mb-3"},Yi={class:"inline-flex cursor-pointer items-center"},Zi={key:0},Xi={key:0},ed={class:"inline-flex cursor-pointer items-center"},td={key:9,class:"space-y-4"},ad={class:"relative"},rd=["type"],sd={key:10,class:"space-y-4"},ld={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},od={class:"relative"},nd=["type"],id={key:11},dd={class:"flex gap-4"},ud={class:"flex cursor-pointer items-center"},gd={class:"flex cursor-pointer items-center"},pd={key:12,class:"mt-4"},yd={class:"flex items-start"},cd={key:13,class:"mt-4"},md={class:"flex items-start"},xd={key:14,class:"mt-4"},fd={class:"flex items-start"},bd={key:15,class:"mt-4"},vd={class:"flex items-start"},kd={class:"ml-3"},hd={key:0,class:"mt-1"},wd={class:"flex items-center justify-between"},$d={class:"text-xs text-green-600 dark:text-green-400"},Ad=["disabled"],Cd={key:0,class:"fas fa-trash-alt mr-1"},Ud={key:1,class:"loading-spinner mr-1"},Id={key:1,class:"mt-1"},Td={key:16,class:"mt-4"},_d={class:"flex items-start"},Kd={class:"ml-3 flex-1"},Md={key:0,class:"mt-3"},Sd={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Dd={class:"flex items-center gap-2"},jd={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"},Pd={class:"text-blue-600 dark:text-blue-400"},Ld={class:"text-gray-500 dark:text-gray-500"},zd={class:"text-blue-600 dark:text-blue-400"},Rd={key:17,class:"space-y-4 rounded-lg border border-blue-200 bg-blue-50 p-4"},Vd={class:"mb-4 flex items-start gap-3"},Od={key:0,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Ed={key:1,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Nd={key:2,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Wd={key:3,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Fd={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"},qd={key:0,class:"text-xs text-blue-800 dark:text-blue-300"},Gd={key:1,class:"text-xs text-blue-800 dark:text-blue-300"},Qd={key:2,class:"text-xs text-blue-800 dark:text-blue-300"},Bd={key:3,class:"text-xs text-blue-800 dark:text-blue-300"},Hd={key:4,class:"text-xs text-blue-600 dark:text-blue-400"},Jd={key:5,class:"text-xs text-red-600 dark:text-red-400"},Yd={key:0},Zd={key:1},Xd={key:0,class:"mt-1 text-xs text-red-500"},e0={key:2},t0={key:0,class:"mt-1 text-xs text-red-500"},a0={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},r0={key:3},s0={key:4},l0={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"},o0={key:0,class:"mt-1 text-xs text-red-500"},n0={class:"flex gap-3 pt-4"},i0=["disabled"],d0=["disabled"],u0={key:0,class:"loading-spinner mr-2"},g0={key:3,class:"space-y-6"},p0={key:0},y0={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},c0={class:"flex items-start gap-4"},m0={class:"flex-1"},x0={class:"mb-4"},f0={class:"flex flex-wrap gap-4"},b0={class:"flex cursor-pointer items-center"},v0={class:"flex cursor-pointer items-center"},k0={key:0,class:"space-y-4"},h0={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},w0={class:"flex items-start gap-3"},$0={class:"flex-1"},A0=["disabled"],C0={key:0,class:"fas fa-link mr-2"},U0={key:1,class:"loading-spinner mr-2"},I0={key:1,class:"space-y-3"},T0={class:"flex items-center gap-2"},_0=["value"],K0={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},M0={class:"flex items-start gap-3"},S0={class:"flex-1"},D0={class:"space-y-3"},j0={key:1,class:"space-y-4"},P0={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},L0={class:"space-y-4"},z0={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},R0={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},V0={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},O0={key:1,class:"mt-1 text-xs text-red-500"},E0={key:0,class:"mt-3 rounded border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-700"},N0=["disabled"],W0={key:0,class:"loading-spinner mr-2"},F0={key:1,class:"fas fa-magic mr-2"},q0={class:"flex gap-3 pt-4"},G0=["disabled"],Q0={key:0,class:"loading-spinner mr-2"},B0={key:4,class:"space-y-6"},H0={class:"flex gap-4"},J0={class:"flex cursor-pointer items-center"},Y0={class:"flex cursor-pointer items-center"},Z0={class:"flex cursor-pointer items-center"},X0={key:0},eu={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},tu={key:0,class:"mt-3"},au=["min"],ru={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},su={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},lu={key:1},ou={class:"flex gap-2"},nu={class:"flex-1"},iu={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},du={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},uu=["value"],gu={class:"text-sm text-gray-700 dark:text-gray-200"},pu={key:2},yu={key:3},cu={class:"flex gap-4"},mu={class:"flex cursor-pointer items-center"},xu={class:"flex cursor-pointer items-center"},fu={key:4,class:"mt-4"},bu={class:"flex items-start"},vu={key:5,class:"mt-4"},ku={class:"flex items-start"},hu={key:6,class:"mt-4"},wu={class:"flex items-start"},$u={key:7,class:"mt-4"},Au={class:"flex items-start"},Cu={class:"ml-3"},Uu={key:0,class:"mt-1"},Iu={class:"flex items-center justify-between"},Tu={class:"text-xs text-green-600 dark:text-green-400"},_u=["disabled"],Ku={key:0,class:"fas fa-trash-alt mr-1"},Mu={key:1,class:"loading-spinner mr-1"},Su={key:1,class:"mt-1"},Du={key:8,class:"mt-4"},ju={class:"flex items-start"},Pu={class:"ml-3 flex-1"},Lu={key:0,class:"mt-3"},zu={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Ru={class:"flex items-center gap-2"},Vu={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"},Ou={class:"text-blue-600 dark:text-blue-400"},Eu={class:"text-gray-500 dark:text-gray-500"},Nu={class:"text-blue-600 dark:text-blue-400"},Wu={key:9,class:"space-y-4"},Fu={class:"grid grid-cols-2 gap-4"},qu={key:0,class:"rounded-lg bg-gray-50 p-4 dark:bg-gray-800"},Gu={class:"mb-2 flex items-center justify-between"},Qu={class:"text-sm text-gray-500 dark:text-gray-400"},Bu={class:"relative h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Hu={class:"mt-2 flex items-center justify-between text-xs"},Ju={class:"text-gray-500 dark:text-gray-400"},Yu={class:"text-gray-500 dark:text-gray-400"},Zu={class:"mb-4 flex gap-2"},Xu={key:0},eg={class:"mb-3 grid grid-cols-2 gap-2"},tg=["value"],ag={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},rg={class:"text-xs text-gray-500 dark:text-gray-400"},sg={key:0},lg={key:1},og={class:"mb-3 space-y-2"},ng=["onUpdate:modelValue"],ig=["onUpdate:modelValue"],dg=["onClick"],ug={class:"mt-3 flex flex-wrap gap-2"},gg={class:"mb-3"},pg={class:"inline-flex cursor-pointer items-center"},yg={key:0},cg={key:1},mg={class:"inline-flex cursor-pointer items-center"},xg={key:10,class:"space-y-4"},fg={class:"relative"},bg=["type"],vg={class:"grid grid-cols-2 gap-4"},kg={key:11,class:"space-y-4"},hg={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},wg={class:"relative"},$g=["type"],Ag={key:12,class:"space-y-4"},Cg={class:"mb-3"},Ug={class:"inline-flex cursor-pointer items-center"},Ig={key:0},Tg={key:13,class:"space-y-4"},_g={key:0,class:"mt-1 text-xs text-red-500"},Kg={key:0,class:"mt-1 text-xs text-red-500"},Mg={key:0,class:"mt-1 text-xs text-red-500"},Sg={class:"flex flex-wrap gap-2"},Dg=["value"],jg={class:"text-sm text-gray-700 dark:text-gray-300"},Pg={key:14,class:"rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},Lg={class:"mb-4 flex items-start gap-3"},zg={class:"flex-1"},Rg={class:"mb-2 flex items-center justify-between"},Vg={class:"mb-1 text-sm text-purple-800 dark:text-purple-200"},Og={class:"space-y-4"},Eg={key:0,class:"mt-1 text-xs text-red-500"},Ng={class:"space-y-2"},Wg={class:"flex items-center justify-between"},Fg={class:"text-xs text-purple-600 dark:text-purple-300"},qg={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"},Gg=["onClick"],Qg={class:"text-xs text-purple-700 dark:text-purple-300"},Bg={key:15,class:"rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-700 dark:bg-amber-900/30"},Hg={class:"space-y-4"},Jg={key:16},Yg={class:"flex gap-3 pt-4"},Zg=["disabled"],Xg={key:0,class:"loading-spinner mr-2"},ep={__name:"AccountForm",props:{account:{type:Object,default:null}},emits:["close","success","platform-changed"],setup(J,{emit:Le}){var ha,jt,ea,wa,ta,$a,Aa,Ca,Ua,Ia,aa,qt,ra,sa,Ta,pt,yt,_a,la,Gt,oa,Ka,na,Qt,Ma,ia,Bt,da,ua,Sa,Da,ja,ga,Pa,pa,La;const g=J,B=Le,I=ur(),{showConfirmModal:N,confirmOptions:S,showConfirm:M,handleConfirm:b,handleCancel:w}=dr(),q=ie(()=>!!g.account),se=$(!0),ee=$(null),ue=$(1),G=$(!1),V=$(!1),E=$(!1),x=$(!1),p=$(""),R=$(""),te=$(!1),F=$(""),T=$("manual"),Y=$(""),Ae=$(!1),pe=$(""),we=$(!1),De=$({current:0,total:0}),X=ie(()=>Y.value.split(`
|
||
`).map(d=>d.trim()).filter(d=>d.length>0).length),_=$(""),Ce=$(!1),ne=$(""),Fe=$(!1),Z=d=>["claude","claude-console","ccr","bedrock"].includes(d)?"claude":["openai","openai-responses","azure_openai"].includes(d)?"openai":["gemini","gemini-api"].includes(d)?"gemini":d==="droid"?"droid":"",A=()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""}),O=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 re=typeof t.host=="string"?t.host.trim():t.host!==void 0&&t.host!==null?String(t.host).trim():"",ye=t.port!==void 0&&t.port!==null?String(t.port).trim():"",i=typeof t.type=="string"&&t.type.trim()?t.type.trim():"socks5",de=typeof t.username=="string"?t.username:t.username!==void 0&&t.username!==null?String(t.username):"",ge=typeof t.password=="string"?t.password:t.password!==void 0&&t.password!==null?String(t.password):"";return{type:i,host:re,port:ye,username:de,password:ge}},xe=d=>{const t=O(d);return t&&t.host&&t.port?{enabled:!0,type:t.type||"socks5",host:t.host,port:t.port,username:t.username||"",password:t.password||""}:A()},H=d=>{if(!d||!d.enabled)return null;const t=(d.host||"").trim(),re=Number.parseInt(d.port,10);if(!t||Number.isNaN(re)||re<=0)return null;const ye=d.username?d.username.trim():"",i=d.password?d.password.trim():"";return{type:d.type||"socks5",host:t,port:re,username:ye||null,password:i||null}},m=()=>{var d;return xe((d=g.account)==null?void 0:d.proxy)},a=$({platform:((ha=g.account)==null?void 0:ha.platform)||"claude",addType:(()=>{var t;const d=((t=g.account)==null?void 0:t.platform)||"claude";return d==="gemini"||d==="openai"||d==="claude"?"oauth":"manual"})(),name:((jt=g.account)==null?void 0:jt.name)||"",description:((ea=g.account)==null?void 0:ea.description)||"",accountType:((wa=g.account)==null?void 0:wa.accountType)||"shared",authenticationMethod:((ta=g.account)==null?void 0:ta.authenticationMethod)||"",subscriptionType:"claude_max",autoStopOnWarning:(($a=g.account)==null?void 0:$a.autoStopOnWarning)||!1,useUnifiedUserAgent:((Aa=g.account)==null?void 0:Aa.useUnifiedUserAgent)||!1,useUnifiedClientId:((Ca=g.account)==null?void 0:Ca.useUnifiedClientId)||!1,unifiedClientId:((Ua=g.account)==null?void 0:Ua.unifiedClientId)||"",serialQueueEnabled:(((Ia=g.account)==null?void 0:Ia.maxConcurrency)||0)>0,interceptWarmup:((aa=g.account)==null?void 0:aa.interceptWarmup)===!0||((qt=g.account)==null?void 0:qt.interceptWarmup)==="true",groupId:"",groupIds:[],projectId:((ra=g.account)==null?void 0:ra.projectId)||"",accessToken:"",refreshToken:"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:m(),apiUrl:((sa=g.account)==null?void 0:sa.apiUrl)||"",apiKey:((Ta=g.account)==null?void 0:Ta.apiKey)||"",priority:((pt=g.account)==null?void 0:pt.priority)||50,endpointType:((yt=g.account)==null?void 0:yt.endpointType)||"anthropic",baseApi:((_a=g.account)==null?void 0:_a.baseApi)||"",baseUrl:((la=g.account)==null?void 0:la.baseUrl)||"https://generativelanguage.googleapis.com",rateLimitDuration:((Gt=g.account)==null?void 0:Gt.rateLimitDuration)||60,supportedModels:(()=>{var t;const d=(t=g.account)==null?void 0:t.supportedModels;return d?typeof d=="object"&&!Array.isArray(d)?Object.keys(d):Array.isArray(d)?d:[]:[]})(),userAgent:((oa=g.account)==null?void 0:oa.userAgent)||"",enableRateLimit:g.account?g.account.rateLimitDuration>0:!0,disableAutoProtection:((Ka=g.account)==null?void 0:Ka.disableAutoProtection)===!0,dailyQuota:((na=g.account)==null?void 0:na.dailyQuota)||0,dailyUsage:((Qt=g.account)==null?void 0:Qt.dailyUsage)||0,quotaResetTime:((Ma=g.account)==null?void 0:Ma.quotaResetTime)||"00:00",maxConcurrentTasks:((ia=g.account)==null?void 0:ia.maxConcurrentTasks)||0,accessKeyId:((Bt=g.account)==null?void 0:Bt.accessKeyId)||"",secretAccessKey:((da=g.account)==null?void 0:da.secretAccessKey)||"",region:((ua=g.account)==null?void 0:ua.region)||"",sessionToken:((Sa=g.account)==null?void 0:Sa.sessionToken)||"",defaultModel:((Da=g.account)==null?void 0:Da.defaultModel)||"",smallFastModel:((ja=g.account)==null?void 0:ja.smallFastModel)||"",azureEndpoint:((ga=g.account)==null?void 0:ga.azureEndpoint)||"",apiVersion:((Pa=g.account)==null?void 0:Pa.apiVersion)||"",deploymentName:((pa=g.account)==null?void 0:pa.deploymentName)||"",expireDuration:(()=>{var d;return(d=g.account)!=null&&d.expiresAt?"custom":""})(),customExpireDate:(()=>{var d;return(d=g.account)!=null&&d.expiresAt?new Date(g.account.expiresAt).toISOString().slice(0,16):""})(),expiresAt:((La=g.account)==null?void 0:La.expiresAt)||null}),ce=$("whitelist"),Te=$(["claude-sonnet-4-20250514","claude-sonnet-4-5-20250929","claude-3-5-haiku-20241022"]),Oe=[{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"}],Ee=$([]),ut=()=>{var d;if((d=g.account)!=null&&d.supportedModels)if(typeof g.account.supportedModels=="object"&&!Array.isArray(g.account.supportedModels)){const t=Object.entries(g.account.supportedModels);t.every(([ye,i])=>ye===i)?(ce.value="whitelist",Te.value=t.map(([ye])=>ye),Ee.value=t.map(([ye,i])=>({from:ye,to:i}))):(ce.value="mapping",Ee.value=t.map(([ye,i])=>({from:ye,to:i})))}else Array.isArray(g.account.supportedModels)&&(ce.value="whitelist",Te.value=g.account.supportedModels,Ee.value=g.account.supportedModels.map(t=>({from:t,to:t})))},Xe=d=>{if(!d||typeof d!="string")return[];const t=d.split(/\r?\n/).map(ye=>ye.trim()).filter(ye=>ye.length>0);return t.length===0?[]:Array.from(new Set(t))},st=[{value:"append",label:"追加模式",description:"保留现有 Key,并在末尾追加新 Key 列表。"},{value:"replace",label:"覆盖模式",description:"先清空旧 Key,再写入上方的新 Key 列表。"},{value:"delete",label:"删除模式",description:"输入要移除的 Key,可精准删除失效或被封禁的 Key。"}],_t=ie(()=>{const d=Math.max(st.findIndex(re=>re.value===a.value.apiKeyUpdateMode),0),t=100/st.length;return{width:`${t}%`,left:`${d*t}%`}}),Kt=ie(()=>{const d=st.find(t=>t.value===a.value.apiKeyUpdateMode);return d?d.label:st[0].label}),ct=ie(()=>{const d=st.find(t=>t.value===a.value.apiKeyUpdateMode);return d?d.description:st[0].description}),K=$({name:"",refreshToken:"",accessToken:"",apiKeys:"",apiUrl:"",apiKey:"",baseApi:"",accessKeyId:"",secretAccessKey:"",region:"",azureEndpoint:"",deploymentName:""}),mt=ie(()=>{var d;return((d=a.value.name)==null?void 0:d.trim())&&a.value.platform}),ht=ie(()=>p.value&&R.value.trim()),xt=()=>{var d;return!q.value||!((d=g.account)!=null&&d.id)?0:typeof a.value.dailyUsage=="number"?a.value.dailyUsage:0},gt=ie(()=>!a.value.dailyQuota||a.value.dailyQuota<=0?0:xt()/a.value.dailyQuota*100),Mt=ie(()=>{if(!g.account||g.account.platform!=="droid")return 0;let d=0;if(Array.isArray(g.account.apiKeys))d=g.account.apiKeys.length;else if(typeof g.account.apiKeys=="string")try{const re=JSON.parse(g.account.apiKeys);Array.isArray(re)&&(d=re.length)}catch{d=0}const t=g.account.apiKeyCount??g.account.apiKeysCount??g.account.api_key_count??d;return Number(t)||0}),k=ie(()=>{var t,re,ye;if(!q.value||a.value.platform!=="droid")return!1;const d=a.value.authenticationMethod||((t=g.account)==null?void 0:t.authenticationMethod)||((re=g.account)==null?void 0:re.authMethod)||((ye=g.account)==null?void 0:ye.authentication_mode)||"";return typeof d!="string"?!1:d.trim().toLowerCase()==="api_key"}),y=async()=>{var d;if(!(!q.value||!((d=g.account)!=null&&d.id)))try{const t=await Q.get(`/admin/claude-console-accounts/${g.account.id}/usage`);t&&(a.value.dailyUsage=t.dailyUsage||0)}catch{}},P=d=>{ne.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(K.value.name="",!mt.value){(!a.value.name||a.value.name.trim()==="")&&(K.value.name="请填写账户名称");return}if(a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)){L("请选择一个分组","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"&&ue.value===1&&a.value.addType==="oauth"&&(!a.value.projectId||a.value.projectId.trim()==="")&&!await M("项目 ID 未填写",`您尚未填写项目 ID。
|
||
|
||
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
|
||
如果您使用的是普通个人账号,可以继续不填写。`,"继续","返回填写"))&&(ue.value=2)},it=async()=>{E.value=!0;try{const d=H(a.value.proxy),t=d?{proxy:d}:{},re=await I.generateClaudeSetupTokenUrl(t);p.value=re.authUrl,F.value=re.sessionId}catch(d){L(d.message||"生成Setup Token授权链接失败","error")}finally{E.value=!1}},Rt=()=>{p.value="",R.value="",it()},Vt=async()=>{try{await navigator.clipboard.writeText(p.value),te.value=!0,L("链接已复制","success"),setTimeout(()=>{te.value=!1},2e3)}catch{const t=document.createElement("textarea");t.value=p.value,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")?(te.value=!0,L("链接已复制","success")):L("复制失败,请手动复制","error")}catch{L("复制失败,请手动复制","error")}document.body.removeChild(t),setTimeout(()=>{te.value=!1},2e3)}},ft=async()=>{if(ht.value){x.value=!0;try{const d={sessionId:F.value,callbackUrl:R.value.trim()},t=H(a.value.proxy);t&&(d.proxy=t);const re=await I.exchangeClaudeSetupTokenCode(d);a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=kt()),await wt(re)}catch(d){L(d.message||"Setup Token授权失败,请检查授权码是否正确","error")}finally{x.value=!1}}},St=async()=>{const d=Y.value.split(`
|
||
`).map(de=>de.trim()).filter(de=>de.length>0);if(d.length===0){pe.value="请输入至少一个 sessionKey";return}Ae.value=!0,pe.value="",De.value={current:0,total:d.length};const t=a.value.addType==="setup-token",re=H(a.value.proxy),ye=[],i=[];for(let de=0;de<d.length;de++){De.value.current=de+1;try{const ge={sessionKey:d[de],...re&&{proxy:re}};let Pe;t?Pe=await I.oauthSetupTokenWithCookie(ge):Pe=await I.oauthWithCookie(ge),ye.push(Pe)}catch(ge){i.push({index:de+1,key:d[de].substring(0,20)+"...",error:ge.message})}}if(De.value={current:0,total:0},ye.length>0)try{await wt(ye)}finally{Ae.value=!1}else Ae.value=!1;i.length>0&&ye.length===0?pe.value="全部授权失败,请检查 sessionKey 是否有效":i.length>0&&(pe.value=`${i.length} 个授权失败`)},Ot=()=>{Y.value="",pe.value="",we.value=!1,De.value={current:0,total:0}},bt=()=>{T.value==="manual"?Ot():(p.value="",R.value="",F.value="")},Et=(d,t,re)=>{var ge,Pe;const ye=H(a.value.proxy),i=d.claudeAiOauth||d,de={name:t,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:ye,claudeAiOauth:i,priority:a.value.priority||50,autoStopOnWarning:a.value.autoStopOnWarning||!1,interceptWarmup:a.value.interceptWarmup||!1,useUnifiedUserAgent:a.value.useUnifiedUserAgent||!1,useUnifiedClientId:a.value.useUnifiedClientId||!1,unifiedClientId:re,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 ze={},_e=i.extInfo;_e!=null&&_e.org_uuid&&(ze.org_uuid=_e.org_uuid),_e!=null&&_e.account_uuid&&(ze.account_uuid=_e.account_uuid),_e||((ge=i.organization)!=null&&ge.uuid&&(ze.org_uuid=i.organization.uuid),(Pe=i.account)!=null&&Pe.uuid&&(ze.account_uuid=i.account.uuid)),Object.keys(ze).length>0&&(de.extInfo=ze)}return de},wt=async d=>{var t,re,ye,i,de,ge,Pe,ze,_e;G.value=!0;try{const D=a.value.platform;if(D==="claude"&&Array.isArray(d)){const Ke=d,Re=Ke.length>1,Me=a.value.name,Ze=[],at=[];for(let Ut=0;Ut<Ke.length;Ut++){const ya=Ke[Ut],za=Re?`${Me}_${Ut+1}`:Me,qa=a.value.useUnifiedClientId?kt():"",Ga=Et(ya,za,qa);try{const Ht=await I.createClaudeAccount(Ga);Ze.push(Ht)}catch(Ht){at.push({name:za,error:Ht.message})}}if(Ze.length>0){const Ut=Re?`成功创建 ${Ze.length}/${Ke.length} 个账户`:"账户创建成功";L(Ut,"success"),B("success",Ze[0])}at.length>0&&L(`${at.length} 个账户创建失败`,"error");return}const j=Array.isArray(d)?d[0]:d;a.value.platform==="claude"&&a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=kt());const ke=H(a.value.proxy),W={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:ke};if(D==="claude"){const Ke=j.claudeAiOauth||j;if(W.claudeAiOauth=Ke,Ke){const Re={},Me=Ke.extInfo;if(Me&&typeof Me=="object"&&(Me.org_uuid&&(Re.org_uuid=Me.org_uuid),Me.account_uuid&&(Re.account_uuid=Me.account_uuid)),!Me){const Ze=(t=Ke.organization)==null?void 0:t.uuid,at=(re=Ke.account)==null?void 0:re.uuid;Ze&&(Re.org_uuid=Ze),at&&(Re.account_uuid=at)}Object.keys(Re).length>0&&(W.extInfo=Re)}W.priority=a.value.priority||50,W.autoStopOnWarning=a.value.autoStopOnWarning||!1,W.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,W.useUnifiedClientId=a.value.useUnifiedClientId||!1,W.unifiedClientId=a.value.unifiedClientId||"",W.maxConcurrency=a.value.serialQueueEnabled?1:0,W.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(D==="gemini")W.geminiOauth=j.tokens||j,a.value.projectId&&(W.projectId=a.value.projectId),W.priority=a.value.priority||50;else if(D==="openai")W.openaiOauth=j.tokens||j,W.accountInfo=j.accountInfo,W.priority=a.value.priority||50;else if(D==="droid"){const Ke=j.tokens||j||{},Re={accessToken:Ke.accessToken||Ke.access_token||"",refreshToken:Ke.refreshToken||Ke.refresh_token||"",expiresAt:Ke.expiresAt||Ke.expires_at||"",expiresIn:Ke.expiresIn||Ke.expires_in||null,tokenType:Ke.tokenType||Ke.token_type||"Bearer",organizationId:Ke.organizationId||Ke.organization_id||"",authenticationMethod:Ke.authenticationMethod||Ke.authentication_method||""};if(!Re.refreshToken){G.value=!1,L("授权成功但未返回 Refresh Token,请确认已授予离线访问权限后重试。","error");return}if(W.refreshToken=Re.refreshToken,W.accessToken=Re.accessToken,W.expiresAt=Re.expiresAt,Re.expiresIn!==null&&Re.expiresIn!==void 0&&(W.expiresIn=Re.expiresIn),W.priority=a.value.priority||50,W.endpointType=a.value.endpointType||"anthropic",W.platform="droid",W.tokenType=Re.tokenType,W.authenticationMethod=Re.authenticationMethod,Re.organizationId&&(W.organizationId=Re.organizationId),Ke.user){const Me=Ke.user,Ze=[];typeof Me.first_name=="string"&&Me.first_name.trim()&&Ze.push(Me.first_name.trim()),typeof Me.last_name=="string"&&Me.last_name.trim()&&Ze.push(Me.last_name.trim());const at=Ze.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()&&(W.ownerEmail=Me.email.trim()),at?(W.ownerName=at,W.ownerDisplayName=at):W.ownerEmail&&(W.ownerName=W.ownerName||W.ownerEmail,W.ownerDisplayName=W.ownerDisplayName||W.ownerEmail),typeof Me.id=="string"&&Me.id.trim()&&(W.userId=Me.id.trim())}}let Ie;D==="claude"?Ie=await I.createClaudeAccount(W):D==="gemini"?Ie=await I.createGeminiAccount(W):D==="openai"?Ie=await I.createOpenAIAccount(W):D==="droid"?Ie=await I.createDroidAccount(W):Ie=await I.createGeminiAccount(W),B("success",Ie)}catch(D){const j=((i=(ye=D.response)==null?void 0:ye.data)==null?void 0:i.error)||D.message||"账户创建失败",ke=((ge=(de=D.response)==null?void 0:de.data)==null?void 0:ge.suggestion)||"",W=((ze=(Pe=D.response)==null?void 0:Pe.data)==null?void 0:ze.errorDetails)||null;let Ie=j;ke&&(Ie+=`
|
||
${ke}`),W&&W.error_description?Ie+=`
|
||
详细信息: ${W.error_description}`:W&&W.error&&W.error.message&&(Ie+=`
|
||
详细信息: ${W.error.message}`),L(Ie,"error","",8e3)}finally{G.value=!1,(_e=ee.value)==null||_e.resetCookieAuth()}},lt=async()=>{var t,re,ye,i,de,ge,Pe,ze;K.value.name="",K.value.accessToken="",K.value.refreshToken="",K.value.apiUrl="",K.value.apiKey="",K.value.apiKeys="";let d=!1;if((!a.value.name||a.value.name.trim()==="")&&(K.value.name="请填写账户名称",d=!0),a.value.platform==="claude-console"&&((!a.value.apiUrl||a.value.apiUrl.trim()==="")&&(K.value.apiUrl="请填写 API URL",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(K.value.apiKey="请填写 API Key",d=!0)),a.value.platform==="ccr"&&((!a.value.apiUrl||a.value.apiUrl.trim()==="")&&(K.value.apiUrl="请填写 API URL",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(K.value.apiKey="请填写 API Key",d=!0)),a.value.platform==="openai-responses"?((!a.value.baseApi||a.value.baseApi.trim()==="")&&(K.value.baseApi="请填写 API 基础地址",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(K.value.apiKey="请填写 API 密钥",d=!0)):a.value.platform==="bedrock"?((!a.value.accessKeyId||a.value.accessKeyId.trim()==="")&&(K.value.accessKeyId="请填写 AWS 访问密钥 ID",d=!0),(!a.value.secretAccessKey||a.value.secretAccessKey.trim()==="")&&(K.value.secretAccessKey="请填写 AWS 秘密访问密钥",d=!0),(!a.value.region||a.value.region.trim()==="")&&(K.value.region="请选择 AWS 区域",d=!0)):a.value.platform==="azure_openai"?((!a.value.azureEndpoint||a.value.azureEndpoint.trim()==="")&&(K.value.azureEndpoint="请填写 Azure Endpoint",d=!0),(!a.value.deploymentName||a.value.deploymentName.trim()==="")&&(K.value.deploymentName="请填写部署名称",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(K.value.apiKey="请填写 API Key",d=!0)):a.value.addType==="manual"?a.value.platform==="openai"?(!a.value.refreshToken||a.value.refreshToken.trim()==="")&&(K.value.refreshToken="请填写 Refresh Token",d=!0):a.value.platform==="gemini"?(!a.value.accessToken||a.value.accessToken.trim()==="")&&(K.value.accessToken="请填写 Access Token",d=!0):a.value.platform==="droid"?((!a.value.accessToken||a.value.accessToken.trim()==="")&&(K.value.accessToken="请填写 Access Token",d=!0),(!a.value.refreshToken||a.value.refreshToken.trim()==="")&&(K.value.refreshToken="请填写 Refresh Token",d=!0)):a.value.platform==="claude"&&(!a.value.accessToken||a.value.accessToken.trim()==="")&&(K.value.accessToken="请填写 Access Token",d=!0):a.value.addType==="apikey"&&(a.value.platform==="gemini-api"?((!a.value.apiKey||a.value.apiKey.trim()==="")&&(K.value.apiKey="请填写 API Key",d=!0),!a.value.baseUrl||a.value.baseUrl.trim()===""?(K.value.baseUrl="请填写 API 基础地址",d=!0):a.value.baseUrl.trim().endsWith("/models")||(K.value.baseUrl="API 基础地址必须以 /models 结尾",d=!0)):Xe(a.value.apiKeysInput).length===0&&(K.value.apiKeys="请至少填写一个 API Key",d=!0)),a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)&&(L("请选择一个分组","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){G.value=!0;try{const _e=H(a.value.proxy),D={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:_e};if(a.value.platform==="claude"){const ke=a.value.refreshToken?6e5:31536e6;a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=kt()),D.claudeAiOauth={accessToken:a.value.accessToken,refreshToken:a.value.refreshToken||"",expiresAt:Date.now()+ke,scopes:[]},D.priority=a.value.priority||50,D.autoStopOnWarning=a.value.autoStopOnWarning||!1,D.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,D.useUnifiedClientId=a.value.useUnifiedClientId||!1,D.unifiedClientId=a.value.unifiedClientId||"",D.maxConcurrency=a.value.serialQueueEnabled?1:0,D.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 ke=a.value.refreshToken?6e5:31536e6;D.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()+ke},a.value.projectId&&(D.projectId=a.value.projectId),D.priority=a.value.priority||50}else if(a.value.platform==="openai"){const ke=a.value.refreshToken?6e5:31536e6;D.openaiOauth={idToken:"",accessToken:a.value.accessToken||"",refreshToken:a.value.refreshToken,expires_in:Math.floor(ke/1e3)},D.accountInfo={accountId:"",chatgptUserId:"",organizationId:"",organizationRole:"",organizationTitle:"",planType:"",email:"",emailVerified:!1},D.needsImmediateRefresh=!0,D.requireRefreshSuccess=!0,D.priority=a.value.priority||50}else if(a.value.platform==="droid")if(D.priority=a.value.priority||50,D.endpointType=a.value.endpointType||"anthropic",D.platform="droid",a.value.addType==="apikey"){const ke=Xe(a.value.apiKeysInput);D.apiKeys=ke,D.authenticationMethod="api_key",D.isActive=!0,D.schedulable=!0}else{const ke=((t=a.value.accessToken)==null?void 0:t.trim())||"",W=((re=a.value.refreshToken)==null?void 0:re.trim())||"",Ie=new Date(Date.now()+8*60*60*1e3).toISOString();D.accessToken=ke,D.refreshToken=W,D.expiresAt=Ie,D.expiresIn=8*60*60,D.tokenType="Bearer",D.authenticationMethod="manual"}else a.value.platform==="claude-console"||a.value.platform==="ccr"?(D.apiUrl=a.value.apiUrl,D.apiKey=a.value.apiKey,D.priority=a.value.priority||50,D.supportedModels=ba()||{},D.userAgent=a.value.userAgent||null,D.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0,a.value.platform==="claude-console"&&(D.disableAutoProtection=!!a.value.disableAutoProtection,D.interceptWarmup=!!a.value.interceptWarmup),D.dailyQuota=a.value.dailyQuota||0,D.quotaResetTime=a.value.quotaResetTime||"00:00",D.maxConcurrentTasks=a.value.maxConcurrentTasks||0):a.value.platform==="openai-responses"?(D.baseApi=a.value.baseApi,D.apiKey=a.value.apiKey,D.userAgent=a.value.userAgent||"",D.priority=a.value.priority||50,D.rateLimitDuration=60,D.dailyQuota=a.value.dailyQuota||0,D.quotaResetTime=a.value.quotaResetTime||"00:00"):a.value.platform==="gemini-api"?(D.baseUrl=a.value.baseUrl||"https://generativelanguage.googleapis.com",D.apiKey=a.value.apiKey,D.priority=a.value.priority||50,D.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[]):a.value.platform==="bedrock"?(D.awsCredentials={accessKeyId:a.value.accessKeyId,secretAccessKey:a.value.secretAccessKey,sessionToken:a.value.sessionToken||null},D.region=a.value.region,D.defaultModel=a.value.defaultModel||null,D.smallFastModel=a.value.smallFastModel||null,D.priority=a.value.priority||50,D.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0):a.value.platform==="azure_openai"&&(D.azureEndpoint=a.value.azureEndpoint,D.apiKey=a.value.apiKey,D.apiVersion=a.value.apiVersion||"2024-02-01",D.deploymentName=a.value.deploymentName,D.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[],D.priority=a.value.priority||50,D.isActive=a.value.isActive!==!1,D.schedulable=a.value.schedulable!==!1);let j;if(a.value.platform==="claude")j=await I.createClaudeAccount(D);else if(a.value.platform==="claude-console"||a.value.platform==="ccr")j=await I.createClaudeConsoleAccount(D);else if(a.value.platform==="droid")j=await I.createDroidAccount(D);else if(a.value.platform==="openai-responses")j=await I.createOpenAIResponsesAccount(D);else if(a.value.platform==="bedrock")j=await I.createBedrockAccount(D);else if(a.value.platform==="openai")j=await I.createOpenAIAccount(D);else if(a.value.platform==="azure_openai")j=await I.createAzureOpenAIAccount(D);else if(a.value.platform==="gemini")j=await I.createGeminiAccount(D);else if(a.value.platform==="gemini-api")j=await I.createGeminiApiAccount(D);else throw new Error(`不支持的平台: ${a.value.platform}`);B("success",j)}catch(_e){const D=((i=(ye=_e.response)==null?void 0:ye.data)==null?void 0:i.error)||_e.message||"账户创建失败",j=((ge=(de=_e.response)==null?void 0:de.data)==null?void 0:ge.suggestion)||"",ke=((ze=(Pe=_e.response)==null?void 0:Pe.data)==null?void 0:ze.errorDetails)||null;let W=D;j&&(W+=`
|
||
${j}`),ke&&ke.error_description?W+=`
|
||
详细信息: ${ke.error_description}`:ke&&ke.error&&ke.error.message&&(W+=`
|
||
详细信息: ${ke.error.message}`),L(W,"error","",8e3)}finally{G.value=!1}}},$t=async()=>{var d,t,re,ye,i,de,ge,Pe,ze,_e;if(K.value.name="",K.value.apiKeys="",K.value.baseUrl="",!a.value.name||a.value.name.trim()===""){K.value.name="请填写账户名称";return}if(a.value.platform==="gemini-api"){const D=((d=a.value.baseUrl)==null?void 0:d.trim())||"";if(!D){K.value.baseUrl="请填写 API 基础地址";return}if(!D.endsWith("/models")){K.value.baseUrl="API 基础地址必须以 /models 结尾";return}}if(a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)){L("请选择一个分组","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 M("项目 ID 未填写",`您尚未填写项目 ID。
|
||
|
||
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
|
||
如果您使用的是普通个人账号,可以继续不填写。`,"继续保存","返回填写"))){G.value=!0;try{const D=H(a.value.proxy),j={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:D};if(a.value.accessToken||a.value.refreshToken){const ke=((t=a.value.accessToken)==null?void 0:t.trim())||"",W=((re=a.value.refreshToken)==null?void 0:re.trim())||"";if(g.account.platform==="claude"){const Ie=a.value.refreshToken?6e5:31536e6;j.claudeAiOauth={accessToken:ke||"",refreshToken:W||"",expiresAt:Date.now()+Ie,scopes:g.account.scopes||[]}}else if(g.account.platform==="gemini"){const Ie=a.value.refreshToken?6e5:31536e6;j.geminiOauth={access_token:ke||"",refresh_token:W||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+Ie}}else if(g.account.platform==="openai"){const Ie=a.value.refreshToken?6e5:31536e6;j.openaiOauth={idToken:"",accessToken:ke||"",refreshToken:W||"",expires_in:Math.floor(Ie/1e3)},W&&W!==g.account.refreshToken&&(j.needsImmediateRefresh=!0,j.requireRefreshSuccess=!0)}else g.account.platform==="droid"&&(ke&&(j.accessToken=ke),W&&(j.refreshToken=W))}if(g.account.platform==="droid"){const ke=((ye=a.value.apiKeysInput)==null?void 0:ye.trim())||"",W=a.value.apiKeyUpdateMode||"append";if(W==="delete"){if(!ke){K.value.apiKeys="请填写需要删除的 API Key",G.value=!1;return}const Ie=Xe(ke);if(Ie.length===0){K.value.apiKeys="请填写需要删除的 API Key",G.value=!1;return}j.removeApiKeys=Ie,j.apiKeyUpdateMode="delete"}else{if(ke){const Ie=Xe(ke);if(Ie.length===0){K.value.apiKeys="请至少填写一个 API Key",G.value=!1;return}j.apiKeys=Ie}else W==="replace"&&(j.apiKeys=[]);(W!=="append"||ke)&&(j.apiKeyUpdateMode=W)}k.value&&(j.authenticationMethod="api_key")}if(g.account.platform==="gemini"&&(j.projectId=a.value.projectId||""),g.account.platform==="droid"&&(j.priority=a.value.priority||50,j.endpointType=a.value.endpointType||"anthropic"),g.account.platform==="claude"&&(a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=kt()),j.priority=a.value.priority||50,j.autoStopOnWarning=a.value.autoStopOnWarning||!1,j.interceptWarmup=a.value.interceptWarmup||!1,j.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,j.useUnifiedClientId=a.value.useUnifiedClientId||!1,j.unifiedClientId=a.value.unifiedClientId||"",j.maxConcurrency=a.value.serialQueueEnabled?1:0,j.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}),g.account.platform==="openai"&&(j.priority=a.value.priority||50),g.account.platform==="gemini"&&(j.priority=a.value.priority||50),g.account.platform==="claude-console"&&(j.apiUrl=a.value.apiUrl,a.value.apiKey&&(j.apiKey=a.value.apiKey),j.priority=a.value.priority||50,j.supportedModels=ba()||{},j.userAgent=a.value.userAgent||null,j.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0,j.disableAutoProtection=!!a.value.disableAutoProtection,j.interceptWarmup=!!a.value.interceptWarmup,j.dailyQuota=a.value.dailyQuota||0,j.quotaResetTime=a.value.quotaResetTime||"00:00",j.maxConcurrentTasks=a.value.maxConcurrentTasks||0),g.account.platform==="openai-responses"&&(j.baseApi=a.value.baseApi,a.value.apiKey&&(j.apiKey=a.value.apiKey),j.userAgent=a.value.userAgent||"",j.priority=a.value.priority||50,j.dailyQuota=a.value.dailyQuota||0,j.quotaResetTime=a.value.quotaResetTime||"00:00"),g.account.platform==="bedrock"&&((a.value.accessKeyId||a.value.secretAccessKey||a.value.sessionToken)&&(j.awsCredentials={},a.value.accessKeyId&&(j.awsCredentials.accessKeyId=a.value.accessKeyId),a.value.secretAccessKey&&(j.awsCredentials.secretAccessKey=a.value.secretAccessKey),a.value.sessionToken!==void 0&&(j.awsCredentials.sessionToken=a.value.sessionToken||null)),a.value.region&&(j.region=a.value.region),j.defaultModel=a.value.defaultModel||null,j.smallFastModel=a.value.smallFastModel||null,j.priority=a.value.priority||50,j.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0),g.account.platform==="azure_openai"&&(j.azureEndpoint=a.value.azureEndpoint,j.apiVersion=a.value.apiVersion||"2024-02-01",j.deploymentName=a.value.deploymentName,j.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[],j.priority=a.value.priority||50,a.value.apiKey&&a.value.apiKey.trim()&&(j.apiKey=a.value.apiKey)),g.account.platform==="gemini-api"&&(j.baseUrl=a.value.baseUrl||"https://generativelanguage.googleapis.com",a.value.apiKey&&a.value.apiKey.trim()&&(j.apiKey=a.value.apiKey),j.priority=a.value.priority||50,j.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[]),g.account.platform==="claude")await I.updateClaudeAccount(g.account.id,j);else if(g.account.platform==="claude-console")await I.updateClaudeConsoleAccount(g.account.id,j);else if(g.account.platform==="openai-responses")await I.updateOpenAIResponsesAccount(g.account.id,j);else if(g.account.platform==="bedrock")await I.updateBedrockAccount(g.account.id,j);else if(g.account.platform==="openai")await I.updateOpenAIAccount(g.account.id,j);else if(g.account.platform==="azure_openai")await I.updateAzureOpenAIAccount(g.account.id,j);else if(g.account.platform==="gemini")await I.updateGeminiAccount(g.account.id,j);else if(g.account.platform==="gemini-api")await I.updateGeminiApiAccount(g.account.id,j);else if(g.account.platform==="droid")await I.updateDroidAccount(g.account.id,j);else throw new Error(`不支持的平台: ${g.account.platform}`);B("success")}catch(D){const j=((de=(i=D.response)==null?void 0:i.data)==null?void 0:de.error)||D.message||"账户更新失败",ke=((Pe=(ge=D.response)==null?void 0:ge.data)==null?void 0:Pe.suggestion)||"",W=((_e=(ze=D.response)==null?void 0:ze.data)==null?void 0:_e.errorDetails)||null;let Ie=j;ke&&(Ie+=`
|
||
${ke}`),W&&W.error_description?Ie+=`
|
||
详细信息: ${W.error_description}`:W&&W.error&&W.error.message&&(Ie+=`
|
||
详细信息: ${W.error.message}`),L(Ie,"error","",8e3)}finally{G.value=!1}}};ve(()=>a.value.name,()=>{var d;K.value.name&&((d=a.value.name)!=null&&d.trim())&&(K.value.name="")}),ve(()=>a.value.accessToken,()=>{var d;K.value.accessToken&&((d=a.value.accessToken)!=null&&d.trim())&&(K.value.accessToken="")}),ve(()=>a.value.refreshToken,()=>{var d;K.value.refreshToken&&((d=a.value.refreshToken)!=null&&d.trim())&&(K.value.refreshToken="")}),ve(()=>a.value.apiUrl,()=>{var d;K.value.apiUrl&&((d=a.value.apiUrl)!=null&&d.trim())&&(K.value.apiUrl="")}),ve(()=>a.value.apiKey,()=>{var d;K.value.apiKey&&((d=a.value.apiKey)!=null&&d.trim())&&(K.value.apiKey="")}),ve(()=>a.value.azureEndpoint,()=>{var d;K.value.azureEndpoint&&((d=a.value.azureEndpoint)!=null&&d.trim())&&(K.value.azureEndpoint="")}),ve(()=>a.value.deploymentName,()=>{var d;K.value.deploymentName&&((d=a.value.deploymentName)!=null&&d.trim())&&(K.value.deploymentName="")});const et=$([]),At=$(!1),Nt=$(!1),Wt=ie(()=>{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)}),ot=async()=>{At.value=!0;try{const d=await Q.get("/admin/account-groups");et.value=d.data||[]}catch{L("加载分组列表失败","error"),et.value=[]}finally{At.value=!1}},nt=async()=>{await ot(),L("分组列表已刷新","success")},Jt=()=>{Nt.value=!0},dt=async()=>{await ot()},Dt=async()=>{var t;if(!((t=g.account)!=null&&t.id))return;const d=[typeof I.fetchDroidAccounts=="function"?I.fetchDroidAccounts:null,typeof I.fetchAllAccounts=="function"?I.fetchAllAccounts:null].filter(Boolean);for(const re of d)try{await re();return}catch(ye){console.error("刷新账户列表失败:",ye)}};ve(()=>a.value.platform,d=>{d==="claude-console"||d==="ccr"||d==="bedrock"||d==="openai-responses"?a.value.addType="manual":d==="claude"||d==="gemini"||d==="openai"?a.value.addType="oauth":(d==="gemini-api"||d==="azure_openai")&&(a.value.addType="apikey"),a.value.accountType==="group"&&(a.value.groupId="",a.value.groupIds=[])}),ve(()=>a.value.groupIds,d=>{a.value.accountType==="group"&&(d&&d.length>0?a.value.groupId=d[0]:a.value.groupId="")},{deep:!0}),ve(()=>a.value.addType,(d,t)=>{d!==t&&(d==="apikey"?(a.value.accessToken="",a.value.refreshToken="",K.value.accessToken="",K.value.refreshToken="",a.value.authenticationMethod="api_key",a.value.apiKeyUpdateMode="append"):t==="apikey"&&(a.value.apiKeysInput="",a.value.apiKeyUpdateMode="append",K.value.apiKeys="",q.value||(a.value.authenticationMethod="")))}),ve(()=>a.value.apiKeyUpdateMode,(d,t)=>{d!==t&&K.value.apiKeys&&(K.value.apiKeys="")}),ve(()=>a.value.apiKeysInput,d=>{if(!K.value.apiKeys)return;const t=Xe(d),re=a.value.apiKeyUpdateMode;if(re==="append"&&t.length>0){K.value.apiKeys="";return}if(re==="replace"){(t.length>0||!d||d.trim()==="")&&(K.value.apiKeys="");return}re==="delete"&&t.length>0&&(K.value.apiKeys="")}),ve(R,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?(R.value=i,L("成功提取授权码!","success")):L("URL 中未找到授权码参数,请检查链接是否正确","error")}catch{L("链接格式错误,请检查是否为完整的 URL","error")}else L("请粘贴以 http://localhost:45462 开头的链接","error")}),ve(()=>a.value.platform,d=>{q.value||B("platform-changed",d)}),ve(()=>a.value.accountType,d=>{d==="group"&&et.value.length===0&&ot()}),ve(()=>a.value.groupId,d=>{d==="__new__"&&(a.value.groupId="",Nt.value=!0)});const Yt=()=>{Ee.value.push({from:"",to:""})},Zt=d=>{Ee.value.splice(d,1)},qe=(d,t)=>{if(Ee.value.some(ye=>ye.from===d)){L(`模型 ${d} 的映射已存在`,"info");return}Ee.value.push({from:d,to:t}),L(`已添加映射: ${d} → ${t}`,"success")},ba=()=>{const d={};return ce.value==="whitelist"?Te.value.forEach(t=>{d[t]=t}):Ee.value.forEach(t=>{t.from&&t.to&&(d[t.from]=t.to)}),Object.keys(d).length>0?d:null};ve(()=>g.account,d=>{if(d){ut();const t=xe(d.proxy),re=typeof d.authenticationMethod=="string"?d.authenticationMethod.trim().toLowerCase():"",ye=re==="api_key"?"apikey":re==="manual"?"manual":"oauth";let i="";d.accountType==="group"&&(i=d.groupId||d.groupInfo&&d.groupInfo.id||"");let de="claude_max";if(d.subscriptionInfo){const ge=typeof d.subscriptionInfo=="string"?JSON.parse(d.subscriptionInfo):d.subscriptionInfo;ge.accountType?de=ge.accountType:ge.hasClaudeMax?de="claude_max":ge.hasClaudePro?de="claude_pro":de="claude_free"}a.value={platform:d.platform,addType:ye,name:d.name,description:d.description||"",accountType:d.accountType||"shared",subscriptionType:de,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 ge=d.supportedModels;return ge?typeof ge=="object"&&!Array.isArray(ge)?Object.keys(ge):Array.isArray(ge)?ge:[]:[]})(),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"&&y(),d.accountType==="group"&&ot().then(async()=>{const ge=[];if(d.groupInfos&&Array.isArray(d.groupInfos)&&d.groupInfos.length>0)d.groupInfos.forEach(Pe=>{Pe&&Pe.id&&ge.push(Pe.id)}),ge.length>0&&(a.value.groupId=ge[0]);else if(d.groupInfo&&d.groupInfo.id)a.value.groupId=d.groupInfo.id,ge.push(d.groupInfo.id);else if(d.groupId)a.value.groupId=d.groupId,ge.push(d.groupId);else if(d.groupIds&&Array.isArray(d.groupIds)&&d.groupIds.length>0)a.value.groupId=d.groupIds[0],ge.push(...d.groupIds);else{const Pe=et.value.map(async ze=>{try{((await Q.get(`/admin/account-groups/${ze.id}/members`)).data||[]).some(j=>j.id===d.id)&&(ge.push(ze.id),a.value.groupId||(a.value.groupId=ze.id))}catch{}});await Promise.all(Pe)}a.value.groupIds=ge})}},{immediate:!0});const vt=async()=>{try{const d=await Q.get("/admin/claude-code-version");d.success&&d.userAgent?_.value=d.userAgent:_.value=""}catch{_.value=""}},Ye=async()=>{Ce.value=!0;try{(await Q.post("/admin/claude-code-version/clear")).success?(_.value="",L("统一User-Agent缓存已清除","success")):L("清除缓存失败","error")}catch(d){L("清除缓存失败:"+(d.message||"未知错误"),"error")}finally{Ce.value=!1}},kt=()=>{const d=new Uint8Array(32);return crypto.getRandomValues(d),Array.from(d,t=>t.toString(16).padStart(2,"0")).join("")},va=()=>{a.value.unifiedClientId=kt(),L("已生成新的客户端标识","success")},Xt=()=>{a.value.useUnifiedClientId&&(a.value.useUnifiedUserAgent=!0,a.value.unifiedClientId||(a.value.unifiedClientId=kt()))},tt=ie(()=>{const d=new Date;return d.setMinutes(d.getMinutes()+1),d.toISOString().slice(0,16)}),ka=()=>{if(!a.value.expireDuration){a.value.expiresAt=null;return}if(a.value.expireDuration==="custom")return;const d=new Date,re=a.value.expireDuration.match(/(\d+)([d])/);if(re){const[,ye,i]=re,de=parseInt(ye);i==="d"&&d.setDate(d.getDate()+de),a.value.expiresAt=d.toISOString()}},Ft=()=>{a.value.customExpireDate&&(a.value.expiresAt=new Date(a.value.customExpireDate).toISOString())},Ct=d=>d?new Date(d).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"";return xa(()=>{var d;ne.value=Z(a.value.platform),q.value&&ut(),vt(),q.value&&((d=g.account)==null?void 0:d.platform)==="claude-console"&&y()}),ve(()=>a.value.platform,d=>{d==="claude"&&vt()}),(d,t)=>{var re,ye;return o(),Je(Tt,{to:"body"},[se.value?(o(),n("div",on,[e("div",nn,[e("div",dn,[e("div",un,[t[165]||(t[165]=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",gn,u(q.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[166]||(t[166]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),!q.value&&(a.value.addType==="oauth"||a.value.addType==="setup-token")?(o(),n("div",pn,[e("div",yn,[e("div",cn,[e("div",{class:U(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",ue.value>=1?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 1 ",2),t[167]||(t[167]=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[169]||(t[169]=e("div",{class:"h-0.5 w-4 bg-gray-300 sm:w-8"},null,-1)),e("div",mn,[e("div",{class:U(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",ue.value>=2?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 2 ",2),t[168]||(t[168]=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),ue.value===1&&!q.value?(o(),n("div",xn,[e("div",fn,[q.value?c("",!0):(o(),n("div",bn,[t[207]||(t[207]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择平台",-1)),e("div",vn,[e("div",kn,[e("div",{class:U(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[ne.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=>P("claude"))},[e("div",hn,[e("div",wn,[t[171]||(t[171]=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)),ne.value==="claude"?(o(),n("div",$n,t[170]||(t[170]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[172]||(t[172]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Claude ",-1)),t[173]||(t[173]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Anthropic",-1))])],2),e("div",{class:U(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[ne.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=>P("openai"))},[e("div",An,[e("div",Cn,[t[175]||(t[175]=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)),ne.value==="openai"?(o(),n("div",Un,t[174]||(t[174]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[176]||(t[176]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," OpenAI ",-1)),t[177]||(t[177]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"GPT 系列",-1))])],2),e("div",{class:U(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[ne.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=>P("gemini"))},[e("div",In,[e("div",Tn,[t[179]||(t[179]=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)),ne.value==="gemini"?(o(),n("div",_n,t[178]||(t[178]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[180]||(t[180]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Gemini ",-1)),t[181]||(t[181]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Google AI",-1))])],2),e("div",{class:U(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[ne.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=>P("droid"))},[e("div",Kn,[e("div",Mn,[t[183]||(t[183]=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)),ne.value==="droid"?(o(),n("div",Sn,t[182]||(t[182]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[184]||(t[184]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Droid ",-1)),t[185]||(t[185]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Claude Droid",-1))])],2)]),ne.value?(o(),n("div",Dn,[t[206]||(t[206]=e("p",{class:"mb-2 text-xs font-medium text-gray-700 dark:text-gray-300"}," 选择具体平台类型: ",-1)),e("div",jn,[ne.value==="claude"?(o(),n(he,{key:0},[e("label",{class:U(["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"]])},[v(e("input",{"onUpdate:modelValue":t[5]||(t[5]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"claude"},null,512),[[Se,a.value.platform]]),t[187]||(t[187]=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",Pn,t[186]||(t[186]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:U(["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"]])},[v(e("input",{"onUpdate:modelValue":t[6]||(t[6]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"claude-console"},null,512),[[Se,a.value.platform]]),t[189]||(t[189]=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",Ln,t[188]||(t[188]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:U(["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"]])},[v(e("input",{"onUpdate:modelValue":t[7]||(t[7]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"bedrock"},null,512),[[Se,a.value.platform]]),t[191]||(t[191]=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",zn,t[190]||(t[190]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:U(["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"]])},[v(e("input",{"onUpdate:modelValue":t[8]||(t[8]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"ccr"},null,512),[[Se,a.value.platform]]),t[193]||(t[193]=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",Rn,t[192]||(t[192]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)],64)):c("",!0),ne.value==="openai"?(o(),n(he,{key:1},[e("label",{class:U(["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"]])},[v(e("input",{"onUpdate:modelValue":t[9]||(t[9]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"openai"},null,512),[[Se,a.value.platform]]),t[195]||(t[195]=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",Vn,t[194]||(t[194]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:U(["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"]])},[v(e("input",{"onUpdate:modelValue":t[10]||(t[10]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"openai-responses"},null,512),[[Se,a.value.platform]]),t[197]||(t[197]=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",On,t[196]||(t[196]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:U(["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"]])},[v(e("input",{"onUpdate:modelValue":t[11]||(t[11]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"azure_openai"},null,512),[[Se,a.value.platform]]),t[199]||(t[199]=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",En,t[198]||(t[198]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)],64)):c("",!0),ne.value==="gemini"?(o(),n(he,{key:2},[e("label",{class:U(["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"]])},[v(e("input",{"onUpdate:modelValue":t[12]||(t[12]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini"},null,512),[[Se,a.value.platform]]),t[201]||(t[201]=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",Nn,t[200]||(t[200]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:U(["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"]])},[v(e("input",{"onUpdate:modelValue":t[13]||(t[13]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini-api"},null,512),[[Se,a.value.platform]]),t[203]||(t[203]=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",Wn,t[202]||(t[202]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)],64)):c("",!0),ne.value==="droid"?(o(),n("label",{key:3,class:U(["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"]])},[v(e("input",{"onUpdate:modelValue":t[14]||(t[14]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"droid"},null,512),[[Se,a.value.platform]]),t[205]||(t[205]=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",Fn,t[204]||(t[204]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)):c("",!0)])])):c("",!0)])])),!q.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",qn,[t[212]||(t[212]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"添加方式",-1)),e("div",Gn,[e("label",Qn,[v(e("input",{"onUpdate:modelValue":t[15]||(t[15]=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),[[Se,a.value.addType]]),e("span",Bn,[t[208]||(t[208]=f(" OAuth 授权",-1)),a.value.platform==="claude"||a.value.platform==="openai"?(o(),n("span",Hn," (用量可视化)")):c("",!0)])]),a.value.platform==="claude"?(o(),n("label",Jn,[v(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:"setup-token"},null,512),[[Se,a.value.addType]]),t[209]||(t[209]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Setup Token (效期长)",-1))])):c("",!0),e("label",Yn,[v(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:"manual"},null,512),[[Se,a.value.addType]]),t[210]||(t[210]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"手动输入 Access Token",-1))]),a.value.platform==="droid"?(o(),n("label",Zn,[v(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:"apikey"},null,512),[[Se,a.value.addType]]),t[211]||(t[211]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"使用 API Key (支持多个)",-1))])):c("",!0)])])):c("",!0),e("div",null,[t[213]||(t[213]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),v(e("input",{"onUpdate:modelValue":t[19]||(t[19]=i=>a.value.name=i),class:U(["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":K.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[z,a.value.name]]),K.value.name?(o(),n("p",Xn,u(K.value.name),1)):c("",!0)]),e("div",null,[t[214]||(t[214]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),v(e("textarea",{"onUpdate:modelValue":t[20]||(t[20]=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[218]||(t[218]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",ei,[e("label",ti,[v(e("input",{"onUpdate:modelValue":t[21]||(t[21]=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),[[Se,a.value.accountType]]),t[215]||(t[215]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",ai,[v(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:"dedicated"},null,512),[[Se,a.value.accountType]]),t[216]||(t[216]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",ri,[v(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:"group"},null,512),[[Se,a.value.accountType]]),t[217]||(t[217]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[219]||(t[219]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),!q.value&&a.value.platform!=="gemini-api"?(o(),n("div",si,[t[223]||(t[223]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",li,[v(e("select",{"onUpdate:modelValue":t[24]||(t[24]=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:ka},t[220]||(t[220]=[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),[[Na,a.value.expireDuration]]),a.value.expireDuration==="custom"?(o(),n("div",oi,[v(e("input",{"onUpdate:modelValue":t[25]||(t[25]=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:tt.value,type:"datetime-local",onChange:Ft},null,40,ni),[[z,a.value.customExpireDate]])])):c("",!0),a.value.expiresAt?(o(),n("p",ii,[t[221]||(t[221]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),f(" 将于 "+u(Ct(a.value.expiresAt))+" 过期 ",1)])):(o(),n("p",di,t[222]||(t[222]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),f(" 账户永不过期 ",-1)])))]),t[224]||(t[224]=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",ui,[t[226]||(t[226]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",gi,[e("div",pi,[e("div",yi,[Wt.value.length===0?(o(),n("div",ci," 暂无可用分组 ")):c("",!0),(o(!0),n(he,null,We(Wt.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"},[v(e("input",{"onUpdate:modelValue":t[26]||(t[26]=de=>a.value.groupIds=de),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i.id},null,8,mi),[[je,a.value.groupIds]]),e("span",xi,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:Jt},t[225]||(t[225]=[e("i",{class:"fas fa-plus"},null,-1),f(" 新建分组 ",-1)]))])])]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:nt},[e("i",{class:U(["fas fa-sync-alt",{"animate-spin":At.value}])},null,2)])])])):c("",!0),a.value.platform==="gemini"?(o(),n("div",fi,[t[227]||(t[227]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[27]||(t[27]=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[228]||(t[228]=e("div",{class:"mt-2 rounded-lg border border-yellow-200 bg-yellow-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-yellow-600"}),e("div",{class:"text-xs text-yellow-700"},[e("p",{class:"mb-1 font-medium"},"Google Cloud/Workspace 账号需要提供项目 ID"),e("p",null," 某些 Google 账号(特别是绑定了 Google Cloud 的账号)会被识别为 Workspace 账号,需要提供额外的项目 ID。 "),e("div",{class:"mt-2 rounded border border-yellow-300 bg-white p-2"},[e("p",{class:"mb-1 font-medium"},"如何获取项目 ID:"),e("ol",{class:"ml-2 list-inside list-decimal space-y-1"},[e("li",null,[f(" 访问 "),e("a",{class:"font-medium text-blue-600 hover:underline",href:"https://console.cloud.google.com/welcome",target:"_blank"},"Google Cloud Console")]),e("li",null,[f(" 复制"),e("span",{class:"font-semibold text-red-600"},"项目 ID(Project ID)"),f(",通常是字符串格式 ")]),e("li",{class:"text-red-600"}," ⚠️ 注意:要复制项目 ID(Project ID),不要复制项目编号(Project Number)! ")])]),e("p",{class:"mt-2"},[e("strong",null,"提示:"),f("如果您的账号是普通个人账号(未绑定 Google Cloud),请留空此字段。 ")])])])],-1))])):c("",!0),a.value.platform==="bedrock"&&!q.value?(o(),n("div",bi,[e("div",null,[t[229]||(t[229]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 访问密钥 ID *",-1)),v(e("input",{"onUpdate:modelValue":t[28]||(t[28]=i=>a.value.accessKeyId=i),class:U(["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":K.value.accessKeyId}]),placeholder:"请输入 AWS Access Key ID",required:"",type:"text"},null,2),[[z,a.value.accessKeyId]]),K.value.accessKeyId?(o(),n("p",vi,u(K.value.accessKeyId),1)):c("",!0)]),e("div",null,[t[230]||(t[230]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 秘密访问密钥 *",-1)),v(e("input",{"onUpdate:modelValue":t[29]||(t[29]=i=>a.value.secretAccessKey=i),class:U(["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":K.value.secretAccessKey}]),placeholder:"请输入 AWS Secret Access Key",required:"",type:"password"},null,2),[[z,a.value.secretAccessKey]]),K.value.secretAccessKey?(o(),n("p",ki,u(K.value.secretAccessKey),1)):c("",!0)]),e("div",null,[t[231]||(t[231]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 区域 *",-1)),v(e("input",{"onUpdate:modelValue":t[30]||(t[30]=i=>a.value.region=i),class:U(["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":K.value.region}]),placeholder:"例如:us-east-1",required:"",type:"text"},null,2),[[z,a.value.region]]),K.value.region?(o(),n("p",hi,u(K.value.region),1)):c("",!0),t[232]||(t[232]=e("div",{class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600"}),e("div",{class:"text-xs text-blue-700"},[e("p",{class:"mb-1 font-medium"},"常用 AWS 区域参考:"),e("div",{class:"grid grid-cols-2 gap-1 text-xs"},[e("span",null,"• us-east-1 (美国东部)"),e("span",null,"• us-west-2 (美国西部)"),e("span",null,"• eu-west-1 (欧洲爱尔兰)"),e("span",null,"• ap-southeast-1 (新加坡)"),e("span",null,"• ap-northeast-1 (东京)"),e("span",null,"• eu-central-1 (法兰克福)")]),e("p",{class:"mt-2 text-blue-600"},"💡 请输入完整的区域代码,如 us-east-1")])])],-1))]),e("div",null,[t[233]||(t[233]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"会话令牌 (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[31]||(t[31]=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:"如果使用临时凭证,请输入会话令牌",type:"password"},null,512),[[z,a.value.sessionToken]]),t[234]||(t[234]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 仅在使用临时 AWS 凭证时需要填写 ",-1))]),e("div",null,[t[235]||(t[235]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"默认主模型 (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[32]||(t[32]=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[236]||(t[236]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1)),t[237]||(t[237]=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[238]||(t[238]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[33]||(t[33]=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[239]||(t[239]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 用于快速响应的轻量级模型,留空将使用系统默认 ",-1))])])):c("",!0),a.value.platform==="azure_openai"&&!q.value?(o(),n("div",wi,[e("div",null,[t[240]||(t[240]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint *",-1)),v(e("input",{"onUpdate:modelValue":t[34]||(t[34]=i=>a.value.azureEndpoint=i),class:U(["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":K.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",required:"",type:"url"},null,2),[[z,a.value.azureEndpoint]]),K.value.azureEndpoint?(o(),n("p",$i,u(K.value.azureEndpoint),1)):c("",!0),t[241]||(t[241]=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[242]||(t[242]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),v(e("input",{"onUpdate:modelValue":t[35]||(t[35]=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[243]||(t[243]=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[244]||(t[244]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称 *",-1)),v(e("input",{"onUpdate:modelValue":t[36]||(t[36]=i=>a.value.deploymentName=i),class:U(["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":K.value.deploymentName}]),placeholder:"gpt-4",required:"",type:"text"},null,2),[[z,a.value.deploymentName]]),K.value.deploymentName?(o(),n("p",Ai,u(K.value.deploymentName),1)):c("",!0),t[245]||(t[245]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Azure OpenAI Studio 中创建的部署名称 ",-1))]),e("div",null,[t[246]||(t[246]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),v(e("input",{"onUpdate:modelValue":t[37]||(t[37]=i=>a.value.apiKey=i),class:U(["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":K.value.apiKey}]),placeholder:"请输入 Azure OpenAI API Key",required:"",type:"password"},null,2),[[z,a.value.apiKey]]),K.value.apiKey?(o(),n("p",Ci,u(K.value.apiKey),1)):c("",!0),t[247]||(t[247]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Azure 门户获取的 API 密钥 ",-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)),e("div",Ui,[(o(),n(he,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"},[v(e("input",{"onUpdate:modelValue":t[38]||(t[38]=de=>a.value.supportedModels=de),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,Ii),[[je,a.value.supportedModels]]),e("span",Ti,u(i),1)])),64))]),t[249]||(t[249]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 选择此部署支持的模型类型 ",-1))])])):c("",!0),a.value.platform==="bedrock"&&!q.value?(o(),n("div",_i,[e("div",null,[t[254]||(t[254]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",Ki,[e("label",Mi,[v(e("input",{"onUpdate:modelValue":t[39]||(t[39]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.enableRateLimit]]),t[250]||(t[250]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[251]||(t[251]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",Si,[t[252]||(t[252]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),v(e("input",{"onUpdate:modelValue":t[40]||(t[40]=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[253]||(t[253]=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")&&!q.value?(o(),n("div",Di,[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 URL *",-1)),v(e("input",{"onUpdate:modelValue":t[41]||(t[41]=i=>a.value.apiUrl=i),class:U(["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":K.value.apiUrl}]),placeholder:"例如:https://api.example.com",required:"",type:"text"},null,2),[[z,a.value.apiUrl]]),K.value.apiUrl?(o(),n("p",ji,u(K.value.apiUrl),1)):c("",!0)]),e("div",null,[t[256]||(t[256]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),v(e("input",{"onUpdate:modelValue":t[42]||(t[42]=i=>a.value.apiKey=i),class:U(["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":K.value.apiKey}]),placeholder:"请输入API Key",required:"",type:"password"},null,2),[[z,a.value.apiKey]]),K.value.apiKey?(o(),n("p",Pi,u(K.value.apiKey),1)):c("",!0)]),e("div",Li,[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)),v(e("input",{"onUpdate:modelValue":t[43]||(t[43]=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[258]||(t[258]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[259]||(t[259]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),v(e("input",{"onUpdate:modelValue":t[44]||(t[44]=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[260]||(t[260]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 每日自动重置额度的时间 ",-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)),v(e("input",{"onUpdate:modelValue":t[45]||(t[45]=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[262]||(t[262]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))]),e("div",null,[t[270]||(t[270]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",zi,[e("button",{class:U(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",ce.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[46]||(t[46]=i=>ce.value="whitelist")},t[263]||(t[263]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),f(" 模型白名单 ",-1)]),2),e("button",{class:U(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",ce.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[47]||(t[47]=i=>ce.value="mapping")},t[264]||(t[264]=[e("i",{class:"fas fa-random mr-2"},null,-1),f(" 模型映射 ",-1)]),2)]),ce.value==="whitelist"?(o(),n("div",Ri,[t[265]||(t[265]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",Vi,[(o(),n(he,null,We(Oe,i=>e("label",{key:i.value,class:U(["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",Te.value.includes(i.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[v(e("input",{"onUpdate:modelValue":t[48]||(t[48]=de=>Te.value=de),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,Oi),[[je,Te.value]]),e("span",Ei,u(i.label),1)],2)),64))]),e("p",Ni,[f(" 已选择 "+u(Te.value.length)+" 个模型 ",1),Te.value.length===0?(o(),n("span",Wi,"(支持所有模型)")):c("",!0)])])):(o(),n("div",Fi,[t[269]||(t[269]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",qi,[(o(!0),n(he,null,We(Ee.value,(i,de)=>(o(),n("div",{key:de,class:"flex items-center gap-2"},[v(e("input",{"onUpdate:modelValue":ge=>i.from=ge,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,Gi),[[z,i.from]]),t[267]||(t[267]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),v(e("input",{"onUpdate:modelValue":ge=>i.to=ge,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,Qi),[[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:ge=>Zt(de)},t[266]||(t[266]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Bi)]))),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:Yt},t[268]||(t[268]=[e("i",{class:"fas fa-plus mr-2"},null,-1),f(" 添加模型映射 ",-1)])),e("div",Hi,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:t[49]||(t[49]=i=>qe("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[50]||(t[50]=i=>qe("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[51]||(t[51]=i=>qe("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[52]||(t[52]=i=>qe("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[53]||(t[53]=i=>qe("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[54]||(t[54]=i=>qe("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[55]||(t[55]=i=>qe("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[56]||(t[56]=i=>qe("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[271]||(t[271]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[57]||(t[57]=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[272]||(t[272]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[277]||(t[277]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",Ji,[e("label",Yi,[v(e("input",{"onUpdate:modelValue":t[58]||(t[58]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.enableRateLimit]]),t[273]||(t[273]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[274]||(t[274]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",Zi,[t[275]||(t[275]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),v(e("input",{"onUpdate:modelValue":t[59]||(t[59]=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[276]||(t[276]=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",Xi,[t[279]||(t[279]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"上游错误处理",-1)),e("label",ed,[v(e("input",{"onUpdate:modelValue":t[60]||(t[60]=i=>a.value.disableAutoProtection=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.disableAutoProtection]]),t[278]||(t[278]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"}," 上游错误不自动暂停调度 ",-1))]),t[280]||(t[280]=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"&&!q.value?(o(),n("div",td,[e("div",null,[t[281]||(t[281]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),v(e("input",{"onUpdate:modelValue":t[61]||(t[61]=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[282]||(t[282]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方 OpenAI 兼容 API 的基础地址,不要包含具体路径 ",-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"},"API 密钥 *",-1)),e("div",ad,[v(e("input",{"onUpdate:modelValue":t[62]||(t[62]=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:V.value?"text":"password"},null,8,rd),[[ma,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[63]||(t[63]=i=>V.value=!V.value)},[e("i",{class:U(V.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[284]||(t[284]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方服务提供的 API 密钥 ",-1))]),e("div",null,[t[285]||(t[285]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[64]||(t[64]=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[286]||(t[286]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可选项。如果设置,所有请求将使用此 User-Agent;否则透传客户端的 User-Agent ",-1))]),v(e("input",{"onUpdate:modelValue":t[65]||(t[65]=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"&&!q.value?(o(),n("div",sd,[e("div",null,[t[287]||(t[287]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),v(e("input",{"onUpdate:modelValue":t[66]||(t[66]=i=>a.value.baseUrl=i),class:U(["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":K.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",required:"",type:"url"},null,2),[[z,a.value.baseUrl]]),K.value.baseUrl?(o(),n("p",ld,u(K.value.baseUrl),1)):c("",!0),t[288]||(t[288]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[f(" 填写 API 基础地址,必须以 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/models"),f(" 结尾。系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/{model}:generateContent")],-1)),t[289]||(t[289]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[f(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com/v1beta/models")],-1)),t[290]||(t[290]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[f(" 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini/v1beta/models")],-1))]),e("div",null,[t[291]||(t[291]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",od,[v(e("input",{"onUpdate:modelValue":t[67]||(t[67]=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:V.value?"text":"password"},null,8,nd),[[ma,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[68]||(t[68]=i=>V.value=!V.value)},[e("i",{class:U(V.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[292]||(t[292]=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",id,[t[295]||(t[295]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",dd,[e("label",ud,[v(e("input",{"onUpdate:modelValue":t[69]||(t[69]=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),[[Se,a.value.subscriptionType]]),t[293]||(t[293]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",gd,[v(e("input",{"onUpdate:modelValue":t[70]||(t[70]=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),[[Se,a.value.subscriptionType]]),t[294]||(t[294]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[296]||(t[296]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):c("",!0),a.value.platform==="claude"?(o(),n("div",pd,[e("label",yd,[v(e("input",{"onUpdate:modelValue":t[71]||(t[71]=i=>a.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.autoStopOnWarning]]),t[297]||(t[297]=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",cd,[e("label",md,[v(e("input",{"onUpdate:modelValue":t[72]||(t[72]=i=>a.value.serialQueueEnabled=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.serialQueueEnabled]]),t[298]||(t[298]=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",xd,[e("label",fd,[v(e("input",{"onUpdate:modelValue":t[73]||(t[73]=i=>a.value.interceptWarmup=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.interceptWarmup]]),t[299]||(t[299]=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",bd,[e("label",vd,[v(e("input",{"onUpdate:modelValue":t[74]||(t[74]=i=>a.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.useUnifiedUserAgent]]),e("div",kd,[t[301]||(t[301]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[302]||(t[302]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),_.value?(o(),n("div",hd,[e("div",wd,[e("p",$d," 💡 当前统一版本:"+u(_.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:Ce.value,type:"button",onClick:Ye},[Ce.value?(o(),n("div",Ud)):(o(),n("i",Cd)),f(" "+u(Ce.value?"清除中...":"清除缓存"),1)],8,Ad)])])):(o(),n("div",Id,t[300]||(t[300]=[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",Td,[e("label",_d,[v(e("input",{"onUpdate:modelValue":t[75]||(t[75]=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:Xt},null,544),[[je,a.value.useUnifiedClientId]]),e("div",Kd,[t[306]||(t[306]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[307]||(t[307]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),a.value.useUnifiedClientId?(o(),n("div",Md,[e("div",Sd,[e("div",{class:"mb-2 flex items-center justify-between"},[t[304]||(t[304]=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:va},t[303]||(t[303]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f(" 重新生成 ",-1)]))]),e("div",Dd,[e("code",jd,[e("span",Pd,u(a.value.unifiedClientId.substring(0,8)),1),e("span",Ld,u(a.value.unifiedClientId.substring(8,56)),1),e("span",zd,u(a.value.unifiedClientId.substring(56)),1)])]),t[305]||(t[305]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),f(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):c("",!0)])])])):c("",!0),e("div",null,[t[308]||(t[308]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),v(e("input",{"onUpdate:modelValue":t[76]||(t[76]=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[309]||(t[309]=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",Rd,[e("div",Vd,[t[314]||(t[314]=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[313]||(t[313]=e("h5",{class:"mb-2 font-semibold text-blue-900 dark:text-blue-300"}," 手动输入 Token ",-1)),a.value.platform==="claude"?(o(),n("p",Od," 请输入有效的 Claude Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="gemini"?(o(),n("p",Ed," 请输入有效的 Gemini Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="openai"?(o(),n("p",Nd," 请输入有效的 OpenAI Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="droid"?(o(),n("p",Wd," 请输入有效的 Droid Access Token,并同时提供 Refresh Token 以支持自动刷新。 ")):c("",!0),e("div",Fd,[t[312]||(t[312]=e("p",{class:"mb-1 text-sm font-medium text-blue-900 dark:text-blue-300"},[e("i",{class:"fas fa-folder-open mr-1"}),f(" 获取 Access Token 的方法: ")],-1)),a.value.platform==="claude"?(o(),n("p",qd,t[310]||(t[310]=[f(" 请从已登录 Claude Code 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono dark:bg-blue-900/50"},"~/.claude/.credentials.json",-1),f(" 文件中的凭证, 请勿使用 Claude 官网 API Keys 页面的密钥。 ",-1)]))):a.value.platform==="gemini"?(o(),n("p",Gd,t[311]||(t[311]=[f(" 请从已登录 Gemini CLI 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono dark:bg-blue-900/50"},"~/.config/.gemini/oauth_creds.json",-1),f(" 文件中的凭证。 ",-1)]))):a.value.platform==="openai"?(o(),n("p",Qd," 请从已登录 OpenAI 账户的机器上获取认证凭证, 或通过 OAuth 授权流程获取 Access Token。 ")):a.value.platform==="droid"?(o(),n("p",Bd," 请从已完成授权的 Droid CLI 或 Factory.ai 导出的凭证中获取 Access Token 与 Refresh Token。 ")):c("",!0)]),a.value.platform!=="droid"?(o(),n("p",Hd," 💡 如果未填写 Refresh Token,Token 过期后需要手动更新。 ")):(o(),n("p",Jd," ⚠️ Droid 账户必须填写 Refresh Token,缺失将导致无法自动刷新 Access Token。 "))])]),a.value.platform==="openai"?(o(),n("div",Yd,[t[315]||(t[315]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token (可选)",-1)),v(e("textarea",{"onUpdate:modelValue":t[77]||(t[77]=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[316]||(t[316]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。 ")],-1))])):(o(),n("div",Zd,[t[317]||(t[317]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token *",-1)),v(e("textarea",{"onUpdate:modelValue":t[78]||(t[78]=i=>a.value.accessToken=i),class:U(["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":K.value.accessToken}]),placeholder:"请输入 Access Token...",required:"",rows:"4"},null,2),[[z,a.value.accessToken]]),K.value.accessToken?(o(),n("p",Xd,u(K.value.accessToken),1)):c("",!0)])),a.value.platform==="openai"||a.value.platform==="droid"?(o(),n("div",e0,[t[319]||(t[319]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token *",-1)),v(e("textarea",{"onUpdate:modelValue":t[79]||(t[79]=i=>a.value.refreshToken=i),class:U(["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":K.value.refreshToken}]),placeholder:"请输入 Refresh Token(必填)...",required:"",rows:"4"},null,2),[[z,a.value.refreshToken]]),K.value.refreshToken?(o(),n("p",t0,u(K.value.refreshToken),1)):c("",!0),e("p",a0,[t[318]||(t[318]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),a.value.platform==="openai"?(o(),n(he,{key:0},[f(" 系统将使用 Refresh Token 自动获取 Access Token 和用户信息 ")],64)):(o(),n(he,{key:1},[f(" 系统将使用 Refresh Token 自动刷新 Factory.ai 访问令牌,确保账户保持可用。 ")],64))])])):(o(),n("div",r0,[t[320]||(t[320]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token (可选)",-1)),v(e("textarea",{"onUpdate:modelValue":t[80]||(t[80]=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",s0,[t[321]||(t[321]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[81]||(t[81]=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[322]||(t[322]=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",l0,[t[327]||(t[327]=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[323]||(t[323]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 列表 *",-1)),v(e("textarea",{"onUpdate:modelValue":t[82]||(t[82]=i=>a.value.apiKeysInput=i),class:U(["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":K.value.apiKeys}]),placeholder:"每行一个 API Key,可粘贴多行",required:"",rows:"6"},null,2),[[z,a.value.apiKeysInput]]),K.value.apiKeys?(o(),n("p",o0,u(K.value.apiKeys),1)):c("",!0),t[324]||(t[324]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 建议为每条 Key 提供独立额度;系统会自动去重并忽略空白行。 ")],-1))]),e("div",null,[t[325]||(t[325]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[83]||(t[83]=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[326]||(t[326]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))]),t[328]||(t[328]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-random mr-1"}),f("分配策略说明")]),e("ul",{class:"mt-1 list-disc space-y-1 pl-4"},[e("li",null,"新会话将随机命中一个 Key,并在会话有效期内保持粘性。"),e("li",null,"若某 Key 失效,会自动切换到剩余可用 Key,最大化成功率。"),e("li",null," 若上游返回 4xx 错误码,该 Key 会被自动标记为异常;全部 Key 异常后账号将暂停调度。 ")])],-1))])):c("",!0),Be(Ja,{modelValue:a.value.proxy,"onUpdate:modelValue":t[84]||(t[84]=i=>a.value.proxy=i)},null,8,["modelValue"]),e("div",n0,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[85]||(t[85]=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:G.value,type:"button",onClick:Qe}," 下一步 ",8,i0)):(o(),n("button",{key:1,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:G.value,type:"button",onClick:lt},[G.value?(o(),n("div",u0)):c("",!0),f(" "+u(G.value?"创建中...":"创建"),1)],8,d0))])])])):c("",!0),ue.value===2&&a.value.addType==="oauth"?(o(),Je(Cl,{key:2,ref_key:"oauthFlowRef",ref:ee,platform:a.value.platform,proxy:a.value.proxy,onBack:t[86]||(t[86]=i=>ue.value=1),onSuccess:wt},null,8,["platform","proxy"])):c("",!0),ue.value===2&&a.value.addType==="setup-token"?(o(),n("div",g0,[a.value.platform==="claude"?(o(),n("div",p0,[e("div",y0,[e("div",c0,[t[350]||(t[350]=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",m0,[t[349]||(t[349]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"}," Claude Setup Token 授权 ",-1)),e("div",x0,[t[331]||(t[331]=e("p",{class:"mb-3 text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式: ",-1)),e("div",f0,[e("label",b0,[v(e("input",{"onUpdate:modelValue":t[87]||(t[87]=i=>T.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"manual",onChange:bt},null,544),[[Se,T.value]]),t[329]||(t[329]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-link mr-1"}),f("手动授权 ")],-1))]),e("label",v0,[v(e("input",{"onUpdate:modelValue":t[88]||(t[88]=i=>T.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"cookie",onChange:bt},null,544),[[Se,T.value]]),t[330]||(t[330]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-cookie mr-1"}),f("Cookie 自动授权 ")],-1))])])]),T.value==="manual"?(o(),n("div",k0,[t[340]||(t[340]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤通过 Setup Token 完成 Claude 账户的授权: ",-1)),e("div",h0,[e("div",w0,[t[334]||(t[334]=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",$0,[t[333]||(t[333]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),p.value?(o(),n("div",I0,[e("div",T0,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:p.value},null,8,_0),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:Vt},[e("i",{class:U(te.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:Rt},t[332]||(t[332]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:E.value,onClick:it},[E.value?(o(),n("div",U0)):(o(),n("i",C0)),f(" "+u(E.value?"生成中...":"生成 Setup Token 授权链接"),1)],8,A0))])])]),t[341]||(t[341]=e("div",{class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},[e("div",{class:"flex items-start gap-3"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 2 "),e("div",{class:"flex-1"},[e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 在浏览器中打开链接并完成授权 "),e("p",{class:"mb-2 text-sm text-blue-700 dark:text-blue-300"}," 请在新标签页中打开授权链接,登录您的 Claude 账户并授权 Claude Code。 "),e("div",{class:"rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"},[e("p",{class:"text-xs text-yellow-800 dark:text-yellow-300"},[e("i",{class:"fas fa-exclamation-triangle mr-1"}),e("strong",null,"注意:"),f("如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 ")])])])])],-1)),e("div",K0,[e("div",M0,[t[339]||(t[339]=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",S0,[t[337]||(t[337]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),t[338]||(t[338]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 授权完成后,从返回页面复制 Authorization Code,并粘贴到下方输入框: ",-1)),e("div",D0,[e("div",null,[t[335]||(t[335]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),f("Authorization Code ")],-1)),v(e("textarea",{"onUpdate:modelValue":t[89]||(t[89]=i=>R.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,R.value]])]),t[336]||(t[336]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 请粘贴从Claude Code授权页面复制的Authorization Code ")],-1))])])])])])):c("",!0),T.value==="cookie"?(o(),n("div",j0,[t[347]||(t[347]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 使用 sessionKey 自动完成授权,无需手动打开链接。 ",-1)),e("div",P0,[e("div",L0,[e("div",null,[e("label",z0,[t[342]||(t[342]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),t[343]||(t[343]=f("sessionKey ",-1)),X.value>1?(o(),n("span",R0,u(X.value)+" 个 ",1)):c("",!0)]),v(e("textarea",{"onUpdate:modelValue":t[90]||(t[90]=i=>Y.value=i),class:U(["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":pe.value}]),placeholder:`每行一个 sessionKey,例如:
|
||
sk-ant-sid01-xxxxx...
|
||
sk-ant-sid01-yyyyy...`,rows:"3"},null,2),[[z,Y.value]]),X.value>1?(o(),n("p",V0,[t[344]||(t[344]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),f(" 将批量创建 "+u(X.value)+" 个账户 ",1)])):c("",!0),pe.value?(o(),n("p",O0,u(pe.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[91]||(t[91]=i=>we.value=!we.value)},[e("i",{class:U(we.value?"fas fa-chevron-down mr-1":"fas fa-chevron-right mr-1")},null,2),t[345]||(t[345]=f(" 如何获取 sessionKey? ",-1))]),we.value?(o(),n("div",E0,t[346]||(t[346]=[e("ol",{class:"space-y-2 text-xs text-gray-600 dark:text-gray-300"},[e("li",null,[f("1. 在浏览器中登录 "),e("strong",null,"claude.ai")]),e("li",null,[f("2. 按 "),e("strong",null,"F12"),f(" 打开开发者工具")]),e("li",null,[f("3. 切换到 "),e("strong",null,'"Application"'),f(" (应用) 标签页")]),e("li",null,[f(" 4. 在左侧选择 "),e("strong",null,'"Cookies"'),f(" → "),e("strong",null,'"https://claude.ai"')]),e("li",null,[f("5. 找到键为 "),e("strong",null,'"sessionKey"'),f(" 的那一行")]),e("li",null,[f("6. 复制其 "),e("strong",null,'"Value"'),f(" (值) 列的内容")])],-1),e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(' sessionKey 通常以 "sk-ant-" 开头 ')],-1)]))):c("",!0)]),e("button",{class:"btn btn-primary w-full px-4 py-3",disabled:Ae.value||!Y.value.trim(),type:"button",onClick:St},[Ae.value?(o(),n("div",W0)):(o(),n("i",F0)),Ae.value&&De.value.total>1?(o(),n(he,{key:2},[f(" 正在授权 "+u(De.value.current)+"/"+u(De.value.total)+"... ",1)],64)):Ae.value?(o(),n(he,{key:3},[f(" 授权中... ")],64)):(o(),n(he,{key:4},[f(" 开始自动授权 ")],64))],8,N0)])]),t[348]||(t[348]=e("div",{class:"rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"},[e("p",{class:"text-xs text-yellow-800 dark:text-yellow-300"},[e("i",{class:"fas fa-exclamation-triangle mr-1"}),e("strong",null,"提示:"),f("如果您设置了代理,Cookie授权也会使用相同的代理配置。 ")])],-1))])):c("",!0)])])])])):c("",!0),e("div",q0,[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[92]||(t[92]=i=>ue.value=1)}," 上一步 "),T.value==="manual"?(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!ht.value||x.value,type:"button",onClick:ft},[x.value?(o(),n("div",Q0)):c("",!0),f(" "+u(x.value?"验证中...":"完成授权"),1)],8,G0)):c("",!0)])])):c("",!0),q.value?(o(),n("div",B0,[e("div",null,[t[351]||(t[351]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),v(e("input",{"onUpdate:modelValue":t[93]||(t[93]=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[352]||(t[352]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),v(e("textarea",{"onUpdate:modelValue":t[94]||(t[94]=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[356]||(t[356]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",H0,[e("label",J0,[v(e("input",{"onUpdate:modelValue":t[95]||(t[95]=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),[[Se,a.value.accountType]]),t[353]||(t[353]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",Y0,[v(e("input",{"onUpdate:modelValue":t[96]||(t[96]=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),[[Se,a.value.accountType]]),t[354]||(t[354]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",Z0,[v(e("input",{"onUpdate:modelValue":t[97]||(t[97]=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),[[Se,a.value.accountType]]),t[355]||(t[355]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[357]||(t[357]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),q.value?c("",!0):(o(),n("div",X0,[t[361]||(t[361]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",eu,[v(e("select",{"onUpdate:modelValue":t[98]||(t[98]=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:ka},t[358]||(t[358]=[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),[[Na,a.value.expireDuration]]),a.value.expireDuration==="custom"?(o(),n("div",tu,[v(e("input",{"onUpdate:modelValue":t[99]||(t[99]=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:tt.value,type:"datetime-local",onChange:Ft},null,40,au),[[z,a.value.customExpireDate]])])):c("",!0),a.value.expiresAt?(o(),n("p",ru,[t[359]||(t[359]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),f(" 将于 "+u(Ct(a.value.expiresAt))+" 过期 ",1)])):(o(),n("p",su,t[360]||(t[360]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),f(" 账户永不过期 ",-1)])))]),t[362]||(t[362]=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",lu,[t[364]||(t[364]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",ou,[e("div",nu,[e("div",iu,[Wt.value.length===0?(o(),n("div",du," 暂无可用分组 ")):c("",!0),(o(!0),n(he,null,We(Wt.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"},[v(e("input",{"onUpdate:modelValue":t[100]||(t[100]=de=>a.value.groupIds=de),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i.id},null,8,uu),[[je,a.value.groupIds]]),e("span",gu,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:Jt},t[363]||(t[363]=[e("i",{class:"fas fa-plus"},null,-1),f(" 新建分组 ",-1)]))])])]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:nt},[e("i",{class:U(["fas fa-sync-alt",{"animate-spin":At.value}])},null,2)])])])):c("",!0),a.value.platform==="gemini"?(o(),n("div",pu,[t[365]||(t[365]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[101]||(t[101]=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[366]||(t[366]=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",yu,[t[369]||(t[369]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",cu,[e("label",mu,[v(e("input",{"onUpdate:modelValue":t[102]||(t[102]=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),[[Se,a.value.subscriptionType]]),t[367]||(t[367]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",xu,[v(e("input",{"onUpdate:modelValue":t[103]||(t[103]=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),[[Se,a.value.subscriptionType]]),t[368]||(t[368]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[370]||(t[370]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):c("",!0),a.value.platform==="claude"?(o(),n("div",fu,[e("label",bu,[v(e("input",{"onUpdate:modelValue":t[104]||(t[104]=i=>a.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.autoStopOnWarning]]),t[371]||(t[371]=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",vu,[e("label",ku,[v(e("input",{"onUpdate:modelValue":t[105]||(t[105]=i=>a.value.serialQueueEnabled=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.serialQueueEnabled]]),t[372]||(t[372]=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",hu,[e("label",wu,[v(e("input",{"onUpdate:modelValue":t[106]||(t[106]=i=>a.value.interceptWarmup=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.interceptWarmup]]),t[373]||(t[373]=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",$u,[e("label",Au,[v(e("input",{"onUpdate:modelValue":t[107]||(t[107]=i=>a.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.useUnifiedUserAgent]]),e("div",Cu,[t[375]||(t[375]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[376]||(t[376]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),_.value?(o(),n("div",Uu,[e("div",Iu,[e("p",Tu," 💡 当前统一版本:"+u(_.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:Ce.value,type:"button",onClick:Ye},[Ce.value?(o(),n("div",Mu)):(o(),n("i",Ku)),f(" "+u(Ce.value?"清除中...":"清除缓存"),1)],8,_u)])])):(o(),n("div",Su,t[374]||(t[374]=[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",Du,[e("label",ju,[v(e("input",{"onUpdate:modelValue":t[108]||(t[108]=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:Xt},null,544),[[je,a.value.useUnifiedClientId]]),e("div",Pu,[t[380]||(t[380]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[381]||(t[381]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),a.value.useUnifiedClientId?(o(),n("div",Lu,[e("div",zu,[e("div",{class:"mb-2 flex items-center justify-between"},[t[378]||(t[378]=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:va},t[377]||(t[377]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f(" 重新生成 ",-1)]))]),e("div",Ru,[e("code",Vu,[e("span",Ou,u(a.value.unifiedClientId.substring(0,8)),1),e("span",Eu,u(a.value.unifiedClientId.substring(8,56)),1),e("span",Nu,u(a.value.unifiedClientId.substring(56)),1)])]),t[379]||(t[379]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),f(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):c("",!0)])])])):c("",!0),e("div",null,[t[382]||(t[382]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),v(e("input",{"onUpdate:modelValue":t[109]||(t[109]=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[383]||(t[383]=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",Wu,[e("div",null,[t[384]||(t[384]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API URL",-1)),v(e("input",{"onUpdate:modelValue":t[110]||(t[110]=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[385]||(t[385]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API Key",-1)),v(e("input",{"onUpdate:modelValue":t[111]||(t[111]=i=>a.value.apiKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[z,a.value.apiKey]]),t[386]||(t[386]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",Fu,[e("div",null,[t[387]||(t[387]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),v(e("input",{"onUpdate:modelValue":t[112]||(t[112]=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[388]||(t[388]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[389]||(t[389]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),v(e("input",{"onUpdate:modelValue":t[113]||(t[113]=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[390]||(t[390]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),q.value&&a.value.dailyQuota>0?(o(),n("div",qu,[e("div",Gu,[t[391]||(t[391]=e("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"}," 今日使用情况 ",-1)),e("span",Qu," $"+u(xt().toFixed(4))+" / $"+u(a.value.dailyQuota.toFixed(2)),1)]),e("div",Bu,[e("div",{class:U(["absolute left-0 top-0 h-full rounded-full transition-all",gt.value>=90?"bg-red-500":gt.value>=70?"bg-yellow-500":"bg-green-500"]),style:He({width:`${Math.min(gt.value,100)}%`})},null,6)]),e("div",Hu,[e("span",Ju," 剩余: $"+u(Math.max(0,a.value.dailyQuota-xt()).toFixed(2)),1),e("span",Yu,u(gt.value.toFixed(1))+"% 已使用 ",1)])])):c("",!0),e("div",null,[t[392]||(t[392]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),v(e("input",{"onUpdate:modelValue":t[114]||(t[114]=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[393]||(t[393]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))]),e("div",null,[t[401]||(t[401]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",Zu,[e("button",{class:U(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",ce.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[115]||(t[115]=i=>ce.value="whitelist")},t[394]||(t[394]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),f(" 模型白名单 ",-1)]),2),e("button",{class:U(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",ce.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[116]||(t[116]=i=>ce.value="mapping")},t[395]||(t[395]=[e("i",{class:"fas fa-random mr-2"},null,-1),f(" 模型映射 ",-1)]),2)]),ce.value==="whitelist"?(o(),n("div",Xu,[t[396]||(t[396]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",eg,[(o(),n(he,null,We(Oe,i=>e("label",{key:i.value,class:U(["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",Te.value.includes(i.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[v(e("input",{"onUpdate:modelValue":t[117]||(t[117]=de=>Te.value=de),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,tg),[[je,Te.value]]),e("span",ag,u(i.label),1)],2)),64))]),e("p",rg,[f(" 已选择 "+u(Te.value.length)+" 个模型 ",1),Te.value.length===0?(o(),n("span",sg,"(支持所有模型)")):c("",!0)])])):(o(),n("div",lg,[t[400]||(t[400]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",og,[(o(!0),n(he,null,We(Ee.value,(i,de)=>(o(),n("div",{key:de,class:"flex items-center gap-2"},[v(e("input",{"onUpdate:modelValue":ge=>i.from=ge,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,ng),[[z,i.from]]),t[398]||(t[398]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),v(e("input",{"onUpdate:modelValue":ge=>i.to=ge,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,ig),[[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:ge=>Zt(de)},t[397]||(t[397]=[e("i",{class:"fas fa-trash"},null,-1)]),8,dg)]))),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:Yt},t[399]||(t[399]=[e("i",{class:"fas fa-plus mr-2"},null,-1),f(" 添加模型映射 ",-1)])),e("div",ug,[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[118]||(t[118]=i=>qe("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[119]||(t[119]=i=>qe("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[120]||(t[120]=i=>qe("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[121]||(t[121]=i=>qe("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[122]||(t[122]=i=>qe("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[123]||(t[123]=i=>qe("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[124]||(t[124]=i=>qe("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[125]||(t[125]=i=>qe("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[126]||(t[126]=i=>qe("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[127]||(t[127]=i=>qe("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[402]||(t[402]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[128]||(t[128]=i=>a.value.userAgent=i),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[z,a.value.userAgent]]),t[403]||(t[403]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[408]||(t[408]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",gg,[e("label",pg,[v(e("input",{"onUpdate:modelValue":t[129]||(t[129]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[je,a.value.enableRateLimit]]),t[404]||(t[404]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[405]||(t[405]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",yg,[t[406]||(t[406]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),v(e("input",{"onUpdate:modelValue":t[130]||(t[130]=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[407]||(t[407]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):c("",!0)]),a.value.platform==="claude-console"?(o(),n("div",cg,[t[410]||(t[410]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 上游错误处理 ",-1)),e("label",mg,[v(e("input",{"onUpdate:modelValue":t[131]||(t[131]=i=>a.value.disableAutoProtection=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.disableAutoProtection]]),t[409]||(t[409]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"}," 上游错误不自动暂停调度 ",-1))]),t[411]||(t[411]=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",xg,[e("div",null,[t[412]||(t[412]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 基础地址",-1)),v(e("input",{"onUpdate:modelValue":t[132]||(t[132]=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[413]||(t[413]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 密钥",-1)),e("div",fg,[v(e("input",{"onUpdate:modelValue":t[133]||(t[133]=i=>a.value.apiKey=i),class:"form-input w-full pr-10",placeholder:"留空表示不更新",type:V.value?"text":"password"},null,8,bg),[[ma,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[134]||(t[134]=i=>V.value=!V.value)},[e("i",{class:U(V.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[414]||(t[414]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",null,[t[415]||(t[415]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent",-1)),v(e("input",{"onUpdate:modelValue":t[135]||(t[135]=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))]),v(e("input",{"onUpdate:modelValue":t[136]||(t[136]=i=>a.value.rateLimitDuration=i),type:"hidden"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]]),e("div",vg,[e("div",null,[t[417]||(t[417]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),v(e("input",{"onUpdate:modelValue":t[137]||(t[137]=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[418]||(t[418]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),v(e("input",{"onUpdate:modelValue":t[138]||(t[138]=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[419]||(t[419]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),v(e("input",{"onUpdate:modelValue":t[139]||(t[139]=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[420]||(t[420]=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",kg,[e("div",null,[t[421]||(t[421]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址",-1)),v(e("input",{"onUpdate:modelValue":t[140]||(t[140]=i=>a.value.baseUrl=i),class:U(["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":K.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",type:"url"},null,2),[[z,a.value.baseUrl]]),K.value.baseUrl?(o(),n("p",hg,u(K.value.baseUrl),1)):c("",!0),t[422]||(t[422]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[f(" 填写 API 基础地址,必须以 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/models"),f(" 结尾。系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/{model}:generateContent")],-1)),t[423]||(t[423]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[f(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com/v1beta/models")],-1)),t[424]||(t[424]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[f(" 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini/v1beta/models")],-1))]),e("div",null,[t[425]||(t[425]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥",-1)),e("div",wg,[v(e("input",{"onUpdate:modelValue":t[141]||(t[141]=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:V.value?"text":"password"},null,8,$g),[[ma,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[142]||(t[142]=i=>V.value=!V.value)},[e("i",{class:U(V.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[426]||(t[426]=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",Ag,[e("div",null,[t[427]||(t[427]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 访问密钥 ID",-1)),v(e("input",{"onUpdate:modelValue":t[143]||(t[143]=i=>a.value.accessKeyId=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"text"},null,512),[[z,a.value.accessKeyId]]),t[428]||(t[428]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Access Key ID",-1))]),e("div",null,[t[429]||(t[429]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 秘密访问密钥",-1)),v(e("input",{"onUpdate:modelValue":t[144]||(t[144]=i=>a.value.secretAccessKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[z,a.value.secretAccessKey]]),t[430]||(t[430]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Secret Access Key",-1))]),e("div",null,[t[431]||(t[431]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 区域",-1)),v(e("input",{"onUpdate:modelValue":t[145]||(t[145]=i=>a.value.region=i),class:"form-input w-full",placeholder:"例如:us-east-1",type:"text"},null,512),[[z,a.value.region]]),t[432]||(t[432]=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[433]||(t[433]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"会话令牌 (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[146]||(t[146]=i=>a.value.sessionToken=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[z,a.value.sessionToken]])]),e("div",null,[t[434]||(t[434]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"默认主模型 (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[147]||(t[147]=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[435]||(t[435]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1))]),e("div",null,[t[436]||(t[436]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[148]||(t[148]=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[437]||(t[437]=e("p",{class:"mt-1 text-xs text-gray-500"},"用于快速响应的轻量级模型,留空将使用系统默认",-1))]),e("div",null,[t[442]||(t[442]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",Cg,[e("label",Ug,[v(e("input",{"onUpdate:modelValue":t[149]||(t[149]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[je,a.value.enableRateLimit]]),t[438]||(t[438]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[439]||(t[439]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",Ig,[t[440]||(t[440]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),v(e("input",{"onUpdate:modelValue":t[150]||(t[150]=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[441]||(t[441]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):c("",!0)])])):c("",!0),a.value.platform==="azure_openai"?(o(),n("div",Tg,[e("div",null,[t[443]||(t[443]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint",-1)),v(e("input",{"onUpdate:modelValue":t[151]||(t[151]=i=>a.value.azureEndpoint=i),class:U(["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":K.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",type:"url"},null,2),[[z,a.value.azureEndpoint]]),K.value.azureEndpoint?(o(),n("p",_g,u(K.value.azureEndpoint),1)):c("",!0)]),e("div",null,[t[444]||(t[444]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),v(e("input",{"onUpdate:modelValue":t[152]||(t[152]=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[445]||(t[445]=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[446]||(t[446]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称",-1)),v(e("input",{"onUpdate:modelValue":t[153]||(t[153]=i=>a.value.deploymentName=i),class:U(["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":K.value.deploymentName}]),placeholder:"gpt-4",type:"text"},null,2),[[z,a.value.deploymentName]]),K.value.deploymentName?(o(),n("p",Kg,u(K.value.deploymentName),1)):c("",!0)]),e("div",null,[t[447]||(t[447]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),v(e("input",{"onUpdate:modelValue":t[154]||(t[154]=i=>a.value.apiKey=i),class:U(["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":K.value.apiKey}]),placeholder:"留空表示不更新",type:"password"},null,2),[[z,a.value.apiKey]]),K.value.apiKey?(o(),n("p",Mg,u(K.value.apiKey),1)):c("",!0),t[448]||(t[448]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-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)),e("div",Sg,[(o(),n(he,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"},[v(e("input",{"onUpdate:modelValue":t[155]||(t[155]=de=>a.value.supportedModels=de),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,Dg),[[je,a.value.supportedModels]]),e("span",jg,u(i),1)])),64))]),t[450]||(t[450]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"选择此部署支持的模型类型",-1))])])):c("",!0),q.value&&k.value?(o(),n("div",Pg,[e("div",Lg,[t[456]||(t[456]=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",zg,[e("div",Rg,[t[452]||(t[452]=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[156]||(t[156]=i=>Fe.value=!0)},t[451]||(t[451]=[e("i",{class:"fas fa-list-ul"},null,-1),e("span",null,"管理 API Key",-1)]))]),e("p",Vg,[t[453]||(t[453]=f(" 当前已保存 ",-1)),e("strong",null,u(Mt.value),1),t[454]||(t[454]=f(" 条 API Key。您可以追加新的 Key,或通过下方模式快速覆盖、删除指定 Key。 ",-1))]),t[455]||(t[455]=e("p",{class:"text-xs text-purple-700 dark:text-purple-300"}," 留空表示保留现有 Key 不变;根据所选模式决定是追加、覆盖还是删除输入的 Key。 ",-1))])]),e("div",Og,[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 Key 列表",-1)),v(e("textarea",{"onUpdate:modelValue":t[157]||(t[157]=i=>a.value.apiKeysInput=i),class:U(["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":K.value.apiKeys}]),placeholder:"根据模式填写;每行一个 API Key",rows:"6"},null,2),[[z,a.value.apiKeysInput]]),K.value.apiKeys?(o(),n("p",Eg,u(K.value.apiKeys),1)):c("",!0)]),e("div",Ng,[e("div",Wg,[t[458]||(t[458]=e("span",{class:"text-sm font-semibold text-purple-800 dark:text-purple-100"},"API Key 更新模式",-1)),e("span",Fg,u(Kt.value),1)]),e("div",qg,[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(_t.value)},null,4),(o(),n(he,null,We(st,i=>e("button",{key:i.value,class:U(["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:de=>a.value.apiKeyUpdateMode=i.value},u(i.label),11,Gg)),64))]),e("p",Qg,u(ct.value),1)]),t[459]||(t[459]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-lightbulb mr-1"}),f("小提示")]),e("ul",{class:"mt-1 list-disc space-y-1 pl-4"},[e("li",null,"系统会为新的 Key 自动建立粘性映射,保持同一会话命中同一个 Key。"),e("li",null,"追加模式会保留现有 Key 并在末尾追加新的 Key。"),e("li",null,"覆盖模式会先清空旧 Key 再写入上方的新列表。"),e("li",null,"删除模式会根据输入精准移除指定 Key,适合快速处理失效或被封禁的 Key。")])],-1))])])):c("",!0),!(q.value&&k.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",Bg,[t[462]||(t[462]=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",Hg,[e("div",null,[t[460]||(t[460]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Access Token",-1)),v(e("textarea",{"onUpdate:modelValue":t[158]||(t[158]=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[461]||(t[461]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Refresh Token",-1)),v(e("textarea",{"onUpdate:modelValue":t[159]||(t[159]=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",Jg,[t[463]||(t[463]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),v(e("input",{"onUpdate:modelValue":t[160]||(t[160]=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[464]||(t[464]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))])):c("",!0),Be(Ja,{modelValue:a.value.proxy,"onUpdate:modelValue":t[161]||(t[161]=i=>a.value.proxy=i)},null,8,["modelValue"]),e("div",Yg,[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[162]||(t[162]=i=>d.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:G.value,type:"button",onClick:$t},[G.value?(o(),n("div",Xg)):c("",!0),f(" "+u(G.value?"更新中...":"更新"),1)],8,Zg)])])):c("",!0)])])):c("",!0),Be(ir,{"cancel-text":rt(S).cancelText,"confirm-text":rt(S).confirmText,message:rt(S).message,show:rt(N),title:rt(S).title,onCancel:rt(w),onConfirm:rt(b)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),Nt.value?(o(),Je(no,{key:1,onClose:t[163]||(t[163]=i=>Nt.value=!1),onRefresh:dt})):c("",!0),Fe.value?(o(),Je(ln,{key:2,"account-id":(re=g.account)==null?void 0:re.id,"account-name":(ye=g.account)==null?void 0:ye.name,onClose:t[164]||(t[164]=i=>Fe.value=!1),onRefresh:Dt},null,8,["account-id","account-name"])):c("",!0)])}}},lr=fa(ep,[["__scopeId","data-v-30a87e87"]]),tp={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},ap={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"},rp={class:"mb-4 flex items-center justify-between sm:mb-6"},sp={class:"flex items-center gap-2 sm:gap-3"},lp={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},op={class:"space-y-6"},np={key:0,class:"mt-1 text-xs text-red-500"},ip={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},dp={key:0,class:"mt-1 text-xs text-red-500"},up={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},gp=["placeholder","required"],pp={key:0,class:"mt-1 text-xs text-red-500"},yp={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},cp={class:"mb-3"},mp={class:"inline-flex cursor-pointer items-center"},xp={key:0},fp={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},bp={class:"mb-3 space-y-2"},vp=["onUpdate:modelValue"],kp=["onUpdate:modelValue"],hp=["onClick"],wp={class:"mt-2 flex gap-3"},$p=["disabled"],Ap={key:0,class:"loading-spinner mr-2"},Cp={__name:"CcrAccountForm",props:{account:{type:Object,default:null}},emits:["close","success"],setup(J,{emit:Le}){const g=J,B=Le,I=$(!0),N=ie(()=>!!g.account),S=$(!1),M=$({name:"",description:"",apiUrl:"",apiKey:"",priority:50,userAgent:"",rateLimitDuration:60,dailyQuota:0,quotaResetTime:"00:00",proxy:null,supportedModels:{}}),b=$(!0),w=$({}),q=$([]),se=()=>{const x={};for(const p of q.value){const R=(p.from||"").trim(),te=(p.to||"").trim();R&&te&&(x[R]=te)}return x},ee=()=>{q.value.push({from:"",to:""})},ue=x=>{q.value.splice(x,1)},G=()=>{const x={};return(!M.value.name||M.value.name.trim().length===0)&&(x.name="名称不能为空"),(!M.value.apiUrl||M.value.apiUrl.trim().length===0)&&(x.apiUrl="API URL 不能为空"),!N.value&&(!M.value.apiKey||M.value.apiKey.trim().length===0)&&(x.apiKey="API Key 不能为空"),w.value=x,Object.keys(x).length===0},V=async()=>{if(G()){S.value=!0;try{if(N.value){const x={name:M.value.name,description:M.value.description,apiUrl:M.value.apiUrl,priority:M.value.priority,userAgent:M.value.userAgent,rateLimitDuration:b.value?Number(M.value.rateLimitDuration||60):0,dailyQuota:Number(M.value.dailyQuota||0),quotaResetTime:M.value.quotaResetTime||"00:00",proxy:M.value.proxy||null,supportedModels:se()};M.value.apiKey&&M.value.apiKey.trim().length>0&&(x.apiKey=M.value.apiKey);const p=await Q.put(`/admin/ccr-accounts/${g.account.id}`,x);p.success?B("success"):L(p.message||"保存失败","error")}else{const x={name:M.value.name,description:M.value.description,apiUrl:M.value.apiUrl,apiKey:M.value.apiKey,priority:Number(M.value.priority||50),supportedModels:se(),userAgent:M.value.userAgent,rateLimitDuration:b.value?Number(M.value.rateLimitDuration||60):0,proxy:M.value.proxy,accountType:"shared",dailyQuota:Number(M.value.dailyQuota||0),quotaResetTime:M.value.quotaResetTime||"00:00"},p=await Q.post("/admin/ccr-accounts",x);p.success?B("success"):L(p.message||"创建失败","error")}}catch(x){L(x.message||"请求失败","error")}finally{S.value=!1}}},E=()=>{if(!g.account)return;const x=g.account;M.value.name=x.name||"",M.value.description=x.description||"",M.value.apiUrl=x.apiUrl||"",M.value.priority=Number(x.priority||50),M.value.userAgent=x.userAgent||"",M.value.rateLimitDuration=Number(x.rateLimitDuration||60),M.value.dailyQuota=Number(x.dailyQuota||0),M.value.quotaResetTime=x.quotaResetTime||"00:00",M.value.proxy=x.proxy||null,b.value=M.value.rateLimitDuration>0,q.value=[];const p=x.supportedModels||{};if(p&&typeof p=="object")for(const R of Object.keys(p))q.value.push({from:R,to:p[R]})};return xa(()=>{N.value&&E()}),ve(()=>g.account,()=>{N.value&&E()}),(x,p)=>(o(),Je(Tt,{to:"body"},[I.value?(o(),n("div",tp,[e("div",ap,[e("div",rp,[e("div",sp,[p[13]||(p[13]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-teal-500 to-emerald-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-code-branch text-sm text-white sm:text-base"})],-1)),e("h3",lp,u(N.value?"编辑 CCR 账户":"添加 CCR 账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:p[0]||(p[0]=R=>x.$emit("close"))},p[14]||(p[14]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",op,[e("div",null,[p[15]||(p[15]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称 *",-1)),v(e("input",{"onUpdate:modelValue":p[1]||(p[1]=R=>M.value.name=R),class:U(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":w.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[z,M.value.name]]),w.value.name?(o(),n("p",np,u(w.value.name),1)):c("",!0)]),e("div",null,[p[16]||(p[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),v(e("textarea",{"onUpdate:modelValue":p[2]||(p[2]=R=>M.value.description=R),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,M.value.description]])]),e("div",ip,[e("div",null,[p[17]||(p[17]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),v(e("input",{"onUpdate:modelValue":p[3]||(p[3]=R=>M.value.apiUrl=R),class:U(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":w.value.apiUrl}]),placeholder:"例如:https://api.example.com/v1/messages",required:"",type:"text"},null,2),[[z,M.value.apiUrl]]),w.value.apiUrl?(o(),n("p",dp,u(w.value.apiUrl),1)):c("",!0)]),e("div",null,[e("label",up,"API Key "+u(N.value?"(留空不更新)":"*"),1),v(e("input",{"onUpdate:modelValue":p[4]||(p[4]=R=>M.value.apiKey=R),class:U(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":w.value.apiKey}]),placeholder:N.value?"留空表示不更新":"必填",required:!N.value,type:"password"},null,10,gp),[[z,M.value.apiKey]]),w.value.apiKey?(o(),n("p",pp,u(w.value.apiKey),1)):c("",!0)])]),e("div",yp,[e("div",null,[p[18]||(p[18]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"优先级",-1)),v(e("input",{"onUpdate:modelValue":p[5]||(p[5]=R=>M.value.priority=R),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,M.value.priority,void 0,{number:!0}]]),p[19]||(p[19]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议范围:1-100,数字越小优先级越高 ",-1))]),e("div",null,[p[20]||(p[20]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),v(e("input",{"onUpdate:modelValue":p[6]||(p[6]=R=>M.value.userAgent=R),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,M.value.userAgent]])])]),e("div",null,[p[24]||(p[24]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",cp,[e("label",mp,[v(e("input",{"onUpdate:modelValue":p[7]||(p[7]=R=>b.value=R),class:"mr-2 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,b.value]]),p[21]||(p[21]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制(429 时暂停调度)",-1))])]),b.value?(o(),n("div",xp,[p[22]||(p[22]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),v(e("input",{"onUpdate:modelValue":p[8]||(p[8]=R=>M.value.rateLimitDuration=R),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,M.value.rateLimitDuration,void 0,{number:!0}]]),p[23]||(p[23]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):c("",!0)]),e("div",fp,[e("div",null,[p[25]||(p[25]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日额度限制 ($)",-1)),v(e("input",{"onUpdate:modelValue":p[9]||(p[9]=R=>M.value.dailyQuota=R),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,M.value.dailyQuota,void 0,{number:!0}]]),p[26]||(p[26]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[p[27]||(p[27]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"额度重置时间",-1)),v(e("input",{"onUpdate:modelValue":p[10]||(p[10]=R=>M.value.quotaResetTime=R),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,M.value.quotaResetTime]]),p[28]||(p[28]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),e("div",null,[p[32]||(p[32]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型映射表 (可选)",-1)),p[33]||(p[33]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",bp,[(o(!0),n(he,null,We(q.value,(R,te)=>(o(),n("div",{key:te,class:"flex items-center gap-2"},[v(e("input",{"onUpdate:modelValue":F=>R.from=F,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,vp),[[z,R.from]]),p[30]||(p[30]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),v(e("input",{"onUpdate:modelValue":F=>R.to=F,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,kp),[[z,R.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:F=>ue(te)},p[29]||(p[29]=[e("i",{class:"fas fa-trash"},null,-1)]),8,hp)]))),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:ee},p[31]||(p[31]=[e("i",{class:"fas fa-plus mr-2"},null,-1),f(" 添加模型映射 ",-1)]))]),e("div",null,[Be(Ja,{modelValue:M.value.proxy,"onUpdate:modelValue":p[11]||(p[11]=R=>M.value.proxy=R)},null,8,["modelValue"])]),e("div",wp,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:p[12]||(p[12]=R=>x.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:S.value,type:"button",onClick:V},[S.value?(o(),n("div",Ap)):c("",!0),f(" "+u(S.value?N.value?"保存中...":"创建中...":N.value?"保存":"创建"),1)],8,$p)])])])])):c("",!0)]))}},or=fa(Cp,[["__scopeId","data-v-2a966370"]]),Up={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Ip={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"},Tp={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"},_p={class:"flex flex-1 items-start gap-3"},Kp={class:"space-y-1"},Mp={class:"flex flex-wrap items-center gap-2"},Sp={class:"text-lg font-semibold text-gray-900 dark:text-gray-100 sm:text-xl"},Dp={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"},jp={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"},Pp={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Lp={key:0},zp={class:"flex-1 overflow-y-auto px-5 py-4 sm:px-6"},Rp={key:0,class:"flex h-[50vh] items-center justify-center"},Vp={class:"mb-5 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4"},Op={class:"flex items-start justify-between"},Ep={class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"},Np={class:"mt-2 text-xl font-semibold text-gray-900 dark:text-gray-100"},Wp={class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Fp={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gray-50 dark:bg-gray-800"},qp={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},Gp={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"},Qp={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"},Bp={class:"flex items-center justify-between"},Hp={class:"font-semibold text-gray-900 dark:text-gray-100"},Jp={class:"mt-2 flex items-center justify-between"},Yp={class:"font-semibold text-gray-900 dark:text-gray-100"},Zp={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Xp={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"},ey={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"},ty={class:"flex items-center justify-between"},ay={class:"font-semibold text-gray-900 dark:text-gray-100"},ry={class:"mt-2 flex items-center justify-between"},sy={class:"font-semibold text-gray-900 dark:text-gray-100"},ly={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},oy={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"},ny={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"},iy={class:"flex items-center justify-between"},dy={class:"font-semibold text-gray-900 dark:text-gray-100"},uy={class:"mt-2 flex items-center justify-between"},gy={class:"font-semibold text-gray-900 dark:text-gray-100"},py={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},yy={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},cy={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},my={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},xy={class:"flex items-center justify-between"},fy={class:"font-semibold text-gray-900 dark:text-gray-100"},by={class:"flex items-center justify-between"},vy={class:"font-semibold text-gray-900 dark:text-gray-100"},ky={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},hy={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},wy={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},$y={class:"flex items-center justify-between"},Ay={class:"font-semibold text-gray-900 dark:text-gray-100"},Cy={class:"flex items-center justify-between"},Uy={class:"font-semibold text-gray-900 dark:text-gray-100"},Iy={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Ty={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},_y={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},Ky={class:"flex items-center justify-between"},My={class:"font-semibold text-gray-900 dark:text-gray-100"},Sy={class:"flex items-center justify-between"},Dy={class:"font-semibold text-gray-900 dark:text-gray-100"},jy={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Py={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"},Ly={class:"mb-4 flex flex-wrap items-center justify-between gap-2"},zy={class:"text-xs text-gray-400 dark:text-gray-500"},Ry={class:"h-[260px] sm:h-[300px]"},Vy={__name:"AccountUsageDetailModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:()=>({})},history:{type:Array,default:()=>[]},summary:{type:Object,default:()=>({})},overview:{type:Object,default:()=>({})},generatedAt:{type:String,default:""},loading:{type:Boolean,default:!1}},emits:["close"],setup(J,{emit:Le}){const g=J,B=Le,I=wr(),{isDarkMode:N}=vr(I),S=kr(),M=$(null);let b=null;const w={claude:"Claude","claude-console":"Claude Console",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid"},q=ie(()=>{var X;return w[(X=g.account)==null?void 0:X.platform]||"未知平台"}),se=ie(()=>{var X;return(X=g.account)!=null&&X.accountType?g.account.accountType==="dedicated"?"专属":g.account.accountType==="group"?"分组":"共享":"共享"}),ee=ie(()=>({text:N.value?"#e5e7eb":"#374151",grid:N.value?"rgba(75, 85, 99, 0.25)":"rgba(209, 213, 219, 0.4)",cost:"#3b82f6",costFill:"rgba(59, 130, 246, 0.15)",requests:"#f97316"})),ue=ie(()=>{var X;return((X=g.summary)==null?void 0:X.totalTokens)||0}),G=ie(()=>{var X,_;return((_=(X=g.overview)==null?void 0:X.total)==null?void 0:_.inputTokens)||0}),V=ie(()=>{var X,_;return((_=(X=g.overview)==null?void 0:X.total)==null?void 0:_.outputTokens)||0}),E=X=>{const _=Number(X||0);return _>=1e6?`${(_/1e6).toFixed(2)}M`:_>=1e3?`${(_/1e3).toFixed(2)}K`:_.toLocaleString()},x=X=>{const _=Number(X||0);return Number.isNaN(_)?"$0.000000":_>=1?`$${_.toFixed(2)}`:_>=.01?`$${_.toFixed(3)}`:`$${_.toFixed(6)}`},p=X=>Math.round((Number(X)||0)*100)/100,R=X=>{if(!X)return"-";const _=new Date(X);if(Number.isNaN(_.getTime())){const Fe=X.split("-");return Fe.length===3?`${Fe[1]}-${Fe[2]}`:X}const Ce=String(_.getMonth()+1).padStart(2,"0"),ne=String(_.getDate()).padStart(2,"0");return`${Ce}-${ne}`},te=X=>{if(!X)return"暂无";const _=new Date(X);return Number.isNaN(_.getTime())?X:`${_.getFullYear()}-${String(_.getMonth()+1).padStart(2,"0")}-${String(_.getDate()).padStart(2,"0")} ${String(_.getHours()).padStart(2,"0")}:${String(_.getMinutes()).padStart(2,"0")}`},F=(X,_)=>{if(!X)return 0;const Ce=g.history.find(ne=>ne.date===X);return Ce&&Ce[_]||0},T=ie(()=>{var X,_;return g.generatedAt||((X=g.summary)==null?void 0:X.generatedAt)||((_=g.summary)==null?void 0:_.generated_at)||""}),Y=ie(()=>{var X,_,Ce,ne,Fe,Z,A,O;return[{key:"totalCost",label:"30天总费用",value:((X=g.summary)==null?void 0:X.totalCostFormatted)||"$0.000000",subtitle:"累计成本",icon:"fa-file-invoice-dollar",iconClass:"text-emerald-500"},{key:"totalRequests",label:"30天总请求",value:E(((_=g.summary)==null?void 0:_.totalRequests)||0),subtitle:"调用次数",icon:"fa-paper-plane",iconClass:"text-blue-500"},{key:"avgCost",label:"日均费用",value:((Ce=g.summary)==null?void 0:Ce.avgDailyCostFormatted)||x(((ne=g.summary)==null?void 0:ne.avgDailyCost)||0),subtitle:(Fe=g.summary)!=null&&Fe.actualDaysUsed&&((Z=g.summary)==null?void 0:Z.actualDaysUsed)<((A=g.summary)==null?void 0:A.days)?`基于 ${g.summary.actualDaysUsed} 天实际使用`:"平均每日成本",icon:"fa-wave-square",iconClass:"text-purple-500"},{key:"avgRequests",label:"日均请求",value:E(p(((O=g.summary)==null?void 0:O.avgDailyRequests)||0)),subtitle:"平均每日调用",icon:"fa-chart-line",iconClass:"text-orange-500"}]}),Ae=async()=>{if(await Ha(),!g.show||!M.value)return;if(b&&b.destroy(),!g.history||g.history.length===0){b=null;return}const X=g.history.map(ne=>ne.label),_=g.history.map(ne=>ne.cost||0),Ce=g.history.map(ne=>ne.requests||0);b=new $r(M.value,{type:"line",data:{labels:X,datasets:[{label:"费用 (USD)",data:_,borderColor:ee.value.cost,backgroundColor:ee.value.costFill,tension:.35,fill:!0,yAxisID:"y"},{label:"请求次数",data:Ce,borderColor:ee.value.requests,backgroundColor:"transparent",tension:.35,yAxisID:"y1"}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{labels:{color:ee.value.text}},tooltip:{callbacks:{label(ne){return ne.dataset.label==="费用 (USD)"?`${ne.dataset.label}: ${x(ne.parsed.y)}`:`${ne.dataset.label}: ${E(ne.parsed.y)} 次`}}}},scales:{x:{ticks:{color:ee.value.text},grid:{color:ee.value.grid}},y:{position:"left",ticks:{color:ee.value.text,callback:ne=>x(ne)},grid:{color:ee.value.grid}},y1:{position:"right",ticks:{color:ee.value.text,callback:ne=>E(ne)},grid:{drawOnChartArea:!1}}}}})},pe=()=>{b&&(b.destroy(),b=null)},we=()=>{pe(),B("close")},De=()=>{var X;(X=g.account)!=null&&X.id&&S.push({path:`/accounts/${g.account.id}/usage-records`,query:{platform:g.account.platform||g.account.accountType}})};return ve(()=>g.show,X=>{X&&!g.loading?Ae():X||pe()}),ve(()=>g.loading,X=>{!X&&g.show&&Ae()}),ve(()=>g.history,()=>{g.show&&!g.loading&&Ae()},{deep:!0}),ve(N,()=>{g.show&&!g.loading&&Ae()}),Fa(()=>{pe()}),(X,_)=>{var Ce,ne,Fe,Z,A,O,xe,H,m,a,ce,Te,Oe,Ee,ut,Xe,st,_t,Kt,ct,K,mt,ht,xt,gt,Mt,k,y,P,Qe,it,Rt,Vt,ft,St,Ot,bt,Et,wt,lt,$t;return o(),Je(Tt,{to:"body"},[J.show?(o(),n("div",Up,[e("div",{class:"absolute inset-0",onClick:we}),e("div",Ip,[e("div",Tp,[e("div",_p,[_[2]||(_[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",Kp,[e("div",Mp,[e("h3",Sp,u(((Ce=J.account)==null?void 0:Ce.name)||((ne=J.account)==null?void 0:ne.email)||"账号使用详情"),1),(Fe=J.account)!=null&&Fe.platform?(o(),n("span",Dp,[_[0]||(_[0]=e("i",{class:"fas fa-layer-group mr-1"},null,-1)),f(u(q.value),1)])):c("",!0),(Z=J.account)!=null&&Z.accountType?(o(),n("span",jp,[_[1]||(_[1]=e("i",{class:"fas fa-user-tag mr-1"},null,-1)),f(u(se.value),1)])):c("",!0)]),e("p",Pp,[f(" 近 "+u(((A=J.summary)==null?void 0:A.days)||30)+" 天内的费用与请求趋势 ",1),(O=J.summary)!=null&&O.actualDaysUsed&&((xe=J.summary)==null?void 0:xe.actualDaysUsed)<((H=J.summary)==null?void 0:H.days)?(o(),n("span",Lp," (日均基于实际使用 "+u(J.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:De},_[3]||(_[3]=[e("i",{class:"fas fa-clock"},null,-1),f(" 请求时间线 ",-1)])),e("button",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",onClick:we},_[4]||(_[4]=[e("i",{class:"fas fa-times"},null,-1)]))])]),e("div",zp,[J.loading?(o(),n("div",Rp,_[5]||(_[5]=[e("div",{class:"loading-spinner h-12 w-12 border-4 border-blue-500"},null,-1)]))):(o(),n(he,{key:1},[e("div",Vp,[(o(!0),n(he,null,We(Y.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",Op,[e("div",null,[e("p",Ep,u(et.label),1),e("p",Np,u(et.value),1),e("p",Wp,u(et.subtitle),1)]),e("div",Fp,[e("i",{class:U(["fas",et.icon,et.iconClass])},null,2)])])]))),128))]),e("div",qp,[e("div",Gp,[_[9]||(_[9]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-sun"}),f(" 今日概览 ")],-1)),e("div",Qp,[e("div",Bp,[_[6]||(_[6]=e("span",null,"费用",-1)),e("span",Hp,u(((a=(m=J.summary)==null?void 0:m.today)==null?void 0:a.costFormatted)||"$0.000000"),1)]),e("div",Jp,[_[7]||(_[7]=e("span",null,"请求",-1)),e("span",Yp,u(E(((Te=(ce=J.summary)==null?void 0:ce.today)==null?void 0:Te.requests)||0)),1)]),e("div",Zp,[_[8]||(_[8]=e("span",null,"Tokens",-1)),e("span",null,u(E(((Ee=(Oe=J.summary)==null?void 0:Oe.today)==null?void 0:Ee.tokens)||0)),1)])])]),e("div",Xp,[_[13]||(_[13]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-amber-700 dark:text-amber-300"},[e("i",{class:"fas fa-crown"}),f(" 最高费用日 ")],-1)),e("div",ey,[e("div",ty,[_[10]||(_[10]=e("span",null,"日期",-1)),e("span",ay,u(R((Xe=(ut=J.summary)==null?void 0:ut.highestCostDay)==null?void 0:Xe.date)),1)]),e("div",ry,[_[11]||(_[11]=e("span",null,"费用",-1)),e("span",sy,u(((_t=(st=J.summary)==null?void 0:st.highestCostDay)==null?void 0:_t.formattedCost)||"$0.000000"),1)]),e("div",ly,[_[12]||(_[12]=e("span",null,"请求",-1)),e("span",null,u(E(F((ct=(Kt=J.summary)==null?void 0:Kt.highestCostDay)==null?void 0:ct.date,"requests"))),1)])])]),e("div",oy,[_[17]||(_[17]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-emerald-700 dark:text-emerald-300"},[e("i",{class:"fas fa-chart-bar"}),f(" 最高请求日 ")],-1)),e("div",ny,[e("div",iy,[_[14]||(_[14]=e("span",null,"日期",-1)),e("span",dy,u(R((mt=(K=J.summary)==null?void 0:K.highestRequestDay)==null?void 0:mt.date)),1)]),e("div",uy,[_[15]||(_[15]=e("span",null,"请求",-1)),e("span",gy,u(E(((xt=(ht=J.summary)==null?void 0:ht.highestRequestDay)==null?void 0:xt.requests)||0)),1)]),e("div",py,[_[16]||(_[16]=e("span",null,"费用",-1)),e("span",null,u(x(F((Mt=(gt=J.summary)==null?void 0:gt.highestRequestDay)==null?void 0:Mt.date,"cost"))),1)])])])]),e("div",yy,[e("div",cy,[_[21]||(_[21]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-database mr-2 text-indigo-500"}),f(" 累计 Token ")],-1)),e("div",my,[e("div",xy,[_[18]||(_[18]=e("span",null,"30天总计",-1)),e("span",fy,u(E(ue.value)),1)]),e("div",by,[_[19]||(_[19]=e("span",null,"日均 Token",-1)),e("span",vy,u(E(Math.round(((k=J.summary)==null?void 0:k.avgDailyTokens)||0))),1)]),e("div",ky,[_[20]||(_[20]=e("span",null,"输入 / 输出",-1)),e("span",null,u(E(G.value))+" / "+u(E(V.value)),1)])])]),e("div",hy,[_[25]||(_[25]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-tachometer-alt mr-2 text-purple-500"}),f(" 平均速率 ")],-1)),e("div",wy,[e("div",$y,[_[22]||(_[22]=e("span",null,"RPM",-1)),e("span",Ay,u(((P=(y=J.overview)==null?void 0:y.averages)==null?void 0:P.rpm)??0),1)]),e("div",Cy,[_[23]||(_[23]=e("span",null,"TPM",-1)),e("span",Uy,u(((it=(Qe=J.overview)==null?void 0:Qe.averages)==null?void 0:it.tpm)??0),1)]),e("div",Iy,[_[24]||(_[24]=e("span",null,"日均请求 / Token",-1)),e("span",null,u(E(Math.round((((Vt=(Rt=J.overview)==null?void 0:Rt.averages)==null?void 0:Vt.dailyRequests)||0)*100)/100))+" / "+u(E(Math.round((((St=(ft=J.overview)==null?void 0:ft.averages)==null?void 0:St.dailyTokens)||0)*100)/100)),1)])])]),e("div",Ty,[_[29]||(_[29]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-layer-group mr-2 text-teal-500"}),f(" 最近统计 ")],-1)),e("div",_y,[e("div",Ky,[_[26]||(_[26]=e("span",null,"今日请求",-1)),e("span",My,u(E(((bt=(Ot=J.overview)==null?void 0:Ot.daily)==null?void 0:bt.requests)||0)),1)]),e("div",Sy,[_[27]||(_[27]=e("span",null,"今日 Token",-1)),e("span",Dy,u(E(((wt=(Et=J.overview)==null?void 0:Et.daily)==null?void 0:wt.allTokens)||0)),1)]),e("div",jy,[_[28]||(_[28]=e("span",null,"今日费用",-1)),e("span",null,u(x((($t=(lt=J.overview)==null?void 0:lt.daily)==null?void 0:$t.cost)||0)),1)])])])]),e("div",Py,[e("div",Ly,[_[30]||(_[30]=e("h4",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-line mr-2 text-blue-500"}),f(" 30天费用与请求趋势 ")],-1)),e("span",zy," 最新更新时间:"+u(te(T.value)),1)]),e("div",Ry,[e("canvas",{ref_key:"chartCanvas",ref:M,class:"h-full w-full"},null,512)])])],64))])])])):c("",!0)])}}},Oy=fa(Vy,[["__scopeId","data-v-ff3a5b72"]]),Ey={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Ny={class:"modal-content relative mx-auto w-full max-w-lg p-8"},Wy={class:"mb-6 flex items-center justify-between"},Fy={class:"flex items-center gap-3"},qy={class:"text-sm text-gray-600 dark:text-gray-400"},Gy={class:"space-y-6"},Qy={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"},By={class:"flex items-center justify-between"},Hy={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},Jy={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},Yy={class:"mb-3 grid grid-cols-3 gap-2"},Zy=["onClick"],Xy={key:0,class:"animate-fadeIn"},ec=["min"],tc={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"},ac={class:"flex items-center justify-between"},rc={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},sc={class:"flex gap-3 pt-2"},lc=["disabled"],oc={key:0,class:"loading-spinner mr-2"},nc={key:1,class:"fas fa-save mr-2"},ic={__name:"AccountExpiryEditModal",props:{show:{type:Boolean,required:!0},account:{type:Object,required:!0}},emits:["close","save"],setup(J,{expose:Le,emit:g}){const B=J,I=g,N=$(!1),S=hr({expireDuration:"",customExpireDate:"",expiresAt:null}),M=[{value:"",label:"永不过期"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],b=ie(()=>{const x=new Date;return x.setMinutes(x.getMinutes()+1),x.toISOString().slice(0,16)});ve(()=>B.show,x=>{x&&w()}),ve(()=>{var x;return(x=B.account)==null?void 0:x.id},x=>{x&&B.show&&w()});const w=()=>{N.value=!1,B.account.expiresAt?(S.expireDuration="custom",S.customExpireDate=new Date(B.account.expiresAt).toISOString().slice(0,16),S.expiresAt=B.account.expiresAt):(S.expireDuration="",S.customExpireDate="",S.expiresAt=null)},q=x=>{if(S.expireDuration=x,!x){S.expiresAt=null;return}if(x==="custom")return;const p=new Date,R=x.match(/(\d+)([dhmy])/);if(R){const[,te,F]=R,T=parseInt(te);switch(F){case"d":p.setDate(p.getDate()+T);break;case"h":p.setHours(p.getHours()+T);break;case"m":p.setMonth(p.getMonth()+T);break;case"y":p.setFullYear(p.getFullYear()+T);break}S.expiresAt=p.toISOString()}},se=()=>{if(S.customExpireDate)try{const[x,p]=S.customExpireDate.split("T"),[R,te,F]=x.split("-").map(Number),[T,Y]=p.split(":").map(Number),Ae=new Date(R,te-1,F,T,Y,0,0);if(isNaN(Ae.getTime())){console.error("Invalid date:",S.customExpireDate);return}S.expiresAt=Ae.toISOString()}catch(x){console.error("Failed to parse custom expire date:",x)}},ee=x=>x?new Date(x).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",ue=x=>x?new Date(x)<new Date:!1,G=x=>{if(!x)return null;const p=new Date,te=new Date(x)-p,F=Math.ceil(te/(1e3*60*60*24));return te<0?{text:"已过期",class:"text-red-600"}:F<=7?{text:`${F} 天后过期`,class:"text-orange-600"}:F<=30?{text:`${F} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(F/30)} 个月后过期`,class:"text-green-600"}},V=()=>{N.value=!0,I("save",{accountId:B.account.id,expiresAt:S.expiresAt})};return Le({resetSaving:()=>{N.value=!1}}),(x,p)=>(o(),Je(Tt,{to:"body"},[J.show?(o(),n("div",Ey,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:p[0]||(p[0]=R=>x.$emit("close"))}),e("div",Ny,[e("div",Wy,[e("div",Fy,[p[6]||(p[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600"},[e("i",{class:"fas fa-clock text-white"})],-1)),e("div",null,[p[5]||(p[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改到期时间",-1)),e("p",qy,' 为 "'+u(J.account.name||"Account")+'" 设置新的到期时间 ',1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:p[1]||(p[1]=R=>x.$emit("close"))},p[7]||(p[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Gy,[e("div",Qy,[e("div",By,[e("div",null,[p[10]||(p[10]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",Hy,[J.account.expiresAt?(o(),n(he,{key:0},[f(u(ee(J.account.expiresAt))+" ",1),G(J.account.expiresAt)?(o(),n("span",{key:0,class:U(["ml-2 text-xs font-normal",G(J.account.expiresAt).class])}," ("+u(G(J.account.expiresAt).text)+") ",3)):c("",!0)],64)):(o(),n(he,{key:1},[p[8]||(p[8]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),p[9]||(p[9]=f(" 永不过期 ",-1))],64))])]),e("div",Jy,[e("i",{class:U(["fas fa-hourglass-half text-lg",J.account.expiresAt&&ue(J.account.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),e("div",null,[p[12]||(p[12]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",Yy,[(o(),n(he,null,We(M,R=>e("button",{key:R.value,class:U(["rounded-lg px-3 py-2 text-sm font-medium transition-all",S.expireDuration===R.value?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:te=>q(R.value)},u(R.label),11,Zy)),64)),e("button",{class:U(["rounded-lg px-3 py-2 text-sm font-medium transition-all",S.expireDuration==="custom"?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:p[2]||(p[2]=R=>q("custom"))},p[11]||(p[11]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),f(" 自定义 ",-1)]),2)])]),S.expireDuration==="custom"?(o(),n("div",Xy,[p[13]||(p[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),v(e("input",{"onUpdate:modelValue":p[3]||(p[3]=R=>S.customExpireDate=R),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:b.value,type:"datetime-local",onChange:se},null,40,ec),[[z,S.customExpireDate]]),p[14]||(p[14]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为到期时间 ",-1))])):c("",!0),S.expiresAt!==J.account.expiresAt?(o(),n("div",tc,[e("div",ac,[e("div",null,[p[17]||(p[17]=e("p",{class:"mb-1 text-xs font-medium text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-arrow-right mr-1"}),f(" 新的到期时间 ")],-1)),e("p",rc,[S.expiresAt?(o(),n(he,{key:0},[f(u(ee(S.expiresAt))+" ",1),G(S.expiresAt)?(o(),n("span",{key:0,class:U(["ml-2 text-xs font-normal",G(S.expiresAt).class])}," ("+u(G(S.expiresAt).text)+") ",3)):c("",!0)],64)):(o(),n(he,{key:1},[p[15]||(p[15]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),p[16]||(p[16]=f(" 永不过期 ",-1))],64))])]),p[18]||(p[18]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},[e("i",{class:"fas fa-check text-lg text-green-500"})],-1))])])):c("",!0),e("div",sc,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:p[4]||(p[4]=R=>x.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:N.value||S.expiresAt===J.account.expiresAt,onClick:V},[N.value?(o(),n("div",oc)):(o(),n("i",nc)),f(" "+u(N.value?"保存中...":"保存更改"),1)],8,lc)])])])])):c("",!0)]))}},dc=fa(ic,[["__scopeId","data-v-f19e4a71"]]),uc={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},gc={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"},pc={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"},yc={class:"flex items-center gap-3"},cc={class:"text-xs text-gray-500 dark:text-gray-400"},mc=["disabled"],xc={class:"px-5 py-4"},fc={class:"mb-4 space-y-2"},bc={class:"flex items-center justify-between text-sm"},vc={class:"flex items-center justify-between text-sm"},kc={class:"font-medium text-gray-700 dark:text-gray-300"},hc={class:"flex items-center gap-3"},wc={class:"text-xs text-gray-500 dark:text-gray-400"},$c={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"},Ac={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"},Cc={key:0,class:"text-xs text-gray-500 dark:text-gray-500"},Uc={class:"max-h-40 overflow-y-auto p-3"},Ic={key:0,class:"whitespace-pre-wrap text-sm text-gray-700 dark:text-gray-300"},Tc={key:0,class:"inline-block h-4 w-1 animate-pulse bg-blue-500"},_c={key:1,class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Kc={key:2,class:"text-sm text-red-600 dark:text-red-400"},Mc={key:1,class:"mb-4 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-gray-400"},Sc={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"},Dc=["disabled"],jc=["disabled"],Pc={__name:"AccountTestModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:null}},emits:["close"],setup(J,{emit:Le}){const g=J,B=Le,I=$("idle"),N=$(""),S=$(""),M=$(0),b=$(null),w=$(null),q=$("claude-sonnet-4-5-20250929"),se=ie(()=>{if(!g.account)return"未知";const pe=g.account.platform;return pe==="claude"?"Claude OAuth":pe==="claude-console"?"Claude Console":pe}),ee=ie(()=>{if(!g.account)return"fas fa-question";const pe=g.account.platform;return pe==="claude"||pe==="claude-console"?"fas fa-brain":"fas fa-robot"}),ue=ie(()=>{if(!g.account)return"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300";const pe=g.account.platform;return pe==="claude"?"bg-indigo-100 text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300":pe==="claude-console"?"bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300":"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300"}),G=ie(()=>{switch(I.value){case"idle":return"准备就绪";case"testing":return"正在测试...";case"success":return"测试成功";case"error":return"测试失败";default:return"未知状态"}}),V=ie(()=>{switch(I.value){case"idle":return"点击下方按钮开始测试账户连通性";case"testing":return"正在发送测试请求并等待响应";case"success":return"账户可以正常访问 Claude API";case"error":return S.value||"无法连接到 Claude API";default:return""}}),E=ie(()=>{switch(I.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"}}),x=ie(()=>{switch(I.value){case"idle":return"bg-gray-200 dark:bg-gray-700";case"testing":return"bg-blue-100 dark:bg-blue-500/30";case"success":return"bg-green-100 dark:bg-green-500/30";case"error":return"bg-red-100 dark:bg-red-500/30";default:return"bg-gray-200 dark:bg-gray-700"}}),p=ie(()=>{switch(I.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"}}),R=ie(()=>{switch(I.value){case"idle":return"text-gray-500 dark:text-gray-400";case"testing":return"text-blue-500 dark:text-blue-400";case"success":return"text-green-500 dark:text-green-400";case"error":return"text-red-500 dark:text-red-400";default:return"text-gray-500 dark:text-gray-400"}}),te=ie(()=>{switch(I.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 F(){if(!g.account)return"";const pe=g.account.platform;return pe==="claude"?`${Wa}/admin/claude-accounts/${g.account.id}/test`:pe==="claude-console"?`${Wa}/admin/claude-console-accounts/${g.account.id}/test`:""}async function T(){if(!g.account)return;I.value="testing",N.value="",S.value="",M.value=0,b.value=Date.now(),w.value&&w.value.close();const pe=F();if(!pe){I.value="error",S.value="不支持的账户类型";return}try{const we=localStorage.getItem("authToken"),De=await fetch(pe,{method:"POST",headers:{"Content-Type":"application/json",Authorization:we?`Bearer ${we}`:""},body:JSON.stringify({model:q.value})});if(!De.ok){const ne=await De.json().catch(()=>({}));throw new Error(ne.message||`HTTP ${De.status}`)}const X=De.body.getReader(),_=new TextDecoder;let Ce=!1;for(;!Ce;){const{done:ne,value:Fe}=await X.read();if(ne){Ce=!0;continue}const A=_.decode(Fe).split(`
|
||
`);for(const O of A)if(O.startsWith("data: "))try{const xe=JSON.parse(O.substring(6));Y(xe)}catch{}}}catch(we){I.value="error",S.value=we.message||"连接失败",M.value=Date.now()-b.value}}function Y(pe){switch(pe.type){case"test_start":break;case"content":N.value+=pe.text;break;case"message_stop":break;case"test_complete":M.value=Date.now()-b.value,pe.success?I.value="success":(I.value="error",S.value=pe.error||"测试失败");break;case"error":I.value="error",S.value=pe.error||"未知错误",M.value=Date.now()-b.value;break}}function Ae(){I.value!=="testing"&&(w.value&&(w.value.close(),w.value=null),I.value="idle",N.value="",S.value="",M.value=0,B("close"))}return ve(()=>g.show,pe=>{pe&&(I.value="idle",N.value="",S.value="",M.value=0)}),Fa(()=>{w.value&&w.value.close()}),(pe,we)=>{var De;return o(),Je(Tt,{to:"body"},[J.show?(o(),n("div",uc,[e("div",{class:"absolute inset-0",onClick:Ae}),e("div",gc,[e("div",pc,[e("div",yc,[e("div",{class:U(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl text-white shadow-lg",I.value==="success"?"bg-gradient-to-br from-green-500 to-emerald-500":I.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:U(["fas",I.value==="idle"?"fa-vial":I.value==="testing"?"fa-spinner fa-spin":I.value==="success"?"fa-check":"fa-times"])},null,2)],2),e("div",null,[we[0]||(we[0]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},"账户连通性测试",-1)),e("p",cc,u(((De=J.account)==null?void 0:De.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:I.value==="testing",onClick:Ae},we[1]||(we[1]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,mc)]),e("div",xc,[e("div",fc,[e("div",bc,[we[2]||(we[2]=e("span",{class:"text-gray-500 dark:text-gray-400"},"平台类型",-1)),e("span",{class:U(["inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium",ue.value])},[e("i",{class:U(ee.value)},null,2),f(" "+u(se.value),1)],2)]),e("div",vc,[we[3]||(we[3]=e("span",{class:"text-gray-500 dark:text-gray-400"},"测试模型",-1)),e("span",kc,u(q.value),1)])]),e("div",{class:U(["mb-4 rounded-xl border p-4 transition-all duration-300",E.value])},[e("div",hc,[e("div",{class:U(["flex h-8 w-8 items-center justify-center rounded-lg",x.value])},[e("i",{class:U(["fas text-sm",p.value,R.value])},null,2)],2),e("div",null,[e("p",{class:U(["font-medium",te.value])},u(G.value),3),e("p",wc,u(V.value),1)])])],2),I.value!=="idle"?(o(),n("div",$c,[e("div",Ac,[we[4]||(we[4]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"AI 响应",-1)),N.value?(o(),n("span",Cc,u(N.value.length)+" 字符 ",1)):c("",!0)]),e("div",Uc,[N.value?(o(),n("p",Ic,[f(u(N.value)+" ",1),I.value==="testing"?(o(),n("span",Tc)):c("",!0)])):I.value==="testing"?(o(),n("p",_c,we[5]||(we[5]=[e("i",{class:"fas fa-circle-notch fa-spin"},null,-1),f(" 等待响应中... ",-1)]))):I.value==="error"&&S.value?(o(),n("p",Kc,u(S.value),1)):c("",!0)])])):c("",!0),M.value>0?(o(),n("div",Mc,[we[6]||(we[6]=e("i",{class:"fas fa-clock"},null,-1)),e("span",null,"耗时 "+u((M.value/1e3).toFixed(2))+" 秒",1)])):c("",!0)]),e("div",Sc,[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:I.value==="testing",onClick:Ae}," 关闭 ",8,Dc),e("button",{class:U(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",I.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:I.value==="testing",onClick:T},[e("i",{class:U(["fas",I.value==="testing"?"fa-spinner fa-spin":"fa-play"])},null,2),f(" "+u(I.value==="testing"?"测试中...":I.value==="idle"?"开始测试":"重新测试"),1)],10,jc)])])])):c("",!0)])}}},Lc={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},zc={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"},Rc={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"},Vc={class:"flex items-center gap-3"},Oc={class:"text-xs text-gray-500 dark:text-gray-400"},Ec=["disabled"],Nc={class:"px-5 py-4"},Wc={key:0,class:"flex items-center justify-center py-8"},Fc={class:"mb-5 flex items-center justify-between"},qc={class:"mb-5"},Gc=["disabled"],Qc={class:"mb-5"},Bc={class:"flex flex-wrap gap-2"},Hc=["disabled","onClick"],Jc={class:"mb-5"},Yc=["disabled"],Zc={class:"mt-2 flex flex-wrap gap-2"},Xc=["disabled","onClick"],em={key:0,class:"mb-4"},tm={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"},am={class:"flex items-center gap-2"},rm={class:"text-gray-600 dark:text-gray-400"},sm={key:0,class:"text-gray-500 dark:text-gray-500"},lm=["title"],om={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"},nm={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"},im=["disabled"],dm=["disabled"],um={__name:"AccountScheduledTestModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:null}},emits:["close","saved"],setup(J,{emit:Le}){const g=J,B=Le,I=$(!1),N=$(!1),S=$({enabled:!1,cronExpression:"0 8 * * *",model:"claude-sonnet-4-5-20250929"}),M=$([]),b=[{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"}],w=[{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 q(G){return G?new Date(G).toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"未知"}async function se(){var G,V;if(g.account){I.value=!0;try{const E=localStorage.getItem("authToken"),x=g.account.platform;let p="";if(x==="claude")p=`${Wa}/admin/claude-accounts/${g.account.id}/test-config`;else{I.value=!1;return}const R=await fetch(p,{headers:{Authorization:E?`Bearer ${E}`:""}});if(R.ok){const T=await R.json();T.success&&((G=T.data)!=null&&G.config)&&(S.value={enabled:T.data.config.enabled||!1,cronExpression:T.data.config.cronExpression||"0 8 * * *",model:T.data.config.model||"claude-sonnet-4-5-20250929"})}const te=p.replace("/test-config","/test-history"),F=await fetch(te,{headers:{Authorization:E?`Bearer ${E}`:""}});if(F.ok){const T=await F.json();T.success&&((V=T.data)!=null&&V.history)&&(M.value=T.data.history)}}catch(E){L("加载配置失败: "+E.message,"error")}finally{I.value=!1}}}async function ee(){if(g.account){N.value=!0;try{const G=localStorage.getItem("authToken"),V=g.account.platform;let E="";if(V==="claude")E=`${Wa}/admin/claude-accounts/${g.account.id}/test-config`;else{N.value=!1;return}const x=await fetch(E,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:G?`Bearer ${G}`:""},body:JSON.stringify({enabled:S.value.enabled,cronExpression:S.value.cronExpression,model:S.value.model})});if(x.ok)L("配置已保存","success"),B("saved"),ue();else{const p=await x.json().catch(()=>({}));L(p.message||"保存失败","error")}}catch(G){L("保存失败: "+G.message,"error")}finally{N.value=!1}}}function ue(){N.value||B("close")}return ve(()=>g.show,G=>{G&&(S.value={enabled:!1,cronExpression:"0 8 * * *",model:"claude-sonnet-4-5-20250929"},M.value=[],se())}),(G,V)=>{var E;return o(),Je(Tt,{to:"body"},[J.show?(o(),n("div",Lc,[e("div",{class:"absolute inset-0",onClick:ue}),e("div",zc,[e("div",Rc,[e("div",Vc,[V[4]||(V[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,[V[3]||(V[3]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},"定时测试配置",-1)),e("p",Oc,u(((E=J.account)==null?void 0:E.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:N.value,onClick:ue},V[5]||(V[5]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,Ec)]),e("div",Nc,[I.value?(o(),n("div",Wc,V[6]||(V[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(he,{key:1},[e("div",Fc,[V[7]||(V[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:U(["relative h-6 w-11 rounded-full transition-colors duration-200",S.value.enabled?"bg-green-500":"bg-gray-300 dark:bg-gray-600"]),onClick:V[0]||(V[0]=x=>S.value.enabled=!S.value.enabled)},[e("span",{class:U(["absolute top-0.5 h-5 w-5 rounded-full bg-white shadow-md transition-transform duration-200",S.value.enabled?"left-5":"left-0.5"])},null,2)],2)]),e("div",qc,[V[8]||(V[8]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," Cron 表达式 ",-1)),v(e("input",{"onUpdate:modelValue":V[1]||(V[1]=x=>S.value.cronExpression=x),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:!S.value.enabled,placeholder:"0 8 * * *",type:"text"},null,8,Gc),[[z,S.value.cronExpression]]),V[9]||(V[9]=e("p",{class:"mt-1.5 text-xs text-gray-500 dark:text-gray-400"},' 格式: 分 时 日 月 周 (例: "0 8 * * *" = 每天8:00) ',-1))]),e("div",Qc,[V[10]||(V[10]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 快捷设置 ",-1)),e("div",Bc,[(o(),n(he,null,We(b,x=>e("button",{key:x.value,class:U(["rounded-lg border px-3 py-1.5 text-xs font-medium transition",S.value.cronExpression===x.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",!S.value.enabled&&"cursor-not-allowed opacity-50"]),disabled:!S.value.enabled,onClick:p=>S.value.cronExpression=x.value},u(x.label),11,Hc)),64))])]),e("div",Jc,[V[11]||(V[11]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 测试模型 ",-1)),v(e("input",{"onUpdate:modelValue":V[2]||(V[2]=x=>S.value.model=x),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:!S.value.enabled,placeholder:"claude-sonnet-4-5-20250929",type:"text"},null,8,Yc),[[z,S.value.model]]),e("div",Zc,[(o(),n(he,null,We(w,x=>e("button",{key:x.value,class:U(["rounded-lg border px-3 py-1.5 text-xs font-medium transition",S.value.model===x.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",!S.value.enabled&&"cursor-not-allowed opacity-50"]),disabled:!S.value.enabled,onClick:p=>S.value.model=x.value},u(x.label),11,Xc)),64))])]),M.value.length>0?(o(),n("div",em,[V[12]||(V[12]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最近测试记录 ",-1)),e("div",tm,[(o(!0),n(he,null,We(M.value,(x,p)=>(o(),n("div",{key:p,class:"flex items-center justify-between text-xs"},[e("div",am,[e("i",{class:U(["fas",x.success?"fa-check-circle text-green-500":"fa-times-circle text-red-500"])},null,2),e("span",rm,u(q(x.timestamp)),1)]),x.latencyMs?(o(),n("span",sm,u(x.latencyMs)+"ms ",1)):x.error?(o(),n("span",{key:1,class:"max-w-[150px] truncate text-red-500",title:x.error},u(x.error),9,lm)):c("",!0)]))),128))])])):(o(),n("div",om,V[13]||(V[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",nm,[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:N.value,onClick:ue}," 取消 ",8,im),e("button",{class:U(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",N.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:N.value||I.value,onClick:ee},[e("i",{class:U(["fas",N.value?"fa-spinner fa-spin":"fa-save"])},null,2),f(" "+u(N.value?"保存中...":"保存配置"),1)],10,dm)])])])):c("",!0)])}}},gm={class:"accounts-container"},pm={class:"card p-4 sm:p-6"},ym={class:"mb-4 flex flex-col gap-4 sm:mb-6"},cm={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},mm={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},xm={class:"group relative min-w-[160px]"},fm={class:"group relative min-w-[140px]"},bm={class:"group relative min-w-[160px]"},vm={class:"group relative min-w-[120px]"},km={class:"group relative min-w-[200px]"},hm={class:"relative flex items-center"},wm={class:"flex w-full flex-col gap-3 sm:w-auto sm:flex-row sm:items-center sm:gap-3"},$m={class:"relative"},Am={class:"relative"},Cm=["disabled"],Um={class:"relative"},Im={key:0,class:"py-12 text-center"},Tm={key:1,class:"py-12 text-center"},_m={key:2,class:"table-wrapper hidden md:block"},Km={class:"w-full"},Mm={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"},Sm={key:0,class:"checkbox-column sticky left-0 z-20 min-w-[50px] px-3 py-4 text-left"},Dm={class:"flex items-center"},jm=["indeterminate"],Pm={key:1,class:"fas fa-sort ml-1 text-gray-400"},Lm={key:1,class:"fas fa-sort ml-1 text-gray-400"},zm={key:1,class:"fas fa-sort ml-1 text-gray-400"},Rm={class:"min-w-[210px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},Vm={class:"flex items-center gap-2"},Om={key:1,class:"fas fa-sort ml-1 text-gray-400"},Em={key:1,class:"fas fa-sort ml-1 text-gray-400"},Nm={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Wm={key:0,class:"checkbox-column sticky left-0 z-10 px-3 py-3"},Fm={class:"flex items-center"},qm=["value"],Gm={class:"flex items-center"},Qm={class:"min-w-0"},Bm={class:"flex items-center gap-2"},Hm=["title"],Jm={key:0,class:"inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-800"},Ym={key:1,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800"},Zm={key:2,class:"inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800"},Xm={key:0,class:"my-2 flex flex-wrap items-center gap-2"},ex=["title"],tx=["title"],ax={class:"px-3 py-4"},rx={class:"flex items-center gap-1"},sx={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"},lx={class:"text-xs font-medium text-yellow-700"},ox={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"},nx={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"},ix={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"},dx={class:"text-xs font-medium text-gray-950"},ux={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"},gx={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"},px={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"},yx={class:"text-xs font-semibold text-indigo-800"},cx={class:"text-xs font-medium text-indigo-700"},mx={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"},xx={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"},fx={class:"text-xs font-medium text-cyan-700 dark:text-cyan-300"},bx={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"},vx={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"},kx={class:"w-[100px] min-w-[100px] max-w-[100px] whitespace-nowrap px-3 py-4"},hx={class:"flex flex-col gap-1"},wx={key:0,class:"inline-flex items-center rounded-full bg-yellow-100 px-3 py-1 text-xs font-semibold text-yellow-800"},$x={key:0},Ax={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-3 py-1 text-xs font-semibold text-gray-700"},Cx=["title"],Ux={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},Ix={class:"whitespace-nowrap px-3 py-4 text-sm"},Tx={key:0,class:"space-y-1"},_x={class:"flex items-center gap-2"},Kx={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Mx={class:"flex items-center gap-2"},Sx={class:"text-xs text-gray-600 dark:text-gray-300"},Dx={class:"flex items-center gap-2"},jx={class:"text-xs text-gray-600 dark:text-gray-300"},Px={key:0,class:"text-xs text-gray-500 dark:text-gray-400"},Lx={key:1,class:"text-xs text-gray-400"},zx={class:"whitespace-nowrap px-3 py-4"},Rx={key:0,class:"space-y-2"},Vx={key:0,class:"space-y-2"},Ox={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Ex={class:"flex items-center gap-2"},Nx={class:"flex-1"},Wx={class:"flex items-center gap-2"},Fx={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},qx={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Gx={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Qx={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Bx={class:"flex items-center gap-2"},Hx={class:"flex-1"},Jx={class:"flex items-center gap-2"},Yx={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Zx={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Xx={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},ef={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},tf={class:"flex items-center gap-2"},af={class:"flex-1"},rf={class:"flex items-center gap-2"},sf={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},lf={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},of={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},nf={key:1,class:"space-y-2"},df={key:0,class:"flex items-center gap-3 text-xs"},uf={class:"flex items-center gap-1"},gf={class:"font-medium text-gray-900 dark:text-gray-100"},pf={class:"flex items-center gap-1"},yf={class:"font-medium text-gray-900 dark:text-gray-100"},cf={class:"flex items-center gap-2"},mf={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},xf={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},ff={class:"text-xs text-gray-600 dark:text-gray-400"},bf={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},vf={key:2,class:"text-xs text-gray-400"},kf={key:1,class:"space-y-3"},hf={class:"flex items-center justify-between text-xs"},wf={class:"font-medium text-gray-700 dark:text-gray-200"},$f={class:"flex items-center gap-2"},Af={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},Cf={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},Uf={class:"text-xs text-gray-600 dark:text-gray-400"},If={class:"ml-2 text-gray-400"},Tf={key:1,class:"text-sm text-gray-400"},_f={class:"space-y-1"},Kf={class:"flex items-center justify-between text-xs"},Mf={key:0,class:"font-medium text-gray-700 dark:text-gray-200"},Sf={key:0,class:"flex items-center gap-2"},Df={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},jf={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"},Pf={key:2,class:"space-y-2"},Lf={key:0,class:"space-y-2"},zf={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Rf={class:"flex items-center gap-2"},Vf={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"},Of={class:"flex-1"},Ef={class:"flex items-center gap-2"},Nf={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Wf={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Ff={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},qf={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Gf={class:"flex items-center gap-2"},Qf={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"},Bf={class:"flex-1"},Hf={class:"flex items-center gap-2"},Jf={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Yf={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Zf={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Xf={key:1,class:"text-sm text-gray-400"},eb={key:3,class:"text-sm text-gray-400"},tb={class:"whitespace-nowrap px-3 py-4 text-sm text-gray-600 dark:text-gray-300"},ab={class:"whitespace-nowrap px-3 py-4"},rb={key:0,class:"flex items-center gap-2"},sb={class:"h-2 w-16 rounded-full bg-gray-200"},lb={class:"min-w-[20px] text-xs font-medium text-gray-700 dark:text-gray-200"},ob={key:1,class:"text-sm text-gray-400"},nb={class:"px-3 py-4 text-sm text-gray-600"},ib=["title"],db={key:1,class:"text-gray-400"},ub={class:"whitespace-nowrap px-3 py-4"},gb={class:"flex flex-col gap-1"},pb={key:0},yb=["onClick"],cb=["onClick"],mb=["onClick"],xb=["onClick"],fb={class:"operations-column sticky right-0 z-10 whitespace-nowrap px-3 py-4 text-sm font-medium"},bb={key:0,class:"flex items-center gap-1"},vb=["disabled","title","onClick"],kb=["disabled","title","onClick"],hb={class:"ml-1"},wb=["onClick"],$b=["onClick"],Ab=["onClick"],Cb=["onClick"],Ub=["onClick"],Ib={key:1,class:"flex items-center gap-1"},Tb=["disabled","title","onClick"],_b={class:"ml-1"},Kb=["onClick"],Mb={key:3,class:"space-y-3 md:hidden"},Sb={class:"mb-3 flex items-start justify-between"},Db={class:"flex items-center gap-3"},jb=["value"],Pb={class:"text-sm font-semibold text-gray-900"},Lb={class:"mt-0.5 flex items-center gap-2"},zb={class:"text-xs text-gray-500 dark:text-gray-400"},Rb={class:"text-xs text-gray-500 dark:text-gray-400"},Vb={class:"mb-3 grid grid-cols-2 gap-3"},Ob={class:"space-y-1"},Eb={class:"flex items-center gap-1.5"},Nb={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Wb={class:"flex items-center gap-1.5"},Fb={class:"text-xs text-gray-600 dark:text-gray-400"},qb={class:"flex items-center gap-1.5"},Gb={class:"text-xs text-gray-600 dark:text-gray-400"},Qb={key:0,class:"space-y-1"},Bb={class:"flex items-center gap-1.5"},Hb={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Jb={class:"flex items-center gap-1.5"},Yb={class:"text-xs text-gray-600 dark:text-gray-400"},Zb={key:1,class:"text-sm font-semibold text-gray-400"},Xb={class:"mb-3 space-y-2"},ev={key:0,class:"space-y-2"},tv={key:0,class:"space-y-2"},av={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},rv={class:"flex items-center gap-2"},sv={class:"flex-1"},lv={class:"flex items-center gap-2"},ov={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},nv={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},iv={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},dv={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},uv={class:"flex items-center gap-2"},gv={class:"flex-1"},pv={class:"flex items-center gap-2"},yv={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},cv={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},mv={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},xv={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},fv={class:"flex items-center gap-2"},bv={class:"flex-1"},vv={class:"flex items-center gap-2"},kv={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},hv={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},wv={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},$v={key:1,class:"space-y-1.5 rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Av={class:"flex items-center justify-between text-xs"},Cv={class:"flex items-center gap-1"},Uv={class:"font-medium text-gray-700 dark:text-gray-200"},Iv={class:"h-2 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-600"},Tv={class:"flex items-center justify-between text-xs"},_v={class:"text-gray-500 dark:text-gray-400"},Kv={key:0,class:"font-medium text-indigo-600"},Mv={key:1,class:"text-gray-500"},Sv={key:2,class:"text-xs text-gray-400"},Dv={key:1,class:"space-y-2"},jv={key:0,class:"space-y-2"},Pv={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Lv={class:"flex items-center gap-2"},zv={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"},Rv={class:"flex-1"},Vv={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"},Wv={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Fv={class:"flex items-center gap-2"},qv={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"},Gv={class:"flex-1"},Qv={class:"flex items-center gap-2"},Bv={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Hv={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Jv={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Yv={key:1,class:"text-xs text-gray-400"},Zv={class:"flex items-center justify-between text-xs"},Xv={class:"text-gray-700 dark:text-gray-200"},e1={key:2,class:"flex items-center justify-between text-xs"},t1={class:"text-gray-700 dark:text-gray-200"},a1={class:"flex items-center justify-between text-xs"},r1={class:"font-medium text-gray-700 dark:text-gray-200"},s1={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3"},l1=["disabled","onClick"],o1=["onClick"],n1=["onClick"],i1=["onClick"],d1=["onClick"],u1=["onClick"],g1={key:0,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},p1={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},y1={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},c1={class:"flex items-center gap-2"},m1=["value"],x1={class:"flex items-center gap-2"},f1=["disabled"],b1={class:"flex items-center gap-1"},v1={key:1,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},k1=["onClick"],h1={key:2,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},w1=["disabled"],$1={class:"space-y-4"},A1={class:"overflow-x-auto"},C1={class:"w-full border-collapse text-sm",style:{"min-width":"1000px"}},U1={class:"border border-gray-300 px-4 py-2 font-medium dark:border-gray-600"},I1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},T1={class:"text-green-600 dark:text-green-400"},_1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},K1={class:"text-yellow-600 dark:text-yellow-400"},M1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},S1={class:"text-orange-600 dark:text-orange-400"},D1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},j1={class:"text-orange-600 dark:text-orange-400"},P1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},L1={class:"text-orange-600 dark:text-orange-400"},z1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},R1={class:"text-orange-600 dark:text-orange-400"},V1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},O1={class:"text-orange-600 dark:text-orange-400"},E1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},N1={class:"text-red-600 dark:text-red-400"},W1={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"},F1={class:"bg-blue-50 font-bold dark:bg-blue-900/30"},q1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},G1={class:"text-green-600 dark:text-green-400"},Q1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},B1={class:"text-yellow-600 dark:text-yellow-400"},H1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},J1={class:"text-orange-600 dark:text-orange-400"},Y1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},Z1={class:"text-orange-600 dark:text-orange-400"},X1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},ek={class:"text-orange-600 dark:text-orange-400"},tk={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},ak={class:"text-orange-600 dark:text-orange-400"},rk={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},sk={class:"text-orange-600 dark:text-orange-400"},lk={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},ok={class:"text-red-600 dark:text-red-400"},nk={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},nr="accountsPageSize",ik={__name:"AccountsView",setup(J){const{showConfirmModal:Le,confirmOptions:g,showConfirm:B,handleConfirm:I,handleCancel:N}=dr(),S=$([]),M=$(!1),b=$("name"),w=$("asc"),q=$([]),se=$({}),ee=$([]),ue=$("all"),G=$("all"),V=$("all"),E=$(""),x=()=>{const r=localStorage.getItem(nr);if(r){const s=parseInt(r,10);if([10,20,50,100].includes(s))return s}return 10},p=[10,20,50,100],R=$(x()),te=$(1),F=$([]),T=$(!1),Y=$(!1),Ae=$(!1),pe=$(!1),we=$(!1),De=$(null),X=$([]),_=$({}),Ce=$({}),ne=$(""),Fe=["claude","claude-console","openai","openai-responses","gemini","droid","gemini-api"],Z=$(null),A=$(null),O=$(!1),xe=$(null),H=$(!1),m=$(null),a=$(!1),ce=$(null),Te=$(!1),Oe=$(!1),Ee=$(!1),ut=$(!1),Xe=$(!1),st=$(new Map),_t=$([{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"}]),Kt=[{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"}]}],ct={"group-claude":["claude","claude-console","bedrock","ccr"],"group-openai":["openai","openai-responses","azure_openai"],"group-gemini":["gemini","gemini-api"],"group-droid":["droid"]},K={claude:r=>Q.get("/admin/claude-accounts",{params:r}),"claude-console":r=>Q.get("/admin/claude-console-accounts",{params:r}),bedrock:r=>Q.get("/admin/bedrock-accounts",{params:r}),gemini:r=>Q.get("/admin/gemini-accounts",{params:r}),openai:r=>Q.get("/admin/openai-accounts",{params:r}),azure_openai:r=>Q.get("/admin/azure-openai-accounts",{params:r}),"openai-responses":r=>Q.get("/admin/openai-responses-accounts",{params:r}),ccr:r=>Q.get("/admin/ccr-accounts",{params:r}),droid:r=>Q.get("/admin/droid-accounts",{params:r}),"gemini-api":r=>Q.get("/admin/gemini-api-accounts",{params:r})},mt=Object.keys(K),ht=r=>r==="all"?mt:ct[r]?ct[r]:mt.includes(r)?[r]:mt,xt=ie(()=>{const r=[{value:"all",label:"所有平台",icon:"fa-globe",indent:0}];return Kt.forEach(s=>{var h;r.push({...s,indent:0,isGroup:!0}),(h=s.children)==null||h.forEach(C=>{r.push({...C,indent:1,parent:s.value})})}),r}),gt=$([{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"}]),Mt=ie(()=>{const r=[{value:"all",label:"所有账户",icon:"fa-globe"},{value:"ungrouped",label:"未分组账户",icon:"fa-user"}];return ee.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}),k=ie(()=>Ae.value),y=$(!1),P=$(null),Qe=$(!1),it=$(null),Rt=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(C=>{if(typeof C=="string"){const l=C.trim();l&&s.add(l)}}),Array.isArray(r==null?void 0:r.groupInfos)&&r.groupInfos.forEach(C=>{if(C&&typeof C.name=="string"){const l=C.name.trim();l&&s.add(l)}}),Object.entries(r||{}).forEach(([C,l])=>{if(typeof l=="string"){const le=C.toLowerCase();if(le.includes("name")||le.includes("email")){const Ue=l.trim();Ue&&s.add(Ue)}}}),Array.from(s)},Vt=(r,s)=>s?Rt(r).some(h=>h.toLowerCase().includes(s)):!0,ft=r=>!!r&&Fe.includes(r.platform),St=r=>{var h;return["claude","claude-console","openai","openai-responses","gemini","gemini-api","ccr"].includes(r.platform)&&(r.status==="unauthorized"||r.status!=="active"||((h=r.rateLimitStatus)==null?void 0:h.isRateLimited)||r.rateLimitStatus==="limited"||!r.isActive)},Ot=r=>{const s=[];return St(r)&&s.push({key:"reset",label:"重置状态",icon:"fa-redo",color:"orange",handler:()=>ia(r)}),ft(r)&&s.push({key:"usage",label:"详情",icon:"fa-chart-line",color:"indigo",handler:()=>bt(r)}),lt(r)&&(s.push({key:"test",label:"测试",icon:"fa-vial",color:"blue",handler:()=>$t(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:()=>Qt(r)}),s},bt=async r=>{if(!ft(r)){L("该账户类型暂不支持查看详情","warning");return}De.value=r,pe.value=!0,we.value=!0,X.value=[],_.value={},Ce.value={},ne.value="";try{const s=await Q.get(`/admin/accounts/${r.id}/usage-history?platform=${r.platform}&days=30`);if(s.success){const h=s.data||{};X.value=h.history||[],_.value=h.summary||{},Ce.value=h.overview||{},ne.value=h.generatedAt||""}else L(s.error||"加载账号使用详情失败","error")}catch{L("加载账号使用详情失败","error")}finally{we.value=!1}},Et=()=>{pe.value=!1,we.value=!1,De.value=null},wt=["claude","claude-console"],lt=r=>!!r&&wt.includes(r.platform),$t=r=>{if(!lt(r)){L("该账户类型暂不支持测试","warning");return}xe.value=r,O.value=!0},et=()=>{O.value=!1,xe.value=null},At=r=>{if(!lt(r)){L("该账户类型暂不支持定时测试","warning");return}m.value=r,H.value=!0},Nt=()=>{H.value=!1,m.value=null},Wt=()=>{L("定时测试配置已保存","success")},ot=ie(()=>{let r=S.value;const s=E.value.trim();if(s){const C=s.toLowerCase();r=r.filter(l=>Vt(l,C))}return V.value!=="all"&&(r=r.filter(C=>{const l=pt(C),le=C.status==="blocked"||C.status==="unauthorized";return V.value==="rateLimited"?C.isActive&&l:V.value==="normal"?C.isActive&&!l&&!le&&C.schedulable!==!1:V.value==="unschedulable"?C.isActive&&!l&&!le&&C.schedulable===!1:V.value==="other"?!l&&(!C.isActive||le):!0})),b.value?[...r].sort((C,l)=>{var $e,Ge,be,fe,me,ae,oe,Ve,Ne,Xa,er,tr;let le=C[b.value],Ue=l[b.value];if(b.value==="dailyTokens"?(le=((Ge=($e=C.usage)==null?void 0:$e.daily)==null?void 0:Ge.allTokens)||0,Ue=((fe=(be=l.usage)==null?void 0:be.daily)==null?void 0:fe.allTokens)||0):b.value==="dailyRequests"?(le=((ae=(me=C.usage)==null?void 0:me.daily)==null?void 0:ae.requests)||0,Ue=((Ve=(oe=l.usage)==null?void 0:oe.daily)==null?void 0:Ve.requests)||0):b.value==="totalTokens"&&(le=((Xa=(Ne=C.usage)==null?void 0:Ne.total)==null?void 0:Xa.allTokens)||0,Ue=((tr=(er=l.usage)==null?void 0:er.total)==null?void 0:tr.allTokens)||0),b.value==="lastUsed"&&(le=C.lastUsedAt?new Date(C.lastUsedAt).getTime():0,Ue=l.lastUsedAt?new Date(l.lastUsedAt).getTime():0),b.value==="status"&&(le=C.isActive?1:0,Ue=l.isActive?1:0),b.value==="rateLimitTime"){const Qa=pt(C),Ba=pt(l),ar=Qa?yt(C):0,rr=Ba?yt(l):0;return!Qa&&Ba?-1:Qa&&!Ba?1:ar<rr?-1:ar>rr?1:0}return le<Ue?w.value==="asc"?-1:1:le>Ue?w.value==="asc"?1:-1:0}):r}),nt=ie(()=>{const r=ot.value.length;return Math.ceil(r/R.value)||0}),Jt=ie(()=>[{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 h=S.value.filter(ae=>ae.platform===s.value),C=h.filter(ae=>pt(ae)),l=h.filter(ae=>{const oe=pt(ae),Ve=ae.status==="blocked"||ae.status==="unauthorized";return!oe&&ae.isActive&&!Ve&&ae.schedulable!==!1}).length,le=h.filter(ae=>{const oe=pt(ae),Ve=ae.status==="blocked"||ae.status==="unauthorized";return!oe&&ae.isActive&&!Ve&&ae.schedulable===!1}).length,Ue=h.filter(ae=>{const oe=pt(ae),Ve=ae.status==="blocked"||ae.status==="unauthorized";return!oe&&(!ae.isActive||Ve)}).length,$e=C.filter(ae=>{const oe=yt(ae);return oe>0&&oe<=60}).length,Ge=C.filter(ae=>{const oe=yt(ae);return oe>60&&oe<=300}).length,be=C.filter(ae=>{const oe=yt(ae);return oe>300&&oe<=720}).length,fe=C.filter(ae=>{const oe=yt(ae);return oe>720&&oe<=1440}).length,me=C.filter(ae=>yt(ae)>1440).length;return{platform:s.value,platformLabel:s.label,normal:l,unschedulable:le,rateLimit0_1h:$e,rateLimit1_5h:Ge,rateLimit5_12h:be,rateLimit12_24h:fe,rateLimitOver24h:me,other:Ue,total:h.length}}).filter(s=>s.total>0)),dt=ie(()=>Jt.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})),Dt=ie(()=>{const r=nt.value,s=te.value,h=[];if(r<=7)for(let C=1;C<=r;C++)h.push(C);else{let C=Math.max(1,s-2),l=Math.min(r,s+2);s<=3?l=5:s>=r-2&&(C=r-4);for(let le=C;le<=l;le++)h.push(le)}return h}),Yt=ie(()=>{const r=Dt.value;return r.length===0?!1:r[0]>1}),Zt=ie(()=>{const r=Dt.value;return r.length===0?!1:r[r.length-1]<nt.value}),qe=ie(()=>{const r=Dt.value;return r.length===0?!1:Yt.value&&r[0]>2}),ba=ie(()=>{const r=Dt.value;return r.length===0?!1:Zt.value&&r[r.length-1]<nt.value-1}),vt=ie(()=>{const r=(te.value-1)*R.value,s=r+R.value;return ot.value.slice(r,s)}),Ye=()=>{const r=vt.value.map(C=>C.id),s=r.filter(C=>F.value.includes(C)).length,h=r.length;s===0?(T.value=!1,Y.value=!1):s===h?(T.value=!0,Y.value=!1):(T.value=!1,Y.value=!0)},kt=()=>{if(T.value)vt.value.forEach(r=>{F.value.includes(r.id)||F.value.push(r.id)});else{const r=new Set(vt.value.map(s=>s.id));F.value=F.value.filter(s=>!r.has(s))}Ye()},va=()=>{Ae.value=!Ae.value,Ae.value?Ye():(F.value=[],T.value=!1,Y.value=!1)},Xt=()=>{const r=new Set(S.value.map(s=>s.id));F.value=F.value.filter(s=>r.has(s)),Ye()},tt=async(r=!1)=>{M.value=!0;try{const s={};G.value!=="all"&&!ct[G.value]&&(s.platform=G.value),ue.value!=="all"&&(s.groupId=ue.value);const h=ht(G.value);await Promise.all([ta(r),Aa(r)]);const C=await Promise.all(h.map(async be=>{const fe=K[be];if(!fe)return{platform:be,success:!0,data:[]};try{const me=await fe(s);return{platform:be,success:me==null?void 0:me.success,data:me==null?void 0:me.data}}catch(me){return console.debug(`Failed to load ${be} accounts:`,me),{platform:be,success:!1,data:[]}}})),l=[],le=se.value||{};let Ue=[];const $e=(be,fe)=>{const me=Array.isArray(fe)?fe:[];if(me.length!==0)switch(be){case"claude":{const ae=me.map(oe=>{var Ne;const Ve=((Ne=le.claudeAccountId)==null?void 0:Ne[oe.id])||0;return{...oe,platform:"claude",boundApiKeysCount:Ve}});l.push(...ae);break}case"claude-console":{const ae=me.map(oe=>{var Ne;const Ve=((Ne=le.claudeConsoleAccountId)==null?void 0:Ne[oe.id])||0;return{...oe,platform:"claude-console",boundApiKeysCount:Ve}});l.push(...ae);break}case"bedrock":{const ae=me.map(oe=>({...oe,platform:"bedrock",boundApiKeysCount:0}));l.push(...ae);break}case"gemini":{const ae=me.map(oe=>{var Ne;const Ve=((Ne=le.geminiAccountId)==null?void 0:Ne[oe.id])||0;return{...oe,platform:"gemini",boundApiKeysCount:Ve}});l.push(...ae);break}case"openai":{const ae=me.map(oe=>{var Ne;const Ve=((Ne=le.openaiAccountId)==null?void 0:Ne[oe.id])||0;return{...oe,platform:"openai",boundApiKeysCount:Ve}});l.push(...ae);break}case"azure_openai":{const ae=me.map(oe=>{var Ne;const Ve=((Ne=le.azureOpenaiAccountId)==null?void 0:Ne[oe.id])||0;return{...oe,platform:"azure_openai",boundApiKeysCount:Ve}});l.push(...ae);break}case"openai-responses":{Ue=me;break}case"ccr":{const ae=me.map(oe=>({...oe,platform:"ccr",boundApiKeysCount:0}));l.push(...ae);break}case"droid":{const ae=me.map(oe=>{var Ne;const Ve=((Ne=le.droidAccountId)==null?void 0:Ne[oe.id])||oe.boundApiKeysCount||0;return{...oe,platform:"droid",boundApiKeysCount:Ve}});l.push(...ae);break}case"gemini-api":{const ae=me.map(oe=>{var Ne;const Ve=((Ne=le.geminiAccountId)==null?void 0:Ne[`api:${oe.id}`])||0;return{...oe,platform:"gemini-api",boundApiKeysCount:Ve}});l.push(...ae);break}default:break}};if(C.forEach(({platform:be,success:fe,data:me})=>{fe&&$e(be,me||[])}),Ue.length>0){let be={};try{const me=await Q.get("/admin/openai-responses-accounts/auto-recovery-configs");me.success&&Array.isArray(me.data)&&(be=me.data.reduce((ae,oe)=>(oe!=null&&oe.accountId&&(ae[oe.accountId]=oe),ae),{}))}catch(me){console.debug("Failed to load auto-recovery configs:",me)}const fe=Ue.map(me=>{var Ve;const ae=((Ve=le.openaiAccountId)==null?void 0:Ve[`responses:${me.id}`])||0,oe=be[me.id]||me.autoRecoveryConfig||null;return{...me,platform:"openai-responses",boundApiKeysCount:ae,autoRecoveryConfig:oe}});l.push(...fe)}let Ge=l;ue.value!=="all"&&(ue.value==="ungrouped"?Ge=l.filter(be=>!be.groupInfos||be.groupInfos.length===0):Ge=l.filter(be=>!be.groupInfos||be.groupInfos.length===0?!1:be.groupInfos.some(fe=>fe.id===ue.value))),Ge=Ge.map(be=>{const fe=aa(be.proxyConfig||be.proxy);return{...be,proxyConfig:fe||null}}),S.value=Ge,Xt(),Ge.some(be=>be.platform==="claude")&&ka().catch(be=>{console.debug("Claude usage loading failed:",be)})}catch{L("加载账户失败","error")}finally{M.value=!1}},ka=async()=>{try{const r=await Q.get("/admin/claude-accounts/usage");if(r.success&&r.data){const s=r.data;S.value=S.value.map(h=>h.platform==="claude"&&s[h.id]?{...h,claudeUsage:s[h.id]}:h)}}catch(r){console.debug("Failed to load Claude usage data:",r)}};let Ft="name";const Ct=r=>{r&&(b.value===r?w.value=w.value==="asc"?"desc":"asc":(b.value=r,w.value="asc"),Ft=r)},ha=r=>{r===Ft?w.value=w.value==="asc"?"desc":"asc":w.value="asc",Ft=r},jt=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)},ea=r=>{if(!r)return"从未使用";const s=new Date(r),C=new Date-s;return C<6e4?"刚刚":C<36e5?`${Math.floor(C/6e4)} 分钟前`:C<864e5?`${Math.floor(C/36e5)} 小时前`:C<6048e5?`${Math.floor(C/864e5)} 天前`:s.toLocaleDateString("zh-CN")},wa=()=>{E.value="",te.value=1},ta=async(r=!1)=>{if(!(!r&&Ee.value))try{const s=await Q.get("/admin/accounts/binding-counts");s.success&&(se.value=s.data||{},Ee.value=!0)}catch{se.value={}}},$a=async(r=!1)=>{var s;if(!(!r&&Oe.value))try{const h=await Q.get("/admin/api-keys");h.success&&(q.value=((s=h.data)==null?void 0:s.items)||h.data||[],Oe.value=!0)}catch{}},Aa=async(r=!1)=>{if(!(!r&&ut.value))try{const s=await Q.get("/admin/account-groups");s.success&&(ee.value=s.data||[],ut.value=!0)}catch{}},Ca=()=>{Oe.value=!1,Ee.value=!1,ut.value=!1,Xe.value=!1,st.value.clear()},Ua=()=>{te.value=1,tt()},Ia=()=>{te.value=1,tt()};function aa(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 h=s.proxy&&typeof s.proxy=="object"?s.proxy:s,C=typeof h.host=="string"?h.host.trim():h.host!==void 0&&h.host!==null?String(h.host).trim():"",l=h.port!==void 0&&h.port!==null?String(h.port).trim():"";if(!C||!l)return null;const le=typeof h.type=="string"&&h.type.trim()?h.type.trim():"socks5",Ue=typeof h.username=="string"?h.username:h.username!==void 0&&h.username!==null?String(h.username):"",$e=typeof h.password=="string"?h.password:h.password!==void 0&&h.password!==null?String(h.password):"";return{type:le,host:C,port:l,username:Ue,password:$e}}const qt=r=>{const s=aa(r);if(!s)return null;const h=s.type.toLowerCase()==="socks5"?"S5":s.type.toUpperCase();let C=s.host;C.length>15&&(C=C.substring(0,12)+"...");let l=`${h}://${C}:${s.port}`;return s.username&&(l=`${h}://***@${C}:${s.port}`),l},ra=(r,s)=>{if(!r||!s)return"--";const h=new Date(r),C=new Date(s),l=h.getHours().toString().padStart(2,"0"),le=h.getMinutes().toString().padStart(2,"0"),Ue=C.getHours().toString().padStart(2,"0"),$e=C.getMinutes().toString().padStart(2,"0");return`${l}:${le} - ${Ue}:${$e}`},sa=r=>{if(!r||r<=0)return"已结束";const s=Math.floor(r/60),h=r%60;return s>0?`${s}小时${h}分钟`:`${h}分钟`},Ta=r=>{if(!r||r<=0)return"";r=Math.floor(r);const s=Math.floor(r/1440),h=r%1440,C=Math.floor(h/60),l=h%60;return s>0?C>0?`${s}天${C}小时`:`${s}天`:C>0?l>0?`${C}小时${l}分钟`:`${C}小时`:`${l}分钟`},pt=r=>r?!!(r.rateLimitStatus&&(typeof r.rateLimitStatus=="string"&&r.rateLimitStatus==="limited"||typeof r.rateLimitStatus=="object"&&r.rateLimitStatus.isRateLimited===!0)):!1,yt=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 h=new Date(s.rateLimitResetAt).getTime()-Date.now();return h>0?Math.ceil(h/6e4):0}}if(r.rateLimitUntil){const s=new Date().getTime(),C=new Date(r.rateLimitUntil).getTime()-s;return C>0?Math.ceil(C/6e4):0}return 0},_a=()=>{P.value=null,y.value=!0},la=()=>{y.value=!1,P.value=null},Gt=r=>{it.value=r,Qe.value=!0},oa=r=>!r||!r.id?[]:q.value.filter(s=>{const h=r.id;return s.claudeAccountId===h||s.claudeConsoleAccountId===h||s.geminiAccountId===h||s.openaiAccountId===h||s.azureOpenaiAccountId===h||s.openaiAccountId===`responses:${h}`||s.geminiAccountId===`api:${h}`}),Ka=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}},na=async r=>{var h,C;const s=Ka(r);if(!s)return{success:!1,message:"不支持的账户类型"};try{const l=await Q.delete(s);return l.success?{success:!0,data:l}:{success:!1,message:l.message||"删除失败"}}catch(l){return{success:!1,message:((C=(h=l.response)==null?void 0:h.data)==null?void 0:C.message)||l.message||"删除失败"}}},Qt=async r=>{const h=oa(r).length;let C=`确定要删除账户 "${r.name}" 吗?`;if(h>0&&(C+=`
|
||
|
||
⚠️ 注意:此账号有 ${h} 个 API Key 绑定。`,C+=`
|
||
删除后,这些 API Key 将自动切换为共享池模式。`),C+=`
|
||
|
||
此操作不可恢复。`,!await B("删除账户",C,"删除","取消"))return;const le=await na(r);if(le.success){const Ue=le.data;let $e="账户已成功删除";(Ue==null?void 0:Ue.unboundKeys)>0&&($e+=`,${Ue.unboundKeys} 个 API Key 已切换为共享池模式`),L($e,"success"),F.value=F.value.filter(Ge=>Ge!==r.id),Ye(),Xe.value=!1,Oe.value=!1,Ee.value=!1,tt(),$a(!0),ta(!0)}else L(le.message||"删除失败","error")},Ma=async()=>{var be;if(F.value.length===0){L("请先选择要删除的账户","warning");return}const r=new Map(S.value.map(fe=>[fe.id,fe])),s=F.value.map(fe=>r.get(fe)).filter(fe=>!!fe);if(s.length===0){L("选中的账户已不存在","warning"),F.value=[],Ye();return}let h=`确定要删除选中的 ${s.length} 个账户吗?此操作不可恢复。`;const C=s.map(fe=>({account:fe,boundKeys:oa(fe)})).filter(fe=>fe.boundKeys.length>0);if(C.length>0&&(h+=`
|
||
|
||
⚠️ 以下账户存在绑定的 API Key,将自动解绑:`,C.forEach(({account:fe,boundKeys:me})=>{const ae=fe.name||fe.email||fe.accountName||fe.id;h+=`
|
||
- ${ae}: ${me.length} 个`}),h+=`
|
||
删除后,这些 API Key 将切换为共享池模式。`),h+=`
|
||
|
||
请再次确认是否继续。`,!await B("批量删除账户",h,"删除","取消"))return;let le=0,Ue=0,$e=0;const Ge=[];for(const fe of s){const me=await na(fe);me.success?(le+=1,$e+=((be=me.data)==null?void 0:be.unboundKeys)||0):(Ue+=1,Ge.push({name:fe.name||fe.email||fe.accountName||fe.id,message:me.message||"删除失败"}))}if(le>0){let fe=`成功删除 ${le} 个账户`;$e>0&&(fe+=`,${$e} 个 API Key 已切换为共享池模式`),L(fe,Ue>0?"warning":"success"),F.value=[],T.value=!1,Y.value=!1,Xe.value=!1,Oe.value=!1,await tt(!0)}if(Ue>0){const fe=Ge.map(me=>`${me.name}: ${me.message}`).join(`
|
||
`);L(`有 ${Ue} 个账户删除失败:
|
||
${fe}`,le>0?"warning":"error")}Ye()},ia=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 h="";if(r.platform==="openai")h=`/admin/openai-accounts/${r.id}/reset-status`;else if(r.platform==="openai-responses")h=`/admin/openai-responses-accounts/${r.id}/reset-status`;else if(r.platform==="claude")h=`/admin/claude-accounts/${r.id}/reset-status`;else if(r.platform==="claude-console")h=`/admin/claude-console-accounts/${r.id}/reset-status`;else if(r.platform==="ccr")h=`/admin/ccr-accounts/${r.id}/reset-status`;else if(r.platform==="droid")h=`/admin/droid-accounts/${r.id}/reset-status`;else if(r.platform==="gemini-api")h=`/admin/gemini-api-accounts/${r.id}/reset-status`;else if(r.platform==="gemini")h=`/admin/gemini-accounts/${r.id}/reset-status`;else{L("不支持的账户类型","error"),r.isResetting=!1;return}const C=await Q.post(h);C.success?(L("账户状态已重置","success"),tt(!0)):L(C.message||"状态重置失败","error")}catch{L("状态重置失败","error")}finally{r.isResetting=!1}},Bt=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{L("该账户类型暂不支持调度控制","warning");return}const h=await Q.put(s);h.success?(r.schedulable=h.schedulable,L(h.schedulable?"已启用调度":"已禁用调度","success")):L(h.message||"操作失败","error")}catch{L("切换调度状态失败","error")}finally{r.isTogglingSchedulable=!1}},da=()=>{y.value=!1,L("账户创建成功","success"),Ca(),tt()},ua=()=>{Qe.value=!1,L("账户更新成功","success"),Xe.value=!1,tt()},Sa=r=>!r.lastRefreshAt||r.lastRefreshAt===""?"Setup":"OAuth",Da=()=>"OAuth",ja=()=>"OAuth",ga=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 h=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 h=="string"&&h.trim().toLowerCase().replace(/[\s_-]/g,"")==="apikey"?"API Key":"OAuth"},Pa=r=>ga(r)==="API Key",pa=r=>{if(!r||typeof r!="object")return 0;if(Array.isArray(r.apiKeys))return r.apiKeys.filter(h=>h.status!=="error").length;if(typeof r.apiKeys=="string"&&r.apiKeys.trim())try{const h=JSON.parse(r.apiKeys);if(Array.isArray(h))return h.filter(C=>C.status!=="error").length}catch{}const s=[r.apiKeyCount,r.api_key_count,r.apiKeysCount,r.api_keys_count];for(const h of s){const C=Number(h);if(Number.isFinite(C)&&C>=0)return C}return 0},La=r=>{const s=pa(r),h="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?[h,"border-cyan-200 bg-cyan-50/90 text-cyan-700 dark:border-cyan-500/40 dark:bg-cyan-900/40 dark:text-cyan-200"]:[h,"border-rose-200 bg-rose-50/90 text-rose-600 dark:border-rose-500/40 dark:bg-rose-900/40 dark:text-rose-200"]},d=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"},t=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:"手动停止调度"},re=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?"已暂停":"正常",ye=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",i=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",de=r=>ea(r),ge=(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 C=String(r).toLowerCase();return C==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":C==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-600"},Pe=r=>r.authType==="oauth",ze=r=>!r||r.utilization===null||r.utilization===void 0?"-":`${r.utilization}%`,_e=r=>!r||r.utilization===null||r.utilization===void 0?"0%":`${r.utilization}%`,D=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"},j=r=>{if(!r||!r.remainingSeconds)return"-";const s=r.remainingSeconds,h=Math.floor(s/86400),C=Math.floor(s%86400/3600),l=Math.floor(s%3600/60);return h>0?C>0?`${h}天${C}小时`:`${h}天`:C>0?l>0?`${C}小时${l}分钟`:`${C}小时`:l>0?`${l}分钟`:`${Math.floor(s%60)}秒`},ke=r=>{if(!r)return null;const s=typeof r.usedPercent=="number"&&!Number.isNaN(r.usedPercent)?r.usedPercent:null,h=typeof r.resetAfterSeconds=="number"&&!Number.isNaN(r.resetAfterSeconds)?r.resetAfterSeconds:null,C=typeof r.remainingSeconds=="number"?r.remainingSeconds:null,l=r.resetAt?Date.parse(r.resetAt):null;return h!==null&&(C!==null&&C<=0||l!==null&&!Number.isNaN(l)&&Date.now()>=l)?0:s===null?null:Math.max(0,Math.min(100,s))},W=r=>{const s=ke(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"},Ie=r=>{const s=ke(r);return s===null?"--":`${s.toFixed(1)}%`},Ke=r=>{const s=ke(r);return s===null?"0%":`${s}%`},Re=r=>r==="secondary"?"周限":"5h",Me=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 h=Math.floor(s/86400),C=Math.floor(s%86400/3600),l=Math.floor(s%3600/60),le=s%60;return h>0?C>0?`${h}天${C}小时`:`${h}天`:C>0?l>0?`${C}小时${l}分钟`:`${C}小时`:l>0?`${l}分钟`:`${le}秒`},Ze=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),at=r=>{var C,l;const s=Number(((l=(C=r==null?void 0:r.usage)==null?void 0:C.daily)==null?void 0:l.cost)||0),h=Number((r==null?void 0:r.dailyQuota)||0);return!h||h<=0?0:s/h*100},Ut=r=>r>=90?"bg-red-500":r>=70?"bg-yellow-500":"bg-green-500",ya=r=>{const s=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!s||s<=0)return 0;const h=Number((r==null?void 0:r.activeTaskCount)||0);return Math.min(100,h/s*100)},za=r=>r>=100?"bg-red-500":r>=80?"bg-yellow-500":"bg-green-500",qa=r=>{const s=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!s||s<=0)return"text-gray-500 dark:text-gray-400";const h=Number((r==null?void 0:r.activeTaskCount)||0);return h>=s?"text-red-600 dark:text-red-400":h>=s*.8?"text-yellow-600 dark:text-yellow-400":"text-gray-700 dark:text-gray-200"},Ga=r=>{var C,l;const s=Number(((l=(C=r==null?void 0:r.usage)==null?void 0:C.daily)==null?void 0:l.cost)||0),h=Number((r==null?void 0:r.dailyQuota)||0);return!h||h<=0?"0.00":Math.max(0,h-s).toFixed(2)},Ht=r=>!r.usage||!r.usage.daily?"0.0000":r.usage.daily.cost!==void 0?Ze(r.usage.daily.cost):"0.0000";ve(E,()=>{te.value=1,Ye()}),ve(R,r=>{localStorage.setItem(nr,r.toString()),Ye()}),ve(()=>ot.value.length,()=>{te.value>nt.value&&(te.value=nt.value||1),Ye()}),ve(te,()=>{Ye()}),ve(vt,()=>{Ye(),Ha(()=>{ca()})}),ve(S,()=>{Xt()});const Ya=r=>r?new Date(r).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit"}):"",gr=r=>r?new Date(r)<new Date:!1,pr=r=>{if(!r)return!1;const s=new Date,C=(new Date(r)-s)/(1e3*60*60*24);return C>0&&C<=7},Ra=r=>{Z.value=r},Za=()=>{Z.value=null},yr=async({accountId:r,expiresAt:s})=>{try{const h=S.value.find(le=>le.id===r);if(!h){L("未找到账户","error");return}let C="";switch(h.platform){case"claude":case"claude-oauth":C=`/admin/claude-accounts/${r}`;break;case"gemini":C=`/admin/gemini-accounts/${r}`;break;case"claude-console":C=`/admin/claude-console-accounts/${r}`;break;case"bedrock":C=`/admin/bedrock-accounts/${r}`;break;case"ccr":C=`/admin/ccr-accounts/${r}`;break;case"openai":C=`/admin/openai-accounts/${r}`;break;case"droid":C=`/admin/droid-accounts/${r}`;break;case"azure_openai":C=`/admin/azure-openai-accounts/${r}`;break;case"openai-responses":C=`/admin/openai-responses-accounts/${r}`;break;default:L(`不支持的平台类型: ${h.platform}`,"error");return}const l=await Q.put(C,{expiresAt:s||null});l.success?(L("账户到期时间已更新","success"),h.expiresAt=s||null,Za()):(L(l.message||"更新失败","error"),A.value&&A.value.resetSaving())}catch(h){console.error("更新账户过期时间失败:",h),L("更新失败","error"),A.value&&A.value.resetSaving()}},ca=()=>{ce.value&&(Te.value=ce.value.scrollWidth>ce.value.clientWidth)};let Va=null;return xa(()=>{tt(!0),Ha(()=>{ce.value&&(Va=new ResizeObserver(()=>{ca()}),Va.observe(ce.value),ca())}),window.addEventListener("resize",ca)}),Fa(()=>{Va&&Va.disconnect(),window.removeEventListener("resize",ca)}),(r,s)=>{const h=cr,C=mr;return o(),n("div",gm,[e("div",pm,[e("div",ym,[s[40]||(s[40]=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",cm,[e("div",mm,[e("div",xm,[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)),Be(Oa,{modelValue:b.value,"onUpdate:modelValue":s[0]||(s[0]=l=>b.value=l),icon:w.value==="asc"?"fa-sort-amount-up":"fa-sort-amount-down","icon-color":"text-indigo-500",options:_t.value,placeholder:"选择排序",onChange:ha},null,8,["modelValue","icon","options"])]),e("div",fm,[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)),Be(Oa,{modelValue:G.value,"onUpdate:modelValue":s[1]||(s[1]=l=>G.value=l),icon:"fa-server","icon-color":"text-blue-500",options:xt.value,placeholder:"选择平台",onChange:Ua},null,8,["modelValue","options"])]),e("div",bm,[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)),Be(Oa,{modelValue:ue.value,"onUpdate:modelValue":s[2]||(s[2]=l=>ue.value=l),icon:"fa-layer-group","icon-color":"text-purple-500",options:Mt.value,placeholder:"选择分组",onChange:Ia},null,8,["modelValue","options"])]),e("div",vm,[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)),Be(Oa,{modelValue:V.value,"onUpdate:modelValue":s[3]||(s[3]=l=>V.value=l),icon:"fa-check-circle","icon-color":"text-green-500",options:gt.value,placeholder:"选择状态"},null,8,["modelValue","options"])]),e("div",km,[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",hm,[v(e("input",{"onUpdate:modelValue":s[4]||(s[4]=l=>E.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,E.value]]),s[32]||(s[32]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),E.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:wa},s[31]||(s[31]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):c("",!0)])])]),e("div",wm,[e("div",$m,[Be(h,{content:"查看账户统计汇总",effect:"dark",placement:"bottom"},{default:Pt(()=>[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=>a.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",Am,[Be(h,{content:"刷新数据 (Ctrl/⌘+点击强制刷新所有缓存)",effect:"dark",placement:"bottom"},{default:Pt(()=>[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:M.value,onClick:[s[6]||(s[6]=It(l=>tt(!0),["ctrl","exact"])),s[7]||(s[7]=It(l=>tt(!1),["exact"])),s[8]||(s[8]=It(l=>tt(!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:U(["fas relative text-green-500",M.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),s[36]||(s[36]=e("span",{class:"relative"},"刷新",-1))],8,Cm)]),_:1})]),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:va},[e("i",{class:U(Ae.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,u(Ae.value?"取消选择":"选择"),1)]),F.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:Ma},[s[37]||(s[37]=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[38]||(s[38]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",Um,"删除选中 ("+u(F.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:It(_a,["stop"])},s[39]||(s[39]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"添加账户",-1)]))])])]),M.value?(o(),n("div",Im,s[41]||(s[41]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载账户...",-1)]))):ot.value.length===0?(o(),n("div",Tm,s[42]||(s[42]=[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",_m,[e("div",{ref_key:"tableContainerRef",ref:ce,class:"table-container"},[e("table",Km,[e("thead",Mm,[e("tr",null,[k.value?(o(),n("th",Sm,[e("div",Dm,[v(e("input",{"onUpdate:modelValue":s[9]||(s[9]=l=>T.value=l),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:Y.value,type:"checkbox",onChange:kt},null,40,jm),[[je,T.value]])])])):c("",!0),e("th",{class:U(["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",k.value?"left-[50px]":"left-0"]),onClick:s[10]||(s[10]=l=>Ct("name"))},[s[43]||(s[43]=f(" 名称 ",-1)),b.value==="name"?(o(),n("i",{key:0,class:U(["fas",w.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Pm))],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=>Ct("platform"))},[s[44]||(s[44]=f(" 平台/类型 ",-1)),b.value==="platform"?(o(),n("i",{key:0,class:U(["fas",w.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Lm))]),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=>Ct("status"))},[s[45]||(s[45]=f(" 状态 ",-1)),b.value==="status"?(o(),n("i",{key:0,class:U(["fas",w.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",zm))]),s[51]||(s[51]=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",Rm,[e("div",Vm,[s[48]||(s[48]=e("span",null,"会话窗口",-1)),Be(h,{placement:"top"},{content:Pt(()=>s[46]||(s[46]=[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:Pt(()=>[s[47]||(s[47]=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,__:[47]})])]),s[52]||(s[52]=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=>Ct("priority"))},[s[49]||(s[49]=f(" 优先级 ",-1)),b.value==="priority"?(o(),n("i",{key:0,class:U(["fas",w.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Om))]),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)),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=>Ct("expiresAt"))},[s[50]||(s[50]=f(" 到期时间 ",-1)),b.value==="expiresAt"?(o(),n("i",{key:0,class:U(["fas",w.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Em))]),e("th",{class:U(["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",Te.value?"min-w-[170px]":"min-w-[200px]"])}," 操作 ",2)])]),e("tbody",Nm,[(o(!0),n(he,null,We(vt.value,l=>{var le,Ue;return o(),n("tr",{key:l.id,class:"table-row"},[k.value?(o(),n("td",Wm,[e("div",Fm,[v(e("input",{"onUpdate:modelValue":s[15]||(s[15]=$e=>F.value=$e),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:Ye},null,40,qm),[[je,F.value]])])])):c("",!0),e("td",{class:U(["name-column sticky z-10 px-3 py-4",k.value?"left-[50px]":"left-0"])},[e("div",Gm,[s[58]||(s[58]=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",Qm,[e("div",Bm,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:l.name},u(l.name),9,Hm),l.accountType==="dedicated"?(o(),n("span",Jm,s[54]||(s[54]=[e("i",{class:"fas fa-lock mr-1"},null,-1),f("专属 ",-1)]))):l.accountType==="group"?(o(),n("span",Ym,s[55]||(s[55]=[e("i",{class:"fas fa-layer-group mr-1"},null,-1),f("分组调度 ",-1)]))):(o(),n("span",Zm,s[56]||(s[56]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),f("共享 ",-1)])))]),l.groupInfos&&l.groupInfos.length>0?(o(),n("div",Xm,[(o(!0),n(he,null,We(l.groupInfos,$e=>(o(),n("span",{key:$e.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:`所属分组: ${$e.name}`},[s[57]||(s[57]=e("i",{class:"fas fa-folder mr-1"},null,-1)),f(u($e.name),1)],8,ex))),128))])):c("",!0),e("div",{class:"truncate text-xs text-gray-500 dark:text-gray-400",title:l.id},u(l.id),9,tx)])])],2),e("td",ax,[e("div",rx,[l.platform==="gemini"?(o(),n("div",sx,[s[59]||(s[59]=e("i",{class:"fas fa-robot text-xs text-yellow-700"},null,-1)),s[60]||(s[60]=e("span",{class:"text-xs font-semibold text-yellow-800"},"Gemini",-1)),s[61]||(s[61]=e("span",{class:"mx-1 h-4 w-px bg-yellow-300"},null,-1)),e("span",lx,u(Da()),1)])):l.platform==="claude-console"?(o(),n("div",ox,s[62]||(s[62]=[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",nx,s[63]||(s[63]=[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",ix,[s[64]||(s[64]=e("div",{class:"fa-openai"},null,-1)),s[65]||(s[65]=e("span",{class:"text-xs font-semibold text-gray-950"},"OpenAi",-1)),s[66]||(s[66]=e("span",{class:"mx-1 h-4 w-px bg-gray-400"},null,-1)),e("span",dx,u(ja()),1)])):l.platform==="azure_openai"?(o(),n("div",ux,s[67]||(s[67]=[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",gx,s[68]||(s[68]=[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",px,[s[69]||(s[69]=e("i",{class:"fas fa-brain text-xs text-indigo-700"},null,-1)),e("span",yx,u(d(l)),1),s[70]||(s[70]=e("span",{class:"mx-1 h-4 w-px bg-indigo-300"},null,-1)),e("span",cx,u(Sa(l)),1)])):l.platform==="ccr"?(o(),n("div",mx,s[71]||(s[71]=[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",xx,[s[73]||(s[73]=e("i",{class:"fas fa-robot text-xs text-cyan-700 dark:text-cyan-400"},null,-1)),s[74]||(s[74]=e("span",{class:"text-xs font-semibold text-cyan-800 dark:text-cyan-300"},"Droid",-1)),s[75]||(s[75]=e("span",{class:"mx-1 h-4 w-px bg-cyan-300 dark:bg-cyan-600"},null,-1)),e("span",fx,u(ga(l)),1),Pa(l)?(o(),n("span",{key:0,class:U(La(l))},[s[72]||(s[72]=e("i",{class:"fas fa-key text-[9px]"},null,-1)),e("span",null,"x"+u(pa(l)),1)],2)):c("",!0)])):l.platform==="gemini-api"?(o(),n("div",bx,s[76]||(s[76]=[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",vx,s[77]||(s[77]=[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",kx,[e("div",hx,[e("span",{class:U(["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:U(["mr-2 h-2 w-2 rounded-full",l.status==="blocked"?"bg-orange-500":l.status==="unauthorized"?"bg-red-500":l.status==="temp_error"?"bg-orange-500":l.isActive?"bg-green-500":"bg-red-500"])},null,2),f(" "+u(l.status==="blocked"?"已封锁":l.status==="unauthorized"?"异常":l.status==="temp_error"?"临时异常":l.isActive?"正常":"异常"),1)],2),l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"?(o(),n("span",wx,[s[78]||(s[78]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),s[79]||(s[79]=f(" 限流中 ",-1)),l.rateLimitStatus&&typeof l.rateLimitStatus=="object"&&l.rateLimitStatus.minutesRemaining>0?(o(),n("span",$x,"("+u(Ta(l.rateLimitStatus.minutesRemaining))+")",1)):c("",!0)])):c("",!0),l.schedulable===!1?(o(),n("span",Ax,[s[81]||(s[81]=e("i",{class:"fas fa-pause-circle mr-1"},null,-1)),s[82]||(s[82]=f(" 不可调度 ",-1)),t(l)?(o(),Je(h,{key:0,content:t(l),effect:"dark",placement:"top"},{default:Pt(()=>s[80]||(s[80]=[e("i",{class:"fas fa-question-circle ml-1 cursor-help text-gray-500"},null,-1)])),_:2,__:[80]},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,Cx)):c("",!0),l.accountType==="dedicated"?(o(),n("span",Ux," 绑定: "+u(l.boundApiKeysCount||0)+" 个API Key ",1)):c("",!0)])]),e("td",Ix,[l.usage&&l.usage.daily?(o(),n("div",Tx,[e("div",_x,[s[83]||(s[83]=e("div",{class:"h-2 w-2 rounded-full bg-blue-500"},null,-1)),e("span",Kx,u(l.usage.daily.requests||0)+" 次",1)]),e("div",Mx,[s[84]||(s[84]=e("div",{class:"h-2 w-2 rounded-full bg-purple-500"},null,-1)),e("span",Sx,u(jt(l.usage.daily.allTokens||0))+"M",1)]),e("div",Dx,[s[85]||(s[85]=e("div",{class:"h-2 w-2 rounded-full bg-green-500"},null,-1)),e("span",jx,"$"+u(Ht(l)),1)]),l.usage.averages&&l.usage.averages.rpm>0?(o(),n("div",Px," 平均 "+u(l.usage.averages.rpm.toFixed(2))+" RPM ",1)):c("",!0)])):(o(),n("div",Lx,"暂无数据"))]),e("td",zx,[l.platform==="claude"?(o(),n("div",Rx,[Pe(l)&&l.claudeUsage?(o(),n("div",Vx,[e("div",Ox,[e("div",Ex,[s[86]||(s[86]=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",Nx,[e("div",Wx,[e("div",Fx,[e("div",{class:U(["h-2 rounded-full transition-all duration-300",D(l.claudeUsage.fiveHour)]),style:He({width:_e(l.claudeUsage.fiveHour)})},null,6)]),e("span",qx,u(ze(l.claudeUsage.fiveHour)),1)])])]),e("div",Gx," 重置剩余 "+u(j(l.claudeUsage.fiveHour)),1)]),e("div",Qx,[e("div",Bx,[s[87]||(s[87]=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",Hx,[e("div",Jx,[e("div",Yx,[e("div",{class:U(["h-2 rounded-full transition-all duration-300",D(l.claudeUsage.sevenDay)]),style:He({width:_e(l.claudeUsage.sevenDay)})},null,6)]),e("span",Zx,u(ze(l.claudeUsage.sevenDay)),1)])])]),e("div",Xx," 重置剩余 "+u(j(l.claudeUsage.sevenDay)),1)]),e("div",ef,[e("div",tf,[s[88]||(s[88]=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",af,[e("div",rf,[e("div",sf,[e("div",{class:U(["h-2 rounded-full transition-all duration-300",D(l.claudeUsage.sevenDayOpus)]),style:He({width:_e(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",lf,u(ze(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",of," 重置剩余 "+u(j(l.claudeUsage.sevenDayOpus)),1)])])):!Pe(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",nf,[l.usage&&l.usage.sessionWindow?(o(),n("div",df,[e("div",uf,[s[89]||(s[89]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("span",gf,u(jt(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",pf,[s[90]||(s[90]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("span",yf," $"+u(Ze(l.usage.sessionWindow.totalCost)),1)])])):c("",!0),e("div",cf,[e("div",mf,[e("div",{class:U(["h-2 rounded-full transition-all duration-300",ge(l.sessionWindow.sessionWindowStatus,l)]),style:He({width:l.sessionWindow.progress+"%"})},null,6)]),e("span",xf,u(l.sessionWindow.progress)+"% ",1)]),e("div",ff,[e("div",null,u(ra(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("div",bf," 剩余 "+u(sa(l.sessionWindow.remainingTime)),1)):c("",!0)])])):(o(),n("div",vf,"暂无统计"))])):l.platform==="claude-console"?(o(),n("div",kf,[e("div",null,[Number(l.dailyQuota)>0?(o(),n(he,{key:0},[e("div",hf,[s[91]||(s[91]=e("span",{class:"text-gray-600 dark:text-gray-300"},"额度进度",-1)),e("span",wf,u(at(l).toFixed(1))+"% ",1)]),e("div",$f,[e("div",Af,[e("div",{class:U(["h-2 rounded-full transition-all duration-300",Ut(at(l))]),style:He({width:Math.min(100,at(l))+"%"})},null,6)]),e("span",Cf," $"+u(Ze(((Ue=(le=l.usage)==null?void 0:le.daily)==null?void 0:Ue.cost)||0))+" / $"+u(Number(l.dailyQuota).toFixed(2)),1)]),e("div",Uf,[f(" 剩余 $"+u(Ga(l))+" ",1),e("span",If,"重置 "+u(l.quotaResetTime||"00:00"),1)])],64)):(o(),n("div",Tf,s[92]||(s[92]=[e("i",{class:"fas fa-minus"},null,-1)])))]),e("div",_f,[e("div",Kf,[s[93]||(s[93]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发状态",-1)),Number(l.maxConcurrentTasks||0)>0?(o(),n("span",Mf,u(ya(l).toFixed(0))+"% ",1)):c("",!0)]),Number(l.maxConcurrentTasks||0)>0?(o(),n("div",Sf,[e("div",Df,[e("div",{class:U(["h-2 rounded-full transition-all duration-300",za(ya(l))]),style:He({width:Math.min(100,ya(l))+"%"})},null,6)]),e("span",{class:U(["min-w-[48px] text-xs font-medium",qa(l)])},u(Number(l.activeTaskCount||0))+" / "+u(Number(l.maxConcurrentTasks||0)),3)])):(o(),n("div",jf,s[94]||(s[94]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),f("并发无限制 ",-1)])))])])):l.platform==="openai"?(o(),n("div",Pf,[l.codexUsage?(o(),n("div",Lf,[e("div",zf,[e("div",Rf,[e("span",Vf,u(Re("primary")),1),e("div",Of,[e("div",Ef,[e("div",Nf,[e("div",{class:U(["h-2 rounded-full transition-all duration-300",W(l.codexUsage.primary)]),style:He({width:Ke(l.codexUsage.primary)})},null,6)]),e("span",Wf,u(Ie(l.codexUsage.primary)),1)])])]),e("div",Ff," 重置剩余 "+u(Me(l.codexUsage.primary)),1)]),e("div",qf,[e("div",Gf,[e("span",Qf,u(Re("secondary")),1),e("div",Bf,[e("div",Hf,[e("div",Jf,[e("div",{class:U(["h-2 rounded-full transition-all duration-300",W(l.codexUsage.secondary)]),style:He({width:Ke(l.codexUsage.secondary)})},null,6)]),e("span",Yf,u(Ie(l.codexUsage.secondary)),1)])])]),e("div",Zf," 重置剩余 "+u(Me(l.codexUsage.secondary)),1)])])):(o(),n("div",Xf,s[95]||(s[95]=[e("span",{class:"text-xs"},"N/A",-1)])))])):(o(),n("div",eb,s[96]||(s[96]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",tb,u(ea(l.lastUsedAt)),1),e("td",ab,[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",rb,[e("div",sb,[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",lb,u(l.priority||50),1)])):(o(),n("div",ob,s[97]||(s[97]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",nb,[qt(l.proxy)?(o(),n("div",{key:0,class:"break-all rounded bg-blue-50 px-2 py-1 font-mono text-xs",title:qt(l.proxy)},u(qt(l.proxy)),9,ib)):(o(),n("div",db,"无代理"))]),e("td",ub,[e("div",gb,[l.expiresAt?(o(),n("span",pb,[gr(l.expiresAt)?(o(),n("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:It($e=>Ra(l),["stop"])},s[98]||(s[98]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),f(" 已过期 ",-1)]),8,yb)):pr(l.expiresAt)?(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:It($e=>Ra(l),["stop"])},[s[99]||(s[99]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),f(" "+u(Ya(l.expiresAt)),1)],8,cb)):(o(),n("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:It($e=>Ra(l),["stop"])},u(Ya(l.expiresAt)),9,mb))])):(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:It($e=>Ra(l),["stop"])},s[100]||(s[100]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),f(" 永不过期 ",-1)]),8,xb))])]),e("td",fb,[Te.value?(o(),n("div",Ib,[e("button",{class:U(["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:$e=>Bt(l)},[e("i",{class:U(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",_b,u(l.schedulable?"调度":"停用"),1)],10,Tb),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:$e=>Gt(l)},s[107]||(s[107]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,Kb),Be(Ar,{actions:Ot(l)},null,8,["actions"])])):(o(),n("div",bb,[St(l)?(o(),n("button",{key:0,class:U(["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:$e=>ia(l)},[e("i",{class:U(["fas fa-redo",l.isResetting?"animate-spin":""])},null,2),s[101]||(s[101]=e("span",{class:"ml-1"},"重置状态",-1))],10,vb)):c("",!0),e("button",{class:U(["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:$e=>Bt(l)},[e("i",{class:U(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",hb,u(l.schedulable?"调度":"停用"),1)],10,kb),ft(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:$e=>bt(l)},s[102]||(s[102]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,wb)):c("",!0),lt(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:$e=>$t(l)},s[103]||(s[103]=[e("i",{class:"fas fa-vial"},null,-1),e("span",{class:"ml-1"},"测试",-1)]),8,$b)):c("",!0),lt(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:$e=>At(l)},s[104]||(s[104]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1"},"定时",-1)]),8,Ab)):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:$e=>Gt(l)},s[105]||(s[105]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,Cb),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:$e=>Qt(l)},s[106]||(s[106]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,Ub)]))])])}),128))])])],512)])),!M.value&&ot.value.length>0?(o(),n("div",Mb,[(o(!0),n(he,null,We(vt.value,l=>{var le,Ue,$e,Ge;return o(),n("div",{key:l.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",Sb,[e("div",Db,[k.value?v((o(),n("input",{key:0,"onUpdate:modelValue":s[16]||(s[16]=be=>F.value=be),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:Ye},null,40,jb)),[[je,F.value]]):c("",!0),e("div",{class:U(["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:U(["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",Pb,u(l.name||l.email),1),e("div",Lb,[e("span",zb,u(l.platform),1),s[108]||(s[108]=e("span",{class:"text-xs text-gray-400"},"|",-1)),e("span",Rb,u(l.type),1)])])]),e("span",{class:U(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",ye(l)])},[e("div",{class:U(["mr-1.5 h-1.5 w-1.5 rounded-full",i(l)])},null,2),f(" "+u(re(l)),1)],2)]),e("div",Vb,[e("div",null,[s[112]||(s[112]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"今日使用",-1)),e("div",Ob,[e("div",Eb,[s[109]||(s[109]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-blue-500"},null,-1)),e("p",Nb,u(((Ue=(le=l.usage)==null?void 0:le.daily)==null?void 0:Ue.requests)||0)+" 次 ",1)]),e("div",Wb,[s[110]||(s[110]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",Fb,u(jt(((Ge=($e=l.usage)==null?void 0:$e.daily)==null?void 0:Ge.allTokens)||0))+"M ",1)]),e("div",qb,[s[111]||(s[111]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",Gb," $"+u(Ht(l)),1)])])]),e("div",null,[s[115]||(s[115]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"会话窗口",-1)),l.usage&&l.usage.sessionWindow?(o(),n("div",Qb,[e("div",Bb,[s[113]||(s[113]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",Hb,u(jt(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",Jb,[s[114]||(s[114]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",Yb," $"+u(Ze(l.usage.sessionWindow.totalCost)),1)])])):(o(),n("div",Zb,"-"))])]),e("div",Xb,[l.platform==="claude"?(o(),n("div",ev,[Pe(l)&&l.claudeUsage?(o(),n("div",tv,[e("div",av,[e("div",rv,[s[116]||(s[116]=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",sv,[e("div",lv,[e("div",ov,[e("div",{class:U(["h-2 rounded-full transition-all duration-300",D(l.claudeUsage.fiveHour)]),style:He({width:_e(l.claudeUsage.fiveHour)})},null,6)]),e("span",nv,u(ze(l.claudeUsage.fiveHour)),1)])])]),e("div",iv," 重置剩余 "+u(j(l.claudeUsage.fiveHour)),1)]),e("div",dv,[e("div",uv,[s[117]||(s[117]=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",gv,[e("div",pv,[e("div",yv,[e("div",{class:U(["h-2 rounded-full transition-all duration-300",D(l.claudeUsage.sevenDay)]),style:He({width:_e(l.claudeUsage.sevenDay)})},null,6)]),e("span",cv,u(ze(l.claudeUsage.sevenDay)),1)])])]),e("div",mv," 重置剩余 "+u(j(l.claudeUsage.sevenDay)),1)]),e("div",xv,[e("div",fv,[s[118]||(s[118]=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",bv,[e("div",vv,[e("div",kv,[e("div",{class:U(["h-2 rounded-full transition-all duration-300",D(l.claudeUsage.sevenDayOpus)]),style:He({width:_e(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",hv,u(ze(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",wv," 重置剩余 "+u(j(l.claudeUsage.sevenDayOpus)),1)])])):!Pe(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",$v,[e("div",Av,[e("div",Cv,[s[120]||(s[120]=e("span",{class:"font-medium text-gray-600 dark:text-gray-300"},"会话窗口",-1)),Be(h,{content:"会话窗口进度不代表使用量,仅表示距离下一个5小时窗口的剩余时间",placement:"top"},{default:Pt(()=>s[119]||(s[119]=[e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600"},null,-1)])),_:1,__:[119]})]),e("span",Uv,u(l.sessionWindow.progress)+"% ",1)]),e("div",Iv,[e("div",{class:U(["h-full transition-all duration-300",ge(l.sessionWindow.sessionWindowStatus,l)]),style:He({width:l.sessionWindow.progress+"%"})},null,6)]),e("div",Tv,[e("span",_v,u(ra(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("span",Kv," 剩余 "+u(sa(l.sessionWindow.remainingTime)),1)):(o(),n("span",Mv," 已结束 "))])])):(o(),n("div",Sv,"暂无统计"))])):l.platform==="openai"?(o(),n("div",Dv,[l.codexUsage?(o(),n("div",jv,[e("div",Pv,[e("div",Lv,[e("span",zv,u(Re("primary")),1),e("div",Rv,[e("div",Vv,[e("div",Ov,[e("div",{class:U(["h-2 rounded-full transition-all duration-300",W(l.codexUsage.primary)]),style:He({width:Ke(l.codexUsage.primary)})},null,6)]),e("span",Ev,u(Ie(l.codexUsage.primary)),1)])])]),e("div",Nv," 重置剩余 "+u(Me(l.codexUsage.primary)),1)]),e("div",Wv,[e("div",Fv,[e("span",qv,u(Re("secondary")),1),e("div",Gv,[e("div",Qv,[e("div",Bv,[e("div",{class:U(["h-2 rounded-full transition-all duration-300",W(l.codexUsage.secondary)]),style:He({width:Ke(l.codexUsage.secondary)})},null,6)]),e("span",Hv,u(Ie(l.codexUsage.secondary)),1)])])]),e("div",Jv," 重置剩余 "+u(Me(l.codexUsage.secondary)),1)])])):c("",!0),l.codexUsage?c("",!0):(o(),n("div",Yv,"暂无统计"))])):c("",!0),e("div",Zv,[s[121]||(s[121]=e("span",{class:"text-gray-500 dark:text-gray-400"},"最后使用",-1)),e("span",Xv,u(l.lastUsedAt?de(l.lastUsedAt):"从未使用"),1)]),l.proxyConfig&&l.proxyConfig.type!=="none"?(o(),n("div",e1,[s[122]||(s[122]=e("span",{class:"text-gray-500 dark:text-gray-400"},"代理",-1)),e("span",t1,u(l.proxyConfig.type.toUpperCase()),1)])):c("",!0),e("div",a1,[s[123]||(s[123]=e("span",{class:"text-gray-500 dark:text-gray-400"},"优先级",-1)),e("span",r1,u(l.priority||50),1)])]),e("div",s1,[e("button",{class:U(["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:be=>Bt(l)},[e("i",{class:U(["fas",l.schedulable?"fa-pause":"fa-play"])},null,2),f(" "+u(l.schedulable?"暂停":"启用"),1)],10,l1),ft(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:be=>bt(l)},s[124]||(s[124]=[e("i",{class:"fas fa-chart-line"},null,-1),f(" 详情 ",-1)]),8,o1)):c("",!0),lt(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:be=>$t(l)},s[125]||(s[125]=[e("i",{class:"fas fa-vial"},null,-1),f(" 测试 ",-1)]),8,n1)):c("",!0),lt(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:be=>At(l)},s[126]||(s[126]=[e("i",{class:"fas fa-clock"},null,-1),f(" 定时 ",-1)]),8,i1)):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:be=>Gt(l)},s[127]||(s[127]=[e("i",{class:"fas fa-edit mr-1"},null,-1),f(" 编辑 ",-1)]),8,d1),e("button",{class:"rounded-lg bg-red-50 px-3 py-2 text-xs text-red-600 transition-colors hover:bg-red-100",onClick:be=>Qt(l)},s[128]||(s[128]=[e("i",{class:"fas fa-trash"},null,-1)]),8,u1)])])}),128))])):c("",!0)]),!M.value&&ot.value.length>0?(o(),n("div",g1,[e("div",p1,[e("span",y1," 共 "+u(ot.value.length)+" 条记录 ",1),e("div",c1,[s[129]||(s[129]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),v(e("select",{"onUpdate:modelValue":s[17]||(s[17]=l=>R.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=>te.value=1)},[(o(),n(he,null,We(p,l=>e("option",{key:l,value:l},u(l),9,m1)),64))],544),[[Na,R.value]]),s[130]||(s[130]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",x1,[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:te.value===1,onClick:s[19]||(s[19]=l=>te.value--)},s[131]||(s[131]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,f1),e("div",b1,[Yt.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=>te.value=1)}," 1 ")):c("",!0),qe.value?(o(),n("span",v1," ... ")):c("",!0),(o(!0),n(he,null,We(Dt.value,l=>(o(),n("button",{key:l,class:U(["rounded-md border px-3 py-1 text-xs font-medium transition-colors sm:text-sm",l===te.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:le=>te.value=l},u(l),11,k1))),128)),ba.value?(o(),n("span",h1," ... ")):c("",!0),Zt.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=>te.value=nt.value)},u(nt.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:te.value===nt.value||nt.value===0,onClick:s[22]||(s[22]=l=>te.value++)},s[132]||(s[132]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,w1)])])):c("",!0),y.value&&(!P.value||P.value!=="ccr")?(o(),Je(lr,{key:1,onClose:la,onPlatformChanged:s[23]||(s[23]=l=>P.value=l),onSuccess:da})):y.value&&P.value==="ccr"?(o(),Je(or,{key:2,onClose:la,onSuccess:da})):c("",!0),Qe.value&&it.value&&it.value.platform==="ccr"?(o(),Je(or,{key:3,account:it.value,onClose:s[24]||(s[24]=l=>Qe.value=!1),onSuccess:ua},null,8,["account"])):Qe.value?(o(),Je(lr,{key:4,account:it.value,onClose:s[25]||(s[25]=l=>Qe.value=!1),onSuccess:ua},null,8,["account"])):c("",!0),Be(ir,{"cancel-text":rt(g).cancelText,"confirm-text":rt(g).confirmText,message:rt(g).message,show:rt(Le),title:rt(g).title,onCancel:rt(N),onConfirm:rt(I)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),pe.value?(o(),Je(Oy,{key:5,account:De.value||{},"generated-at":ne.value,history:X.value,loading:we.value,overview:Ce.value,show:pe.value,summary:_.value,onClose:Et},null,8,["account","generated-at","history","loading","overview","show","summary"])):c("",!0),Be(dc,{ref_key:"expiryEditModalRef",ref:A,account:Z.value||{id:null,expiresAt:null,name:""},show:!!Z.value,onClose:Za,onSave:yr},null,8,["account","show"]),Be(Pc,{account:xe.value,show:O.value,onClose:et},null,8,["account","show"]),Be(um,{account:m.value,show:H.value,onClose:Nt,onSaved:Wt},null,8,["account","show"]),Be(C,{modelValue:a.value,"onUpdate:modelValue":s[26]||(s[26]=l=>a.value=l),style:{maxWidth:"1200px"},title:"账户统计汇总",width:"90%"},{default:Pt(()=>[e("div",$1,[e("div",A1,[e("table",C1,[s[134]||(s[134]=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(he,null,We(Jt.value,l=>(o(),n("tr",{key:l.platform},[e("td",U1,u(l.platformLabel),1),e("td",I1,[e("span",T1,u(l.normal),1)]),e("td",_1,[e("span",K1,u(l.unschedulable),1)]),e("td",M1,[e("span",S1,u(l.rateLimit0_1h),1)]),e("td",D1,[e("span",j1,u(l.rateLimit1_5h),1)]),e("td",P1,[e("span",L1,u(l.rateLimit5_12h),1)]),e("td",z1,[e("span",R1,u(l.rateLimit12_24h),1)]),e("td",V1,[e("span",O1,u(l.rateLimitOver24h),1)]),e("td",E1,[e("span",N1,u(l.other),1)]),e("td",W1,u(l.total),1)]))),128)),e("tr",F1,[s[133]||(s[133]=e("td",{class:"border border-gray-300 px-4 py-2 dark:border-gray-600"},"合计",-1)),e("td",q1,[e("span",G1,u(dt.value.normal),1)]),e("td",Q1,[e("span",B1,u(dt.value.unschedulable),1)]),e("td",H1,[e("span",J1,u(dt.value.rateLimit0_1h),1)]),e("td",Y1,[e("span",Z1,u(dt.value.rateLimit1_5h),1)]),e("td",X1,[e("span",ek,u(dt.value.rateLimit5_12h),1)]),e("td",tk,[e("span",ak,u(dt.value.rateLimit12_24h),1)]),e("td",rk,[e("span",sk,u(dt.value.rateLimitOver24h),1)]),e("td",lk,[e("span",ok,u(dt.value.other),1)]),e("td",nk,u(dt.value.total),1)])])])]),s[135]||(s[135]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," 注:限流时间列表示剩余限流时间在指定范围内的账户数量 ",-1))])]),_:1},8,["modelValue"])])}}},xk=fa(ik,[["__scopeId","data-v-e0039b3a"]]);export{xk as default};
|