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

配置代理以访问受限的网络资源。支持 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)),c(e("select",{"onUpdate:modelValue":b[1]||(b[1]=O=>C.value.type=O),class:"form-input w-full 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),[[mt,C.value.type]])]),e("div",vt,[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)),c(e("input",{"onUpdate:modelValue":b[2]||(b[2]=O=>C.value.host=O),class:"form-input w-full 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),[[T,C.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)),c(e("input",{"onUpdate:modelValue":b[3]||(b[3]=O=>C.value.port=O),class:"form-input w-full dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 1080",type:"number"},null,512),[[T,C.value.port]])])]),e("div",kt,[e("div",wt,[c(e("input",{id:"proxyAuth","onUpdate:modelValue":b[4]||(b[4]=O=>R.value=O),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ae,R.value]]),b[14]||(b[14]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),R.value?(i(),u("div",ht,[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)),c(e("input",{"onUpdate:modelValue":b[5]||(b[5]=O=>C.value.username=O),class:"form-input w-full dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理用户名",type:"text"},null,512),[[T,C.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",At,[c(e("input",{"onUpdate:modelValue":b[6]||(b[6]=O=>C.value.password=O),class:"form-input w-full pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理密码",type:w.value?"text":"password"},null,8,$t),[[gt,C.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]=O=>w.value=!w.value)},[e("i",{class:K(w.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):k("",!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))])):k("",!0)]))}},Ct={class:"space-y-6"},Tt={key:0},It={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},Ut={class:"flex items-start gap-4"},zt={class:"flex-1"},St={class:"space-y-4"},Vt={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Kt={class:"flex items-start gap-3"},Mt={class:"flex-1"},Ot=["disabled"],Pt={key:0,class:"fas fa-link mr-2"},Lt={key:1,class:"loading-spinner mr-2"},Rt={key:1,class:"space-y-3"},jt={class:"flex items-center gap-2"},Dt=["value"],Et={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Wt={class:"flex items-start gap-3"},_t={class:"flex-1"},Gt={class:"space-y-3"},Nt={key:1},Ft={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},qt={class:"flex items-start gap-4"},Bt={class:"flex-1"},Ht={class:"space-y-4"},Jt={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Yt={class:"flex items-start gap-3"},Qt={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"],ls={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},rs={class:"flex items-start gap-3"},os={class:"flex-1"},ns={class:"space-y-3"},is={key:2},us={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},ds={class:"flex items-start gap-4"},ps={class:"flex-1"},ms={class:"space-y-4"},gs={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},cs={class:"flex items-start gap-3"},xs={class:"flex-1"},ys=["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-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},As={class:"flex items-start gap-3"},$s={class:"flex-1"},Cs={class:"space-y-3"},Ts={class:"flex gap-3 pt-4"},Is=["disabled"],Us={key:0,class:"loading-spinner mr-2"},zs={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(Z,{emit:te}){const g=Z,Q=te,C=nt(),R=A(!1),w=A(!1),x=A(""),z=A(""),V=A(!1),b=A(""),O=Ie(()=>x.value&&z.value.trim());B(z,_=>{if(!_||typeof _!="string")return;const p=_.trim();if(!p)return;if(p.startsWith("http://")||p.startsWith("https://"))if(p.startsWith("http://localhost:45462")||p.startsWith("http://localhost:1455"))try{const Y=new URL(p).searchParams.get("code");Y?(z.value=Y,I("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):I("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(se){console.error("Failed to parse URL:",se),I("链接格式错误,请检查是否为完整的 URL","error")}else if(g.platform==="gemini"||g.platform==="openai")try{const Y=new URL(p).searchParams.get("code");Y&&(z.value=Y,I("成功提取授权码!","success"))}catch{}else I("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const P=async()=>{var _;R.value=!0;try{const p=(_=g.proxy)!=null&&_.enabled?{proxy:{type:g.proxy.type,host:g.proxy.host,port:parseInt(g.proxy.port),username:g.proxy.username||null,password:g.proxy.password||null}}:{};if(g.platform==="claude"){const j=await C.generateClaudeAuthUrl(p);x.value=j.authUrl,b.value=j.sessionId}else if(g.platform==="gemini"){const j=await C.generateGeminiAuthUrl(p);x.value=j.authUrl,b.value=j.sessionId}else if(g.platform==="openai"){const j=await C.generateOpenAIAuthUrl(p);x.value=j.authUrl,b.value=j.sessionId}}catch(p){I(p.message||"生成授权链接失败","error")}finally{R.value=!1}},M=()=>{x.value="",z.value="",P()},E=async()=>{try{await navigator.clipboard.writeText(x.value),V.value=!0,I("链接已复制","success"),setTimeout(()=>{V.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),V.value=!0,I("链接已复制","success"),setTimeout(()=>{V.value=!1},2e3)}},J=async()=>{var _;if(O.value){w.value=!0;try{let p={};g.platform==="claude"?p={sessionId:b.value,callbackUrl:z.value.trim()}:g.platform==="gemini"?p={code:z.value.trim(),sessionId:b.value}:g.platform==="openai"&&(p={code:z.value.trim(),sessionId:b.value}),(_=g.proxy)!=null&&_.enabled&&(p.proxy={type:g.proxy.type,host:g.proxy.host,port:parseInt(g.proxy.port),username:g.proxy.username||null,password:g.proxy.password||null});let j;g.platform==="claude"?j=await C.exchangeClaudeCode(p):g.platform==="gemini"?j=await C.exchangeGeminiCode(p):g.platform==="openai"&&(j=await C.exchangeOpenAICode(p)),Q("success",j)}catch(p){I(p.message||"授权失败,请检查授权码是否正确","error")}finally{w.value=!1}}};return(_,p)=>(i(),u("div",Ct,[Z.platform==="claude"?(i(),u("div",Tt,[e("div",It,[e("div",Ut,[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",zt,[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",St,[e("div",Vt,[e("div",Kt,[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",Mt,[p[5]||(p[5]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),x.value?(i(),u("div",Rt,[e("div",jt,[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,Dt),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:E},[e("i",{class:K(V.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:M},p[4]||(p[4]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$("重新生成 ",-1)]))])):(i(),u("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:R.value,onClick:P},[R.value?(i(),u("div",Lt)):(i(),u("i",Pt)),$(" "+f(R.value?"生成中...":"生成授权链接"),1)],8,Ot))])])]),p[12]||(p[12]=Ee('
2

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

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

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

',1)),e("div",Et,[e("div",Wt,[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",_t,[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",Gt,[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)),c(e("textarea",{"onUpdate:modelValue":p[0]||(p[0]=j=>z.value=j),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[T,z.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))])])])])])])])])])):Z.platform==="gemini"?(i(),u("div",Nt,[e("div",Ft,[e("div",qt,[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",Bt,[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",Ht,[e("div",Jt,[e("div",Yt,[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",Qt,[p[17]||(p[17]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 点击下方按钮生成授权链接 ",-1)),x.value?(i(),u("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:E},[e("i",{class:K(V.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-green-600 hover:text-green-700",onClick:M},p[16]||(p[16]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$("重新生成 ",-1)]))])):(i(),u("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:R.value,onClick:P},[R.value?(i(),u("div",es)):(i(),u("i",Zt)),$(" "+f(R.value?"生成中...":"生成授权链接"),1)],8,Xt))])])]),p[24]||(p[24]=Ee('
2

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

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

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

',1)),e("div",ls,[e("div",rs,[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",os,[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",ns,[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)),c(e("textarea",{"onUpdate:modelValue":p[1]||(p[1]=j=>z.value=j),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[T,z.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))])])])])])])])])])):Z.platform==="openai"?(i(),u("div",is,[e("div",us,[e("div",ds,[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",ps,[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",ms,[e("div",gs,[e("div",cs,[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",xs,[p[29]||(p[29]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 点击下方按钮生成授权链接 ",-1)),x.value?(i(),u("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:E},[e("i",{class:K(V.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-orange-600 hover:text-orange-700",onClick:M},p[28]||(p[28]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$("重新生成 ",-1)]))])):(i(),u("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:R.value,onClick:P},[R.value?(i(),u("div",bs)):(i(),u("i",fs)),$(" "+f(R.value?"生成中...":"生成授权链接"),1)],8,ys))])])]),p[36]||(p[36]=Ee('
2

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

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

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

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

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

',1)),e("div",hs,[e("div",As,[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",$s,[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",Cs,[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)),c(e("textarea",{"onUpdate:modelValue":p[2]||(p[2]=j=>z.value=j),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),[[T,z.value]])]),p[32]||(p[32]=Ee('

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

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

• 仅 Code 示例:ac_4hm8iqmx9A2fzMy_cwye7U3W7...

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