mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-23 00:53:33 +00:00
32 lines
299 KiB
JavaScript
32 lines
299 KiB
JavaScript
import{a as bs}from"./element-plus-CqiD73Lu.js";import{r as T,aP as vs,o as re,V as ms,x as d,y as n,z as e,L as x,K as f,al as be,aT as ht,O as A,aq as M,aa as ks,P as g,aV as ys,aY as os,C as _,c as ge,Z as hs,q as ss,I as Fe,an as ye,Q as ve,ac as Ke,a5 as as,R as Ye,B as Se,u as je,aX as ws,D as $s,J as Rt,Y as es}from"./vue-vendor-Bsazo-x0.js";import{c as V,s as z,_ as rs,a as As}from"./index-YEDBx2po.js";import{C as cs}from"./ConfirmModal-BETObwo3.js";import{C as Cs}from"./chart-yFHxLHpB.js";import{C as ls}from"./CustomDropdown-CVU5yU-s.js";import"./vendor-Dr8jvgFu.js";const ts=T(!1),ds=T({title:"",message:"",confirmText:"继续",cancelText:"取消"}),vt=T(null);function xs(){return{showConfirmModal:ts,confirmOptions:ds,showConfirm:(xe,K,W="继续",te="取消")=>new Promise(w=>{ds.value={title:xe,message:K,confirmText:W,cancelText:te},vt.value=w,ts.value=!0}),handleConfirm:()=>{ts.value=!1,vt.value&&(vt.value(!0),vt.value=null)},handleCancel:()=>{ts.value=!1,vt.value&&(vt.value(!1),vt.value=null)}}}const fs=vs("accounts",()=>{const B=T([]),Ae=T([]),p=T([]),xe=T([]),K=T([]),W=T([]),te=T([]),w=T([]),h=T(!1),k=T(null),j=T(""),Q=T("asc"),H=async()=>{h.value=!0,k.value=null;try{const y=await V.get("/admin/claude-accounts");if(y.success)B.value=y.data||[];else throw new Error(y.message||"获取Claude账户失败")}catch(y){throw k.value=y.message,y}finally{h.value=!1}},Y=async()=>{h.value=!0,k.value=null;try{const y=await V.get("/admin/claude-console-accounts");if(y.success)Ae.value=y.data||[];else throw new Error(y.message||"获取Claude Console账户失败")}catch(y){throw k.value=y.message,y}finally{h.value=!1}},X=async()=>{h.value=!0,k.value=null;try{const y=await V.get("/admin/bedrock-accounts");if(y.success)p.value=y.data||[];else throw new Error(y.message||"获取Bedrock账户失败")}catch(y){throw k.value=y.message,y}finally{h.value=!1}},J=async()=>{h.value=!0,k.value=null;try{const y=await V.get("/admin/gemini-accounts");if(y.success)xe.value=y.data||[];else throw new Error(y.message||"获取Gemini账户失败")}catch(y){throw k.value=y.message,y}finally{h.value=!1}},G=async()=>{h.value=!0,k.value=null;try{const y=await V.get("/admin/openai-accounts");if(y.success)K.value=y.data||[];else throw new Error(y.message||"获取OpenAI账户失败")}catch(y){throw k.value=y.message,y}finally{h.value=!1}},C=async()=>{h.value=!0,k.value=null;try{const y=await V.get("/admin/azure-openai-accounts");if(y.success)W.value=y.data||[];else throw new Error(y.message||"获取Azure OpenAI账户失败")}catch(y){throw k.value=y.message,y}finally{h.value=!1}},v=async()=>{h.value=!0,k.value=null;try{const y=await V.get("/admin/openai-responses-accounts");if(y.success)te.value=y.data||[];else throw new Error(y.message||"获取OpenAI-Responses账户失败")}catch(y){throw k.value=y.message,y}finally{h.value=!1}},S=async()=>{h.value=!0,k.value=null;try{const y=await V.get("/admin/droid-accounts");if(y.success)w.value=y.data||[];else throw new Error(y.message||"获取Droid账户失败")}catch(y){throw k.value=y.message,y}finally{h.value=!1}};return{claudeAccounts:B,claudeConsoleAccounts:Ae,bedrockAccounts:p,geminiAccounts:xe,openaiAccounts:K,azureOpenaiAccounts:W,openaiResponsesAccounts:te,droidAccounts:w,loading:h,error:k,sortBy:j,sortOrder:Q,fetchClaudeAccounts:H,fetchClaudeConsoleAccounts:Y,fetchBedrockAccounts:X,fetchGeminiAccounts:J,fetchOpenAIAccounts:G,fetchAzureOpenAIAccounts:C,fetchOpenAIResponsesAccounts:v,fetchDroidAccounts:S,fetchAllAccounts:async()=>{h.value=!0,k.value=null;try{await Promise.all([H(),Y(),X(),J(),G(),C(),v(),S()])}catch(y){throw k.value=y.message,y}finally{h.value=!1}},createClaudeAccount:async y=>{h.value=!0,k.value=null;try{const m=await V.post("/admin/claude-accounts",y);if(m.success)return await H(),m.data;throw new Error(m.message||"创建Claude账户失败")}catch(m){throw k.value=m.message,m}finally{h.value=!1}},createClaudeConsoleAccount:async y=>{h.value=!0,k.value=null;try{const m=await V.post("/admin/claude-console-accounts",y);if(m.success)return await Y(),m.data;throw new Error(m.message||"创建Claude Console账户失败")}catch(m){throw k.value=m.message,m}finally{h.value=!1}},createBedrockAccount:async y=>{h.value=!0,k.value=null;try{const m=await V.post("/admin/bedrock-accounts",y);if(m.success)return await X(),m.data;throw new Error(m.message||"创建Bedrock账户失败")}catch(m){throw k.value=m.message,m}finally{h.value=!1}},createGeminiAccount:async y=>{h.value=!0,k.value=null;try{const m=await V.post("/admin/gemini-accounts",y);if(m.success)return await J(),m.data;throw new Error(m.message||"创建Gemini账户失败")}catch(m){throw k.value=m.message,m}finally{h.value=!1}},createOpenAIAccount:async y=>{h.value=!0,k.value=null;try{const m=await V.post("/admin/openai-accounts",y);if(m.success)return await G(),m.data;throw new Error(m.message||"创建OpenAI账户失败")}catch(m){throw k.value=m.message,m}finally{h.value=!1}},createDroidAccount:async y=>{h.value=!0,k.value=null;try{const m=await V.post("/admin/droid-accounts",y);if(m.success)return await S(),m.data;throw new Error(m.message||"创建Droid账户失败")}catch(m){throw k.value=m.message,m}finally{h.value=!1}},updateDroidAccount:async(y,m)=>{h.value=!0,k.value=null;try{const I=await V.put(`/admin/droid-accounts/${y}`,m);if(I.success)return await S(),I.data;throw new Error(I.message||"更新Droid账户失败")}catch(I){throw k.value=I.message,I}finally{h.value=!1}},createAzureOpenAIAccount:async y=>{h.value=!0,k.value=null;try{const m=await V.post("/admin/azure-openai-accounts",y);if(m.success)return await C(),m.data;throw new Error(m.message||"创建Azure OpenAI账户失败")}catch(m){throw k.value=m.message,m}finally{h.value=!1}},createOpenAIResponsesAccount:async y=>{h.value=!0,k.value=null;try{const m=await V.post("/admin/openai-responses-accounts",y);if(m.success)return await v(),m.data;throw new Error(m.message||"创建OpenAI-Responses账户失败")}catch(m){throw k.value=m.message,m}finally{h.value=!1}},updateClaudeAccount:async(y,m)=>{h.value=!0,k.value=null;try{const I=await V.put(`/admin/claude-accounts/${y}`,m);if(I.success)return await H(),I;throw new Error(I.message||"更新Claude账户失败")}catch(I){throw k.value=I.message,I}finally{h.value=!1}},updateClaudeConsoleAccount:async(y,m)=>{h.value=!0,k.value=null;try{const I=await V.put(`/admin/claude-console-accounts/${y}`,m);if(I.success)return await Y(),I;throw new Error(I.message||"更新Claude Console账户失败")}catch(I){throw k.value=I.message,I}finally{h.value=!1}},updateBedrockAccount:async(y,m)=>{h.value=!0,k.value=null;try{const I=await V.put(`/admin/bedrock-accounts/${y}`,m);if(I.success)return await X(),I;throw new Error(I.message||"更新Bedrock账户失败")}catch(I){throw k.value=I.message,I}finally{h.value=!1}},updateGeminiAccount:async(y,m)=>{h.value=!0,k.value=null;try{const I=await V.put(`/admin/gemini-accounts/${y}`,m);if(I.success)return await J(),I;throw new Error(I.message||"更新Gemini账户失败")}catch(I){throw k.value=I.message,I}finally{h.value=!1}},updateOpenAIAccount:async(y,m)=>{h.value=!0,k.value=null;try{const I=await V.put(`/admin/openai-accounts/${y}`,m);if(I.success)return await G(),I;throw new Error(I.message||"更新OpenAI账户失败")}catch(I){throw k.value=I.message,I}finally{h.value=!1}},updateAzureOpenAIAccount:async(y,m)=>{h.value=!0,k.value=null;try{const I=await V.put(`/admin/azure-openai-accounts/${y}`,m);if(I.success)return await C(),I;throw new Error(I.message||"更新Azure OpenAI账户失败")}catch(I){throw k.value=I.message,I}finally{h.value=!1}},updateOpenAIResponsesAccount:async(y,m)=>{h.value=!0,k.value=null;try{const I=await V.put(`/admin/openai-responses-accounts/${y}`,m);if(I.success)return await v(),I;throw new Error(I.message||"更新OpenAI-Responses账户失败")}catch(I){throw k.value=I.message,I}finally{h.value=!1}},toggleAccount:async(y,m)=>{h.value=!0,k.value=null;try{let I;y==="claude"?I=`/admin/claude-accounts/${m}/toggle`:y==="claude-console"?I=`/admin/claude-console-accounts/${m}/toggle`:y==="bedrock"?I=`/admin/bedrock-accounts/${m}/toggle`:y==="gemini"?I=`/admin/gemini-accounts/${m}/toggle`:y==="openai"?I=`/admin/openai-accounts/${m}/toggle`:y==="azure_openai"?I=`/admin/azure-openai-accounts/${m}/toggle`:y==="openai-responses"?I=`/admin/openai-responses-accounts/${m}/toggle`:I=`/admin/openai-accounts/${m}/toggle`;const De=await V.put(I);if(De.success)return y==="claude"?await H():y==="claude-console"?await Y():y==="bedrock"?await X():y==="gemini"?await J():y==="openai"?await G():y==="azure_openai"?await C():y==="openai-responses"?await v():await G(),De;throw new Error(De.message||"切换状态失败")}catch(I){throw k.value=I.message,I}finally{h.value=!1}},deleteAccount:async(y,m)=>{h.value=!0,k.value=null;try{let I;y==="claude"?I=`/admin/claude-accounts/${m}`:y==="claude-console"?I=`/admin/claude-console-accounts/${m}`:y==="bedrock"?I=`/admin/bedrock-accounts/${m}`:y==="gemini"?I=`/admin/gemini-accounts/${m}`:y==="openai"?I=`/admin/openai-accounts/${m}`:y==="azure_openai"?I=`/admin/azure-openai-accounts/${m}`:y==="openai-responses"?I=`/admin/openai-responses-accounts/${m}`:I=`/admin/openai-accounts/${m}`;const De=await V.delete(I);if(De.success)return y==="claude"?await H():y==="claude-console"?await Y():y==="bedrock"?await X():y==="gemini"?await J():y==="openai"?await G():y==="azure_openai"?await C():y==="openai-responses"?await v():await G(),De;throw new Error(De.message||"删除失败")}catch(I){throw k.value=I.message,I}finally{h.value=!1}},refreshClaudeToken:async y=>{h.value=!0,k.value=null;try{const m=await V.post(`/admin/claude-accounts/${y}/refresh`);if(m.success)return await H(),m;throw new Error(m.message||"Token刷新失败")}catch(m){throw k.value=m.message,m}finally{h.value=!1}},generateClaudeAuthUrl:async y=>{try{const m=await V.post("/admin/claude-accounts/generate-auth-url",y);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeClaudeCode:async y=>{try{const m=await V.post("/admin/claude-accounts/exchange-code",y);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateClaudeSetupTokenUrl:async y=>{try{const m=await V.post("/admin/claude-accounts/generate-setup-token-url",y);if(m.success)return m.data;throw new Error(m.message||"生成Setup Token URL失败")}catch(m){throw k.value=m.message,m}},exchangeClaudeSetupTokenCode:async y=>{try{const m=await V.post("/admin/claude-accounts/exchange-setup-token-code",y);if(m.success)return m.data;throw new Error(m.message||"交换Setup Token授权码失败")}catch(m){throw k.value=m.message,m}},generateGeminiAuthUrl:async y=>{try{const m=await V.post("/admin/gemini-accounts/generate-auth-url",y);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeGeminiCode:async y=>{try{const m=await V.post("/admin/gemini-accounts/exchange-code",y);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateOpenAIAuthUrl:async y=>{try{const m=await V.post("/admin/openai-accounts/generate-auth-url",y);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeOpenAICode:async y=>{try{const m=await V.post("/admin/openai-accounts/exchange-code",y);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateDroidAuthUrl:async y=>{k.value=null;try{const m=await V.post("/admin/droid-accounts/generate-auth-url",y);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeDroidCode:async y=>{k.value=null;try{return await V.post("/admin/droid-accounts/exchange-code",y)}catch(m){throw k.value=m.message,m}},sortAccounts:y=>{j.value===y?Q.value=Q.value==="asc"?"desc":"asc":(j.value=y,Q.value="asc")},reset:()=>{B.value=[],Ae.value=[],p.value=[],xe.value=[],K.value=[],W.value=[],te.value=[],w.value=[],h.value=!1,k.value=null,j.value="",Q.value="asc"}}}),Us={class:"space-y-4"},Ts={class:"flex items-center justify-between"},Is={class:"flex cursor-pointer items-center"},Ks={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"},_s={class:"relative"},Ms={key:0,class:"mt-1 text-xs text-red-500"},Ss={key:1,class:"mt-1 text-xs text-green-500"},Ps={class:"grid grid-cols-2 gap-4"},Ds={class:"space-y-4"},Vs={class:"flex items-center"},Rs={key:0,class:"grid grid-cols-2 gap-4"},zs={class:"relative"},js=["type"],ns={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(B,{emit:Ae}){const p=B,xe=Ae,K=T({...p.modelValue}),W=T(!!(K.value.username||K.value.password)),te=T(!1),w=T(""),h=T(""),k=T(!1);re(()=>p.modelValue,G=>{JSON.stringify(G)!==JSON.stringify(K.value)&&(K.value={...G},W.value=!!(G.username||G.password))},{deep:!0}),re(()=>K.value.enabled,()=>{Q()}),re(()=>K.value.type,()=>{Q()}),re(()=>K.value.host,()=>{Q()}),re(()=>K.value.port,()=>{Q()}),re(()=>K.value.username,()=>{Q()}),re(()=>K.value.password,()=>{Q()}),re(W,G=>{G||(K.value.username="",K.value.password="",Q())});let j=null;function Q(){j&&clearTimeout(j),j=setTimeout(()=>{const G={...K.value};W.value||(G.username="",G.password=""),xe("update:modelValue",G)},100)}function H(){if(h.value="",k.value=!1,!!w.value)try{const G=w.value.split("#")[0].trim();if(!G)return;const C=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,v=G.match(C);if(!v){const we=/^([^:]+):(\d+)$/,_e=G.match(we);if(_e){K.value.type="socks5",K.value.host=_e[1],K.value.port=_e[2],K.value.username="",K.value.password="",W.value=!1,k.value=!0,Q(),setTimeout(()=>{k.value=!1},3e3);return}h.value="无效的代理URL格式,请检查输入";return}const[,S,ee,L,U,R]=v;K.value.type=S.toLowerCase(),K.value.host=U,K.value.port=R,ee&&L?(K.value.username=decodeURIComponent(ee),K.value.password=decodeURIComponent(L),W.value=!0):(K.value.username="",K.value.password="",W.value=!1),k.value=!0,Q(),setTimeout(()=>{k.value=!1},3e3)}catch{h.value="解析失败,请检查URL格式"}}function Y(){w.value="",h.value="",k.value=!1}function X(){setTimeout(()=>{H()},0)}function J(){const G=w.value.trim();G.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(G)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(G))&&H():/^[^:]+:\d{2,5}$/.test(G)&&H()}return ms(()=>{j&&clearTimeout(j)}),(G,C)=>(n(),d("div",Us,[e("div",Ts,[C[10]||(C[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",Is,[f(e("input",{"onUpdate:modelValue":C[0]||(C[0]=v=>K.value.enabled=v),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[be,K.value.enabled]]),C[9]||(C[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),K.value.enabled?(n(),d("div",Ks,[C[22]||(C[22]=ht('<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,[C[14]||(C[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[A(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",_s,[f(e("input",{"onUpdate:modelValue":C[1]||(C[1]=v=>w.value=v),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:J,onKeyup:ks(H,["enter"]),onPaste:X},null,544),[[M,w.value]]),w.value?(n(),d("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:Y},C[11]||(C[11]=[e("i",{class:"fas fa-times"},null,-1)]))):x("",!0)]),h.value?(n(),d("p",Ms,[C[12]||(C[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),A(" "+g(h.value),1)])):k.value?(n(),d("p",Ss,C[13]||(C[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),A(" 代理配置已自动填充 ",-1)]))):x("",!0)]),C[23]||(C[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[C[16]||(C[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),f(e("select",{"onUpdate:modelValue":C[2]||(C[2]=v=>K.value.type=v),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},C[15]||(C[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[ys,K.value.type]])]),e("div",Ps,[e("div",null,[C[17]||(C[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),f(e("input",{"onUpdate:modelValue":C[3]||(C[3]=v=>K.value.host=v),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),[[M,K.value.host]])]),e("div",null,[C[18]||(C[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),f(e("input",{"onUpdate:modelValue":C[4]||(C[4]=v=>K.value.port=v),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),[[M,K.value.port]])])]),e("div",Ds,[e("div",Vs,[f(e("input",{id:"proxyAuth","onUpdate:modelValue":C[5]||(C[5]=v=>W.value=v),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[be,W.value]]),C[19]||(C[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),W.value?(n(),d("div",Rs,[e("div",null,[C[20]||(C[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),f(e("input",{"onUpdate:modelValue":C[6]||(C[6]=v=>K.value.username=v),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),[[M,K.value.username]])]),e("div",null,[C[21]||(C[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",zs,[f(e("input",{"onUpdate:modelValue":C[7]||(C[7]=v=>K.value.password=v),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:te.value?"text":"password"},null,8,js),[[os,K.value.password]]),e("button",{class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:C[8]||(C[8]=v=>te.value=!te.value)},[e("i",{class:_(te.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):x("",!0)]),C[24]||(C[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,"提示:"),A("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):x("",!0)]))}},Os={class:"space-y-6"},Ls={key:0},Ns={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},Es={class:"flex items-start gap-4"},qs={class:"flex-1"},Ws={class:"space-y-4"},Gs={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"},Qs={class:"flex-1"},Bs=["disabled"],Hs={key:0,class:"fas fa-link mr-2"},Js={key:1,class:"loading-spinner mr-2"},Ys={key:1,class:"space-y-3"},Zs={class:"flex items-center gap-2"},Xs=["value"],ea={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},ta={class:"flex items-start gap-3"},sa={class:"flex-1"},aa={class:"space-y-3"},ra={key:1},la={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},oa={class:"flex items-start gap-4"},na={class:"flex-1"},ia={class:"space-y-4"},da={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},ua={class:"flex items-start gap-3"},pa={class:"flex-1"},ga=["disabled"],ma={key:0,class:"fas fa-link mr-2"},ya={key:1,class:"loading-spinner mr-2"},ca={key:1,class:"space-y-3"},xa={class:"flex items-center gap-2"},fa=["value"],ba={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},va={class:"flex items-start gap-3"},ka={class:"flex-1"},ha={class:"space-y-3"},wa={key:2},$a={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},Aa={class:"flex items-start gap-4"},Ca={class:"flex-1"},Ua={class:"space-y-4"},Ta={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Ia={class:"flex items-start gap-3"},Ka={class:"flex-1"},_a=["disabled"],Ma={key:0,class:"fas fa-link mr-2"},Sa={key:1,class:"loading-spinner mr-2"},Pa={key:1,class:"space-y-3"},Da={class:"flex items-center gap-2"},Va=["value"],Ra={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},za={class:"flex items-start gap-3"},ja={class:"flex-1"},Oa={class:"space-y-3"},La={key:3},Na={class:"rounded-lg border border-cyan-200 bg-cyan-50 p-6 dark:border-cyan-700 dark:bg-cyan-900/30"},Ea={class:"flex items-start gap-4"},qa={class:"flex-1"},Wa={class:"space-y-4"},Ga={class:"rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"},Fa={class:"flex items-start gap-3"},Qa={class:"flex-1"},Ba=["disabled"],Ha={key:0,class:"fas fa-link mr-2"},Ja={key:1,class:"loading-spinner mr-2"},Ya={key:1,class:"space-y-4"},Za={class:"space-y-2"},Xa={class:"flex flex-col gap-2 rounded-md border border-cyan-200 bg-white p-3 dark:border-cyan-700 dark:bg-gray-800"},er={class:"flex items-center gap-2"},tr=["value"],sr={class:"space-y-2"},ar={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"},rr={class:"font-mono text-xl font-semibold text-cyan-700 dark:text-cyan-200"},lr={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},or={class:"flex gap-3 pt-4"},nr=["disabled"],ir={key:0,class:"loading-spinner mr-2"},dr={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(B,{emit:Ae}){const p=B,xe=Ae,K=fs(),W=T(!1),te=T(!1),w=T(""),h=T(""),k=T(!1),j=T(""),Q=T(""),H=T(""),Y=T(""),X=T(0);let J=null;const G=ge(()=>p.platform==="droid"?!!j.value:w.value&&h.value.trim()),C=ge(()=>{if(!X.value||X.value<=0)return"00:00";const P=Math.floor(X.value/60),u=X.value%60;return`${P.toString().padStart(2,"0")}:${u.toString().padStart(2,"0")}`}),v=P=>{if(S(),!P||P<=0){X.value=0;return}X.value=Math.floor(P),J=setInterval(()=>{X.value<=1?(X.value=0,S()):X.value-=1},1e3)},S=()=>{J&&(clearInterval(J),J=null)};re(h,P=>{if(p.platform==="droid"||!P||typeof P!="string")return;const u=P.trim();if(!u)return;if(u.startsWith("http://")||u.startsWith("https://"))if(u.startsWith("http://localhost:45462")||u.startsWith("http://localhost:1455"))try{const s=new URL(u).searchParams.get("code");s?(h.value=s,z("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):z("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(Z){console.error("Failed to parse URL:",Z),z("链接格式错误,请检查是否为完整的 URL","error")}else if(p.platform==="gemini"||p.platform==="openai")try{const s=new URL(u).searchParams.get("code");s&&(h.value=s,z("成功提取授权码!","success"))}catch{}else z("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const ee=async()=>{var P;S(),w.value="",h.value="",Q.value="",H.value="",Y.value="",X.value=0,j.value="",k.value=!1,W.value=!0;try{const u=(P=p.proxy)!=null&&P.enabled?{proxy:{type:p.proxy.type,host:p.proxy.host,port:parseInt(p.proxy.port),username:p.proxy.username||null,password:p.proxy.password||null}}:{};if(p.platform==="claude"){const E=await K.generateClaudeAuthUrl(u);w.value=E.authUrl,j.value=E.sessionId}else if(p.platform==="gemini"){const E=await K.generateGeminiAuthUrl(u);w.value=E.authUrl,j.value=E.sessionId}else if(p.platform==="openai"){const E=await K.generateOpenAIAuthUrl(u);w.value=E.authUrl,j.value=E.sessionId}else if(p.platform==="droid"){const E=await K.generateDroidAuthUrl(u);w.value=E.verificationUriComplete||E.verificationUri,H.value=E.verificationUri,Y.value=E.verificationUriComplete||E.verificationUri,Q.value=E.userCode,v(E.expiresIn||300),j.value=E.sessionId}}catch(u){z(u.message||"生成授权链接失败","error")}finally{W.value=!1}},L=()=>{S(),w.value="",h.value="",Q.value="",H.value="",Y.value="",X.value=0,j.value="",ee()},U=async()=>{if(!w.value){z("请先生成授权链接","warning");return}try{await navigator.clipboard.writeText(w.value),k.value=!0,z("链接已复制","success"),setTimeout(()=>{k.value=!1},2e3)}catch{const u=document.createElement("input");u.value=w.value,document.body.appendChild(u),u.select(),document.execCommand("copy"),document.body.removeChild(u),k.value=!0,z("链接已复制","success"),setTimeout(()=>{k.value=!1},2e3)}},R=async()=>{if(!Q.value){z("请先生成授权验证码","warning");return}try{await navigator.clipboard.writeText(Q.value),z("验证码已复制","success")}catch{const u=document.createElement("input");u.value=Q.value,document.body.appendChild(u),u.select(),document.execCommand("copy"),document.body.removeChild(u),z("验证码已复制","success")}},we=()=>{Y.value?window.open(Y.value,"_blank","noopener"):H.value&&window.open(H.value,"_blank","noopener")},_e=async()=>{var P;if(G.value){te.value=!0;try{let u={};p.platform==="claude"?u={sessionId:j.value,callbackUrl:h.value.trim()}:p.platform==="gemini"?u={code:h.value.trim(),sessionId:j.value}:p.platform==="openai"?u={code:h.value.trim(),sessionId:j.value}:p.platform==="droid"&&(u={sessionId:j.value}),(P=p.proxy)!=null&&P.enabled&&(u.proxy={type:p.proxy.type,host:p.proxy.host,port:parseInt(p.proxy.port),username:p.proxy.username||null,password:p.proxy.password||null});let E;if(p.platform==="claude")E=await K.exchangeClaudeCode(u);else if(p.platform==="gemini")E=await K.exchangeGeminiCode(u);else if(p.platform==="openai")E=await K.exchangeOpenAICode(u);else if(p.platform==="droid"){const Z=await K.exchangeDroidCode(u);if(!Z.success){if(Z.pending){const s=Z.message||"授权尚未完成,请在浏览器确认后稍候再次尝试。";z(s,"info"),typeof Z.expiresIn=="number"&&Z.expiresIn>=0&&v(Z.expiresIn);return}throw new Error(Z.message||"授权失败,请重试")}E=Z.data,S()}xe("success",E)}catch(u){z(u.message||"授权失败,请检查授权码是否正确","error")}finally{te.value=!1}}};return hs(()=>{S()}),(P,u)=>(n(),d("div",Os,[B.platform==="claude"?(n(),d("div",Ls,[e("div",Ns,[e("div",Es,[u[15]||(u[15]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-link text-white"})],-1)),e("div",qs,[u[13]||(u[13]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"},"Claude 账户授权",-1)),u[14]||(u[14]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤完成 Claude 账户的授权: ",-1)),e("div",Ws,[e("div",Gs,[e("div",Fs,[u[6]||(u[6]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Qs,[u[5]||(u[5]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),w.value?(n(),d("div",Ys,[e("div",Zs,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:w.value},null,8,Xs),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:U},[e("i",{class:_(k.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:L},u[4]||(u[4]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),A("重新生成 ",-1)]))])):(n(),d("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:W.value,onClick:ee},[W.value?(n(),d("div",Js)):(n(),d("i",Hs)),A(" "+g(W.value?"生成中...":"生成授权链接"),1)],8,Bs))])])]),u[12]||(u[12]=ht('<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",ea,[e("div",ta,[u[11]||(u[11]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",sa,[u[9]||(u[9]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),u[10]||(u[10]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"},[A(" 授权完成后,页面会显示一个 "),e("strong",null,"Authorization Code"),A(",请将其复制并粘贴到下方输入框: ")],-1)),e("div",aa,[e("div",null,[u[7]||(u[7]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),A("Authorization Code ")],-1)),f(e("textarea",{"onUpdate:modelValue":u[0]||(u[0]=E=>h.value=E),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[M,h.value]])]),u[8]||(u[8]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),A(" 请粘贴从Claude页面复制的Authorization Code ")],-1))])])])])])])])])])):B.platform==="gemini"?(n(),d("div",ra,[e("div",la,[e("div",oa,[u[27]||(u[27]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-green-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",na,[u[25]||(u[25]=e("h4",{class:"mb-3 font-semibold text-green-900 dark:text-green-200"},"Gemini 账户授权",-1)),u[26]||(u[26]=e("p",{class:"mb-4 text-sm text-green-800 dark:text-green-300"}," 请按照以下步骤完成 Gemini 账户的授权: ",-1)),e("div",ia,[e("div",da,[e("div",ua,[u[18]||(u[18]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",pa,[u[17]||(u[17]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 点击下方按钮生成授权链接 ",-1)),w.value?(n(),d("div",ca,[e("div",xa,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:w.value},null,8,fa),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:U},[e("i",{class:_(k.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-green-600 hover:text-green-700",onClick:L},u[16]||(u[16]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),A("重新生成 ",-1)]))])):(n(),d("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:W.value,onClick:ee},[W.value?(n(),d("div",ya)):(n(),d("i",ma)),A(" "+g(W.value?"生成中...":"生成授权链接"),1)],8,ga))])])]),u[24]||(u[24]=ht('<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",ba,[e("div",va,[u[23]||(u[23]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",ka,[u[21]||(u[21]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 输入 Authorization Code ",-1)),u[22]||(u[22]=e("p",{class:"mb-3 text-sm text-green-700 dark:text-green-300"}," 授权完成后,页面会显示一个 Authorization Code,请将其复制并粘贴到下方输入框: ",-1)),e("div",ha,[e("div",null,[u[19]||(u[19]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-green-500"}),A("Authorization Code ")],-1)),f(e("textarea",{"onUpdate:modelValue":u[1]||(u[1]=E=>h.value=E),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[M,h.value]])]),u[20]||(u[20]=e("div",{class:"mt-2 space-y-1"},[e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-check-circle mr-1 text-green-500"}),A(" 请粘贴从Gemini页面复制的Authorization Code ")])],-1))])])])])])])])])])):B.platform==="openai"?(n(),d("div",wa,[e("div",$a,[e("div",Aa,[u[39]||(u[39]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-orange-500"},[e("i",{class:"fas fa-brain text-white"})],-1)),e("div",Ca,[u[37]||(u[37]=e("h4",{class:"mb-3 font-semibold text-orange-900 dark:text-orange-200"},"OpenAI 账户授权",-1)),u[38]||(u[38]=e("p",{class:"mb-4 text-sm text-orange-800 dark:text-orange-300"}," 请按照以下步骤完成 OpenAI 账户的授权: ",-1)),e("div",Ua,[e("div",Ta,[e("div",Ia,[u[30]||(u[30]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Ka,[u[29]||(u[29]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 点击下方按钮生成授权链接 ",-1)),w.value?(n(),d("div",Pa,[e("div",Da,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:w.value},null,8,Va),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:U},[e("i",{class:_(k.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-orange-600 hover:text-orange-700",onClick:L},u[28]||(u[28]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),A("重新生成 ",-1)]))])):(n(),d("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:W.value,onClick:ee},[W.value?(n(),d("div",Sa)):(n(),d("i",Ma)),A(" "+g(W.value?"生成中...":"生成授权链接"),1)],8,_a))])])]),u[36]||(u[36]=ht('<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",Ra,[e("div",za,[u[35]||(u[35]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",ja,[u[33]||(u[33]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 输入授权链接或 Code ",-1)),u[34]||(u[34]=e("p",{class:"mb-3 text-sm text-orange-700 dark:text-orange-300"},[A(" 授权完成后,当页面地址变为 "),e("strong",{class:"font-mono"},"http://localhost:1455/..."),A(" 时: ")],-1)),e("div",Oa,[e("div",null,[u[31]||(u[31]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-link mr-2 text-orange-500"}),A("授权链接或 Code ")],-1)),f(e("textarea",{"onUpdate:modelValue":u[2]||(u[2]=E=>h.value=E),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),[[M,h.value]])]),u[32]||(u[32]=ht('<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))])])])])])])])])])):B.platform==="droid"?(n(),d("div",La,[e("div",Na,[e("div",Ea,[u[51]||(u[51]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-cyan-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",qa,[u[49]||(u[49]=e("h4",{class:"mb-3 font-semibold text-cyan-900 dark:text-cyan-200"},"Droid 账户授权",-1)),u[50]||(u[50]=e("p",{class:"mb-4 text-sm text-cyan-800 dark:text-cyan-300"}," 请按照以下步骤完成 Factory (Droid) 账户的授权: ",-1)),e("div",Wa,[e("div",Ga,[e("div",Fa,[u[47]||(u[47]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Qa,[u[46]||(u[46]=e("p",{class:"mb-2 font-medium text-cyan-900 dark:text-cyan-200"}," 点击下方按钮生成授权链接 ",-1)),w.value?(n(),d("div",Ya,[e("div",Za,[u[42]||(u[42]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权链接",-1)),e("div",Xa,[e("div",er,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:w.value},null,8,tr),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:U},[e("i",{class:_(k.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("div",{class:"flex flex-wrap items-center gap-2"},[e("button",{class:"inline-flex items-center gap-1 rounded-md border border-cyan-200 bg-white px-3 py-1.5 text-xs font-medium text-cyan-600 shadow-sm transition-colors hover:border-cyan-300 hover:bg-cyan-50 dark:border-cyan-700 dark:bg-cyan-900/40 dark:text-cyan-200 dark:hover:border-cyan-500 dark:hover:bg-cyan-900/60",onClick:we},u[40]||(u[40]=[e("i",{class:"fas fa-external-link-alt text-xs"},null,-1),A(" 在新标签中打开 ",-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:L},u[41]||(u[41]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),A("重新生成 ",-1)]))])])]),e("div",sr,[u[44]||(u[44]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权验证码",-1)),e("div",ar,[e("span",rr,g(Q.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:R},u[43]||(u[43]=[e("i",{class:"fas fa-copy mr-1"},null,-1),A("复制 ",-1)]))])]),e("div",lr,[e("span",null,[u[45]||(u[45]=e("i",{class:"fas fa-hourglass-half mr-1 text-cyan-500"},null,-1)),A(" 剩余有效期:"+g(C.value),1)])])])):(n(),d("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:W.value,onClick:ee},[W.value?(n(),d("div",Ja)):(n(),d("i",Ha)),A(" "+g(W.value?"生成中...":"生成授权链接"),1)],8,Ba))])])]),u[48]||(u[48]=ht('<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))])])])])])):x("",!0),e("div",or,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:u[3]||(u[3]=E=>P.$emit("back"))}," 上一步 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!G.value||te.value,type:"button",onClick:_e},[te.value?(n(),d("div",ir)):x("",!0),A(" "+g(te.value?"验证中...":"完成授权"),1)],8,nr)])]))}},ur={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},pr={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"},gr={class:"mb-4 flex items-center justify-between sm:mb-6"},mr={class:"mb-6"},yr={key:0,class:"mb-6 rounded-lg border border-blue-200 bg-blue-50 p-4"},cr={class:"space-y-4"},xr={class:"flex gap-4"},fr={class:"flex cursor-pointer items-center"},br={class:"flex cursor-pointer items-center"},vr={class:"flex cursor-pointer items-center"},kr={class:"flex cursor-pointer items-center"},hr={class:"flex gap-3"},wr=["disabled"],$r={key:0,class:"loading-spinner mr-2"},Ar={class:"space-y-4"},Cr={key:0,class:"py-8 text-center"},Ur={key:1,class:"rounded-lg bg-gray-50 py-8 text-center"},Tr={key:2,class:"grid grid-cols-1 gap-4 md:grid-cols-2"},Ir={class:"mb-3 flex items-start justify-between"},Kr={class:"flex-1"},_r={class:"font-semibold text-gray-900"},Mr={class:"mt-1 text-sm text-gray-500"},Sr={class:"ml-4 flex items-center gap-2"},Pr={class:"flex items-center justify-between text-sm text-gray-600"},Dr={class:"flex items-center gap-4"},Vr={class:"flex items-center gap-2"},Rr=["onClick"],zr=["disabled","onClick"],jr={key:1,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Or={class:"modal-content w-full max-w-lg p-4 sm:p-6"},Lr={class:"space-y-4"},Nr={class:"rounded-lg bg-gray-100 px-3 py-2 text-sm text-gray-600"},Er={class:"flex gap-3 pt-4"},qr=["disabled"],Wr={key:0,class:"loading-spinner mr-2"},Gr={__name:"GroupManagementModal",emits:["close","refresh"],setup(B,{emit:Ae}){const p=Ae,xe=T(!0),K=T(!1),W=T([]),te=T(!1),w=T(!1),h=T({name:"",platform:"claude",description:""}),k=T(!1),j=T(!1),Q=T(null),H=T({name:"",platform:"",description:""}),Y=L=>L?new Date(L).toLocaleDateString("zh-CN"):"-",X=async()=>{K.value=!0;try{const L=await V.get("/admin/account-groups");W.value=L.data||[]}catch{z("加载分组列表失败","error")}finally{K.value=!1}},J=async()=>{var L,U;if(!h.value.name||!h.value.platform){z("请填写必填项","error");return}w.value=!0;try{await V.post("/admin/account-groups",{name:h.value.name,platform:h.value.platform,description:h.value.description}),z("分组创建成功","success"),G(),await X(),p("refresh")}catch(R){z(((U=(L=R.response)==null?void 0:L.data)==null?void 0:U.error)||"创建分组失败","error")}finally{w.value=!1}},G=()=>{te.value=!1,h.value={name:"",platform:"claude",description:""}},C=L=>{Q.value=L,H.value={name:L.name,platform:L.platform,description:L.description||""},k.value=!0},v=async()=>{var L,U;if(!H.value.name){z("请填写分组名称","error");return}j.value=!0;try{await V.put(`/admin/account-groups/${Q.value.id}`,{name:H.value.name,description:H.value.description}),z("分组更新成功","success"),S(),await X(),p("refresh")}catch(R){z(((U=(L=R.response)==null?void 0:L.data)==null?void 0:U.error)||"更新分组失败","error")}finally{j.value=!1}},S=()=>{k.value=!1,Q.value=null,H.value={name:"",platform:"",description:""}},ee=async L=>{var U,R;if(L.memberCount>0){z("分组内还有成员,无法删除","error");return}if(confirm(`确定要删除分组 "${L.name}" 吗?`))try{await V.delete(`/admin/account-groups/${L.id}`),z("分组删除成功","success"),await X(),p("refresh")}catch(we){z(((R=(U=we.response)==null?void 0:U.data)==null?void 0:R.error)||"删除分组失败","error")}};return ss(()=>{X()}),(L,U)=>(n(),Fe(as,{to:"body"},[xe.value?(n(),d("div",ur,[e("div",pr,[e("div",gr,[U[11]||(U[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:U[0]||(U[0]=R=>L.$emit("close"))},U[10]||(U[10]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",mr,[e("button",{class:"btn btn-primary px-4 py-2",onClick:U[1]||(U[1]=R=>te.value=!0)},U[12]||(U[12]=[e("i",{class:"fas fa-plus mr-2"},null,-1),A(" 创建新分组 ",-1)]))]),te.value?(n(),d("div",yr,[U[20]||(U[20]=e("h4",{class:"mb-4 text-lg font-semibold text-gray-900"},"创建新分组",-1)),e("div",cr,[e("div",null,[U[13]||(U[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),f(e("input",{"onUpdate:modelValue":U[2]||(U[2]=R=>h.value.name=R),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[M,h.value.name]])]),e("div",null,[U[18]||(U[18]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型 *",-1)),e("div",xr,[e("label",fr,[f(e("input",{"onUpdate:modelValue":U[3]||(U[3]=R=>h.value.platform=R),class:"mr-2",type:"radio",value:"claude"},null,512),[[ye,h.value.platform]]),U[14]||(U[14]=e("span",{class:"text-sm text-gray-700"},"Claude",-1))]),e("label",br,[f(e("input",{"onUpdate:modelValue":U[4]||(U[4]=R=>h.value.platform=R),class:"mr-2",type:"radio",value:"gemini"},null,512),[[ye,h.value.platform]]),U[15]||(U[15]=e("span",{class:"text-sm text-gray-700"},"Gemini",-1))]),e("label",vr,[f(e("input",{"onUpdate:modelValue":U[5]||(U[5]=R=>h.value.platform=R),class:"mr-2",type:"radio",value:"openai"},null,512),[[ye,h.value.platform]]),U[16]||(U[16]=e("span",{class:"text-sm text-gray-700"},"OpenAI",-1))]),e("label",kr,[f(e("input",{"onUpdate:modelValue":U[6]||(U[6]=R=>h.value.platform=R),class:"mr-2",type:"radio",value:"droid"},null,512),[[ye,h.value.platform]]),U[17]||(U[17]=e("span",{class:"text-sm text-gray-700"},"Droid",-1))])])]),e("div",null,[U[19]||(U[19]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),f(e("textarea",{"onUpdate:modelValue":U[7]||(U[7]=R=>h.value.description=R),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[M,h.value.description]])]),e("div",hr,[e("button",{class:"btn btn-primary px-4 py-2",disabled:!h.value.name||!h.value.platform||w.value,onClick:J},[w.value?(n(),d("div",$r)):x("",!0),A(" "+g(w.value?"创建中...":"创建"),1)],8,wr),e("button",{class:"btn btn-secondary px-4 py-2",onClick:G},"取消")])])])):x("",!0),e("div",Ar,[K.value?(n(),d("div",Cr,U[21]||(U[21]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500"},"加载中...",-1)]))):W.value.length===0?(n(),d("div",Ur,U[22]||(U[22]=[e("i",{class:"fas fa-layer-group mb-4 text-4xl text-gray-300"},null,-1),e("p",{class:"text-gray-500"},"暂无分组",-1)]))):(n(),d("div",Tr,[(n(!0),d(ve,null,Ke(W.value,R=>(n(),d("div",{key:R.id,class:"rounded-lg border bg-white p-4 transition-shadow hover:shadow-md"},[e("div",Ir,[e("div",Kr,[e("h4",_r,g(R.name),1),e("p",Mr,g(R.description||"暂无描述"),1)]),e("div",Sr,[e("span",{class:_(["rounded-full px-2 py-1 text-xs font-medium",R.platform==="claude"?"bg-purple-100 text-purple-700":R.platform==="gemini"?"bg-blue-100 text-blue-700":R.platform==="openai"?"bg-gray-100 text-gray-700":"bg-cyan-100 text-cyan-700"])},g(R.platform==="claude"?"Claude":R.platform==="gemini"?"Gemini":R.platform==="openai"?"OpenAI":"Droid"),3)])]),e("div",Pr,[e("div",Dr,[e("span",null,[U[23]||(U[23]=e("i",{class:"fas fa-users mr-1"},null,-1)),A(" "+g(R.memberCount||0)+" 个成员 ",1)]),e("span",null,[U[24]||(U[24]=e("i",{class:"fas fa-clock mr-1"},null,-1)),A(" "+g(Y(R.createdAt)),1)])]),e("div",Vr,[e("button",{class:"text-blue-600 transition-colors hover:text-blue-800",title:"编辑",onClick:we=>C(R)},U[25]||(U[25]=[e("i",{class:"fas fa-edit"},null,-1)]),8,Rr),e("button",{class:"text-red-600 transition-colors hover:text-red-800",disabled:R.memberCount>0,title:"删除",onClick:we=>ee(R)},U[26]||(U[26]=[e("i",{class:"fas fa-trash"},null,-1)]),8,zr)])])]))),128))]))])])])):x("",!0),k.value?(n(),d("div",jr,[e("div",Or,[e("div",{class:"mb-4 flex items-center justify-between"},[U[28]||(U[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:S},U[27]||(U[27]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",Lr,[e("div",null,[U[29]||(U[29]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),f(e("input",{"onUpdate:modelValue":U[8]||(U[8]=R=>H.value.name=R),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[M,H.value.name]])]),e("div",null,[U[31]||(U[31]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型",-1)),e("div",Nr,[A(g(H.value.platform==="claude"?"Claude":H.value.platform==="gemini"?"Gemini":"OpenAI")+" ",1),U[30]||(U[30]=e("span",{class:"ml-2 text-xs text-gray-500"},"(不可修改)",-1))])]),e("div",null,[U[32]||(U[32]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),f(e("textarea",{"onUpdate:modelValue":U[9]||(U[9]=R=>H.value.description=R),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[M,H.value.description]])]),e("div",Er,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!H.value.name||j.value,onClick:v},[j.value?(n(),d("div",Wr)):x("",!0),A(" "+g(j.value?"更新中...":"更新"),1)],8,qr),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:S},"取消")])])])])):x("",!0)]))}},Fr={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Qr={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"},Br={class:"mb-4 flex items-center justify-between sm:mb-6"},Hr={class:"flex items-center gap-2 sm:gap-3"},Jr={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Yr={key:0,class:"mb-4 flex items-center justify-center sm:mb-8"},Zr={class:"flex items-center space-x-2 sm:space-x-4"},Xr={class:"flex items-center"},el={class:"flex items-center"},tl={key:1},sl={class:"space-y-6"},al={key:0},rl={class:"space-y-3"},ll={class:"grid grid-cols-2 gap-2 sm:grid-cols-4"},ol={class:"p-3"},nl={class:"flex items-center justify-between"},il={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-indigo-500"},dl={class:"p-3"},ul={class:"flex items-center justify-between"},pl={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-emerald-500"},gl={class:"p-3"},ml={class:"flex items-center justify-between"},yl={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-blue-500"},cl={class:"p-3"},xl={class:"flex items-center justify-between"},fl={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-rose-500"},bl={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"},vl={class:"grid grid-cols-2 gap-2 sm:grid-cols-3"},kl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-indigo-500"},hl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},wl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-orange-500"},$l={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-cyan-500"},Al={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-emerald-500"},Cl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-teal-500"},Ul={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},Tl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},Il={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-rose-500"},Kl={key:1},_l={class:"flex flex-wrap gap-4"},Ml={class:"flex cursor-pointer items-center"},Sl={class:"text-sm text-gray-700 dark:text-gray-300"},Pl={key:0},Dl={key:0,class:"flex cursor-pointer items-center"},Vl={class:"flex cursor-pointer items-center"},Rl={key:1,class:"flex cursor-pointer items-center"},zl={key:0,class:"mt-1 text-xs text-red-500"},jl={class:"flex gap-4"},Ol={class:"flex cursor-pointer items-center"},Ll={class:"flex cursor-pointer items-center"},Nl={class:"flex cursor-pointer items-center"},El={key:2},ql={class:"flex gap-2"},Wl={class:"flex-1"},Gl={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},Fl={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},Ql=["value"],Bl={class:"text-sm text-gray-700 dark:text-gray-200"},Hl={key:3},Jl={key:4,class:"space-y-4"},Yl={key:0,class:"mt-1 text-xs text-red-500"},Zl={key:0,class:"mt-1 text-xs text-red-500"},Xl={key:0,class:"mt-1 text-xs text-red-500"},eo={key:5,class:"space-y-4"},to={key:0,class:"mt-1 text-xs text-red-500"},so={key:0,class:"mt-1 text-xs text-red-500"},ao={key:0,class:"mt-1 text-xs text-red-500"},ro={class:"flex flex-wrap gap-2"},lo=["value"],oo={class:"text-sm text-gray-700 dark:text-gray-300"},no={key:6},io={class:"mb-3"},uo={class:"inline-flex cursor-pointer items-center"},po={key:0},go={key:7,class:"space-y-4"},mo={key:0,class:"mt-1 text-xs text-red-500"},yo={key:0,class:"mt-1 text-xs text-red-500"},co={class:"grid grid-cols-2 gap-4"},xo={class:"mb-4 flex gap-2"},fo={key:0},bo={class:"mb-3 grid grid-cols-2 gap-2"},vo=["value"],ko={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},ho={class:"text-xs text-gray-500 dark:text-gray-400"},wo={key:0},$o={key:1},Ao={class:"mb-3 space-y-2"},Co=["onUpdate:modelValue"],Uo=["onUpdate:modelValue"],To=["onClick"],Io={class:"mt-3 flex flex-wrap gap-2"},Ko={class:"mb-3"},_o={class:"inline-flex cursor-pointer items-center"},Mo={key:0},So={key:8,class:"space-y-4"},Po={class:"relative"},Do=["type"],Vo={key:9},Ro={class:"flex gap-4"},zo={class:"flex cursor-pointer items-center"},jo={class:"flex cursor-pointer items-center"},Oo={key:10,class:"mt-4"},Lo={class:"flex items-start"},No={key:11,class:"mt-4"},Eo={class:"flex items-start"},qo={class:"ml-3"},Wo={key:0,class:"mt-1"},Go={class:"flex items-center justify-between"},Fo={class:"text-xs text-green-600 dark:text-green-400"},Qo=["disabled"],Bo={key:0,class:"fas fa-trash-alt mr-1"},Ho={key:1,class:"loading-spinner mr-1"},Jo={key:1,class:"mt-1"},Yo={key:12,class:"mt-4"},Zo={class:"flex items-start"},Xo={class:"ml-3 flex-1"},en={key:0,class:"mt-3"},tn={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},sn={class:"flex items-center gap-2"},an={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"},rn={class:"text-blue-600 dark:text-blue-400"},ln={class:"text-gray-500 dark:text-gray-500"},on={class:"text-blue-600 dark:text-blue-400"},nn={key:13,class:"space-y-4 rounded-lg border border-blue-200 bg-blue-50 p-4"},dn={class:"mb-4 flex items-start gap-3"},un={key:0,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},pn={key:1,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},gn={key:2,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},mn={key:3,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},yn={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"},cn={key:0,class:"text-xs text-blue-800 dark:text-blue-300"},xn={key:1,class:"text-xs text-blue-800 dark:text-blue-300"},fn={key:2,class:"text-xs text-blue-800 dark:text-blue-300"},bn={key:3,class:"text-xs text-blue-800 dark:text-blue-300"},vn={key:4,class:"text-xs text-blue-600 dark:text-blue-400"},kn={key:5,class:"text-xs text-red-600 dark:text-red-400"},hn={key:0},wn={key:1},$n={key:0,class:"mt-1 text-xs text-red-500"},An={key:2},Cn={key:0,class:"mt-1 text-xs text-red-500"},Un={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Tn={key:3},In={key:14,class:"space-y-4 rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},Kn={key:0,class:"mt-1 text-xs text-red-500"},_n={class:"flex gap-3 pt-4"},Mn=["disabled"],Sn=["disabled"],Pn={key:0,class:"loading-spinner mr-2"},Dn={key:3,class:"space-y-6"},Vn={key:0},Rn={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},zn={class:"flex items-start gap-4"},jn={class:"flex-1"},On={class:"space-y-4"},Ln={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Nn={class:"flex items-start gap-3"},En={class:"flex-1"},qn=["disabled"],Wn={key:0,class:"fas fa-link mr-2"},Gn={key:1,class:"loading-spinner mr-2"},Fn={key:1,class:"space-y-3"},Qn={class:"flex items-center gap-2"},Bn=["value"],Hn={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Jn={class:"flex items-start gap-3"},Yn={class:"flex-1"},Zn={class:"space-y-3"},Xn={class:"flex gap-3 pt-4"},ei=["disabled"],ti={key:0,class:"loading-spinner mr-2"},si={key:4,class:"space-y-6"},ai={class:"flex gap-4"},ri={class:"flex cursor-pointer items-center"},li={class:"flex cursor-pointer items-center"},oi={class:"flex cursor-pointer items-center"},ni={key:0},ii={class:"flex gap-2"},di={class:"flex-1"},ui={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},pi={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},gi=["value"],mi={class:"text-sm text-gray-700 dark:text-gray-200"},yi={key:1},ci={key:2},xi={class:"flex gap-4"},fi={class:"flex cursor-pointer items-center"},bi={class:"flex cursor-pointer items-center"},vi={key:3,class:"mt-4"},ki={class:"flex items-start"},hi={key:4,class:"mt-4"},wi={class:"flex items-start"},$i={class:"ml-3"},Ai={key:0,class:"mt-1"},Ci={class:"flex items-center justify-between"},Ui={class:"text-xs text-green-600 dark:text-green-400"},Ti=["disabled"],Ii={key:0,class:"fas fa-trash-alt mr-1"},Ki={key:1,class:"loading-spinner mr-1"},_i={key:1,class:"mt-1"},Mi={key:5,class:"mt-4"},Si={class:"flex items-start"},Pi={class:"ml-3 flex-1"},Di={key:0,class:"mt-3"},Vi={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Ri={class:"flex items-center gap-2"},zi={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"},ji={class:"text-blue-600 dark:text-blue-400"},Oi={class:"text-gray-500 dark:text-gray-500"},Li={class:"text-blue-600 dark:text-blue-400"},Ni={key:6,class:"space-y-4"},Ei={class:"grid grid-cols-2 gap-4"},qi={key:0,class:"rounded-lg bg-gray-50 p-4 dark:bg-gray-800"},Wi={class:"mb-2 flex items-center justify-between"},Gi={class:"text-sm text-gray-500 dark:text-gray-400"},Fi={class:"relative h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Qi={class:"mt-2 flex items-center justify-between text-xs"},Bi={class:"text-gray-500 dark:text-gray-400"},Hi={class:"text-gray-500 dark:text-gray-400"},Ji={class:"mb-4 flex gap-2"},Yi={key:0},Zi={class:"mb-3 grid grid-cols-2 gap-2"},Xi=["value"],ed={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},td={class:"text-xs text-gray-500 dark:text-gray-400"},sd={key:0},ad={key:1},rd={class:"mb-3 space-y-2"},ld=["onUpdate:modelValue"],od=["onUpdate:modelValue"],nd=["onClick"],id={class:"mt-3 flex flex-wrap gap-2"},dd={class:"mb-3"},ud={class:"inline-flex cursor-pointer items-center"},pd={key:0},gd={key:7,class:"space-y-4"},md={class:"relative"},yd=["type"],cd={class:"grid grid-cols-2 gap-4"},xd={key:8,class:"space-y-4"},fd={class:"mb-3"},bd={class:"inline-flex cursor-pointer items-center"},vd={key:0},kd={key:9,class:"space-y-4"},hd={key:0,class:"mt-1 text-xs text-red-500"},wd={key:0,class:"mt-1 text-xs text-red-500"},$d={key:0,class:"mt-1 text-xs text-red-500"},Ad={class:"flex flex-wrap gap-2"},Cd=["value"],Ud={class:"text-sm text-gray-700 dark:text-gray-300"},Td={key:10,class:"rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},Id={class:"mb-4 flex items-start gap-3"},Kd={class:"mb-1 text-sm text-purple-800 dark:text-purple-200"},_d={class:"space-y-4"},Md={key:0,class:"mt-1 text-xs text-red-500"},Sd={class:"space-y-2"},Pd={class:"flex items-center justify-between"},Dd={class:"text-xs text-purple-600 dark:text-purple-300"},Vd={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"},Rd=["onClick"],zd={class:"text-xs text-purple-700 dark:text-purple-300"},jd={key:11,class:"rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-700 dark:bg-amber-900/30"},Od={class:"space-y-4"},Ld={class:"flex gap-3 pt-4"},Nd=["disabled"],Ed={key:0,class:"loading-spinner mr-2"},qd={__name:"AccountForm",props:{account:{type:Object,default:null}},emits:["close","success","platform-changed"],setup(B,{emit:Ae}){var $t,Ot,Lt,At,Ct,Ut,Nt,Tt,It,Et,qt,Kt,_t,Mt,Wt,Gt,Ft,St,Qt,Pt,Bt,Ht,Dt,Jt,Yt,Zt,Xt,Vt,bt;const p=B,xe=Ae,K=fs(),{showConfirmModal:W,confirmOptions:te,showConfirm:w,handleConfirm:h,handleCancel:k}=xs(),j=ge(()=>!!p.account),Q=T(!0),H=T(1),Y=T(!1),X=T(!1),J=T(!1),G=T(!1),C=T(""),v=T(""),S=T(!1),ee=T(""),L=T(""),U=T(!1),R=T(""),we=i=>["claude","claude-console","ccr","bedrock"].includes(i)?"claude":["openai","openai-responses","azure_openai"].includes(i)?"openai":i==="gemini"?"gemini":i==="droid"?"droid":"",_e=()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""}),P=i=>{if(!i)return null;let t=i;if(typeof i=="string")try{t=JSON.parse(i)}catch{return null}if(t&&typeof t=="object"&&t.proxy&&typeof t.proxy=="object"&&(t=t.proxy),!t||typeof t!="object")return null;const o=typeof t.host=="string"?t.host.trim():t.host!==void 0&&t.host!==null?String(t.host).trim():"",O=t.port!==void 0&&t.port!==null?String(t.port).trim():"",le=typeof t.type=="string"&&t.type.trim()?t.type.trim():"socks5",ke=typeof t.username=="string"?t.username:t.username!==void 0&&t.username!==null?String(t.username):"",de=typeof t.password=="string"?t.password:t.password!==void 0&&t.password!==null?String(t.password):"";return{type:le,host:o,port:O,username:ke,password:de}},u=i=>{const t=P(i);return t&&t.host&&t.port?{enabled:!0,type:t.type||"socks5",host:t.host,port:t.port,username:t.username||"",password:t.password||""}:_e()},E=i=>{if(!i||!i.enabled)return null;const t=(i.host||"").trim(),o=Number.parseInt(i.port,10);if(!t||Number.isNaN(o)||o<=0)return null;const O=i.username?i.username.trim():"",le=i.password?i.password.trim():"";return{type:i.type||"socks5",host:t,port:o,username:O||null,password:le||null}},Z=()=>{var i;return u((i=p.account)==null?void 0:i.proxy)},s=T({platform:(($t=p.account)==null?void 0:$t.platform)||"claude",addType:(()=>{var t;const i=((t=p.account)==null?void 0:t.platform)||"claude";return i==="gemini"||i==="openai"||i==="claude"?"oauth":"manual"})(),name:((Ot=p.account)==null?void 0:Ot.name)||"",description:((Lt=p.account)==null?void 0:Lt.description)||"",accountType:((At=p.account)==null?void 0:At.accountType)||"shared",authenticationMethod:((Ct=p.account)==null?void 0:Ct.authenticationMethod)||"",subscriptionType:"claude_max",autoStopOnWarning:((Ut=p.account)==null?void 0:Ut.autoStopOnWarning)||!1,useUnifiedUserAgent:((Nt=p.account)==null?void 0:Nt.useUnifiedUserAgent)||!1,useUnifiedClientId:((Tt=p.account)==null?void 0:Tt.useUnifiedClientId)||!1,unifiedClientId:((It=p.account)==null?void 0:It.unifiedClientId)||"",groupId:"",groupIds:[],projectId:((Et=p.account)==null?void 0:Et.projectId)||"",accessToken:"",refreshToken:"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:Z(),apiUrl:((qt=p.account)==null?void 0:qt.apiUrl)||"",apiKey:((Kt=p.account)==null?void 0:Kt.apiKey)||"",priority:((_t=p.account)==null?void 0:_t.priority)||50,endpointType:((Mt=p.account)==null?void 0:Mt.endpointType)||"anthropic",baseApi:((Wt=p.account)==null?void 0:Wt.baseApi)||"",rateLimitDuration:((Gt=p.account)==null?void 0:Gt.rateLimitDuration)||60,supportedModels:(()=>{var t;const i=(t=p.account)==null?void 0:t.supportedModels;return i?typeof i=="object"&&!Array.isArray(i)?Object.keys(i):Array.isArray(i)?i:[]:[]})(),userAgent:((Ft=p.account)==null?void 0:Ft.userAgent)||"",enableRateLimit:p.account?p.account.rateLimitDuration>0:!0,dailyQuota:((St=p.account)==null?void 0:St.dailyQuota)||0,dailyUsage:((Qt=p.account)==null?void 0:Qt.dailyUsage)||0,quotaResetTime:((Pt=p.account)==null?void 0:Pt.quotaResetTime)||"00:00",accessKeyId:((Bt=p.account)==null?void 0:Bt.accessKeyId)||"",secretAccessKey:((Ht=p.account)==null?void 0:Ht.secretAccessKey)||"",region:((Dt=p.account)==null?void 0:Dt.region)||"",sessionToken:((Jt=p.account)==null?void 0:Jt.sessionToken)||"",defaultModel:((Yt=p.account)==null?void 0:Yt.defaultModel)||"",smallFastModel:((Zt=p.account)==null?void 0:Zt.smallFastModel)||"",azureEndpoint:((Xt=p.account)==null?void 0:Xt.azureEndpoint)||"",apiVersion:((Vt=p.account)==null?void 0:Vt.apiVersion)||"",deploymentName:((bt=p.account)==null?void 0:bt.deploymentName)||""}),fe=T("whitelist"),ce=T(["claude-sonnet-4-20250514","claude-sonnet-4-5-20250929","claude-3-5-haiku-20241022"]),Oe=[{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-opus-4-20250514",label:"Claude Opus 4",color:"purple"},{value:"claude-opus-4-1-20250805",label:"Claude Opus 4.1",color:"purple"}],Ce=T([]),pt=()=>{var i;if((i=p.account)!=null&&i.supportedModels)if(typeof p.account.supportedModels=="object"&&!Array.isArray(p.account.supportedModels)){const t=Object.entries(p.account.supportedModels);Ce.value=t.map(([O,le])=>({from:O,to:le})),t.every(([O,le])=>O===le)?(fe.value="whitelist",ce.value=t.map(([O])=>O)):fe.value="mapping"}else Array.isArray(p.account.supportedModels)&&(Ce.value=p.account.supportedModels.map(t=>({from:t,to:t})),fe.value="whitelist",ce.value=p.account.supportedModels)},Qe=i=>{if(!i||typeof i!="string")return[];const t=i.split(/\r?\n/).map(O=>O.trim()).filter(O=>O.length>0);return t.length===0?[]:Array.from(new Set(t))},Le=[{value:"append",label:"追加模式",description:"保留现有 Key,并在末尾追加新 Key 列表。"},{value:"replace",label:"覆盖模式",description:"先清空旧 Key,再写入上方的新 Key 列表。"},{value:"delete",label:"删除模式",description:"输入要移除的 Key,可精准删除失效或被封禁的 Key。"}],ct=ge(()=>{const i=Math.max(Le.findIndex(o=>o.value===s.value.apiKeyUpdateMode),0),t=100/Le.length;return{width:`${t}%`,left:`${i*t}%`}}),at=ge(()=>{const i=Le.find(t=>t.value===s.value.apiKeyUpdateMode);return i?i.label:Le[0].label}),Be=ge(()=>{const i=Le.find(t=>t.value===s.value.apiKeyUpdateMode);return i?i.description:Le[0].description}),$=T({name:"",refreshToken:"",accessToken:"",apiKeys:"",apiUrl:"",apiKey:"",baseApi:"",accessKeyId:"",secretAccessKey:"",region:"",azureEndpoint:"",deploymentName:""}),Ee=ge(()=>{var i;return((i=s.value.name)==null?void 0:i.trim())&&s.value.platform}),qe=ge(()=>C.value&&v.value.trim()),rt=()=>{var i;return!j.value||!((i=p.account)!=null&&i.id)?0:typeof s.value.dailyUsage=="number"?s.value.dailyUsage:0},Ze=ge(()=>!s.value.dailyQuota||s.value.dailyQuota<=0?0:rt()/s.value.dailyQuota*100),lt=ge(()=>{if(!p.account||p.account.platform!=="droid")return 0;let i=0;if(Array.isArray(p.account.apiKeys))i=p.account.apiKeys.length;else if(typeof p.account.apiKeys=="string")try{const o=JSON.parse(p.account.apiKeys);Array.isArray(o)&&(i=o.length)}catch{i=0}const t=p.account.apiKeyCount??p.account.apiKeysCount??p.account.api_key_count??i;return Number(t)||0}),Xe=ge(()=>{var t,o,O;if(!j.value||s.value.platform!=="droid")return!1;const i=s.value.authenticationMethod||((t=p.account)==null?void 0:t.authenticationMethod)||((o=p.account)==null?void 0:o.authMethod)||((O=p.account)==null?void 0:O.authentication_mode)||"";return typeof i!="string"?!1:i.trim().toLowerCase()==="api_key"}),gt=async()=>{var i;if(!(!j.value||!((i=p.account)!=null&&i.id)))try{const t=await V.get(`/admin/claude-console-accounts/${p.account.id}/usage`);t&&(s.value.dailyUsage=t.dailyUsage||0)}catch{}},Me=i=>{R.value=i,i==="claude"?s.value.platform="claude":i==="openai"?s.value.platform="openai":i==="gemini"?s.value.platform="gemini":i==="droid"&&(s.value.platform="droid")},Pe=async()=>{if($.value.name="",!Ee.value){(!s.value.name||s.value.name.trim()==="")&&($.value.name="请填写账户名称");return}if(s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)){z("请选择一个分组","error");return}s.value.accountType==="group"&&(s.value.groupIds&&s.value.groupIds.length>0?s.value.groupId=s.value.groupIds[0]:s.value.groupId=""),!(s.value.platform==="gemini"&&H.value===1&&s.value.addType==="oauth"&&(!s.value.projectId||s.value.projectId.trim()==="")&&!await w("项目 ID 未填写",`您尚未填写项目 ID。
|
||
|
||
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
|
||
如果您使用的是普通个人账号,可以继续不填写。`,"继续","返回填写"))&&(H.value=2)},We=async()=>{J.value=!0;try{const i=E(s.value.proxy),t=i?{proxy:i}:{},o=await K.generateClaudeSetupTokenUrl(t);C.value=o.authUrl,ee.value=o.sessionId}catch(i){z(i.message||"生成Setup Token授权链接失败","error")}finally{J.value=!1}},y=()=>{C.value="",v.value="",We()},m=async()=>{try{await navigator.clipboard.writeText(C.value),S.value=!0,z("链接已复制","success"),setTimeout(()=>{S.value=!1},2e3)}catch{const t=document.createElement("textarea");t.value=C.value,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")?(S.value=!0,z("链接已复制","success")):z("复制失败,请手动复制","error")}catch{z("复制失败,请手动复制","error")}document.body.removeChild(t),setTimeout(()=>{S.value=!1},2e3)}},I=async()=>{if(qe.value){G.value=!0;try{const i={sessionId:ee.value,callbackUrl:v.value.trim()},t=E(s.value.proxy);t&&(i.proxy=t);const o=await K.exchangeClaudeSetupTokenCode(i);s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=it()),await De(o)}catch(i){z(i.message||"Setup Token授权失败,请检查授权码是否正确","error")}finally{G.value=!1}}},De=async i=>{var t,o,O,le,ke,de;Y.value=!0;try{s.value.platform==="claude"&&s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=it());const he=E(s.value.proxy),N={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,proxy:he},ne=s.value.platform;if(ne==="claude")N.claudeAiOauth=i.claudeAiOauth||i,N.priority=s.value.priority||50,N.autoStopOnWarning=s.value.autoStopOnWarning||!1,N.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,N.useUnifiedClientId=s.value.useUnifiedClientId||!1,N.unifiedClientId=s.value.unifiedClientId||"",N.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0};else if(ne==="gemini")N.geminiOauth=i.tokens||i,s.value.projectId&&(N.projectId=s.value.projectId),N.priority=s.value.priority||50;else if(ne==="openai")N.openaiOauth=i.tokens||i,N.accountInfo=i.accountInfo,N.priority=s.value.priority||50;else if(ne==="droid"){const q=i.tokens||i||{},F={accessToken:q.accessToken||q.access_token||"",refreshToken:q.refreshToken||q.refresh_token||"",expiresAt:q.expiresAt||q.expires_at||"",expiresIn:q.expiresIn||q.expires_in||null,tokenType:q.tokenType||q.token_type||"Bearer",organizationId:q.organizationId||q.organization_id||"",authenticationMethod:q.authenticationMethod||q.authentication_method||""};if(!F.refreshToken){Y.value=!1,z("授权成功但未返回 Refresh Token,请确认已授予离线访问权限后重试。","error");return}if(N.refreshToken=F.refreshToken,N.accessToken=F.accessToken,N.expiresAt=F.expiresAt,F.expiresIn!==null&&F.expiresIn!==void 0&&(N.expiresIn=F.expiresIn),N.priority=s.value.priority||50,N.endpointType=s.value.endpointType||"anthropic",N.platform="droid",N.tokenType=F.tokenType,N.authenticationMethod=F.authenticationMethod,F.organizationId&&(N.organizationId=F.organizationId),q.user){const se=q.user,yt=[];typeof se.first_name=="string"&&se.first_name.trim()&&yt.push(se.first_name.trim()),typeof se.last_name=="string"&&se.last_name.trim()&&yt.push(se.last_name.trim());const r=yt.join(" ").trim()||(typeof se.name=="string"?se.name.trim():"")||(typeof se.display_name=="string"?se.display_name.trim():"");typeof se.email=="string"&&se.email.trim()&&(N.ownerEmail=se.email.trim()),r?(N.ownerName=r,N.ownerDisplayName=r):N.ownerEmail&&(N.ownerName=N.ownerName||N.ownerEmail,N.ownerDisplayName=N.ownerDisplayName||N.ownerEmail),typeof se.id=="string"&&se.id.trim()&&(N.userId=se.id.trim())}}let c;ne==="claude"?c=await K.createClaudeAccount(N):ne==="gemini"?c=await K.createGeminiAccount(N):ne==="openai"?c=await K.createOpenAIAccount(N):ne==="droid"?c=await K.createDroidAccount(N):c=await K.createGeminiAccount(N),xe("success",c)}catch(he){const N=((o=(t=he.response)==null?void 0:t.data)==null?void 0:o.error)||he.message||"账户创建失败",ne=((le=(O=he.response)==null?void 0:O.data)==null?void 0:le.suggestion)||"",c=((de=(ke=he.response)==null?void 0:ke.data)==null?void 0:de.errorDetails)||null;let q=N;ne&&(q+=`
|
||
${ne}`),c&&c.error_description?q+=`
|
||
详细信息: ${c.error_description}`:c&&c.error&&c.error.message&&(q+=`
|
||
详细信息: ${c.error.message}`),z(q,"error","",8e3)}finally{Y.value=!1}},He=async()=>{var t,o,O,le,ke,de,he,N;$.value.name="",$.value.accessToken="",$.value.refreshToken="",$.value.apiUrl="",$.value.apiKey="",$.value.apiKeys="";let i=!1;if((!s.value.name||s.value.name.trim()==="")&&($.value.name="请填写账户名称",i=!0),s.value.platform==="claude-console"&&((!s.value.apiUrl||s.value.apiUrl.trim()==="")&&($.value.apiUrl="请填写 API URL",i=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&($.value.apiKey="请填写 API Key",i=!0)),s.value.platform==="ccr"&&((!s.value.apiUrl||s.value.apiUrl.trim()==="")&&($.value.apiUrl="请填写 API URL",i=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&($.value.apiKey="请填写 API Key",i=!0)),s.value.platform==="openai-responses"?((!s.value.baseApi||s.value.baseApi.trim()==="")&&($.value.baseApi="请填写 API 基础地址",i=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&($.value.apiKey="请填写 API 密钥",i=!0)):s.value.platform==="bedrock"?((!s.value.accessKeyId||s.value.accessKeyId.trim()==="")&&($.value.accessKeyId="请填写 AWS 访问密钥 ID",i=!0),(!s.value.secretAccessKey||s.value.secretAccessKey.trim()==="")&&($.value.secretAccessKey="请填写 AWS 秘密访问密钥",i=!0),(!s.value.region||s.value.region.trim()==="")&&($.value.region="请选择 AWS 区域",i=!0)):s.value.platform==="azure_openai"?((!s.value.azureEndpoint||s.value.azureEndpoint.trim()==="")&&($.value.azureEndpoint="请填写 Azure Endpoint",i=!0),(!s.value.deploymentName||s.value.deploymentName.trim()==="")&&($.value.deploymentName="请填写部署名称",i=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&($.value.apiKey="请填写 API Key",i=!0)):s.value.addType==="manual"?s.value.platform==="openai"?(!s.value.refreshToken||s.value.refreshToken.trim()==="")&&($.value.refreshToken="请填写 Refresh Token",i=!0):s.value.platform==="gemini"?(!s.value.accessToken||s.value.accessToken.trim()==="")&&($.value.accessToken="请填写 Access Token",i=!0):s.value.platform==="droid"?((!s.value.accessToken||s.value.accessToken.trim()==="")&&($.value.accessToken="请填写 Access Token",i=!0),(!s.value.refreshToken||s.value.refreshToken.trim()==="")&&($.value.refreshToken="请填写 Refresh Token",i=!0)):s.value.platform==="claude"&&(!s.value.accessToken||s.value.accessToken.trim()==="")&&($.value.accessToken="请填写 Access Token",i=!0):s.value.addType==="apikey"&&Qe(s.value.apiKeysInput).length===0&&($.value.apiKeys="请至少填写一个 API Key",i=!0),s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)&&(z("请选择一个分组","error"),i=!0),s.value.accountType==="group"&&(s.value.groupIds&&s.value.groupIds.length>0?s.value.groupId=s.value.groupIds[0]:s.value.groupId=""),!i){Y.value=!0;try{const ne=E(s.value.proxy),c={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,proxy:ne};if(s.value.platform==="claude"){const F=s.value.refreshToken?6e5:31536e6;s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=it()),c.claudeAiOauth={accessToken:s.value.accessToken,refreshToken:s.value.refreshToken||"",expiresAt:Date.now()+F,scopes:[]},c.priority=s.value.priority||50,c.autoStopOnWarning=s.value.autoStopOnWarning||!1,c.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,c.useUnifiedClientId=s.value.useUnifiedClientId||!1,c.unifiedClientId=s.value.unifiedClientId||"",c.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(s.value.platform==="gemini"){const F=s.value.refreshToken?6e5:31536e6;c.geminiOauth={access_token:s.value.accessToken,refresh_token:s.value.refreshToken||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+F},s.value.projectId&&(c.projectId=s.value.projectId),c.priority=s.value.priority||50}else if(s.value.platform==="openai"){const F=s.value.refreshToken?6e5:31536e6;c.openaiOauth={idToken:"",accessToken:s.value.accessToken||"",refreshToken:s.value.refreshToken,expires_in:Math.floor(F/1e3)},c.accountInfo={accountId:"",chatgptUserId:"",organizationId:"",organizationRole:"",organizationTitle:"",planType:"",email:"",emailVerified:!1},c.needsImmediateRefresh=!0,c.requireRefreshSuccess=!0,c.priority=s.value.priority||50}else if(s.value.platform==="droid")if(c.priority=s.value.priority||50,c.endpointType=s.value.endpointType||"anthropic",c.platform="droid",s.value.addType==="apikey"){const F=Qe(s.value.apiKeysInput);c.apiKeys=F,c.authenticationMethod="api_key",c.isActive=!0,c.schedulable=!0}else{const F=((t=s.value.accessToken)==null?void 0:t.trim())||"",se=((o=s.value.refreshToken)==null?void 0:o.trim())||"",yt=new Date(Date.now()+8*60*60*1e3).toISOString();c.accessToken=F,c.refreshToken=se,c.expiresAt=yt,c.expiresIn=8*60*60,c.tokenType="Bearer",c.authenticationMethod="manual"}else s.value.platform==="claude-console"||s.value.platform==="ccr"?(c.apiUrl=s.value.apiUrl,c.apiKey=s.value.apiKey,c.priority=s.value.priority||50,c.supportedModels=Je()||{},c.userAgent=s.value.userAgent||null,c.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0,c.dailyQuota=s.value.dailyQuota||0,c.quotaResetTime=s.value.quotaResetTime||"00:00"):s.value.platform==="openai-responses"?(c.baseApi=s.value.baseApi,c.apiKey=s.value.apiKey,c.userAgent=s.value.userAgent||"",c.priority=s.value.priority||50,c.rateLimitDuration=60,c.dailyQuota=s.value.dailyQuota||0,c.quotaResetTime=s.value.quotaResetTime||"00:00"):s.value.platform==="bedrock"?(c.awsCredentials={accessKeyId:s.value.accessKeyId,secretAccessKey:s.value.secretAccessKey,sessionToken:s.value.sessionToken||null},c.region=s.value.region,c.defaultModel=s.value.defaultModel||null,c.smallFastModel=s.value.smallFastModel||null,c.priority=s.value.priority||50,c.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0):s.value.platform==="azure_openai"&&(c.azureEndpoint=s.value.azureEndpoint,c.apiKey=s.value.apiKey,c.apiVersion=s.value.apiVersion||"2024-02-01",c.deploymentName=s.value.deploymentName,c.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[],c.priority=s.value.priority||50,c.isActive=s.value.isActive!==!1,c.schedulable=s.value.schedulable!==!1);let q;if(s.value.platform==="claude")q=await K.createClaudeAccount(c);else if(s.value.platform==="claude-console"||s.value.platform==="ccr")q=await K.createClaudeConsoleAccount(c);else if(s.value.platform==="droid")q=await K.createDroidAccount(c);else if(s.value.platform==="openai-responses")q=await K.createOpenAIResponsesAccount(c);else if(s.value.platform==="bedrock")q=await K.createBedrockAccount(c);else if(s.value.platform==="openai")q=await K.createOpenAIAccount(c);else if(s.value.platform==="azure_openai")q=await K.createAzureOpenAIAccount(c);else if(s.value.platform==="gemini")q=await K.createGeminiAccount(c);else throw new Error(`不支持的平台: ${s.value.platform}`);xe("success",q)}catch(ne){const c=((le=(O=ne.response)==null?void 0:O.data)==null?void 0:le.error)||ne.message||"账户创建失败",q=((de=(ke=ne.response)==null?void 0:ke.data)==null?void 0:de.suggestion)||"",F=((N=(he=ne.response)==null?void 0:he.data)==null?void 0:N.errorDetails)||null;let se=c;q&&(se+=`
|
||
${q}`),F&&F.error_description?se+=`
|
||
详细信息: ${F.error_description}`:F&&F.error&&F.error.message&&(se+=`
|
||
详细信息: ${F.error.message}`),z(se,"error","",8e3)}finally{Y.value=!1}}},Ue=async()=>{var i,t,o,O,le,ke,de,he,N;if($.value.name="",$.value.apiKeys="",!s.value.name||s.value.name.trim()===""){$.value.name="请填写账户名称";return}if(s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)){z("请选择一个分组","error");return}if(s.value.accountType==="group"&&(s.value.groupIds&&s.value.groupIds.length>0?s.value.groupId=s.value.groupIds[0]:s.value.groupId=""),!(s.value.platform==="gemini"&&(!s.value.projectId||s.value.projectId.trim()==="")&&!await w("项目 ID 未填写",`您尚未填写项目 ID。
|
||
|
||
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
|
||
如果您使用的是普通个人账号,可以继续不填写。`,"继续保存","返回填写"))){Y.value=!0;try{const ne=E(s.value.proxy),c={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,proxy:ne};if(s.value.accessToken||s.value.refreshToken){const q=((i=s.value.accessToken)==null?void 0:i.trim())||"",F=((t=s.value.refreshToken)==null?void 0:t.trim())||"";if(p.account.platform==="claude"){const se=s.value.refreshToken?6e5:31536e6;c.claudeAiOauth={accessToken:q||"",refreshToken:F||"",expiresAt:Date.now()+se,scopes:p.account.scopes||[]}}else if(p.account.platform==="gemini"){const se=s.value.refreshToken?6e5:31536e6;c.geminiOauth={access_token:q||"",refresh_token:F||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+se}}else if(p.account.platform==="openai"){const se=s.value.refreshToken?6e5:31536e6;c.openaiOauth={idToken:"",accessToken:q||"",refreshToken:F||"",expires_in:Math.floor(se/1e3)},F&&F!==p.account.refreshToken&&(c.needsImmediateRefresh=!0,c.requireRefreshSuccess=!0)}else p.account.platform==="droid"&&(q&&(c.accessToken=q),F&&(c.refreshToken=F))}if(p.account.platform==="droid"){const q=((o=s.value.apiKeysInput)==null?void 0:o.trim())||"",F=s.value.apiKeyUpdateMode||"append";if(F==="delete"){if(!q){$.value.apiKeys="请填写需要删除的 API Key",Y.value=!1;return}const se=Qe(q);if(se.length===0){$.value.apiKeys="请填写需要删除的 API Key",Y.value=!1;return}c.removeApiKeys=se,c.apiKeyUpdateMode="delete"}else{if(q){const se=Qe(q);if(se.length===0){$.value.apiKeys="请至少填写一个 API Key",Y.value=!1;return}c.apiKeys=se}else F==="replace"&&(c.apiKeys=[]);(F!=="append"||q)&&(c.apiKeyUpdateMode=F)}Xe.value&&(c.authenticationMethod="api_key")}if(p.account.platform==="gemini"&&(c.projectId=s.value.projectId||""),p.account.platform==="droid"&&(c.priority=s.value.priority||50,c.endpointType=s.value.endpointType||"anthropic"),p.account.platform==="claude"&&(s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=it()),c.priority=s.value.priority||50,c.autoStopOnWarning=s.value.autoStopOnWarning||!1,c.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,c.useUnifiedClientId=s.value.useUnifiedClientId||!1,c.unifiedClientId=s.value.unifiedClientId||"",c.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}),p.account.platform==="openai"&&(c.priority=s.value.priority||50),p.account.platform==="gemini"&&(c.priority=s.value.priority||50),p.account.platform==="claude-console"&&(c.apiUrl=s.value.apiUrl,s.value.apiKey&&(c.apiKey=s.value.apiKey),c.priority=s.value.priority||50,c.supportedModels=Je()||{},c.userAgent=s.value.userAgent||null,c.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0,c.dailyQuota=s.value.dailyQuota||0,c.quotaResetTime=s.value.quotaResetTime||"00:00"),p.account.platform==="openai-responses"&&(c.baseApi=s.value.baseApi,s.value.apiKey&&(c.apiKey=s.value.apiKey),c.userAgent=s.value.userAgent||"",c.priority=s.value.priority||50,c.dailyQuota=s.value.dailyQuota||0,c.quotaResetTime=s.value.quotaResetTime||"00:00"),p.account.platform==="bedrock"&&((s.value.accessKeyId||s.value.secretAccessKey||s.value.sessionToken)&&(c.awsCredentials={},s.value.accessKeyId&&(c.awsCredentials.accessKeyId=s.value.accessKeyId),s.value.secretAccessKey&&(c.awsCredentials.secretAccessKey=s.value.secretAccessKey),s.value.sessionToken!==void 0&&(c.awsCredentials.sessionToken=s.value.sessionToken||null)),s.value.region&&(c.region=s.value.region),c.defaultModel=s.value.defaultModel||null,c.smallFastModel=s.value.smallFastModel||null,c.priority=s.value.priority||50,c.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0),p.account.platform==="azure_openai"&&(c.azureEndpoint=s.value.azureEndpoint,c.apiVersion=s.value.apiVersion||"2024-02-01",c.deploymentName=s.value.deploymentName,c.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[],c.priority=s.value.priority||50,s.value.apiKey&&s.value.apiKey.trim()&&(c.apiKey=s.value.apiKey)),p.account.platform==="claude")await K.updateClaudeAccount(p.account.id,c);else if(p.account.platform==="claude-console")await K.updateClaudeConsoleAccount(p.account.id,c);else if(p.account.platform==="openai-responses")await K.updateOpenAIResponsesAccount(p.account.id,c);else if(p.account.platform==="bedrock")await K.updateBedrockAccount(p.account.id,c);else if(p.account.platform==="openai")await K.updateOpenAIAccount(p.account.id,c);else if(p.account.platform==="azure_openai")await K.updateAzureOpenAIAccount(p.account.id,c);else if(p.account.platform==="gemini")await K.updateGeminiAccount(p.account.id,c);else if(p.account.platform==="droid")await K.updateDroidAccount(p.account.id,c);else throw new Error(`不支持的平台: ${p.account.platform}`);xe("success")}catch(ne){const c=((le=(O=ne.response)==null?void 0:O.data)==null?void 0:le.error)||ne.message||"账户更新失败",q=((de=(ke=ne.response)==null?void 0:ke.data)==null?void 0:de.suggestion)||"",F=((N=(he=ne.response)==null?void 0:he.data)==null?void 0:N.errorDetails)||null;let se=c;q&&(se+=`
|
||
${q}`),F&&F.error_description?se+=`
|
||
详细信息: ${F.error_description}`:F&&F.error&&F.error.message&&(se+=`
|
||
详细信息: ${F.error.message}`),z(se,"error","",8e3)}finally{Y.value=!1}}};re(()=>s.value.name,()=>{var i;$.value.name&&((i=s.value.name)!=null&&i.trim())&&($.value.name="")}),re(()=>s.value.accessToken,()=>{var i;$.value.accessToken&&((i=s.value.accessToken)!=null&&i.trim())&&($.value.accessToken="")}),re(()=>s.value.refreshToken,()=>{var i;$.value.refreshToken&&((i=s.value.refreshToken)!=null&&i.trim())&&($.value.refreshToken="")}),re(()=>s.value.apiUrl,()=>{var i;$.value.apiUrl&&((i=s.value.apiUrl)!=null&&i.trim())&&($.value.apiUrl="")}),re(()=>s.value.apiKey,()=>{var i;$.value.apiKey&&((i=s.value.apiKey)!=null&&i.trim())&&($.value.apiKey="")}),re(()=>s.value.azureEndpoint,()=>{var i;$.value.azureEndpoint&&((i=s.value.azureEndpoint)!=null&&i.trim())&&($.value.azureEndpoint="")}),re(()=>s.value.deploymentName,()=>{var i;$.value.deploymentName&&((i=s.value.deploymentName)!=null&&i.trim())&&($.value.deploymentName="")});const et=T([]),ot=T(!1),tt=T(!1),$e=ge(()=>{let i=s.value.platform;return s.value.platform==="claude-console"||s.value.platform==="ccr"?i="claude":s.value.platform==="openai-responses"&&(i="openai"),et.value.filter(t=>t.platform===i)}),nt=async()=>{ot.value=!0;try{const i=await V.get("/admin/account-groups");et.value=i.data||[]}catch{z("加载分组列表失败","error"),et.value=[]}finally{ot.value=!1}},Ge=async()=>{await nt(),z("分组列表已刷新","success")},st=()=>{tt.value=!0},xt=async()=>{await nt()};re(()=>s.value.platform,i=>{i==="claude-console"||i==="ccr"||i==="bedrock"||i==="openai-responses"?s.value.addType="manual":(i==="claude"||i==="gemini"||i==="openai")&&(s.value.addType="oauth"),s.value.accountType==="group"&&(s.value.groupId="",s.value.groupIds=[])}),re(()=>s.value.groupIds,i=>{s.value.accountType==="group"&&(i&&i.length>0?s.value.groupId=i[0]:s.value.groupId="")},{deep:!0}),re(()=>s.value.addType,(i,t)=>{i!==t&&(i==="apikey"?(s.value.accessToken="",s.value.refreshToken="",$.value.accessToken="",$.value.refreshToken="",s.value.authenticationMethod="api_key",s.value.apiKeyUpdateMode="append"):t==="apikey"&&(s.value.apiKeysInput="",s.value.apiKeyUpdateMode="append",$.value.apiKeys="",j.value||(s.value.authenticationMethod="")))}),re(()=>s.value.apiKeyUpdateMode,(i,t)=>{i!==t&&$.value.apiKeys&&($.value.apiKeys="")}),re(()=>s.value.apiKeysInput,i=>{if(!$.value.apiKeys)return;const t=Qe(i),o=s.value.apiKeyUpdateMode;if(o==="append"&&t.length>0){$.value.apiKeys="";return}if(o==="replace"){(t.length>0||!i||i.trim()==="")&&($.value.apiKeys="");return}o==="delete"&&t.length>0&&($.value.apiKeys="")}),re(v,i=>{if(!i||typeof i!="string")return;const t=i.trim();if(!t)return;if(t.startsWith("http://")||t.startsWith("https://"))if(t.startsWith("http://localhost:45462"))try{const le=new URL(t).searchParams.get("code");le?(v.value=le,z("成功提取授权码!","success")):z("URL 中未找到授权码参数,请检查链接是否正确","error")}catch{z("链接格式错误,请检查是否为完整的 URL","error")}else z("请粘贴以 http://localhost:45462 开头的链接","error")}),re(()=>s.value.platform,i=>{j.value||xe("platform-changed",i)}),re(()=>s.value.accountType,i=>{i==="group"&&et.value.length===0&&nt()}),re(()=>s.value.groupId,i=>{i==="__new__"&&(s.value.groupId="",tt.value=!0)});const ft=()=>{Ce.value.push({from:"",to:""})},mt=i=>{Ce.value.splice(i,1)},Ne=(i,t)=>{if(Ce.value.some(O=>O.from===i)){z(`模型 ${i} 的映射已存在`,"info");return}Ce.value.push({from:i,to:t}),z(`已添加映射: ${i} → ${t}`,"success")},Je=()=>{const i={};return fe.value==="whitelist"?ce.value.forEach(t=>{i[t]=t}):Ce.value.forEach(t=>{t.from&&t.to&&(i[t.from]=t.to)}),Object.keys(i).length>0?i:null};re(()=>p.account,i=>{if(i){pt();const t=u(i.proxy),o=typeof i.authenticationMethod=="string"?i.authenticationMethod.trim().toLowerCase():"",O=o==="api_key"?"apikey":o==="manual"?"manual":"oauth";let le="";i.accountType==="group"&&(le=i.groupId||i.groupInfo&&i.groupInfo.id||"");let ke="claude_max";if(i.subscriptionInfo){const de=typeof i.subscriptionInfo=="string"?JSON.parse(i.subscriptionInfo):i.subscriptionInfo;de.accountType?ke=de.accountType:de.hasClaudeMax?ke="claude_max":de.hasClaudePro?ke="claude_pro":ke="claude_free"}s.value={platform:i.platform,addType:O,name:i.name,description:i.description||"",accountType:i.accountType||"shared",subscriptionType:ke,autoStopOnWarning:i.autoStopOnWarning||!1,useUnifiedUserAgent:i.useUnifiedUserAgent||!1,useUnifiedClientId:i.useUnifiedClientId||!1,unifiedClientId:i.unifiedClientId||"",groupId:le,groupIds:[],projectId:i.projectId||"",accessToken:"",refreshToken:"",authenticationMethod:i.authenticationMethod||"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:t,apiUrl:i.apiUrl||"",apiKey:"",priority:i.priority||50,supportedModels:(()=>{const de=i.supportedModels;return de?typeof de=="object"&&!Array.isArray(de)?Object.keys(de):Array.isArray(de)?de:[]:[]})(),userAgent:i.userAgent||"",enableRateLimit:!!(i.rateLimitDuration&&i.rateLimitDuration>0),rateLimitDuration:i.rateLimitDuration||60,accessKeyId:"",secretAccessKey:"",region:i.region||"",sessionToken:"",defaultModel:i.defaultModel||"",smallFastModel:i.smallFastModel||"",azureEndpoint:i.azureEndpoint||"",apiVersion:i.apiVersion||"",deploymentName:i.deploymentName||"",baseApi:i.baseApi||"",dailyQuota:i.dailyQuota||0,dailyUsage:i.dailyUsage||0,quotaResetTime:i.quotaResetTime||"00:00"},i.platform==="claude-console"&>(),i.accountType==="group"&&nt().then(async()=>{const de=[];if(i.groupInfo&&i.groupInfo.id)s.value.groupId=i.groupInfo.id,de.push(i.groupInfo.id);else if(i.groupId)s.value.groupId=i.groupId,de.push(i.groupId);else if(i.groupIds&&Array.isArray(i.groupIds)&&i.groupIds.length>0)s.value.groupId=i.groupIds[0],de.push(...i.groupIds);else{const he=et.value.map(async N=>{try{((await V.get(`/admin/account-groups/${N.id}/members`)).data||[]).some(q=>q.id===i.id)&&(de.push(N.id),s.value.groupId||(s.value.groupId=N.id))}catch{}});await Promise.all(he)}s.value.groupIds=de})}},{immediate:!0});const zt=async()=>{try{const i=await V.get("/admin/claude-code-version");i.success&&i.userAgent?L.value=i.userAgent:L.value=""}catch{L.value=""}},jt=async()=>{U.value=!0;try{(await V.post("/admin/claude-code-version/clear")).success?(L.value="",z("统一User-Agent缓存已清除","success")):z("清除缓存失败","error")}catch(i){z("清除缓存失败:"+(i.message||"未知错误"),"error")}finally{U.value=!1}},it=()=>{const i=new Uint8Array(32);return crypto.getRandomValues(i),Array.from(i,t=>t.toString(16).padStart(2,"0")).join("")},kt=()=>{s.value.unifiedClientId=it(),z("已生成新的客户端标识","success")},wt=()=>{s.value.useUnifiedClientId&&(s.value.useUnifiedUserAgent=!0,s.value.unifiedClientId||(s.value.unifiedClientId=it()))};return ss(()=>{var i;R.value=we(s.value.platform),j.value&&pt(),zt(),j.value&&((i=p.account)==null?void 0:i.platform)==="claude-console"&>()}),re(()=>s.value.platform,i=>{i==="claude"&&zt()}),(i,t)=>(n(),Fe(as,{to:"body"},[Q.value?(n(),d("div",Fr,[e("div",Qr,[e("div",Br,[e("div",Hr,[t[126]||(t[126]=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",Jr,g(j.value?"编辑账户":"添加账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:t[0]||(t[0]=o=>i.$emit("close"))},t[127]||(t[127]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),!j.value&&(s.value.addType==="oauth"||s.value.addType==="setup-token")?(n(),d("div",Yr,[e("div",Zr,[e("div",Xr,[e("div",{class:_(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",H.value>=1?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 1 ",2),t[128]||(t[128]=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[130]||(t[130]=e("div",{class:"h-0.5 w-4 bg-gray-300 sm:w-8"},null,-1)),e("div",el,[e("div",{class:_(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",H.value>=2?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 2 ",2),t[129]||(t[129]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"授权认证",-1))])])])):x("",!0),H.value===1&&!j.value?(n(),d("div",tl,[e("div",sl,[j.value?x("",!0):(n(),d("div",al,[t[166]||(t[166]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择平台",-1)),e("div",rl,[e("div",ll,[e("div",{class:_(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[R.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]=o=>Me("claude"))},[e("div",ol,[e("div",nl,[t[132]||(t[132]=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)),R.value==="claude"?(n(),d("div",il,t[131]||(t[131]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)]),t[133]||(t[133]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Claude ",-1)),t[134]||(t[134]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Anthropic",-1))])],2),e("div",{class:_(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[R.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]=o=>Me("openai"))},[e("div",dl,[e("div",ul,[t[136]||(t[136]=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)),R.value==="openai"?(n(),d("div",pl,t[135]||(t[135]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)]),t[137]||(t[137]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," OpenAI ",-1)),t[138]||(t[138]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"GPT 系列",-1))])],2),e("div",{class:_(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[R.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]=o=>Me("gemini"))},[e("div",gl,[e("div",ml,[t[140]||(t[140]=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)),R.value==="gemini"?(n(),d("div",yl,t[139]||(t[139]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)]),t[141]||(t[141]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Gemini ",-1)),t[142]||(t[142]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Google AI",-1))])],2),e("div",{class:_(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[R.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]=o=>Me("droid"))},[e("div",cl,[e("div",xl,[t[144]||(t[144]=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)),R.value==="droid"?(n(),d("div",fl,t[143]||(t[143]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)]),t[145]||(t[145]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Droid ",-1)),t[146]||(t[146]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Claude Droid",-1))])],2)]),R.value?(n(),d("div",bl,[t[165]||(t[165]=e("p",{class:"mb-2 text-xs font-medium text-gray-700 dark:text-gray-300"}," 选择具体平台类型: ",-1)),e("div",vl,[R.value==="claude"?(n(),d(ve,{key:0},[e("label",{class:_(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="claude"?"border-indigo-500 bg-indigo-50 dark:border-indigo-400 dark:bg-indigo-900/30":"border-gray-300 bg-white hover:border-indigo-400 hover:bg-indigo-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-indigo-500 dark:hover:bg-indigo-900/20"]])},[f(e("input",{"onUpdate:modelValue":t[5]||(t[5]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"claude"},null,512),[[ye,s.value.platform]]),t[148]||(t[148]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-brain text-sm text-indigo-600 dark:text-indigo-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Code"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),s.value.platform==="claude"?(n(),d("div",kl,t[147]||(t[147]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2),e("label",{class:_(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="claude-console"?"border-purple-500 bg-purple-50 dark:border-purple-400 dark:bg-purple-900/30":"border-gray-300 bg-white hover:border-purple-400 hover:bg-purple-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-purple-500 dark:hover:bg-purple-900/20"]])},[f(e("input",{"onUpdate:modelValue":t[6]||(t[6]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"claude-console"},null,512),[[ye,s.value.platform]]),t[150]||(t[150]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-terminal text-sm text-purple-600 dark:text-purple-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Console"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"标准API")])],-1)),s.value.platform==="claude-console"?(n(),d("div",hl,t[149]||(t[149]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2),e("label",{class:_(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="bedrock"?"border-orange-500 bg-orange-50 dark:border-orange-400 dark:bg-orange-900/30":"border-gray-300 bg-white hover:border-orange-400 hover:bg-orange-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-orange-500 dark:hover:bg-orange-900/20"]])},[f(e("input",{"onUpdate:modelValue":t[7]||(t[7]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"bedrock"},null,512),[[ye,s.value.platform]]),t[152]||(t[152]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-aws text-sm text-orange-600 dark:text-orange-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Bedrock"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"AWS")])],-1)),s.value.platform==="bedrock"?(n(),d("div",wl,t[151]||(t[151]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2),e("label",{class:_(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="ccr"?"border-cyan-500 bg-cyan-50 dark:border-cyan-400 dark:bg-cyan-900/30":"border-gray-300 bg-white hover:border-cyan-400 hover:bg-cyan-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-cyan-500 dark:hover:bg-cyan-900/20"]])},[f(e("input",{"onUpdate:modelValue":t[8]||(t[8]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"ccr"},null,512),[[ye,s.value.platform]]),t[154]||(t[154]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-code-branch text-sm text-cyan-600 dark:text-cyan-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"CCR"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Claude Code Router")])],-1)),s.value.platform==="ccr"?(n(),d("div",$l,t[153]||(t[153]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2)],64)):x("",!0),R.value==="openai"?(n(),d(ve,{key:1},[e("label",{class:_(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="openai"?"border-emerald-500 bg-emerald-50 dark:border-emerald-400 dark:bg-emerald-900/30":"border-gray-300 bg-white hover:border-emerald-400 hover:bg-emerald-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-emerald-500 dark:hover:bg-emerald-900/20"]])},[f(e("input",{"onUpdate:modelValue":t[9]||(t[9]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"openai"},null,512),[[ye,s.value.platform]]),t[156]||(t[156]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-emerald-600 dark:text-emerald-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Codex Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),s.value.platform==="openai"?(n(),d("div",Al,t[155]||(t[155]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2),e("label",{class:_(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="openai-responses"?"border-teal-500 bg-teal-50 dark:border-teal-400 dark:bg-teal-900/30":"border-gray-300 bg-white hover:border-teal-400 hover:bg-teal-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-teal-500 dark:hover:bg-teal-900/20"]])},[f(e("input",{"onUpdate:modelValue":t[10]||(t[10]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"openai-responses"},null,512),[[ye,s.value.platform]]),t[158]||(t[158]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-server text-sm text-teal-600 dark:text-teal-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Responses"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Openai-Responses")])],-1)),s.value.platform==="openai-responses"?(n(),d("div",Cl,t[157]||(t[157]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2),e("label",{class:_(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="azure_openai"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[f(e("input",{"onUpdate:modelValue":t[11]||(t[11]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"azure_openai"},null,512),[[ye,s.value.platform]]),t[160]||(t[160]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-microsoft text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Azure"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Azure Openai")])],-1)),s.value.platform==="azure_openai"?(n(),d("div",Ul,t[159]||(t[159]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2)],64)):x("",!0),R.value==="gemini"?(n(),d("label",{key:2,class:_(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="gemini"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[f(e("input",{"onUpdate:modelValue":t[12]||(t[12]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"gemini"},null,512),[[ye,s.value.platform]]),t[162]||(t[162]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-google text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Gemini Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),s.value.platform==="gemini"?(n(),d("div",Tl,t[161]||(t[161]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2)):x("",!0),R.value==="droid"?(n(),d("label",{key:3,class:_(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="droid"?"border-rose-500 bg-rose-50 dark:border-rose-400 dark:bg-rose-900/30":"border-gray-300 bg-white hover:border-rose-400 hover:bg-rose-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-rose-500 dark:hover:bg-rose-900/20"]])},[f(e("input",{"onUpdate:modelValue":t[13]||(t[13]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"droid"},null,512),[[ye,s.value.platform]]),t[164]||(t[164]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-rose-600 dark:text-rose-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Droid 专属"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),s.value.platform==="droid"?(n(),d("div",Il,t[163]||(t[163]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2)):x("",!0)])])):x("",!0)])])),!j.value&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"?(n(),d("div",Kl,[t[171]||(t[171]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"添加方式",-1)),e("div",_l,[e("label",Ml,[f(e("input",{"onUpdate:modelValue":t[14]||(t[14]=o=>s.value.addType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"oauth"},null,512),[[ye,s.value.addType]]),e("span",Sl,[t[167]||(t[167]=A(" OAuth 授权",-1)),s.value.platform==="claude"||s.value.platform==="openai"?(n(),d("span",Pl," (用量可视化)")):x("",!0)])]),s.value.platform==="claude"?(n(),d("label",Dl,[f(e("input",{"onUpdate:modelValue":t[15]||(t[15]=o=>s.value.addType=o),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),[[ye,s.value.addType]]),t[168]||(t[168]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Setup Token (效期长)",-1))])):x("",!0),e("label",Vl,[f(e("input",{"onUpdate:modelValue":t[16]||(t[16]=o=>s.value.addType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"manual"},null,512),[[ye,s.value.addType]]),t[169]||(t[169]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"手动输入 Access Token",-1))]),s.value.platform==="droid"?(n(),d("label",Rl,[f(e("input",{"onUpdate:modelValue":t[17]||(t[17]=o=>s.value.addType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"apikey"},null,512),[[ye,s.value.addType]]),t[170]||(t[170]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"使用 API Key (支持多个)",-1))])):x("",!0)])])):x("",!0),e("div",null,[t[172]||(t[172]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),f(e("input",{"onUpdate:modelValue":t[18]||(t[18]=o=>s.value.name=o),class:_(["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":$.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[M,s.value.name]]),$.value.name?(n(),d("p",zl,g($.value.name),1)):x("",!0)]),e("div",null,[t[173]||(t[173]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),f(e("textarea",{"onUpdate:modelValue":t[19]||(t[19]=o=>s.value.description=o),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),[[M,s.value.description]])]),e("div",null,[t[177]||(t[177]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",jl,[e("label",Ol,[f(e("input",{"onUpdate:modelValue":t[20]||(t[20]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[ye,s.value.accountType]]),t[174]||(t[174]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",Ll,[f(e("input",{"onUpdate:modelValue":t[21]||(t[21]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[ye,s.value.accountType]]),t[175]||(t[175]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",Nl,[f(e("input",{"onUpdate:modelValue":t[22]||(t[22]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[ye,s.value.accountType]]),t[176]||(t[176]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[178]||(t[178]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),s.value.accountType==="group"?(n(),d("div",El,[t[180]||(t[180]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",ql,[e("div",Wl,[e("div",Gl,[$e.value.length===0?(n(),d("div",Fl," 暂无可用分组 ")):x("",!0),(n(!0),d(ve,null,Ke($e.value,o=>(n(),d("label",{key:o.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[f(e("input",{"onUpdate:modelValue":t[23]||(t[23]=O=>s.value.groupIds=O),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:o.id},null,8,Ql),[[be,s.value.groupIds]]),e("span",Bl,g(o.name)+" ("+g(o.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:st},t[179]||(t[179]=[e("i",{class:"fas fa-plus"},null,-1),A(" 新建分组 ",-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:Ge},[e("i",{class:_(["fas fa-sync-alt",{"animate-spin":ot.value}])},null,2)])])])):x("",!0),s.value.platform==="gemini"?(n(),d("div",Hl,[t[181]||(t[181]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),f(e("input",{"onUpdate:modelValue":t[24]||(t[24]=o=>s.value.projectId=o),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),[[M,s.value.projectId]]),t[182]||(t[182]=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,[A(" 访问 "),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,[A(" 复制"),e("span",{class:"font-semibold text-red-600"},"项目 ID(Project ID)"),A(",通常是字符串格式 ")]),e("li",{class:"text-red-600"}," ⚠️ 注意:要复制项目 ID(Project ID),不要复制项目编号(Project Number)! ")])]),e("p",{class:"mt-2"},[e("strong",null,"提示:"),A("如果您的账号是普通个人账号(未绑定 Google Cloud),请留空此字段。 ")])])])],-1))])):x("",!0),s.value.platform==="bedrock"&&!j.value?(n(),d("div",Jl,[e("div",null,[t[183]||(t[183]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 访问密钥 ID *",-1)),f(e("input",{"onUpdate:modelValue":t[25]||(t[25]=o=>s.value.accessKeyId=o),class:_(["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":$.value.accessKeyId}]),placeholder:"请输入 AWS Access Key ID",required:"",type:"text"},null,2),[[M,s.value.accessKeyId]]),$.value.accessKeyId?(n(),d("p",Yl,g($.value.accessKeyId),1)):x("",!0)]),e("div",null,[t[184]||(t[184]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 秘密访问密钥 *",-1)),f(e("input",{"onUpdate:modelValue":t[26]||(t[26]=o=>s.value.secretAccessKey=o),class:_(["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":$.value.secretAccessKey}]),placeholder:"请输入 AWS Secret Access Key",required:"",type:"password"},null,2),[[M,s.value.secretAccessKey]]),$.value.secretAccessKey?(n(),d("p",Zl,g($.value.secretAccessKey),1)):x("",!0)]),e("div",null,[t[185]||(t[185]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 区域 *",-1)),f(e("input",{"onUpdate:modelValue":t[27]||(t[27]=o=>s.value.region=o),class:_(["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":$.value.region}]),placeholder:"例如:us-east-1",required:"",type:"text"},null,2),[[M,s.value.region]]),$.value.region?(n(),d("p",Xl,g($.value.region),1)):x("",!0),t[186]||(t[186]=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[187]||(t[187]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"会话令牌 (可选)",-1)),f(e("input",{"onUpdate:modelValue":t[28]||(t[28]=o=>s.value.sessionToken=o),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),[[M,s.value.sessionToken]]),t[188]||(t[188]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 仅在使用临时 AWS 凭证时需要填写 ",-1))]),e("div",null,[t[189]||(t[189]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"默认主模型 (可选)",-1)),f(e("input",{"onUpdate:modelValue":t[29]||(t[29]=o=>s.value.defaultModel=o),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),[[M,s.value.defaultModel]]),t[190]||(t[190]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1)),t[191]||(t[191]=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[192]||(t[192]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),f(e("input",{"onUpdate:modelValue":t[30]||(t[30]=o=>s.value.smallFastModel=o),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),[[M,s.value.smallFastModel]]),t[193]||(t[193]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 用于快速响应的轻量级模型,留空将使用系统默认 ",-1))])])):x("",!0),s.value.platform==="azure_openai"&&!j.value?(n(),d("div",eo,[e("div",null,[t[194]||(t[194]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint *",-1)),f(e("input",{"onUpdate:modelValue":t[31]||(t[31]=o=>s.value.azureEndpoint=o),class:_(["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":$.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",required:"",type:"url"},null,2),[[M,s.value.azureEndpoint]]),$.value.azureEndpoint?(n(),d("p",to,g($.value.azureEndpoint),1)):x("",!0),t[195]||(t[195]=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[196]||(t[196]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),f(e("input",{"onUpdate:modelValue":t[32]||(t[32]=o=>s.value.apiVersion=o),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),[[M,s.value.apiVersion]]),t[197]||(t[197]=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[198]||(t[198]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称 *",-1)),f(e("input",{"onUpdate:modelValue":t[33]||(t[33]=o=>s.value.deploymentName=o),class:_(["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":$.value.deploymentName}]),placeholder:"gpt-4",required:"",type:"text"},null,2),[[M,s.value.deploymentName]]),$.value.deploymentName?(n(),d("p",so,g($.value.deploymentName),1)):x("",!0),t[199]||(t[199]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Azure OpenAI Studio 中创建的部署名称 ",-1))]),e("div",null,[t[200]||(t[200]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),f(e("input",{"onUpdate:modelValue":t[34]||(t[34]=o=>s.value.apiKey=o),class:_(["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":$.value.apiKey}]),placeholder:"请输入 Azure OpenAI API Key",required:"",type:"password"},null,2),[[M,s.value.apiKey]]),$.value.apiKey?(n(),d("p",ao,g($.value.apiKey),1)):x("",!0),t[201]||(t[201]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Azure 门户获取的 API 密钥 ",-1))]),e("div",null,[t[202]||(t[202]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",ro,[(n(),d(ve,null,Ke(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],o=>e("label",{key:o,class:"flex cursor-pointer items-center"},[f(e("input",{"onUpdate:modelValue":t[35]||(t[35]=O=>s.value.supportedModels=O),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:o},null,8,lo),[[be,s.value.supportedModels]]),e("span",oo,g(o),1)])),64))]),t[203]||(t[203]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 选择此部署支持的模型类型 ",-1))])])):x("",!0),s.value.platform==="bedrock"&&!j.value?(n(),d("div",no,[e("div",null,[t[208]||(t[208]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",io,[e("label",uo,[f(e("input",{"onUpdate:modelValue":t[36]||(t[36]=o=>s.value.enableRateLimit=o),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),[[be,s.value.enableRateLimit]]),t[204]||(t[204]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[205]||(t[205]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),d("div",po,[t[206]||(t[206]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),f(e("input",{"onUpdate:modelValue":t[37]||(t[37]=o=>s.value.rateLimitDuration=o),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),[[M,s.value.rateLimitDuration,void 0,{number:!0}]]),t[207]||(t[207]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):x("",!0)])])):x("",!0),(s.value.platform==="claude-console"||s.value.platform==="ccr")&&!j.value?(n(),d("div",go,[e("div",null,[t[209]||(t[209]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),f(e("input",{"onUpdate:modelValue":t[38]||(t[38]=o=>s.value.apiUrl=o),class:_(["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":$.value.apiUrl}]),placeholder:"例如:https://api.example.com",required:"",type:"text"},null,2),[[M,s.value.apiUrl]]),$.value.apiUrl?(n(),d("p",mo,g($.value.apiUrl),1)):x("",!0)]),e("div",null,[t[210]||(t[210]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),f(e("input",{"onUpdate:modelValue":t[39]||(t[39]=o=>s.value.apiKey=o),class:_(["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":$.value.apiKey}]),placeholder:"请输入API Key",required:"",type:"password"},null,2),[[M,s.value.apiKey]]),$.value.apiKey?(n(),d("p",yo,g($.value.apiKey),1)):x("",!0)]),e("div",co,[e("div",null,[t[211]||(t[211]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),f(e("input",{"onUpdate:modelValue":t[40]||(t[40]=o=>s.value.dailyQuota=o),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),[[M,s.value.dailyQuota,void 0,{number:!0}]]),t[212]||(t[212]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),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)),f(e("input",{"onUpdate:modelValue":t[41]||(t[41]=o=>s.value.quotaResetTime=o),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),[[M,s.value.quotaResetTime]]),t[214]||(t[214]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 每日自动重置额度的时间 ",-1))])]),e("div",null,[t[222]||(t[222]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",xo,[e("button",{class:_(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",fe.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[42]||(t[42]=o=>fe.value="whitelist")},t[215]||(t[215]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),A(" 模型白名单 ",-1)]),2),e("button",{class:_(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",fe.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[43]||(t[43]=o=>fe.value="mapping")},t[216]||(t[216]=[e("i",{class:"fas fa-random mr-2"},null,-1),A(" 模型映射 ",-1)]),2)]),fe.value==="whitelist"?(n(),d("div",fo,[t[217]||(t[217]=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"}),A(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",bo,[(n(),d(ve,null,Ke(Oe,o=>e("label",{key:o.value,class:_(["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",ce.value.includes(o.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[f(e("input",{"onUpdate:modelValue":t[44]||(t[44]=O=>ce.value=O),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:o.value},null,8,vo),[[be,ce.value]]),e("span",ko,g(o.label),1)],2)),64))]),e("p",ho,[A(" 已选择 "+g(ce.value.length)+" 个模型 ",1),ce.value.length===0?(n(),d("span",wo,"(支持所有模型)")):x("",!0)])])):(n(),d("div",$o,[t[221]||(t[221]=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"}),A(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",Ao,[(n(!0),d(ve,null,Ke(Ce.value,(o,O)=>(n(),d("div",{key:O,class:"flex items-center gap-2"},[f(e("input",{"onUpdate:modelValue":le=>o.from=le,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,Co),[[M,o.from]]),t[219]||(t[219]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),f(e("input",{"onUpdate:modelValue":le=>o.to=le,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"映射后的模型名称",type:"text"},null,8,Uo),[[M,o.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:le=>mt(O)},t[218]||(t[218]=[e("i",{class:"fas fa-trash"},null,-1)]),8,To)]))),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:ft},t[220]||(t[220]=[e("i",{class:"fas fa-plus mr-2"},null,-1),A(" 添加模型映射 ",-1)])),e("div",Io,[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[45]||(t[45]=o=>Ne("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),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[46]||(t[46]=o=>Ne("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[47]||(t[47]=o=>Ne("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),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[48]||(t[48]=o=>Ne("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[223]||(t[223]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),f(e("input",{"onUpdate:modelValue":t[49]||(t[49]=o=>s.value.userAgent=o),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),[[M,s.value.userAgent]]),t[224]||(t[224]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[229]||(t[229]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",Ko,[e("label",_o,[f(e("input",{"onUpdate:modelValue":t[50]||(t[50]=o=>s.value.enableRateLimit=o),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),[[be,s.value.enableRateLimit]]),t[225]||(t[225]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[226]||(t[226]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),d("div",Mo,[t[227]||(t[227]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),f(e("input",{"onUpdate:modelValue":t[51]||(t[51]=o=>s.value.rateLimitDuration=o),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),[[M,s.value.rateLimitDuration,void 0,{number:!0}]]),t[228]||(t[228]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):x("",!0)])])):x("",!0),s.value.platform==="openai-responses"&&!j.value?(n(),d("div",So,[e("div",null,[t[230]||(t[230]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),f(e("input",{"onUpdate:modelValue":t[52]||(t[52]=o=>s.value.baseApi=o),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),[[M,s.value.baseApi]]),t[231]||(t[231]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方 OpenAI 兼容 API 的基础地址,不要包含具体路径 ",-1))]),e("div",null,[t[232]||(t[232]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",Po,[f(e("input",{"onUpdate:modelValue":t[53]||(t[53]=o=>s.value.apiKey=o),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:X.value?"text":"password"},null,8,Do),[[os,s.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[54]||(t[54]=o=>X.value=!X.value)},[e("i",{class:_(X.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[233]||(t[233]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方服务提供的 API 密钥 ",-1))]),e("div",null,[t[234]||(t[234]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),f(e("input",{"onUpdate:modelValue":t[55]||(t[55]=o=>s.value.userAgent=o),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),[[M,s.value.userAgent]]),t[235]||(t[235]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可选项。如果设置,所有请求将使用此 User-Agent;否则透传客户端的 User-Agent ",-1))]),f(e("input",{"onUpdate:modelValue":t[56]||(t[56]=o=>s.value.rateLimitDuration=o),type:"hidden",value:"60"},null,512),[[M,s.value.rateLimitDuration,void 0,{number:!0}]])])):x("",!0),s.value.platform==="claude"?(n(),d("div",Vo,[t[238]||(t[238]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",Ro,[e("label",zo,[f(e("input",{"onUpdate:modelValue":t[57]||(t[57]=o=>s.value.subscriptionType=o),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),[[ye,s.value.subscriptionType]]),t[236]||(t[236]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",jo,[f(e("input",{"onUpdate:modelValue":t[58]||(t[58]=o=>s.value.subscriptionType=o),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),[[ye,s.value.subscriptionType]]),t[237]||(t[237]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[239]||(t[239]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),A(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):x("",!0),s.value.platform==="claude"?(n(),d("div",Oo,[e("label",Lo,[f(e("input",{"onUpdate:modelValue":t[59]||(t[59]=o=>s.value.autoStopOnWarning=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[be,s.value.autoStopOnWarning]]),t[240]||(t[240]=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))])])):x("",!0),s.value.platform==="claude"?(n(),d("div",No,[e("label",Eo,[f(e("input",{"onUpdate:modelValue":t[60]||(t[60]=o=>s.value.useUnifiedUserAgent=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[be,s.value.useUnifiedUserAgent]]),e("div",qo,[t[242]||(t[242]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[243]||(t[243]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),L.value?(n(),d("div",Wo,[e("div",Go,[e("p",Fo," 💡 当前统一版本:"+g(L.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:U.value,type:"button",onClick:jt},[U.value?(n(),d("div",Ho)):(n(),d("i",Bo)),A(" "+g(U.value?"清除中...":"清除缓存"),1)],8,Qo)])])):(n(),d("div",Jo,t[241]||(t[241]=[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)])))])])])):x("",!0),s.value.platform==="claude"?(n(),d("div",Yo,[e("label",Zo,[f(e("input",{"onUpdate:modelValue":t[61]||(t[61]=o=>s.value.useUnifiedClientId=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:wt},null,544),[[be,s.value.useUnifiedClientId]]),e("div",Xo,[t[247]||(t[247]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[248]||(t[248]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),s.value.useUnifiedClientId?(n(),d("div",en,[e("div",tn,[e("div",{class:"mb-2 flex items-center justify-between"},[t[245]||(t[245]=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:kt},t[244]||(t[244]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),A(" 重新生成 ",-1)]))]),e("div",sn,[e("code",an,[e("span",rn,g(s.value.unifiedClientId.substring(0,8)),1),e("span",ln,g(s.value.unifiedClientId.substring(8,56)),1),e("span",on,g(s.value.unifiedClientId.substring(56)),1)])]),t[246]||(t[246]=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"}),A(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):x("",!0)])])])):x("",!0),e("div",null,[t[249]||(t[249]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),f(e("input",{"onUpdate:modelValue":t[62]||(t[62]=o=>s.value.priority=o),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),[[M,s.value.priority,void 0,{number:!0}]]),t[250]||(t[250]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),s.value.addType==="manual"&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"?(n(),d("div",nn,[e("div",dn,[t[255]||(t[255]=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[254]||(t[254]=e("h5",{class:"mb-2 font-semibold text-blue-900 dark:text-blue-300"}," 手动输入 Token ",-1)),s.value.platform==="claude"?(n(),d("p",un," 请输入有效的 Claude Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="gemini"?(n(),d("p",pn," 请输入有效的 Gemini Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="openai"?(n(),d("p",gn," 请输入有效的 OpenAI Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="droid"?(n(),d("p",mn," 请输入有效的 Droid Access Token,并同时提供 Refresh Token 以支持自动刷新。 ")):x("",!0),e("div",yn,[t[253]||(t[253]=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"}),A(" 获取 Access Token 的方法: ")],-1)),s.value.platform==="claude"?(n(),d("p",cn,t[251]||(t[251]=[A(" 请从已登录 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),A(" 文件中的凭证, 请勿使用 Claude 官网 API Keys 页面的密钥。 ",-1)]))):s.value.platform==="gemini"?(n(),d("p",xn,t[252]||(t[252]=[A(" 请从已登录 Gemini CLI 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono dark:bg-blue-900/50"},"~/.config/gemini/credentials.json",-1),A(" 文件中的凭证。 ",-1)]))):s.value.platform==="openai"?(n(),d("p",fn," 请从已登录 OpenAI 账户的机器上获取认证凭证, 或通过 OAuth 授权流程获取 Access Token。 ")):s.value.platform==="droid"?(n(),d("p",bn," 请从已完成授权的 Droid CLI 或 Factory.ai 导出的凭证中获取 Access Token 与 Refresh Token。 ")):x("",!0)]),s.value.platform!=="droid"?(n(),d("p",vn," 💡 如果未填写 Refresh Token,Token 过期后需要手动更新。 ")):(n(),d("p",kn," ⚠️ Droid 账户必须填写 Refresh Token,缺失将导致无法自动刷新 Access Token。 "))])]),s.value.platform==="openai"?(n(),d("div",hn,[t[256]||(t[256]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token (可选)",-1)),f(e("textarea",{"onUpdate:modelValue":t[63]||(t[63]=o=>s.value.accessToken=o),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),[[M,s.value.accessToken]]),t[257]||(t[257]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),A(" Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。 ")],-1))])):(n(),d("div",wn,[t[258]||(t[258]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token *",-1)),f(e("textarea",{"onUpdate:modelValue":t[64]||(t[64]=o=>s.value.accessToken=o),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",{"border-red-500":$.value.accessToken}]),placeholder:"请输入 Access Token...",required:"",rows:"4"},null,2),[[M,s.value.accessToken]]),$.value.accessToken?(n(),d("p",$n,g($.value.accessToken),1)):x("",!0)])),s.value.platform==="openai"||s.value.platform==="droid"?(n(),d("div",An,[t[260]||(t[260]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token *",-1)),f(e("textarea",{"onUpdate:modelValue":t[65]||(t[65]=o=>s.value.refreshToken=o),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",{"border-red-500":$.value.refreshToken}]),placeholder:"请输入 Refresh Token(必填)...",required:"",rows:"4"},null,2),[[M,s.value.refreshToken]]),$.value.refreshToken?(n(),d("p",Cn,g($.value.refreshToken),1)):x("",!0),e("p",Un,[t[259]||(t[259]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),s.value.platform==="openai"?(n(),d(ve,{key:0},[A(" 系统将使用 Refresh Token 自动获取 Access Token 和用户信息 ")],64)):(n(),d(ve,{key:1},[A(" 系统将使用 Refresh Token 自动刷新 Factory.ai 访问令牌,确保账户保持可用。 ")],64))])])):(n(),d("div",Tn,[t[261]||(t[261]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token (可选)",-1)),f(e("textarea",{"onUpdate:modelValue":t[66]||(t[66]=o=>s.value.refreshToken=o),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),[[M,s.value.refreshToken]])]))])):x("",!0),s.value.addType==="apikey"&&s.value.platform==="droid"?(n(),d("div",In,[t[264]||(t[264]=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[262]||(t[262]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 列表 *",-1)),f(e("textarea",{"onUpdate:modelValue":t[67]||(t[67]=o=>s.value.apiKeysInput=o),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",{"border-red-500":$.value.apiKeys}]),placeholder:"每行一个 API Key,可粘贴多行",required:"",rows:"6"},null,2),[[M,s.value.apiKeysInput]]),$.value.apiKeys?(n(),d("p",Kn,g($.value.apiKeys),1)):x("",!0),t[263]||(t[263]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),A(" 建议为每条 Key 提供独立额度;系统会自动去重并忽略空白行。 ")],-1))]),t[265]||(t[265]=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"}),A("分配策略说明")]),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))])):x("",!0),Ye(ns,{modelValue:s.value.proxy,"onUpdate:modelValue":t[68]||(t[68]=o=>s.value.proxy=o)},null,8,["modelValue"]),e("div",_n,[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[69]||(t[69]=o=>i.$emit("close"))}," 取消 "),(s.value.addType==="oauth"||s.value.addType==="setup-token")&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"?(n(),d("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:Y.value,type:"button",onClick:Pe}," 下一步 ",8,Mn)):(n(),d("button",{key:1,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:Y.value,type:"button",onClick:He},[Y.value?(n(),d("div",Pn)):x("",!0),A(" "+g(Y.value?"创建中...":"创建"),1)],8,Sn))])])])):x("",!0),H.value===2&&s.value.addType==="oauth"?(n(),Fe(dr,{key:2,platform:s.value.platform,proxy:s.value.proxy,onBack:t[70]||(t[70]=o=>H.value=1),onSuccess:De},null,8,["platform","proxy"])):x("",!0),H.value===2&&s.value.addType==="setup-token"?(n(),d("div",Dn,[s.value.platform==="claude"?(n(),d("div",Vn,[e("div",Rn,[e("div",zn,[t[277]||(t[277]=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",jn,[t[275]||(t[275]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"}," Claude Setup Token 授权 ",-1)),t[276]||(t[276]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤通过 Setup Token 完成 Claude 账户的授权: ",-1)),e("div",On,[e("div",Ln,[e("div",Nn,[t[268]||(t[268]=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",En,[t[267]||(t[267]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),C.value?(n(),d("div",Fn,[e("div",Qn,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:C.value},null,8,Bn),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:m},[e("i",{class:_(S.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:y},t[266]||(t[266]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),A("重新生成 ",-1)]))])):(n(),d("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:J.value,onClick:We},[J.value?(n(),d("div",Gn)):(n(),d("i",Wn)),A(" "+g(J.value?"生成中...":"生成 Setup Token 授权链接"),1)],8,qn))])])]),t[274]||(t[274]=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,"注意:"),A("如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 ")])])])])],-1)),e("div",Hn,[e("div",Jn,[t[273]||(t[273]=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",Yn,[t[271]||(t[271]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),t[272]||(t[272]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 授权完成后,从返回页面复制 Authorization Code,并粘贴到下方输入框: ",-1)),e("div",Zn,[e("div",null,[t[269]||(t[269]=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"}),A("Authorization Code ")],-1)),f(e("textarea",{"onUpdate:modelValue":t[71]||(t[71]=o=>v.value=o),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),[[M,v.value]])]),t[270]||(t[270]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),A(" 请粘贴从Claude Code授权页面复制的Authorization Code ")],-1))])])])])])])])])])):x("",!0),e("div",Xn,[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[72]||(t[72]=o=>H.value=1)}," 上一步 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!qe.value||G.value,type:"button",onClick:I},[G.value?(n(),d("div",ti)):x("",!0),A(" "+g(G.value?"验证中...":"完成授权"),1)],8,ei)])])):x("",!0),j.value?(n(),d("div",si,[e("div",null,[t[278]||(t[278]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),f(e("input",{"onUpdate:modelValue":t[73]||(t[73]=o=>s.value.name=o),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),[[M,s.value.name]])]),e("div",null,[t[279]||(t[279]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),f(e("textarea",{"onUpdate:modelValue":t[74]||(t[74]=o=>s.value.description=o),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),[[M,s.value.description]])]),e("div",null,[t[283]||(t[283]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",ai,[e("label",ri,[f(e("input",{"onUpdate:modelValue":t[75]||(t[75]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[ye,s.value.accountType]]),t[280]||(t[280]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",li,[f(e("input",{"onUpdate:modelValue":t[76]||(t[76]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[ye,s.value.accountType]]),t[281]||(t[281]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",oi,[f(e("input",{"onUpdate:modelValue":t[77]||(t[77]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[ye,s.value.accountType]]),t[282]||(t[282]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[284]||(t[284]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),s.value.accountType==="group"?(n(),d("div",ni,[t[286]||(t[286]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",ii,[e("div",di,[e("div",ui,[$e.value.length===0?(n(),d("div",pi," 暂无可用分组 ")):x("",!0),(n(!0),d(ve,null,Ke($e.value,o=>(n(),d("label",{key:o.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[f(e("input",{"onUpdate:modelValue":t[78]||(t[78]=O=>s.value.groupIds=O),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:o.id},null,8,gi),[[be,s.value.groupIds]]),e("span",mi,g(o.name)+" ("+g(o.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:st},t[285]||(t[285]=[e("i",{class:"fas fa-plus"},null,-1),A(" 新建分组 ",-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:Ge},[e("i",{class:_(["fas fa-sync-alt",{"animate-spin":ot.value}])},null,2)])])])):x("",!0),s.value.platform==="gemini"?(n(),d("div",yi,[t[287]||(t[287]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),f(e("input",{"onUpdate:modelValue":t[79]||(t[79]=o=>s.value.projectId=o),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),[[M,s.value.projectId]]),t[288]||(t[288]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," Google Cloud/Workspace 账号可能需要提供项目 ID ",-1))])):x("",!0),s.value.platform==="claude"?(n(),d("div",ci,[t[291]||(t[291]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",xi,[e("label",fi,[f(e("input",{"onUpdate:modelValue":t[80]||(t[80]=o=>s.value.subscriptionType=o),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),[[ye,s.value.subscriptionType]]),t[289]||(t[289]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",bi,[f(e("input",{"onUpdate:modelValue":t[81]||(t[81]=o=>s.value.subscriptionType=o),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),[[ye,s.value.subscriptionType]]),t[290]||(t[290]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[292]||(t[292]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),A(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):x("",!0),s.value.platform==="claude"?(n(),d("div",vi,[e("label",ki,[f(e("input",{"onUpdate:modelValue":t[82]||(t[82]=o=>s.value.autoStopOnWarning=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[be,s.value.autoStopOnWarning]]),t[293]||(t[293]=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))])])):x("",!0),s.value.platform==="claude"?(n(),d("div",hi,[e("label",wi,[f(e("input",{"onUpdate:modelValue":t[83]||(t[83]=o=>s.value.useUnifiedUserAgent=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[be,s.value.useUnifiedUserAgent]]),e("div",$i,[t[295]||(t[295]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[296]||(t[296]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),L.value?(n(),d("div",Ai,[e("div",Ci,[e("p",Ui," 💡 当前统一版本:"+g(L.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:U.value,type:"button",onClick:jt},[U.value?(n(),d("div",Ki)):(n(),d("i",Ii)),A(" "+g(U.value?"清除中...":"清除缓存"),1)],8,Ti)])])):(n(),d("div",_i,t[294]||(t[294]=[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)])))])])])):x("",!0),s.value.platform==="claude"?(n(),d("div",Mi,[e("label",Si,[f(e("input",{"onUpdate:modelValue":t[84]||(t[84]=o=>s.value.useUnifiedClientId=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:wt},null,544),[[be,s.value.useUnifiedClientId]]),e("div",Pi,[t[300]||(t[300]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[301]||(t[301]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),s.value.useUnifiedClientId?(n(),d("div",Di,[e("div",Vi,[e("div",{class:"mb-2 flex items-center justify-between"},[t[298]||(t[298]=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:kt},t[297]||(t[297]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),A(" 重新生成 ",-1)]))]),e("div",Ri,[e("code",zi,[e("span",ji,g(s.value.unifiedClientId.substring(0,8)),1),e("span",Oi,g(s.value.unifiedClientId.substring(8,56)),1),e("span",Li,g(s.value.unifiedClientId.substring(56)),1)])]),t[299]||(t[299]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),A(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):x("",!0)])])])):x("",!0),e("div",null,[t[302]||(t[302]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),f(e("input",{"onUpdate:modelValue":t[85]||(t[85]=o=>s.value.priority=o),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),[[M,s.value.priority,void 0,{number:!0}]]),t[303]||(t[303]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),s.value.platform==="claude-console"||s.value.platform==="ccr"?(n(),d("div",Ni,[e("div",null,[t[304]||(t[304]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API URL",-1)),f(e("input",{"onUpdate:modelValue":t[86]||(t[86]=o=>s.value.apiUrl=o),class:"form-input w-full",placeholder:"例如:https://api.example.com",required:"",type:"text"},null,512),[[M,s.value.apiUrl]])]),e("div",null,[t[305]||(t[305]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API Key",-1)),f(e("input",{"onUpdate:modelValue":t[87]||(t[87]=o=>s.value.apiKey=o),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[M,s.value.apiKey]]),t[306]||(t[306]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",Ei,[e("div",null,[t[307]||(t[307]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),f(e("input",{"onUpdate:modelValue":t[88]||(t[88]=o=>s.value.dailyQuota=o),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),[[M,s.value.dailyQuota,void 0,{number:!0}]]),t[308]||(t[308]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[309]||(t[309]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),f(e("input",{"onUpdate:modelValue":t[89]||(t[89]=o=>s.value.quotaResetTime=o),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),[[M,s.value.quotaResetTime]]),t[310]||(t[310]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),j.value&&s.value.dailyQuota>0?(n(),d("div",qi,[e("div",Wi,[t[311]||(t[311]=e("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"}," 今日使用情况 ",-1)),e("span",Gi," $"+g(rt().toFixed(4))+" / $"+g(s.value.dailyQuota.toFixed(2)),1)]),e("div",Fi,[e("div",{class:_(["absolute left-0 top-0 h-full rounded-full transition-all",Ze.value>=90?"bg-red-500":Ze.value>=70?"bg-yellow-500":"bg-green-500"]),style:Se({width:`${Math.min(Ze.value,100)}%`})},null,6)]),e("div",Qi,[e("span",Bi," 剩余: $"+g(Math.max(0,s.value.dailyQuota-rt()).toFixed(2)),1),e("span",Hi,g(Ze.value.toFixed(1))+"% 已使用 ",1)])])):x("",!0),e("div",null,[t[319]||(t[319]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",Ji,[e("button",{class:_(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",fe.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[90]||(t[90]=o=>fe.value="whitelist")},t[312]||(t[312]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),A(" 模型白名单 ",-1)]),2),e("button",{class:_(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",fe.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[91]||(t[91]=o=>fe.value="mapping")},t[313]||(t[313]=[e("i",{class:"fas fa-random mr-2"},null,-1),A(" 模型映射 ",-1)]),2)]),fe.value==="whitelist"?(n(),d("div",Yi,[t[314]||(t[314]=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"}),A(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",Zi,[(n(),d(ve,null,Ke(Oe,o=>e("label",{key:o.value,class:_(["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",ce.value.includes(o.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[f(e("input",{"onUpdate:modelValue":t[92]||(t[92]=O=>ce.value=O),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:o.value},null,8,Xi),[[be,ce.value]]),e("span",ed,g(o.label),1)],2)),64))]),e("p",td,[A(" 已选择 "+g(ce.value.length)+" 个模型 ",1),ce.value.length===0?(n(),d("span",sd,"(支持所有模型)")):x("",!0)])])):(n(),d("div",ad,[t[318]||(t[318]=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"}),A(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",rd,[(n(!0),d(ve,null,Ke(Ce.value,(o,O)=>(n(),d("div",{key:O,class:"flex items-center gap-2"},[f(e("input",{"onUpdate:modelValue":le=>o.from=le,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"原始模型名称",type:"text"},null,8,ld),[[M,o.from]]),t[316]||(t[316]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),f(e("input",{"onUpdate:modelValue":le=>o.to=le,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"映射后的模型名称",type:"text"},null,8,od),[[M,o.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:le=>mt(O)},t[315]||(t[315]=[e("i",{class:"fas fa-trash"},null,-1)]),8,nd)]))),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:ft},t[317]||(t[317]=[e("i",{class:"fas fa-plus mr-2"},null,-1),A(" 添加模型映射 ",-1)])),e("div",id,[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[93]||(t[93]=o=>Ne("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),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[94]||(t[94]=o=>Ne("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[95]||(t[95]=o=>Ne("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),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[96]||(t[96]=o=>Ne("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[320]||(t[320]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent (可选)",-1)),f(e("input",{"onUpdate:modelValue":t[97]||(t[97]=o=>s.value.userAgent=o),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[M,s.value.userAgent]]),t[321]||(t[321]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[326]||(t[326]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",dd,[e("label",ud,[f(e("input",{"onUpdate:modelValue":t[98]||(t[98]=o=>s.value.enableRateLimit=o),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[be,s.value.enableRateLimit]]),t[322]||(t[322]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[323]||(t[323]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),d("div",pd,[t[324]||(t[324]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),f(e("input",{"onUpdate:modelValue":t[99]||(t[99]=o=>s.value.rateLimitDuration=o),class:"form-input w-full",min:"1",type:"number"},null,512),[[M,s.value.rateLimitDuration,void 0,{number:!0}]]),t[325]||(t[325]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):x("",!0)])])):x("",!0),s.value.platform==="openai-responses"?(n(),d("div",gd,[e("div",null,[t[327]||(t[327]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 基础地址",-1)),f(e("input",{"onUpdate:modelValue":t[100]||(t[100]=o=>s.value.baseApi=o),class:"form-input w-full",placeholder:"https://api.example.com/v1",type:"url"},null,512),[[M,s.value.baseApi]])]),e("div",null,[t[328]||(t[328]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 密钥",-1)),e("div",md,[f(e("input",{"onUpdate:modelValue":t[101]||(t[101]=o=>s.value.apiKey=o),class:"form-input w-full pr-10",placeholder:"留空表示不更新",type:X.value?"text":"password"},null,8,yd),[[os,s.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600",type:"button",onClick:t[102]||(t[102]=o=>X.value=!X.value)},[e("i",{class:_(X.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[329]||(t[329]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",null,[t[330]||(t[330]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent",-1)),f(e("input",{"onUpdate:modelValue":t[103]||(t[103]=o=>s.value.userAgent=o),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[M,s.value.userAgent]]),t[331]||(t[331]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),f(e("input",{"onUpdate:modelValue":t[104]||(t[104]=o=>s.value.rateLimitDuration=o),type:"hidden"},null,512),[[M,s.value.rateLimitDuration,void 0,{number:!0}]]),e("div",cd,[e("div",null,[t[332]||(t[332]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),f(e("input",{"onUpdate:modelValue":t[105]||(t[105]=o=>s.value.dailyQuota=o),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),[[M,s.value.dailyQuota,void 0,{number:!0}]])]),e("div",null,[t[333]||(t[333]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),f(e("input",{"onUpdate:modelValue":t[106]||(t[106]=o=>s.value.quotaResetTime=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",type:"time"},null,512),[[M,s.value.quotaResetTime]])])])])):x("",!0),s.value.platform==="bedrock"?(n(),d("div",xd,[e("div",null,[t[334]||(t[334]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 访问密钥 ID",-1)),f(e("input",{"onUpdate:modelValue":t[107]||(t[107]=o=>s.value.accessKeyId=o),class:"form-input w-full",placeholder:"留空表示不更新",type:"text"},null,512),[[M,s.value.accessKeyId]]),t[335]||(t[335]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Access Key ID",-1))]),e("div",null,[t[336]||(t[336]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 秘密访问密钥",-1)),f(e("input",{"onUpdate:modelValue":t[108]||(t[108]=o=>s.value.secretAccessKey=o),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[M,s.value.secretAccessKey]]),t[337]||(t[337]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Secret Access Key",-1))]),e("div",null,[t[338]||(t[338]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 区域",-1)),f(e("input",{"onUpdate:modelValue":t[109]||(t[109]=o=>s.value.region=o),class:"form-input w-full",placeholder:"例如:us-east-1",type:"text"},null,512),[[M,s.value.region]]),t[339]||(t[339]=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[340]||(t[340]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"会话令牌 (可选)",-1)),f(e("input",{"onUpdate:modelValue":t[110]||(t[110]=o=>s.value.sessionToken=o),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[M,s.value.sessionToken]])]),e("div",null,[t[341]||(t[341]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"默认主模型 (可选)",-1)),f(e("input",{"onUpdate:modelValue":t[111]||(t[111]=o=>s.value.defaultModel=o),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[M,s.value.defaultModel]]),t[342]||(t[342]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1))]),e("div",null,[t[343]||(t[343]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),f(e("input",{"onUpdate:modelValue":t[112]||(t[112]=o=>s.value.smallFastModel=o),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[M,s.value.smallFastModel]]),t[344]||(t[344]=e("p",{class:"mt-1 text-xs text-gray-500"},"用于快速响应的轻量级模型,留空将使用系统默认",-1))]),e("div",null,[t[349]||(t[349]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",fd,[e("label",bd,[f(e("input",{"onUpdate:modelValue":t[113]||(t[113]=o=>s.value.enableRateLimit=o),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[be,s.value.enableRateLimit]]),t[345]||(t[345]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[346]||(t[346]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),d("div",vd,[t[347]||(t[347]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),f(e("input",{"onUpdate:modelValue":t[114]||(t[114]=o=>s.value.rateLimitDuration=o),class:"form-input w-full",min:"1",type:"number"},null,512),[[M,s.value.rateLimitDuration,void 0,{number:!0}]]),t[348]||(t[348]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):x("",!0)])])):x("",!0),s.value.platform==="azure_openai"?(n(),d("div",kd,[e("div",null,[t[350]||(t[350]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint",-1)),f(e("input",{"onUpdate:modelValue":t[115]||(t[115]=o=>s.value.azureEndpoint=o),class:_(["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":$.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",type:"url"},null,2),[[M,s.value.azureEndpoint]]),$.value.azureEndpoint?(n(),d("p",hd,g($.value.azureEndpoint),1)):x("",!0)]),e("div",null,[t[351]||(t[351]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),f(e("input",{"onUpdate:modelValue":t[116]||(t[116]=o=>s.value.apiVersion=o),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),[[M,s.value.apiVersion]]),t[352]||(t[352]=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[353]||(t[353]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称",-1)),f(e("input",{"onUpdate:modelValue":t[117]||(t[117]=o=>s.value.deploymentName=o),class:_(["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":$.value.deploymentName}]),placeholder:"gpt-4",type:"text"},null,2),[[M,s.value.deploymentName]]),$.value.deploymentName?(n(),d("p",wd,g($.value.deploymentName),1)):x("",!0)]),e("div",null,[t[354]||(t[354]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),f(e("input",{"onUpdate:modelValue":t[118]||(t[118]=o=>s.value.apiKey=o),class:_(["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":$.value.apiKey}]),placeholder:"留空表示不更新",type:"password"},null,2),[[M,s.value.apiKey]]),$.value.apiKey?(n(),d("p",$d,g($.value.apiKey),1)):x("",!0),t[355]||(t[355]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))]),e("div",null,[t[356]||(t[356]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",Ad,[(n(),d(ve,null,Ke(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],o=>e("label",{key:o,class:"flex cursor-pointer items-center"},[f(e("input",{"onUpdate:modelValue":t[119]||(t[119]=O=>s.value.supportedModels=O),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:o},null,8,Cd),[[be,s.value.supportedModels]]),e("span",Ud,g(o),1)])),64))]),t[357]||(t[357]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"选择此部署支持的模型类型",-1))])])):x("",!0),j.value&&Xe.value?(n(),d("div",Td,[e("div",Id,[t[362]||(t[362]=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",null,[t[360]||(t[360]=e("h5",{class:"mb-2 font-semibold text-purple-900 dark:text-purple-200"}," 更新 API Key ",-1)),e("p",Kd,[t[358]||(t[358]=A(" 当前已保存 ",-1)),e("strong",null,g(lt.value),1),t[359]||(t[359]=A(" 条 API Key。您可以追加新的 Key,或通过下方模式快速覆盖、删除指定 Key。 ",-1))]),t[361]||(t[361]=e("p",{class:"text-xs text-purple-700 dark:text-purple-300"}," 留空表示保留现有 Key 不变;根据所选模式决定是追加、覆盖还是删除输入的 Key。 ",-1))])]),e("div",_d,[e("div",null,[t[363]||(t[363]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 API Key 列表",-1)),f(e("textarea",{"onUpdate:modelValue":t[120]||(t[120]=o=>s.value.apiKeysInput=o),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",{"border-red-500":$.value.apiKeys}]),placeholder:"根据模式填写;每行一个 API Key",rows:"6"},null,2),[[M,s.value.apiKeysInput]]),$.value.apiKeys?(n(),d("p",Md,g($.value.apiKeys),1)):x("",!0)]),e("div",Sd,[e("div",Pd,[t[364]||(t[364]=e("span",{class:"text-sm font-semibold text-purple-800 dark:text-purple-100"},"API Key 更新模式",-1)),e("span",Dd,g(at.value),1)]),e("div",Vd,[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:Se(ct.value)},null,4),(n(),d(ve,null,Ke(Le,o=>e("button",{key:o.value,class:_(["relative z-10 flex items-center justify-center rounded-2xl px-2 text-xs font-semibold transition-all duration-200 ease-out focus:outline-none focus-visible:ring-2 focus-visible:ring-purple-500/60 dark:focus-visible:ring-purple-400/60",s.value.apiKeyUpdateMode===o.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:O=>s.value.apiKeyUpdateMode=o.value},g(o.label),11,Rd)),64))]),e("p",zd,g(Be.value),1)]),t[365]||(t[365]=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"}),A("小提示")]),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))])])):x("",!0),!(j.value&&Xe.value)&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"?(n(),d("div",jd,[t[368]||(t[368]=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",Od,[e("div",null,[t[366]||(t[366]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Access Token",-1)),f(e("textarea",{"onUpdate:modelValue":t[121]||(t[121]=o=>s.value.accessToken=o),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),[[M,s.value.accessToken]])]),e("div",null,[t[367]||(t[367]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Refresh Token",-1)),f(e("textarea",{"onUpdate:modelValue":t[122]||(t[122]=o=>s.value.refreshToken=o),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),[[M,s.value.refreshToken]])])])])):x("",!0),Ye(ns,{modelValue:s.value.proxy,"onUpdate:modelValue":t[123]||(t[123]=o=>s.value.proxy=o)},null,8,["modelValue"]),e("div",Ld,[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[124]||(t[124]=o=>i.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:Y.value,type:"button",onClick:Ue},[Y.value?(n(),d("div",Ed)):x("",!0),A(" "+g(Y.value?"更新中...":"更新"),1)],8,Nd)])])):x("",!0)])])):x("",!0),Ye(cs,{"cancel-text":je(te).cancelText,"confirm-text":je(te).confirmText,message:je(te).message,show:je(W),title:je(te).title,onCancel:je(k),onConfirm:je(h)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),tt.value?(n(),Fe(Gr,{key:1,onClose:t[125]||(t[125]=o=>tt.value=!1),onRefresh:xt})):x("",!0)]))}},us=rs(qd,[["__scopeId","data-v-3fa90d70"]]),Wd={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Gd={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"},Fd={class:"mb-4 flex items-center justify-between sm:mb-6"},Qd={class:"flex items-center gap-2 sm:gap-3"},Bd={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Hd={class:"space-y-6"},Jd={key:0,class:"mt-1 text-xs text-red-500"},Yd={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Zd={key:0,class:"mt-1 text-xs text-red-500"},Xd={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},e0=["placeholder","required"],t0={key:0,class:"mt-1 text-xs text-red-500"},s0={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},a0={class:"mb-3"},r0={class:"inline-flex cursor-pointer items-center"},l0={key:0},o0={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},n0={class:"mb-3 space-y-2"},i0=["onUpdate:modelValue"],d0=["onUpdate:modelValue"],u0=["onClick"],p0={class:"mt-2 flex gap-3"},g0=["disabled"],m0={key:0,class:"loading-spinner mr-2"},y0={__name:"CcrAccountForm",props:{account:{type:Object,default:null}},emits:["close","success"],setup(B,{emit:Ae}){const p=B,xe=Ae,K=T(!0),W=ge(()=>!!p.account),te=T(!1),w=T({name:"",description:"",apiUrl:"",apiKey:"",priority:50,userAgent:"",rateLimitDuration:60,dailyQuota:0,quotaResetTime:"00:00",proxy:null,supportedModels:{}}),h=T(!0),k=T({}),j=T([]),Q=()=>{const C={};for(const v of j.value){const S=(v.from||"").trim(),ee=(v.to||"").trim();S&&ee&&(C[S]=ee)}return C},H=()=>{j.value.push({from:"",to:""})},Y=C=>{j.value.splice(C,1)},X=()=>{const C={};return(!w.value.name||w.value.name.trim().length===0)&&(C.name="名称不能为空"),(!w.value.apiUrl||w.value.apiUrl.trim().length===0)&&(C.apiUrl="API URL 不能为空"),!W.value&&(!w.value.apiKey||w.value.apiKey.trim().length===0)&&(C.apiKey="API Key 不能为空"),k.value=C,Object.keys(C).length===0},J=async()=>{if(X()){te.value=!0;try{if(W.value){const C={name:w.value.name,description:w.value.description,apiUrl:w.value.apiUrl,priority:w.value.priority,userAgent:w.value.userAgent,rateLimitDuration:h.value?Number(w.value.rateLimitDuration||60):0,dailyQuota:Number(w.value.dailyQuota||0),quotaResetTime:w.value.quotaResetTime||"00:00",proxy:w.value.proxy||null,supportedModels:Q()};w.value.apiKey&&w.value.apiKey.trim().length>0&&(C.apiKey=w.value.apiKey);const v=await V.put(`/admin/ccr-accounts/${p.account.id}`,C);v.success?xe("success"):z(v.message||"保存失败","error")}else{const C={name:w.value.name,description:w.value.description,apiUrl:w.value.apiUrl,apiKey:w.value.apiKey,priority:Number(w.value.priority||50),supportedModels:Q(),userAgent:w.value.userAgent,rateLimitDuration:h.value?Number(w.value.rateLimitDuration||60):0,proxy:w.value.proxy,accountType:"shared",dailyQuota:Number(w.value.dailyQuota||0),quotaResetTime:w.value.quotaResetTime||"00:00"},v=await V.post("/admin/ccr-accounts",C);v.success?xe("success"):z(v.message||"创建失败","error")}}catch(C){z(C.message||"请求失败","error")}finally{te.value=!1}}},G=()=>{if(!p.account)return;const C=p.account;w.value.name=C.name||"",w.value.description=C.description||"",w.value.apiUrl=C.apiUrl||"",w.value.priority=Number(C.priority||50),w.value.userAgent=C.userAgent||"",w.value.rateLimitDuration=Number(C.rateLimitDuration||60),w.value.dailyQuota=Number(C.dailyQuota||0),w.value.quotaResetTime=C.quotaResetTime||"00:00",w.value.proxy=C.proxy||null,h.value=w.value.rateLimitDuration>0,j.value=[];const v=C.supportedModels||{};if(v&&typeof v=="object")for(const S of Object.keys(v))j.value.push({from:S,to:v[S]})};return ss(()=>{W.value&&G()}),re(()=>p.account,()=>{W.value&&G()}),(C,v)=>(n(),Fe(as,{to:"body"},[K.value?(n(),d("div",Wd,[e("div",Gd,[e("div",Fd,[e("div",Qd,[v[13]||(v[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",Bd,g(W.value?"编辑 CCR 账户":"添加 CCR 账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:v[0]||(v[0]=S=>C.$emit("close"))},v[14]||(v[14]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",Hd,[e("div",null,[v[15]||(v[15]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称 *",-1)),f(e("input",{"onUpdate:modelValue":v[1]||(v[1]=S=>w.value.name=S),class:_(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":k.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[M,w.value.name]]),k.value.name?(n(),d("p",Jd,g(k.value.name),1)):x("",!0)]),e("div",null,[v[16]||(v[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),f(e("textarea",{"onUpdate:modelValue":v[2]||(v[2]=S=>w.value.description=S),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),[[M,w.value.description]])]),e("div",Yd,[e("div",null,[v[17]||(v[17]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),f(e("input",{"onUpdate:modelValue":v[3]||(v[3]=S=>w.value.apiUrl=S),class:_(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":k.value.apiUrl}]),placeholder:"例如:https://api.example.com/v1/messages",required:"",type:"text"},null,2),[[M,w.value.apiUrl]]),k.value.apiUrl?(n(),d("p",Zd,g(k.value.apiUrl),1)):x("",!0)]),e("div",null,[e("label",Xd,"API Key "+g(W.value?"(留空不更新)":"*"),1),f(e("input",{"onUpdate:modelValue":v[4]||(v[4]=S=>w.value.apiKey=S),class:_(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":k.value.apiKey}]),placeholder:W.value?"留空表示不更新":"必填",required:!W.value,type:"password"},null,10,e0),[[M,w.value.apiKey]]),k.value.apiKey?(n(),d("p",t0,g(k.value.apiKey),1)):x("",!0)])]),e("div",s0,[e("div",null,[v[18]||(v[18]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"优先级",-1)),f(e("input",{"onUpdate:modelValue":v[5]||(v[5]=S=>w.value.priority=S),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),[[M,w.value.priority,void 0,{number:!0}]]),v[19]||(v[19]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议范围:1-100,数字越小优先级越高 ",-1))]),e("div",null,[v[20]||(v[20]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),f(e("input",{"onUpdate:modelValue":v[6]||(v[6]=S=>w.value.userAgent=S),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),[[M,w.value.userAgent]])])]),e("div",null,[v[24]||(v[24]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",a0,[e("label",r0,[f(e("input",{"onUpdate:modelValue":v[7]||(v[7]=S=>h.value=S),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),[[be,h.value]]),v[21]||(v[21]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制(429 时暂停调度)",-1))])]),h.value?(n(),d("div",l0,[v[22]||(v[22]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),f(e("input",{"onUpdate:modelValue":v[8]||(v[8]=S=>w.value.rateLimitDuration=S),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),[[M,w.value.rateLimitDuration,void 0,{number:!0}]]),v[23]||(v[23]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):x("",!0)]),e("div",o0,[e("div",null,[v[25]||(v[25]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日额度限制 ($)",-1)),f(e("input",{"onUpdate:modelValue":v[9]||(v[9]=S=>w.value.dailyQuota=S),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),[[M,w.value.dailyQuota,void 0,{number:!0}]]),v[26]||(v[26]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[v[27]||(v[27]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"额度重置时间",-1)),f(e("input",{"onUpdate:modelValue":v[10]||(v[10]=S=>w.value.quotaResetTime=S),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),[[M,w.value.quotaResetTime]]),v[28]||(v[28]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),e("div",null,[v[32]||(v[32]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型映射表 (可选)",-1)),v[33]||(v[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"}),A(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",n0,[(n(!0),d(ve,null,Ke(j.value,(S,ee)=>(n(),d("div",{key:ee,class:"flex items-center gap-2"},[f(e("input",{"onUpdate:modelValue":L=>S.from=L,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,i0),[[M,S.from]]),v[30]||(v[30]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),f(e("input",{"onUpdate:modelValue":L=>S.to=L,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,d0),[[M,S.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:L=>Y(ee)},v[29]||(v[29]=[e("i",{class:"fas fa-trash"},null,-1)]),8,u0)]))),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:H},v[31]||(v[31]=[e("i",{class:"fas fa-plus mr-2"},null,-1),A(" 添加模型映射 ",-1)]))]),e("div",null,[Ye(ns,{modelValue:w.value.proxy,"onUpdate:modelValue":v[11]||(v[11]=S=>w.value.proxy=S)},null,8,["modelValue"])]),e("div",p0,[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:v[12]||(v[12]=S=>C.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:te.value,type:"button",onClick:J},[te.value?(n(),d("div",m0)):x("",!0),A(" "+g(te.value?W.value?"保存中...":"创建中...":W.value?"保存":"创建"),1)],8,g0)])])])])):x("",!0)]))}},ps=rs(y0,[["__scopeId","data-v-8652672a"]]),c0={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},x0={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"},f0={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"},b0={class:"flex flex-1 items-start gap-3"},v0={class:"space-y-1"},k0={class:"flex flex-wrap items-center gap-2"},h0={class:"text-lg font-semibold text-gray-900 dark:text-gray-100 sm:text-xl"},w0={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"},$0={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"},A0={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},C0={key:0},U0={class:"flex-1 overflow-y-auto px-5 py-4 sm:px-6"},T0={key:0,class:"flex h-[50vh] items-center justify-center"},I0={class:"mb-5 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4"},K0={class:"flex items-start justify-between"},_0={class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"},M0={class:"mt-2 text-xl font-semibold text-gray-900 dark:text-gray-100"},S0={class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},P0={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gray-50 dark:bg-gray-800"},D0={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},V0={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"},R0={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"},z0={class:"flex items-center justify-between"},j0={class:"font-semibold text-gray-900 dark:text-gray-100"},O0={class:"mt-2 flex items-center justify-between"},L0={class:"font-semibold text-gray-900 dark:text-gray-100"},N0={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},E0={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"},q0={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"},W0={class:"flex items-center justify-between"},G0={class:"font-semibold text-gray-900 dark:text-gray-100"},F0={class:"mt-2 flex items-center justify-between"},Q0={class:"font-semibold text-gray-900 dark:text-gray-100"},B0={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},H0={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"},J0={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"},Y0={class:"flex items-center justify-between"},Z0={class:"font-semibold text-gray-900 dark:text-gray-100"},X0={class:"mt-2 flex items-center justify-between"},eu={class:"font-semibold text-gray-900 dark:text-gray-100"},tu={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},su={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},au={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},ru={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},lu={class:"flex items-center justify-between"},ou={class:"font-semibold text-gray-900 dark:text-gray-100"},nu={class:"flex items-center justify-between"},iu={class:"font-semibold text-gray-900 dark:text-gray-100"},du={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},uu={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},pu={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},gu={class:"flex items-center justify-between"},mu={class:"font-semibold text-gray-900 dark:text-gray-100"},yu={class:"flex items-center justify-between"},cu={class:"font-semibold text-gray-900 dark:text-gray-100"},xu={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},fu={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},bu={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},vu={class:"flex items-center justify-between"},ku={class:"font-semibold text-gray-900 dark:text-gray-100"},hu={class:"flex items-center justify-between"},wu={class:"font-semibold text-gray-900 dark:text-gray-100"},$u={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Au={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"},Cu={class:"mb-4 flex flex-wrap items-center justify-between gap-2"},Uu={class:"text-xs text-gray-400 dark:text-gray-500"},Tu={class:"h-[260px] sm:h-[300px]"},Iu={__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(B,{emit:Ae}){const p=B,xe=Ae,K=As(),{isDarkMode:W}=ws(K),te=T(null);let w=null;const h={claude:"Claude","claude-console":"Claude Console",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini",droid:"Droid"},k=ge(()=>{var P;return h[(P=p.account)==null?void 0:P.platform]||"未知平台"}),j=ge(()=>{var P;return(P=p.account)!=null&&P.accountType?p.account.accountType==="dedicated"?"专属":p.account.accountType==="group"?"分组":"共享":"共享"}),Q=ge(()=>({text:W.value?"#e5e7eb":"#374151",grid:W.value?"rgba(75, 85, 99, 0.25)":"rgba(209, 213, 219, 0.4)",cost:"#3b82f6",costFill:"rgba(59, 130, 246, 0.15)",requests:"#f97316"})),H=ge(()=>{var P;return((P=p.summary)==null?void 0:P.totalTokens)||0}),Y=ge(()=>{var P,u;return((u=(P=p.overview)==null?void 0:P.total)==null?void 0:u.inputTokens)||0}),X=ge(()=>{var P,u;return((u=(P=p.overview)==null?void 0:P.total)==null?void 0:u.outputTokens)||0}),J=P=>{const u=Number(P||0);return u>=1e6?`${(u/1e6).toFixed(2)}M`:u>=1e3?`${(u/1e3).toFixed(2)}K`:u.toLocaleString()},G=P=>{const u=Number(P||0);return Number.isNaN(u)?"$0.000000":u>=1?`$${u.toFixed(2)}`:u>=.01?`$${u.toFixed(3)}`:`$${u.toFixed(6)}`},C=P=>Math.round((Number(P)||0)*100)/100,v=P=>{if(!P)return"-";const u=new Date(P);if(Number.isNaN(u.getTime())){const s=P.split("-");return s.length===3?`${s[1]}-${s[2]}`:P}const E=String(u.getMonth()+1).padStart(2,"0"),Z=String(u.getDate()).padStart(2,"0");return`${E}-${Z}`},S=P=>{if(!P)return"暂无";const u=new Date(P);return Number.isNaN(u.getTime())?P:`${u.getFullYear()}-${String(u.getMonth()+1).padStart(2,"0")}-${String(u.getDate()).padStart(2,"0")} ${String(u.getHours()).padStart(2,"0")}:${String(u.getMinutes()).padStart(2,"0")}`},ee=(P,u)=>{if(!P)return 0;const E=p.history.find(Z=>Z.date===P);return E&&E[u]||0},L=ge(()=>{var P,u;return p.generatedAt||((P=p.summary)==null?void 0:P.generatedAt)||((u=p.summary)==null?void 0:u.generated_at)||""}),U=ge(()=>{var P,u,E,Z,s,fe,ce,Oe;return[{key:"totalCost",label:"30天总费用",value:((P=p.summary)==null?void 0:P.totalCostFormatted)||"$0.000000",subtitle:"累计成本",icon:"fa-file-invoice-dollar",iconClass:"text-emerald-500"},{key:"totalRequests",label:"30天总请求",value:J(((u=p.summary)==null?void 0:u.totalRequests)||0),subtitle:"调用次数",icon:"fa-paper-plane",iconClass:"text-blue-500"},{key:"avgCost",label:"日均费用",value:((E=p.summary)==null?void 0:E.avgDailyCostFormatted)||G(((Z=p.summary)==null?void 0:Z.avgDailyCost)||0),subtitle:(s=p.summary)!=null&&s.actualDaysUsed&&((fe=p.summary)==null?void 0:fe.actualDaysUsed)<((ce=p.summary)==null?void 0:ce.days)?`基于 ${p.summary.actualDaysUsed} 天实际使用`:"平均每日成本",icon:"fa-wave-square",iconClass:"text-purple-500"},{key:"avgRequests",label:"日均请求",value:J(C(((Oe=p.summary)==null?void 0:Oe.avgDailyRequests)||0)),subtitle:"平均每日调用",icon:"fa-chart-line",iconClass:"text-orange-500"}]}),R=async()=>{if(await $s(),!p.show||!te.value)return;if(w&&w.destroy(),!p.history||p.history.length===0){w=null;return}const P=p.history.map(Z=>Z.label),u=p.history.map(Z=>Z.cost||0),E=p.history.map(Z=>Z.requests||0);w=new Cs(te.value,{type:"line",data:{labels:P,datasets:[{label:"费用 (USD)",data:u,borderColor:Q.value.cost,backgroundColor:Q.value.costFill,tension:.35,fill:!0,yAxisID:"y"},{label:"请求次数",data:E,borderColor:Q.value.requests,backgroundColor:"transparent",tension:.35,yAxisID:"y1"}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{labels:{color:Q.value.text}},tooltip:{callbacks:{label(Z){return Z.dataset.label==="费用 (USD)"?`${Z.dataset.label}: ${G(Z.parsed.y)}`:`${Z.dataset.label}: ${J(Z.parsed.y)} 次`}}}},scales:{x:{ticks:{color:Q.value.text},grid:{color:Q.value.grid}},y:{position:"left",ticks:{color:Q.value.text,callback:Z=>G(Z)},grid:{color:Q.value.grid}},y1:{position:"right",ticks:{color:Q.value.text,callback:Z=>J(Z)},grid:{drawOnChartArea:!1}}}}})},we=()=>{w&&(w.destroy(),w=null)},_e=()=>{we(),xe("close")};return re(()=>p.show,P=>{P&&!p.loading?R():P||we()}),re(()=>p.loading,P=>{!P&&p.show&&R()}),re(()=>p.history,()=>{p.show&&!p.loading&&R()},{deep:!0}),re(W,()=>{p.show&&!p.loading&&R()}),ms(()=>{we()}),(P,u)=>{var E,Z,s,fe,ce,Oe,Ce,pt,Qe,Le,ct,at,Be,$,Ee,qe,rt,Ze,lt,Xe,gt,Me,Pe,We,y,m,I,De,He,Ue,et,ot,tt,$e,nt,Ge,st,xt,ft,mt,Ne;return n(),Fe(as,{to:"body"},[B.show?(n(),d("div",c0,[e("div",{class:"absolute inset-0",onClick:_e}),e("div",x0,[e("div",f0,[e("div",b0,[u[2]||(u[2]=e("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-indigo-500 text-white shadow-lg"},[e("i",{class:"fas fa-chart-area text-lg"})],-1)),e("div",v0,[e("div",k0,[e("h3",h0,g(((E=B.account)==null?void 0:E.name)||((Z=B.account)==null?void 0:Z.email)||"账号使用详情"),1),(s=B.account)!=null&&s.platform?(n(),d("span",w0,[u[0]||(u[0]=e("i",{class:"fas fa-layer-group mr-1"},null,-1)),A(g(k.value),1)])):x("",!0),(fe=B.account)!=null&&fe.accountType?(n(),d("span",$0,[u[1]||(u[1]=e("i",{class:"fas fa-user-tag mr-1"},null,-1)),A(g(j.value),1)])):x("",!0)]),e("p",A0,[A(" 近 "+g(((ce=B.summary)==null?void 0:ce.days)||30)+" 天内的费用与请求趋势 ",1),(Oe=B.summary)!=null&&Oe.actualDaysUsed&&((Ce=B.summary)==null?void 0:Ce.actualDaysUsed)<((pt=B.summary)==null?void 0:pt.days)?(n(),d("span",C0," (日均基于实际使用 "+g(B.summary.actualDaysUsed)+" 天) ",1)):x("",!0)])])]),e("button",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",onClick:_e},u[3]||(u[3]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",U0,[B.loading?(n(),d("div",T0,u[4]||(u[4]=[e("div",{class:"loading-spinner h-12 w-12 border-4 border-blue-500"},null,-1)]))):(n(),d(ve,{key:1},[e("div",I0,[(n(!0),d(ve,null,Ke(U.value,Je=>(n(),d("div",{key:Je.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",K0,[e("div",null,[e("p",_0,g(Je.label),1),e("p",M0,g(Je.value),1),e("p",S0,g(Je.subtitle),1)]),e("div",P0,[e("i",{class:_(["fas",Je.icon,Je.iconClass])},null,2)])])]))),128))]),e("div",D0,[e("div",V0,[u[8]||(u[8]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-sun"}),A(" 今日概览 ")],-1)),e("div",R0,[e("div",z0,[u[5]||(u[5]=e("span",null,"费用",-1)),e("span",j0,g(((Le=(Qe=B.summary)==null?void 0:Qe.today)==null?void 0:Le.costFormatted)||"$0.000000"),1)]),e("div",O0,[u[6]||(u[6]=e("span",null,"请求",-1)),e("span",L0,g(J(((at=(ct=B.summary)==null?void 0:ct.today)==null?void 0:at.requests)||0)),1)]),e("div",N0,[u[7]||(u[7]=e("span",null,"Tokens",-1)),e("span",null,g(J((($=(Be=B.summary)==null?void 0:Be.today)==null?void 0:$.tokens)||0)),1)])])]),e("div",E0,[u[12]||(u[12]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-amber-700 dark:text-amber-300"},[e("i",{class:"fas fa-crown"}),A(" 最高费用日 ")],-1)),e("div",q0,[e("div",W0,[u[9]||(u[9]=e("span",null,"日期",-1)),e("span",G0,g(v((qe=(Ee=B.summary)==null?void 0:Ee.highestCostDay)==null?void 0:qe.date)),1)]),e("div",F0,[u[10]||(u[10]=e("span",null,"费用",-1)),e("span",Q0,g(((Ze=(rt=B.summary)==null?void 0:rt.highestCostDay)==null?void 0:Ze.formattedCost)||"$0.000000"),1)]),e("div",B0,[u[11]||(u[11]=e("span",null,"请求",-1)),e("span",null,g(J(ee((Xe=(lt=B.summary)==null?void 0:lt.highestCostDay)==null?void 0:Xe.date,"requests"))),1)])])]),e("div",H0,[u[16]||(u[16]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-emerald-700 dark:text-emerald-300"},[e("i",{class:"fas fa-chart-bar"}),A(" 最高请求日 ")],-1)),e("div",J0,[e("div",Y0,[u[13]||(u[13]=e("span",null,"日期",-1)),e("span",Z0,g(v((Me=(gt=B.summary)==null?void 0:gt.highestRequestDay)==null?void 0:Me.date)),1)]),e("div",X0,[u[14]||(u[14]=e("span",null,"请求",-1)),e("span",eu,g(J(((We=(Pe=B.summary)==null?void 0:Pe.highestRequestDay)==null?void 0:We.requests)||0)),1)]),e("div",tu,[u[15]||(u[15]=e("span",null,"费用",-1)),e("span",null,g(G(ee((m=(y=B.summary)==null?void 0:y.highestRequestDay)==null?void 0:m.date,"cost"))),1)])])])]),e("div",su,[e("div",au,[u[20]||(u[20]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-database mr-2 text-indigo-500"}),A(" 累计 Token ")],-1)),e("div",ru,[e("div",lu,[u[17]||(u[17]=e("span",null,"30天总计",-1)),e("span",ou,g(J(H.value)),1)]),e("div",nu,[u[18]||(u[18]=e("span",null,"日均 Token",-1)),e("span",iu,g(J(Math.round(((I=B.summary)==null?void 0:I.avgDailyTokens)||0))),1)]),e("div",du,[u[19]||(u[19]=e("span",null,"输入 / 输出",-1)),e("span",null,g(J(Y.value))+" / "+g(J(X.value)),1)])])]),e("div",uu,[u[24]||(u[24]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-tachometer-alt mr-2 text-purple-500"}),A(" 平均速率 ")],-1)),e("div",pu,[e("div",gu,[u[21]||(u[21]=e("span",null,"RPM",-1)),e("span",mu,g(((He=(De=B.overview)==null?void 0:De.averages)==null?void 0:He.rpm)??0),1)]),e("div",yu,[u[22]||(u[22]=e("span",null,"TPM",-1)),e("span",cu,g(((et=(Ue=B.overview)==null?void 0:Ue.averages)==null?void 0:et.tpm)??0),1)]),e("div",xu,[u[23]||(u[23]=e("span",null,"日均请求 / Token",-1)),e("span",null,g(J(Math.round((((tt=(ot=B.overview)==null?void 0:ot.averages)==null?void 0:tt.dailyRequests)||0)*100)/100))+" / "+g(J(Math.round((((nt=($e=B.overview)==null?void 0:$e.averages)==null?void 0:nt.dailyTokens)||0)*100)/100)),1)])])]),e("div",fu,[u[28]||(u[28]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-layer-group mr-2 text-teal-500"}),A(" 最近统计 ")],-1)),e("div",bu,[e("div",vu,[u[25]||(u[25]=e("span",null,"今日请求",-1)),e("span",ku,g(J(((st=(Ge=B.overview)==null?void 0:Ge.daily)==null?void 0:st.requests)||0)),1)]),e("div",hu,[u[26]||(u[26]=e("span",null,"今日 Token",-1)),e("span",wu,g(J(((ft=(xt=B.overview)==null?void 0:xt.daily)==null?void 0:ft.allTokens)||0)),1)]),e("div",$u,[u[27]||(u[27]=e("span",null,"今日费用",-1)),e("span",null,g(G(((Ne=(mt=B.overview)==null?void 0:mt.daily)==null?void 0:Ne.cost)||0)),1)])])])]),e("div",Au,[e("div",Cu,[u[29]||(u[29]=e("h4",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-line mr-2 text-blue-500"}),A(" 30天费用与请求趋势 ")],-1)),e("span",Uu," 最新更新时间:"+g(S(L.value)),1)]),e("div",Tu,[e("canvas",{ref_key:"chartCanvas",ref:te,class:"h-full w-full"},null,512)])])],64))])])])):x("",!0)])}}},Ku=rs(Iu,[["__scopeId","data-v-cb1d85aa"]]),_u={class:"accounts-container"},Mu={class:"card p-4 sm:p-6"},Su={class:"mb-4 flex flex-col gap-4 sm:mb-6"},Pu={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Du={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},Vu={class:"group relative min-w-[160px]"},Ru={class:"group relative min-w-[140px]"},zu={class:"group relative min-w-[160px]"},ju={class:"group relative min-w-[200px]"},Ou={class:"relative flex items-center"},Lu={class:"flex w-full flex-col gap-3 sm:w-auto sm:flex-row sm:items-center sm:gap-3"},Nu={class:"relative"},Eu=["disabled"],qu={class:"relative"},Wu={key:0,class:"py-12 text-center"},Gu={key:1,class:"py-12 text-center"},Fu={key:2,class:"table-container hidden md:block"},Qu={class:"w-full table-fixed"},Bu={class:"bg-gray-50/80 backdrop-blur-sm dark:bg-gray-700/80"},Hu={key:0,class:"w-[50px] px-3 py-4 text-left"},Ju={class:"flex items-center"},Yu=["indeterminate"],Zu={key:1,class:"fas fa-sort ml-1 text-gray-400"},Xu={key:1,class:"fas fa-sort ml-1 text-gray-400"},ep={key:1,class:"fas fa-sort ml-1 text-gray-400"},tp={key:1,class:"fas fa-sort ml-1 text-gray-400"},sp={class:"w-[10%] min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},ap={class:"flex items-center gap-2"},rp={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},lp={key:0,class:"px-3 py-3"},op={class:"flex items-center"},np=["value"],ip={class:"px-3 py-4"},dp={class:"flex items-center"},up={class:"min-w-0"},pp={class:"flex items-center gap-2"},gp=["title"],mp={key:0,class:"inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-800"},yp={key:1,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800"},cp={key:2,class:"inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800"},xp={key:0,class:"my-2 flex flex-wrap items-center gap-2"},fp=["title"],bp=["title"],vp={class:"px-3 py-4"},kp={class:"flex items-center gap-1"},hp={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"},wp={class:"text-xs font-medium text-yellow-700"},$p={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"},Ap={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"},Cp={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"},Up={class:"text-xs font-medium text-gray-950"},Tp={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"},Ip={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"},Kp={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"},_p={class:"text-xs font-semibold text-indigo-800"},Mp={class:"text-xs font-medium text-indigo-700"},Sp={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"},Pp={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"},Dp={class:"text-xs font-medium text-cyan-700 dark:text-cyan-300"},Vp={key:9,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"},Rp={class:"whitespace-nowrap px-3 py-4"},zp={class:"flex flex-col gap-1"},jp={key:0,class:"inline-flex items-center rounded-full bg-yellow-100 px-3 py-1 text-xs font-semibold text-yellow-800"},Op={key:0},Lp={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-3 py-1 text-xs font-semibold text-gray-700"},Np=["title"],Ep={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},qp={class:"whitespace-nowrap px-3 py-4"},Wp={key:0,class:"flex items-center gap-2"},Gp={class:"h-2 w-16 rounded-full bg-gray-200"},Fp={class:"min-w-[20px] text-xs font-medium text-gray-700 dark:text-gray-200"},Qp={key:1,class:"text-sm text-gray-400"},Bp={class:"px-3 py-4 text-sm text-gray-600"},Hp=["title"],Jp={key:1,class:"text-gray-400"},Yp={class:"whitespace-nowrap px-3 py-4 text-sm"},Zp={key:0,class:"space-y-1"},Xp={class:"flex items-center gap-2"},eg={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},tg={class:"flex items-center gap-2"},sg={class:"text-xs text-gray-600 dark:text-gray-300"},ag={class:"flex items-center gap-2"},rg={class:"text-xs text-gray-600 dark:text-gray-300"},lg={key:0,class:"text-xs text-gray-500 dark:text-gray-400"},og={key:1,class:"text-xs text-gray-400"},ng={class:"whitespace-nowrap px-3 py-4"},ig={key:0,class:"space-y-2"},dg={key:0,class:"space-y-2"},ug={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},pg={class:"flex items-center gap-2"},gg={class:"flex-1"},mg={class:"flex items-center gap-2"},yg={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},cg={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},xg={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},fg={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},bg={class:"flex items-center gap-2"},vg={class:"flex-1"},kg={class:"flex items-center gap-2"},hg={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},wg={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},$g={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Ag={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Cg={class:"flex items-center gap-2"},Ug={class:"flex-1"},Tg={class:"flex items-center gap-2"},Ig={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Kg={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},_g={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Mg={key:1,class:"space-y-2"},Sg={key:0,class:"flex items-center gap-3 text-xs"},Pg={class:"flex items-center gap-1"},Dg={class:"font-medium text-gray-900 dark:text-gray-100"},Vg={class:"flex items-center gap-1"},Rg={class:"font-medium text-gray-900 dark:text-gray-100"},zg={class:"flex items-center gap-2"},jg={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},Og={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},Lg={class:"text-xs text-gray-600 dark:text-gray-400"},Ng={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},Eg={key:2,class:"text-xs text-gray-400"},qg={key:1,class:"space-y-2"},Wg={key:0},Gg={class:"flex items-center justify-between text-xs"},Fg={class:"font-medium text-gray-700 dark:text-gray-200"},Qg={class:"flex items-center gap-2"},Bg={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},Hg={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},Jg={class:"text-xs text-gray-600 dark:text-gray-400"},Yg={class:"ml-2 text-gray-400"},Zg={key:1,class:"text-sm text-gray-400"},Xg={key:2,class:"space-y-2"},em={key:0,class:"space-y-2"},tm={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},sm={class:"flex items-center gap-2"},am={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"},rm={class:"flex-1"},lm={class:"flex items-center gap-2"},om={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},nm={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},im={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},dm={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},um={class:"flex items-center gap-2"},pm={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"},gm={class:"flex-1"},mm={class:"flex items-center gap-2"},ym={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},cm={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},xm={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},fm={key:1,class:"text-sm text-gray-400"},bm={key:3,class:"text-sm text-gray-400"},vm={class:"whitespace-nowrap px-3 py-4 text-sm text-gray-600 dark:text-gray-300"},km={class:"whitespace-nowrap px-3 py-4 text-sm font-medium"},hm={class:"flex flex-wrap items-center gap-1"},wm=["disabled","title","onClick"],$m=["disabled","title","onClick"],Am={class:"ml-1"},Cm=["onClick"],Um=["onClick"],Tm=["onClick"],Im={key:3,class:"space-y-3 md:hidden"},Km={class:"mb-3 flex items-start justify-between"},_m={class:"flex items-center gap-3"},Mm=["value"],Sm={class:"text-sm font-semibold text-gray-900"},Pm={class:"mt-0.5 flex items-center gap-2"},Dm={class:"text-xs text-gray-500 dark:text-gray-400"},Vm={class:"text-xs text-gray-500 dark:text-gray-400"},Rm={class:"mb-3 grid grid-cols-2 gap-3"},zm={class:"space-y-1"},jm={class:"flex items-center gap-1.5"},Om={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Lm={class:"flex items-center gap-1.5"},Nm={class:"text-xs text-gray-600 dark:text-gray-400"},Em={class:"flex items-center gap-1.5"},qm={class:"text-xs text-gray-600 dark:text-gray-400"},Wm={key:0,class:"space-y-1"},Gm={class:"flex items-center gap-1.5"},Fm={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Qm={class:"flex items-center gap-1.5"},Bm={class:"text-xs text-gray-600 dark:text-gray-400"},Hm={key:1,class:"text-sm font-semibold text-gray-400"},Jm={class:"mb-3 space-y-2"},Ym={key:0,class:"space-y-2"},Zm={key:0,class:"space-y-2"},Xm={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},ey={class:"flex items-center gap-2"},ty={class:"flex-1"},sy={class:"flex items-center gap-2"},ay={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},ry={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},ly={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},oy={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},ny={class:"flex items-center gap-2"},iy={class:"flex-1"},dy={class:"flex items-center gap-2"},uy={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},py={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},gy={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},my={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},yy={class:"flex items-center gap-2"},cy={class:"flex-1"},xy={class:"flex items-center gap-2"},fy={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},by={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},vy={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},ky={key:1,class:"space-y-1.5 rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},hy={class:"flex items-center justify-between text-xs"},wy={class:"flex items-center gap-1"},$y={class:"font-medium text-gray-700 dark:text-gray-200"},Ay={class:"h-2 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-600"},Cy={class:"flex items-center justify-between text-xs"},Uy={class:"text-gray-500 dark:text-gray-400"},Ty={key:0,class:"font-medium text-indigo-600"},Iy={key:1,class:"text-gray-500"},Ky={key:2,class:"text-xs text-gray-400"},_y={key:1,class:"space-y-2"},My={key:0,class:"space-y-2"},Sy={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Py={class:"flex items-center gap-2"},Dy={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"},Vy={class:"flex-1"},Ry={class:"flex items-center gap-2"},zy={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},jy={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Oy={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Ly={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Ny={class:"flex items-center gap-2"},Ey={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"},qy={class:"flex-1"},Wy={class:"flex items-center gap-2"},Gy={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Fy={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Qy={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},By={key:1,class:"text-xs text-gray-400"},Hy={class:"flex items-center justify-between text-xs"},Jy={class:"text-gray-700 dark:text-gray-200"},Yy={key:2,class:"flex items-center justify-between text-xs"},Zy={class:"text-gray-700 dark:text-gray-200"},Xy={class:"flex items-center justify-between text-xs"},ec={class:"font-medium text-gray-700 dark:text-gray-200"},tc={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3"},sc=["disabled","onClick"],ac=["onClick"],rc=["onClick"],lc=["onClick"],oc={key:0,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},nc={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},ic={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},dc={class:"flex items-center gap-2"},uc=["value"],pc={class:"flex items-center gap-2"},gc=["disabled"],mc={class:"flex items-center gap-1"},yc={key:1,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},cc=["onClick"],xc={key:2,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},fc=["disabled"],gs="accountsPageSize",bc={__name:"AccountsView",setup(B){const{showConfirmModal:Ae,confirmOptions:p,showConfirm:xe,handleConfirm:K,handleCancel:W}=xs(),te=T([]),w=T(!1),h=T("name"),k=T(""),j=T("asc"),Q=T([]),H=T([]),Y=T("all"),X=T("all"),J=T(""),G=()=>{const r=localStorage.getItem(gs);if(r){const a=parseInt(r,10);if([10,20,50,100].includes(a))return a}return 10},C=[10,20,50,100],v=T(G()),S=T(1),ee=T([]),L=T(!1),U=T(!1),R=T(!1),we=T(!1),_e=T(!1),P=T(null),u=T([]),E=T({}),Z=T({}),s=T(""),fe=["claude","claude-console","openai","openai-responses","gemini","droid"],ce=T(!1),Oe=T(!1),Ce=T(!1),pt=T(new Map),Qe=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"}]),Le=T([{value:"all",label:"所有平台",icon:"fa-globe"},{value:"claude",label:"Claude",icon:"fa-brain"},{value:"claude-console",label:"Claude Console",icon:"fa-terminal"},{value:"gemini",label:"Gemini",icon:"fab fa-google"},{value:"openai",label:"OpenAi",icon:"fa-openai"},{value:"azure_openai",label:"Azure OpenAI",icon:"fab fa-microsoft"},{value:"bedrock",label:"Bedrock",icon:"fab fa-aws"},{value:"openai-responses",label:"OpenAI-Responses",icon:"fa-server"},{value:"ccr",label:"CCR",icon:"fa-code-branch"},{value:"droid",label:"Droid",icon:"fa-robot"}]),ct=ge(()=>{const r=[{value:"all",label:"所有账户",icon:"fa-globe"},{value:"ungrouped",label:"未分组账户",icon:"fa-user"}];return H.value.forEach(a=>{r.push({value:a.id,label:`${a.name} (${a.platform==="claude"?"Claude":a.platform==="gemini"?"Gemini":a.platform==="openai"?"OpenAI":"Droid"})`,icon:a.platform==="claude"?"fa-brain":a.platform==="gemini"?"fa-robot":a.platform==="openai"?"fa-openai":"fa-robot"})}),r}),at=ge(()=>R.value),Be=T(!1),$=T(null),Ee=T(!1),qe=T(null),rt=r=>{const a=new Set;return[r==null?void 0:r.name,r==null?void 0:r.email,r==null?void 0:r.accountName,r==null?void 0:r.owner,r==null?void 0:r.ownerName,r==null?void 0:r.ownerDisplayName,r==null?void 0:r.displayName,r==null?void 0:r.username,r==null?void 0:r.identifier,r==null?void 0:r.alias,r==null?void 0:r.title,r==null?void 0:r.label].forEach(l=>{if(typeof l=="string"){const D=l.trim();D&&a.add(D)}}),Array.isArray(r==null?void 0:r.groupInfos)&&r.groupInfos.forEach(l=>{if(l&&typeof l.name=="string"){const D=l.name.trim();D&&a.add(D)}}),Object.entries(r||{}).forEach(([l,D])=>{if(typeof D=="string"){const ae=l.toLowerCase();if(ae.includes("name")||ae.includes("email")){const ue=D.trim();ue&&a.add(ue)}}}),Array.from(a)},Ze=(r,a)=>a?rt(r).some(b=>b.toLowerCase().includes(a)):!0,lt=r=>!!r&&fe.includes(r.platform),Xe=async r=>{if(!lt(r)){z("该账户类型暂不支持查看详情","warning");return}P.value=r,we.value=!0,_e.value=!0,u.value=[],E.value={},Z.value={},s.value="";try{const a=await V.get(`/admin/accounts/${r.id}/usage-history?platform=${r.platform}&days=30`);if(a.success){const b=a.data||{};u.value=b.history||[],E.value=b.summary||{},Z.value=b.overview||{},s.value=b.generatedAt||""}else z(a.error||"加载账号使用详情失败","error")}catch{z("加载账号使用详情失败","error")}finally{_e.value=!1}},gt=()=>{we.value=!1,_e.value=!1,P.value=null},Me=ge(()=>{let r=te.value;const a=J.value.trim();if(a){const l=a.toLowerCase();r=r.filter(D=>Ze(D,l))}return k.value?[...r].sort((l,D)=>{var me,Te,dt,ie,Ve,Ie,ut,oe,pe,Re,ze,is;let ae=l[k.value],ue=D[k.value];return k.value==="dailyTokens"?(ae=((Te=(me=l.usage)==null?void 0:me.daily)==null?void 0:Te.allTokens)||0,ue=((ie=(dt=D.usage)==null?void 0:dt.daily)==null?void 0:ie.allTokens)||0):k.value==="dailyRequests"?(ae=((Ie=(Ve=l.usage)==null?void 0:Ve.daily)==null?void 0:Ie.requests)||0,ue=((oe=(ut=D.usage)==null?void 0:ut.daily)==null?void 0:oe.requests)||0):k.value==="totalTokens"&&(ae=((Re=(pe=l.usage)==null?void 0:pe.total)==null?void 0:Re.allTokens)||0,ue=((is=(ze=D.usage)==null?void 0:ze.total)==null?void 0:is.allTokens)||0),k.value==="lastUsed"&&(ae=l.lastUsedAt?new Date(l.lastUsedAt).getTime():0,ue=D.lastUsedAt?new Date(D.lastUsedAt).getTime():0),k.value==="status"&&(ae=l.isActive?1:0,ue=D.isActive?1:0),ae<ue?j.value==="asc"?-1:1:ae>ue?j.value==="asc"?1:-1:0}):r}),Pe=ge(()=>{const r=Me.value.length;return Math.ceil(r/v.value)||0}),We=ge(()=>{const r=Pe.value,a=S.value,b=[];if(r<=7)for(let l=1;l<=r;l++)b.push(l);else{let l=Math.max(1,a-2),D=Math.min(r,a+2);a<=3?D=5:a>=r-2&&(l=r-4);for(let ae=l;ae<=D;ae++)b.push(ae)}return b}),y=ge(()=>{const r=We.value;return r.length===0?!1:r[0]>1}),m=ge(()=>{const r=We.value;return r.length===0?!1:r[r.length-1]<Pe.value}),I=ge(()=>{const r=We.value;return r.length===0?!1:y.value&&r[0]>2}),De=ge(()=>{const r=We.value;return r.length===0?!1:m.value&&r[r.length-1]<Pe.value-1}),He=ge(()=>{const r=(S.value-1)*v.value,a=r+v.value;return Me.value.slice(r,a)}),Ue=()=>{const r=He.value.map(l=>l.id),a=r.filter(l=>ee.value.includes(l)).length,b=r.length;a===0?(L.value=!1,U.value=!1):a===b?(L.value=!0,U.value=!1):(L.value=!1,U.value=!0)},et=()=>{if(L.value)He.value.forEach(r=>{ee.value.includes(r.id)||ee.value.push(r.id)});else{const r=new Set(He.value.map(a=>a.id));ee.value=ee.value.filter(a=>!r.has(a))}Ue()},ot=()=>{R.value=!R.value,R.value?Ue():(ee.value=[],L.value=!1,U.value=!1)},tt=()=>{const r=new Set(te.value.map(a=>a.id));ee.value=ee.value.filter(a=>r.has(a)),Ue()},$e=async(r=!1)=>{w.value=!0;try{const a={};X.value!=="all"&&(a.platform=X.value),Y.value!=="all"&&(a.groupId=Y.value);const b=[];if(X.value==="all")b.push(V.get("/admin/claude-accounts",{params:a}),V.get("/admin/claude-console-accounts",{params:a}),V.get("/admin/bedrock-accounts",{params:a}),V.get("/admin/gemini-accounts",{params:a}),V.get("/admin/openai-accounts",{params:a}),V.get("/admin/azure-openai-accounts",{params:a}),V.get("/admin/openai-responses-accounts",{params:a}),V.get("/admin/ccr-accounts",{params:a}),V.get("/admin/droid-accounts",{params:a}));else switch(X.value){case"claude":b.push(V.get("/admin/claude-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"claude-console":b.push(Promise.resolve({success:!0,data:[]}),V.get("/admin/claude-console-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"bedrock":b.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),V.get("/admin/bedrock-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"gemini":b.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),V.get("/admin/gemini-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"openai":b.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),V.get("/admin/openai-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"azure_openai":b.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),V.get("/admin/azure-openai-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"openai-responses":b.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),V.get("/admin/openai-responses-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"ccr":b.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),V.get("/admin/ccr-accounts",{params:a}),Promise.resolve({success:!0,data:[]}));break;case"droid":b.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),V.get("/admin/droid-accounts",{params:a}));break;default:b.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break}await Promise.all([mt(r),Ne(r)]);const[l,D,ae,ue,me,Te,dt,ie,Ve]=await Promise.all(b),Ie=[];if(l.success){const oe=(l.data||[]).map(pe=>{const Re=Q.value.filter(ze=>ze.claudeAccountId===pe.id).length;return{...pe,platform:"claude",boundApiKeysCount:Re}});Ie.push(...oe)}if(D.success){const oe=(D.data||[]).map(pe=>{const Re=Q.value.filter(ze=>ze.claudeConsoleAccountId===pe.id).length;return{...pe,platform:"claude-console",boundApiKeysCount:Re}});Ie.push(...oe)}if(ae.success){const oe=(ae.data||[]).map(pe=>({...pe,platform:"bedrock",boundApiKeysCount:0}));Ie.push(...oe)}if(ue.success){const oe=(ue.data||[]).map(pe=>{const Re=Q.value.filter(ze=>ze.geminiAccountId===pe.id).length;return{...pe,platform:"gemini",boundApiKeysCount:Re}});Ie.push(...oe)}if(me.success){const oe=(me.data||[]).map(pe=>{const Re=Q.value.filter(ze=>ze.openaiAccountId===pe.id).length;return{...pe,platform:"openai",boundApiKeysCount:Re}});Ie.push(...oe)}if(Te&&Te.success){const oe=(Te.data||[]).map(pe=>{const Re=Q.value.filter(ze=>ze.azureOpenaiAccountId===pe.id).length;return{...pe,platform:"azure_openai",boundApiKeysCount:Re}});Ie.push(...oe)}if(dt&&dt.success){const oe=(dt.data||[]).map(pe=>{const Re=Q.value.filter(ze=>ze.openaiAccountId===`responses:${pe.id}`).length;return{...pe,platform:"openai-responses",boundApiKeysCount:Re}});Ie.push(...oe)}if(ie&&ie.success){const oe=(ie.data||[]).map(pe=>({...pe,platform:"ccr",boundApiKeysCount:0}));Ie.push(...oe)}if(Ve&&Ve.success){const oe=(Ve.data||[]).map(pe=>({...pe,platform:"droid",boundApiKeysCount:pe.boundApiKeysCount??0}));Ie.push(...oe)}let ut=Ie;Y.value!=="all"&&(Y.value==="ungrouped"?ut=Ie.filter(oe=>!oe.groupInfos||oe.groupInfos.length===0):ut=Ie.filter(oe=>!oe.groupInfos||oe.groupInfos.length===0?!1:oe.groupInfos.some(pe=>pe.id===Y.value))),ut=ut.map(oe=>{const pe=it(oe.proxyConfig||oe.proxy);return{...oe,proxyConfig:pe||null}}),te.value=ut,tt(),ut.some(oe=>oe.platform==="claude")&&nt().catch(oe=>{console.debug("Claude usage loading failed:",oe)})}catch{z("加载账户失败","error")}finally{w.value=!1}},nt=async()=>{try{const r=await V.get("/admin/claude-accounts/usage");if(r.success&&r.data){const a=r.data;te.value=te.value.map(b=>b.platform==="claude"&&a[b.id]?{...b,claudeUsage:a[b.id]}:b)}}catch(r){console.debug("Failed to load Claude usage data:",r)}},Ge=r=>{r&&(k.value===r?j.value=j.value==="asc"?"desc":"asc":(k.value=r,j.value="asc"))},st=r=>{if(r==null)return"0";const a=Number(r);return a>=1e6?(a/1e6).toFixed(2):a>=1e3?(a/1e6).toFixed(4):(a/1e6).toFixed(6)},xt=r=>{if(!r)return"从未使用";const a=new Date(r),l=new Date-a;return l<6e4?"刚刚":l<36e5?`${Math.floor(l/6e4)} 分钟前`:l<864e5?`${Math.floor(l/36e5)} 小时前`:l<6048e5?`${Math.floor(l/864e5)} 天前`:a.toLocaleDateString("zh-CN")},ft=()=>{J.value="",S.value=1},mt=async(r=!1)=>{if(!(!r&&ce.value))try{const a=await V.get("/admin/api-keys");a.success&&(Q.value=a.data||[],ce.value=!0)}catch{}},Ne=async(r=!1)=>{if(!(!r&&Oe.value))try{const a=await V.get("/admin/account-groups");a.success&&(H.value=a.data||[],Oe.value=!0)}catch{}},Je=()=>{ce.value=!1,Oe.value=!1,Ce.value=!1,pt.value.clear()},zt=()=>{S.value=1,$e()},jt=()=>{S.value=1,$e()};function it(r){if(!r)return null;let a=r;if(typeof r=="string")try{a=JSON.parse(r)}catch{return null}if(!a||typeof a!="object")return null;const b=a.proxy&&typeof a.proxy=="object"?a.proxy:a,l=typeof b.host=="string"?b.host.trim():b.host!==void 0&&b.host!==null?String(b.host).trim():"",D=b.port!==void 0&&b.port!==null?String(b.port).trim():"";if(!l||!D)return null;const ae=typeof b.type=="string"&&b.type.trim()?b.type.trim():"socks5",ue=typeof b.username=="string"?b.username:b.username!==void 0&&b.username!==null?String(b.username):"",me=typeof b.password=="string"?b.password:b.password!==void 0&&b.password!==null?String(b.password):"";return{type:ae,host:l,port:D,username:ue,password:me}}const kt=r=>{const a=it(r);if(!a)return null;const b=a.type.toLowerCase()==="socks5"?"S5":a.type.toUpperCase();let l=a.host;l.length>15&&(l=l.substring(0,12)+"...");let D=`${b}://${l}:${a.port}`;return a.username&&(D=`${b}://***@${l}:${a.port}`),D},wt=(r,a)=>{if(!r||!a)return"--";const b=new Date(r),l=new Date(a),D=b.getHours().toString().padStart(2,"0"),ae=b.getMinutes().toString().padStart(2,"0"),ue=l.getHours().toString().padStart(2,"0"),me=l.getMinutes().toString().padStart(2,"0");return`${D}:${ae} - ${ue}:${me}`},$t=r=>{if(!r||r<=0)return"已结束";const a=Math.floor(r/60),b=r%60;return a>0?`${a}小时${b}分钟`:`${b}分钟`},Ot=r=>{if(!r||r<=0)return"";r=Math.floor(r);const a=Math.floor(r/1440),b=r%1440,l=Math.floor(b/60),D=b%60;return a>0?l>0?`${a}天${l}小时`:`${a}天`:l>0?D>0?`${l}小时${D}分钟`:`${l}小时`:`${D}分钟`},Lt=()=>{$.value=null,Be.value=!0},At=()=>{Be.value=!1,$.value=null},Ct=r=>{qe.value=r,Ee.value=!0},Ut=r=>!r||!r.id?[]:Q.value.filter(a=>{const b=r.id;return a.claudeAccountId===b||a.claudeConsoleAccountId===b||a.geminiAccountId===b||a.openaiAccountId===b||a.azureOpenaiAccountId===b||a.openaiAccountId===`responses:${b}`}),Nt=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}`;default:return null}},Tt=async r=>{var b,l;const a=Nt(r);if(!a)return{success:!1,message:"不支持的账户类型"};try{const D=await V.delete(a);return D.success?{success:!0,data:D}:{success:!1,message:D.message||"删除失败"}}catch(D){return{success:!1,message:((l=(b=D.response)==null?void 0:b.data)==null?void 0:l.message)||D.message||"删除失败"}}},It=async r=>{const b=Ut(r).length;let l=`确定要删除账户 "${r.name}" 吗?`;if(b>0&&(l+=`
|
||
|
||
⚠️ 注意:此账号有 ${b} 个 API Key 绑定。`,l+=`
|
||
删除后,这些 API Key 将自动切换为共享池模式。`),l+=`
|
||
|
||
此操作不可恢复。`,!await xe("删除账户",l,"删除","取消"))return;const ae=await Tt(r);if(ae.success){const ue=ae.data;let me="账户已成功删除";(ue==null?void 0:ue.unboundKeys)>0&&(me+=`,${ue.unboundKeys} 个 API Key 已切换为共享池模式`),z(me,"success"),ee.value=ee.value.filter(Te=>Te!==r.id),Ue(),Ce.value=!1,ce.value=!1,$e(),mt(!0)}else z(ae.message||"删除失败","error")},Et=async()=>{var dt;if(ee.value.length===0){z("请先选择要删除的账户","warning");return}const r=new Map(te.value.map(ie=>[ie.id,ie])),a=ee.value.map(ie=>r.get(ie)).filter(ie=>!!ie);if(a.length===0){z("选中的账户已不存在","warning"),ee.value=[],Ue();return}let b=`确定要删除选中的 ${a.length} 个账户吗?此操作不可恢复。`;const l=a.map(ie=>({account:ie,boundKeys:Ut(ie)})).filter(ie=>ie.boundKeys.length>0);if(l.length>0&&(b+=`
|
||
|
||
⚠️ 以下账户存在绑定的 API Key,将自动解绑:`,l.forEach(({account:ie,boundKeys:Ve})=>{const Ie=ie.name||ie.email||ie.accountName||ie.id;b+=`
|
||
- ${Ie}: ${Ve.length} 个`}),b+=`
|
||
删除后,这些 API Key 将切换为共享池模式。`),b+=`
|
||
|
||
请再次确认是否继续。`,!await xe("批量删除账户",b,"删除","取消"))return;let ae=0,ue=0,me=0;const Te=[];for(const ie of a){const Ve=await Tt(ie);Ve.success?(ae+=1,me+=((dt=Ve.data)==null?void 0:dt.unboundKeys)||0):(ue+=1,Te.push({name:ie.name||ie.email||ie.accountName||ie.id,message:Ve.message||"删除失败"}))}if(ae>0){let ie=`成功删除 ${ae} 个账户`;me>0&&(ie+=`,${me} 个 API Key 已切换为共享池模式`),z(ie,ue>0?"warning":"success"),ee.value=[],L.value=!1,U.value=!1,Ce.value=!1,ce.value=!1,await $e(!0)}if(ue>0){const ie=Te.map(Ve=>`${Ve.name}: ${Ve.message}`).join(`
|
||
`);z(`有 ${ue} 个账户删除失败:
|
||
${ie}`,ae>0?"warning":"error")}Ue()},qt=async r=>{if(r.isResetting)return;let a=!1;if(window.showConfirm?a=await window.showConfirm("重置账户状态","确定要重置此账户的所有异常状态吗?这将清除限流状态、401错误计数等所有异常标记。","确定重置","取消"):a=confirm("确定要重置此账户的所有异常状态吗?"),!!a)try{r.isResetting=!0;let b="";if(r.platform==="openai")b=`/admin/openai-accounts/${r.id}/reset-status`;else if(r.platform==="openai-responses")b=`/admin/openai-responses-accounts/${r.id}/reset-status`;else if(r.platform==="claude")b=`/admin/claude-accounts/${r.id}/reset-status`;else if(r.platform==="claude-console")b=`/admin/claude-console-accounts/${r.id}/reset-status`;else if(r.platform==="ccr")b=`/admin/ccr-accounts/${r.id}/reset-status`;else if(r.platform==="droid")b=`/admin/droid-accounts/${r.id}/reset-status`;else{z("不支持的账户类型","error"),r.isResetting=!1;return}const l=await V.post(b);l.success?(z("账户状态已重置","success"),$e(!0)):z(l.message||"状态重置失败","error")}catch{z("状态重置失败","error")}finally{r.isResetting=!1}},Kt=async r=>{if(!r.isTogglingSchedulable)try{r.isTogglingSchedulable=!0;let a;if(r.platform==="claude")a=`/admin/claude-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="claude-console")a=`/admin/claude-console-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="bedrock")a=`/admin/bedrock-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini")a=`/admin/gemini-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai")a=`/admin/openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="azure_openai")a=`/admin/azure-openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai-responses")a=`/admin/openai-responses-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="ccr")a=`/admin/ccr-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="droid")a=`/admin/droid-accounts/${r.id}/toggle-schedulable`;else{z("该账户类型暂不支持调度控制","warning");return}const b=await V.put(a);b.success?(r.schedulable=b.schedulable,z(b.schedulable?"已启用调度":"已禁用调度","success")):z(b.message||"操作失败","error")}catch{z("切换调度状态失败","error")}finally{r.isTogglingSchedulable=!1}},_t=()=>{Be.value=!1,z("账户创建成功","success"),Je(),$e()},Mt=()=>{Ee.value=!1,z("账户更新成功","success"),Ce.value=!1,$e()},Wt=r=>!r.lastRefreshAt||r.lastRefreshAt===""?"Setup":"OAuth",Gt=()=>"OAuth",Ft=()=>"OAuth",St=r=>{if(!r||typeof r!="object")return"OAuth";const a=r.isApiKeyMode??r.is_api_key_mode??r.apiKeyMode??r.api_key_mode;if(a===!0||a==="true"||a===1||a==="1")return"API Key";const b=r.authenticationMethod||r.authMethod||r.authentication_mode||r.authenticationMode||r.authentication_method||r.auth_type||r.authType||r.authentication_type||r.authenticationType||r.droidAuthType||r.droidAuthenticationMethod||r.method||r.auth||"";return typeof b=="string"&&b.trim().toLowerCase().replace(/[\s_-]/g,"")==="apikey"?"API Key":"OAuth"},Qt=r=>St(r)==="API Key",Pt=r=>{if(!r||typeof r!="object")return 0;const a=[r.apiKeyCount,r.api_key_count,r.apiKeysCount,r.api_keys_count];for(const b of a){const l=Number(b);if(Number.isFinite(l)&&l>=0)return l}if(Array.isArray(r.apiKeys))return r.apiKeys.length;if(typeof r.apiKeys=="string"&&r.apiKeys.trim())try{const b=JSON.parse(r.apiKeys);if(Array.isArray(b))return b.length}catch{}return 0},Bt=r=>{const a=Pt(r),b="ml-1 inline-flex items-center gap-1 rounded-md border px-1.5 py-[1px] text-[10px] font-medium shadow-sm backdrop-blur-sm";return a>0?[b,"border-cyan-200 bg-cyan-50/90 text-cyan-700 dark:border-cyan-500/40 dark:bg-cyan-900/40 dark:text-cyan-200"]:[b,"border-rose-200 bg-rose-50/90 text-rose-600 dark:border-rose-500/40 dark:bg-rose-900/40 dark:text-rose-200"]},Ht=r=>{if(r.subscriptionInfo)try{const a=typeof r.subscriptionInfo=="string"?JSON.parse(r.subscriptionInfo):r.subscriptionInfo;return a.hasClaudeMax===!0?"Claude Max":a.hasClaudePro===!0?"Claude Pro":"Claude Free"}catch{return"Claude"}return"Claude"},Dt=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:"手动停止调度"},Jt=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?"已暂停":"正常",Yt=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",Zt=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",Xt=r=>xt(r),Vt=(r,a=null)=>{if(!r)return"bg-gradient-to-r from-blue-500 to-indigo-600";if(a&&(a.isRateLimited||a.status==="rate_limited"||a.rateLimitStatus&&a.rateLimitStatus.isRateLimited||a.rateLimitStatus==="limited"))return"bg-gradient-to-r from-red-500 to-red-600";const l=String(r).toLowerCase();return l==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":l==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-600"},bt=r=>r.authType==="oauth",i=r=>!r||r.utilization===null||r.utilization===void 0?"-":`${r.utilization}%`,t=r=>!r||r.utilization===null||r.utilization===void 0?"0%":`${r.utilization}%`,o=r=>{const a=(r==null?void 0:r.utilization)||0;return a<60?"bg-gradient-to-r from-blue-500 to-indigo-600":a<90?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-red-500 to-red-600"},O=r=>{if(!r||!r.remainingSeconds)return"-";const a=r.remainingSeconds,b=Math.floor(a/86400),l=Math.floor(a%86400/3600),D=Math.floor(a%3600/60);return b>0?l>0?`${b}天${l}小时`:`${b}天`:l>0?D>0?`${l}小时${D}分钟`:`${l}小时`:D>0?`${D}分钟`:`${Math.floor(a%60)}秒`},le=r=>{if(!r)return null;const a=typeof r.usedPercent=="number"&&!Number.isNaN(r.usedPercent)?r.usedPercent:null,b=typeof r.resetAfterSeconds=="number"&&!Number.isNaN(r.resetAfterSeconds)?r.resetAfterSeconds:null,l=typeof r.remainingSeconds=="number"?r.remainingSeconds:null,D=r.resetAt?Date.parse(r.resetAt):null;return b!==null&&(l!==null&&l<=0||D!==null&&!Number.isNaN(D)&&Date.now()>=D)?0:a===null?null:Math.max(0,Math.min(100,a))},ke=r=>{const a=le(r);return a===null?"bg-gradient-to-r from-gray-300 to-gray-400":a>=90?"bg-gradient-to-r from-red-500 to-red-600":a>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},de=r=>{const a=le(r);return a===null?"--":`${a.toFixed(1)}%`},he=r=>{const a=le(r);return a===null?"0%":`${a}%`},N=r=>r==="secondary"?"周限":"5h",ne=r=>{if(!r)return"--";let a=r.remainingSeconds;if(a==null&&(a=r.resetAfterSeconds),a==null||Number.isNaN(Number(a)))return"--";a=Math.max(0,Math.floor(Number(a)));const b=Math.floor(a/86400),l=Math.floor(a%86400/3600),D=Math.floor(a%3600/60),ae=a%60;return b>0?l>0?`${b}天${l}小时`:`${b}天`:l>0?D>0?`${l}小时${D}分钟`:`${l}小时`:D>0?`${D}分钟`:`${ae}秒`},c=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),q=r=>{var l,D;const a=Number(((D=(l=r==null?void 0:r.usage)==null?void 0:l.daily)==null?void 0:D.cost)||0),b=Number((r==null?void 0:r.dailyQuota)||0);return!b||b<=0?0:a/b*100},F=r=>r>=90?"bg-red-500":r>=70?"bg-yellow-500":"bg-green-500",se=r=>{var l,D;const a=Number(((D=(l=r==null?void 0:r.usage)==null?void 0:l.daily)==null?void 0:D.cost)||0),b=Number((r==null?void 0:r.dailyQuota)||0);return!b||b<=0?"0.00":Math.max(0,b-a).toFixed(2)},yt=r=>!r.usage||!r.usage.daily?"0.0000":r.usage.daily.cost!==void 0?c(r.usage.daily.cost):"0.0000";return re(J,()=>{S.value=1,Ue()}),re(v,r=>{localStorage.setItem(gs,r.toString()),Ue()}),re(()=>Me.value.length,()=>{S.value>Pe.value&&(S.value=Pe.value||1),Ue()}),re(h,r=>{const a={name:"name",dailyTokens:"dailyTokens",dailyRequests:"dailyRequests",totalTokens:"totalTokens",lastUsed:"lastUsed"};a[r]&&Ge(a[r])}),re(S,()=>{Ue()}),re(He,()=>{Ue()}),re(te,()=>{tt()}),ss(()=>{$e(!0)}),(r,a)=>{const b=bs;return n(),d("div",_u,[e("div",Mu,[e("div",Su,[a[35]||(a[35]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 账户管理 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理 Claude、Gemini、OpenAI 等账户与代理配置 ")],-1)),e("div",Pu,[e("div",Du,[e("div",Vu,[a[24]||(a[24]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-indigo-500 to-blue-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ye(ls,{modelValue:h.value,"onUpdate:modelValue":a[0]||(a[0]=l=>h.value=l),icon:"fa-sort-amount-down","icon-color":"text-indigo-500",options:Qe.value,placeholder:"选择排序",onChange:a[1]||(a[1]=l=>Ge())},null,8,["modelValue","options"])]),e("div",Ru,[a[25]||(a[25]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ye(ls,{modelValue:X.value,"onUpdate:modelValue":a[2]||(a[2]=l=>X.value=l),icon:"fa-server","icon-color":"text-blue-500",options:Le.value,placeholder:"选择平台",onChange:zt},null,8,["modelValue","options"])]),e("div",zu,[a[26]||(a[26]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ye(ls,{modelValue:Y.value,"onUpdate:modelValue":a[3]||(a[3]=l=>Y.value=l),icon:"fa-layer-group","icon-color":"text-purple-500",options:ct.value,placeholder:"选择分组",onChange:jt},null,8,["modelValue","options"])]),e("div",ju,[a[29]||(a[29]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",Ou,[f(e("input",{"onUpdate:modelValue":a[4]||(a[4]=l=>J.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),[[M,J.value]]),a[28]||(a[28]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),J.value?(n(),d("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:ft},a[27]||(a[27]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):x("",!0)])])]),e("div",Lu,[e("div",Nu,[Ye(b,{content:"刷新数据 (Ctrl/⌘+点击强制刷新所有缓存)",effect:"dark",placement:"bottom"},{default:Rt(()=>[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:w.value,onClick:[a[5]||(a[5]=es(l=>$e(!0),["ctrl","exact"])),a[6]||(a[6]=es(l=>$e(!1),["exact"])),a[7]||(a[7]=es(l=>$e(!0),["meta","exact"]))]},[a[30]||(a[30]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:_(["fas relative text-green-500",w.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),a[31]||(a[31]=e("span",{class:"relative"},"刷新",-1))],8,Eu)]),_: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:ot},[e("i",{class:_(R.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,g(R.value?"取消选择":"选择"),1)]),ee.value.length>0?(n(),d("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:Et},[a[32]||(a[32]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),a[33]||(a[33]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",qu,"删除选中 ("+g(ee.value.length)+")",1)])):x("",!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:es(Lt,["stop"])},a[34]||(a[34]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"添加账户",-1)]))])])]),w.value?(n(),d("div",Wu,a[36]||(a[36]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载账户...",-1)]))):Me.value.length===0?(n(),d("div",Gu,a[37]||(a[37]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-user-circle text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无账户",-1),e("p",{class:"mt-2 text-sm text-gray-400 dark:text-gray-500"},"点击上方按钮添加您的第一个账户",-1)]))):(n(),d("div",Fu,[e("table",Qu,[e("thead",Bu,[e("tr",null,[at.value?(n(),d("th",Hu,[e("div",Ju,[f(e("input",{"onUpdate:modelValue":a[8]||(a[8]=l=>L.value=l),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:U.value,type:"checkbox",onChange:et},null,40,Yu),[[be,L.value]])])])):x("",!0),e("th",{class:"w-[22%] min-w-[180px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[9]||(a[9]=l=>Ge("name"))},[a[38]||(a[38]=A(" 名称 ",-1)),k.value==="name"?(n(),d("i",{key:0,class:_(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",Zu))]),e("th",{class:"w-[15%] min-w-[120px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[10]||(a[10]=l=>Ge("platform"))},[a[39]||(a[39]=A(" 平台/类型 ",-1)),k.value==="platform"?(n(),d("i",{key:0,class:_(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",Xu))]),e("th",{class:"w-[12%] min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[11]||(a[11]=l=>Ge("status"))},[a[40]||(a[40]=A(" 状态 ",-1)),k.value==="status"?(n(),d("i",{key:0,class:_(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",ep))]),e("th",{class:"w-[8%] min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[12]||(a[12]=l=>Ge("priority"))},[a[41]||(a[41]=A(" 优先级 ",-1)),k.value==="priority"?(n(),d("i",{key:0,class:_(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",tp))]),a[45]||(a[45]=e("th",{class:"w-[10%] min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 代理 ",-1)),a[46]||(a[46]=e("th",{class:"w-[10%] min-w-[90px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 今日使用 ",-1)),e("th",sp,[e("div",ap,[a[44]||(a[44]=e("span",null,"会话窗口",-1)),Ye(b,{placement:"top"},{content:Rt(()=>a[42]||(a[42]=[e("div",{class:"w-[260px] space-y-3 text-xs leading-relaxed text-white dark:text-gray-800"},[e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude 系列 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 会话窗口进度表示 5 小时窗口的时间推移,颜色提示当前调度状态。 "),e("div",{class:"space-y-1 pt-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-blue-500 to-indigo-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"正常:请求正常处理")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-yellow-500 to-orange-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"警告:接近限制")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-red-500 to-red-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"拒绝:达到速率限制")])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," OpenAI "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 进度条分别展示 5h 与周限窗口的额度使用比例,颜色含义与上方保持一致。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时使用量进度,到达重置时间后会自动归零。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-history mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"周限窗口:7天使用量进度,重置时同样回到 0%。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"当“重置剩余”为 0 时,进度条与百分比会同步清零。")])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude OAuth 账户 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 展示三个窗口的使用率(utilization百分比),颜色含义同上。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时滑动窗口的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-calendar-alt mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"7d 窗口:7天总限额的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-gem mt-[2px] text-[10px] text-purple-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"Opus 窗口:7天Opus模型专用限额。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-sync-alt mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"到达重置时间后自动归零。")])])])],-1)])),default:Rt(()=>[a[43]||(a[43]=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,__:[43]})])]),a[47]||(a[47]=e("th",{class:"w-[8%] min-w-[80px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),a[48]||(a[48]=e("th",{class:"w-[15%] min-w-[180px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",rp,[(n(!0),d(ve,null,Ke(He.value,l=>{var D,ae,ue;return n(),d("tr",{key:l.id,class:"table-row"},[at.value?(n(),d("td",lp,[e("div",op,[f(e("input",{"onUpdate:modelValue":a[13]||(a[13]=me=>ee.value=me),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:Ue},null,40,np),[[be,ee.value]])])])):x("",!0),e("td",ip,[e("div",dp,[a[53]||(a[53]=e("div",{class:"mr-2 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-user-circle text-xs text-white"})],-1)),e("div",up,[e("div",pp,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:l.name},g(l.name),9,gp),l.accountType==="dedicated"?(n(),d("span",mp,a[49]||(a[49]=[e("i",{class:"fas fa-lock mr-1"},null,-1),A("专属 ",-1)]))):l.accountType==="group"?(n(),d("span",yp,a[50]||(a[50]=[e("i",{class:"fas fa-layer-group mr-1"},null,-1),A("分组调度 ",-1)]))):(n(),d("span",cp,a[51]||(a[51]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),A("共享 ",-1)])))]),l.groupInfos&&l.groupInfos.length>0?(n(),d("div",xp,[(n(!0),d(ve,null,Ke(l.groupInfos,me=>(n(),d("span",{key:me.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:`所属分组: ${me.name}`},[a[52]||(a[52]=e("i",{class:"fas fa-folder mr-1"},null,-1)),A(g(me.name),1)],8,fp))),128))])):x("",!0),e("div",{class:"truncate text-xs text-gray-500 dark:text-gray-400",title:l.id},g(l.id),9,bp)])])]),e("td",vp,[e("div",kp,[l.platform==="gemini"?(n(),d("div",hp,[a[54]||(a[54]=e("i",{class:"fas fa-robot text-xs text-yellow-700"},null,-1)),a[55]||(a[55]=e("span",{class:"text-xs font-semibold text-yellow-800"},"Gemini",-1)),a[56]||(a[56]=e("span",{class:"mx-1 h-4 w-px bg-yellow-300"},null,-1)),e("span",wp,g(Gt()),1)])):l.platform==="claude-console"?(n(),d("div",$p,a[57]||(a[57]=[e("i",{class:"fas fa-terminal text-xs text-purple-700"},null,-1),e("span",{class:"text-xs font-semibold text-purple-800"},"Console",-1),e("span",{class:"mx-1 h-4 w-px bg-purple-300"},null,-1),e("span",{class:"text-xs font-medium text-purple-700"},"API Key",-1)]))):l.platform==="bedrock"?(n(),d("div",Ap,a[58]||(a[58]=[e("i",{class:"fab fa-aws text-xs text-orange-700"},null,-1),e("span",{class:"text-xs font-semibold text-orange-800"},"Bedrock",-1),e("span",{class:"mx-1 h-4 w-px bg-orange-300"},null,-1),e("span",{class:"text-xs font-medium text-orange-700"},"AWS",-1)]))):l.platform==="openai"?(n(),d("div",Cp,[a[59]||(a[59]=e("div",{class:"fa-openai"},null,-1)),a[60]||(a[60]=e("span",{class:"text-xs font-semibold text-gray-950"},"OpenAi",-1)),a[61]||(a[61]=e("span",{class:"mx-1 h-4 w-px bg-gray-400"},null,-1)),e("span",Up,g(Ft()),1)])):l.platform==="azure_openai"?(n(),d("div",Tp,a[62]||(a[62]=[e("i",{class:"fab fa-microsoft text-xs text-blue-700 dark:text-blue-400"},null,-1),e("span",{class:"text-xs font-semibold text-blue-800 dark:text-blue-300"},"Azure OpenAI",-1),e("span",{class:"mx-1 h-4 w-px bg-blue-300 dark:bg-blue-600"},null,-1),e("span",{class:"text-xs font-medium text-blue-700 dark:text-blue-400"},"API Key",-1)]))):l.platform==="openai-responses"?(n(),d("div",Ip,a[63]||(a[63]=[e("i",{class:"fas fa-server text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"OpenAI-Responses",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-400"},"API Key",-1)]))):l.platform==="claude"||l.platform==="claude-oauth"?(n(),d("div",Kp,[a[64]||(a[64]=e("i",{class:"fas fa-brain text-xs text-indigo-700"},null,-1)),e("span",_p,g(Ht(l)),1),a[65]||(a[65]=e("span",{class:"mx-1 h-4 w-px bg-indigo-300"},null,-1)),e("span",Mp,g(Wt(l)),1)])):l.platform==="ccr"?(n(),d("div",Sp,a[66]||(a[66]=[e("i",{class:"fas fa-code-branch text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"CCR",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-300"},"Relay",-1)]))):l.platform==="droid"?(n(),d("div",Pp,[a[68]||(a[68]=e("i",{class:"fas fa-robot text-xs text-cyan-700 dark:text-cyan-400"},null,-1)),a[69]||(a[69]=e("span",{class:"text-xs font-semibold text-cyan-800 dark:text-cyan-300"},"Droid",-1)),a[70]||(a[70]=e("span",{class:"mx-1 h-4 w-px bg-cyan-300 dark:bg-cyan-600"},null,-1)),e("span",Dp,g(St(l)),1),Qt(l)?(n(),d("span",{key:0,class:_(Bt(l))},[a[67]||(a[67]=e("i",{class:"fas fa-key text-[9px]"},null,-1)),e("span",null,"x"+g(Pt(l)),1)],2)):x("",!0)])):(n(),d("div",Vp,a[71]||(a[71]=[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",Rp,[e("div",zp,[e("span",{class:_(["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:_(["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),A(" "+g(l.status==="blocked"?"已封锁":l.status==="unauthorized"?"异常":l.status==="temp_error"?"临时异常":l.isActive?"正常":"异常"),1)],2),l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"?(n(),d("span",jp,[a[72]||(a[72]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),a[73]||(a[73]=A(" 限流中 ",-1)),l.rateLimitStatus&&typeof l.rateLimitStatus=="object"&&l.rateLimitStatus.minutesRemaining>0?(n(),d("span",Op,"("+g(Ot(l.rateLimitStatus.minutesRemaining))+")",1)):x("",!0)])):x("",!0),l.schedulable===!1?(n(),d("span",Lp,[a[75]||(a[75]=e("i",{class:"fas fa-pause-circle mr-1"},null,-1)),a[76]||(a[76]=A(" 不可调度 ",-1)),Dt(l)?(n(),Fe(b,{key:0,content:Dt(l),effect:"dark",placement:"top"},{default:Rt(()=>a[74]||(a[74]=[e("i",{class:"fas fa-question-circle ml-1 cursor-help text-gray-500"},null,-1)])),_:2,__:[74]},1032,["content"])):x("",!0)])):x("",!0),l.status==="blocked"&&l.errorMessage?(n(),d("span",{key:2,class:"mt-1 max-w-xs truncate text-xs text-gray-500 dark:text-gray-400",title:l.errorMessage},g(l.errorMessage),9,Np)):x("",!0),l.accountType==="dedicated"?(n(),d("span",Ep," 绑定: "+g(l.boundApiKeysCount||0)+" 个API Key ",1)):x("",!0)])]),e("td",qp,[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"?(n(),d("div",Wp,[e("div",Gp,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-green-500 to-blue-600 transition-all duration-300",style:Se({width:101-(l.priority||50)+"%"})},null,4)]),e("span",Fp,g(l.priority||50),1)])):(n(),d("div",Qp,a[77]||(a[77]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",Bp,[kt(l.proxy)?(n(),d("div",{key:0,class:"break-all rounded bg-blue-50 px-2 py-1 font-mono text-xs",title:kt(l.proxy)},g(kt(l.proxy)),9,Hp)):(n(),d("div",Jp,"无代理"))]),e("td",Yp,[l.usage&&l.usage.daily?(n(),d("div",Zp,[e("div",Xp,[a[78]||(a[78]=e("div",{class:"h-2 w-2 rounded-full bg-blue-500"},null,-1)),e("span",eg,g(l.usage.daily.requests||0)+" 次",1)]),e("div",tg,[a[79]||(a[79]=e("div",{class:"h-2 w-2 rounded-full bg-purple-500"},null,-1)),e("span",sg,g(st(l.usage.daily.allTokens||0))+"M",1)]),e("div",ag,[a[80]||(a[80]=e("div",{class:"h-2 w-2 rounded-full bg-green-500"},null,-1)),e("span",rg,"$"+g(yt(l)),1)]),l.usage.averages&&l.usage.averages.rpm>0?(n(),d("div",lg," 平均 "+g(l.usage.averages.rpm.toFixed(2))+" RPM ",1)):x("",!0)])):(n(),d("div",og,"暂无数据"))]),e("td",ng,[l.platform==="claude"?(n(),d("div",ig,[bt(l)&&l.claudeUsage?(n(),d("div",dg,[e("div",ug,[e("div",pg,[a[81]||(a[81]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"}," 5h ",-1)),e("div",gg,[e("div",mg,[e("div",yg,[e("div",{class:_(["h-2 rounded-full transition-all duration-300",o(l.claudeUsage.fiveHour)]),style:Se({width:t(l.claudeUsage.fiveHour)})},null,6)]),e("span",cg,g(i(l.claudeUsage.fiveHour)),1)])])]),e("div",xg," 重置剩余 "+g(O(l.claudeUsage.fiveHour)),1)]),e("div",fg,[e("div",bg,[a[82]||(a[82]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-emerald-100 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-300"}," 7d ",-1)),e("div",vg,[e("div",kg,[e("div",hg,[e("div",{class:_(["h-2 rounded-full transition-all duration-300",o(l.claudeUsage.sevenDay)]),style:Se({width:t(l.claudeUsage.sevenDay)})},null,6)]),e("span",wg,g(i(l.claudeUsage.sevenDay)),1)])])]),e("div",$g," 重置剩余 "+g(O(l.claudeUsage.sevenDay)),1)]),e("div",Ag,[e("div",Cg,[a[83]||(a[83]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-purple-100 px-2 py-0.5 text-[11px] font-medium text-purple-600 dark:bg-purple-500/20 dark:text-purple-300"}," Opus ",-1)),e("div",Ug,[e("div",Tg,[e("div",Ig,[e("div",{class:_(["h-2 rounded-full transition-all duration-300",o(l.claudeUsage.sevenDayOpus)]),style:Se({width:t(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",Kg,g(i(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",_g," 重置剩余 "+g(O(l.claudeUsage.sevenDayOpus)),1)])])):!bt(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(n(),d("div",Mg,[l.usage&&l.usage.sessionWindow?(n(),d("div",Sg,[e("div",Pg,[a[84]||(a[84]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("span",Dg,g(st(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",Vg,[a[85]||(a[85]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("span",Rg," $"+g(c(l.usage.sessionWindow.totalCost)),1)])])):x("",!0),e("div",zg,[e("div",jg,[e("div",{class:_(["h-2 rounded-full transition-all duration-300",Vt(l.sessionWindow.sessionWindowStatus,l)]),style:Se({width:l.sessionWindow.progress+"%"})},null,6)]),e("span",Og,g(l.sessionWindow.progress)+"% ",1)]),e("div",Lg,[e("div",null,g(wt(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(n(),d("div",Ng," 剩余 "+g($t(l.sessionWindow.remainingTime)),1)):x("",!0)])])):(n(),d("div",Eg,"暂无统计"))])):l.platform==="claude-console"?(n(),d("div",qg,[Number(l.dailyQuota)>0?(n(),d("div",Wg,[e("div",Gg,[a[86]||(a[86]=e("span",{class:"text-gray-600 dark:text-gray-300"},"额度进度",-1)),e("span",Fg,g(q(l).toFixed(1))+"% ",1)]),e("div",Qg,[e("div",Bg,[e("div",{class:_(["h-2 rounded-full transition-all duration-300",F(q(l))]),style:Se({width:Math.min(100,q(l))+"%"})},null,6)]),e("span",Hg," $"+g(c(((ae=(D=l.usage)==null?void 0:D.daily)==null?void 0:ae.cost)||0))+" / $"+g(Number(l.dailyQuota).toFixed(2)),1)]),e("div",Jg,[A(" 剩余 $"+g(se(l))+" ",1),e("span",Yg,"重置 "+g(l.quotaResetTime||"00:00"),1)])])):(n(),d("div",Zg,a[87]||(a[87]=[e("i",{class:"fas fa-minus"},null,-1)])))])):l.platform==="openai"?(n(),d("div",Xg,[l.codexUsage?(n(),d("div",em,[e("div",tm,[e("div",sm,[e("span",am,g(N("primary")),1),e("div",rm,[e("div",lm,[e("div",om,[e("div",{class:_(["h-2 rounded-full transition-all duration-300",ke(l.codexUsage.primary)]),style:Se({width:he(l.codexUsage.primary)})},null,6)]),e("span",nm,g(de(l.codexUsage.primary)),1)])])]),e("div",im," 重置剩余 "+g(ne(l.codexUsage.primary)),1)]),e("div",dm,[e("div",um,[e("span",pm,g(N("secondary")),1),e("div",gm,[e("div",mm,[e("div",ym,[e("div",{class:_(["h-2 rounded-full transition-all duration-300",ke(l.codexUsage.secondary)]),style:Se({width:he(l.codexUsage.secondary)})},null,6)]),e("span",cm,g(de(l.codexUsage.secondary)),1)])])]),e("div",xm," 重置剩余 "+g(ne(l.codexUsage.secondary)),1)])])):(n(),d("div",fm,a[88]||(a[88]=[e("span",{class:"text-xs"},"N/A",-1)])))])):(n(),d("div",bm,a[89]||(a[89]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",vm,g(xt(l.lastUsedAt)),1),e("td",km,[e("div",hm,[(l.platform==="claude"||l.platform==="claude-console"||l.platform==="openai"||l.platform==="openai-responses")&&(l.status==="unauthorized"||l.status!=="active"||(ue=l.rateLimitStatus)!=null&&ue.isRateLimited||l.rateLimitStatus==="limited"||!l.isActive)?(n(),d("button",{key:0,class:_(["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:me=>qt(l)},[e("i",{class:_(["fas fa-redo",l.isResetting?"animate-spin":""])},null,2),a[90]||(a[90]=e("span",{class:"ml-1"},"重置状态",-1))],10,wm)):x("",!0),e("button",{class:_(["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:me=>Kt(l)},[e("i",{class:_(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",Am,g(l.schedulable?"调度":"停用"),1)],10,$m),lt(l)?(n(),d("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:me=>Xe(l)},a[91]||(a[91]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,Cm)):x("",!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:me=>Ct(l)},a[92]||(a[92]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,Um),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:me=>It(l)},a[93]||(a[93]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,Tm)])])])}),128))])])])),!w.value&&Me.value.length>0?(n(),d("div",Im,[(n(!0),d(ve,null,Ke(He.value,l=>{var D,ae,ue,me;return n(),d("div",{key:l.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",Km,[e("div",_m,[at.value?f((n(),d("input",{key:0,"onUpdate:modelValue":a[14]||(a[14]=Te=>ee.value=Te),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:Ue},null,40,Mm)),[[be,ee.value]]):x("",!0),e("div",{class:_(["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:_(["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",Sm,g(l.name||l.email),1),e("div",Pm,[e("span",Dm,g(l.platform),1),a[94]||(a[94]=e("span",{class:"text-xs text-gray-400"},"|",-1)),e("span",Vm,g(l.type),1)])])]),e("span",{class:_(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",Yt(l)])},[e("div",{class:_(["mr-1.5 h-1.5 w-1.5 rounded-full",Zt(l)])},null,2),A(" "+g(Jt(l)),1)],2)]),e("div",Rm,[e("div",null,[a[98]||(a[98]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"今日使用",-1)),e("div",zm,[e("div",jm,[a[95]||(a[95]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-blue-500"},null,-1)),e("p",Om,g(((ae=(D=l.usage)==null?void 0:D.daily)==null?void 0:ae.requests)||0)+" 次 ",1)]),e("div",Lm,[a[96]||(a[96]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",Nm,g(st(((me=(ue=l.usage)==null?void 0:ue.daily)==null?void 0:me.allTokens)||0))+"M ",1)]),e("div",Em,[a[97]||(a[97]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",qm," $"+g(yt(l)),1)])])]),e("div",null,[a[101]||(a[101]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"会话窗口",-1)),l.usage&&l.usage.sessionWindow?(n(),d("div",Wm,[e("div",Gm,[a[99]||(a[99]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",Fm,g(st(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",Qm,[a[100]||(a[100]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",Bm," $"+g(c(l.usage.sessionWindow.totalCost)),1)])])):(n(),d("div",Hm,"-"))])]),e("div",Jm,[l.platform==="claude"?(n(),d("div",Ym,[bt(l)&&l.claudeUsage?(n(),d("div",Zm,[e("div",Xm,[e("div",ey,[a[102]||(a[102]=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",ty,[e("div",sy,[e("div",ay,[e("div",{class:_(["h-2 rounded-full transition-all duration-300",o(l.claudeUsage.fiveHour)]),style:Se({width:t(l.claudeUsage.fiveHour)})},null,6)]),e("span",ry,g(i(l.claudeUsage.fiveHour)),1)])])]),e("div",ly," 重置剩余 "+g(O(l.claudeUsage.fiveHour)),1)]),e("div",oy,[e("div",ny,[a[103]||(a[103]=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",iy,[e("div",dy,[e("div",uy,[e("div",{class:_(["h-2 rounded-full transition-all duration-300",o(l.claudeUsage.sevenDay)]),style:Se({width:t(l.claudeUsage.sevenDay)})},null,6)]),e("span",py,g(i(l.claudeUsage.sevenDay)),1)])])]),e("div",gy," 重置剩余 "+g(O(l.claudeUsage.sevenDay)),1)]),e("div",my,[e("div",yy,[a[104]||(a[104]=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",cy,[e("div",xy,[e("div",fy,[e("div",{class:_(["h-2 rounded-full transition-all duration-300",o(l.claudeUsage.sevenDayOpus)]),style:Se({width:t(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",by,g(i(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",vy," 重置剩余 "+g(O(l.claudeUsage.sevenDayOpus)),1)])])):!bt(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(n(),d("div",ky,[e("div",hy,[e("div",wy,[a[106]||(a[106]=e("span",{class:"font-medium text-gray-600 dark:text-gray-300"},"会话窗口",-1)),Ye(b,{content:"会话窗口进度不代表使用量,仅表示距离下一个5小时窗口的剩余时间",placement:"top"},{default:Rt(()=>a[105]||(a[105]=[e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600"},null,-1)])),_:1,__:[105]})]),e("span",$y,g(l.sessionWindow.progress)+"% ",1)]),e("div",Ay,[e("div",{class:_(["h-full transition-all duration-300",Vt(l.sessionWindow.sessionWindowStatus,l)]),style:Se({width:l.sessionWindow.progress+"%"})},null,6)]),e("div",Cy,[e("span",Uy,g(wt(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(n(),d("span",Ty," 剩余 "+g($t(l.sessionWindow.remainingTime)),1)):(n(),d("span",Iy," 已结束 "))])])):(n(),d("div",Ky,"暂无统计"))])):l.platform==="openai"?(n(),d("div",_y,[l.codexUsage?(n(),d("div",My,[e("div",Sy,[e("div",Py,[e("span",Dy,g(N("primary")),1),e("div",Vy,[e("div",Ry,[e("div",zy,[e("div",{class:_(["h-2 rounded-full transition-all duration-300",ke(l.codexUsage.primary)]),style:Se({width:he(l.codexUsage.primary)})},null,6)]),e("span",jy,g(de(l.codexUsage.primary)),1)])])]),e("div",Oy," 重置剩余 "+g(ne(l.codexUsage.primary)),1)]),e("div",Ly,[e("div",Ny,[e("span",Ey,g(N("secondary")),1),e("div",qy,[e("div",Wy,[e("div",Gy,[e("div",{class:_(["h-2 rounded-full transition-all duration-300",ke(l.codexUsage.secondary)]),style:Se({width:he(l.codexUsage.secondary)})},null,6)]),e("span",Fy,g(de(l.codexUsage.secondary)),1)])])]),e("div",Qy," 重置剩余 "+g(ne(l.codexUsage.secondary)),1)])])):x("",!0),l.codexUsage?x("",!0):(n(),d("div",By,"暂无统计"))])):x("",!0),e("div",Hy,[a[107]||(a[107]=e("span",{class:"text-gray-500 dark:text-gray-400"},"最后使用",-1)),e("span",Jy,g(l.lastUsedAt?Xt(l.lastUsedAt):"从未使用"),1)]),l.proxyConfig&&l.proxyConfig.type!=="none"?(n(),d("div",Yy,[a[108]||(a[108]=e("span",{class:"text-gray-500 dark:text-gray-400"},"代理",-1)),e("span",Zy,g(l.proxyConfig.type.toUpperCase()),1)])):x("",!0),e("div",Xy,[a[109]||(a[109]=e("span",{class:"text-gray-500 dark:text-gray-400"},"优先级",-1)),e("span",ec,g(l.priority||50),1)])]),e("div",tc,[e("button",{class:_(["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:Te=>Kt(l)},[e("i",{class:_(["fas",l.schedulable?"fa-pause":"fa-play"])},null,2),A(" "+g(l.schedulable?"暂停":"启用"),1)],10,sc),lt(l)?(n(),d("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:Te=>Xe(l)},a[110]||(a[110]=[e("i",{class:"fas fa-chart-line"},null,-1),A(" 详情 ",-1)]),8,ac)):x("",!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:Te=>Ct(l)},a[111]||(a[111]=[e("i",{class:"fas fa-edit mr-1"},null,-1),A(" 编辑 ",-1)]),8,rc),e("button",{class:"rounded-lg bg-red-50 px-3 py-2 text-xs text-red-600 transition-colors hover:bg-red-100",onClick:Te=>It(l)},a[112]||(a[112]=[e("i",{class:"fas fa-trash"},null,-1)]),8,lc)])])}),128))])):x("",!0)]),!w.value&&Me.value.length>0?(n(),d("div",oc,[e("div",nc,[e("span",ic," 共 "+g(Me.value.length)+" 条记录 ",1),e("div",dc,[a[113]||(a[113]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),f(e("select",{"onUpdate:modelValue":a[15]||(a[15]=l=>v.value=l),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm",onChange:a[16]||(a[16]=l=>S.value=1)},[(n(),d(ve,null,Ke(C,l=>e("option",{key:l,value:l},g(l),9,uc)),64))],544),[[ys,v.value]]),a[114]||(a[114]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",pc,[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:S.value===1,onClick:a[17]||(a[17]=l=>S.value--)},a[115]||(a[115]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,gc),e("div",mc,[y.value?(n(),d("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:a[18]||(a[18]=l=>S.value=1)}," 1 ")):x("",!0),I.value?(n(),d("span",yc," ... ")):x("",!0),(n(!0),d(ve,null,Ke(We.value,l=>(n(),d("button",{key:l,class:_(["rounded-md border px-3 py-1 text-xs font-medium transition-colors sm:text-sm",l===S.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:D=>S.value=l},g(l),11,cc))),128)),De.value?(n(),d("span",xc," ... ")):x("",!0),m.value?(n(),d("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:a[19]||(a[19]=l=>S.value=Pe.value)},g(Pe.value),1)):x("",!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:S.value===Pe.value||Pe.value===0,onClick:a[20]||(a[20]=l=>S.value++)},a[116]||(a[116]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,fc)])])):x("",!0),Be.value&&(!$.value||$.value!=="ccr")?(n(),Fe(us,{key:1,onClose:At,onPlatformChanged:a[21]||(a[21]=l=>$.value=l),onSuccess:_t})):Be.value&&$.value==="ccr"?(n(),Fe(ps,{key:2,onClose:At,onSuccess:_t})):x("",!0),Ee.value&&qe.value&&qe.value.platform==="ccr"?(n(),Fe(ps,{key:3,account:qe.value,onClose:a[22]||(a[22]=l=>Ee.value=!1),onSuccess:Mt},null,8,["account"])):Ee.value?(n(),Fe(us,{key:4,account:qe.value,onClose:a[23]||(a[23]=l=>Ee.value=!1),onSuccess:Mt},null,8,["account"])):x("",!0),Ye(cs,{"cancel-text":je(p).cancelText,"confirm-text":je(p).confirmText,message:je(p).message,show:je(Ae),title:je(p).title,onCancel:je(W),onConfirm:je(K)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),we.value?(n(),Fe(Ku,{key:5,account:P.value||{},"generated-at":s.value,history:u.value,loading:_e.value,overview:Z.value,show:we.value,summary:E.value,onClose:gt},null,8,["account","generated-at","history","loading","overview","show","summary"])):x("",!0)])}}},Uc=rs(bc,[["__scopeId","data-v-d9db85ff"]]);export{Uc as default};
|