import{a as Kt}from"./element-plus-CqiD73Lu.js";import{r as C,aP as St,o as Z,V as zt,x as d,y as n,z as e,L as v,K as x,al as ge,aT as ot,O as I,aq as $,aa as Mt,P as c,aV as Pt,aY as kt,C as R,c as Se,q as ct,I as Ce,an as ee,Q as fe,ac as we,a5 as ht,R as ke,B as Ke,u as xe,J as lt,Y as xt}from"./vue-vendor-Bsazo-x0.js";import{c as K,s as S,_ as $t}from"./index-C8PxKE-x.js";import{C as Tt}from"./ConfirmModal-CQRXlQir.js";import{C as vt}from"./CustomDropdown-OEskYgi9.js";import"./vendor-Dr8jvgFu.js";const ft=C(!1),Ct=C({title:"",message:"",confirmText:"继续",cancelText:"取消"}),We=C(null);function Vt(){return{showConfirmModal:ft,confirmOptions:Ct,showConfirm:(se,U,j="继续",F="取消")=>new Promise(p=>{Ct.value={title:se,message:U,confirmText:j,cancelText:F},We.value=p,ft.value=!0}),handleConfirm:()=>{ft.value=!1,We.value&&(We.value(!0),We.value=null)},handleCancel:()=>{ft.value=!1,We.value&&(We.value(!1),We.value=null)}}}const Rt=St("accounts",()=>{const ie=C([]),me=C([]),f=C([]),se=C([]),U=C([]),j=C([]),F=C([]),p=C(!1),b=C(null),O=C(""),z=C("asc"),G=async()=>{p.value=!0,b.value=null;try{const m=await K.get("/admin/claude-accounts");if(m.success)ie.value=m.data||[];else throw new Error(m.message||"获取Claude账户失败")}catch(m){throw b.value=m.message,m}finally{p.value=!1}},D=async()=>{p.value=!0,b.value=null;try{const m=await K.get("/admin/claude-console-accounts");if(m.success)me.value=m.data||[];else throw new Error(m.message||"获取Claude Console账户失败")}catch(m){throw b.value=m.message,m}finally{p.value=!1}},_=async()=>{p.value=!0,b.value=null;try{const m=await K.get("/admin/bedrock-accounts");if(m.success)f.value=m.data||[];else throw new Error(m.message||"获取Bedrock账户失败")}catch(m){throw b.value=m.message,m}finally{p.value=!1}},Q=async()=>{p.value=!0,b.value=null;try{const m=await K.get("/admin/gemini-accounts");if(m.success)se.value=m.data||[];else throw new Error(m.message||"获取Gemini账户失败")}catch(m){throw b.value=m.message,m}finally{p.value=!1}},Y=async()=>{p.value=!0,b.value=null;try{const m=await K.get("/admin/openai-accounts");if(m.success)U.value=m.data||[];else throw new Error(m.message||"获取OpenAI账户失败")}catch(m){throw b.value=m.message,m}finally{p.value=!1}},P=async()=>{p.value=!0,b.value=null;try{const m=await K.get("/admin/azure-openai-accounts");if(m.success)j.value=m.data||[];else throw new Error(m.message||"获取Azure OpenAI账户失败")}catch(m){throw b.value=m.message,m}finally{p.value=!1}},i=async()=>{p.value=!0,b.value=null;try{const m=await K.get("/admin/openai-responses-accounts");if(m.success)F.value=m.data||[];else throw new Error(m.message||"获取OpenAI-Responses账户失败")}catch(m){throw b.value=m.message,m}finally{p.value=!1}};return{claudeAccounts:ie,claudeConsoleAccounts:me,bedrockAccounts:f,geminiAccounts:se,openaiAccounts:U,azureOpenaiAccounts:j,openaiResponsesAccounts:F,loading:p,error:b,sortBy:O,sortOrder:z,fetchClaudeAccounts:G,fetchClaudeConsoleAccounts:D,fetchBedrockAccounts:_,fetchGeminiAccounts:Q,fetchOpenAIAccounts:Y,fetchAzureOpenAIAccounts:P,fetchOpenAIResponsesAccounts:i,fetchAllAccounts:async()=>{p.value=!0,b.value=null;try{await Promise.all([G(),D(),_(),Q(),Y(),P(),i()])}catch(m){throw b.value=m.message,m}finally{p.value=!1}},createClaudeAccount:async m=>{p.value=!0,b.value=null;try{const g=await K.post("/admin/claude-accounts",m);if(g.success)return await G(),g.data;throw new Error(g.message||"创建Claude账户失败")}catch(g){throw b.value=g.message,g}finally{p.value=!1}},createClaudeConsoleAccount:async m=>{p.value=!0,b.value=null;try{const g=await K.post("/admin/claude-console-accounts",m);if(g.success)return await D(),g.data;throw new Error(g.message||"创建Claude Console账户失败")}catch(g){throw b.value=g.message,g}finally{p.value=!1}},createBedrockAccount:async m=>{p.value=!0,b.value=null;try{const g=await K.post("/admin/bedrock-accounts",m);if(g.success)return await _(),g.data;throw new Error(g.message||"创建Bedrock账户失败")}catch(g){throw b.value=g.message,g}finally{p.value=!1}},createGeminiAccount:async m=>{p.value=!0,b.value=null;try{const g=await K.post("/admin/gemini-accounts",m);if(g.success)return await Q(),g.data;throw new Error(g.message||"创建Gemini账户失败")}catch(g){throw b.value=g.message,g}finally{p.value=!1}},createOpenAIAccount:async m=>{p.value=!0,b.value=null;try{const g=await K.post("/admin/openai-accounts",m);if(g.success)return await Y(),g.data;throw new Error(g.message||"创建OpenAI账户失败")}catch(g){throw b.value=g.message,g}finally{p.value=!1}},createAzureOpenAIAccount:async m=>{p.value=!0,b.value=null;try{const g=await K.post("/admin/azure-openai-accounts",m);if(g.success)return await P(),g.data;throw new Error(g.message||"创建Azure OpenAI账户失败")}catch(g){throw b.value=g.message,g}finally{p.value=!1}},createOpenAIResponsesAccount:async m=>{p.value=!0,b.value=null;try{const g=await K.post("/admin/openai-responses-accounts",m);if(g.success)return await i(),g.data;throw new Error(g.message||"创建OpenAI-Responses账户失败")}catch(g){throw b.value=g.message,g}finally{p.value=!1}},updateClaudeAccount:async(m,g)=>{p.value=!0,b.value=null;try{const A=await K.put(`/admin/claude-accounts/${m}`,g);if(A.success)return await G(),A;throw new Error(A.message||"更新Claude账户失败")}catch(A){throw b.value=A.message,A}finally{p.value=!1}},updateClaudeConsoleAccount:async(m,g)=>{p.value=!0,b.value=null;try{const A=await K.put(`/admin/claude-console-accounts/${m}`,g);if(A.success)return await D(),A;throw new Error(A.message||"更新Claude Console账户失败")}catch(A){throw b.value=A.message,A}finally{p.value=!1}},updateBedrockAccount:async(m,g)=>{p.value=!0,b.value=null;try{const A=await K.put(`/admin/bedrock-accounts/${m}`,g);if(A.success)return await _(),A;throw new Error(A.message||"更新Bedrock账户失败")}catch(A){throw b.value=A.message,A}finally{p.value=!1}},updateGeminiAccount:async(m,g)=>{p.value=!0,b.value=null;try{const A=await K.put(`/admin/gemini-accounts/${m}`,g);if(A.success)return await Q(),A;throw new Error(A.message||"更新Gemini账户失败")}catch(A){throw b.value=A.message,A}finally{p.value=!1}},updateOpenAIAccount:async(m,g)=>{p.value=!0,b.value=null;try{const A=await K.put(`/admin/openai-accounts/${m}`,g);if(A.success)return await Y(),A;throw new Error(A.message||"更新OpenAI账户失败")}catch(A){throw b.value=A.message,A}finally{p.value=!1}},updateAzureOpenAIAccount:async(m,g)=>{p.value=!0,b.value=null;try{const A=await K.put(`/admin/azure-openai-accounts/${m}`,g);if(A.success)return await P(),A;throw new Error(A.message||"更新Azure OpenAI账户失败")}catch(A){throw b.value=A.message,A}finally{p.value=!1}},updateOpenAIResponsesAccount:async(m,g)=>{p.value=!0,b.value=null;try{const A=await K.put(`/admin/openai-responses-accounts/${m}`,g);if(A.success)return await i(),A;throw new Error(A.message||"更新OpenAI-Responses账户失败")}catch(A){throw b.value=A.message,A}finally{p.value=!1}},toggleAccount:async(m,g)=>{p.value=!0,b.value=null;try{let A;m==="claude"?A=`/admin/claude-accounts/${g}/toggle`:m==="claude-console"?A=`/admin/claude-console-accounts/${g}/toggle`:m==="bedrock"?A=`/admin/bedrock-accounts/${g}/toggle`:m==="gemini"?A=`/admin/gemini-accounts/${g}/toggle`:m==="openai"?A=`/admin/openai-accounts/${g}/toggle`:m==="azure_openai"?A=`/admin/azure-openai-accounts/${g}/toggle`:m==="openai-responses"?A=`/admin/openai-responses-accounts/${g}/toggle`:A=`/admin/openai-accounts/${g}/toggle`;const be=await K.put(A);if(be.success)return m==="claude"?await G():m==="claude-console"?await D():m==="bedrock"?await _():m==="gemini"?await Q():m==="openai"?await Y():m==="azure_openai"?await P():m==="openai-responses"?await i():await Y(),be;throw new Error(be.message||"切换状态失败")}catch(A){throw b.value=A.message,A}finally{p.value=!1}},deleteAccount:async(m,g)=>{p.value=!0,b.value=null;try{let A;m==="claude"?A=`/admin/claude-accounts/${g}`:m==="claude-console"?A=`/admin/claude-console-accounts/${g}`:m==="bedrock"?A=`/admin/bedrock-accounts/${g}`:m==="gemini"?A=`/admin/gemini-accounts/${g}`:m==="openai"?A=`/admin/openai-accounts/${g}`:m==="azure_openai"?A=`/admin/azure-openai-accounts/${g}`:m==="openai-responses"?A=`/admin/openai-responses-accounts/${g}`:A=`/admin/openai-accounts/${g}`;const be=await K.delete(A);if(be.success)return m==="claude"?await G():m==="claude-console"?await D():m==="bedrock"?await _():m==="gemini"?await Q():m==="openai"?await Y():m==="azure_openai"?await P():m==="openai-responses"?await i():await Y(),be;throw new Error(be.message||"删除失败")}catch(A){throw b.value=A.message,A}finally{p.value=!1}},refreshClaudeToken:async m=>{p.value=!0,b.value=null;try{const g=await K.post(`/admin/claude-accounts/${m}/refresh`);if(g.success)return await G(),g;throw new Error(g.message||"Token刷新失败")}catch(g){throw b.value=g.message,g}finally{p.value=!1}},generateClaudeAuthUrl:async m=>{try{const g=await K.post("/admin/claude-accounts/generate-auth-url",m);if(g.success)return g.data;throw new Error(g.message||"生成授权URL失败")}catch(g){throw b.value=g.message,g}},exchangeClaudeCode:async m=>{try{const g=await K.post("/admin/claude-accounts/exchange-code",m);if(g.success)return g.data;throw new Error(g.message||"交换授权码失败")}catch(g){throw b.value=g.message,g}},generateClaudeSetupTokenUrl:async m=>{try{const g=await K.post("/admin/claude-accounts/generate-setup-token-url",m);if(g.success)return g.data;throw new Error(g.message||"生成Setup Token URL失败")}catch(g){throw b.value=g.message,g}},exchangeClaudeSetupTokenCode:async m=>{try{const g=await K.post("/admin/claude-accounts/exchange-setup-token-code",m);if(g.success)return g.data;throw new Error(g.message||"交换Setup Token授权码失败")}catch(g){throw b.value=g.message,g}},generateGeminiAuthUrl:async m=>{try{const g=await K.post("/admin/gemini-accounts/generate-auth-url",m);if(g.success)return g.data;throw new Error(g.message||"生成授权URL失败")}catch(g){throw b.value=g.message,g}},exchangeGeminiCode:async m=>{try{const g=await K.post("/admin/gemini-accounts/exchange-code",m);if(g.success)return g.data;throw new Error(g.message||"交换授权码失败")}catch(g){throw b.value=g.message,g}},generateOpenAIAuthUrl:async m=>{try{const g=await K.post("/admin/openai-accounts/generate-auth-url",m);if(g.success)return g.data;throw new Error(g.message||"生成授权URL失败")}catch(g){throw b.value=g.message,g}},exchangeOpenAICode:async m=>{try{const g=await K.post("/admin/openai-accounts/exchange-code",m);if(g.success)return g.data;throw new Error(g.message||"交换授权码失败")}catch(g){throw b.value=g.message,g}},sortAccounts:m=>{O.value===m?z.value=z.value==="asc"?"desc":"asc":(O.value=m,z.value="asc")},reset:()=>{ie.value=[],me.value=[],f.value=[],se.value=[],U.value=[],j.value=[],F.value=[],p.value=!1,b.value=null,O.value="",z.value="asc"}}}),Lt={class:"space-y-4"},Ot={class:"flex items-center justify-between"},jt={class:"flex cursor-pointer items-center"},Dt={key:0,class:"space-y-4 rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-600 dark:bg-gray-800"},_t={class:"relative"},Et={key:0,class:"mt-1 text-xs text-red-500"},Wt={key:1,class:"mt-1 text-xs text-green-500"},Nt={class:"grid grid-cols-2 gap-4"},qt={class:"space-y-4"},Gt={class:"flex items-center"},Ft={key:0,class:"grid grid-cols-2 gap-4"},Qt={class:"relative"},Bt=["type"],wt={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(ie,{emit:me}){const f=ie,se=me,U=C({...f.modelValue}),j=C(!!(U.value.username||U.value.password)),F=C(!1),p=C(""),b=C(""),O=C(!1);Z(()=>f.modelValue,P=>{JSON.stringify(P)!==JSON.stringify(U.value)&&(U.value={...P},j.value=!!(P.username||P.password))},{deep:!0}),Z(()=>U.value.enabled,()=>{G()}),Z(()=>U.value.type,()=>{G()}),Z(()=>U.value.host,()=>{G()}),Z(()=>U.value.port,()=>{G()}),Z(()=>U.value.username,()=>{G()}),Z(()=>U.value.password,()=>{G()}),Z(j,P=>{P||(U.value.username="",U.value.password="",G())});let z=null;function G(){z&&clearTimeout(z),z=setTimeout(()=>{const P={...U.value};j.value||(P.username="",P.password=""),se("update:modelValue",P)},100)}function D(){if(b.value="",O.value=!1,!!p.value)try{const P=p.value.split("#")[0].trim();if(!P)return;const i=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,y=P.match(i);if(!y){const ye=/^([^:]+):(\d+)$/,ce=P.match(ye);if(ce){U.value.type="socks5",U.value.host=ce[1],U.value.port=ce[2],U.value.username="",U.value.password="",j.value=!1,O.value=!0,G(),setTimeout(()=>{O.value=!1},3e3);return}b.value="无效的代理URL格式,请检查输入";return}const[,L,te,E,k,M]=y;U.value.type=L.toLowerCase(),U.value.host=k,U.value.port=M,te&&E?(U.value.username=decodeURIComponent(te),U.value.password=decodeURIComponent(E),j.value=!0):(U.value.username="",U.value.password="",j.value=!1),O.value=!0,G(),setTimeout(()=>{O.value=!1},3e3)}catch{b.value="解析失败,请检查URL格式"}}function _(){p.value="",b.value="",O.value=!1}function Q(){setTimeout(()=>{D()},0)}function Y(){const P=p.value.trim();P.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(P)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(P))&&D():/^[^:]+:\d{2,5}$/.test(P)&&D()}return zt(()=>{z&&clearTimeout(z)}),(P,i)=>(n(),d("div",Lt,[e("div",Ot,[i[10]||(i[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",jt,[x(e("input",{"onUpdate:modelValue":i[0]||(i[0]=y=>U.value.enabled=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ge,U.value.enabled]]),i[9]||(i[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),U.value.enabled?(n(),d("div",Dt,[i[22]||(i[22]=ot('
配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。
请确保代理服务器稳定可用,否则会影响账户的正常使用。
',1)),e("div",null,[i[14]||(i[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[I(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",_t,[x(e("input",{"onUpdate:modelValue":i[1]||(i[1]=y=>p.value=y),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: socks5://username:password@host:port 或 http://host:port",type:"text",onInput:Y,onKeyup:Mt(D,["enter"]),onPaste:Q},null,544),[[$,p.value]]),p.value?(n(),d("button",{key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:_},i[11]||(i[11]=[e("i",{class:"fas fa-times"},null,-1)]))):v("",!0)]),b.value?(n(),d("p",Et,[i[12]||(i[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),I(" "+c(b.value),1)])):O.value?(n(),d("p",Wt,i[13]||(i[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),I(" 代理配置已自动填充 ",-1)]))):v("",!0)]),i[23]||(i[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[i[16]||(i[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),x(e("select",{"onUpdate:modelValue":i[2]||(i[2]=y=>U.value.type=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},i[15]||(i[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[Pt,U.value.type]])]),e("div",Nt,[e("div",null,[i[17]||(i[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),x(e("input",{"onUpdate:modelValue":i[3]||(i[3]=y=>U.value.host=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 192.168.1.100",type:"text"},null,512),[[$,U.value.host]])]),e("div",null,[i[18]||(i[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),x(e("input",{"onUpdate:modelValue":i[4]||(i[4]=y=>U.value.port=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 1080",type:"number"},null,512),[[$,U.value.port]])])]),e("div",qt,[e("div",Gt,[x(e("input",{id:"proxyAuth","onUpdate:modelValue":i[5]||(i[5]=y=>j.value=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ge,j.value]]),i[19]||(i[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),j.value?(n(),d("div",Ft,[e("div",null,[i[20]||(i[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),x(e("input",{"onUpdate:modelValue":i[6]||(i[6]=y=>U.value.username=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理用户名",type:"text"},null,512),[[$,U.value.username]])]),e("div",null,[i[21]||(i[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",Qt,[x(e("input",{"onUpdate:modelValue":i[7]||(i[7]=y=>U.value.password=y),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理密码",type:F.value?"text":"password"},null,8,Bt),[[kt,U.value.password]]),e("button",{class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:i[8]||(i[8]=y=>F.value=!F.value)},[e("i",{class:R(F.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):v("",!0)]),i[24]||(i[24]=e("div",{class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-info-circle mr-1"}),e("strong",null,"提示:"),I("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):v("",!0)]))}},Ht={class:"space-y-6"},Jt={key:0},Yt={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},Zt={class:"flex items-start gap-4"},Xt={class:"flex-1"},es={class:"space-y-4"},ts={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},ss={class:"flex items-start gap-3"},as={class:"flex-1"},rs=["disabled"],ls={key:0,class:"fas fa-link mr-2"},os={key:1,class:"loading-spinner mr-2"},ns={key:1,class:"space-y-3"},is={class:"flex items-center gap-2"},ds=["value"],us={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},ps={class:"flex items-start gap-3"},gs={class:"flex-1"},ms={class:"space-y-3"},ys={key:1},xs={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},fs={class:"flex items-start gap-4"},cs={class:"flex-1"},bs={class:"space-y-4"},vs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},ks={class:"flex items-start gap-3"},ws={class:"flex-1"},hs=["disabled"],$s={key:0,class:"fas fa-link mr-2"},As={key:1,class:"loading-spinner mr-2"},Cs={key:1,class:"space-y-3"},Us={class:"flex items-center gap-2"},Is=["value"],Ts={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Vs={class:"flex items-start gap-3"},Rs={class:"flex-1"},Ks={class:"space-y-3"},Ss={key:2},zs={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},Ms={class:"flex items-start gap-4"},Ps={class:"flex-1"},Ls={class:"space-y-4"},Os={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},js={class:"flex items-start gap-3"},Ds={class:"flex-1"},_s=["disabled"],Es={key:0,class:"fas fa-link mr-2"},Ws={key:1,class:"loading-spinner mr-2"},Ns={key:1,class:"space-y-3"},qs={class:"flex items-center gap-2"},Gs=["value"],Fs={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Qs={class:"flex items-start gap-3"},Bs={class:"flex-1"},Hs={class:"space-y-3"},Js={class:"flex gap-3 pt-4"},Ys=["disabled"],Zs={key:0,class:"loading-spinner mr-2"},Xs={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(ie,{emit:me}){const f=ie,se=me,U=Rt(),j=C(!1),F=C(!1),p=C(""),b=C(""),O=C(!1),z=C(""),G=Se(()=>p.value&&b.value.trim());Z(b,P=>{if(!P||typeof P!="string")return;const i=P.trim();if(!i)return;if(i.startsWith("http://")||i.startsWith("https://"))if(i.startsWith("http://localhost:45462")||i.startsWith("http://localhost:1455"))try{const te=new URL(i).searchParams.get("code");te?(b.value=te,S("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):S("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(L){console.error("Failed to parse URL:",L),S("链接格式错误,请检查是否为完整的 URL","error")}else if(f.platform==="gemini"||f.platform==="openai")try{const te=new URL(i).searchParams.get("code");te&&(b.value=te,S("成功提取授权码!","success"))}catch{}else S("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const D=async()=>{var P;j.value=!0;try{const i=(P=f.proxy)!=null&&P.enabled?{proxy:{type:f.proxy.type,host:f.proxy.host,port:parseInt(f.proxy.port),username:f.proxy.username||null,password:f.proxy.password||null}}:{};if(f.platform==="claude"){const y=await U.generateClaudeAuthUrl(i);p.value=y.authUrl,z.value=y.sessionId}else if(f.platform==="gemini"){const y=await U.generateGeminiAuthUrl(i);p.value=y.authUrl,z.value=y.sessionId}else if(f.platform==="openai"){const y=await U.generateOpenAIAuthUrl(i);p.value=y.authUrl,z.value=y.sessionId}}catch(i){S(i.message||"生成授权链接失败","error")}finally{j.value=!1}},_=()=>{p.value="",b.value="",D()},Q=async()=>{try{await navigator.clipboard.writeText(p.value),O.value=!0,S("链接已复制","success"),setTimeout(()=>{O.value=!1},2e3)}catch{const i=document.createElement("input");i.value=p.value,document.body.appendChild(i),i.select(),document.execCommand("copy"),document.body.removeChild(i),O.value=!0,S("链接已复制","success"),setTimeout(()=>{O.value=!1},2e3)}},Y=async()=>{var P;if(G.value){F.value=!0;try{let i={};f.platform==="claude"?i={sessionId:z.value,callbackUrl:b.value.trim()}:f.platform==="gemini"?i={code:b.value.trim(),sessionId:z.value}:f.platform==="openai"&&(i={code:b.value.trim(),sessionId:z.value}),(P=f.proxy)!=null&&P.enabled&&(i.proxy={type:f.proxy.type,host:f.proxy.host,port:parseInt(f.proxy.port),username:f.proxy.username||null,password:f.proxy.password||null});let y;f.platform==="claude"?y=await U.exchangeClaudeCode(i):f.platform==="gemini"?y=await U.exchangeGeminiCode(i):f.platform==="openai"&&(y=await U.exchangeOpenAICode(i)),se("success",y)}catch(i){S(i.message||"授权失败,请检查授权码是否正确","error")}finally{F.value=!1}}};return(P,i)=>(n(),d("div",Ht,[ie.platform==="claude"?(n(),d("div",Jt,[e("div",Yt,[e("div",Zt,[i[15]||(i[15]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-link text-white"})],-1)),e("div",Xt,[i[13]||(i[13]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"},"Claude 账户授权",-1)),i[14]||(i[14]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤完成 Claude 账户的授权: ",-1)),e("div",es,[e("div",ts,[e("div",ss,[i[6]||(i[6]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",as,[i[5]||(i[5]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),p.value?(n(),d("div",ns,[e("div",is,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:p.value},null,8,ds),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:Q},[e("i",{class:R(O.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:_},i[4]||(i[4]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),I("重新生成 ",-1)]))])):(n(),d("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:j.value,onClick:D},[j.value?(n(),d("div",os)):(n(),d("i",ls)),I(" "+c(j.value?"生成中...":"生成授权链接"),1)],8,rs))])])]),i[12]||(i[12]=ot(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Claude 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",us,[e("div",ps,[i[11]||(i[11]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",gs,[i[9]||(i[9]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),i[10]||(i[10]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"},[I(" 授权完成后,页面会显示一个 "),e("strong",null,"Authorization Code"),I(",请将其复制并粘贴到下方输入框: ")],-1)),e("div",ms,[e("div",null,[i[7]||(i[7]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),I("Authorization Code ")],-1)),x(e("textarea",{"onUpdate:modelValue":i[0]||(i[0]=y=>b.value=y),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[$,b.value]])]),i[8]||(i[8]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),I(" 请粘贴从Claude页面复制的Authorization Code ")],-1))])])])])])])])])])):ie.platform==="gemini"?(n(),d("div",ys,[e("div",xs,[e("div",fs,[i[27]||(i[27]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-green-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",cs,[i[25]||(i[25]=e("h4",{class:"mb-3 font-semibold text-green-900 dark:text-green-200"},"Gemini 账户授权",-1)),i[26]||(i[26]=e("p",{class:"mb-4 text-sm text-green-800 dark:text-green-300"}," 请按照以下步骤完成 Gemini 账户的授权: ",-1)),e("div",bs,[e("div",vs,[e("div",ks,[i[18]||(i[18]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",ws,[i[17]||(i[17]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 点击下方按钮生成授权链接 ",-1)),p.value?(n(),d("div",Cs,[e("div",Us,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:p.value},null,8,Is),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:Q},[e("i",{class:R(O.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-green-600 hover:text-green-700",onClick:_},i[16]||(i[16]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),I("重新生成 ",-1)]))])):(n(),d("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:j.value,onClick:D},[j.value?(n(),d("div",As)):(n(),d("i",$s)),I(" "+c(j.value?"生成中...":"生成授权链接"),1)],8,hs))])])]),i[24]||(i[24]=ot(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Gemini 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",Ts,[e("div",Vs,[i[23]||(i[23]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Rs,[i[21]||(i[21]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 输入 Authorization Code ",-1)),i[22]||(i[22]=e("p",{class:"mb-3 text-sm text-green-700 dark:text-green-300"}," 授权完成后,页面会显示一个 Authorization Code,请将其复制并粘贴到下方输入框: ",-1)),e("div",Ks,[e("div",null,[i[19]||(i[19]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-green-500"}),I("Authorization Code ")],-1)),x(e("textarea",{"onUpdate:modelValue":i[1]||(i[1]=y=>b.value=y),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[$,b.value]])]),i[20]||(i[20]=e("div",{class:"mt-2 space-y-1"},[e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-check-circle mr-1 text-green-500"}),I(" 请粘贴从Gemini页面复制的Authorization Code ")])],-1))])])])])])])])])])):ie.platform==="openai"?(n(),d("div",Ss,[e("div",zs,[e("div",Ms,[i[39]||(i[39]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-orange-500"},[e("i",{class:"fas fa-brain text-white"})],-1)),e("div",Ps,[i[37]||(i[37]=e("h4",{class:"mb-3 font-semibold text-orange-900 dark:text-orange-200"},"OpenAI 账户授权",-1)),i[38]||(i[38]=e("p",{class:"mb-4 text-sm text-orange-800 dark:text-orange-300"}," 请按照以下步骤完成 OpenAI 账户的授权: ",-1)),e("div",Ls,[e("div",Os,[e("div",js,[i[30]||(i[30]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Ds,[i[29]||(i[29]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 点击下方按钮生成授权链接 ",-1)),p.value?(n(),d("div",Ns,[e("div",qs,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:p.value},null,8,Gs),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:Q},[e("i",{class:R(O.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-orange-600 hover:text-orange-700",onClick:_},i[28]||(i[28]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),I("重新生成 ",-1)]))])):(n(),d("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:j.value,onClick:D},[j.value?(n(),d("div",Ws)):(n(),d("i",Es)),I(" "+c(j.value?"生成中...":"生成授权链接"),1)],8,_s))])])]),i[36]||(i[36]=ot(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 OpenAI 账户并授权。
重要提示:授权后页面可能会加载较长时间,请耐心等待。
当浏览器地址栏变为 http://localhost:1455/... 开头时,表示授权已完成。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",Fs,[e("div",Qs,[i[35]||(i[35]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Bs,[i[33]||(i[33]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 输入授权链接或 Code ",-1)),i[34]||(i[34]=e("p",{class:"mb-3 text-sm text-orange-700 dark:text-orange-300"},[I(" 授权完成后,当页面地址变为 "),e("strong",{class:"font-mono"},"http://localhost:1455/..."),I(" 时: ")],-1)),e("div",Hs,[e("div",null,[i[31]||(i[31]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-link mr-2 text-orange-500"}),I("授权链接或 Code ")],-1)),x(e("textarea",{"onUpdate:modelValue":i[2]||(i[2]=y=>b.value=y),class:"form-input w-full resize-none font-mono text-sm",placeholder:`方式1:复制完整的链接(http://localhost:1455/auth/callback?code=...)
方式2:仅复制 code 参数的值
系统会自动识别并提取所需信息`,rows:"3"},null,512),[[$,b.value]])]),i[32]||(i[32]=ot('提示:您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别。
• 完整链接示例:http://localhost:1455/auth/callback?code=ac_4hm8...
• 仅 Code 示例:ac_4hm8iqmx9A2fzMy_cwye7U3W7...
',1))])])])])])])])])])):v("",!0),e("div",Js,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:i[3]||(i[3]=y=>P.$emit("back"))}," 上一步 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!G.value||F.value,type:"button",onClick:Y},[F.value?(n(),d("div",Zs)):v("",!0),I(" "+c(F.value?"验证中...":"完成授权"),1)],8,Ys)])]))}},ea={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},ta={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-4xl overflow-y-auto p-4 sm:p-6 md:p-8"},sa={class:"mb-4 flex items-center justify-between sm:mb-6"},aa={class:"mb-6"},ra={key:0,class:"mb-6 rounded-lg border border-blue-200 bg-blue-50 p-4"},la={class:"space-y-4"},oa={class:"flex gap-4"},na={class:"flex cursor-pointer items-center"},ia={class:"flex cursor-pointer items-center"},da={class:"flex cursor-pointer items-center"},ua={class:"flex gap-3"},pa=["disabled"],ga={key:0,class:"loading-spinner mr-2"},ma={class:"space-y-4"},ya={key:0,class:"py-8 text-center"},xa={key:1,class:"rounded-lg bg-gray-50 py-8 text-center"},fa={key:2,class:"grid grid-cols-1 gap-4 md:grid-cols-2"},ca={class:"mb-3 flex items-start justify-between"},ba={class:"flex-1"},va={class:"font-semibold text-gray-900"},ka={class:"mt-1 text-sm text-gray-500"},wa={class:"ml-4 flex items-center gap-2"},ha={class:"flex items-center justify-between text-sm text-gray-600"},$a={class:"flex items-center gap-4"},Aa={class:"flex items-center gap-2"},Ca=["onClick"],Ua=["disabled","onClick"],Ia={key:1,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Ta={class:"modal-content w-full max-w-lg p-4 sm:p-6"},Va={class:"space-y-4"},Ra={class:"rounded-lg bg-gray-100 px-3 py-2 text-sm text-gray-600"},Ka={class:"flex gap-3 pt-4"},Sa=["disabled"],za={key:0,class:"loading-spinner mr-2"},Ma={__name:"GroupManagementModal",emits:["close","refresh"],setup(ie,{emit:me}){const f=me,se=C(!0),U=C(!1),j=C([]),F=C(!1),p=C(!1),b=C({name:"",platform:"claude",description:""}),O=C(!1),z=C(!1),G=C(null),D=C({name:"",platform:"",description:""}),_=E=>E?new Date(E).toLocaleDateString("zh-CN"):"-",Q=async()=>{U.value=!0;try{const E=await K.get("/admin/account-groups");j.value=E.data||[]}catch{S("加载分组列表失败","error")}finally{U.value=!1}},Y=async()=>{var E,k;if(!b.value.name||!b.value.platform){S("请填写必填项","error");return}p.value=!0;try{await K.post("/admin/account-groups",{name:b.value.name,platform:b.value.platform,description:b.value.description}),S("分组创建成功","success"),P(),await Q(),f("refresh")}catch(M){S(((k=(E=M.response)==null?void 0:E.data)==null?void 0:k.error)||"创建分组失败","error")}finally{p.value=!1}},P=()=>{F.value=!1,b.value={name:"",platform:"claude",description:""}},i=E=>{G.value=E,D.value={name:E.name,platform:E.platform,description:E.description||""},O.value=!0},y=async()=>{var E,k;if(!D.value.name){S("请填写分组名称","error");return}z.value=!0;try{await K.put(`/admin/account-groups/${G.value.id}`,{name:D.value.name,description:D.value.description}),S("分组更新成功","success"),L(),await Q(),f("refresh")}catch(M){S(((k=(E=M.response)==null?void 0:E.data)==null?void 0:k.error)||"更新分组失败","error")}finally{z.value=!1}},L=()=>{O.value=!1,G.value=null,D.value={name:"",platform:"",description:""}},te=async E=>{var k,M;if(E.memberCount>0){S("分组内还有成员,无法删除","error");return}if(confirm(`确定要删除分组 "${E.name}" 吗?`))try{await K.delete(`/admin/account-groups/${E.id}`),S("分组删除成功","success"),await Q(),f("refresh")}catch(ye){S(((M=(k=ye.response)==null?void 0:k.data)==null?void 0:M.error)||"删除分组失败","error")}};return ct(()=>{Q()}),(E,k)=>(n(),Ce(ht,{to:"body"},[se.value?(n(),d("div",ea,[e("div",ta,[e("div",sa,[k[10]||(k[10]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-layer-group text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 sm:text-xl"},"账户分组管理")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:k[0]||(k[0]=M=>E.$emit("close"))},k[9]||(k[9]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",aa,[e("button",{class:"btn btn-primary px-4 py-2",onClick:k[1]||(k[1]=M=>F.value=!0)},k[11]||(k[11]=[e("i",{class:"fas fa-plus mr-2"},null,-1),I(" 创建新分组 ",-1)]))]),F.value?(n(),d("div",ra,[k[18]||(k[18]=e("h4",{class:"mb-4 text-lg font-semibold text-gray-900"},"创建新分组",-1)),e("div",la,[e("div",null,[k[12]||(k[12]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),x(e("input",{"onUpdate:modelValue":k[2]||(k[2]=M=>b.value.name=M),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[$,b.value.name]])]),e("div",null,[k[16]||(k[16]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型 *",-1)),e("div",oa,[e("label",na,[x(e("input",{"onUpdate:modelValue":k[3]||(k[3]=M=>b.value.platform=M),class:"mr-2",type:"radio",value:"claude"},null,512),[[ee,b.value.platform]]),k[13]||(k[13]=e("span",{class:"text-sm text-gray-700"},"Claude",-1))]),e("label",ia,[x(e("input",{"onUpdate:modelValue":k[4]||(k[4]=M=>b.value.platform=M),class:"mr-2",type:"radio",value:"gemini"},null,512),[[ee,b.value.platform]]),k[14]||(k[14]=e("span",{class:"text-sm text-gray-700"},"Gemini",-1))]),e("label",da,[x(e("input",{"onUpdate:modelValue":k[5]||(k[5]=M=>b.value.platform=M),class:"mr-2",type:"radio",value:"openai"},null,512),[[ee,b.value.platform]]),k[15]||(k[15]=e("span",{class:"text-sm text-gray-700"},"OpenAI",-1))])])]),e("div",null,[k[17]||(k[17]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":k[6]||(k[6]=M=>b.value.description=M),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[$,b.value.description]])]),e("div",ua,[e("button",{class:"btn btn-primary px-4 py-2",disabled:!b.value.name||!b.value.platform||p.value,onClick:Y},[p.value?(n(),d("div",ga)):v("",!0),I(" "+c(p.value?"创建中...":"创建"),1)],8,pa),e("button",{class:"btn btn-secondary px-4 py-2",onClick:P},"取消")])])])):v("",!0),e("div",ma,[U.value?(n(),d("div",ya,k[19]||(k[19]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500"},"加载中...",-1)]))):j.value.length===0?(n(),d("div",xa,k[20]||(k[20]=[e("i",{class:"fas fa-layer-group mb-4 text-4xl text-gray-300"},null,-1),e("p",{class:"text-gray-500"},"暂无分组",-1)]))):(n(),d("div",fa,[(n(!0),d(fe,null,we(j.value,M=>(n(),d("div",{key:M.id,class:"rounded-lg border bg-white p-4 transition-shadow hover:shadow-md"},[e("div",ca,[e("div",ba,[e("h4",va,c(M.name),1),e("p",ka,c(M.description||"暂无描述"),1)]),e("div",wa,[e("span",{class:R(["rounded-full px-2 py-1 text-xs font-medium",M.platform==="claude"?"bg-purple-100 text-purple-700":M.platform==="gemini"?"bg-blue-100 text-blue-700":"bg-gray-100 text-gray-700"])},c(M.platform==="claude"?"Claude":M.platform==="gemini"?"Gemini":"OpenAI"),3)])]),e("div",ha,[e("div",$a,[e("span",null,[k[21]||(k[21]=e("i",{class:"fas fa-users mr-1"},null,-1)),I(" "+c(M.memberCount||0)+" 个成员 ",1)]),e("span",null,[k[22]||(k[22]=e("i",{class:"fas fa-clock mr-1"},null,-1)),I(" "+c(_(M.createdAt)),1)])]),e("div",Aa,[e("button",{class:"text-blue-600 transition-colors hover:text-blue-800",title:"编辑",onClick:ye=>i(M)},k[23]||(k[23]=[e("i",{class:"fas fa-edit"},null,-1)]),8,Ca),e("button",{class:"text-red-600 transition-colors hover:text-red-800",disabled:M.memberCount>0,title:"删除",onClick:ye=>te(M)},k[24]||(k[24]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Ua)])])]))),128))]))])])])):v("",!0),O.value?(n(),d("div",Ia,[e("div",Ta,[e("div",{class:"mb-4 flex items-center justify-between"},[k[26]||(k[26]=e("h3",{class:"text-lg font-bold text-gray-900"},"编辑分组",-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",onClick:L},k[25]||(k[25]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",Va,[e("div",null,[k[27]||(k[27]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),x(e("input",{"onUpdate:modelValue":k[7]||(k[7]=M=>D.value.name=M),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[$,D.value.name]])]),e("div",null,[k[29]||(k[29]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型",-1)),e("div",Ra,[I(c(D.value.platform==="claude"?"Claude":D.value.platform==="gemini"?"Gemini":"OpenAI")+" ",1),k[28]||(k[28]=e("span",{class:"ml-2 text-xs text-gray-500"},"(不可修改)",-1))])]),e("div",null,[k[30]||(k[30]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":k[8]||(k[8]=M=>D.value.description=M),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[$,D.value.description]])]),e("div",Ka,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!D.value.name||z.value,onClick:y},[z.value?(n(),d("div",za)):v("",!0),I(" "+c(z.value?"更新中...":"更新"),1)],8,Sa),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:L},"取消")])])])])):v("",!0)]))}},Pa={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},La={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto p-4 sm:p-6 md:p-8"},Oa={class:"mb-4 flex items-center justify-between sm:mb-6"},ja={class:"flex items-center gap-2 sm:gap-3"},Da={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},_a={key:0,class:"mb-4 flex items-center justify-center sm:mb-8"},Ea={class:"flex items-center space-x-2 sm:space-x-4"},Wa={class:"flex items-center"},Na={class:"flex items-center"},qa={key:1},Ga={class:"space-y-6"},Fa={key:0},Qa={class:"space-y-3"},Ba={class:"grid grid-cols-3 gap-2"},Ha={class:"p-3"},Ja={class:"flex items-center justify-between"},Ya={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-indigo-500"},Za={class:"p-3"},Xa={class:"flex items-center justify-between"},er={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-emerald-500"},tr={class:"p-3"},sr={class:"flex items-center justify-between"},ar={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-blue-500"},rr={key:0,class:"animate-fadeIn rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},lr={class:"grid grid-cols-2 gap-2 sm:grid-cols-3"},or={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-indigo-500"},nr={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},ir={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-orange-500"},dr={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-cyan-500"},ur={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-emerald-500"},pr={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-teal-500"},gr={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},mr={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},yr={key:1},xr={class:"flex flex-wrap gap-4"},fr={key:0,class:"flex cursor-pointer items-center"},cr={class:"flex cursor-pointer items-center"},br={class:"flex cursor-pointer items-center"},vr={key:0,class:"mt-1 text-xs text-red-500"},kr={class:"flex gap-4"},wr={class:"flex cursor-pointer items-center"},hr={class:"flex cursor-pointer items-center"},$r={class:"flex cursor-pointer items-center"},Ar={key:2},Cr={class:"flex gap-2"},Ur={class:"flex-1"},Ir={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},Tr={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},Vr=["value"],Rr={class:"text-sm text-gray-700 dark:text-gray-200"},Kr={key:3},Sr={key:4,class:"space-y-4"},zr={key:0,class:"mt-1 text-xs text-red-500"},Mr={key:0,class:"mt-1 text-xs text-red-500"},Pr={key:0,class:"mt-1 text-xs text-red-500"},Lr={key:5,class:"space-y-4"},Or={key:0,class:"mt-1 text-xs text-red-500"},jr={key:0,class:"mt-1 text-xs text-red-500"},Dr={key:0,class:"mt-1 text-xs text-red-500"},_r={class:"flex flex-wrap gap-2"},Er=["value"],Wr={class:"text-sm text-gray-700 dark:text-gray-300"},Nr={key:6},qr={class:"mb-3"},Gr={class:"inline-flex cursor-pointer items-center"},Fr={key:0},Qr={key:7,class:"space-y-4"},Br={key:0,class:"mt-1 text-xs text-red-500"},Hr={key:0,class:"mt-1 text-xs text-red-500"},Jr={class:"grid grid-cols-2 gap-4"},Yr={class:"mb-3 space-y-2"},Zr=["onUpdate:modelValue"],Xr=["onUpdate:modelValue"],el=["onClick"],tl={class:"mt-3 flex flex-wrap gap-2"},sl={class:"mb-3"},al={class:"inline-flex cursor-pointer items-center"},rl={key:0},ll={key:8,class:"space-y-4"},ol={class:"relative"},nl=["type"],il={key:9},dl={class:"flex gap-4"},ul={class:"flex cursor-pointer items-center"},pl={class:"flex cursor-pointer items-center"},gl={key:10,class:"mt-4"},ml={class:"flex items-start"},yl={key:11,class:"mt-4"},xl={class:"flex items-start"},fl={class:"ml-3"},cl={key:0,class:"mt-1"},bl={class:"flex items-center justify-between"},vl={class:"text-xs text-green-600 dark:text-green-400"},kl=["disabled"],wl={key:0,class:"fas fa-trash-alt mr-1"},hl={key:1,class:"loading-spinner mr-1"},$l={key:1,class:"mt-1"},Al={key:12,class:"mt-4"},Cl={class:"flex items-start"},Ul={class:"ml-3 flex-1"},Il={key:0,class:"mt-3"},Tl={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Vl={class:"flex items-center gap-2"},Rl={class:"block w-full select-all break-all rounded bg-gray-100 px-3 py-2 font-mono text-xs text-gray-700 dark:bg-gray-900 dark:text-gray-300"},Kl={class:"text-blue-600 dark:text-blue-400"},Sl={class:"text-gray-500 dark:text-gray-500"},zl={class:"text-blue-600 dark:text-blue-400"},Ml={key:13,class:"space-y-4 rounded-lg border border-blue-200 bg-blue-50 p-4"},Pl={class:"mb-4 flex items-start gap-3"},Ll={key:0,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Ol={key:1,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},jl={key:2,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Dl={class:"mb-2 mt-2 rounded-lg border border-blue-300 bg-white/80 p-3 dark:border-blue-600 dark:bg-gray-800/80"},_l={key:0,class:"text-xs text-blue-800 dark:text-blue-300"},El={key:1,class:"text-xs text-blue-800 dark:text-blue-300"},Wl={key:2,class:"text-xs text-blue-800 dark:text-blue-300"},Nl={key:0},ql={key:1},Gl={key:0,class:"mt-1 text-xs text-red-500"},Fl={key:2},Ql={key:0,class:"mt-1 text-xs text-red-500"},Bl={key:3},Hl={class:"flex gap-3 pt-4"},Jl=["disabled"],Yl=["disabled"],Zl={key:0,class:"loading-spinner mr-2"},Xl={key:3,class:"space-y-6"},eo={key:0},to={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},so={class:"flex items-start gap-4"},ao={class:"flex-1"},ro={class:"space-y-4"},lo={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},oo={class:"flex items-start gap-3"},no={class:"flex-1"},io=["disabled"],uo={key:0,class:"fas fa-link mr-2"},po={key:1,class:"loading-spinner mr-2"},go={key:1,class:"space-y-3"},mo={class:"flex items-center gap-2"},yo=["value"],xo={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},fo={class:"flex items-start gap-3"},co={class:"flex-1"},bo={class:"space-y-3"},vo={class:"flex gap-3 pt-4"},ko=["disabled"],wo={key:0,class:"loading-spinner mr-2"},ho={key:4,class:"space-y-6"},$o={class:"flex gap-4"},Ao={class:"flex cursor-pointer items-center"},Co={class:"flex cursor-pointer items-center"},Uo={class:"flex cursor-pointer items-center"},Io={key:0},To={class:"flex gap-2"},Vo={class:"flex-1"},Ro={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},Ko={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},So=["value"],zo={class:"text-sm text-gray-700 dark:text-gray-200"},Mo={key:1},Po={key:2},Lo={class:"flex gap-4"},Oo={class:"flex cursor-pointer items-center"},jo={class:"flex cursor-pointer items-center"},Do={key:3,class:"mt-4"},_o={class:"flex items-start"},Eo={key:4,class:"mt-4"},Wo={class:"flex items-start"},No={class:"ml-3"},qo={key:0,class:"mt-1"},Go={class:"flex items-center justify-between"},Fo={class:"text-xs text-green-600 dark:text-green-400"},Qo=["disabled"],Bo={key:0,class:"fas fa-trash-alt mr-1"},Ho={key:1,class:"loading-spinner mr-1"},Jo={key:1,class:"mt-1"},Yo={key:5,class:"mt-4"},Zo={class:"flex items-start"},Xo={class:"ml-3 flex-1"},en={key:0,class:"mt-3"},tn={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},sn={class:"flex items-center gap-2"},an={class:"block w-full select-all break-all rounded bg-gray-100 px-3 py-2 font-mono text-xs text-gray-700 dark:bg-gray-900 dark:text-gray-300"},rn={class:"text-blue-600 dark:text-blue-400"},ln={class:"text-gray-500 dark:text-gray-500"},on={class:"text-blue-600 dark:text-blue-400"},nn={key:6,class:"space-y-4"},dn={class:"grid grid-cols-2 gap-4"},un={key:0,class:"rounded-lg bg-gray-50 p-4 dark:bg-gray-800"},pn={class:"mb-2 flex items-center justify-between"},gn={class:"text-sm text-gray-500 dark:text-gray-400"},mn={class:"relative h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},yn={class:"mt-2 flex items-center justify-between text-xs"},xn={class:"text-gray-500 dark:text-gray-400"},fn={class:"text-gray-500 dark:text-gray-400"},cn={class:"mb-3 space-y-2"},bn=["onUpdate:modelValue"],vn=["onUpdate:modelValue"],kn=["onClick"],wn={class:"mt-3 flex flex-wrap gap-2"},hn={class:"mb-3"},$n={class:"inline-flex cursor-pointer items-center"},An={key:0},Cn={key:7,class:"space-y-4"},Un={class:"relative"},In=["type"],Tn={class:"grid grid-cols-2 gap-4"},Vn={key:8,class:"space-y-4"},Rn={class:"mb-3"},Kn={class:"inline-flex cursor-pointer items-center"},Sn={key:0},zn={key:9,class:"space-y-4"},Mn={key:0,class:"mt-1 text-xs text-red-500"},Pn={key:0,class:"mt-1 text-xs text-red-500"},Ln={key:0,class:"mt-1 text-xs text-red-500"},On={class:"flex flex-wrap gap-2"},jn=["value"],Dn={class:"text-sm text-gray-700 dark:text-gray-300"},_n={key:10,class:"rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-700 dark:bg-amber-900/30"},En={class:"space-y-4"},Wn={class:"flex gap-3 pt-4"},Nn=["disabled"],qn={key:0,class:"loading-spinner mr-2"},Gn={__name:"AccountForm",props:{account:{type:Object,default:null}},emits:["close","success","platform-changed"],setup(ie,{emit:me}){var je,De,_e,Ee,He,mt,yt,at,l,a,T,r,N,W,re,X,ve,Ie,Te,de,Ve,H,J,ue,pe,rt,At;const f=ie,se=me,U=Rt(),{showConfirmModal:j,confirmOptions:F,showConfirm:p,handleConfirm:b,handleCancel:O}=Vt(),z=Se(()=>!!f.account),G=C(!0),D=C(1),_=C(!1),Q=C(!1),Y=C(!1),P=C(!1),i=C(""),y=C(""),L=C(!1),te=C(""),E=C(""),k=C(!1),M=C(""),ye=u=>["claude","claude-console","ccr","bedrock"].includes(u)?"claude":["openai","openai-responses","azure_openai"].includes(u)?"openai":u==="gemini"?"gemini":"",ce=()=>{var u;return(u=f.account)!=null&&u.proxy&&f.account.proxy.host&&f.account.proxy.port?{enabled:!0,type:f.account.proxy.type||"socks5",host:f.account.proxy.host,port:f.account.proxy.port,username:f.account.proxy.username||"",password:f.account.proxy.password||""}:{enabled:!1,type:"socks5",host:"",port:"",username:"",password:""}},s=C({platform:((je=f.account)==null?void 0:je.platform)||"claude",addType:(()=>{var t;const u=((t=f.account)==null?void 0:t.platform)||"claude";return u==="gemini"||u==="openai"?"oauth":u==="claude"?"setup-token":"manual"})(),name:((De=f.account)==null?void 0:De.name)||"",description:((_e=f.account)==null?void 0:_e.description)||"",accountType:((Ee=f.account)==null?void 0:Ee.accountType)||"shared",subscriptionType:"claude_max",autoStopOnWarning:((He=f.account)==null?void 0:He.autoStopOnWarning)||!1,useUnifiedUserAgent:((mt=f.account)==null?void 0:mt.useUnifiedUserAgent)||!1,useUnifiedClientId:((yt=f.account)==null?void 0:yt.useUnifiedClientId)||!1,unifiedClientId:((at=f.account)==null?void 0:at.unifiedClientId)||"",groupId:"",groupIds:[],projectId:((l=f.account)==null?void 0:l.projectId)||"",accessToken:"",refreshToken:"",proxy:ce(),apiUrl:((a=f.account)==null?void 0:a.apiUrl)||"",apiKey:((T=f.account)==null?void 0:T.apiKey)||"",priority:((r=f.account)==null?void 0:r.priority)||50,baseApi:((N=f.account)==null?void 0:N.baseApi)||"",rateLimitDuration:((W=f.account)==null?void 0:W.rateLimitDuration)||60,supportedModels:(()=>{var t;const u=(t=f.account)==null?void 0:t.supportedModels;return u?typeof u=="object"&&!Array.isArray(u)?Object.keys(u):Array.isArray(u)?u:[]:[]})(),userAgent:((re=f.account)==null?void 0:re.userAgent)||"",enableRateLimit:f.account?f.account.rateLimitDuration>0:!0,dailyQuota:((X=f.account)==null?void 0:X.dailyQuota)||0,dailyUsage:((ve=f.account)==null?void 0:ve.dailyUsage)||0,quotaResetTime:((Ie=f.account)==null?void 0:Ie.quotaResetTime)||"00:00",accessKeyId:((Te=f.account)==null?void 0:Te.accessKeyId)||"",secretAccessKey:((de=f.account)==null?void 0:de.secretAccessKey)||"",region:((Ve=f.account)==null?void 0:Ve.region)||"",sessionToken:((H=f.account)==null?void 0:H.sessionToken)||"",defaultModel:((J=f.account)==null?void 0:J.defaultModel)||"",smallFastModel:((ue=f.account)==null?void 0:ue.smallFastModel)||"",azureEndpoint:((pe=f.account)==null?void 0:pe.azureEndpoint)||"",apiVersion:((rt=f.account)==null?void 0:rt.apiVersion)||"",deploymentName:((At=f.account)==null?void 0:At.deploymentName)||""}),ae=C([]),Ue=()=>{var u;(u=f.account)!=null&&u.supportedModels&&(typeof f.account.supportedModels=="object"&&!Array.isArray(f.account.supportedModels)?ae.value=Object.entries(f.account.supportedModels).map(([t,o])=>({from:t,to:o})):Array.isArray(f.account.supportedModels)&&(ae.value=f.account.supportedModels.map(t=>({from:t,to:t}))))},h=C({name:"",refreshToken:"",accessToken:"",apiUrl:"",apiKey:"",accessKeyId:"",secretAccessKey:"",region:"",azureEndpoint:"",deploymentName:""}),Je=Se(()=>{var u;return((u=s.value.name)==null?void 0:u.trim())&&s.value.platform}),Ne=Se(()=>i.value&&y.value.trim()),qe=()=>{var u;return!z.value||!((u=f.account)!=null&&u.id)?0:typeof s.value.dailyUsage=="number"?s.value.dailyUsage:0},Pe=Se(()=>!s.value.dailyQuota||s.value.dailyQuota<=0?0:qe()/s.value.dailyQuota*100),Ye=async()=>{var u;if(!(!z.value||!((u=f.account)!=null&&u.id)))try{const t=await K.get(`/admin/claude-console-accounts/${f.account.id}/usage`);t&&(s.value.dailyUsage=t.dailyUsage||0)}catch{}},Ge=u=>{M.value=u,u==="claude"?s.value.platform="claude":u==="openai"?s.value.platform="openai":u==="gemini"&&(s.value.platform="gemini")},Fe=async()=>{if(h.value.name="",!Je.value){(!s.value.name||s.value.name.trim()==="")&&(h.value.name="请填写账户名称");return}if(s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)){S("请选择一个分组","error");return}s.value.accountType==="group"&&(s.value.groupIds&&s.value.groupIds.length>0?s.value.groupId=s.value.groupIds[0]:s.value.groupId=""),!(s.value.platform==="gemini"&&D.value===1&&s.value.addType==="oauth"&&(!s.value.projectId||s.value.projectId.trim()==="")&&!await p("项目 ID 未填写",`您尚未填写项目 ID。
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
如果您使用的是普通个人账号,可以继续不填写。`,"继续","返回填写"))&&(D.value=2)},Qe=async()=>{var u;Y.value=!0;try{const t=(u=s.value.proxy)!=null&&u.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}}:{},o=await U.generateClaudeSetupTokenUrl(t);i.value=o.authUrl,te.value=o.sessionId}catch(t){S(t.message||"生成Setup Token授权链接失败","error")}finally{Y.value=!1}},Ze=()=>{i.value="",y.value="",Qe()},nt=async()=>{try{await navigator.clipboard.writeText(i.value),L.value=!0,S("链接已复制","success"),setTimeout(()=>{L.value=!1},2e3)}catch{const t=document.createElement("textarea");t.value=i.value,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")?(L.value=!0,S("链接已复制","success")):S("复制失败,请手动复制","error")}catch{S("复制失败,请手动复制","error")}document.body.removeChild(t),setTimeout(()=>{L.value=!1},2e3)}},it=async()=>{var u;if(Ne.value){P.value=!0;try{const t={sessionId:te.value,callbackUrl:y.value.trim()};(u=s.value.proxy)!=null&&u.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 o=await U.exchangeClaudeSetupTokenCode(t);s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=$e()),await Be(o)}catch(t){S(t.message||"Setup Token授权失败,请检查授权码是否正确","error")}finally{P.value=!1}}},Be=async u=>{var t,o,B,q,Ae,V;_.value=!0;try{s.value.platform==="claude"&&s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=$e());const w={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,proxy:s.value.proxy.enabled?{type:s.value.proxy.type,host:s.value.proxy.host,port:parseInt(s.value.proxy.port),username:s.value.proxy.username||null,password:s.value.proxy.password||null}:null};s.value.platform==="claude"?(w.claudeAiOauth=u.claudeAiOauth||u,w.priority=s.value.priority||50,w.autoStopOnWarning=s.value.autoStopOnWarning||!1,w.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,w.useUnifiedClientId=s.value.useUnifiedClientId||!1,w.unifiedClientId=s.value.unifiedClientId||"",w.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}):s.value.platform==="gemini"?(w.geminiOauth=u.tokens||u,s.value.projectId&&(w.projectId=s.value.projectId),w.priority=s.value.priority||50):s.value.platform==="openai"&&(w.openaiOauth=u.tokens||u,w.accountInfo=u.accountInfo,w.priority=s.value.priority||50);let le;s.value.platform==="claude"?le=await U.createClaudeAccount(w):s.value.platform==="openai"?le=await U.createOpenAIAccount(w):le=await U.createGeminiAccount(w),se("success",le)}catch(w){const le=((o=(t=w.response)==null?void 0:t.data)==null?void 0:o.error)||w.message||"账户创建失败",oe=((q=(B=w.response)==null?void 0:B.data)==null?void 0:q.suggestion)||"",ne=((V=(Ae=w.response)==null?void 0:Ae.data)==null?void 0:V.errorDetails)||null;let Re=le;oe&&(Re+=`
${oe}`),ne&&ne.error_description?Re+=`
详细信息: ${ne.error_description}`:ne&&ne.error&&ne.error.message&&(Re+=`
详细信息: ${ne.error.message}`),S(Re,"error","",8e3)}finally{_.value=!1}},Xe=async()=>{var t,o,B,q,Ae,V;h.value.name="",h.value.accessToken="",h.value.apiUrl="",h.value.apiKey="";let u=!1;if((!s.value.name||s.value.name.trim()==="")&&(h.value.name="请填写账户名称",u=!0),s.value.platform==="claude-console"&&((!s.value.apiUrl||s.value.apiUrl.trim()==="")&&(h.value.apiUrl="请填写 API URL",u=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(h.value.apiKey="请填写 API Key",u=!0)),s.value.platform==="ccr"&&((!s.value.apiUrl||s.value.apiUrl.trim()==="")&&(h.value.apiUrl="请填写 API URL",u=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(h.value.apiKey="请填写 API Key",u=!0)),s.value.platform==="openai-responses"?((!s.value.baseApi||s.value.baseApi.trim()==="")&&(h.value.baseApi="请填写 API 基础地址",u=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(h.value.apiKey="请填写 API 密钥",u=!0)):s.value.platform==="bedrock"?((!s.value.accessKeyId||s.value.accessKeyId.trim()==="")&&(h.value.accessKeyId="请填写 AWS 访问密钥 ID",u=!0),(!s.value.secretAccessKey||s.value.secretAccessKey.trim()==="")&&(h.value.secretAccessKey="请填写 AWS 秘密访问密钥",u=!0),(!s.value.region||s.value.region.trim()==="")&&(h.value.region="请选择 AWS 区域",u=!0)):s.value.platform==="azure_openai"?((!s.value.azureEndpoint||s.value.azureEndpoint.trim()==="")&&(h.value.azureEndpoint="请填写 Azure Endpoint",u=!0),(!s.value.deploymentName||s.value.deploymentName.trim()==="")&&(h.value.deploymentName="请填写部署名称",u=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(h.value.apiKey="请填写 API Key",u=!0)):s.value.addType==="manual"&&(s.value.platform==="openai"?(!s.value.refreshToken||s.value.refreshToken.trim()==="")&&(h.value.refreshToken="请填写 Refresh Token",u=!0):s.value.platform==="gemini"?(!s.value.accessToken||s.value.accessToken.trim()==="")&&(h.value.accessToken="请填写 Access Token",u=!0):s.value.platform==="claude"&&(!s.value.accessToken||s.value.accessToken.trim()==="")&&(h.value.accessToken="请填写 Access Token",u=!0)),s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)&&(S("请选择一个分组","error"),u=!0),s.value.accountType==="group"&&(s.value.groupIds&&s.value.groupIds.length>0?s.value.groupId=s.value.groupIds[0]:s.value.groupId=""),!u){_.value=!0;try{const w={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,proxy:s.value.proxy.enabled?{type:s.value.proxy.type,host:s.value.proxy.host,port:parseInt(s.value.proxy.port),username:s.value.proxy.username||null,password:s.value.proxy.password||null}:null};if(s.value.platform==="claude"){const oe=s.value.refreshToken?6e5:31536e6;s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=$e()),w.claudeAiOauth={accessToken:s.value.accessToken,refreshToken:s.value.refreshToken||"",expiresAt:Date.now()+oe,scopes:[]},w.priority=s.value.priority||50,w.autoStopOnWarning=s.value.autoStopOnWarning||!1,w.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,w.useUnifiedClientId=s.value.useUnifiedClientId||!1,w.unifiedClientId=s.value.unifiedClientId||"",w.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(s.value.platform==="gemini"){const oe=s.value.refreshToken?6e5:31536e6;w.geminiOauth={access_token:s.value.accessToken,refresh_token:s.value.refreshToken||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+oe},s.value.projectId&&(w.projectId=s.value.projectId),w.priority=s.value.priority||50}else if(s.value.platform==="openai"){const oe=s.value.refreshToken?6e5:31536e6;w.openaiOauth={idToken:"",accessToken:s.value.accessToken||"",refreshToken:s.value.refreshToken,expires_in:Math.floor(oe/1e3)},w.accountInfo={accountId:"",chatgptUserId:"",organizationId:"",organizationRole:"",organizationTitle:"",planType:"",email:"",emailVerified:!1},w.needsImmediateRefresh=!0,w.requireRefreshSuccess=!0,w.priority=s.value.priority||50}else s.value.platform==="claude-console"||s.value.platform==="ccr"?(w.apiUrl=s.value.apiUrl,w.apiKey=s.value.apiKey,w.priority=s.value.priority||50,w.supportedModels=pt()||{},w.userAgent=s.value.userAgent||null,w.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0,w.dailyQuota=s.value.dailyQuota||0,w.quotaResetTime=s.value.quotaResetTime||"00:00"):s.value.platform==="openai-responses"?(w.baseApi=s.value.baseApi,w.apiKey=s.value.apiKey,w.userAgent=s.value.userAgent||"",w.priority=s.value.priority||50,w.rateLimitDuration=60,w.dailyQuota=s.value.dailyQuota||0,w.quotaResetTime=s.value.quotaResetTime||"00:00"):s.value.platform==="bedrock"?(w.awsCredentials={accessKeyId:s.value.accessKeyId,secretAccessKey:s.value.secretAccessKey,sessionToken:s.value.sessionToken||null},w.region=s.value.region,w.defaultModel=s.value.defaultModel||null,w.smallFastModel=s.value.smallFastModel||null,w.priority=s.value.priority||50,w.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0):s.value.platform==="azure_openai"&&(w.azureEndpoint=s.value.azureEndpoint,w.apiKey=s.value.apiKey,w.apiVersion=s.value.apiVersion||"2024-02-01",w.deploymentName=s.value.deploymentName,w.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[],w.priority=s.value.priority||50,w.isActive=s.value.isActive!==!1,w.schedulable=s.value.schedulable!==!1);let le;if(s.value.platform==="claude")le=await U.createClaudeAccount(w);else if(s.value.platform==="claude-console"||s.value.platform==="ccr")le=await U.createClaudeConsoleAccount(w);else if(s.value.platform==="openai-responses")le=await U.createOpenAIResponsesAccount(w);else if(s.value.platform==="bedrock")le=await U.createBedrockAccount(w);else if(s.value.platform==="openai")le=await U.createOpenAIAccount(w);else if(s.value.platform==="azure_openai")le=await U.createAzureOpenAIAccount(w);else if(s.value.platform==="gemini")le=await U.createGeminiAccount(w);else throw new Error(`不支持的平台: ${s.value.platform}`);se("success",le)}catch(w){const le=((o=(t=w.response)==null?void 0:t.data)==null?void 0:o.error)||w.message||"账户创建失败",oe=((q=(B=w.response)==null?void 0:B.data)==null?void 0:q.suggestion)||"",ne=((V=(Ae=w.response)==null?void 0:Ae.data)==null?void 0:V.errorDetails)||null;let Re=le;oe&&(Re+=`
${oe}`),ne&&ne.error_description?Re+=`
详细信息: ${ne.error_description}`:ne&&ne.error&&ne.error.message&&(Re+=`
详细信息: ${ne.error.message}`),S(Re,"error","",8e3)}finally{_.value=!1}}},et=async()=>{var u,t,o,B,q,Ae;if(h.value.name="",!s.value.name||s.value.name.trim()===""){h.value.name="请填写账户名称";return}if(s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)){S("请选择一个分组","error");return}if(s.value.accountType==="group"&&(s.value.groupIds&&s.value.groupIds.length>0?s.value.groupId=s.value.groupIds[0]:s.value.groupId=""),!(s.value.platform==="gemini"&&(!s.value.projectId||s.value.projectId.trim()==="")&&!await p("项目 ID 未填写",`您尚未填写项目 ID。
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
如果您使用的是普通个人账号,可以继续不填写。`,"继续保存","返回填写"))){_.value=!0;try{const V={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,proxy:s.value.proxy.enabled?{type:s.value.proxy.type,host:s.value.proxy.host,port:parseInt(s.value.proxy.port),username:s.value.proxy.username||null,password:s.value.proxy.password||null}:null};if(s.value.accessToken||s.value.refreshToken){if(f.account.platform==="claude"){const w=s.value.refreshToken?6e5:31536e6;V.claudeAiOauth={accessToken:s.value.accessToken||"",refreshToken:s.value.refreshToken||"",expiresAt:Date.now()+w,scopes:f.account.scopes||[]}}else if(f.account.platform==="gemini"){const w=s.value.refreshToken?6e5:31536e6;V.geminiOauth={access_token:s.value.accessToken||"",refresh_token:s.value.refreshToken||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+w}}else if(f.account.platform==="openai"){const w=s.value.refreshToken?6e5:31536e6;V.openaiOauth={idToken:"",accessToken:s.value.accessToken||"",refreshToken:s.value.refreshToken||"",expires_in:Math.floor(w/1e3)},s.value.refreshToken&&s.value.refreshToken!==f.account.refreshToken&&(V.needsImmediateRefresh=!0,V.requireRefreshSuccess=!0)}}if(f.account.platform==="gemini"&&(V.projectId=s.value.projectId||""),f.account.platform==="claude"&&(s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=$e()),V.priority=s.value.priority||50,V.autoStopOnWarning=s.value.autoStopOnWarning||!1,V.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,V.useUnifiedClientId=s.value.useUnifiedClientId||!1,V.unifiedClientId=s.value.unifiedClientId||"",V.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}),f.account.platform==="openai"&&(V.priority=s.value.priority||50),f.account.platform==="gemini"&&(V.priority=s.value.priority||50),f.account.platform==="claude-console"&&(V.apiUrl=s.value.apiUrl,s.value.apiKey&&(V.apiKey=s.value.apiKey),V.priority=s.value.priority||50,V.supportedModels=pt()||{},V.userAgent=s.value.userAgent||null,V.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0,V.dailyQuota=s.value.dailyQuota||0,V.quotaResetTime=s.value.quotaResetTime||"00:00"),f.account.platform==="openai-responses"&&(V.baseApi=s.value.baseApi,s.value.apiKey&&(V.apiKey=s.value.apiKey),V.userAgent=s.value.userAgent||"",V.priority=s.value.priority||50,V.dailyQuota=s.value.dailyQuota||0,V.quotaResetTime=s.value.quotaResetTime||"00:00"),f.account.platform==="bedrock"&&((s.value.accessKeyId||s.value.secretAccessKey||s.value.sessionToken)&&(V.awsCredentials={},s.value.accessKeyId&&(V.awsCredentials.accessKeyId=s.value.accessKeyId),s.value.secretAccessKey&&(V.awsCredentials.secretAccessKey=s.value.secretAccessKey),s.value.sessionToken!==void 0&&(V.awsCredentials.sessionToken=s.value.sessionToken||null)),s.value.region&&(V.region=s.value.region),V.defaultModel=s.value.defaultModel||null,V.smallFastModel=s.value.smallFastModel||null,V.priority=s.value.priority||50,V.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0),f.account.platform==="azure_openai"&&(V.azureEndpoint=s.value.azureEndpoint,V.apiVersion=s.value.apiVersion||"2024-02-01",V.deploymentName=s.value.deploymentName,V.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[],V.priority=s.value.priority||50,s.value.apiKey&&s.value.apiKey.trim()&&(V.apiKey=s.value.apiKey)),f.account.platform==="claude")await U.updateClaudeAccount(f.account.id,V);else if(f.account.platform==="claude-console")await U.updateClaudeConsoleAccount(f.account.id,V);else if(f.account.platform==="openai-responses")await U.updateOpenAIResponsesAccount(f.account.id,V);else if(f.account.platform==="bedrock")await U.updateBedrockAccount(f.account.id,V);else if(f.account.platform==="openai")await U.updateOpenAIAccount(f.account.id,V);else if(f.account.platform==="azure_openai")await U.updateAzureOpenAIAccount(f.account.id,V);else if(f.account.platform==="gemini")await U.updateGeminiAccount(f.account.id,V);else throw new Error(`不支持的平台: ${f.account.platform}`);se("success")}catch(V){const w=((t=(u=V.response)==null?void 0:u.data)==null?void 0:t.error)||V.message||"账户更新失败",le=((B=(o=V.response)==null?void 0:o.data)==null?void 0:B.suggestion)||"",oe=((Ae=(q=V.response)==null?void 0:q.data)==null?void 0:Ae.errorDetails)||null;let ne=w;le&&(ne+=`
${le}`),oe&&oe.error_description?ne+=`
详细信息: ${oe.error_description}`:oe&&oe.error&&oe.error.message&&(ne+=`
详细信息: ${oe.error.message}`),S(ne,"error","",8e3)}finally{_.value=!1}}};Z(()=>s.value.name,()=>{var u;h.value.name&&((u=s.value.name)!=null&&u.trim())&&(h.value.name="")}),Z(()=>s.value.accessToken,()=>{var u;h.value.accessToken&&((u=s.value.accessToken)!=null&&u.trim())&&(h.value.accessToken="")}),Z(()=>s.value.apiUrl,()=>{var u;h.value.apiUrl&&((u=s.value.apiUrl)!=null&&u.trim())&&(h.value.apiUrl="")}),Z(()=>s.value.apiKey,()=>{var u;h.value.apiKey&&((u=s.value.apiKey)!=null&&u.trim())&&(h.value.apiKey="")}),Z(()=>s.value.azureEndpoint,()=>{var u;h.value.azureEndpoint&&((u=s.value.azureEndpoint)!=null&&u.trim())&&(h.value.azureEndpoint="")}),Z(()=>s.value.deploymentName,()=>{var u;h.value.deploymentName&&((u=s.value.deploymentName)!=null&&u.trim())&&(h.value.deploymentName="")});const ze=C([]),Me=C(!1),m=C(!1),g=Se(()=>{let u=s.value.platform;return s.value.platform==="claude-console"||s.value.platform==="ccr"?u="claude":s.value.platform==="openai-responses"&&(u="openai"),ze.value.filter(t=>t.platform===u)}),A=async()=>{Me.value=!0;try{const u=await K.get("/admin/account-groups");ze.value=u.data||[]}catch{S("加载分组列表失败","error"),ze.value=[]}finally{Me.value=!1}},be=async()=>{await A(),S("分组列表已刷新","success")},dt=()=>{m.value=!0},bt=async()=>{await A()};Z(()=>s.value.platform,u=>{u==="claude-console"||u==="ccr"||u==="bedrock"||u==="openai-responses"?s.value.addType="manual":u==="claude"?s.value.addType="setup-token":(u==="gemini"||u==="openai")&&(s.value.addType="oauth"),s.value.accountType==="group"&&(s.value.groupId="",s.value.groupIds=[])}),Z(()=>s.value.groupIds,u=>{s.value.accountType==="group"&&(u&&u.length>0?s.value.groupId=u[0]:s.value.groupId="")},{deep:!0}),Z(y,u=>{if(!u||typeof u!="string")return;const t=u.trim();if(!t)return;if(t.startsWith("http://")||t.startsWith("https://"))if(t.startsWith("http://localhost:45462"))try{const q=new URL(t).searchParams.get("code");q?(y.value=q,S("成功提取授权码!","success")):S("URL 中未找到授权码参数,请检查链接是否正确","error")}catch{S("链接格式错误,请检查是否为完整的 URL","error")}else S("请粘贴以 http://localhost:45462 开头的链接","error")}),Z(()=>s.value.platform,u=>{z.value||se("platform-changed",u)}),Z(()=>s.value.accountType,u=>{u==="group"&&ze.value.length===0&&A()}),Z(()=>s.value.groupId,u=>{u==="__new__"&&(s.value.groupId="",m.value=!0)});const tt=()=>{ae.value.push({from:"",to:""})},ut=u=>{ae.value.splice(u,1)},he=(u,t)=>{if(ae.value.some(B=>B.from===u)){S(`模型 ${u} 的映射已存在`,"info");return}ae.value.push({from:u,to:t}),S(`已添加映射: ${u} → ${t}`,"success")},pt=()=>{const u={};return ae.value.forEach(t=>{t.from&&t.to&&(u[t.from]=t.to)}),Object.keys(u).length>0?u:null};Z(()=>f.account,u=>{if(u){Ue();const t=u.proxy&&u.proxy.host&&u.proxy.port?{enabled:!0,type:u.proxy.type||"socks5",host:u.proxy.host,port:u.proxy.port,username:u.proxy.username||"",password:u.proxy.password||""}:{enabled:!1,type:"socks5",host:"",port:"",username:"",password:""};let o="";u.accountType==="group"&&(o=u.groupId||u.groupInfo&&u.groupInfo.id||"");let B="claude_max";if(u.subscriptionInfo){const q=typeof u.subscriptionInfo=="string"?JSON.parse(u.subscriptionInfo):u.subscriptionInfo;q.accountType?B=q.accountType:q.hasClaudeMax?B="claude_max":q.hasClaudePro?B="claude_pro":B="claude_free"}s.value={platform:u.platform,addType:"oauth",name:u.name,description:u.description||"",accountType:u.accountType||"shared",subscriptionType:B,autoStopOnWarning:u.autoStopOnWarning||!1,useUnifiedUserAgent:u.useUnifiedUserAgent||!1,useUnifiedClientId:u.useUnifiedClientId||!1,unifiedClientId:u.unifiedClientId||"",groupId:o,groupIds:[],projectId:u.projectId||"",accessToken:"",refreshToken:"",proxy:t,apiUrl:u.apiUrl||"",apiKey:"",priority:u.priority||50,supportedModels:(()=>{const q=u.supportedModels;return q?typeof q=="object"&&!Array.isArray(q)?Object.keys(q):Array.isArray(q)?q:[]:[]})(),userAgent:u.userAgent||"",enableRateLimit:!!(u.rateLimitDuration&&u.rateLimitDuration>0),rateLimitDuration:u.rateLimitDuration||60,accessKeyId:"",secretAccessKey:"",region:u.region||"",sessionToken:"",defaultModel:u.defaultModel||"",smallFastModel:u.smallFastModel||"",azureEndpoint:u.azureEndpoint||"",apiVersion:u.apiVersion||"",deploymentName:u.deploymentName||"",baseApi:u.baseApi||"",dailyQuota:u.dailyQuota||0,dailyUsage:u.dailyUsage||0,quotaResetTime:u.quotaResetTime||"00:00"},u.platform==="claude-console"&&Ye(),u.accountType==="group"&&A().then(async()=>{const q=[];if(u.groupInfo&&u.groupInfo.id)s.value.groupId=u.groupInfo.id,q.push(u.groupInfo.id);else if(u.groupId)s.value.groupId=u.groupId,q.push(u.groupId);else if(u.groupIds&&Array.isArray(u.groupIds)&&u.groupIds.length>0)s.value.groupId=u.groupIds[0],q.push(...u.groupIds);else{const Ae=ze.value.map(async V=>{try{((await K.get(`/admin/account-groups/${V.id}/members`)).data||[]).some(oe=>oe.id===u.id)&&(q.push(V.id),s.value.groupId||(s.value.groupId=V.id))}catch{}});await Promise.all(Ae)}s.value.groupIds=q})}},{immediate:!0});const gt=async()=>{try{const u=await K.get("/admin/claude-code-version");u.success&&u.userAgent?E.value=u.userAgent:E.value=""}catch{E.value=""}},st=async()=>{k.value=!0;try{(await K.post("/admin/claude-code-version/clear")).success?(E.value="",S("统一User-Agent缓存已清除","success")):S("清除缓存失败","error")}catch(u){S("清除缓存失败:"+(u.message||"未知错误"),"error")}finally{k.value=!1}},$e=()=>{const u=new Uint8Array(32);return crypto.getRandomValues(u),Array.from(u,t=>t.toString(16).padStart(2,"0")).join("")},Le=()=>{s.value.unifiedClientId=$e(),S("已生成新的客户端标识","success")},Oe=()=>{s.value.useUnifiedClientId&&(s.value.useUnifiedUserAgent=!0,s.value.unifiedClientId||(s.value.unifiedClientId=$e()))};return ct(()=>{var u;M.value=ye(s.value.platform),gt(),z.value&&((u=f.account)==null?void 0:u.platform)==="claude-console"&&Ye()}),Z(()=>s.value.platform,u=>{u==="claude"&>()}),(u,t)=>(n(),Ce(ht,{to:"body"},[G.value?(n(),d("div",Pa,[e("div",La,[e("div",Oa,[e("div",ja,[t[115]||(t[115]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-green-500 to-green-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-user-circle text-sm text-white sm:text-base"})],-1)),e("h3",Da,c(z.value?"编辑账户":"添加账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:t[0]||(t[0]=o=>u.$emit("close"))},t[116]||(t[116]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),!z.value&&(s.value.addType==="oauth"||s.value.addType==="setup-token")?(n(),d("div",_a,[e("div",Ea,[e("div",Wa,[e("div",{class:R(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",D.value>=1?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 1 ",2),t[117]||(t[117]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"基本信息",-1))]),t[119]||(t[119]=e("div",{class:"h-0.5 w-4 bg-gray-300 sm:w-8"},null,-1)),e("div",Na,[e("div",{class:R(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",D.value>=2?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 2 ",2),t[118]||(t[118]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"授权认证",-1))])])])):v("",!0),D.value===1&&!z.value?(n(),d("div",qa,[e("div",Ga,[z.value?v("",!0):(n(),d("div",Fa,[t[149]||(t[149]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择平台",-1)),e("div",Qa,[e("div",Ba,[e("div",{class:R(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[M.value==="claude"?"border-indigo-500 bg-gradient-to-br from-indigo-50 to-purple-50 shadow-md dark:from-indigo-900/20 dark:to-purple-900/20":"border-gray-200 bg-white hover:border-indigo-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-indigo-600"]]),onClick:t[1]||(t[1]=o=>Ge("claude"))},[e("div",Ha,[e("div",Ja,[t[121]||(t[121]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-indigo-500 to-purple-600"},[e("i",{class:"fas fa-brain text-sm text-white"})],-1)),M.value==="claude"?(n(),d("div",Ya,t[120]||(t[120]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):v("",!0)]),t[122]||(t[122]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Claude ",-1)),t[123]||(t[123]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Anthropic",-1))])],2),e("div",{class:R(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[M.value==="openai"?"border-emerald-500 bg-gradient-to-br from-emerald-50 to-teal-50 shadow-md dark:from-emerald-900/20 dark:to-teal-900/20":"border-gray-200 bg-white hover:border-emerald-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-emerald-600"]]),onClick:t[2]||(t[2]=o=>Ge("openai"))},[e("div",Za,[e("div",Xa,[t[125]||(t[125]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-emerald-500 to-teal-600"},[e("svg",{class:"h-5 w-5 text-white",fill:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.8956zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.4069-.6813zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"})])],-1)),M.value==="openai"?(n(),d("div",er,t[124]||(t[124]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):v("",!0)]),t[126]||(t[126]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," OpenAI ",-1)),t[127]||(t[127]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"GPT 系列",-1))])],2),e("div",{class:R(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[M.value==="gemini"?"border-blue-500 bg-gradient-to-br from-blue-50 to-indigo-50 shadow-md dark:from-blue-900/20 dark:to-indigo-900/20":"border-gray-200 bg-white hover:border-blue-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-600"]]),onClick:t[3]||(t[3]=o=>Ge("gemini"))},[e("div",tr,[e("div",sr,[t[129]||(t[129]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-blue-500 to-indigo-600"},[e("i",{class:"fab fa-google text-sm text-white"})],-1)),M.value==="gemini"?(n(),d("div",ar,t[128]||(t[128]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):v("",!0)]),t[130]||(t[130]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Gemini ",-1)),t[131]||(t[131]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Google AI",-1))])],2)]),M.value?(n(),d("div",rr,[t[148]||(t[148]=e("p",{class:"mb-2 text-xs font-medium text-gray-700 dark:text-gray-300"}," 选择具体平台类型: ",-1)),e("div",lr,[M.value==="claude"?(n(),d(fe,{key:0},[e("label",{class:R(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="claude"?"border-indigo-500 bg-indigo-50 dark:border-indigo-400 dark:bg-indigo-900/30":"border-gray-300 bg-white hover:border-indigo-400 hover:bg-indigo-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-indigo-500 dark:hover:bg-indigo-900/20"]])},[x(e("input",{"onUpdate:modelValue":t[4]||(t[4]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"claude"},null,512),[[ee,s.value.platform]]),t[133]||(t[133]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-brain text-sm text-indigo-600 dark:text-indigo-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Code"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),s.value.platform==="claude"?(n(),d("div",or,t[132]||(t[132]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):v("",!0)],2),e("label",{class:R(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="claude-console"?"border-purple-500 bg-purple-50 dark:border-purple-400 dark:bg-purple-900/30":"border-gray-300 bg-white hover:border-purple-400 hover:bg-purple-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-purple-500 dark:hover:bg-purple-900/20"]])},[x(e("input",{"onUpdate:modelValue":t[5]||(t[5]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"claude-console"},null,512),[[ee,s.value.platform]]),t[135]||(t[135]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-terminal text-sm text-purple-600 dark:text-purple-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Console"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"标准API")])],-1)),s.value.platform==="claude-console"?(n(),d("div",nr,t[134]||(t[134]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):v("",!0)],2),e("label",{class:R(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="bedrock"?"border-orange-500 bg-orange-50 dark:border-orange-400 dark:bg-orange-900/30":"border-gray-300 bg-white hover:border-orange-400 hover:bg-orange-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-orange-500 dark:hover:bg-orange-900/20"]])},[x(e("input",{"onUpdate:modelValue":t[6]||(t[6]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"bedrock"},null,512),[[ee,s.value.platform]]),t[137]||(t[137]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-aws text-sm text-orange-600 dark:text-orange-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Bedrock"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"AWS")])],-1)),s.value.platform==="bedrock"?(n(),d("div",ir,t[136]||(t[136]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):v("",!0)],2),e("label",{class:R(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="ccr"?"border-cyan-500 bg-cyan-50 dark:border-cyan-400 dark:bg-cyan-900/30":"border-gray-300 bg-white hover:border-cyan-400 hover:bg-cyan-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-cyan-500 dark:hover:bg-cyan-900/20"]])},[x(e("input",{"onUpdate:modelValue":t[7]||(t[7]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"ccr"},null,512),[[ee,s.value.platform]]),t[139]||(t[139]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-code-branch text-sm text-cyan-600 dark:text-cyan-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"CCR"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Claude Code Router")])],-1)),s.value.platform==="ccr"?(n(),d("div",dr,t[138]||(t[138]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):v("",!0)],2)],64)):v("",!0),M.value==="openai"?(n(),d(fe,{key:1},[e("label",{class:R(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="openai"?"border-emerald-500 bg-emerald-50 dark:border-emerald-400 dark:bg-emerald-900/30":"border-gray-300 bg-white hover:border-emerald-400 hover:bg-emerald-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-emerald-500 dark:hover:bg-emerald-900/20"]])},[x(e("input",{"onUpdate:modelValue":t[8]||(t[8]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"openai"},null,512),[[ee,s.value.platform]]),t[141]||(t[141]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-emerald-600 dark:text-emerald-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Codex Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),s.value.platform==="openai"?(n(),d("div",ur,t[140]||(t[140]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):v("",!0)],2),e("label",{class:R(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="openai-responses"?"border-teal-500 bg-teal-50 dark:border-teal-400 dark:bg-teal-900/30":"border-gray-300 bg-white hover:border-teal-400 hover:bg-teal-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-teal-500 dark:hover:bg-teal-900/20"]])},[x(e("input",{"onUpdate:modelValue":t[9]||(t[9]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"openai-responses"},null,512),[[ee,s.value.platform]]),t[143]||(t[143]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-server text-sm text-teal-600 dark:text-teal-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Responses"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Openai-Responses")])],-1)),s.value.platform==="openai-responses"?(n(),d("div",pr,t[142]||(t[142]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):v("",!0)],2),e("label",{class:R(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="azure_openai"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[x(e("input",{"onUpdate:modelValue":t[10]||(t[10]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"azure_openai"},null,512),[[ee,s.value.platform]]),t[145]||(t[145]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-microsoft text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Azure"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Azure Openai")])],-1)),s.value.platform==="azure_openai"?(n(),d("div",gr,t[144]||(t[144]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):v("",!0)],2)],64)):v("",!0),M.value==="gemini"?(n(),d("label",{key:2,class:R(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="gemini"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[x(e("input",{"onUpdate:modelValue":t[11]||(t[11]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"gemini"},null,512),[[ee,s.value.platform]]),t[147]||(t[147]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-google text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Gemini Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),s.value.platform==="gemini"?(n(),d("div",mr,t[146]||(t[146]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):v("",!0)],2)):v("",!0)])])):v("",!0)])])),!z.value&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"?(n(),d("div",yr,[t[153]||(t[153]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"添加方式",-1)),e("div",xr,[s.value.platform==="claude"?(n(),d("label",fr,[x(e("input",{"onUpdate:modelValue":t[12]||(t[12]=o=>s.value.addType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"setup-token"},null,512),[[ee,s.value.addType]]),t[150]||(t[150]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Setup Token (推荐)",-1))])):v("",!0),e("label",cr,[x(e("input",{"onUpdate:modelValue":t[13]||(t[13]=o=>s.value.addType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"oauth"},null,512),[[ee,s.value.addType]]),t[151]||(t[151]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OAuth 授权",-1))]),e("label",br,[x(e("input",{"onUpdate:modelValue":t[14]||(t[14]=o=>s.value.addType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"manual"},null,512),[[ee,s.value.addType]]),t[152]||(t[152]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"手动输入 Access Token",-1))])])])):v("",!0),e("div",null,[t[154]||(t[154]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),x(e("input",{"onUpdate:modelValue":t[15]||(t[15]=o=>s.value.name=o),class:R(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":h.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[$,s.value.name]]),h.value.name?(n(),d("p",vr,c(h.value.name),1)):v("",!0)]),e("div",null,[t[155]||(t[155]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":t[16]||(t[16]=o=>s.value.description=o),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[$,s.value.description]])]),e("div",null,[t[159]||(t[159]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",kr,[e("label",wr,[x(e("input",{"onUpdate:modelValue":t[17]||(t[17]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[ee,s.value.accountType]]),t[156]||(t[156]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",hr,[x(e("input",{"onUpdate:modelValue":t[18]||(t[18]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[ee,s.value.accountType]]),t[157]||(t[157]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",$r,[x(e("input",{"onUpdate:modelValue":t[19]||(t[19]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[ee,s.value.accountType]]),t[158]||(t[158]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[160]||(t[160]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),s.value.accountType==="group"?(n(),d("div",Ar,[t[162]||(t[162]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",Cr,[e("div",Ur,[e("div",Ir,[g.value.length===0?(n(),d("div",Tr," 暂无可用分组 ")):v("",!0),(n(!0),d(fe,null,we(g.value,o=>(n(),d("label",{key:o.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[x(e("input",{"onUpdate:modelValue":t[20]||(t[20]=B=>s.value.groupIds=B),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:o.id},null,8,Vr),[[ge,s.value.groupIds]]),e("span",Rr,c(o.name)+" ("+c(o.memberCount||0)+" 个成员) ",1)]))),128)),e("div",{class:"border-t pt-2 dark:border-gray-600"},[e("button",{class:"flex items-center gap-2 text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",type:"button",onClick:dt},t[161]||(t[161]=[e("i",{class:"fas fa-plus"},null,-1),I(" 新建分组 ",-1)]))])])]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:be},[e("i",{class:R(["fas fa-sync-alt",{"animate-spin":Me.value}])},null,2)])])])):v("",!0),s.value.platform==="gemini"?(n(),d("div",Kr,[t[163]||(t[163]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[21]||(t[21]=o=>s.value.projectId=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[$,s.value.projectId]]),t[164]||(t[164]=e("div",{class:"mt-2 rounded-lg border border-yellow-200 bg-yellow-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-yellow-600"}),e("div",{class:"text-xs text-yellow-700"},[e("p",{class:"mb-1 font-medium"},"Google Cloud/Workspace 账号需要提供项目 ID"),e("p",null," 某些 Google 账号(特别是绑定了 Google Cloud 的账号)会被识别为 Workspace 账号,需要提供额外的项目 ID。 "),e("div",{class:"mt-2 rounded border border-yellow-300 bg-white p-2"},[e("p",{class:"mb-1 font-medium"},"如何获取项目 ID:"),e("ol",{class:"ml-2 list-inside list-decimal space-y-1"},[e("li",null,[I(" 访问 "),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,[I(" 复制"),e("span",{class:"font-semibold text-red-600"},"项目 ID(Project ID)"),I(",通常是字符串格式 ")]),e("li",{class:"text-red-600"}," ⚠️ 注意:要复制项目 ID(Project ID),不要复制项目编号(Project Number)! ")])]),e("p",{class:"mt-2"},[e("strong",null,"提示:"),I("如果您的账号是普通个人账号(未绑定 Google Cloud),请留空此字段。 ")])])])],-1))])):v("",!0),s.value.platform==="bedrock"&&!z.value?(n(),d("div",Sr,[e("div",null,[t[165]||(t[165]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 访问密钥 ID *",-1)),x(e("input",{"onUpdate:modelValue":t[22]||(t[22]=o=>s.value.accessKeyId=o),class:R(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":h.value.accessKeyId}]),placeholder:"请输入 AWS Access Key ID",required:"",type:"text"},null,2),[[$,s.value.accessKeyId]]),h.value.accessKeyId?(n(),d("p",zr,c(h.value.accessKeyId),1)):v("",!0)]),e("div",null,[t[166]||(t[166]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 秘密访问密钥 *",-1)),x(e("input",{"onUpdate:modelValue":t[23]||(t[23]=o=>s.value.secretAccessKey=o),class:R(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":h.value.secretAccessKey}]),placeholder:"请输入 AWS Secret Access Key",required:"",type:"password"},null,2),[[$,s.value.secretAccessKey]]),h.value.secretAccessKey?(n(),d("p",Mr,c(h.value.secretAccessKey),1)):v("",!0)]),e("div",null,[t[167]||(t[167]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 区域 *",-1)),x(e("input",{"onUpdate:modelValue":t[24]||(t[24]=o=>s.value.region=o),class:R(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":h.value.region}]),placeholder:"例如:us-east-1",required:"",type:"text"},null,2),[[$,s.value.region]]),h.value.region?(n(),d("p",Pr,c(h.value.region),1)):v("",!0),t[168]||(t[168]=e("div",{class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600"}),e("div",{class:"text-xs text-blue-700"},[e("p",{class:"mb-1 font-medium"},"常用 AWS 区域参考:"),e("div",{class:"grid grid-cols-2 gap-1 text-xs"},[e("span",null,"• us-east-1 (美国东部)"),e("span",null,"• us-west-2 (美国西部)"),e("span",null,"• eu-west-1 (欧洲爱尔兰)"),e("span",null,"• ap-southeast-1 (新加坡)"),e("span",null,"• ap-northeast-1 (东京)"),e("span",null,"• eu-central-1 (法兰克福)")]),e("p",{class:"mt-2 text-blue-600"},"💡 请输入完整的区域代码,如 us-east-1")])])],-1))]),e("div",null,[t[169]||(t[169]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"会话令牌 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[25]||(t[25]=o=>s.value.sessionToken=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"如果使用临时凭证,请输入会话令牌",type:"password"},null,512),[[$,s.value.sessionToken]]),t[170]||(t[170]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 仅在使用临时 AWS 凭证时需要填写 ",-1))]),e("div",null,[t[171]||(t[171]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"默认主模型 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[26]||(t[26]=o=>s.value.defaultModel=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[$,s.value.defaultModel]]),t[172]||(t[172]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1)),t[173]||(t[173]=e("div",{class:"mt-2 rounded-lg border border-amber-200 bg-amber-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-amber-600"}),e("div",{class:"text-xs text-amber-700"},[e("p",{class:"mb-1 font-medium"},"Bedrock 模型配置说明:"),e("ul",{class:"list-inside list-disc space-y-1 text-xs"},[e("li",null,"支持 Inference Profile ID(推荐)"),e("li",null,"支持 Application Inference Profile ARN"),e("li",null,"常用模型:us.anthropic.claude-sonnet-4-20250514-v1:0"),e("li",null,"留空将使用系统配置的默认模型")])])])],-1))]),e("div",null,[t[174]||(t[174]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[27]||(t[27]=o=>s.value.smallFastModel=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[$,s.value.smallFastModel]]),t[175]||(t[175]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 用于快速响应的轻量级模型,留空将使用系统默认 ",-1))])])):v("",!0),s.value.platform==="azure_openai"&&!z.value?(n(),d("div",Lr,[e("div",null,[t[176]||(t[176]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint *",-1)),x(e("input",{"onUpdate:modelValue":t[28]||(t[28]=o=>s.value.azureEndpoint=o),class:R(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":h.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",required:"",type:"url"},null,2),[[$,s.value.azureEndpoint]]),h.value.azureEndpoint?(n(),d("p",Or,c(h.value.azureEndpoint),1)):v("",!0),t[177]||(t[177]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI 资源的终结点 URL,格式:https://your-resource.openai.azure.com ",-1))]),e("div",null,[t[178]||(t[178]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),x(e("input",{"onUpdate:modelValue":t[29]||(t[29]=o=>s.value.apiVersion=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[$,s.value.apiVersion]]),t[179]||(t[179]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI API 版本,默认使用最新稳定版本 2024-02-01 ",-1))]),e("div",null,[t[180]||(t[180]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称 *",-1)),x(e("input",{"onUpdate:modelValue":t[30]||(t[30]=o=>s.value.deploymentName=o),class:R(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":h.value.deploymentName}]),placeholder:"gpt-4",required:"",type:"text"},null,2),[[$,s.value.deploymentName]]),h.value.deploymentName?(n(),d("p",jr,c(h.value.deploymentName),1)):v("",!0),t[181]||(t[181]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Azure OpenAI Studio 中创建的部署名称 ",-1))]),e("div",null,[t[182]||(t[182]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),x(e("input",{"onUpdate:modelValue":t[31]||(t[31]=o=>s.value.apiKey=o),class:R(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":h.value.apiKey}]),placeholder:"请输入 Azure OpenAI API Key",required:"",type:"password"},null,2),[[$,s.value.apiKey]]),h.value.apiKey?(n(),d("p",Dr,c(h.value.apiKey),1)):v("",!0),t[183]||(t[183]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Azure 门户获取的 API 密钥 ",-1))]),e("div",null,[t[184]||(t[184]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",_r,[(n(),d(fe,null,we(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],o=>e("label",{key:o,class:"flex cursor-pointer items-center"},[x(e("input",{"onUpdate:modelValue":t[32]||(t[32]=B=>s.value.supportedModels=B),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:o},null,8,Er),[[ge,s.value.supportedModels]]),e("span",Wr,c(o),1)])),64))]),t[185]||(t[185]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 选择此部署支持的模型类型 ",-1))])])):v("",!0),s.value.platform==="bedrock"&&!z.value?(n(),d("div",Nr,[e("div",null,[t[190]||(t[190]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",qr,[e("label",Gr,[x(e("input",{"onUpdate:modelValue":t[33]||(t[33]=o=>s.value.enableRateLimit=o),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ge,s.value.enableRateLimit]]),t[186]||(t[186]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[187]||(t[187]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),d("div",Fr,[t[188]||(t[188]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),x(e("input",{"onUpdate:modelValue":t[34]||(t[34]=o=>s.value.rateLimitDuration=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[$,s.value.rateLimitDuration,void 0,{number:!0}]]),t[189]||(t[189]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):v("",!0)])])):v("",!0),(s.value.platform==="claude-console"||s.value.platform==="ccr")&&!z.value?(n(),d("div",Qr,[e("div",null,[t[191]||(t[191]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),x(e("input",{"onUpdate:modelValue":t[35]||(t[35]=o=>s.value.apiUrl=o),class:R(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":h.value.apiUrl}]),placeholder:"例如:https://api.example.com",required:"",type:"text"},null,2),[[$,s.value.apiUrl]]),h.value.apiUrl?(n(),d("p",Br,c(h.value.apiUrl),1)):v("",!0)]),e("div",null,[t[192]||(t[192]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),x(e("input",{"onUpdate:modelValue":t[36]||(t[36]=o=>s.value.apiKey=o),class:R(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":h.value.apiKey}]),placeholder:"请输入API Key",required:"",type:"password"},null,2),[[$,s.value.apiKey]]),h.value.apiKey?(n(),d("p",Hr,c(h.value.apiKey),1)):v("",!0)]),e("div",Jr,[e("div",null,[t[193]||(t[193]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),x(e("input",{"onUpdate:modelValue":t[37]||(t[37]=o=>s.value.dailyQuota=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[$,s.value.dailyQuota,void 0,{number:!0}]]),t[194]||(t[194]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[195]||(t[195]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),x(e("input",{"onUpdate:modelValue":t[38]||(t[38]=o=>s.value.quotaResetTime=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[$,s.value.quotaResetTime]]),t[196]||(t[196]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 每日自动重置额度的时间 ",-1))])]),e("div",null,[t[200]||(t[200]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型映射表 (可选)",-1)),t[201]||(t[201]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),I(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",Yr,[(n(!0),d(fe,null,we(ae.value,(o,B)=>(n(),d("div",{key:B,class:"flex items-center gap-2"},[x(e("input",{"onUpdate:modelValue":q=>o.from=q,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,Zr),[[$,o.from]]),t[198]||(t[198]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),x(e("input",{"onUpdate:modelValue":q=>o.to=q,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"映射后的模型名称",type:"text"},null,8,Xr),[[$,o.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:q=>ut(B)},t[197]||(t[197]=[e("i",{class:"fas fa-trash"},null,-1)]),8,el)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300",type:"button",onClick:tt},t[199]||(t[199]=[e("i",{class:"fas fa-plus mr-2"},null,-1),I(" 添加模型映射 ",-1)])),e("div",tl,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:t[39]||(t[39]=o=>he("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),e("button",{class:"rounded-lg bg-purple-100 px-3 py-1 text-xs text-purple-700 transition-colors hover:bg-purple-200 dark:bg-purple-900/30 dark:text-purple-400 dark:hover:bg-purple-900/50",type:"button",onClick:t[40]||(t[40]=o=>he("claude-opus-4-1-20250805","claude-opus-4-1-20250805"))}," + Opus 4.1 "),e("button",{class:"rounded-lg bg-green-100 px-3 py-1 text-xs text-green-700 transition-colors hover:bg-green-200 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",type:"button",onClick:t[41]||(t[41]=o=>he("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:hover:bg-orange-900/50",type:"button",onClick:t[42]||(t[42]=o=>he("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus 4.1 → Sonnet 4 ")]),t[202]||(t[202]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空表示支持所有模型。如果指定模型,请求中的模型不在列表内将不会调度到此账号 ",-1))]),e("div",null,[t[203]||(t[203]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[43]||(t[43]=o=>s.value.userAgent=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[$,s.value.userAgent]]),t[204]||(t[204]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[209]||(t[209]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",sl,[e("label",al,[x(e("input",{"onUpdate:modelValue":t[44]||(t[44]=o=>s.value.enableRateLimit=o),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ge,s.value.enableRateLimit]]),t[205]||(t[205]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[206]||(t[206]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),d("div",rl,[t[207]||(t[207]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),x(e("input",{"onUpdate:modelValue":t[45]||(t[45]=o=>s.value.rateLimitDuration=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[$,s.value.rateLimitDuration,void 0,{number:!0}]]),t[208]||(t[208]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):v("",!0)])])):v("",!0),s.value.platform==="openai-responses"&&!z.value?(n(),d("div",ll,[e("div",null,[t[210]||(t[210]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),x(e("input",{"onUpdate:modelValue":t[46]||(t[46]=o=>s.value.baseApi=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"https://api.example.com/v1",required:"",type:"url"},null,512),[[$,s.value.baseApi]]),t[211]||(t[211]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方 OpenAI 兼容 API 的基础地址,不要包含具体路径 ",-1))]),e("div",null,[t[212]||(t[212]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",ol,[x(e("input",{"onUpdate:modelValue":t[47]||(t[47]=o=>s.value.apiKey=o),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"sk-xxxxxxxxxxxx",required:"",type:Q.value?"text":"password"},null,8,nl),[[kt,s.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[48]||(t[48]=o=>Q.value=!Q.value)},[e("i",{class:R(Q.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[213]||(t[213]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方服务提供的 API 密钥 ",-1))]),e("div",null,[t[214]||(t[214]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[49]||(t[49]=o=>s.value.userAgent=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传原始请求的 User-Agent",type:"text"},null,512),[[$,s.value.userAgent]]),t[215]||(t[215]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可选项。如果设置,所有请求将使用此 User-Agent;否则透传客户端的 User-Agent ",-1))]),x(e("input",{"onUpdate:modelValue":t[50]||(t[50]=o=>s.value.rateLimitDuration=o),type:"hidden",value:"60"},null,512),[[$,s.value.rateLimitDuration,void 0,{number:!0}]])])):v("",!0),s.value.platform==="claude"?(n(),d("div",il,[t[218]||(t[218]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",dl,[e("label",ul,[x(e("input",{"onUpdate:modelValue":t[51]||(t[51]=o=>s.value.subscriptionType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[ee,s.value.subscriptionType]]),t[216]||(t[216]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",pl,[x(e("input",{"onUpdate:modelValue":t[52]||(t[52]=o=>s.value.subscriptionType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[ee,s.value.subscriptionType]]),t[217]||(t[217]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[219]||(t[219]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),I(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):v("",!0),s.value.platform==="claude"?(n(),d("div",gl,[e("label",ml,[x(e("input",{"onUpdate:modelValue":t[53]||(t[53]=o=>s.value.autoStopOnWarning=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ge,s.value.autoStopOnWarning]]),t[220]||(t[220]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 5小时使用量接近限制时自动停止调度 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当系统检测到账户接近5小时使用限制时,自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。 ")],-1))])])):v("",!0),s.value.platform==="claude"?(n(),d("div",yl,[e("label",xl,[x(e("input",{"onUpdate:modelValue":t[54]||(t[54]=o=>s.value.useUnifiedUserAgent=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ge,s.value.useUnifiedUserAgent]]),e("div",fl,[t[222]||(t[222]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[223]||(t[223]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),E.value?(n(),d("div",cl,[e("div",bl,[e("p",vl," 💡 当前统一版本:"+c(E.value),1),e("button",{class:"ml-2 text-xs text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300",disabled:k.value,type:"button",onClick:st},[k.value?(n(),d("div",hl)):(n(),d("i",wl)),I(" "+c(k.value?"清除中...":"清除缓存"),1)],8,kl)])])):(n(),d("div",$l,t[221]||(t[221]=[e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," ⏳ 等待从 Claude Code 客户端捕获 User-Agent ",-1),e("p",{class:"mt-1 text-xs text-gray-400 dark:text-gray-500"}," 💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户, 或联系开发者检查 User-Agent 格式是否发生变化 ",-1)])))])])])):v("",!0),s.value.platform==="claude"?(n(),d("div",Al,[e("label",Cl,[x(e("input",{"onUpdate:modelValue":t[55]||(t[55]=o=>s.value.useUnifiedClientId=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:Oe},null,544),[[ge,s.value.useUnifiedClientId]]),e("div",Ul,[t[227]||(t[227]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[228]||(t[228]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),s.value.useUnifiedClientId?(n(),d("div",Il,[e("div",Tl,[e("div",{class:"mb-2 flex items-center justify-between"},[t[225]||(t[225]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"客户端标识 ID",-1)),e("button",{class:"rounded-md bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:Le},t[224]||(t[224]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),I(" 重新生成 ",-1)]))]),e("div",Vl,[e("code",Rl,[e("span",Kl,c(s.value.unifiedClientId.substring(0,8)),1),e("span",Sl,c(s.value.unifiedClientId.substring(8,56)),1),e("span",zl,c(s.value.unifiedClientId.substring(56)),1)])]),t[226]||(t[226]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),I(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):v("",!0)])])])):v("",!0),e("div",null,[t[229]||(t[229]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),x(e("input",{"onUpdate:modelValue":t[56]||(t[56]=o=>s.value.priority=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高,默认50",type:"number"},null,512),[[$,s.value.priority,void 0,{number:!0}]]),t[230]||(t[230]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),s.value.addType==="manual"&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"?(n(),d("div",Ml,[e("div",Pl,[t[236]||(t[236]=e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-info text-sm text-white"})],-1)),e("div",null,[t[234]||(t[234]=e("h5",{class:"mb-2 font-semibold text-blue-900 dark:text-blue-300"}," 手动输入 Token ",-1)),s.value.platform==="claude"?(n(),d("p",Ll," 请输入有效的 Claude Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="gemini"?(n(),d("p",Ol," 请输入有效的 Gemini Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="openai"?(n(),d("p",jl," 请输入有效的 OpenAI Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):v("",!0),e("div",Dl,[t[233]||(t[233]=e("p",{class:"mb-1 text-sm font-medium text-blue-900 dark:text-blue-300"},[e("i",{class:"fas fa-folder-open mr-1"}),I(" 获取 Access Token 的方法: ")],-1)),s.value.platform==="claude"?(n(),d("p",_l,t[231]||(t[231]=[I(" 请从已登录 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),I(" 文件中的凭证, 请勿使用 Claude 官网 API Keys 页面的密钥。 ",-1)]))):s.value.platform==="gemini"?(n(),d("p",El,t[232]||(t[232]=[I(" 请从已登录 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),I(" 文件中的凭证。 ",-1)]))):s.value.platform==="openai"?(n(),d("p",Wl," 请从已登录 OpenAI 账户的机器上获取认证凭证, 或通过 OAuth 授权流程获取 Access Token。 ")):v("",!0)]),t[235]||(t[235]=e("p",{class:"text-xs text-blue-600 dark:text-blue-400"}," 💡 如果未填写 Refresh Token,Token 过期后需要手动更新。 ",-1))])]),s.value.platform==="openai"?(n(),d("div",Nl,[t[237]||(t[237]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":t[57]||(t[57]=o=>s.value.accessToken=o),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"可选:如果不填写,系统会自动通过 Refresh Token 获取...",rows:"4"},null,512),[[$,s.value.accessToken]]),t[238]||(t[238]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),I(" Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。 ")],-1))])):(n(),d("div",ql,[t[239]||(t[239]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token *",-1)),x(e("textarea",{"onUpdate:modelValue":t[58]||(t[58]=o=>s.value.accessToken=o),class:R(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":h.value.accessToken}]),placeholder:"请输入 Access Token...",required:"",rows:"4"},null,2),[[$,s.value.accessToken]]),h.value.accessToken?(n(),d("p",Gl,c(h.value.accessToken),1)):v("",!0)])),s.value.platform==="openai"?(n(),d("div",Fl,[t[240]||(t[240]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token *",-1)),x(e("textarea",{"onUpdate:modelValue":t[59]||(t[59]=o=>s.value.refreshToken=o),class:R(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":h.value.refreshToken}]),placeholder:"请输入 Refresh Token(必填)...",required:"",rows:"4"},null,2),[[$,s.value.refreshToken]]),h.value.refreshToken?(n(),d("p",Ql,c(h.value.refreshToken),1)):v("",!0),t[241]||(t[241]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),I(" 系统将使用 Refresh Token 自动获取 Access Token 和用户信息 ")],-1))])):(n(),d("div",Bl,[t[242]||(t[242]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":t[60]||(t[60]=o=>s.value.refreshToken=o),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"请输入 Refresh Token...",rows:"4"},null,512),[[$,s.value.refreshToken]])]))])):v("",!0),ke(wt,{modelValue:s.value.proxy,"onUpdate:modelValue":t[61]||(t[61]=o=>s.value.proxy=o)},null,8,["modelValue"]),e("div",Hl,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[62]||(t[62]=o=>u.$emit("close"))}," 取消 "),(s.value.addType==="oauth"||s.value.addType==="setup-token")&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"?(n(),d("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:_.value,type:"button",onClick:Fe}," 下一步 ",8,Jl)):(n(),d("button",{key:1,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:_.value,type:"button",onClick:Xe},[_.value?(n(),d("div",Zl)):v("",!0),I(" "+c(_.value?"创建中...":"创建"),1)],8,Yl))])])])):v("",!0),D.value===2&&s.value.addType==="oauth"?(n(),Ce(Xs,{key:2,platform:s.value.platform,proxy:s.value.proxy,onBack:t[63]||(t[63]=o=>D.value=1),onSuccess:Be},null,8,["platform","proxy"])):v("",!0),D.value===2&&s.value.addType==="setup-token"?(n(),d("div",Xl,[s.value.platform==="claude"?(n(),d("div",eo,[e("div",to,[e("div",so,[t[254]||(t[254]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-key text-white"})],-1)),e("div",ao,[t[252]||(t[252]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"}," Claude Setup Token 授权 ",-1)),t[253]||(t[253]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤通过 Setup Token 完成 Claude 账户的授权: ",-1)),e("div",ro,[e("div",lo,[e("div",oo,[t[245]||(t[245]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",no,[t[244]||(t[244]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),i.value?(n(),d("div",go,[e("div",mo,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:i.value},null,8,yo),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:nt},[e("i",{class:R(L.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:Ze},t[243]||(t[243]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),I("重新生成 ",-1)]))])):(n(),d("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:Y.value,onClick:Qe},[Y.value?(n(),d("div",po)):(n(),d("i",uo)),I(" "+c(Y.value?"生成中...":"生成 Setup Token 授权链接"),1)],8,io))])])]),t[251]||(t[251]=e("div",{class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},[e("div",{class:"flex items-start gap-3"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 2 "),e("div",{class:"flex-1"},[e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 在浏览器中打开链接并完成授权 "),e("p",{class:"mb-2 text-sm text-blue-700 dark:text-blue-300"}," 请在新标签页中打开授权链接,登录您的 Claude 账户并授权 Claude Code。 "),e("div",{class:"rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"},[e("p",{class:"text-xs text-yellow-800 dark:text-yellow-300"},[e("i",{class:"fas fa-exclamation-triangle mr-1"}),e("strong",null,"注意:"),I("如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 ")])])])])],-1)),e("div",xo,[e("div",fo,[t[250]||(t[250]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",co,[t[248]||(t[248]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),t[249]||(t[249]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 授权完成后,从返回页面复制 Authorization Code,并粘贴到下方输入框: ",-1)),e("div",bo,[e("div",null,[t[246]||(t[246]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),I("Authorization Code ")],-1)),x(e("textarea",{"onUpdate:modelValue":t[64]||(t[64]=o=>y.value=o),class:"form-input w-full resize-none border-gray-300 font-mono text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"粘贴从Claude Code授权页面获取的Authorization Code...",rows:"3"},null,512),[[$,y.value]])]),t[247]||(t[247]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),I(" 请粘贴从Claude Code授权页面复制的Authorization Code ")],-1))])])])])])])])])])):v("",!0),e("div",vo,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[65]||(t[65]=o=>D.value=1)}," 上一步 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!Ne.value||P.value,type:"button",onClick:it},[P.value?(n(),d("div",wo)):v("",!0),I(" "+c(P.value?"验证中...":"完成授权"),1)],8,ko)])])):v("",!0),z.value?(n(),d("div",ho,[e("div",null,[t[255]||(t[255]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),x(e("input",{"onUpdate:modelValue":t[66]||(t[66]=o=>s.value.name=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,512),[[$,s.value.name]])]),e("div",null,[t[256]||(t[256]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":t[67]||(t[67]=o=>s.value.description=o),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[$,s.value.description]])]),e("div",null,[t[260]||(t[260]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",$o,[e("label",Ao,[x(e("input",{"onUpdate:modelValue":t[68]||(t[68]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[ee,s.value.accountType]]),t[257]||(t[257]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",Co,[x(e("input",{"onUpdate:modelValue":t[69]||(t[69]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[ee,s.value.accountType]]),t[258]||(t[258]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",Uo,[x(e("input",{"onUpdate:modelValue":t[70]||(t[70]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[ee,s.value.accountType]]),t[259]||(t[259]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[261]||(t[261]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),s.value.accountType==="group"?(n(),d("div",Io,[t[263]||(t[263]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",To,[e("div",Vo,[e("div",Ro,[g.value.length===0?(n(),d("div",Ko," 暂无可用分组 ")):v("",!0),(n(!0),d(fe,null,we(g.value,o=>(n(),d("label",{key:o.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[x(e("input",{"onUpdate:modelValue":t[71]||(t[71]=B=>s.value.groupIds=B),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:o.id},null,8,So),[[ge,s.value.groupIds]]),e("span",zo,c(o.name)+" ("+c(o.memberCount||0)+" 个成员) ",1)]))),128)),e("div",{class:"border-t pt-2 dark:border-gray-600"},[e("button",{class:"flex items-center gap-2 text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",type:"button",onClick:dt},t[262]||(t[262]=[e("i",{class:"fas fa-plus"},null,-1),I(" 新建分组 ",-1)]))])])]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:be},[e("i",{class:R(["fas fa-sync-alt",{"animate-spin":Me.value}])},null,2)])])])):v("",!0),s.value.platform==="gemini"?(n(),d("div",Mo,[t[264]||(t[264]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[72]||(t[72]=o=>s.value.projectId=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[$,s.value.projectId]]),t[265]||(t[265]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," Google Cloud/Workspace 账号可能需要提供项目 ID ",-1))])):v("",!0),s.value.platform==="claude"?(n(),d("div",Po,[t[268]||(t[268]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",Lo,[e("label",Oo,[x(e("input",{"onUpdate:modelValue":t[73]||(t[73]=o=>s.value.subscriptionType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[ee,s.value.subscriptionType]]),t[266]||(t[266]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",jo,[x(e("input",{"onUpdate:modelValue":t[74]||(t[74]=o=>s.value.subscriptionType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[ee,s.value.subscriptionType]]),t[267]||(t[267]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[269]||(t[269]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),I(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):v("",!0),s.value.platform==="claude"?(n(),d("div",Do,[e("label",_o,[x(e("input",{"onUpdate:modelValue":t[75]||(t[75]=o=>s.value.autoStopOnWarning=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ge,s.value.autoStopOnWarning]]),t[270]||(t[270]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 5小时使用量接近限制时自动停止调度 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当系统检测到账户接近5小时使用限制时,自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。 ")],-1))])])):v("",!0),s.value.platform==="claude"?(n(),d("div",Eo,[e("label",Wo,[x(e("input",{"onUpdate:modelValue":t[76]||(t[76]=o=>s.value.useUnifiedUserAgent=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ge,s.value.useUnifiedUserAgent]]),e("div",No,[t[272]||(t[272]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[273]||(t[273]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),E.value?(n(),d("div",qo,[e("div",Go,[e("p",Fo," 💡 当前统一版本:"+c(E.value),1),e("button",{class:"ml-2 text-xs text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300",disabled:k.value,type:"button",onClick:st},[k.value?(n(),d("div",Ho)):(n(),d("i",Bo)),I(" "+c(k.value?"清除中...":"清除缓存"),1)],8,Qo)])])):(n(),d("div",Jo,t[271]||(t[271]=[e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," ⏳ 等待从 Claude Code 客户端捕获 User-Agent ",-1),e("p",{class:"mt-1 text-xs text-gray-400 dark:text-gray-500"}," 💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户, 或联系开发者检查 User-Agent 格式是否发生变化 ",-1)])))])])])):v("",!0),s.value.platform==="claude"?(n(),d("div",Yo,[e("label",Zo,[x(e("input",{"onUpdate:modelValue":t[77]||(t[77]=o=>s.value.useUnifiedClientId=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:Oe},null,544),[[ge,s.value.useUnifiedClientId]]),e("div",Xo,[t[277]||(t[277]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[278]||(t[278]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),s.value.useUnifiedClientId?(n(),d("div",en,[e("div",tn,[e("div",{class:"mb-2 flex items-center justify-between"},[t[275]||(t[275]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"客户端标识 ID",-1)),e("button",{class:"rounded-md bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:Le},t[274]||(t[274]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),I(" 重新生成 ",-1)]))]),e("div",sn,[e("code",an,[e("span",rn,c(s.value.unifiedClientId.substring(0,8)),1),e("span",ln,c(s.value.unifiedClientId.substring(8,56)),1),e("span",on,c(s.value.unifiedClientId.substring(56)),1)])]),t[276]||(t[276]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),I(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):v("",!0)])])])):v("",!0),e("div",null,[t[279]||(t[279]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),x(e("input",{"onUpdate:modelValue":t[78]||(t[78]=o=>s.value.priority=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高",type:"number"},null,512),[[$,s.value.priority,void 0,{number:!0}]]),t[280]||(t[280]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),s.value.platform==="claude-console"||s.value.platform==="ccr"?(n(),d("div",nn,[e("div",null,[t[281]||(t[281]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API URL",-1)),x(e("input",{"onUpdate:modelValue":t[79]||(t[79]=o=>s.value.apiUrl=o),class:"form-input w-full",placeholder:"例如:https://api.example.com",required:"",type:"text"},null,512),[[$,s.value.apiUrl]])]),e("div",null,[t[282]||(t[282]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API Key",-1)),x(e("input",{"onUpdate:modelValue":t[80]||(t[80]=o=>s.value.apiKey=o),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[$,s.value.apiKey]]),t[283]||(t[283]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",dn,[e("div",null,[t[284]||(t[284]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),x(e("input",{"onUpdate:modelValue":t[81]||(t[81]=o=>s.value.dailyQuota=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[$,s.value.dailyQuota,void 0,{number:!0}]]),t[285]||(t[285]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[286]||(t[286]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),x(e("input",{"onUpdate:modelValue":t[82]||(t[82]=o=>s.value.quotaResetTime=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[$,s.value.quotaResetTime]]),t[287]||(t[287]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),z.value&&s.value.dailyQuota>0?(n(),d("div",un,[e("div",pn,[t[288]||(t[288]=e("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"}," 今日使用情况 ",-1)),e("span",gn," $"+c(qe().toFixed(4))+" / $"+c(s.value.dailyQuota.toFixed(2)),1)]),e("div",mn,[e("div",{class:R(["absolute left-0 top-0 h-full rounded-full transition-all",Pe.value>=90?"bg-red-500":Pe.value>=70?"bg-yellow-500":"bg-green-500"]),style:Ke({width:`${Math.min(Pe.value,100)}%`})},null,6)]),e("div",yn,[e("span",xn," 剩余: $"+c(Math.max(0,s.value.dailyQuota-qe()).toFixed(2)),1),e("span",fn,c(Pe.value.toFixed(1))+"% 已使用 ",1)])])):v("",!0),e("div",null,[t[292]||(t[292]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"模型映射表 (可选)",-1)),t[293]||(t[293]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3"},[e("p",{class:"text-xs text-blue-700"},[e("i",{class:"fas fa-info-circle mr-1"}),I(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",cn,[(n(!0),d(fe,null,we(ae.value,(o,B)=>(n(),d("div",{key:B,class:"flex items-center gap-2"},[x(e("input",{"onUpdate:modelValue":q=>o.from=q,class:"form-input flex-1",placeholder:"原始模型名称",type:"text"},null,8,bn),[[$,o.from]]),t[290]||(t[290]=e("i",{class:"fas fa-arrow-right text-gray-400"},null,-1)),x(e("input",{"onUpdate:modelValue":q=>o.to=q,class:"form-input flex-1",placeholder:"映射后的模型名称",type:"text"},null,8,vn),[[$,o.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50",type:"button",onClick:q=>ut(B)},t[289]||(t[289]=[e("i",{class:"fas fa-trash"},null,-1)]),8,kn)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700",type:"button",onClick:tt},t[291]||(t[291]=[e("i",{class:"fas fa-plus mr-2"},null,-1),I(" 添加模型映射 ",-1)])),e("div",wn,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200",type:"button",onClick:t[83]||(t[83]=o=>he("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),e("button",{class:"rounded-lg bg-purple-100 px-3 py-1 text-xs text-purple-700 transition-colors hover:bg-purple-200",type:"button",onClick:t[84]||(t[84]=o=>he("claude-opus-4-1-20250805","claude-opus-4-1-20250805"))}," + Opus 4.1 "),e("button",{class:"rounded-lg bg-green-100 px-3 py-1 text-xs text-green-700 transition-colors hover:bg-green-200",type:"button",onClick:t[85]||(t[85]=o=>he("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200",type:"button",onClick:t[86]||(t[86]=o=>he("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus 4.1 → Sonnet 4 ")]),t[294]||(t[294]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空表示支持所有模型。如果指定模型,请求中的模型不在列表内将不会调度到此账号 ",-1))]),e("div",null,[t[295]||(t[295]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[87]||(t[87]=o=>s.value.userAgent=o),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[$,s.value.userAgent]]),t[296]||(t[296]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[301]||(t[301]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",hn,[e("label",$n,[x(e("input",{"onUpdate:modelValue":t[88]||(t[88]=o=>s.value.enableRateLimit=o),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[ge,s.value.enableRateLimit]]),t[297]||(t[297]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[298]||(t[298]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),d("div",An,[t[299]||(t[299]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),x(e("input",{"onUpdate:modelValue":t[89]||(t[89]=o=>s.value.rateLimitDuration=o),class:"form-input w-full",min:"1",type:"number"},null,512),[[$,s.value.rateLimitDuration,void 0,{number:!0}]]),t[300]||(t[300]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):v("",!0)])])):v("",!0),s.value.platform==="openai-responses"?(n(),d("div",Cn,[e("div",null,[t[302]||(t[302]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 基础地址",-1)),x(e("input",{"onUpdate:modelValue":t[90]||(t[90]=o=>s.value.baseApi=o),class:"form-input w-full",placeholder:"https://api.example.com/v1",type:"url"},null,512),[[$,s.value.baseApi]])]),e("div",null,[t[303]||(t[303]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 密钥",-1)),e("div",Un,[x(e("input",{"onUpdate:modelValue":t[91]||(t[91]=o=>s.value.apiKey=o),class:"form-input w-full pr-10",placeholder:"留空表示不更新",type:Q.value?"text":"password"},null,8,In),[[kt,s.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600",type:"button",onClick:t[92]||(t[92]=o=>Q.value=!Q.value)},[e("i",{class:R(Q.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[304]||(t[304]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",null,[t[305]||(t[305]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent",-1)),x(e("input",{"onUpdate:modelValue":t[93]||(t[93]=o=>s.value.userAgent=o),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[$,s.value.userAgent]]),t[306]||(t[306]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),x(e("input",{"onUpdate:modelValue":t[94]||(t[94]=o=>s.value.rateLimitDuration=o),type:"hidden"},null,512),[[$,s.value.rateLimitDuration,void 0,{number:!0}]]),e("div",Tn,[e("div",null,[t[307]||(t[307]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),x(e("input",{"onUpdate:modelValue":t[95]||(t[95]=o=>s.value.dailyQuota=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[$,s.value.dailyQuota,void 0,{number:!0}]])]),e("div",null,[t[308]||(t[308]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),x(e("input",{"onUpdate:modelValue":t[96]||(t[96]=o=>s.value.quotaResetTime=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",type:"time"},null,512),[[$,s.value.quotaResetTime]])])])])):v("",!0),s.value.platform==="bedrock"?(n(),d("div",Vn,[e("div",null,[t[309]||(t[309]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 访问密钥 ID",-1)),x(e("input",{"onUpdate:modelValue":t[97]||(t[97]=o=>s.value.accessKeyId=o),class:"form-input w-full",placeholder:"留空表示不更新",type:"text"},null,512),[[$,s.value.accessKeyId]]),t[310]||(t[310]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Access Key ID",-1))]),e("div",null,[t[311]||(t[311]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 秘密访问密钥",-1)),x(e("input",{"onUpdate:modelValue":t[98]||(t[98]=o=>s.value.secretAccessKey=o),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[$,s.value.secretAccessKey]]),t[312]||(t[312]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Secret Access Key",-1))]),e("div",null,[t[313]||(t[313]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 区域",-1)),x(e("input",{"onUpdate:modelValue":t[99]||(t[99]=o=>s.value.region=o),class:"form-input w-full",placeholder:"例如:us-east-1",type:"text"},null,512),[[$,s.value.region]]),t[314]||(t[314]=e("div",{class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600"}),e("div",{class:"text-xs text-blue-700"},[e("p",{class:"mb-1 font-medium"},"常用 AWS 区域参考:"),e("div",{class:"grid grid-cols-2 gap-1 text-xs"},[e("span",null,"• us-east-1 (美国东部)"),e("span",null,"• us-west-2 (美国西部)"),e("span",null,"• eu-west-1 (欧洲爱尔兰)"),e("span",null,"• ap-southeast-1 (新加坡)"),e("span",null,"• ap-northeast-1 (东京)"),e("span",null,"• eu-central-1 (法兰克福)")])])])],-1))]),e("div",null,[t[315]||(t[315]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"会话令牌 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[100]||(t[100]=o=>s.value.sessionToken=o),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[$,s.value.sessionToken]])]),e("div",null,[t[316]||(t[316]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"默认主模型 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[101]||(t[101]=o=>s.value.defaultModel=o),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[$,s.value.defaultModel]]),t[317]||(t[317]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1))]),e("div",null,[t[318]||(t[318]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[102]||(t[102]=o=>s.value.smallFastModel=o),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[$,s.value.smallFastModel]]),t[319]||(t[319]=e("p",{class:"mt-1 text-xs text-gray-500"},"用于快速响应的轻量级模型,留空将使用系统默认",-1))]),e("div",null,[t[324]||(t[324]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",Rn,[e("label",Kn,[x(e("input",{"onUpdate:modelValue":t[103]||(t[103]=o=>s.value.enableRateLimit=o),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[ge,s.value.enableRateLimit]]),t[320]||(t[320]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[321]||(t[321]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),d("div",Sn,[t[322]||(t[322]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),x(e("input",{"onUpdate:modelValue":t[104]||(t[104]=o=>s.value.rateLimitDuration=o),class:"form-input w-full",min:"1",type:"number"},null,512),[[$,s.value.rateLimitDuration,void 0,{number:!0}]]),t[323]||(t[323]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):v("",!0)])])):v("",!0),s.value.platform==="azure_openai"?(n(),d("div",zn,[e("div",null,[t[325]||(t[325]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint",-1)),x(e("input",{"onUpdate:modelValue":t[105]||(t[105]=o=>s.value.azureEndpoint=o),class:R(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":h.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",type:"url"},null,2),[[$,s.value.azureEndpoint]]),h.value.azureEndpoint?(n(),d("p",Mn,c(h.value.azureEndpoint),1)):v("",!0)]),e("div",null,[t[326]||(t[326]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),x(e("input",{"onUpdate:modelValue":t[106]||(t[106]=o=>s.value.apiVersion=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[$,s.value.apiVersion]]),t[327]||(t[327]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI API 版本,默认使用最新稳定版本 2024-02-01 ",-1))]),e("div",null,[t[328]||(t[328]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称",-1)),x(e("input",{"onUpdate:modelValue":t[107]||(t[107]=o=>s.value.deploymentName=o),class:R(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":h.value.deploymentName}]),placeholder:"gpt-4",type:"text"},null,2),[[$,s.value.deploymentName]]),h.value.deploymentName?(n(),d("p",Pn,c(h.value.deploymentName),1)):v("",!0)]),e("div",null,[t[329]||(t[329]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),x(e("input",{"onUpdate:modelValue":t[108]||(t[108]=o=>s.value.apiKey=o),class:R(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":h.value.apiKey}]),placeholder:"留空表示不更新",type:"password"},null,2),[[$,s.value.apiKey]]),h.value.apiKey?(n(),d("p",Ln,c(h.value.apiKey),1)):v("",!0),t[330]||(t[330]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))]),e("div",null,[t[331]||(t[331]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",On,[(n(),d(fe,null,we(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],o=>e("label",{key:o,class:"flex cursor-pointer items-center"},[x(e("input",{"onUpdate:modelValue":t[109]||(t[109]=B=>s.value.supportedModels=B),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:o},null,8,jn),[[ge,s.value.supportedModels]]),e("span",Dn,c(o),1)])),64))]),t[332]||(t[332]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"选择此部署支持的模型类型",-1))])])):v("",!0),s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"?(n(),d("div",_n,[t[335]||(t[335]=e("div",{class:"mb-4 flex items-start gap-3"},[e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-amber-500"},[e("i",{class:"fas fa-key text-sm text-white"})]),e("div",null,[e("h5",{class:"mb-2 font-semibold text-amber-900 dark:text-amber-300"},"更新 Token"),e("p",{class:"mb-2 text-sm text-amber-800 dark:text-amber-300"}," 可以更新 Access Token 和 Refresh Token。为了安全起见,不会显示当前的 Token 值。 "),e("p",{class:"text-xs text-amber-600 dark:text-amber-400"},"💡 留空表示不更新该字段。")])],-1)),e("div",En,[e("div",null,[t[333]||(t[333]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Access Token",-1)),x(e("textarea",{"onUpdate:modelValue":t[110]||(t[110]=o=>s.value.accessToken=o),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[$,s.value.accessToken]])]),e("div",null,[t[334]||(t[334]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Refresh Token",-1)),x(e("textarea",{"onUpdate:modelValue":t[111]||(t[111]=o=>s.value.refreshToken=o),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[$,s.value.refreshToken]])])])])):v("",!0),ke(wt,{modelValue:s.value.proxy,"onUpdate:modelValue":t[112]||(t[112]=o=>s.value.proxy=o)},null,8,["modelValue"]),e("div",Wn,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[113]||(t[113]=o=>u.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:_.value,type:"button",onClick:et},[_.value?(n(),d("div",qn)):v("",!0),I(" "+c(_.value?"更新中...":"更新"),1)],8,Nn)])])):v("",!0)])])):v("",!0),ke(Tt,{"cancel-text":xe(F).cancelText,"confirm-text":xe(F).confirmText,message:xe(F).message,show:xe(j),title:xe(F).title,onCancel:xe(O),onConfirm:xe(b)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),m.value?(n(),Ce(Ma,{key:1,onClose:t[114]||(t[114]=o=>m.value=!1),onRefresh:bt})):v("",!0)]))}},Ut=$t(Gn,[["__scopeId","data-v-a78f0d26"]]),Fn={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Qn={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"},Bn={class:"mb-4 flex items-center justify-between sm:mb-6"},Hn={class:"flex items-center gap-2 sm:gap-3"},Jn={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Yn={class:"space-y-6"},Zn={key:0,class:"mt-1 text-xs text-red-500"},Xn={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},ei={key:0,class:"mt-1 text-xs text-red-500"},ti={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},si=["placeholder","required"],ai={key:0,class:"mt-1 text-xs text-red-500"},ri={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},li={class:"mb-3"},oi={class:"inline-flex cursor-pointer items-center"},ni={key:0},ii={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},di={class:"mb-3 space-y-2"},ui=["onUpdate:modelValue"],pi=["onUpdate:modelValue"],gi=["onClick"],mi={class:"mt-2 flex gap-3"},yi=["disabled"],xi={key:0,class:"loading-spinner mr-2"},fi={__name:"CcrAccountForm",props:{account:{type:Object,default:null}},emits:["close","success"],setup(ie,{emit:me}){const f=ie,se=me,U=C(!0),j=Se(()=>!!f.account),F=C(!1),p=C({name:"",description:"",apiUrl:"",apiKey:"",priority:50,userAgent:"",rateLimitDuration:60,dailyQuota:0,quotaResetTime:"00:00",proxy:null,supportedModels:{}}),b=C(!0),O=C({}),z=C([]),G=()=>{const i={};for(const y of z.value){const L=(y.from||"").trim(),te=(y.to||"").trim();L&&te&&(i[L]=te)}return i},D=()=>{z.value.push({from:"",to:""})},_=i=>{z.value.splice(i,1)},Q=()=>{const i={};return(!p.value.name||p.value.name.trim().length===0)&&(i.name="名称不能为空"),(!p.value.apiUrl||p.value.apiUrl.trim().length===0)&&(i.apiUrl="API URL 不能为空"),!j.value&&(!p.value.apiKey||p.value.apiKey.trim().length===0)&&(i.apiKey="API Key 不能为空"),O.value=i,Object.keys(i).length===0},Y=async()=>{if(Q()){F.value=!0;try{if(j.value){const i={name:p.value.name,description:p.value.description,apiUrl:p.value.apiUrl,priority:p.value.priority,userAgent:p.value.userAgent,rateLimitDuration:b.value?Number(p.value.rateLimitDuration||60):0,dailyQuota:Number(p.value.dailyQuota||0),quotaResetTime:p.value.quotaResetTime||"00:00",proxy:p.value.proxy||null,supportedModels:G()};p.value.apiKey&&p.value.apiKey.trim().length>0&&(i.apiKey=p.value.apiKey);const y=await K.put(`/admin/ccr-accounts/${f.account.id}`,i);y.success?se("success"):S(y.message||"保存失败","error")}else{const i={name:p.value.name,description:p.value.description,apiUrl:p.value.apiUrl,apiKey:p.value.apiKey,priority:Number(p.value.priority||50),supportedModels:G(),userAgent:p.value.userAgent,rateLimitDuration:b.value?Number(p.value.rateLimitDuration||60):0,proxy:p.value.proxy,accountType:"shared",dailyQuota:Number(p.value.dailyQuota||0),quotaResetTime:p.value.quotaResetTime||"00:00"},y=await K.post("/admin/ccr-accounts",i);y.success?se("success"):S(y.message||"创建失败","error")}}catch(i){S(i.message||"请求失败","error")}finally{F.value=!1}}},P=()=>{if(!f.account)return;const i=f.account;p.value.name=i.name||"",p.value.description=i.description||"",p.value.apiUrl=i.apiUrl||"",p.value.priority=Number(i.priority||50),p.value.userAgent=i.userAgent||"",p.value.rateLimitDuration=Number(i.rateLimitDuration||60),p.value.dailyQuota=Number(i.dailyQuota||0),p.value.quotaResetTime=i.quotaResetTime||"00:00",p.value.proxy=i.proxy||null,b.value=p.value.rateLimitDuration>0,z.value=[];const y=i.supportedModels||{};if(y&&typeof y=="object")for(const L of Object.keys(y))z.value.push({from:L,to:y[L]})};return ct(()=>{j.value&&P()}),Z(()=>f.account,()=>{j.value&&P()}),(i,y)=>(n(),Ce(ht,{to:"body"},[U.value?(n(),d("div",Fn,[e("div",Qn,[e("div",Bn,[e("div",Hn,[y[13]||(y[13]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-teal-500 to-emerald-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-code-branch text-sm text-white sm:text-base"})],-1)),e("h3",Jn,c(j.value?"编辑 CCR 账户":"添加 CCR 账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:y[0]||(y[0]=L=>i.$emit("close"))},y[14]||(y[14]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",Yn,[e("div",null,[y[15]||(y[15]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称 *",-1)),x(e("input",{"onUpdate:modelValue":y[1]||(y[1]=L=>p.value.name=L),class:R(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":O.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[$,p.value.name]]),O.value.name?(n(),d("p",Zn,c(O.value.name),1)):v("",!0)]),e("div",null,[y[16]||(y[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":y[2]||(y[2]=L=>p.value.description=L),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"账户用途说明...",rows:"3"},null,512),[[$,p.value.description]])]),e("div",Xn,[e("div",null,[y[17]||(y[17]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),x(e("input",{"onUpdate:modelValue":y[3]||(y[3]=L=>p.value.apiUrl=L),class:R(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":O.value.apiUrl}]),placeholder:"例如:https://api.example.com/v1/messages",required:"",type:"text"},null,2),[[$,p.value.apiUrl]]),O.value.apiUrl?(n(),d("p",ei,c(O.value.apiUrl),1)):v("",!0)]),e("div",null,[e("label",ti,"API Key "+c(j.value?"(留空不更新)":"*"),1),x(e("input",{"onUpdate:modelValue":y[4]||(y[4]=L=>p.value.apiKey=L),class:R(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":O.value.apiKey}]),placeholder:j.value?"留空表示不更新":"必填",required:!j.value,type:"password"},null,10,si),[[$,p.value.apiKey]]),O.value.apiKey?(n(),d("p",ai,c(O.value.apiKey),1)):v("",!0)])]),e("div",ri,[e("div",null,[y[18]||(y[18]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"优先级",-1)),x(e("input",{"onUpdate:modelValue":y[5]||(y[5]=L=>p.value.priority=L),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:"100",min:"1",placeholder:"默认50,数字越小优先级越高",type:"number"},null,512),[[$,p.value.priority,void 0,{number:!0}]]),y[19]||(y[19]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议范围:1-100,数字越小优先级越高 ",-1))]),e("div",null,[y[20]||(y[20]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),x(e("input",{"onUpdate:modelValue":y[6]||(y[6]=L=>p.value.userAgent=L),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[$,p.value.userAgent]])])]),e("div",null,[y[24]||(y[24]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",li,[e("label",oi,[x(e("input",{"onUpdate:modelValue":y[7]||(y[7]=L=>b.value=L),class:"mr-2 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ge,b.value]]),y[21]||(y[21]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制(429 时暂停调度)",-1))])]),b.value?(n(),d("div",ni,[y[22]||(y[22]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),x(e("input",{"onUpdate:modelValue":y[8]||(y[8]=L=>p.value.rateLimitDuration=L),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[$,p.value.rateLimitDuration,void 0,{number:!0}]]),y[23]||(y[23]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):v("",!0)]),e("div",ii,[e("div",null,[y[25]||(y[25]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日额度限制 ($)",-1)),x(e("input",{"onUpdate:modelValue":y[9]||(y[9]=L=>p.value.dailyQuota=L),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[$,p.value.dailyQuota,void 0,{number:!0}]]),y[26]||(y[26]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[y[27]||(y[27]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"额度重置时间",-1)),x(e("input",{"onUpdate:modelValue":y[10]||(y[10]=L=>p.value.quotaResetTime=L),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[$,p.value.quotaResetTime]]),y[28]||(y[28]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),e("div",null,[y[32]||(y[32]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型映射表 (可选)",-1)),y[33]||(y[33]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),I(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",di,[(n(!0),d(fe,null,we(z.value,(L,te)=>(n(),d("div",{key:te,class:"flex items-center gap-2"},[x(e("input",{"onUpdate:modelValue":E=>L.from=E,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,ui),[[$,L.from]]),y[30]||(y[30]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),x(e("input",{"onUpdate:modelValue":E=>L.to=E,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"映射后的模型名称",type:"text"},null,8,pi),[[$,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:E=>_(te)},y[29]||(y[29]=[e("i",{class:"fas fa-trash"},null,-1)]),8,gi)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300",type:"button",onClick:D},y[31]||(y[31]=[e("i",{class:"fas fa-plus mr-2"},null,-1),I(" 添加模型映射 ",-1)]))]),e("div",null,[ke(wt,{modelValue:p.value.proxy,"onUpdate:modelValue":y[11]||(y[11]=L=>p.value.proxy=L)},null,8,["modelValue"])]),e("div",mi,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:y[12]||(y[12]=L=>i.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:F.value,type:"button",onClick:Y},[F.value?(n(),d("div",xi)):v("",!0),I(" "+c(F.value?j.value?"保存中...":"创建中...":j.value?"保存":"创建"),1)],8,yi)])])])])):v("",!0)]))}},It=$t(fi,[["__scopeId","data-v-8652672a"]]),ci={class:"accounts-container"},bi={class:"card p-4 sm:p-6"},vi={class:"mb-4 flex flex-col gap-4 sm:mb-6"},ki={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},wi={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},hi={class:"group relative min-w-[160px]"},$i={class:"group relative min-w-[140px]"},Ai={class:"group relative min-w-[160px]"},Ci={class:"relative"},Ui=["disabled"],Ii={key:0,class:"py-12 text-center"},Ti={key:1,class:"py-12 text-center"},Vi={key:2,class:"table-container hidden md:block"},Ri={class:"w-full table-fixed"},Ki={class:"bg-gray-50/80 backdrop-blur-sm dark:bg-gray-700/80"},Si={key:1,class:"fas fa-sort ml-1 text-gray-400"},zi={key:1,class:"fas fa-sort ml-1 text-gray-400"},Mi={key:1,class:"fas fa-sort ml-1 text-gray-400"},Pi={key:1,class:"fas fa-sort ml-1 text-gray-400"},Li={class:"w-[10%] min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},Oi={class:"flex items-center gap-2"},ji={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Di={class:"px-3 py-4"},_i={class:"flex items-center"},Ei={class:"min-w-0"},Wi={class:"flex items-center gap-2"},Ni=["title"],qi={key:0,class:"inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-800"},Gi={key:1,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800"},Fi={key:2,class:"inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800"},Qi={key:0,class:"my-2 flex flex-wrap items-center gap-2"},Bi=["title"],Hi=["title"],Ji={class:"px-3 py-4"},Yi={class:"flex items-center gap-1"},Zi={key:0,class:"flex items-center gap-1.5 rounded-lg border border-yellow-200 bg-gradient-to-r from-yellow-100 to-amber-100 px-2.5 py-1"},Xi={class:"text-xs font-medium text-yellow-700"},ed={key:1,class:"flex items-center gap-1.5 rounded-lg border border-purple-200 bg-gradient-to-r from-purple-100 to-pink-100 px-2.5 py-1"},td={key:2,class:"flex items-center gap-1.5 rounded-lg border border-orange-200 bg-gradient-to-r from-orange-100 to-red-100 px-2.5 py-1"},sd={key:3,class:"flex items-center gap-1.5 rounded-lg border border-gray-700 bg-gray-100 bg-gradient-to-r from-gray-100 to-gray-100 px-2.5 py-1"},ad={class:"text-xs font-medium text-gray-950"},rd={key:4,class:"flex items-center gap-1.5 rounded-lg border border-blue-200 bg-gradient-to-r from-blue-100 to-cyan-100 px-2.5 py-1 dark:border-blue-700 dark:from-blue-900/20 dark:to-cyan-900/20"},ld={key:5,class:"flex items-center gap-1.5 rounded-lg border border-teal-200 bg-gradient-to-r from-teal-100 to-green-100 px-2.5 py-1 dark:border-teal-700 dark:from-teal-900/20 dark:to-green-900/20"},od={key:6,class:"flex items-center gap-1.5 rounded-lg border border-indigo-200 bg-gradient-to-r from-indigo-100 to-blue-100 px-2.5 py-1"},nd={class:"text-xs font-semibold text-indigo-800"},id={class:"text-xs font-medium text-indigo-700"},dd={key:7,class:"flex items-center gap-1.5 rounded-lg border border-teal-200 bg-gradient-to-r from-teal-100 to-emerald-100 px-2.5 py-1 dark:border-teal-700 dark:from-teal-900/20 dark:to-emerald-900/20"},ud={key:8,class:"flex items-center gap-1.5 rounded-lg border border-gray-200 bg-gradient-to-r from-gray-100 to-gray-200 px-2.5 py-1"},pd={class:"whitespace-nowrap px-3 py-4"},gd={class:"flex flex-col gap-1"},md={key:0,class:"inline-flex items-center rounded-full bg-yellow-100 px-3 py-1 text-xs font-semibold text-yellow-800"},yd={key:0},xd={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-3 py-1 text-xs font-semibold text-gray-700"},fd=["title"],cd={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},bd={class:"whitespace-nowrap px-3 py-4"},vd={key:0,class:"flex items-center gap-2"},kd={class:"h-2 w-16 rounded-full bg-gray-200"},wd={class:"min-w-[20px] text-xs font-medium text-gray-700 dark:text-gray-200"},hd={key:1,class:"text-sm text-gray-400"},$d={class:"px-3 py-4 text-sm text-gray-600"},Ad=["title"],Cd={key:1,class:"text-gray-400"},Ud={class:"whitespace-nowrap px-3 py-4 text-sm"},Id={key:0,class:"space-y-1"},Td={class:"flex items-center gap-2"},Vd={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Rd={class:"flex items-center gap-2"},Kd={class:"text-xs text-gray-600 dark:text-gray-300"},Sd={class:"flex items-center gap-2"},zd={class:"text-xs text-gray-600 dark:text-gray-300"},Md={key:0,class:"text-xs text-gray-500 dark:text-gray-400"},Pd={key:1,class:"text-xs text-gray-400"},Ld={class:"whitespace-nowrap px-3 py-4"},Od={key:0,class:"space-y-2"},jd={key:0,class:"flex items-center gap-3 text-xs"},Dd={class:"flex items-center gap-1"},_d={class:"font-medium text-gray-900 dark:text-gray-100"},Ed={class:"flex items-center gap-1"},Wd={class:"font-medium text-gray-900 dark:text-gray-100"},Nd={class:"flex items-center gap-2"},qd={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},Gd={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},Fd={class:"text-xs text-gray-600 dark:text-gray-400"},Qd={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},Bd={key:1,class:"space-y-2"},Hd={key:0},Jd={class:"flex items-center justify-between text-xs"},Yd={class:"font-medium text-gray-700 dark:text-gray-200"},Zd={class:"flex items-center gap-2"},Xd={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},eu={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},tu={class:"text-xs text-gray-600 dark:text-gray-400"},su={class:"ml-2 text-gray-400"},au={key:1,class:"text-sm text-gray-400"},ru={key:2,class:"space-y-2"},lu={key:0,class:"space-y-2"},ou={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},nu={class:"flex items-center gap-2"},iu={class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"},du={class:"flex-1"},uu={class:"flex items-center gap-2"},pu={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},gu={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},mu={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},yu={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},xu={class:"flex items-center gap-2"},fu={class:"inline-flex min-w-[32px] justify-center rounded-full bg-blue-100 px-2 py-0.5 text-[11px] font-medium text-blue-600 dark:bg-blue-500/20 dark:text-blue-300"},cu={class:"flex-1"},bu={class:"flex items-center gap-2"},vu={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},ku={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},wu={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},hu={key:1,class:"text-sm text-gray-400"},$u={key:3,class:"text-sm text-gray-400"},Au={key:4,class:"text-sm text-gray-400"},Cu={class:"whitespace-nowrap px-3 py-4 text-sm text-gray-600 dark:text-gray-300"},Uu={class:"whitespace-nowrap px-3 py-4 text-sm font-medium"},Iu={class:"flex flex-wrap items-center gap-1"},Tu=["disabled","title","onClick"],Vu=["disabled","title","onClick"],Ru={class:"ml-1"},Ku=["onClick"],Su=["onClick"],zu={key:3,class:"space-y-3 md:hidden"},Mu={class:"mb-3 flex items-start justify-between"},Pu={class:"flex items-center gap-3"},Lu={class:"text-sm font-semibold text-gray-900"},Ou={class:"mt-0.5 flex items-center gap-2"},ju={class:"text-xs text-gray-500 dark:text-gray-400"},Du={class:"text-xs text-gray-500 dark:text-gray-400"},_u={class:"mb-3 grid grid-cols-2 gap-3"},Eu={class:"space-y-1"},Wu={class:"flex items-center gap-1.5"},Nu={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},qu={class:"flex items-center gap-1.5"},Gu={class:"text-xs text-gray-600 dark:text-gray-400"},Fu={class:"flex items-center gap-1.5"},Qu={class:"text-xs text-gray-600 dark:text-gray-400"},Bu={key:0,class:"space-y-1"},Hu={class:"flex items-center gap-1.5"},Ju={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Yu={class:"flex items-center gap-1.5"},Zu={class:"text-xs text-gray-600 dark:text-gray-400"},Xu={key:1,class:"text-sm font-semibold text-gray-400"},e0={class:"mb-3 space-y-2"},t0={key:0,class:"space-y-1.5 rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},s0={class:"flex items-center justify-between text-xs"},a0={class:"flex items-center gap-1"},r0={class:"font-medium text-gray-700 dark:text-gray-200"},l0={class:"h-2 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-600"},o0={class:"flex items-center justify-between text-xs"},n0={class:"text-gray-500 dark:text-gray-400"},i0={key:0,class:"font-medium text-indigo-600"},d0={key:1,class:"text-gray-500"},u0={key:1,class:"space-y-2"},p0={key:0,class:"space-y-2"},g0={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},m0={class:"flex items-center gap-2"},y0={class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"},x0={class:"flex-1"},f0={class:"flex items-center gap-2"},c0={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},b0={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},v0={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},k0={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},w0={class:"flex items-center gap-2"},h0={class:"inline-flex min-w-[32px] justify-center rounded-full bg-blue-100 px-2 py-0.5 text-[11px] font-medium text-blue-600 dark:bg-blue-500/20 dark:text-blue-300"},$0={class:"flex-1"},A0={class:"flex items-center gap-2"},C0={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},U0={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},I0={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},T0={key:1,class:"text-xs text-gray-400"},V0={class:"flex items-center justify-between text-xs"},R0={class:"text-gray-700 dark:text-gray-200"},K0={key:2,class:"flex items-center justify-between text-xs"},S0={class:"text-gray-700 dark:text-gray-200"},z0={class:"flex items-center justify-between text-xs"},M0={class:"font-medium text-gray-700 dark:text-gray-200"},P0={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3"},L0=["disabled","onClick"],O0=["onClick"],j0=["onClick"],D0={__name:"AccountsView",setup(ie){const{showConfirmModal:me,confirmOptions:f,showConfirm:se,handleConfirm:U,handleCancel:j}=Vt(),F=C([]),p=C(!1),b=C("name"),O=C(""),z=C("asc"),G=C([]),D=C([]),_=C("all"),Q=C("all"),Y=C(!1),P=C(!1),i=C(!1),y=C(new Map),L=C([{value:"name",label:"按名称排序",icon:"fa-font"},{value:"dailyTokens",label:"按今日Token排序",icon:"fa-coins"},{value:"dailyRequests",label:"按今日请求数排序",icon:"fa-chart-line"},{value:"totalTokens",label:"按总Token排序",icon:"fa-database"},{value:"lastUsed",label:"按最后使用排序",icon:"fa-clock"}]),te=C([{value:"all",label:"所有平台",icon:"fa-globe"},{value:"claude",label:"Claude",icon:"fa-brain"},{value:"claude-console",label:"Claude Console",icon:"fa-terminal"},{value:"gemini",label:"Gemini",icon:"fa-google"},{value:"openai",label:"OpenAi",icon:"fa-openai"},{value:"azure_openai",label:"Azure OpenAI",icon:"fab fa-microsoft"},{value:"bedrock",label:"Bedrock",icon:"fab fa-aws"},{value:"openai-responses",label:"OpenAI-Responses",icon:"fa-server"},{value:"ccr",label:"CCR",icon:"fa-code-branch"}]),E=Se(()=>{const l=[{value:"all",label:"所有账户",icon:"fa-globe"},{value:"ungrouped",label:"未分组账户",icon:"fa-user"}];return D.value.forEach(a=>{l.push({value:a.id,label:`${a.name} (${a.platform==="claude"?"Claude":a.platform==="gemini"?"Gemini":"OpenAI"})`,icon:a.platform==="claude"?"fa-brain":a.platform==="gemini"?"fa-robot":"fa-openai"})}),l}),k=C(!1),M=C(null),ye=C(!1),ce=C(null),s=Se(()=>{const l=F.value;return O.value?[...l].sort((T,r)=>{var re,X,ve,Ie,Te,de,Ve,H,J,ue,pe,rt;let N=T[O.value],W=r[O.value];return O.value==="dailyTokens"?(N=((X=(re=T.usage)==null?void 0:re.daily)==null?void 0:X.allTokens)||0,W=((Ie=(ve=r.usage)==null?void 0:ve.daily)==null?void 0:Ie.allTokens)||0):O.value==="dailyRequests"?(N=((de=(Te=T.usage)==null?void 0:Te.daily)==null?void 0:de.requests)||0,W=((H=(Ve=r.usage)==null?void 0:Ve.daily)==null?void 0:H.requests)||0):O.value==="totalTokens"&&(N=((ue=(J=T.usage)==null?void 0:J.total)==null?void 0:ue.allTokens)||0,W=((rt=(pe=r.usage)==null?void 0:pe.total)==null?void 0:rt.allTokens)||0),O.value==="lastUsed"&&(N=T.lastUsedAt?new Date(T.lastUsedAt).getTime():0,W=r.lastUsedAt?new Date(r.lastUsedAt).getTime():0),O.value==="status"&&(N=T.isActive?1:0,W=r.isActive?1:0),NW?z.value==="asc"?1:-1:0}):l}),ae=async(l=!1)=>{p.value=!0;try{if(_.value&&_.value!=="all"&&_.value!=="ungrouped"){const H=await K.get(`/admin/account-groups/${_.value}/members`);if(H.success){F.value=H.data,p.value=!1;return}}const a={};Q.value!=="all"&&(a.platform=Q.value),_.value==="ungrouped"&&(a.groupId=_.value);const T=[];if(Q.value==="all")T.push(K.get("/admin/claude-accounts",{params:a}),K.get("/admin/claude-console-accounts",{params:a}),K.get("/admin/bedrock-accounts",{params:a}),K.get("/admin/gemini-accounts",{params:a}),K.get("/admin/openai-accounts",{params:a}),K.get("/admin/azure-openai-accounts",{params:a}),K.get("/admin/openai-responses-accounts",{params:a}),K.get("/admin/ccr-accounts",{params:a}));else switch(Q.value){case"claude":T.push(K.get("/admin/claude-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"claude-console":T.push(Promise.resolve({success:!0,data:[]}),K.get("/admin/claude-console-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"bedrock":T.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),K.get("/admin/bedrock-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"gemini":T.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),K.get("/admin/gemini-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"openai":T.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),K.get("/admin/openai-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"azure_openai":T.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),K.get("/admin/azure-openai-accounts",{params:a}),Promise.resolve({success:!0,data:[]}));break;case"openai-responses":T.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),K.get("/admin/openai-responses-accounts",{params:a}));break;case"ccr":T.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),K.get("/admin/ccr-accounts",{params:a}));break;default:T.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break}await Promise.all([Ne(l),qe(l)]);const[r,N,W,re,X,ve,Ie,Te]=await Promise.all(T),de=[];if(r.success){const H=(r.data||[]).map(J=>{const ue=G.value.filter(pe=>pe.claudeAccountId===J.id).length;return{...J,platform:"claude",boundApiKeysCount:ue}});de.push(...H)}if(N.success){const H=(N.data||[]).map(J=>{const ue=G.value.filter(pe=>pe.claudeConsoleAccountId===J.id).length;return{...J,platform:"claude-console",boundApiKeysCount:ue}});de.push(...H)}if(W.success){const H=(W.data||[]).map(J=>({...J,platform:"bedrock",boundApiKeysCount:0}));de.push(...H)}if(re.success){const H=(re.data||[]).map(J=>{const ue=G.value.filter(pe=>pe.geminiAccountId===J.id).length;return{...J,platform:"gemini",boundApiKeysCount:ue}});de.push(...H)}if(X.success){const H=(X.data||[]).map(J=>{const ue=G.value.filter(pe=>pe.openaiAccountId===J.id).length;return{...J,platform:"openai",boundApiKeysCount:ue}});de.push(...H)}if(ve&&ve.success){const H=(ve.data||[]).map(J=>{const ue=G.value.filter(pe=>pe.azureOpenaiAccountId===J.id).length;return{...J,platform:"azure_openai",boundApiKeysCount:ue}});de.push(...H)}if(Ie&&Ie.success){const H=(Ie.data||[]).map(J=>{const ue=G.value.filter(pe=>pe.openaiAccountId===`responses:${J.id}`).length;return{...J,platform:"openai-responses",boundApiKeysCount:ue}});de.push(...H)}if(Te&&Te.success){const H=(Te.data||[]).map(J=>({...J,platform:"ccr",boundApiKeysCount:0}));de.push(...H)}let Ve=de;_.value!=="all"&&(_.value==="ungrouped"?Ve=de.filter(H=>!H.groupInfos||H.groupInfos.length===0):Ve=de.filter(H=>!H.groupInfos||H.groupInfos.length===0?!1:H.groupInfos.some(J=>J.id===_.value))),F.value=Ve}catch{S("加载账户失败","error")}finally{p.value=!1}},Ue=l=>{l&&(O.value===l?z.value=z.value==="asc"?"desc":"asc":(O.value=l,z.value="asc"))},h=l=>{if(l==null)return"0";const a=Number(l);return a>=1e6?(a/1e6).toFixed(2):a>=1e3?(a/1e6).toFixed(4):(a/1e6).toFixed(6)},Je=l=>{if(!l)return"从未使用";const a=new Date(l),r=new Date-a;return r<6e4?"刚刚":r<36e5?`${Math.floor(r/6e4)} 分钟前`:r<864e5?`${Math.floor(r/36e5)} 小时前`:r<6048e5?`${Math.floor(r/864e5)} 天前`:a.toLocaleDateString("zh-CN")},Ne=async(l=!1)=>{if(!(!l&&Y.value))try{const a=await K.get("/admin/api-keys");a.success&&(G.value=a.data||[],Y.value=!0)}catch{}},qe=async(l=!1)=>{if(!(!l&&P.value))try{const a=await K.get("/admin/account-groups");a.success&&(D.value=a.data||[],P.value=!0)}catch{}},Pe=()=>{Y.value=!1,P.value=!1,i.value=!1,y.value.clear()},Ye=()=>{ae()},Ge=()=>{ae()},Fe=l=>{if(!l||!l.host||!l.port)return null;const a=l.type==="socks5"?"S5":l.type.toUpperCase();let T=l.host;T.length>15&&(T=T.substring(0,12)+"...");let r=`${a}://${T}:${l.port}`;return l.username&&(r=`${a}://***@${T}:${l.port}`),r},Qe=(l,a)=>{if(!l||!a)return"--";const T=new Date(l),r=new Date(a),N=T.getHours().toString().padStart(2,"0"),W=T.getMinutes().toString().padStart(2,"0"),re=r.getHours().toString().padStart(2,"0"),X=r.getMinutes().toString().padStart(2,"0");return`${N}:${W} - ${re}:${X}`},Ze=l=>{if(!l||l<=0)return"已结束";const a=Math.floor(l/60),T=l%60;return a>0?`${a}小时${T}分钟`:`${T}分钟`},nt=l=>{if(!l||l<=0)return"";l=Math.floor(l);const a=Math.floor(l/1440),T=l%1440,r=Math.floor(T/60),N=T%60;return a>0?r>0?`${a}天${r}小时`:`${a}天`:r>0?N>0?`${r}小时${N}分钟`:`${r}小时`:`${N}分钟`},it=()=>{M.value=null,k.value=!0},Be=()=>{k.value=!1,M.value=null},Xe=l=>{ce.value=l,ye.value=!0},et=async l=>{const T=G.value.filter(W=>W.claudeAccountId===l.id||W.claudeConsoleAccountId===l.id||W.geminiAccountId===l.id||W.openaiAccountId===l.id||W.azureOpenaiAccountId===l.id||W.openaiAccountId===`responses:${l.id}`).length;let r=`确定要删除账户 "${l.name}" 吗?`;if(T>0&&(r+=`
⚠️ 注意:此账号有 ${T} 个 API Key 绑定。`,r+=`
删除后,这些 API Key 将自动切换为共享池模式。`),r+=`
此操作不可恢复。`,!!await se("删除账户",r,"删除","取消"))try{let W;l.platform==="claude"?W=`/admin/claude-accounts/${l.id}`:l.platform==="claude-console"?W=`/admin/claude-console-accounts/${l.id}`:l.platform==="bedrock"?W=`/admin/bedrock-accounts/${l.id}`:l.platform==="openai"?W=`/admin/openai-accounts/${l.id}`:l.platform==="azure_openai"?W=`/admin/azure-openai-accounts/${l.id}`:l.platform==="openai-responses"?W=`/admin/openai-responses-accounts/${l.id}`:l.platform==="ccr"?W=`/admin/ccr-accounts/${l.id}`:W=`/admin/gemini-accounts/${l.id}`;const re=await K.delete(W);if(re.success){let X="账户已成功删除";re.unboundKeys>0&&(X+=`,${re.unboundKeys} 个 API Key 已切换为共享池模式`),S(X,"success"),i.value=!1,Y.value=!1,ae(),Ne(!0)}else S(re.message||"删除失败","error")}catch{S("删除失败","error")}},ze=async l=>{if(l.isResetting)return;let a=!1;if(window.showConfirm?a=await window.showConfirm("重置账户状态","确定要重置此账户的所有异常状态吗?这将清除限流状态、401错误计数等所有异常标记。","确定重置","取消"):a=confirm("确定要重置此账户的所有异常状态吗?"),!!a)try{l.isResetting=!0;let T="";if(l.platform==="openai")T=`/admin/openai-accounts/${l.id}/reset-status`;else if(l.platform==="openai-responses")T=`/admin/openai-responses-accounts/${l.id}/reset-status`;else if(l.platform==="claude")T=`/admin/claude-accounts/${l.id}/reset-status`;else if(l.platform==="claude-console")T=`/admin/claude-console-accounts/${l.id}/reset-status`;else if(l.platform==="ccr")T=`/admin/ccr-accounts/${l.id}/reset-status`;else{S("不支持的账户类型","error"),l.isResetting=!1;return}const r=await K.post(T);r.success?(S("账户状态已重置","success"),ae(!0)):S(r.message||"状态重置失败","error")}catch{S("状态重置失败","error")}finally{l.isResetting=!1}},Me=async l=>{if(!l.isTogglingSchedulable)try{l.isTogglingSchedulable=!0;let a;if(l.platform==="claude")a=`/admin/claude-accounts/${l.id}/toggle-schedulable`;else if(l.platform==="claude-console")a=`/admin/claude-console-accounts/${l.id}/toggle-schedulable`;else if(l.platform==="bedrock")a=`/admin/bedrock-accounts/${l.id}/toggle-schedulable`;else if(l.platform==="gemini")a=`/admin/gemini-accounts/${l.id}/toggle-schedulable`;else if(l.platform==="openai")a=`/admin/openai-accounts/${l.id}/toggle-schedulable`;else if(l.platform==="azure_openai")a=`/admin/azure-openai-accounts/${l.id}/toggle-schedulable`;else if(l.platform==="openai-responses")a=`/admin/openai-responses-accounts/${l.id}/toggle-schedulable`;else if(l.platform==="ccr")a=`/admin/ccr-accounts/${l.id}/toggle-schedulable`;else{S("该账户类型暂不支持调度控制","warning");return}const T=await K.put(a);T.success?(l.schedulable=T.schedulable,S(T.schedulable?"已启用调度":"已禁用调度","success")):S(T.message||"操作失败","error")}catch{S("切换调度状态失败","error")}finally{l.isTogglingSchedulable=!1}},m=()=>{k.value=!1,S("账户创建成功","success"),Pe(),ae()},g=()=>{ye.value=!1,S("账户更新成功","success"),i.value=!1,ae()},A=l=>!l.lastRefreshAt||l.lastRefreshAt===""?"Setup":"OAuth",be=()=>"OAuth",dt=()=>"OAuth",bt=l=>{if(l.subscriptionInfo)try{const a=typeof l.subscriptionInfo=="string"?JSON.parse(l.subscriptionInfo):l.subscriptionInfo;return a.hasClaudeMax===!0?"Claude Max":a.hasClaudePro===!0?"Claude Pro":"Claude Free"}catch{return"Claude"}return"Claude"},tt=l=>{if(l.schedulable!==!1)return null;if(l.platform==="claude-console"){if(l.status==="unauthorized")return"API Key无效或已过期(401错误)";if(l.overloadStatus==="overloaded")return"服务过载(529错误)";if(l.rateLimitStatus==="limited")return"触发限流(429错误)";if(l.status==="blocked"&&l.errorMessage)return l.errorMessage}if(l.platform==="claude"){if(l.status==="unauthorized")return"认证失败(401错误)";if(l.status==="temp_error"&&l.errorMessage||l.status==="error"&&l.errorMessage)return l.errorMessage;if(l.isRateLimited)return"触发限流(429错误)";if(l.stoppedReason)return l.stoppedReason}if(l.platform==="openai"){if(l.status==="unauthorized")return"认证失败(401错误)";if(l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.isRateLimited)return"触发限流(429错误)";if(l.status==="error"&&l.errorMessage)return l.errorMessage}if(l.platform==="openai-responses"){if(l.status==="unauthorized")return"认证失败(401错误)";if(l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.isRateLimited)return"触发限流(429错误)";if(l.status==="error"&&l.errorMessage)return l.errorMessage;if(l.status==="rateLimited")return"触发限流(429错误)"}return l.stoppedReason?l.stoppedReason:l.errorMessage?l.errorMessage:"手动停止调度"},ut=l=>l.status==="blocked"?"已封锁":l.status==="unauthorized"?"异常":l.isRateLimited||l.status==="rate_limited"||l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"?"限流中":l.status==="temp_error"?"临时异常":l.status==="error"||!l.isActive?"错误":l.schedulable===!1?"已暂停":"正常",he=l=>l.status==="blocked"||l.status==="unauthorized"?"bg-red-100 text-red-800":l.isRateLimited||l.status==="rate_limited"||l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"||l.status==="temp_error"?"bg-orange-100 text-orange-800":l.status==="error"||!l.isActive?"bg-red-100 text-red-800":l.schedulable===!1?"bg-gray-100 text-gray-800":"bg-green-100 text-green-800",pt=l=>l.status==="blocked"||l.status==="unauthorized"?"bg-red-500":l.isRateLimited||l.status==="rate_limited"||l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"||l.status==="temp_error"?"bg-orange-500":l.status==="error"||!l.isActive?"bg-red-500":l.schedulable===!1?"bg-gray-500":"bg-green-500",gt=l=>Je(l),st=(l,a=null)=>{if(!l)return"bg-gradient-to-r from-blue-500 to-indigo-600";if(a&&(a.isRateLimited||a.status==="rate_limited"||a.rateLimitStatus&&a.rateLimitStatus.isRateLimited||a.rateLimitStatus==="limited"))return"bg-gradient-to-r from-red-500 to-red-600";const r=String(l).toLowerCase();return r==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":r==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-600"},$e=l=>{if(!l)return null;const a=typeof l.usedPercent=="number"&&!Number.isNaN(l.usedPercent)?l.usedPercent:null,T=typeof l.resetAfterSeconds=="number"&&!Number.isNaN(l.resetAfterSeconds)?l.resetAfterSeconds:null,r=typeof l.remainingSeconds=="number"?l.remainingSeconds:null,N=l.resetAt?Date.parse(l.resetAt):null;return T!==null&&(r!==null&&r<=0||N!==null&&!Number.isNaN(N)&&Date.now()>=N)?0:a===null?null:Math.max(0,Math.min(100,a))},Le=l=>{const a=$e(l);return a===null?"bg-gradient-to-r from-gray-300 to-gray-400":a>=90?"bg-gradient-to-r from-red-500 to-red-600":a>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},Oe=l=>{const a=$e(l);return a===null?"--":`${a.toFixed(1)}%`},je=l=>{const a=$e(l);return a===null?"0%":`${a}%`},De=l=>l==="secondary"?"周限":"5h",_e=l=>{if(!l)return"--";let a=l.remainingSeconds;if(a==null&&(a=l.resetAfterSeconds),a==null||Number.isNaN(Number(a)))return"--";a=Math.max(0,Math.floor(Number(a)));const T=Math.floor(a/86400),r=Math.floor(a%86400/3600),N=Math.floor(a%3600/60),W=a%60;return T>0?r>0?`${T}天${r}小时`:`${T}天`:r>0?N>0?`${r}小时${N}分钟`:`${r}小时`:N>0?`${N}分钟`:`${W}秒`},Ee=l=>!l||l===0?"0.0000":l<1e-4?l.toExponential(2):l<.01?l.toFixed(6):l<1?l.toFixed(4):l.toFixed(2),He=l=>{var r,N;const a=Number(((N=(r=l==null?void 0:l.usage)==null?void 0:r.daily)==null?void 0:N.cost)||0),T=Number((l==null?void 0:l.dailyQuota)||0);return!T||T<=0?0:a/T*100},mt=l=>l>=90?"bg-red-500":l>=70?"bg-yellow-500":"bg-green-500",yt=l=>{var r,N;const a=Number(((N=(r=l==null?void 0:l.usage)==null?void 0:r.daily)==null?void 0:N.cost)||0),T=Number((l==null?void 0:l.dailyQuota)||0);return!T||T<=0?"0.00":Math.max(0,T-a).toFixed(2)},at=l=>!l.usage||!l.usage.daily?"0.0000":l.usage.daily.cost!==void 0?Ee(l.usage.daily.cost):"0.0000";return Z(b,l=>{const a={name:"name",dailyTokens:"dailyTokens",dailyRequests:"dailyRequests",totalTokens:"totalTokens",lastUsed:"lastUsed"};a[l]&&Ue(a[l])}),ct(()=>{ae(!0)}),(l,a)=>{const T=Kt;return n(),d("div",ci,[e("div",bi,[e("div",vi,[a[20]||(a[20]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 账户管理 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理您的 Claude、Gemini、OpenAI、Azure OpenAI、OpenAI-Responses 与 CCR 账户及代理配置 ")],-1)),e("div",ki,[e("div",wi,[e("div",hi,[a[14]||(a[14]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-indigo-500 to-blue-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),ke(vt,{modelValue:b.value,"onUpdate:modelValue":a[0]||(a[0]=r=>b.value=r),icon:"fa-sort-amount-down","icon-color":"text-indigo-500",options:L.value,placeholder:"选择排序",onChange:a[1]||(a[1]=r=>Ue())},null,8,["modelValue","options"])]),e("div",$i,[a[15]||(a[15]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),ke(vt,{modelValue:Q.value,"onUpdate:modelValue":a[2]||(a[2]=r=>Q.value=r),icon:"fa-server","icon-color":"text-blue-500",options:te.value,placeholder:"选择平台",onChange:Ye},null,8,["modelValue","options"])]),e("div",Ai,[a[16]||(a[16]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),ke(vt,{modelValue:_.value,"onUpdate:modelValue":a[3]||(a[3]=r=>_.value=r),icon:"fa-layer-group","icon-color":"text-purple-500",options:E.value,placeholder:"选择分组",onChange:Ge},null,8,["modelValue","options"])]),e("div",Ci,[ke(T,{content:"刷新数据 (Ctrl/⌘+点击强制刷新所有缓存)",effect:"dark",placement:"bottom"},{default:lt(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",disabled:p.value,onClick:[a[4]||(a[4]=xt(r=>ae(!0),["ctrl","exact"])),a[5]||(a[5]=xt(r=>ae(!1),["exact"])),a[6]||(a[6]=xt(r=>ae(!0),["meta","exact"]))]},[a[17]||(a[17]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:R(["fas relative text-green-500",p.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),a[18]||(a[18]=e("span",{class:"relative"},"刷新",-1))],8,Ui)]),_: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:xt(it,["stop"])},a[19]||(a[19]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"添加账户",-1)]))])]),p.value?(n(),d("div",Ii,a[21]||(a[21]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载账户...",-1)]))):s.value.length===0?(n(),d("div",Ti,a[22]||(a[22]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-user-circle text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无账户",-1),e("p",{class:"mt-2 text-sm text-gray-400 dark:text-gray-500"},"点击上方按钮添加您的第一个账户",-1)]))):(n(),d("div",Vi,[e("table",Ri,[e("thead",Ki,[e("tr",null,[e("th",{class:"w-[22%] min-w-[180px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[7]||(a[7]=r=>Ue("name"))},[a[23]||(a[23]=I(" 名称 ",-1)),O.value==="name"?(n(),d("i",{key:0,class:R(["fas",z.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",Si))]),e("th",{class:"w-[15%] min-w-[120px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[8]||(a[8]=r=>Ue("platform"))},[a[24]||(a[24]=I(" 平台/类型 ",-1)),O.value==="platform"?(n(),d("i",{key:0,class:R(["fas",z.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",zi))]),e("th",{class:"w-[12%] min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[9]||(a[9]=r=>Ue("status"))},[a[25]||(a[25]=I(" 状态 ",-1)),O.value==="status"?(n(),d("i",{key:0,class:R(["fas",z.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",Mi))]),e("th",{class:"w-[8%] min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[10]||(a[10]=r=>Ue("priority"))},[a[26]||(a[26]=I(" 优先级 ",-1)),O.value==="priority"?(n(),d("i",{key:0,class:R(["fas",z.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",Pi))]),a[30]||(a[30]=e("th",{class:"w-[10%] min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 代理 ",-1)),a[31]||(a[31]=e("th",{class:"w-[10%] min-w-[90px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 今日使用 ",-1)),e("th",Li,[e("div",Oi,[a[29]||(a[29]=e("span",null,"会话窗口",-1)),ke(T,{placement:"top"},{content:lt(()=>a[27]||(a[27]=[e("div",{class:"w-[260px] space-y-3 text-xs leading-relaxed text-white dark:text-gray-800"},[e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude 系列 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 会话窗口进度表示 5 小时窗口的时间推移,颜色提示当前调度状态。 "),e("div",{class:"space-y-1 pt-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-blue-500 to-indigo-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"正常:请求正常处理")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-yellow-500 to-orange-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"警告:接近限制")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-red-500 to-red-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"拒绝:达到速率限制")])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," OpenAI "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 进度条分别展示 5h 与周限窗口的额度使用比例,颜色含义与上方保持一致。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时使用量进度,到达重置时间后会自动归零。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-history mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"周限窗口:7天使用量进度,重置时同样回到 0%。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"当“重置剩余”为 0 时,进度条与百分比会同步清零。")])])])],-1)])),default:lt(()=>[a[28]||(a[28]=e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400"},null,-1))]),_:1,__:[28]})])]),a[32]||(a[32]=e("th",{class:"w-[8%] min-w-[80px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),a[33]||(a[33]=e("th",{class:"w-[15%] min-w-[180px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",ji,[(n(!0),d(fe,null,we(s.value,r=>{var N,W,re;return n(),d("tr",{key:r.id,class:"table-row"},[e("td",Di,[e("div",_i,[a[38]||(a[38]=e("div",{class:"mr-2 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-user-circle text-xs text-white"})],-1)),e("div",Ei,[e("div",Wi,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},c(r.name),9,Ni),r.accountType==="dedicated"?(n(),d("span",qi,a[34]||(a[34]=[e("i",{class:"fas fa-lock mr-1"},null,-1),I("专属 ",-1)]))):r.accountType==="group"?(n(),d("span",Gi,a[35]||(a[35]=[e("i",{class:"fas fa-layer-group mr-1"},null,-1),I("分组调度 ",-1)]))):(n(),d("span",Fi,a[36]||(a[36]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),I("共享 ",-1)])))]),r.groupInfos&&r.groupInfos.length>0?(n(),d("div",Qi,[(n(!0),d(fe,null,we(r.groupInfos,X=>(n(),d("span",{key:X.id,class:"inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-600 dark:bg-gray-700 dark:text-gray-400",title:`所属分组: ${X.name}`},[a[37]||(a[37]=e("i",{class:"fas fa-folder mr-1"},null,-1)),I(c(X.name),1)],8,Bi))),128))])):v("",!0),e("div",{class:"truncate text-xs text-gray-500 dark:text-gray-400",title:r.id},c(r.id),9,Hi)])])]),e("td",Ji,[e("div",Yi,[r.platform==="gemini"?(n(),d("div",Zi,[a[39]||(a[39]=e("i",{class:"fas fa-robot text-xs text-yellow-700"},null,-1)),a[40]||(a[40]=e("span",{class:"text-xs font-semibold text-yellow-800"},"Gemini",-1)),a[41]||(a[41]=e("span",{class:"mx-1 h-4 w-px bg-yellow-300"},null,-1)),e("span",Xi,c(be()),1)])):r.platform==="claude-console"?(n(),d("div",ed,a[42]||(a[42]=[e("i",{class:"fas fa-terminal text-xs text-purple-700"},null,-1),e("span",{class:"text-xs font-semibold text-purple-800"},"Console",-1),e("span",{class:"mx-1 h-4 w-px bg-purple-300"},null,-1),e("span",{class:"text-xs font-medium text-purple-700"},"API Key",-1)]))):r.platform==="bedrock"?(n(),d("div",td,a[43]||(a[43]=[e("i",{class:"fab fa-aws text-xs text-orange-700"},null,-1),e("span",{class:"text-xs font-semibold text-orange-800"},"Bedrock",-1),e("span",{class:"mx-1 h-4 w-px bg-orange-300"},null,-1),e("span",{class:"text-xs font-medium text-orange-700"},"AWS",-1)]))):r.platform==="openai"?(n(),d("div",sd,[a[44]||(a[44]=e("div",{class:"fa-openai"},null,-1)),a[45]||(a[45]=e("span",{class:"text-xs font-semibold text-gray-950"},"OpenAi",-1)),a[46]||(a[46]=e("span",{class:"mx-1 h-4 w-px bg-gray-400"},null,-1)),e("span",ad,c(dt()),1)])):r.platform==="azure_openai"?(n(),d("div",rd,a[47]||(a[47]=[e("i",{class:"fab fa-microsoft text-xs text-blue-700 dark:text-blue-400"},null,-1),e("span",{class:"text-xs font-semibold text-blue-800 dark:text-blue-300"},"Azure OpenAI",-1),e("span",{class:"mx-1 h-4 w-px bg-blue-300 dark:bg-blue-600"},null,-1),e("span",{class:"text-xs font-medium text-blue-700 dark:text-blue-400"},"API Key",-1)]))):r.platform==="openai-responses"?(n(),d("div",ld,a[48]||(a[48]=[e("i",{class:"fas fa-server text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"OpenAI-Responses",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-400"},"API Key",-1)]))):r.platform==="claude"||r.platform==="claude-oauth"?(n(),d("div",od,[a[49]||(a[49]=e("i",{class:"fas fa-brain text-xs text-indigo-700"},null,-1)),e("span",nd,c(bt(r)),1),a[50]||(a[50]=e("span",{class:"mx-1 h-4 w-px bg-indigo-300"},null,-1)),e("span",id,c(A(r)),1)])):r.platform==="ccr"?(n(),d("div",dd,a[51]||(a[51]=[e("i",{class:"fas fa-code-branch text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"CCR",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-300"},"Relay",-1)]))):(n(),d("div",ud,a[52]||(a[52]=[e("i",{class:"fas fa-question text-xs text-gray-700"},null,-1),e("span",{class:"text-xs font-semibold text-gray-800"},"未知",-1)])))])]),e("td",pd,[e("div",gd,[e("span",{class:R(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",r.status==="blocked"?"bg-orange-100 text-orange-800":r.status==="unauthorized"?"bg-red-100 text-red-800":r.status==="temp_error"?"bg-orange-100 text-orange-800":r.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},[e("div",{class:R(["mr-2 h-2 w-2 rounded-full",r.status==="blocked"?"bg-orange-500":r.status==="unauthorized"?"bg-red-500":r.status==="temp_error"?"bg-orange-500":r.isActive?"bg-green-500":"bg-red-500"])},null,2),I(" "+c(r.status==="blocked"?"已封锁":r.status==="unauthorized"?"异常":r.status==="temp_error"?"临时异常":r.isActive?"正常":"异常"),1)],2),r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"?(n(),d("span",md,[a[53]||(a[53]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),a[54]||(a[54]=I(" 限流中 ",-1)),r.rateLimitStatus&&typeof r.rateLimitStatus=="object"&&r.rateLimitStatus.minutesRemaining>0?(n(),d("span",yd,"("+c(nt(r.rateLimitStatus.minutesRemaining))+")",1)):v("",!0)])):v("",!0),r.schedulable===!1?(n(),d("span",xd,[a[56]||(a[56]=e("i",{class:"fas fa-pause-circle mr-1"},null,-1)),a[57]||(a[57]=I(" 不可调度 ",-1)),tt(r)?(n(),Ce(T,{key:0,content:tt(r),effect:"dark",placement:"top"},{default:lt(()=>a[55]||(a[55]=[e("i",{class:"fas fa-question-circle ml-1 cursor-help text-gray-500"},null,-1)])),_:2,__:[55]},1032,["content"])):v("",!0)])):v("",!0),r.status==="blocked"&&r.errorMessage?(n(),d("span",{key:2,class:"mt-1 max-w-xs truncate text-xs text-gray-500 dark:text-gray-400",title:r.errorMessage},c(r.errorMessage),9,fd)):v("",!0),r.accountType==="dedicated"?(n(),d("span",cd," 绑定: "+c(r.boundApiKeysCount||0)+" 个API Key ",1)):v("",!0)])]),e("td",bd,[r.platform==="claude"||r.platform==="claude-console"||r.platform==="bedrock"||r.platform==="gemini"||r.platform==="openai"||r.platform==="openai-responses"||r.platform==="azure_openai"||r.platform==="ccr"?(n(),d("div",vd,[e("div",kd,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-green-500 to-blue-600 transition-all duration-300",style:Ke({width:101-(r.priority||50)+"%"})},null,4)]),e("span",wd,c(r.priority||50),1)])):(n(),d("div",hd,a[58]||(a[58]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",$d,[Fe(r.proxy)?(n(),d("div",{key:0,class:"break-all rounded bg-blue-50 px-2 py-1 font-mono text-xs",title:Fe(r.proxy)},c(Fe(r.proxy)),9,Ad)):(n(),d("div",Cd,"无代理"))]),e("td",Ud,[r.usage&&r.usage.daily?(n(),d("div",Id,[e("div",Td,[a[59]||(a[59]=e("div",{class:"h-2 w-2 rounded-full bg-blue-500"},null,-1)),e("span",Vd,c(r.usage.daily.requests||0)+" 次",1)]),e("div",Rd,[a[60]||(a[60]=e("div",{class:"h-2 w-2 rounded-full bg-purple-500"},null,-1)),e("span",Kd,c(h(r.usage.daily.allTokens||0))+"M",1)]),e("div",Sd,[a[61]||(a[61]=e("div",{class:"h-2 w-2 rounded-full bg-green-500"},null,-1)),e("span",zd,"$"+c(at(r)),1)]),r.usage.averages&&r.usage.averages.rpm>0?(n(),d("div",Md," 平均 "+c(r.usage.averages.rpm.toFixed(2))+" RPM ",1)):v("",!0)])):(n(),d("div",Pd,"暂无数据"))]),e("td",Ld,[r.platform==="claude"&&r.sessionWindow&&r.sessionWindow.hasActiveWindow?(n(),d("div",Od,[r.usage&&r.usage.sessionWindow?(n(),d("div",jd,[e("div",Dd,[a[62]||(a[62]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("span",_d,c(h(r.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",Ed,[a[63]||(a[63]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("span",Wd," $"+c(Ee(r.usage.sessionWindow.totalCost)),1)])])):v("",!0),e("div",Nd,[e("div",qd,[e("div",{class:R(["h-2 rounded-full transition-all duration-300",st(r.sessionWindow.sessionWindowStatus,r)]),style:Ke({width:r.sessionWindow.progress+"%"})},null,6)]),e("span",Gd,c(r.sessionWindow.progress)+"% ",1)]),e("div",Fd,[e("div",null,c(Qe(r.sessionWindow.windowStart,r.sessionWindow.windowEnd)),1),r.sessionWindow.remainingTime>0?(n(),d("div",Qd," 剩余 "+c(Ze(r.sessionWindow.remainingTime)),1)):v("",!0)])])):r.platform==="claude-console"?(n(),d("div",Bd,[Number(r.dailyQuota)>0?(n(),d("div",Hd,[e("div",Jd,[a[64]||(a[64]=e("span",{class:"text-gray-600 dark:text-gray-300"},"额度进度",-1)),e("span",Yd,c(He(r).toFixed(1))+"% ",1)]),e("div",Zd,[e("div",Xd,[e("div",{class:R(["h-2 rounded-full transition-all duration-300",mt(He(r))]),style:Ke({width:Math.min(100,He(r))+"%"})},null,6)]),e("span",eu," $"+c(Ee(((W=(N=r.usage)==null?void 0:N.daily)==null?void 0:W.cost)||0))+" / $"+c(Number(r.dailyQuota).toFixed(2)),1)]),e("div",tu,[I(" 剩余 $"+c(yt(r))+" ",1),e("span",su,"重置 "+c(r.quotaResetTime||"00:00"),1)])])):(n(),d("div",au,a[65]||(a[65]=[e("i",{class:"fas fa-minus"},null,-1)])))])):r.platform==="openai"?(n(),d("div",ru,[r.codexUsage?(n(),d("div",lu,[e("div",ou,[e("div",nu,[e("span",iu,c(De("primary")),1),e("div",du,[e("div",uu,[e("div",pu,[e("div",{class:R(["h-2 rounded-full transition-all duration-300",Le(r.codexUsage.primary)]),style:Ke({width:je(r.codexUsage.primary)})},null,6)]),e("span",gu,c(Oe(r.codexUsage.primary)),1)])])]),e("div",mu," 重置剩余 "+c(_e(r.codexUsage.primary)),1)]),e("div",yu,[e("div",xu,[e("span",fu,c(De("secondary")),1),e("div",cu,[e("div",bu,[e("div",vu,[e("div",{class:R(["h-2 rounded-full transition-all duration-300",Le(r.codexUsage.secondary)]),style:Ke({width:je(r.codexUsage.secondary)})},null,6)]),e("span",ku,c(Oe(r.codexUsage.secondary)),1)])])]),e("div",wu," 重置剩余 "+c(_e(r.codexUsage.secondary)),1)])])):(n(),d("div",hu,a[66]||(a[66]=[e("span",{class:"text-xs"},"N/A",-1)])))])):r.platform==="claude"?(n(),d("div",$u,a[67]||(a[67]=[e("i",{class:"fas fa-minus"},null,-1)]))):(n(),d("div",Au,a[68]||(a[68]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",Cu,c(Je(r.lastUsedAt)),1),e("td",Uu,[e("div",Iu,[(r.platform==="claude"||r.platform==="claude-console"||r.platform==="openai"||r.platform==="openai-responses")&&(r.status==="unauthorized"||r.status!=="active"||(re=r.rateLimitStatus)!=null&&re.isRateLimited||r.rateLimitStatus==="limited"||!r.isActive)?(n(),d("button",{key:0,class:R(["rounded px-2.5 py-1 text-xs font-medium transition-colors",r.isResetting?"cursor-not-allowed bg-gray-100 text-gray-400":"bg-yellow-100 text-yellow-700 hover:bg-yellow-200"]),disabled:r.isResetting,title:r.isResetting?"重置中...":"重置所有异常状态",onClick:X=>ze(r)},[e("i",{class:R(["fas fa-redo",r.isResetting?"animate-spin":""])},null,2),a[69]||(a[69]=e("span",{class:"ml-1"},"重置状态",-1))],10,Tu)):v("",!0),e("button",{class:R(["rounded px-2.5 py-1 text-xs font-medium transition-colors",r.isTogglingSchedulable?"cursor-not-allowed bg-gray-100 text-gray-400":r.schedulable?"bg-green-100 text-green-700 hover:bg-green-200":"bg-gray-100 text-gray-700 hover:bg-gray-200"]),disabled:r.isTogglingSchedulable,title:r.schedulable?"点击禁用调度":"点击启用调度",onClick:X=>Me(r)},[e("i",{class:R(["fas",r.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",Ru,c(r.schedulable?"调度":"停用"),1)],10,Vu),e("button",{class:"rounded bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200",title:"编辑账户",onClick:X=>Xe(r)},a[70]||(a[70]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,Ku),e("button",{class:"rounded bg-red-100 px-2.5 py-1 text-xs font-medium text-red-700 transition-colors hover:bg-red-200",title:"删除账户",onClick:X=>et(r)},a[71]||(a[71]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,Su)])])])}),128))])])])),!p.value&&s.value.length>0?(n(),d("div",zu,[(n(!0),d(fe,null,we(s.value,r=>{var N,W,re,X;return n(),d("div",{key:r.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",Mu,[e("div",Pu,[e("div",{class:R(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg",r.platform==="claude"?"bg-gradient-to-br from-purple-500 to-purple-600":r.platform==="bedrock"?"bg-gradient-to-br from-orange-500 to-red-600":r.platform==="azure_openai"?"bg-gradient-to-br from-blue-500 to-cyan-600":r.platform==="openai"?"bg-gradient-to-br from-gray-600 to-gray-700":r.platform==="ccr"?"bg-gradient-to-br from-teal-500 to-emerald-600":"bg-gradient-to-br from-blue-500 to-blue-600"])},[e("i",{class:R(["text-sm text-white",r.platform==="claude"?"fas fa-brain":r.platform==="bedrock"?"fab fa-aws":r.platform==="azure_openai"?"fab fa-microsoft":r.platform==="openai"?"fas fa-openai":r.platform==="ccr"?"fas fa-code-branch":"fas fa-robot"])},null,2)],2),e("div",null,[e("h4",Lu,c(r.name||r.email),1),e("div",Ou,[e("span",ju,c(r.platform),1),a[72]||(a[72]=e("span",{class:"text-xs text-gray-400"},"|",-1)),e("span",Du,c(r.type),1)])])]),e("span",{class:R(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",he(r)])},[e("div",{class:R(["mr-1.5 h-1.5 w-1.5 rounded-full",pt(r)])},null,2),I(" "+c(ut(r)),1)],2)]),e("div",_u,[e("div",null,[a[76]||(a[76]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"今日使用",-1)),e("div",Eu,[e("div",Wu,[a[73]||(a[73]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-blue-500"},null,-1)),e("p",Nu,c(((W=(N=r.usage)==null?void 0:N.daily)==null?void 0:W.requests)||0)+" 次 ",1)]),e("div",qu,[a[74]||(a[74]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",Gu,c(h(((X=(re=r.usage)==null?void 0:re.daily)==null?void 0:X.allTokens)||0))+"M ",1)]),e("div",Fu,[a[75]||(a[75]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",Qu," $"+c(at(r)),1)])])]),e("div",null,[a[79]||(a[79]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"会话窗口",-1)),r.usage&&r.usage.sessionWindow?(n(),d("div",Bu,[e("div",Hu,[a[77]||(a[77]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",Ju,c(h(r.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",Yu,[a[78]||(a[78]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",Zu," $"+c(Ee(r.usage.sessionWindow.totalCost)),1)])])):(n(),d("div",Xu,"-"))])]),e("div",e0,[r.platform==="claude"&&r.sessionWindow&&r.sessionWindow.hasActiveWindow?(n(),d("div",t0,[e("div",s0,[e("div",a0,[a[81]||(a[81]=e("span",{class:"font-medium text-gray-600 dark:text-gray-300"},"会话窗口",-1)),ke(T,{content:"会话窗口进度不代表使用量,仅表示距离下一个5小时窗口的剩余时间",placement:"top"},{default:lt(()=>a[80]||(a[80]=[e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600"},null,-1)])),_:1,__:[80]})]),e("span",r0,c(r.sessionWindow.progress)+"% ",1)]),e("div",l0,[e("div",{class:R(["h-full transition-all duration-300",st(r.sessionWindow.sessionWindowStatus,r)]),style:Ke({width:r.sessionWindow.progress+"%"})},null,6)]),e("div",o0,[e("span",n0,c(Qe(r.sessionWindow.windowStart,r.sessionWindow.windowEnd)),1),r.sessionWindow.remainingTime>0?(n(),d("span",i0," 剩余 "+c(Ze(r.sessionWindow.remainingTime)),1)):(n(),d("span",d0," 已结束 "))])])):r.platform==="openai"?(n(),d("div",u0,[r.codexUsage?(n(),d("div",p0,[e("div",g0,[e("div",m0,[e("span",y0,c(De("primary")),1),e("div",x0,[e("div",f0,[e("div",c0,[e("div",{class:R(["h-2 rounded-full transition-all duration-300",Le(r.codexUsage.primary)]),style:Ke({width:je(r.codexUsage.primary)})},null,6)]),e("span",b0,c(Oe(r.codexUsage.primary)),1)])])]),e("div",v0," 重置剩余 "+c(_e(r.codexUsage.primary)),1)]),e("div",k0,[e("div",w0,[e("span",h0,c(De("secondary")),1),e("div",$0,[e("div",A0,[e("div",C0,[e("div",{class:R(["h-2 rounded-full transition-all duration-300",Le(r.codexUsage.secondary)]),style:Ke({width:je(r.codexUsage.secondary)})},null,6)]),e("span",U0,c(Oe(r.codexUsage.secondary)),1)])])]),e("div",I0," 重置剩余 "+c(_e(r.codexUsage.secondary)),1)])])):v("",!0),r.codexUsage?v("",!0):(n(),d("div",T0,"暂无统计"))])):v("",!0),e("div",V0,[a[82]||(a[82]=e("span",{class:"text-gray-500 dark:text-gray-400"},"最后使用",-1)),e("span",R0,c(r.lastUsedAt?gt(r.lastUsedAt):"从未使用"),1)]),r.proxyConfig&&r.proxyConfig.type!=="none"?(n(),d("div",K0,[a[83]||(a[83]=e("span",{class:"text-gray-500 dark:text-gray-400"},"代理",-1)),e("span",S0,c(r.proxyConfig.type.toUpperCase()),1)])):v("",!0),e("div",z0,[a[84]||(a[84]=e("span",{class:"text-gray-500 dark:text-gray-400"},"优先级",-1)),e("span",M0,c(r.priority||50),1)])]),e("div",P0,[e("button",{class:R(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs transition-colors",r.schedulable?"bg-gray-50 text-gray-600 hover:bg-gray-100":"bg-green-50 text-green-600 hover:bg-green-100"]),disabled:r.isTogglingSchedulable,onClick:ve=>Me(r)},[e("i",{class:R(["fas",r.schedulable?"fa-pause":"fa-play"])},null,2),I(" "+c(r.schedulable?"暂停":"启用"),1)],10,L0),e("button",{class:"flex-1 rounded-lg bg-gray-50 px-3 py-2 text-xs text-gray-600 transition-colors hover:bg-gray-100",onClick:ve=>Xe(r)},a[85]||(a[85]=[e("i",{class:"fas fa-edit mr-1"},null,-1),I(" 编辑 ",-1)]),8,O0),e("button",{class:"rounded-lg bg-red-50 px-3 py-2 text-xs text-red-600 transition-colors hover:bg-red-100",onClick:ve=>et(r)},a[86]||(a[86]=[e("i",{class:"fas fa-trash"},null,-1)]),8,j0)])])}),128))])):v("",!0)]),k.value&&(!M.value||M.value!=="ccr")?(n(),Ce(Ut,{key:0,onClose:Be,onPlatformChanged:a[11]||(a[11]=r=>M.value=r),onSuccess:m})):k.value&&M.value==="ccr"?(n(),Ce(It,{key:1,onClose:Be,onSuccess:m})):v("",!0),ye.value&&ce.value&&ce.value.platform==="ccr"?(n(),Ce(It,{key:2,account:ce.value,onClose:a[12]||(a[12]=r=>ye.value=!1),onSuccess:g},null,8,["account"])):ye.value?(n(),Ce(Ut,{key:3,account:ce.value,onClose:a[13]||(a[13]=r=>ye.value=!1),onSuccess:g},null,8,["account"])):v("",!0),ke(Tt,{"cancel-text":xe(f).cancelText,"confirm-text":xe(f).confirmText,message:xe(f).message,show:xe(me),title:xe(f).title,onCancel:xe(j),onConfirm:xe(U)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"])])}}},F0=$t(D0,[["__scopeId","data-v-d3e330bc"]]);export{F0 as default};