Files
claude-relay-service/assets/AccountsView-BS605JG-.js
2025-09-25 08:16:17 +00:00

24 lines
222 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

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

import{a as Kt}from"./element-plus-CqiD73Lu.js";import{r as C,aP as zt,o as Z,V as St,x as u,y as n,z as e,L as b,K as x,al as ge,aT as Xe,O as U,aq as A,aa as Mt,P as v,aV as Pt,aY as yt,C as K,c as Ke,q as pt,I as Ce,an as ee,Q as fe,ac as he,a5 as ft,R as we,B as et,u as xe,J as Ze,Y as dt}from"./vue-vendor-Bsazo-x0.js";import{c as R,s as z,_ as ct}from"./index-DNRbUlyV.js";import{C as Tt}from"./ConfirmModal-DGedq3Q1.js";import{C as mt}from"./CustomDropdown-CsUVyI9I.js";import"./vendor-Dr8jvgFu.js";const ut=C(!1),Ct=C({title:"",message:"",confirmText:"继续",cancelText:"取消"}),Pe=C(null);function Vt(){return{showConfirmModal:ut,confirmOptions:Ct,showConfirm:(se,I,j="继续",F="取消")=>new Promise(p=>{Ct.value={title:se,message:I,confirmText:j,cancelText:F},Pe.value=p,ut.value=!0}),handleConfirm:()=>{ut.value=!1,Pe.value&&(Pe.value(!0),Pe.value=null)},handleCancel:()=>{ut.value=!1,Pe.value&&(Pe.value(!1),Pe.value=null)}}}const Rt=zt("accounts",()=>{const ie=C([]),me=C([]),f=C([]),se=C([]),I=C([]),j=C([]),F=C([]),p=C(!1),c=C(null),O=C(""),S=C("asc"),N=async()=>{p.value=!0,c.value=null;try{const m=await R.get("/admin/claude-accounts");if(m.success)ie.value=m.data||[];else throw new Error(m.message||"获取Claude账户失败")}catch(m){throw c.value=m.message,m}finally{p.value=!1}},D=async()=>{p.value=!0,c.value=null;try{const m=await R.get("/admin/claude-console-accounts");if(m.success)me.value=m.data||[];else throw new Error(m.message||"获取Claude Console账户失败")}catch(m){throw c.value=m.message,m}finally{p.value=!1}},E=async()=>{p.value=!0,c.value=null;try{const m=await R.get("/admin/bedrock-accounts");if(m.success)f.value=m.data||[];else throw new Error(m.message||"获取Bedrock账户失败")}catch(m){throw c.value=m.message,m}finally{p.value=!1}},Q=async()=>{p.value=!0,c.value=null;try{const m=await R.get("/admin/gemini-accounts");if(m.success)se.value=m.data||[];else throw new Error(m.message||"获取Gemini账户失败")}catch(m){throw c.value=m.message,m}finally{p.value=!1}},Y=async()=>{p.value=!0,c.value=null;try{const m=await R.get("/admin/openai-accounts");if(m.success)I.value=m.data||[];else throw new Error(m.message||"获取OpenAI账户失败")}catch(m){throw c.value=m.message,m}finally{p.value=!1}},P=async()=>{p.value=!0,c.value=null;try{const m=await R.get("/admin/azure-openai-accounts");if(m.success)j.value=m.data||[];else throw new Error(m.message||"获取Azure OpenAI账户失败")}catch(m){throw c.value=m.message,m}finally{p.value=!1}},i=async()=>{p.value=!0,c.value=null;try{const m=await R.get("/admin/openai-responses-accounts");if(m.success)F.value=m.data||[];else throw new Error(m.message||"获取OpenAI-Responses账户失败")}catch(m){throw c.value=m.message,m}finally{p.value=!1}};return{claudeAccounts:ie,claudeConsoleAccounts:me,bedrockAccounts:f,geminiAccounts:se,openaiAccounts:I,azureOpenaiAccounts:j,openaiResponsesAccounts:F,loading:p,error:c,sortBy:O,sortOrder:S,fetchClaudeAccounts:N,fetchClaudeConsoleAccounts:D,fetchBedrockAccounts:E,fetchGeminiAccounts:Q,fetchOpenAIAccounts:Y,fetchAzureOpenAIAccounts:P,fetchOpenAIResponsesAccounts:i,fetchAllAccounts:async()=>{p.value=!0,c.value=null;try{await Promise.all([N(),D(),E(),Q(),Y(),P(),i()])}catch(m){throw c.value=m.message,m}finally{p.value=!1}},createClaudeAccount:async m=>{p.value=!0,c.value=null;try{const g=await R.post("/admin/claude-accounts",m);if(g.success)return await N(),g.data;throw new Error(g.message||"创建Claude账户失败")}catch(g){throw c.value=g.message,g}finally{p.value=!1}},createClaudeConsoleAccount:async m=>{p.value=!0,c.value=null;try{const g=await R.post("/admin/claude-console-accounts",m);if(g.success)return await D(),g.data;throw new Error(g.message||"创建Claude Console账户失败")}catch(g){throw c.value=g.message,g}finally{p.value=!1}},createBedrockAccount:async m=>{p.value=!0,c.value=null;try{const g=await R.post("/admin/bedrock-accounts",m);if(g.success)return await E(),g.data;throw new Error(g.message||"创建Bedrock账户失败")}catch(g){throw c.value=g.message,g}finally{p.value=!1}},createGeminiAccount:async m=>{p.value=!0,c.value=null;try{const g=await R.post("/admin/gemini-accounts",m);if(g.success)return await Q(),g.data;throw new Error(g.message||"创建Gemini账户失败")}catch(g){throw c.value=g.message,g}finally{p.value=!1}},createOpenAIAccount:async m=>{p.value=!0,c.value=null;try{const g=await R.post("/admin/openai-accounts",m);if(g.success)return await Y(),g.data;throw new Error(g.message||"创建OpenAI账户失败")}catch(g){throw c.value=g.message,g}finally{p.value=!1}},createAzureOpenAIAccount:async m=>{p.value=!0,c.value=null;try{const g=await R.post("/admin/azure-openai-accounts",m);if(g.success)return await P(),g.data;throw new Error(g.message||"创建Azure OpenAI账户失败")}catch(g){throw c.value=g.message,g}finally{p.value=!1}},createOpenAIResponsesAccount:async m=>{p.value=!0,c.value=null;try{const g=await R.post("/admin/openai-responses-accounts",m);if(g.success)return await i(),g.data;throw new Error(g.message||"创建OpenAI-Responses账户失败")}catch(g){throw c.value=g.message,g}finally{p.value=!1}},updateClaudeAccount:async(m,g)=>{p.value=!0,c.value=null;try{const $=await R.put(`/admin/claude-accounts/${m}`,g);if($.success)return await N(),$;throw new Error($.message||"更新Claude账户失败")}catch($){throw c.value=$.message,$}finally{p.value=!1}},updateClaudeConsoleAccount:async(m,g)=>{p.value=!0,c.value=null;try{const $=await R.put(`/admin/claude-console-accounts/${m}`,g);if($.success)return await D(),$;throw new Error($.message||"更新Claude Console账户失败")}catch($){throw c.value=$.message,$}finally{p.value=!1}},updateBedrockAccount:async(m,g)=>{p.value=!0,c.value=null;try{const $=await R.put(`/admin/bedrock-accounts/${m}`,g);if($.success)return await E(),$;throw new Error($.message||"更新Bedrock账户失败")}catch($){throw c.value=$.message,$}finally{p.value=!1}},updateGeminiAccount:async(m,g)=>{p.value=!0,c.value=null;try{const $=await R.put(`/admin/gemini-accounts/${m}`,g);if($.success)return await Q(),$;throw new Error($.message||"更新Gemini账户失败")}catch($){throw c.value=$.message,$}finally{p.value=!1}},updateOpenAIAccount:async(m,g)=>{p.value=!0,c.value=null;try{const $=await R.put(`/admin/openai-accounts/${m}`,g);if($.success)return await Y(),$;throw new Error($.message||"更新OpenAI账户失败")}catch($){throw c.value=$.message,$}finally{p.value=!1}},updateAzureOpenAIAccount:async(m,g)=>{p.value=!0,c.value=null;try{const $=await R.put(`/admin/azure-openai-accounts/${m}`,g);if($.success)return await P(),$;throw new Error($.message||"更新Azure OpenAI账户失败")}catch($){throw c.value=$.message,$}finally{p.value=!1}},updateOpenAIResponsesAccount:async(m,g)=>{p.value=!0,c.value=null;try{const $=await R.put(`/admin/openai-responses-accounts/${m}`,g);if($.success)return await i(),$;throw new Error($.message||"更新OpenAI-Responses账户失败")}catch($){throw c.value=$.message,$}finally{p.value=!1}},toggleAccount:async(m,g)=>{p.value=!0,c.value=null;try{let $;m==="claude"?$=`/admin/claude-accounts/${g}/toggle`:m==="claude-console"?$=`/admin/claude-console-accounts/${g}/toggle`:m==="bedrock"?$=`/admin/bedrock-accounts/${g}/toggle`:m==="gemini"?$=`/admin/gemini-accounts/${g}/toggle`:m==="openai"?$=`/admin/openai-accounts/${g}/toggle`:m==="azure_openai"?$=`/admin/azure-openai-accounts/${g}/toggle`:m==="openai-responses"?$=`/admin/openai-responses-accounts/${g}/toggle`:$=`/admin/openai-accounts/${g}/toggle`;const be=await R.put($);if(be.success)return m==="claude"?await N():m==="claude-console"?await D():m==="bedrock"?await E():m==="gemini"?await Q():m==="openai"?await Y():m==="azure_openai"?await P():m==="openai-responses"?await i():await Y(),be;throw new Error(be.message||"切换状态失败")}catch($){throw c.value=$.message,$}finally{p.value=!1}},deleteAccount:async(m,g)=>{p.value=!0,c.value=null;try{let $;m==="claude"?$=`/admin/claude-accounts/${g}`:m==="claude-console"?$=`/admin/claude-console-accounts/${g}`:m==="bedrock"?$=`/admin/bedrock-accounts/${g}`:m==="gemini"?$=`/admin/gemini-accounts/${g}`:m==="openai"?$=`/admin/openai-accounts/${g}`:m==="azure_openai"?$=`/admin/azure-openai-accounts/${g}`:m==="openai-responses"?$=`/admin/openai-responses-accounts/${g}`:$=`/admin/openai-accounts/${g}`;const be=await R.delete($);if(be.success)return m==="claude"?await N():m==="claude-console"?await D():m==="bedrock"?await E():m==="gemini"?await Q():m==="openai"?await Y():m==="azure_openai"?await P():m==="openai-responses"?await i():await Y(),be;throw new Error(be.message||"删除失败")}catch($){throw c.value=$.message,$}finally{p.value=!1}},refreshClaudeToken:async m=>{p.value=!0,c.value=null;try{const g=await R.post(`/admin/claude-accounts/${m}/refresh`);if(g.success)return await N(),g;throw new Error(g.message||"Token刷新失败")}catch(g){throw c.value=g.message,g}finally{p.value=!1}},generateClaudeAuthUrl:async m=>{try{const g=await R.post("/admin/claude-accounts/generate-auth-url",m);if(g.success)return g.data;throw new Error(g.message||"生成授权URL失败")}catch(g){throw c.value=g.message,g}},exchangeClaudeCode:async m=>{try{const g=await R.post("/admin/claude-accounts/exchange-code",m);if(g.success)return g.data;throw new Error(g.message||"交换授权码失败")}catch(g){throw c.value=g.message,g}},generateClaudeSetupTokenUrl:async m=>{try{const g=await R.post("/admin/claude-accounts/generate-setup-token-url",m);if(g.success)return g.data;throw new Error(g.message||"生成Setup Token URL失败")}catch(g){throw c.value=g.message,g}},exchangeClaudeSetupTokenCode:async m=>{try{const g=await R.post("/admin/claude-accounts/exchange-setup-token-code",m);if(g.success)return g.data;throw new Error(g.message||"交换Setup Token授权码失败")}catch(g){throw c.value=g.message,g}},generateGeminiAuthUrl:async m=>{try{const g=await R.post("/admin/gemini-accounts/generate-auth-url",m);if(g.success)return g.data;throw new Error(g.message||"生成授权URL失败")}catch(g){throw c.value=g.message,g}},exchangeGeminiCode:async m=>{try{const g=await R.post("/admin/gemini-accounts/exchange-code",m);if(g.success)return g.data;throw new Error(g.message||"交换授权码失败")}catch(g){throw c.value=g.message,g}},generateOpenAIAuthUrl:async m=>{try{const g=await R.post("/admin/openai-accounts/generate-auth-url",m);if(g.success)return g.data;throw new Error(g.message||"生成授权URL失败")}catch(g){throw c.value=g.message,g}},exchangeOpenAICode:async m=>{try{const g=await R.post("/admin/openai-accounts/exchange-code",m);if(g.success)return g.data;throw new Error(g.message||"交换授权码失败")}catch(g){throw c.value=g.message,g}},sortAccounts:m=>{O.value===m?S.value=S.value==="asc"?"desc":"asc":(O.value=m,S.value="asc")},reset:()=>{ie.value=[],me.value=[],f.value=[],se.value=[],I.value=[],j.value=[],F.value=[],p.value=!1,c.value=null,O.value="",S.value="asc"}}}),Lt={class:"space-y-4"},Ot={class:"flex items-center justify-between"},jt={class:"flex cursor-pointer items-center"},Dt={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"},Et={class:"relative"},Wt={key:0,class:"mt-1 text-xs text-red-500"},qt={key:1,class:"mt-1 text-xs text-green-500"},Gt={class:"grid grid-cols-2 gap-4"},Nt={class:"space-y-4"},Ft={class:"flex items-center"},Qt={key:0,class:"grid grid-cols-2 gap-4"},Bt={class:"relative"},_t=["type"],xt={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(ie,{emit:me}){const f=ie,se=me,I=C({...f.modelValue}),j=C(!!(I.value.username||I.value.password)),F=C(!1),p=C(""),c=C(""),O=C(!1);Z(()=>f.modelValue,P=>{JSON.stringify(P)!==JSON.stringify(I.value)&&(I.value={...P},j.value=!!(P.username||P.password))},{deep:!0}),Z(()=>I.value.enabled,()=>{N()}),Z(()=>I.value.type,()=>{N()}),Z(()=>I.value.host,()=>{N()}),Z(()=>I.value.port,()=>{N()}),Z(()=>I.value.username,()=>{N()}),Z(()=>I.value.password,()=>{N()}),Z(j,P=>{P||(I.value.username="",I.value.password="",N())});let S=null;function N(){S&&clearTimeout(S),S=setTimeout(()=>{const P={...I.value};j.value||(P.username="",P.password=""),se("update:modelValue",P)},100)}function D(){if(c.value="",O.value=!1,!!p.value)try{const P=p.value.split("#")[0].trim();if(!P)return;const i=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,y=P.match(i);if(!y){const ye=/^([^:]+):(\d+)$/,ce=P.match(ye);if(ce){I.value.type="socks5",I.value.host=ce[1],I.value.port=ce[2],I.value.username="",I.value.password="",j.value=!1,O.value=!0,N(),setTimeout(()=>{O.value=!1},3e3);return}c.value="无效的代理URL格式请检查输入";return}const[,L,te,W,k,M]=y;I.value.type=L.toLowerCase(),I.value.host=k,I.value.port=M,te&&W?(I.value.username=decodeURIComponent(te),I.value.password=decodeURIComponent(W),j.value=!0):(I.value.username="",I.value.password="",j.value=!1),O.value=!0,N(),setTimeout(()=>{O.value=!1},3e3)}catch{c.value="解析失败请检查URL格式"}}function E(){p.value="",c.value="",O.value=!1}function Q(){setTimeout(()=>{D()},0)}function Y(){const P=p.value.trim();P.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(P)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(P))&&D():/^[^:]+:\d{2,5}$/.test(P)&&D()}return St(()=>{S&&clearTimeout(S)}),(P,i)=>(n(),u("div",Lt,[e("div",Ot,[i[10]||(i[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",jt,[x(e("input",{"onUpdate:modelValue":i[0]||(i[0]=y=>I.value.enabled=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ge,I.value.enabled]]),i[9]||(i[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),I.value.enabled?(n(),u("div",Dt,[i[22]||(i[22]=Xe('<div class="mb-3 flex items-start gap-3"><div class="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-gray-500"><i class="fas fa-server text-sm text-white"></i></div><div class="flex-1"><p class="text-sm text-gray-700 dark:text-gray-300"> 配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。 </p><p class="mt-1 text-xs text-gray-500 dark:text-gray-400"> 请确保代理服务器稳定可用,否则会影响账户的正常使用。 </p></div></div>',1)),e("div",null,[i[14]||(i[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[U(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",Et,[x(e("input",{"onUpdate:modelValue":i[1]||(i[1]=y=>p.value=y),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:Y,onKeyup:Mt(D,["enter"]),onPaste:Q},null,544),[[A,p.value]]),p.value?(n(),u("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:E},i[11]||(i[11]=[e("i",{class:"fas fa-times"},null,-1)]))):b("",!0)]),c.value?(n(),u("p",Wt,[i[12]||(i[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),U(" "+v(c.value),1)])):O.value?(n(),u("p",qt,i[13]||(i[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),U(" 代理配置已自动填充 ",-1)]))):b("",!0)]),i[23]||(i[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[i[16]||(i[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),x(e("select",{"onUpdate:modelValue":i[2]||(i[2]=y=>I.value.type=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},i[15]||(i[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[Pt,I.value.type]])]),e("div",Gt,[e("div",null,[i[17]||(i[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),x(e("input",{"onUpdate:modelValue":i[3]||(i[3]=y=>I.value.host=y),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),[[A,I.value.host]])]),e("div",null,[i[18]||(i[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),x(e("input",{"onUpdate:modelValue":i[4]||(i[4]=y=>I.value.port=y),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),[[A,I.value.port]])])]),e("div",Nt,[e("div",Ft,[x(e("input",{id:"proxyAuth","onUpdate:modelValue":i[5]||(i[5]=y=>j.value=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ge,j.value]]),i[19]||(i[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),j.value?(n(),u("div",Qt,[e("div",null,[i[20]||(i[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),x(e("input",{"onUpdate:modelValue":i[6]||(i[6]=y=>I.value.username=y),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),[[A,I.value.username]])]),e("div",null,[i[21]||(i[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",Bt,[x(e("input",{"onUpdate:modelValue":i[7]||(i[7]=y=>I.value.password=y),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:F.value?"text":"password"},null,8,_t),[[yt,I.value.password]]),e("button",{class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:i[8]||(i[8]=y=>F.value=!F.value)},[e("i",{class:K(F.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):b("",!0)]),i[24]||(i[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,"提示:"),U("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):b("",!0)]))}},Ht={class:"space-y-6"},Jt={key:0},Yt={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},Zt={class:"flex items-start gap-4"},Xt={class:"flex-1"},es={class:"space-y-4"},ts={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},ss={class:"flex items-start gap-3"},as={class:"flex-1"},rs=["disabled"],ls={key:0,class:"fas fa-link mr-2"},os={key:1,class:"loading-spinner mr-2"},ns={key:1,class:"space-y-3"},is={class:"flex items-center gap-2"},ds=["value"],us={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},ps={class:"flex items-start gap-3"},gs={class:"flex-1"},ms={class:"space-y-3"},ys={key:1},xs={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},fs={class:"flex items-start gap-4"},cs={class:"flex-1"},bs={class:"space-y-4"},vs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},ks={class:"flex items-start gap-3"},ws={class:"flex-1"},hs=["disabled"],As={key:0,class:"fas fa-link mr-2"},$s={key:1,class:"loading-spinner mr-2"},Cs={key:1,class:"space-y-3"},Is={class:"flex items-center gap-2"},Us=["value"],Ts={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Vs={class:"flex items-start gap-3"},Rs={class:"flex-1"},Ks={class:"space-y-3"},zs={key:2},Ss={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},Ms={class:"flex items-start gap-4"},Ps={class:"flex-1"},Ls={class:"space-y-4"},Os={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},js={class:"flex items-start gap-3"},Ds={class:"flex-1"},Es=["disabled"],Ws={key:0,class:"fas fa-link mr-2"},qs={key:1,class:"loading-spinner mr-2"},Gs={key:1,class:"space-y-3"},Ns={class:"flex items-center gap-2"},Fs=["value"],Qs={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Bs={class:"flex items-start gap-3"},_s={class:"flex-1"},Hs={class:"space-y-3"},Js={class:"flex gap-3 pt-4"},Ys=["disabled"],Zs={key:0,class:"loading-spinner mr-2"},Xs={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(ie,{emit:me}){const f=ie,se=me,I=Rt(),j=C(!1),F=C(!1),p=C(""),c=C(""),O=C(!1),S=C(""),N=Ke(()=>p.value&&c.value.trim());Z(c,P=>{if(!P||typeof P!="string")return;const i=P.trim();if(!i)return;if(i.startsWith("http://")||i.startsWith("https://"))if(i.startsWith("http://localhost:45462")||i.startsWith("http://localhost:1455"))try{const te=new URL(i).searchParams.get("code");te?(c.value=te,z("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):z("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(L){console.error("Failed to parse URL:",L),z("链接格式错误,请检查是否为完整的 URL","error")}else if(f.platform==="gemini"||f.platform==="openai")try{const te=new URL(i).searchParams.get("code");te&&(c.value=te,z("成功提取授权码!","success"))}catch{}else z("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const D=async()=>{var P;j.value=!0;try{const i=(P=f.proxy)!=null&&P.enabled?{proxy:{type:f.proxy.type,host:f.proxy.host,port:parseInt(f.proxy.port),username:f.proxy.username||null,password:f.proxy.password||null}}:{};if(f.platform==="claude"){const y=await I.generateClaudeAuthUrl(i);p.value=y.authUrl,S.value=y.sessionId}else if(f.platform==="gemini"){const y=await I.generateGeminiAuthUrl(i);p.value=y.authUrl,S.value=y.sessionId}else if(f.platform==="openai"){const y=await I.generateOpenAIAuthUrl(i);p.value=y.authUrl,S.value=y.sessionId}}catch(i){z(i.message||"生成授权链接失败","error")}finally{j.value=!1}},E=()=>{p.value="",c.value="",D()},Q=async()=>{try{await navigator.clipboard.writeText(p.value),O.value=!0,z("链接已复制","success"),setTimeout(()=>{O.value=!1},2e3)}catch{const i=document.createElement("input");i.value=p.value,document.body.appendChild(i),i.select(),document.execCommand("copy"),document.body.removeChild(i),O.value=!0,z("链接已复制","success"),setTimeout(()=>{O.value=!1},2e3)}},Y=async()=>{var P;if(N.value){F.value=!0;try{let i={};f.platform==="claude"?i={sessionId:S.value,callbackUrl:c.value.trim()}:f.platform==="gemini"?i={code:c.value.trim(),sessionId:S.value}:f.platform==="openai"&&(i={code:c.value.trim(),sessionId:S.value}),(P=f.proxy)!=null&&P.enabled&&(i.proxy={type:f.proxy.type,host:f.proxy.host,port:parseInt(f.proxy.port),username:f.proxy.username||null,password:f.proxy.password||null});let y;f.platform==="claude"?y=await I.exchangeClaudeCode(i):f.platform==="gemini"?y=await I.exchangeGeminiCode(i):f.platform==="openai"&&(y=await I.exchangeOpenAICode(i)),se("success",y)}catch(i){z(i.message||"授权失败,请检查授权码是否正确","error")}finally{F.value=!1}}};return(P,i)=>(n(),u("div",Ht,[ie.platform==="claude"?(n(),u("div",Jt,[e("div",Yt,[e("div",Zt,[i[15]||(i[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",Xt,[i[13]||(i[13]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"},"Claude 账户授权",-1)),i[14]||(i[14]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤完成 Claude 账户的授权: ",-1)),e("div",es,[e("div",ts,[e("div",ss,[i[6]||(i[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",as,[i[5]||(i[5]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),p.value?(n(),u("div",ns,[e("div",is,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:p.value},null,8,ds),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:Q},[e("i",{class:K(O.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:E},i[4]||(i[4]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),U("重新生成 ",-1)]))])):(n(),u("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:j.value,onClick:D},[j.value?(n(),u("div",os)):(n(),u("i",ls)),U(" "+v(j.value?"生成中...":"生成授权链接"),1)],8,rs))])])]),i[12]||(i[12]=Xe('<div class="rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"><div class="flex items-start gap-3"><div class="flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"> 2 </div><div class="flex-1"><p class="mb-2 font-medium text-blue-900 dark:text-blue-200"> 在浏览器中打开链接并完成授权 </p><p class="mb-2 text-sm text-blue-700 dark:text-blue-300"> 请在新标签页中打开授权链接,登录您的 Claude 账户并授权。 </p><div class="rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"><p class="text-xs text-yellow-800 dark:text-yellow-300"><i class="fas fa-exclamation-triangle mr-1"></i><strong>注意:</strong>如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 </p></div></div></div></div>',1)),e("div",us,[e("div",ps,[i[11]||(i[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",gs,[i[9]||(i[9]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),i[10]||(i[10]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"},[U(" 授权完成后,页面会显示一个 "),e("strong",null,"Authorization Code"),U(",请将其复制并粘贴到下方输入框: ")],-1)),e("div",ms,[e("div",null,[i[7]||(i[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"}),U("Authorization Code ")],-1)),x(e("textarea",{"onUpdate:modelValue":i[0]||(i[0]=y=>c.value=y),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[A,c.value]])]),i[8]||(i[8]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),U(" 请粘贴从Claude页面复制的Authorization Code ")],-1))])])])])])])])])])):ie.platform==="gemini"?(n(),u("div",ys,[e("div",xs,[e("div",fs,[i[27]||(i[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",cs,[i[25]||(i[25]=e("h4",{class:"mb-3 font-semibold text-green-900 dark:text-green-200"},"Gemini 账户授权",-1)),i[26]||(i[26]=e("p",{class:"mb-4 text-sm text-green-800 dark:text-green-300"}," 请按照以下步骤完成 Gemini 账户的授权: ",-1)),e("div",bs,[e("div",vs,[e("div",ks,[i[18]||(i[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",ws,[i[17]||(i[17]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 点击下方按钮生成授权链接 ",-1)),p.value?(n(),u("div",Cs,[e("div",Is,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:p.value},null,8,Us),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:Q},[e("i",{class:K(O.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:E},i[16]||(i[16]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),U("重新生成 ",-1)]))])):(n(),u("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:j.value,onClick:D},[j.value?(n(),u("div",$s)):(n(),u("i",As)),U(" "+v(j.value?"生成中...":"生成授权链接"),1)],8,hs))])])]),i[24]||(i[24]=Xe('<div class="rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"><div class="flex items-start gap-3"><div class="flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"> 2 </div><div class="flex-1"><p class="mb-2 font-medium text-green-900 dark:text-green-200"> 在浏览器中打开链接并完成授权 </p><p class="mb-2 text-sm text-green-700 dark:text-green-300"> 请在新标签页中打开授权链接,登录您的 Gemini 账户并授权。 </p><div class="rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"><p class="text-xs text-yellow-800 dark:text-yellow-300"><i class="fas fa-exclamation-triangle mr-1"></i><strong>注意:</strong>如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 </p></div></div></div></div>',1)),e("div",Ts,[e("div",Vs,[i[23]||(i[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",Rs,[i[21]||(i[21]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 输入 Authorization Code ",-1)),i[22]||(i[22]=e("p",{class:"mb-3 text-sm text-green-700 dark:text-green-300"}," 授权完成后,页面会显示一个 Authorization Code请将其复制并粘贴到下方输入框 ",-1)),e("div",Ks,[e("div",null,[i[19]||(i[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"}),U("Authorization Code ")],-1)),x(e("textarea",{"onUpdate:modelValue":i[1]||(i[1]=y=>c.value=y),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[A,c.value]])]),i[20]||(i[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"}),U(" 请粘贴从Gemini页面复制的Authorization Code ")])],-1))])])])])])])])])])):ie.platform==="openai"?(n(),u("div",zs,[e("div",Ss,[e("div",Ms,[i[39]||(i[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",Ps,[i[37]||(i[37]=e("h4",{class:"mb-3 font-semibold text-orange-900 dark:text-orange-200"},"OpenAI 账户授权",-1)),i[38]||(i[38]=e("p",{class:"mb-4 text-sm text-orange-800 dark:text-orange-300"}," 请按照以下步骤完成 OpenAI 账户的授权: ",-1)),e("div",Ls,[e("div",Os,[e("div",js,[i[30]||(i[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",Ds,[i[29]||(i[29]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 点击下方按钮生成授权链接 ",-1)),p.value?(n(),u("div",Gs,[e("div",Ns,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:p.value},null,8,Fs),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:Q},[e("i",{class:K(O.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:E},i[28]||(i[28]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),U("重新生成 ",-1)]))])):(n(),u("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:j.value,onClick:D},[j.value?(n(),u("div",qs)):(n(),u("i",Ws)),U(" "+v(j.value?"生成中...":"生成授权链接"),1)],8,Es))])])]),i[36]||(i[36]=Xe('<div class="rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"><div class="flex items-start gap-3"><div class="flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"> 2 </div><div class="flex-1"><p class="mb-2 font-medium text-orange-900 dark:text-orange-200"> 在浏览器中打开链接并完成授权 </p><p class="mb-2 text-sm text-orange-700 dark:text-orange-300"> 请在新标签页中打开授权链接,登录您的 OpenAI 账户并授权。 </p><div class="mb-3 rounded border border-amber-300 bg-amber-50 p-3 dark:border-amber-700 dark:bg-amber-900/30"><p class="text-xs text-amber-800 dark:text-amber-300"><i class="fas fa-clock mr-1"></i><strong>重要提示:</strong>授权后页面可能会加载较长时间,请耐心等待。 </p><p class="mt-2 text-xs text-amber-700 dark:text-amber-400"> 当浏览器地址栏变为 <strong class="font-mono">http://localhost:1455/...</strong> 开头时,表示授权已完成。 </p></div><div class="rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"><p class="text-xs text-yellow-800 dark:text-yellow-300"><i class="fas fa-exclamation-triangle mr-1"></i><strong>注意:</strong>如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 </p></div></div></div></div>',1)),e("div",Qs,[e("div",Bs,[i[35]||(i[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",_s,[i[33]||(i[33]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 输入授权链接或 Code ",-1)),i[34]||(i[34]=e("p",{class:"mb-3 text-sm text-orange-700 dark:text-orange-300"},[U(" 授权完成后,当页面地址变为 "),e("strong",{class:"font-mono"},"http://localhost:1455/..."),U(" 时: ")],-1)),e("div",Hs,[e("div",null,[i[31]||(i[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"}),U("授权链接或 Code ")],-1)),x(e("textarea",{"onUpdate:modelValue":i[2]||(i[2]=y=>c.value=y),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),[[A,c.value]])]),i[32]||(i[32]=Xe('<div class="rounded border border-blue-300 bg-blue-50 p-2 dark:border-blue-700 dark:bg-blue-900/30"><p class="text-xs text-blue-700 dark:text-blue-300"><i class="fas fa-lightbulb mr-1"></i><strong>提示:</strong>您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别。 </p><p class="mt-1 text-xs text-blue-600 dark:text-blue-400"> • 完整链接示例:<span class="font-mono">http://localhost:1455/auth/callback?code=ac_4hm8...</span></p><p class="text-xs text-blue-600"> • 仅 Code 示例:<span class="font-mono">ac_4hm8iqmx9A2fzMy_cwye7U3W7...</span></p></div>',1))])])])])])])])])])):b("",!0),e("div",Js,[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:i[3]||(i[3]=y=>P.$emit("back"))}," 上一步 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!N.value||F.value,type:"button",onClick:Y},[F.value?(n(),u("div",Zs)):b("",!0),U(" "+v(F.value?"验证中...":"完成授权"),1)],8,Ys)])]))}},ea={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},ta={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"},sa={class:"mb-4 flex items-center justify-between sm:mb-6"},aa={class:"mb-6"},ra={key:0,class:"mb-6 rounded-lg border border-blue-200 bg-blue-50 p-4"},la={class:"space-y-4"},oa={class:"flex gap-4"},na={class:"flex cursor-pointer items-center"},ia={class:"flex cursor-pointer items-center"},da={class:"flex cursor-pointer items-center"},ua={class:"flex gap-3"},pa=["disabled"],ga={key:0,class:"loading-spinner mr-2"},ma={class:"space-y-4"},ya={key:0,class:"py-8 text-center"},xa={key:1,class:"rounded-lg bg-gray-50 py-8 text-center"},fa={key:2,class:"grid grid-cols-1 gap-4 md:grid-cols-2"},ca={class:"mb-3 flex items-start justify-between"},ba={class:"flex-1"},va={class:"font-semibold text-gray-900"},ka={class:"mt-1 text-sm text-gray-500"},wa={class:"ml-4 flex items-center gap-2"},ha={class:"flex items-center justify-between text-sm text-gray-600"},Aa={class:"flex items-center gap-4"},$a={class:"flex items-center gap-2"},Ca=["onClick"],Ia=["disabled","onClick"],Ua={key:1,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Ta={class:"modal-content w-full max-w-lg p-4 sm:p-6"},Va={class:"space-y-4"},Ra={class:"rounded-lg bg-gray-100 px-3 py-2 text-sm text-gray-600"},Ka={class:"flex gap-3 pt-4"},za=["disabled"],Sa={key:0,class:"loading-spinner mr-2"},Ma={__name:"GroupManagementModal",emits:["close","refresh"],setup(ie,{emit:me}){const f=me,se=C(!0),I=C(!1),j=C([]),F=C(!1),p=C(!1),c=C({name:"",platform:"claude",description:""}),O=C(!1),S=C(!1),N=C(null),D=C({name:"",platform:"",description:""}),E=W=>W?new Date(W).toLocaleDateString("zh-CN"):"-",Q=async()=>{I.value=!0;try{const W=await R.get("/admin/account-groups");j.value=W.data||[]}catch{z("加载分组列表失败","error")}finally{I.value=!1}},Y=async()=>{var W,k;if(!c.value.name||!c.value.platform){z("请填写必填项","error");return}p.value=!0;try{await R.post("/admin/account-groups",{name:c.value.name,platform:c.value.platform,description:c.value.description}),z("分组创建成功","success"),P(),await Q(),f("refresh")}catch(M){z(((k=(W=M.response)==null?void 0:W.data)==null?void 0:k.error)||"创建分组失败","error")}finally{p.value=!1}},P=()=>{F.value=!1,c.value={name:"",platform:"claude",description:""}},i=W=>{N.value=W,D.value={name:W.name,platform:W.platform,description:W.description||""},O.value=!0},y=async()=>{var W,k;if(!D.value.name){z("请填写分组名称","error");return}S.value=!0;try{await R.put(`/admin/account-groups/${N.value.id}`,{name:D.value.name,description:D.value.description}),z("分组更新成功","success"),L(),await Q(),f("refresh")}catch(M){z(((k=(W=M.response)==null?void 0:W.data)==null?void 0:k.error)||"更新分组失败","error")}finally{S.value=!1}},L=()=>{O.value=!1,N.value=null,D.value={name:"",platform:"",description:""}},te=async W=>{var k,M;if(W.memberCount>0){z("分组内还有成员,无法删除","error");return}if(confirm(`确定要删除分组 "${W.name}" 吗?`))try{await R.delete(`/admin/account-groups/${W.id}`),z("分组删除成功","success"),await Q(),f("refresh")}catch(ye){z(((M=(k=ye.response)==null?void 0:k.data)==null?void 0:M.error)||"删除分组失败","error")}};return pt(()=>{Q()}),(W,k)=>(n(),Ce(ft,{to:"body"},[se.value?(n(),u("div",ea,[e("div",ta,[e("div",sa,[k[10]||(k[10]=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:k[0]||(k[0]=M=>W.$emit("close"))},k[9]||(k[9]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",aa,[e("button",{class:"btn btn-primary px-4 py-2",onClick:k[1]||(k[1]=M=>F.value=!0)},k[11]||(k[11]=[e("i",{class:"fas fa-plus mr-2"},null,-1),U(" 创建新分组 ",-1)]))]),F.value?(n(),u("div",ra,[k[18]||(k[18]=e("h4",{class:"mb-4 text-lg font-semibold text-gray-900"},"创建新分组",-1)),e("div",la,[e("div",null,[k[12]||(k[12]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),x(e("input",{"onUpdate:modelValue":k[2]||(k[2]=M=>c.value.name=M),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[A,c.value.name]])]),e("div",null,[k[16]||(k[16]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型 *",-1)),e("div",oa,[e("label",na,[x(e("input",{"onUpdate:modelValue":k[3]||(k[3]=M=>c.value.platform=M),class:"mr-2",type:"radio",value:"claude"},null,512),[[ee,c.value.platform]]),k[13]||(k[13]=e("span",{class:"text-sm text-gray-700"},"Claude",-1))]),e("label",ia,[x(e("input",{"onUpdate:modelValue":k[4]||(k[4]=M=>c.value.platform=M),class:"mr-2",type:"radio",value:"gemini"},null,512),[[ee,c.value.platform]]),k[14]||(k[14]=e("span",{class:"text-sm text-gray-700"},"Gemini",-1))]),e("label",da,[x(e("input",{"onUpdate:modelValue":k[5]||(k[5]=M=>c.value.platform=M),class:"mr-2",type:"radio",value:"openai"},null,512),[[ee,c.value.platform]]),k[15]||(k[15]=e("span",{class:"text-sm text-gray-700"},"OpenAI",-1))])])]),e("div",null,[k[17]||(k[17]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":k[6]||(k[6]=M=>c.value.description=M),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[A,c.value.description]])]),e("div",ua,[e("button",{class:"btn btn-primary px-4 py-2",disabled:!c.value.name||!c.value.platform||p.value,onClick:Y},[p.value?(n(),u("div",ga)):b("",!0),U(" "+v(p.value?"创建中...":"创建"),1)],8,pa),e("button",{class:"btn btn-secondary px-4 py-2",onClick:P},"取消")])])])):b("",!0),e("div",ma,[I.value?(n(),u("div",ya,k[19]||(k[19]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500"},"加载中...",-1)]))):j.value.length===0?(n(),u("div",xa,k[20]||(k[20]=[e("i",{class:"fas fa-layer-group mb-4 text-4xl text-gray-300"},null,-1),e("p",{class:"text-gray-500"},"暂无分组",-1)]))):(n(),u("div",fa,[(n(!0),u(fe,null,he(j.value,M=>(n(),u("div",{key:M.id,class:"rounded-lg border bg-white p-4 transition-shadow hover:shadow-md"},[e("div",ca,[e("div",ba,[e("h4",va,v(M.name),1),e("p",ka,v(M.description||"暂无描述"),1)]),e("div",wa,[e("span",{class:K(["rounded-full px-2 py-1 text-xs font-medium",M.platform==="claude"?"bg-purple-100 text-purple-700":M.platform==="gemini"?"bg-blue-100 text-blue-700":"bg-gray-100 text-gray-700"])},v(M.platform==="claude"?"Claude":M.platform==="gemini"?"Gemini":"OpenAI"),3)])]),e("div",ha,[e("div",Aa,[e("span",null,[k[21]||(k[21]=e("i",{class:"fas fa-users mr-1"},null,-1)),U(" "+v(M.memberCount||0)+" 个成员 ",1)]),e("span",null,[k[22]||(k[22]=e("i",{class:"fas fa-clock mr-1"},null,-1)),U(" "+v(E(M.createdAt)),1)])]),e("div",$a,[e("button",{class:"text-blue-600 transition-colors hover:text-blue-800",title:"编辑",onClick:ye=>i(M)},k[23]||(k[23]=[e("i",{class:"fas fa-edit"},null,-1)]),8,Ca),e("button",{class:"text-red-600 transition-colors hover:text-red-800",disabled:M.memberCount>0,title:"删除",onClick:ye=>te(M)},k[24]||(k[24]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Ia)])])]))),128))]))])])])):b("",!0),O.value?(n(),u("div",Ua,[e("div",Ta,[e("div",{class:"mb-4 flex items-center justify-between"},[k[26]||(k[26]=e("h3",{class:"text-lg font-bold text-gray-900"},"编辑分组",-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",onClick:L},k[25]||(k[25]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",Va,[e("div",null,[k[27]||(k[27]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),x(e("input",{"onUpdate:modelValue":k[7]||(k[7]=M=>D.value.name=M),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[A,D.value.name]])]),e("div",null,[k[29]||(k[29]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型",-1)),e("div",Ra,[U(v(D.value.platform==="claude"?"Claude":D.value.platform==="gemini"?"Gemini":"OpenAI")+" ",1),k[28]||(k[28]=e("span",{class:"ml-2 text-xs text-gray-500"},"(不可修改)",-1))])]),e("div",null,[k[30]||(k[30]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":k[8]||(k[8]=M=>D.value.description=M),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[A,D.value.description]])]),e("div",Ka,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!D.value.name||S.value,onClick:y},[S.value?(n(),u("div",Sa)):b("",!0),U(" "+v(S.value?"更新中...":"更新"),1)],8,za),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:L},"取消")])])])])):b("",!0)]))}},Pa={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},La={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"},Oa={class:"mb-4 flex items-center justify-between sm:mb-6"},ja={class:"flex items-center gap-2 sm:gap-3"},Da={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Ea={key:0,class:"mb-4 flex items-center justify-center sm:mb-8"},Wa={class:"flex items-center space-x-2 sm:space-x-4"},qa={class:"flex items-center"},Ga={class:"flex items-center"},Na={key:1},Fa={class:"space-y-6"},Qa={key:0},Ba={class:"space-y-3"},_a={class:"grid grid-cols-3 gap-2"},Ha={class:"p-3"},Ja={class:"flex items-center justify-between"},Ya={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-indigo-500"},Za={class:"p-3"},Xa={class:"flex items-center justify-between"},er={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-emerald-500"},tr={class:"p-3"},sr={class:"flex items-center justify-between"},ar={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-blue-500"},rr={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"},lr={class:"grid grid-cols-2 gap-2 sm:grid-cols-3"},or={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-indigo-500"},nr={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},ir={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-orange-500"},dr={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-cyan-500"},ur={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-emerald-500"},pr={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-teal-500"},gr={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},mr={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},yr={key:1},xr={class:"flex flex-wrap gap-4"},fr={key:0,class:"flex cursor-pointer items-center"},cr={class:"flex cursor-pointer items-center"},br={class:"flex cursor-pointer items-center"},vr={key:0,class:"mt-1 text-xs text-red-500"},kr={class:"flex gap-4"},wr={class:"flex cursor-pointer items-center"},hr={class:"flex cursor-pointer items-center"},Ar={class:"flex cursor-pointer items-center"},$r={key:2},Cr={class:"flex gap-2"},Ir={class:"flex-1"},Ur={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},Tr={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},Vr=["value"],Rr={class:"text-sm text-gray-700 dark:text-gray-200"},Kr={key:3},zr={key:4,class:"space-y-4"},Sr={key:0,class:"mt-1 text-xs text-red-500"},Mr={key:0,class:"mt-1 text-xs text-red-500"},Pr={key:0,class:"mt-1 text-xs text-red-500"},Lr={key:5,class:"space-y-4"},Or={key:0,class:"mt-1 text-xs text-red-500"},jr={key:0,class:"mt-1 text-xs text-red-500"},Dr={key:0,class:"mt-1 text-xs text-red-500"},Er={class:"flex flex-wrap gap-2"},Wr=["value"],qr={class:"text-sm text-gray-700 dark:text-gray-300"},Gr={key:6},Nr={class:"mb-3"},Fr={class:"inline-flex cursor-pointer items-center"},Qr={key:0},Br={key:7,class:"space-y-4"},_r={key:0,class:"mt-1 text-xs text-red-500"},Hr={key:0,class:"mt-1 text-xs text-red-500"},Jr={class:"grid grid-cols-2 gap-4"},Yr={class:"mb-3 space-y-2"},Zr=["onUpdate:modelValue"],Xr=["onUpdate:modelValue"],el=["onClick"],tl={class:"mt-3 flex flex-wrap gap-2"},sl={class:"mb-3"},al={class:"inline-flex cursor-pointer items-center"},rl={key:0},ll={key:8,class:"space-y-4"},ol={class:"relative"},nl=["type"],il={key:9},dl={class:"flex gap-4"},ul={class:"flex cursor-pointer items-center"},pl={class:"flex cursor-pointer items-center"},gl={key:10,class:"mt-4"},ml={class:"flex items-start"},yl={key:11,class:"mt-4"},xl={class:"flex items-start"},fl={class:"ml-3"},cl={key:0,class:"mt-1"},bl={class:"flex items-center justify-between"},vl={class:"text-xs text-green-600 dark:text-green-400"},kl=["disabled"],wl={key:0,class:"fas fa-trash-alt mr-1"},hl={key:1,class:"loading-spinner mr-1"},Al={key:1,class:"mt-1"},$l={key:12,class:"mt-4"},Cl={class:"flex items-start"},Il={class:"ml-3 flex-1"},Ul={key:0,class:"mt-3"},Tl={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Vl={class:"flex items-center gap-2"},Rl={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"},Kl={class:"text-blue-600 dark:text-blue-400"},zl={class:"text-gray-500 dark:text-gray-500"},Sl={class:"text-blue-600 dark:text-blue-400"},Ml={key:13,class:"space-y-4 rounded-lg border border-blue-200 bg-blue-50 p-4"},Pl={class:"mb-4 flex items-start gap-3"},Ll={key:0,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Ol={key:1,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},jl={key:2,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Dl={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"},El={key:0,class:"text-xs text-blue-800 dark:text-blue-300"},Wl={key:1,class:"text-xs text-blue-800 dark:text-blue-300"},ql={key:2,class:"text-xs text-blue-800 dark:text-blue-300"},Gl={key:0},Nl={key:1},Fl={key:0,class:"mt-1 text-xs text-red-500"},Ql={key:2},Bl={key:0,class:"mt-1 text-xs text-red-500"},_l={key:3},Hl={class:"flex gap-3 pt-4"},Jl=["disabled"],Yl=["disabled"],Zl={key:0,class:"loading-spinner mr-2"},Xl={key:3,class:"space-y-6"},eo={key:0},to={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},so={class:"flex items-start gap-4"},ao={class:"flex-1"},ro={class:"space-y-4"},lo={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},oo={class:"flex items-start gap-3"},no={class:"flex-1"},io=["disabled"],uo={key:0,class:"fas fa-link mr-2"},po={key:1,class:"loading-spinner mr-2"},go={key:1,class:"space-y-3"},mo={class:"flex items-center gap-2"},yo=["value"],xo={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},fo={class:"flex items-start gap-3"},co={class:"flex-1"},bo={class:"space-y-3"},vo={class:"flex gap-3 pt-4"},ko=["disabled"],wo={key:0,class:"loading-spinner mr-2"},ho={key:4,class:"space-y-6"},Ao={class:"flex gap-4"},$o={class:"flex cursor-pointer items-center"},Co={class:"flex cursor-pointer items-center"},Io={class:"flex cursor-pointer items-center"},Uo={key:0},To={class:"flex gap-2"},Vo={class:"flex-1"},Ro={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},Ko={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},zo=["value"],So={class:"text-sm text-gray-700 dark:text-gray-200"},Mo={key:1},Po={key:2},Lo={class:"flex gap-4"},Oo={class:"flex cursor-pointer items-center"},jo={class:"flex cursor-pointer items-center"},Do={key:3,class:"mt-4"},Eo={class:"flex items-start"},Wo={key:4,class:"mt-4"},qo={class:"flex items-start"},Go={class:"ml-3"},No={key:0,class:"mt-1"},Fo={class:"flex items-center justify-between"},Qo={class:"text-xs text-green-600 dark:text-green-400"},Bo=["disabled"],_o={key:0,class:"fas fa-trash-alt mr-1"},Ho={key:1,class:"loading-spinner mr-1"},Jo={key:1,class:"mt-1"},Yo={key:5,class:"mt-4"},Zo={class:"flex items-start"},Xo={class:"ml-3 flex-1"},en={key:0,class:"mt-3"},tn={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},sn={class:"flex items-center gap-2"},an={class:"block w-full select-all break-all rounded bg-gray-100 px-3 py-2 font-mono text-xs text-gray-700 dark:bg-gray-900 dark:text-gray-300"},rn={class:"text-blue-600 dark:text-blue-400"},ln={class:"text-gray-500 dark:text-gray-500"},on={class:"text-blue-600 dark:text-blue-400"},nn={key:6,class:"space-y-4"},dn={class:"grid grid-cols-2 gap-4"},un={key:0,class:"rounded-lg bg-gray-50 p-4 dark:bg-gray-800"},pn={class:"mb-2 flex items-center justify-between"},gn={class:"text-sm text-gray-500 dark:text-gray-400"},mn={class:"relative h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},yn={class:"mt-2 flex items-center justify-between text-xs"},xn={class:"text-gray-500 dark:text-gray-400"},fn={class:"text-gray-500 dark:text-gray-400"},cn={class:"mb-3 space-y-2"},bn=["onUpdate:modelValue"],vn=["onUpdate:modelValue"],kn=["onClick"],wn={class:"mt-3 flex flex-wrap gap-2"},hn={class:"mb-3"},An={class:"inline-flex cursor-pointer items-center"},$n={key:0},Cn={key:7,class:"space-y-4"},In={class:"relative"},Un=["type"],Tn={class:"grid grid-cols-2 gap-4"},Vn={key:8,class:"space-y-4"},Rn={class:"mb-3"},Kn={class:"inline-flex cursor-pointer items-center"},zn={key:0},Sn={key:9,class:"space-y-4"},Mn={key:0,class:"mt-1 text-xs text-red-500"},Pn={key:0,class:"mt-1 text-xs text-red-500"},Ln={key:0,class:"mt-1 text-xs text-red-500"},On={class:"flex flex-wrap gap-2"},jn=["value"],Dn={class:"text-sm text-gray-700 dark:text-gray-300"},En={key:10,class:"rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-700 dark:bg-amber-900/30"},Wn={class:"space-y-4"},qn={class:"flex gap-3 pt-4"},Gn=["disabled"],Nn={key:0,class:"loading-spinner mr-2"},Fn={__name:"AccountForm",props:{account:{type:Object,default:null}},emits:["close","success","platform-changed"],setup(ie,{emit:me}){var it,Je,l,a,T,o,B,q,re,X,ve,Ue,Te,de,Ve,H,J,ue,pe,Ye,bt,vt,kt,wt,ht,At,$t;const f=ie,se=me,I=Rt(),{showConfirmModal:j,confirmOptions:F,showConfirm:p,handleConfirm:c,handleCancel:O}=Vt(),S=Ke(()=>!!f.account),N=C(!0),D=C(1),E=C(!1),Q=C(!1),Y=C(!1),P=C(!1),i=C(""),y=C(""),L=C(!1),te=C(""),W=C(""),k=C(!1),M=C(""),ye=d=>["claude","claude-console","ccr","bedrock"].includes(d)?"claude":["openai","openai-responses","azure_openai"].includes(d)?"openai":d==="gemini"?"gemini":"",ce=()=>{var d;return(d=f.account)!=null&&d.proxy&&f.account.proxy.host&&f.account.proxy.port?{enabled:!0,type:f.account.proxy.type||"socks5",host:f.account.proxy.host,port:f.account.proxy.port,username:f.account.proxy.username||"",password:f.account.proxy.password||""}:{enabled:!1,type:"socks5",host:"",port:"",username:"",password:""}},s=C({platform:((it=f.account)==null?void 0:it.platform)||"claude",addType:(()=>{var t;const d=((t=f.account)==null?void 0:t.platform)||"claude";return d==="gemini"||d==="openai"?"oauth":d==="claude"?"setup-token":"manual"})(),name:((Je=f.account)==null?void 0:Je.name)||"",description:((l=f.account)==null?void 0:l.description)||"",accountType:((a=f.account)==null?void 0:a.accountType)||"shared",subscriptionType:"claude_max",autoStopOnWarning:((T=f.account)==null?void 0:T.autoStopOnWarning)||!1,useUnifiedUserAgent:((o=f.account)==null?void 0:o.useUnifiedUserAgent)||!1,useUnifiedClientId:((B=f.account)==null?void 0:B.useUnifiedClientId)||!1,unifiedClientId:((q=f.account)==null?void 0:q.unifiedClientId)||"",groupId:"",groupIds:[],projectId:((re=f.account)==null?void 0:re.projectId)||"",accessToken:"",refreshToken:"",proxy:ce(),apiUrl:((X=f.account)==null?void 0:X.apiUrl)||"",apiKey:((ve=f.account)==null?void 0:ve.apiKey)||"",priority:((Ue=f.account)==null?void 0:Ue.priority)||50,baseApi:((Te=f.account)==null?void 0:Te.baseApi)||"",rateLimitDuration:((de=f.account)==null?void 0:de.rateLimitDuration)||60,supportedModels:(()=>{var t;const d=(t=f.account)==null?void 0:t.supportedModels;return d?typeof d=="object"&&!Array.isArray(d)?Object.keys(d):Array.isArray(d)?d:[]:[]})(),userAgent:((Ve=f.account)==null?void 0:Ve.userAgent)||"",enableRateLimit:f.account?f.account.rateLimitDuration>0:!0,dailyQuota:((H=f.account)==null?void 0:H.dailyQuota)||0,dailyUsage:((J=f.account)==null?void 0:J.dailyUsage)||0,quotaResetTime:((ue=f.account)==null?void 0:ue.quotaResetTime)||"00:00",accessKeyId:((pe=f.account)==null?void 0:pe.accessKeyId)||"",secretAccessKey:((Ye=f.account)==null?void 0:Ye.secretAccessKey)||"",region:((bt=f.account)==null?void 0:bt.region)||"",sessionToken:((vt=f.account)==null?void 0:vt.sessionToken)||"",defaultModel:((kt=f.account)==null?void 0:kt.defaultModel)||"",smallFastModel:((wt=f.account)==null?void 0:wt.smallFastModel)||"",azureEndpoint:((ht=f.account)==null?void 0:ht.azureEndpoint)||"",apiVersion:((At=f.account)==null?void 0:At.apiVersion)||"",deploymentName:(($t=f.account)==null?void 0:$t.deploymentName)||""}),ae=C([]),Ie=()=>{var d;(d=f.account)!=null&&d.supportedModels&&(typeof f.account.supportedModels=="object"&&!Array.isArray(f.account.supportedModels)?ae.value=Object.entries(f.account.supportedModels).map(([t,r])=>({from:t,to:r})):Array.isArray(f.account.supportedModels)&&(ae.value=f.account.supportedModels.map(t=>({from:t,to:t}))))},h=C({name:"",refreshToken:"",accessToken:"",apiUrl:"",apiKey:"",accessKeyId:"",secretAccessKey:"",region:"",azureEndpoint:"",deploymentName:""}),Ge=Ke(()=>{var d;return((d=s.value.name)==null?void 0:d.trim())&&s.value.platform}),Le=Ke(()=>i.value&&y.value.trim()),Oe=()=>{var d;return!S.value||!((d=f.account)!=null&&d.id)?0:typeof s.value.dailyUsage=="number"?s.value.dailyUsage:0},Me=Ke(()=>!s.value.dailyQuota||s.value.dailyQuota<=0?0:Oe()/s.value.dailyQuota*100),Ne=async()=>{var d;if(!(!S.value||!((d=f.account)!=null&&d.id)))try{const t=await R.get(`/admin/claude-console-accounts/${f.account.id}/usage`);t&&(s.value.dailyUsage=t.dailyUsage||0)}catch{}},je=d=>{M.value=d,d==="claude"?s.value.platform="claude":d==="openai"?s.value.platform="openai":d==="gemini"&&(s.value.platform="gemini")},De=async()=>{if(h.value.name="",!Ge.value){(!s.value.name||s.value.name.trim()==="")&&(h.value.name="请填写账户名称");return}if(s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)){z("请选择一个分组","error");return}s.value.accountType==="group"&&(s.value.groupIds&&s.value.groupIds.length>0?s.value.groupId=s.value.groupIds[0]:s.value.groupId=""),!(s.value.platform==="gemini"&&D.value===1&&s.value.addType==="oauth"&&(!s.value.projectId||s.value.projectId.trim()==="")&&!await p("项目 ID 未填写",`您尚未填写项目 ID。
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号需要提供项目 ID。
如果您使用的是普通个人账号,可以继续不填写。`,"继续","返回填写"))&&(D.value=2)},Ee=async()=>{var d;Y.value=!0;try{const t=(d=s.value.proxy)!=null&&d.enabled?{proxy:{type:s.value.proxy.type,host:s.value.proxy.host,port:parseInt(s.value.proxy.port),username:s.value.proxy.username||null,password:s.value.proxy.password||null}}:{},r=await I.generateClaudeSetupTokenUrl(t);i.value=r.authUrl,te.value=r.sessionId}catch(t){z(t.message||"生成Setup Token授权链接失败","error")}finally{Y.value=!1}},Fe=()=>{i.value="",y.value="",Ee()},tt=async()=>{try{await navigator.clipboard.writeText(i.value),L.value=!0,z("链接已复制","success"),setTimeout(()=>{L.value=!1},2e3)}catch{const t=document.createElement("textarea");t.value=i.value,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")?(L.value=!0,z("链接已复制","success")):z("复制失败,请手动复制","error")}catch{z("复制失败,请手动复制","error")}document.body.removeChild(t),setTimeout(()=>{L.value=!1},2e3)}},st=async()=>{var d;if(Le.value){P.value=!0;try{const t={sessionId:te.value,callbackUrl:y.value.trim()};(d=s.value.proxy)!=null&&d.enabled&&(t.proxy={type:s.value.proxy.type,host:s.value.proxy.host,port:parseInt(s.value.proxy.port),username:s.value.proxy.username||null,password:s.value.proxy.password||null});const r=await I.exchangeClaudeSetupTokenCode(t);s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=ke()),await We(r)}catch(t){z(t.message||"Setup Token授权失败请检查授权码是否正确","error")}finally{P.value=!1}}},We=async d=>{var t,r,_,G,$e,V;E.value=!0;try{s.value.platform==="claude"&&s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=ke());const w={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,proxy:s.value.proxy.enabled?{type:s.value.proxy.type,host:s.value.proxy.host,port:parseInt(s.value.proxy.port),username:s.value.proxy.username||null,password:s.value.proxy.password||null}:null};s.value.platform==="claude"?(w.claudeAiOauth=d.claudeAiOauth||d,w.priority=s.value.priority||50,w.autoStopOnWarning=s.value.autoStopOnWarning||!1,w.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,w.useUnifiedClientId=s.value.useUnifiedClientId||!1,w.unifiedClientId=s.value.unifiedClientId||"",w.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}):s.value.platform==="gemini"?(w.geminiOauth=d.tokens||d,s.value.projectId&&(w.projectId=s.value.projectId),w.priority=s.value.priority||50):s.value.platform==="openai"&&(w.openaiOauth=d.tokens||d,w.accountInfo=d.accountInfo,w.priority=s.value.priority||50);let le;s.value.platform==="claude"?le=await I.createClaudeAccount(w):s.value.platform==="openai"?le=await I.createOpenAIAccount(w):le=await I.createGeminiAccount(w),se("success",le)}catch(w){const le=((r=(t=w.response)==null?void 0:t.data)==null?void 0:r.error)||w.message||"账户创建失败",oe=((G=(_=w.response)==null?void 0:_.data)==null?void 0:G.suggestion)||"",ne=((V=($e=w.response)==null?void 0:$e.data)==null?void 0:V.errorDetails)||null;let Re=le;oe&&(Re+=`
${oe}`),ne&&ne.error_description?Re+=`
详细信息: ${ne.error_description}`:ne&&ne.error&&ne.error.message&&(Re+=`
详细信息: ${ne.error.message}`),z(Re,"error","",8e3)}finally{E.value=!1}},Qe=async()=>{var t,r,_,G,$e,V;h.value.name="",h.value.accessToken="",h.value.apiUrl="",h.value.apiKey="";let d=!1;if((!s.value.name||s.value.name.trim()==="")&&(h.value.name="请填写账户名称",d=!0),s.value.platform==="claude-console"&&((!s.value.apiUrl||s.value.apiUrl.trim()==="")&&(h.value.apiUrl="请填写 API URL",d=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(h.value.apiKey="请填写 API Key",d=!0)),s.value.platform==="ccr"&&((!s.value.apiUrl||s.value.apiUrl.trim()==="")&&(h.value.apiUrl="请填写 API URL",d=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(h.value.apiKey="请填写 API Key",d=!0)),s.value.platform==="openai-responses"?((!s.value.baseApi||s.value.baseApi.trim()==="")&&(h.value.baseApi="请填写 API 基础地址",d=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(h.value.apiKey="请填写 API 密钥",d=!0)):s.value.platform==="bedrock"?((!s.value.accessKeyId||s.value.accessKeyId.trim()==="")&&(h.value.accessKeyId="请填写 AWS 访问密钥 ID",d=!0),(!s.value.secretAccessKey||s.value.secretAccessKey.trim()==="")&&(h.value.secretAccessKey="请填写 AWS 秘密访问密钥",d=!0),(!s.value.region||s.value.region.trim()==="")&&(h.value.region="请选择 AWS 区域",d=!0)):s.value.platform==="azure_openai"?((!s.value.azureEndpoint||s.value.azureEndpoint.trim()==="")&&(h.value.azureEndpoint="请填写 Azure Endpoint",d=!0),(!s.value.deploymentName||s.value.deploymentName.trim()==="")&&(h.value.deploymentName="请填写部署名称",d=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(h.value.apiKey="请填写 API Key",d=!0)):s.value.addType==="manual"&&(s.value.platform==="openai"?(!s.value.refreshToken||s.value.refreshToken.trim()==="")&&(h.value.refreshToken="请填写 Refresh Token",d=!0):s.value.platform==="gemini"?(!s.value.accessToken||s.value.accessToken.trim()==="")&&(h.value.accessToken="请填写 Access Token",d=!0):s.value.platform==="claude"&&(!s.value.accessToken||s.value.accessToken.trim()==="")&&(h.value.accessToken="请填写 Access Token",d=!0)),s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)&&(z("请选择一个分组","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){E.value=!0;try{const w={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,proxy:s.value.proxy.enabled?{type:s.value.proxy.type,host:s.value.proxy.host,port:parseInt(s.value.proxy.port),username:s.value.proxy.username||null,password:s.value.proxy.password||null}:null};if(s.value.platform==="claude"){const oe=s.value.refreshToken?6e5:31536e6;s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=ke()),w.claudeAiOauth={accessToken:s.value.accessToken,refreshToken:s.value.refreshToken||"",expiresAt:Date.now()+oe,scopes:[]},w.priority=s.value.priority||50,w.autoStopOnWarning=s.value.autoStopOnWarning||!1,w.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,w.useUnifiedClientId=s.value.useUnifiedClientId||!1,w.unifiedClientId=s.value.unifiedClientId||"",w.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 oe=s.value.refreshToken?6e5:31536e6;w.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()+oe},s.value.projectId&&(w.projectId=s.value.projectId),w.priority=s.value.priority||50}else if(s.value.platform==="openai"){const oe=s.value.refreshToken?6e5:31536e6;w.openaiOauth={idToken:"",accessToken:s.value.accessToken||"",refreshToken:s.value.refreshToken,expires_in:Math.floor(oe/1e3)},w.accountInfo={accountId:"",chatgptUserId:"",organizationId:"",organizationRole:"",organizationTitle:"",planType:"",email:"",emailVerified:!1},w.needsImmediateRefresh=!0,w.requireRefreshSuccess=!0,w.priority=s.value.priority||50}else s.value.platform==="claude-console"||s.value.platform==="ccr"?(w.apiUrl=s.value.apiUrl,w.apiKey=s.value.apiKey,w.priority=s.value.priority||50,w.supportedModels=lt()||{},w.userAgent=s.value.userAgent||null,w.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0,w.dailyQuota=s.value.dailyQuota||0,w.quotaResetTime=s.value.quotaResetTime||"00:00"):s.value.platform==="openai-responses"?(w.baseApi=s.value.baseApi,w.apiKey=s.value.apiKey,w.userAgent=s.value.userAgent||"",w.priority=s.value.priority||50,w.rateLimitDuration=60,w.dailyQuota=s.value.dailyQuota||0,w.quotaResetTime=s.value.quotaResetTime||"00:00"):s.value.platform==="bedrock"?(w.awsCredentials={accessKeyId:s.value.accessKeyId,secretAccessKey:s.value.secretAccessKey,sessionToken:s.value.sessionToken||null},w.region=s.value.region,w.defaultModel=s.value.defaultModel||null,w.smallFastModel=s.value.smallFastModel||null,w.priority=s.value.priority||50,w.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0):s.value.platform==="azure_openai"&&(w.azureEndpoint=s.value.azureEndpoint,w.apiKey=s.value.apiKey,w.apiVersion=s.value.apiVersion||"2024-02-01",w.deploymentName=s.value.deploymentName,w.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[],w.priority=s.value.priority||50,w.isActive=s.value.isActive!==!1,w.schedulable=s.value.schedulable!==!1);let le;if(s.value.platform==="claude")le=await I.createClaudeAccount(w);else if(s.value.platform==="claude-console"||s.value.platform==="ccr")le=await I.createClaudeConsoleAccount(w);else if(s.value.platform==="openai-responses")le=await I.createOpenAIResponsesAccount(w);else if(s.value.platform==="bedrock")le=await I.createBedrockAccount(w);else if(s.value.platform==="openai")le=await I.createOpenAIAccount(w);else if(s.value.platform==="azure_openai")le=await I.createAzureOpenAIAccount(w);else if(s.value.platform==="gemini")le=await I.createGeminiAccount(w);else throw new Error(`不支持的平台: ${s.value.platform}`);se("success",le)}catch(w){const le=((r=(t=w.response)==null?void 0:t.data)==null?void 0:r.error)||w.message||"账户创建失败",oe=((G=(_=w.response)==null?void 0:_.data)==null?void 0:G.suggestion)||"",ne=((V=($e=w.response)==null?void 0:$e.data)==null?void 0:V.errorDetails)||null;let Re=le;oe&&(Re+=`
${oe}`),ne&&ne.error_description?Re+=`
详细信息: ${ne.error_description}`:ne&&ne.error&&ne.error.message&&(Re+=`
详细信息: ${ne.error.message}`),z(Re,"error","",8e3)}finally{E.value=!1}}},Be=async()=>{var d,t,r,_,G,$e;if(h.value.name="",!s.value.name||s.value.name.trim()===""){h.value.name="请填写账户名称";return}if(s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)){z("请选择一个分组","error");return}if(s.value.accountType==="group"&&(s.value.groupIds&&s.value.groupIds.length>0?s.value.groupId=s.value.groupIds[0]:s.value.groupId=""),!(s.value.platform==="gemini"&&(!s.value.projectId||s.value.projectId.trim()==="")&&!await p("项目 ID 未填写",`您尚未填写项目 ID。
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号需要提供项目 ID。
如果您使用的是普通个人账号,可以继续不填写。`,"继续保存","返回填写"))){E.value=!0;try{const V={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,proxy:s.value.proxy.enabled?{type:s.value.proxy.type,host:s.value.proxy.host,port:parseInt(s.value.proxy.port),username:s.value.proxy.username||null,password:s.value.proxy.password||null}:null};if(s.value.accessToken||s.value.refreshToken){if(f.account.platform==="claude"){const w=s.value.refreshToken?6e5:31536e6;V.claudeAiOauth={accessToken:s.value.accessToken||"",refreshToken:s.value.refreshToken||"",expiresAt:Date.now()+w,scopes:f.account.scopes||[]}}else if(f.account.platform==="gemini"){const w=s.value.refreshToken?6e5:31536e6;V.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()+w}}else if(f.account.platform==="openai"){const w=s.value.refreshToken?6e5:31536e6;V.openaiOauth={idToken:"",accessToken:s.value.accessToken||"",refreshToken:s.value.refreshToken||"",expires_in:Math.floor(w/1e3)},s.value.refreshToken&&s.value.refreshToken!==f.account.refreshToken&&(V.needsImmediateRefresh=!0,V.requireRefreshSuccess=!0)}}if(f.account.platform==="gemini"&&(V.projectId=s.value.projectId||""),f.account.platform==="claude"&&(s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=ke()),V.priority=s.value.priority||50,V.autoStopOnWarning=s.value.autoStopOnWarning||!1,V.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,V.useUnifiedClientId=s.value.useUnifiedClientId||!1,V.unifiedClientId=s.value.unifiedClientId||"",V.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}),f.account.platform==="openai"&&(V.priority=s.value.priority||50),f.account.platform==="gemini"&&(V.priority=s.value.priority||50),f.account.platform==="claude-console"&&(V.apiUrl=s.value.apiUrl,s.value.apiKey&&(V.apiKey=s.value.apiKey),V.priority=s.value.priority||50,V.supportedModels=lt()||{},V.userAgent=s.value.userAgent||null,V.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0,V.dailyQuota=s.value.dailyQuota||0,V.quotaResetTime=s.value.quotaResetTime||"00:00"),f.account.platform==="openai-responses"&&(V.baseApi=s.value.baseApi,s.value.apiKey&&(V.apiKey=s.value.apiKey),V.userAgent=s.value.userAgent||"",V.priority=s.value.priority||50,V.dailyQuota=s.value.dailyQuota||0,V.quotaResetTime=s.value.quotaResetTime||"00:00"),f.account.platform==="bedrock"&&((s.value.accessKeyId||s.value.secretAccessKey||s.value.sessionToken)&&(V.awsCredentials={},s.value.accessKeyId&&(V.awsCredentials.accessKeyId=s.value.accessKeyId),s.value.secretAccessKey&&(V.awsCredentials.secretAccessKey=s.value.secretAccessKey),s.value.sessionToken!==void 0&&(V.awsCredentials.sessionToken=s.value.sessionToken||null)),s.value.region&&(V.region=s.value.region),V.defaultModel=s.value.defaultModel||null,V.smallFastModel=s.value.smallFastModel||null,V.priority=s.value.priority||50,V.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0),f.account.platform==="azure_openai"&&(V.azureEndpoint=s.value.azureEndpoint,V.apiVersion=s.value.apiVersion||"2024-02-01",V.deploymentName=s.value.deploymentName,V.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[],V.priority=s.value.priority||50,s.value.apiKey&&s.value.apiKey.trim()&&(V.apiKey=s.value.apiKey)),f.account.platform==="claude")await I.updateClaudeAccount(f.account.id,V);else if(f.account.platform==="claude-console")await I.updateClaudeConsoleAccount(f.account.id,V);else if(f.account.platform==="openai-responses")await I.updateOpenAIResponsesAccount(f.account.id,V);else if(f.account.platform==="bedrock")await I.updateBedrockAccount(f.account.id,V);else if(f.account.platform==="openai")await I.updateOpenAIAccount(f.account.id,V);else if(f.account.platform==="azure_openai")await I.updateAzureOpenAIAccount(f.account.id,V);else if(f.account.platform==="gemini")await I.updateGeminiAccount(f.account.id,V);else throw new Error(`不支持的平台: ${f.account.platform}`);se("success")}catch(V){const w=((t=(d=V.response)==null?void 0:d.data)==null?void 0:t.error)||V.message||"账户更新失败",le=((_=(r=V.response)==null?void 0:r.data)==null?void 0:_.suggestion)||"",oe=(($e=(G=V.response)==null?void 0:G.data)==null?void 0:$e.errorDetails)||null;let ne=w;le&&(ne+=`
${le}`),oe&&oe.error_description?ne+=`
详细信息: ${oe.error_description}`:oe&&oe.error&&oe.error.message&&(ne+=`
详细信息: ${oe.error.message}`),z(ne,"error","",8e3)}finally{E.value=!1}}};Z(()=>s.value.name,()=>{var d;h.value.name&&((d=s.value.name)!=null&&d.trim())&&(h.value.name="")}),Z(()=>s.value.accessToken,()=>{var d;h.value.accessToken&&((d=s.value.accessToken)!=null&&d.trim())&&(h.value.accessToken="")}),Z(()=>s.value.apiUrl,()=>{var d;h.value.apiUrl&&((d=s.value.apiUrl)!=null&&d.trim())&&(h.value.apiUrl="")}),Z(()=>s.value.apiKey,()=>{var d;h.value.apiKey&&((d=s.value.apiKey)!=null&&d.trim())&&(h.value.apiKey="")}),Z(()=>s.value.azureEndpoint,()=>{var d;h.value.azureEndpoint&&((d=s.value.azureEndpoint)!=null&&d.trim())&&(h.value.azureEndpoint="")}),Z(()=>s.value.deploymentName,()=>{var d;h.value.deploymentName&&((d=s.value.deploymentName)!=null&&d.trim())&&(h.value.deploymentName="")});const ze=C([]),Se=C(!1),m=C(!1),g=Ke(()=>{let d=s.value.platform;return s.value.platform==="claude-console"||s.value.platform==="ccr"?d="claude":s.value.platform==="openai-responses"&&(d="openai"),ze.value.filter(t=>t.platform===d)}),$=async()=>{Se.value=!0;try{const d=await R.get("/admin/account-groups");ze.value=d.data||[]}catch{z("加载分组列表失败","error"),ze.value=[]}finally{Se.value=!1}},be=async()=>{await $(),z("分组列表已刷新","success")},at=()=>{m.value=!0},gt=async()=>{await $()};Z(()=>s.value.platform,d=>{d==="claude-console"||d==="ccr"||d==="bedrock"||d==="openai-responses"?s.value.addType="manual":d==="claude"?s.value.addType="setup-token":(d==="gemini"||d==="openai")&&(s.value.addType="oauth"),s.value.accountType==="group"&&(s.value.groupId="",s.value.groupIds=[])}),Z(()=>s.value.groupIds,d=>{s.value.accountType==="group"&&(d&&d.length>0?s.value.groupId=d[0]:s.value.groupId="")},{deep:!0}),Z(y,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 G=new URL(t).searchParams.get("code");G?(y.value=G,z("成功提取授权码!","success")):z("URL 中未找到授权码参数,请检查链接是否正确","error")}catch{z("链接格式错误,请检查是否为完整的 URL","error")}else z("请粘贴以 http://localhost:45462 开头的链接","error")}),Z(()=>s.value.platform,d=>{S.value||se("platform-changed",d)}),Z(()=>s.value.accountType,d=>{d==="group"&&ze.value.length===0&&$()}),Z(()=>s.value.groupId,d=>{d==="__new__"&&(s.value.groupId="",m.value=!0)});const _e=()=>{ae.value.push({from:"",to:""})},rt=d=>{ae.value.splice(d,1)},Ae=(d,t)=>{if(ae.value.some(_=>_.from===d)){z(`模型 ${d} 的映射已存在`,"info");return}ae.value.push({from:d,to:t}),z(`已添加映射: ${d}${t}`,"success")},lt=()=>{const d={};return ae.value.forEach(t=>{t.from&&t.to&&(d[t.from]=t.to)}),Object.keys(d).length>0?d:null};Z(()=>f.account,d=>{if(d){Ie();const t=d.proxy&&d.proxy.host&&d.proxy.port?{enabled:!0,type:d.proxy.type||"socks5",host:d.proxy.host,port:d.proxy.port,username:d.proxy.username||"",password:d.proxy.password||""}:{enabled:!1,type:"socks5",host:"",port:"",username:"",password:""};let r="";d.accountType==="group"&&(r=d.groupId||d.groupInfo&&d.groupInfo.id||"");let _="claude_max";if(d.subscriptionInfo){const G=typeof d.subscriptionInfo=="string"?JSON.parse(d.subscriptionInfo):d.subscriptionInfo;G.accountType?_=G.accountType:G.hasClaudeMax?_="claude_max":G.hasClaudePro?_="claude_pro":_="claude_free"}s.value={platform:d.platform,addType:"oauth",name:d.name,description:d.description||"",accountType:d.accountType||"shared",subscriptionType:_,autoStopOnWarning:d.autoStopOnWarning||!1,useUnifiedUserAgent:d.useUnifiedUserAgent||!1,useUnifiedClientId:d.useUnifiedClientId||!1,unifiedClientId:d.unifiedClientId||"",groupId:r,groupIds:[],projectId:d.projectId||"",accessToken:"",refreshToken:"",proxy:t,apiUrl:d.apiUrl||"",apiKey:"",priority:d.priority||50,supportedModels:(()=>{const G=d.supportedModels;return G?typeof G=="object"&&!Array.isArray(G)?Object.keys(G):Array.isArray(G)?G:[]:[]})(),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"&&Ne(),d.accountType==="group"&&$().then(async()=>{const G=[];if(d.groupInfo&&d.groupInfo.id)s.value.groupId=d.groupInfo.id,G.push(d.groupInfo.id);else if(d.groupId)s.value.groupId=d.groupId,G.push(d.groupId);else if(d.groupIds&&Array.isArray(d.groupIds)&&d.groupIds.length>0)s.value.groupId=d.groupIds[0],G.push(...d.groupIds);else{const $e=ze.value.map(async V=>{try{((await R.get(`/admin/account-groups/${V.id}/members`)).data||[]).some(oe=>oe.id===d.id)&&(G.push(V.id),s.value.groupId||(s.value.groupId=V.id))}catch{}});await Promise.all($e)}s.value.groupIds=G})}},{immediate:!0});const ot=async()=>{try{const d=await R.get("/admin/claude-code-version");d.success&&d.userAgent?W.value=d.userAgent:W.value=""}catch{W.value=""}},He=async()=>{k.value=!0;try{(await R.post("/admin/claude-code-version/clear")).success?(W.value="",z("统一User-Agent缓存已清除","success")):z("清除缓存失败","error")}catch(d){z("清除缓存失败:"+(d.message||"未知错误"),"error")}finally{k.value=!1}},ke=()=>{const d=new Uint8Array(32);return crypto.getRandomValues(d),Array.from(d,t=>t.toString(16).padStart(2,"0")).join("")},qe=()=>{s.value.unifiedClientId=ke(),z("已生成新的客户端标识","success")},nt=()=>{s.value.useUnifiedClientId&&(s.value.useUnifiedUserAgent=!0,s.value.unifiedClientId||(s.value.unifiedClientId=ke()))};return pt(()=>{var d;M.value=ye(s.value.platform),ot(),S.value&&((d=f.account)==null?void 0:d.platform)==="claude-console"&&Ne()}),Z(()=>s.value.platform,d=>{d==="claude"&&ot()}),(d,t)=>(n(),Ce(ft,{to:"body"},[N.value?(n(),u("div",Pa,[e("div",La,[e("div",Oa,[e("div",ja,[t[115]||(t[115]=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",Da,v(S.value?"编辑账户":"添加账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:t[0]||(t[0]=r=>d.$emit("close"))},t[116]||(t[116]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),!S.value&&(s.value.addType==="oauth"||s.value.addType==="setup-token")?(n(),u("div",Ea,[e("div",Wa,[e("div",qa,[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",D.value>=1?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 1 ",2),t[117]||(t[117]=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[119]||(t[119]=e("div",{class:"h-0.5 w-4 bg-gray-300 sm:w-8"},null,-1)),e("div",Ga,[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",D.value>=2?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 2 ",2),t[118]||(t[118]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"授权认证",-1))])])])):b("",!0),D.value===1&&!S.value?(n(),u("div",Na,[e("div",Fa,[S.value?b("",!0):(n(),u("div",Qa,[t[149]||(t[149]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择平台",-1)),e("div",Ba,[e("div",_a,[e("div",{class:K(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[M.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]=r=>je("claude"))},[e("div",Ha,[e("div",Ja,[t[121]||(t[121]=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)),M.value==="claude"?(n(),u("div",Ya,t[120]||(t[120]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):b("",!0)]),t[122]||(t[122]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Claude ",-1)),t[123]||(t[123]=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",[M.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]=r=>je("openai"))},[e("div",Za,[e("div",Xa,[t[125]||(t[125]=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)),M.value==="openai"?(n(),u("div",er,t[124]||(t[124]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):b("",!0)]),t[126]||(t[126]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," OpenAI ",-1)),t[127]||(t[127]=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",[M.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]=r=>je("gemini"))},[e("div",tr,[e("div",sr,[t[129]||(t[129]=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)),M.value==="gemini"?(n(),u("div",ar,t[128]||(t[128]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):b("",!0)]),t[130]||(t[130]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Gemini ",-1)),t[131]||(t[131]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Google AI",-1))])],2)]),M.value?(n(),u("div",rr,[t[148]||(t[148]=e("p",{class:"mb-2 text-xs font-medium text-gray-700 dark:text-gray-300"}," 选择具体平台类型: ",-1)),e("div",lr,[M.value==="claude"?(n(),u(fe,{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"]])},[x(e("input",{"onUpdate:modelValue":t[4]||(t[4]=r=>s.value.platform=r),class:"sr-only",type:"radio",value:"claude"},null,512),[[ee,s.value.platform]]),t[133]||(t[133]=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(),u("div",or,t[132]||(t[132]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):b("",!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"]])},[x(e("input",{"onUpdate:modelValue":t[5]||(t[5]=r=>s.value.platform=r),class:"sr-only",type:"radio",value:"claude-console"},null,512),[[ee,s.value.platform]]),t[135]||(t[135]=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(),u("div",nr,t[134]||(t[134]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):b("",!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"]])},[x(e("input",{"onUpdate:modelValue":t[6]||(t[6]=r=>s.value.platform=r),class:"sr-only",type:"radio",value:"bedrock"},null,512),[[ee,s.value.platform]]),t[137]||(t[137]=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(),u("div",ir,t[136]||(t[136]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):b("",!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"]])},[x(e("input",{"onUpdate:modelValue":t[7]||(t[7]=r=>s.value.platform=r),class:"sr-only",type:"radio",value:"ccr"},null,512),[[ee,s.value.platform]]),t[139]||(t[139]=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(),u("div",dr,t[138]||(t[138]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):b("",!0)],2)],64)):b("",!0),M.value==="openai"?(n(),u(fe,{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"]])},[x(e("input",{"onUpdate:modelValue":t[8]||(t[8]=r=>s.value.platform=r),class:"sr-only",type:"radio",value:"openai"},null,512),[[ee,s.value.platform]]),t[141]||(t[141]=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(),u("div",ur,t[140]||(t[140]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):b("",!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"]])},[x(e("input",{"onUpdate:modelValue":t[9]||(t[9]=r=>s.value.platform=r),class:"sr-only",type:"radio",value:"openai-responses"},null,512),[[ee,s.value.platform]]),t[143]||(t[143]=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(),u("div",pr,t[142]||(t[142]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):b("",!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"]])},[x(e("input",{"onUpdate:modelValue":t[10]||(t[10]=r=>s.value.platform=r),class:"sr-only",type:"radio",value:"azure_openai"},null,512),[[ee,s.value.platform]]),t[145]||(t[145]=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(),u("div",gr,t[144]||(t[144]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):b("",!0)],2)],64)):b("",!0),M.value==="gemini"?(n(),u("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"]])},[x(e("input",{"onUpdate:modelValue":t[11]||(t[11]=r=>s.value.platform=r),class:"sr-only",type:"radio",value:"gemini"},null,512),[[ee,s.value.platform]]),t[147]||(t[147]=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(),u("div",mr,t[146]||(t[146]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):b("",!0)],2)):b("",!0)])])):b("",!0)])])),!S.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(),u("div",yr,[t[153]||(t[153]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"添加方式",-1)),e("div",xr,[s.value.platform==="claude"?(n(),u("label",fr,[x(e("input",{"onUpdate:modelValue":t[12]||(t[12]=r=>s.value.addType=r),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),[[ee,s.value.addType]]),t[150]||(t[150]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Setup Token (推荐)",-1))])):b("",!0),e("label",cr,[x(e("input",{"onUpdate:modelValue":t[13]||(t[13]=r=>s.value.addType=r),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"oauth"},null,512),[[ee,s.value.addType]]),t[151]||(t[151]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OAuth 授权",-1))]),e("label",br,[x(e("input",{"onUpdate:modelValue":t[14]||(t[14]=r=>s.value.addType=r),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"manual"},null,512),[[ee,s.value.addType]]),t[152]||(t[152]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"手动输入 Access Token",-1))])])])):b("",!0),e("div",null,[t[154]||(t[154]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),x(e("input",{"onUpdate:modelValue":t[15]||(t[15]=r=>s.value.name=r),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":h.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[A,s.value.name]]),h.value.name?(n(),u("p",vr,v(h.value.name),1)):b("",!0)]),e("div",null,[t[155]||(t[155]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":t[16]||(t[16]=r=>s.value.description=r),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[A,s.value.description]])]),e("div",null,[t[159]||(t[159]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",kr,[e("label",wr,[x(e("input",{"onUpdate:modelValue":t[17]||(t[17]=r=>s.value.accountType=r),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[ee,s.value.accountType]]),t[156]||(t[156]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",hr,[x(e("input",{"onUpdate:modelValue":t[18]||(t[18]=r=>s.value.accountType=r),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[ee,s.value.accountType]]),t[157]||(t[157]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",Ar,[x(e("input",{"onUpdate:modelValue":t[19]||(t[19]=r=>s.value.accountType=r),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[ee,s.value.accountType]]),t[158]||(t[158]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[160]||(t[160]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户供所有API Key使用专属账户仅供特定API Key使用分组调度加入分组供分组内调度 ",-1))]),s.value.accountType==="group"?(n(),u("div",$r,[t[162]||(t[162]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",Cr,[e("div",Ir,[e("div",Ur,[g.value.length===0?(n(),u("div",Tr," 暂无可用分组 ")):b("",!0),(n(!0),u(fe,null,he(g.value,r=>(n(),u("label",{key:r.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[x(e("input",{"onUpdate:modelValue":t[20]||(t[20]=_=>s.value.groupIds=_),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:r.id},null,8,Vr),[[ge,s.value.groupIds]]),e("span",Rr,v(r.name)+" ("+v(r.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:at},t[161]||(t[161]=[e("i",{class:"fas fa-plus"},null,-1),U(" 新建分组 ",-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:be},[e("i",{class:K(["fas fa-sync-alt",{"animate-spin":Se.value}])},null,2)])])])):b("",!0),s.value.platform==="gemini"?(n(),u("div",Kr,[t[163]||(t[163]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[21]||(t[21]=r=>s.value.projectId=r),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),[[A,s.value.projectId]]),t[164]||(t[164]=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,[U(" 访问 "),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,[U(" 复制"),e("span",{class:"font-semibold text-red-600"},"项目 IDProject ID"),U(",通常是字符串格式 ")]),e("li",{class:"text-red-600"}," ⚠️ 注意:要复制项目 IDProject ID不要复制项目编号Project Number ")])]),e("p",{class:"mt-2"},[e("strong",null,"提示:"),U("如果您的账号是普通个人账号(未绑定 Google Cloud请留空此字段。 ")])])])],-1))])):b("",!0),s.value.platform==="bedrock"&&!S.value?(n(),u("div",zr,[e("div",null,[t[165]||(t[165]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 访问密钥 ID *",-1)),x(e("input",{"onUpdate:modelValue":t[22]||(t[22]=r=>s.value.accessKeyId=r),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":h.value.accessKeyId}]),placeholder:"请输入 AWS Access Key ID",required:"",type:"text"},null,2),[[A,s.value.accessKeyId]]),h.value.accessKeyId?(n(),u("p",Sr,v(h.value.accessKeyId),1)):b("",!0)]),e("div",null,[t[166]||(t[166]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 秘密访问密钥 *",-1)),x(e("input",{"onUpdate:modelValue":t[23]||(t[23]=r=>s.value.secretAccessKey=r),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":h.value.secretAccessKey}]),placeholder:"请输入 AWS Secret Access Key",required:"",type:"password"},null,2),[[A,s.value.secretAccessKey]]),h.value.secretAccessKey?(n(),u("p",Mr,v(h.value.secretAccessKey),1)):b("",!0)]),e("div",null,[t[167]||(t[167]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 区域 *",-1)),x(e("input",{"onUpdate:modelValue":t[24]||(t[24]=r=>s.value.region=r),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":h.value.region}]),placeholder:"例如us-east-1",required:"",type:"text"},null,2),[[A,s.value.region]]),h.value.region?(n(),u("p",Pr,v(h.value.region),1)):b("",!0),t[168]||(t[168]=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[169]||(t[169]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"会话令牌 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[25]||(t[25]=r=>s.value.sessionToken=r),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),[[A,s.value.sessionToken]]),t[170]||(t[170]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 仅在使用临时 AWS 凭证时需要填写 ",-1))]),e("div",null,[t[171]||(t[171]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"默认主模型 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[26]||(t[26]=r=>s.value.defaultModel=r),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),[[A,s.value.defaultModel]]),t[172]||(t[172]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1)),t[173]||(t[173]=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[174]||(t[174]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[27]||(t[27]=r=>s.value.smallFastModel=r),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),[[A,s.value.smallFastModel]]),t[175]||(t[175]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 用于快速响应的轻量级模型,留空将使用系统默认 ",-1))])])):b("",!0),s.value.platform==="azure_openai"&&!S.value?(n(),u("div",Lr,[e("div",null,[t[176]||(t[176]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint *",-1)),x(e("input",{"onUpdate:modelValue":t[28]||(t[28]=r=>s.value.azureEndpoint=r),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":h.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",required:"",type:"url"},null,2),[[A,s.value.azureEndpoint]]),h.value.azureEndpoint?(n(),u("p",Or,v(h.value.azureEndpoint),1)):b("",!0),t[177]||(t[177]=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[178]||(t[178]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),x(e("input",{"onUpdate:modelValue":t[29]||(t[29]=r=>s.value.apiVersion=r),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),[[A,s.value.apiVersion]]),t[179]||(t[179]=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[180]||(t[180]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称 *",-1)),x(e("input",{"onUpdate:modelValue":t[30]||(t[30]=r=>s.value.deploymentName=r),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":h.value.deploymentName}]),placeholder:"gpt-4",required:"",type:"text"},null,2),[[A,s.value.deploymentName]]),h.value.deploymentName?(n(),u("p",jr,v(h.value.deploymentName),1)):b("",!0),t[181]||(t[181]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Azure OpenAI Studio 中创建的部署名称 ",-1))]),e("div",null,[t[182]||(t[182]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),x(e("input",{"onUpdate:modelValue":t[31]||(t[31]=r=>s.value.apiKey=r),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":h.value.apiKey}]),placeholder:"请输入 Azure OpenAI API Key",required:"",type:"password"},null,2),[[A,s.value.apiKey]]),h.value.apiKey?(n(),u("p",Dr,v(h.value.apiKey),1)):b("",!0),t[183]||(t[183]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Azure 门户获取的 API 密钥 ",-1))]),e("div",null,[t[184]||(t[184]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",Er,[(n(),u(fe,null,he(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],r=>e("label",{key:r,class:"flex cursor-pointer items-center"},[x(e("input",{"onUpdate:modelValue":t[32]||(t[32]=_=>s.value.supportedModels=_),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:r},null,8,Wr),[[ge,s.value.supportedModels]]),e("span",qr,v(r),1)])),64))]),t[185]||(t[185]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 选择此部署支持的模型类型 ",-1))])])):b("",!0),s.value.platform==="bedrock"&&!S.value?(n(),u("div",Gr,[e("div",null,[t[190]||(t[190]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",Nr,[e("label",Fr,[x(e("input",{"onUpdate:modelValue":t[33]||(t[33]=r=>s.value.enableRateLimit=r),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),[[ge,s.value.enableRateLimit]]),t[186]||(t[186]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[187]||(t[187]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),u("div",Qr,[t[188]||(t[188]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),x(e("input",{"onUpdate:modelValue":t[34]||(t[34]=r=>s.value.rateLimitDuration=r),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),[[A,s.value.rateLimitDuration,void 0,{number:!0}]]),t[189]||(t[189]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):b("",!0)])])):b("",!0),(s.value.platform==="claude-console"||s.value.platform==="ccr")&&!S.value?(n(),u("div",Br,[e("div",null,[t[191]||(t[191]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),x(e("input",{"onUpdate:modelValue":t[35]||(t[35]=r=>s.value.apiUrl=r),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":h.value.apiUrl}]),placeholder:"例如https://api.example.com",required:"",type:"text"},null,2),[[A,s.value.apiUrl]]),h.value.apiUrl?(n(),u("p",_r,v(h.value.apiUrl),1)):b("",!0)]),e("div",null,[t[192]||(t[192]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),x(e("input",{"onUpdate:modelValue":t[36]||(t[36]=r=>s.value.apiKey=r),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":h.value.apiKey}]),placeholder:"请输入API Key",required:"",type:"password"},null,2),[[A,s.value.apiKey]]),h.value.apiKey?(n(),u("p",Hr,v(h.value.apiKey),1)):b("",!0)]),e("div",Jr,[e("div",null,[t[193]||(t[193]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),x(e("input",{"onUpdate:modelValue":t[37]||(t[37]=r=>s.value.dailyQuota=r),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[A,s.value.dailyQuota,void 0,{number:!0}]]),t[194]||(t[194]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度0 表示不限制 ",-1))]),e("div",null,[t[195]||(t[195]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),x(e("input",{"onUpdate:modelValue":t[38]||(t[38]=r=>s.value.quotaResetTime=r),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[A,s.value.quotaResetTime]]),t[196]||(t[196]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 每日自动重置额度的时间 ",-1))])]),e("div",null,[t[200]||(t[200]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型映射表 (可选)",-1)),t[201]||(t[201]=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"}),U(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",Yr,[(n(!0),u(fe,null,he(ae.value,(r,_)=>(n(),u("div",{key:_,class:"flex items-center gap-2"},[x(e("input",{"onUpdate:modelValue":G=>r.from=G,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,Zr),[[A,r.from]]),t[198]||(t[198]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),x(e("input",{"onUpdate:modelValue":G=>r.to=G,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,Xr),[[A,r.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:G=>rt(_)},t[197]||(t[197]=[e("i",{class:"fas fa-trash"},null,-1)]),8,el)]))),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:_e},t[199]||(t[199]=[e("i",{class:"fas fa-plus mr-2"},null,-1),U(" 添加模型映射 ",-1)])),e("div",tl,[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[39]||(t[39]=r=>Ae("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[40]||(t[40]=r=>Ae("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[41]||(t[41]=r=>Ae("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[42]||(t[42]=r=>Ae("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus 4.1 → Sonnet 4 ")]),t[202]||(t[202]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空表示支持所有模型。如果指定模型,请求中的模型不在列表内将不会调度到此账号 ",-1))]),e("div",null,[t[203]||(t[203]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[43]||(t[43]=r=>s.value.userAgent=r),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),[[A,s.value.userAgent]]),t[204]||(t[204]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空时将自动使用客户端的 User-Agent仅在需要固定特定 UA 时填写 ",-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"},"限流机制",-1)),e("div",sl,[e("label",al,[x(e("input",{"onUpdate:modelValue":t[44]||(t[44]=r=>s.value.enableRateLimit=r),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),[[ge,s.value.enableRateLimit]]),t[205]||(t[205]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[206]||(t[206]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),u("div",rl,[t[207]||(t[207]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),x(e("input",{"onUpdate:modelValue":t[45]||(t[45]=r=>s.value.rateLimitDuration=r),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),[[A,s.value.rateLimitDuration,void 0,{number:!0}]]),t[208]||(t[208]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):b("",!0)])])):b("",!0),s.value.platform==="openai-responses"&&!S.value?(n(),u("div",ll,[e("div",null,[t[210]||(t[210]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),x(e("input",{"onUpdate:modelValue":t[46]||(t[46]=r=>s.value.baseApi=r),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),[[A,s.value.baseApi]]),t[211]||(t[211]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方 OpenAI 兼容 API 的基础地址,不要包含具体路径 ",-1))]),e("div",null,[t[212]||(t[212]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",ol,[x(e("input",{"onUpdate:modelValue":t[47]||(t[47]=r=>s.value.apiKey=r),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:Q.value?"text":"password"},null,8,nl),[[yt,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[48]||(t[48]=r=>Q.value=!Q.value)},[e("i",{class:K(Q.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[213]||(t[213]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方服务提供的 API 密钥 ",-1))]),e("div",null,[t[214]||(t[214]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[49]||(t[49]=r=>s.value.userAgent=r),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),[[A,s.value.userAgent]]),t[215]||(t[215]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可选项。如果设置,所有请求将使用此 User-Agent否则透传客户端的 User-Agent ",-1))]),x(e("input",{"onUpdate:modelValue":t[50]||(t[50]=r=>s.value.rateLimitDuration=r),type:"hidden",value:"60"},null,512),[[A,s.value.rateLimitDuration,void 0,{number:!0}]])])):b("",!0),s.value.platform==="claude"?(n(),u("div",il,[t[218]||(t[218]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",dl,[e("label",ul,[x(e("input",{"onUpdate:modelValue":t[51]||(t[51]=r=>s.value.subscriptionType=r),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),[[ee,s.value.subscriptionType]]),t[216]||(t[216]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",pl,[x(e("input",{"onUpdate:modelValue":t[52]||(t[52]=r=>s.value.subscriptionType=r),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),[[ee,s.value.subscriptionType]]),t[217]||(t[217]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[219]||(t[219]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),U(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):b("",!0),s.value.platform==="claude"?(n(),u("div",gl,[e("label",ml,[x(e("input",{"onUpdate:modelValue":t[53]||(t[53]=r=>s.value.autoStopOnWarning=r),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ge,s.value.autoStopOnWarning]]),t[220]||(t[220]=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))])])):b("",!0),s.value.platform==="claude"?(n(),u("div",yl,[e("label",xl,[x(e("input",{"onUpdate:modelValue":t[54]||(t[54]=r=>s.value.useUnifiedUserAgent=r),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ge,s.value.useUnifiedUserAgent]]),e("div",fl,[t[222]||(t[222]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[223]||(t[223]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent提高兼容性 ",-1)),W.value?(n(),u("div",cl,[e("div",bl,[e("p",vl," 💡 当前统一版本:"+v(W.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:k.value,type:"button",onClick:He},[k.value?(n(),u("div",hl)):(n(),u("i",wl)),U(" "+v(k.value?"清除中...":"清除缓存"),1)],8,kl)])])):(n(),u("div",Al,t[221]||(t[221]=[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)])))])])])):b("",!0),s.value.platform==="claude"?(n(),u("div",$l,[e("label",Cl,[x(e("input",{"onUpdate:modelValue":t[55]||(t[55]=r=>s.value.useUnifiedClientId=r),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:nt},null,544),[[ge,s.value.useUnifiedClientId]]),e("div",Il,[t[227]||(t[227]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[228]||(t[228]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),s.value.useUnifiedClientId?(n(),u("div",Ul,[e("div",Tl,[e("div",{class:"mb-2 flex items-center justify-between"},[t[225]||(t[225]=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:qe},t[224]||(t[224]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),U(" 重新生成 ",-1)]))]),e("div",Vl,[e("code",Rl,[e("span",Kl,v(s.value.unifiedClientId.substring(0,8)),1),e("span",zl,v(s.value.unifiedClientId.substring(8,56)),1),e("span",Sl,v(s.value.unifiedClientId.substring(56)),1)])]),t[226]||(t[226]=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"}),U(" 此ID将替换请求中的user_id客户端部分保留session部分用于粘性会话 ")],-1))])])):b("",!0)])])])):b("",!0),e("div",null,[t[229]||(t[229]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),x(e("input",{"onUpdate:modelValue":t[56]||(t[56]=r=>s.value.priority=r),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),[[A,s.value.priority,void 0,{number:!0}]]),t[230]||(t[230]=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(),u("div",Ml,[e("div",Pl,[t[236]||(t[236]=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[234]||(t[234]=e("h5",{class:"mb-2 font-semibold text-blue-900 dark:text-blue-300"}," 手动输入 Token ",-1)),s.value.platform==="claude"?(n(),u("p",Ll," 请输入有效的 Claude Access Token。如果您有 Refresh Token建议也一并填写以支持自动刷新。 ")):s.value.platform==="gemini"?(n(),u("p",Ol," 请输入有效的 Gemini Access Token。如果您有 Refresh Token建议也一并填写以支持自动刷新。 ")):s.value.platform==="openai"?(n(),u("p",jl," 请输入有效的 OpenAI Access Token。如果您有 Refresh Token建议也一并填写以支持自动刷新。 ")):b("",!0),e("div",Dl,[t[233]||(t[233]=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"}),U(" 获取 Access Token 的方法: ")],-1)),s.value.platform==="claude"?(n(),u("p",El,t[231]||(t[231]=[U(" 请从已登录 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),U(" 文件中的凭证, 请勿使用 Claude 官网 API Keys 页面的密钥。 ",-1)]))):s.value.platform==="gemini"?(n(),u("p",Wl,t[232]||(t[232]=[U(" 请从已登录 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),U(" 文件中的凭证。 ",-1)]))):s.value.platform==="openai"?(n(),u("p",ql," 请从已登录 OpenAI 账户的机器上获取认证凭证, 或通过 OAuth 授权流程获取 Access Token。 ")):b("",!0)]),t[235]||(t[235]=e("p",{class:"text-xs text-blue-600 dark:text-blue-400"}," 💡 如果未填写 Refresh TokenToken 过期后需要手动更新。 ",-1))])]),s.value.platform==="openai"?(n(),u("div",Gl,[t[237]||(t[237]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":t[57]||(t[57]=r=>s.value.accessToken=r),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),[[A,s.value.accessToken]]),t[238]||(t[238]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),U(" Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。 ")],-1))])):(n(),u("div",Nl,[t[239]||(t[239]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token *",-1)),x(e("textarea",{"onUpdate:modelValue":t[58]||(t[58]=r=>s.value.accessToken=r),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":h.value.accessToken}]),placeholder:"请输入 Access Token...",required:"",rows:"4"},null,2),[[A,s.value.accessToken]]),h.value.accessToken?(n(),u("p",Fl,v(h.value.accessToken),1)):b("",!0)])),s.value.platform==="openai"?(n(),u("div",Ql,[t[240]||(t[240]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token *",-1)),x(e("textarea",{"onUpdate:modelValue":t[59]||(t[59]=r=>s.value.refreshToken=r),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":h.value.refreshToken}]),placeholder:"请输入 Refresh Token必填...",required:"",rows:"4"},null,2),[[A,s.value.refreshToken]]),h.value.refreshToken?(n(),u("p",Bl,v(h.value.refreshToken),1)):b("",!0),t[241]||(t[241]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),U(" 系统将使用 Refresh Token 自动获取 Access Token 和用户信息 ")],-1))])):(n(),u("div",_l,[t[242]||(t[242]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":t[60]||(t[60]=r=>s.value.refreshToken=r),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),[[A,s.value.refreshToken]])]))])):b("",!0),we(xt,{modelValue:s.value.proxy,"onUpdate:modelValue":t[61]||(t[61]=r=>s.value.proxy=r)},null,8,["modelValue"]),e("div",Hl,[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[62]||(t[62]=r=>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(),u("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:E.value,type:"button",onClick:De}," 下一步 ",8,Jl)):(n(),u("button",{key:1,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:E.value,type:"button",onClick:Qe},[E.value?(n(),u("div",Zl)):b("",!0),U(" "+v(E.value?"创建中...":"创建"),1)],8,Yl))])])])):b("",!0),D.value===2&&s.value.addType==="oauth"?(n(),Ce(Xs,{key:2,platform:s.value.platform,proxy:s.value.proxy,onBack:t[63]||(t[63]=r=>D.value=1),onSuccess:We},null,8,["platform","proxy"])):b("",!0),D.value===2&&s.value.addType==="setup-token"?(n(),u("div",Xl,[s.value.platform==="claude"?(n(),u("div",eo,[e("div",to,[e("div",so,[t[254]||(t[254]=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",ao,[t[252]||(t[252]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"}," Claude Setup Token 授权 ",-1)),t[253]||(t[253]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤通过 Setup Token 完成 Claude 账户的授权: ",-1)),e("div",ro,[e("div",lo,[e("div",oo,[t[245]||(t[245]=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",no,[t[244]||(t[244]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),i.value?(n(),u("div",go,[e("div",mo,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:i.value},null,8,yo),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:tt},[e("i",{class:K(L.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:Fe},t[243]||(t[243]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),U("重新生成 ",-1)]))])):(n(),u("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:Y.value,onClick:Ee},[Y.value?(n(),u("div",po)):(n(),u("i",uo)),U(" "+v(Y.value?"生成中...":"生成 Setup Token 授权链接"),1)],8,io))])])]),t[251]||(t[251]=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,"注意:"),U("如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 ")])])])])],-1)),e("div",xo,[e("div",fo,[t[250]||(t[250]=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",co,[t[248]||(t[248]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),t[249]||(t[249]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 授权完成后,从返回页面复制 Authorization Code并粘贴到下方输入框 ",-1)),e("div",bo,[e("div",null,[t[246]||(t[246]=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"}),U("Authorization Code ")],-1)),x(e("textarea",{"onUpdate:modelValue":t[64]||(t[64]=r=>y.value=r),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),[[A,y.value]])]),t[247]||(t[247]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),U(" 请粘贴从Claude Code授权页面复制的Authorization Code ")],-1))])])])])])])])])])):b("",!0),e("div",vo,[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[65]||(t[65]=r=>D.value=1)}," 上一步 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!Le.value||P.value,type:"button",onClick:st},[P.value?(n(),u("div",wo)):b("",!0),U(" "+v(P.value?"验证中...":"完成授权"),1)],8,ko)])])):b("",!0),S.value?(n(),u("div",ho,[e("div",null,[t[255]||(t[255]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),x(e("input",{"onUpdate:modelValue":t[66]||(t[66]=r=>s.value.name=r),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),[[A,s.value.name]])]),e("div",null,[t[256]||(t[256]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":t[67]||(t[67]=r=>s.value.description=r),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[A,s.value.description]])]),e("div",null,[t[260]||(t[260]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",Ao,[e("label",$o,[x(e("input",{"onUpdate:modelValue":t[68]||(t[68]=r=>s.value.accountType=r),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[ee,s.value.accountType]]),t[257]||(t[257]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",Co,[x(e("input",{"onUpdate:modelValue":t[69]||(t[69]=r=>s.value.accountType=r),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[ee,s.value.accountType]]),t[258]||(t[258]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",Io,[x(e("input",{"onUpdate:modelValue":t[70]||(t[70]=r=>s.value.accountType=r),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[ee,s.value.accountType]]),t[259]||(t[259]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[261]||(t[261]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户供所有API Key使用专属账户仅供特定API Key使用分组调度加入分组供分组内调度 ",-1))]),s.value.accountType==="group"?(n(),u("div",Uo,[t[263]||(t[263]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",To,[e("div",Vo,[e("div",Ro,[g.value.length===0?(n(),u("div",Ko," 暂无可用分组 ")):b("",!0),(n(!0),u(fe,null,he(g.value,r=>(n(),u("label",{key:r.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[x(e("input",{"onUpdate:modelValue":t[71]||(t[71]=_=>s.value.groupIds=_),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:r.id},null,8,zo),[[ge,s.value.groupIds]]),e("span",So,v(r.name)+" ("+v(r.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:at},t[262]||(t[262]=[e("i",{class:"fas fa-plus"},null,-1),U(" 新建分组 ",-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:be},[e("i",{class:K(["fas fa-sync-alt",{"animate-spin":Se.value}])},null,2)])])])):b("",!0),s.value.platform==="gemini"?(n(),u("div",Mo,[t[264]||(t[264]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[72]||(t[72]=r=>s.value.projectId=r),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),[[A,s.value.projectId]]),t[265]||(t[265]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," Google Cloud/Workspace 账号可能需要提供项目 ID ",-1))])):b("",!0),s.value.platform==="claude"?(n(),u("div",Po,[t[268]||(t[268]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",Lo,[e("label",Oo,[x(e("input",{"onUpdate:modelValue":t[73]||(t[73]=r=>s.value.subscriptionType=r),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),[[ee,s.value.subscriptionType]]),t[266]||(t[266]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",jo,[x(e("input",{"onUpdate:modelValue":t[74]||(t[74]=r=>s.value.subscriptionType=r),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),[[ee,s.value.subscriptionType]]),t[267]||(t[267]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[269]||(t[269]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),U(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):b("",!0),s.value.platform==="claude"?(n(),u("div",Do,[e("label",Eo,[x(e("input",{"onUpdate:modelValue":t[75]||(t[75]=r=>s.value.autoStopOnWarning=r),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ge,s.value.autoStopOnWarning]]),t[270]||(t[270]=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))])])):b("",!0),s.value.platform==="claude"?(n(),u("div",Wo,[e("label",qo,[x(e("input",{"onUpdate:modelValue":t[76]||(t[76]=r=>s.value.useUnifiedUserAgent=r),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ge,s.value.useUnifiedUserAgent]]),e("div",Go,[t[272]||(t[272]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[273]||(t[273]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent提高兼容性 ",-1)),W.value?(n(),u("div",No,[e("div",Fo,[e("p",Qo," 💡 当前统一版本:"+v(W.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:k.value,type:"button",onClick:He},[k.value?(n(),u("div",Ho)):(n(),u("i",_o)),U(" "+v(k.value?"清除中...":"清除缓存"),1)],8,Bo)])])):(n(),u("div",Jo,t[271]||(t[271]=[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)])))])])])):b("",!0),s.value.platform==="claude"?(n(),u("div",Yo,[e("label",Zo,[x(e("input",{"onUpdate:modelValue":t[77]||(t[77]=r=>s.value.useUnifiedClientId=r),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:nt},null,544),[[ge,s.value.useUnifiedClientId]]),e("div",Xo,[t[277]||(t[277]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[278]||(t[278]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),s.value.useUnifiedClientId?(n(),u("div",en,[e("div",tn,[e("div",{class:"mb-2 flex items-center justify-between"},[t[275]||(t[275]=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:qe},t[274]||(t[274]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),U(" 重新生成 ",-1)]))]),e("div",sn,[e("code",an,[e("span",rn,v(s.value.unifiedClientId.substring(0,8)),1),e("span",ln,v(s.value.unifiedClientId.substring(8,56)),1),e("span",on,v(s.value.unifiedClientId.substring(56)),1)])]),t[276]||(t[276]=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"}),U(" 此ID将替换请求中的user_id客户端部分保留session部分用于粘性会话 ")],-1))])])):b("",!0)])])])):b("",!0),e("div",null,[t[279]||(t[279]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),x(e("input",{"onUpdate:modelValue":t[78]||(t[78]=r=>s.value.priority=r),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),[[A,s.value.priority,void 0,{number:!0}]]),t[280]||(t[280]=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(),u("div",nn,[e("div",null,[t[281]||(t[281]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API URL",-1)),x(e("input",{"onUpdate:modelValue":t[79]||(t[79]=r=>s.value.apiUrl=r),class:"form-input w-full",placeholder:"例如https://api.example.com",required:"",type:"text"},null,512),[[A,s.value.apiUrl]])]),e("div",null,[t[282]||(t[282]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API Key",-1)),x(e("input",{"onUpdate:modelValue":t[80]||(t[80]=r=>s.value.apiKey=r),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[A,s.value.apiKey]]),t[283]||(t[283]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",dn,[e("div",null,[t[284]||(t[284]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),x(e("input",{"onUpdate:modelValue":t[81]||(t[81]=r=>s.value.dailyQuota=r),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[A,s.value.dailyQuota,void 0,{number:!0}]]),t[285]||(t[285]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度0 表示不限制 ",-1))]),e("div",null,[t[286]||(t[286]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),x(e("input",{"onUpdate:modelValue":t[82]||(t[82]=r=>s.value.quotaResetTime=r),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[A,s.value.quotaResetTime]]),t[287]||(t[287]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),S.value&&s.value.dailyQuota>0?(n(),u("div",un,[e("div",pn,[t[288]||(t[288]=e("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"}," 今日使用情况 ",-1)),e("span",gn," $"+v(Oe().toFixed(4))+" / $"+v(s.value.dailyQuota.toFixed(2)),1)]),e("div",mn,[e("div",{class:K(["absolute left-0 top-0 h-full rounded-full transition-all",Me.value>=90?"bg-red-500":Me.value>=70?"bg-yellow-500":"bg-green-500"]),style:et({width:`${Math.min(Me.value,100)}%`})},null,6)]),e("div",yn,[e("span",xn," 剩余: $"+v(Math.max(0,s.value.dailyQuota-Oe()).toFixed(2)),1),e("span",fn,v(Me.value.toFixed(1))+"% 已使用 ",1)])])):b("",!0),e("div",null,[t[292]||(t[292]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"模型映射表 (可选)",-1)),t[293]||(t[293]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3"},[e("p",{class:"text-xs text-blue-700"},[e("i",{class:"fas fa-info-circle mr-1"}),U(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",cn,[(n(!0),u(fe,null,he(ae.value,(r,_)=>(n(),u("div",{key:_,class:"flex items-center gap-2"},[x(e("input",{"onUpdate:modelValue":G=>r.from=G,class:"form-input flex-1",placeholder:"原始模型名称",type:"text"},null,8,bn),[[A,r.from]]),t[290]||(t[290]=e("i",{class:"fas fa-arrow-right text-gray-400"},null,-1)),x(e("input",{"onUpdate:modelValue":G=>r.to=G,class:"form-input flex-1",placeholder:"映射后的模型名称",type:"text"},null,8,vn),[[A,r.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50",type:"button",onClick:G=>rt(_)},t[289]||(t[289]=[e("i",{class:"fas fa-trash"},null,-1)]),8,kn)]))),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",type:"button",onClick:_e},t[291]||(t[291]=[e("i",{class:"fas fa-plus mr-2"},null,-1),U(" 添加模型映射 ",-1)])),e("div",wn,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200",type:"button",onClick:t[83]||(t[83]=r=>Ae("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",type:"button",onClick:t[84]||(t[84]=r=>Ae("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",type:"button",onClick:t[85]||(t[85]=r=>Ae("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",type:"button",onClick:t[86]||(t[86]=r=>Ae("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus 4.1 → Sonnet 4 ")]),t[294]||(t[294]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空表示支持所有模型。如果指定模型,请求中的模型不在列表内将不会调度到此账号 ",-1))]),e("div",null,[t[295]||(t[295]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[87]||(t[87]=r=>s.value.userAgent=r),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[A,s.value.userAgent]]),t[296]||(t[296]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[301]||(t[301]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",hn,[e("label",An,[x(e("input",{"onUpdate:modelValue":t[88]||(t[88]=r=>s.value.enableRateLimit=r),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[ge,s.value.enableRateLimit]]),t[297]||(t[297]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[298]||(t[298]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),u("div",$n,[t[299]||(t[299]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),x(e("input",{"onUpdate:modelValue":t[89]||(t[89]=r=>s.value.rateLimitDuration=r),class:"form-input w-full",min:"1",type:"number"},null,512),[[A,s.value.rateLimitDuration,void 0,{number:!0}]]),t[300]||(t[300]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):b("",!0)])])):b("",!0),s.value.platform==="openai-responses"?(n(),u("div",Cn,[e("div",null,[t[302]||(t[302]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 基础地址",-1)),x(e("input",{"onUpdate:modelValue":t[90]||(t[90]=r=>s.value.baseApi=r),class:"form-input w-full",placeholder:"https://api.example.com/v1",type:"url"},null,512),[[A,s.value.baseApi]])]),e("div",null,[t[303]||(t[303]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 密钥",-1)),e("div",In,[x(e("input",{"onUpdate:modelValue":t[91]||(t[91]=r=>s.value.apiKey=r),class:"form-input w-full pr-10",placeholder:"留空表示不更新",type:Q.value?"text":"password"},null,8,Un),[[yt,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[92]||(t[92]=r=>Q.value=!Q.value)},[e("i",{class:K(Q.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[304]||(t[304]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",null,[t[305]||(t[305]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent",-1)),x(e("input",{"onUpdate:modelValue":t[93]||(t[93]=r=>s.value.userAgent=r),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[A,s.value.userAgent]]),t[306]||(t[306]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent仅在需要固定特定 UA 时填写 ",-1))]),x(e("input",{"onUpdate:modelValue":t[94]||(t[94]=r=>s.value.rateLimitDuration=r),type:"hidden"},null,512),[[A,s.value.rateLimitDuration,void 0,{number:!0}]]),e("div",Tn,[e("div",null,[t[307]||(t[307]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),x(e("input",{"onUpdate:modelValue":t[95]||(t[95]=r=>s.value.dailyQuota=r),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[A,s.value.dailyQuota,void 0,{number:!0}]])]),e("div",null,[t[308]||(t[308]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),x(e("input",{"onUpdate:modelValue":t[96]||(t[96]=r=>s.value.quotaResetTime=r),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",type:"time"},null,512),[[A,s.value.quotaResetTime]])])])])):b("",!0),s.value.platform==="bedrock"?(n(),u("div",Vn,[e("div",null,[t[309]||(t[309]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 访问密钥 ID",-1)),x(e("input",{"onUpdate:modelValue":t[97]||(t[97]=r=>s.value.accessKeyId=r),class:"form-input w-full",placeholder:"留空表示不更新",type:"text"},null,512),[[A,s.value.accessKeyId]]),t[310]||(t[310]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Access Key ID",-1))]),e("div",null,[t[311]||(t[311]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 秘密访问密钥",-1)),x(e("input",{"onUpdate:modelValue":t[98]||(t[98]=r=>s.value.secretAccessKey=r),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[A,s.value.secretAccessKey]]),t[312]||(t[312]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Secret Access Key",-1))]),e("div",null,[t[313]||(t[313]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 区域",-1)),x(e("input",{"onUpdate:modelValue":t[99]||(t[99]=r=>s.value.region=r),class:"form-input w-full",placeholder:"例如us-east-1",type:"text"},null,512),[[A,s.value.region]]),t[314]||(t[314]=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[315]||(t[315]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"会话令牌 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[100]||(t[100]=r=>s.value.sessionToken=r),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[A,s.value.sessionToken]])]),e("div",null,[t[316]||(t[316]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"默认主模型 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[101]||(t[101]=r=>s.value.defaultModel=r),class:"form-input w-full",placeholder:"例如us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[A,s.value.defaultModel]]),t[317]||(t[317]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1))]),e("div",null,[t[318]||(t[318]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[102]||(t[102]=r=>s.value.smallFastModel=r),class:"form-input w-full",placeholder:"例如us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[A,s.value.smallFastModel]]),t[319]||(t[319]=e("p",{class:"mt-1 text-xs text-gray-500"},"用于快速响应的轻量级模型,留空将使用系统默认",-1))]),e("div",null,[t[324]||(t[324]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",Rn,[e("label",Kn,[x(e("input",{"onUpdate:modelValue":t[103]||(t[103]=r=>s.value.enableRateLimit=r),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[ge,s.value.enableRateLimit]]),t[320]||(t[320]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[321]||(t[321]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),u("div",zn,[t[322]||(t[322]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),x(e("input",{"onUpdate:modelValue":t[104]||(t[104]=r=>s.value.rateLimitDuration=r),class:"form-input w-full",min:"1",type:"number"},null,512),[[A,s.value.rateLimitDuration,void 0,{number:!0}]]),t[323]||(t[323]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):b("",!0)])])):b("",!0),s.value.platform==="azure_openai"?(n(),u("div",Sn,[e("div",null,[t[325]||(t[325]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint",-1)),x(e("input",{"onUpdate:modelValue":t[105]||(t[105]=r=>s.value.azureEndpoint=r),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":h.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",type:"url"},null,2),[[A,s.value.azureEndpoint]]),h.value.azureEndpoint?(n(),u("p",Mn,v(h.value.azureEndpoint),1)):b("",!0)]),e("div",null,[t[326]||(t[326]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),x(e("input",{"onUpdate:modelValue":t[106]||(t[106]=r=>s.value.apiVersion=r),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),[[A,s.value.apiVersion]]),t[327]||(t[327]=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[328]||(t[328]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称",-1)),x(e("input",{"onUpdate:modelValue":t[107]||(t[107]=r=>s.value.deploymentName=r),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":h.value.deploymentName}]),placeholder:"gpt-4",type:"text"},null,2),[[A,s.value.deploymentName]]),h.value.deploymentName?(n(),u("p",Pn,v(h.value.deploymentName),1)):b("",!0)]),e("div",null,[t[329]||(t[329]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),x(e("input",{"onUpdate:modelValue":t[108]||(t[108]=r=>s.value.apiKey=r),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":h.value.apiKey}]),placeholder:"留空表示不更新",type:"password"},null,2),[[A,s.value.apiKey]]),h.value.apiKey?(n(),u("p",Ln,v(h.value.apiKey),1)):b("",!0),t[330]||(t[330]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))]),e("div",null,[t[331]||(t[331]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",On,[(n(),u(fe,null,he(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],r=>e("label",{key:r,class:"flex cursor-pointer items-center"},[x(e("input",{"onUpdate:modelValue":t[109]||(t[109]=_=>s.value.supportedModels=_),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:r},null,8,jn),[[ge,s.value.supportedModels]]),e("span",Dn,v(r),1)])),64))]),t[332]||(t[332]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"选择此部署支持的模型类型",-1))])])):b("",!0),s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"?(n(),u("div",En,[t[335]||(t[335]=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",Wn,[e("div",null,[t[333]||(t[333]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Access Token",-1)),x(e("textarea",{"onUpdate:modelValue":t[110]||(t[110]=r=>s.value.accessToken=r),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),[[A,s.value.accessToken]])]),e("div",null,[t[334]||(t[334]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Refresh Token",-1)),x(e("textarea",{"onUpdate:modelValue":t[111]||(t[111]=r=>s.value.refreshToken=r),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),[[A,s.value.refreshToken]])])])])):b("",!0),we(xt,{modelValue:s.value.proxy,"onUpdate:modelValue":t[112]||(t[112]=r=>s.value.proxy=r)},null,8,["modelValue"]),e("div",qn,[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[113]||(t[113]=r=>d.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:E.value,type:"button",onClick:Be},[E.value?(n(),u("div",Nn)):b("",!0),U(" "+v(E.value?"更新中...":"更新"),1)],8,Gn)])])):b("",!0)])])):b("",!0),we(Tt,{"cancel-text":xe(F).cancelText,"confirm-text":xe(F).confirmText,message:xe(F).message,show:xe(j),title:xe(F).title,onCancel:xe(O),onConfirm:xe(c)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),m.value?(n(),Ce(Ma,{key:1,onClose:t[114]||(t[114]=r=>m.value=!1),onRefresh:gt})):b("",!0)]))}},It=ct(Fn,[["__scopeId","data-v-a78f0d26"]]),Qn={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Bn={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"},_n={class:"mb-4 flex items-center justify-between sm:mb-6"},Hn={class:"flex items-center gap-2 sm:gap-3"},Jn={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Yn={class:"space-y-6"},Zn={key:0,class:"mt-1 text-xs text-red-500"},Xn={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},ei={key:0,class:"mt-1 text-xs text-red-500"},ti={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},si=["placeholder","required"],ai={key:0,class:"mt-1 text-xs text-red-500"},ri={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},li={class:"mb-3"},oi={class:"inline-flex cursor-pointer items-center"},ni={key:0},ii={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},di={class:"mb-3 space-y-2"},ui=["onUpdate:modelValue"],pi=["onUpdate:modelValue"],gi=["onClick"],mi={class:"mt-2 flex gap-3"},yi=["disabled"],xi={key:0,class:"loading-spinner mr-2"},fi={__name:"CcrAccountForm",props:{account:{type:Object,default:null}},emits:["close","success"],setup(ie,{emit:me}){const f=ie,se=me,I=C(!0),j=Ke(()=>!!f.account),F=C(!1),p=C({name:"",description:"",apiUrl:"",apiKey:"",priority:50,userAgent:"",rateLimitDuration:60,dailyQuota:0,quotaResetTime:"00:00",proxy:null,supportedModels:{}}),c=C(!0),O=C({}),S=C([]),N=()=>{const i={};for(const y of S.value){const L=(y.from||"").trim(),te=(y.to||"").trim();L&&te&&(i[L]=te)}return i},D=()=>{S.value.push({from:"",to:""})},E=i=>{S.value.splice(i,1)},Q=()=>{const i={};return(!p.value.name||p.value.name.trim().length===0)&&(i.name="名称不能为空"),(!p.value.apiUrl||p.value.apiUrl.trim().length===0)&&(i.apiUrl="API URL 不能为空"),!j.value&&(!p.value.apiKey||p.value.apiKey.trim().length===0)&&(i.apiKey="API Key 不能为空"),O.value=i,Object.keys(i).length===0},Y=async()=>{if(Q()){F.value=!0;try{if(j.value){const i={name:p.value.name,description:p.value.description,apiUrl:p.value.apiUrl,priority:p.value.priority,userAgent:p.value.userAgent,rateLimitDuration:c.value?Number(p.value.rateLimitDuration||60):0,dailyQuota:Number(p.value.dailyQuota||0),quotaResetTime:p.value.quotaResetTime||"00:00",proxy:p.value.proxy||null,supportedModels:N()};p.value.apiKey&&p.value.apiKey.trim().length>0&&(i.apiKey=p.value.apiKey);const y=await R.put(`/admin/ccr-accounts/${f.account.id}`,i);y.success?se("success"):z(y.message||"保存失败","error")}else{const i={name:p.value.name,description:p.value.description,apiUrl:p.value.apiUrl,apiKey:p.value.apiKey,priority:Number(p.value.priority||50),supportedModels:N(),userAgent:p.value.userAgent,rateLimitDuration:c.value?Number(p.value.rateLimitDuration||60):0,proxy:p.value.proxy,accountType:"shared",dailyQuota:Number(p.value.dailyQuota||0),quotaResetTime:p.value.quotaResetTime||"00:00"},y=await R.post("/admin/ccr-accounts",i);y.success?se("success"):z(y.message||"创建失败","error")}}catch(i){z(i.message||"请求失败","error")}finally{F.value=!1}}},P=()=>{if(!f.account)return;const i=f.account;p.value.name=i.name||"",p.value.description=i.description||"",p.value.apiUrl=i.apiUrl||"",p.value.priority=Number(i.priority||50),p.value.userAgent=i.userAgent||"",p.value.rateLimitDuration=Number(i.rateLimitDuration||60),p.value.dailyQuota=Number(i.dailyQuota||0),p.value.quotaResetTime=i.quotaResetTime||"00:00",p.value.proxy=i.proxy||null,c.value=p.value.rateLimitDuration>0,S.value=[];const y=i.supportedModels||{};if(y&&typeof y=="object")for(const L of Object.keys(y))S.value.push({from:L,to:y[L]})};return pt(()=>{j.value&&P()}),Z(()=>f.account,()=>{j.value&&P()}),(i,y)=>(n(),Ce(ft,{to:"body"},[I.value?(n(),u("div",Qn,[e("div",Bn,[e("div",_n,[e("div",Hn,[y[13]||(y[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",Jn,v(j.value?"编辑 CCR 账户":"添加 CCR 账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:y[0]||(y[0]=L=>i.$emit("close"))},y[14]||(y[14]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",Yn,[e("div",null,[y[15]||(y[15]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称 *",-1)),x(e("input",{"onUpdate:modelValue":y[1]||(y[1]=L=>p.value.name=L),class:K(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":O.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[A,p.value.name]]),O.value.name?(n(),u("p",Zn,v(O.value.name),1)):b("",!0)]),e("div",null,[y[16]||(y[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":y[2]||(y[2]=L=>p.value.description=L),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),[[A,p.value.description]])]),e("div",Xn,[e("div",null,[y[17]||(y[17]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),x(e("input",{"onUpdate:modelValue":y[3]||(y[3]=L=>p.value.apiUrl=L),class:K(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":O.value.apiUrl}]),placeholder:"例如https://api.example.com/v1/messages",required:"",type:"text"},null,2),[[A,p.value.apiUrl]]),O.value.apiUrl?(n(),u("p",ei,v(O.value.apiUrl),1)):b("",!0)]),e("div",null,[e("label",ti,"API Key "+v(j.value?"(留空不更新)":"*"),1),x(e("input",{"onUpdate:modelValue":y[4]||(y[4]=L=>p.value.apiKey=L),class:K(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":O.value.apiKey}]),placeholder:j.value?"留空表示不更新":"必填",required:!j.value,type:"password"},null,10,si),[[A,p.value.apiKey]]),O.value.apiKey?(n(),u("p",ai,v(O.value.apiKey),1)):b("",!0)])]),e("div",ri,[e("div",null,[y[18]||(y[18]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"优先级",-1)),x(e("input",{"onUpdate:modelValue":y[5]||(y[5]=L=>p.value.priority=L),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),[[A,p.value.priority,void 0,{number:!0}]]),y[19]||(y[19]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议范围1-100数字越小优先级越高 ",-1))]),e("div",null,[y[20]||(y[20]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),x(e("input",{"onUpdate:modelValue":y[6]||(y[6]=L=>p.value.userAgent=L),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),[[A,p.value.userAgent]])])]),e("div",null,[y[24]||(y[24]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",li,[e("label",oi,[x(e("input",{"onUpdate:modelValue":y[7]||(y[7]=L=>c.value=L),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),[[ge,c.value]]),y[21]||(y[21]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制429 时暂停调度)",-1))])]),c.value?(n(),u("div",ni,[y[22]||(y[22]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),x(e("input",{"onUpdate:modelValue":y[8]||(y[8]=L=>p.value.rateLimitDuration=L),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),[[A,p.value.rateLimitDuration,void 0,{number:!0}]]),y[23]||(y[23]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):b("",!0)]),e("div",ii,[e("div",null,[y[25]||(y[25]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日额度限制 ($)",-1)),x(e("input",{"onUpdate:modelValue":y[9]||(y[9]=L=>p.value.dailyQuota=L),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),[[A,p.value.dailyQuota,void 0,{number:!0}]]),y[26]||(y[26]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度0 表示不限制 ",-1))]),e("div",null,[y[27]||(y[27]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"额度重置时间",-1)),x(e("input",{"onUpdate:modelValue":y[10]||(y[10]=L=>p.value.quotaResetTime=L),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),[[A,p.value.quotaResetTime]]),y[28]||(y[28]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),e("div",null,[y[32]||(y[32]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型映射表 (可选)",-1)),y[33]||(y[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"}),U(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",di,[(n(!0),u(fe,null,he(S.value,(L,te)=>(n(),u("div",{key:te,class:"flex items-center gap-2"},[x(e("input",{"onUpdate:modelValue":W=>L.from=W,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,ui),[[A,L.from]]),y[30]||(y[30]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),x(e("input",{"onUpdate:modelValue":W=>L.to=W,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,pi),[[A,L.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:W=>E(te)},y[29]||(y[29]=[e("i",{class:"fas fa-trash"},null,-1)]),8,gi)]))),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:D},y[31]||(y[31]=[e("i",{class:"fas fa-plus mr-2"},null,-1),U(" 添加模型映射 ",-1)]))]),e("div",null,[we(xt,{modelValue:p.value.proxy,"onUpdate:modelValue":y[11]||(y[11]=L=>p.value.proxy=L)},null,8,["modelValue"])]),e("div",mi,[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:y[12]||(y[12]=L=>i.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:F.value,type:"button",onClick:Y},[F.value?(n(),u("div",xi)):b("",!0),U(" "+v(F.value?j.value?"保存中...":"创建中...":j.value?"保存":"创建"),1)],8,yi)])])])])):b("",!0)]))}},Ut=ct(fi,[["__scopeId","data-v-8652672a"]]),ci={class:"accounts-container"},bi={class:"card p-4 sm:p-6"},vi={class:"mb-4 flex flex-col gap-4 sm:mb-6"},ki={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},wi={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},hi={class:"group relative min-w-[160px]"},Ai={class:"group relative min-w-[140px]"},$i={class:"group relative min-w-[160px]"},Ci={class:"relative"},Ii=["disabled"],Ui={key:0,class:"py-12 text-center"},Ti={key:1,class:"py-12 text-center"},Vi={key:2,class:"table-container hidden md:block"},Ri={class:"w-full table-fixed"},Ki={class:"bg-gray-50/80 backdrop-blur-sm dark:bg-gray-700/80"},zi={key:1,class:"fas fa-sort ml-1 text-gray-400"},Si={key:1,class:"fas fa-sort ml-1 text-gray-400"},Mi={key:1,class:"fas fa-sort ml-1 text-gray-400"},Pi={key:1,class:"fas fa-sort ml-1 text-gray-400"},Li={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"},Oi={class:"flex items-center gap-2"},ji={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Di={class:"px-3 py-4"},Ei={class:"flex items-center"},Wi={class:"min-w-0"},qi={class:"flex items-center gap-2"},Gi=["title"],Ni={key:0,class:"inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-800"},Fi={key:1,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800"},Qi={key:2,class:"inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800"},Bi={key:0,class:"my-2 flex flex-wrap items-center gap-2"},_i=["title"],Hi=["title"],Ji={class:"px-3 py-4"},Yi={class:"flex items-center gap-1"},Zi={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"},Xi={class:"text-xs font-medium text-yellow-700"},ed={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"},td={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"},sd={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"},ad={class:"text-xs font-medium text-gray-950"},rd={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"},ld={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"},od={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"},nd={class:"text-xs font-semibold text-indigo-800"},id={class:"text-xs font-medium text-indigo-700"},dd={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"},ud={key:8,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"},pd={class:"whitespace-nowrap px-3 py-4"},gd={class:"flex flex-col gap-1"},md={key:0,class:"inline-flex items-center rounded-full bg-yellow-100 px-3 py-1 text-xs font-semibold text-yellow-800"},yd={key:0},xd={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-3 py-1 text-xs font-semibold text-gray-700"},fd=["title"],cd={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},bd={class:"whitespace-nowrap px-3 py-4"},vd={key:0,class:"flex items-center gap-2"},kd={class:"h-2 w-16 rounded-full bg-gray-200"},wd={class:"min-w-[20px] text-xs font-medium text-gray-700 dark:text-gray-200"},hd={key:1,class:"text-sm text-gray-400"},Ad={class:"px-3 py-4 text-sm text-gray-600"},$d=["title"],Cd={key:1,class:"text-gray-400"},Id={class:"whitespace-nowrap px-3 py-4 text-sm"},Ud={key:0,class:"space-y-1"},Td={class:"flex items-center gap-2"},Vd={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Rd={class:"flex items-center gap-2"},Kd={class:"text-xs text-gray-600 dark:text-gray-300"},zd={class:"flex items-center gap-2"},Sd={class:"text-xs text-gray-600 dark:text-gray-300"},Md={key:0,class:"text-xs text-gray-500 dark:text-gray-400"},Pd={key:1,class:"text-xs text-gray-400"},Ld={class:"whitespace-nowrap px-3 py-4"},Od={key:0,class:"space-y-2"},jd={key:0,class:"flex items-center gap-3 text-xs"},Dd={class:"flex items-center gap-1"},Ed={class:"font-medium text-gray-900 dark:text-gray-100"},Wd={class:"flex items-center gap-1"},qd={class:"font-medium text-gray-900 dark:text-gray-100"},Gd={class:"flex items-center gap-2"},Nd={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},Fd={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},Qd={class:"text-xs text-gray-600 dark:text-gray-400"},Bd={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},_d={key:1,class:"space-y-2"},Hd={key:0},Jd={class:"flex items-center justify-between text-xs"},Yd={class:"font-medium text-gray-700 dark:text-gray-200"},Zd={class:"flex items-center gap-2"},Xd={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},eu={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},tu={class:"text-xs text-gray-600 dark:text-gray-400"},su={class:"ml-2 text-gray-400"},au={key:1,class:"text-sm text-gray-400"},ru={key:2,class:"text-sm text-gray-400"},lu={key:3,class:"text-sm text-gray-400"},ou={class:"whitespace-nowrap px-3 py-4 text-sm text-gray-600 dark:text-gray-300"},nu={class:"whitespace-nowrap px-3 py-4 text-sm font-medium"},iu={class:"flex flex-wrap items-center gap-1"},du=["disabled","title","onClick"],uu=["disabled","title","onClick"],pu={class:"ml-1"},gu=["onClick"],mu=["onClick"],yu={key:3,class:"space-y-3 md:hidden"},xu={class:"mb-3 flex items-start justify-between"},fu={class:"flex items-center gap-3"},cu={class:"text-sm font-semibold text-gray-900"},bu={class:"mt-0.5 flex items-center gap-2"},vu={class:"text-xs text-gray-500 dark:text-gray-400"},ku={class:"text-xs text-gray-500 dark:text-gray-400"},wu={class:"mb-3 grid grid-cols-2 gap-3"},hu={class:"space-y-1"},Au={class:"flex items-center gap-1.5"},$u={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Cu={class:"flex items-center gap-1.5"},Iu={class:"text-xs text-gray-600 dark:text-gray-400"},Uu={class:"flex items-center gap-1.5"},Tu={class:"text-xs text-gray-600 dark:text-gray-400"},Vu={key:0,class:"space-y-1"},Ru={class:"flex items-center gap-1.5"},Ku={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},zu={class:"flex items-center gap-1.5"},Su={class:"text-xs text-gray-600 dark:text-gray-400"},Mu={key:1,class:"text-sm font-semibold text-gray-400"},Pu={class:"mb-3 space-y-2"},Lu={key:0,class:"space-y-1.5 rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Ou={class:"flex items-center justify-between text-xs"},ju={class:"flex items-center gap-1"},Du={class:"font-medium text-gray-700 dark:text-gray-200"},Eu={class:"h-2 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-600"},Wu={class:"flex items-center justify-between text-xs"},qu={class:"text-gray-500 dark:text-gray-400"},Gu={key:0,class:"font-medium text-indigo-600"},Nu={key:1,class:"text-gray-500"},Fu={class:"flex items-center justify-between text-xs"},Qu={class:"text-gray-700 dark:text-gray-200"},Bu={key:1,class:"flex items-center justify-between text-xs"},_u={class:"text-gray-700 dark:text-gray-200"},Hu={class:"flex items-center justify-between text-xs"},Ju={class:"font-medium text-gray-700 dark:text-gray-200"},Yu={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3"},Zu=["disabled","onClick"],Xu=["onClick"],e0=["onClick"],t0={__name:"AccountsView",setup(ie){const{showConfirmModal:me,confirmOptions:f,showConfirm:se,handleConfirm:I,handleCancel:j}=Vt(),F=C([]),p=C(!1),c=C("name"),O=C(""),S=C("asc"),N=C([]),D=C([]),E=C("all"),Q=C("all"),Y=C(!1),P=C(!1),i=C(!1),y=C(new Map),L=C([{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"}]),te=C([{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:"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"}]),W=Ke(()=>{const l=[{value:"all",label:"所有账户",icon:"fa-globe"},{value:"ungrouped",label:"未分组账户",icon:"fa-user"}];return D.value.forEach(a=>{l.push({value:a.id,label:`${a.name} (${a.platform==="claude"?"Claude":a.platform==="gemini"?"Gemini":"OpenAI"})`,icon:a.platform==="claude"?"fa-brain":a.platform==="gemini"?"fa-robot":"fa-openai"})}),l}),k=C(!1),M=C(null),ye=C(!1),ce=C(null),s=Ke(()=>{const l=F.value;return O.value?[...l].sort((T,o)=>{var re,X,ve,Ue,Te,de,Ve,H,J,ue,pe,Ye;let B=T[O.value],q=o[O.value];return O.value==="dailyTokens"?(B=((X=(re=T.usage)==null?void 0:re.daily)==null?void 0:X.allTokens)||0,q=((Ue=(ve=o.usage)==null?void 0:ve.daily)==null?void 0:Ue.allTokens)||0):O.value==="dailyRequests"?(B=((de=(Te=T.usage)==null?void 0:Te.daily)==null?void 0:de.requests)||0,q=((H=(Ve=o.usage)==null?void 0:Ve.daily)==null?void 0:H.requests)||0):O.value==="totalTokens"&&(B=((ue=(J=T.usage)==null?void 0:J.total)==null?void 0:ue.allTokens)||0,q=((Ye=(pe=o.usage)==null?void 0:pe.total)==null?void 0:Ye.allTokens)||0),O.value==="lastUsed"&&(B=T.lastUsedAt?new Date(T.lastUsedAt).getTime():0,q=o.lastUsedAt?new Date(o.lastUsedAt).getTime():0),O.value==="status"&&(B=T.isActive?1:0,q=o.isActive?1:0),B<q?S.value==="asc"?-1:1:B>q?S.value==="asc"?1:-1:0}):l}),ae=async(l=!1)=>{p.value=!0;try{if(E.value&&E.value!=="all"&&E.value!=="ungrouped"){const H=await R.get(`/admin/account-groups/${E.value}/members`);if(H.success){F.value=H.data,p.value=!1;return}}const a={};Q.value!=="all"&&(a.platform=Q.value),E.value==="ungrouped"&&(a.groupId=E.value);const T=[];if(Q.value==="all")T.push(R.get("/admin/claude-accounts",{params:a}),R.get("/admin/claude-console-accounts",{params:a}),R.get("/admin/bedrock-accounts",{params:a}),R.get("/admin/gemini-accounts",{params:a}),R.get("/admin/openai-accounts",{params:a}),R.get("/admin/azure-openai-accounts",{params:a}),R.get("/admin/openai-responses-accounts",{params:a}),R.get("/admin/ccr-accounts",{params:a}));else switch(Q.value){case"claude":T.push(R.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:[]}));break;case"claude-console":T.push(Promise.resolve({success:!0,data:[]}),R.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:[]}));break;case"bedrock":T.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),R.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:[]}));break;case"gemini":T.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),R.get("/admin/gemini-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"openai":T.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),R.get("/admin/openai-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"azure_openai":T.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:[]}),R.get("/admin/azure-openai-accounts",{params:a}),Promise.resolve({success:!0,data:[]}));break;case"openai-responses":T.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:[]}),R.get("/admin/openai-responses-accounts",{params:a}));break;case"ccr":T.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:[]}),R.get("/admin/ccr-accounts",{params:a}));break;default:T.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:[]}));break}await Promise.all([Le(l),Oe(l)]);const[o,B,q,re,X,ve,Ue,Te]=await Promise.all(T),de=[];if(o.success){const H=(o.data||[]).map(J=>{const ue=N.value.filter(pe=>pe.claudeAccountId===J.id).length;return{...J,platform:"claude",boundApiKeysCount:ue}});de.push(...H)}if(B.success){const H=(B.data||[]).map(J=>{const ue=N.value.filter(pe=>pe.claudeConsoleAccountId===J.id).length;return{...J,platform:"claude-console",boundApiKeysCount:ue}});de.push(...H)}if(q.success){const H=(q.data||[]).map(J=>({...J,platform:"bedrock",boundApiKeysCount:0}));de.push(...H)}if(re.success){const H=(re.data||[]).map(J=>{const ue=N.value.filter(pe=>pe.geminiAccountId===J.id).length;return{...J,platform:"gemini",boundApiKeysCount:ue}});de.push(...H)}if(X.success){const H=(X.data||[]).map(J=>{const ue=N.value.filter(pe=>pe.openaiAccountId===J.id).length;return{...J,platform:"openai",boundApiKeysCount:ue}});de.push(...H)}if(ve&&ve.success){const H=(ve.data||[]).map(J=>{const ue=N.value.filter(pe=>pe.azureOpenaiAccountId===J.id).length;return{...J,platform:"azure_openai",boundApiKeysCount:ue}});de.push(...H)}if(Ue&&Ue.success){const H=(Ue.data||[]).map(J=>{const ue=N.value.filter(pe=>pe.openaiAccountId===`responses:${J.id}`).length;return{...J,platform:"openai-responses",boundApiKeysCount:ue}});de.push(...H)}if(Te&&Te.success){const H=(Te.data||[]).map(J=>({...J,platform:"ccr",boundApiKeysCount:0}));de.push(...H)}let Ve=de;E.value!=="all"&&(E.value==="ungrouped"?Ve=de.filter(H=>!H.groupInfos||H.groupInfos.length===0):Ve=de.filter(H=>!H.groupInfos||H.groupInfos.length===0?!1:H.groupInfos.some(J=>J.id===E.value))),F.value=Ve}catch{z("加载账户失败","error")}finally{p.value=!1}},Ie=l=>{l&&(O.value===l?S.value=S.value==="asc"?"desc":"asc":(O.value=l,S.value="asc"))},h=l=>{if(l==null)return"0";const a=Number(l);return a>=1e6?(a/1e6).toFixed(2):a>=1e3?(a/1e6).toFixed(4):(a/1e6).toFixed(6)},Ge=l=>{if(!l)return"从未使用";const a=new Date(l),o=new Date-a;return o<6e4?"刚刚":o<36e5?`${Math.floor(o/6e4)} 分钟前`:o<864e5?`${Math.floor(o/36e5)} 小时前`:o<6048e5?`${Math.floor(o/864e5)} 天前`:a.toLocaleDateString("zh-CN")},Le=async(l=!1)=>{if(!(!l&&Y.value))try{const a=await R.get("/admin/api-keys");a.success&&(N.value=a.data||[],Y.value=!0)}catch{}},Oe=async(l=!1)=>{if(!(!l&&P.value))try{const a=await R.get("/admin/account-groups");a.success&&(D.value=a.data||[],P.value=!0)}catch{}},Me=()=>{Y.value=!1,P.value=!1,i.value=!1,y.value.clear()},Ne=()=>{ae()},je=()=>{ae()},De=l=>{if(!l||!l.host||!l.port)return null;const a=l.type==="socks5"?"S5":l.type.toUpperCase();let T=l.host;T.length>15&&(T=T.substring(0,12)+"...");let o=`${a}://${T}:${l.port}`;return l.username&&(o=`${a}://***@${T}:${l.port}`),o},Ee=(l,a)=>{if(!l||!a)return"--";const T=new Date(l),o=new Date(a),B=T.getHours().toString().padStart(2,"0"),q=T.getMinutes().toString().padStart(2,"0"),re=o.getHours().toString().padStart(2,"0"),X=o.getMinutes().toString().padStart(2,"0");return`${B}:${q} - ${re}:${X}`},Fe=l=>{if(!l||l<=0)return"已结束";const a=Math.floor(l/60),T=l%60;return a>0?`${a}小时${T}分钟`:`${T}分钟`},tt=l=>{if(!l||l<=0)return"";l=Math.floor(l);const a=Math.floor(l/1440),T=l%1440,o=Math.floor(T/60),B=T%60;return a>0?o>0?`${a}${o}小时`:`${a}`:o>0?B>0?`${o}小时${B}分钟`:`${o}小时`:`${B}分钟`},st=()=>{M.value=null,k.value=!0},We=()=>{k.value=!1,M.value=null},Qe=l=>{ce.value=l,ye.value=!0},Be=async l=>{const T=N.value.filter(q=>q.claudeAccountId===l.id||q.claudeConsoleAccountId===l.id||q.geminiAccountId===l.id||q.openaiAccountId===l.id||q.azureOpenaiAccountId===l.id||q.openaiAccountId===`responses:${l.id}`).length;let o=`确定要删除账户 "${l.name}" 吗?`;if(T>0&&(o+=`
⚠️ 注意:此账号有 ${T} 个 API Key 绑定。`,o+=`
删除后,这些 API Key 将自动切换为共享池模式。`),o+=`
此操作不可恢复。`,!!await se("删除账户",o,"删除","取消"))try{let q;l.platform==="claude"?q=`/admin/claude-accounts/${l.id}`:l.platform==="claude-console"?q=`/admin/claude-console-accounts/${l.id}`:l.platform==="bedrock"?q=`/admin/bedrock-accounts/${l.id}`:l.platform==="openai"?q=`/admin/openai-accounts/${l.id}`:l.platform==="azure_openai"?q=`/admin/azure-openai-accounts/${l.id}`:l.platform==="openai-responses"?q=`/admin/openai-responses-accounts/${l.id}`:l.platform==="ccr"?q=`/admin/ccr-accounts/${l.id}`:q=`/admin/gemini-accounts/${l.id}`;const re=await R.delete(q);if(re.success){let X="账户已成功删除";re.unboundKeys>0&&(X+=`${re.unboundKeys} 个 API Key 已切换为共享池模式`),z(X,"success"),i.value=!1,Y.value=!1,ae(),Le(!0)}else z(re.message||"删除失败","error")}catch{z("删除失败","error")}},ze=async l=>{if(l.isResetting)return;let a=!1;if(window.showConfirm?a=await window.showConfirm("重置账户状态","确定要重置此账户的所有异常状态吗这将清除限流状态、401错误计数等所有异常标记。","确定重置","取消"):a=confirm("确定要重置此账户的所有异常状态吗?"),!!a)try{l.isResetting=!0;let T="";if(l.platform==="openai")T=`/admin/openai-accounts/${l.id}/reset-status`;else if(l.platform==="openai-responses")T=`/admin/openai-responses-accounts/${l.id}/reset-status`;else if(l.platform==="claude")T=`/admin/claude-accounts/${l.id}/reset-status`;else if(l.platform==="claude-console")T=`/admin/claude-console-accounts/${l.id}/reset-status`;else if(l.platform==="ccr")T=`/admin/ccr-accounts/${l.id}/reset-status`;else{z("不支持的账户类型","error"),l.isResetting=!1;return}const o=await R.post(T);o.success?(z("账户状态已重置","success"),ae(!0)):z(o.message||"状态重置失败","error")}catch{z("状态重置失败","error")}finally{l.isResetting=!1}},Se=async l=>{if(!l.isTogglingSchedulable)try{l.isTogglingSchedulable=!0;let a;if(l.platform==="claude")a=`/admin/claude-accounts/${l.id}/toggle-schedulable`;else if(l.platform==="claude-console")a=`/admin/claude-console-accounts/${l.id}/toggle-schedulable`;else if(l.platform==="bedrock")a=`/admin/bedrock-accounts/${l.id}/toggle-schedulable`;else if(l.platform==="gemini")a=`/admin/gemini-accounts/${l.id}/toggle-schedulable`;else if(l.platform==="openai")a=`/admin/openai-accounts/${l.id}/toggle-schedulable`;else if(l.platform==="azure_openai")a=`/admin/azure-openai-accounts/${l.id}/toggle-schedulable`;else if(l.platform==="openai-responses")a=`/admin/openai-responses-accounts/${l.id}/toggle-schedulable`;else if(l.platform==="ccr")a=`/admin/ccr-accounts/${l.id}/toggle-schedulable`;else{z("该账户类型暂不支持调度控制","warning");return}const T=await R.put(a);T.success?(l.schedulable=T.schedulable,z(T.schedulable?"已启用调度":"已禁用调度","success")):z(T.message||"操作失败","error")}catch{z("切换调度状态失败","error")}finally{l.isTogglingSchedulable=!1}},m=()=>{k.value=!1,z("账户创建成功","success"),Me(),ae()},g=()=>{ye.value=!1,z("账户更新成功","success"),i.value=!1,ae()},$=l=>!l.lastRefreshAt||l.lastRefreshAt===""?"Setup":"OAuth",be=()=>"OAuth",at=()=>"OAuth",gt=l=>{if(l.subscriptionInfo)try{const a=typeof l.subscriptionInfo=="string"?JSON.parse(l.subscriptionInfo):l.subscriptionInfo;return a.hasClaudeMax===!0?"Claude Max":a.hasClaudePro===!0?"Claude Pro":"Claude Free"}catch{return"Claude"}return"Claude"},_e=l=>{if(l.schedulable!==!1)return null;if(l.platform==="claude-console"){if(l.status==="unauthorized")return"API Key无效或已过期401错误";if(l.overloadStatus==="overloaded")return"服务过载529错误";if(l.rateLimitStatus==="limited")return"触发限流429错误";if(l.status==="blocked"&&l.errorMessage)return l.errorMessage}if(l.platform==="claude"){if(l.status==="unauthorized")return"认证失败401错误";if(l.status==="temp_error"&&l.errorMessage||l.status==="error"&&l.errorMessage)return l.errorMessage;if(l.isRateLimited)return"触发限流429错误";if(l.stoppedReason)return l.stoppedReason}if(l.platform==="openai"){if(l.status==="unauthorized")return"认证失败401错误";if(l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.isRateLimited)return"触发限流429错误";if(l.status==="error"&&l.errorMessage)return l.errorMessage}if(l.platform==="openai-responses"){if(l.status==="unauthorized")return"认证失败401错误";if(l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.isRateLimited)return"触发限流429错误";if(l.status==="error"&&l.errorMessage)return l.errorMessage;if(l.status==="rateLimited")return"触发限流429错误"}return l.stoppedReason?l.stoppedReason:l.errorMessage?l.errorMessage:"手动停止调度"},rt=l=>l.status==="blocked"?"已封锁":l.status==="unauthorized"?"异常":l.isRateLimited||l.status==="rate_limited"||l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"?"限流中":l.status==="temp_error"?"临时异常":l.status==="error"||!l.isActive?"错误":l.schedulable===!1?"已暂停":"正常",Ae=l=>l.status==="blocked"||l.status==="unauthorized"?"bg-red-100 text-red-800":l.isRateLimited||l.status==="rate_limited"||l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"||l.status==="temp_error"?"bg-orange-100 text-orange-800":l.status==="error"||!l.isActive?"bg-red-100 text-red-800":l.schedulable===!1?"bg-gray-100 text-gray-800":"bg-green-100 text-green-800",lt=l=>l.status==="blocked"||l.status==="unauthorized"?"bg-red-500":l.isRateLimited||l.status==="rate_limited"||l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"||l.status==="temp_error"?"bg-orange-500":l.status==="error"||!l.isActive?"bg-red-500":l.schedulable===!1?"bg-gray-500":"bg-green-500",ot=l=>Ge(l),He=(l,a=null)=>{if(!l)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 o=String(l).toLowerCase();return o==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":o==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-600"},ke=l=>!l||l===0?"0.0000":l<1e-4?l.toExponential(2):l<.01?l.toFixed(6):l<1?l.toFixed(4):l.toFixed(2),qe=l=>{var o,B;const a=Number(((B=(o=l==null?void 0:l.usage)==null?void 0:o.daily)==null?void 0:B.cost)||0),T=Number((l==null?void 0:l.dailyQuota)||0);return!T||T<=0?0:a/T*100},nt=l=>l>=90?"bg-red-500":l>=70?"bg-yellow-500":"bg-green-500",it=l=>{var o,B;const a=Number(((B=(o=l==null?void 0:l.usage)==null?void 0:o.daily)==null?void 0:B.cost)||0),T=Number((l==null?void 0:l.dailyQuota)||0);return!T||T<=0?"0.00":Math.max(0,T-a).toFixed(2)},Je=l=>!l.usage||!l.usage.daily?"0.0000":l.usage.daily.cost!==void 0?ke(l.usage.daily.cost):"0.0000";return Z(c,l=>{const a={name:"name",dailyTokens:"dailyTokens",dailyRequests:"dailyRequests",totalTokens:"totalTokens",lastUsed:"lastUsed"};a[l]&&Ie(a[l])}),pt(()=>{ae(!0)}),(l,a)=>{const T=Kt;return n(),u("div",ci,[e("div",bi,[e("div",vi,[a[20]||(a[20]=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、Azure OpenAI、OpenAI-Responses 与 CCR 账户及代理配置 ")],-1)),e("div",ki,[e("div",wi,[e("div",hi,[a[14]||(a[14]=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)),we(mt,{modelValue:c.value,"onUpdate:modelValue":a[0]||(a[0]=o=>c.value=o),icon:"fa-sort-amount-down","icon-color":"text-indigo-500",options:L.value,placeholder:"选择排序",onChange:a[1]||(a[1]=o=>Ie())},null,8,["modelValue","options"])]),e("div",Ai,[a[15]||(a[15]=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)),we(mt,{modelValue:Q.value,"onUpdate:modelValue":a[2]||(a[2]=o=>Q.value=o),icon:"fa-server","icon-color":"text-blue-500",options:te.value,placeholder:"选择平台",onChange:Ne},null,8,["modelValue","options"])]),e("div",$i,[a[16]||(a[16]=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)),we(mt,{modelValue:E.value,"onUpdate:modelValue":a[3]||(a[3]=o=>E.value=o),icon:"fa-layer-group","icon-color":"text-purple-500",options:W.value,placeholder:"选择分组",onChange:je},null,8,["modelValue","options"])]),e("div",Ci,[we(T,{content:"刷新数据 (Ctrl/⌘+点击强制刷新所有缓存)",effect:"dark",placement:"bottom"},{default:Ze(()=>[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:p.value,onClick:[a[4]||(a[4]=dt(o=>ae(!0),["ctrl","exact"])),a[5]||(a[5]=dt(o=>ae(!1),["exact"])),a[6]||(a[6]=dt(o=>ae(!0),["meta","exact"]))]},[a[17]||(a[17]=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",p.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),a[18]||(a[18]=e("span",{class:"relative"},"刷新",-1))],8,Ii)]),_:1})])]),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:dt(st,["stop"])},a[19]||(a[19]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"添加账户",-1)]))])]),p.value?(n(),u("div",Ui,a[21]||(a[21]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载账户...",-1)]))):s.value.length===0?(n(),u("div",Ti,a[22]||(a[22]=[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(),u("div",Vi,[e("table",Ri,[e("thead",Ki,[e("tr",null,[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[7]||(a[7]=o=>Ie("name"))},[a[23]||(a[23]=U(" 名称 ",-1)),O.value==="name"?(n(),u("i",{key:0,class:K(["fas",S.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),u("i",zi))]),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[8]||(a[8]=o=>Ie("platform"))},[a[24]||(a[24]=U(" 平台/类型 ",-1)),O.value==="platform"?(n(),u("i",{key:0,class:K(["fas",S.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),u("i",Si))]),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[9]||(a[9]=o=>Ie("status"))},[a[25]||(a[25]=U(" 状态 ",-1)),O.value==="status"?(n(),u("i",{key:0,class:K(["fas",S.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),u("i",Mi))]),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[10]||(a[10]=o=>Ie("priority"))},[a[26]||(a[26]=U(" 优先级 ",-1)),O.value==="priority"?(n(),u("i",{key:0,class:K(["fas",S.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),u("i",Pi))]),a[30]||(a[30]=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[31]||(a[31]=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",Li,[e("div",Oi,[a[29]||(a[29]=e("span",null,"会话窗口",-1)),we(T,{placement:"top"},{content:Ze(()=>a[27]||(a[27]=[e("div",{class:"space-y-2"},[e("div",null,"会话窗口进度表示5小时窗口的时间进度"),e("div",{class:"space-y-1 text-xs"},[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",null,"正常:请求正常处理")]),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",null,"警告:接近限制")]),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",null,"拒绝:达到速率限制")])])],-1)])),default:Ze(()=>[a[28]||(a[28]=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,__:[28]})])]),a[32]||(a[32]=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[33]||(a[33]=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",ji,[(n(!0),u(fe,null,he(s.value,o=>{var B,q,re;return n(),u("tr",{key:o.id,class:"table-row"},[e("td",Di,[e("div",Ei,[a[38]||(a[38]=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",Wi,[e("div",qi,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:o.name},v(o.name),9,Gi),o.accountType==="dedicated"?(n(),u("span",Ni,a[34]||(a[34]=[e("i",{class:"fas fa-lock mr-1"},null,-1),U("专属 ",-1)]))):o.accountType==="group"?(n(),u("span",Fi,a[35]||(a[35]=[e("i",{class:"fas fa-layer-group mr-1"},null,-1),U("分组调度 ",-1)]))):(n(),u("span",Qi,a[36]||(a[36]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),U("共享 ",-1)])))]),o.groupInfos&&o.groupInfos.length>0?(n(),u("div",Bi,[(n(!0),u(fe,null,he(o.groupInfos,X=>(n(),u("span",{key:X.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:`所属分组: ${X.name}`},[a[37]||(a[37]=e("i",{class:"fas fa-folder mr-1"},null,-1)),U(v(X.name),1)],8,_i))),128))])):b("",!0),e("div",{class:"truncate text-xs text-gray-500 dark:text-gray-400",title:o.id},v(o.id),9,Hi)])])]),e("td",Ji,[e("div",Yi,[o.platform==="gemini"?(n(),u("div",Zi,[a[39]||(a[39]=e("i",{class:"fas fa-robot text-xs text-yellow-700"},null,-1)),a[40]||(a[40]=e("span",{class:"text-xs font-semibold text-yellow-800"},"Gemini",-1)),a[41]||(a[41]=e("span",{class:"mx-1 h-4 w-px bg-yellow-300"},null,-1)),e("span",Xi,v(be()),1)])):o.platform==="claude-console"?(n(),u("div",ed,a[42]||(a[42]=[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)]))):o.platform==="bedrock"?(n(),u("div",td,a[43]||(a[43]=[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)]))):o.platform==="openai"?(n(),u("div",sd,[a[44]||(a[44]=e("div",{class:"fa-openai"},null,-1)),a[45]||(a[45]=e("span",{class:"text-xs font-semibold text-gray-950"},"OpenAi",-1)),a[46]||(a[46]=e("span",{class:"mx-1 h-4 w-px bg-gray-400"},null,-1)),e("span",ad,v(at()),1)])):o.platform==="azure_openai"?(n(),u("div",rd,a[47]||(a[47]=[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)]))):o.platform==="openai-responses"?(n(),u("div",ld,a[48]||(a[48]=[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)]))):o.platform==="claude"||o.platform==="claude-oauth"?(n(),u("div",od,[a[49]||(a[49]=e("i",{class:"fas fa-brain text-xs text-indigo-700"},null,-1)),e("span",nd,v(gt(o)),1),a[50]||(a[50]=e("span",{class:"mx-1 h-4 w-px bg-indigo-300"},null,-1)),e("span",id,v($(o)),1)])):o.platform==="ccr"?(n(),u("div",dd,a[51]||(a[51]=[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)]))):(n(),u("div",ud,a[52]||(a[52]=[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",pd,[e("div",gd,[e("span",{class:K(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",o.status==="blocked"?"bg-orange-100 text-orange-800":o.status==="unauthorized"?"bg-red-100 text-red-800":o.status==="temp_error"?"bg-orange-100 text-orange-800":o.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",o.status==="blocked"?"bg-orange-500":o.status==="unauthorized"?"bg-red-500":o.status==="temp_error"?"bg-orange-500":o.isActive?"bg-green-500":"bg-red-500"])},null,2),U(" "+v(o.status==="blocked"?"已封锁":o.status==="unauthorized"?"异常":o.status==="temp_error"?"临时异常":o.isActive?"正常":"异常"),1)],2),o.rateLimitStatus&&o.rateLimitStatus.isRateLimited||o.rateLimitStatus==="limited"?(n(),u("span",md,[a[53]||(a[53]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),a[54]||(a[54]=U(" 限流中 ",-1)),o.rateLimitStatus&&typeof o.rateLimitStatus=="object"&&o.rateLimitStatus.minutesRemaining>0?(n(),u("span",yd,"("+v(tt(o.rateLimitStatus.minutesRemaining))+")",1)):b("",!0)])):b("",!0),o.schedulable===!1?(n(),u("span",xd,[a[56]||(a[56]=e("i",{class:"fas fa-pause-circle mr-1"},null,-1)),a[57]||(a[57]=U(" 不可调度 ",-1)),_e(o)?(n(),Ce(T,{key:0,content:_e(o),effect:"dark",placement:"top"},{default:Ze(()=>a[55]||(a[55]=[e("i",{class:"fas fa-question-circle ml-1 cursor-help text-gray-500"},null,-1)])),_:2,__:[55]},1032,["content"])):b("",!0)])):b("",!0),o.status==="blocked"&&o.errorMessage?(n(),u("span",{key:2,class:"mt-1 max-w-xs truncate text-xs text-gray-500 dark:text-gray-400",title:o.errorMessage},v(o.errorMessage),9,fd)):b("",!0),o.accountType==="dedicated"?(n(),u("span",cd," 绑定: "+v(o.boundApiKeysCount||0)+" 个API Key ",1)):b("",!0)])]),e("td",bd,[o.platform==="claude"||o.platform==="claude-console"||o.platform==="bedrock"||o.platform==="gemini"||o.platform==="openai"||o.platform==="openai-responses"||o.platform==="azure_openai"||o.platform==="ccr"?(n(),u("div",vd,[e("div",kd,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-green-500 to-blue-600 transition-all duration-300",style:et({width:101-(o.priority||50)+"%"})},null,4)]),e("span",wd,v(o.priority||50),1)])):(n(),u("div",hd,a[58]||(a[58]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",Ad,[De(o.proxy)?(n(),u("div",{key:0,class:"break-all rounded bg-blue-50 px-2 py-1 font-mono text-xs",title:De(o.proxy)},v(De(o.proxy)),9,$d)):(n(),u("div",Cd,"无代理"))]),e("td",Id,[o.usage&&o.usage.daily?(n(),u("div",Ud,[e("div",Td,[a[59]||(a[59]=e("div",{class:"h-2 w-2 rounded-full bg-blue-500"},null,-1)),e("span",Vd,v(o.usage.daily.requests||0)+" 次",1)]),e("div",Rd,[a[60]||(a[60]=e("div",{class:"h-2 w-2 rounded-full bg-purple-500"},null,-1)),e("span",Kd,v(h(o.usage.daily.allTokens||0))+"M",1)]),e("div",zd,[a[61]||(a[61]=e("div",{class:"h-2 w-2 rounded-full bg-green-500"},null,-1)),e("span",Sd,"$"+v(Je(o)),1)]),o.usage.averages&&o.usage.averages.rpm>0?(n(),u("div",Md," 平均 "+v(o.usage.averages.rpm.toFixed(2))+" RPM ",1)):b("",!0)])):(n(),u("div",Pd,"暂无数据"))]),e("td",Ld,[o.platform==="claude"&&o.sessionWindow&&o.sessionWindow.hasActiveWindow?(n(),u("div",Od,[o.usage&&o.usage.sessionWindow?(n(),u("div",jd,[e("div",Dd,[a[62]||(a[62]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("span",Ed,v(h(o.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",Wd,[a[63]||(a[63]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("span",qd," $"+v(ke(o.usage.sessionWindow.totalCost)),1)])])):b("",!0),e("div",Gd,[e("div",Nd,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",He(o.sessionWindow.sessionWindowStatus,o)]),style:et({width:o.sessionWindow.progress+"%"})},null,6)]),e("span",Fd,v(o.sessionWindow.progress)+"% ",1)]),e("div",Qd,[e("div",null,v(Ee(o.sessionWindow.windowStart,o.sessionWindow.windowEnd)),1),o.sessionWindow.remainingTime>0?(n(),u("div",Bd," 剩余 "+v(Fe(o.sessionWindow.remainingTime)),1)):b("",!0)])])):o.platform==="claude-console"?(n(),u("div",_d,[Number(o.dailyQuota)>0?(n(),u("div",Hd,[e("div",Jd,[a[64]||(a[64]=e("span",{class:"text-gray-600 dark:text-gray-300"},"额度进度",-1)),e("span",Yd,v(qe(o).toFixed(1))+"% ",1)]),e("div",Zd,[e("div",Xd,[e("div",{class:K(["h-2 rounded-full transition-all duration-300",nt(qe(o))]),style:et({width:Math.min(100,qe(o))+"%"})},null,6)]),e("span",eu," $"+v(ke(((q=(B=o.usage)==null?void 0:B.daily)==null?void 0:q.cost)||0))+" / $"+v(Number(o.dailyQuota).toFixed(2)),1)]),e("div",tu,[U(" 剩余 $"+v(it(o))+" ",1),e("span",su,"重置 "+v(o.quotaResetTime||"00:00"),1)])])):(n(),u("div",au,a[65]||(a[65]=[e("i",{class:"fas fa-minus"},null,-1)])))])):o.platform==="claude"?(n(),u("div",ru,a[66]||(a[66]=[e("i",{class:"fas fa-minus"},null,-1)]))):(n(),u("div",lu,a[67]||(a[67]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",ou,v(Ge(o.lastUsedAt)),1),e("td",nu,[e("div",iu,[(o.platform==="claude"||o.platform==="claude-console"||o.platform==="openai"||o.platform==="openai-responses")&&(o.status==="unauthorized"||o.status!=="active"||(re=o.rateLimitStatus)!=null&&re.isRateLimited||o.rateLimitStatus==="limited"||!o.isActive)?(n(),u("button",{key:0,class:K(["rounded px-2.5 py-1 text-xs font-medium transition-colors",o.isResetting?"cursor-not-allowed bg-gray-100 text-gray-400":"bg-yellow-100 text-yellow-700 hover:bg-yellow-200"]),disabled:o.isResetting,title:o.isResetting?"重置中...":"重置所有异常状态",onClick:X=>ze(o)},[e("i",{class:K(["fas fa-redo",o.isResetting?"animate-spin":""])},null,2),a[68]||(a[68]=e("span",{class:"ml-1"},"重置状态",-1))],10,du)):b("",!0),e("button",{class:K(["rounded px-2.5 py-1 text-xs font-medium transition-colors",o.isTogglingSchedulable?"cursor-not-allowed bg-gray-100 text-gray-400":o.schedulable?"bg-green-100 text-green-700 hover:bg-green-200":"bg-gray-100 text-gray-700 hover:bg-gray-200"]),disabled:o.isTogglingSchedulable,title:o.schedulable?"点击禁用调度":"点击启用调度",onClick:X=>Se(o)},[e("i",{class:K(["fas",o.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",pu,v(o.schedulable?"调度":"停用"),1)],10,uu),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:X=>Qe(o)},a[69]||(a[69]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,gu),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:X=>Be(o)},a[70]||(a[70]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,mu)])])])}),128))])])])),!p.value&&s.value.length>0?(n(),u("div",yu,[(n(!0),u(fe,null,he(s.value,o=>{var B,q,re,X;return n(),u("div",{key:o.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",xu,[e("div",fu,[e("div",{class:K(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg",o.platform==="claude"?"bg-gradient-to-br from-purple-500 to-purple-600":o.platform==="bedrock"?"bg-gradient-to-br from-orange-500 to-red-600":o.platform==="azure_openai"?"bg-gradient-to-br from-blue-500 to-cyan-600":o.platform==="openai"?"bg-gradient-to-br from-gray-600 to-gray-700":o.platform==="ccr"?"bg-gradient-to-br from-teal-500 to-emerald-600":"bg-gradient-to-br from-blue-500 to-blue-600"])},[e("i",{class:K(["text-sm text-white",o.platform==="claude"?"fas fa-brain":o.platform==="bedrock"?"fab fa-aws":o.platform==="azure_openai"?"fab fa-microsoft":o.platform==="openai"?"fas fa-openai":o.platform==="ccr"?"fas fa-code-branch":"fas fa-robot"])},null,2)],2),e("div",null,[e("h4",cu,v(o.name||o.email),1),e("div",bu,[e("span",vu,v(o.platform),1),a[71]||(a[71]=e("span",{class:"text-xs text-gray-400"},"|",-1)),e("span",ku,v(o.type),1)])])]),e("span",{class:K(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",Ae(o)])},[e("div",{class:K(["mr-1.5 h-1.5 w-1.5 rounded-full",lt(o)])},null,2),U(" "+v(rt(o)),1)],2)]),e("div",wu,[e("div",null,[a[75]||(a[75]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"今日使用",-1)),e("div",hu,[e("div",Au,[a[72]||(a[72]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-blue-500"},null,-1)),e("p",$u,v(((q=(B=o.usage)==null?void 0:B.daily)==null?void 0:q.requests)||0)+" 次 ",1)]),e("div",Cu,[a[73]||(a[73]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",Iu,v(h(((X=(re=o.usage)==null?void 0:re.daily)==null?void 0:X.allTokens)||0))+"M ",1)]),e("div",Uu,[a[74]||(a[74]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",Tu," $"+v(Je(o)),1)])])]),e("div",null,[a[78]||(a[78]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"会话窗口",-1)),o.usage&&o.usage.sessionWindow?(n(),u("div",Vu,[e("div",Ru,[a[76]||(a[76]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",Ku,v(h(o.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",zu,[a[77]||(a[77]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",Su," $"+v(ke(o.usage.sessionWindow.totalCost)),1)])])):(n(),u("div",Mu,"-"))])]),e("div",Pu,[o.platform==="claude"&&o.sessionWindow&&o.sessionWindow.hasActiveWindow?(n(),u("div",Lu,[e("div",Ou,[e("div",ju,[a[80]||(a[80]=e("span",{class:"font-medium text-gray-600 dark:text-gray-300"},"会话窗口",-1)),we(T,{content:"会话窗口进度不代表使用量仅表示距离下一个5小时窗口的剩余时间",placement:"top"},{default:Ze(()=>a[79]||(a[79]=[e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600"},null,-1)])),_:1,__:[79]})]),e("span",Du,v(o.sessionWindow.progress)+"% ",1)]),e("div",Eu,[e("div",{class:K(["h-full transition-all duration-300",He(o.sessionWindow.sessionWindowStatus,o)]),style:et({width:o.sessionWindow.progress+"%"})},null,6)]),e("div",Wu,[e("span",qu,v(Ee(o.sessionWindow.windowStart,o.sessionWindow.windowEnd)),1),o.sessionWindow.remainingTime>0?(n(),u("span",Gu," 剩余 "+v(Fe(o.sessionWindow.remainingTime)),1)):(n(),u("span",Nu," 已结束 "))])])):b("",!0),e("div",Fu,[a[81]||(a[81]=e("span",{class:"text-gray-500 dark:text-gray-400"},"最后使用",-1)),e("span",Qu,v(o.lastUsedAt?ot(o.lastUsedAt):"从未使用"),1)]),o.proxyConfig&&o.proxyConfig.type!=="none"?(n(),u("div",Bu,[a[82]||(a[82]=e("span",{class:"text-gray-500 dark:text-gray-400"},"代理",-1)),e("span",_u,v(o.proxyConfig.type.toUpperCase()),1)])):b("",!0),e("div",Hu,[a[83]||(a[83]=e("span",{class:"text-gray-500 dark:text-gray-400"},"优先级",-1)),e("span",Ju,v(o.priority||50),1)])]),e("div",Yu,[e("button",{class:K(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs transition-colors",o.schedulable?"bg-gray-50 text-gray-600 hover:bg-gray-100":"bg-green-50 text-green-600 hover:bg-green-100"]),disabled:o.isTogglingSchedulable,onClick:ve=>Se(o)},[e("i",{class:K(["fas",o.schedulable?"fa-pause":"fa-play"])},null,2),U(" "+v(o.schedulable?"暂停":"启用"),1)],10,Zu),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:ve=>Qe(o)},a[84]||(a[84]=[e("i",{class:"fas fa-edit mr-1"},null,-1),U(" 编辑 ",-1)]),8,Xu),e("button",{class:"rounded-lg bg-red-50 px-3 py-2 text-xs text-red-600 transition-colors hover:bg-red-100",onClick:ve=>Be(o)},a[85]||(a[85]=[e("i",{class:"fas fa-trash"},null,-1)]),8,e0)])])}),128))])):b("",!0)]),k.value&&(!M.value||M.value!=="ccr")?(n(),Ce(It,{key:0,onClose:We,onPlatformChanged:a[11]||(a[11]=o=>M.value=o),onSuccess:m})):k.value&&M.value==="ccr"?(n(),Ce(Ut,{key:1,onClose:We,onSuccess:m})):b("",!0),ye.value&&ce.value&&ce.value.platform==="ccr"?(n(),Ce(Ut,{key:2,account:ce.value,onClose:a[12]||(a[12]=o=>ye.value=!1),onSuccess:g},null,8,["account"])):ye.value?(n(),Ce(It,{key:3,account:ce.value,onClose:a[13]||(a[13]=o=>ye.value=!1),onSuccess:g},null,8,["account"])):b("",!0),we(Tt,{"cancel-text":xe(f).cancelText,"confirm-text":xe(f).confirmText,message:xe(f).message,show:xe(me),title:xe(f).title,onCancel:xe(j),onConfirm:xe(I)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"])])}}},i0=ct(t0,[["__scopeId","data-v-00da8870"]]);export{i0 as default};