import{a as Is}from"./element-plus-CqiD73Lu.js";import{r as I,aP as Ts,o as le,V as hs,x as i,y as n,z as e,L as x,K as b,al as ke,aT as Ut,O as w,aq as M,aa as Ks,P as p,aV as us,aY as ms,C as K,c as pe,Z as _s,q as ps,I as Ge,an as ce,Q as xe,ac as Ie,a5 as qt,R as He,B as Se,u as Ne,aX as Ds,D as Ms,_ as Ss,J as Nt,Y as mt}from"./vue-vendor-Bsazo-x0.js";import{c as V,s as P,_ as Wt,a as Ps}from"./index-CDUtcYpQ.js";import{C as ws}from"./ConfirmModal-Cl9ifxlm.js";import{C as zs}from"./chart-yFHxLHpB.js";import{C as gs}from"./CustomDropdown-C9lEjOww.js";import"./vendor-Dr8jvgFu.js";const ds=I(!1),fs=I({title:"",message:"",confirmText:"继续",cancelText:"取消"}),wt=I(null);function $s(){return{showConfirmModal:ds,confirmOptions:fs,showConfirm:(ge,_,N="继续",O="取消")=>new Promise(A=>{fs.value={title:ge,message:_,confirmText:N,cancelText:O},wt.value=A,ds.value=!0}),handleConfirm:()=>{ds.value=!1,wt.value&&(wt.value(!0),wt.value=null)},handleCancel:()=>{ds.value=!1,wt.value&&(wt.value(!1),wt.value=null)}}}const As=Ts("accounts",()=>{const E=I([]),we=I([]),g=I([]),ge=I([]),_=I([]),N=I([]),O=I([]),A=I([]),$=I(!1),h=I(null),z=I(""),B=I("asc"),Y=async()=>{$.value=!0,h.value=null;try{const c=await V.get("/admin/claude-accounts");if(c.success)E.value=c.data||[];else throw new Error(c.message||"获取Claude账户失败")}catch(c){throw h.value=c.message,c}finally{$.value=!1}},ee=async()=>{$.value=!0,h.value=null;try{const c=await V.get("/admin/claude-console-accounts");if(c.success)we.value=c.data||[];else throw new Error(c.message||"获取Claude Console账户失败")}catch(c){throw h.value=c.message,c}finally{$.value=!1}},J=async()=>{$.value=!0,h.value=null;try{const c=await V.get("/admin/bedrock-accounts");if(c.success)g.value=c.data||[];else throw new Error(c.message||"获取Bedrock账户失败")}catch(c){throw h.value=c.message,c}finally{$.value=!1}},X=async()=>{$.value=!0,h.value=null;try{const c=await V.get("/admin/gemini-accounts");if(c.success)ge.value=c.data||[];else throw new Error(c.message||"获取Gemini账户失败")}catch(c){throw h.value=c.message,c}finally{$.value=!1}},G=async()=>{$.value=!0,h.value=null;try{const c=await V.get("/admin/openai-accounts");if(c.success)_.value=c.data||[];else throw new Error(c.message||"获取OpenAI账户失败")}catch(c){throw h.value=c.message,c}finally{$.value=!1}},k=async()=>{$.value=!0,h.value=null;try{const c=await V.get("/admin/azure-openai-accounts");if(c.success)N.value=c.data||[];else throw new Error(c.message||"获取Azure OpenAI账户失败")}catch(c){throw h.value=c.message,c}finally{$.value=!1}},m=async()=>{$.value=!0,h.value=null;try{const c=await V.get("/admin/openai-responses-accounts");if(c.success)O.value=c.data||[];else throw new Error(c.message||"获取OpenAI-Responses账户失败")}catch(c){throw h.value=c.message,c}finally{$.value=!1}},T=async()=>{$.value=!0,h.value=null;try{const c=await V.get("/admin/droid-accounts");if(c.success)A.value=c.data||[];else throw new Error(c.message||"获取Droid账户失败")}catch(c){throw h.value=c.message,c}finally{$.value=!1}};return{claudeAccounts:E,claudeConsoleAccounts:we,bedrockAccounts:g,geminiAccounts:ge,openaiAccounts:_,azureOpenaiAccounts:N,openaiResponsesAccounts:O,droidAccounts:A,loading:$,error:h,sortBy:z,sortOrder:B,fetchClaudeAccounts:Y,fetchClaudeConsoleAccounts:ee,fetchBedrockAccounts:J,fetchGeminiAccounts:X,fetchOpenAIAccounts:G,fetchAzureOpenAIAccounts:k,fetchOpenAIResponsesAccounts:m,fetchDroidAccounts:T,fetchAllAccounts:async()=>{$.value=!0,h.value=null;try{await Promise.all([Y(),ee(),J(),X(),G(),k(),m(),T()])}catch(c){throw h.value=c.message,c}finally{$.value=!1}},createClaudeAccount:async c=>{$.value=!0,h.value=null;try{const y=await V.post("/admin/claude-accounts",c);if(y.success)return await Y(),y.data;throw new Error(y.message||"创建Claude账户失败")}catch(y){throw h.value=y.message,y}finally{$.value=!1}},createClaudeConsoleAccount:async c=>{$.value=!0,h.value=null;try{const y=await V.post("/admin/claude-console-accounts",c);if(y.success)return await ee(),y.data;throw new Error(y.message||"创建Claude Console账户失败")}catch(y){throw h.value=y.message,y}finally{$.value=!1}},createBedrockAccount:async c=>{$.value=!0,h.value=null;try{const y=await V.post("/admin/bedrock-accounts",c);if(y.success)return await J(),y.data;throw new Error(y.message||"创建Bedrock账户失败")}catch(y){throw h.value=y.message,y}finally{$.value=!1}},createGeminiAccount:async c=>{$.value=!0,h.value=null;try{const y=await V.post("/admin/gemini-accounts",c);if(y.success)return await X(),y.data;throw new Error(y.message||"创建Gemini账户失败")}catch(y){throw h.value=y.message,y}finally{$.value=!1}},createOpenAIAccount:async c=>{$.value=!0,h.value=null;try{const y=await V.post("/admin/openai-accounts",c);if(y.success)return await G(),y.data;throw new Error(y.message||"创建OpenAI账户失败")}catch(y){throw h.value=y.message,y}finally{$.value=!1}},createDroidAccount:async c=>{$.value=!0,h.value=null;try{const y=await V.post("/admin/droid-accounts",c);if(y.success)return await T(),y.data;throw new Error(y.message||"创建Droid账户失败")}catch(y){throw h.value=y.message,y}finally{$.value=!1}},updateDroidAccount:async(c,y)=>{$.value=!0,h.value=null;try{const D=await V.put(`/admin/droid-accounts/${c}`,y);if(D.success)return await T(),D.data;throw new Error(D.message||"更新Droid账户失败")}catch(D){throw h.value=D.message,D}finally{$.value=!1}},createAzureOpenAIAccount:async c=>{$.value=!0,h.value=null;try{const y=await V.post("/admin/azure-openai-accounts",c);if(y.success)return await k(),y.data;throw new Error(y.message||"创建Azure OpenAI账户失败")}catch(y){throw h.value=y.message,y}finally{$.value=!1}},createOpenAIResponsesAccount:async c=>{$.value=!0,h.value=null;try{const y=await V.post("/admin/openai-responses-accounts",c);if(y.success)return await m(),y.data;throw new Error(y.message||"创建OpenAI-Responses账户失败")}catch(y){throw h.value=y.message,y}finally{$.value=!1}},updateClaudeAccount:async(c,y)=>{$.value=!0,h.value=null;try{const D=await V.put(`/admin/claude-accounts/${c}`,y);if(D.success)return await Y(),D;throw new Error(D.message||"更新Claude账户失败")}catch(D){throw h.value=D.message,D}finally{$.value=!1}},updateClaudeConsoleAccount:async(c,y)=>{$.value=!0,h.value=null;try{const D=await V.put(`/admin/claude-console-accounts/${c}`,y);if(D.success)return await ee(),D;throw new Error(D.message||"更新Claude Console账户失败")}catch(D){throw h.value=D.message,D}finally{$.value=!1}},updateBedrockAccount:async(c,y)=>{$.value=!0,h.value=null;try{const D=await V.put(`/admin/bedrock-accounts/${c}`,y);if(D.success)return await J(),D;throw new Error(D.message||"更新Bedrock账户失败")}catch(D){throw h.value=D.message,D}finally{$.value=!1}},updateGeminiAccount:async(c,y)=>{$.value=!0,h.value=null;try{const D=await V.put(`/admin/gemini-accounts/${c}`,y);if(D.success)return await X(),D;throw new Error(D.message||"更新Gemini账户失败")}catch(D){throw h.value=D.message,D}finally{$.value=!1}},updateOpenAIAccount:async(c,y)=>{$.value=!0,h.value=null;try{const D=await V.put(`/admin/openai-accounts/${c}`,y);if(D.success)return await G(),D;throw new Error(D.message||"更新OpenAI账户失败")}catch(D){throw h.value=D.message,D}finally{$.value=!1}},updateAzureOpenAIAccount:async(c,y)=>{$.value=!0,h.value=null;try{const D=await V.put(`/admin/azure-openai-accounts/${c}`,y);if(D.success)return await k(),D;throw new Error(D.message||"更新Azure OpenAI账户失败")}catch(D){throw h.value=D.message,D}finally{$.value=!1}},updateOpenAIResponsesAccount:async(c,y)=>{$.value=!0,h.value=null;try{const D=await V.put(`/admin/openai-responses-accounts/${c}`,y);if(D.success)return await m(),D;throw new Error(D.message||"更新OpenAI-Responses账户失败")}catch(D){throw h.value=D.message,D}finally{$.value=!1}},toggleAccount:async(c,y)=>{$.value=!0,h.value=null;try{let D;c==="claude"?D=`/admin/claude-accounts/${y}/toggle`:c==="claude-console"?D=`/admin/claude-console-accounts/${y}/toggle`:c==="bedrock"?D=`/admin/bedrock-accounts/${y}/toggle`:c==="gemini"?D=`/admin/gemini-accounts/${y}/toggle`:c==="openai"?D=`/admin/openai-accounts/${y}/toggle`:c==="azure_openai"?D=`/admin/azure-openai-accounts/${y}/toggle`:c==="openai-responses"?D=`/admin/openai-responses-accounts/${y}/toggle`:D=`/admin/openai-accounts/${y}/toggle`;const Me=await V.put(D);if(Me.success)return c==="claude"?await Y():c==="claude-console"?await ee():c==="bedrock"?await J():c==="gemini"?await X():c==="openai"?await G():c==="azure_openai"?await k():c==="openai-responses"?await m():await G(),Me;throw new Error(Me.message||"切换状态失败")}catch(D){throw h.value=D.message,D}finally{$.value=!1}},deleteAccount:async(c,y)=>{$.value=!0,h.value=null;try{let D;c==="claude"?D=`/admin/claude-accounts/${y}`:c==="claude-console"?D=`/admin/claude-console-accounts/${y}`:c==="bedrock"?D=`/admin/bedrock-accounts/${y}`:c==="gemini"?D=`/admin/gemini-accounts/${y}`:c==="openai"?D=`/admin/openai-accounts/${y}`:c==="azure_openai"?D=`/admin/azure-openai-accounts/${y}`:c==="openai-responses"?D=`/admin/openai-responses-accounts/${y}`:D=`/admin/openai-accounts/${y}`;const Me=await V.delete(D);if(Me.success)return c==="claude"?await Y():c==="claude-console"?await ee():c==="bedrock"?await J():c==="gemini"?await X():c==="openai"?await G():c==="azure_openai"?await k():c==="openai-responses"?await m():await G(),Me;throw new Error(Me.message||"删除失败")}catch(D){throw h.value=D.message,D}finally{$.value=!1}},refreshClaudeToken:async c=>{$.value=!0,h.value=null;try{const y=await V.post(`/admin/claude-accounts/${c}/refresh`);if(y.success)return await Y(),y;throw new Error(y.message||"Token刷新失败")}catch(y){throw h.value=y.message,y}finally{$.value=!1}},generateClaudeAuthUrl:async c=>{try{const y=await V.post("/admin/claude-accounts/generate-auth-url",c);if(y.success)return y.data;throw new Error(y.message||"生成授权URL失败")}catch(y){throw h.value=y.message,y}},exchangeClaudeCode:async c=>{try{const y=await V.post("/admin/claude-accounts/exchange-code",c);if(y.success)return y.data;throw new Error(y.message||"交换授权码失败")}catch(y){throw h.value=y.message,y}},generateClaudeSetupTokenUrl:async c=>{try{const y=await V.post("/admin/claude-accounts/generate-setup-token-url",c);if(y.success)return y.data;throw new Error(y.message||"生成Setup Token URL失败")}catch(y){throw h.value=y.message,y}},exchangeClaudeSetupTokenCode:async c=>{try{const y=await V.post("/admin/claude-accounts/exchange-setup-token-code",c);if(y.success)return y.data;throw new Error(y.message||"交换Setup Token授权码失败")}catch(y){throw h.value=y.message,y}},generateGeminiAuthUrl:async c=>{try{const y=await V.post("/admin/gemini-accounts/generate-auth-url",c);if(y.success)return y.data;throw new Error(y.message||"生成授权URL失败")}catch(y){throw h.value=y.message,y}},exchangeGeminiCode:async c=>{try{const y=await V.post("/admin/gemini-accounts/exchange-code",c);if(y.success)return y.data;throw new Error(y.message||"交换授权码失败")}catch(y){throw h.value=y.message,y}},generateOpenAIAuthUrl:async c=>{try{const y=await V.post("/admin/openai-accounts/generate-auth-url",c);if(y.success)return y.data;throw new Error(y.message||"生成授权URL失败")}catch(y){throw h.value=y.message,y}},exchangeOpenAICode:async c=>{try{const y=await V.post("/admin/openai-accounts/exchange-code",c);if(y.success)return y.data;throw new Error(y.message||"交换授权码失败")}catch(y){throw h.value=y.message,y}},generateDroidAuthUrl:async c=>{h.value=null;try{const y=await V.post("/admin/droid-accounts/generate-auth-url",c);if(y.success)return y.data;throw new Error(y.message||"生成授权URL失败")}catch(y){throw h.value=y.message,y}},exchangeDroidCode:async c=>{h.value=null;try{return await V.post("/admin/droid-accounts/exchange-code",c)}catch(y){throw h.value=y.message,y}},sortAccounts:c=>{z.value===c?B.value=B.value==="asc"?"desc":"asc":(z.value=c,B.value="asc")},reset:()=>{E.value=[],we.value=[],g.value=[],ge.value=[],_.value=[],N.value=[],O.value=[],A.value=[],$.value=!1,h.value=null,z.value="",B.value="asc"}}}),Vs={class:"space-y-4"},js={class:"flex items-center justify-between"},Rs={class:"flex cursor-pointer items-center"},Os={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"},Ls={class:"relative"},Es={key:0,class:"mt-1 text-xs text-red-500"},Ns={key:1,class:"mt-1 text-xs text-green-500"},qs={class:"grid grid-cols-2 gap-4"},Ws={class:"space-y-4"},Fs={class:"flex items-center"},Gs={key:0,class:"grid grid-cols-2 gap-4"},Qs={class:"relative"},Bs=["type"],ys={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(E,{emit:we}){const g=E,ge=we,_=I({...g.modelValue}),N=I(!!(_.value.username||_.value.password)),O=I(!1),A=I(""),$=I(""),h=I(!1);le(()=>g.modelValue,G=>{JSON.stringify(G)!==JSON.stringify(_.value)&&(_.value={...G},N.value=!!(G.username||G.password))},{deep:!0}),le(()=>_.value.enabled,()=>{B()}),le(()=>_.value.type,()=>{B()}),le(()=>_.value.host,()=>{B()}),le(()=>_.value.port,()=>{B()}),le(()=>_.value.username,()=>{B()}),le(()=>_.value.password,()=>{B()}),le(N,G=>{G||(_.value.username="",_.value.password="",B())});let z=null;function B(){z&&clearTimeout(z),z=setTimeout(()=>{const G={..._.value};N.value||(G.username="",G.password=""),ge("update:modelValue",G)},100)}function Y(){if($.value="",h.value=!1,!!A.value)try{const G=A.value.split("#")[0].trim();if(!G)return;const k=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,m=G.match(k);if(!m){const Ce=/^([^:]+):(\d+)$/,De=G.match(Ce);if(De){_.value.type="socks5",_.value.host=De[1],_.value.port=De[2],_.value.username="",_.value.password="",N.value=!1,h.value=!0,B(),setTimeout(()=>{h.value=!1},3e3);return}$.value="无效的代理URL格式,请检查输入";return}const[,T,Z,L,U,R]=m;_.value.type=T.toLowerCase(),_.value.host=U,_.value.port=R,Z&&L?(_.value.username=decodeURIComponent(Z),_.value.password=decodeURIComponent(L),N.value=!0):(_.value.username="",_.value.password="",N.value=!1),h.value=!0,B(),setTimeout(()=>{h.value=!1},3e3)}catch{$.value="解析失败,请检查URL格式"}}function ee(){A.value="",$.value="",h.value=!1}function J(){setTimeout(()=>{Y()},0)}function X(){const G=A.value.trim();G.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(G)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(G))&&Y():/^[^:]+:\d{2,5}$/.test(G)&&Y()}return hs(()=>{z&&clearTimeout(z)}),(G,k)=>(n(),i("div",Vs,[e("div",js,[k[10]||(k[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",Rs,[b(e("input",{"onUpdate:modelValue":k[0]||(k[0]=m=>_.value.enabled=m),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ke,_.value.enabled]]),k[9]||(k[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),_.value.enabled?(n(),i("div",Os,[k[22]||(k[22]=Ut('
配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。
请确保代理服务器稳定可用,否则会影响账户的正常使用。
',1)),e("div",null,[k[14]||(k[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[w(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",Ls,[b(e("input",{"onUpdate:modelValue":k[1]||(k[1]=m=>A.value=m),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:X,onKeyup:Ks(Y,["enter"]),onPaste:J},null,544),[[M,A.value]]),A.value?(n(),i("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:ee},k[11]||(k[11]=[e("i",{class:"fas fa-times"},null,-1)]))):x("",!0)]),$.value?(n(),i("p",Es,[k[12]||(k[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),w(" "+p($.value),1)])):h.value?(n(),i("p",Ns,k[13]||(k[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),w(" 代理配置已自动填充 ",-1)]))):x("",!0)]),k[23]||(k[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[k[16]||(k[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),b(e("select",{"onUpdate:modelValue":k[2]||(k[2]=m=>_.value.type=m),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},k[15]||(k[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[us,_.value.type]])]),e("div",qs,[e("div",null,[k[17]||(k[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),b(e("input",{"onUpdate:modelValue":k[3]||(k[3]=m=>_.value.host=m),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,_.value.host]])]),e("div",null,[k[18]||(k[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),b(e("input",{"onUpdate:modelValue":k[4]||(k[4]=m=>_.value.port=m),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,_.value.port]])])]),e("div",Ws,[e("div",Fs,[b(e("input",{id:"proxyAuth","onUpdate:modelValue":k[5]||(k[5]=m=>N.value=m),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ke,N.value]]),k[19]||(k[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),N.value?(n(),i("div",Gs,[e("div",null,[k[20]||(k[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),b(e("input",{"onUpdate:modelValue":k[6]||(k[6]=m=>_.value.username=m),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,_.value.username]])]),e("div",null,[k[21]||(k[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",Qs,[b(e("input",{"onUpdate:modelValue":k[7]||(k[7]=m=>_.value.password=m),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:O.value?"text":"password"},null,8,Bs),[[ms,_.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:k[8]||(k[8]=m=>O.value=!O.value)},[e("i",{class:K(O.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):x("",!0)]),k[24]||(k[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,"提示:"),w("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):x("",!0)]))}},Hs={class:"space-y-6"},Js={key:0},Ys={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},Zs={class:"flex items-start gap-4"},Xs={class:"flex-1"},ea={class:"space-y-4"},ta={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},sa={class:"flex items-start gap-3"},aa={class:"flex-1"},ra=["disabled"],la={key:0,class:"fas fa-link mr-2"},oa={key:1,class:"loading-spinner mr-2"},na={key:1,class:"space-y-3"},ia={class:"flex items-center gap-2"},da=["value"],ua={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},pa={class:"flex items-start gap-3"},ga={class:"flex-1"},ma={class:"space-y-3"},ya={key:1},ca={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},xa={class:"flex items-start gap-4"},fa={class:"flex-1"},ba={class:"space-y-4"},va={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},ka={class:"flex items-start gap-3"},ha={class:"flex-1"},wa=["disabled"],$a={key:0,class:"fas fa-link mr-2"},Aa={key:1,class:"loading-spinner mr-2"},Ca={key:1,class:"space-y-3"},Ua={class:"flex items-center gap-2"},Ia=["value"],Ta={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Ka={class:"flex items-start gap-3"},_a={class:"flex-1"},Da={class:"space-y-3"},Ma={key:2},Sa={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},Pa={class:"flex items-start gap-4"},za={class:"flex-1"},Va={class:"space-y-4"},ja={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Ra={class:"flex items-start gap-3"},Oa={class:"flex-1"},La=["disabled"],Ea={key:0,class:"fas fa-link mr-2"},Na={key:1,class:"loading-spinner mr-2"},qa={key:1,class:"space-y-3"},Wa={class:"flex items-center gap-2"},Fa=["value"],Ga={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Qa={class:"flex items-start gap-3"},Ba={class:"flex-1"},Ha={class:"space-y-3"},Ja={key:3},Ya={class:"rounded-lg border border-cyan-200 bg-cyan-50 p-6 dark:border-cyan-700 dark:bg-cyan-900/30"},Za={class:"flex items-start gap-4"},Xa={class:"flex-1"},er={class:"space-y-4"},tr={class:"rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"},sr={class:"flex items-start gap-3"},ar={class:"flex-1"},rr=["disabled"],lr={key:0,class:"fas fa-link mr-2"},or={key:1,class:"loading-spinner mr-2"},nr={key:1,class:"space-y-4"},ir={class:"space-y-2"},dr={class:"flex flex-col gap-2 rounded-md border border-cyan-200 bg-white p-3 dark:border-cyan-700 dark:bg-gray-800"},ur={class:"flex items-center gap-2"},pr=["value"],gr={class:"space-y-2"},mr={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"},yr={class:"font-mono text-xl font-semibold text-cyan-700 dark:text-cyan-200"},cr={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},xr={class:"flex gap-3 pt-4"},fr=["disabled"],br={key:0,class:"loading-spinner mr-2"},vr={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(E,{emit:we}){const g=E,ge=we,_=As(),N=I(!1),O=I(!1),A=I(""),$=I(""),h=I(!1),z=I(""),B=I(""),Y=I(""),ee=I(""),J=I(0);let X=null;const G=pe(()=>g.platform==="droid"?!!z.value:A.value&&$.value.trim()),k=pe(()=>{if(!J.value||J.value<=0)return"00:00";const j=Math.floor(J.value/60),u=J.value%60;return`${j.toString().padStart(2,"0")}:${u.toString().padStart(2,"0")}`}),m=j=>{if(T(),!j||j<=0){J.value=0;return}J.value=Math.floor(j),X=setInterval(()=>{J.value<=1?(J.value=0,T()):J.value-=1},1e3)},T=()=>{X&&(clearInterval(X),X=null)};le($,j=>{if(g.platform==="droid"||!j||typeof j!="string")return;const u=j.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?($.value=s,P("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):P("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(te){console.error("Failed to parse URL:",te),P("链接格式错误,请检查是否为完整的 URL","error")}else if(g.platform==="gemini"||g.platform==="openai")try{const s=new URL(u).searchParams.get("code");s&&($.value=s,P("成功提取授权码!","success"))}catch{}else P("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const Z=async()=>{var j;T(),A.value="",$.value="",B.value="",Y.value="",ee.value="",J.value=0,z.value="",h.value=!1,N.value=!0;try{const u=(j=g.proxy)!=null&&j.enabled?{proxy:{type:g.proxy.type,host:g.proxy.host,port:parseInt(g.proxy.port),username:g.proxy.username||null,password:g.proxy.password||null}}:{};if(g.platform==="claude"){const W=await _.generateClaudeAuthUrl(u);A.value=W.authUrl,z.value=W.sessionId}else if(g.platform==="gemini"){const W=await _.generateGeminiAuthUrl(u);A.value=W.authUrl,z.value=W.sessionId}else if(g.platform==="openai"){const W=await _.generateOpenAIAuthUrl(u);A.value=W.authUrl,z.value=W.sessionId}else if(g.platform==="droid"){const W=await _.generateDroidAuthUrl(u);A.value=W.verificationUriComplete||W.verificationUri,Y.value=W.verificationUri,ee.value=W.verificationUriComplete||W.verificationUri,B.value=W.userCode,m(W.expiresIn||300),z.value=W.sessionId}}catch(u){P(u.message||"生成授权链接失败","error")}finally{N.value=!1}},L=()=>{T(),A.value="",$.value="",B.value="",Y.value="",ee.value="",J.value=0,z.value="",Z()},U=async()=>{if(!A.value){P("请先生成授权链接","warning");return}try{await navigator.clipboard.writeText(A.value),h.value=!0,P("链接已复制","success"),setTimeout(()=>{h.value=!1},2e3)}catch{const u=document.createElement("input");u.value=A.value,document.body.appendChild(u),u.select(),document.execCommand("copy"),document.body.removeChild(u),h.value=!0,P("链接已复制","success"),setTimeout(()=>{h.value=!1},2e3)}},R=async()=>{if(!B.value){P("请先生成授权验证码","warning");return}try{await navigator.clipboard.writeText(B.value),P("验证码已复制","success")}catch{const u=document.createElement("input");u.value=B.value,document.body.appendChild(u),u.select(),document.execCommand("copy"),document.body.removeChild(u),P("验证码已复制","success")}},Ce=()=>{ee.value?window.open(ee.value,"_blank","noopener"):Y.value&&window.open(Y.value,"_blank","noopener")},De=async()=>{var j;if(G.value){O.value=!0;try{let u={};g.platform==="claude"?u={sessionId:z.value,callbackUrl:$.value.trim()}:g.platform==="gemini"?u={code:$.value.trim(),sessionId:z.value}:g.platform==="openai"?u={code:$.value.trim(),sessionId:z.value}:g.platform==="droid"&&(u={sessionId:z.value}),(j=g.proxy)!=null&&j.enabled&&(u.proxy={type:g.proxy.type,host:g.proxy.host,port:parseInt(g.proxy.port),username:g.proxy.username||null,password:g.proxy.password||null});let W;if(g.platform==="claude")W=await _.exchangeClaudeCode(u);else if(g.platform==="gemini")W=await _.exchangeGeminiCode(u);else if(g.platform==="openai")W=await _.exchangeOpenAICode(u);else if(g.platform==="droid"){const te=await _.exchangeDroidCode(u);if(!te.success){if(te.pending){const s=te.message||"授权尚未完成,请在浏览器确认后稍候再次尝试。";P(s,"info"),typeof te.expiresIn=="number"&&te.expiresIn>=0&&m(te.expiresIn);return}throw new Error(te.message||"授权失败,请重试")}W=te.data,T()}ge("success",W)}catch(u){P(u.message||"授权失败,请检查授权码是否正确","error")}finally{O.value=!1}}};return _s(()=>{T()}),(j,u)=>(n(),i("div",Hs,[E.platform==="claude"?(n(),i("div",Js,[e("div",Ys,[e("div",Zs,[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",Xs,[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",ea,[e("div",ta,[e("div",sa,[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",aa,[u[5]||(u[5]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),A.value?(n(),i("div",na,[e("div",ia,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:A.value},null,8,da),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(h.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),w("重新生成 ",-1)]))])):(n(),i("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:N.value,onClick:Z},[N.value?(n(),i("div",oa)):(n(),i("i",la)),w(" "+p(N.value?"生成中...":"生成授权链接"),1)],8,ra))])])]),u[12]||(u[12]=Ut(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Claude 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",ua,[e("div",pa,[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",ga,[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"},[w(" 授权完成后,页面会显示一个 "),e("strong",null,"Authorization Code"),w(",请将其复制并粘贴到下方输入框: ")],-1)),e("div",ma,[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"}),w("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":u[0]||(u[0]=W=>$.value=W),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[M,$.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"}),w(" 请粘贴从Claude页面复制的Authorization Code ")],-1))])])])])])])])])])):E.platform==="gemini"?(n(),i("div",ya,[e("div",ca,[e("div",xa,[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",fa,[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",ba,[e("div",va,[e("div",ka,[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",ha,[u[17]||(u[17]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 点击下方按钮生成授权链接 ",-1)),A.value?(n(),i("div",Ca,[e("div",Ua,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:A.value},null,8,Ia),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(h.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),w("重新生成 ",-1)]))])):(n(),i("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:N.value,onClick:Z},[N.value?(n(),i("div",Aa)):(n(),i("i",$a)),w(" "+p(N.value?"生成中...":"生成授权链接"),1)],8,wa))])])]),u[24]||(u[24]=Ut(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Gemini 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",Ta,[e("div",Ka,[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",_a,[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",Da,[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"}),w("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":u[1]||(u[1]=W=>$.value=W),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[M,$.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"}),w(" 请粘贴从Gemini页面复制的Authorization Code ")])],-1))])])])])])])])])])):E.platform==="openai"?(n(),i("div",Ma,[e("div",Sa,[e("div",Pa,[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",za,[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",Va,[e("div",ja,[e("div",Ra,[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",Oa,[u[29]||(u[29]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 点击下方按钮生成授权链接 ",-1)),A.value?(n(),i("div",qa,[e("div",Wa,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:A.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(h.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),w("重新生成 ",-1)]))])):(n(),i("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:N.value,onClick:Z},[N.value?(n(),i("div",Na)):(n(),i("i",Ea)),w(" "+p(N.value?"生成中...":"生成授权链接"),1)],8,La))])])]),u[36]||(u[36]=Ut(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 OpenAI 账户并授权。
重要提示:授权后页面可能会加载较长时间,请耐心等待。
当浏览器地址栏变为 http://localhost:1455/... 开头时,表示授权已完成。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",Ga,[e("div",Qa,[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",Ba,[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"},[w(" 授权完成后,当页面地址变为 "),e("strong",{class:"font-mono"},"http://localhost:1455/..."),w(" 时: ")],-1)),e("div",Ha,[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"}),w("授权链接或 Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":u[2]||(u[2]=W=>$.value=W),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,$.value]])]),u[32]||(u[32]=Ut('提示:您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别。
• 完整链接示例:http://localhost:1455/auth/callback?code=ac_4hm8...
• 仅 Code 示例:ac_4hm8iqmx9A2fzMy_cwye7U3W7...
',1))])])])])])])])])])):E.platform==="droid"?(n(),i("div",Ja,[e("div",Ya,[e("div",Za,[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",Xa,[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",er,[e("div",tr,[e("div",sr,[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",ar,[u[46]||(u[46]=e("p",{class:"mb-2 font-medium text-cyan-900 dark:text-cyan-200"}," 点击下方按钮生成授权链接 ",-1)),A.value?(n(),i("div",nr,[e("div",ir,[u[42]||(u[42]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权链接",-1)),e("div",dr,[e("div",ur,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:A.value},null,8,pr),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:U},[e("i",{class:K(h.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:Ce},u[40]||(u[40]=[e("i",{class:"fas fa-external-link-alt text-xs"},null,-1),w(" 在新标签中打开 ",-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),w("重新生成 ",-1)]))])])]),e("div",gr,[u[44]||(u[44]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权验证码",-1)),e("div",mr,[e("span",yr,p(B.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),w("复制 ",-1)]))])]),e("div",cr,[e("span",null,[u[45]||(u[45]=e("i",{class:"fas fa-hourglass-half mr-1 text-cyan-500"},null,-1)),w(" 剩余有效期:"+p(k.value),1)])])])):(n(),i("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:N.value,onClick:Z},[N.value?(n(),i("div",or)):(n(),i("i",lr)),w(" "+p(N.value?"生成中...":"生成授权链接"),1)],8,rr))])])]),u[48]||(u[48]=Ut(' 2
在浏览器中打开链接并完成授权
在浏览器中打开授权页面,输入上方验证码并登录 Factory / Droid 账户,最后点击允许授权。
3
完成授权后点击下方“完成授权”按钮,系统会自动获取访问令牌。
若提示授权仍在等待确认,请稍候片刻后系统会自动重试。
',2))])])])])])):x("",!0),e("div",xr,[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]=W=>j.$emit("back"))}," 上一步 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!G.value||O.value,type:"button",onClick:De},[O.value?(n(),i("div",br)):x("",!0),w(" "+p(O.value?"验证中...":"完成授权"),1)],8,fr)])]))}},kr={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},hr={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"},wr={class:"mb-4 flex items-center justify-between sm:mb-6"},$r={class:"mb-6"},Ar={key:0,class:"mb-6 rounded-lg border border-blue-200 bg-blue-50 p-4"},Cr={class:"space-y-4"},Ur={class:"flex gap-4"},Ir={class:"flex cursor-pointer items-center"},Tr={class:"flex cursor-pointer items-center"},Kr={class:"flex cursor-pointer items-center"},_r={class:"flex cursor-pointer items-center"},Dr={class:"flex gap-3"},Mr=["disabled"],Sr={key:0,class:"loading-spinner mr-2"},Pr={class:"space-y-4"},zr={key:0,class:"py-8 text-center"},Vr={key:1,class:"rounded-lg bg-gray-50 py-8 text-center"},jr={key:2,class:"grid grid-cols-1 gap-4 md:grid-cols-2"},Rr={class:"mb-3 flex items-start justify-between"},Or={class:"flex-1"},Lr={class:"font-semibold text-gray-900"},Er={class:"mt-1 text-sm text-gray-500"},Nr={class:"ml-4 flex items-center gap-2"},qr={class:"flex items-center justify-between text-sm text-gray-600"},Wr={class:"flex items-center gap-4"},Fr={class:"flex items-center gap-2"},Gr=["onClick"],Qr=["disabled","onClick"],Br={key:1,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Hr={class:"modal-content w-full max-w-lg p-4 sm:p-6"},Jr={class:"space-y-4"},Yr={class:"rounded-lg bg-gray-100 px-3 py-2 text-sm text-gray-600"},Zr={class:"flex gap-3 pt-4"},Xr=["disabled"],el={key:0,class:"loading-spinner mr-2"},tl={__name:"GroupManagementModal",emits:["close","refresh"],setup(E,{emit:we}){const g=we,ge=I(!0),_=I(!1),N=I([]),O=I(!1),A=I(!1),$=I({name:"",platform:"claude",description:""}),h=I(!1),z=I(!1),B=I(null),Y=I({name:"",platform:"",description:""}),ee=L=>L?new Date(L).toLocaleDateString("zh-CN"):"-",J=async()=>{_.value=!0;try{const L=await V.get("/admin/account-groups");N.value=L.data||[]}catch{P("加载分组列表失败","error")}finally{_.value=!1}},X=async()=>{var L,U;if(!$.value.name||!$.value.platform){P("请填写必填项","error");return}A.value=!0;try{await V.post("/admin/account-groups",{name:$.value.name,platform:$.value.platform,description:$.value.description}),P("分组创建成功","success"),G(),await J(),g("refresh")}catch(R){P(((U=(L=R.response)==null?void 0:L.data)==null?void 0:U.error)||"创建分组失败","error")}finally{A.value=!1}},G=()=>{O.value=!1,$.value={name:"",platform:"claude",description:""}},k=L=>{B.value=L,Y.value={name:L.name,platform:L.platform,description:L.description||""},h.value=!0},m=async()=>{var L,U;if(!Y.value.name){P("请填写分组名称","error");return}z.value=!0;try{await V.put(`/admin/account-groups/${B.value.id}`,{name:Y.value.name,description:Y.value.description}),P("分组更新成功","success"),T(),await J(),g("refresh")}catch(R){P(((U=(L=R.response)==null?void 0:L.data)==null?void 0:U.error)||"更新分组失败","error")}finally{z.value=!1}},T=()=>{h.value=!1,B.value=null,Y.value={name:"",platform:"",description:""}},Z=async L=>{var U,R;if(L.memberCount>0){P("分组内还有成员,无法删除","error");return}if(confirm(`确定要删除分组 "${L.name}" 吗?`))try{await V.delete(`/admin/account-groups/${L.id}`),P("分组删除成功","success"),await J(),g("refresh")}catch(Ce){P(((R=(U=Ce.response)==null?void 0:U.data)==null?void 0:R.error)||"删除分组失败","error")}};return ps(()=>{J()}),(L,U)=>(n(),Ge(qt,{to:"body"},[ge.value?(n(),i("div",kr,[e("div",hr,[e("div",wr,[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",$r,[e("button",{class:"btn btn-primary px-4 py-2",onClick:U[1]||(U[1]=R=>O.value=!0)},U[12]||(U[12]=[e("i",{class:"fas fa-plus mr-2"},null,-1),w(" 创建新分组 ",-1)]))]),O.value?(n(),i("div",Ar,[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)),b(e("input",{"onUpdate:modelValue":U[2]||(U[2]=R=>$.value.name=R),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[M,$.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",Ur,[e("label",Ir,[b(e("input",{"onUpdate:modelValue":U[3]||(U[3]=R=>$.value.platform=R),class:"mr-2",type:"radio",value:"claude"},null,512),[[ce,$.value.platform]]),U[14]||(U[14]=e("span",{class:"text-sm text-gray-700"},"Claude",-1))]),e("label",Tr,[b(e("input",{"onUpdate:modelValue":U[4]||(U[4]=R=>$.value.platform=R),class:"mr-2",type:"radio",value:"gemini"},null,512),[[ce,$.value.platform]]),U[15]||(U[15]=e("span",{class:"text-sm text-gray-700"},"Gemini",-1))]),e("label",Kr,[b(e("input",{"onUpdate:modelValue":U[5]||(U[5]=R=>$.value.platform=R),class:"mr-2",type:"radio",value:"openai"},null,512),[[ce,$.value.platform]]),U[16]||(U[16]=e("span",{class:"text-sm text-gray-700"},"OpenAI",-1))]),e("label",_r,[b(e("input",{"onUpdate:modelValue":U[6]||(U[6]=R=>$.value.platform=R),class:"mr-2",type:"radio",value:"droid"},null,512),[[ce,$.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)),b(e("textarea",{"onUpdate:modelValue":U[7]||(U[7]=R=>$.value.description=R),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[M,$.value.description]])]),e("div",Dr,[e("button",{class:"btn btn-primary px-4 py-2",disabled:!$.value.name||!$.value.platform||A.value,onClick:X},[A.value?(n(),i("div",Sr)):x("",!0),w(" "+p(A.value?"创建中...":"创建"),1)],8,Mr),e("button",{class:"btn btn-secondary px-4 py-2",onClick:G},"取消")])])])):x("",!0),e("div",Pr,[_.value?(n(),i("div",zr,U[21]||(U[21]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500"},"加载中...",-1)]))):N.value.length===0?(n(),i("div",Vr,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(),i("div",jr,[(n(!0),i(xe,null,Ie(N.value,R=>(n(),i("div",{key:R.id,class:"rounded-lg border bg-white p-4 transition-shadow hover:shadow-md"},[e("div",Rr,[e("div",Or,[e("h4",Lr,p(R.name),1),e("p",Er,p(R.description||"暂无描述"),1)]),e("div",Nr,[e("span",{class:K(["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"])},p(R.platform==="claude"?"Claude":R.platform==="gemini"?"Gemini":R.platform==="openai"?"OpenAI":"Droid"),3)])]),e("div",qr,[e("div",Wr,[e("span",null,[U[23]||(U[23]=e("i",{class:"fas fa-users mr-1"},null,-1)),w(" "+p(R.memberCount||0)+" 个成员 ",1)]),e("span",null,[U[24]||(U[24]=e("i",{class:"fas fa-clock mr-1"},null,-1)),w(" "+p(ee(R.createdAt)),1)])]),e("div",Fr,[e("button",{class:"text-blue-600 transition-colors hover:text-blue-800",title:"编辑",onClick:Ce=>k(R)},U[25]||(U[25]=[e("i",{class:"fas fa-edit"},null,-1)]),8,Gr),e("button",{class:"text-red-600 transition-colors hover:text-red-800",disabled:R.memberCount>0,title:"删除",onClick:Ce=>Z(R)},U[26]||(U[26]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Qr)])])]))),128))]))])])])):x("",!0),h.value?(n(),i("div",Br,[e("div",Hr,[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:T},U[27]||(U[27]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",Jr,[e("div",null,[U[29]||(U[29]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),b(e("input",{"onUpdate:modelValue":U[8]||(U[8]=R=>Y.value.name=R),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[M,Y.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",Yr,[w(p(Y.value.platform==="claude"?"Claude":Y.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)),b(e("textarea",{"onUpdate:modelValue":U[9]||(U[9]=R=>Y.value.description=R),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[M,Y.value.description]])]),e("div",Zr,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!Y.value.name||z.value,onClick:m},[z.value?(n(),i("div",el)):x("",!0),w(" "+p(z.value?"更新中...":"更新"),1)],8,Xr),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:T},"取消")])])])])):x("",!0)]))}},sl={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},al={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"},rl={class:"mb-4 flex items-center justify-between sm:mb-6"},ll={class:"flex items-center gap-2 sm:gap-3"},ol={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},nl={key:0,class:"mb-4 flex items-center justify-center sm:mb-8"},il={class:"flex items-center space-x-2 sm:space-x-4"},dl={class:"flex items-center"},ul={class:"flex items-center"},pl={key:1},gl={class:"space-y-6"},ml={key:0},yl={class:"space-y-3"},cl={class:"grid grid-cols-2 gap-2 sm:grid-cols-4"},xl={class:"p-3"},fl={class:"flex items-center justify-between"},bl={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-indigo-500"},vl={class:"p-3"},kl={class:"flex items-center justify-between"},hl={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-emerald-500"},wl={class:"p-3"},$l={class:"flex items-center justify-between"},Al={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-blue-500"},Cl={class:"p-3"},Ul={class:"flex items-center justify-between"},Il={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-rose-500"},Tl={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"},Kl={class:"grid grid-cols-2 gap-2 sm:grid-cols-3"},_l={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-indigo-500"},Dl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},Ml={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-orange-500"},Sl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-cyan-500"},Pl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-emerald-500"},zl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-teal-500"},Vl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},jl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},Rl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-rose-500"},Ol={key:1},Ll={class:"flex flex-wrap gap-4"},El={class:"flex cursor-pointer items-center"},Nl={class:"text-sm text-gray-700 dark:text-gray-300"},ql={key:0},Wl={key:0,class:"flex cursor-pointer items-center"},Fl={class:"flex cursor-pointer items-center"},Gl={key:1,class:"flex cursor-pointer items-center"},Ql={key:0,class:"mt-1 text-xs text-red-500"},Bl={class:"flex gap-4"},Hl={class:"flex cursor-pointer items-center"},Jl={class:"flex cursor-pointer items-center"},Yl={class:"flex cursor-pointer items-center"},Zl={key:2},Xl={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},eo={key:0,class:"mt-3"},to=["min"],so={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},ao={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},ro={key:3},lo={class:"flex gap-2"},oo={class:"flex-1"},no={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},io={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},uo=["value"],po={class:"text-sm text-gray-700 dark:text-gray-200"},go={key:4},mo={key:5,class:"space-y-4"},yo={key:0,class:"mt-1 text-xs text-red-500"},co={key:0,class:"mt-1 text-xs text-red-500"},xo={key:0,class:"mt-1 text-xs text-red-500"},fo={key:6,class:"space-y-4"},bo={key:0,class:"mt-1 text-xs text-red-500"},vo={key:0,class:"mt-1 text-xs text-red-500"},ko={key:0,class:"mt-1 text-xs text-red-500"},ho={class:"flex flex-wrap gap-2"},wo=["value"],$o={class:"text-sm text-gray-700 dark:text-gray-300"},Ao={key:7},Co={class:"mb-3"},Uo={class:"inline-flex cursor-pointer items-center"},Io={key:0},To={key:8,class:"space-y-4"},Ko={key:0,class:"mt-1 text-xs text-red-500"},_o={key:0,class:"mt-1 text-xs text-red-500"},Do={class:"grid grid-cols-2 gap-4"},Mo={class:"mb-4 flex gap-2"},So={key:0},Po={class:"mb-3 grid grid-cols-2 gap-2"},zo=["value"],Vo={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},jo={class:"text-xs text-gray-500 dark:text-gray-400"},Ro={key:0},Oo={key:1},Lo={class:"mb-3 space-y-2"},Eo=["onUpdate:modelValue"],No=["onUpdate:modelValue"],qo=["onClick"],Wo={class:"mt-3 flex flex-wrap gap-2"},Fo={class:"mb-3"},Go={class:"inline-flex cursor-pointer items-center"},Qo={key:0},Bo={key:9,class:"space-y-4"},Ho={class:"relative"},Jo=["type"],Yo={key:10},Zo={class:"flex gap-4"},Xo={class:"flex cursor-pointer items-center"},en={class:"flex cursor-pointer items-center"},tn={key:11,class:"mt-4"},sn={class:"flex items-start"},an={key:12,class:"mt-4"},rn={class:"flex items-start"},ln={class:"ml-3"},on={key:0,class:"mt-1"},nn={class:"flex items-center justify-between"},dn={class:"text-xs text-green-600 dark:text-green-400"},un=["disabled"],pn={key:0,class:"fas fa-trash-alt mr-1"},gn={key:1,class:"loading-spinner mr-1"},mn={key:1,class:"mt-1"},yn={key:13,class:"mt-4"},cn={class:"flex items-start"},xn={class:"ml-3 flex-1"},fn={key:0,class:"mt-3"},bn={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},vn={class:"flex items-center gap-2"},kn={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"},hn={class:"text-blue-600 dark:text-blue-400"},wn={class:"text-gray-500 dark:text-gray-500"},$n={class:"text-blue-600 dark:text-blue-400"},An={key:14,class:"space-y-4 rounded-lg border border-blue-200 bg-blue-50 p-4"},Cn={class:"mb-4 flex items-start gap-3"},Un={key:0,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},In={key:1,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Tn={key:2,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Kn={key:3,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},_n={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"},Dn={key:0,class:"text-xs text-blue-800 dark:text-blue-300"},Mn={key:1,class:"text-xs text-blue-800 dark:text-blue-300"},Sn={key:2,class:"text-xs text-blue-800 dark:text-blue-300"},Pn={key:3,class:"text-xs text-blue-800 dark:text-blue-300"},zn={key:4,class:"text-xs text-blue-600 dark:text-blue-400"},Vn={key:5,class:"text-xs text-red-600 dark:text-red-400"},jn={key:0},Rn={key:1},On={key:0,class:"mt-1 text-xs text-red-500"},Ln={key:2},En={key:0,class:"mt-1 text-xs text-red-500"},Nn={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},qn={key:3},Wn={key:15,class:"space-y-4 rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},Fn={key:0,class:"mt-1 text-xs text-red-500"},Gn={class:"flex gap-3 pt-4"},Qn=["disabled"],Bn=["disabled"],Hn={key:0,class:"loading-spinner mr-2"},Jn={key:3,class:"space-y-6"},Yn={key:0},Zn={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},Xn={class:"flex items-start gap-4"},ei={class:"flex-1"},ti={class:"space-y-4"},si={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},ai={class:"flex items-start gap-3"},ri={class:"flex-1"},li=["disabled"],oi={key:0,class:"fas fa-link mr-2"},ni={key:1,class:"loading-spinner mr-2"},ii={key:1,class:"space-y-3"},di={class:"flex items-center gap-2"},ui=["value"],pi={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},gi={class:"flex items-start gap-3"},mi={class:"flex-1"},yi={class:"space-y-3"},ci={class:"flex gap-3 pt-4"},xi=["disabled"],fi={key:0,class:"loading-spinner mr-2"},bi={key:4,class:"space-y-6"},vi={class:"flex gap-4"},ki={class:"flex cursor-pointer items-center"},hi={class:"flex cursor-pointer items-center"},wi={class:"flex cursor-pointer items-center"},$i={key:0},Ai={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Ci={key:0,class:"mt-3"},Ui=["min"],Ii={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Ti={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Ki={key:1},_i={class:"flex gap-2"},Di={class:"flex-1"},Mi={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},Si={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},Pi=["value"],zi={class:"text-sm text-gray-700 dark:text-gray-200"},Vi={key:2},ji={key:3},Ri={class:"flex gap-4"},Oi={class:"flex cursor-pointer items-center"},Li={class:"flex cursor-pointer items-center"},Ei={key:4,class:"mt-4"},Ni={class:"flex items-start"},qi={key:5,class:"mt-4"},Wi={class:"flex items-start"},Fi={class:"ml-3"},Gi={key:0,class:"mt-1"},Qi={class:"flex items-center justify-between"},Bi={class:"text-xs text-green-600 dark:text-green-400"},Hi=["disabled"],Ji={key:0,class:"fas fa-trash-alt mr-1"},Yi={key:1,class:"loading-spinner mr-1"},Zi={key:1,class:"mt-1"},Xi={key:6,class:"mt-4"},ed={class:"flex items-start"},td={class:"ml-3 flex-1"},sd={key:0,class:"mt-3"},ad={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},rd={class:"flex items-center gap-2"},ld={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"},od={class:"text-blue-600 dark:text-blue-400"},nd={class:"text-gray-500 dark:text-gray-500"},id={class:"text-blue-600 dark:text-blue-400"},dd={key:7,class:"space-y-4"},ud={class:"grid grid-cols-2 gap-4"},pd={key:0,class:"rounded-lg bg-gray-50 p-4 dark:bg-gray-800"},gd={class:"mb-2 flex items-center justify-between"},md={class:"text-sm text-gray-500 dark:text-gray-400"},yd={class:"relative h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},cd={class:"mt-2 flex items-center justify-between text-xs"},xd={class:"text-gray-500 dark:text-gray-400"},fd={class:"text-gray-500 dark:text-gray-400"},bd={class:"mb-4 flex gap-2"},vd={key:0},kd={class:"mb-3 grid grid-cols-2 gap-2"},hd=["value"],wd={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},$d={class:"text-xs text-gray-500 dark:text-gray-400"},Ad={key:0},Cd={key:1},Ud={class:"mb-3 space-y-2"},Id=["onUpdate:modelValue"],Td=["onUpdate:modelValue"],Kd=["onClick"],_d={class:"mt-3 flex flex-wrap gap-2"},Dd={class:"mb-3"},Md={class:"inline-flex cursor-pointer items-center"},Sd={key:0},Pd={key:8,class:"space-y-4"},zd={class:"relative"},Vd=["type"],jd={class:"grid grid-cols-2 gap-4"},Rd={key:9,class:"space-y-4"},Od={class:"mb-3"},Ld={class:"inline-flex cursor-pointer items-center"},Ed={key:0},Nd={key:10,class:"space-y-4"},qd={key:0,class:"mt-1 text-xs text-red-500"},Wd={key:0,class:"mt-1 text-xs text-red-500"},Fd={key:0,class:"mt-1 text-xs text-red-500"},Gd={class:"flex flex-wrap gap-2"},Qd=["value"],Bd={class:"text-sm text-gray-700 dark:text-gray-300"},Hd={key:11,class:"rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},Jd={class:"mb-4 flex items-start gap-3"},Yd={class:"mb-1 text-sm text-purple-800 dark:text-purple-200"},Zd={class:"space-y-4"},Xd={key:0,class:"mt-1 text-xs text-red-500"},e0={class:"space-y-2"},t0={class:"flex items-center justify-between"},s0={class:"text-xs text-purple-600 dark:text-purple-300"},a0={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"},r0=["onClick"],l0={class:"text-xs text-purple-700 dark:text-purple-300"},o0={key:12,class:"rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-700 dark:bg-amber-900/30"},n0={class:"space-y-4"},i0={class:"flex gap-3 pt-4"},d0=["disabled"],u0={key:0,class:"loading-spinner mr-2"},p0={__name:"AccountForm",props:{account:{type:Object,default:null}},emits:["close","success","platform-changed"],setup(E,{emit:we}){var Ht,_t,Dt,Mt,Jt,St,Pt,Yt,Zt,zt,Vt,jt,Xt,es,ts,Rt,ss,Ot,as,rs,Lt,ls,os,ns,is,Et,kt,lt,ot,nt;const g=E,ge=we,_=As(),{showConfirmModal:N,confirmOptions:O,showConfirm:A,handleConfirm:$,handleCancel:h}=$s(),z=pe(()=>!!g.account),B=I(!0),Y=I(1),ee=I(!1),J=I(!1),X=I(!1),G=I(!1),k=I(""),m=I(""),T=I(!1),Z=I(""),L=I(""),U=I(!1),R=I(""),Ce=d=>["claude","claude-console","ccr","bedrock"].includes(d)?"claude":["openai","openai-responses","azure_openai"].includes(d)?"openai":d==="gemini"?"gemini":d==="droid"?"droid":"",De=()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""}),j=d=>{if(!d)return null;let t=d;if(typeof d=="string")try{t=JSON.parse(d)}catch{return null}if(t&&typeof t=="object"&&t.proxy&&typeof t.proxy=="object"&&(t=t.proxy),!t||typeof t!="object")return null;const o=typeof t.host=="string"?t.host.trim():t.host!==void 0&&t.host!==null?String(t.host).trim():"",q=t.port!==void 0&&t.port!==null?String(t.port).trim():"",re=typeof t.type=="string"&&t.type.trim()?t.type.trim():"socks5",ve=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:re,host:o,port:q,username:ve,password:de}},u=d=>{const t=j(d);return t&&t.host&&t.port?{enabled:!0,type:t.type||"socks5",host:t.host,port:t.port,username:t.username||"",password:t.password||""}:De()},W=d=>{if(!d||!d.enabled)return null;const t=(d.host||"").trim(),o=Number.parseInt(d.port,10);if(!t||Number.isNaN(o)||o<=0)return null;const q=d.username?d.username.trim():"",re=d.password?d.password.trim():"";return{type:d.type||"socks5",host:t,port:o,username:q||null,password:re||null}},te=()=>{var d;return u((d=g.account)==null?void 0:d.proxy)},s=I({platform:((Ht=g.account)==null?void 0:Ht.platform)||"claude",addType:(()=>{var t;const d=((t=g.account)==null?void 0:t.platform)||"claude";return d==="gemini"||d==="openai"||d==="claude"?"oauth":"manual"})(),name:((_t=g.account)==null?void 0:_t.name)||"",description:((Dt=g.account)==null?void 0:Dt.description)||"",accountType:((Mt=g.account)==null?void 0:Mt.accountType)||"shared",authenticationMethod:((Jt=g.account)==null?void 0:Jt.authenticationMethod)||"",subscriptionType:"claude_max",autoStopOnWarning:((St=g.account)==null?void 0:St.autoStopOnWarning)||!1,useUnifiedUserAgent:((Pt=g.account)==null?void 0:Pt.useUnifiedUserAgent)||!1,useUnifiedClientId:((Yt=g.account)==null?void 0:Yt.useUnifiedClientId)||!1,unifiedClientId:((Zt=g.account)==null?void 0:Zt.unifiedClientId)||"",groupId:"",groupIds:[],projectId:((zt=g.account)==null?void 0:zt.projectId)||"",accessToken:"",refreshToken:"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:te(),apiUrl:((Vt=g.account)==null?void 0:Vt.apiUrl)||"",apiKey:((jt=g.account)==null?void 0:jt.apiKey)||"",priority:((Xt=g.account)==null?void 0:Xt.priority)||50,endpointType:((es=g.account)==null?void 0:es.endpointType)||"anthropic",baseApi:((ts=g.account)==null?void 0:ts.baseApi)||"",rateLimitDuration:((Rt=g.account)==null?void 0:Rt.rateLimitDuration)||60,supportedModels:(()=>{var t;const d=(t=g.account)==null?void 0:t.supportedModels;return d?typeof d=="object"&&!Array.isArray(d)?Object.keys(d):Array.isArray(d)?d:[]:[]})(),userAgent:((ss=g.account)==null?void 0:ss.userAgent)||"",enableRateLimit:g.account?g.account.rateLimitDuration>0:!0,dailyQuota:((Ot=g.account)==null?void 0:Ot.dailyQuota)||0,dailyUsage:((as=g.account)==null?void 0:as.dailyUsage)||0,quotaResetTime:((rs=g.account)==null?void 0:rs.quotaResetTime)||"00:00",accessKeyId:((Lt=g.account)==null?void 0:Lt.accessKeyId)||"",secretAccessKey:((ls=g.account)==null?void 0:ls.secretAccessKey)||"",region:((os=g.account)==null?void 0:os.region)||"",sessionToken:((ns=g.account)==null?void 0:ns.sessionToken)||"",defaultModel:((is=g.account)==null?void 0:is.defaultModel)||"",smallFastModel:((Et=g.account)==null?void 0:Et.smallFastModel)||"",azureEndpoint:((kt=g.account)==null?void 0:kt.azureEndpoint)||"",apiVersion:((lt=g.account)==null?void 0:lt.apiVersion)||"",deploymentName:((ot=g.account)==null?void 0:ot.deploymentName)||"",expireDuration:(()=>{var d;return(d=g.account)!=null&&d.expiresAt?"custom":""})(),customExpireDate:(()=>{var d;return(d=g.account)!=null&&d.expiresAt?new Date(g.account.expiresAt).toISOString().slice(0,16):""})(),expiresAt:((nt=g.account)==null?void 0:nt.expiresAt)||null}),be=I("whitelist"),fe=I(["claude-sonnet-4-20250514","claude-sonnet-4-5-20250929","claude-3-5-haiku-20241022"]),Te=[{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"},{value:"deepseek-chat",label:"DeepSeek Chat",color:"cyan"}],$e=I([]),Ze=()=>{var d;if((d=g.account)!=null&&d.supportedModels)if(typeof g.account.supportedModels=="object"&&!Array.isArray(g.account.supportedModels)){const t=Object.entries(g.account.supportedModels);t.every(([q,re])=>q===re)?(be.value="whitelist",fe.value=t.map(([q])=>q),$e.value=t.map(([q,re])=>({from:q,to:re}))):(be.value="mapping",$e.value=t.map(([q,re])=>({from:q,to:re})))}else Array.isArray(g.account.supportedModels)&&(be.value="whitelist",fe.value=g.account.supportedModels,$e.value=g.account.supportedModels.map(t=>({from:t,to:t})))},Ve=d=>{if(!d||typeof d!="string")return[];const t=d.split(/\r?\n/).map(q=>q.trim()).filter(q=>q.length>0);return t.length===0?[]:Array.from(new Set(t))},qe=[{value:"append",label:"追加模式",description:"保留现有 Key,并在末尾追加新 Key 列表。"},{value:"replace",label:"覆盖模式",description:"先清空旧 Key,再写入上方的新 Key 列表。"},{value:"delete",label:"删除模式",description:"输入要移除的 Key,可精准删除失效或被封禁的 Key。"}],yt=pe(()=>{const d=Math.max(qe.findIndex(o=>o.value===s.value.apiKeyUpdateMode),0),t=100/qe.length;return{width:`${t}%`,left:`${d*t}%`}}),ct=pe(()=>{const d=qe.find(t=>t.value===s.value.apiKeyUpdateMode);return d?d.label:qe[0].label}),xt=pe(()=>{const d=qe.find(t=>t.value===s.value.apiKeyUpdateMode);return d?d.description:qe[0].description}),C=I({name:"",refreshToken:"",accessToken:"",apiKeys:"",apiUrl:"",apiKey:"",baseApi:"",accessKeyId:"",secretAccessKey:"",region:"",azureEndpoint:"",deploymentName:""}),Je=pe(()=>{var d;return((d=s.value.name)==null?void 0:d.trim())&&s.value.platform}),We=pe(()=>k.value&&m.value.trim()),je=()=>{var d;return!z.value||!((d=g.account)!=null&&d.id)?0:typeof s.value.dailyUsage=="number"?s.value.dailyUsage:0},Re=pe(()=>!s.value.dailyQuota||s.value.dailyQuota<=0?0:je()/s.value.dailyQuota*100),ft=pe(()=>{if(!g.account||g.account.platform!=="droid")return 0;let d=0;if(Array.isArray(g.account.apiKeys))d=g.account.apiKeys.length;else if(typeof g.account.apiKeys=="string")try{const o=JSON.parse(g.account.apiKeys);Array.isArray(o)&&(d=o.length)}catch{d=0}const t=g.account.apiKeyCount??g.account.apiKeysCount??g.account.api_key_count??d;return Number(t)||0}),st=pe(()=>{var t,o,q;if(!z.value||s.value.platform!=="droid")return!1;const d=s.value.authenticationMethod||((t=g.account)==null?void 0:t.authenticationMethod)||((o=g.account)==null?void 0:o.authMethod)||((q=g.account)==null?void 0:q.authentication_mode)||"";return typeof d!="string"?!1:d.trim().toLowerCase()==="api_key"}),Xe=async()=>{var d;if(!(!z.value||!((d=g.account)!=null&&d.id)))try{const t=await V.get(`/admin/claude-console-accounts/${g.account.id}/usage`);t&&(s.value.dailyUsage=t.dailyUsage||0)}catch{}},Ye=d=>{R.value=d,d==="claude"?s.value.platform="claude":d==="openai"?s.value.platform="openai":d==="gemini"?s.value.platform="gemini":d==="droid"&&(s.value.platform="droid")},bt=async()=>{if(C.value.name="",!Je.value){(!s.value.name||s.value.name.trim()==="")&&(C.value.name="请填写账户名称");return}if(s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)){P("请选择一个分组","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"&&Y.value===1&&s.value.addType==="oauth"&&(!s.value.projectId||s.value.projectId.trim()==="")&&!await A("项目 ID 未填写",`您尚未填写项目 ID。
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
如果您使用的是普通个人账号,可以继续不填写。`,"继续","返回填写"))&&(Y.value=2)},Oe=async()=>{X.value=!0;try{const d=W(s.value.proxy),t=d?{proxy:d}:{},o=await _.generateClaudeSetupTokenUrl(t);k.value=o.authUrl,Z.value=o.sessionId}catch(d){P(d.message||"生成Setup Token授权链接失败","error")}finally{X.value=!1}},c=()=>{k.value="",m.value="",Oe()},y=async()=>{try{await navigator.clipboard.writeText(k.value),T.value=!0,P("链接已复制","success"),setTimeout(()=>{T.value=!1},2e3)}catch{const t=document.createElement("textarea");t.value=k.value,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")?(T.value=!0,P("链接已复制","success")):P("复制失败,请手动复制","error")}catch{P("复制失败,请手动复制","error")}document.body.removeChild(t),setTimeout(()=>{T.value=!1},2e3)}},D=async()=>{if(We.value){G.value=!0;try{const d={sessionId:Z.value,callbackUrl:m.value.trim()},t=W(s.value.proxy);t&&(d.proxy=t);const o=await _.exchangeClaudeSetupTokenCode(d);s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=pt()),await Me(o)}catch(d){P(d.message||"Setup Token授权失败,请检查授权码是否正确","error")}finally{G.value=!1}}},Me=async d=>{var t,o,q,re,ve,de;ee.value=!0;try{s.value.platform==="claude"&&s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=pt());const Ae=W(s.value.proxy),F={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,expiresAt:s.value.expiresAt||void 0,proxy:Ae},me=s.value.platform;if(me==="claude")F.claudeAiOauth=d.claudeAiOauth||d,F.priority=s.value.priority||50,F.autoStopOnWarning=s.value.autoStopOnWarning||!1,F.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,F.useUnifiedClientId=s.value.useUnifiedClientId||!1,F.unifiedClientId=s.value.unifiedClientId||"",F.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0};else if(me==="gemini")F.geminiOauth=d.tokens||d,s.value.projectId&&(F.projectId=s.value.projectId),F.priority=s.value.priority||50;else if(me==="openai")F.openaiOauth=d.tokens||d,F.accountInfo=d.accountInfo,F.priority=s.value.priority||50;else if(me==="droid"){const Q=d.tokens||d||{},H={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(!H.refreshToken){ee.value=!1,P("授权成功但未返回 Refresh Token,请确认已授予离线访问权限后重试。","error");return}if(F.refreshToken=H.refreshToken,F.accessToken=H.accessToken,F.expiresAt=H.expiresAt,H.expiresIn!==null&&H.expiresIn!==void 0&&(F.expiresIn=H.expiresIn),F.priority=s.value.priority||50,F.endpointType=s.value.endpointType||"anthropic",F.platform="droid",F.tokenType=H.tokenType,F.authenticationMethod=H.authenticationMethod,H.organizationId&&(F.organizationId=H.organizationId),Q.user){const se=Q.user,ht=[];typeof se.first_name=="string"&&se.first_name.trim()&&ht.push(se.first_name.trim()),typeof se.last_name=="string"&&se.last_name.trim()&&ht.push(se.last_name.trim());const gt=ht.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()&&(F.ownerEmail=se.email.trim()),gt?(F.ownerName=gt,F.ownerDisplayName=gt):F.ownerEmail&&(F.ownerName=F.ownerName||F.ownerEmail,F.ownerDisplayName=F.ownerDisplayName||F.ownerEmail),typeof se.id=="string"&&se.id.trim()&&(F.userId=se.id.trim())}}let f;me==="claude"?f=await _.createClaudeAccount(F):me==="gemini"?f=await _.createGeminiAccount(F):me==="openai"?f=await _.createOpenAIAccount(F):me==="droid"?f=await _.createDroidAccount(F):f=await _.createGeminiAccount(F),ge("success",f)}catch(Ae){const F=((o=(t=Ae.response)==null?void 0:t.data)==null?void 0:o.error)||Ae.message||"账户创建失败",me=((re=(q=Ae.response)==null?void 0:q.data)==null?void 0:re.suggestion)||"",f=((de=(ve=Ae.response)==null?void 0:ve.data)==null?void 0:de.errorDetails)||null;let Q=F;me&&(Q+=`
${me}`),f&&f.error_description?Q+=`
详细信息: ${f.error_description}`:f&&f.error&&f.error.message&&(Q+=`
详细信息: ${f.error.message}`),P(Q,"error","",8e3)}finally{ee.value=!1}},$t=async()=>{var t,o,q,re,ve,de,Ae,F;C.value.name="",C.value.accessToken="",C.value.refreshToken="",C.value.apiUrl="",C.value.apiKey="",C.value.apiKeys="";let d=!1;if((!s.value.name||s.value.name.trim()==="")&&(C.value.name="请填写账户名称",d=!0),s.value.platform==="claude-console"&&((!s.value.apiUrl||s.value.apiUrl.trim()==="")&&(C.value.apiUrl="请填写 API URL",d=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(C.value.apiKey="请填写 API Key",d=!0)),s.value.platform==="ccr"&&((!s.value.apiUrl||s.value.apiUrl.trim()==="")&&(C.value.apiUrl="请填写 API URL",d=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(C.value.apiKey="请填写 API Key",d=!0)),s.value.platform==="openai-responses"?((!s.value.baseApi||s.value.baseApi.trim()==="")&&(C.value.baseApi="请填写 API 基础地址",d=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(C.value.apiKey="请填写 API 密钥",d=!0)):s.value.platform==="bedrock"?((!s.value.accessKeyId||s.value.accessKeyId.trim()==="")&&(C.value.accessKeyId="请填写 AWS 访问密钥 ID",d=!0),(!s.value.secretAccessKey||s.value.secretAccessKey.trim()==="")&&(C.value.secretAccessKey="请填写 AWS 秘密访问密钥",d=!0),(!s.value.region||s.value.region.trim()==="")&&(C.value.region="请选择 AWS 区域",d=!0)):s.value.platform==="azure_openai"?((!s.value.azureEndpoint||s.value.azureEndpoint.trim()==="")&&(C.value.azureEndpoint="请填写 Azure Endpoint",d=!0),(!s.value.deploymentName||s.value.deploymentName.trim()==="")&&(C.value.deploymentName="请填写部署名称",d=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(C.value.apiKey="请填写 API Key",d=!0)):s.value.addType==="manual"?s.value.platform==="openai"?(!s.value.refreshToken||s.value.refreshToken.trim()==="")&&(C.value.refreshToken="请填写 Refresh Token",d=!0):s.value.platform==="gemini"?(!s.value.accessToken||s.value.accessToken.trim()==="")&&(C.value.accessToken="请填写 Access Token",d=!0):s.value.platform==="droid"?((!s.value.accessToken||s.value.accessToken.trim()==="")&&(C.value.accessToken="请填写 Access Token",d=!0),(!s.value.refreshToken||s.value.refreshToken.trim()==="")&&(C.value.refreshToken="请填写 Refresh Token",d=!0)):s.value.platform==="claude"&&(!s.value.accessToken||s.value.accessToken.trim()==="")&&(C.value.accessToken="请填写 Access Token",d=!0):s.value.addType==="apikey"&&Ve(s.value.apiKeysInput).length===0&&(C.value.apiKeys="请至少填写一个 API Key",d=!0),s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)&&(P("请选择一个分组","error"),d=!0),s.value.accountType==="group"&&(s.value.groupIds&&s.value.groupIds.length>0?s.value.groupId=s.value.groupIds[0]:s.value.groupId=""),!d){ee.value=!0;try{const me=W(s.value.proxy),f={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,expiresAt:s.value.expiresAt||void 0,proxy:me};if(s.value.platform==="claude"){const H=s.value.refreshToken?6e5:31536e6;s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=pt()),f.claudeAiOauth={accessToken:s.value.accessToken,refreshToken:s.value.refreshToken||"",expiresAt:Date.now()+H,scopes:[]},f.priority=s.value.priority||50,f.autoStopOnWarning=s.value.autoStopOnWarning||!1,f.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,f.useUnifiedClientId=s.value.useUnifiedClientId||!1,f.unifiedClientId=s.value.unifiedClientId||"",f.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 H=s.value.refreshToken?6e5:31536e6;f.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()+H},s.value.projectId&&(f.projectId=s.value.projectId),f.priority=s.value.priority||50}else if(s.value.platform==="openai"){const H=s.value.refreshToken?6e5:31536e6;f.openaiOauth={idToken:"",accessToken:s.value.accessToken||"",refreshToken:s.value.refreshToken,expires_in:Math.floor(H/1e3)},f.accountInfo={accountId:"",chatgptUserId:"",organizationId:"",organizationRole:"",organizationTitle:"",planType:"",email:"",emailVerified:!1},f.needsImmediateRefresh=!0,f.requireRefreshSuccess=!0,f.priority=s.value.priority||50}else if(s.value.platform==="droid")if(f.priority=s.value.priority||50,f.endpointType=s.value.endpointType||"anthropic",f.platform="droid",s.value.addType==="apikey"){const H=Ve(s.value.apiKeysInput);f.apiKeys=H,f.authenticationMethod="api_key",f.isActive=!0,f.schedulable=!0}else{const H=((t=s.value.accessToken)==null?void 0:t.trim())||"",se=((o=s.value.refreshToken)==null?void 0:o.trim())||"",ht=new Date(Date.now()+8*60*60*1e3).toISOString();f.accessToken=H,f.refreshToken=se,f.expiresAt=ht,f.expiresIn=8*60*60,f.tokenType="Bearer",f.authenticationMethod="manual"}else s.value.platform==="claude-console"||s.value.platform==="ccr"?(f.apiUrl=s.value.apiUrl,f.apiKey=s.value.apiKey,f.priority=s.value.priority||50,f.supportedModels=Be()||{},f.userAgent=s.value.userAgent||null,f.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0,f.dailyQuota=s.value.dailyQuota||0,f.quotaResetTime=s.value.quotaResetTime||"00:00"):s.value.platform==="openai-responses"?(f.baseApi=s.value.baseApi,f.apiKey=s.value.apiKey,f.userAgent=s.value.userAgent||"",f.priority=s.value.priority||50,f.rateLimitDuration=60,f.dailyQuota=s.value.dailyQuota||0,f.quotaResetTime=s.value.quotaResetTime||"00:00"):s.value.platform==="bedrock"?(f.awsCredentials={accessKeyId:s.value.accessKeyId,secretAccessKey:s.value.secretAccessKey,sessionToken:s.value.sessionToken||null},f.region=s.value.region,f.defaultModel=s.value.defaultModel||null,f.smallFastModel=s.value.smallFastModel||null,f.priority=s.value.priority||50,f.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0):s.value.platform==="azure_openai"&&(f.azureEndpoint=s.value.azureEndpoint,f.apiKey=s.value.apiKey,f.apiVersion=s.value.apiVersion||"2024-02-01",f.deploymentName=s.value.deploymentName,f.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[],f.priority=s.value.priority||50,f.isActive=s.value.isActive!==!1,f.schedulable=s.value.schedulable!==!1);let Q;if(s.value.platform==="claude")Q=await _.createClaudeAccount(f);else if(s.value.platform==="claude-console"||s.value.platform==="ccr")Q=await _.createClaudeConsoleAccount(f);else if(s.value.platform==="droid")Q=await _.createDroidAccount(f);else if(s.value.platform==="openai-responses")Q=await _.createOpenAIResponsesAccount(f);else if(s.value.platform==="bedrock")Q=await _.createBedrockAccount(f);else if(s.value.platform==="openai")Q=await _.createOpenAIAccount(f);else if(s.value.platform==="azure_openai")Q=await _.createAzureOpenAIAccount(f);else if(s.value.platform==="gemini")Q=await _.createGeminiAccount(f);else throw new Error(`不支持的平台: ${s.value.platform}`);ge("success",Q)}catch(me){const f=((re=(q=me.response)==null?void 0:q.data)==null?void 0:re.error)||me.message||"账户创建失败",Q=((de=(ve=me.response)==null?void 0:ve.data)==null?void 0:de.suggestion)||"",H=((F=(Ae=me.response)==null?void 0:Ae.data)==null?void 0:F.errorDetails)||null;let se=f;Q&&(se+=`
${Q}`),H&&H.error_description?se+=`
详细信息: ${H.error_description}`:H&&H.error&&H.error.message&&(se+=`
详细信息: ${H.error.message}`),P(se,"error","",8e3)}finally{ee.value=!1}}},At=async()=>{var d,t,o,q,re,ve,de,Ae,F;if(C.value.name="",C.value.apiKeys="",!s.value.name||s.value.name.trim()===""){C.value.name="请填写账户名称";return}if(s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)){P("请选择一个分组","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 A("项目 ID 未填写",`您尚未填写项目 ID。
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
如果您使用的是普通个人账号,可以继续不填写。`,"继续保存","返回填写"))){ee.value=!0;try{const me=W(s.value.proxy),f={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,expiresAt:s.value.expiresAt||void 0,proxy:me};if(s.value.accessToken||s.value.refreshToken){const Q=((d=s.value.accessToken)==null?void 0:d.trim())||"",H=((t=s.value.refreshToken)==null?void 0:t.trim())||"";if(g.account.platform==="claude"){const se=s.value.refreshToken?6e5:31536e6;f.claudeAiOauth={accessToken:Q||"",refreshToken:H||"",expiresAt:Date.now()+se,scopes:g.account.scopes||[]}}else if(g.account.platform==="gemini"){const se=s.value.refreshToken?6e5:31536e6;f.geminiOauth={access_token:Q||"",refresh_token:H||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+se}}else if(g.account.platform==="openai"){const se=s.value.refreshToken?6e5:31536e6;f.openaiOauth={idToken:"",accessToken:Q||"",refreshToken:H||"",expires_in:Math.floor(se/1e3)},H&&H!==g.account.refreshToken&&(f.needsImmediateRefresh=!0,f.requireRefreshSuccess=!0)}else g.account.platform==="droid"&&(Q&&(f.accessToken=Q),H&&(f.refreshToken=H))}if(g.account.platform==="droid"){const Q=((o=s.value.apiKeysInput)==null?void 0:o.trim())||"",H=s.value.apiKeyUpdateMode||"append";if(H==="delete"){if(!Q){C.value.apiKeys="请填写需要删除的 API Key",ee.value=!1;return}const se=Ve(Q);if(se.length===0){C.value.apiKeys="请填写需要删除的 API Key",ee.value=!1;return}f.removeApiKeys=se,f.apiKeyUpdateMode="delete"}else{if(Q){const se=Ve(Q);if(se.length===0){C.value.apiKeys="请至少填写一个 API Key",ee.value=!1;return}f.apiKeys=se}else H==="replace"&&(f.apiKeys=[]);(H!=="append"||Q)&&(f.apiKeyUpdateMode=H)}st.value&&(f.authenticationMethod="api_key")}if(g.account.platform==="gemini"&&(f.projectId=s.value.projectId||""),g.account.platform==="droid"&&(f.priority=s.value.priority||50,f.endpointType=s.value.endpointType||"anthropic"),g.account.platform==="claude"&&(s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=pt()),f.priority=s.value.priority||50,f.autoStopOnWarning=s.value.autoStopOnWarning||!1,f.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,f.useUnifiedClientId=s.value.useUnifiedClientId||!1,f.unifiedClientId=s.value.unifiedClientId||"",f.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}),g.account.platform==="openai"&&(f.priority=s.value.priority||50),g.account.platform==="gemini"&&(f.priority=s.value.priority||50),g.account.platform==="claude-console"&&(f.apiUrl=s.value.apiUrl,s.value.apiKey&&(f.apiKey=s.value.apiKey),f.priority=s.value.priority||50,f.supportedModels=Be()||{},f.userAgent=s.value.userAgent||null,f.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0,f.dailyQuota=s.value.dailyQuota||0,f.quotaResetTime=s.value.quotaResetTime||"00:00"),g.account.platform==="openai-responses"&&(f.baseApi=s.value.baseApi,s.value.apiKey&&(f.apiKey=s.value.apiKey),f.userAgent=s.value.userAgent||"",f.priority=s.value.priority||50,f.dailyQuota=s.value.dailyQuota||0,f.quotaResetTime=s.value.quotaResetTime||"00:00"),g.account.platform==="bedrock"&&((s.value.accessKeyId||s.value.secretAccessKey||s.value.sessionToken)&&(f.awsCredentials={},s.value.accessKeyId&&(f.awsCredentials.accessKeyId=s.value.accessKeyId),s.value.secretAccessKey&&(f.awsCredentials.secretAccessKey=s.value.secretAccessKey),s.value.sessionToken!==void 0&&(f.awsCredentials.sessionToken=s.value.sessionToken||null)),s.value.region&&(f.region=s.value.region),f.defaultModel=s.value.defaultModel||null,f.smallFastModel=s.value.smallFastModel||null,f.priority=s.value.priority||50,f.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0),g.account.platform==="azure_openai"&&(f.azureEndpoint=s.value.azureEndpoint,f.apiVersion=s.value.apiVersion||"2024-02-01",f.deploymentName=s.value.deploymentName,f.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[],f.priority=s.value.priority||50,s.value.apiKey&&s.value.apiKey.trim()&&(f.apiKey=s.value.apiKey)),g.account.platform==="claude")await _.updateClaudeAccount(g.account.id,f);else if(g.account.platform==="claude-console")await _.updateClaudeConsoleAccount(g.account.id,f);else if(g.account.platform==="openai-responses")await _.updateOpenAIResponsesAccount(g.account.id,f);else if(g.account.platform==="bedrock")await _.updateBedrockAccount(g.account.id,f);else if(g.account.platform==="openai")await _.updateOpenAIAccount(g.account.id,f);else if(g.account.platform==="azure_openai")await _.updateAzureOpenAIAccount(g.account.id,f);else if(g.account.platform==="gemini")await _.updateGeminiAccount(g.account.id,f);else if(g.account.platform==="droid")await _.updateDroidAccount(g.account.id,f);else throw new Error(`不支持的平台: ${g.account.platform}`);ge("success")}catch(me){const f=((re=(q=me.response)==null?void 0:q.data)==null?void 0:re.error)||me.message||"账户更新失败",Q=((de=(ve=me.response)==null?void 0:ve.data)==null?void 0:de.suggestion)||"",H=((F=(Ae=me.response)==null?void 0:Ae.data)==null?void 0:F.errorDetails)||null;let se=f;Q&&(se+=`
${Q}`),H&&H.error_description?se+=`
详细信息: ${H.error_description}`:H&&H.error&&H.error.message&&(se+=`
详细信息: ${H.error.message}`),P(se,"error","",8e3)}finally{ee.value=!1}}};le(()=>s.value.name,()=>{var d;C.value.name&&((d=s.value.name)!=null&&d.trim())&&(C.value.name="")}),le(()=>s.value.accessToken,()=>{var d;C.value.accessToken&&((d=s.value.accessToken)!=null&&d.trim())&&(C.value.accessToken="")}),le(()=>s.value.refreshToken,()=>{var d;C.value.refreshToken&&((d=s.value.refreshToken)!=null&&d.trim())&&(C.value.refreshToken="")}),le(()=>s.value.apiUrl,()=>{var d;C.value.apiUrl&&((d=s.value.apiUrl)!=null&&d.trim())&&(C.value.apiUrl="")}),le(()=>s.value.apiKey,()=>{var d;C.value.apiKey&&((d=s.value.apiKey)!=null&&d.trim())&&(C.value.apiKey="")}),le(()=>s.value.azureEndpoint,()=>{var d;C.value.azureEndpoint&&((d=s.value.azureEndpoint)!=null&&d.trim())&&(C.value.azureEndpoint="")}),le(()=>s.value.deploymentName,()=>{var d;C.value.deploymentName&&((d=s.value.deploymentName)!=null&&d.trim())&&(C.value.deploymentName="")});const Pe=I([]),he=I(!1),at=I(!1),rt=pe(()=>{let d=s.value.platform;return s.value.platform==="claude-console"||s.value.platform==="ccr"?d="claude":s.value.platform==="openai-responses"&&(d="openai"),Pe.value.filter(t=>t.platform===d)}),et=async()=>{he.value=!0;try{const d=await V.get("/admin/account-groups");Pe.value=d.data||[]}catch{P("加载分组列表失败","error"),Pe.value=[]}finally{he.value=!1}},Ke=async()=>{await et(),P("分组列表已刷新","success")},vt=()=>{at.value=!0},Qe=async()=>{await et()};le(()=>s.value.platform,d=>{d==="claude-console"||d==="ccr"||d==="bedrock"||d==="openai-responses"?s.value.addType="manual":(d==="claude"||d==="gemini"||d==="openai")&&(s.value.addType="oauth"),s.value.accountType==="group"&&(s.value.groupId="",s.value.groupIds=[])}),le(()=>s.value.groupIds,d=>{s.value.accountType==="group"&&(d&&d.length>0?s.value.groupId=d[0]:s.value.groupId="")},{deep:!0}),le(()=>s.value.addType,(d,t)=>{d!==t&&(d==="apikey"?(s.value.accessToken="",s.value.refreshToken="",C.value.accessToken="",C.value.refreshToken="",s.value.authenticationMethod="api_key",s.value.apiKeyUpdateMode="append"):t==="apikey"&&(s.value.apiKeysInput="",s.value.apiKeyUpdateMode="append",C.value.apiKeys="",z.value||(s.value.authenticationMethod="")))}),le(()=>s.value.apiKeyUpdateMode,(d,t)=>{d!==t&&C.value.apiKeys&&(C.value.apiKeys="")}),le(()=>s.value.apiKeysInput,d=>{if(!C.value.apiKeys)return;const t=Ve(d),o=s.value.apiKeyUpdateMode;if(o==="append"&&t.length>0){C.value.apiKeys="";return}if(o==="replace"){(t.length>0||!d||d.trim()==="")&&(C.value.apiKeys="");return}o==="delete"&&t.length>0&&(C.value.apiKeys="")}),le(m,d=>{if(!d||typeof d!="string")return;const t=d.trim();if(!t)return;if(t.startsWith("http://")||t.startsWith("https://"))if(t.startsWith("http://localhost:45462"))try{const re=new URL(t).searchParams.get("code");re?(m.value=re,P("成功提取授权码!","success")):P("URL 中未找到授权码参数,请检查链接是否正确","error")}catch{P("链接格式错误,请检查是否为完整的 URL","error")}else P("请粘贴以 http://localhost:45462 开头的链接","error")}),le(()=>s.value.platform,d=>{z.value||ge("platform-changed",d)}),le(()=>s.value.accountType,d=>{d==="group"&&Pe.value.length===0&&et()}),le(()=>s.value.groupId,d=>{d==="__new__"&&(s.value.groupId="",at.value=!0)});const tt=()=>{$e.value.push({from:"",to:""})},ut=d=>{$e.value.splice(d,1)},Fe=(d,t)=>{if($e.value.some(q=>q.from===d)){P(`模型 ${d} 的映射已存在`,"info");return}$e.value.push({from:d,to:t}),P(`已添加映射: ${d} → ${t}`,"success")},Be=()=>{const d={};return be.value==="whitelist"?fe.value.forEach(t=>{d[t]=t}):$e.value.forEach(t=>{t.from&&t.to&&(d[t.from]=t.to)}),Object.keys(d).length>0?d:null};le(()=>g.account,d=>{if(d){Ze();const t=u(d.proxy),o=typeof d.authenticationMethod=="string"?d.authenticationMethod.trim().toLowerCase():"",q=o==="api_key"?"apikey":o==="manual"?"manual":"oauth";let re="";d.accountType==="group"&&(re=d.groupId||d.groupInfo&&d.groupInfo.id||"");let ve="claude_max";if(d.subscriptionInfo){const de=typeof d.subscriptionInfo=="string"?JSON.parse(d.subscriptionInfo):d.subscriptionInfo;de.accountType?ve=de.accountType:de.hasClaudeMax?ve="claude_max":de.hasClaudePro?ve="claude_pro":ve="claude_free"}s.value={platform:d.platform,addType:q,name:d.name,description:d.description||"",accountType:d.accountType||"shared",subscriptionType:ve,autoStopOnWarning:d.autoStopOnWarning||!1,useUnifiedUserAgent:d.useUnifiedUserAgent||!1,useUnifiedClientId:d.useUnifiedClientId||!1,unifiedClientId:d.unifiedClientId||"",groupId:re,groupIds:[],projectId:d.projectId||"",accessToken:"",refreshToken:"",authenticationMethod:d.authenticationMethod||"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:t,apiUrl:d.apiUrl||"",apiKey:"",priority:d.priority||50,supportedModels:(()=>{const de=d.supportedModels;return de?typeof de=="object"&&!Array.isArray(de)?Object.keys(de):Array.isArray(de)?de:[]:[]})(),userAgent:d.userAgent||"",enableRateLimit:!!(d.rateLimitDuration&&d.rateLimitDuration>0),rateLimitDuration:d.rateLimitDuration||60,accessKeyId:"",secretAccessKey:"",region:d.region||"",sessionToken:"",defaultModel:d.defaultModel||"",smallFastModel:d.smallFastModel||"",azureEndpoint:d.azureEndpoint||"",apiVersion:d.apiVersion||"",deploymentName:d.deploymentName||"",baseApi:d.baseApi||"",dailyQuota:d.dailyQuota||0,dailyUsage:d.dailyUsage||0,quotaResetTime:d.quotaResetTime||"00:00"},d.platform==="claude-console"&&Xe(),d.accountType==="group"&&et().then(async()=>{const de=[];if(d.groupInfo&&d.groupInfo.id)s.value.groupId=d.groupInfo.id,de.push(d.groupInfo.id);else if(d.groupId)s.value.groupId=d.groupId,de.push(d.groupId);else if(d.groupIds&&Array.isArray(d.groupIds)&&d.groupIds.length>0)s.value.groupId=d.groupIds[0],de.push(...d.groupIds);else{const Ae=Pe.value.map(async F=>{try{((await V.get(`/admin/account-groups/${F.id}/members`)).data||[]).some(Q=>Q.id===d.id)&&(de.push(F.id),s.value.groupId||(s.value.groupId=F.id))}catch{}});await Promise.all(Ae)}s.value.groupIds=de})}},{immediate:!0});const Ft=async()=>{try{const d=await V.get("/admin/claude-code-version");d.success&&d.userAgent?L.value=d.userAgent:L.value=""}catch{L.value=""}},Gt=async()=>{U.value=!0;try{(await V.post("/admin/claude-code-version/clear")).success?(L.value="",P("统一User-Agent缓存已清除","success")):P("清除缓存失败","error")}catch(d){P("清除缓存失败:"+(d.message||"未知错误"),"error")}finally{U.value=!1}},pt=()=>{const d=new Uint8Array(32);return crypto.getRandomValues(d),Array.from(d,t=>t.toString(16).padStart(2,"0")).join("")},Qt=()=>{s.value.unifiedClientId=pt(),P("已生成新的客户端标识","success")},It=()=>{s.value.useUnifiedClientId&&(s.value.useUnifiedUserAgent=!0,s.value.unifiedClientId||(s.value.unifiedClientId=pt()))},Ct=pe(()=>{const d=new Date;return d.setMinutes(d.getMinutes()+1),d.toISOString().slice(0,16)}),Tt=()=>{if(!s.value.expireDuration){s.value.expiresAt=null;return}if(s.value.expireDuration==="custom")return;const d=new Date,o=s.value.expireDuration.match(/(\d+)([d])/);if(o){const[,q,re]=o,ve=parseInt(q);re==="d"&&d.setDate(d.getDate()+ve),s.value.expiresAt=d.toISOString()}},Kt=()=>{s.value.customExpireDate&&(s.value.expiresAt=new Date(s.value.customExpireDate).toISOString())},Bt=d=>d?new Date(d).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"";return ps(()=>{var d;R.value=Ce(s.value.platform),z.value&&Ze(),Ft(),z.value&&((d=g.account)==null?void 0:d.platform)==="claude-console"&&Xe()}),le(()=>s.value.platform,d=>{d==="claude"&&Ft()}),(d,t)=>(n(),Ge(qt,{to:"body"},[B.value?(n(),i("div",sl,[e("div",al,[e("div",rl,[e("div",ll,[t[130]||(t[130]=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",ol,p(z.value?"编辑账户":"添加账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:t[0]||(t[0]=o=>d.$emit("close"))},t[131]||(t[131]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),!z.value&&(s.value.addType==="oauth"||s.value.addType==="setup-token")?(n(),i("div",nl,[e("div",il,[e("div",dl,[e("div",{class:K(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",Y.value>=1?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 1 ",2),t[132]||(t[132]=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[134]||(t[134]=e("div",{class:"h-0.5 w-4 bg-gray-300 sm:w-8"},null,-1)),e("div",ul,[e("div",{class:K(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",Y.value>=2?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 2 ",2),t[133]||(t[133]=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),Y.value===1&&!z.value?(n(),i("div",pl,[e("div",gl,[z.value?x("",!0):(n(),i("div",ml,[t[170]||(t[170]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择平台",-1)),e("div",yl,[e("div",cl,[e("div",{class:K(["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=>Ye("claude"))},[e("div",xl,[e("div",fl,[t[136]||(t[136]=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(),i("div",bl,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"}," Claude ",-1)),t[138]||(t[138]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Anthropic",-1))])],2),e("div",{class:K(["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=>Ye("openai"))},[e("div",vl,[e("div",kl,[t[140]||(t[140]=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(),i("div",hl,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"}," OpenAI ",-1)),t[142]||(t[142]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"GPT 系列",-1))])],2),e("div",{class:K(["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=>Ye("gemini"))},[e("div",wl,[e("div",$l,[t[144]||(t[144]=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(),i("div",Al,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"}," Gemini ",-1)),t[146]||(t[146]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Google AI",-1))])],2),e("div",{class:K(["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=>Ye("droid"))},[e("div",Cl,[e("div",Ul,[t[148]||(t[148]=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(),i("div",Il,t[147]||(t[147]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)]),t[149]||(t[149]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Droid ",-1)),t[150]||(t[150]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Claude Droid",-1))])],2)]),R.value?(n(),i("div",Tl,[t[169]||(t[169]=e("p",{class:"mb-2 text-xs font-medium text-gray-700 dark:text-gray-300"}," 选择具体平台类型: ",-1)),e("div",Kl,[R.value==="claude"?(n(),i(xe,{key:0},[e("label",{class:K(["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"]])},[b(e("input",{"onUpdate:modelValue":t[5]||(t[5]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"claude"},null,512),[[ce,s.value.platform]]),t[152]||(t[152]=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(),i("div",_l,t[151]||(t[151]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2),e("label",{class:K(["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"]])},[b(e("input",{"onUpdate:modelValue":t[6]||(t[6]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"claude-console"},null,512),[[ce,s.value.platform]]),t[154]||(t[154]=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(),i("div",Dl,t[153]||(t[153]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2),e("label",{class:K(["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"]])},[b(e("input",{"onUpdate:modelValue":t[7]||(t[7]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"bedrock"},null,512),[[ce,s.value.platform]]),t[156]||(t[156]=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(),i("div",Ml,t[155]||(t[155]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2),e("label",{class:K(["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"]])},[b(e("input",{"onUpdate:modelValue":t[8]||(t[8]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"ccr"},null,512),[[ce,s.value.platform]]),t[158]||(t[158]=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(),i("div",Sl,t[157]||(t[157]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2)],64)):x("",!0),R.value==="openai"?(n(),i(xe,{key:1},[e("label",{class:K(["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"]])},[b(e("input",{"onUpdate:modelValue":t[9]||(t[9]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"openai"},null,512),[[ce,s.value.platform]]),t[160]||(t[160]=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(),i("div",Pl,t[159]||(t[159]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2),e("label",{class:K(["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"]])},[b(e("input",{"onUpdate:modelValue":t[10]||(t[10]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"openai-responses"},null,512),[[ce,s.value.platform]]),t[162]||(t[162]=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(),i("div",zl,t[161]||(t[161]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2),e("label",{class:K(["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"]])},[b(e("input",{"onUpdate:modelValue":t[11]||(t[11]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"azure_openai"},null,512),[[ce,s.value.platform]]),t[164]||(t[164]=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(),i("div",Vl,t[163]||(t[163]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2)],64)):x("",!0),R.value==="gemini"?(n(),i("label",{key:2,class:K(["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"]])},[b(e("input",{"onUpdate:modelValue":t[12]||(t[12]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"gemini"},null,512),[[ce,s.value.platform]]),t[166]||(t[166]=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(),i("div",jl,t[165]||(t[165]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2)):x("",!0),R.value==="droid"?(n(),i("label",{key:3,class:K(["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"]])},[b(e("input",{"onUpdate:modelValue":t[13]||(t[13]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"droid"},null,512),[[ce,s.value.platform]]),t[168]||(t[168]=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(),i("div",Rl,t[167]||(t[167]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):x("",!0)],2)):x("",!0)])])):x("",!0)])])),!z.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(),i("div",Ol,[t[175]||(t[175]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"添加方式",-1)),e("div",Ll,[e("label",El,[b(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),[[ce,s.value.addType]]),e("span",Nl,[t[171]||(t[171]=w(" OAuth 授权",-1)),s.value.platform==="claude"||s.value.platform==="openai"?(n(),i("span",ql," (用量可视化)")):x("",!0)])]),s.value.platform==="claude"?(n(),i("label",Wl,[b(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),[[ce,s.value.addType]]),t[172]||(t[172]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Setup Token (效期长)",-1))])):x("",!0),e("label",Fl,[b(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),[[ce,s.value.addType]]),t[173]||(t[173]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"手动输入 Access Token",-1))]),s.value.platform==="droid"?(n(),i("label",Gl,[b(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),[[ce,s.value.addType]]),t[174]||(t[174]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"使用 API Key (支持多个)",-1))])):x("",!0)])])):x("",!0),e("div",null,[t[176]||(t[176]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),b(e("input",{"onUpdate:modelValue":t[18]||(t[18]=o=>s.value.name=o),class:K(["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":C.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[M,s.value.name]]),C.value.name?(n(),i("p",Ql,p(C.value.name),1)):x("",!0)]),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)),b(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[181]||(t[181]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",Bl,[e("label",Hl,[b(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),[[ce,s.value.accountType]]),t[178]||(t[178]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",Jl,[b(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),[[ce,s.value.accountType]]),t[179]||(t[179]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",Yl,[b(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),[[ce,s.value.accountType]]),t[180]||(t[180]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[182]||(t[182]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),z.value?x("",!0):(n(),i("div",Zl,[t[186]||(t[186]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",Xl,[b(e("select",{"onUpdate:modelValue":t[23]||(t[23]=o=>s.value.expireDuration=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:Tt},t[183]||(t[183]=[e("option",{value:""},"永不过期",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[us,s.value.expireDuration]]),s.value.expireDuration==="custom"?(n(),i("div",eo,[b(e("input",{"onUpdate:modelValue":t[24]||(t[24]=o=>s.value.customExpireDate=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Ct.value,type:"datetime-local",onChange:Kt},null,40,to),[[M,s.value.customExpireDate]])])):x("",!0),s.value.expiresAt?(n(),i("p",so,[t[184]||(t[184]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),w(" 将于 "+p(Bt(s.value.expiresAt))+" 过期 ",1)])):(n(),i("p",ao,t[185]||(t[185]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),w(" 账户永不过期 ",-1)])))]),t[187]||(t[187]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])),s.value.accountType==="group"?(n(),i("div",ro,[t[189]||(t[189]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",lo,[e("div",oo,[e("div",no,[rt.value.length===0?(n(),i("div",io," 暂无可用分组 ")):x("",!0),(n(!0),i(xe,null,Ie(rt.value,o=>(n(),i("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"},[b(e("input",{"onUpdate:modelValue":t[25]||(t[25]=q=>s.value.groupIds=q),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,uo),[[ke,s.value.groupIds]]),e("span",po,p(o.name)+" ("+p(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:vt},t[188]||(t[188]=[e("i",{class:"fas fa-plus"},null,-1),w(" 新建分组 ",-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:Ke},[e("i",{class:K(["fas fa-sync-alt",{"animate-spin":he.value}])},null,2)])])])):x("",!0),s.value.platform==="gemini"?(n(),i("div",go,[t[190]||(t[190]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[26]||(t[26]=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[191]||(t[191]=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,[w(" 访问 "),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,[w(" 复制"),e("span",{class:"font-semibold text-red-600"},"项目 ID(Project ID)"),w(",通常是字符串格式 ")]),e("li",{class:"text-red-600"}," ⚠️ 注意:要复制项目 ID(Project ID),不要复制项目编号(Project Number)! ")])]),e("p",{class:"mt-2"},[e("strong",null,"提示:"),w("如果您的账号是普通个人账号(未绑定 Google Cloud),请留空此字段。 ")])])])],-1))])):x("",!0),s.value.platform==="bedrock"&&!z.value?(n(),i("div",mo,[e("div",null,[t[192]||(t[192]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 访问密钥 ID *",-1)),b(e("input",{"onUpdate:modelValue":t[27]||(t[27]=o=>s.value.accessKeyId=o),class:K(["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":C.value.accessKeyId}]),placeholder:"请输入 AWS Access Key ID",required:"",type:"text"},null,2),[[M,s.value.accessKeyId]]),C.value.accessKeyId?(n(),i("p",yo,p(C.value.accessKeyId),1)):x("",!0)]),e("div",null,[t[193]||(t[193]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 秘密访问密钥 *",-1)),b(e("input",{"onUpdate:modelValue":t[28]||(t[28]=o=>s.value.secretAccessKey=o),class:K(["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":C.value.secretAccessKey}]),placeholder:"请输入 AWS Secret Access Key",required:"",type:"password"},null,2),[[M,s.value.secretAccessKey]]),C.value.secretAccessKey?(n(),i("p",co,p(C.value.secretAccessKey),1)):x("",!0)]),e("div",null,[t[194]||(t[194]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 区域 *",-1)),b(e("input",{"onUpdate:modelValue":t[29]||(t[29]=o=>s.value.region=o),class:K(["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":C.value.region}]),placeholder:"例如:us-east-1",required:"",type:"text"},null,2),[[M,s.value.region]]),C.value.region?(n(),i("p",xo,p(C.value.region),1)):x("",!0),t[195]||(t[195]=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[196]||(t[196]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"会话令牌 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[30]||(t[30]=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[197]||(t[197]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 仅在使用临时 AWS 凭证时需要填写 ",-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)),b(e("input",{"onUpdate:modelValue":t[31]||(t[31]=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[199]||(t[199]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1)),t[200]||(t[200]=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[201]||(t[201]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[32]||(t[32]=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[202]||(t[202]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 用于快速响应的轻量级模型,留空将使用系统默认 ",-1))])])):x("",!0),s.value.platform==="azure_openai"&&!z.value?(n(),i("div",fo,[e("div",null,[t[203]||(t[203]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint *",-1)),b(e("input",{"onUpdate:modelValue":t[33]||(t[33]=o=>s.value.azureEndpoint=o),class:K(["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":C.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",required:"",type:"url"},null,2),[[M,s.value.azureEndpoint]]),C.value.azureEndpoint?(n(),i("p",bo,p(C.value.azureEndpoint),1)):x("",!0),t[204]||(t[204]=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[205]||(t[205]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),b(e("input",{"onUpdate:modelValue":t[34]||(t[34]=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[206]||(t[206]=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[207]||(t[207]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称 *",-1)),b(e("input",{"onUpdate:modelValue":t[35]||(t[35]=o=>s.value.deploymentName=o),class:K(["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":C.value.deploymentName}]),placeholder:"gpt-4",required:"",type:"text"},null,2),[[M,s.value.deploymentName]]),C.value.deploymentName?(n(),i("p",vo,p(C.value.deploymentName),1)):x("",!0),t[208]||(t[208]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Azure OpenAI Studio 中创建的部署名称 ",-1))]),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 Key *",-1)),b(e("input",{"onUpdate:modelValue":t[36]||(t[36]=o=>s.value.apiKey=o),class:K(["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":C.value.apiKey}]),placeholder:"请输入 Azure OpenAI API Key",required:"",type:"password"},null,2),[[M,s.value.apiKey]]),C.value.apiKey?(n(),i("p",ko,p(C.value.apiKey),1)):x("",!0),t[210]||(t[210]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Azure 门户获取的 API 密钥 ",-1))]),e("div",null,[t[211]||(t[211]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",ho,[(n(),i(xe,null,Ie(["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"},[b(e("input",{"onUpdate:modelValue":t[37]||(t[37]=q=>s.value.supportedModels=q),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:o},null,8,wo),[[ke,s.value.supportedModels]]),e("span",$o,p(o),1)])),64))]),t[212]||(t[212]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 选择此部署支持的模型类型 ",-1))])])):x("",!0),s.value.platform==="bedrock"&&!z.value?(n(),i("div",Ao,[e("div",null,[t[217]||(t[217]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",Co,[e("label",Uo,[b(e("input",{"onUpdate:modelValue":t[38]||(t[38]=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),[[ke,s.value.enableRateLimit]]),t[213]||(t[213]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[214]||(t[214]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),i("div",Io,[t[215]||(t[215]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[39]||(t[39]=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[216]||(t[216]=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")&&!z.value?(n(),i("div",To,[e("div",null,[t[218]||(t[218]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),b(e("input",{"onUpdate:modelValue":t[40]||(t[40]=o=>s.value.apiUrl=o),class:K(["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":C.value.apiUrl}]),placeholder:"例如:https://api.example.com",required:"",type:"text"},null,2),[[M,s.value.apiUrl]]),C.value.apiUrl?(n(),i("p",Ko,p(C.value.apiUrl),1)):x("",!0)]),e("div",null,[t[219]||(t[219]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),b(e("input",{"onUpdate:modelValue":t[41]||(t[41]=o=>s.value.apiKey=o),class:K(["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":C.value.apiKey}]),placeholder:"请输入API Key",required:"",type:"password"},null,2),[[M,s.value.apiKey]]),C.value.apiKey?(n(),i("p",_o,p(C.value.apiKey),1)):x("",!0)]),e("div",Do,[e("div",null,[t[220]||(t[220]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[42]||(t[42]=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[221]||(t[221]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-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)),b(e("input",{"onUpdate:modelValue":t[43]||(t[43]=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[223]||(t[223]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 每日自动重置额度的时间 ",-1))])]),e("div",null,[t[231]||(t[231]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",Mo,[e("button",{class:K(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",be.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[44]||(t[44]=o=>be.value="whitelist")},t[224]||(t[224]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),w(" 模型白名单 ",-1)]),2),e("button",{class:K(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",be.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[45]||(t[45]=o=>be.value="mapping")},t[225]||(t[225]=[e("i",{class:"fas fa-random mr-2"},null,-1),w(" 模型映射 ",-1)]),2)]),be.value==="whitelist"?(n(),i("div",So,[t[226]||(t[226]=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"}),w(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",Po,[(n(),i(xe,null,Ie(Te,o=>e("label",{key:o.value,class:K(["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",fe.value.includes(o.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[b(e("input",{"onUpdate:modelValue":t[46]||(t[46]=q=>fe.value=q),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:o.value},null,8,zo),[[ke,fe.value]]),e("span",Vo,p(o.label),1)],2)),64))]),e("p",jo,[w(" 已选择 "+p(fe.value.length)+" 个模型 ",1),fe.value.length===0?(n(),i("span",Ro,"(支持所有模型)")):x("",!0)])])):(n(),i("div",Oo,[t[230]||(t[230]=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"}),w(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",Lo,[(n(!0),i(xe,null,Ie($e.value,(o,q)=>(n(),i("div",{key:q,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":re=>o.from=re,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,Eo),[[M,o.from]]),t[228]||(t[228]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":re=>o.to=re,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,No),[[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:re=>ut(q)},t[227]||(t[227]=[e("i",{class:"fas fa-trash"},null,-1)]),8,qo)]))),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:tt},t[229]||(t[229]=[e("i",{class:"fas fa-plus mr-2"},null,-1),w(" 添加模型映射 ",-1)])),e("div",Wo,[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[47]||(t[47]=o=>Fe("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[48]||(t[48]=o=>Fe("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[49]||(t[49]=o=>Fe("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[50]||(t[50]=o=>Fe("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[232]||(t[232]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[51]||(t[51]=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[233]||(t[233]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[238]||(t[238]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",Fo,[e("label",Go,[b(e("input",{"onUpdate:modelValue":t[52]||(t[52]=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),[[ke,s.value.enableRateLimit]]),t[234]||(t[234]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[235]||(t[235]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),i("div",Qo,[t[236]||(t[236]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[53]||(t[53]=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[237]||(t[237]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):x("",!0)])])):x("",!0),s.value.platform==="openai-responses"&&!z.value?(n(),i("div",Bo,[e("div",null,[t[239]||(t[239]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),b(e("input",{"onUpdate:modelValue":t[54]||(t[54]=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[240]||(t[240]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方 OpenAI 兼容 API 的基础地址,不要包含具体路径 ",-1))]),e("div",null,[t[241]||(t[241]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",Ho,[b(e("input",{"onUpdate:modelValue":t[55]||(t[55]=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:J.value?"text":"password"},null,8,Jo),[[ms,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[56]||(t[56]=o=>J.value=!J.value)},[e("i",{class:K(J.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[242]||(t[242]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方服务提供的 API 密钥 ",-1))]),e("div",null,[t[243]||(t[243]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[57]||(t[57]=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[244]||(t[244]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可选项。如果设置,所有请求将使用此 User-Agent;否则透传客户端的 User-Agent ",-1))]),b(e("input",{"onUpdate:modelValue":t[58]||(t[58]=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(),i("div",Yo,[t[247]||(t[247]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",Zo,[e("label",Xo,[b(e("input",{"onUpdate:modelValue":t[59]||(t[59]=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),[[ce,s.value.subscriptionType]]),t[245]||(t[245]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",en,[b(e("input",{"onUpdate:modelValue":t[60]||(t[60]=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),[[ce,s.value.subscriptionType]]),t[246]||(t[246]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[248]||(t[248]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),w(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):x("",!0),s.value.platform==="claude"?(n(),i("div",tn,[e("label",sn,[b(e("input",{"onUpdate:modelValue":t[61]||(t[61]=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),[[ke,s.value.autoStopOnWarning]]),t[249]||(t[249]=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(),i("div",an,[e("label",rn,[b(e("input",{"onUpdate:modelValue":t[62]||(t[62]=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),[[ke,s.value.useUnifiedUserAgent]]),e("div",ln,[t[251]||(t[251]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[252]||(t[252]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),L.value?(n(),i("div",on,[e("div",nn,[e("p",dn," 💡 当前统一版本:"+p(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:Gt},[U.value?(n(),i("div",gn)):(n(),i("i",pn)),w(" "+p(U.value?"清除中...":"清除缓存"),1)],8,un)])])):(n(),i("div",mn,t[250]||(t[250]=[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(),i("div",yn,[e("label",cn,[b(e("input",{"onUpdate:modelValue":t[63]||(t[63]=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:It},null,544),[[ke,s.value.useUnifiedClientId]]),e("div",xn,[t[256]||(t[256]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[257]||(t[257]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),s.value.useUnifiedClientId?(n(),i("div",fn,[e("div",bn,[e("div",{class:"mb-2 flex items-center justify-between"},[t[254]||(t[254]=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:Qt},t[253]||(t[253]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),w(" 重新生成 ",-1)]))]),e("div",vn,[e("code",kn,[e("span",hn,p(s.value.unifiedClientId.substring(0,8)),1),e("span",wn,p(s.value.unifiedClientId.substring(8,56)),1),e("span",$n,p(s.value.unifiedClientId.substring(56)),1)])]),t[255]||(t[255]=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"}),w(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):x("",!0)])])])):x("",!0),e("div",null,[t[258]||(t[258]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),b(e("input",{"onUpdate:modelValue":t[64]||(t[64]=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[259]||(t[259]=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(),i("div",An,[e("div",Cn,[t[264]||(t[264]=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[263]||(t[263]=e("h5",{class:"mb-2 font-semibold text-blue-900 dark:text-blue-300"}," 手动输入 Token ",-1)),s.value.platform==="claude"?(n(),i("p",Un," 请输入有效的 Claude Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="gemini"?(n(),i("p",In," 请输入有效的 Gemini Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="openai"?(n(),i("p",Tn," 请输入有效的 OpenAI Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="droid"?(n(),i("p",Kn," 请输入有效的 Droid Access Token,并同时提供 Refresh Token 以支持自动刷新。 ")):x("",!0),e("div",_n,[t[262]||(t[262]=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"}),w(" 获取 Access Token 的方法: ")],-1)),s.value.platform==="claude"?(n(),i("p",Dn,t[260]||(t[260]=[w(" 请从已登录 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),w(" 文件中的凭证, 请勿使用 Claude 官网 API Keys 页面的密钥。 ",-1)]))):s.value.platform==="gemini"?(n(),i("p",Mn,t[261]||(t[261]=[w(" 请从已登录 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),w(" 文件中的凭证。 ",-1)]))):s.value.platform==="openai"?(n(),i("p",Sn," 请从已登录 OpenAI 账户的机器上获取认证凭证, 或通过 OAuth 授权流程获取 Access Token。 ")):s.value.platform==="droid"?(n(),i("p",Pn," 请从已完成授权的 Droid CLI 或 Factory.ai 导出的凭证中获取 Access Token 与 Refresh Token。 ")):x("",!0)]),s.value.platform!=="droid"?(n(),i("p",zn," 💡 如果未填写 Refresh Token,Token 过期后需要手动更新。 ")):(n(),i("p",Vn," ⚠️ Droid 账户必须填写 Refresh Token,缺失将导致无法自动刷新 Access Token。 "))])]),s.value.platform==="openai"?(n(),i("div",jn,[t[265]||(t[265]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[65]||(t[65]=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[266]||(t[266]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),w(" Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。 ")],-1))])):(n(),i("div",Rn,[t[267]||(t[267]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token *",-1)),b(e("textarea",{"onUpdate:modelValue":t[66]||(t[66]=o=>s.value.accessToken=o),class:K(["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":C.value.accessToken}]),placeholder:"请输入 Access Token...",required:"",rows:"4"},null,2),[[M,s.value.accessToken]]),C.value.accessToken?(n(),i("p",On,p(C.value.accessToken),1)):x("",!0)])),s.value.platform==="openai"||s.value.platform==="droid"?(n(),i("div",Ln,[t[269]||(t[269]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token *",-1)),b(e("textarea",{"onUpdate:modelValue":t[67]||(t[67]=o=>s.value.refreshToken=o),class:K(["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":C.value.refreshToken}]),placeholder:"请输入 Refresh Token(必填)...",required:"",rows:"4"},null,2),[[M,s.value.refreshToken]]),C.value.refreshToken?(n(),i("p",En,p(C.value.refreshToken),1)):x("",!0),e("p",Nn,[t[268]||(t[268]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),s.value.platform==="openai"?(n(),i(xe,{key:0},[w(" 系统将使用 Refresh Token 自动获取 Access Token 和用户信息 ")],64)):(n(),i(xe,{key:1},[w(" 系统将使用 Refresh Token 自动刷新 Factory.ai 访问令牌,确保账户保持可用。 ")],64))])])):(n(),i("div",qn,[t[270]||(t[270]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[68]||(t[68]=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(),i("div",Wn,[t[273]||(t[273]=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[271]||(t[271]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 列表 *",-1)),b(e("textarea",{"onUpdate:modelValue":t[69]||(t[69]=o=>s.value.apiKeysInput=o),class:K(["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":C.value.apiKeys}]),placeholder:"每行一个 API Key,可粘贴多行",required:"",rows:"6"},null,2),[[M,s.value.apiKeysInput]]),C.value.apiKeys?(n(),i("p",Fn,p(C.value.apiKeys),1)):x("",!0),t[272]||(t[272]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),w(" 建议为每条 Key 提供独立额度;系统会自动去重并忽略空白行。 ")],-1))]),t[274]||(t[274]=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"}),w("分配策略说明")]),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),He(ys,{modelValue:s.value.proxy,"onUpdate:modelValue":t[70]||(t[70]=o=>s.value.proxy=o)},null,8,["modelValue"]),e("div",Gn,[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[71]||(t[71]=o=>d.$emit("close"))}," 取消 "),(s.value.addType==="oauth"||s.value.addType==="setup-token")&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"?(n(),i("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:ee.value,type:"button",onClick:bt}," 下一步 ",8,Qn)):(n(),i("button",{key:1,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:ee.value,type:"button",onClick:$t},[ee.value?(n(),i("div",Hn)):x("",!0),w(" "+p(ee.value?"创建中...":"创建"),1)],8,Bn))])])])):x("",!0),Y.value===2&&s.value.addType==="oauth"?(n(),Ge(vr,{key:2,platform:s.value.platform,proxy:s.value.proxy,onBack:t[72]||(t[72]=o=>Y.value=1),onSuccess:Me},null,8,["platform","proxy"])):x("",!0),Y.value===2&&s.value.addType==="setup-token"?(n(),i("div",Jn,[s.value.platform==="claude"?(n(),i("div",Yn,[e("div",Zn,[e("div",Xn,[t[286]||(t[286]=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",ei,[t[284]||(t[284]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"}," Claude Setup Token 授权 ",-1)),t[285]||(t[285]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤通过 Setup Token 完成 Claude 账户的授权: ",-1)),e("div",ti,[e("div",si,[e("div",ai,[t[277]||(t[277]=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",ri,[t[276]||(t[276]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),k.value?(n(),i("div",ii,[e("div",di,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:k.value},null,8,ui),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:y},[e("i",{class:K(T.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:c},t[275]||(t[275]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),w("重新生成 ",-1)]))])):(n(),i("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:X.value,onClick:Oe},[X.value?(n(),i("div",ni)):(n(),i("i",oi)),w(" "+p(X.value?"生成中...":"生成 Setup Token 授权链接"),1)],8,li))])])]),t[283]||(t[283]=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,"注意:"),w("如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 ")])])])])],-1)),e("div",pi,[e("div",gi,[t[282]||(t[282]=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",mi,[t[280]||(t[280]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),t[281]||(t[281]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 授权完成后,从返回页面复制 Authorization Code,并粘贴到下方输入框: ",-1)),e("div",yi,[e("div",null,[t[278]||(t[278]=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"}),w("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":t[73]||(t[73]=o=>m.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,m.value]])]),t[279]||(t[279]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),w(" 请粘贴从Claude Code授权页面复制的Authorization Code ")],-1))])])])])])])])])])):x("",!0),e("div",ci,[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[74]||(t[74]=o=>Y.value=1)}," 上一步 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!We.value||G.value,type:"button",onClick:D},[G.value?(n(),i("div",fi)):x("",!0),w(" "+p(G.value?"验证中...":"完成授权"),1)],8,xi)])])):x("",!0),z.value?(n(),i("div",bi,[e("div",null,[t[287]||(t[287]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),b(e("input",{"onUpdate:modelValue":t[75]||(t[75]=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[288]||(t[288]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[76]||(t[76]=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[292]||(t[292]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",vi,[e("label",ki,[b(e("input",{"onUpdate:modelValue":t[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:"shared"},null,512),[[ce,s.value.accountType]]),t[289]||(t[289]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",hi,[b(e("input",{"onUpdate:modelValue":t[78]||(t[78]=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),[[ce,s.value.accountType]]),t[290]||(t[290]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",wi,[b(e("input",{"onUpdate:modelValue":t[79]||(t[79]=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),[[ce,s.value.accountType]]),t[291]||(t[291]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[293]||(t[293]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),z.value?x("",!0):(n(),i("div",$i,[t[297]||(t[297]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",Ai,[b(e("select",{"onUpdate:modelValue":t[80]||(t[80]=o=>s.value.expireDuration=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:Tt},t[294]||(t[294]=[e("option",{value:""},"永不过期",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[us,s.value.expireDuration]]),s.value.expireDuration==="custom"?(n(),i("div",Ci,[b(e("input",{"onUpdate:modelValue":t[81]||(t[81]=o=>s.value.customExpireDate=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Ct.value,type:"datetime-local",onChange:Kt},null,40,Ui),[[M,s.value.customExpireDate]])])):x("",!0),s.value.expiresAt?(n(),i("p",Ii,[t[295]||(t[295]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),w(" 将于 "+p(Bt(s.value.expiresAt))+" 过期 ",1)])):(n(),i("p",Ti,t[296]||(t[296]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),w(" 账户永不过期 ",-1)])))]),t[298]||(t[298]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])),s.value.accountType==="group"?(n(),i("div",Ki,[t[300]||(t[300]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",_i,[e("div",Di,[e("div",Mi,[rt.value.length===0?(n(),i("div",Si," 暂无可用分组 ")):x("",!0),(n(!0),i(xe,null,Ie(rt.value,o=>(n(),i("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"},[b(e("input",{"onUpdate:modelValue":t[82]||(t[82]=q=>s.value.groupIds=q),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,Pi),[[ke,s.value.groupIds]]),e("span",zi,p(o.name)+" ("+p(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:vt},t[299]||(t[299]=[e("i",{class:"fas fa-plus"},null,-1),w(" 新建分组 ",-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:Ke},[e("i",{class:K(["fas fa-sync-alt",{"animate-spin":he.value}])},null,2)])])])):x("",!0),s.value.platform==="gemini"?(n(),i("div",Vi,[t[301]||(t[301]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[83]||(t[83]=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[302]||(t[302]=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(),i("div",ji,[t[305]||(t[305]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",Ri,[e("label",Oi,[b(e("input",{"onUpdate:modelValue":t[84]||(t[84]=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),[[ce,s.value.subscriptionType]]),t[303]||(t[303]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",Li,[b(e("input",{"onUpdate:modelValue":t[85]||(t[85]=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),[[ce,s.value.subscriptionType]]),t[304]||(t[304]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[306]||(t[306]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),w(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):x("",!0),s.value.platform==="claude"?(n(),i("div",Ei,[e("label",Ni,[b(e("input",{"onUpdate:modelValue":t[86]||(t[86]=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),[[ke,s.value.autoStopOnWarning]]),t[307]||(t[307]=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(),i("div",qi,[e("label",Wi,[b(e("input",{"onUpdate:modelValue":t[87]||(t[87]=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),[[ke,s.value.useUnifiedUserAgent]]),e("div",Fi,[t[309]||(t[309]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[310]||(t[310]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),L.value?(n(),i("div",Gi,[e("div",Qi,[e("p",Bi," 💡 当前统一版本:"+p(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:Gt},[U.value?(n(),i("div",Yi)):(n(),i("i",Ji)),w(" "+p(U.value?"清除中...":"清除缓存"),1)],8,Hi)])])):(n(),i("div",Zi,t[308]||(t[308]=[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(),i("div",Xi,[e("label",ed,[b(e("input",{"onUpdate:modelValue":t[88]||(t[88]=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:It},null,544),[[ke,s.value.useUnifiedClientId]]),e("div",td,[t[314]||(t[314]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[315]||(t[315]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),s.value.useUnifiedClientId?(n(),i("div",sd,[e("div",ad,[e("div",{class:"mb-2 flex items-center justify-between"},[t[312]||(t[312]=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:Qt},t[311]||(t[311]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),w(" 重新生成 ",-1)]))]),e("div",rd,[e("code",ld,[e("span",od,p(s.value.unifiedClientId.substring(0,8)),1),e("span",nd,p(s.value.unifiedClientId.substring(8,56)),1),e("span",id,p(s.value.unifiedClientId.substring(56)),1)])]),t[313]||(t[313]=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"}),w(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):x("",!0)])])])):x("",!0),e("div",null,[t[316]||(t[316]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),b(e("input",{"onUpdate:modelValue":t[89]||(t[89]=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[317]||(t[317]=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(),i("div",dd,[e("div",null,[t[318]||(t[318]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API URL",-1)),b(e("input",{"onUpdate:modelValue":t[90]||(t[90]=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[319]||(t[319]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":t[91]||(t[91]=o=>s.value.apiKey=o),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[M,s.value.apiKey]]),t[320]||(t[320]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",ud,[e("div",null,[t[321]||(t[321]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[92]||(t[92]=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[322]||(t[322]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[323]||(t[323]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[93]||(t[93]=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[324]||(t[324]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),z.value&&s.value.dailyQuota>0?(n(),i("div",pd,[e("div",gd,[t[325]||(t[325]=e("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"}," 今日使用情况 ",-1)),e("span",md," $"+p(je().toFixed(4))+" / $"+p(s.value.dailyQuota.toFixed(2)),1)]),e("div",yd,[e("div",{class:K(["absolute left-0 top-0 h-full rounded-full transition-all",Re.value>=90?"bg-red-500":Re.value>=70?"bg-yellow-500":"bg-green-500"]),style:Se({width:`${Math.min(Re.value,100)}%`})},null,6)]),e("div",cd,[e("span",xd," 剩余: $"+p(Math.max(0,s.value.dailyQuota-je()).toFixed(2)),1),e("span",fd,p(Re.value.toFixed(1))+"% 已使用 ",1)])])):x("",!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)),e("div",bd,[e("button",{class:K(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",be.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[94]||(t[94]=o=>be.value="whitelist")},t[326]||(t[326]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),w(" 模型白名单 ",-1)]),2),e("button",{class:K(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",be.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[95]||(t[95]=o=>be.value="mapping")},t[327]||(t[327]=[e("i",{class:"fas fa-random mr-2"},null,-1),w(" 模型映射 ",-1)]),2)]),be.value==="whitelist"?(n(),i("div",vd,[t[328]||(t[328]=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"}),w(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",kd,[(n(),i(xe,null,Ie(Te,o=>e("label",{key:o.value,class:K(["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",fe.value.includes(o.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[b(e("input",{"onUpdate:modelValue":t[96]||(t[96]=q=>fe.value=q),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:o.value},null,8,hd),[[ke,fe.value]]),e("span",wd,p(o.label),1)],2)),64))]),e("p",$d,[w(" 已选择 "+p(fe.value.length)+" 个模型 ",1),fe.value.length===0?(n(),i("span",Ad,"(支持所有模型)")):x("",!0)])])):(n(),i("div",Cd,[t[332]||(t[332]=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"}),w(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",Ud,[(n(!0),i(xe,null,Ie($e.value,(o,q)=>(n(),i("div",{key:q,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":re=>o.from=re,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,Id),[[M,o.from]]),t[330]||(t[330]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":re=>o.to=re,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,Td),[[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:re=>ut(q)},t[329]||(t[329]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Kd)]))),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:tt},t[331]||(t[331]=[e("i",{class:"fas fa-plus mr-2"},null,-1),w(" 添加模型映射 ",-1)])),e("div",_d,[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[97]||(t[97]=o=>Fe("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[98]||(t[98]=o=>Fe("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[99]||(t[99]=o=>Fe("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[100]||(t[100]=o=>Fe("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[334]||(t[334]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[101]||(t[101]=o=>s.value.userAgent=o),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[M,s.value.userAgent]]),t[335]||(t[335]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[340]||(t[340]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",Dd,[e("label",Md,[b(e("input",{"onUpdate:modelValue":t[102]||(t[102]=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),[[ke,s.value.enableRateLimit]]),t[336]||(t[336]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[337]||(t[337]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),i("div",Sd,[t[338]||(t[338]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[103]||(t[103]=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[339]||(t[339]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):x("",!0)])])):x("",!0),s.value.platform==="openai-responses"?(n(),i("div",Pd,[e("div",null,[t[341]||(t[341]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 基础地址",-1)),b(e("input",{"onUpdate:modelValue":t[104]||(t[104]=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[342]||(t[342]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 密钥",-1)),e("div",zd,[b(e("input",{"onUpdate:modelValue":t[105]||(t[105]=o=>s.value.apiKey=o),class:"form-input w-full pr-10",placeholder:"留空表示不更新",type:J.value?"text":"password"},null,8,Vd),[[ms,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[106]||(t[106]=o=>J.value=!J.value)},[e("i",{class:K(J.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[343]||(t[343]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",null,[t[344]||(t[344]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent",-1)),b(e("input",{"onUpdate:modelValue":t[107]||(t[107]=o=>s.value.userAgent=o),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[M,s.value.userAgent]]),t[345]||(t[345]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),b(e("input",{"onUpdate:modelValue":t[108]||(t[108]=o=>s.value.rateLimitDuration=o),type:"hidden"},null,512),[[M,s.value.rateLimitDuration,void 0,{number:!0}]]),e("div",jd,[e("div",null,[t[346]||(t[346]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[109]||(t[109]=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[347]||(t[347]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[110]||(t[110]=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(),i("div",Rd,[e("div",null,[t[348]||(t[348]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 访问密钥 ID",-1)),b(e("input",{"onUpdate:modelValue":t[111]||(t[111]=o=>s.value.accessKeyId=o),class:"form-input w-full",placeholder:"留空表示不更新",type:"text"},null,512),[[M,s.value.accessKeyId]]),t[349]||(t[349]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Access Key ID",-1))]),e("div",null,[t[350]||(t[350]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 秘密访问密钥",-1)),b(e("input",{"onUpdate:modelValue":t[112]||(t[112]=o=>s.value.secretAccessKey=o),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[M,s.value.secretAccessKey]]),t[351]||(t[351]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Secret Access Key",-1))]),e("div",null,[t[352]||(t[352]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 区域",-1)),b(e("input",{"onUpdate:modelValue":t[113]||(t[113]=o=>s.value.region=o),class:"form-input w-full",placeholder:"例如:us-east-1",type:"text"},null,512),[[M,s.value.region]]),t[353]||(t[353]=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[354]||(t[354]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"会话令牌 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[114]||(t[114]=o=>s.value.sessionToken=o),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[M,s.value.sessionToken]])]),e("div",null,[t[355]||(t[355]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"默认主模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[115]||(t[115]=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[356]||(t[356]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1))]),e("div",null,[t[357]||(t[357]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[116]||(t[116]=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[358]||(t[358]=e("p",{class:"mt-1 text-xs text-gray-500"},"用于快速响应的轻量级模型,留空将使用系统默认",-1))]),e("div",null,[t[363]||(t[363]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",Od,[e("label",Ld,[b(e("input",{"onUpdate:modelValue":t[117]||(t[117]=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),[[ke,s.value.enableRateLimit]]),t[359]||(t[359]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[360]||(t[360]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),i("div",Ed,[t[361]||(t[361]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[118]||(t[118]=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[362]||(t[362]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):x("",!0)])])):x("",!0),s.value.platform==="azure_openai"?(n(),i("div",Nd,[e("div",null,[t[364]||(t[364]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint",-1)),b(e("input",{"onUpdate:modelValue":t[119]||(t[119]=o=>s.value.azureEndpoint=o),class:K(["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":C.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",type:"url"},null,2),[[M,s.value.azureEndpoint]]),C.value.azureEndpoint?(n(),i("p",qd,p(C.value.azureEndpoint),1)):x("",!0)]),e("div",null,[t[365]||(t[365]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),b(e("input",{"onUpdate:modelValue":t[120]||(t[120]=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[366]||(t[366]=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[367]||(t[367]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称",-1)),b(e("input",{"onUpdate:modelValue":t[121]||(t[121]=o=>s.value.deploymentName=o),class:K(["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":C.value.deploymentName}]),placeholder:"gpt-4",type:"text"},null,2),[[M,s.value.deploymentName]]),C.value.deploymentName?(n(),i("p",Wd,p(C.value.deploymentName),1)):x("",!0)]),e("div",null,[t[368]||(t[368]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":t[122]||(t[122]=o=>s.value.apiKey=o),class:K(["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":C.value.apiKey}]),placeholder:"留空表示不更新",type:"password"},null,2),[[M,s.value.apiKey]]),C.value.apiKey?(n(),i("p",Fd,p(C.value.apiKey),1)):x("",!0),t[369]||(t[369]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))]),e("div",null,[t[370]||(t[370]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",Gd,[(n(),i(xe,null,Ie(["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"},[b(e("input",{"onUpdate:modelValue":t[123]||(t[123]=q=>s.value.supportedModels=q),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:o},null,8,Qd),[[ke,s.value.supportedModels]]),e("span",Bd,p(o),1)])),64))]),t[371]||(t[371]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"选择此部署支持的模型类型",-1))])])):x("",!0),z.value&&st.value?(n(),i("div",Hd,[e("div",Jd,[t[376]||(t[376]=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[374]||(t[374]=e("h5",{class:"mb-2 font-semibold text-purple-900 dark:text-purple-200"}," 更新 API Key ",-1)),e("p",Yd,[t[372]||(t[372]=w(" 当前已保存 ",-1)),e("strong",null,p(ft.value),1),t[373]||(t[373]=w(" 条 API Key。您可以追加新的 Key,或通过下方模式快速覆盖、删除指定 Key。 ",-1))]),t[375]||(t[375]=e("p",{class:"text-xs text-purple-700 dark:text-purple-300"}," 留空表示保留现有 Key 不变;根据所选模式决定是追加、覆盖还是删除输入的 Key。 ",-1))])]),e("div",Zd,[e("div",null,[t[377]||(t[377]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 API Key 列表",-1)),b(e("textarea",{"onUpdate:modelValue":t[124]||(t[124]=o=>s.value.apiKeysInput=o),class:K(["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":C.value.apiKeys}]),placeholder:"根据模式填写;每行一个 API Key",rows:"6"},null,2),[[M,s.value.apiKeysInput]]),C.value.apiKeys?(n(),i("p",Xd,p(C.value.apiKeys),1)):x("",!0)]),e("div",e0,[e("div",t0,[t[378]||(t[378]=e("span",{class:"text-sm font-semibold text-purple-800 dark:text-purple-100"},"API Key 更新模式",-1)),e("span",s0,p(ct.value),1)]),e("div",a0,[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(yt.value)},null,4),(n(),i(xe,null,Ie(qe,o=>e("button",{key:o.value,class:K(["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:q=>s.value.apiKeyUpdateMode=o.value},p(o.label),11,r0)),64))]),e("p",l0,p(xt.value),1)]),t[379]||(t[379]=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"}),w("小提示")]),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),!(z.value&&st.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(),i("div",o0,[t[382]||(t[382]=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",n0,[e("div",null,[t[380]||(t[380]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Access Token",-1)),b(e("textarea",{"onUpdate:modelValue":t[125]||(t[125]=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[381]||(t[381]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Refresh Token",-1)),b(e("textarea",{"onUpdate:modelValue":t[126]||(t[126]=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),He(ys,{modelValue:s.value.proxy,"onUpdate:modelValue":t[127]||(t[127]=o=>s.value.proxy=o)},null,8,["modelValue"]),e("div",i0,[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[128]||(t[128]=o=>d.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:ee.value,type:"button",onClick:At},[ee.value?(n(),i("div",u0)):x("",!0),w(" "+p(ee.value?"更新中...":"更新"),1)],8,d0)])])):x("",!0)])])):x("",!0),He(ws,{"cancel-text":Ne(O).cancelText,"confirm-text":Ne(O).confirmText,message:Ne(O).message,show:Ne(N),title:Ne(O).title,onCancel:Ne(h),onConfirm:Ne($)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),at.value?(n(),Ge(tl,{key:1,onClose:t[129]||(t[129]=o=>at.value=!1),onRefresh:Qe})):x("",!0)]))}},bs=Wt(p0,[["__scopeId","data-v-946e7406"]]),g0={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},m0={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto rounded-2xl bg-white/90 p-4 shadow-xl backdrop-blur-xl dark:bg-gray-800/95 dark:shadow-2xl sm:p-6 md:p-8"},y0={class:"mb-4 flex items-center justify-between sm:mb-6"},c0={class:"flex items-center gap-2 sm:gap-3"},x0={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},f0={class:"space-y-6"},b0={key:0,class:"mt-1 text-xs text-red-500"},v0={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},k0={key:0,class:"mt-1 text-xs text-red-500"},h0={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},w0=["placeholder","required"],$0={key:0,class:"mt-1 text-xs text-red-500"},A0={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},C0={class:"mb-3"},U0={class:"inline-flex cursor-pointer items-center"},I0={key:0},T0={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},K0={class:"mb-3 space-y-2"},_0=["onUpdate:modelValue"],D0=["onUpdate:modelValue"],M0=["onClick"],S0={class:"mt-2 flex gap-3"},P0=["disabled"],z0={key:0,class:"loading-spinner mr-2"},V0={__name:"CcrAccountForm",props:{account:{type:Object,default:null}},emits:["close","success"],setup(E,{emit:we}){const g=E,ge=we,_=I(!0),N=pe(()=>!!g.account),O=I(!1),A=I({name:"",description:"",apiUrl:"",apiKey:"",priority:50,userAgent:"",rateLimitDuration:60,dailyQuota:0,quotaResetTime:"00:00",proxy:null,supportedModels:{}}),$=I(!0),h=I({}),z=I([]),B=()=>{const k={};for(const m of z.value){const T=(m.from||"").trim(),Z=(m.to||"").trim();T&&Z&&(k[T]=Z)}return k},Y=()=>{z.value.push({from:"",to:""})},ee=k=>{z.value.splice(k,1)},J=()=>{const k={};return(!A.value.name||A.value.name.trim().length===0)&&(k.name="名称不能为空"),(!A.value.apiUrl||A.value.apiUrl.trim().length===0)&&(k.apiUrl="API URL 不能为空"),!N.value&&(!A.value.apiKey||A.value.apiKey.trim().length===0)&&(k.apiKey="API Key 不能为空"),h.value=k,Object.keys(k).length===0},X=async()=>{if(J()){O.value=!0;try{if(N.value){const k={name:A.value.name,description:A.value.description,apiUrl:A.value.apiUrl,priority:A.value.priority,userAgent:A.value.userAgent,rateLimitDuration:$.value?Number(A.value.rateLimitDuration||60):0,dailyQuota:Number(A.value.dailyQuota||0),quotaResetTime:A.value.quotaResetTime||"00:00",proxy:A.value.proxy||null,supportedModels:B()};A.value.apiKey&&A.value.apiKey.trim().length>0&&(k.apiKey=A.value.apiKey);const m=await V.put(`/admin/ccr-accounts/${g.account.id}`,k);m.success?ge("success"):P(m.message||"保存失败","error")}else{const k={name:A.value.name,description:A.value.description,apiUrl:A.value.apiUrl,apiKey:A.value.apiKey,priority:Number(A.value.priority||50),supportedModels:B(),userAgent:A.value.userAgent,rateLimitDuration:$.value?Number(A.value.rateLimitDuration||60):0,proxy:A.value.proxy,accountType:"shared",dailyQuota:Number(A.value.dailyQuota||0),quotaResetTime:A.value.quotaResetTime||"00:00"},m=await V.post("/admin/ccr-accounts",k);m.success?ge("success"):P(m.message||"创建失败","error")}}catch(k){P(k.message||"请求失败","error")}finally{O.value=!1}}},G=()=>{if(!g.account)return;const k=g.account;A.value.name=k.name||"",A.value.description=k.description||"",A.value.apiUrl=k.apiUrl||"",A.value.priority=Number(k.priority||50),A.value.userAgent=k.userAgent||"",A.value.rateLimitDuration=Number(k.rateLimitDuration||60),A.value.dailyQuota=Number(k.dailyQuota||0),A.value.quotaResetTime=k.quotaResetTime||"00:00",A.value.proxy=k.proxy||null,$.value=A.value.rateLimitDuration>0,z.value=[];const m=k.supportedModels||{};if(m&&typeof m=="object")for(const T of Object.keys(m))z.value.push({from:T,to:m[T]})};return ps(()=>{N.value&&G()}),le(()=>g.account,()=>{N.value&&G()}),(k,m)=>(n(),Ge(qt,{to:"body"},[_.value?(n(),i("div",g0,[e("div",m0,[e("div",y0,[e("div",c0,[m[13]||(m[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",x0,p(N.value?"编辑 CCR 账户":"添加 CCR 账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:m[0]||(m[0]=T=>k.$emit("close"))},m[14]||(m[14]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",f0,[e("div",null,[m[15]||(m[15]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称 *",-1)),b(e("input",{"onUpdate:modelValue":m[1]||(m[1]=T=>A.value.name=T),class:K(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":h.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[M,A.value.name]]),h.value.name?(n(),i("p",b0,p(h.value.name),1)):x("",!0)]),e("div",null,[m[16]||(m[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":m[2]||(m[2]=T=>A.value.description=T),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,A.value.description]])]),e("div",v0,[e("div",null,[m[17]||(m[17]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),b(e("input",{"onUpdate:modelValue":m[3]||(m[3]=T=>A.value.apiUrl=T),class:K(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":h.value.apiUrl}]),placeholder:"例如:https://api.example.com/v1/messages",required:"",type:"text"},null,2),[[M,A.value.apiUrl]]),h.value.apiUrl?(n(),i("p",k0,p(h.value.apiUrl),1)):x("",!0)]),e("div",null,[e("label",h0,"API Key "+p(N.value?"(留空不更新)":"*"),1),b(e("input",{"onUpdate:modelValue":m[4]||(m[4]=T=>A.value.apiKey=T),class:K(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":h.value.apiKey}]),placeholder:N.value?"留空表示不更新":"必填",required:!N.value,type:"password"},null,10,w0),[[M,A.value.apiKey]]),h.value.apiKey?(n(),i("p",$0,p(h.value.apiKey),1)):x("",!0)])]),e("div",A0,[e("div",null,[m[18]||(m[18]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"优先级",-1)),b(e("input",{"onUpdate:modelValue":m[5]||(m[5]=T=>A.value.priority=T),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,A.value.priority,void 0,{number:!0}]]),m[19]||(m[19]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议范围:1-100,数字越小优先级越高 ",-1))]),e("div",null,[m[20]||(m[20]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":m[6]||(m[6]=T=>A.value.userAgent=T),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,A.value.userAgent]])])]),e("div",null,[m[24]||(m[24]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",C0,[e("label",U0,[b(e("input",{"onUpdate:modelValue":m[7]||(m[7]=T=>$.value=T),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),[[ke,$.value]]),m[21]||(m[21]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制(429 时暂停调度)",-1))])]),$.value?(n(),i("div",I0,[m[22]||(m[22]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":m[8]||(m[8]=T=>A.value.rateLimitDuration=T),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,A.value.rateLimitDuration,void 0,{number:!0}]]),m[23]||(m[23]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):x("",!0)]),e("div",T0,[e("div",null,[m[25]||(m[25]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日额度限制 ($)",-1)),b(e("input",{"onUpdate:modelValue":m[9]||(m[9]=T=>A.value.dailyQuota=T),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,A.value.dailyQuota,void 0,{number:!0}]]),m[26]||(m[26]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[m[27]||(m[27]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"额度重置时间",-1)),b(e("input",{"onUpdate:modelValue":m[10]||(m[10]=T=>A.value.quotaResetTime=T),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,A.value.quotaResetTime]]),m[28]||(m[28]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),e("div",null,[m[32]||(m[32]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型映射表 (可选)",-1)),m[33]||(m[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"}),w(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",K0,[(n(!0),i(xe,null,Ie(z.value,(T,Z)=>(n(),i("div",{key:Z,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":L=>T.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,_0),[[M,T.from]]),m[30]||(m[30]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":L=>T.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,T.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=>ee(Z)},m[29]||(m[29]=[e("i",{class:"fas fa-trash"},null,-1)]),8,M0)]))),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:Y},m[31]||(m[31]=[e("i",{class:"fas fa-plus mr-2"},null,-1),w(" 添加模型映射 ",-1)]))]),e("div",null,[He(ys,{modelValue:A.value.proxy,"onUpdate:modelValue":m[11]||(m[11]=T=>A.value.proxy=T)},null,8,["modelValue"])]),e("div",S0,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:m[12]||(m[12]=T=>k.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:O.value,type:"button",onClick:X},[O.value?(n(),i("div",z0)):x("",!0),w(" "+p(O.value?N.value?"保存中...":"创建中...":N.value?"保存":"创建"),1)],8,P0)])])])])):x("",!0)]))}},vs=Wt(V0,[["__scopeId","data-v-2a966370"]]),j0={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},R0={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"},O0={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"},L0={class:"flex flex-1 items-start gap-3"},E0={class:"space-y-1"},N0={class:"flex flex-wrap items-center gap-2"},q0={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"},F0={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"},G0={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Q0={key:0},B0={class:"flex-1 overflow-y-auto px-5 py-4 sm:px-6"},H0={key:0,class:"flex h-[50vh] items-center justify-center"},J0={class:"mb-5 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4"},Y0={class:"flex items-start justify-between"},Z0={class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"},X0={class:"mt-2 text-xl font-semibold text-gray-900 dark:text-gray-100"},eu={class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},tu={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gray-50 dark:bg-gray-800"},su={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},au={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"},ru={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"},lu={class:"flex items-center justify-between"},ou={class:"font-semibold text-gray-900 dark:text-gray-100"},nu={class:"mt-2 flex items-center justify-between"},iu={class:"font-semibold text-gray-900 dark:text-gray-100"},du={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},uu={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"},pu={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"},gu={class:"flex items-center justify-between"},mu={class:"font-semibold text-gray-900 dark:text-gray-100"},yu={class:"mt-2 flex items-center justify-between"},cu={class:"font-semibold text-gray-900 dark:text-gray-100"},xu={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},fu={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"},bu={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"},vu={class:"flex items-center justify-between"},ku={class:"font-semibold text-gray-900 dark:text-gray-100"},hu={class:"mt-2 flex items-center justify-between"},wu={class:"font-semibold text-gray-900 dark:text-gray-100"},$u={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Au={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},Cu={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},Uu={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},Iu={class:"flex items-center justify-between"},Tu={class:"font-semibold text-gray-900 dark:text-gray-100"},Ku={class:"flex items-center justify-between"},_u={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"},Mu={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},Su={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},Pu={class:"flex items-center justify-between"},zu={class:"font-semibold text-gray-900 dark:text-gray-100"},Vu={class:"flex items-center justify-between"},ju={class:"font-semibold text-gray-900 dark:text-gray-100"},Ru={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Ou={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},Lu={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},Eu={class:"flex items-center justify-between"},Nu={class:"font-semibold text-gray-900 dark:text-gray-100"},qu={class:"flex items-center justify-between"},Wu={class:"font-semibold text-gray-900 dark:text-gray-100"},Fu={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Gu={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"},Qu={class:"mb-4 flex flex-wrap items-center justify-between gap-2"},Bu={class:"text-xs text-gray-400 dark:text-gray-500"},Hu={class:"h-[260px] sm:h-[300px]"},Ju={__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(E,{emit:we}){const g=E,ge=we,_=Ps(),{isDarkMode:N}=Ds(_),O=I(null);let A=null;const $={claude:"Claude","claude-console":"Claude Console",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini",droid:"Droid"},h=pe(()=>{var j;return $[(j=g.account)==null?void 0:j.platform]||"未知平台"}),z=pe(()=>{var j;return(j=g.account)!=null&&j.accountType?g.account.accountType==="dedicated"?"专属":g.account.accountType==="group"?"分组":"共享":"共享"}),B=pe(()=>({text:N.value?"#e5e7eb":"#374151",grid:N.value?"rgba(75, 85, 99, 0.25)":"rgba(209, 213, 219, 0.4)",cost:"#3b82f6",costFill:"rgba(59, 130, 246, 0.15)",requests:"#f97316"})),Y=pe(()=>{var j;return((j=g.summary)==null?void 0:j.totalTokens)||0}),ee=pe(()=>{var j,u;return((u=(j=g.overview)==null?void 0:j.total)==null?void 0:u.inputTokens)||0}),J=pe(()=>{var j,u;return((u=(j=g.overview)==null?void 0:j.total)==null?void 0:u.outputTokens)||0}),X=j=>{const u=Number(j||0);return u>=1e6?`${(u/1e6).toFixed(2)}M`:u>=1e3?`${(u/1e3).toFixed(2)}K`:u.toLocaleString()},G=j=>{const u=Number(j||0);return Number.isNaN(u)?"$0.000000":u>=1?`$${u.toFixed(2)}`:u>=.01?`$${u.toFixed(3)}`:`$${u.toFixed(6)}`},k=j=>Math.round((Number(j)||0)*100)/100,m=j=>{if(!j)return"-";const u=new Date(j);if(Number.isNaN(u.getTime())){const s=j.split("-");return s.length===3?`${s[1]}-${s[2]}`:j}const W=String(u.getMonth()+1).padStart(2,"0"),te=String(u.getDate()).padStart(2,"0");return`${W}-${te}`},T=j=>{if(!j)return"暂无";const u=new Date(j);return Number.isNaN(u.getTime())?j:`${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")}`},Z=(j,u)=>{if(!j)return 0;const W=g.history.find(te=>te.date===j);return W&&W[u]||0},L=pe(()=>{var j,u;return g.generatedAt||((j=g.summary)==null?void 0:j.generatedAt)||((u=g.summary)==null?void 0:u.generated_at)||""}),U=pe(()=>{var j,u,W,te,s,be,fe,Te;return[{key:"totalCost",label:"30天总费用",value:((j=g.summary)==null?void 0:j.totalCostFormatted)||"$0.000000",subtitle:"累计成本",icon:"fa-file-invoice-dollar",iconClass:"text-emerald-500"},{key:"totalRequests",label:"30天总请求",value:X(((u=g.summary)==null?void 0:u.totalRequests)||0),subtitle:"调用次数",icon:"fa-paper-plane",iconClass:"text-blue-500"},{key:"avgCost",label:"日均费用",value:((W=g.summary)==null?void 0:W.avgDailyCostFormatted)||G(((te=g.summary)==null?void 0:te.avgDailyCost)||0),subtitle:(s=g.summary)!=null&&s.actualDaysUsed&&((be=g.summary)==null?void 0:be.actualDaysUsed)<((fe=g.summary)==null?void 0:fe.days)?`基于 ${g.summary.actualDaysUsed} 天实际使用`:"平均每日成本",icon:"fa-wave-square",iconClass:"text-purple-500"},{key:"avgRequests",label:"日均请求",value:X(k(((Te=g.summary)==null?void 0:Te.avgDailyRequests)||0)),subtitle:"平均每日调用",icon:"fa-chart-line",iconClass:"text-orange-500"}]}),R=async()=>{if(await Ms(),!g.show||!O.value)return;if(A&&A.destroy(),!g.history||g.history.length===0){A=null;return}const j=g.history.map(te=>te.label),u=g.history.map(te=>te.cost||0),W=g.history.map(te=>te.requests||0);A=new zs(O.value,{type:"line",data:{labels:j,datasets:[{label:"费用 (USD)",data:u,borderColor:B.value.cost,backgroundColor:B.value.costFill,tension:.35,fill:!0,yAxisID:"y"},{label:"请求次数",data:W,borderColor:B.value.requests,backgroundColor:"transparent",tension:.35,yAxisID:"y1"}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{labels:{color:B.value.text}},tooltip:{callbacks:{label(te){return te.dataset.label==="费用 (USD)"?`${te.dataset.label}: ${G(te.parsed.y)}`:`${te.dataset.label}: ${X(te.parsed.y)} 次`}}}},scales:{x:{ticks:{color:B.value.text},grid:{color:B.value.grid}},y:{position:"left",ticks:{color:B.value.text,callback:te=>G(te)},grid:{color:B.value.grid}},y1:{position:"right",ticks:{color:B.value.text,callback:te=>X(te)},grid:{drawOnChartArea:!1}}}}})},Ce=()=>{A&&(A.destroy(),A=null)},De=()=>{Ce(),ge("close")};return le(()=>g.show,j=>{j&&!g.loading?R():j||Ce()}),le(()=>g.loading,j=>{!j&&g.show&&R()}),le(()=>g.history,()=>{g.show&&!g.loading&&R()},{deep:!0}),le(N,()=>{g.show&&!g.loading&&R()}),hs(()=>{Ce()}),(j,u)=>{var W,te,s,be,fe,Te,$e,Ze,Ve,qe,yt,ct,xt,C,Je,We,je,Re,ft,st,Xe,Ye,bt,Oe,c,y,D,Me,$t,At,Pe,he,at,rt,et,Ke,vt,Qe,tt,ut,Fe;return n(),Ge(qt,{to:"body"},[E.show?(n(),i("div",j0,[e("div",{class:"absolute inset-0",onClick:De}),e("div",R0,[e("div",O0,[e("div",L0,[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",E0,[e("div",N0,[e("h3",q0,p(((W=E.account)==null?void 0:W.name)||((te=E.account)==null?void 0:te.email)||"账号使用详情"),1),(s=E.account)!=null&&s.platform?(n(),i("span",W0,[u[0]||(u[0]=e("i",{class:"fas fa-layer-group mr-1"},null,-1)),w(p(h.value),1)])):x("",!0),(be=E.account)!=null&&be.accountType?(n(),i("span",F0,[u[1]||(u[1]=e("i",{class:"fas fa-user-tag mr-1"},null,-1)),w(p(z.value),1)])):x("",!0)]),e("p",G0,[w(" 近 "+p(((fe=E.summary)==null?void 0:fe.days)||30)+" 天内的费用与请求趋势 ",1),(Te=E.summary)!=null&&Te.actualDaysUsed&&(($e=E.summary)==null?void 0:$e.actualDaysUsed)<((Ze=E.summary)==null?void 0:Ze.days)?(n(),i("span",Q0," (日均基于实际使用 "+p(E.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:De},u[3]||(u[3]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",B0,[E.loading?(n(),i("div",H0,u[4]||(u[4]=[e("div",{class:"loading-spinner h-12 w-12 border-4 border-blue-500"},null,-1)]))):(n(),i(xe,{key:1},[e("div",J0,[(n(!0),i(xe,null,Ie(U.value,Be=>(n(),i("div",{key:Be.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",Y0,[e("div",null,[e("p",Z0,p(Be.label),1),e("p",X0,p(Be.value),1),e("p",eu,p(Be.subtitle),1)]),e("div",tu,[e("i",{class:K(["fas",Be.icon,Be.iconClass])},null,2)])])]))),128))]),e("div",su,[e("div",au,[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"}),w(" 今日概览 ")],-1)),e("div",ru,[e("div",lu,[u[5]||(u[5]=e("span",null,"费用",-1)),e("span",ou,p(((qe=(Ve=E.summary)==null?void 0:Ve.today)==null?void 0:qe.costFormatted)||"$0.000000"),1)]),e("div",nu,[u[6]||(u[6]=e("span",null,"请求",-1)),e("span",iu,p(X(((ct=(yt=E.summary)==null?void 0:yt.today)==null?void 0:ct.requests)||0)),1)]),e("div",du,[u[7]||(u[7]=e("span",null,"Tokens",-1)),e("span",null,p(X(((C=(xt=E.summary)==null?void 0:xt.today)==null?void 0:C.tokens)||0)),1)])])]),e("div",uu,[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"}),w(" 最高费用日 ")],-1)),e("div",pu,[e("div",gu,[u[9]||(u[9]=e("span",null,"日期",-1)),e("span",mu,p(m((We=(Je=E.summary)==null?void 0:Je.highestCostDay)==null?void 0:We.date)),1)]),e("div",yu,[u[10]||(u[10]=e("span",null,"费用",-1)),e("span",cu,p(((Re=(je=E.summary)==null?void 0:je.highestCostDay)==null?void 0:Re.formattedCost)||"$0.000000"),1)]),e("div",xu,[u[11]||(u[11]=e("span",null,"请求",-1)),e("span",null,p(X(Z((st=(ft=E.summary)==null?void 0:ft.highestCostDay)==null?void 0:st.date,"requests"))),1)])])]),e("div",fu,[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"}),w(" 最高请求日 ")],-1)),e("div",bu,[e("div",vu,[u[13]||(u[13]=e("span",null,"日期",-1)),e("span",ku,p(m((Ye=(Xe=E.summary)==null?void 0:Xe.highestRequestDay)==null?void 0:Ye.date)),1)]),e("div",hu,[u[14]||(u[14]=e("span",null,"请求",-1)),e("span",wu,p(X(((Oe=(bt=E.summary)==null?void 0:bt.highestRequestDay)==null?void 0:Oe.requests)||0)),1)]),e("div",$u,[u[15]||(u[15]=e("span",null,"费用",-1)),e("span",null,p(G(Z((y=(c=E.summary)==null?void 0:c.highestRequestDay)==null?void 0:y.date,"cost"))),1)])])])]),e("div",Au,[e("div",Cu,[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"}),w(" 累计 Token ")],-1)),e("div",Uu,[e("div",Iu,[u[17]||(u[17]=e("span",null,"30天总计",-1)),e("span",Tu,p(X(Y.value)),1)]),e("div",Ku,[u[18]||(u[18]=e("span",null,"日均 Token",-1)),e("span",_u,p(X(Math.round(((D=E.summary)==null?void 0:D.avgDailyTokens)||0))),1)]),e("div",Du,[u[19]||(u[19]=e("span",null,"输入 / 输出",-1)),e("span",null,p(X(ee.value))+" / "+p(X(J.value)),1)])])]),e("div",Mu,[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"}),w(" 平均速率 ")],-1)),e("div",Su,[e("div",Pu,[u[21]||(u[21]=e("span",null,"RPM",-1)),e("span",zu,p((($t=(Me=E.overview)==null?void 0:Me.averages)==null?void 0:$t.rpm)??0),1)]),e("div",Vu,[u[22]||(u[22]=e("span",null,"TPM",-1)),e("span",ju,p(((Pe=(At=E.overview)==null?void 0:At.averages)==null?void 0:Pe.tpm)??0),1)]),e("div",Ru,[u[23]||(u[23]=e("span",null,"日均请求 / Token",-1)),e("span",null,p(X(Math.round((((at=(he=E.overview)==null?void 0:he.averages)==null?void 0:at.dailyRequests)||0)*100)/100))+" / "+p(X(Math.round((((et=(rt=E.overview)==null?void 0:rt.averages)==null?void 0:et.dailyTokens)||0)*100)/100)),1)])])]),e("div",Ou,[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"}),w(" 最近统计 ")],-1)),e("div",Lu,[e("div",Eu,[u[25]||(u[25]=e("span",null,"今日请求",-1)),e("span",Nu,p(X(((vt=(Ke=E.overview)==null?void 0:Ke.daily)==null?void 0:vt.requests)||0)),1)]),e("div",qu,[u[26]||(u[26]=e("span",null,"今日 Token",-1)),e("span",Wu,p(X(((tt=(Qe=E.overview)==null?void 0:Qe.daily)==null?void 0:tt.allTokens)||0)),1)]),e("div",Fu,[u[27]||(u[27]=e("span",null,"今日费用",-1)),e("span",null,p(G(((Fe=(ut=E.overview)==null?void 0:ut.daily)==null?void 0:Fe.cost)||0)),1)])])])]),e("div",Gu,[e("div",Qu,[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"}),w(" 30天费用与请求趋势 ")],-1)),e("span",Bu," 最新更新时间:"+p(T(L.value)),1)]),e("div",Hu,[e("canvas",{ref_key:"chartCanvas",ref:O,class:"h-full w-full"},null,512)])])],64))])])])):x("",!0)])}}},Yu=Wt(Ju,[["__scopeId","data-v-cb1d85aa"]]),Zu={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Xu={class:"modal-content relative mx-auto w-full max-w-lg p-8"},ep={class:"mb-6 flex items-center justify-between"},tp={class:"flex items-center gap-3"},sp={class:"text-sm text-gray-600 dark:text-gray-400"},ap={class:"space-y-6"},rp={class:"rounded-lg border border-gray-200 bg-gradient-to-r from-gray-50 to-gray-100 p-4 dark:border-gray-600 dark:from-gray-700 dark:to-gray-800"},lp={class:"flex items-center justify-between"},op={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},np={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},ip={class:"mb-3 grid grid-cols-3 gap-2"},dp=["onClick"],up={key:0,class:"animate-fadeIn"},pp=["min"],gp={key:1,class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20"},mp={class:"flex items-center justify-between"},yp={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},cp={class:"flex gap-3 pt-2"},xp=["disabled"],fp={key:0,class:"loading-spinner mr-2"},bp={key:1,class:"fas fa-save mr-2"},vp={__name:"AccountExpiryEditModal",props:{show:{type:Boolean,required:!0},account:{type:Object,required:!0}},emits:["close","save"],setup(E,{expose:we,emit:g}){const ge=E,_=g,N=I(!1),O=Ss({expireDuration:"",customExpireDate:"",expiresAt:null}),A=[{value:"",label:"永不过期"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],$=pe(()=>{const k=new Date;return k.setMinutes(k.getMinutes()+1),k.toISOString().slice(0,16)});le(()=>ge.show,k=>{k&&h()}),le(()=>{var k;return(k=ge.account)==null?void 0:k.id},k=>{k&&ge.show&&h()});const h=()=>{N.value=!1,ge.account.expiresAt?(O.expireDuration="custom",O.customExpireDate=new Date(ge.account.expiresAt).toISOString().slice(0,16),O.expiresAt=ge.account.expiresAt):(O.expireDuration="",O.customExpireDate="",O.expiresAt=null)},z=k=>{if(O.expireDuration=k,!k){O.expiresAt=null;return}if(k==="custom")return;const m=new Date,T=k.match(/(\d+)([dhmy])/);if(T){const[,Z,L]=T,U=parseInt(Z);switch(L){case"d":m.setDate(m.getDate()+U);break;case"h":m.setHours(m.getHours()+U);break;case"m":m.setMonth(m.getMonth()+U);break;case"y":m.setFullYear(m.getFullYear()+U);break}O.expiresAt=m.toISOString()}},B=()=>{O.customExpireDate&&(O.expiresAt=new Date(O.customExpireDate).toISOString())},Y=k=>k?new Date(k).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",ee=k=>k?new Date(k){if(!k)return null;const m=new Date,Z=new Date(k)-m,L=Math.ceil(Z/(1e3*60*60*24));return Z<0?{text:"已过期",class:"text-red-600"}:L<=7?{text:`${L} 天后过期`,class:"text-orange-600"}:L<=30?{text:`${L} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(L/30)} 个月后过期`,class:"text-green-600"}},X=()=>{N.value=!0,_("save",{accountId:ge.account.id,expiresAt:O.expiresAt})};return we({resetSaving:()=>{N.value=!1}}),(k,m)=>(n(),Ge(qt,{to:"body"},[E.show?(n(),i("div",Zu,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:m[0]||(m[0]=T=>k.$emit("close"))}),e("div",Xu,[e("div",ep,[e("div",tp,[m[6]||(m[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600"},[e("i",{class:"fas fa-clock text-white"})],-1)),e("div",null,[m[5]||(m[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改到期时间",-1)),e("p",sp,' 为 "'+p(E.account.name||"Account")+'" 设置新的到期时间 ',1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:m[1]||(m[1]=T=>k.$emit("close"))},m[7]||(m[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",ap,[e("div",rp,[e("div",lp,[e("div",null,[m[10]||(m[10]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",op,[E.account.expiresAt?(n(),i(xe,{key:0},[w(p(Y(E.account.expiresAt))+" ",1),J(E.account.expiresAt)?(n(),i("span",{key:0,class:K(["ml-2 text-xs font-normal",J(E.account.expiresAt).class])}," ("+p(J(E.account.expiresAt).text)+") ",3)):x("",!0)],64)):(n(),i(xe,{key:1},[m[8]||(m[8]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),m[9]||(m[9]=w(" 永不过期 ",-1))],64))])]),e("div",np,[e("i",{class:K(["fas fa-hourglass-half text-lg",E.account.expiresAt&&ee(E.account.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),e("div",null,[m[12]||(m[12]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",ip,[(n(),i(xe,null,Ie(A,T=>e("button",{key:T.value,class:K(["rounded-lg px-3 py-2 text-sm font-medium transition-all",O.expireDuration===T.value?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:Z=>z(T.value)},p(T.label),11,dp)),64)),e("button",{class:K(["rounded-lg px-3 py-2 text-sm font-medium transition-all",O.expireDuration==="custom"?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:m[2]||(m[2]=T=>z("custom"))},m[11]||(m[11]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),w(" 自定义 ",-1)]),2)])]),O.expireDuration==="custom"?(n(),i("div",up,[m[13]||(m[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),b(e("input",{"onUpdate:modelValue":m[3]||(m[3]=T=>O.customExpireDate=T),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:$.value,type:"datetime-local",onChange:B},null,40,pp),[[M,O.customExpireDate]]),m[14]||(m[14]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为到期时间 ",-1))])):x("",!0),O.expiresAt!==E.account.expiresAt?(n(),i("div",gp,[e("div",mp,[e("div",null,[m[17]||(m[17]=e("p",{class:"mb-1 text-xs font-medium text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-arrow-right mr-1"}),w(" 新的到期时间 ")],-1)),e("p",yp,[O.expiresAt?(n(),i(xe,{key:0},[w(p(Y(O.expiresAt))+" ",1),J(O.expiresAt)?(n(),i("span",{key:0,class:K(["ml-2 text-xs font-normal",J(O.expiresAt).class])}," ("+p(J(O.expiresAt).text)+") ",3)):x("",!0)],64)):(n(),i(xe,{key:1},[m[15]||(m[15]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),m[16]||(m[16]=w(" 永不过期 ",-1))],64))])]),m[18]||(m[18]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},[e("i",{class:"fas fa-check text-lg text-green-500"})],-1))])])):x("",!0),e("div",cp,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:m[4]||(m[4]=T=>k.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:N.value||O.expiresAt===E.account.expiresAt,onClick:X},[N.value?(n(),i("div",fp)):(n(),i("i",bp)),w(" "+p(N.value?"保存中...":"保存更改"),1)],8,xp)])])])])):x("",!0)]))}},kp=Wt(vp,[["__scopeId","data-v-f6e6808f"]]),hp={class:"accounts-container"},wp={class:"card p-4 sm:p-6"},$p={class:"mb-4 flex flex-col gap-4 sm:mb-6"},Ap={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Cp={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},Up={class:"group relative min-w-[160px]"},Ip={class:"group relative min-w-[140px]"},Tp={class:"group relative min-w-[160px]"},Kp={class:"group relative min-w-[200px]"},_p={class:"relative flex items-center"},Dp={class:"flex w-full flex-col gap-3 sm:w-auto sm:flex-row sm:items-center sm:gap-3"},Mp={class:"relative"},Sp=["disabled"],Pp={class:"relative"},zp={key:0,class:"py-12 text-center"},Vp={key:1,class:"py-12 text-center"},jp={key:2,class:"table-container hidden md:block"},Rp={class:"w-full table-fixed"},Op={class:"bg-gray-50/80 backdrop-blur-sm dark:bg-gray-700/80"},Lp={key:0,class:"w-[50px] px-3 py-4 text-left"},Ep={class:"flex items-center"},Np=["indeterminate"],qp={key:1,class:"fas fa-sort ml-1 text-gray-400"},Wp={key:1,class:"fas fa-sort ml-1 text-gray-400"},Fp={key:1,class:"fas fa-sort ml-1 text-gray-400"},Gp={key:1,class:"fas fa-sort ml-1 text-gray-400"},Qp={key:1,class:"fas fa-sort ml-1 text-gray-400"},Bp={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"},Hp={class:"flex items-center gap-2"},Jp={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Yp={key:0,class:"px-3 py-3"},Zp={class:"flex items-center"},Xp=["value"],eg={class:"px-3 py-4"},tg={class:"flex items-center"},sg={class:"min-w-0"},ag={class:"flex items-center gap-2"},rg=["title"],lg={key:0,class:"inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-800"},og={key:1,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800"},ng={key:2,class:"inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800"},ig={key:0,class:"my-2 flex flex-wrap items-center gap-2"},dg=["title"],ug=["title"],pg={class:"px-3 py-4"},gg={class:"flex items-center gap-1"},mg={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"},yg={class:"text-xs font-medium text-yellow-700"},cg={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"},xg={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"},fg={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"},bg={class:"text-xs font-medium text-gray-950"},vg={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"},kg={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"},hg={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"},wg={class:"text-xs font-semibold text-indigo-800"},$g={class:"text-xs font-medium text-indigo-700"},Ag={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"},Cg={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"},Ug={class:"text-xs font-medium text-cyan-700 dark:text-cyan-300"},Ig={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"},Tg={class:"whitespace-nowrap px-3 py-4"},Kg={class:"flex flex-col gap-1"},_g={key:0},Dg=["onClick"],Mg=["onClick"],Sg=["onClick"],Pg=["onClick"],zg={class:"whitespace-nowrap px-3 py-4"},Vg={class:"flex flex-col gap-1"},jg={key:0,class:"inline-flex items-center rounded-full bg-yellow-100 px-3 py-1 text-xs font-semibold text-yellow-800"},Rg={key:0},Og={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-3 py-1 text-xs font-semibold text-gray-700"},Lg=["title"],Eg={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},Ng={class:"whitespace-nowrap px-3 py-4"},qg={key:0,class:"flex items-center gap-2"},Wg={class:"h-2 w-16 rounded-full bg-gray-200"},Fg={class:"min-w-[20px] text-xs font-medium text-gray-700 dark:text-gray-200"},Gg={key:1,class:"text-sm text-gray-400"},Qg={class:"px-3 py-4 text-sm text-gray-600"},Bg=["title"],Hg={key:1,class:"text-gray-400"},Jg={class:"whitespace-nowrap px-3 py-4 text-sm"},Yg={key:0,class:"space-y-1"},Zg={class:"flex items-center gap-2"},Xg={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},em={class:"flex items-center gap-2"},tm={class:"text-xs text-gray-600 dark:text-gray-300"},sm={class:"flex items-center gap-2"},am={class:"text-xs text-gray-600 dark:text-gray-300"},rm={key:0,class:"text-xs text-gray-500 dark:text-gray-400"},lm={key:1,class:"text-xs text-gray-400"},om={class:"whitespace-nowrap px-3 py-4"},nm={key:0,class:"space-y-2"},im={key:0,class:"space-y-2"},dm={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},um={class:"flex items-center gap-2"},pm={class:"flex-1"},gm={class:"flex items-center gap-2"},mm={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},ym={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},cm={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},xm={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},fm={class:"flex items-center gap-2"},bm={class:"flex-1"},vm={class:"flex items-center gap-2"},km={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},hm={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},wm={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},$m={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Am={class:"flex items-center gap-2"},Cm={class:"flex-1"},Um={class:"flex items-center gap-2"},Im={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Tm={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Km={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},_m={key:1,class:"space-y-2"},Dm={key:0,class:"flex items-center gap-3 text-xs"},Mm={class:"flex items-center gap-1"},Sm={class:"font-medium text-gray-900 dark:text-gray-100"},Pm={class:"flex items-center gap-1"},zm={class:"font-medium text-gray-900 dark:text-gray-100"},Vm={class:"flex items-center gap-2"},jm={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},Rm={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},Om={class:"text-xs text-gray-600 dark:text-gray-400"},Lm={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},Em={key:2,class:"text-xs text-gray-400"},Nm={key:1,class:"space-y-2"},qm={key:0},Wm={class:"flex items-center justify-between text-xs"},Fm={class:"font-medium text-gray-700 dark:text-gray-200"},Gm={class:"flex items-center gap-2"},Qm={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},Bm={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},Hm={class:"text-xs text-gray-600 dark:text-gray-400"},Jm={class:"ml-2 text-gray-400"},Ym={key:1,class:"text-sm text-gray-400"},Zm={key:2,class:"space-y-2"},Xm={key:0,class:"space-y-2"},ey={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},ty={class:"flex items-center gap-2"},sy={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"},ay={class:"flex-1"},ry={class:"flex items-center gap-2"},ly={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},oy={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},ny={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},iy={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},dy={class:"flex items-center gap-2"},uy={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"},py={class:"flex-1"},gy={class:"flex items-center gap-2"},my={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},yy={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},cy={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},xy={key:1,class:"text-sm text-gray-400"},fy={key:3,class:"text-sm text-gray-400"},by={class:"whitespace-nowrap px-3 py-4 text-sm text-gray-600 dark:text-gray-300"},vy={class:"whitespace-nowrap px-3 py-4 text-sm font-medium"},ky={class:"flex flex-wrap items-center gap-1"},hy=["disabled","title","onClick"],wy=["disabled","title","onClick"],$y={class:"ml-1"},Ay=["onClick"],Cy=["onClick"],Uy=["onClick"],Iy={key:3,class:"space-y-3 md:hidden"},Ty={class:"mb-3 flex items-start justify-between"},Ky={class:"flex items-center gap-3"},_y=["value"],Dy={class:"text-sm font-semibold text-gray-900"},My={class:"mt-0.5 flex items-center gap-2"},Sy={class:"text-xs text-gray-500 dark:text-gray-400"},Py={class:"text-xs text-gray-500 dark:text-gray-400"},zy={class:"mb-3 grid grid-cols-2 gap-3"},Vy={class:"space-y-1"},jy={class:"flex items-center gap-1.5"},Ry={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Oy={class:"flex items-center gap-1.5"},Ly={class:"text-xs text-gray-600 dark:text-gray-400"},Ey={class:"flex items-center gap-1.5"},Ny={class:"text-xs text-gray-600 dark:text-gray-400"},qy={key:0,class:"space-y-1"},Wy={class:"flex items-center gap-1.5"},Fy={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Gy={class:"flex items-center gap-1.5"},Qy={class:"text-xs text-gray-600 dark:text-gray-400"},By={key:1,class:"text-sm font-semibold text-gray-400"},Hy={class:"mb-3 space-y-2"},Jy={key:0,class:"space-y-2"},Yy={key:0,class:"space-y-2"},Zy={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Xy={class:"flex items-center gap-2"},ec={class:"flex-1"},tc={class:"flex items-center gap-2"},sc={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},ac={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},rc={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},lc={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},oc={class:"flex items-center gap-2"},nc={class:"flex-1"},ic={class:"flex items-center gap-2"},dc={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},uc={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},pc={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},gc={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},mc={class:"flex items-center gap-2"},yc={class:"flex-1"},cc={class:"flex items-center gap-2"},xc={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},fc={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},bc={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},vc={key:1,class:"space-y-1.5 rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},kc={class:"flex items-center justify-between text-xs"},hc={class:"flex items-center gap-1"},wc={class:"font-medium text-gray-700 dark:text-gray-200"},$c={class:"h-2 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-600"},Ac={class:"flex items-center justify-between text-xs"},Cc={class:"text-gray-500 dark:text-gray-400"},Uc={key:0,class:"font-medium text-indigo-600"},Ic={key:1,class:"text-gray-500"},Tc={key:2,class:"text-xs text-gray-400"},Kc={key:1,class:"space-y-2"},_c={key:0,class:"space-y-2"},Dc={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Mc={class:"flex items-center gap-2"},Sc={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"},Pc={class:"flex-1"},zc={class:"flex items-center gap-2"},Vc={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},jc={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Rc={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Oc={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Lc={class:"flex items-center gap-2"},Ec={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"},Nc={class:"flex-1"},qc={class:"flex items-center gap-2"},Wc={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Fc={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Gc={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Qc={key:1,class:"text-xs text-gray-400"},Bc={class:"flex items-center justify-between text-xs"},Hc={class:"text-gray-700 dark:text-gray-200"},Jc={key:2,class:"flex items-center justify-between text-xs"},Yc={class:"text-gray-700 dark:text-gray-200"},Zc={class:"flex items-center justify-between text-xs"},Xc={class:"font-medium text-gray-700 dark:text-gray-200"},ex={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3"},tx=["disabled","onClick"],sx=["onClick"],ax=["onClick"],rx=["onClick"],lx={key:0,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},ox={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},nx={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},ix={class:"flex items-center gap-2"},dx=["value"],ux={class:"flex items-center gap-2"},px=["disabled"],gx={class:"flex items-center gap-1"},mx={key:1,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},yx=["onClick"],cx={key:2,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},xx=["disabled"],ks="accountsPageSize",fx={__name:"AccountsView",setup(E){const{showConfirmModal:we,confirmOptions:g,showConfirm:ge,handleConfirm:_,handleCancel:N}=$s(),O=I([]),A=I(!1),$=I("name"),h=I(""),z=I("asc"),B=I([]),Y=I([]),ee=I("all"),J=I("all"),X=I(""),G=()=>{const r=localStorage.getItem(ks);if(r){const a=parseInt(r,10);if([10,20,50,100].includes(a))return a}return 10},k=[10,20,50,100],m=I(G()),T=I(1),Z=I([]),L=I(!1),U=I(!1),R=I(!1),Ce=I(!1),De=I(!1),j=I(null),u=I([]),W=I({}),te=I({}),s=I(""),be=["claude","claude-console","openai","openai-responses","gemini","droid"],fe=I(null),Te=I(null),$e=I(!1),Ze=I(!1),Ve=I(!1),qe=I(new Map),yt=I([{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"}]),ct=I([{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"}]),xt=pe(()=>{const r=[{value:"all",label:"所有账户",icon:"fa-globe"},{value:"ungrouped",label:"未分组账户",icon:"fa-user"}];return Y.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}),C=pe(()=>R.value),Je=I(!1),We=I(null),je=I(!1),Re=I(null),ft=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 S=l.trim();S&&a.add(S)}}),Array.isArray(r==null?void 0:r.groupInfos)&&r.groupInfos.forEach(l=>{if(l&&typeof l.name=="string"){const S=l.name.trim();S&&a.add(S)}}),Object.entries(r||{}).forEach(([l,S])=>{if(typeof S=="string"){const ae=l.toLowerCase();if(ae.includes("name")||ae.includes("email")){const ue=S.trim();ue&&a.add(ue)}}}),Array.from(a)},st=(r,a)=>a?ft(r).some(v=>v.toLowerCase().includes(a)):!0,Xe=r=>!!r&&be.includes(r.platform),Ye=async r=>{if(!Xe(r)){P("该账户类型暂不支持查看详情","warning");return}j.value=r,Ce.value=!0,De.value=!0,u.value=[],W.value={},te.value={},s.value="";try{const a=await V.get(`/admin/accounts/${r.id}/usage-history?platform=${r.platform}&days=30`);if(a.success){const v=a.data||{};u.value=v.history||[],W.value=v.summary||{},te.value=v.overview||{},s.value=v.generatedAt||""}else P(a.error||"加载账号使用详情失败","error")}catch{P("加载账号使用详情失败","error")}finally{De.value=!1}},bt=()=>{Ce.value=!1,De.value=!1,j.value=null},Oe=pe(()=>{let r=O.value;const a=X.value.trim();if(a){const l=a.toLowerCase();r=r.filter(S=>st(S,l))}return h.value?[...r].sort((l,S)=>{var ne,Ue,it,ie,ze,_e,dt,oe,ye,Le,Ee,xs;let ae=l[h.value],ue=S[h.value];return h.value==="dailyTokens"?(ae=((Ue=(ne=l.usage)==null?void 0:ne.daily)==null?void 0:Ue.allTokens)||0,ue=((ie=(it=S.usage)==null?void 0:it.daily)==null?void 0:ie.allTokens)||0):h.value==="dailyRequests"?(ae=((_e=(ze=l.usage)==null?void 0:ze.daily)==null?void 0:_e.requests)||0,ue=((oe=(dt=S.usage)==null?void 0:dt.daily)==null?void 0:oe.requests)||0):h.value==="totalTokens"&&(ae=((Le=(ye=l.usage)==null?void 0:ye.total)==null?void 0:Le.allTokens)||0,ue=((xs=(Ee=S.usage)==null?void 0:Ee.total)==null?void 0:xs.allTokens)||0),h.value==="lastUsed"&&(ae=l.lastUsedAt?new Date(l.lastUsedAt).getTime():0,ue=S.lastUsedAt?new Date(S.lastUsedAt).getTime():0),h.value==="status"&&(ae=l.isActive?1:0,ue=S.isActive?1:0),aeue?z.value==="asc"?1:-1:0}):r}),c=pe(()=>{const r=Oe.value.length;return Math.ceil(r/m.value)||0}),y=pe(()=>{const r=c.value,a=T.value,v=[];if(r<=7)for(let l=1;l<=r;l++)v.push(l);else{let l=Math.max(1,a-2),S=Math.min(r,a+2);a<=3?S=5:a>=r-2&&(l=r-4);for(let ae=l;ae<=S;ae++)v.push(ae)}return v}),D=pe(()=>{const r=y.value;return r.length===0?!1:r[0]>1}),Me=pe(()=>{const r=y.value;return r.length===0?!1:r[r.length-1]{const r=y.value;return r.length===0?!1:D.value&&r[0]>2}),At=pe(()=>{const r=y.value;return r.length===0?!1:Me.value&&r[r.length-1]{const r=(T.value-1)*m.value,a=r+m.value;return Oe.value.slice(r,a)}),he=()=>{const r=Pe.value.map(l=>l.id),a=r.filter(l=>Z.value.includes(l)).length,v=r.length;a===0?(L.value=!1,U.value=!1):a===v?(L.value=!0,U.value=!1):(L.value=!1,U.value=!0)},at=()=>{if(L.value)Pe.value.forEach(r=>{Z.value.includes(r.id)||Z.value.push(r.id)});else{const r=new Set(Pe.value.map(a=>a.id));Z.value=Z.value.filter(a=>!r.has(a))}he()},rt=()=>{R.value=!R.value,R.value?he():(Z.value=[],L.value=!1,U.value=!1)},et=()=>{const r=new Set(O.value.map(a=>a.id));Z.value=Z.value.filter(a=>r.has(a)),he()},Ke=async(r=!1)=>{A.value=!0;try{const a={};J.value!=="all"&&(a.platform=J.value),ee.value!=="all"&&(a.groupId=ee.value);const v=[];if(J.value==="all")v.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(J.value){case"claude":v.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":v.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":v.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":v.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":v.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":v.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":v.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":v.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":v.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:v.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([Be(r),Ft(r)]);const[l,S,ae,ue,ne,Ue,it,ie,ze]=await Promise.all(v),_e=[];if(l.success){const oe=(l.data||[]).map(ye=>{const Le=B.value.filter(Ee=>Ee.claudeAccountId===ye.id).length;return{...ye,platform:"claude",boundApiKeysCount:Le}});_e.push(...oe)}if(S.success){const oe=(S.data||[]).map(ye=>{const Le=B.value.filter(Ee=>Ee.claudeConsoleAccountId===ye.id).length;return{...ye,platform:"claude-console",boundApiKeysCount:Le}});_e.push(...oe)}if(ae.success){const oe=(ae.data||[]).map(ye=>({...ye,platform:"bedrock",boundApiKeysCount:0}));_e.push(...oe)}if(ue.success){const oe=(ue.data||[]).map(ye=>{const Le=B.value.filter(Ee=>Ee.geminiAccountId===ye.id).length;return{...ye,platform:"gemini",boundApiKeysCount:Le}});_e.push(...oe)}if(ne.success){const oe=(ne.data||[]).map(ye=>{const Le=B.value.filter(Ee=>Ee.openaiAccountId===ye.id).length;return{...ye,platform:"openai",boundApiKeysCount:Le}});_e.push(...oe)}if(Ue&&Ue.success){const oe=(Ue.data||[]).map(ye=>{const Le=B.value.filter(Ee=>Ee.azureOpenaiAccountId===ye.id).length;return{...ye,platform:"azure_openai",boundApiKeysCount:Le}});_e.push(...oe)}if(it&&it.success){const oe=(it.data||[]).map(ye=>{const Le=B.value.filter(Ee=>Ee.openaiAccountId===`responses:${ye.id}`).length;return{...ye,platform:"openai-responses",boundApiKeysCount:Le}});_e.push(...oe)}if(ie&&ie.success){const oe=(ie.data||[]).map(ye=>({...ye,platform:"ccr",boundApiKeysCount:0}));_e.push(...oe)}if(ze&&ze.success){const oe=(ze.data||[]).map(ye=>({...ye,platform:"droid",boundApiKeysCount:ye.boundApiKeysCount??0}));_e.push(...oe)}let dt=_e;ee.value!=="all"&&(ee.value==="ungrouped"?dt=_e.filter(oe=>!oe.groupInfos||oe.groupInfos.length===0):dt=_e.filter(oe=>!oe.groupInfos||oe.groupInfos.length===0?!1:oe.groupInfos.some(ye=>ye.id===ee.value))),dt=dt.map(oe=>{const ye=It(oe.proxyConfig||oe.proxy);return{...oe,proxyConfig:ye||null}}),O.value=dt,et(),dt.some(oe=>oe.platform==="claude")&&vt().catch(oe=>{console.debug("Claude usage loading failed:",oe)})}catch{P("加载账户失败","error")}finally{A.value=!1}},vt=async()=>{try{const r=await V.get("/admin/claude-accounts/usage");if(r.success&&r.data){const a=r.data;O.value=O.value.map(v=>v.platform==="claude"&&a[v.id]?{...v,claudeUsage:a[v.id]}:v)}}catch(r){console.debug("Failed to load Claude usage data:",r)}},Qe=r=>{r&&(h.value===r?z.value=z.value==="asc"?"desc":"asc":(h.value=r,z.value="asc"))},tt=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)},ut=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")},Fe=()=>{X.value="",T.value=1},Be=async(r=!1)=>{if(!(!r&&$e.value))try{const a=await V.get("/admin/api-keys");a.success&&(B.value=a.data||[],$e.value=!0)}catch{}},Ft=async(r=!1)=>{if(!(!r&&Ze.value))try{const a=await V.get("/admin/account-groups");a.success&&(Y.value=a.data||[],Ze.value=!0)}catch{}},Gt=()=>{$e.value=!1,Ze.value=!1,Ve.value=!1,qe.value.clear()},pt=()=>{T.value=1,Ke()},Qt=()=>{T.value=1,Ke()};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 v=a.proxy&&typeof a.proxy=="object"?a.proxy:a,l=typeof v.host=="string"?v.host.trim():v.host!==void 0&&v.host!==null?String(v.host).trim():"",S=v.port!==void 0&&v.port!==null?String(v.port).trim():"";if(!l||!S)return null;const ae=typeof v.type=="string"&&v.type.trim()?v.type.trim():"socks5",ue=typeof v.username=="string"?v.username:v.username!==void 0&&v.username!==null?String(v.username):"",ne=typeof v.password=="string"?v.password:v.password!==void 0&&v.password!==null?String(v.password):"";return{type:ae,host:l,port:S,username:ue,password:ne}}const Ct=r=>{const a=It(r);if(!a)return null;const v=a.type.toLowerCase()==="socks5"?"S5":a.type.toUpperCase();let l=a.host;l.length>15&&(l=l.substring(0,12)+"...");let S=`${v}://${l}:${a.port}`;return a.username&&(S=`${v}://***@${l}:${a.port}`),S},Tt=(r,a)=>{if(!r||!a)return"--";const v=new Date(r),l=new Date(a),S=v.getHours().toString().padStart(2,"0"),ae=v.getMinutes().toString().padStart(2,"0"),ue=l.getHours().toString().padStart(2,"0"),ne=l.getMinutes().toString().padStart(2,"0");return`${S}:${ae} - ${ue}:${ne}`},Kt=r=>{if(!r||r<=0)return"已结束";const a=Math.floor(r/60),v=r%60;return a>0?`${a}小时${v}分钟`:`${v}分钟`},Bt=r=>{if(!r||r<=0)return"";r=Math.floor(r);const a=Math.floor(r/1440),v=r%1440,l=Math.floor(v/60),S=v%60;return a>0?l>0?`${a}天${l}小时`:`${a}天`:l>0?S>0?`${l}小时${S}分钟`:`${l}小时`:`${S}分钟`},Ht=()=>{We.value=null,Je.value=!0},_t=()=>{Je.value=!1,We.value=null},Dt=r=>{Re.value=r,je.value=!0},Mt=r=>!r||!r.id?[]:B.value.filter(a=>{const v=r.id;return a.claudeAccountId===v||a.claudeConsoleAccountId===v||a.geminiAccountId===v||a.openaiAccountId===v||a.azureOpenaiAccountId===v||a.openaiAccountId===`responses:${v}`}),Jt=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}},St=async r=>{var v,l;const a=Jt(r);if(!a)return{success:!1,message:"不支持的账户类型"};try{const S=await V.delete(a);return S.success?{success:!0,data:S}:{success:!1,message:S.message||"删除失败"}}catch(S){return{success:!1,message:((l=(v=S.response)==null?void 0:v.data)==null?void 0:l.message)||S.message||"删除失败"}}},Pt=async r=>{const v=Mt(r).length;let l=`确定要删除账户 "${r.name}" 吗?`;if(v>0&&(l+=`
⚠️ 注意:此账号有 ${v} 个 API Key 绑定。`,l+=`
删除后,这些 API Key 将自动切换为共享池模式。`),l+=`
此操作不可恢复。`,!await ge("删除账户",l,"删除","取消"))return;const ae=await St(r);if(ae.success){const ue=ae.data;let ne="账户已成功删除";(ue==null?void 0:ue.unboundKeys)>0&&(ne+=`,${ue.unboundKeys} 个 API Key 已切换为共享池模式`),P(ne,"success"),Z.value=Z.value.filter(Ue=>Ue!==r.id),he(),Ve.value=!1,$e.value=!1,Ke(),Be(!0)}else P(ae.message||"删除失败","error")},Yt=async()=>{var it;if(Z.value.length===0){P("请先选择要删除的账户","warning");return}const r=new Map(O.value.map(ie=>[ie.id,ie])),a=Z.value.map(ie=>r.get(ie)).filter(ie=>!!ie);if(a.length===0){P("选中的账户已不存在","warning"),Z.value=[],he();return}let v=`确定要删除选中的 ${a.length} 个账户吗?此操作不可恢复。`;const l=a.map(ie=>({account:ie,boundKeys:Mt(ie)})).filter(ie=>ie.boundKeys.length>0);if(l.length>0&&(v+=`
⚠️ 以下账户存在绑定的 API Key,将自动解绑:`,l.forEach(({account:ie,boundKeys:ze})=>{const _e=ie.name||ie.email||ie.accountName||ie.id;v+=`
- ${_e}: ${ze.length} 个`}),v+=`
删除后,这些 API Key 将切换为共享池模式。`),v+=`
请再次确认是否继续。`,!await ge("批量删除账户",v,"删除","取消"))return;let ae=0,ue=0,ne=0;const Ue=[];for(const ie of a){const ze=await St(ie);ze.success?(ae+=1,ne+=((it=ze.data)==null?void 0:it.unboundKeys)||0):(ue+=1,Ue.push({name:ie.name||ie.email||ie.accountName||ie.id,message:ze.message||"删除失败"}))}if(ae>0){let ie=`成功删除 ${ae} 个账户`;ne>0&&(ie+=`,${ne} 个 API Key 已切换为共享池模式`),P(ie,ue>0?"warning":"success"),Z.value=[],L.value=!1,U.value=!1,Ve.value=!1,$e.value=!1,await Ke(!0)}if(ue>0){const ie=Ue.map(ze=>`${ze.name}: ${ze.message}`).join(`
`);P(`有 ${ue} 个账户删除失败:
${ie}`,ae>0?"warning":"error")}he()},Zt=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 v="";if(r.platform==="openai")v=`/admin/openai-accounts/${r.id}/reset-status`;else if(r.platform==="openai-responses")v=`/admin/openai-responses-accounts/${r.id}/reset-status`;else if(r.platform==="claude")v=`/admin/claude-accounts/${r.id}/reset-status`;else if(r.platform==="claude-console")v=`/admin/claude-console-accounts/${r.id}/reset-status`;else if(r.platform==="ccr")v=`/admin/ccr-accounts/${r.id}/reset-status`;else if(r.platform==="droid")v=`/admin/droid-accounts/${r.id}/reset-status`;else{P("不支持的账户类型","error"),r.isResetting=!1;return}const l=await V.post(v);l.success?(P("账户状态已重置","success"),Ke(!0)):P(l.message||"状态重置失败","error")}catch{P("状态重置失败","error")}finally{r.isResetting=!1}},zt=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{P("该账户类型暂不支持调度控制","warning");return}const v=await V.put(a);v.success?(r.schedulable=v.schedulable,P(v.schedulable?"已启用调度":"已禁用调度","success")):P(v.message||"操作失败","error")}catch{P("切换调度状态失败","error")}finally{r.isTogglingSchedulable=!1}},Vt=()=>{Je.value=!1,P("账户创建成功","success"),Gt(),Ke()},jt=()=>{je.value=!1,P("账户更新成功","success"),Ve.value=!1,Ke()},Xt=r=>!r.lastRefreshAt||r.lastRefreshAt===""?"Setup":"OAuth",es=()=>"OAuth",ts=()=>"OAuth",Rt=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 v=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 v=="string"&&v.trim().toLowerCase().replace(/[\s_-]/g,"")==="apikey"?"API Key":"OAuth"},ss=r=>Rt(r)==="API Key",Ot=r=>{if(!r||typeof r!="object")return 0;const a=[r.apiKeyCount,r.api_key_count,r.apiKeysCount,r.api_keys_count];for(const v of a){const l=Number(v);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 v=JSON.parse(r.apiKeys);if(Array.isArray(v))return v.length}catch{}return 0},as=r=>{const a=Ot(r),v="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?[v,"border-cyan-200 bg-cyan-50/90 text-cyan-700 dark:border-cyan-500/40 dark:bg-cyan-900/40 dark:text-cyan-200"]:[v,"border-rose-200 bg-rose-50/90 text-rose-600 dark:border-rose-500/40 dark:bg-rose-900/40 dark:text-rose-200"]},rs=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"},Lt=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:"手动停止调度"},ls=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?"已暂停":"正常",os=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",ns=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",is=r=>ut(r),Et=(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"},kt=r=>r.authType==="oauth",lt=r=>!r||r.utilization===null||r.utilization===void 0?"-":`${r.utilization}%`,ot=r=>!r||r.utilization===null||r.utilization===void 0?"0%":`${r.utilization}%`,nt=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"},d=r=>{if(!r||!r.remainingSeconds)return"-";const a=r.remainingSeconds,v=Math.floor(a/86400),l=Math.floor(a%86400/3600),S=Math.floor(a%3600/60);return v>0?l>0?`${v}天${l}小时`:`${v}天`:l>0?S>0?`${l}小时${S}分钟`:`${l}小时`:S>0?`${S}分钟`:`${Math.floor(a%60)}秒`},t=r=>{if(!r)return null;const a=typeof r.usedPercent=="number"&&!Number.isNaN(r.usedPercent)?r.usedPercent:null,v=typeof r.resetAfterSeconds=="number"&&!Number.isNaN(r.resetAfterSeconds)?r.resetAfterSeconds:null,l=typeof r.remainingSeconds=="number"?r.remainingSeconds:null,S=r.resetAt?Date.parse(r.resetAt):null;return v!==null&&(l!==null&&l<=0||S!==null&&!Number.isNaN(S)&&Date.now()>=S)?0:a===null?null:Math.max(0,Math.min(100,a))},o=r=>{const a=t(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"},q=r=>{const a=t(r);return a===null?"--":`${a.toFixed(1)}%`},re=r=>{const a=t(r);return a===null?"0%":`${a}%`},ve=r=>r==="secondary"?"周限":"5h",de=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 v=Math.floor(a/86400),l=Math.floor(a%86400/3600),S=Math.floor(a%3600/60),ae=a%60;return v>0?l>0?`${v}天${l}小时`:`${v}天`:l>0?S>0?`${l}小时${S}分钟`:`${l}小时`:S>0?`${S}分钟`:`${ae}秒`},Ae=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),F=r=>{var l,S;const a=Number(((S=(l=r==null?void 0:r.usage)==null?void 0:l.daily)==null?void 0:S.cost)||0),v=Number((r==null?void 0:r.dailyQuota)||0);return!v||v<=0?0:a/v*100},me=r=>r>=90?"bg-red-500":r>=70?"bg-yellow-500":"bg-green-500",f=r=>{var l,S;const a=Number(((S=(l=r==null?void 0:r.usage)==null?void 0:l.daily)==null?void 0:S.cost)||0),v=Number((r==null?void 0:r.dailyQuota)||0);return!v||v<=0?"0.00":Math.max(0,v-a).toFixed(2)},Q=r=>!r.usage||!r.usage.daily?"0.0000":r.usage.daily.cost!==void 0?Ae(r.usage.daily.cost):"0.0000";le(X,()=>{T.value=1,he()}),le(m,r=>{localStorage.setItem(ks,r.toString()),he()}),le(()=>Oe.value.length,()=>{T.value>c.value&&(T.value=c.value||1),he()}),le($,r=>{const a={name:"name",dailyTokens:"dailyTokens",dailyRequests:"dailyRequests",totalTokens:"totalTokens",lastUsed:"lastUsed"};a[r]&&Qe(a[r])}),le(T,()=>{he()}),le(Pe,()=>{he()}),le(O,()=>{et()});const H=r=>r?new Date(r).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit"}):"",se=r=>r?new Date(r){if(!r)return!1;const a=new Date,l=(new Date(r)-a)/(1e3*60*60*24);return l>0&&l<=7},gt=r=>{fe.value=r},cs=()=>{fe.value=null},Cs=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:throw new Error(`Unsupported platform: ${r.platform}`)}},Us=async({accountId:r,expiresAt:a})=>{try{const v=O.value.find(ae=>ae.id===r);if(!v){P("账户不存在","error"),Te.value&&Te.value.resetSaving();return}const l=Cs(v),S=await V.put(l,{expiresAt:a||null});S.success?(P("账户到期时间已更新","success"),v.expiresAt=a||null,cs()):(P(S.message||"更新失败","error"),Te.value&&Te.value.resetSaving())}catch(v){P(v.message||"更新失败","error"),Te.value&&Te.value.resetSaving()}};return ps(()=>{Ke(!0)}),(r,a)=>{const v=Is;return n(),i("div",hp,[e("div",wp,[e("div",$p,[a[36]||(a[36]=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",Ap,[e("div",Cp,[e("div",Up,[a[25]||(a[25]=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)),He(gs,{modelValue:$.value,"onUpdate:modelValue":a[0]||(a[0]=l=>$.value=l),icon:"fa-sort-amount-down","icon-color":"text-indigo-500",options:yt.value,placeholder:"选择排序",onChange:a[1]||(a[1]=l=>Qe())},null,8,["modelValue","options"])]),e("div",Ip,[a[26]||(a[26]=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)),He(gs,{modelValue:J.value,"onUpdate:modelValue":a[2]||(a[2]=l=>J.value=l),icon:"fa-server","icon-color":"text-blue-500",options:ct.value,placeholder:"选择平台",onChange:pt},null,8,["modelValue","options"])]),e("div",Tp,[a[27]||(a[27]=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)),He(gs,{modelValue:ee.value,"onUpdate:modelValue":a[3]||(a[3]=l=>ee.value=l),icon:"fa-layer-group","icon-color":"text-purple-500",options:xt.value,placeholder:"选择分组",onChange:Qt},null,8,["modelValue","options"])]),e("div",Kp,[a[30]||(a[30]=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",_p,[b(e("input",{"onUpdate:modelValue":a[4]||(a[4]=l=>X.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,X.value]]),a[29]||(a[29]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),X.value?(n(),i("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:Fe},a[28]||(a[28]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):x("",!0)])])]),e("div",Dp,[e("div",Mp,[He(v,{content:"刷新数据 (Ctrl/⌘+点击强制刷新所有缓存)",effect:"dark",placement:"bottom"},{default:Nt(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",disabled:A.value,onClick:[a[5]||(a[5]=mt(l=>Ke(!0),["ctrl","exact"])),a[6]||(a[6]=mt(l=>Ke(!1),["exact"])),a[7]||(a[7]=mt(l=>Ke(!0),["meta","exact"]))]},[a[31]||(a[31]=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:K(["fas relative text-green-500",A.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),a[32]||(a[32]=e("span",{class:"relative"},"刷新",-1))],8,Sp)]),_: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:rt},[e("i",{class:K(R.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,p(R.value?"取消选择":"选择"),1)]),Z.value.length>0?(n(),i("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:Yt},[a[33]||(a[33]=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[34]||(a[34]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",Pp,"删除选中 ("+p(Z.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:mt(Ht,["stop"])},a[35]||(a[35]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"添加账户",-1)]))])])]),A.value?(n(),i("div",zp,a[37]||(a[37]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载账户...",-1)]))):Oe.value.length===0?(n(),i("div",Vp,a[38]||(a[38]=[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(),i("div",jp,[e("table",Rp,[e("thead",Op,[e("tr",null,[C.value?(n(),i("th",Lp,[e("div",Ep,[b(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:at},null,40,Np),[[ke,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=>Qe("name"))},[a[39]||(a[39]=w(" 名称 ",-1)),h.value==="name"?(n(),i("i",{key:0,class:K(["fas",z.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),i("i",qp))]),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=>Qe("platform"))},[a[40]||(a[40]=w(" 平台/类型 ",-1)),h.value==="platform"?(n(),i("i",{key:0,class:K(["fas",z.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),i("i",Wp))]),e("th",{class:"w-[12%] min-w-[110px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[11]||(a[11]=l=>Qe("expiresAt"))},[a[41]||(a[41]=w(" 到期时间 ",-1)),h.value==="expiresAt"?(n(),i("i",{key:0,class:K(["fas",z.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),i("i",Fp))]),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[12]||(a[12]=l=>Qe("status"))},[a[42]||(a[42]=w(" 状态 ",-1)),h.value==="status"?(n(),i("i",{key:0,class:K(["fas",z.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),i("i",Gp))]),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[13]||(a[13]=l=>Qe("priority"))},[a[43]||(a[43]=w(" 优先级 ",-1)),h.value==="priority"?(n(),i("i",{key:0,class:K(["fas",z.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),i("i",Qp))]),a[47]||(a[47]=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[48]||(a[48]=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",Bp,[e("div",Hp,[a[46]||(a[46]=e("span",null,"会话窗口",-1)),He(v,{placement:"top"},{content:Nt(()=>a[44]||(a[44]=[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:Nt(()=>[a[45]||(a[45]=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,__:[45]})])]),a[49]||(a[49]=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[50]||(a[50]=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",Jp,[(n(!0),i(xe,null,Ie(Pe.value,l=>{var S,ae,ue;return n(),i("tr",{key:l.id,class:"table-row"},[C.value?(n(),i("td",Yp,[e("div",Zp,[b(e("input",{"onUpdate:modelValue":a[14]||(a[14]=ne=>Z.value=ne),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:he},null,40,Xp),[[ke,Z.value]])])])):x("",!0),e("td",eg,[e("div",tg,[a[55]||(a[55]=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",sg,[e("div",ag,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:l.name},p(l.name),9,rg),l.accountType==="dedicated"?(n(),i("span",lg,a[51]||(a[51]=[e("i",{class:"fas fa-lock mr-1"},null,-1),w("专属 ",-1)]))):l.accountType==="group"?(n(),i("span",og,a[52]||(a[52]=[e("i",{class:"fas fa-layer-group mr-1"},null,-1),w("分组调度 ",-1)]))):(n(),i("span",ng,a[53]||(a[53]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),w("共享 ",-1)])))]),l.groupInfos&&l.groupInfos.length>0?(n(),i("div",ig,[(n(!0),i(xe,null,Ie(l.groupInfos,ne=>(n(),i("span",{key:ne.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:`所属分组: ${ne.name}`},[a[54]||(a[54]=e("i",{class:"fas fa-folder mr-1"},null,-1)),w(p(ne.name),1)],8,dg))),128))])):x("",!0),e("div",{class:"truncate text-xs text-gray-500 dark:text-gray-400",title:l.id},p(l.id),9,ug)])])]),e("td",pg,[e("div",gg,[l.platform==="gemini"?(n(),i("div",mg,[a[56]||(a[56]=e("i",{class:"fas fa-robot text-xs text-yellow-700"},null,-1)),a[57]||(a[57]=e("span",{class:"text-xs font-semibold text-yellow-800"},"Gemini",-1)),a[58]||(a[58]=e("span",{class:"mx-1 h-4 w-px bg-yellow-300"},null,-1)),e("span",yg,p(es()),1)])):l.platform==="claude-console"?(n(),i("div",cg,a[59]||(a[59]=[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(),i("div",xg,a[60]||(a[60]=[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(),i("div",fg,[a[61]||(a[61]=e("div",{class:"fa-openai"},null,-1)),a[62]||(a[62]=e("span",{class:"text-xs font-semibold text-gray-950"},"OpenAi",-1)),a[63]||(a[63]=e("span",{class:"mx-1 h-4 w-px bg-gray-400"},null,-1)),e("span",bg,p(ts()),1)])):l.platform==="azure_openai"?(n(),i("div",vg,a[64]||(a[64]=[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(),i("div",kg,a[65]||(a[65]=[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(),i("div",hg,[a[66]||(a[66]=e("i",{class:"fas fa-brain text-xs text-indigo-700"},null,-1)),e("span",wg,p(rs(l)),1),a[67]||(a[67]=e("span",{class:"mx-1 h-4 w-px bg-indigo-300"},null,-1)),e("span",$g,p(Xt(l)),1)])):l.platform==="ccr"?(n(),i("div",Ag,a[68]||(a[68]=[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(),i("div",Cg,[a[70]||(a[70]=e("i",{class:"fas fa-robot text-xs text-cyan-700 dark:text-cyan-400"},null,-1)),a[71]||(a[71]=e("span",{class:"text-xs font-semibold text-cyan-800 dark:text-cyan-300"},"Droid",-1)),a[72]||(a[72]=e("span",{class:"mx-1 h-4 w-px bg-cyan-300 dark:bg-cyan-600"},null,-1)),e("span",Ug,p(Rt(l)),1),ss(l)?(n(),i("span",{key:0,class:K(as(l))},[a[69]||(a[69]=e("i",{class:"fas fa-key text-[9px]"},null,-1)),e("span",null,"x"+p(Ot(l)),1)],2)):x("",!0)])):(n(),i("div",Ig,a[73]||(a[73]=[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",Tg,[e("div",Kg,[l.expiresAt?(n(),i("span",_g,[se(l.expiresAt)?(n(),i("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:mt(ne=>gt(l),["stop"])},a[74]||(a[74]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),w(" 已过期 ",-1)]),8,Dg)):ht(l.expiresAt)?(n(),i("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:mt(ne=>gt(l),["stop"])},[a[75]||(a[75]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),w(" "+p(H(l.expiresAt)),1)],8,Mg)):(n(),i("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:mt(ne=>gt(l),["stop"])},p(H(l.expiresAt)),9,Sg))])):(n(),i("span",{key:1,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:mt(ne=>gt(l),["stop"])},a[76]||(a[76]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),w(" 永不过期 ",-1)]),8,Pg))])]),e("td",zg,[e("div",Vg,[e("span",{class:K(["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:K(["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),w(" "+p(l.status==="blocked"?"已封锁":l.status==="unauthorized"?"异常":l.status==="temp_error"?"临时异常":l.isActive?"正常":"异常"),1)],2),l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"?(n(),i("span",jg,[a[77]||(a[77]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),a[78]||(a[78]=w(" 限流中 ",-1)),l.rateLimitStatus&&typeof l.rateLimitStatus=="object"&&l.rateLimitStatus.minutesRemaining>0?(n(),i("span",Rg,"("+p(Bt(l.rateLimitStatus.minutesRemaining))+")",1)):x("",!0)])):x("",!0),l.schedulable===!1?(n(),i("span",Og,[a[80]||(a[80]=e("i",{class:"fas fa-pause-circle mr-1"},null,-1)),a[81]||(a[81]=w(" 不可调度 ",-1)),Lt(l)?(n(),Ge(v,{key:0,content:Lt(l),effect:"dark",placement:"top"},{default:Nt(()=>a[79]||(a[79]=[e("i",{class:"fas fa-question-circle ml-1 cursor-help text-gray-500"},null,-1)])),_:2,__:[79]},1032,["content"])):x("",!0)])):x("",!0),l.status==="blocked"&&l.errorMessage?(n(),i("span",{key:2,class:"mt-1 max-w-xs truncate text-xs text-gray-500 dark:text-gray-400",title:l.errorMessage},p(l.errorMessage),9,Lg)):x("",!0),l.accountType==="dedicated"?(n(),i("span",Eg," 绑定: "+p(l.boundApiKeysCount||0)+" 个API Key ",1)):x("",!0)])]),e("td",Ng,[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(),i("div",qg,[e("div",Wg,[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",Fg,p(l.priority||50),1)])):(n(),i("div",Gg,a[82]||(a[82]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",Qg,[Ct(l.proxy)?(n(),i("div",{key:0,class:"break-all rounded bg-blue-50 px-2 py-1 font-mono text-xs",title:Ct(l.proxy)},p(Ct(l.proxy)),9,Bg)):(n(),i("div",Hg,"无代理"))]),e("td",Jg,[l.usage&&l.usage.daily?(n(),i("div",Yg,[e("div",Zg,[a[83]||(a[83]=e("div",{class:"h-2 w-2 rounded-full bg-blue-500"},null,-1)),e("span",Xg,p(l.usage.daily.requests||0)+" 次",1)]),e("div",em,[a[84]||(a[84]=e("div",{class:"h-2 w-2 rounded-full bg-purple-500"},null,-1)),e("span",tm,p(tt(l.usage.daily.allTokens||0))+"M",1)]),e("div",sm,[a[85]||(a[85]=e("div",{class:"h-2 w-2 rounded-full bg-green-500"},null,-1)),e("span",am,"$"+p(Q(l)),1)]),l.usage.averages&&l.usage.averages.rpm>0?(n(),i("div",rm," 平均 "+p(l.usage.averages.rpm.toFixed(2))+" RPM ",1)):x("",!0)])):(n(),i("div",lm,"暂无数据"))]),e("td",om,[l.platform==="claude"?(n(),i("div",nm,[kt(l)&&l.claudeUsage?(n(),i("div",im,[e("div",dm,[e("div",um,[a[86]||(a[86]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"}," 5h ",-1)),e("div",pm,[e("div",gm,[e("div",mm,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",nt(l.claudeUsage.fiveHour)]),style:Se({width:ot(l.claudeUsage.fiveHour)})},null,6)]),e("span",ym,p(lt(l.claudeUsage.fiveHour)),1)])])]),e("div",cm," 重置剩余 "+p(d(l.claudeUsage.fiveHour)),1)]),e("div",xm,[e("div",fm,[a[87]||(a[87]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-emerald-100 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-300"}," 7d ",-1)),e("div",bm,[e("div",vm,[e("div",km,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",nt(l.claudeUsage.sevenDay)]),style:Se({width:ot(l.claudeUsage.sevenDay)})},null,6)]),e("span",hm,p(lt(l.claudeUsage.sevenDay)),1)])])]),e("div",wm," 重置剩余 "+p(d(l.claudeUsage.sevenDay)),1)]),e("div",$m,[e("div",Am,[a[88]||(a[88]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-purple-100 px-2 py-0.5 text-[11px] font-medium text-purple-600 dark:bg-purple-500/20 dark:text-purple-300"}," Opus ",-1)),e("div",Cm,[e("div",Um,[e("div",Im,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",nt(l.claudeUsage.sevenDayOpus)]),style:Se({width:ot(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",Tm,p(lt(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",Km," 重置剩余 "+p(d(l.claudeUsage.sevenDayOpus)),1)])])):!kt(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(n(),i("div",_m,[l.usage&&l.usage.sessionWindow?(n(),i("div",Dm,[e("div",Mm,[a[89]||(a[89]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("span",Sm,p(tt(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",Pm,[a[90]||(a[90]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("span",zm," $"+p(Ae(l.usage.sessionWindow.totalCost)),1)])])):x("",!0),e("div",Vm,[e("div",jm,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",Et(l.sessionWindow.sessionWindowStatus,l)]),style:Se({width:l.sessionWindow.progress+"%"})},null,6)]),e("span",Rm,p(l.sessionWindow.progress)+"% ",1)]),e("div",Om,[e("div",null,p(Tt(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(n(),i("div",Lm," 剩余 "+p(Kt(l.sessionWindow.remainingTime)),1)):x("",!0)])])):(n(),i("div",Em,"暂无统计"))])):l.platform==="claude-console"?(n(),i("div",Nm,[Number(l.dailyQuota)>0?(n(),i("div",qm,[e("div",Wm,[a[91]||(a[91]=e("span",{class:"text-gray-600 dark:text-gray-300"},"额度进度",-1)),e("span",Fm,p(F(l).toFixed(1))+"% ",1)]),e("div",Gm,[e("div",Qm,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",me(F(l))]),style:Se({width:Math.min(100,F(l))+"%"})},null,6)]),e("span",Bm," $"+p(Ae(((ae=(S=l.usage)==null?void 0:S.daily)==null?void 0:ae.cost)||0))+" / $"+p(Number(l.dailyQuota).toFixed(2)),1)]),e("div",Hm,[w(" 剩余 $"+p(f(l))+" ",1),e("span",Jm,"重置 "+p(l.quotaResetTime||"00:00"),1)])])):(n(),i("div",Ym,a[92]||(a[92]=[e("i",{class:"fas fa-minus"},null,-1)])))])):l.platform==="openai"?(n(),i("div",Zm,[l.codexUsage?(n(),i("div",Xm,[e("div",ey,[e("div",ty,[e("span",sy,p(ve("primary")),1),e("div",ay,[e("div",ry,[e("div",ly,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",o(l.codexUsage.primary)]),style:Se({width:re(l.codexUsage.primary)})},null,6)]),e("span",oy,p(q(l.codexUsage.primary)),1)])])]),e("div",ny," 重置剩余 "+p(de(l.codexUsage.primary)),1)]),e("div",iy,[e("div",dy,[e("span",uy,p(ve("secondary")),1),e("div",py,[e("div",gy,[e("div",my,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",o(l.codexUsage.secondary)]),style:Se({width:re(l.codexUsage.secondary)})},null,6)]),e("span",yy,p(q(l.codexUsage.secondary)),1)])])]),e("div",cy," 重置剩余 "+p(de(l.codexUsage.secondary)),1)])])):(n(),i("div",xy,a[93]||(a[93]=[e("span",{class:"text-xs"},"N/A",-1)])))])):(n(),i("div",fy,a[94]||(a[94]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",by,p(ut(l.lastUsedAt)),1),e("td",vy,[e("div",ky,[(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(),i("button",{key:0,class:K(["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:ne=>Zt(l)},[e("i",{class:K(["fas fa-redo",l.isResetting?"animate-spin":""])},null,2),a[95]||(a[95]=e("span",{class:"ml-1"},"重置状态",-1))],10,hy)):x("",!0),e("button",{class:K(["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:ne=>zt(l)},[e("i",{class:K(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",$y,p(l.schedulable?"调度":"停用"),1)],10,wy),Xe(l)?(n(),i("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:ne=>Ye(l)},a[96]||(a[96]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,Ay)):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:ne=>Dt(l)},a[97]||(a[97]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,Cy),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:ne=>Pt(l)},a[98]||(a[98]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,Uy)])])])}),128))])])])),!A.value&&Oe.value.length>0?(n(),i("div",Iy,[(n(!0),i(xe,null,Ie(Pe.value,l=>{var S,ae,ue,ne;return n(),i("div",{key:l.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",Ty,[e("div",Ky,[C.value?b((n(),i("input",{key:0,"onUpdate:modelValue":a[15]||(a[15]=Ue=>Z.value=Ue),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:he},null,40,_y)),[[ke,Z.value]]):x("",!0),e("div",{class:K(["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:K(["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",Dy,p(l.name||l.email),1),e("div",My,[e("span",Sy,p(l.platform),1),a[99]||(a[99]=e("span",{class:"text-xs text-gray-400"},"|",-1)),e("span",Py,p(l.type),1)])])]),e("span",{class:K(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",os(l)])},[e("div",{class:K(["mr-1.5 h-1.5 w-1.5 rounded-full",ns(l)])},null,2),w(" "+p(ls(l)),1)],2)]),e("div",zy,[e("div",null,[a[103]||(a[103]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"今日使用",-1)),e("div",Vy,[e("div",jy,[a[100]||(a[100]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-blue-500"},null,-1)),e("p",Ry,p(((ae=(S=l.usage)==null?void 0:S.daily)==null?void 0:ae.requests)||0)+" 次 ",1)]),e("div",Oy,[a[101]||(a[101]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",Ly,p(tt(((ne=(ue=l.usage)==null?void 0:ue.daily)==null?void 0:ne.allTokens)||0))+"M ",1)]),e("div",Ey,[a[102]||(a[102]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",Ny," $"+p(Q(l)),1)])])]),e("div",null,[a[106]||(a[106]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"会话窗口",-1)),l.usage&&l.usage.sessionWindow?(n(),i("div",qy,[e("div",Wy,[a[104]||(a[104]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",Fy,p(tt(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",Gy,[a[105]||(a[105]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",Qy," $"+p(Ae(l.usage.sessionWindow.totalCost)),1)])])):(n(),i("div",By,"-"))])]),e("div",Hy,[l.platform==="claude"?(n(),i("div",Jy,[kt(l)&&l.claudeUsage?(n(),i("div",Yy,[e("div",Zy,[e("div",Xy,[a[107]||(a[107]=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",ec,[e("div",tc,[e("div",sc,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",nt(l.claudeUsage.fiveHour)]),style:Se({width:ot(l.claudeUsage.fiveHour)})},null,6)]),e("span",ac,p(lt(l.claudeUsage.fiveHour)),1)])])]),e("div",rc," 重置剩余 "+p(d(l.claudeUsage.fiveHour)),1)]),e("div",lc,[e("div",oc,[a[108]||(a[108]=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",nc,[e("div",ic,[e("div",dc,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",nt(l.claudeUsage.sevenDay)]),style:Se({width:ot(l.claudeUsage.sevenDay)})},null,6)]),e("span",uc,p(lt(l.claudeUsage.sevenDay)),1)])])]),e("div",pc," 重置剩余 "+p(d(l.claudeUsage.sevenDay)),1)]),e("div",gc,[e("div",mc,[a[109]||(a[109]=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",yc,[e("div",cc,[e("div",xc,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",nt(l.claudeUsage.sevenDayOpus)]),style:Se({width:ot(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",fc,p(lt(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",bc," 重置剩余 "+p(d(l.claudeUsage.sevenDayOpus)),1)])])):!kt(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(n(),i("div",vc,[e("div",kc,[e("div",hc,[a[111]||(a[111]=e("span",{class:"font-medium text-gray-600 dark:text-gray-300"},"会话窗口",-1)),He(v,{content:"会话窗口进度不代表使用量,仅表示距离下一个5小时窗口的剩余时间",placement:"top"},{default:Nt(()=>a[110]||(a[110]=[e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600"},null,-1)])),_:1,__:[110]})]),e("span",wc,p(l.sessionWindow.progress)+"% ",1)]),e("div",$c,[e("div",{class:K(["h-full transition-all duration-300",Et(l.sessionWindow.sessionWindowStatus,l)]),style:Se({width:l.sessionWindow.progress+"%"})},null,6)]),e("div",Ac,[e("span",Cc,p(Tt(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(n(),i("span",Uc," 剩余 "+p(Kt(l.sessionWindow.remainingTime)),1)):(n(),i("span",Ic," 已结束 "))])])):(n(),i("div",Tc,"暂无统计"))])):l.platform==="openai"?(n(),i("div",Kc,[l.codexUsage?(n(),i("div",_c,[e("div",Dc,[e("div",Mc,[e("span",Sc,p(ve("primary")),1),e("div",Pc,[e("div",zc,[e("div",Vc,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",o(l.codexUsage.primary)]),style:Se({width:re(l.codexUsage.primary)})},null,6)]),e("span",jc,p(q(l.codexUsage.primary)),1)])])]),e("div",Rc," 重置剩余 "+p(de(l.codexUsage.primary)),1)]),e("div",Oc,[e("div",Lc,[e("span",Ec,p(ve("secondary")),1),e("div",Nc,[e("div",qc,[e("div",Wc,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",o(l.codexUsage.secondary)]),style:Se({width:re(l.codexUsage.secondary)})},null,6)]),e("span",Fc,p(q(l.codexUsage.secondary)),1)])])]),e("div",Gc," 重置剩余 "+p(de(l.codexUsage.secondary)),1)])])):x("",!0),l.codexUsage?x("",!0):(n(),i("div",Qc,"暂无统计"))])):x("",!0),e("div",Bc,[a[112]||(a[112]=e("span",{class:"text-gray-500 dark:text-gray-400"},"最后使用",-1)),e("span",Hc,p(l.lastUsedAt?is(l.lastUsedAt):"从未使用"),1)]),l.proxyConfig&&l.proxyConfig.type!=="none"?(n(),i("div",Jc,[a[113]||(a[113]=e("span",{class:"text-gray-500 dark:text-gray-400"},"代理",-1)),e("span",Yc,p(l.proxyConfig.type.toUpperCase()),1)])):x("",!0),e("div",Zc,[a[114]||(a[114]=e("span",{class:"text-gray-500 dark:text-gray-400"},"优先级",-1)),e("span",Xc,p(l.priority||50),1)])]),e("div",ex,[e("button",{class:K(["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:Ue=>zt(l)},[e("i",{class:K(["fas",l.schedulable?"fa-pause":"fa-play"])},null,2),w(" "+p(l.schedulable?"暂停":"启用"),1)],10,tx),Xe(l)?(n(),i("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:Ue=>Ye(l)},a[115]||(a[115]=[e("i",{class:"fas fa-chart-line"},null,-1),w(" 详情 ",-1)]),8,sx)):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:Ue=>Dt(l)},a[116]||(a[116]=[e("i",{class:"fas fa-edit mr-1"},null,-1),w(" 编辑 ",-1)]),8,ax),e("button",{class:"rounded-lg bg-red-50 px-3 py-2 text-xs text-red-600 transition-colors hover:bg-red-100",onClick:Ue=>Pt(l)},a[117]||(a[117]=[e("i",{class:"fas fa-trash"},null,-1)]),8,rx)])])}),128))])):x("",!0)]),!A.value&&Oe.value.length>0?(n(),i("div",lx,[e("div",ox,[e("span",nx," 共 "+p(Oe.value.length)+" 条记录 ",1),e("div",ix,[a[118]||(a[118]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),b(e("select",{"onUpdate:modelValue":a[16]||(a[16]=l=>m.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[17]||(a[17]=l=>T.value=1)},[(n(),i(xe,null,Ie(k,l=>e("option",{key:l,value:l},p(l),9,dx)),64))],544),[[us,m.value]]),a[119]||(a[119]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",ux,[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:T.value===1,onClick:a[18]||(a[18]=l=>T.value--)},a[120]||(a[120]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,px),e("div",gx,[D.value?(n(),i("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[19]||(a[19]=l=>T.value=1)}," 1 ")):x("",!0),$t.value?(n(),i("span",mx," ... ")):x("",!0),(n(!0),i(xe,null,Ie(y.value,l=>(n(),i("button",{key:l,class:K(["rounded-md border px-3 py-1 text-xs font-medium transition-colors sm:text-sm",l===T.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:S=>T.value=l},p(l),11,yx))),128)),At.value?(n(),i("span",cx," ... ")):x("",!0),Me.value?(n(),i("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[20]||(a[20]=l=>T.value=c.value)},p(c.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:T.value===c.value||c.value===0,onClick:a[21]||(a[21]=l=>T.value++)},a[121]||(a[121]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,xx)])])):x("",!0),Je.value&&(!We.value||We.value!=="ccr")?(n(),Ge(bs,{key:1,onClose:_t,onPlatformChanged:a[22]||(a[22]=l=>We.value=l),onSuccess:Vt})):Je.value&&We.value==="ccr"?(n(),Ge(vs,{key:2,onClose:_t,onSuccess:Vt})):x("",!0),je.value&&Re.value&&Re.value.platform==="ccr"?(n(),Ge(vs,{key:3,account:Re.value,onClose:a[23]||(a[23]=l=>je.value=!1),onSuccess:jt},null,8,["account"])):je.value?(n(),Ge(bs,{key:4,account:Re.value,onClose:a[24]||(a[24]=l=>je.value=!1),onSuccess:jt},null,8,["account"])):x("",!0),He(ws,{"cancel-text":Ne(g).cancelText,"confirm-text":Ne(g).confirmText,message:Ne(g).message,show:Ne(we),title:Ne(g).title,onCancel:Ne(N),onConfirm:Ne(_)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),Ce.value?(n(),Ge(Yu,{key:5,account:j.value||{},"generated-at":s.value,history:u.value,loading:De.value,overview:te.value,show:Ce.value,summary:W.value,onClose:bt},null,8,["account","generated-at","history","loading","overview","show","summary"])):x("",!0),He(kp,{ref_key:"expiryEditModalRef",ref:Te,account:fe.value||{id:null,expiresAt:null,name:""},show:!!fe.value,onClose:cs,onSave:Us},null,8,["account","show"])])}}},Cx=Wt(fx,[["__scopeId","data-v-f17fa4fa"]]);export{Cx as default};