import{a as It}from"./element-plus-C5sO7D8l.js";import{r as A,aP as Ut,o as Q,V as St,x as d,y as i,z as e,L as v,K as y,al as oe,aT as Ye,aV as Vt,aq as I,aY as zt,C as O,O as $,c as Me,P as c,q as ct,I as Le,an as X,Q as he,ac as Ce,a5 as Ct,R as we,B as Xe,u as pe,J as Je,Y as pt}from"./vue-vendor-Bsazo-x0.js";import{c as z,s as S,_ as Mt}from"./index-DGFieDJM.js";import{C as $t}from"./ConfirmModal-rW5FlrI3.js";import{C as yt}from"./CustomDropdown-CBCxCX5o.js";import"./vendor-C8JtMHuO.js";const gt=A(!1),kt=A({title:"",message:"",confirmText:"继续",cancelText:"取消"}),Pe=A(null);function At(){return{showConfirmModal:gt,confirmOptions:kt,showConfirm:(ae,T,W="继续",h="取消")=>new Promise(x=>{kt.value={title:ae,message:T,confirmText:W,cancelText:h},Pe.value=x,gt.value=!0}),handleConfirm:()=>{gt.value=!1,Pe.value&&(Pe.value(!0),Pe.value=null)},handleCancel:()=>{gt.value=!1,Pe.value&&(Pe.value(!1),Pe.value=null)}}}const Tt=Ut("accounts",()=>{const ne=A([]),de=A([]),m=A([]),ae=A([]),T=A([]),W=A([]),h=A(!1),x=A(null),M=A(""),K=A("asc"),b=async()=>{h.value=!0,x.value=null;try{const g=await z.get("/admin/claude-accounts");if(g.success)ne.value=g.data||[];else throw new Error(g.message||"获取Claude账户失败")}catch(g){throw x.value=g.message,g}finally{h.value=!1}},_=async()=>{h.value=!0,x.value=null;try{const g=await z.get("/admin/claude-console-accounts");if(g.success)de.value=g.data||[];else throw new Error(g.message||"获取Claude Console账户失败")}catch(g){throw x.value=g.message,g}finally{h.value=!1}},P=async()=>{h.value=!0,x.value=null;try{const g=await z.get("/admin/bedrock-accounts");if(g.success)m.value=g.data||[];else throw new Error(g.message||"获取Bedrock账户失败")}catch(g){throw x.value=g.message,g}finally{h.value=!1}},R=async()=>{h.value=!0,x.value=null;try{const g=await z.get("/admin/gemini-accounts");if(g.success)ae.value=g.data||[];else throw new Error(g.message||"获取Gemini账户失败")}catch(g){throw x.value=g.message,g}finally{h.value=!1}},N=async()=>{h.value=!0,x.value=null;try{const g=await z.get("/admin/openai-accounts");if(g.success)T.value=g.data||[];else throw new Error(g.message||"获取OpenAI账户失败")}catch(g){throw x.value=g.message,g}finally{h.value=!1}},te=async()=>{h.value=!0,x.value=null;try{const g=await z.get("/admin/azure-openai-accounts");if(g.success)W.value=g.data||[];else throw new Error(g.message||"获取Azure OpenAI账户失败")}catch(g){throw x.value=g.message,g}finally{h.value=!1}};return{claudeAccounts:ne,claudeConsoleAccounts:de,bedrockAccounts:m,geminiAccounts:ae,openaiAccounts:T,azureOpenaiAccounts:W,loading:h,error:x,sortBy:M,sortOrder:K,fetchClaudeAccounts:b,fetchClaudeConsoleAccounts:_,fetchBedrockAccounts:P,fetchGeminiAccounts:R,fetchOpenAIAccounts:N,fetchAzureOpenAIAccounts:te,fetchAllAccounts:async()=>{h.value=!0,x.value=null;try{await Promise.all([b(),_(),P(),R(),N(),te()])}catch(g){throw x.value=g.message,g}finally{h.value=!1}},createClaudeAccount:async g=>{h.value=!0,x.value=null;try{const u=await z.post("/admin/claude-accounts",g);if(u.success)return await b(),u.data;throw new Error(u.message||"创建Claude账户失败")}catch(u){throw x.value=u.message,u}finally{h.value=!1}},createClaudeConsoleAccount:async g=>{h.value=!0,x.value=null;try{const u=await z.post("/admin/claude-console-accounts",g);if(u.success)return await _(),u.data;throw new Error(u.message||"创建Claude Console账户失败")}catch(u){throw x.value=u.message,u}finally{h.value=!1}},createBedrockAccount:async g=>{h.value=!0,x.value=null;try{const u=await z.post("/admin/bedrock-accounts",g);if(u.success)return await P(),u.data;throw new Error(u.message||"创建Bedrock账户失败")}catch(u){throw x.value=u.message,u}finally{h.value=!1}},createGeminiAccount:async g=>{h.value=!0,x.value=null;try{const u=await z.post("/admin/gemini-accounts",g);if(u.success)return await R(),u.data;throw new Error(u.message||"创建Gemini账户失败")}catch(u){throw x.value=u.message,u}finally{h.value=!1}},createOpenAIAccount:async g=>{h.value=!0,x.value=null;try{const u=await z.post("/admin/openai-accounts",g);if(u.success)return await N(),u.data;throw new Error(u.message||"创建OpenAI账户失败")}catch(u){throw x.value=u.message,u}finally{h.value=!1}},createAzureOpenAIAccount:async g=>{h.value=!0,x.value=null;try{const u=await z.post("/admin/azure-openai-accounts",g);if(u.success)return await te(),u.data;throw new Error(u.message||"创建Azure OpenAI账户失败")}catch(u){throw x.value=u.message,u}finally{h.value=!1}},updateClaudeAccount:async(g,u)=>{h.value=!0,x.value=null;try{const C=await z.put(`/admin/claude-accounts/${g}`,u);if(C.success)return await b(),C;throw new Error(C.message||"更新Claude账户失败")}catch(C){throw x.value=C.message,C}finally{h.value=!1}},updateClaudeConsoleAccount:async(g,u)=>{h.value=!0,x.value=null;try{const C=await z.put(`/admin/claude-console-accounts/${g}`,u);if(C.success)return await _(),C;throw new Error(C.message||"更新Claude Console账户失败")}catch(C){throw x.value=C.message,C}finally{h.value=!1}},updateBedrockAccount:async(g,u)=>{h.value=!0,x.value=null;try{const C=await z.put(`/admin/bedrock-accounts/${g}`,u);if(C.success)return await P(),C;throw new Error(C.message||"更新Bedrock账户失败")}catch(C){throw x.value=C.message,C}finally{h.value=!1}},updateGeminiAccount:async(g,u)=>{h.value=!0,x.value=null;try{const C=await z.put(`/admin/gemini-accounts/${g}`,u);if(C.success)return await R(),C;throw new Error(C.message||"更新Gemini账户失败")}catch(C){throw x.value=C.message,C}finally{h.value=!1}},updateOpenAIAccount:async(g,u)=>{h.value=!0,x.value=null;try{const C=await z.put(`/admin/openai-accounts/${g}`,u);if(C.success)return await N(),C;throw new Error(C.message||"更新OpenAI账户失败")}catch(C){throw x.value=C.message,C}finally{h.value=!1}},updateAzureOpenAIAccount:async(g,u)=>{h.value=!0,x.value=null;try{const C=await z.put(`/admin/azure-openai-accounts/${g}`,u);if(C.success)return await te(),C;throw new Error(C.message||"更新Azure OpenAI账户失败")}catch(C){throw x.value=C.message,C}finally{h.value=!1}},toggleAccount:async(g,u)=>{h.value=!0,x.value=null;try{let C;g==="claude"?C=`/admin/claude-accounts/${u}/toggle`:g==="claude-console"?C=`/admin/claude-console-accounts/${u}/toggle`:g==="bedrock"?C=`/admin/bedrock-accounts/${u}/toggle`:g==="gemini"?C=`/admin/gemini-accounts/${u}/toggle`:g==="openai"?C=`/admin/openai-accounts/${u}/toggle`:g==="azure_openai"?C=`/admin/azure-openai-accounts/${u}/toggle`:C=`/admin/openai-accounts/${u}/toggle`;const ye=await z.put(C);if(ye.success)return g==="claude"?await b():g==="claude-console"?await _():g==="bedrock"?await P():g==="gemini"?await R():g==="openai"?await N():g==="azure_openai"?await te():await N(),ye;throw new Error(ye.message||"切换状态失败")}catch(C){throw x.value=C.message,C}finally{h.value=!1}},deleteAccount:async(g,u)=>{h.value=!0,x.value=null;try{let C;g==="claude"?C=`/admin/claude-accounts/${u}`:g==="claude-console"?C=`/admin/claude-console-accounts/${u}`:g==="bedrock"?C=`/admin/bedrock-accounts/${u}`:g==="gemini"?C=`/admin/gemini-accounts/${u}`:g==="openai"?C=`/admin/openai-accounts/${u}`:g==="azure_openai"?C=`/admin/azure-openai-accounts/${u}`:C=`/admin/openai-accounts/${u}`;const ye=await z.delete(C);if(ye.success)return g==="claude"?await b():g==="claude-console"?await _():g==="bedrock"?await P():g==="gemini"?await R():g==="openai"?await N():g==="azure_openai"?await te():await N(),ye;throw new Error(ye.message||"删除失败")}catch(C){throw x.value=C.message,C}finally{h.value=!1}},refreshClaudeToken:async g=>{h.value=!0,x.value=null;try{const u=await z.post(`/admin/claude-accounts/${g}/refresh`);if(u.success)return await b(),u;throw new Error(u.message||"Token刷新失败")}catch(u){throw x.value=u.message,u}finally{h.value=!1}},generateClaudeAuthUrl:async g=>{try{const u=await z.post("/admin/claude-accounts/generate-auth-url",g);if(u.success)return u.data;throw new Error(u.message||"生成授权URL失败")}catch(u){throw x.value=u.message,u}},exchangeClaudeCode:async g=>{try{const u=await z.post("/admin/claude-accounts/exchange-code",g);if(u.success)return u.data;throw new Error(u.message||"交换授权码失败")}catch(u){throw x.value=u.message,u}},generateClaudeSetupTokenUrl:async g=>{try{const u=await z.post("/admin/claude-accounts/generate-setup-token-url",g);if(u.success)return u.data;throw new Error(u.message||"生成Setup Token URL失败")}catch(u){throw x.value=u.message,u}},exchangeClaudeSetupTokenCode:async g=>{try{const u=await z.post("/admin/claude-accounts/exchange-setup-token-code",g);if(u.success)return u.data;throw new Error(u.message||"交换Setup Token授权码失败")}catch(u){throw x.value=u.message,u}},generateGeminiAuthUrl:async g=>{try{const u=await z.post("/admin/gemini-accounts/generate-auth-url",g);if(u.success)return u.data;throw new Error(u.message||"生成授权URL失败")}catch(u){throw x.value=u.message,u}},exchangeGeminiCode:async g=>{try{const u=await z.post("/admin/gemini-accounts/exchange-code",g);if(u.success)return u.data;throw new Error(u.message||"交换授权码失败")}catch(u){throw x.value=u.message,u}},generateOpenAIAuthUrl:async g=>{try{const u=await z.post("/admin/openai-accounts/generate-auth-url",g);if(u.success)return u.data;throw new Error(u.message||"生成授权URL失败")}catch(u){throw x.value=u.message,u}},exchangeOpenAICode:async g=>{try{const u=await z.post("/admin/openai-accounts/exchange-code",g);if(u.success)return u.data;throw new Error(u.message||"交换授权码失败")}catch(u){throw x.value=u.message,u}},sortAccounts:g=>{M.value===g?K.value=K.value==="asc"?"desc":"asc":(M.value=g,K.value="asc")},reset:()=>{ne.value=[],de.value=[],m.value=[],ae.value=[],T.value=[],W.value=[],h.value=!1,x.value=null,M.value="",K.value="asc"}}}),Kt={class:"space-y-4"},Ot={class:"flex items-center justify-between"},Rt={class:"flex cursor-pointer items-center"},_t={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"},Pt={class:"grid grid-cols-2 gap-4"},Lt={class:"space-y-4"},jt={class:"flex items-center"},Dt={key:0,class:"grid grid-cols-2 gap-4"},Et={class:"relative"},Wt=["type"],wt={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(ne,{emit:de}){const m=ne,ae=de,T=A({...m.modelValue}),W=A(!!(T.value.username||T.value.password)),h=A(!1);Q(()=>m.modelValue,K=>{JSON.stringify(K)!==JSON.stringify(T.value)&&(T.value={...K},W.value=!!(K.username||K.password))},{deep:!0}),Q(()=>T.value.enabled,()=>{M()}),Q(()=>T.value.type,()=>{M()}),Q(()=>T.value.host,()=>{M()}),Q(()=>T.value.port,()=>{M()}),Q(()=>T.value.username,()=>{M()}),Q(()=>T.value.password,()=>{M()}),Q(W,K=>{K||(T.value.username="",T.value.password="",M())});let x=null;function M(){x&&clearTimeout(x),x=setTimeout(()=>{const K={...T.value};W.value||(K.username="",K.password=""),ae("update:modelValue",K)},100)}return St(()=>{x&&clearTimeout(x)}),(K,b)=>(i(),d("div",Kt,[e("div",Ot,[b[9]||(b[9]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",Rt,[y(e("input",{"onUpdate:modelValue":b[0]||(b[0]=_=>T.value.enabled=_),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[oe,T.value.enabled]]),b[8]||(b[8]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),T.value.enabled?(i(),d("div",_t,[b[17]||(b[17]=Ye('

配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。

请确保代理服务器稳定可用,否则会影响账户的正常使用。

',1)),e("div",null,[b[11]||(b[11]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),y(e("select",{"onUpdate:modelValue":b[1]||(b[1]=_=>T.value.type=_),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},b[10]||(b[10]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[Vt,T.value.type]])]),e("div",Pt,[e("div",null,[b[12]||(b[12]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),y(e("input",{"onUpdate:modelValue":b[2]||(b[2]=_=>T.value.host=_),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),[[I,T.value.host]])]),e("div",null,[b[13]||(b[13]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),y(e("input",{"onUpdate:modelValue":b[3]||(b[3]=_=>T.value.port=_),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),[[I,T.value.port]])])]),e("div",Lt,[e("div",jt,[y(e("input",{id:"proxyAuth","onUpdate:modelValue":b[4]||(b[4]=_=>W.value=_),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[oe,W.value]]),b[14]||(b[14]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),W.value?(i(),d("div",Dt,[e("div",null,[b[15]||(b[15]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),y(e("input",{"onUpdate:modelValue":b[5]||(b[5]=_=>T.value.username=_),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),[[I,T.value.username]])]),e("div",null,[b[16]||(b[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",Et,[y(e("input",{"onUpdate:modelValue":b[6]||(b[6]=_=>T.value.password=_),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:h.value?"text":"password"},null,8,Wt),[[zt,T.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:b[7]||(b[7]=_=>h.value=!h.value)},[e("i",{class:O(h.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):v("",!0)]),b[18]||(b[18]=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,"提示:"),$("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):v("",!0)]))}},Gt={class:"space-y-6"},Nt={key:0},qt={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},Ft={class:"flex items-start gap-4"},Bt={class:"flex-1"},Qt={class:"space-y-4"},Ht={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Jt={class:"flex items-start gap-3"},Yt={class:"flex-1"},Xt=["disabled"],Zt={key:0,class:"fas fa-link mr-2"},es={key:1,class:"loading-spinner mr-2"},ts={key:1,class:"space-y-3"},ss={class:"flex items-center gap-2"},as=["value"],rs={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},ls={class:"flex items-start gap-3"},os={class:"flex-1"},ns={class:"space-y-3"},is={key:1},ds={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},us={class:"flex items-start gap-4"},ps={class:"flex-1"},gs={class:"space-y-4"},ms={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},ys={class:"flex items-start gap-3"},cs={class:"flex-1"},xs=["disabled"],fs={key:0,class:"fas fa-link mr-2"},bs={key:1,class:"loading-spinner mr-2"},vs={key:1,class:"space-y-3"},ks={class:"flex items-center gap-2"},ws=["value"],hs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Cs={class:"flex items-start gap-3"},$s={class:"flex-1"},As={class:"space-y-3"},Ts={key:2},Is={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},Us={class:"flex items-start gap-4"},Ss={class:"flex-1"},Vs={class:"space-y-4"},zs={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Ms={class:"flex items-start gap-3"},Ks={class:"flex-1"},Os=["disabled"],Rs={key:0,class:"fas fa-link mr-2"},_s={key:1,class:"loading-spinner mr-2"},Ps={key:1,class:"space-y-3"},Ls={class:"flex items-center gap-2"},js=["value"],Ds={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Es={class:"flex items-start gap-3"},Ws={class:"flex-1"},Gs={class:"space-y-3"},Ns={class:"flex gap-3 pt-4"},qs=["disabled"],Fs={key:0,class:"loading-spinner mr-2"},Bs={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(ne,{emit:de}){const m=ne,ae=de,T=Tt(),W=A(!1),h=A(!1),x=A(""),M=A(""),K=A(!1),b=A(""),_=Me(()=>x.value&&M.value.trim());Q(M,q=>{if(!q||typeof q!="string")return;const p=q.trim();if(!p)return;if(p.startsWith("http://")||p.startsWith("https://"))if(p.startsWith("http://localhost:45462")||p.startsWith("http://localhost:1455"))try{const se=new URL(p).searchParams.get("code");se?(M.value=se,S("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):S("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(ue){console.error("Failed to parse URL:",ue),S("链接格式错误,请检查是否为完整的 URL","error")}else if(m.platform==="gemini"||m.platform==="openai")try{const se=new URL(p).searchParams.get("code");se&&(M.value=se,S("成功提取授权码!","success"))}catch{}else S("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const P=async()=>{var q;W.value=!0;try{const p=(q=m.proxy)!=null&&q.enabled?{proxy:{type:m.proxy.type,host:m.proxy.host,port:parseInt(m.proxy.port),username:m.proxy.username||null,password:m.proxy.password||null}}:{};if(m.platform==="claude"){const G=await T.generateClaudeAuthUrl(p);x.value=G.authUrl,b.value=G.sessionId}else if(m.platform==="gemini"){const G=await T.generateGeminiAuthUrl(p);x.value=G.authUrl,b.value=G.sessionId}else if(m.platform==="openai"){const G=await T.generateOpenAIAuthUrl(p);x.value=G.authUrl,b.value=G.sessionId}}catch(p){S(p.message||"生成授权链接失败","error")}finally{W.value=!1}},R=()=>{x.value="",M.value="",P()},N=async()=>{try{await navigator.clipboard.writeText(x.value),K.value=!0,S("链接已复制","success"),setTimeout(()=>{K.value=!1},2e3)}catch{const p=document.createElement("input");p.value=x.value,document.body.appendChild(p),p.select(),document.execCommand("copy"),document.body.removeChild(p),K.value=!0,S("链接已复制","success"),setTimeout(()=>{K.value=!1},2e3)}},te=async()=>{var q;if(_.value){h.value=!0;try{let p={};m.platform==="claude"?p={sessionId:b.value,callbackUrl:M.value.trim()}:m.platform==="gemini"?p={code:M.value.trim(),sessionId:b.value}:m.platform==="openai"&&(p={code:M.value.trim(),sessionId:b.value}),(q=m.proxy)!=null&&q.enabled&&(p.proxy={type:m.proxy.type,host:m.proxy.host,port:parseInt(m.proxy.port),username:m.proxy.username||null,password:m.proxy.password||null});let G;m.platform==="claude"?G=await T.exchangeClaudeCode(p):m.platform==="gemini"?G=await T.exchangeGeminiCode(p):m.platform==="openai"&&(G=await T.exchangeOpenAICode(p)),ae("success",G)}catch(p){S(p.message||"授权失败,请检查授权码是否正确","error")}finally{h.value=!1}}};return(q,p)=>(i(),d("div",Gt,[ne.platform==="claude"?(i(),d("div",Nt,[e("div",qt,[e("div",Ft,[p[15]||(p[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",Bt,[p[13]||(p[13]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"},"Claude 账户授权",-1)),p[14]||(p[14]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤完成 Claude 账户的授权: ",-1)),e("div",Qt,[e("div",Ht,[e("div",Jt,[p[6]||(p[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",Yt,[p[5]||(p[5]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),x.value?(i(),d("div",ts,[e("div",ss,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:x.value},null,8,as),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:N},[e("i",{class:O(K.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:R},p[4]||(p[4]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$("重新生成 ",-1)]))])):(i(),d("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:W.value,onClick:P},[W.value?(i(),d("div",es)):(i(),d("i",Zt)),$(" "+c(W.value?"生成中...":"生成授权链接"),1)],8,Xt))])])]),p[12]||(p[12]=Ye('
2

在浏览器中打开链接并完成授权

请在新标签页中打开授权链接,登录您的 Claude 账户并授权。

注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。

',1)),e("div",rs,[e("div",ls,[p[11]||(p[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",os,[p[9]||(p[9]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),p[10]||(p[10]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"},[$(" 授权完成后,页面会显示一个 "),e("strong",null,"Authorization Code"),$(",请将其复制并粘贴到下方输入框: ")],-1)),e("div",ns,[e("div",null,[p[7]||(p[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"}),$("Authorization Code ")],-1)),y(e("textarea",{"onUpdate:modelValue":p[0]||(p[0]=G=>M.value=G),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[I,M.value]])]),p[8]||(p[8]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" 请粘贴从Claude页面复制的Authorization Code ")],-1))])])])])])])])])])):ne.platform==="gemini"?(i(),d("div",is,[e("div",ds,[e("div",us,[p[27]||(p[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",ps,[p[25]||(p[25]=e("h4",{class:"mb-3 font-semibold text-green-900 dark:text-green-200"},"Gemini 账户授权",-1)),p[26]||(p[26]=e("p",{class:"mb-4 text-sm text-green-800 dark:text-green-300"}," 请按照以下步骤完成 Gemini 账户的授权: ",-1)),e("div",gs,[e("div",ms,[e("div",ys,[p[18]||(p[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",cs,[p[17]||(p[17]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 点击下方按钮生成授权链接 ",-1)),x.value?(i(),d("div",vs,[e("div",ks,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:x.value},null,8,ws),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:N},[e("i",{class:O(K.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-green-600 hover:text-green-700",onClick:R},p[16]||(p[16]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$("重新生成 ",-1)]))])):(i(),d("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:W.value,onClick:P},[W.value?(i(),d("div",bs)):(i(),d("i",fs)),$(" "+c(W.value?"生成中...":"生成授权链接"),1)],8,xs))])])]),p[24]||(p[24]=Ye('
2

在浏览器中打开链接并完成授权

请在新标签页中打开授权链接,登录您的 Gemini 账户并授权。

注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。

',1)),e("div",hs,[e("div",Cs,[p[23]||(p[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",$s,[p[21]||(p[21]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 输入 Authorization Code ",-1)),p[22]||(p[22]=e("p",{class:"mb-3 text-sm text-green-700 dark:text-green-300"}," 授权完成后,页面会显示一个 Authorization Code,请将其复制并粘贴到下方输入框: ",-1)),e("div",As,[e("div",null,[p[19]||(p[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"}),$("Authorization Code ")],-1)),y(e("textarea",{"onUpdate:modelValue":p[1]||(p[1]=G=>M.value=G),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[I,M.value]])]),p[20]||(p[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"}),$(" 请粘贴从Gemini页面复制的Authorization Code ")])],-1))])])])])])])])])])):ne.platform==="openai"?(i(),d("div",Ts,[e("div",Is,[e("div",Us,[p[39]||(p[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",Ss,[p[37]||(p[37]=e("h4",{class:"mb-3 font-semibold text-orange-900 dark:text-orange-200"},"OpenAI 账户授权",-1)),p[38]||(p[38]=e("p",{class:"mb-4 text-sm text-orange-800 dark:text-orange-300"}," 请按照以下步骤完成 OpenAI 账户的授权: ",-1)),e("div",Vs,[e("div",zs,[e("div",Ms,[p[30]||(p[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",Ks,[p[29]||(p[29]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 点击下方按钮生成授权链接 ",-1)),x.value?(i(),d("div",Ps,[e("div",Ls,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:x.value},null,8,js),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:N},[e("i",{class:O(K.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-orange-600 hover:text-orange-700",onClick:R},p[28]||(p[28]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$("重新生成 ",-1)]))])):(i(),d("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:W.value,onClick:P},[W.value?(i(),d("div",_s)):(i(),d("i",Rs)),$(" "+c(W.value?"生成中...":"生成授权链接"),1)],8,Os))])])]),p[36]||(p[36]=Ye('
2

在浏览器中打开链接并完成授权

请在新标签页中打开授权链接,登录您的 OpenAI 账户并授权。

重要提示:授权后页面可能会加载较长时间,请耐心等待。

当浏览器地址栏变为 http://localhost:1455/... 开头时,表示授权已完成。

注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。

',1)),e("div",Ds,[e("div",Es,[p[35]||(p[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",Ws,[p[33]||(p[33]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 输入授权链接或 Code ",-1)),p[34]||(p[34]=e("p",{class:"mb-3 text-sm text-orange-700 dark:text-orange-300"},[$(" 授权完成后,当页面地址变为 "),e("strong",{class:"font-mono"},"http://localhost:1455/..."),$(" 时: ")],-1)),e("div",Gs,[e("div",null,[p[31]||(p[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"}),$("授权链接或 Code ")],-1)),y(e("textarea",{"onUpdate:modelValue":p[2]||(p[2]=G=>M.value=G),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),[[I,M.value]])]),p[32]||(p[32]=Ye('

提示:您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别。

• 完整链接示例:http://localhost:1455/auth/callback?code=ac_4hm8...

• 仅 Code 示例:ac_4hm8iqmx9A2fzMy_cwye7U3W7...

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