mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-23 00:53:33 +00:00
45 lines
389 KiB
JavaScript
45 lines
389 KiB
JavaScript
import{e as dr,f as ur}from"./element-plus-BQHxDbdW.js";import{r as $,aP as pr,o as ke,V as Os,x as n,y as o,z as e,L as c,K as k,al as Ve,aT as zt,O as x,aq as P,aa as gr,P as u,aV as Vs,aY as ds,C as I,c as de,Z as yr,an as Me,Q as Ae,q as us,I as Ye,ac as Be,a5 as jt,R as He,B as Qe,u as rt,aX as mr,aU as cr,D as Gs,_ as xr,J as Lt,Y as Ut}from"./vue-vendor-R8HMg95E.js";import{c as F,s as R,_ as ps,a as fr,A as Xs}from"./index-BHqVYTzv.js";import{C as ar}from"./ConfirmModal-DILR5kIE.js";import{C as br}from"./chart-yFHxLHpB.js";import{C as js,_ as vr}from"./ActionDropdown-DvU3fZNX.js";import"./vendor-Dr8jvgFu.js";const Rs=$(!1),er=$({title:"",message:"",confirmText:"继续",cancelText:"取消"}),Pt=$(null);function lr(){return{showConfirmModal:Rs,confirmOptions:er,showConfirm:(W,U,Q="继续",V="取消")=>new Promise(M=>{er.value={title:W,message:U,confirmText:Q,cancelText:V},Pt.value=M,Rs.value=!0}),handleConfirm:()=>{Rs.value=!1,Pt.value&&(Pt.value(!0),Pt.value=null)},handleCancel:()=>{Rs.value=!1,Pt.value&&(Pt.value(!1),Pt.value=null)}}}const or=pr("accounts",()=>{const Y=$([]),Re=$([]),y=$([]),W=$([]),U=$([]),Q=$([]),V=$([]),M=$([]),f=$(!1),h=$(null),G=$(""),ue=$("asc"),Z=async()=>{f.value=!0,h.value=null;try{const b=await F.get("/admin/claude-accounts");if(b.success)Y.value=b.data||[];else throw new Error(b.message||"获取Claude账户失败")}catch(b){throw h.value=b.message,b}finally{f.value=!1}},ye=async()=>{f.value=!0,h.value=null;try{const b=await F.get("/admin/claude-console-accounts");if(b.success)Re.value=b.data||[];else throw new Error(b.message||"获取Claude Console账户失败")}catch(b){throw h.value=b.message,b}finally{f.value=!1}},ee=async()=>{f.value=!0,h.value=null;try{const b=await F.get("/admin/bedrock-accounts");if(b.success)y.value=b.data||[];else throw new Error(b.message||"获取Bedrock账户失败")}catch(b){throw h.value=b.message,b}finally{f.value=!1}},X=async()=>{f.value=!0,h.value=null;try{const b=await F.get("/admin/gemini-accounts");if(b.success)W.value=b.data||[];else throw new Error(b.message||"获取Gemini账户失败")}catch(b){throw h.value=b.message,b}finally{f.value=!1}},E=async()=>{f.value=!0,h.value=null;try{const b=await F.get("/admin/openai-accounts");if(b.success)U.value=b.data||[];else throw new Error(b.message||"获取OpenAI账户失败")}catch(b){throw h.value=b.message,b}finally{f.value=!1}},w=async()=>{f.value=!0,h.value=null;try{const b=await F.get("/admin/azure-openai-accounts");if(b.success)Q.value=b.data||[];else throw new Error(b.message||"获取Azure OpenAI账户失败")}catch(b){throw h.value=b.message,b}finally{f.value=!1}},m=async()=>{f.value=!0,h.value=null;try{const b=await F.get("/admin/openai-responses-accounts");if(b.success)V.value=b.data||[];else throw new Error(b.message||"获取OpenAI-Responses账户失败")}catch(b){throw h.value=b.message,b}finally{f.value=!1}},z=async()=>{f.value=!0,h.value=null;try{const b=await F.get("/admin/droid-accounts");if(b.success)M.value=b.data||[];else throw new Error(b.message||"获取Droid账户失败")}catch(b){throw h.value=b.message,b}finally{f.value=!1}};return{claudeAccounts:Y,claudeConsoleAccounts:Re,bedrockAccounts:y,geminiAccounts:W,openaiAccounts:U,azureOpenaiAccounts:Q,openaiResponsesAccounts:V,droidAccounts:M,loading:f,error:h,sortBy:G,sortOrder:ue,fetchClaudeAccounts:Z,fetchClaudeConsoleAccounts:ye,fetchBedrockAccounts:ee,fetchGeminiAccounts:X,fetchOpenAIAccounts:E,fetchAzureOpenAIAccounts:w,fetchOpenAIResponsesAccounts:m,fetchDroidAccounts:z,fetchAllAccounts:async()=>{f.value=!0,h.value=null;try{await Promise.all([Z(),ye(),ee(),X(),E(),w(),m(),z()])}catch(b){throw h.value=b.message,b}finally{f.value=!1}},createClaudeAccount:async b=>{f.value=!0,h.value=null;try{const p=await F.post("/admin/claude-accounts",b);if(p.success)return await Z(),p.data;throw new Error(p.message||"创建Claude账户失败")}catch(p){throw h.value=p.message,p}finally{f.value=!1}},createClaudeConsoleAccount:async b=>{f.value=!0,h.value=null;try{const p=await F.post("/admin/claude-console-accounts",b);if(p.success)return await ye(),p.data;throw new Error(p.message||"创建Claude Console账户失败")}catch(p){throw h.value=p.message,p}finally{f.value=!1}},createBedrockAccount:async b=>{f.value=!0,h.value=null;try{const p=await F.post("/admin/bedrock-accounts",b);if(p.success)return await ee(),p.data;throw new Error(p.message||"创建Bedrock账户失败")}catch(p){throw h.value=p.message,p}finally{f.value=!1}},createGeminiAccount:async b=>{f.value=!0,h.value=null;try{const p=await F.post("/admin/gemini-accounts",b);if(p.success)return await X(),p.data;throw new Error(p.message||"创建Gemini账户失败")}catch(p){throw h.value=p.message,p}finally{f.value=!1}},createOpenAIAccount:async b=>{f.value=!0,h.value=null;try{const p=await F.post("/admin/openai-accounts",b);if(p.success)return await E(),p.data;throw new Error(p.message||"创建OpenAI账户失败")}catch(p){throw h.value=p.message,p}finally{f.value=!1}},createDroidAccount:async b=>{f.value=!0,h.value=null;try{const p=await F.post("/admin/droid-accounts",b);if(p.success)return await z(),p.data;throw new Error(p.message||"创建Droid账户失败")}catch(p){throw h.value=p.message,p}finally{f.value=!1}},updateDroidAccount:async(b,p)=>{f.value=!0,h.value=null;try{const L=await F.put(`/admin/droid-accounts/${b}`,p);if(L.success)return await z(),L.data;throw new Error(L.message||"更新Droid账户失败")}catch(L){throw h.value=L.message,L}finally{f.value=!1}},createAzureOpenAIAccount:async b=>{f.value=!0,h.value=null;try{const p=await F.post("/admin/azure-openai-accounts",b);if(p.success)return await w(),p.data;throw new Error(p.message||"创建Azure OpenAI账户失败")}catch(p){throw h.value=p.message,p}finally{f.value=!1}},createOpenAIResponsesAccount:async b=>{f.value=!0,h.value=null;try{const p=await F.post("/admin/openai-responses-accounts",b);if(p.success)return await m(),p.data;throw new Error(p.message||"创建OpenAI-Responses账户失败")}catch(p){throw h.value=p.message,p}finally{f.value=!1}},createGeminiApiAccount:async b=>{f.value=!0,h.value=null;try{const p=await F.post("/admin/gemini-api-accounts",b);if(p.success)return await X(),p.data;throw new Error(p.message||"创建Gemini API账户失败")}catch(p){throw h.value=p.message,p}finally{f.value=!1}},updateClaudeAccount:async(b,p)=>{f.value=!0,h.value=null;try{const L=await F.put(`/admin/claude-accounts/${b}`,p);if(L.success)return await Z(),L;throw new Error(L.message||"更新Claude账户失败")}catch(L){throw h.value=L.message,L}finally{f.value=!1}},updateClaudeConsoleAccount:async(b,p)=>{f.value=!0,h.value=null;try{const L=await F.put(`/admin/claude-console-accounts/${b}`,p);if(L.success)return await ye(),L;throw new Error(L.message||"更新Claude Console账户失败")}catch(L){throw h.value=L.message,L}finally{f.value=!1}},updateBedrockAccount:async(b,p)=>{f.value=!0,h.value=null;try{const L=await F.put(`/admin/bedrock-accounts/${b}`,p);if(L.success)return await ee(),L;throw new Error(L.message||"更新Bedrock账户失败")}catch(L){throw h.value=L.message,L}finally{f.value=!1}},updateGeminiAccount:async(b,p)=>{f.value=!0,h.value=null;try{const L=await F.put(`/admin/gemini-accounts/${b}`,p);if(L.success)return await X(),L;throw new Error(L.message||"更新Gemini账户失败")}catch(L){throw h.value=L.message,L}finally{f.value=!1}},updateOpenAIAccount:async(b,p)=>{f.value=!0,h.value=null;try{const L=await F.put(`/admin/openai-accounts/${b}`,p);if(L.success)return await E(),L;throw new Error(L.message||"更新OpenAI账户失败")}catch(L){throw h.value=L.message,L}finally{f.value=!1}},updateAzureOpenAIAccount:async(b,p)=>{f.value=!0,h.value=null;try{const L=await F.put(`/admin/azure-openai-accounts/${b}`,p);if(L.success)return await w(),L;throw new Error(L.message||"更新Azure OpenAI账户失败")}catch(L){throw h.value=L.message,L}finally{f.value=!1}},updateOpenAIResponsesAccount:async(b,p)=>{f.value=!0,h.value=null;try{const L=await F.put(`/admin/openai-responses-accounts/${b}`,p);if(L.success)return await m(),L;throw new Error(L.message||"更新OpenAI-Responses账户失败")}catch(L){throw h.value=L.message,L}finally{f.value=!1}},updateGeminiApiAccount:async(b,p)=>{f.value=!0,h.value=null;try{const L=await F.put(`/admin/gemini-api-accounts/${b}`,p);if(L.success)return await X(),L;throw new Error(L.message||"更新Gemini API账户失败")}catch(L){throw h.value=L.message,L}finally{f.value=!1}},toggleAccount:async(b,p)=>{f.value=!0,h.value=null;try{let L;b==="claude"?L=`/admin/claude-accounts/${p}/toggle`:b==="claude-console"?L=`/admin/claude-console-accounts/${p}/toggle`:b==="bedrock"?L=`/admin/bedrock-accounts/${p}/toggle`:b==="gemini"?L=`/admin/gemini-accounts/${p}/toggle`:b==="openai"?L=`/admin/openai-accounts/${p}/toggle`:b==="azure_openai"?L=`/admin/azure-openai-accounts/${p}/toggle`:b==="openai-responses"?L=`/admin/openai-responses-accounts/${p}/toggle`:L=`/admin/openai-accounts/${p}/toggle`;const Xe=await F.put(L);if(Xe.success)return b==="claude"?await Z():b==="claude-console"?await ye():b==="bedrock"?await ee():b==="gemini"?await X():b==="openai"?await E():b==="azure_openai"?await w():b==="openai-responses"?await m():await E(),Xe;throw new Error(Xe.message||"切换状态失败")}catch(L){throw h.value=L.message,L}finally{f.value=!1}},deleteAccount:async(b,p)=>{f.value=!0,h.value=null;try{let L;b==="claude"?L=`/admin/claude-accounts/${p}`:b==="claude-console"?L=`/admin/claude-console-accounts/${p}`:b==="bedrock"?L=`/admin/bedrock-accounts/${p}`:b==="gemini"?L=`/admin/gemini-accounts/${p}`:b==="openai"?L=`/admin/openai-accounts/${p}`:b==="azure_openai"?L=`/admin/azure-openai-accounts/${p}`:b==="openai-responses"?L=`/admin/openai-responses-accounts/${p}`:L=`/admin/openai-accounts/${p}`;const Xe=await F.delete(L);if(Xe.success)return b==="claude"?await Z():b==="claude-console"?await ye():b==="bedrock"?await ee():b==="gemini"?await X():b==="openai"?await E():b==="azure_openai"?await w():b==="openai-responses"?await m():await E(),Xe;throw new Error(Xe.message||"删除失败")}catch(L){throw h.value=L.message,L}finally{f.value=!1}},refreshClaudeToken:async b=>{f.value=!0,h.value=null;try{const p=await F.post(`/admin/claude-accounts/${b}/refresh`);if(p.success)return await Z(),p;throw new Error(p.message||"Token刷新失败")}catch(p){throw h.value=p.message,p}finally{f.value=!1}},generateClaudeAuthUrl:async b=>{try{const p=await F.post("/admin/claude-accounts/generate-auth-url",b);if(p.success)return p.data;throw new Error(p.message||"生成授权URL失败")}catch(p){throw h.value=p.message,p}},exchangeClaudeCode:async b=>{try{const p=await F.post("/admin/claude-accounts/exchange-code",b);if(p.success)return p.data;throw new Error(p.message||"交换授权码失败")}catch(p){throw h.value=p.message,p}},generateClaudeSetupTokenUrl:async b=>{try{const p=await F.post("/admin/claude-accounts/generate-setup-token-url",b);if(p.success)return p.data;throw new Error(p.message||"生成Setup Token URL失败")}catch(p){throw h.value=p.message,p}},exchangeClaudeSetupTokenCode:async b=>{try{const p=await F.post("/admin/claude-accounts/exchange-setup-token-code",b);if(p.success)return p.data;throw new Error(p.message||"交换Setup Token授权码失败")}catch(p){throw h.value=p.message,p}},oauthWithCookie:async b=>{try{const p=await F.post("/admin/claude-accounts/oauth-with-cookie",b);if(p.success)return p.data;throw new Error(p.message||"Cookie授权失败")}catch(p){throw h.value=p.message,p}},oauthSetupTokenWithCookie:async b=>{try{const p=await F.post("/admin/claude-accounts/setup-token-with-cookie",b);if(p.success)return p.data;throw new Error(p.message||"Cookie授权失败")}catch(p){throw h.value=p.message,p}},generateGeminiAuthUrl:async b=>{try{const p=await F.post("/admin/gemini-accounts/generate-auth-url",b);if(p.success)return p.data;throw new Error(p.message||"生成授权URL失败")}catch(p){throw h.value=p.message,p}},exchangeGeminiCode:async b=>{try{const p=await F.post("/admin/gemini-accounts/exchange-code",b);if(p.success)return p.data;throw new Error(p.message||"交换授权码失败")}catch(p){throw h.value=p.message,p}},generateOpenAIAuthUrl:async b=>{try{const p=await F.post("/admin/openai-accounts/generate-auth-url",b);if(p.success)return p.data;throw new Error(p.message||"生成授权URL失败")}catch(p){throw h.value=p.message,p}},exchangeOpenAICode:async b=>{try{const p=await F.post("/admin/openai-accounts/exchange-code",b);if(p.success)return p.data;throw new Error(p.message||"交换授权码失败")}catch(p){throw h.value=p.message,p}},generateDroidAuthUrl:async b=>{h.value=null;try{const p=await F.post("/admin/droid-accounts/generate-auth-url",b);if(p.success)return p.data;throw new Error(p.message||"生成授权URL失败")}catch(p){throw h.value=p.message,p}},exchangeDroidCode:async b=>{h.value=null;try{return await F.post("/admin/droid-accounts/exchange-code",b)}catch(p){throw h.value=p.message,p}},sortAccounts:b=>{G.value===b?ue.value=ue.value==="asc"?"desc":"asc":(G.value=b,ue.value="asc")},reset:()=>{Y.value=[],Re.value=[],y.value=[],W.value=[],U.value=[],Q.value=[],V.value=[],M.value=[],f.value=!1,h.value=null,G.value="",ue.value="asc"}}}),kr={class:"space-y-4"},hr={class:"flex items-center justify-between"},wr={class:"flex cursor-pointer items-center"},$r={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"},Ar={class:"relative"},Cr={key:0,class:"mt-1 text-xs text-red-500"},Ur={key:1,class:"mt-1 text-xs text-green-500"},Ir={class:"grid grid-cols-2 gap-4"},Tr={class:"space-y-4"},_r={class:"flex items-center"},Kr={key:0,class:"grid grid-cols-2 gap-4"},Mr={class:"relative"},Sr=["type"],Ws={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(Y,{emit:Re}){const y=Y,W=Re,U=$({...y.modelValue}),Q=$(!!(U.value.username||U.value.password)),V=$(!1),M=$(""),f=$(""),h=$(!1);ke(()=>y.modelValue,E=>{JSON.stringify(E)!==JSON.stringify(U.value)&&(U.value={...E},Q.value=!!(E.username||E.password))},{deep:!0}),ke(()=>U.value.enabled,()=>{ue()}),ke(()=>U.value.type,()=>{ue()}),ke(()=>U.value.host,()=>{ue()}),ke(()=>U.value.port,()=>{ue()}),ke(()=>U.value.username,()=>{ue()}),ke(()=>U.value.password,()=>{ue()}),ke(Q,E=>{E||(U.value.username="",U.value.password="",ue())});let G=null;function ue(){G&&clearTimeout(G),G=setTimeout(()=>{const E={...U.value};Q.value||(E.username="",E.password=""),W("update:modelValue",E)},100)}function Z(){if(f.value="",h.value=!1,!!M.value)try{const E=M.value.split("#")[0].trim();if(!E)return;const w=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,m=E.match(w);if(!m){const we=/^([^:]+):(\d+)$/,pe=E.match(we);if(pe){U.value.type="socks5",U.value.host=pe[1],U.value.port=pe[2],U.value.username="",U.value.password="",Q.value=!1,h.value=!0,ue(),setTimeout(()=>{h.value=!1},3e3);return}f.value="无效的代理URL格式,请检查输入";return}const[,z,te,N,K,B]=m;U.value.type=z.toLowerCase(),U.value.host=K,U.value.port=B,te&&N?(U.value.username=decodeURIComponent(te),U.value.password=decodeURIComponent(N),Q.value=!0):(U.value.username="",U.value.password="",Q.value=!1),h.value=!0,ue(),setTimeout(()=>{h.value=!1},3e3)}catch{f.value="解析失败,请检查URL格式"}}function ye(){M.value="",f.value="",h.value=!1}function ee(){setTimeout(()=>{Z()},0)}function X(){const E=M.value.trim();E.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(E)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(E))&&Z():/^[^:]+:\d{2,5}$/.test(E)&&Z()}return Os(()=>{G&&clearTimeout(G)}),(E,w)=>(o(),n("div",kr,[e("div",hr,[w[10]||(w[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",wr,[k(e("input",{"onUpdate:modelValue":w[0]||(w[0]=m=>U.value.enabled=m),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Ve,U.value.enabled]]),w[9]||(w[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),U.value.enabled?(o(),n("div",$r,[w[22]||(w[22]=zt('<div class="mb-3 flex items-start gap-3"><div class="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-gray-500"><i class="fas fa-server text-sm text-white"></i></div><div class="flex-1"><p class="text-sm text-gray-700 dark:text-gray-300"> 配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。 </p><p class="mt-1 text-xs text-gray-500 dark:text-gray-400"> 请确保代理服务器稳定可用,否则会影响账户的正常使用。 </p></div></div>',1)),e("div",null,[w[14]||(w[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[x(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",Ar,[k(e("input",{"onUpdate:modelValue":w[1]||(w[1]=m=>M.value=m),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: socks5://username:password@host:port 或 http://host:port",type:"text",onInput:X,onKeyup:gr(Z,["enter"]),onPaste:ee},null,544),[[P,M.value]]),M.value?(o(),n("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:ye},w[11]||(w[11]=[e("i",{class:"fas fa-times"},null,-1)]))):c("",!0)]),f.value?(o(),n("p",Cr,[w[12]||(w[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),x(" "+u(f.value),1)])):h.value?(o(),n("p",Ur,w[13]||(w[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),x(" 代理配置已自动填充 ",-1)]))):c("",!0)]),w[23]||(w[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[w[16]||(w[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),k(e("select",{"onUpdate:modelValue":w[2]||(w[2]=m=>U.value.type=m),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},w[15]||(w[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[Vs,U.value.type]])]),e("div",Ir,[e("div",null,[w[17]||(w[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),k(e("input",{"onUpdate:modelValue":w[3]||(w[3]=m=>U.value.host=m),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 192.168.1.100",type:"text"},null,512),[[P,U.value.host]])]),e("div",null,[w[18]||(w[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),k(e("input",{"onUpdate:modelValue":w[4]||(w[4]=m=>U.value.port=m),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 1080",type:"number"},null,512),[[P,U.value.port]])])]),e("div",Tr,[e("div",_r,[k(e("input",{id:"proxyAuth","onUpdate:modelValue":w[5]||(w[5]=m=>Q.value=m),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Ve,Q.value]]),w[19]||(w[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),Q.value?(o(),n("div",Kr,[e("div",null,[w[20]||(w[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),k(e("input",{"onUpdate:modelValue":w[6]||(w[6]=m=>U.value.username=m),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理用户名",type:"text"},null,512),[[P,U.value.username]])]),e("div",null,[w[21]||(w[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",Mr,[k(e("input",{"onUpdate:modelValue":w[7]||(w[7]=m=>U.value.password=m),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理密码",type:V.value?"text":"password"},null,8,Sr),[[ds,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:w[8]||(w[8]=m=>V.value=!V.value)},[e("i",{class:I(V.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):c("",!0)]),w[24]||(w[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,"提示:"),x("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):c("",!0)]))}},Dr={class:"space-y-6"},Lr={key:0},Pr={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},zr={class:"flex items-start gap-4"},jr={class:"flex-1"},Rr={class:"mb-4"},Vr={class:"flex gap-4"},Or={class:"flex cursor-pointer items-center gap-2"},Er={class:"flex cursor-pointer items-center gap-2"},Nr={key:0,class:"space-y-4"},Fr={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},qr={class:"mb-4"},Gr={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},Wr={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},Br={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},Qr={key:0,class:"mb-4 rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-700 dark:bg-amber-900/30"},Hr={key:1,class:"mb-4 rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-700 dark:bg-red-900/30"},Jr={class:"text-sm text-red-600 dark:text-red-400"},Yr=["disabled"],Zr={key:0,class:"loading-spinner mr-2"},Xr={key:1,class:"fas fa-magic mr-2"},ea={key:1},ta={class:"space-y-4"},sa={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},ra={class:"flex items-start gap-3"},aa={class:"flex-1"},la=["disabled"],oa={key:0,class:"fas fa-link mr-2"},na={key:1,class:"loading-spinner mr-2"},ia={key:1,class:"space-y-3"},da={class:"flex items-center gap-2"},ua=["value"],pa={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},ga={class:"flex items-start gap-3"},ya={class:"flex-1"},ma={class:"space-y-3"},ca={key:1},xa={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},fa={class:"flex items-start gap-4"},ba={class:"flex-1"},va={class:"space-y-4"},ka={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},ha={class:"flex items-start gap-3"},wa={class:"flex-1"},$a=["disabled"],Aa={key:0,class:"fas fa-link mr-2"},Ca={key:1,class:"loading-spinner mr-2"},Ua={key:1,class:"space-y-3"},Ia={class:"flex items-center gap-2"},Ta=["value"],_a={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Ka={class:"flex items-start gap-3"},Ma={class:"flex-1"},Sa={class:"space-y-3"},Da={key:2},La={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},Pa={class:"flex items-start gap-4"},za={class:"flex-1"},ja={class:"space-y-4"},Ra={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Va={class:"flex items-start gap-3"},Oa={class:"flex-1"},Ea=["disabled"],Na={key:0,class:"fas fa-link mr-2"},Fa={key:1,class:"loading-spinner mr-2"},qa={key:1,class:"space-y-3"},Ga={class:"flex items-center gap-2"},Wa=["value"],Ba={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Qa={class:"flex items-start gap-3"},Ha={class:"flex-1"},Ja={class:"space-y-3"},Ya={key:3},Za={class:"rounded-lg border border-cyan-200 bg-cyan-50 p-6 dark:border-cyan-700 dark:bg-cyan-900/30"},Xa={class:"flex items-start gap-4"},el={class:"flex-1"},tl={class:"space-y-4"},sl={class:"rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"},rl={class:"flex items-start gap-3"},al={class:"flex-1"},ll=["disabled"],ol={key:0,class:"fas fa-link mr-2"},nl={key:1,class:"loading-spinner mr-2"},il={key:1,class:"space-y-4"},dl={class:"space-y-2"},ul={class:"flex flex-col gap-2 rounded-md border border-cyan-200 bg-white p-3 dark:border-cyan-700 dark:bg-gray-800"},pl={class:"flex items-center gap-2"},gl=["value"],yl={class:"space-y-2"},ml={class:"flex items-center justify-between rounded-md border border-cyan-200 bg-cyan-50 px-4 py-3 dark:border-cyan-700 dark:bg-cyan-900/30"},cl={class:"font-mono text-xl font-semibold text-cyan-700 dark:text-cyan-200"},xl={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},fl={class:"flex gap-3 pt-4"},bl=["disabled"],vl={key:0,class:"loading-spinner mr-2"},kl={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(Y,{expose:Re,emit:y}){const W=Y,U=y,Q=or(),V=$(!1),M=$(!1),f=$(""),h=$(""),G=$(!1),ue=$(""),Z=$(""),ye=$(""),ee=$(""),X=$(0);let E=null;const w=$("manual"),m=$(""),z=$(!1),te=$(""),N=$(!1),K=$({current:0,total:0}),B=de(()=>m.value.split(`
|
||
`).map(q=>q.trim()).filter(q=>q.length>0).length),we=de(()=>W.platform==="droid"?!!ue.value:f.value&&h.value.trim()),pe=de(()=>{if(!X.value||X.value<=0)return"00:00";const q=Math.floor(X.value/60),g=X.value%60;return`${q.toString().padStart(2,"0")}:${g.toString().padStart(2,"0")}`}),he=q=>{if(Se(),!q||q<=0){X.value=0;return}X.value=Math.floor(q),E=setInterval(()=>{X.value<=1?(X.value=0,Se()):X.value-=1},1e3)},Se=()=>{E&&(clearInterval(E),E=null)};ke(h,q=>{if(W.platform==="droid"||!q||typeof q!="string")return;const g=q.trim();if(!g)return;if(g.startsWith("http://")||g.startsWith("https://"))if(g.startsWith("http://localhost:45462")||g.startsWith("http://localhost:1455"))try{const Te=new URL(g).searchParams.get("code");Te?(h.value=Te,R("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):R("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(me){console.error("Failed to parse URL:",me),R("链接格式错误,请检查是否为完整的 URL","error")}else if(W.platform==="gemini"||W.platform==="openai")try{const Te=new URL(g).searchParams.get("code");Te&&(h.value=Te,R("成功提取授权码!","success"))}catch{}else R("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const J=async()=>{var q;Se(),f.value="",h.value="",Z.value="",ye.value="",ee.value="",X.value=0,ue.value="",G.value=!1,V.value=!0;try{const g=(q=W.proxy)!=null&&q.enabled?{proxy:{type:W.proxy.type,host:W.proxy.host,port:parseInt(W.proxy.port),username:W.proxy.username||null,password:W.proxy.password||null}}:{};if(W.platform==="claude"){const s=await Q.generateClaudeAuthUrl(g);f.value=s.authUrl,ue.value=s.sessionId}else if(W.platform==="gemini"){const s=await Q.generateGeminiAuthUrl(g);f.value=s.authUrl,ue.value=s.sessionId}else if(W.platform==="openai"){const s=await Q.generateOpenAIAuthUrl(g);f.value=s.authUrl,ue.value=s.sessionId}else if(W.platform==="droid"){const s=await Q.generateDroidAuthUrl(g);f.value=s.verificationUriComplete||s.verificationUri,ye.value=s.verificationUri,ee.value=s.verificationUriComplete||s.verificationUri,Z.value=s.userCode,he(s.expiresIn||300),ue.value=s.sessionId}}catch(g){R(g.message||"生成授权链接失败","error")}finally{V.value=!1}},T=()=>{Se(),f.value="",h.value="",Z.value="",ye.value="",ee.value="",X.value=0,ue.value="",J()},Ce=async()=>{if(!f.value){R("请先生成授权链接","warning");return}try{await navigator.clipboard.writeText(f.value),G.value=!0,R("链接已复制","success"),setTimeout(()=>{G.value=!1},2e3)}catch{const g=document.createElement("input");g.value=f.value,document.body.appendChild(g),g.select(),document.execCommand("copy"),document.body.removeChild(g),G.value=!0,R("链接已复制","success"),setTimeout(()=>{G.value=!1},2e3)}},ie=async()=>{if(!Z.value){R("请先生成授权验证码","warning");return}try{await navigator.clipboard.writeText(Z.value),R("验证码已复制","success")}catch{const g=document.createElement("input");g.value=Z.value,document.body.appendChild(g),g.select(),document.execCommand("copy"),document.body.removeChild(g),R("验证码已复制","success")}},Ne=()=>{ee.value?window.open(ee.value,"_blank","noopener"):ye.value&&window.open(ye.value,"_blank","noopener")},H=async()=>{var q;if(we.value){M.value=!0;try{let g={};W.platform==="claude"?g={sessionId:ue.value,callbackUrl:h.value.trim()}:W.platform==="gemini"?g={code:h.value.trim(),sessionId:ue.value}:W.platform==="openai"?g={code:h.value.trim(),sessionId:ue.value}:W.platform==="droid"&&(g={sessionId:ue.value}),(q=W.proxy)!=null&&q.enabled&&(g.proxy={type:W.proxy.type,host:W.proxy.host,port:parseInt(W.proxy.port),username:W.proxy.username||null,password:W.proxy.password||null});let s;if(W.platform==="claude")s=await Q.exchangeClaudeCode(g);else if(W.platform==="gemini")s=await Q.exchangeGeminiCode(g);else if(W.platform==="openai")s=await Q.exchangeOpenAICode(g);else if(W.platform==="droid"){const me=await Q.exchangeDroidCode(g);if(!me.success){if(me.pending){const Te=me.message||"授权尚未完成,请在浏览器确认后稍候再次尝试。";R(Te,"info"),typeof me.expiresIn=="number"&&me.expiresIn>=0&&he(me.expiresIn);return}throw new Error(me.message||"授权失败,请重试")}s=me.data,Se()}U("success",s)}catch(g){R(g.message||"授权失败,请检查授权码是否正确","error")}finally{M.value=!1}}};yr(()=>{Se()});const A=async()=>{var Te;const q=m.value.split(`
|
||
`).map(Ge=>Ge.trim()).filter(Ge=>Ge.length>0);if(q.length===0){te.value="请输入至少一个 sessionKey";return}z.value=!0,te.value="",K.value={current:0,total:q.length};const g=(Te=W.proxy)!=null&&Te.enabled?{type:W.proxy.type,host:W.proxy.host,port:parseInt(W.proxy.port),username:W.proxy.username||null,password:W.proxy.password||null}:null,s=[],me=[];for(let Ge=0;Ge<q.length;Ge++){K.value.current=Ge+1;try{const Oe=await Q.oauthWithCookie({sessionKey:q[Ge],proxy:g});s.push(Oe)}catch(Oe){me.push({index:Ge+1,key:q[Ge].substring(0,20)+"...",error:Oe.message})}}K.value={current:0,total:0},s.length>0?U("success",s):z.value=!1,me.length>0&&s.length===0?te.value="全部授权失败,请检查 sessionKey 是否有效":me.length>0&&(te.value=`${me.length} 个授权失败`)},j=()=>{m.value="",te.value="",z.value=!1,K.value={current:0,total:0}},xe=()=>{j(),f.value="",h.value="",ue.value=""};return Re({resetCookieAuth:j}),(q,g)=>(o(),n("div",Dr,[Y.platform==="claude"?(o(),n("div",Lr,[e("div",Pr,[e("div",zr,[g[29]||(g[29]=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",jr,[g[28]||(g[28]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"},"Claude 账户授权",-1)),e("div",Rr,[g[10]||(g[10]=e("label",{class:"mb-2 block text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式 ",-1)),e("div",Vr,[e("label",Or,[k(e("input",{"onUpdate:modelValue":g[0]||(g[0]=s=>w.value=s),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"manual",onChange:xe},null,544),[[Me,w.value]]),g[8]||(g[8]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"手动授权",-1))]),e("label",Er,[k(e("input",{"onUpdate:modelValue":g[1]||(g[1]=s=>w.value=s),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"cookie",onChange:xe},null,544),[[Me,w.value]]),g[9]||(g[9]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"Cookie自动授权",-1))])])]),w.value==="cookie"?(o(),n("div",Nr,[e("div",Fr,[g[17]||(g[17]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 使用 claude.ai 的 sessionKey 自动完成 OAuth 授权流程,无需手动打开浏览器。 ",-1)),e("div",qr,[e("label",Gr,[g[12]||(g[12]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),g[13]||(g[13]=x(" sessionKey ",-1)),B.value>1?(o(),n("span",Wr,u(B.value)+" 个 ",1)):c("",!0),e("button",{class:"text-blue-500 hover:text-blue-600",type:"button",onClick:g[2]||(g[2]=s=>N.value=!N.value)},g[11]||(g[11]=[e("i",{class:"fas fa-question-circle"},null,-1)]))]),k(e("textarea",{"onUpdate:modelValue":g[3]||(g[3]=s=>m.value=s),class:"form-input w-full resize-y font-mono text-sm",placeholder:`每行一个 sessionKey,例如:
|
||
sk-ant-sid01-xxxxx...
|
||
sk-ant-sid01-yyyyy...`,rows:"3"},null,512),[[P,m.value]]),B.value>1?(o(),n("p",Br,[g[14]||(g[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),x(" 将批量创建 "+u(B.value)+" 个账户 ",1)])):c("",!0)]),N.value?(o(),n("div",Qr,g[15]||(g[15]=[zt('<h5 class="mb-2 font-semibold text-amber-800 dark:text-amber-200"><i class="fas fa-lightbulb mr-1"></i>如何获取 sessionKey </h5><ol class="list-inside list-decimal space-y-1 text-xs text-amber-700 dark:text-amber-300"><li>在浏览器中登录 <strong>claude.ai</strong></li><li> 按 <kbd class="rounded bg-gray-200 px-1 dark:bg-gray-700">F12</kbd> 打开开发者工具 </li><li>切换到 <strong>Application</strong>(应用)标签页</li><li> 在左侧找到 <strong>Cookies</strong> → <strong>https://claude.ai</strong></li><li>找到键为 <strong>sessionKey</strong> 的那一行</li><li>复制其 <strong>Value</strong>(值)列的内容</li></ol><p class="mt-2 text-xs text-amber-600 dark:text-amber-400"><i class="fas fa-info-circle mr-1"></i> sessionKey 通常以 <code class="rounded bg-gray-200 px-1 dark:bg-gray-700">sk-ant-sid01-</code> 开头 </p>',3)]))):c("",!0),te.value?(o(),n("div",Hr,[e("p",Jr,[g[16]||(g[16]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),x(" "+u(te.value),1)])])):c("",!0),e("button",{class:"btn btn-primary w-full px-4 py-3 text-base font-semibold",disabled:z.value||!m.value.trim(),type:"button",onClick:A},[z.value?(o(),n("div",Zr)):(o(),n("i",Xr)),z.value&&K.value.total>1?(o(),n(Ae,{key:2},[x(" 正在授权 "+u(K.value.current)+"/"+u(K.value.total)+"... ",1)],64)):z.value?(o(),n(Ae,{key:3},[x(" 正在授权... ")],64)):(o(),n(Ae,{key:4},[x(" 开始自动授权 ")],64))],8,Yr)])])):(o(),n("div",ea,[g[27]||(g[27]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤完成 Claude 账户的授权: ",-1)),e("div",ta,[e("div",sa,[e("div",ra,[g[20]||(g[20]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",aa,[g[19]||(g[19]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),f.value?(o(),n("div",ia,[e("div",da,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:f.value},null,8,ua),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:Ce},[e("i",{class:I(G.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:T},g[18]||(g[18]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:V.value,onClick:J},[V.value?(o(),n("div",na)):(o(),n("i",oa)),x(" "+u(V.value?"生成中...":"生成授权链接"),1)],8,la))])])]),g[26]||(g[26]=zt('<div class="rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"><div class="flex items-start gap-3"><div class="flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"> 2 </div><div class="flex-1"><p class="mb-2 font-medium text-blue-900 dark:text-blue-200"> 在浏览器中打开链接并完成授权 </p><p class="mb-2 text-sm text-blue-700 dark:text-blue-300"> 请在新标签页中打开授权链接,登录您的 Claude 账户并授权。 </p><div class="rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"><p class="text-xs text-yellow-800 dark:text-yellow-300"><i class="fas fa-exclamation-triangle mr-1"></i><strong>注意:</strong>如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 </p></div></div></div></div>',1)),e("div",pa,[e("div",ga,[g[25]||(g[25]=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",ya,[g[23]||(g[23]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),g[24]||(g[24]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"},[x(" 授权完成后,页面会显示一个 "),e("strong",null,"Authorization Code"),x(",请将其复制并粘贴到下方输入框: ")],-1)),e("div",ma,[e("div",null,[g[21]||(g[21]=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"}),x("Authorization Code ")],-1)),k(e("textarea",{"onUpdate:modelValue":g[4]||(g[4]=s=>h.value=s),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[P,h.value]])]),g[22]||(g[22]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 请粘贴从Claude页面复制的Authorization Code ")],-1))])])])])])]))])])])])):Y.platform==="gemini"?(o(),n("div",ca,[e("div",xa,[e("div",fa,[g[41]||(g[41]=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",ba,[g[39]||(g[39]=e("h4",{class:"mb-3 font-semibold text-green-900 dark:text-green-200"},"Gemini 账户授权",-1)),g[40]||(g[40]=e("p",{class:"mb-4 text-sm text-green-800 dark:text-green-300"}," 请按照以下步骤完成 Gemini 账户的授权: ",-1)),e("div",va,[e("div",ka,[e("div",ha,[g[32]||(g[32]=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",wa,[g[31]||(g[31]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 点击下方按钮生成授权链接 ",-1)),f.value?(o(),n("div",Ua,[e("div",Ia,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:f.value},null,8,Ta),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:Ce},[e("i",{class:I(G.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:T},g[30]||(g[30]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:V.value,onClick:J},[V.value?(o(),n("div",Ca)):(o(),n("i",Aa)),x(" "+u(V.value?"生成中...":"生成授权链接"),1)],8,$a))])])]),g[38]||(g[38]=zt('<div class="rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"><div class="flex items-start gap-3"><div class="flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"> 2 </div><div class="flex-1"><p class="mb-2 font-medium text-green-900 dark:text-green-200"> 在浏览器中打开链接并完成授权 </p><p class="mb-2 text-sm text-green-700 dark:text-green-300"> 请在新标签页中打开授权链接,登录您的 Gemini 账户并授权。 </p><div class="rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"><p class="text-xs text-yellow-800 dark:text-yellow-300"><i class="fas fa-exclamation-triangle mr-1"></i><strong>注意:</strong>如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 </p></div></div></div></div>',1)),e("div",_a,[e("div",Ka,[g[37]||(g[37]=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",Ma,[g[35]||(g[35]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 输入 Authorization Code ",-1)),g[36]||(g[36]=e("p",{class:"mb-3 text-sm text-green-700 dark:text-green-300"}," 授权完成后,页面会显示一个 Authorization Code,请将其复制并粘贴到下方输入框: ",-1)),e("div",Sa,[e("div",null,[g[33]||(g[33]=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"}),x("Authorization Code ")],-1)),k(e("textarea",{"onUpdate:modelValue":g[5]||(g[5]=s=>h.value=s),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[P,h.value]])]),g[34]||(g[34]=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"}),x(" 请粘贴从Gemini页面复制的Authorization Code ")])],-1))])])])])])])])])])):Y.platform==="openai"?(o(),n("div",Da,[e("div",La,[e("div",Pa,[g[53]||(g[53]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-orange-500"},[e("i",{class:"fas fa-brain text-white"})],-1)),e("div",za,[g[51]||(g[51]=e("h4",{class:"mb-3 font-semibold text-orange-900 dark:text-orange-200"},"OpenAI 账户授权",-1)),g[52]||(g[52]=e("p",{class:"mb-4 text-sm text-orange-800 dark:text-orange-300"}," 请按照以下步骤完成 OpenAI 账户的授权: ",-1)),e("div",ja,[e("div",Ra,[e("div",Va,[g[44]||(g[44]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Oa,[g[43]||(g[43]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 点击下方按钮生成授权链接 ",-1)),f.value?(o(),n("div",qa,[e("div",Ga,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:f.value},null,8,Wa),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:Ce},[e("i",{class:I(G.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:T},g[42]||(g[42]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:V.value,onClick:J},[V.value?(o(),n("div",Fa)):(o(),n("i",Na)),x(" "+u(V.value?"生成中...":"生成授权链接"),1)],8,Ea))])])]),g[50]||(g[50]=zt('<div class="rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"><div class="flex items-start gap-3"><div class="flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"> 2 </div><div class="flex-1"><p class="mb-2 font-medium text-orange-900 dark:text-orange-200"> 在浏览器中打开链接并完成授权 </p><p class="mb-2 text-sm text-orange-700 dark:text-orange-300"> 请在新标签页中打开授权链接,登录您的 OpenAI 账户并授权。 </p><div class="mb-3 rounded border border-amber-300 bg-amber-50 p-3 dark:border-amber-700 dark:bg-amber-900/30"><p class="text-xs text-amber-800 dark:text-amber-300"><i class="fas fa-clock mr-1"></i><strong>重要提示:</strong>授权后页面可能会加载较长时间,请耐心等待。 </p><p class="mt-2 text-xs text-amber-700 dark:text-amber-400"> 当浏览器地址栏变为 <strong class="font-mono">http://localhost:1455/...</strong> 开头时,表示授权已完成。 </p></div><div class="rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"><p class="text-xs text-yellow-800 dark:text-yellow-300"><i class="fas fa-exclamation-triangle mr-1"></i><strong>注意:</strong>如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 </p></div></div></div></div>',1)),e("div",Ba,[e("div",Qa,[g[49]||(g[49]=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",Ha,[g[47]||(g[47]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 输入授权链接或 Code ",-1)),g[48]||(g[48]=e("p",{class:"mb-3 text-sm text-orange-700 dark:text-orange-300"},[x(" 授权完成后,当页面地址变为 "),e("strong",{class:"font-mono"},"http://localhost:1455/..."),x(" 时: ")],-1)),e("div",Ja,[e("div",null,[g[45]||(g[45]=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"}),x("授权链接或 Code ")],-1)),k(e("textarea",{"onUpdate:modelValue":g[6]||(g[6]=s=>h.value=s),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),[[P,h.value]])]),g[46]||(g[46]=zt('<div class="rounded border border-blue-300 bg-blue-50 p-2 dark:border-blue-700 dark:bg-blue-900/30"><p class="text-xs text-blue-700 dark:text-blue-300"><i class="fas fa-lightbulb mr-1"></i><strong>提示:</strong>您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别。 </p><p class="mt-1 text-xs text-blue-600 dark:text-blue-400"> • 完整链接示例:<span class="font-mono">http://localhost:1455/auth/callback?code=ac_4hm8...</span></p><p class="text-xs text-blue-600"> • 仅 Code 示例:<span class="font-mono">ac_4hm8iqmx9A2fzMy_cwye7U3W7...</span></p></div>',1))])])])])])])])])])):Y.platform==="droid"?(o(),n("div",Ya,[e("div",Za,[e("div",Xa,[g[65]||(g[65]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-cyan-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",el,[g[63]||(g[63]=e("h4",{class:"mb-3 font-semibold text-cyan-900 dark:text-cyan-200"},"Droid 账户授权",-1)),g[64]||(g[64]=e("p",{class:"mb-4 text-sm text-cyan-800 dark:text-cyan-300"}," 请按照以下步骤完成 Factory (Droid) 账户的授权: ",-1)),e("div",tl,[e("div",sl,[e("div",rl,[g[61]||(g[61]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",al,[g[60]||(g[60]=e("p",{class:"mb-2 font-medium text-cyan-900 dark:text-cyan-200"}," 点击下方按钮生成授权链接 ",-1)),f.value?(o(),n("div",il,[e("div",dl,[g[56]||(g[56]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权链接",-1)),e("div",ul,[e("div",pl,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:f.value},null,8,gl),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:Ce},[e("i",{class:I(G.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("div",{class:"flex flex-wrap items-center gap-2"},[e("button",{class:"inline-flex items-center gap-1 rounded-md border border-cyan-200 bg-white px-3 py-1.5 text-xs font-medium text-cyan-600 shadow-sm transition-colors hover:border-cyan-300 hover:bg-cyan-50 dark:border-cyan-700 dark:bg-cyan-900/40 dark:text-cyan-200 dark:hover:border-cyan-500 dark:hover:bg-cyan-900/60",onClick:Ne},g[54]||(g[54]=[e("i",{class:"fas fa-external-link-alt text-xs"},null,-1),x(" 在新标签中打开 ",-1)])),e("button",{class:"inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-xs font-medium text-cyan-600 transition-colors hover:text-cyan-700 dark:text-cyan-300 dark:hover:text-cyan-200",onClick:T},g[55]||(g[55]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),x("重新生成 ",-1)]))])])]),e("div",yl,[g[58]||(g[58]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权验证码",-1)),e("div",ml,[e("span",cl,u(Z.value||"------"),1),e("button",{class:"rounded-lg bg-white px-3 py-1 text-sm text-cyan-600 transition-colors hover:bg-cyan-100 dark:bg-cyan-800 dark:text-cyan-200 dark:hover:bg-cyan-700",onClick:ie},g[57]||(g[57]=[e("i",{class:"fas fa-copy mr-1"},null,-1),x("复制 ",-1)]))])]),e("div",xl,[e("span",null,[g[59]||(g[59]=e("i",{class:"fas fa-hourglass-half mr-1 text-cyan-500"},null,-1)),x(" 剩余有效期:"+u(pe.value),1)])])])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:V.value,onClick:J},[V.value?(o(),n("div",nl)):(o(),n("i",ol)),x(" "+u(V.value?"生成中...":"生成授权链接"),1)],8,ll))])])]),g[62]||(g[62]=zt('<div class="rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"><div class="flex items-start gap-3"><div class="flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-600 text-xs font-bold text-white"> 2 </div><div class="flex-1"><p class="mb-2 font-medium text-cyan-900 dark:text-cyan-200"> 在浏览器中打开链接并完成授权 </p><div class="space-y-2 text-sm text-cyan-700 dark:text-cyan-300"><p> 在浏览器中打开授权页面,输入上方验证码并登录 Factory / Droid 账户,最后点击允许授权。 </p></div></div></div></div><div class="rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"><div class="flex items-start gap-3"><div class="flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-600 text-xs font-bold text-white"> 3 </div><div class="flex-1"><p class="mb-2 font-medium text-cyan-900 dark:text-cyan-200"> 完成授权后点击下方“完成授权”按钮,系统会自动获取访问令牌。 </p><p class="text-xs text-gray-500 dark:text-gray-400"> 若提示授权仍在等待确认,请稍候片刻后系统会自动重试。 </p></div></div></div>',2))])])])])])):c("",!0),e("div",fl,[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:g[7]||(g[7]=s=>q.$emit("back"))}," 上一步 "),Y.platform==="claude"&&w.value==="cookie"?c("",!0):(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!we.value||M.value,type:"button",onClick:H},[M.value?(o(),n("div",vl)):c("",!0),x(" "+u(M.value?"验证中...":"完成授权"),1)],8,bl))])]))}},hl={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},wl={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"},$l={class:"mb-4 flex items-center justify-between sm:mb-6"},Al={class:"mb-6"},Cl={key:0,class:"mb-6 rounded-lg border border-blue-200 bg-blue-50 p-4"},Ul={class:"space-y-4"},Il={class:"flex gap-4"},Tl={class:"flex cursor-pointer items-center"},_l={class:"flex cursor-pointer items-center"},Kl={class:"flex cursor-pointer items-center"},Ml={class:"flex cursor-pointer items-center"},Sl={class:"flex gap-3"},Dl=["disabled"],Ll={key:0,class:"loading-spinner mr-2"},Pl={class:"space-y-4"},zl={key:0,class:"py-8 text-center"},jl={key:1,class:"rounded-lg bg-gray-50 py-8 text-center"},Rl={key:2,class:"grid grid-cols-1 gap-4 md:grid-cols-2"},Vl={class:"mb-3 flex items-start justify-between"},Ol={class:"flex-1"},El={class:"font-semibold text-gray-900"},Nl={class:"mt-1 text-sm text-gray-500"},Fl={class:"ml-4 flex items-center gap-2"},ql={class:"flex items-center justify-between text-sm text-gray-600"},Gl={class:"flex items-center gap-4"},Wl={class:"flex items-center gap-2"},Bl=["onClick"],Ql=["disabled","onClick"],Hl={key:1,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Jl={class:"modal-content w-full max-w-lg p-4 sm:p-6"},Yl={class:"space-y-4"},Zl={class:"rounded-lg bg-gray-100 px-3 py-2 text-sm text-gray-600"},Xl={class:"flex gap-3 pt-4"},eo=["disabled"],to={key:0,class:"loading-spinner mr-2"},so={__name:"GroupManagementModal",emits:["close","refresh"],setup(Y,{emit:Re}){const y=Re,W=$(!0),U=$(!1),Q=$([]),V=$(!1),M=$(!1),f=$({name:"",platform:"claude",description:""}),h=$(!1),G=$(!1),ue=$(null),Z=$({name:"",platform:"",description:""}),ye=N=>N?new Date(N).toLocaleDateString("zh-CN"):"-",ee=async()=>{U.value=!0;try{const N=await F.get("/admin/account-groups");Q.value=N.data||[]}catch{R("加载分组列表失败","error")}finally{U.value=!1}},X=async()=>{var N,K;if(!f.value.name||!f.value.platform){R("请填写必填项","error");return}M.value=!0;try{await F.post("/admin/account-groups",{name:f.value.name,platform:f.value.platform,description:f.value.description}),R("分组创建成功","success"),E(),await ee(),y("refresh")}catch(B){R(((K=(N=B.response)==null?void 0:N.data)==null?void 0:K.error)||"创建分组失败","error")}finally{M.value=!1}},E=()=>{V.value=!1,f.value={name:"",platform:"claude",description:""}},w=N=>{ue.value=N,Z.value={name:N.name,platform:N.platform,description:N.description||""},h.value=!0},m=async()=>{var N,K;if(!Z.value.name){R("请填写分组名称","error");return}G.value=!0;try{await F.put(`/admin/account-groups/${ue.value.id}`,{name:Z.value.name,description:Z.value.description}),R("分组更新成功","success"),z(),await ee(),y("refresh")}catch(B){R(((K=(N=B.response)==null?void 0:N.data)==null?void 0:K.error)||"更新分组失败","error")}finally{G.value=!1}},z=()=>{h.value=!1,ue.value=null,Z.value={name:"",platform:"",description:""}},te=async N=>{var K,B;if(N.memberCount>0){R("分组内还有成员,无法删除","error");return}if(confirm(`确定要删除分组 "${N.name}" 吗?`))try{await F.delete(`/admin/account-groups/${N.id}`),R("分组删除成功","success"),await ee(),y("refresh")}catch(we){R(((B=(K=we.response)==null?void 0:K.data)==null?void 0:B.error)||"删除分组失败","error")}};return us(()=>{ee()}),(N,K)=>(o(),Ye(jt,{to:"body"},[W.value?(o(),n("div",hl,[e("div",wl,[e("div",$l,[K[11]||(K[11]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-layer-group text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 sm:text-xl"},"账户分组管理")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:K[0]||(K[0]=B=>N.$emit("close"))},K[10]||(K[10]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",Al,[e("button",{class:"btn btn-primary px-4 py-2",onClick:K[1]||(K[1]=B=>V.value=!0)},K[12]||(K[12]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 创建新分组 ",-1)]))]),V.value?(o(),n("div",Cl,[K[20]||(K[20]=e("h4",{class:"mb-4 text-lg font-semibold text-gray-900"},"创建新分组",-1)),e("div",Ul,[e("div",null,[K[13]||(K[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),k(e("input",{"onUpdate:modelValue":K[2]||(K[2]=B=>f.value.name=B),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[P,f.value.name]])]),e("div",null,[K[18]||(K[18]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型 *",-1)),e("div",Il,[e("label",Tl,[k(e("input",{"onUpdate:modelValue":K[3]||(K[3]=B=>f.value.platform=B),class:"mr-2",type:"radio",value:"claude"},null,512),[[Me,f.value.platform]]),K[14]||(K[14]=e("span",{class:"text-sm text-gray-700"},"Claude",-1))]),e("label",_l,[k(e("input",{"onUpdate:modelValue":K[4]||(K[4]=B=>f.value.platform=B),class:"mr-2",type:"radio",value:"gemini"},null,512),[[Me,f.value.platform]]),K[15]||(K[15]=e("span",{class:"text-sm text-gray-700"},"Gemini",-1))]),e("label",Kl,[k(e("input",{"onUpdate:modelValue":K[5]||(K[5]=B=>f.value.platform=B),class:"mr-2",type:"radio",value:"openai"},null,512),[[Me,f.value.platform]]),K[16]||(K[16]=e("span",{class:"text-sm text-gray-700"},"OpenAI",-1))]),e("label",Ml,[k(e("input",{"onUpdate:modelValue":K[6]||(K[6]=B=>f.value.platform=B),class:"mr-2",type:"radio",value:"droid"},null,512),[[Me,f.value.platform]]),K[17]||(K[17]=e("span",{class:"text-sm text-gray-700"},"Droid",-1))])])]),e("div",null,[K[19]||(K[19]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),k(e("textarea",{"onUpdate:modelValue":K[7]||(K[7]=B=>f.value.description=B),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[P,f.value.description]])]),e("div",Sl,[e("button",{class:"btn btn-primary px-4 py-2",disabled:!f.value.name||!f.value.platform||M.value,onClick:X},[M.value?(o(),n("div",Ll)):c("",!0),x(" "+u(M.value?"创建中...":"创建"),1)],8,Dl),e("button",{class:"btn btn-secondary px-4 py-2",onClick:E},"取消")])])])):c("",!0),e("div",Pl,[U.value?(o(),n("div",zl,K[21]||(K[21]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500"},"加载中...",-1)]))):Q.value.length===0?(o(),n("div",jl,K[22]||(K[22]=[e("i",{class:"fas fa-layer-group mb-4 text-4xl text-gray-300"},null,-1),e("p",{class:"text-gray-500"},"暂无分组",-1)]))):(o(),n("div",Rl,[(o(!0),n(Ae,null,Be(Q.value,B=>(o(),n("div",{key:B.id,class:"rounded-lg border bg-white p-4 transition-shadow hover:shadow-md"},[e("div",Vl,[e("div",Ol,[e("h4",El,u(B.name),1),e("p",Nl,u(B.description||"暂无描述"),1)]),e("div",Fl,[e("span",{class:I(["rounded-full px-2 py-1 text-xs font-medium",B.platform==="claude"?"bg-purple-100 text-purple-700":B.platform==="gemini"?"bg-blue-100 text-blue-700":B.platform==="openai"?"bg-gray-100 text-gray-700":"bg-cyan-100 text-cyan-700"])},u(B.platform==="claude"?"Claude":B.platform==="gemini"?"Gemini":B.platform==="openai"?"OpenAI":"Droid"),3)])]),e("div",ql,[e("div",Gl,[e("span",null,[K[23]||(K[23]=e("i",{class:"fas fa-users mr-1"},null,-1)),x(" "+u(B.memberCount||0)+" 个成员 ",1)]),e("span",null,[K[24]||(K[24]=e("i",{class:"fas fa-clock mr-1"},null,-1)),x(" "+u(ye(B.createdAt)),1)])]),e("div",Wl,[e("button",{class:"text-blue-600 transition-colors hover:text-blue-800",title:"编辑",onClick:we=>w(B)},K[25]||(K[25]=[e("i",{class:"fas fa-edit"},null,-1)]),8,Bl),e("button",{class:"text-red-600 transition-colors hover:text-red-800",disabled:B.memberCount>0,title:"删除",onClick:we=>te(B)},K[26]||(K[26]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Ql)])])]))),128))]))])])])):c("",!0),h.value?(o(),n("div",Hl,[e("div",Jl,[e("div",{class:"mb-4 flex items-center justify-between"},[K[28]||(K[28]=e("h3",{class:"text-lg font-bold text-gray-900"},"编辑分组",-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",onClick:z},K[27]||(K[27]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",Yl,[e("div",null,[K[29]||(K[29]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),k(e("input",{"onUpdate:modelValue":K[8]||(K[8]=B=>Z.value.name=B),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[P,Z.value.name]])]),e("div",null,[K[31]||(K[31]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型",-1)),e("div",Zl,[x(u(Z.value.platform==="claude"?"Claude":Z.value.platform==="gemini"?"Gemini":"OpenAI")+" ",1),K[30]||(K[30]=e("span",{class:"ml-2 text-xs text-gray-500"},"(不可修改)",-1))])]),e("div",null,[K[32]||(K[32]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),k(e("textarea",{"onUpdate:modelValue":K[9]||(K[9]=B=>Z.value.description=B),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[P,Z.value.description]])]),e("div",Xl,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!Z.value.name||G.value,onClick:m},[G.value?(o(),n("div",to)):c("",!0),x(" "+u(G.value?"更新中...":"更新"),1)],8,eo),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:z},"取消")])])])])):c("",!0)]))}},ro={key:0,class:"modal fixed inset-0 z-[60] flex items-center justify-center p-3 sm:p-4"},ao={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"},lo={class:"mb-4 flex items-center justify-between sm:mb-6"},oo={class:"flex items-center gap-2 sm:gap-3"},no={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},io={class:"flex items-center gap-2"},uo=["disabled"],po={key:0,class:"py-8 text-center"},go={key:1,class:"rounded-lg bg-gray-50 py-8 text-center dark:bg-gray-800"},yo={key:2},mo={class:"mb-4 space-y-3"},co={class:"rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-800"},xo={class:"mb-3 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},fo={class:"flex items-center gap-2"},bo={class:"flex gap-1"},vo={class:"flex flex-1 items-center gap-2 lg:max-w-md"},ko={class:"relative flex-1"},ho={class:"flex gap-1"},wo={class:"flex flex-wrap items-center justify-between gap-2"},$o={class:"flex flex-wrap items-center gap-2"},Ao=["disabled"],Co=["disabled"],Uo=["disabled"],Io=["disabled"],To={class:"flex items-center gap-2 rounded-md bg-purple-50 px-3 py-1.5 dark:bg-purple-900/20"},_o={class:"text-xs font-medium text-purple-700 dark:text-purple-300"},Ko={class:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"},Mo={key:0,class:"absolute -left-2 -top-2 z-10"},So=["title"],Do={class:"flex flex-col gap-3"},Lo={class:"flex items-start justify-between gap-2"},Po=["title"],zo={class:"flex items-center gap-1"},jo=["onClick"],Ro=["disabled","onClick"],Vo={key:0,class:"loading-spinner-sm"},Oo={key:1,class:"fas fa-redo"},Eo=["disabled","onClick"],No={key:0,class:"loading-spinner-sm"},Fo={key:1,class:"fas fa-trash"},qo={class:"flex flex-wrap items-center gap-3 text-xs text-gray-600 dark:text-gray-400"},Go={key:0},Wo={key:0,class:"mt-4 flex items-center justify-between"},Bo={class:"text-sm text-gray-600 dark:text-gray-400"},Qo={class:"flex items-center gap-2"},Ho=["disabled"],Jo=["disabled"],Yo={class:"px-3 py-1.5 text-sm font-medium text-gray-700 dark:text-gray-300"},Zo=["disabled"],Xo=["disabled"],en={__name:"ApiKeyManagementModal",props:{accountId:{type:String,required:!0},accountName:{type:String,default:""}},emits:["close","refresh"],setup(Y,{emit:Re}){const y=Y,W=Re,U=$(!0),Q=$(!1),V=$(null),M=$(null),f=$([]),h=$(1),G=$(15),ue=$(!1),Z=$("all"),ye=$(""),ee=$("fuzzy"),X=$(!1),E=H=>!H||H.length<12?H:`${H.substring(0,8)}...${H.substring(H.length-4)}`,w=de(()=>{let H=f.value;if(Z.value!=="all"&&(H=H.filter(A=>A.status===Z.value)),ye.value.trim()){const A=ye.value.trim();H=H.filter(j=>{const xe=j.key;return ee.value==="exact"?xe===A:xe.toLowerCase().includes(A.toLowerCase())})}return H}),m=de(()=>w.value.length),z=de(()=>Math.ceil(m.value/G.value)),te=de(()=>{const H=(h.value-1)*G.value,A=H+G.value;return w.value.slice(H,A)}),N=de(()=>f.value.filter(H=>H.status==="active").length),K=de(()=>f.value.filter(H=>H.status==="error").length),B=async()=>{Q.value=!0;try{const A=(await F.get(`/admin/droid-accounts/${y.accountId}`)).data;let j=[];if(Array.isArray(A.apiKeys))j=A.apiKeys;else if(typeof A.apiKeys=="string")try{j=JSON.parse(A.apiKeys)}catch(q){console.error("Failed to parse apiKeys:",q)}const xe=j.map(q=>typeof q=="string"?{key:q,usageCount:0,status:"active",lastUsedAt:null,errorMessage:""}:typeof q=="object"&&q!==null?{key:q.key||q.apiKey||"",usageCount:q.usageCount||q.count||0,status:q.status||"active",lastUsedAt:q.lastUsedAt||q.lastUsed||null,errorMessage:q.errorMessage||""}:{key:String(q),usageCount:0,status:"active",lastUsedAt:null,errorMessage:""});f.value=xe.sort((q,g)=>q.lastUsedAt&&g.lastUsedAt?new Date(g.lastUsedAt)-new Date(q.lastUsedAt):q.lastUsedAt&&!g.lastUsedAt?-1:!q.lastUsedAt&&g.lastUsedAt?1:(g.usageCount||0)-(q.usageCount||0))}catch(H){console.error("Failed to load API keys:",H),R("加载 API Key 失败","error")}finally{Q.value=!1,h.value=1}},we=async H=>{var A,j;if(confirm(`确定要删除 API Key "${E(H.key)}" 吗?`)){V.value=H.key;try{const xe={removeApiKeys:[H.key],apiKeyUpdateMode:"delete"};await F.put(`/admin/droid-accounts/${y.accountId}`,xe),R("API Key 已删除","success"),await B(),W("refresh")}catch(xe){console.error("Failed to delete API key:",xe),R(((j=(A=xe.response)==null?void 0:A.data)==null?void 0:j.error)||"删除 API Key 失败","error")}finally{V.value=null}}},pe=async H=>{var A,j;if(confirm(`确定要重置 API Key "${E(H.key)}" 的状态吗?这将清除错误信息并恢复为正常状态。`)){M.value=H.key;try{const xe={apiKeys:[{key:H.key,status:"active",errorMessage:""}],apiKeyUpdateMode:"update"};await F.put(`/admin/droid-accounts/${y.accountId}`,xe),R("API Key 状态已重置","success"),await B(),W("refresh")}catch(xe){console.error("Failed to reset API key status:",xe),R(((j=(A=xe.response)==null?void 0:A.data)==null?void 0:j.error)||"重置 API Key 状态失败","error")}finally{M.value=null}}},he=async()=>{var A,j;const H=f.value.filter(xe=>xe.status==="error");if(H.length===0){R("没有异常状态的 API Key","warning");return}if(confirm(`确定要删除所有 ${H.length} 个异常状态的 API Key 吗?此操作不可恢复!`)){X.value=!0;try{const q={removeApiKeys:H.map(g=>g.key),apiKeyUpdateMode:"delete"};await F.put(`/admin/droid-accounts/${y.accountId}`,q),R(`成功删除 ${H.length} 个异常 API Key`,"success"),await B(),W("refresh")}catch(xe){console.error("Failed to delete error API keys:",xe),R(((j=(A=xe.response)==null?void 0:A.data)==null?void 0:j.error)||"批量删除失败","error")}finally{X.value=!1}}},Se=async()=>{var H,A;if(f.value.length===0){R("没有可删除的 API Key","warning");return}if(confirm(`确定要删除所有 ${f.value.length} 个 API Key 吗?此操作不可恢复!
|
||
|
||
请再次确认:这将删除该账户下的所有 API Key。`)&&confirm("最后确认:真的要删除所有 API Key 吗?")){X.value=!0;try{const j=f.value.map(q=>q.key),xe={removeApiKeys:j,apiKeyUpdateMode:"delete"};await F.put(`/admin/droid-accounts/${y.accountId}`,xe),R(`成功删除所有 ${j.length} 个 API Key`,"success"),await B(),W("refresh")}catch(j){console.error("Failed to delete all API keys:",j),R(((A=(H=j.response)==null?void 0:H.data)==null?void 0:A.error)||"批量删除失败","error")}finally{X.value=!1}}},J=H=>{let A=[],j="";if(H==="error"?(A=f.value.filter(me=>me.status==="error"),j=`error_api_keys_${y.accountName}_${new Date().toISOString().split("T")[0]}.txt`):(A=f.value,j=`all_api_keys_${y.accountName}_${new Date().toISOString().split("T")[0]}.txt`),A.length===0){R("没有可导出的 API Key","warning");return}const xe=A.map(me=>me.key).join(`
|
||
`),q=new Blob([xe],{type:"text/plain;charset=utf-8"}),g=URL.createObjectURL(q),s=document.createElement("a");s.href=g,s.download=j,document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(g),R(`成功导出 ${A.length} 个 API Key`,"success")},T=async H=>{if(typeof navigator<"u"&&navigator.clipboard&&typeof navigator.clipboard.writeText=="function"&&(typeof window>"u"||window.isSecureContext!==!1)){await navigator.clipboard.writeText(H);return}if(typeof document>"u")throw new Error("clipboard unavailable");const j=document.createElement("textarea");j.value=H,j.setAttribute("readonly",""),j.style.position="fixed",j.style.opacity="0",j.style.pointerEvents="none",document.body.appendChild(j),j.select();try{const xe=document.execCommand("copy");if(document.body.removeChild(j),!xe)throw new Error("execCommand failed")}catch(xe){throw document.body.removeChild(j),xe}},Ce=async H=>{try{await T(H),R("API Key 已复制","success")}catch(A){console.error("Failed to copy:",A),R("复制失败,请手动复制","error")}},ie=async()=>{if(!(!f.value.length||ue.value)){ue.value=!0;try{const H=f.value.map(A=>A.key).join(`
|
||
`);await T(H),R(`已复制 ${f.value.length} 条 API Key`,"success")}catch(H){console.error("Failed to copy all keys:",H),R("复制全部 API Key 失败,请手动复制","error")}finally{ue.value=!1}}},Ne=H=>{if(!H)return"-";try{return new Date(H).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return"-"}};return us(()=>{B()}),(H,A)=>(o(),Ye(jt,{to:"body"},[U.value?(o(),n("div",ro,[e("div",ao,[e("div",lo,[e("div",oo,[A[14]||(A[14]=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-key text-sm text-white sm:text-base"})],-1)),e("div",null,[A[13]||(A[13]=e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," API Key 管理 ",-1)),e("p",no,u(Y.accountName),1)])]),e("div",io,[e("button",{class:"flex items-center gap-2 rounded-lg border border-purple-200 bg-white/90 px-3 py-1.5 text-xs font-semibold text-purple-600 shadow-sm transition-all duration-200 hover:border-purple-300 hover:bg-purple-50 hover:text-purple-700 focus:outline-none focus:ring-2 focus:ring-purple-200 disabled:cursor-not-allowed disabled:opacity-60 dark:border-purple-600/60 dark:bg-purple-900/20 dark:text-purple-200 dark:hover:border-purple-500 dark:hover:bg-purple-900/40 dark:hover:text-purple-100 dark:focus:ring-purple-500/40 sm:text-sm",disabled:Q.value||f.value.length===0||ue.value,onClick:ie},[e("i",{class:I(["text-sm sm:text-base",ue.value?"fas fa-spinner fa-spin":"fas fa-clipboard-list"])},null,2),A[15]||(A[15]=e("span",null,"复制全部 Key",-1))],8,uo),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-400 transition-colors hover:text-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:text-gray-200 sm:h-10 sm:w-10",title:"关闭",onClick:A[0]||(A[0]=j=>H.$emit("close"))},A[16]||(A[16]=[e("i",{class:"fas fa-times text-base sm:text-lg"},null,-1)]))])]),Q.value?(o(),n("div",po,A[17]||(A[17]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):c("",!0),!Q.value&&f.value.length===0?(o(),n("div",go,A[18]||(A[18]=[e("i",{class:"fas fa-key mb-4 text-4xl text-gray-300 dark:text-gray-600"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"暂无 API Key",-1)]))):c("",!0),!Q.value&&f.value.length>0?(o(),n("div",yo,[e("div",mo,[e("div",co,[e("div",xo,[e("div",fo,[A[21]||(A[21]=e("i",{class:"fas fa-filter text-gray-400 dark:text-gray-500"},null,-1)),A[22]||(A[22]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"筛选:",-1)),e("div",bo,[e("button",{class:I(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",Z.value==="all"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:A[1]||(A[1]=j=>Z.value="all")}," 全部 ("+u(f.value.length)+") ",3),e("button",{class:I(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",Z.value==="active"?"bg-green-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:A[2]||(A[2]=j=>Z.value="active")},[A[19]||(A[19]=e("i",{class:"fas fa-check-circle mr-1"},null,-1)),x(" 正常 ("+u(N.value)+") ",1)],2),e("button",{class:I(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",Z.value==="error"?"bg-red-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:A[3]||(A[3]=j=>Z.value="error")},[A[20]||(A[20]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),x(" 异常 ("+u(K.value)+") ",1)],2)])]),e("div",vo,[e("div",ko,[k(e("input",{"onUpdate:modelValue":A[4]||(A[4]=j=>ye.value=j),class:"w-full rounded-md border border-gray-300 bg-gray-50 py-2 pl-10 pr-3 text-sm text-gray-700 transition-colors placeholder:text-gray-400 focus:border-purple-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-300 dark:placeholder:text-gray-500 dark:focus:border-purple-400 dark:focus:bg-gray-800",placeholder:"搜索 API Key...",type:"text"},null,512),[[P,ye.value]]),A[23]||(A[23]=e("i",{class:"fas fa-search absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 dark:text-gray-500"},null,-1))]),e("div",ho,[e("button",{class:I(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",ee.value==="fuzzy"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),title:"模糊搜索:包含查询字符串即可",onClick:A[5]||(A[5]=j=>ee.value="fuzzy")},A[24]||(A[24]=[e("i",{class:"fas fa-search mr-1"},null,-1),x(" 模糊 ",-1)]),2),e("button",{class:I(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",ee.value==="exact"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),title:"精确搜索:完全匹配完整 Key",onClick:A[6]||(A[6]=j=>ee.value="exact")},A[25]||(A[25]=[e("i",{class:"fas fa-equals mr-1"},null,-1),x(" 精确 ",-1)]),2)])])]),A[35]||(A[35]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-700"},null,-1)),e("div",wo,[e("div",$o,[A[30]||(A[30]=e("span",{class:"text-xs font-medium text-gray-500 dark:text-gray-400"},"批量操作:",-1)),e("button",{class:"group rounded-md bg-gradient-to-r from-red-500 to-red-600 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-red-600 hover:to-red-700 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:K.value===0||X.value,title:"删除所有异常状态的 API Key",onClick:he},A[26]||(A[26]=[e("i",{class:"fas fa-trash-alt mr-1"},null,-1),x(" 删除异常 ",-1)]),8,Ao),e("button",{class:"group rounded-md bg-gradient-to-r from-red-600 to-red-700 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-red-700 hover:to-red-800 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:f.value.length===0||X.value,title:"删除所有 API Key",onClick:Se},A[27]||(A[27]=[e("i",{class:"fas fa-trash mr-1"},null,-1),x(" 删除全部 ",-1)]),8,Co),A[31]||(A[31]=e("div",{class:"mx-1 h-5 w-px bg-gray-300 dark:bg-gray-600"},null,-1)),e("button",{class:"rounded-md bg-gradient-to-r from-blue-500 to-blue-600 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-blue-600 hover:to-blue-700 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:K.value===0,title:"导出所有异常状态的 API Key",onClick:A[7]||(A[7]=j=>J("error"))},A[28]||(A[28]=[e("i",{class:"fas fa-download mr-1"},null,-1),x(" 导出异常 ",-1)]),8,Uo),e("button",{class:"rounded-md bg-gradient-to-r from-blue-600 to-blue-700 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-blue-700 hover:to-blue-800 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:f.value.length===0,title:"导出所有 API Key",onClick:A[8]||(A[8]=j=>J("all"))},A[29]||(A[29]=[e("i",{class:"fas fa-file-export mr-1"},null,-1),x(" 导出全部 ",-1)]),8,Io)]),e("div",To,[A[34]||(A[34]=e("i",{class:"fas fa-info-circle text-purple-500 dark:text-purple-400"},null,-1)),e("span",_o,[A[32]||(A[32]=x(" 显示 ",-1)),e("strong",null,u(w.value.length),1),A[33]||(A[33]=x(" 个 ",-1))])])])])]),e("div",Ko,[(o(!0),n(Ae,null,Be(te.value,(j,xe)=>(o(),n("div",{key:xe,class:"relative rounded-lg border border-gray-200 bg-white p-4 transition-all hover:shadow-md dark:border-gray-700 dark:bg-gray-800"},[(j.status==="error"||j.status==="disabled")&&j.errorMessage?(o(),n("div",Mo,[e("span",{class:I(["inline-flex items-center justify-center rounded-full px-2 py-0.5 text-[10px] font-semibold shadow-sm",[j.status==="error"?"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400":"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400"]]),title:`错误状态码: ${j.errorMessage}`},u(j.errorMessage),11,So)])):c("",!0),e("div",Do,[e("div",Lo,[e("span",{class:"flex-1 break-all font-mono text-xs font-medium text-gray-900 dark:text-gray-100",title:j.key},u(E(j.key)),9,Po),e("div",zo,[e("button",{class:"text-xs text-gray-500 transition-colors hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200",title:"复制 API Key",onClick:q=>Ce(j.key)},A[36]||(A[36]=[e("i",{class:"fas fa-copy"},null,-1)]),8,jo),j.status==="error"||j.status==="disabled"?(o(),n("button",{key:0,class:I(["text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-50",[j.status==="error"?"text-orange-500 hover:text-orange-700 dark:text-orange-400 dark:hover:text-orange-300":"text-yellow-500 hover:text-yellow-700 dark:text-yellow-400 dark:hover:text-yellow-300"]]),disabled:M.value===j.key,title:"重置状态",onClick:q=>pe(j)},[M.value===j.key?(o(),n("div",Vo)):(o(),n("i",Oo))],10,Ro)):c("",!0),e("button",{class:"text-xs text-red-500 transition-colors hover:text-red-700 disabled:cursor-not-allowed disabled:opacity-50 dark:text-red-400 dark:hover:text-red-600",disabled:V.value===j.key,onClick:q=>we(j)},[V.value===j.key?(o(),n("div",No)):(o(),n("i",Fo))],8,Eo)])]),e("div",qo,[e("div",null,[e("span",{class:I([j.status==="active"?"text-green-600 dark:text-green-400":j.status==="error"?"text-red-600 dark:text-red-400":"text-yellow-600 dark:text-yellow-400"])},[e("i",{class:I(["mr-1",[j.status==="active"?"fas fa-check-circle":j.status==="error"?"fas fa-exclamation-triangle":"fas fa-exclamation-circle"]])},null,2),x(" "+u(j.status==="active"?"正常":j.status==="error"?"异常":j.status==="disabled"?"禁用":j.status||"未知"),1)],2)]),e("div",null,[e("span",null,[A[37]||(A[37]=x("使用: ",-1)),e("strong",null,u(j.usageCount||0),1),A[38]||(A[38]=x("次",-1))])]),j.lastUsedAt?(o(),n("div",Go,[e("span",null,u(Ne(j.lastUsedAt)),1)])):c("",!0)])])]))),128))]),z.value>1?(o(),n("div",Wo,[e("div",Bo," 显示 "+u((h.value-1)*G.value+1)+"-"+u(Math.min(h.value*G.value,m.value))+" 项,共 "+u(m.value)+" 项 ",1),e("div",Qo,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:h.value===1,onClick:A[9]||(A[9]=j=>h.value=1)},A[39]||(A[39]=[e("i",{class:"fas fa-angle-double-left"},null,-1)]),8,Ho),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:h.value===1,onClick:A[10]||(A[10]=j=>h.value--)},A[40]||(A[40]=[e("i",{class:"fas fa-angle-left"},null,-1)]),8,Jo),e("span",Yo,u(h.value)+" / "+u(z.value),1),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:h.value===z.value,onClick:A[11]||(A[11]=j=>h.value++)},A[41]||(A[41]=[e("i",{class:"fas fa-angle-right"},null,-1)]),8,Zo),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:h.value===z.value,onClick:A[12]||(A[12]=j=>h.value=z.value)},A[42]||(A[42]=[e("i",{class:"fas fa-angle-double-right"},null,-1)]),8,Xo)])])):c("",!0)])):c("",!0)])])):c("",!0)]))}},tn={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},sn={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"},rn={class:"mb-4 flex items-center justify-between sm:mb-6"},an={class:"flex items-center gap-2 sm:gap-3"},ln={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},on={key:0,class:"mb-4 flex items-center justify-center sm:mb-8"},nn={class:"flex items-center space-x-2 sm:space-x-4"},dn={class:"flex items-center"},un={class:"flex items-center"},pn={key:1},gn={class:"space-y-6"},yn={key:0},mn={class:"space-y-3"},cn={class:"grid grid-cols-2 gap-2 sm:grid-cols-4"},xn={class:"p-3"},fn={class:"flex items-center justify-between"},bn={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-indigo-500"},vn={class:"p-3"},kn={class:"flex items-center justify-between"},hn={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-emerald-500"},wn={class:"p-3"},$n={class:"flex items-center justify-between"},An={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-blue-500"},Cn={class:"p-3"},Un={class:"flex items-center justify-between"},In={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-rose-500"},Tn={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"},_n={class:"grid grid-cols-2 gap-2 sm:grid-cols-3"},Kn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-indigo-500"},Mn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},Sn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-orange-500"},Dn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-cyan-500"},Ln={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-emerald-500"},Pn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-teal-500"},zn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},jn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},Rn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-amber-500"},Vn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-rose-500"},On={key:1},En={class:"flex flex-wrap gap-4"},Nn={class:"flex cursor-pointer items-center"},Fn={class:"text-sm text-gray-700 dark:text-gray-300"},qn={key:0},Gn={key:0,class:"flex cursor-pointer items-center"},Wn={class:"flex cursor-pointer items-center"},Bn={key:1,class:"flex cursor-pointer items-center"},Qn={key:0,class:"mt-1 text-xs text-red-500"},Hn={class:"flex gap-4"},Jn={class:"flex cursor-pointer items-center"},Yn={class:"flex cursor-pointer items-center"},Zn={class:"flex cursor-pointer items-center"},Xn={key:2},ei={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},ti={key:0,class:"mt-3"},si=["min"],ri={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},ai={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},li={key:3},oi={class:"flex gap-2"},ni={class:"flex-1"},ii={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},di={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},ui=["value"],pi={class:"text-sm text-gray-700 dark:text-gray-200"},gi={key:4},yi={key:5,class:"space-y-4"},mi={key:0,class:"mt-1 text-xs text-red-500"},ci={key:0,class:"mt-1 text-xs text-red-500"},xi={key:0,class:"mt-1 text-xs text-red-500"},fi={key:6,class:"space-y-4"},bi={key:0,class:"mt-1 text-xs text-red-500"},vi={key:0,class:"mt-1 text-xs text-red-500"},ki={key:0,class:"mt-1 text-xs text-red-500"},hi={class:"flex flex-wrap gap-2"},wi=["value"],$i={class:"text-sm text-gray-700 dark:text-gray-300"},Ai={key:7},Ci={class:"mb-3"},Ui={class:"inline-flex cursor-pointer items-center"},Ii={key:0},Ti={key:8,class:"space-y-4"},_i={key:0,class:"mt-1 text-xs text-red-500"},Ki={key:0,class:"mt-1 text-xs text-red-500"},Mi={class:"grid grid-cols-2 gap-4"},Si={class:"mb-4 flex gap-2"},Di={key:0},Li={class:"mb-3 grid grid-cols-2 gap-2"},Pi=["value"],zi={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},ji={class:"text-xs text-gray-500 dark:text-gray-400"},Ri={key:0},Vi={key:1},Oi={class:"mb-3 space-y-2"},Ei=["onUpdate:modelValue"],Ni=["onUpdate:modelValue"],Fi=["onClick"],qi={class:"mt-3 flex flex-wrap gap-2"},Gi={class:"mb-3"},Wi={class:"inline-flex cursor-pointer items-center"},Bi={key:0},Qi={key:0},Hi={class:"inline-flex cursor-pointer items-center"},Ji={key:9,class:"space-y-4"},Yi={class:"relative"},Zi=["type"],Xi={key:10,class:"space-y-4"},ed={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},td={class:"relative"},sd=["type"],rd={key:11},ad={class:"flex gap-4"},ld={class:"flex cursor-pointer items-center"},od={class:"flex cursor-pointer items-center"},nd={key:12,class:"mt-4"},id={class:"flex items-start"},dd={key:13,class:"mt-4"},ud={class:"flex items-start"},pd={class:"ml-3"},gd={key:0,class:"mt-1"},yd={class:"flex items-center justify-between"},md={class:"text-xs text-green-600 dark:text-green-400"},cd=["disabled"],xd={key:0,class:"fas fa-trash-alt mr-1"},fd={key:1,class:"loading-spinner mr-1"},bd={key:1,class:"mt-1"},vd={key:14,class:"mt-4"},kd={class:"flex items-start"},hd={class:"ml-3 flex-1"},wd={key:0,class:"mt-3"},$d={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Ad={class:"flex items-center gap-2"},Cd={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"},Ud={class:"text-blue-600 dark:text-blue-400"},Id={class:"text-gray-500 dark:text-gray-500"},Td={class:"text-blue-600 dark:text-blue-400"},_d={key:15,class:"space-y-4 rounded-lg border border-blue-200 bg-blue-50 p-4"},Kd={class:"mb-4 flex items-start gap-3"},Md={key:0,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Sd={key:1,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Dd={key:2,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Ld={key:3,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Pd={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"},zd={key:0,class:"text-xs text-blue-800 dark:text-blue-300"},jd={key:1,class:"text-xs text-blue-800 dark:text-blue-300"},Rd={key:2,class:"text-xs text-blue-800 dark:text-blue-300"},Vd={key:3,class:"text-xs text-blue-800 dark:text-blue-300"},Od={key:4,class:"text-xs text-blue-600 dark:text-blue-400"},Ed={key:5,class:"text-xs text-red-600 dark:text-red-400"},Nd={key:0},Fd={key:1},qd={key:0,class:"mt-1 text-xs text-red-500"},Gd={key:2},Wd={key:0,class:"mt-1 text-xs text-red-500"},Bd={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Qd={key:3},Hd={key:4},Jd={key:16,class:"space-y-4 rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},Yd={key:0,class:"mt-1 text-xs text-red-500"},Zd={class:"flex gap-3 pt-4"},Xd=["disabled"],e0=["disabled"],t0={key:0,class:"loading-spinner mr-2"},s0={key:3,class:"space-y-6"},r0={key:0},a0={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},l0={class:"flex items-start gap-4"},o0={class:"flex-1"},n0={class:"mb-4"},i0={class:"flex flex-wrap gap-4"},d0={class:"flex cursor-pointer items-center"},u0={class:"flex cursor-pointer items-center"},p0={key:0,class:"space-y-4"},g0={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},y0={class:"flex items-start gap-3"},m0={class:"flex-1"},c0=["disabled"],x0={key:0,class:"fas fa-link mr-2"},f0={key:1,class:"loading-spinner mr-2"},b0={key:1,class:"space-y-3"},v0={class:"flex items-center gap-2"},k0=["value"],h0={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},w0={class:"flex items-start gap-3"},$0={class:"flex-1"},A0={class:"space-y-3"},C0={key:1,class:"space-y-4"},U0={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},I0={class:"space-y-4"},T0={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},_0={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},K0={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},M0={key:1,class:"mt-1 text-xs text-red-500"},S0={key:0,class:"mt-3 rounded border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-700"},D0=["disabled"],L0={key:0,class:"loading-spinner mr-2"},P0={key:1,class:"fas fa-magic mr-2"},z0={class:"flex gap-3 pt-4"},j0=["disabled"],R0={key:0,class:"loading-spinner mr-2"},V0={key:4,class:"space-y-6"},O0={class:"flex gap-4"},E0={class:"flex cursor-pointer items-center"},N0={class:"flex cursor-pointer items-center"},F0={class:"flex cursor-pointer items-center"},q0={key:0},G0={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},W0={key:0,class:"mt-3"},B0=["min"],Q0={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},H0={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},J0={key:1},Y0={class:"flex gap-2"},Z0={class:"flex-1"},X0={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},eu={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},tu=["value"],su={class:"text-sm text-gray-700 dark:text-gray-200"},ru={key:2},au={key:3},lu={class:"flex gap-4"},ou={class:"flex cursor-pointer items-center"},nu={class:"flex cursor-pointer items-center"},iu={key:4,class:"mt-4"},du={class:"flex items-start"},uu={key:5,class:"mt-4"},pu={class:"flex items-start"},gu={class:"ml-3"},yu={key:0,class:"mt-1"},mu={class:"flex items-center justify-between"},cu={class:"text-xs text-green-600 dark:text-green-400"},xu=["disabled"],fu={key:0,class:"fas fa-trash-alt mr-1"},bu={key:1,class:"loading-spinner mr-1"},vu={key:1,class:"mt-1"},ku={key:6,class:"mt-4"},hu={class:"flex items-start"},wu={class:"ml-3 flex-1"},$u={key:0,class:"mt-3"},Au={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Cu={class:"flex items-center gap-2"},Uu={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"},Iu={class:"text-blue-600 dark:text-blue-400"},Tu={class:"text-gray-500 dark:text-gray-500"},_u={class:"text-blue-600 dark:text-blue-400"},Ku={key:7,class:"space-y-4"},Mu={class:"grid grid-cols-2 gap-4"},Su={key:0,class:"rounded-lg bg-gray-50 p-4 dark:bg-gray-800"},Du={class:"mb-2 flex items-center justify-between"},Lu={class:"text-sm text-gray-500 dark:text-gray-400"},Pu={class:"relative h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},zu={class:"mt-2 flex items-center justify-between text-xs"},ju={class:"text-gray-500 dark:text-gray-400"},Ru={class:"text-gray-500 dark:text-gray-400"},Vu={class:"mb-4 flex gap-2"},Ou={key:0},Eu={class:"mb-3 grid grid-cols-2 gap-2"},Nu=["value"],Fu={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},qu={class:"text-xs text-gray-500 dark:text-gray-400"},Gu={key:0},Wu={key:1},Bu={class:"mb-3 space-y-2"},Qu=["onUpdate:modelValue"],Hu=["onUpdate:modelValue"],Ju=["onClick"],Yu={class:"mt-3 flex flex-wrap gap-2"},Zu={class:"mb-3"},Xu={class:"inline-flex cursor-pointer items-center"},ep={key:0},tp={key:1},sp={class:"inline-flex cursor-pointer items-center"},rp={key:8,class:"space-y-4"},ap={class:"relative"},lp=["type"],op={class:"grid grid-cols-2 gap-4"},np={key:9,class:"space-y-4"},ip={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},dp={class:"relative"},up=["type"],pp={key:10,class:"space-y-4"},gp={class:"mb-3"},yp={class:"inline-flex cursor-pointer items-center"},mp={key:0},cp={key:11,class:"space-y-4"},xp={key:0,class:"mt-1 text-xs text-red-500"},fp={key:0,class:"mt-1 text-xs text-red-500"},bp={key:0,class:"mt-1 text-xs text-red-500"},vp={class:"flex flex-wrap gap-2"},kp=["value"],hp={class:"text-sm text-gray-700 dark:text-gray-300"},wp={key:12,class:"rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},$p={class:"mb-4 flex items-start gap-3"},Ap={class:"flex-1"},Cp={class:"mb-2 flex items-center justify-between"},Up={class:"mb-1 text-sm text-purple-800 dark:text-purple-200"},Ip={class:"space-y-4"},Tp={key:0,class:"mt-1 text-xs text-red-500"},_p={class:"space-y-2"},Kp={class:"flex items-center justify-between"},Mp={class:"text-xs text-purple-600 dark:text-purple-300"},Sp={class:"relative grid h-11 grid-cols-3 overflow-hidden rounded-2xl border border-purple-200/80 bg-gradient-to-r from-purple-50/80 via-white to-purple-50/80 shadow-inner dark:border-purple-700/70 dark:from-purple-900/40 dark:via-purple-900/20 dark:to-purple-900/40"},Dp=["onClick"],Lp={class:"text-xs text-purple-700 dark:text-purple-300"},Pp={key:13,class:"rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-700 dark:bg-amber-900/30"},zp={class:"space-y-4"},jp={key:14},Rp={class:"flex gap-3 pt-4"},Vp=["disabled"],Op={key:0,class:"loading-spinner mr-2"},Ep={__name:"AccountForm",props:{account:{type:Object,default:null}},emits:["close","success","platform-changed"],setup(Y,{emit:Re}){var fs,bs,vs,ks,hs,Ht,Et,Jt,Yt,ws,gt,yt,$s,Zt,Nt,Xt,As,es,Ft,Cs,ts,qt,ss,rs,Us,Is,Ts,as,_s,ls,Ks,Ms,os;const y=Y,W=Re,U=or(),{showConfirmModal:Q,confirmOptions:V,showConfirm:M,handleConfirm:f,handleCancel:h}=lr(),G=de(()=>!!y.account),ue=$(!0),Z=$(null),ye=$(1),ee=$(!1),X=$(!1),E=$(!1),w=$(!1),m=$(""),z=$(""),te=$(!1),N=$(""),K=$("manual"),B=$(""),we=$(!1),pe=$(""),he=$(!1),Se=$({current:0,total:0}),J=de(()=>B.value.split(`
|
||
`).map(d=>d.trim()).filter(d=>d.length>0).length),T=$(""),Ce=$(!1),ie=$(""),Ne=$(!1),H=d=>["claude","claude-console","ccr","bedrock"].includes(d)?"claude":["openai","openai-responses","azure_openai"].includes(d)?"openai":["gemini","gemini-api"].includes(d)?"gemini":d==="droid"?"droid":"",A=()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""}),j=d=>{if(!d)return null;let t=d;if(typeof d=="string")try{t=JSON.parse(d)}catch{return null}if(t&&typeof t=="object"&&t.proxy&&typeof t.proxy=="object"&&(t=t.proxy),!t||typeof t!="object")return null;const re=typeof t.host=="string"?t.host.trim():t.host!==void 0&&t.host!==null?String(t.host).trim():"",ge=t.port!==void 0&&t.port!==null?String(t.port).trim():"",i=typeof t.type=="string"&&t.type.trim()?t.type.trim():"socks5",ae=typeof t.username=="string"?t.username:t.username!==void 0&&t.username!==null?String(t.username):"",le=typeof t.password=="string"?t.password:t.password!==void 0&&t.password!==null?String(t.password):"";return{type:i,host:re,port:ge,username:ae,password:le}},xe=d=>{const t=j(d);return t&&t.host&&t.port?{enabled:!0,type:t.type||"socks5",host:t.host,port:t.port,username:t.username||"",password:t.password||""}:A()},q=d=>{if(!d||!d.enabled)return null;const t=(d.host||"").trim(),re=Number.parseInt(d.port,10);if(!t||Number.isNaN(re)||re<=0)return null;const ge=d.username?d.username.trim():"",i=d.password?d.password.trim():"";return{type:d.type||"socks5",host:t,port:re,username:ge||null,password:i||null}},g=()=>{var d;return xe((d=y.account)==null?void 0:d.proxy)},s=$({platform:((fs=y.account)==null?void 0:fs.platform)||"claude",addType:(()=>{var t;const d=((t=y.account)==null?void 0:t.platform)||"claude";return d==="gemini"||d==="openai"||d==="claude"?"oauth":"manual"})(),name:((bs=y.account)==null?void 0:bs.name)||"",description:((vs=y.account)==null?void 0:vs.description)||"",accountType:((ks=y.account)==null?void 0:ks.accountType)||"shared",authenticationMethod:((hs=y.account)==null?void 0:hs.authenticationMethod)||"",subscriptionType:"claude_max",autoStopOnWarning:((Ht=y.account)==null?void 0:Ht.autoStopOnWarning)||!1,useUnifiedUserAgent:((Et=y.account)==null?void 0:Et.useUnifiedUserAgent)||!1,useUnifiedClientId:((Jt=y.account)==null?void 0:Jt.useUnifiedClientId)||!1,unifiedClientId:((Yt=y.account)==null?void 0:Yt.unifiedClientId)||"",groupId:"",groupIds:[],projectId:((ws=y.account)==null?void 0:ws.projectId)||"",accessToken:"",refreshToken:"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:g(),apiUrl:((gt=y.account)==null?void 0:gt.apiUrl)||"",apiKey:((yt=y.account)==null?void 0:yt.apiKey)||"",priority:(($s=y.account)==null?void 0:$s.priority)||50,endpointType:((Zt=y.account)==null?void 0:Zt.endpointType)||"anthropic",baseApi:((Nt=y.account)==null?void 0:Nt.baseApi)||"",baseUrl:((Xt=y.account)==null?void 0:Xt.baseUrl)||"https://generativelanguage.googleapis.com",rateLimitDuration:((As=y.account)==null?void 0:As.rateLimitDuration)||60,supportedModels:(()=>{var t;const d=(t=y.account)==null?void 0:t.supportedModels;return d?typeof d=="object"&&!Array.isArray(d)?Object.keys(d):Array.isArray(d)?d:[]:[]})(),userAgent:((es=y.account)==null?void 0:es.userAgent)||"",enableRateLimit:y.account?y.account.rateLimitDuration>0:!0,disableAutoProtection:((Ft=y.account)==null?void 0:Ft.disableAutoProtection)===!0,dailyQuota:((Cs=y.account)==null?void 0:Cs.dailyQuota)||0,dailyUsage:((ts=y.account)==null?void 0:ts.dailyUsage)||0,quotaResetTime:((qt=y.account)==null?void 0:qt.quotaResetTime)||"00:00",maxConcurrentTasks:((ss=y.account)==null?void 0:ss.maxConcurrentTasks)||0,accessKeyId:((rs=y.account)==null?void 0:rs.accessKeyId)||"",secretAccessKey:((Us=y.account)==null?void 0:Us.secretAccessKey)||"",region:((Is=y.account)==null?void 0:Is.region)||"",sessionToken:((Ts=y.account)==null?void 0:Ts.sessionToken)||"",defaultModel:((as=y.account)==null?void 0:as.defaultModel)||"",smallFastModel:((_s=y.account)==null?void 0:_s.smallFastModel)||"",azureEndpoint:((ls=y.account)==null?void 0:ls.azureEndpoint)||"",apiVersion:((Ks=y.account)==null?void 0:Ks.apiVersion)||"",deploymentName:((Ms=y.account)==null?void 0:Ms.deploymentName)||"",expireDuration:(()=>{var d;return(d=y.account)!=null&&d.expiresAt?"custom":""})(),customExpireDate:(()=>{var d;return(d=y.account)!=null&&d.expiresAt?new Date(y.account.expiresAt).toISOString().slice(0,16):""})(),expiresAt:((os=y.account)==null?void 0:os.expiresAt)||null}),me=$("whitelist"),Te=$(["claude-sonnet-4-20250514","claude-sonnet-4-5-20250929","claude-3-5-haiku-20241022"]),Ge=[{value:"claude-opus-4-5-20251101",label:"Claude Opus 4.5",color:"blue"},{value:"claude-sonnet-4-20250514",label:"Claude Sonnet 4",color:"blue"},{value:"claude-sonnet-4-5-20250929",label:"Claude Sonnet 4.5",color:"indigo"},{value:"claude-3-5-haiku-20241022",label:"Claude 3.5 Haiku",color:"green"},{value:"claude-haiku-4-5-20251001",label:"Claude Haiku 4.5",color:"emerald"},{value:"claude-opus-4-20250514",label:"Claude Opus 4",color:"purple"},{value:"claude-opus-4-1-20250805",label:"Claude Opus 4.1",color:"purple"},{value:"deepseek-chat",label:"DeepSeek Chat",color:"cyan"},{value:"Qwen",label:"Qwen",color:"orange"},{value:"Kimi",label:"Kimi",color:"pink"},{value:"GLM",label:"GLM",color:"teal"}],Oe=$([]),vt=()=>{var d;if((d=y.account)!=null&&d.supportedModels)if(typeof y.account.supportedModels=="object"&&!Array.isArray(y.account.supportedModels)){const t=Object.entries(y.account.supportedModels);t.every(([ge,i])=>ge===i)?(me.value="whitelist",Te.value=t.map(([ge])=>ge),Oe.value=t.map(([ge,i])=>({from:ge,to:i}))):(me.value="mapping",Oe.value=t.map(([ge,i])=>({from:ge,to:i})))}else Array.isArray(y.account.supportedModels)&&(me.value="whitelist",Te.value=y.account.supportedModels,Oe.value=y.account.supportedModels.map(t=>({from:t,to:t})))},nt=d=>{if(!d||typeof d!="string")return[];const t=d.split(/\r?\n/).map(ge=>ge.trim()).filter(ge=>ge.length>0);return t.length===0?[]:Array.from(new Set(t))},at=[{value:"append",label:"追加模式",description:"保留现有 Key,并在末尾追加新 Key 列表。"},{value:"replace",label:"覆盖模式",description:"先清空旧 Key,再写入上方的新 Key 列表。"},{value:"delete",label:"删除模式",description:"输入要移除的 Key,可精准删除失效或被封禁的 Key。"}],mt=de(()=>{const d=Math.max(at.findIndex(re=>re.value===s.value.apiKeyUpdateMode),0),t=100/at.length;return{width:`${t}%`,left:`${d*t}%`}}),kt=de(()=>{const d=at.find(t=>t.value===s.value.apiKeyUpdateMode);return d?d.label:at[0].label}),ct=de(()=>{const d=at.find(t=>t.value===s.value.apiKeyUpdateMode);return d?d.description:at[0].description}),_=$({name:"",refreshToken:"",accessToken:"",apiKeys:"",apiUrl:"",apiKey:"",baseApi:"",accessKeyId:"",secretAccessKey:"",region:"",azureEndpoint:"",deploymentName:""}),It=de(()=>{var d;return((d=s.value.name)==null?void 0:d.trim())&&s.value.platform}),ht=de(()=>m.value&&z.value.trim()),xt=()=>{var d;return!G.value||!((d=y.account)!=null&&d.id)?0:typeof s.value.dailyUsage=="number"?s.value.dailyUsage:0},Ze=de(()=>!s.value.dailyQuota||s.value.dailyQuota<=0?0:xt()/s.value.dailyQuota*100),it=de(()=>{if(!y.account||y.account.platform!=="droid")return 0;let d=0;if(Array.isArray(y.account.apiKeys))d=y.account.apiKeys.length;else if(typeof y.account.apiKeys=="string")try{const re=JSON.parse(y.account.apiKeys);Array.isArray(re)&&(d=re.length)}catch{d=0}const t=y.account.apiKeyCount??y.account.apiKeysCount??y.account.api_key_count??d;return Number(t)||0}),b=de(()=>{var t,re,ge;if(!G.value||s.value.platform!=="droid")return!1;const d=s.value.authenticationMethod||((t=y.account)==null?void 0:t.authenticationMethod)||((re=y.account)==null?void 0:re.authMethod)||((ge=y.account)==null?void 0:ge.authentication_mode)||"";return typeof d!="string"?!1:d.trim().toLowerCase()==="api_key"}),p=async()=>{var d;if(!(!G.value||!((d=y.account)!=null&&d.id)))try{const t=await F.get(`/admin/claude-console-accounts/${y.account.id}/usage`);t&&(s.value.dailyUsage=t.dailyUsage||0)}catch{}},L=d=>{ie.value=d,d==="claude"?s.value.platform="claude":d==="openai"?s.value.platform="openai":d==="gemini"?s.value.platform="gemini":d==="droid"&&(s.value.platform="droid")},Xe=async()=>{if(_.value.name="",!It.value){(!s.value.name||s.value.name.trim()==="")&&(_.value.name="请填写账户名称");return}if(s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)){R("请选择一个分组","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"&&ye.value===1&&s.value.addType==="oauth"&&(!s.value.projectId||s.value.projectId.trim()==="")&&!await M("项目 ID 未填写",`您尚未填写项目 ID。
|
||
|
||
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
|
||
如果您使用的是普通个人账号,可以继续不填写。`,"继续","返回填写"))&&(ye.value=2)},Tt=async()=>{E.value=!0;try{const d=q(s.value.proxy),t=d?{proxy:d}:{},re=await U.generateClaudeSetupTokenUrl(t);m.value=re.authUrl,N.value=re.sessionId}catch(d){R(d.message||"生成Setup Token授权链接失败","error")}finally{E.value=!1}},ft=()=>{m.value="",z.value="",Tt()},_t=async()=>{try{await navigator.clipboard.writeText(m.value),te.value=!0,R("链接已复制","success"),setTimeout(()=>{te.value=!1},2e3)}catch{const t=document.createElement("textarea");t.value=m.value,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")?(te.value=!0,R("链接已复制","success")):R("复制失败,请手动复制","error")}catch{R("复制失败,请手动复制","error")}document.body.removeChild(t),setTimeout(()=>{te.value=!1},2e3)}},Rt=async()=>{if(ht.value){w.value=!0;try{const d={sessionId:N.value,callbackUrl:z.value.trim()},t=q(s.value.proxy);t&&(d.proxy=t);const re=await U.exchangeClaudeSetupTokenCode(d);s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=dt()),await ut(re)}catch(d){R(d.message||"Setup Token授权失败,请检查授权码是否正确","error")}finally{w.value=!1}}},wt=async()=>{const d=B.value.split(`
|
||
`).map(ae=>ae.trim()).filter(ae=>ae.length>0);if(d.length===0){pe.value="请输入至少一个 sessionKey";return}we.value=!0,pe.value="",Se.value={current:0,total:d.length};const t=s.value.addType==="setup-token",re=q(s.value.proxy),ge=[],i=[];for(let ae=0;ae<d.length;ae++){Se.value.current=ae+1;try{const le={sessionKey:d[ae],...re&&{proxy:re}};let Le;t?Le=await U.oauthSetupTokenWithCookie(le):Le=await U.oauthWithCookie(le),ge.push(Le)}catch(le){i.push({index:ae+1,key:d[ae].substring(0,20)+"...",error:le.message})}}if(Se.value={current:0,total:0},ge.length>0)try{await ut(ge)}finally{we.value=!1}else we.value=!1;i.length>0&&ge.length===0?pe.value="全部授权失败,请检查 sessionKey 是否有效":i.length>0&&(pe.value=`${i.length} 个授权失败`)},Vt=()=>{B.value="",pe.value="",he.value=!1,Se.value={current:0,total:0}},Kt=()=>{K.value==="manual"?Vt():(m.value="",z.value="",N.value="")},bt=(d,t,re)=>{var le,Le;const ge=q(s.value.proxy),i=d.claudeAiOauth||d,ae={name:t,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,expiresAt:s.value.expiresAt||void 0,proxy:ge,claudeAiOauth:i,priority:s.value.priority||50,autoStopOnWarning:s.value.autoStopOnWarning||!1,useUnifiedUserAgent:s.value.useUnifiedUserAgent||!1,useUnifiedClientId:s.value.useUnifiedClientId||!1,unifiedClientId:re,subscriptionInfo:{accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}};if(i){const Pe={},_e=i.extInfo;_e!=null&&_e.org_uuid&&(Pe.org_uuid=_e.org_uuid),_e!=null&&_e.account_uuid&&(Pe.account_uuid=_e.account_uuid),_e||((le=i.organization)!=null&&le.uuid&&(Pe.org_uuid=i.organization.uuid),(Le=i.account)!=null&&Le.uuid&&(Pe.account_uuid=i.account.uuid)),Object.keys(Pe).length>0&&(ae.extInfo=Pe)}return ae},ut=async d=>{var t,re,ge,i,ae,le,Le,Pe,_e;ee.value=!0;try{const S=s.value.platform;if(S==="claude"&&Array.isArray(d)){const Ke=d,ze=Ke.length>1,De=s.value.name,lt=[],st=[];for(let Ct=0;Ct<Ke.length;Ct++){const Ns=Ke[Ct],Ss=ze?`${De}_${Ct+1}`:De,Ds=s.value.useUnifiedClientId?dt():"",Ls=bt(Ns,Ss,Ds);try{const ns=await U.createClaudeAccount(Ls);lt.push(ns)}catch(ns){st.push({name:Ss,error:ns.message})}}if(lt.length>0){const Ct=ze?`成功创建 ${lt.length}/${Ke.length} 个账户`:"账户创建成功";R(Ct,"success"),W("success",lt[0])}st.length>0&&R(`${st.length} 个账户创建失败`,"error");return}const D=Array.isArray(d)?d[0]:d;s.value.platform==="claude"&&s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=dt());const be=q(s.value.proxy),O={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,expiresAt:s.value.expiresAt||void 0,proxy:be};if(S==="claude"){const Ke=D.claudeAiOauth||D;if(O.claudeAiOauth=Ke,Ke){const ze={},De=Ke.extInfo;if(De&&typeof De=="object"&&(De.org_uuid&&(ze.org_uuid=De.org_uuid),De.account_uuid&&(ze.account_uuid=De.account_uuid)),!De){const lt=(t=Ke.organization)==null?void 0:t.uuid,st=(re=Ke.account)==null?void 0:re.uuid;lt&&(ze.org_uuid=lt),st&&(ze.account_uuid=st)}Object.keys(ze).length>0&&(O.extInfo=ze)}O.priority=s.value.priority||50,O.autoStopOnWarning=s.value.autoStopOnWarning||!1,O.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,O.useUnifiedClientId=s.value.useUnifiedClientId||!1,O.unifiedClientId=s.value.unifiedClientId||"",O.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(S==="gemini")O.geminiOauth=D.tokens||D,s.value.projectId&&(O.projectId=s.value.projectId),O.priority=s.value.priority||50;else if(S==="openai")O.openaiOauth=D.tokens||D,O.accountInfo=D.accountInfo,O.priority=s.value.priority||50;else if(S==="droid"){const Ke=D.tokens||D||{},ze={accessToken:Ke.accessToken||Ke.access_token||"",refreshToken:Ke.refreshToken||Ke.refresh_token||"",expiresAt:Ke.expiresAt||Ke.expires_at||"",expiresIn:Ke.expiresIn||Ke.expires_in||null,tokenType:Ke.tokenType||Ke.token_type||"Bearer",organizationId:Ke.organizationId||Ke.organization_id||"",authenticationMethod:Ke.authenticationMethod||Ke.authentication_method||""};if(!ze.refreshToken){ee.value=!1,R("授权成功但未返回 Refresh Token,请确认已授予离线访问权限后重试。","error");return}if(O.refreshToken=ze.refreshToken,O.accessToken=ze.accessToken,O.expiresAt=ze.expiresAt,ze.expiresIn!==null&&ze.expiresIn!==void 0&&(O.expiresIn=ze.expiresIn),O.priority=s.value.priority||50,O.endpointType=s.value.endpointType||"anthropic",O.platform="droid",O.tokenType=ze.tokenType,O.authenticationMethod=ze.authenticationMethod,ze.organizationId&&(O.organizationId=ze.organizationId),Ke.user){const De=Ke.user,lt=[];typeof De.first_name=="string"&&De.first_name.trim()&<.push(De.first_name.trim()),typeof De.last_name=="string"&&De.last_name.trim()&<.push(De.last_name.trim());const st=lt.join(" ").trim()||(typeof De.name=="string"?De.name.trim():"")||(typeof De.display_name=="string"?De.display_name.trim():"");typeof De.email=="string"&&De.email.trim()&&(O.ownerEmail=De.email.trim()),st?(O.ownerName=st,O.ownerDisplayName=st):O.ownerEmail&&(O.ownerName=O.ownerName||O.ownerEmail,O.ownerDisplayName=O.ownerDisplayName||O.ownerEmail),typeof De.id=="string"&&De.id.trim()&&(O.userId=De.id.trim())}}let Ie;S==="claude"?Ie=await U.createClaudeAccount(O):S==="gemini"?Ie=await U.createGeminiAccount(O):S==="openai"?Ie=await U.createOpenAIAccount(O):S==="droid"?Ie=await U.createDroidAccount(O):Ie=await U.createGeminiAccount(O),W("success",Ie)}catch(S){const D=((i=(ge=S.response)==null?void 0:ge.data)==null?void 0:i.error)||S.message||"账户创建失败",be=((le=(ae=S.response)==null?void 0:ae.data)==null?void 0:le.suggestion)||"",O=((Pe=(Le=S.response)==null?void 0:Le.data)==null?void 0:Pe.errorDetails)||null;let Ie=D;be&&(Ie+=`
|
||
${be}`),O&&O.error_description?Ie+=`
|
||
详细信息: ${O.error_description}`:O&&O.error&&O.error.message&&(Ie+=`
|
||
详细信息: ${O.error.message}`),R(Ie,"error","",8e3)}finally{ee.value=!1,(_e=Z.value)==null||_e.resetCookieAuth()}},Ot=async()=>{var t,re,ge,i,ae,le,Le,Pe;_.value.name="",_.value.accessToken="",_.value.refreshToken="",_.value.apiUrl="",_.value.apiKey="",_.value.apiKeys="";let d=!1;if((!s.value.name||s.value.name.trim()==="")&&(_.value.name="请填写账户名称",d=!0),s.value.platform==="claude-console"&&((!s.value.apiUrl||s.value.apiUrl.trim()==="")&&(_.value.apiUrl="请填写 API URL",d=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(_.value.apiKey="请填写 API Key",d=!0)),s.value.platform==="ccr"&&((!s.value.apiUrl||s.value.apiUrl.trim()==="")&&(_.value.apiUrl="请填写 API URL",d=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(_.value.apiKey="请填写 API Key",d=!0)),s.value.platform==="openai-responses"?((!s.value.baseApi||s.value.baseApi.trim()==="")&&(_.value.baseApi="请填写 API 基础地址",d=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(_.value.apiKey="请填写 API 密钥",d=!0)):s.value.platform==="bedrock"?((!s.value.accessKeyId||s.value.accessKeyId.trim()==="")&&(_.value.accessKeyId="请填写 AWS 访问密钥 ID",d=!0),(!s.value.secretAccessKey||s.value.secretAccessKey.trim()==="")&&(_.value.secretAccessKey="请填写 AWS 秘密访问密钥",d=!0),(!s.value.region||s.value.region.trim()==="")&&(_.value.region="请选择 AWS 区域",d=!0)):s.value.platform==="azure_openai"?((!s.value.azureEndpoint||s.value.azureEndpoint.trim()==="")&&(_.value.azureEndpoint="请填写 Azure Endpoint",d=!0),(!s.value.deploymentName||s.value.deploymentName.trim()==="")&&(_.value.deploymentName="请填写部署名称",d=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(_.value.apiKey="请填写 API Key",d=!0)):s.value.addType==="manual"?s.value.platform==="openai"?(!s.value.refreshToken||s.value.refreshToken.trim()==="")&&(_.value.refreshToken="请填写 Refresh Token",d=!0):s.value.platform==="gemini"?(!s.value.accessToken||s.value.accessToken.trim()==="")&&(_.value.accessToken="请填写 Access Token",d=!0):s.value.platform==="droid"?((!s.value.accessToken||s.value.accessToken.trim()==="")&&(_.value.accessToken="请填写 Access Token",d=!0),(!s.value.refreshToken||s.value.refreshToken.trim()==="")&&(_.value.refreshToken="请填写 Refresh Token",d=!0)):s.value.platform==="claude"&&(!s.value.accessToken||s.value.accessToken.trim()==="")&&(_.value.accessToken="请填写 Access Token",d=!0):s.value.addType==="apikey"&&(s.value.platform==="gemini-api"?((!s.value.apiKey||s.value.apiKey.trim()==="")&&(_.value.apiKey="请填写 API Key",d=!0),!s.value.baseUrl||s.value.baseUrl.trim()===""?(_.value.baseUrl="请填写 API 基础地址",d=!0):s.value.baseUrl.trim().endsWith("/models")||(_.value.baseUrl="API 基础地址必须以 /models 结尾",d=!0)):nt(s.value.apiKeysInput).length===0&&(_.value.apiKeys="请至少填写一个 API Key",d=!0)),s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)&&(R("请选择一个分组","error"),d=!0),s.value.accountType==="group"&&(s.value.groupIds&&s.value.groupIds.length>0?s.value.groupId=s.value.groupIds[0]:s.value.groupId=""),!d){ee.value=!0;try{const _e=q(s.value.proxy),S={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,expiresAt:s.value.expiresAt||void 0,proxy:_e};if(s.value.platform==="claude"){const be=s.value.refreshToken?6e5:31536e6;s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=dt()),S.claudeAiOauth={accessToken:s.value.accessToken,refreshToken:s.value.refreshToken||"",expiresAt:Date.now()+be,scopes:[]},S.priority=s.value.priority||50,S.autoStopOnWarning=s.value.autoStopOnWarning||!1,S.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,S.useUnifiedClientId=s.value.useUnifiedClientId||!1,S.unifiedClientId=s.value.unifiedClientId||"",S.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 be=s.value.refreshToken?6e5:31536e6;S.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()+be},s.value.projectId&&(S.projectId=s.value.projectId),S.priority=s.value.priority||50}else if(s.value.platform==="openai"){const be=s.value.refreshToken?6e5:31536e6;S.openaiOauth={idToken:"",accessToken:s.value.accessToken||"",refreshToken:s.value.refreshToken,expires_in:Math.floor(be/1e3)},S.accountInfo={accountId:"",chatgptUserId:"",organizationId:"",organizationRole:"",organizationTitle:"",planType:"",email:"",emailVerified:!1},S.needsImmediateRefresh=!0,S.requireRefreshSuccess=!0,S.priority=s.value.priority||50}else if(s.value.platform==="droid")if(S.priority=s.value.priority||50,S.endpointType=s.value.endpointType||"anthropic",S.platform="droid",s.value.addType==="apikey"){const be=nt(s.value.apiKeysInput);S.apiKeys=be,S.authenticationMethod="api_key",S.isActive=!0,S.schedulable=!0}else{const be=((t=s.value.accessToken)==null?void 0:t.trim())||"",O=((re=s.value.refreshToken)==null?void 0:re.trim())||"",Ie=new Date(Date.now()+8*60*60*1e3).toISOString();S.accessToken=be,S.refreshToken=O,S.expiresAt=Ie,S.expiresIn=8*60*60,S.tokenType="Bearer",S.authenticationMethod="manual"}else s.value.platform==="claude-console"||s.value.platform==="ccr"?(S.apiUrl=s.value.apiUrl,S.apiKey=s.value.apiKey,S.priority=s.value.priority||50,S.supportedModels=Wt()||{},S.userAgent=s.value.userAgent||null,S.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0,s.value.platform==="claude-console"&&(S.disableAutoProtection=!!s.value.disableAutoProtection),S.dailyQuota=s.value.dailyQuota||0,S.quotaResetTime=s.value.quotaResetTime||"00:00",S.maxConcurrentTasks=s.value.maxConcurrentTasks||0):s.value.platform==="openai-responses"?(S.baseApi=s.value.baseApi,S.apiKey=s.value.apiKey,S.userAgent=s.value.userAgent||"",S.priority=s.value.priority||50,S.rateLimitDuration=60,S.dailyQuota=s.value.dailyQuota||0,S.quotaResetTime=s.value.quotaResetTime||"00:00"):s.value.platform==="gemini-api"?(S.baseUrl=s.value.baseUrl||"https://generativelanguage.googleapis.com",S.apiKey=s.value.apiKey,S.priority=s.value.priority||50,S.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[]):s.value.platform==="bedrock"?(S.awsCredentials={accessKeyId:s.value.accessKeyId,secretAccessKey:s.value.secretAccessKey,sessionToken:s.value.sessionToken||null},S.region=s.value.region,S.defaultModel=s.value.defaultModel||null,S.smallFastModel=s.value.smallFastModel||null,S.priority=s.value.priority||50,S.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0):s.value.platform==="azure_openai"&&(S.azureEndpoint=s.value.azureEndpoint,S.apiKey=s.value.apiKey,S.apiVersion=s.value.apiVersion||"2024-02-01",S.deploymentName=s.value.deploymentName,S.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[],S.priority=s.value.priority||50,S.isActive=s.value.isActive!==!1,S.schedulable=s.value.schedulable!==!1);let D;if(s.value.platform==="claude")D=await U.createClaudeAccount(S);else if(s.value.platform==="claude-console"||s.value.platform==="ccr")D=await U.createClaudeConsoleAccount(S);else if(s.value.platform==="droid")D=await U.createDroidAccount(S);else if(s.value.platform==="openai-responses")D=await U.createOpenAIResponsesAccount(S);else if(s.value.platform==="bedrock")D=await U.createBedrockAccount(S);else if(s.value.platform==="openai")D=await U.createOpenAIAccount(S);else if(s.value.platform==="azure_openai")D=await U.createAzureOpenAIAccount(S);else if(s.value.platform==="gemini")D=await U.createGeminiAccount(S);else if(s.value.platform==="gemini-api")D=await U.createGeminiApiAccount(S);else throw new Error(`不支持的平台: ${s.value.platform}`);W("success",D)}catch(_e){const S=((i=(ge=_e.response)==null?void 0:ge.data)==null?void 0:i.error)||_e.message||"账户创建失败",D=((le=(ae=_e.response)==null?void 0:ae.data)==null?void 0:le.suggestion)||"",be=((Pe=(Le=_e.response)==null?void 0:Le.data)==null?void 0:Pe.errorDetails)||null;let O=S;D&&(O+=`
|
||
${D}`),be&&be.error_description?O+=`
|
||
详细信息: ${be.error_description}`:be&&be.error&&be.error.message&&(O+=`
|
||
详细信息: ${be.error.message}`),R(O,"error","",8e3)}finally{ee.value=!1}}},ot=async()=>{var d,t,re,ge,i,ae,le,Le,Pe,_e;if(_.value.name="",_.value.apiKeys="",_.value.baseUrl="",!s.value.name||s.value.name.trim()===""){_.value.name="请填写账户名称";return}if(s.value.platform==="gemini-api"){const S=((d=s.value.baseUrl)==null?void 0:d.trim())||"";if(!S){_.value.baseUrl="请填写 API 基础地址";return}if(!S.endsWith("/models")){_.value.baseUrl="API 基础地址必须以 /models 结尾";return}}if(s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)){R("请选择一个分组","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 M("项目 ID 未填写",`您尚未填写项目 ID。
|
||
|
||
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
|
||
如果您使用的是普通个人账号,可以继续不填写。`,"继续保存","返回填写"))){ee.value=!0;try{const S=q(s.value.proxy),D={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,expiresAt:s.value.expiresAt||void 0,proxy:S};if(s.value.accessToken||s.value.refreshToken){const be=((t=s.value.accessToken)==null?void 0:t.trim())||"",O=((re=s.value.refreshToken)==null?void 0:re.trim())||"";if(y.account.platform==="claude"){const Ie=s.value.refreshToken?6e5:31536e6;D.claudeAiOauth={accessToken:be||"",refreshToken:O||"",expiresAt:Date.now()+Ie,scopes:y.account.scopes||[]}}else if(y.account.platform==="gemini"){const Ie=s.value.refreshToken?6e5:31536e6;D.geminiOauth={access_token:be||"",refresh_token:O||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+Ie}}else if(y.account.platform==="openai"){const Ie=s.value.refreshToken?6e5:31536e6;D.openaiOauth={idToken:"",accessToken:be||"",refreshToken:O||"",expires_in:Math.floor(Ie/1e3)},O&&O!==y.account.refreshToken&&(D.needsImmediateRefresh=!0,D.requireRefreshSuccess=!0)}else y.account.platform==="droid"&&(be&&(D.accessToken=be),O&&(D.refreshToken=O))}if(y.account.platform==="droid"){const be=((ge=s.value.apiKeysInput)==null?void 0:ge.trim())||"",O=s.value.apiKeyUpdateMode||"append";if(O==="delete"){if(!be){_.value.apiKeys="请填写需要删除的 API Key",ee.value=!1;return}const Ie=nt(be);if(Ie.length===0){_.value.apiKeys="请填写需要删除的 API Key",ee.value=!1;return}D.removeApiKeys=Ie,D.apiKeyUpdateMode="delete"}else{if(be){const Ie=nt(be);if(Ie.length===0){_.value.apiKeys="请至少填写一个 API Key",ee.value=!1;return}D.apiKeys=Ie}else O==="replace"&&(D.apiKeys=[]);(O!=="append"||be)&&(D.apiKeyUpdateMode=O)}b.value&&(D.authenticationMethod="api_key")}if(y.account.platform==="gemini"&&(D.projectId=s.value.projectId||""),y.account.platform==="droid"&&(D.priority=s.value.priority||50,D.endpointType=s.value.endpointType||"anthropic"),y.account.platform==="claude"&&(s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=dt()),D.priority=s.value.priority||50,D.autoStopOnWarning=s.value.autoStopOnWarning||!1,D.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,D.useUnifiedClientId=s.value.useUnifiedClientId||!1,D.unifiedClientId=s.value.unifiedClientId||"",D.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}),y.account.platform==="openai"&&(D.priority=s.value.priority||50),y.account.platform==="gemini"&&(D.priority=s.value.priority||50),y.account.platform==="claude-console"&&(D.apiUrl=s.value.apiUrl,s.value.apiKey&&(D.apiKey=s.value.apiKey),D.priority=s.value.priority||50,D.supportedModels=Wt()||{},D.userAgent=s.value.userAgent||null,D.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0,D.disableAutoProtection=!!s.value.disableAutoProtection,D.dailyQuota=s.value.dailyQuota||0,D.quotaResetTime=s.value.quotaResetTime||"00:00",D.maxConcurrentTasks=s.value.maxConcurrentTasks||0),y.account.platform==="openai-responses"&&(D.baseApi=s.value.baseApi,s.value.apiKey&&(D.apiKey=s.value.apiKey),D.userAgent=s.value.userAgent||"",D.priority=s.value.priority||50,D.dailyQuota=s.value.dailyQuota||0,D.quotaResetTime=s.value.quotaResetTime||"00:00"),y.account.platform==="bedrock"&&((s.value.accessKeyId||s.value.secretAccessKey||s.value.sessionToken)&&(D.awsCredentials={},s.value.accessKeyId&&(D.awsCredentials.accessKeyId=s.value.accessKeyId),s.value.secretAccessKey&&(D.awsCredentials.secretAccessKey=s.value.secretAccessKey),s.value.sessionToken!==void 0&&(D.awsCredentials.sessionToken=s.value.sessionToken||null)),s.value.region&&(D.region=s.value.region),D.defaultModel=s.value.defaultModel||null,D.smallFastModel=s.value.smallFastModel||null,D.priority=s.value.priority||50,D.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0),y.account.platform==="azure_openai"&&(D.azureEndpoint=s.value.azureEndpoint,D.apiVersion=s.value.apiVersion||"2024-02-01",D.deploymentName=s.value.deploymentName,D.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[],D.priority=s.value.priority||50,s.value.apiKey&&s.value.apiKey.trim()&&(D.apiKey=s.value.apiKey)),y.account.platform==="gemini-api"&&(D.baseUrl=s.value.baseUrl||"https://generativelanguage.googleapis.com",s.value.apiKey&&s.value.apiKey.trim()&&(D.apiKey=s.value.apiKey),D.priority=s.value.priority||50,D.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[]),y.account.platform==="claude")await U.updateClaudeAccount(y.account.id,D);else if(y.account.platform==="claude-console")await U.updateClaudeConsoleAccount(y.account.id,D);else if(y.account.platform==="openai-responses")await U.updateOpenAIResponsesAccount(y.account.id,D);else if(y.account.platform==="bedrock")await U.updateBedrockAccount(y.account.id,D);else if(y.account.platform==="openai")await U.updateOpenAIAccount(y.account.id,D);else if(y.account.platform==="azure_openai")await U.updateAzureOpenAIAccount(y.account.id,D);else if(y.account.platform==="gemini")await U.updateGeminiAccount(y.account.id,D);else if(y.account.platform==="gemini-api")await U.updateGeminiApiAccount(y.account.id,D);else if(y.account.platform==="droid")await U.updateDroidAccount(y.account.id,D);else throw new Error(`不支持的平台: ${y.account.platform}`);W("success")}catch(S){const D=((ae=(i=S.response)==null?void 0:i.data)==null?void 0:ae.error)||S.message||"账户更新失败",be=((Le=(le=S.response)==null?void 0:le.data)==null?void 0:Le.suggestion)||"",O=((_e=(Pe=S.response)==null?void 0:Pe.data)==null?void 0:_e.errorDetails)||null;let Ie=D;be&&(Ie+=`
|
||
${be}`),O&&O.error_description?Ie+=`
|
||
详细信息: ${O.error_description}`:O&&O.error&&O.error.message&&(Ie+=`
|
||
详细信息: ${O.error.message}`),R(Ie,"error","",8e3)}finally{ee.value=!1}}};ke(()=>s.value.name,()=>{var d;_.value.name&&((d=s.value.name)!=null&&d.trim())&&(_.value.name="")}),ke(()=>s.value.accessToken,()=>{var d;_.value.accessToken&&((d=s.value.accessToken)!=null&&d.trim())&&(_.value.accessToken="")}),ke(()=>s.value.refreshToken,()=>{var d;_.value.refreshToken&&((d=s.value.refreshToken)!=null&&d.trim())&&(_.value.refreshToken="")}),ke(()=>s.value.apiUrl,()=>{var d;_.value.apiUrl&&((d=s.value.apiUrl)!=null&&d.trim())&&(_.value.apiUrl="")}),ke(()=>s.value.apiKey,()=>{var d;_.value.apiKey&&((d=s.value.apiKey)!=null&&d.trim())&&(_.value.apiKey="")}),ke(()=>s.value.azureEndpoint,()=>{var d;_.value.azureEndpoint&&((d=s.value.azureEndpoint)!=null&&d.trim())&&(_.value.azureEndpoint="")}),ke(()=>s.value.deploymentName,()=>{var d;_.value.deploymentName&&((d=s.value.deploymentName)!=null&&d.trim())&&(_.value.deploymentName="")});const Fe=$([]),Mt=$(!1),et=$(!1),pt=de(()=>{let d=s.value.platform;return s.value.platform==="claude-console"||s.value.platform==="ccr"?d="claude":s.value.platform==="openai-responses"?d="openai":s.value.platform==="gemini-api"&&(d="gemini"),Fe.value.filter(t=>t.platform===d)}),St=async()=>{Mt.value=!0;try{const d=await F.get("/admin/account-groups");Fe.value=d.data||[]}catch{R("加载分组列表失败","error"),Fe.value=[]}finally{Mt.value=!1}},Gt=async()=>{await St(),R("分组列表已刷新","success")},gs=()=>{et.value=!0},Es=async()=>{await St()},$t=async()=>{var t;if(!((t=y.account)!=null&&t.id))return;const d=[typeof U.fetchDroidAccounts=="function"?U.fetchDroidAccounts:null,typeof U.fetchAllAccounts=="function"?U.fetchAllAccounts:null].filter(Boolean);for(const re of d)try{await re();return}catch(ge){console.error("刷新账户列表失败:",ge)}};ke(()=>s.value.platform,d=>{d==="claude-console"||d==="ccr"||d==="bedrock"||d==="openai-responses"?s.value.addType="manual":d==="claude"||d==="gemini"||d==="openai"?s.value.addType="oauth":(d==="gemini-api"||d==="azure_openai")&&(s.value.addType="apikey"),s.value.accountType==="group"&&(s.value.groupId="",s.value.groupIds=[])}),ke(()=>s.value.groupIds,d=>{s.value.accountType==="group"&&(d&&d.length>0?s.value.groupId=d[0]:s.value.groupId="")},{deep:!0}),ke(()=>s.value.addType,(d,t)=>{d!==t&&(d==="apikey"?(s.value.accessToken="",s.value.refreshToken="",_.value.accessToken="",_.value.refreshToken="",s.value.authenticationMethod="api_key",s.value.apiKeyUpdateMode="append"):t==="apikey"&&(s.value.apiKeysInput="",s.value.apiKeyUpdateMode="append",_.value.apiKeys="",G.value||(s.value.authenticationMethod="")))}),ke(()=>s.value.apiKeyUpdateMode,(d,t)=>{d!==t&&_.value.apiKeys&&(_.value.apiKeys="")}),ke(()=>s.value.apiKeysInput,d=>{if(!_.value.apiKeys)return;const t=nt(d),re=s.value.apiKeyUpdateMode;if(re==="append"&&t.length>0){_.value.apiKeys="";return}if(re==="replace"){(t.length>0||!d||d.trim()==="")&&(_.value.apiKeys="");return}re==="delete"&&t.length>0&&(_.value.apiKeys="")}),ke(z,d=>{if(!d||typeof d!="string")return;const t=d.trim();if(!t)return;if(t.startsWith("http://")||t.startsWith("https://"))if(t.startsWith("http://localhost:45462"))try{const i=new URL(t).searchParams.get("code");i?(z.value=i,R("成功提取授权码!","success")):R("URL 中未找到授权码参数,请检查链接是否正确","error")}catch{R("链接格式错误,请检查是否为完整的 URL","error")}else R("请粘贴以 http://localhost:45462 开头的链接","error")}),ke(()=>s.value.platform,d=>{G.value||W("platform-changed",d)}),ke(()=>s.value.accountType,d=>{d==="group"&&Fe.value.length===0&&St()}),ke(()=>s.value.groupId,d=>{d==="__new__"&&(s.value.groupId="",et.value=!0)});const Je=()=>{Oe.value.push({from:"",to:""})},ys=d=>{Oe.value.splice(d,1)},qe=(d,t)=>{if(Oe.value.some(ge=>ge.from===d)){R(`模型 ${d} 的映射已存在`,"info");return}Oe.value.push({from:d,to:t}),R(`已添加映射: ${d} → ${t}`,"success")},Wt=()=>{const d={};return me.value==="whitelist"?Te.value.forEach(t=>{d[t]=t}):Oe.value.forEach(t=>{t.from&&t.to&&(d[t.from]=t.to)}),Object.keys(d).length>0?d:null};ke(()=>y.account,d=>{if(d){vt();const t=xe(d.proxy),re=typeof d.authenticationMethod=="string"?d.authenticationMethod.trim().toLowerCase():"",ge=re==="api_key"?"apikey":re==="manual"?"manual":"oauth";let i="";d.accountType==="group"&&(i=d.groupId||d.groupInfo&&d.groupInfo.id||"");let ae="claude_max";if(d.subscriptionInfo){const le=typeof d.subscriptionInfo=="string"?JSON.parse(d.subscriptionInfo):d.subscriptionInfo;le.accountType?ae=le.accountType:le.hasClaudeMax?ae="claude_max":le.hasClaudePro?ae="claude_pro":ae="claude_free"}s.value={platform:d.platform,addType:ge,name:d.name,description:d.description||"",accountType:d.accountType||"shared",subscriptionType:ae,autoStopOnWarning:d.autoStopOnWarning||!1,useUnifiedUserAgent:d.useUnifiedUserAgent||!1,useUnifiedClientId:d.useUnifiedClientId||!1,unifiedClientId:d.unifiedClientId||"",groupId:i,groupIds:[],projectId:d.projectId||"",accessToken:"",refreshToken:"",authenticationMethod:d.authenticationMethod||"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:t,apiUrl:d.apiUrl||"",apiKey:"",priority:d.priority||50,supportedModels:(()=>{const le=d.supportedModels;return le?typeof le=="object"&&!Array.isArray(le)?Object.keys(le):Array.isArray(le)?le:[]:[]})(),userAgent:d.userAgent||"",enableRateLimit:!!(d.rateLimitDuration&&d.rateLimitDuration>0),rateLimitDuration:d.rateLimitDuration||60,accessKeyId:"",secretAccessKey:"",region:d.region||"",sessionToken:"",defaultModel:d.defaultModel||"",smallFastModel:d.smallFastModel||"",azureEndpoint:d.azureEndpoint||"",apiVersion:d.apiVersion||"",deploymentName:d.deploymentName||"",baseApi:d.baseApi||"",baseUrl:d.baseUrl||"https://generativelanguage.googleapis.com",dailyQuota:d.dailyQuota||0,dailyUsage:d.dailyUsage||0,quotaResetTime:d.quotaResetTime||"00:00",maxConcurrentTasks:d.maxConcurrentTasks||0,disableAutoProtection:d.disableAutoProtection===!0},d.platform==="claude-console"&&p(),d.accountType==="group"&&St().then(async()=>{const le=[];if(d.groupInfos&&Array.isArray(d.groupInfos)&&d.groupInfos.length>0)d.groupInfos.forEach(Le=>{Le&&Le.id&&le.push(Le.id)}),le.length>0&&(s.value.groupId=le[0]);else if(d.groupInfo&&d.groupInfo.id)s.value.groupId=d.groupInfo.id,le.push(d.groupInfo.id);else if(d.groupId)s.value.groupId=d.groupId,le.push(d.groupId);else if(d.groupIds&&Array.isArray(d.groupIds)&&d.groupIds.length>0)s.value.groupId=d.groupIds[0],le.push(...d.groupIds);else{const Le=Fe.value.map(async Pe=>{try{((await F.get(`/admin/account-groups/${Pe.id}/members`)).data||[]).some(D=>D.id===d.id)&&(le.push(Pe.id),s.value.groupId||(s.value.groupId=Pe.id))}catch{}});await Promise.all(Le)}s.value.groupIds=le})}},{immediate:!0});const tt=async()=>{try{const d=await F.get("/admin/claude-code-version");d.success&&d.userAgent?T.value=d.userAgent:T.value=""}catch{T.value=""}},ms=async()=>{Ce.value=!0;try{(await F.post("/admin/claude-code-version/clear")).success?(T.value="",R("统一User-Agent缓存已清除","success")):R("清除缓存失败","error")}catch(d){R("清除缓存失败:"+(d.message||"未知错误"),"error")}finally{Ce.value=!1}},dt=()=>{const d=new Uint8Array(32);return crypto.getRandomValues(d),Array.from(d,t=>t.toString(16).padStart(2,"0")).join("")},At=()=>{s.value.unifiedClientId=dt(),R("已生成新的客户端标识","success")},cs=()=>{s.value.useUnifiedClientId&&(s.value.useUnifiedUserAgent=!0,s.value.unifiedClientId||(s.value.unifiedClientId=dt()))},Dt=de(()=>{const d=new Date;return d.setMinutes(d.getMinutes()+1),d.toISOString().slice(0,16)}),Bt=()=>{if(!s.value.expireDuration){s.value.expiresAt=null;return}if(s.value.expireDuration==="custom")return;const d=new Date,re=s.value.expireDuration.match(/(\d+)([d])/);if(re){const[,ge,i]=re,ae=parseInt(ge);i==="d"&&d.setDate(d.getDate()+ae),s.value.expiresAt=d.toISOString()}},xs=()=>{s.value.customExpireDate&&(s.value.expiresAt=new Date(s.value.customExpireDate).toISOString())},Qt=d=>d?new Date(d).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"";return us(()=>{var d;ie.value=H(s.value.platform),G.value&&vt(),tt(),G.value&&((d=y.account)==null?void 0:d.platform)==="claude-console"&&p()}),ke(()=>s.value.platform,d=>{d==="claude"&&tt()}),(d,t)=>{var re,ge;return o(),Ye(jt,{to:"body"},[ue.value?(o(),n("div",tn,[e("div",sn,[e("div",rn,[e("div",an,[t[163]||(t[163]=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",ln,u(G.value?"编辑账户":"添加账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:t[0]||(t[0]=i=>d.$emit("close"))},t[164]||(t[164]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),!G.value&&(s.value.addType==="oauth"||s.value.addType==="setup-token")?(o(),n("div",on,[e("div",nn,[e("div",dn,[e("div",{class:I(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",ye.value>=1?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 1 ",2),t[165]||(t[165]=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[167]||(t[167]=e("div",{class:"h-0.5 w-4 bg-gray-300 sm:w-8"},null,-1)),e("div",un,[e("div",{class:I(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",ye.value>=2?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 2 ",2),t[166]||(t[166]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"授权认证",-1))])])])):c("",!0),ye.value===1&&!G.value?(o(),n("div",pn,[e("div",gn,[G.value?c("",!0):(o(),n("div",yn,[t[205]||(t[205]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择平台",-1)),e("div",mn,[e("div",cn,[e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[ie.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]=i=>L("claude"))},[e("div",xn,[e("div",fn,[t[169]||(t[169]=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)),ie.value==="claude"?(o(),n("div",bn,t[168]||(t[168]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[170]||(t[170]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Claude ",-1)),t[171]||(t[171]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Anthropic",-1))])],2),e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[ie.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]=i=>L("openai"))},[e("div",vn,[e("div",kn,[t[173]||(t[173]=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)),ie.value==="openai"?(o(),n("div",hn,t[172]||(t[172]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[174]||(t[174]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," OpenAI ",-1)),t[175]||(t[175]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"GPT 系列",-1))])],2),e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[ie.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]=i=>L("gemini"))},[e("div",wn,[e("div",$n,[t[177]||(t[177]=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)),ie.value==="gemini"?(o(),n("div",An,t[176]||(t[176]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[178]||(t[178]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Gemini ",-1)),t[179]||(t[179]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Google AI",-1))])],2),e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[ie.value==="droid"?"border-rose-500 bg-gradient-to-br from-rose-50 to-orange-50 shadow-md dark:from-rose-900/20 dark:to-orange-900/20":"border-gray-200 bg-white hover:border-rose-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-rose-600"]]),onClick:t[4]||(t[4]=i=>L("droid"))},[e("div",Cn,[e("div",Un,[t[181]||(t[181]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-rose-500 to-orange-500"},[e("i",{class:"fas fa-robot text-sm text-white"})],-1)),ie.value==="droid"?(o(),n("div",In,t[180]||(t[180]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[182]||(t[182]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Droid ",-1)),t[183]||(t[183]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Claude Droid",-1))])],2)]),ie.value?(o(),n("div",Tn,[t[204]||(t[204]=e("p",{class:"mb-2 text-xs font-medium text-gray-700 dark:text-gray-300"}," 选择具体平台类型: ",-1)),e("div",_n,[ie.value==="claude"?(o(),n(Ae,{key:0},[e("label",{class:I(["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"]])},[k(e("input",{"onUpdate:modelValue":t[5]||(t[5]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"claude"},null,512),[[Me,s.value.platform]]),t[185]||(t[185]=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"?(o(),n("div",Kn,t[184]||(t[184]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["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"]])},[k(e("input",{"onUpdate:modelValue":t[6]||(t[6]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"claude-console"},null,512),[[Me,s.value.platform]]),t[187]||(t[187]=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"?(o(),n("div",Mn,t[186]||(t[186]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["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"]])},[k(e("input",{"onUpdate:modelValue":t[7]||(t[7]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"bedrock"},null,512),[[Me,s.value.platform]]),t[189]||(t[189]=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"?(o(),n("div",Sn,t[188]||(t[188]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["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"]])},[k(e("input",{"onUpdate:modelValue":t[8]||(t[8]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"ccr"},null,512),[[Me,s.value.platform]]),t[191]||(t[191]=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"?(o(),n("div",Dn,t[190]||(t[190]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)],64)):c("",!0),ie.value==="openai"?(o(),n(Ae,{key:1},[e("label",{class:I(["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"]])},[k(e("input",{"onUpdate:modelValue":t[9]||(t[9]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"openai"},null,512),[[Me,s.value.platform]]),t[193]||(t[193]=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"?(o(),n("div",Ln,t[192]||(t[192]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["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"]])},[k(e("input",{"onUpdate:modelValue":t[10]||(t[10]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"openai-responses"},null,512),[[Me,s.value.platform]]),t[195]||(t[195]=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"?(o(),n("div",Pn,t[194]||(t[194]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["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"]])},[k(e("input",{"onUpdate:modelValue":t[11]||(t[11]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"azure_openai"},null,512),[[Me,s.value.platform]]),t[197]||(t[197]=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"?(o(),n("div",zn,t[196]||(t[196]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)],64)):c("",!0),ie.value==="gemini"?(o(),n(Ae,{key:2},[e("label",{class:I(["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"]])},[k(e("input",{"onUpdate:modelValue":t[12]||(t[12]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"gemini"},null,512),[[Me,s.value.platform]]),t[199]||(t[199]=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"?(o(),n("div",jn,t[198]||(t[198]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="gemini-api"?"border-amber-500 bg-amber-50 dark:border-amber-400 dark:bg-amber-900/30":"border-gray-300 bg-white hover:border-amber-400 hover:bg-amber-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-amber-500 dark:hover:bg-amber-900/20"]])},[k(e("input",{"onUpdate:modelValue":t[13]||(t[13]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"gemini-api"},null,512),[[Me,s.value.platform]]),t[201]||(t[201]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-key text-sm text-amber-600 dark:text-amber-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Gemini API"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"API Key")])],-1)),s.value.platform==="gemini-api"?(o(),n("div",Rn,t[200]||(t[200]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)],64)):c("",!0),ie.value==="droid"?(o(),n("label",{key:3,class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="droid"?"border-rose-500 bg-rose-50 dark:border-rose-400 dark:bg-rose-900/30":"border-gray-300 bg-white hover:border-rose-400 hover:bg-rose-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-rose-500 dark:hover:bg-rose-900/20"]])},[k(e("input",{"onUpdate:modelValue":t[14]||(t[14]=i=>s.value.platform=i),class:"sr-only",type:"radio",value:"droid"},null,512),[[Me,s.value.platform]]),t[203]||(t[203]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-rose-600 dark:text-rose-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Droid 专属"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),s.value.platform==="droid"?(o(),n("div",Vn,t[202]||(t[202]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)):c("",!0)])])):c("",!0)])])),!G.value&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"&&s.value.platform!=="gemini-api"?(o(),n("div",On,[t[210]||(t[210]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"添加方式",-1)),e("div",En,[e("label",Nn,[k(e("input",{"onUpdate:modelValue":t[15]||(t[15]=i=>s.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"oauth"},null,512),[[Me,s.value.addType]]),e("span",Fn,[t[206]||(t[206]=x(" OAuth 授权",-1)),s.value.platform==="claude"||s.value.platform==="openai"?(o(),n("span",qn," (用量可视化)")):c("",!0)])]),s.value.platform==="claude"?(o(),n("label",Gn,[k(e("input",{"onUpdate:modelValue":t[16]||(t[16]=i=>s.value.addType=i),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),[[Me,s.value.addType]]),t[207]||(t[207]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Setup Token (效期长)",-1))])):c("",!0),e("label",Wn,[k(e("input",{"onUpdate:modelValue":t[17]||(t[17]=i=>s.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"manual"},null,512),[[Me,s.value.addType]]),t[208]||(t[208]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"手动输入 Access Token",-1))]),s.value.platform==="droid"?(o(),n("label",Bn,[k(e("input",{"onUpdate:modelValue":t[18]||(t[18]=i=>s.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"apikey"},null,512),[[Me,s.value.addType]]),t[209]||(t[209]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"使用 API Key (支持多个)",-1))])):c("",!0)])])):c("",!0),e("div",null,[t[211]||(t[211]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),k(e("input",{"onUpdate:modelValue":t[19]||(t[19]=i=>s.value.name=i),class:I(["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":_.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[P,s.value.name]]),_.value.name?(o(),n("p",Qn,u(_.value.name),1)):c("",!0)]),e("div",null,[t[212]||(t[212]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),k(e("textarea",{"onUpdate:modelValue":t[20]||(t[20]=i=>s.value.description=i),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),[[P,s.value.description]])]),e("div",null,[t[216]||(t[216]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",Hn,[e("label",Jn,[k(e("input",{"onUpdate:modelValue":t[21]||(t[21]=i=>s.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[Me,s.value.accountType]]),t[213]||(t[213]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",Yn,[k(e("input",{"onUpdate:modelValue":t[22]||(t[22]=i=>s.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[Me,s.value.accountType]]),t[214]||(t[214]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",Zn,[k(e("input",{"onUpdate:modelValue":t[23]||(t[23]=i=>s.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[Me,s.value.accountType]]),t[215]||(t[215]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[217]||(t[217]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),!G.value&&s.value.platform!=="gemini-api"?(o(),n("div",Xn,[t[221]||(t[221]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",ei,[k(e("select",{"onUpdate:modelValue":t[24]||(t[24]=i=>s.value.expireDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:Bt},t[218]||(t[218]=[e("option",{value:""},"永不过期",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[Vs,s.value.expireDuration]]),s.value.expireDuration==="custom"?(o(),n("div",ti,[k(e("input",{"onUpdate:modelValue":t[25]||(t[25]=i=>s.value.customExpireDate=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Dt.value,type:"datetime-local",onChange:xs},null,40,si),[[P,s.value.customExpireDate]])])):c("",!0),s.value.expiresAt?(o(),n("p",ri,[t[219]||(t[219]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),x(" 将于 "+u(Qt(s.value.expiresAt))+" 过期 ",1)])):(o(),n("p",ai,t[220]||(t[220]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),x(" 账户永不过期 ",-1)])))]),t[222]||(t[222]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])):c("",!0),s.value.accountType==="group"?(o(),n("div",li,[t[224]||(t[224]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",oi,[e("div",ni,[e("div",ii,[pt.value.length===0?(o(),n("div",di," 暂无可用分组 ")):c("",!0),(o(!0),n(Ae,null,Be(pt.value,i=>(o(),n("label",{key:i.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[k(e("input",{"onUpdate:modelValue":t[26]||(t[26]=ae=>s.value.groupIds=ae),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i.id},null,8,ui),[[Ve,s.value.groupIds]]),e("span",pi,u(i.name)+" ("+u(i.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:gs},t[223]||(t[223]=[e("i",{class:"fas fa-plus"},null,-1),x(" 新建分组 ",-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:Gt},[e("i",{class:I(["fas fa-sync-alt",{"animate-spin":Mt.value}])},null,2)])])])):c("",!0),s.value.platform==="gemini"?(o(),n("div",gi,[t[225]||(t[225]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),k(e("input",{"onUpdate:modelValue":t[27]||(t[27]=i=>s.value.projectId=i),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),[[P,s.value.projectId]]),t[226]||(t[226]=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,[x(" 访问 "),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,[x(" 复制"),e("span",{class:"font-semibold text-red-600"},"项目 ID(Project ID)"),x(",通常是字符串格式 ")]),e("li",{class:"text-red-600"}," ⚠️ 注意:要复制项目 ID(Project ID),不要复制项目编号(Project Number)! ")])]),e("p",{class:"mt-2"},[e("strong",null,"提示:"),x("如果您的账号是普通个人账号(未绑定 Google Cloud),请留空此字段。 ")])])])],-1))])):c("",!0),s.value.platform==="bedrock"&&!G.value?(o(),n("div",yi,[e("div",null,[t[227]||(t[227]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 访问密钥 ID *",-1)),k(e("input",{"onUpdate:modelValue":t[28]||(t[28]=i=>s.value.accessKeyId=i),class:I(["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":_.value.accessKeyId}]),placeholder:"请输入 AWS Access Key ID",required:"",type:"text"},null,2),[[P,s.value.accessKeyId]]),_.value.accessKeyId?(o(),n("p",mi,u(_.value.accessKeyId),1)):c("",!0)]),e("div",null,[t[228]||(t[228]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 秘密访问密钥 *",-1)),k(e("input",{"onUpdate:modelValue":t[29]||(t[29]=i=>s.value.secretAccessKey=i),class:I(["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":_.value.secretAccessKey}]),placeholder:"请输入 AWS Secret Access Key",required:"",type:"password"},null,2),[[P,s.value.secretAccessKey]]),_.value.secretAccessKey?(o(),n("p",ci,u(_.value.secretAccessKey),1)):c("",!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"},"AWS 区域 *",-1)),k(e("input",{"onUpdate:modelValue":t[30]||(t[30]=i=>s.value.region=i),class:I(["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":_.value.region}]),placeholder:"例如:us-east-1",required:"",type:"text"},null,2),[[P,s.value.region]]),_.value.region?(o(),n("p",xi,u(_.value.region),1)):c("",!0),t[230]||(t[230]=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[231]||(t[231]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"会话令牌 (可选)",-1)),k(e("input",{"onUpdate:modelValue":t[31]||(t[31]=i=>s.value.sessionToken=i),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),[[P,s.value.sessionToken]]),t[232]||(t[232]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 仅在使用临时 AWS 凭证时需要填写 ",-1))]),e("div",null,[t[233]||(t[233]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"默认主模型 (可选)",-1)),k(e("input",{"onUpdate:modelValue":t[32]||(t[32]=i=>s.value.defaultModel=i),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),[[P,s.value.defaultModel]]),t[234]||(t[234]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1)),t[235]||(t[235]=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[236]||(t[236]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),k(e("input",{"onUpdate:modelValue":t[33]||(t[33]=i=>s.value.smallFastModel=i),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),[[P,s.value.smallFastModel]]),t[237]||(t[237]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 用于快速响应的轻量级模型,留空将使用系统默认 ",-1))])])):c("",!0),s.value.platform==="azure_openai"&&!G.value?(o(),n("div",fi,[e("div",null,[t[238]||(t[238]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint *",-1)),k(e("input",{"onUpdate:modelValue":t[34]||(t[34]=i=>s.value.azureEndpoint=i),class:I(["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":_.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",required:"",type:"url"},null,2),[[P,s.value.azureEndpoint]]),_.value.azureEndpoint?(o(),n("p",bi,u(_.value.azureEndpoint),1)):c("",!0),t[239]||(t[239]=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[240]||(t[240]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),k(e("input",{"onUpdate:modelValue":t[35]||(t[35]=i=>s.value.apiVersion=i),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),[[P,s.value.apiVersion]]),t[241]||(t[241]=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[242]||(t[242]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称 *",-1)),k(e("input",{"onUpdate:modelValue":t[36]||(t[36]=i=>s.value.deploymentName=i),class:I(["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":_.value.deploymentName}]),placeholder:"gpt-4",required:"",type:"text"},null,2),[[P,s.value.deploymentName]]),_.value.deploymentName?(o(),n("p",vi,u(_.value.deploymentName),1)):c("",!0),t[243]||(t[243]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Azure OpenAI Studio 中创建的部署名称 ",-1))]),e("div",null,[t[244]||(t[244]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),k(e("input",{"onUpdate:modelValue":t[37]||(t[37]=i=>s.value.apiKey=i),class:I(["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":_.value.apiKey}]),placeholder:"请输入 Azure OpenAI API Key",required:"",type:"password"},null,2),[[P,s.value.apiKey]]),_.value.apiKey?(o(),n("p",ki,u(_.value.apiKey),1)):c("",!0),t[245]||(t[245]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Azure 门户获取的 API 密钥 ",-1))]),e("div",null,[t[246]||(t[246]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",hi,[(o(),n(Ae,null,Be(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],i=>e("label",{key:i,class:"flex cursor-pointer items-center"},[k(e("input",{"onUpdate:modelValue":t[38]||(t[38]=ae=>s.value.supportedModels=ae),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,wi),[[Ve,s.value.supportedModels]]),e("span",$i,u(i),1)])),64))]),t[247]||(t[247]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 选择此部署支持的模型类型 ",-1))])])):c("",!0),s.value.platform==="bedrock"&&!G.value?(o(),n("div",Ai,[e("div",null,[t[252]||(t[252]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",Ci,[e("label",Ui,[k(e("input",{"onUpdate:modelValue":t[39]||(t[39]=i=>s.value.enableRateLimit=i),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),[[Ve,s.value.enableRateLimit]]),t[248]||(t[248]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[249]||(t[249]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(o(),n("div",Ii,[t[250]||(t[250]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),k(e("input",{"onUpdate:modelValue":t[40]||(t[40]=i=>s.value.rateLimitDuration=i),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),[[P,s.value.rateLimitDuration,void 0,{number:!0}]]),t[251]||(t[251]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):c("",!0)])])):c("",!0),(s.value.platform==="claude-console"||s.value.platform==="ccr")&&!G.value?(o(),n("div",Ti,[e("div",null,[t[253]||(t[253]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),k(e("input",{"onUpdate:modelValue":t[41]||(t[41]=i=>s.value.apiUrl=i),class:I(["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":_.value.apiUrl}]),placeholder:"例如:https://api.example.com",required:"",type:"text"},null,2),[[P,s.value.apiUrl]]),_.value.apiUrl?(o(),n("p",_i,u(_.value.apiUrl),1)):c("",!0)]),e("div",null,[t[254]||(t[254]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),k(e("input",{"onUpdate:modelValue":t[42]||(t[42]=i=>s.value.apiKey=i),class:I(["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":_.value.apiKey}]),placeholder:"请输入API Key",required:"",type:"password"},null,2),[[P,s.value.apiKey]]),_.value.apiKey?(o(),n("p",Ki,u(_.value.apiKey),1)):c("",!0)]),e("div",Mi,[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)),k(e("input",{"onUpdate:modelValue":t[43]||(t[43]=i=>s.value.dailyQuota=i),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,s.value.dailyQuota,void 0,{number:!0}]]),t[256]||(t[256]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[257]||(t[257]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),k(e("input",{"onUpdate:modelValue":t[44]||(t[44]=i=>s.value.quotaResetTime=i),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,s.value.quotaResetTime]]),t[258]||(t[258]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 每日自动重置额度的时间 ",-1))])]),e("div",null,[t[259]||(t[259]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),k(e("input",{"onUpdate:modelValue":t[45]||(t[45]=i=>s.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[P,s.value.maxConcurrentTasks,void 0,{number:!0}]]),t[260]||(t[260]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))]),e("div",null,[t[268]||(t[268]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",Si,[e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",me.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[46]||(t[46]=i=>me.value="whitelist")},t[261]||(t[261]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),x(" 模型白名单 ",-1)]),2),e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",me.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[47]||(t[47]=i=>me.value="mapping")},t[262]||(t[262]=[e("i",{class:"fas fa-random mr-2"},null,-1),x(" 模型映射 ",-1)]),2)]),me.value==="whitelist"?(o(),n("div",Di,[t[263]||(t[263]=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"}),x(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",Li,[(o(),n(Ae,null,Be(Ge,i=>e("label",{key:i.value,class:I(["flex cursor-pointer items-center rounded-lg border p-3 transition-all hover:bg-gray-50 dark:border-gray-600 dark:hover:bg-gray-700",Te.value.includes(i.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[k(e("input",{"onUpdate:modelValue":t[48]||(t[48]=ae=>Te.value=ae),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,Pi),[[Ve,Te.value]]),e("span",zi,u(i.label),1)],2)),64))]),e("p",ji,[x(" 已选择 "+u(Te.value.length)+" 个模型 ",1),Te.value.length===0?(o(),n("span",Ri,"(支持所有模型)")):c("",!0)])])):(o(),n("div",Vi,[t[267]||(t[267]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",Oi,[(o(!0),n(Ae,null,Be(Oe.value,(i,ae)=>(o(),n("div",{key:ae,class:"flex items-center gap-2"},[k(e("input",{"onUpdate:modelValue":le=>i.from=le,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,Ei),[[P,i.from]]),t[265]||(t[265]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),k(e("input",{"onUpdate:modelValue":le=>i.to=le,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,Ni),[[P,i.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:le=>ys(ae)},t[264]||(t[264]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Fi)]))),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:Je},t[266]||(t[266]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 添加模型映射 ",-1)])),e("div",qi,[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[49]||(t[49]=i=>qe("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),e("button",{class:"rounded-lg bg-indigo-100 px-3 py-1 text-xs text-indigo-700 transition-colors hover:bg-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-400 dark:hover:bg-indigo-900/50",type:"button",onClick:t[50]||(t[50]=i=>qe("claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929"))}," + Sonnet 4.5 "),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[51]||(t[51]=i=>qe("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[52]||(t[52]=i=>qe("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),e("button",{class:"rounded-lg bg-emerald-100 px-3 py-1 text-xs text-emerald-700 transition-colors hover:bg-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-900/50",type:"button",onClick:t[53]||(t[53]=i=>qe("claude-haiku-4-5-20251001","claude-haiku-4-5-20251001"))}," + Haiku 4.5 "),e("button",{class:"rounded-lg bg-cyan-100 px-3 py-1 text-xs text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:hover:bg-cyan-900/50",type:"button",onClick:t[54]||(t[54]=i=>qe("deepseek-chat","deepseek-chat"))}," + DeepSeek "),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[55]||(t[55]=i=>qe("Qwen","Qwen"))}," + Qwen "),e("button",{class:"rounded-lg bg-pink-100 px-3 py-1 text-xs text-pink-700 transition-colors hover:bg-pink-200 dark:bg-pink-900/30 dark:text-pink-400 dark:hover:bg-pink-900/50",type:"button",onClick:t[56]||(t[56]=i=>qe("Kimi","Kimi"))}," + Kimi "),e("button",{class:"rounded-lg bg-teal-100 px-3 py-1 text-xs text-teal-700 transition-colors hover:bg-teal-200 dark:bg-teal-900/30 dark:text-teal-400 dark:hover:bg-teal-900/50",type:"button",onClick:t[57]||(t[57]=i=>qe("GLM","GLM"))}," + GLM "),e("button",{class:"rounded-lg bg-amber-100 px-3 py-1 text-xs text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50",type:"button",onClick:t[58]||(t[58]=i=>qe("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[269]||(t[269]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),k(e("input",{"onUpdate:modelValue":t[59]||(t[59]=i=>s.value.userAgent=i),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),[[P,s.value.userAgent]]),t[270]||(t[270]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[275]||(t[275]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",Gi,[e("label",Wi,[k(e("input",{"onUpdate:modelValue":t[60]||(t[60]=i=>s.value.enableRateLimit=i),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),[[Ve,s.value.enableRateLimit]]),t[271]||(t[271]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[272]||(t[272]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(o(),n("div",Bi,[t[273]||(t[273]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),k(e("input",{"onUpdate:modelValue":t[61]||(t[61]=i=>s.value.rateLimitDuration=i),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),[[P,s.value.rateLimitDuration,void 0,{number:!0}]]),t[274]||(t[274]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):c("",!0)]),s.value.platform==="claude-console"?(o(),n("div",Qi,[t[277]||(t[277]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"上游错误处理",-1)),e("label",Hi,[k(e("input",{"onUpdate:modelValue":t[62]||(t[62]=i=>s.value.disableAutoProtection=i),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),[[Ve,s.value.disableAutoProtection]]),t[276]||(t[276]=e("span",{class:"text-sm 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"}," 勾选后遇到 401/400/429/529 等上游错误仅记录日志并透传,不自动禁用或限流 ",-1))])):c("",!0)])):c("",!0),s.value.platform==="openai-responses"&&!G.value?(o(),n("div",Ji,[e("div",null,[t[279]||(t[279]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),k(e("input",{"onUpdate:modelValue":t[63]||(t[63]=i=>s.value.baseApi=i),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),[[P,s.value.baseApi]]),t[280]||(t[280]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方 OpenAI 兼容 API 的基础地址,不要包含具体路径 ",-1))]),e("div",null,[t[281]||(t[281]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",Yi,[k(e("input",{"onUpdate:modelValue":t[64]||(t[64]=i=>s.value.apiKey=i),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:X.value?"text":"password"},null,8,Zi),[[ds,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[65]||(t[65]=i=>X.value=!X.value)},[e("i",{class:I(X.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[282]||(t[282]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方服务提供的 API 密钥 ",-1))]),e("div",null,[t[283]||(t[283]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),k(e("input",{"onUpdate:modelValue":t[66]||(t[66]=i=>s.value.userAgent=i),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),[[P,s.value.userAgent]]),t[284]||(t[284]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可选项。如果设置,所有请求将使用此 User-Agent;否则透传客户端的 User-Agent ",-1))]),k(e("input",{"onUpdate:modelValue":t[67]||(t[67]=i=>s.value.rateLimitDuration=i),type:"hidden",value:"60"},null,512),[[P,s.value.rateLimitDuration,void 0,{number:!0}]])])):c("",!0),s.value.platform==="gemini-api"&&!G.value?(o(),n("div",Xi,[e("div",null,[t[285]||(t[285]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),k(e("input",{"onUpdate:modelValue":t[68]||(t[68]=i=>s.value.baseUrl=i),class:I(["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 dark:border-red-400":_.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",required:"",type:"url"},null,2),[[P,s.value.baseUrl]]),_.value.baseUrl?(o(),n("p",ed,u(_.value.baseUrl),1)):c("",!0),t[286]||(t[286]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[x(" 填写 API 基础地址,必须以 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/models"),x(" 结尾。系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/{model}:generateContent")],-1)),t[287]||(t[287]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[x(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com/v1beta/models")],-1)),t[288]||(t[288]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[x(" 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini/v1beta/models")],-1))]),e("div",null,[t[289]||(t[289]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",td,[k(e("input",{"onUpdate:modelValue":t[69]||(t[69]=i=>s.value.apiKey=i),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:"AIzaSy...",required:"",type:X.value?"text":"password"},null,8,sd),[[ds,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[70]||(t[70]=i=>X.value=!X.value)},[e("i",{class:I(X.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[290]||(t[290]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Google AI Studio 获取的 API 密钥 ",-1))])])):c("",!0),s.value.platform==="claude"?(o(),n("div",rd,[t[293]||(t[293]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",ad,[e("label",ld,[k(e("input",{"onUpdate:modelValue":t[71]||(t[71]=i=>s.value.subscriptionType=i),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),[[Me,s.value.subscriptionType]]),t[291]||(t[291]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",od,[k(e("input",{"onUpdate:modelValue":t[72]||(t[72]=i=>s.value.subscriptionType=i),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),[[Me,s.value.subscriptionType]]),t[292]||(t[292]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[294]||(t[294]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):c("",!0),s.value.platform==="claude"?(o(),n("div",nd,[e("label",id,[k(e("input",{"onUpdate:modelValue":t[73]||(t[73]=i=>s.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Ve,s.value.autoStopOnWarning]]),t[295]||(t[295]=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))])])):c("",!0),s.value.platform==="claude"?(o(),n("div",dd,[e("label",ud,[k(e("input",{"onUpdate:modelValue":t[74]||(t[74]=i=>s.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Ve,s.value.useUnifiedUserAgent]]),e("div",pd,[t[297]||(t[297]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[298]||(t[298]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),T.value?(o(),n("div",gd,[e("div",yd,[e("p",md," 💡 当前统一版本:"+u(T.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:Ce.value,type:"button",onClick:ms},[Ce.value?(o(),n("div",fd)):(o(),n("i",xd)),x(" "+u(Ce.value?"清除中...":"清除缓存"),1)],8,cd)])])):(o(),n("div",bd,t[296]||(t[296]=[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)])))])])])):c("",!0),s.value.platform==="claude"?(o(),n("div",vd,[e("label",kd,[k(e("input",{"onUpdate:modelValue":t[75]||(t[75]=i=>s.value.useUnifiedClientId=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:cs},null,544),[[Ve,s.value.useUnifiedClientId]]),e("div",hd,[t[302]||(t[302]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[303]||(t[303]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),s.value.useUnifiedClientId?(o(),n("div",wd,[e("div",$d,[e("div",{class:"mb-2 flex items-center justify-between"},[t[300]||(t[300]=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:At},t[299]||(t[299]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x(" 重新生成 ",-1)]))]),e("div",Ad,[e("code",Cd,[e("span",Ud,u(s.value.unifiedClientId.substring(0,8)),1),e("span",Id,u(s.value.unifiedClientId.substring(8,56)),1),e("span",Td,u(s.value.unifiedClientId.substring(56)),1)])]),t[301]||(t[301]=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"}),x(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):c("",!0)])])])):c("",!0),e("div",null,[t[304]||(t[304]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),k(e("input",{"onUpdate:modelValue":t[76]||(t[76]=i=>s.value.priority=i),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),[[P,s.value.priority,void 0,{number:!0}]]),t[305]||(t[305]=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"?(o(),n("div",_d,[e("div",Kd,[t[310]||(t[310]=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[309]||(t[309]=e("h5",{class:"mb-2 font-semibold text-blue-900 dark:text-blue-300"}," 手动输入 Token ",-1)),s.value.platform==="claude"?(o(),n("p",Md," 请输入有效的 Claude Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="gemini"?(o(),n("p",Sd," 请输入有效的 Gemini Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="openai"?(o(),n("p",Dd," 请输入有效的 OpenAI Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="droid"?(o(),n("p",Ld," 请输入有效的 Droid Access Token,并同时提供 Refresh Token 以支持自动刷新。 ")):c("",!0),e("div",Pd,[t[308]||(t[308]=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"}),x(" 获取 Access Token 的方法: ")],-1)),s.value.platform==="claude"?(o(),n("p",zd,t[306]||(t[306]=[x(" 请从已登录 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),x(" 文件中的凭证, 请勿使用 Claude 官网 API Keys 页面的密钥。 ",-1)]))):s.value.platform==="gemini"?(o(),n("p",jd,t[307]||(t[307]=[x(" 请从已登录 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),x(" 文件中的凭证。 ",-1)]))):s.value.platform==="openai"?(o(),n("p",Rd," 请从已登录 OpenAI 账户的机器上获取认证凭证, 或通过 OAuth 授权流程获取 Access Token。 ")):s.value.platform==="droid"?(o(),n("p",Vd," 请从已完成授权的 Droid CLI 或 Factory.ai 导出的凭证中获取 Access Token 与 Refresh Token。 ")):c("",!0)]),s.value.platform!=="droid"?(o(),n("p",Od," 💡 如果未填写 Refresh Token,Token 过期后需要手动更新。 ")):(o(),n("p",Ed," ⚠️ Droid 账户必须填写 Refresh Token,缺失将导致无法自动刷新 Access Token。 "))])]),s.value.platform==="openai"?(o(),n("div",Nd,[t[311]||(t[311]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token (可选)",-1)),k(e("textarea",{"onUpdate:modelValue":t[77]||(t[77]=i=>s.value.accessToken=i),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),[[P,s.value.accessToken]]),t[312]||(t[312]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。 ")],-1))])):(o(),n("div",Fd,[t[313]||(t[313]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token *",-1)),k(e("textarea",{"onUpdate:modelValue":t[78]||(t[78]=i=>s.value.accessToken=i),class:I(["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":_.value.accessToken}]),placeholder:"请输入 Access Token...",required:"",rows:"4"},null,2),[[P,s.value.accessToken]]),_.value.accessToken?(o(),n("p",qd,u(_.value.accessToken),1)):c("",!0)])),s.value.platform==="openai"||s.value.platform==="droid"?(o(),n("div",Gd,[t[315]||(t[315]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token *",-1)),k(e("textarea",{"onUpdate:modelValue":t[79]||(t[79]=i=>s.value.refreshToken=i),class:I(["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":_.value.refreshToken}]),placeholder:"请输入 Refresh Token(必填)...",required:"",rows:"4"},null,2),[[P,s.value.refreshToken]]),_.value.refreshToken?(o(),n("p",Wd,u(_.value.refreshToken),1)):c("",!0),e("p",Bd,[t[314]||(t[314]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),s.value.platform==="openai"?(o(),n(Ae,{key:0},[x(" 系统将使用 Refresh Token 自动获取 Access Token 和用户信息 ")],64)):(o(),n(Ae,{key:1},[x(" 系统将使用 Refresh Token 自动刷新 Factory.ai 访问令牌,确保账户保持可用。 ")],64))])])):(o(),n("div",Qd,[t[316]||(t[316]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token (可选)",-1)),k(e("textarea",{"onUpdate:modelValue":t[80]||(t[80]=i=>s.value.refreshToken=i),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),[[P,s.value.refreshToken]])])),s.value.platform==="droid"?(o(),n("div",Hd,[t[317]||(t[317]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),k(e("input",{"onUpdate:modelValue":t[81]||(t[81]=i=>s.value.userAgent=i),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:"factory-cli/0.32.1",type:"text"},null,512),[[P,s.value.userAgent]]),t[318]||(t[318]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))])):c("",!0)])):c("",!0),s.value.addType==="apikey"&&s.value.platform==="droid"?(o(),n("div",Jd,[t[323]||(t[323]=e("div",{class:"mb-4 flex items-start gap-3"},[e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-purple-500"},[e("i",{class:"fas fa-key text-sm text-white"})]),e("div",null,[e("h5",{class:"mb-2 font-semibold text-purple-900 dark:text-purple-200"}," 使用 API Key 调度 Droid "),e("p",{class:"text-sm text-purple-800 dark:text-purple-200"}," 请填写一个或多个 Factory.ai API Key,系统会自动在请求时随机挑选并结合会话哈希维持粘性,确保对话上下文保持稳定。 ")])],-1)),e("div",null,[t[319]||(t[319]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 列表 *",-1)),k(e("textarea",{"onUpdate:modelValue":t[82]||(t[82]=i=>s.value.apiKeysInput=i),class:I(["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":_.value.apiKeys}]),placeholder:"每行一个 API Key,可粘贴多行",required:"",rows:"6"},null,2),[[P,s.value.apiKeysInput]]),_.value.apiKeys?(o(),n("p",Yd,u(_.value.apiKeys),1)):c("",!0),t[320]||(t[320]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 建议为每条 Key 提供独立额度;系统会自动去重并忽略空白行。 ")],-1))]),e("div",null,[t[321]||(t[321]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),k(e("input",{"onUpdate:modelValue":t[83]||(t[83]=i=>s.value.userAgent=i),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:"factory-cli/0.32.1",type:"text"},null,512),[[P,s.value.userAgent]]),t[322]||(t[322]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))]),t[324]||(t[324]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-random mr-1"}),x("分配策略说明")]),e("ul",{class:"mt-1 list-disc space-y-1 pl-4"},[e("li",null,"新会话将随机命中一个 Key,并在会话有效期内保持粘性。"),e("li",null,"若某 Key 失效,会自动切换到剩余可用 Key,最大化成功率。"),e("li",null," 若上游返回 4xx 错误码,该 Key 会被自动标记为异常;全部 Key 异常后账号将暂停调度。 ")])],-1))])):c("",!0),He(Ws,{modelValue:s.value.proxy,"onUpdate:modelValue":t[84]||(t[84]=i=>s.value.proxy=i)},null,8,["modelValue"]),e("div",Zd,[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[85]||(t[85]=i=>d.$emit("close"))}," 取消 "),(s.value.addType==="oauth"||s.value.addType==="setup-token")&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"&&s.value.platform!=="gemini-api"?(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:ee.value,type:"button",onClick:Xe}," 下一步 ",8,Xd)):(o(),n("button",{key:1,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:ee.value,type:"button",onClick:Ot},[ee.value?(o(),n("div",t0)):c("",!0),x(" "+u(ee.value?"创建中...":"创建"),1)],8,e0))])])])):c("",!0),ye.value===2&&s.value.addType==="oauth"?(o(),Ye(kl,{key:2,ref_key:"oauthFlowRef",ref:Z,platform:s.value.platform,proxy:s.value.proxy,onBack:t[86]||(t[86]=i=>ye.value=1),onSuccess:ut},null,8,["platform","proxy"])):c("",!0),ye.value===2&&s.value.addType==="setup-token"?(o(),n("div",s0,[s.value.platform==="claude"?(o(),n("div",r0,[e("div",a0,[e("div",l0,[t[346]||(t[346]=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",o0,[t[345]||(t[345]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"}," Claude Setup Token 授权 ",-1)),e("div",n0,[t[327]||(t[327]=e("p",{class:"mb-3 text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式: ",-1)),e("div",i0,[e("label",d0,[k(e("input",{"onUpdate:modelValue":t[87]||(t[87]=i=>K.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"manual",onChange:Kt},null,544),[[Me,K.value]]),t[325]||(t[325]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-link mr-1"}),x("手动授权 ")],-1))]),e("label",u0,[k(e("input",{"onUpdate:modelValue":t[88]||(t[88]=i=>K.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"cookie",onChange:Kt},null,544),[[Me,K.value]]),t[326]||(t[326]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-cookie mr-1"}),x("Cookie 自动授权 ")],-1))])])]),K.value==="manual"?(o(),n("div",p0,[t[336]||(t[336]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤通过 Setup Token 完成 Claude 账户的授权: ",-1)),e("div",g0,[e("div",y0,[t[330]||(t[330]=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",m0,[t[329]||(t[329]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),m.value?(o(),n("div",b0,[e("div",v0,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:m.value},null,8,k0),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:_t},[e("i",{class:I(te.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:ft},t[328]||(t[328]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:E.value,onClick:Tt},[E.value?(o(),n("div",f0)):(o(),n("i",x0)),x(" "+u(E.value?"生成中...":"生成 Setup Token 授权链接"),1)],8,c0))])])]),t[337]||(t[337]=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,"注意:"),x("如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 ")])])])])],-1)),e("div",h0,[e("div",w0,[t[335]||(t[335]=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",$0,[t[333]||(t[333]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),t[334]||(t[334]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 授权完成后,从返回页面复制 Authorization Code,并粘贴到下方输入框: ",-1)),e("div",A0,[e("div",null,[t[331]||(t[331]=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"}),x("Authorization Code ")],-1)),k(e("textarea",{"onUpdate:modelValue":t[89]||(t[89]=i=>z.value=i),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),[[P,z.value]])]),t[332]||(t[332]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 请粘贴从Claude Code授权页面复制的Authorization Code ")],-1))])])])])])):c("",!0),K.value==="cookie"?(o(),n("div",C0,[t[343]||(t[343]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 使用 sessionKey 自动完成授权,无需手动打开链接。 ",-1)),e("div",U0,[e("div",I0,[e("div",null,[e("label",T0,[t[338]||(t[338]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),t[339]||(t[339]=x("sessionKey ",-1)),J.value>1?(o(),n("span",_0,u(J.value)+" 个 ",1)):c("",!0)]),k(e("textarea",{"onUpdate:modelValue":t[90]||(t[90]=i=>B.value=i),class:I(["form-input w-full resize-y border-gray-300 font-mono text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":pe.value}]),placeholder:`每行一个 sessionKey,例如:
|
||
sk-ant-sid01-xxxxx...
|
||
sk-ant-sid01-yyyyy...`,rows:"3"},null,2),[[P,B.value]]),J.value>1?(o(),n("p",K0,[t[340]||(t[340]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),x(" 将批量创建 "+u(J.value)+" 个账户 ",1)])):c("",!0),pe.value?(o(),n("p",M0,u(pe.value),1)):c("",!0)]),e("div",null,[e("button",{class:"flex items-center text-xs text-blue-600 hover:text-blue-700",type:"button",onClick:t[91]||(t[91]=i=>he.value=!he.value)},[e("i",{class:I(he.value?"fas fa-chevron-down mr-1":"fas fa-chevron-right mr-1")},null,2),t[341]||(t[341]=x(" 如何获取 sessionKey? ",-1))]),he.value?(o(),n("div",S0,t[342]||(t[342]=[e("ol",{class:"space-y-2 text-xs text-gray-600 dark:text-gray-300"},[e("li",null,[x("1. 在浏览器中登录 "),e("strong",null,"claude.ai")]),e("li",null,[x("2. 按 "),e("strong",null,"F12"),x(" 打开开发者工具")]),e("li",null,[x("3. 切换到 "),e("strong",null,'"Application"'),x(" (应用) 标签页")]),e("li",null,[x(" 4. 在左侧选择 "),e("strong",null,'"Cookies"'),x(" → "),e("strong",null,'"https://claude.ai"')]),e("li",null,[x("5. 找到键为 "),e("strong",null,'"sessionKey"'),x(" 的那一行")]),e("li",null,[x("6. 复制其 "),e("strong",null,'"Value"'),x(" (值) 列的内容")])],-1),e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(' sessionKey 通常以 "sk-ant-" 开头 ')],-1)]))):c("",!0)]),e("button",{class:"btn btn-primary w-full px-4 py-3",disabled:we.value||!B.value.trim(),type:"button",onClick:wt},[we.value?(o(),n("div",L0)):(o(),n("i",P0)),we.value&&Se.value.total>1?(o(),n(Ae,{key:2},[x(" 正在授权 "+u(Se.value.current)+"/"+u(Se.value.total)+"... ",1)],64)):we.value?(o(),n(Ae,{key:3},[x(" 授权中... ")],64)):(o(),n(Ae,{key:4},[x(" 开始自动授权 ")],64))],8,D0)])]),t[344]||(t[344]=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,"提示:"),x("如果您设置了代理,Cookie授权也会使用相同的代理配置。 ")])],-1))])):c("",!0)])])])])):c("",!0),e("div",z0,[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[92]||(t[92]=i=>ye.value=1)}," 上一步 "),K.value==="manual"?(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!ht.value||w.value,type:"button",onClick:Rt},[w.value?(o(),n("div",R0)):c("",!0),x(" "+u(w.value?"验证中...":"完成授权"),1)],8,j0)):c("",!0)])])):c("",!0),G.value?(o(),n("div",V0,[e("div",null,[t[347]||(t[347]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),k(e("input",{"onUpdate:modelValue":t[93]||(t[93]=i=>s.value.name=i),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),[[P,s.value.name]])]),e("div",null,[t[348]||(t[348]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),k(e("textarea",{"onUpdate:modelValue":t[94]||(t[94]=i=>s.value.description=i),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),[[P,s.value.description]])]),e("div",null,[t[352]||(t[352]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",O0,[e("label",E0,[k(e("input",{"onUpdate:modelValue":t[95]||(t[95]=i=>s.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[Me,s.value.accountType]]),t[349]||(t[349]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",N0,[k(e("input",{"onUpdate:modelValue":t[96]||(t[96]=i=>s.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[Me,s.value.accountType]]),t[350]||(t[350]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",F0,[k(e("input",{"onUpdate:modelValue":t[97]||(t[97]=i=>s.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[Me,s.value.accountType]]),t[351]||(t[351]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[353]||(t[353]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),G.value?c("",!0):(o(),n("div",q0,[t[357]||(t[357]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",G0,[k(e("select",{"onUpdate:modelValue":t[98]||(t[98]=i=>s.value.expireDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:Bt},t[354]||(t[354]=[e("option",{value:""},"永不过期",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[Vs,s.value.expireDuration]]),s.value.expireDuration==="custom"?(o(),n("div",W0,[k(e("input",{"onUpdate:modelValue":t[99]||(t[99]=i=>s.value.customExpireDate=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Dt.value,type:"datetime-local",onChange:xs},null,40,B0),[[P,s.value.customExpireDate]])])):c("",!0),s.value.expiresAt?(o(),n("p",Q0,[t[355]||(t[355]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),x(" 将于 "+u(Qt(s.value.expiresAt))+" 过期 ",1)])):(o(),n("p",H0,t[356]||(t[356]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),x(" 账户永不过期 ",-1)])))]),t[358]||(t[358]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])),s.value.accountType==="group"?(o(),n("div",J0,[t[360]||(t[360]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",Y0,[e("div",Z0,[e("div",X0,[pt.value.length===0?(o(),n("div",eu," 暂无可用分组 ")):c("",!0),(o(!0),n(Ae,null,Be(pt.value,i=>(o(),n("label",{key:i.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[k(e("input",{"onUpdate:modelValue":t[100]||(t[100]=ae=>s.value.groupIds=ae),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i.id},null,8,tu),[[Ve,s.value.groupIds]]),e("span",su,u(i.name)+" ("+u(i.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:gs},t[359]||(t[359]=[e("i",{class:"fas fa-plus"},null,-1),x(" 新建分组 ",-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:Gt},[e("i",{class:I(["fas fa-sync-alt",{"animate-spin":Mt.value}])},null,2)])])])):c("",!0),s.value.platform==="gemini"?(o(),n("div",ru,[t[361]||(t[361]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),k(e("input",{"onUpdate:modelValue":t[101]||(t[101]=i=>s.value.projectId=i),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),[[P,s.value.projectId]]),t[362]||(t[362]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," Google Cloud/Workspace 账号可能需要提供项目 ID ",-1))])):c("",!0),s.value.platform==="claude"?(o(),n("div",au,[t[365]||(t[365]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",lu,[e("label",ou,[k(e("input",{"onUpdate:modelValue":t[102]||(t[102]=i=>s.value.subscriptionType=i),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),[[Me,s.value.subscriptionType]]),t[363]||(t[363]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",nu,[k(e("input",{"onUpdate:modelValue":t[103]||(t[103]=i=>s.value.subscriptionType=i),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),[[Me,s.value.subscriptionType]]),t[364]||(t[364]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[366]||(t[366]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):c("",!0),s.value.platform==="claude"?(o(),n("div",iu,[e("label",du,[k(e("input",{"onUpdate:modelValue":t[104]||(t[104]=i=>s.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Ve,s.value.autoStopOnWarning]]),t[367]||(t[367]=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))])])):c("",!0),s.value.platform==="claude"?(o(),n("div",uu,[e("label",pu,[k(e("input",{"onUpdate:modelValue":t[105]||(t[105]=i=>s.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Ve,s.value.useUnifiedUserAgent]]),e("div",gu,[t[369]||(t[369]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[370]||(t[370]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),T.value?(o(),n("div",yu,[e("div",mu,[e("p",cu," 💡 当前统一版本:"+u(T.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:Ce.value,type:"button",onClick:ms},[Ce.value?(o(),n("div",bu)):(o(),n("i",fu)),x(" "+u(Ce.value?"清除中...":"清除缓存"),1)],8,xu)])])):(o(),n("div",vu,t[368]||(t[368]=[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)])))])])])):c("",!0),s.value.platform==="claude"?(o(),n("div",ku,[e("label",hu,[k(e("input",{"onUpdate:modelValue":t[106]||(t[106]=i=>s.value.useUnifiedClientId=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:cs},null,544),[[Ve,s.value.useUnifiedClientId]]),e("div",wu,[t[374]||(t[374]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[375]||(t[375]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),s.value.useUnifiedClientId?(o(),n("div",$u,[e("div",Au,[e("div",{class:"mb-2 flex items-center justify-between"},[t[372]||(t[372]=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:At},t[371]||(t[371]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x(" 重新生成 ",-1)]))]),e("div",Cu,[e("code",Uu,[e("span",Iu,u(s.value.unifiedClientId.substring(0,8)),1),e("span",Tu,u(s.value.unifiedClientId.substring(8,56)),1),e("span",_u,u(s.value.unifiedClientId.substring(56)),1)])]),t[373]||(t[373]=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"}),x(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):c("",!0)])])])):c("",!0),e("div",null,[t[376]||(t[376]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),k(e("input",{"onUpdate:modelValue":t[107]||(t[107]=i=>s.value.priority=i),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),[[P,s.value.priority,void 0,{number:!0}]]),t[377]||(t[377]=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"?(o(),n("div",Ku,[e("div",null,[t[378]||(t[378]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API URL",-1)),k(e("input",{"onUpdate:modelValue":t[108]||(t[108]=i=>s.value.apiUrl=i),class:"form-input w-full",placeholder:"例如:https://api.example.com",required:"",type:"text"},null,512),[[P,s.value.apiUrl]])]),e("div",null,[t[379]||(t[379]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API Key",-1)),k(e("input",{"onUpdate:modelValue":t[109]||(t[109]=i=>s.value.apiKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[P,s.value.apiKey]]),t[380]||(t[380]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",Mu,[e("div",null,[t[381]||(t[381]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),k(e("input",{"onUpdate:modelValue":t[110]||(t[110]=i=>s.value.dailyQuota=i),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,s.value.dailyQuota,void 0,{number:!0}]]),t[382]||(t[382]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[383]||(t[383]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),k(e("input",{"onUpdate:modelValue":t[111]||(t[111]=i=>s.value.quotaResetTime=i),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,s.value.quotaResetTime]]),t[384]||(t[384]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),G.value&&s.value.dailyQuota>0?(o(),n("div",Su,[e("div",Du,[t[385]||(t[385]=e("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"}," 今日使用情况 ",-1)),e("span",Lu," $"+u(xt().toFixed(4))+" / $"+u(s.value.dailyQuota.toFixed(2)),1)]),e("div",Pu,[e("div",{class:I(["absolute left-0 top-0 h-full rounded-full transition-all",Ze.value>=90?"bg-red-500":Ze.value>=70?"bg-yellow-500":"bg-green-500"]),style:Qe({width:`${Math.min(Ze.value,100)}%`})},null,6)]),e("div",zu,[e("span",ju," 剩余: $"+u(Math.max(0,s.value.dailyQuota-xt()).toFixed(2)),1),e("span",Ru,u(Ze.value.toFixed(1))+"% 已使用 ",1)])])):c("",!0),e("div",null,[t[386]||(t[386]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),k(e("input",{"onUpdate:modelValue":t[112]||(t[112]=i=>s.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[P,s.value.maxConcurrentTasks,void 0,{number:!0}]]),t[387]||(t[387]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))]),e("div",null,[t[395]||(t[395]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",Vu,[e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",me.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[113]||(t[113]=i=>me.value="whitelist")},t[388]||(t[388]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),x(" 模型白名单 ",-1)]),2),e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",me.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[114]||(t[114]=i=>me.value="mapping")},t[389]||(t[389]=[e("i",{class:"fas fa-random mr-2"},null,-1),x(" 模型映射 ",-1)]),2)]),me.value==="whitelist"?(o(),n("div",Ou,[t[390]||(t[390]=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"}),x(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",Eu,[(o(),n(Ae,null,Be(Ge,i=>e("label",{key:i.value,class:I(["flex cursor-pointer items-center rounded-lg border p-3 transition-all hover:bg-gray-50 dark:border-gray-600 dark:hover:bg-gray-700",Te.value.includes(i.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[k(e("input",{"onUpdate:modelValue":t[115]||(t[115]=ae=>Te.value=ae),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,Nu),[[Ve,Te.value]]),e("span",Fu,u(i.label),1)],2)),64))]),e("p",qu,[x(" 已选择 "+u(Te.value.length)+" 个模型 ",1),Te.value.length===0?(o(),n("span",Gu,"(支持所有模型)")):c("",!0)])])):(o(),n("div",Wu,[t[394]||(t[394]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",Bu,[(o(!0),n(Ae,null,Be(Oe.value,(i,ae)=>(o(),n("div",{key:ae,class:"flex items-center gap-2"},[k(e("input",{"onUpdate:modelValue":le=>i.from=le,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"原始模型名称",type:"text"},null,8,Qu),[[P,i.from]]),t[392]||(t[392]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),k(e("input",{"onUpdate:modelValue":le=>i.to=le,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"映射后的模型名称",type:"text"},null,8,Hu),[[P,i.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:le=>ys(ae)},t[391]||(t[391]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Ju)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500",type:"button",onClick:Je},t[393]||(t[393]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 添加模型映射 ",-1)])),e("div",Yu,[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[116]||(t[116]=i=>qe("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),e("button",{class:"rounded-lg bg-indigo-100 px-3 py-1 text-xs text-indigo-700 transition-colors hover:bg-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-400 dark:hover:bg-indigo-900/50",type:"button",onClick:t[117]||(t[117]=i=>qe("claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929"))}," + Sonnet 4.5 "),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[118]||(t[118]=i=>qe("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[119]||(t[119]=i=>qe("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),e("button",{class:"rounded-lg bg-emerald-100 px-3 py-1 text-xs text-emerald-700 transition-colors hover:bg-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-900/50",type:"button",onClick:t[120]||(t[120]=i=>qe("claude-haiku-4-5-20251001","claude-haiku-4-5-20251001"))}," + Haiku 4.5 "),e("button",{class:"rounded-lg bg-cyan-100 px-3 py-1 text-xs text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:hover:bg-cyan-900/50",type:"button",onClick:t[121]||(t[121]=i=>qe("deepseek-chat","deepseek-chat"))}," + DeepSeek "),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[122]||(t[122]=i=>qe("Qwen","Qwen"))}," + Qwen "),e("button",{class:"rounded-lg bg-pink-100 px-3 py-1 text-xs text-pink-700 transition-colors hover:bg-pink-200 dark:bg-pink-900/30 dark:text-pink-400 dark:hover:bg-pink-900/50",type:"button",onClick:t[123]||(t[123]=i=>qe("Kimi","Kimi"))}," + Kimi "),e("button",{class:"rounded-lg bg-teal-100 px-3 py-1 text-xs text-teal-700 transition-colors hover:bg-teal-200 dark:bg-teal-900/30 dark:text-teal-400 dark:hover:bg-teal-900/50",type:"button",onClick:t[124]||(t[124]=i=>qe("GLM","GLM"))}," + GLM "),e("button",{class:"rounded-lg bg-amber-100 px-3 py-1 text-xs text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50",type:"button",onClick:t[125]||(t[125]=i=>qe("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[396]||(t[396]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent (可选)",-1)),k(e("input",{"onUpdate:modelValue":t[126]||(t[126]=i=>s.value.userAgent=i),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[P,s.value.userAgent]]),t[397]||(t[397]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[402]||(t[402]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",Zu,[e("label",Xu,[k(e("input",{"onUpdate:modelValue":t[127]||(t[127]=i=>s.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[Ve,s.value.enableRateLimit]]),t[398]||(t[398]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[399]||(t[399]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(o(),n("div",ep,[t[400]||(t[400]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),k(e("input",{"onUpdate:modelValue":t[128]||(t[128]=i=>s.value.rateLimitDuration=i),class:"form-input w-full",min:"1",type:"number"},null,512),[[P,s.value.rateLimitDuration,void 0,{number:!0}]]),t[401]||(t[401]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):c("",!0)]),s.value.platform==="claude-console"?(o(),n("div",tp,[t[404]||(t[404]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 上游错误处理 ",-1)),e("label",sp,[k(e("input",{"onUpdate:modelValue":t[129]||(t[129]=i=>s.value.disableAutoProtection=i),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),[[Ve,s.value.disableAutoProtection]]),t[403]||(t[403]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"}," 上游错误不自动暂停调度 ",-1))]),t[405]||(t[405]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 勾选后遇到 401/400/429/529 等上游错误仅记录日志并透传,不自动禁用或限流 ",-1))])):c("",!0)])):c("",!0),s.value.platform==="openai-responses"?(o(),n("div",rp,[e("div",null,[t[406]||(t[406]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 基础地址",-1)),k(e("input",{"onUpdate:modelValue":t[130]||(t[130]=i=>s.value.baseApi=i),class:"form-input w-full",placeholder:"https://api.example.com/v1",type:"url"},null,512),[[P,s.value.baseApi]])]),e("div",null,[t[407]||(t[407]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 密钥",-1)),e("div",ap,[k(e("input",{"onUpdate:modelValue":t[131]||(t[131]=i=>s.value.apiKey=i),class:"form-input w-full pr-10",placeholder:"留空表示不更新",type:X.value?"text":"password"},null,8,lp),[[ds,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[132]||(t[132]=i=>X.value=!X.value)},[e("i",{class:I(X.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[408]||(t[408]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",null,[t[409]||(t[409]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent",-1)),k(e("input",{"onUpdate:modelValue":t[133]||(t[133]=i=>s.value.userAgent=i),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[P,s.value.userAgent]]),t[410]||(t[410]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),k(e("input",{"onUpdate:modelValue":t[134]||(t[134]=i=>s.value.rateLimitDuration=i),type:"hidden"},null,512),[[P,s.value.rateLimitDuration,void 0,{number:!0}]]),e("div",op,[e("div",null,[t[411]||(t[411]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),k(e("input",{"onUpdate:modelValue":t[135]||(t[135]=i=>s.value.dailyQuota=i),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,s.value.dailyQuota,void 0,{number:!0}]])]),e("div",null,[t[412]||(t[412]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),k(e("input",{"onUpdate:modelValue":t[136]||(t[136]=i=>s.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",type:"time"},null,512),[[P,s.value.quotaResetTime]])])]),e("div",null,[t[413]||(t[413]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),k(e("input",{"onUpdate:modelValue":t[137]||(t[137]=i=>s.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[P,s.value.maxConcurrentTasks,void 0,{number:!0}]]),t[414]||(t[414]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))])])):c("",!0),s.value.platform==="gemini-api"?(o(),n("div",np,[e("div",null,[t[415]||(t[415]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址",-1)),k(e("input",{"onUpdate:modelValue":t[138]||(t[138]=i=>s.value.baseUrl=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500 dark:border-red-400":_.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",type:"url"},null,2),[[P,s.value.baseUrl]]),_.value.baseUrl?(o(),n("p",ip,u(_.value.baseUrl),1)):c("",!0),t[416]||(t[416]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[x(" 填写 API 基础地址,必须以 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/models"),x(" 结尾。系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/{model}:generateContent")],-1)),t[417]||(t[417]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[x(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com/v1beta/models")],-1)),t[418]||(t[418]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[x(" 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini/v1beta/models")],-1))]),e("div",null,[t[419]||(t[419]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥",-1)),e("div",dp,[k(e("input",{"onUpdate:modelValue":t[139]||(t[139]=i=>s.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"留空表示不更新",type:X.value?"text":"password"},null,8,up),[[ds,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[140]||(t[140]=i=>X.value=!X.value)},[e("i",{class:I(X.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[420]||(t[420]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))])])):c("",!0),s.value.platform==="bedrock"?(o(),n("div",pp,[e("div",null,[t[421]||(t[421]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 访问密钥 ID",-1)),k(e("input",{"onUpdate:modelValue":t[141]||(t[141]=i=>s.value.accessKeyId=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"text"},null,512),[[P,s.value.accessKeyId]]),t[422]||(t[422]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Access Key ID",-1))]),e("div",null,[t[423]||(t[423]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 秘密访问密钥",-1)),k(e("input",{"onUpdate:modelValue":t[142]||(t[142]=i=>s.value.secretAccessKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[P,s.value.secretAccessKey]]),t[424]||(t[424]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Secret Access Key",-1))]),e("div",null,[t[425]||(t[425]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 区域",-1)),k(e("input",{"onUpdate:modelValue":t[143]||(t[143]=i=>s.value.region=i),class:"form-input w-full",placeholder:"例如:us-east-1",type:"text"},null,512),[[P,s.value.region]]),t[426]||(t[426]=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[427]||(t[427]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"会话令牌 (可选)",-1)),k(e("input",{"onUpdate:modelValue":t[144]||(t[144]=i=>s.value.sessionToken=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[P,s.value.sessionToken]])]),e("div",null,[t[428]||(t[428]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"默认主模型 (可选)",-1)),k(e("input",{"onUpdate:modelValue":t[145]||(t[145]=i=>s.value.defaultModel=i),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[P,s.value.defaultModel]]),t[429]||(t[429]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1))]),e("div",null,[t[430]||(t[430]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),k(e("input",{"onUpdate:modelValue":t[146]||(t[146]=i=>s.value.smallFastModel=i),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[P,s.value.smallFastModel]]),t[431]||(t[431]=e("p",{class:"mt-1 text-xs text-gray-500"},"用于快速响应的轻量级模型,留空将使用系统默认",-1))]),e("div",null,[t[436]||(t[436]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",gp,[e("label",yp,[k(e("input",{"onUpdate:modelValue":t[147]||(t[147]=i=>s.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[Ve,s.value.enableRateLimit]]),t[432]||(t[432]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[433]||(t[433]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(o(),n("div",mp,[t[434]||(t[434]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),k(e("input",{"onUpdate:modelValue":t[148]||(t[148]=i=>s.value.rateLimitDuration=i),class:"form-input w-full",min:"1",type:"number"},null,512),[[P,s.value.rateLimitDuration,void 0,{number:!0}]]),t[435]||(t[435]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):c("",!0)])])):c("",!0),s.value.platform==="azure_openai"?(o(),n("div",cp,[e("div",null,[t[437]||(t[437]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint",-1)),k(e("input",{"onUpdate:modelValue":t[149]||(t[149]=i=>s.value.azureEndpoint=i),class:I(["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":_.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",type:"url"},null,2),[[P,s.value.azureEndpoint]]),_.value.azureEndpoint?(o(),n("p",xp,u(_.value.azureEndpoint),1)):c("",!0)]),e("div",null,[t[438]||(t[438]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),k(e("input",{"onUpdate:modelValue":t[150]||(t[150]=i=>s.value.apiVersion=i),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),[[P,s.value.apiVersion]]),t[439]||(t[439]=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[440]||(t[440]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称",-1)),k(e("input",{"onUpdate:modelValue":t[151]||(t[151]=i=>s.value.deploymentName=i),class:I(["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":_.value.deploymentName}]),placeholder:"gpt-4",type:"text"},null,2),[[P,s.value.deploymentName]]),_.value.deploymentName?(o(),n("p",fp,u(_.value.deploymentName),1)):c("",!0)]),e("div",null,[t[441]||(t[441]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),k(e("input",{"onUpdate:modelValue":t[152]||(t[152]=i=>s.value.apiKey=i),class:I(["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":_.value.apiKey}]),placeholder:"留空表示不更新",type:"password"},null,2),[[P,s.value.apiKey]]),_.value.apiKey?(o(),n("p",bp,u(_.value.apiKey),1)):c("",!0),t[442]||(t[442]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))]),e("div",null,[t[443]||(t[443]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",vp,[(o(),n(Ae,null,Be(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],i=>e("label",{key:i,class:"flex cursor-pointer items-center"},[k(e("input",{"onUpdate:modelValue":t[153]||(t[153]=ae=>s.value.supportedModels=ae),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,kp),[[Ve,s.value.supportedModels]]),e("span",hp,u(i),1)])),64))]),t[444]||(t[444]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"选择此部署支持的模型类型",-1))])])):c("",!0),G.value&&b.value?(o(),n("div",wp,[e("div",$p,[t[450]||(t[450]=e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-purple-500"},[e("i",{class:"fas fa-retweet text-sm text-white"})],-1)),e("div",Ap,[e("div",Cp,[t[446]||(t[446]=e("h5",{class:"font-semibold text-purple-900 dark:text-purple-200"},"更新 API Key",-1)),e("button",{class:"flex items-center gap-1.5 rounded-lg bg-purple-600 px-3 py-1.5 text-xs font-medium text-white transition-colors hover:bg-purple-700 dark:bg-purple-500 dark:hover:bg-purple-600",type:"button",onClick:t[154]||(t[154]=i=>Ne.value=!0)},t[445]||(t[445]=[e("i",{class:"fas fa-list-ul"},null,-1),e("span",null,"管理 API Key",-1)]))]),e("p",Up,[t[447]||(t[447]=x(" 当前已保存 ",-1)),e("strong",null,u(it.value),1),t[448]||(t[448]=x(" 条 API Key。您可以追加新的 Key,或通过下方模式快速覆盖、删除指定 Key。 ",-1))]),t[449]||(t[449]=e("p",{class:"text-xs text-purple-700 dark:text-purple-300"}," 留空表示保留现有 Key 不变;根据所选模式决定是追加、覆盖还是删除输入的 Key。 ",-1))])]),e("div",Ip,[e("div",null,[t[451]||(t[451]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 API Key 列表",-1)),k(e("textarea",{"onUpdate:modelValue":t[155]||(t[155]=i=>s.value.apiKeysInput=i),class:I(["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":_.value.apiKeys}]),placeholder:"根据模式填写;每行一个 API Key",rows:"6"},null,2),[[P,s.value.apiKeysInput]]),_.value.apiKeys?(o(),n("p",Tp,u(_.value.apiKeys),1)):c("",!0)]),e("div",_p,[e("div",Kp,[t[452]||(t[452]=e("span",{class:"text-sm font-semibold text-purple-800 dark:text-purple-100"},"API Key 更新模式",-1)),e("span",Mp,u(kt.value),1)]),e("div",Sp,[e("span",{class:"pointer-events-none absolute inset-y-0 rounded-2xl bg-gradient-to-r from-purple-500/90 via-purple-600 to-indigo-500/90 shadow-lg ring-1 ring-purple-100/80 transition-all duration-300 ease-out dark:from-purple-500/70 dark:via-purple-600/70 dark:to-indigo-500/70 dark:ring-purple-400/30",style:Qe(mt.value)},null,4),(o(),n(Ae,null,Be(at,i=>e("button",{key:i.value,class:I(["relative z-10 flex items-center justify-center rounded-2xl px-2 text-xs font-semibold transition-all duration-200 ease-out focus:outline-none focus-visible:ring-2 focus-visible:ring-purple-500/60 dark:focus-visible:ring-purple-400/60",s.value.apiKeyUpdateMode===i.value?"text-white drop-shadow-sm":"text-purple-500/80 hover:text-purple-700 dark:text-purple-200/70 dark:hover:text-purple-100"]),type:"button",onClick:ae=>s.value.apiKeyUpdateMode=i.value},u(i.label),11,Dp)),64))]),e("p",Lp,u(ct.value),1)]),t[453]||(t[453]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-lightbulb mr-1"}),x("小提示")]),e("ul",{class:"mt-1 list-disc space-y-1 pl-4"},[e("li",null,"系统会为新的 Key 自动建立粘性映射,保持同一会话命中同一个 Key。"),e("li",null,"追加模式会保留现有 Key 并在末尾追加新的 Key。"),e("li",null,"覆盖模式会先清空旧 Key 再写入上方的新列表。"),e("li",null,"删除模式会根据输入精准移除指定 Key,适合快速处理失效或被封禁的 Key。")])],-1))])])):c("",!0),!(G.value&&b.value)&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"?(o(),n("div",Pp,[t[456]||(t[456]=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",zp,[e("div",null,[t[454]||(t[454]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Access Token",-1)),k(e("textarea",{"onUpdate:modelValue":t[156]||(t[156]=i=>s.value.accessToken=i),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),[[P,s.value.accessToken]])]),e("div",null,[t[455]||(t[455]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Refresh Token",-1)),k(e("textarea",{"onUpdate:modelValue":t[157]||(t[157]=i=>s.value.refreshToken=i),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),[[P,s.value.refreshToken]])])])])):c("",!0),s.value.platform==="droid"?(o(),n("div",jp,[t[457]||(t[457]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),k(e("input",{"onUpdate:modelValue":t[158]||(t[158]=i=>s.value.userAgent=i),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:"factory-cli/0.32.1",type:"text"},null,512),[[P,s.value.userAgent]]),t[458]||(t[458]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))])):c("",!0),He(Ws,{modelValue:s.value.proxy,"onUpdate:modelValue":t[159]||(t[159]=i=>s.value.proxy=i)},null,8,["modelValue"]),e("div",Rp,[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[160]||(t[160]=i=>d.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:ee.value,type:"button",onClick:ot},[ee.value?(o(),n("div",Op)):c("",!0),x(" "+u(ee.value?"更新中...":"更新"),1)],8,Vp)])])):c("",!0)])])):c("",!0),He(ar,{"cancel-text":rt(V).cancelText,"confirm-text":rt(V).confirmText,message:rt(V).message,show:rt(Q),title:rt(V).title,onCancel:rt(h),onConfirm:rt(f)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),et.value?(o(),Ye(so,{key:1,onClose:t[161]||(t[161]=i=>et.value=!1),onRefresh:Es})):c("",!0),Ne.value?(o(),Ye(en,{key:2,"account-id":(re=y.account)==null?void 0:re.id,"account-name":(ge=y.account)==null?void 0:ge.name,onClose:t[162]||(t[162]=i=>Ne.value=!1),onRefresh:$t},null,8,["account-id","account-name"])):c("",!0)])}}},tr=ps(Ep,[["__scopeId","data-v-fc4bc6d1"]]),Np={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Fp={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto rounded-2xl bg-white/90 p-4 shadow-xl backdrop-blur-xl dark:bg-gray-800/95 dark:shadow-2xl sm:p-6 md:p-8"},qp={class:"mb-4 flex items-center justify-between sm:mb-6"},Gp={class:"flex items-center gap-2 sm:gap-3"},Wp={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Bp={class:"space-y-6"},Qp={key:0,class:"mt-1 text-xs text-red-500"},Hp={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Jp={key:0,class:"mt-1 text-xs text-red-500"},Yp={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},Zp=["placeholder","required"],Xp={key:0,class:"mt-1 text-xs text-red-500"},eg={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},tg={class:"mb-3"},sg={class:"inline-flex cursor-pointer items-center"},rg={key:0},ag={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},lg={class:"mb-3 space-y-2"},og=["onUpdate:modelValue"],ng=["onUpdate:modelValue"],ig=["onClick"],dg={class:"mt-2 flex gap-3"},ug=["disabled"],pg={key:0,class:"loading-spinner mr-2"},gg={__name:"CcrAccountForm",props:{account:{type:Object,default:null}},emits:["close","success"],setup(Y,{emit:Re}){const y=Y,W=Re,U=$(!0),Q=de(()=>!!y.account),V=$(!1),M=$({name:"",description:"",apiUrl:"",apiKey:"",priority:50,userAgent:"",rateLimitDuration:60,dailyQuota:0,quotaResetTime:"00:00",proxy:null,supportedModels:{}}),f=$(!0),h=$({}),G=$([]),ue=()=>{const w={};for(const m of G.value){const z=(m.from||"").trim(),te=(m.to||"").trim();z&&te&&(w[z]=te)}return w},Z=()=>{G.value.push({from:"",to:""})},ye=w=>{G.value.splice(w,1)},ee=()=>{const w={};return(!M.value.name||M.value.name.trim().length===0)&&(w.name="名称不能为空"),(!M.value.apiUrl||M.value.apiUrl.trim().length===0)&&(w.apiUrl="API URL 不能为空"),!Q.value&&(!M.value.apiKey||M.value.apiKey.trim().length===0)&&(w.apiKey="API Key 不能为空"),h.value=w,Object.keys(w).length===0},X=async()=>{if(ee()){V.value=!0;try{if(Q.value){const w={name:M.value.name,description:M.value.description,apiUrl:M.value.apiUrl,priority:M.value.priority,userAgent:M.value.userAgent,rateLimitDuration:f.value?Number(M.value.rateLimitDuration||60):0,dailyQuota:Number(M.value.dailyQuota||0),quotaResetTime:M.value.quotaResetTime||"00:00",proxy:M.value.proxy||null,supportedModels:ue()};M.value.apiKey&&M.value.apiKey.trim().length>0&&(w.apiKey=M.value.apiKey);const m=await F.put(`/admin/ccr-accounts/${y.account.id}`,w);m.success?W("success"):R(m.message||"保存失败","error")}else{const w={name:M.value.name,description:M.value.description,apiUrl:M.value.apiUrl,apiKey:M.value.apiKey,priority:Number(M.value.priority||50),supportedModels:ue(),userAgent:M.value.userAgent,rateLimitDuration:f.value?Number(M.value.rateLimitDuration||60):0,proxy:M.value.proxy,accountType:"shared",dailyQuota:Number(M.value.dailyQuota||0),quotaResetTime:M.value.quotaResetTime||"00:00"},m=await F.post("/admin/ccr-accounts",w);m.success?W("success"):R(m.message||"创建失败","error")}}catch(w){R(w.message||"请求失败","error")}finally{V.value=!1}}},E=()=>{if(!y.account)return;const w=y.account;M.value.name=w.name||"",M.value.description=w.description||"",M.value.apiUrl=w.apiUrl||"",M.value.priority=Number(w.priority||50),M.value.userAgent=w.userAgent||"",M.value.rateLimitDuration=Number(w.rateLimitDuration||60),M.value.dailyQuota=Number(w.dailyQuota||0),M.value.quotaResetTime=w.quotaResetTime||"00:00",M.value.proxy=w.proxy||null,f.value=M.value.rateLimitDuration>0,G.value=[];const m=w.supportedModels||{};if(m&&typeof m=="object")for(const z of Object.keys(m))G.value.push({from:z,to:m[z]})};return us(()=>{Q.value&&E()}),ke(()=>y.account,()=>{Q.value&&E()}),(w,m)=>(o(),Ye(jt,{to:"body"},[U.value?(o(),n("div",Np,[e("div",Fp,[e("div",qp,[e("div",Gp,[m[13]||(m[13]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-teal-500 to-emerald-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-code-branch text-sm text-white sm:text-base"})],-1)),e("h3",Wp,u(Q.value?"编辑 CCR 账户":"添加 CCR 账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:m[0]||(m[0]=z=>w.$emit("close"))},m[14]||(m[14]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",Bp,[e("div",null,[m[15]||(m[15]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称 *",-1)),k(e("input",{"onUpdate:modelValue":m[1]||(m[1]=z=>M.value.name=z),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":h.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[P,M.value.name]]),h.value.name?(o(),n("p",Qp,u(h.value.name),1)):c("",!0)]),e("div",null,[m[16]||(m[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),k(e("textarea",{"onUpdate:modelValue":m[2]||(m[2]=z=>M.value.description=z),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,M.value.description]])]),e("div",Hp,[e("div",null,[m[17]||(m[17]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),k(e("input",{"onUpdate:modelValue":m[3]||(m[3]=z=>M.value.apiUrl=z),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":h.value.apiUrl}]),placeholder:"例如:https://api.example.com/v1/messages",required:"",type:"text"},null,2),[[P,M.value.apiUrl]]),h.value.apiUrl?(o(),n("p",Jp,u(h.value.apiUrl),1)):c("",!0)]),e("div",null,[e("label",Yp,"API Key "+u(Q.value?"(留空不更新)":"*"),1),k(e("input",{"onUpdate:modelValue":m[4]||(m[4]=z=>M.value.apiKey=z),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":h.value.apiKey}]),placeholder:Q.value?"留空表示不更新":"必填",required:!Q.value,type:"password"},null,10,Zp),[[P,M.value.apiKey]]),h.value.apiKey?(o(),n("p",Xp,u(h.value.apiKey),1)):c("",!0)])]),e("div",eg,[e("div",null,[m[18]||(m[18]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"优先级",-1)),k(e("input",{"onUpdate:modelValue":m[5]||(m[5]=z=>M.value.priority=z),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,M.value.priority,void 0,{number:!0}]]),m[19]||(m[19]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议范围:1-100,数字越小优先级越高 ",-1))]),e("div",null,[m[20]||(m[20]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),k(e("input",{"onUpdate:modelValue":m[6]||(m[6]=z=>M.value.userAgent=z),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,M.value.userAgent]])])]),e("div",null,[m[24]||(m[24]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",tg,[e("label",sg,[k(e("input",{"onUpdate:modelValue":m[7]||(m[7]=z=>f.value=z),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),[[Ve,f.value]]),m[21]||(m[21]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制(429 时暂停调度)",-1))])]),f.value?(o(),n("div",rg,[m[22]||(m[22]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),k(e("input",{"onUpdate:modelValue":m[8]||(m[8]=z=>M.value.rateLimitDuration=z),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,M.value.rateLimitDuration,void 0,{number:!0}]]),m[23]||(m[23]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):c("",!0)]),e("div",ag,[e("div",null,[m[25]||(m[25]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日额度限制 ($)",-1)),k(e("input",{"onUpdate:modelValue":m[9]||(m[9]=z=>M.value.dailyQuota=z),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,M.value.dailyQuota,void 0,{number:!0}]]),m[26]||(m[26]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[m[27]||(m[27]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"额度重置时间",-1)),k(e("input",{"onUpdate:modelValue":m[10]||(m[10]=z=>M.value.quotaResetTime=z),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,M.value.quotaResetTime]]),m[28]||(m[28]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),e("div",null,[m[32]||(m[32]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型映射表 (可选)",-1)),m[33]||(m[33]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",lg,[(o(!0),n(Ae,null,Be(G.value,(z,te)=>(o(),n("div",{key:te,class:"flex items-center gap-2"},[k(e("input",{"onUpdate:modelValue":N=>z.from=N,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,og),[[P,z.from]]),m[30]||(m[30]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),k(e("input",{"onUpdate:modelValue":N=>z.to=N,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,ng),[[P,z.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:N=>ye(te)},m[29]||(m[29]=[e("i",{class:"fas fa-trash"},null,-1)]),8,ig)]))),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:Z},m[31]||(m[31]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 添加模型映射 ",-1)]))]),e("div",null,[He(Ws,{modelValue:M.value.proxy,"onUpdate:modelValue":m[11]||(m[11]=z=>M.value.proxy=z)},null,8,["modelValue"])]),e("div",dg,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:m[12]||(m[12]=z=>w.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:V.value,type:"button",onClick:X},[V.value?(o(),n("div",pg)):c("",!0),x(" "+u(V.value?Q.value?"保存中...":"创建中...":Q.value?"保存":"创建"),1)],8,ug)])])])])):c("",!0)]))}},sr=ps(gg,[["__scopeId","data-v-2a966370"]]),yg={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},mg={class:"relative z-10 mx-3 flex max-h-[92vh] w-full max-w-6xl flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4 sm:p-1"},cg={class:"flex flex-col gap-3 border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80 sm:flex-row sm:items-center sm:justify-between"},xg={class:"flex flex-1 items-start gap-3"},fg={class:"space-y-1"},bg={class:"flex flex-wrap items-center gap-2"},vg={class:"text-lg font-semibold text-gray-900 dark:text-gray-100 sm:text-xl"},kg={key:0,class:"inline-flex items-center rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-500/10 dark:text-blue-300"},hg={key:1,class:"inline-flex items-center rounded-full bg-purple-100 px-2.5 py-0.5 text-xs font-medium text-purple-700 dark:bg-purple-500/10 dark:text-purple-300"},wg={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},$g={key:0},Ag={class:"flex-1 overflow-y-auto px-5 py-4 sm:px-6"},Cg={key:0,class:"flex h-[50vh] items-center justify-center"},Ug={class:"mb-5 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4"},Ig={class:"flex items-start justify-between"},Tg={class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"},_g={class:"mt-2 text-xl font-semibold text-gray-900 dark:text-gray-100"},Kg={class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Mg={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gray-50 dark:bg-gray-800"},Sg={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},Dg={class:"space-y-3 rounded-2xl border border-blue-100 bg-blue-50/60 p-4 dark:border-blue-500/20 dark:bg-blue-900/20"},Lg={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-blue-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-blue-500/20"},Pg={class:"flex items-center justify-between"},zg={class:"font-semibold text-gray-900 dark:text-gray-100"},jg={class:"mt-2 flex items-center justify-between"},Rg={class:"font-semibold text-gray-900 dark:text-gray-100"},Vg={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Og={class:"space-y-3 rounded-2xl border border-amber-100 bg-amber-50/70 p-4 dark:border-amber-500/20 dark:bg-amber-900/20"},Eg={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-amber-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-amber-500/20"},Ng={class:"flex items-center justify-between"},Fg={class:"font-semibold text-gray-900 dark:text-gray-100"},qg={class:"mt-2 flex items-center justify-between"},Gg={class:"font-semibold text-gray-900 dark:text-gray-100"},Wg={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Bg={class:"space-y-3 rounded-2xl border border-emerald-100 bg-emerald-50/60 p-4 dark:border-emerald-500/20 dark:bg-emerald-900/20"},Qg={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-emerald-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-emerald-500/20"},Hg={class:"flex items-center justify-between"},Jg={class:"font-semibold text-gray-900 dark:text-gray-100"},Yg={class:"mt-2 flex items-center justify-between"},Zg={class:"font-semibold text-gray-900 dark:text-gray-100"},Xg={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},ey={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},ty={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},sy={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},ry={class:"flex items-center justify-between"},ay={class:"font-semibold text-gray-900 dark:text-gray-100"},ly={class:"flex items-center justify-between"},oy={class:"font-semibold text-gray-900 dark:text-gray-100"},ny={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},iy={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},dy={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},uy={class:"flex items-center justify-between"},py={class:"font-semibold text-gray-900 dark:text-gray-100"},gy={class:"flex items-center justify-between"},yy={class:"font-semibold text-gray-900 dark:text-gray-100"},my={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},cy={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},xy={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},fy={class:"flex items-center justify-between"},by={class:"font-semibold text-gray-900 dark:text-gray-100"},vy={class:"flex items-center justify-between"},ky={class:"font-semibold text-gray-900 dark:text-gray-100"},hy={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},wy={class:"mb-6 rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},$y={class:"mb-4 flex flex-wrap items-center justify-between gap-2"},Ay={class:"text-xs text-gray-400 dark:text-gray-500"},Cy={class:"h-[260px] sm:h-[300px]"},Uy={__name:"AccountUsageDetailModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:()=>({})},history:{type:Array,default:()=>[]},summary:{type:Object,default:()=>({})},overview:{type:Object,default:()=>({})},generatedAt:{type:String,default:""},loading:{type:Boolean,default:!1}},emits:["close"],setup(Y,{emit:Re}){const y=Y,W=Re,U=fr(),{isDarkMode:Q}=mr(U),V=cr(),M=$(null);let f=null;const h={claude:"Claude","claude-console":"Claude Console",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid"},G=de(()=>{var J;return h[(J=y.account)==null?void 0:J.platform]||"未知平台"}),ue=de(()=>{var J;return(J=y.account)!=null&&J.accountType?y.account.accountType==="dedicated"?"专属":y.account.accountType==="group"?"分组":"共享":"共享"}),Z=de(()=>({text:Q.value?"#e5e7eb":"#374151",grid:Q.value?"rgba(75, 85, 99, 0.25)":"rgba(209, 213, 219, 0.4)",cost:"#3b82f6",costFill:"rgba(59, 130, 246, 0.15)",requests:"#f97316"})),ye=de(()=>{var J;return((J=y.summary)==null?void 0:J.totalTokens)||0}),ee=de(()=>{var J,T;return((T=(J=y.overview)==null?void 0:J.total)==null?void 0:T.inputTokens)||0}),X=de(()=>{var J,T;return((T=(J=y.overview)==null?void 0:J.total)==null?void 0:T.outputTokens)||0}),E=J=>{const T=Number(J||0);return T>=1e6?`${(T/1e6).toFixed(2)}M`:T>=1e3?`${(T/1e3).toFixed(2)}K`:T.toLocaleString()},w=J=>{const T=Number(J||0);return Number.isNaN(T)?"$0.000000":T>=1?`$${T.toFixed(2)}`:T>=.01?`$${T.toFixed(3)}`:`$${T.toFixed(6)}`},m=J=>Math.round((Number(J)||0)*100)/100,z=J=>{if(!J)return"-";const T=new Date(J);if(Number.isNaN(T.getTime())){const Ne=J.split("-");return Ne.length===3?`${Ne[1]}-${Ne[2]}`:J}const Ce=String(T.getMonth()+1).padStart(2,"0"),ie=String(T.getDate()).padStart(2,"0");return`${Ce}-${ie}`},te=J=>{if(!J)return"暂无";const T=new Date(J);return Number.isNaN(T.getTime())?J:`${T.getFullYear()}-${String(T.getMonth()+1).padStart(2,"0")}-${String(T.getDate()).padStart(2,"0")} ${String(T.getHours()).padStart(2,"0")}:${String(T.getMinutes()).padStart(2,"0")}`},N=(J,T)=>{if(!J)return 0;const Ce=y.history.find(ie=>ie.date===J);return Ce&&Ce[T]||0},K=de(()=>{var J,T;return y.generatedAt||((J=y.summary)==null?void 0:J.generatedAt)||((T=y.summary)==null?void 0:T.generated_at)||""}),B=de(()=>{var J,T,Ce,ie,Ne,H,A,j;return[{key:"totalCost",label:"30天总费用",value:((J=y.summary)==null?void 0:J.totalCostFormatted)||"$0.000000",subtitle:"累计成本",icon:"fa-file-invoice-dollar",iconClass:"text-emerald-500"},{key:"totalRequests",label:"30天总请求",value:E(((T=y.summary)==null?void 0:T.totalRequests)||0),subtitle:"调用次数",icon:"fa-paper-plane",iconClass:"text-blue-500"},{key:"avgCost",label:"日均费用",value:((Ce=y.summary)==null?void 0:Ce.avgDailyCostFormatted)||w(((ie=y.summary)==null?void 0:ie.avgDailyCost)||0),subtitle:(Ne=y.summary)!=null&&Ne.actualDaysUsed&&((H=y.summary)==null?void 0:H.actualDaysUsed)<((A=y.summary)==null?void 0:A.days)?`基于 ${y.summary.actualDaysUsed} 天实际使用`:"平均每日成本",icon:"fa-wave-square",iconClass:"text-purple-500"},{key:"avgRequests",label:"日均请求",value:E(m(((j=y.summary)==null?void 0:j.avgDailyRequests)||0)),subtitle:"平均每日调用",icon:"fa-chart-line",iconClass:"text-orange-500"}]}),we=async()=>{if(await Gs(),!y.show||!M.value)return;if(f&&f.destroy(),!y.history||y.history.length===0){f=null;return}const J=y.history.map(ie=>ie.label),T=y.history.map(ie=>ie.cost||0),Ce=y.history.map(ie=>ie.requests||0);f=new br(M.value,{type:"line",data:{labels:J,datasets:[{label:"费用 (USD)",data:T,borderColor:Z.value.cost,backgroundColor:Z.value.costFill,tension:.35,fill:!0,yAxisID:"y"},{label:"请求次数",data:Ce,borderColor:Z.value.requests,backgroundColor:"transparent",tension:.35,yAxisID:"y1"}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{labels:{color:Z.value.text}},tooltip:{callbacks:{label(ie){return ie.dataset.label==="费用 (USD)"?`${ie.dataset.label}: ${w(ie.parsed.y)}`:`${ie.dataset.label}: ${E(ie.parsed.y)} 次`}}}},scales:{x:{ticks:{color:Z.value.text},grid:{color:Z.value.grid}},y:{position:"left",ticks:{color:Z.value.text,callback:ie=>w(ie)},grid:{color:Z.value.grid}},y1:{position:"right",ticks:{color:Z.value.text,callback:ie=>E(ie)},grid:{drawOnChartArea:!1}}}}})},pe=()=>{f&&(f.destroy(),f=null)},he=()=>{pe(),W("close")},Se=()=>{var J;(J=y.account)!=null&&J.id&&V.push({path:`/accounts/${y.account.id}/usage-records`,query:{platform:y.account.platform||y.account.accountType}})};return ke(()=>y.show,J=>{J&&!y.loading?we():J||pe()}),ke(()=>y.loading,J=>{!J&&y.show&&we()}),ke(()=>y.history,()=>{y.show&&!y.loading&&we()},{deep:!0}),ke(Q,()=>{y.show&&!y.loading&&we()}),Os(()=>{pe()}),(J,T)=>{var Ce,ie,Ne,H,A,j,xe,q,g,s,me,Te,Ge,Oe,vt,nt,at,mt,kt,ct,_,It,ht,xt,Ze,it,b,p,L,Xe,Tt,ft,_t,Rt,wt,Vt,Kt,bt,ut,Ot,ot;return o(),Ye(jt,{to:"body"},[Y.show?(o(),n("div",yg,[e("div",{class:"absolute inset-0",onClick:he}),e("div",mg,[e("div",cg,[e("div",xg,[T[2]||(T[2]=e("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-indigo-500 text-white shadow-lg"},[e("i",{class:"fas fa-chart-area text-lg"})],-1)),e("div",fg,[e("div",bg,[e("h3",vg,u(((Ce=Y.account)==null?void 0:Ce.name)||((ie=Y.account)==null?void 0:ie.email)||"账号使用详情"),1),(Ne=Y.account)!=null&&Ne.platform?(o(),n("span",kg,[T[0]||(T[0]=e("i",{class:"fas fa-layer-group mr-1"},null,-1)),x(u(G.value),1)])):c("",!0),(H=Y.account)!=null&&H.accountType?(o(),n("span",hg,[T[1]||(T[1]=e("i",{class:"fas fa-user-tag mr-1"},null,-1)),x(u(ue.value),1)])):c("",!0)]),e("p",wg,[x(" 近 "+u(((A=Y.summary)==null?void 0:A.days)||30)+" 天内的费用与请求趋势 ",1),(j=Y.summary)!=null&&j.actualDaysUsed&&((xe=Y.summary)==null?void 0:xe.actualDaysUsed)<((q=Y.summary)==null?void 0:q.days)?(o(),n("span",$g," (日均基于实际使用 "+u(Y.summary.actualDaysUsed)+" 天) ",1)):c("",!0)])])]),e("div",{class:"flex items-center gap-2"},[e("button",{class:"flex items-center gap-2 rounded-full bg-purple-100 px-3 py-2 text-xs font-semibold text-purple-700 transition hover:bg-purple-200 dark:bg-purple-500/10 dark:text-purple-200 dark:hover:bg-purple-500/20",onClick:Se},T[3]||(T[3]=[e("i",{class:"fas fa-clock"},null,-1),x(" 请求时间线 ",-1)])),e("button",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",onClick:he},T[4]||(T[4]=[e("i",{class:"fas fa-times"},null,-1)]))])]),e("div",Ag,[Y.loading?(o(),n("div",Cg,T[5]||(T[5]=[e("div",{class:"loading-spinner h-12 w-12 border-4 border-blue-500"},null,-1)]))):(o(),n(Ae,{key:1},[e("div",Ug,[(o(!0),n(Ae,null,Be(B.value,Fe=>(o(),n("div",{key:Fe.key,class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm transition dark:border-gray-700 dark:bg-gray-900/70"},[e("div",Ig,[e("div",null,[e("p",Tg,u(Fe.label),1),e("p",_g,u(Fe.value),1),e("p",Kg,u(Fe.subtitle),1)]),e("div",Mg,[e("i",{class:I(["fas",Fe.icon,Fe.iconClass])},null,2)])])]))),128))]),e("div",Sg,[e("div",Dg,[T[9]||(T[9]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-sun"}),x(" 今日概览 ")],-1)),e("div",Lg,[e("div",Pg,[T[6]||(T[6]=e("span",null,"费用",-1)),e("span",zg,u(((s=(g=Y.summary)==null?void 0:g.today)==null?void 0:s.costFormatted)||"$0.000000"),1)]),e("div",jg,[T[7]||(T[7]=e("span",null,"请求",-1)),e("span",Rg,u(E(((Te=(me=Y.summary)==null?void 0:me.today)==null?void 0:Te.requests)||0)),1)]),e("div",Vg,[T[8]||(T[8]=e("span",null,"Tokens",-1)),e("span",null,u(E(((Oe=(Ge=Y.summary)==null?void 0:Ge.today)==null?void 0:Oe.tokens)||0)),1)])])]),e("div",Og,[T[13]||(T[13]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-amber-700 dark:text-amber-300"},[e("i",{class:"fas fa-crown"}),x(" 最高费用日 ")],-1)),e("div",Eg,[e("div",Ng,[T[10]||(T[10]=e("span",null,"日期",-1)),e("span",Fg,u(z((nt=(vt=Y.summary)==null?void 0:vt.highestCostDay)==null?void 0:nt.date)),1)]),e("div",qg,[T[11]||(T[11]=e("span",null,"费用",-1)),e("span",Gg,u(((mt=(at=Y.summary)==null?void 0:at.highestCostDay)==null?void 0:mt.formattedCost)||"$0.000000"),1)]),e("div",Wg,[T[12]||(T[12]=e("span",null,"请求",-1)),e("span",null,u(E(N((ct=(kt=Y.summary)==null?void 0:kt.highestCostDay)==null?void 0:ct.date,"requests"))),1)])])]),e("div",Bg,[T[17]||(T[17]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-emerald-700 dark:text-emerald-300"},[e("i",{class:"fas fa-chart-bar"}),x(" 最高请求日 ")],-1)),e("div",Qg,[e("div",Hg,[T[14]||(T[14]=e("span",null,"日期",-1)),e("span",Jg,u(z((It=(_=Y.summary)==null?void 0:_.highestRequestDay)==null?void 0:It.date)),1)]),e("div",Yg,[T[15]||(T[15]=e("span",null,"请求",-1)),e("span",Zg,u(E(((xt=(ht=Y.summary)==null?void 0:ht.highestRequestDay)==null?void 0:xt.requests)||0)),1)]),e("div",Xg,[T[16]||(T[16]=e("span",null,"费用",-1)),e("span",null,u(w(N((it=(Ze=Y.summary)==null?void 0:Ze.highestRequestDay)==null?void 0:it.date,"cost"))),1)])])])]),e("div",ey,[e("div",ty,[T[21]||(T[21]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-database mr-2 text-indigo-500"}),x(" 累计 Token ")],-1)),e("div",sy,[e("div",ry,[T[18]||(T[18]=e("span",null,"30天总计",-1)),e("span",ay,u(E(ye.value)),1)]),e("div",ly,[T[19]||(T[19]=e("span",null,"日均 Token",-1)),e("span",oy,u(E(Math.round(((b=Y.summary)==null?void 0:b.avgDailyTokens)||0))),1)]),e("div",ny,[T[20]||(T[20]=e("span",null,"输入 / 输出",-1)),e("span",null,u(E(ee.value))+" / "+u(E(X.value)),1)])])]),e("div",iy,[T[25]||(T[25]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-tachometer-alt mr-2 text-purple-500"}),x(" 平均速率 ")],-1)),e("div",dy,[e("div",uy,[T[22]||(T[22]=e("span",null,"RPM",-1)),e("span",py,u(((L=(p=Y.overview)==null?void 0:p.averages)==null?void 0:L.rpm)??0),1)]),e("div",gy,[T[23]||(T[23]=e("span",null,"TPM",-1)),e("span",yy,u(((Tt=(Xe=Y.overview)==null?void 0:Xe.averages)==null?void 0:Tt.tpm)??0),1)]),e("div",my,[T[24]||(T[24]=e("span",null,"日均请求 / Token",-1)),e("span",null,u(E(Math.round((((_t=(ft=Y.overview)==null?void 0:ft.averages)==null?void 0:_t.dailyRequests)||0)*100)/100))+" / "+u(E(Math.round((((wt=(Rt=Y.overview)==null?void 0:Rt.averages)==null?void 0:wt.dailyTokens)||0)*100)/100)),1)])])]),e("div",cy,[T[29]||(T[29]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-layer-group mr-2 text-teal-500"}),x(" 最近统计 ")],-1)),e("div",xy,[e("div",fy,[T[26]||(T[26]=e("span",null,"今日请求",-1)),e("span",by,u(E(((Kt=(Vt=Y.overview)==null?void 0:Vt.daily)==null?void 0:Kt.requests)||0)),1)]),e("div",vy,[T[27]||(T[27]=e("span",null,"今日 Token",-1)),e("span",ky,u(E(((ut=(bt=Y.overview)==null?void 0:bt.daily)==null?void 0:ut.allTokens)||0)),1)]),e("div",hy,[T[28]||(T[28]=e("span",null,"今日费用",-1)),e("span",null,u(w(((ot=(Ot=Y.overview)==null?void 0:Ot.daily)==null?void 0:ot.cost)||0)),1)])])])]),e("div",wy,[e("div",$y,[T[30]||(T[30]=e("h4",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-line mr-2 text-blue-500"}),x(" 30天费用与请求趋势 ")],-1)),e("span",Ay," 最新更新时间:"+u(te(K.value)),1)]),e("div",Cy,[e("canvas",{ref_key:"chartCanvas",ref:M,class:"h-full w-full"},null,512)])])],64))])])])):c("",!0)])}}},Iy=ps(Uy,[["__scopeId","data-v-ff3a5b72"]]),Ty={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},_y={class:"modal-content relative mx-auto w-full max-w-lg p-8"},Ky={class:"mb-6 flex items-center justify-between"},My={class:"flex items-center gap-3"},Sy={class:"text-sm text-gray-600 dark:text-gray-400"},Dy={class:"space-y-6"},Ly={class:"rounded-lg border border-gray-200 bg-gradient-to-r from-gray-50 to-gray-100 p-4 dark:border-gray-600 dark:from-gray-700 dark:to-gray-800"},Py={class:"flex items-center justify-between"},zy={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},jy={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},Ry={class:"mb-3 grid grid-cols-3 gap-2"},Vy=["onClick"],Oy={key:0,class:"animate-fadeIn"},Ey=["min"],Ny={key:1,class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20"},Fy={class:"flex items-center justify-between"},qy={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},Gy={class:"flex gap-3 pt-2"},Wy=["disabled"],By={key:0,class:"loading-spinner mr-2"},Qy={key:1,class:"fas fa-save mr-2"},Hy={__name:"AccountExpiryEditModal",props:{show:{type:Boolean,required:!0},account:{type:Object,required:!0}},emits:["close","save"],setup(Y,{expose:Re,emit:y}){const W=Y,U=y,Q=$(!1),V=xr({expireDuration:"",customExpireDate:"",expiresAt:null}),M=[{value:"",label:"永不过期"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],f=de(()=>{const w=new Date;return w.setMinutes(w.getMinutes()+1),w.toISOString().slice(0,16)});ke(()=>W.show,w=>{w&&h()}),ke(()=>{var w;return(w=W.account)==null?void 0:w.id},w=>{w&&W.show&&h()});const h=()=>{Q.value=!1,W.account.expiresAt?(V.expireDuration="custom",V.customExpireDate=new Date(W.account.expiresAt).toISOString().slice(0,16),V.expiresAt=W.account.expiresAt):(V.expireDuration="",V.customExpireDate="",V.expiresAt=null)},G=w=>{if(V.expireDuration=w,!w){V.expiresAt=null;return}if(w==="custom")return;const m=new Date,z=w.match(/(\d+)([dhmy])/);if(z){const[,te,N]=z,K=parseInt(te);switch(N){case"d":m.setDate(m.getDate()+K);break;case"h":m.setHours(m.getHours()+K);break;case"m":m.setMonth(m.getMonth()+K);break;case"y":m.setFullYear(m.getFullYear()+K);break}V.expiresAt=m.toISOString()}},ue=()=>{if(V.customExpireDate)try{const[w,m]=V.customExpireDate.split("T"),[z,te,N]=w.split("-").map(Number),[K,B]=m.split(":").map(Number),we=new Date(z,te-1,N,K,B,0,0);if(isNaN(we.getTime())){console.error("Invalid date:",V.customExpireDate);return}V.expiresAt=we.toISOString()}catch(w){console.error("Failed to parse custom expire date:",w)}},Z=w=>w?new Date(w).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",ye=w=>w?new Date(w)<new Date:!1,ee=w=>{if(!w)return null;const m=new Date,te=new Date(w)-m,N=Math.ceil(te/(1e3*60*60*24));return te<0?{text:"已过期",class:"text-red-600"}:N<=7?{text:`${N} 天后过期`,class:"text-orange-600"}:N<=30?{text:`${N} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(N/30)} 个月后过期`,class:"text-green-600"}},X=()=>{Q.value=!0,U("save",{accountId:W.account.id,expiresAt:V.expiresAt})};return Re({resetSaving:()=>{Q.value=!1}}),(w,m)=>(o(),Ye(jt,{to:"body"},[Y.show?(o(),n("div",Ty,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:m[0]||(m[0]=z=>w.$emit("close"))}),e("div",_y,[e("div",Ky,[e("div",My,[m[6]||(m[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600"},[e("i",{class:"fas fa-clock text-white"})],-1)),e("div",null,[m[5]||(m[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改到期时间",-1)),e("p",Sy,' 为 "'+u(Y.account.name||"Account")+'" 设置新的到期时间 ',1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:m[1]||(m[1]=z=>w.$emit("close"))},m[7]||(m[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Dy,[e("div",Ly,[e("div",Py,[e("div",null,[m[10]||(m[10]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",zy,[Y.account.expiresAt?(o(),n(Ae,{key:0},[x(u(Z(Y.account.expiresAt))+" ",1),ee(Y.account.expiresAt)?(o(),n("span",{key:0,class:I(["ml-2 text-xs font-normal",ee(Y.account.expiresAt).class])}," ("+u(ee(Y.account.expiresAt).text)+") ",3)):c("",!0)],64)):(o(),n(Ae,{key:1},[m[8]||(m[8]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),m[9]||(m[9]=x(" 永不过期 ",-1))],64))])]),e("div",jy,[e("i",{class:I(["fas fa-hourglass-half text-lg",Y.account.expiresAt&&ye(Y.account.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),e("div",null,[m[12]||(m[12]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",Ry,[(o(),n(Ae,null,Be(M,z=>e("button",{key:z.value,class:I(["rounded-lg px-3 py-2 text-sm font-medium transition-all",V.expireDuration===z.value?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:te=>G(z.value)},u(z.label),11,Vy)),64)),e("button",{class:I(["rounded-lg px-3 py-2 text-sm font-medium transition-all",V.expireDuration==="custom"?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:m[2]||(m[2]=z=>G("custom"))},m[11]||(m[11]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),x(" 自定义 ",-1)]),2)])]),V.expireDuration==="custom"?(o(),n("div",Oy,[m[13]||(m[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),k(e("input",{"onUpdate:modelValue":m[3]||(m[3]=z=>V.customExpireDate=z),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:f.value,type:"datetime-local",onChange:ue},null,40,Ey),[[P,V.customExpireDate]]),m[14]||(m[14]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为到期时间 ",-1))])):c("",!0),V.expiresAt!==Y.account.expiresAt?(o(),n("div",Ny,[e("div",Fy,[e("div",null,[m[17]||(m[17]=e("p",{class:"mb-1 text-xs font-medium text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-arrow-right mr-1"}),x(" 新的到期时间 ")],-1)),e("p",qy,[V.expiresAt?(o(),n(Ae,{key:0},[x(u(Z(V.expiresAt))+" ",1),ee(V.expiresAt)?(o(),n("span",{key:0,class:I(["ml-2 text-xs font-normal",ee(V.expiresAt).class])}," ("+u(ee(V.expiresAt).text)+") ",3)):c("",!0)],64)):(o(),n(Ae,{key:1},[m[15]||(m[15]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),m[16]||(m[16]=x(" 永不过期 ",-1))],64))])]),m[18]||(m[18]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},[e("i",{class:"fas fa-check text-lg text-green-500"})],-1))])])):c("",!0),e("div",Gy,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:m[4]||(m[4]=z=>w.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:Q.value||V.expiresAt===Y.account.expiresAt,onClick:X},[Q.value?(o(),n("div",By)):(o(),n("i",Qy)),x(" "+u(Q.value?"保存中...":"保存更改"),1)],8,Wy)])])])])):c("",!0)]))}},Jy=ps(Hy,[["__scopeId","data-v-f19e4a71"]]),Yy={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Zy={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},Xy={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},em={class:"flex items-center gap-3"},tm={class:"text-xs text-gray-500 dark:text-gray-400"},sm=["disabled"],rm={class:"px-5 py-4"},am={class:"mb-4 space-y-2"},lm={class:"flex items-center justify-between text-sm"},om={class:"flex items-center justify-between text-sm"},nm={class:"font-medium text-gray-700 dark:text-gray-300"},im={class:"flex items-center gap-3"},dm={class:"text-xs text-gray-500 dark:text-gray-400"},um={key:0,class:"mb-4 overflow-hidden rounded-xl border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"},pm={class:"flex items-center justify-between border-b border-gray-200 bg-gray-100 px-3 py-2 dark:border-gray-700 dark:bg-gray-800"},gm={key:0,class:"text-xs text-gray-500 dark:text-gray-500"},ym={class:"max-h-40 overflow-y-auto p-3"},mm={key:0,class:"whitespace-pre-wrap text-sm text-gray-700 dark:text-gray-300"},cm={key:0,class:"inline-block h-4 w-1 animate-pulse bg-blue-500"},xm={key:1,class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},fm={key:2,class:"text-sm text-red-600 dark:text-red-400"},bm={key:1,class:"mb-4 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-gray-400"},vm={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},km=["disabled"],hm=["disabled"],wm={__name:"AccountTestModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:null}},emits:["close"],setup(Y,{emit:Re}){const y=Y,W=Re,U=$("idle"),Q=$(""),V=$(""),M=$(0),f=$(null),h=$(null),G=$("claude-sonnet-4-5-20250929"),ue=de(()=>{if(!y.account)return"未知";const pe=y.account.platform;return pe==="claude"?"Claude OAuth":pe==="claude-console"?"Claude Console":pe}),Z=de(()=>{if(!y.account)return"fas fa-question";const pe=y.account.platform;return pe==="claude"||pe==="claude-console"?"fas fa-brain":"fas fa-robot"}),ye=de(()=>{if(!y.account)return"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300";const pe=y.account.platform;return pe==="claude"?"bg-indigo-100 text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300":pe==="claude-console"?"bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300":"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300"}),ee=de(()=>{switch(U.value){case"idle":return"准备就绪";case"testing":return"正在测试...";case"success":return"测试成功";case"error":return"测试失败";default:return"未知状态"}}),X=de(()=>{switch(U.value){case"idle":return"点击下方按钮开始测试账户连通性";case"testing":return"正在发送测试请求并等待响应";case"success":return"账户可以正常访问 Claude API";case"error":return V.value||"无法连接到 Claude API";default:return""}}),E=de(()=>{switch(U.value){case"idle":return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50";case"testing":return"border-blue-200 bg-blue-50 dark:border-blue-500/30 dark:bg-blue-900/20";case"success":return"border-green-200 bg-green-50 dark:border-green-500/30 dark:bg-green-900/20";case"error":return"border-red-200 bg-red-50 dark:border-red-500/30 dark:bg-red-900/20";default:return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"}}),w=de(()=>{switch(U.value){case"idle":return"bg-gray-200 dark:bg-gray-700";case"testing":return"bg-blue-100 dark:bg-blue-500/30";case"success":return"bg-green-100 dark:bg-green-500/30";case"error":return"bg-red-100 dark:bg-red-500/30";default:return"bg-gray-200 dark:bg-gray-700"}}),m=de(()=>{switch(U.value){case"idle":return"fa-hourglass-start";case"testing":return"fa-spinner fa-spin";case"success":return"fa-check-circle";case"error":return"fa-exclamation-circle";default:return"fa-question-circle"}}),z=de(()=>{switch(U.value){case"idle":return"text-gray-500 dark:text-gray-400";case"testing":return"text-blue-500 dark:text-blue-400";case"success":return"text-green-500 dark:text-green-400";case"error":return"text-red-500 dark:text-red-400";default:return"text-gray-500 dark:text-gray-400"}}),te=de(()=>{switch(U.value){case"idle":return"text-gray-700 dark:text-gray-300";case"testing":return"text-blue-700 dark:text-blue-300";case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";default:return"text-gray-700 dark:text-gray-300"}});function N(){if(!y.account)return"";const pe=y.account.platform;return pe==="claude"?`${Xs}/admin/claude-accounts/${y.account.id}/test`:pe==="claude-console"?`${Xs}/admin/claude-console-accounts/${y.account.id}/test`:""}async function K(){if(!y.account)return;U.value="testing",Q.value="",V.value="",M.value=0,f.value=Date.now(),h.value&&h.value.close();const pe=N();if(!pe){U.value="error",V.value="不支持的账户类型";return}try{const he=localStorage.getItem("authToken"),Se=await fetch(pe,{method:"POST",headers:{"Content-Type":"application/json",Authorization:he?`Bearer ${he}`:""},body:JSON.stringify({model:G.value})});if(!Se.ok){const ie=await Se.json().catch(()=>({}));throw new Error(ie.message||`HTTP ${Se.status}`)}const J=Se.body.getReader(),T=new TextDecoder;let Ce=!1;for(;!Ce;){const{done:ie,value:Ne}=await J.read();if(ie){Ce=!0;continue}const A=T.decode(Ne).split(`
|
||
`);for(const j of A)if(j.startsWith("data: "))try{const xe=JSON.parse(j.substring(6));B(xe)}catch{}}}catch(he){U.value="error",V.value=he.message||"连接失败",M.value=Date.now()-f.value}}function B(pe){switch(pe.type){case"test_start":break;case"content":Q.value+=pe.text;break;case"message_stop":break;case"test_complete":M.value=Date.now()-f.value,pe.success?U.value="success":(U.value="error",V.value=pe.error||"测试失败");break;case"error":U.value="error",V.value=pe.error||"未知错误",M.value=Date.now()-f.value;break}}function we(){U.value!=="testing"&&(h.value&&(h.value.close(),h.value=null),U.value="idle",Q.value="",V.value="",M.value=0,W("close"))}return ke(()=>y.show,pe=>{pe&&(U.value="idle",Q.value="",V.value="",M.value=0)}),Os(()=>{h.value&&h.value.close()}),(pe,he)=>{var Se;return o(),Ye(jt,{to:"body"},[Y.show?(o(),n("div",Yy,[e("div",{class:"absolute inset-0",onClick:we}),e("div",Zy,[e("div",Xy,[e("div",em,[e("div",{class:I(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl text-white shadow-lg",U.value==="success"?"bg-gradient-to-br from-green-500 to-emerald-500":U.value==="error"?"bg-gradient-to-br from-red-500 to-pink-500":"bg-gradient-to-br from-blue-500 to-indigo-500"])},[e("i",{class:I(["fas",U.value==="idle"?"fa-vial":U.value==="testing"?"fa-spinner fa-spin":U.value==="success"?"fa-check":"fa-times"])},null,2)],2),e("div",null,[he[0]||(he[0]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},"账户连通性测试",-1)),e("p",tm,u(((Se=Y.account)==null?void 0:Se.name)||"未知账户"),1)])]),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:U.value==="testing",onClick:we},he[1]||(he[1]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,sm)]),e("div",rm,[e("div",am,[e("div",lm,[he[2]||(he[2]=e("span",{class:"text-gray-500 dark:text-gray-400"},"平台类型",-1)),e("span",{class:I(["inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium",ye.value])},[e("i",{class:I(Z.value)},null,2),x(" "+u(ue.value),1)],2)]),e("div",om,[he[3]||(he[3]=e("span",{class:"text-gray-500 dark:text-gray-400"},"测试模型",-1)),e("span",nm,u(G.value),1)])]),e("div",{class:I(["mb-4 rounded-xl border p-4 transition-all duration-300",E.value])},[e("div",im,[e("div",{class:I(["flex h-8 w-8 items-center justify-center rounded-lg",w.value])},[e("i",{class:I(["fas text-sm",m.value,z.value])},null,2)],2),e("div",null,[e("p",{class:I(["font-medium",te.value])},u(ee.value),3),e("p",dm,u(X.value),1)])])],2),U.value!=="idle"?(o(),n("div",um,[e("div",pm,[he[4]||(he[4]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"AI 响应",-1)),Q.value?(o(),n("span",gm,u(Q.value.length)+" 字符 ",1)):c("",!0)]),e("div",ym,[Q.value?(o(),n("p",mm,[x(u(Q.value)+" ",1),U.value==="testing"?(o(),n("span",cm)):c("",!0)])):U.value==="testing"?(o(),n("p",xm,he[5]||(he[5]=[e("i",{class:"fas fa-circle-notch fa-spin"},null,-1),x(" 等待响应中... ",-1)]))):U.value==="error"&&V.value?(o(),n("p",fm,u(V.value),1)):c("",!0)])])):c("",!0),M.value>0?(o(),n("div",bm,[he[6]||(he[6]=e("i",{class:"fas fa-clock"},null,-1)),e("span",null,"耗时 "+u((M.value/1e3).toFixed(2))+" 秒",1)])):c("",!0)]),e("div",vm,[e("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:U.value==="testing",onClick:we}," 关闭 ",8,km),e("button",{class:I(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",U.value==="testing"?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:U.value==="testing",onClick:K},[e("i",{class:I(["fas",U.value==="testing"?"fa-spinner fa-spin":"fa-play"])},null,2),x(" "+u(U.value==="testing"?"测试中...":U.value==="idle"?"开始测试":"重新测试"),1)],10,hm)])])])):c("",!0)])}}},$m={class:"accounts-container"},Am={class:"card p-4 sm:p-6"},Cm={class:"mb-4 flex flex-col gap-4 sm:mb-6"},Um={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Im={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},Tm={class:"group relative min-w-[160px]"},_m={class:"group relative min-w-[140px]"},Km={class:"group relative min-w-[160px]"},Mm={class:"group relative min-w-[120px]"},Sm={class:"group relative min-w-[200px]"},Dm={class:"relative flex items-center"},Lm={class:"flex w-full flex-col gap-3 sm:w-auto sm:flex-row sm:items-center sm:gap-3"},Pm={class:"relative"},zm={class:"relative"},jm=["disabled"],Rm={class:"relative"},Vm={key:0,class:"py-12 text-center"},Om={key:1,class:"py-12 text-center"},Em={key:2,class:"table-wrapper hidden md:block"},Nm={class:"w-full"},Fm={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},qm={key:0,class:"checkbox-column sticky left-0 z-20 min-w-[50px] px-3 py-4 text-left"},Gm={class:"flex items-center"},Wm=["indeterminate"],Bm={key:1,class:"fas fa-sort ml-1 text-gray-400"},Qm={key:1,class:"fas fa-sort ml-1 text-gray-400"},Hm={key:1,class:"fas fa-sort ml-1 text-gray-400"},Jm={class:"min-w-[210px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},Ym={class:"flex items-center gap-2"},Zm={key:1,class:"fas fa-sort ml-1 text-gray-400"},Xm={key:1,class:"fas fa-sort ml-1 text-gray-400"},ec={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},tc={key:0,class:"checkbox-column sticky left-0 z-10 px-3 py-3"},sc={class:"flex items-center"},rc=["value"],ac={class:"flex items-center"},lc={class:"min-w-0"},oc={class:"flex items-center gap-2"},nc=["title"],ic={key:0,class:"inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-800"},dc={key:1,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800"},uc={key:2,class:"inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800"},pc={key:0,class:"my-2 flex flex-wrap items-center gap-2"},gc=["title"],yc=["title"],mc={class:"px-3 py-4"},cc={class:"flex items-center gap-1"},xc={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"},fc={class:"text-xs font-medium text-yellow-700"},bc={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"},vc={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"},kc={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"},hc={class:"text-xs font-medium text-gray-950"},wc={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"},$c={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"},Ac={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"},Cc={class:"text-xs font-semibold text-indigo-800"},Uc={class:"text-xs font-medium text-indigo-700"},Ic={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"},Tc={key:8,class:"flex items-center gap-1.5 rounded-lg border border-cyan-200 bg-gradient-to-r from-cyan-100 to-sky-100 px-2.5 py-1 dark:border-cyan-700 dark:from-cyan-900/20 dark:to-sky-900/20"},_c={class:"text-xs font-medium text-cyan-700 dark:text-cyan-300"},Kc={key:9,class:"flex items-center gap-1.5 rounded-lg border border-amber-200 bg-gradient-to-r from-amber-100 to-yellow-100 px-2.5 py-1 dark:border-amber-700 dark:from-amber-900/20 dark:to-yellow-900/20"},Mc={key:10,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"},Sc={class:"w-[100px] min-w-[100px] max-w-[100px] whitespace-nowrap px-3 py-4"},Dc={class:"flex flex-col gap-1"},Lc={key:0,class:"inline-flex items-center rounded-full bg-yellow-100 px-3 py-1 text-xs font-semibold text-yellow-800"},Pc={key:0},zc={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-3 py-1 text-xs font-semibold text-gray-700"},jc=["title"],Rc={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},Vc={class:"whitespace-nowrap px-3 py-4 text-sm"},Oc={key:0,class:"space-y-1"},Ec={class:"flex items-center gap-2"},Nc={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Fc={class:"flex items-center gap-2"},qc={class:"text-xs text-gray-600 dark:text-gray-300"},Gc={class:"flex items-center gap-2"},Wc={class:"text-xs text-gray-600 dark:text-gray-300"},Bc={key:0,class:"text-xs text-gray-500 dark:text-gray-400"},Qc={key:1,class:"text-xs text-gray-400"},Hc={class:"whitespace-nowrap px-3 py-4"},Jc={key:0,class:"space-y-2"},Yc={key:0,class:"space-y-2"},Zc={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Xc={class:"flex items-center gap-2"},ex={class:"flex-1"},tx={class:"flex items-center gap-2"},sx={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},rx={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},ax={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},lx={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},ox={class:"flex items-center gap-2"},nx={class:"flex-1"},ix={class:"flex items-center gap-2"},dx={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},ux={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},px={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},gx={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},yx={class:"flex items-center gap-2"},mx={class:"flex-1"},cx={class:"flex items-center gap-2"},xx={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},fx={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},bx={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},vx={key:1,class:"space-y-2"},kx={key:0,class:"flex items-center gap-3 text-xs"},hx={class:"flex items-center gap-1"},wx={class:"font-medium text-gray-900 dark:text-gray-100"},$x={class:"flex items-center gap-1"},Ax={class:"font-medium text-gray-900 dark:text-gray-100"},Cx={class:"flex items-center gap-2"},Ux={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},Ix={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},Tx={class:"text-xs text-gray-600 dark:text-gray-400"},_x={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},Kx={key:2,class:"text-xs text-gray-400"},Mx={key:1,class:"space-y-3"},Sx={class:"flex items-center justify-between text-xs"},Dx={class:"font-medium text-gray-700 dark:text-gray-200"},Lx={class:"flex items-center gap-2"},Px={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},zx={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},jx={class:"text-xs text-gray-600 dark:text-gray-400"},Rx={class:"ml-2 text-gray-400"},Vx={key:1,class:"text-sm text-gray-400"},Ox={class:"space-y-1"},Ex={class:"flex items-center justify-between text-xs"},Nx={key:0,class:"font-medium text-gray-700 dark:text-gray-200"},Fx={key:0,class:"flex items-center gap-2"},qx={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},Gx={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-500 dark:bg-gray-700 dark:text-gray-300"},Wx={key:2,class:"space-y-2"},Bx={key:0,class:"space-y-2"},Qx={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Hx={class:"flex items-center gap-2"},Jx={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"},Yx={class:"flex-1"},Zx={class:"flex items-center gap-2"},Xx={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},ef={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},tf={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},sf={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},rf={class:"flex items-center gap-2"},af={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"},lf={class:"flex-1"},of={class:"flex items-center gap-2"},nf={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},df={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},uf={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},pf={key:1,class:"text-sm text-gray-400"},gf={key:3,class:"text-sm text-gray-400"},yf={class:"whitespace-nowrap px-3 py-4 text-sm text-gray-600 dark:text-gray-300"},mf={class:"whitespace-nowrap px-3 py-4"},cf={key:0,class:"flex items-center gap-2"},xf={class:"h-2 w-16 rounded-full bg-gray-200"},ff={class:"min-w-[20px] text-xs font-medium text-gray-700 dark:text-gray-200"},bf={key:1,class:"text-sm text-gray-400"},vf={class:"px-3 py-4 text-sm text-gray-600"},kf=["title"],hf={key:1,class:"text-gray-400"},wf={class:"whitespace-nowrap px-3 py-4"},$f={class:"flex flex-col gap-1"},Af={key:0},Cf=["onClick"],Uf=["onClick"],If=["onClick"],Tf=["onClick"],_f={class:"operations-column sticky right-0 z-10 whitespace-nowrap px-3 py-4 text-sm font-medium"},Kf={key:0,class:"flex items-center gap-1"},Mf=["disabled","title","onClick"],Sf=["disabled","title","onClick"],Df={class:"ml-1"},Lf=["onClick"],Pf=["onClick"],zf=["onClick"],jf=["onClick"],Rf={key:1,class:"flex items-center gap-1"},Vf=["disabled","title","onClick"],Of={class:"ml-1"},Ef=["onClick"],Nf={key:3,class:"space-y-3 md:hidden"},Ff={class:"mb-3 flex items-start justify-between"},qf={class:"flex items-center gap-3"},Gf=["value"],Wf={class:"text-sm font-semibold text-gray-900"},Bf={class:"mt-0.5 flex items-center gap-2"},Qf={class:"text-xs text-gray-500 dark:text-gray-400"},Hf={class:"text-xs text-gray-500 dark:text-gray-400"},Jf={class:"mb-3 grid grid-cols-2 gap-3"},Yf={class:"space-y-1"},Zf={class:"flex items-center gap-1.5"},Xf={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},eb={class:"flex items-center gap-1.5"},tb={class:"text-xs text-gray-600 dark:text-gray-400"},sb={class:"flex items-center gap-1.5"},rb={class:"text-xs text-gray-600 dark:text-gray-400"},ab={key:0,class:"space-y-1"},lb={class:"flex items-center gap-1.5"},ob={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},nb={class:"flex items-center gap-1.5"},ib={class:"text-xs text-gray-600 dark:text-gray-400"},db={key:1,class:"text-sm font-semibold text-gray-400"},ub={class:"mb-3 space-y-2"},pb={key:0,class:"space-y-2"},gb={key:0,class:"space-y-2"},yb={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},mb={class:"flex items-center gap-2"},cb={class:"flex-1"},xb={class:"flex items-center gap-2"},fb={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},bb={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},vb={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},kb={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},hb={class:"flex items-center gap-2"},wb={class:"flex-1"},$b={class:"flex items-center gap-2"},Ab={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Cb={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Ub={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Ib={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Tb={class:"flex items-center gap-2"},_b={class:"flex-1"},Kb={class:"flex items-center gap-2"},Mb={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Sb={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Db={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Lb={key:1,class:"space-y-1.5 rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Pb={class:"flex items-center justify-between text-xs"},zb={class:"flex items-center gap-1"},jb={class:"font-medium text-gray-700 dark:text-gray-200"},Rb={class:"h-2 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-600"},Vb={class:"flex items-center justify-between text-xs"},Ob={class:"text-gray-500 dark:text-gray-400"},Eb={key:0,class:"font-medium text-indigo-600"},Nb={key:1,class:"text-gray-500"},Fb={key:2,class:"text-xs text-gray-400"},qb={key:1,class:"space-y-2"},Gb={key:0,class:"space-y-2"},Wb={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Bb={class:"flex items-center gap-2"},Qb={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"},Hb={class:"flex-1"},Jb={class:"flex items-center gap-2"},Yb={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Zb={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Xb={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},ev={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},tv={class:"flex items-center gap-2"},sv={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"},rv={class:"flex-1"},av={class:"flex items-center gap-2"},lv={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},ov={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},nv={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},iv={key:1,class:"text-xs text-gray-400"},dv={class:"flex items-center justify-between text-xs"},uv={class:"text-gray-700 dark:text-gray-200"},pv={key:2,class:"flex items-center justify-between text-xs"},gv={class:"text-gray-700 dark:text-gray-200"},yv={class:"flex items-center justify-between text-xs"},mv={class:"font-medium text-gray-700 dark:text-gray-200"},cv={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3"},xv=["disabled","onClick"],fv=["onClick"],bv=["onClick"],vv=["onClick"],kv=["onClick"],hv={key:0,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},wv={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},$v={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},Av={class:"flex items-center gap-2"},Cv=["value"],Uv={class:"flex items-center gap-2"},Iv=["disabled"],Tv={class:"flex items-center gap-1"},_v={key:1,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},Kv=["onClick"],Mv={key:2,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},Sv=["disabled"],Dv={class:"space-y-4"},Lv={class:"overflow-x-auto"},Pv={class:"w-full border-collapse text-sm",style:{"min-width":"1000px"}},zv={class:"border border-gray-300 px-4 py-2 font-medium dark:border-gray-600"},jv={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},Rv={class:"text-green-600 dark:text-green-400"},Vv={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},Ov={class:"text-yellow-600 dark:text-yellow-400"},Ev={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},Nv={class:"text-orange-600 dark:text-orange-400"},Fv={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},qv={class:"text-orange-600 dark:text-orange-400"},Gv={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},Wv={class:"text-orange-600 dark:text-orange-400"},Bv={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},Qv={class:"text-orange-600 dark:text-orange-400"},Hv={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},Jv={class:"text-orange-600 dark:text-orange-400"},Yv={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},Zv={class:"text-red-600 dark:text-red-400"},Xv={class:"border border-gray-300 bg-blue-50 px-4 py-2 text-center font-bold dark:border-gray-600 dark:bg-blue-900/30"},e1={class:"bg-blue-50 font-bold dark:bg-blue-900/30"},t1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},s1={class:"text-green-600 dark:text-green-400"},r1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},a1={class:"text-yellow-600 dark:text-yellow-400"},l1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},o1={class:"text-orange-600 dark:text-orange-400"},n1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},i1={class:"text-orange-600 dark:text-orange-400"},d1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},u1={class:"text-orange-600 dark:text-orange-400"},p1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},g1={class:"text-orange-600 dark:text-orange-400"},y1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},m1={class:"text-orange-600 dark:text-orange-400"},c1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},x1={class:"text-red-600 dark:text-red-400"},f1={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},rr="accountsPageSize",b1={__name:"AccountsView",setup(Y){const{showConfirmModal:Re,confirmOptions:y,showConfirm:W,handleConfirm:U,handleCancel:Q}=lr(),V=$([]),M=$(!1),f=$("name"),h=$("asc"),G=$([]),ue=$({}),Z=$([]),ye=$("all"),ee=$("all"),X=$("all"),E=$(""),w=()=>{const r=localStorage.getItem(rr);if(r){const a=parseInt(r,10);if([10,20,50,100].includes(a))return a}return 10},m=[10,20,50,100],z=$(w()),te=$(1),N=$([]),K=$(!1),B=$(!1),we=$(!1),pe=$(!1),he=$(!1),Se=$(null),J=$([]),T=$({}),Ce=$({}),ie=$(""),Ne=["claude","claude-console","openai","openai-responses","gemini","droid","gemini-api"],H=$(null),A=$(null),j=$(!1),xe=$(null),q=$(!1),g=$(null),s=$(!1),me=$(!1),Te=$(!1),Ge=$(!1),Oe=$(!1),vt=$(new Map),nt=$([{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"},{value:"rateLimitTime",label:"按限流时间排序",icon:"fa-hourglass"}]),at=[{value:"group-claude",label:"Claude(全部)",icon:"fa-brain",children:[{value:"claude",label:"Claude 官方/OAuth",icon:"fa-brain"},{value:"claude-console",label:"Claude Console",icon:"fa-terminal"},{value:"bedrock",label:"Bedrock",icon:"fab fa-aws"},{value:"ccr",label:"CCR Relay",icon:"fa-code-branch"}]},{value:"group-openai",label:"Codex / OpenAI(全部)",icon:"fa-openai",children:[{value:"openai",label:"OpenAI 官方",icon:"fa-openai"},{value:"openai-responses",label:"OpenAI-Responses (Codex)",icon:"fa-server"},{value:"azure_openai",label:"Azure OpenAI",icon:"fab fa-microsoft"}]},{value:"group-gemini",label:"Gemini(全部)",icon:"fab fa-google",children:[{value:"gemini",label:"Gemini OAuth",icon:"fab fa-google"},{value:"gemini-api",label:"Gemini API",icon:"fa-key"}]},{value:"group-droid",label:"Droid(全部)",icon:"fa-robot",children:[{value:"droid",label:"Droid",icon:"fa-robot"}]}],mt={"group-claude":["claude","claude-console","bedrock","ccr"],"group-openai":["openai","openai-responses","azure_openai"],"group-gemini":["gemini","gemini-api"],"group-droid":["droid"]},kt={claude:r=>F.get("/admin/claude-accounts",{params:r}),"claude-console":r=>F.get("/admin/claude-console-accounts",{params:r}),bedrock:r=>F.get("/admin/bedrock-accounts",{params:r}),gemini:r=>F.get("/admin/gemini-accounts",{params:r}),openai:r=>F.get("/admin/openai-accounts",{params:r}),azure_openai:r=>F.get("/admin/azure-openai-accounts",{params:r}),"openai-responses":r=>F.get("/admin/openai-responses-accounts",{params:r}),ccr:r=>F.get("/admin/ccr-accounts",{params:r}),droid:r=>F.get("/admin/droid-accounts",{params:r}),"gemini-api":r=>F.get("/admin/gemini-api-accounts",{params:r})},ct=Object.keys(kt),_=r=>r==="all"?ct:mt[r]?mt[r]:ct.includes(r)?[r]:ct,It=de(()=>{const r=[{value:"all",label:"所有平台",icon:"fa-globe",indent:0}];return at.forEach(a=>{var v;r.push({...a,indent:0,isGroup:!0}),(v=a.children)==null||v.forEach(C=>{r.push({...C,indent:1,parent:a.value})})}),r}),ht=$([{value:"normal",label:"正常",icon:"fa-check-circle"},{value:"unschedulable",label:"不可调度",icon:"fa-ban"},{value:"rateLimited",label:"限流",icon:"fa-hourglass-half"},{value:"other",label:"其他",icon:"fa-exclamation-triangle"},{value:"all",label:"全部状态",icon:"fa-list"}]),xt=de(()=>{const r=[{value:"all",label:"所有账户",icon:"fa-globe"},{value:"ungrouped",label:"未分组账户",icon:"fa-user"}];return Z.value.forEach(a=>{r.push({value:a.id,label:`${a.name} (${a.platform==="claude"?"Claude":a.platform==="gemini"?"Gemini":a.platform==="openai"?"OpenAI":"Droid"})`,icon:a.platform==="claude"?"fa-brain":a.platform==="gemini"?"fa-robot":a.platform==="openai"?"fa-openai":"fa-robot"})}),r}),Ze=de(()=>we.value),it=$(!1),b=$(null),p=$(!1),L=$(null),Xe=r=>{const a=new Set;return[r==null?void 0:r.name,r==null?void 0:r.email,r==null?void 0:r.accountName,r==null?void 0:r.owner,r==null?void 0:r.ownerName,r==null?void 0:r.ownerDisplayName,r==null?void 0:r.displayName,r==null?void 0:r.username,r==null?void 0:r.identifier,r==null?void 0:r.alias,r==null?void 0:r.title,r==null?void 0:r.label].forEach(C=>{if(typeof C=="string"){const l=C.trim();l&&a.add(l)}}),Array.isArray(r==null?void 0:r.groupInfos)&&r.groupInfos.forEach(C=>{if(C&&typeof C.name=="string"){const l=C.name.trim();l&&a.add(l)}}),Object.entries(r||{}).forEach(([C,l])=>{if(typeof l=="string"){const oe=C.toLowerCase();if(oe.includes("name")||oe.includes("email")){const Ue=l.trim();Ue&&a.add(Ue)}}}),Array.from(a)},Tt=(r,a)=>a?Xe(r).some(v=>v.toLowerCase().includes(a)):!0,ft=r=>!!r&&Ne.includes(r.platform),_t=r=>{var v;return["claude","claude-console","openai","openai-responses","gemini","gemini-api","ccr"].includes(r.platform)&&(r.status==="unauthorized"||r.status!=="active"||((v=r.rateLimitStatus)==null?void 0:v.isRateLimited)||r.rateLimitStatus==="limited"||!r.isActive)},Rt=r=>{const a=[];return _t(r)&&a.push({key:"reset",label:"重置状态",icon:"fa-redo",color:"orange",handler:()=>ts(r)}),ft(r)&&a.push({key:"usage",label:"详情",icon:"fa-chart-line",color:"indigo",handler:()=>wt(r)}),bt(r)&&a.push({key:"test",label:"测试",icon:"fa-vial",color:"blue",handler:()=>ut(r)}),a.push({key:"delete",label:"删除",icon:"fa-trash",color:"red",handler:()=>Ft(r)}),a},wt=async r=>{if(!ft(r)){R("该账户类型暂不支持查看详情","warning");return}Se.value=r,pe.value=!0,he.value=!0,J.value=[],T.value={},Ce.value={},ie.value="";try{const a=await F.get(`/admin/accounts/${r.id}/usage-history?platform=${r.platform}&days=30`);if(a.success){const v=a.data||{};J.value=v.history||[],T.value=v.summary||{},Ce.value=v.overview||{},ie.value=v.generatedAt||""}else R(a.error||"加载账号使用详情失败","error")}catch{R("加载账号使用详情失败","error")}finally{he.value=!1}},Vt=()=>{pe.value=!1,he.value=!1,Se.value=null},Kt=["claude","claude-console"],bt=r=>!!r&&Kt.includes(r.platform),ut=r=>{if(!bt(r)){R("该账户类型暂不支持测试","warning");return}xe.value=r,j.value=!0},Ot=()=>{j.value=!1,xe.value=null},ot=de(()=>{let r=V.value;const a=E.value.trim();if(a){const C=a.toLowerCase();r=r.filter(l=>Tt(l,C))}return X.value!=="all"&&(r=r.filter(C=>{const l=gt(C),oe=C.status==="blocked"||C.status==="unauthorized";return X.value==="rateLimited"?C.isActive&&l:X.value==="normal"?C.isActive&&!l&&!oe&&C.schedulable!==!1:X.value==="unschedulable"?C.isActive&&!l&&!oe&&C.schedulable===!1:X.value==="other"?!l&&(!C.isActive||oe):!0})),f.value?[...r].sort((C,l)=>{var $e,We,ve,fe,ce,se,ne,je,Ee,Qs,Hs,Js;let oe=C[f.value],Ue=l[f.value];if(f.value==="dailyTokens"?(oe=((We=($e=C.usage)==null?void 0:$e.daily)==null?void 0:We.allTokens)||0,Ue=((fe=(ve=l.usage)==null?void 0:ve.daily)==null?void 0:fe.allTokens)||0):f.value==="dailyRequests"?(oe=((se=(ce=C.usage)==null?void 0:ce.daily)==null?void 0:se.requests)||0,Ue=((je=(ne=l.usage)==null?void 0:ne.daily)==null?void 0:je.requests)||0):f.value==="totalTokens"&&(oe=((Qs=(Ee=C.usage)==null?void 0:Ee.total)==null?void 0:Qs.allTokens)||0,Ue=((Js=(Hs=l.usage)==null?void 0:Hs.total)==null?void 0:Js.allTokens)||0),f.value==="lastUsed"&&(oe=C.lastUsedAt?new Date(C.lastUsedAt).getTime():0,Ue=l.lastUsedAt?new Date(l.lastUsedAt).getTime():0),f.value==="status"&&(oe=C.isActive?1:0,Ue=l.isActive?1:0),f.value==="rateLimitTime"){const Fs=gt(C),qs=gt(l),Ys=Fs?yt(C):0,Zs=qs?yt(l):0;return!Fs&&qs?-1:Fs&&!qs?1:Ys<Zs?-1:Ys>Zs?1:0}return oe<Ue?h.value==="asc"?-1:1:oe>Ue?h.value==="asc"?1:-1:0}):r}),Fe=de(()=>{const r=ot.value.length;return Math.ceil(r/z.value)||0}),Mt=de(()=>[{value:"claude",label:"Claude"},{value:"claude-console",label:"Claude Console"},{value:"gemini",label:"Gemini"},{value:"gemini-api",label:"Gemini API"},{value:"openai",label:"OpenAI"},{value:"azure_openai",label:"Azure OpenAI"},{value:"bedrock",label:"Bedrock"},{value:"openai-responses",label:"OpenAI-Responses"},{value:"ccr",label:"CCR"},{value:"droid",label:"Droid"}].map(a=>{const v=V.value.filter(se=>se.platform===a.value),C=v.filter(se=>gt(se)),l=v.filter(se=>{const ne=gt(se),je=se.status==="blocked"||se.status==="unauthorized";return!ne&&se.isActive&&!je&&se.schedulable!==!1}).length,oe=v.filter(se=>{const ne=gt(se),je=se.status==="blocked"||se.status==="unauthorized";return!ne&&se.isActive&&!je&&se.schedulable===!1}).length,Ue=v.filter(se=>{const ne=gt(se),je=se.status==="blocked"||se.status==="unauthorized";return!ne&&(!se.isActive||je)}).length,$e=C.filter(se=>{const ne=yt(se);return ne>0&&ne<=60}).length,We=C.filter(se=>{const ne=yt(se);return ne>60&&ne<=300}).length,ve=C.filter(se=>{const ne=yt(se);return ne>300&&ne<=720}).length,fe=C.filter(se=>{const ne=yt(se);return ne>720&&ne<=1440}).length,ce=C.filter(se=>yt(se)>1440).length;return{platform:a.value,platformLabel:a.label,normal:l,unschedulable:oe,rateLimit0_1h:$e,rateLimit1_5h:We,rateLimit5_12h:ve,rateLimit12_24h:fe,rateLimitOver24h:ce,other:Ue,total:v.length}}).filter(a=>a.total>0)),et=de(()=>Mt.value.reduce((r,a)=>(r.normal+=a.normal,r.unschedulable+=a.unschedulable,r.rateLimit0_1h+=a.rateLimit0_1h,r.rateLimit1_5h+=a.rateLimit1_5h,r.rateLimit5_12h+=a.rateLimit5_12h,r.rateLimit12_24h+=a.rateLimit12_24h,r.rateLimitOver24h+=a.rateLimitOver24h,r.other+=a.other,r.total+=a.total,r),{normal:0,unschedulable:0,rateLimit0_1h:0,rateLimit1_5h:0,rateLimit5_12h:0,rateLimit12_24h:0,rateLimitOver24h:0,other:0,total:0})),pt=de(()=>{const r=Fe.value,a=te.value,v=[];if(r<=7)for(let C=1;C<=r;C++)v.push(C);else{let C=Math.max(1,a-2),l=Math.min(r,a+2);a<=3?l=5:a>=r-2&&(C=r-4);for(let oe=C;oe<=l;oe++)v.push(oe)}return v}),St=de(()=>{const r=pt.value;return r.length===0?!1:r[0]>1}),Gt=de(()=>{const r=pt.value;return r.length===0?!1:r[r.length-1]<Fe.value}),gs=de(()=>{const r=pt.value;return r.length===0?!1:St.value&&r[0]>2}),Es=de(()=>{const r=pt.value;return r.length===0?!1:Gt.value&&r[r.length-1]<Fe.value-1}),$t=de(()=>{const r=(te.value-1)*z.value,a=r+z.value;return ot.value.slice(r,a)}),Je=()=>{const r=$t.value.map(C=>C.id),a=r.filter(C=>N.value.includes(C)).length,v=r.length;a===0?(K.value=!1,B.value=!1):a===v?(K.value=!0,B.value=!1):(K.value=!1,B.value=!0)},ys=()=>{if(K.value)$t.value.forEach(r=>{N.value.includes(r.id)||N.value.push(r.id)});else{const r=new Set($t.value.map(a=>a.id));N.value=N.value.filter(a=>!r.has(a))}Je()},qe=()=>{we.value=!we.value,we.value?Je():(N.value=[],K.value=!1,B.value=!1)},Wt=()=>{const r=new Set(V.value.map(a=>a.id));N.value=N.value.filter(a=>r.has(a)),Je()},tt=async(r=!1)=>{M.value=!0;try{const a={};ee.value!=="all"&&!mt[ee.value]&&(a.platform=ee.value),ye.value!=="all"&&(a.groupId=ye.value);const v=_(ee.value);await Promise.all([Qt(r),bs(r)]);const C=await Promise.all(v.map(async ve=>{const fe=kt[ve];if(!fe)return{platform:ve,success:!0,data:[]};try{const ce=await fe(a);return{platform:ve,success:ce==null?void 0:ce.success,data:ce==null?void 0:ce.data}}catch(ce){return console.debug(`Failed to load ${ve} accounts:`,ce),{platform:ve,success:!1,data:[]}}})),l=[],oe=ue.value||{};let Ue=[];const $e=(ve,fe)=>{const ce=Array.isArray(fe)?fe:[];if(ce.length!==0)switch(ve){case"claude":{const se=ce.map(ne=>{var Ee;const je=((Ee=oe.claudeAccountId)==null?void 0:Ee[ne.id])||0;return{...ne,platform:"claude",boundApiKeysCount:je}});l.push(...se);break}case"claude-console":{const se=ce.map(ne=>{var Ee;const je=((Ee=oe.claudeConsoleAccountId)==null?void 0:Ee[ne.id])||0;return{...ne,platform:"claude-console",boundApiKeysCount:je}});l.push(...se);break}case"bedrock":{const se=ce.map(ne=>({...ne,platform:"bedrock",boundApiKeysCount:0}));l.push(...se);break}case"gemini":{const se=ce.map(ne=>{var Ee;const je=((Ee=oe.geminiAccountId)==null?void 0:Ee[ne.id])||0;return{...ne,platform:"gemini",boundApiKeysCount:je}});l.push(...se);break}case"openai":{const se=ce.map(ne=>{var Ee;const je=((Ee=oe.openaiAccountId)==null?void 0:Ee[ne.id])||0;return{...ne,platform:"openai",boundApiKeysCount:je}});l.push(...se);break}case"azure_openai":{const se=ce.map(ne=>{var Ee;const je=((Ee=oe.azureOpenaiAccountId)==null?void 0:Ee[ne.id])||0;return{...ne,platform:"azure_openai",boundApiKeysCount:je}});l.push(...se);break}case"openai-responses":{Ue=ce;break}case"ccr":{const se=ce.map(ne=>({...ne,platform:"ccr",boundApiKeysCount:0}));l.push(...se);break}case"droid":{const se=ce.map(ne=>{var Ee;const je=((Ee=oe.droidAccountId)==null?void 0:Ee[ne.id])||ne.boundApiKeysCount||0;return{...ne,platform:"droid",boundApiKeysCount:je}});l.push(...se);break}case"gemini-api":{const se=ce.map(ne=>{var Ee;const je=((Ee=oe.geminiAccountId)==null?void 0:Ee[`api:${ne.id}`])||0;return{...ne,platform:"gemini-api",boundApiKeysCount:je}});l.push(...se);break}default:break}};if(C.forEach(({platform:ve,success:fe,data:ce})=>{fe&&$e(ve,ce||[])}),Ue.length>0){let ve={};try{const ce=await F.get("/admin/openai-responses-accounts/auto-recovery-configs");ce.success&&Array.isArray(ce.data)&&(ve=ce.data.reduce((se,ne)=>(ne!=null&&ne.accountId&&(se[ne.accountId]=ne),se),{}))}catch(ce){console.debug("Failed to load auto-recovery configs:",ce)}const fe=Ue.map(ce=>{var je;const se=((je=oe.openaiAccountId)==null?void 0:je[`responses:${ce.id}`])||0,ne=ve[ce.id]||ce.autoRecoveryConfig||null;return{...ce,platform:"openai-responses",boundApiKeysCount:se,autoRecoveryConfig:ne}});l.push(...fe)}let We=l;ye.value!=="all"&&(ye.value==="ungrouped"?We=l.filter(ve=>!ve.groupInfos||ve.groupInfos.length===0):We=l.filter(ve=>!ve.groupInfos||ve.groupInfos.length===0?!1:ve.groupInfos.some(fe=>fe.id===ye.value))),We=We.map(ve=>{const fe=Ht(ve.proxyConfig||ve.proxy);return{...ve,proxyConfig:fe||null}}),V.value=We,Wt(),We.some(ve=>ve.platform==="claude")&&ms().catch(ve=>{console.debug("Claude usage loading failed:",ve)})}catch{R("加载账户失败","error")}finally{M.value=!1}},ms=async()=>{try{const r=await F.get("/admin/claude-accounts/usage");if(r.success&&r.data){const a=r.data;V.value=V.value.map(v=>v.platform==="claude"&&a[v.id]?{...v,claudeUsage:a[v.id]}:v)}}catch(r){console.debug("Failed to load Claude usage data:",r)}};let dt="name";const At=r=>{r&&(f.value===r?h.value=h.value==="asc"?"desc":"asc":(f.value=r,h.value="asc"),dt=r)},cs=r=>{r===dt?h.value=h.value==="asc"?"desc":"asc":h.value="asc",dt=r},Dt=r=>{if(r==null)return"0";const a=Number(r);return a>=1e6?(a/1e6).toFixed(2):a>=1e3?(a/1e6).toFixed(4):(a/1e6).toFixed(6)},Bt=r=>{if(!r)return"从未使用";const a=new Date(r),C=new Date-a;return C<6e4?"刚刚":C<36e5?`${Math.floor(C/6e4)} 分钟前`:C<864e5?`${Math.floor(C/36e5)} 小时前`:C<6048e5?`${Math.floor(C/864e5)} 天前`:a.toLocaleDateString("zh-CN")},xs=()=>{E.value="",te.value=1},Qt=async(r=!1)=>{if(!(!r&&Te.value))try{const a=await F.get("/admin/accounts/binding-counts");a.success&&(ue.value=a.data||{},Te.value=!0)}catch{ue.value={}}},fs=async(r=!1)=>{var a;if(!(!r&&me.value))try{const v=await F.get("/admin/api-keys");v.success&&(G.value=((a=v.data)==null?void 0:a.items)||v.data||[],me.value=!0)}catch{}},bs=async(r=!1)=>{if(!(!r&&Ge.value))try{const a=await F.get("/admin/account-groups");a.success&&(Z.value=a.data||[],Ge.value=!0)}catch{}},vs=()=>{me.value=!1,Te.value=!1,Ge.value=!1,Oe.value=!1,vt.value.clear()},ks=()=>{te.value=1,tt()},hs=()=>{te.value=1,tt()};function Ht(r){if(!r)return null;let a=r;if(typeof r=="string")try{a=JSON.parse(r)}catch{return null}if(!a||typeof a!="object")return null;const v=a.proxy&&typeof a.proxy=="object"?a.proxy:a,C=typeof v.host=="string"?v.host.trim():v.host!==void 0&&v.host!==null?String(v.host).trim():"",l=v.port!==void 0&&v.port!==null?String(v.port).trim():"";if(!C||!l)return null;const oe=typeof v.type=="string"&&v.type.trim()?v.type.trim():"socks5",Ue=typeof v.username=="string"?v.username:v.username!==void 0&&v.username!==null?String(v.username):"",$e=typeof v.password=="string"?v.password:v.password!==void 0&&v.password!==null?String(v.password):"";return{type:oe,host:C,port:l,username:Ue,password:$e}}const Et=r=>{const a=Ht(r);if(!a)return null;const v=a.type.toLowerCase()==="socks5"?"S5":a.type.toUpperCase();let C=a.host;C.length>15&&(C=C.substring(0,12)+"...");let l=`${v}://${C}:${a.port}`;return a.username&&(l=`${v}://***@${C}:${a.port}`),l},Jt=(r,a)=>{if(!r||!a)return"--";const v=new Date(r),C=new Date(a),l=v.getHours().toString().padStart(2,"0"),oe=v.getMinutes().toString().padStart(2,"0"),Ue=C.getHours().toString().padStart(2,"0"),$e=C.getMinutes().toString().padStart(2,"0");return`${l}:${oe} - ${Ue}:${$e}`},Yt=r=>{if(!r||r<=0)return"已结束";const a=Math.floor(r/60),v=r%60;return a>0?`${a}小时${v}分钟`:`${v}分钟`},ws=r=>{if(!r||r<=0)return"";r=Math.floor(r);const a=Math.floor(r/1440),v=r%1440,C=Math.floor(v/60),l=v%60;return a>0?C>0?`${a}天${C}小时`:`${a}天`:C>0?l>0?`${C}小时${l}分钟`:`${C}小时`:`${l}分钟`},gt=r=>r?!!(r.rateLimitStatus&&(typeof r.rateLimitStatus=="string"&&r.rateLimitStatus==="limited"||typeof r.rateLimitStatus=="object"&&r.rateLimitStatus.isRateLimited===!0)):!1,yt=r=>{if(!r||!r.rateLimitStatus)return 0;if(typeof r.rateLimitStatus=="object"){const a=r.rateLimitStatus;if(Number.isFinite(a.minutesRemaining))return Math.max(0,Math.ceil(a.minutesRemaining));if(Number.isFinite(a.remainingMinutes))return Math.max(0,Math.ceil(a.remainingMinutes));if(Number.isFinite(a.remainingSeconds))return Math.max(0,Math.ceil(a.remainingSeconds/60));if(a.rateLimitResetAt){const v=new Date(a.rateLimitResetAt).getTime()-Date.now();return v>0?Math.ceil(v/6e4):0}}if(r.rateLimitUntil){const a=new Date().getTime(),C=new Date(r.rateLimitUntil).getTime()-a;return C>0?Math.ceil(C/6e4):0}return 0},$s=()=>{b.value=null,it.value=!0},Zt=()=>{it.value=!1,b.value=null},Nt=r=>{L.value=r,p.value=!0},Xt=r=>!r||!r.id?[]:G.value.filter(a=>{const v=r.id;return a.claudeAccountId===v||a.claudeConsoleAccountId===v||a.geminiAccountId===v||a.openaiAccountId===v||a.azureOpenaiAccountId===v||a.openaiAccountId===`responses:${v}`||a.geminiAccountId===`api:${v}`}),As=r=>{switch(r.platform){case"claude":return`/admin/claude-accounts/${r.id}`;case"claude-console":return`/admin/claude-console-accounts/${r.id}`;case"bedrock":return`/admin/bedrock-accounts/${r.id}`;case"openai":return`/admin/openai-accounts/${r.id}`;case"azure_openai":return`/admin/azure-openai-accounts/${r.id}`;case"openai-responses":return`/admin/openai-responses-accounts/${r.id}`;case"ccr":return`/admin/ccr-accounts/${r.id}`;case"gemini":return`/admin/gemini-accounts/${r.id}`;case"droid":return`/admin/droid-accounts/${r.id}`;case"gemini-api":return`/admin/gemini-api-accounts/${r.id}`;default:return null}},es=async r=>{var v,C;const a=As(r);if(!a)return{success:!1,message:"不支持的账户类型"};try{const l=await F.delete(a);return l.success?{success:!0,data:l}:{success:!1,message:l.message||"删除失败"}}catch(l){return{success:!1,message:((C=(v=l.response)==null?void 0:v.data)==null?void 0:C.message)||l.message||"删除失败"}}},Ft=async r=>{const v=Xt(r).length;let C=`确定要删除账户 "${r.name}" 吗?`;if(v>0&&(C+=`
|
||
|
||
⚠️ 注意:此账号有 ${v} 个 API Key 绑定。`,C+=`
|
||
删除后,这些 API Key 将自动切换为共享池模式。`),C+=`
|
||
|
||
此操作不可恢复。`,!await W("删除账户",C,"删除","取消"))return;const oe=await es(r);if(oe.success){const Ue=oe.data;let $e="账户已成功删除";(Ue==null?void 0:Ue.unboundKeys)>0&&($e+=`,${Ue.unboundKeys} 个 API Key 已切换为共享池模式`),R($e,"success"),N.value=N.value.filter(We=>We!==r.id),Je(),Oe.value=!1,me.value=!1,Te.value=!1,tt(),fs(!0),Qt(!0)}else R(oe.message||"删除失败","error")},Cs=async()=>{var ve;if(N.value.length===0){R("请先选择要删除的账户","warning");return}const r=new Map(V.value.map(fe=>[fe.id,fe])),a=N.value.map(fe=>r.get(fe)).filter(fe=>!!fe);if(a.length===0){R("选中的账户已不存在","warning"),N.value=[],Je();return}let v=`确定要删除选中的 ${a.length} 个账户吗?此操作不可恢复。`;const C=a.map(fe=>({account:fe,boundKeys:Xt(fe)})).filter(fe=>fe.boundKeys.length>0);if(C.length>0&&(v+=`
|
||
|
||
⚠️ 以下账户存在绑定的 API Key,将自动解绑:`,C.forEach(({account:fe,boundKeys:ce})=>{const se=fe.name||fe.email||fe.accountName||fe.id;v+=`
|
||
- ${se}: ${ce.length} 个`}),v+=`
|
||
删除后,这些 API Key 将切换为共享池模式。`),v+=`
|
||
|
||
请再次确认是否继续。`,!await W("批量删除账户",v,"删除","取消"))return;let oe=0,Ue=0,$e=0;const We=[];for(const fe of a){const ce=await es(fe);ce.success?(oe+=1,$e+=((ve=ce.data)==null?void 0:ve.unboundKeys)||0):(Ue+=1,We.push({name:fe.name||fe.email||fe.accountName||fe.id,message:ce.message||"删除失败"}))}if(oe>0){let fe=`成功删除 ${oe} 个账户`;$e>0&&(fe+=`,${$e} 个 API Key 已切换为共享池模式`),R(fe,Ue>0?"warning":"success"),N.value=[],K.value=!1,B.value=!1,Oe.value=!1,me.value=!1,await tt(!0)}if(Ue>0){const fe=We.map(ce=>`${ce.name}: ${ce.message}`).join(`
|
||
`);R(`有 ${Ue} 个账户删除失败:
|
||
${fe}`,oe>0?"warning":"error")}Je()},ts=async r=>{if(r.isResetting)return;let a=!1;if(window.showConfirm?a=await window.showConfirm("重置账户状态","确定要重置此账户的所有异常状态吗?这将清除限流状态、401错误计数等所有异常标记。","确定重置","取消"):a=confirm("确定要重置此账户的所有异常状态吗?"),!!a)try{r.isResetting=!0;let v="";if(r.platform==="openai")v=`/admin/openai-accounts/${r.id}/reset-status`;else if(r.platform==="openai-responses")v=`/admin/openai-responses-accounts/${r.id}/reset-status`;else if(r.platform==="claude")v=`/admin/claude-accounts/${r.id}/reset-status`;else if(r.platform==="claude-console")v=`/admin/claude-console-accounts/${r.id}/reset-status`;else if(r.platform==="ccr")v=`/admin/ccr-accounts/${r.id}/reset-status`;else if(r.platform==="droid")v=`/admin/droid-accounts/${r.id}/reset-status`;else if(r.platform==="gemini-api")v=`/admin/gemini-api-accounts/${r.id}/reset-status`;else if(r.platform==="gemini")v=`/admin/gemini-accounts/${r.id}/reset-status`;else{R("不支持的账户类型","error"),r.isResetting=!1;return}const C=await F.post(v);C.success?(R("账户状态已重置","success"),tt(!0)):R(C.message||"状态重置失败","error")}catch{R("状态重置失败","error")}finally{r.isResetting=!1}},qt=async r=>{if(!r.isTogglingSchedulable)try{r.isTogglingSchedulable=!0;let a;if(r.platform==="claude")a=`/admin/claude-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="claude-console")a=`/admin/claude-console-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="bedrock")a=`/admin/bedrock-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini")a=`/admin/gemini-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai")a=`/admin/openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="azure_openai")a=`/admin/azure-openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai-responses")a=`/admin/openai-responses-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="ccr")a=`/admin/ccr-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="droid")a=`/admin/droid-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini-api")a=`/admin/gemini-api-accounts/${r.id}/toggle-schedulable`;else{R("该账户类型暂不支持调度控制","warning");return}const v=await F.put(a);v.success?(r.schedulable=v.schedulable,R(v.schedulable?"已启用调度":"已禁用调度","success")):R(v.message||"操作失败","error")}catch{R("切换调度状态失败","error")}finally{r.isTogglingSchedulable=!1}},ss=()=>{it.value=!1,R("账户创建成功","success"),vs(),tt()},rs=()=>{p.value=!1,R("账户更新成功","success"),Oe.value=!1,tt()},Us=r=>!r.lastRefreshAt||r.lastRefreshAt===""?"Setup":"OAuth",Is=()=>"OAuth",Ts=()=>"OAuth",as=r=>{if(!r||typeof r!="object")return"OAuth";const a=r.isApiKeyMode??r.is_api_key_mode??r.apiKeyMode??r.api_key_mode;if(a===!0||a==="true"||a===1||a==="1")return"API Key";const v=r.authenticationMethod||r.authMethod||r.authentication_mode||r.authenticationMode||r.authentication_method||r.auth_type||r.authType||r.authentication_type||r.authenticationType||r.droidAuthType||r.droidAuthenticationMethod||r.method||r.auth||"";return typeof v=="string"&&v.trim().toLowerCase().replace(/[\s_-]/g,"")==="apikey"?"API Key":"OAuth"},_s=r=>as(r)==="API Key",ls=r=>{if(!r||typeof r!="object")return 0;if(Array.isArray(r.apiKeys))return r.apiKeys.filter(v=>v.status!=="error").length;if(typeof r.apiKeys=="string"&&r.apiKeys.trim())try{const v=JSON.parse(r.apiKeys);if(Array.isArray(v))return v.filter(C=>C.status!=="error").length}catch{}const a=[r.apiKeyCount,r.api_key_count,r.apiKeysCount,r.api_keys_count];for(const v of a){const C=Number(v);if(Number.isFinite(C)&&C>=0)return C}return 0},Ks=r=>{const a=ls(r),v="ml-1 inline-flex items-center gap-1 rounded-md border px-1.5 py-[1px] text-[10px] font-medium shadow-sm backdrop-blur-sm";return a>0?[v,"border-cyan-200 bg-cyan-50/90 text-cyan-700 dark:border-cyan-500/40 dark:bg-cyan-900/40 dark:text-cyan-200"]:[v,"border-rose-200 bg-rose-50/90 text-rose-600 dark:border-rose-500/40 dark:bg-rose-900/40 dark:text-rose-200"]},Ms=r=>{if(r.subscriptionInfo)try{const a=typeof r.subscriptionInfo=="string"?JSON.parse(r.subscriptionInfo):r.subscriptionInfo;return a.hasClaudeMax===!0?"Claude Max":a.hasClaudePro===!0?"Claude Pro":"Claude Free"}catch{return"Claude"}return"Claude"},os=r=>{if(r.schedulable!==!1)return null;if(r.platform==="claude-console"){if(r.status==="unauthorized")return"API Key无效或已过期(401错误)";if(r.overloadStatus==="overloaded")return"服务过载(529错误)";if(r.rateLimitStatus==="limited")return"触发限流(429错误)";if(r.status==="blocked"&&r.errorMessage)return r.errorMessage}if(r.platform==="claude"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.status==="temp_error"&&r.errorMessage||r.status==="error"&&r.errorMessage)return r.errorMessage;if(r.isRateLimited)return"触发限流(429错误)";if(r.stoppedReason)return r.stoppedReason;if(r.fiveHourAutoStopped==="true"||r.fiveHourAutoStopped===!0)return"5小时使用量接近限制,已自动停止调度"}if(r.platform==="openai"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.isRateLimited)return"触发限流(429错误)";if(r.status==="error"&&r.errorMessage)return r.errorMessage}if(r.platform==="openai-responses"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.isRateLimited)return"触发限流(429错误)";if(r.status==="error"&&r.errorMessage)return r.errorMessage;if(r.status==="rateLimited")return"触发限流(429错误)"}return r.stoppedReason?r.stoppedReason:r.errorMessage?r.errorMessage:"手动停止调度"},d=r=>r.status==="blocked"?"已封锁":r.status==="unauthorized"?"异常":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"?"限流中":r.status==="temp_error"?"临时异常":r.status==="error"||!r.isActive?"错误":r.schedulable===!1?"已暂停":"正常",t=r=>r.status==="blocked"||r.status==="unauthorized"?"bg-red-100 text-red-800":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"||r.status==="temp_error"?"bg-orange-100 text-orange-800":r.status==="error"||!r.isActive?"bg-red-100 text-red-800":r.schedulable===!1?"bg-gray-100 text-gray-800":"bg-green-100 text-green-800",re=r=>r.status==="blocked"||r.status==="unauthorized"?"bg-red-500":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"||r.status==="temp_error"?"bg-orange-500":r.status==="error"||!r.isActive?"bg-red-500":r.schedulable===!1?"bg-gray-500":"bg-green-500",ge=r=>Bt(r),i=(r,a=null)=>{if(!r)return"bg-gradient-to-r from-blue-500 to-indigo-600";if(a&&(a.isRateLimited||a.status==="rate_limited"||a.rateLimitStatus&&a.rateLimitStatus.isRateLimited||a.rateLimitStatus==="limited"))return"bg-gradient-to-r from-red-500 to-red-600";const C=String(r).toLowerCase();return C==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":C==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-600"},ae=r=>r.authType==="oauth",le=r=>!r||r.utilization===null||r.utilization===void 0?"-":`${r.utilization}%`,Le=r=>!r||r.utilization===null||r.utilization===void 0?"0%":`${r.utilization}%`,Pe=r=>{const a=(r==null?void 0:r.utilization)||0;return a<60?"bg-gradient-to-r from-blue-500 to-indigo-600":a<90?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-red-500 to-red-600"},_e=r=>{if(!r||!r.remainingSeconds)return"-";const a=r.remainingSeconds,v=Math.floor(a/86400),C=Math.floor(a%86400/3600),l=Math.floor(a%3600/60);return v>0?C>0?`${v}天${C}小时`:`${v}天`:C>0?l>0?`${C}小时${l}分钟`:`${C}小时`:l>0?`${l}分钟`:`${Math.floor(a%60)}秒`},S=r=>{if(!r)return null;const a=typeof r.usedPercent=="number"&&!Number.isNaN(r.usedPercent)?r.usedPercent:null,v=typeof r.resetAfterSeconds=="number"&&!Number.isNaN(r.resetAfterSeconds)?r.resetAfterSeconds:null,C=typeof r.remainingSeconds=="number"?r.remainingSeconds:null,l=r.resetAt?Date.parse(r.resetAt):null;return v!==null&&(C!==null&&C<=0||l!==null&&!Number.isNaN(l)&&Date.now()>=l)?0:a===null?null:Math.max(0,Math.min(100,a))},D=r=>{const a=S(r);return a===null?"bg-gradient-to-r from-gray-300 to-gray-400":a>=90?"bg-gradient-to-r from-red-500 to-red-600":a>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},be=r=>{const a=S(r);return a===null?"--":`${a.toFixed(1)}%`},O=r=>{const a=S(r);return a===null?"0%":`${a}%`},Ie=r=>r==="secondary"?"周限":"5h",Ke=r=>{if(!r)return"--";let a=r.remainingSeconds;if(a==null&&(a=r.resetAfterSeconds),a==null||Number.isNaN(Number(a)))return"--";a=Math.max(0,Math.floor(Number(a)));const v=Math.floor(a/86400),C=Math.floor(a%86400/3600),l=Math.floor(a%3600/60),oe=a%60;return v>0?C>0?`${v}天${C}小时`:`${v}天`:C>0?l>0?`${C}小时${l}分钟`:`${C}小时`:l>0?`${l}分钟`:`${oe}秒`},ze=r=>!r||r===0?"0.0000":r<1e-4?r.toExponential(2):r<.01?r.toFixed(6):r<1?r.toFixed(4):r.toFixed(2),De=r=>{var C,l;const a=Number(((l=(C=r==null?void 0:r.usage)==null?void 0:C.daily)==null?void 0:l.cost)||0),v=Number((r==null?void 0:r.dailyQuota)||0);return!v||v<=0?0:a/v*100},lt=r=>r>=90?"bg-red-500":r>=70?"bg-yellow-500":"bg-green-500",st=r=>{const a=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!a||a<=0)return 0;const v=Number((r==null?void 0:r.activeTaskCount)||0);return Math.min(100,v/a*100)},Ct=r=>r>=100?"bg-red-500":r>=80?"bg-yellow-500":"bg-green-500",Ns=r=>{const a=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!a||a<=0)return"text-gray-500 dark:text-gray-400";const v=Number((r==null?void 0:r.activeTaskCount)||0);return v>=a?"text-red-600 dark:text-red-400":v>=a*.8?"text-yellow-600 dark:text-yellow-400":"text-gray-700 dark:text-gray-200"},Ss=r=>{var C,l;const a=Number(((l=(C=r==null?void 0:r.usage)==null?void 0:C.daily)==null?void 0:l.cost)||0),v=Number((r==null?void 0:r.dailyQuota)||0);return!v||v<=0?"0.00":Math.max(0,v-a).toFixed(2)},Ds=r=>!r.usage||!r.usage.daily?"0.0000":r.usage.daily.cost!==void 0?ze(r.usage.daily.cost):"0.0000";ke(E,()=>{te.value=1,Je()}),ke(z,r=>{localStorage.setItem(rr,r.toString()),Je()}),ke(()=>ot.value.length,()=>{te.value>Fe.value&&(te.value=Fe.value||1),Je()}),ke(te,()=>{Je()}),ke($t,()=>{Je(),Gs(()=>{is()})}),ke(V,()=>{Wt()});const Ls=r=>r?new Date(r).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit"}):"",ns=r=>r?new Date(r)<new Date:!1,nr=r=>{if(!r)return!1;const a=new Date,C=(new Date(r)-a)/(1e3*60*60*24);return C>0&&C<=7},Ps=r=>{H.value=r},Bs=()=>{H.value=null},ir=async({accountId:r,expiresAt:a})=>{try{const v=V.value.find(oe=>oe.id===r);if(!v){R("未找到账户","error");return}let C="";switch(v.platform){case"claude":case"claude-oauth":C=`/admin/claude-accounts/${r}`;break;case"gemini":C=`/admin/gemini-accounts/${r}`;break;case"claude-console":C=`/admin/claude-console-accounts/${r}`;break;case"bedrock":C=`/admin/bedrock-accounts/${r}`;break;case"ccr":C=`/admin/ccr-accounts/${r}`;break;case"openai":C=`/admin/openai-accounts/${r}`;break;case"droid":C=`/admin/droid-accounts/${r}`;break;case"azure_openai":C=`/admin/azure-openai-accounts/${r}`;break;case"openai-responses":C=`/admin/openai-responses-accounts/${r}`;break;default:R(`不支持的平台类型: ${v.platform}`,"error");return}const l=await F.put(C,{expiresAt:a||null});l.success?(R("账户到期时间已更新","success"),v.expiresAt=a||null,Bs()):(R(l.message||"更新失败","error"),A.value&&A.value.resetSaving())}catch(v){console.error("更新账户过期时间失败:",v),R("更新失败","error"),A.value&&A.value.resetSaving()}},is=()=>{g.value&&(s.value=g.value.scrollWidth>g.value.clientWidth)};let zs=null;return us(()=>{tt(!0),Gs(()=>{g.value&&(zs=new ResizeObserver(()=>{is()}),zs.observe(g.value),is())}),window.addEventListener("resize",is)}),Os(()=>{zs&&zs.disconnect(),window.removeEventListener("resize",is)}),(r,a)=>{const v=dr,C=ur;return o(),n("div",$m,[e("div",Am,[e("div",Cm,[a[40]||(a[40]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 账户管理 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理 Claude、Gemini、OpenAI 等账户与代理配置 ")],-1)),e("div",Um,[e("div",Im,[e("div",Tm,[a[27]||(a[27]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-indigo-500 to-blue-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),He(js,{modelValue:f.value,"onUpdate:modelValue":a[0]||(a[0]=l=>f.value=l),icon:h.value==="asc"?"fa-sort-amount-up":"fa-sort-amount-down","icon-color":"text-indigo-500",options:nt.value,placeholder:"选择排序",onChange:cs},null,8,["modelValue","icon","options"])]),e("div",_m,[a[28]||(a[28]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),He(js,{modelValue:ee.value,"onUpdate:modelValue":a[1]||(a[1]=l=>ee.value=l),icon:"fa-server","icon-color":"text-blue-500",options:It.value,placeholder:"选择平台",onChange:ks},null,8,["modelValue","options"])]),e("div",Km,[a[29]||(a[29]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),He(js,{modelValue:ye.value,"onUpdate:modelValue":a[2]||(a[2]=l=>ye.value=l),icon:"fa-layer-group","icon-color":"text-purple-500",options:xt.value,placeholder:"选择分组",onChange:hs},null,8,["modelValue","options"])]),e("div",Mm,[a[30]||(a[30]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-emerald-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),He(js,{modelValue:X.value,"onUpdate:modelValue":a[3]||(a[3]=l=>X.value=l),icon:"fa-check-circle","icon-color":"text-green-500",options:ht.value,placeholder:"选择状态"},null,8,["modelValue","options"])]),e("div",Sm,[a[33]||(a[33]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",Dm,[k(e("input",{"onUpdate:modelValue":a[4]||(a[4]=l=>E.value=l),class:"h-10 w-full rounded-lg border border-gray-200 bg-white px-3 pl-9 text-sm text-gray-700 placeholder-gray-400 shadow-sm transition-all duration-200 hover:border-gray-300 focus:border-cyan-500 focus:outline-none focus:ring-2 focus:ring-cyan-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500 dark:hover:border-gray-500",placeholder:"搜索账户名称...",type:"text"},null,512),[[P,E.value]]),a[32]||(a[32]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),E.value?(o(),n("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:xs},a[31]||(a[31]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):c("",!0)])])]),e("div",Lm,[e("div",Pm,[He(v,{content:"查看账户统计汇总",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 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",onClick:a[5]||(a[5]=l=>q.value=!0)},a[34]||(a[34]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-violet-500 to-purple-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-chart-bar relative text-violet-500"},null,-1),e("span",{class:"relative"},"统计",-1)]))]),_:1})]),e("div",zm,[He(v,{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:M.value,onClick:[a[6]||(a[6]=Ut(l=>tt(!0),["ctrl","exact"])),a[7]||(a[7]=Ut(l=>tt(!1),["exact"])),a[8]||(a[8]=Ut(l=>tt(!0),["meta","exact"]))]},[a[35]||(a[35]=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:I(["fas relative text-green-500",M.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),a[36]||(a[36]=e("span",{class:"relative"},"刷新",-1))],8,jm)]),_:1})]),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:qe},[e("i",{class:I(we.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,u(we.value?"取消选择":"选择"),1)]),N.value.length>0?(o(),n("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:Cs},[a[37]||(a[37]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),a[38]||(a[38]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",Rm,"删除选中 ("+u(N.value.length)+")",1)])):c("",!0),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-green-500 to-green-600 px-5 py-2.5 text-sm font-medium text-white shadow-md transition-all duration-200 hover:from-green-600 hover:to-green-700 hover:shadow-lg sm:w-auto",onClick:Ut($s,["stop"])},a[39]||(a[39]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"添加账户",-1)]))])])]),M.value?(o(),n("div",Vm,a[41]||(a[41]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载账户...",-1)]))):ot.value.length===0?(o(),n("div",Om,a[42]||(a[42]=[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)]))):(o(),n("div",Em,[e("div",{ref_key:"tableContainerRef",ref:g,class:"table-container"},[e("table",Nm,[e("thead",Fm,[e("tr",null,[Ze.value?(o(),n("th",qm,[e("div",Gm,[k(e("input",{"onUpdate:modelValue":a[9]||(a[9]=l=>K.value=l),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:B.value,type:"checkbox",onChange:ys},null,40,Wm),[[Ve,K.value]])])])):c("",!0),e("th",{class:I(["name-column sticky z-20 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",Ze.value?"left-[50px]":"left-0"]),onClick:a[10]||(a[10]=l=>At("name"))},[a[43]||(a[43]=x(" 名称 ",-1)),f.value==="name"?(o(),n("i",{key:0,class:I(["fas",h.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Bm))],2),e("th",{class:"min-w-[220px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[11]||(a[11]=l=>At("platform"))},[a[44]||(a[44]=x(" 平台/类型 ",-1)),f.value==="platform"?(o(),n("i",{key:0,class:I(["fas",h.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Qm))]),e("th",{class:"w-[120px] min-w-[180px] max-w-[200px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[12]||(a[12]=l=>At("status"))},[a[45]||(a[45]=x(" 状态 ",-1)),f.value==="status"?(o(),n("i",{key:0,class:I(["fas",h.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Hm))]),a[51]||(a[51]=e("th",{class:"min-w-[150px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 今日使用 ",-1)),e("th",Jm,[e("div",Ym,[a[48]||(a[48]=e("span",null,"会话窗口",-1)),He(v,{placement:"top"},{content:Lt(()=>a[46]||(a[46]=[e("div",{class:"w-[260px] space-y-3 text-xs leading-relaxed text-white dark:text-gray-800"},[e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude 系列 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 会话窗口进度表示 5 小时窗口的时间推移,颜色提示当前调度状态。 "),e("div",{class:"space-y-1 pt-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-blue-500 to-indigo-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"正常:请求正常处理")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-yellow-500 to-orange-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"警告:接近限制")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-red-500 to-red-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"拒绝:达到速率限制")])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," OpenAI "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 进度条分别展示 5h 与周限窗口的额度使用比例,颜色含义与上方保持一致。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时使用量进度,到达重置时间后会自动归零。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-history mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"周限窗口:7天使用量进度,重置时同样回到 0%。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},'当"重置剩余"为 0 时,进度条与百分比会同步清零。')])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude OAuth 账户 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 展示三个窗口的使用率(utilization百分比),颜色含义同上。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时滑动窗口的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-calendar-alt mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"7d 窗口:7天总限额的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-gem mt-[2px] text-[10px] text-purple-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"Sonnet窗口:7天Sonnet模型专用限额。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-sync-alt mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"到达重置时间后自动归零。")])])])],-1)])),default:Lt(()=>[a[47]||(a[47]=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,__:[47]})])]),a[52]||(a[52]=e("th",{class:"min-w-[80px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),e("th",{class:"min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[13]||(a[13]=l=>At("priority"))},[a[49]||(a[49]=x(" 优先级 ",-1)),f.value==="priority"?(o(),n("i",{key:0,class:I(["fas",h.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Zm))]),a[53]||(a[53]=e("th",{class:"min-w-[150px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 代理 ",-1)),e("th",{class:"min-w-[110px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[14]||(a[14]=l=>At("expiresAt"))},[a[50]||(a[50]=x(" 到期时间 ",-1)),f.value==="expiresAt"?(o(),n("i",{key:0,class:I(["fas",h.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Xm))]),e("th",{class:I(["operations-column sticky right-0 z-20 px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300",s.value?"min-w-[170px]":"min-w-[200px]"])}," 操作 ",2)])]),e("tbody",ec,[(o(!0),n(Ae,null,Be($t.value,l=>{var oe,Ue;return o(),n("tr",{key:l.id,class:"table-row"},[Ze.value?(o(),n("td",tc,[e("div",sc,[k(e("input",{"onUpdate:modelValue":a[15]||(a[15]=$e=>N.value=$e),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:Je},null,40,rc),[[Ve,N.value]])])])):c("",!0),e("td",{class:I(["name-column sticky z-10 px-3 py-4",Ze.value?"left-[50px]":"left-0"])},[e("div",ac,[a[58]||(a[58]=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",lc,[e("div",oc,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:l.name},u(l.name),9,nc),l.accountType==="dedicated"?(o(),n("span",ic,a[54]||(a[54]=[e("i",{class:"fas fa-lock mr-1"},null,-1),x("专属 ",-1)]))):l.accountType==="group"?(o(),n("span",dc,a[55]||(a[55]=[e("i",{class:"fas fa-layer-group mr-1"},null,-1),x("分组调度 ",-1)]))):(o(),n("span",uc,a[56]||(a[56]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),x("共享 ",-1)])))]),l.groupInfos&&l.groupInfos.length>0?(o(),n("div",pc,[(o(!0),n(Ae,null,Be(l.groupInfos,$e=>(o(),n("span",{key:$e.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:`所属分组: ${$e.name}`},[a[57]||(a[57]=e("i",{class:"fas fa-folder mr-1"},null,-1)),x(u($e.name),1)],8,gc))),128))])):c("",!0),e("div",{class:"truncate text-xs text-gray-500 dark:text-gray-400",title:l.id},u(l.id),9,yc)])])],2),e("td",mc,[e("div",cc,[l.platform==="gemini"?(o(),n("div",xc,[a[59]||(a[59]=e("i",{class:"fas fa-robot text-xs text-yellow-700"},null,-1)),a[60]||(a[60]=e("span",{class:"text-xs font-semibold text-yellow-800"},"Gemini",-1)),a[61]||(a[61]=e("span",{class:"mx-1 h-4 w-px bg-yellow-300"},null,-1)),e("span",fc,u(Is()),1)])):l.platform==="claude-console"?(o(),n("div",bc,a[62]||(a[62]=[e("i",{class:"fas fa-terminal text-xs text-purple-700"},null,-1),e("span",{class:"text-xs font-semibold text-purple-800"},"Console",-1),e("span",{class:"mx-1 h-4 w-px bg-purple-300"},null,-1),e("span",{class:"text-xs font-medium text-purple-700"},"API Key",-1)]))):l.platform==="bedrock"?(o(),n("div",vc,a[63]||(a[63]=[e("i",{class:"fab fa-aws text-xs text-orange-700"},null,-1),e("span",{class:"text-xs font-semibold text-orange-800"},"Bedrock",-1),e("span",{class:"mx-1 h-4 w-px bg-orange-300"},null,-1),e("span",{class:"text-xs font-medium text-orange-700"},"AWS",-1)]))):l.platform==="openai"?(o(),n("div",kc,[a[64]||(a[64]=e("div",{class:"fa-openai"},null,-1)),a[65]||(a[65]=e("span",{class:"text-xs font-semibold text-gray-950"},"OpenAi",-1)),a[66]||(a[66]=e("span",{class:"mx-1 h-4 w-px bg-gray-400"},null,-1)),e("span",hc,u(Ts()),1)])):l.platform==="azure_openai"?(o(),n("div",wc,a[67]||(a[67]=[e("i",{class:"fab fa-microsoft text-xs text-blue-700 dark:text-blue-400"},null,-1),e("span",{class:"text-xs font-semibold text-blue-800 dark:text-blue-300"},"Azure OpenAI",-1),e("span",{class:"mx-1 h-4 w-px bg-blue-300 dark:bg-blue-600"},null,-1),e("span",{class:"text-xs font-medium text-blue-700 dark:text-blue-400"},"API Key",-1)]))):l.platform==="openai-responses"?(o(),n("div",$c,a[68]||(a[68]=[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-Api",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-400"},"API Key",-1)]))):l.platform==="claude"||l.platform==="claude-oauth"?(o(),n("div",Ac,[a[69]||(a[69]=e("i",{class:"fas fa-brain text-xs text-indigo-700"},null,-1)),e("span",Cc,u(Ms(l)),1),a[70]||(a[70]=e("span",{class:"mx-1 h-4 w-px bg-indigo-300"},null,-1)),e("span",Uc,u(Us(l)),1)])):l.platform==="ccr"?(o(),n("div",Ic,a[71]||(a[71]=[e("i",{class:"fas fa-code-branch text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"CCR",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-300"},"Relay",-1)]))):l.platform==="droid"?(o(),n("div",Tc,[a[73]||(a[73]=e("i",{class:"fas fa-robot text-xs text-cyan-700 dark:text-cyan-400"},null,-1)),a[74]||(a[74]=e("span",{class:"text-xs font-semibold text-cyan-800 dark:text-cyan-300"},"Droid",-1)),a[75]||(a[75]=e("span",{class:"mx-1 h-4 w-px bg-cyan-300 dark:bg-cyan-600"},null,-1)),e("span",_c,u(as(l)),1),_s(l)?(o(),n("span",{key:0,class:I(Ks(l))},[a[72]||(a[72]=e("i",{class:"fas fa-key text-[9px]"},null,-1)),e("span",null,"x"+u(ls(l)),1)],2)):c("",!0)])):l.platform==="gemini-api"?(o(),n("div",Kc,a[76]||(a[76]=[e("i",{class:"fas fa-robot text-xs text-amber-700 dark:text-amber-400"},null,-1),e("span",{class:"text-xs font-semibold text-amber-800 dark:text-amber-300"},"Gemini-API",-1),e("span",{class:"mx-1 h-4 w-px bg-amber-300 dark:bg-amber-600"},null,-1),e("span",{class:"text-xs font-medium text-amber-700 dark:text-amber-400"},"API Key",-1)]))):(o(),n("div",Mc,a[77]||(a[77]=[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",Sc,[e("div",Dc,[e("span",{class:I(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",l.status==="blocked"?"bg-orange-100 text-orange-800":l.status==="unauthorized"?"bg-red-100 text-red-800":l.status==="temp_error"?"bg-orange-100 text-orange-800":l.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},[e("div",{class:I(["mr-2 h-2 w-2 rounded-full",l.status==="blocked"?"bg-orange-500":l.status==="unauthorized"?"bg-red-500":l.status==="temp_error"?"bg-orange-500":l.isActive?"bg-green-500":"bg-red-500"])},null,2),x(" "+u(l.status==="blocked"?"已封锁":l.status==="unauthorized"?"异常":l.status==="temp_error"?"临时异常":l.isActive?"正常":"异常"),1)],2),l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"?(o(),n("span",Lc,[a[78]||(a[78]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),a[79]||(a[79]=x(" 限流中 ",-1)),l.rateLimitStatus&&typeof l.rateLimitStatus=="object"&&l.rateLimitStatus.minutesRemaining>0?(o(),n("span",Pc,"("+u(ws(l.rateLimitStatus.minutesRemaining))+")",1)):c("",!0)])):c("",!0),l.schedulable===!1?(o(),n("span",zc,[a[81]||(a[81]=e("i",{class:"fas fa-pause-circle mr-1"},null,-1)),a[82]||(a[82]=x(" 不可调度 ",-1)),os(l)?(o(),Ye(v,{key:0,content:os(l),effect:"dark",placement:"top"},{default:Lt(()=>a[80]||(a[80]=[e("i",{class:"fas fa-question-circle ml-1 cursor-help text-gray-500"},null,-1)])),_:2,__:[80]},1032,["content"])):c("",!0)])):c("",!0),l.status==="blocked"&&l.errorMessage?(o(),n("span",{key:2,class:"mt-1 max-w-xs truncate text-xs text-gray-500 dark:text-gray-400",title:l.errorMessage},u(l.errorMessage),9,jc)):c("",!0),l.accountType==="dedicated"?(o(),n("span",Rc," 绑定: "+u(l.boundApiKeysCount||0)+" 个API Key ",1)):c("",!0)])]),e("td",Vc,[l.usage&&l.usage.daily?(o(),n("div",Oc,[e("div",Ec,[a[83]||(a[83]=e("div",{class:"h-2 w-2 rounded-full bg-blue-500"},null,-1)),e("span",Nc,u(l.usage.daily.requests||0)+" 次",1)]),e("div",Fc,[a[84]||(a[84]=e("div",{class:"h-2 w-2 rounded-full bg-purple-500"},null,-1)),e("span",qc,u(Dt(l.usage.daily.allTokens||0))+"M",1)]),e("div",Gc,[a[85]||(a[85]=e("div",{class:"h-2 w-2 rounded-full bg-green-500"},null,-1)),e("span",Wc,"$"+u(Ds(l)),1)]),l.usage.averages&&l.usage.averages.rpm>0?(o(),n("div",Bc," 平均 "+u(l.usage.averages.rpm.toFixed(2))+" RPM ",1)):c("",!0)])):(o(),n("div",Qc,"暂无数据"))]),e("td",Hc,[l.platform==="claude"?(o(),n("div",Jc,[ae(l)&&l.claudeUsage?(o(),n("div",Yc,[e("div",Zc,[e("div",Xc,[a[86]||(a[86]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"}," 5h ",-1)),e("div",ex,[e("div",tx,[e("div",sx,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",Pe(l.claudeUsage.fiveHour)]),style:Qe({width:Le(l.claudeUsage.fiveHour)})},null,6)]),e("span",rx,u(le(l.claudeUsage.fiveHour)),1)])])]),e("div",ax," 重置剩余 "+u(_e(l.claudeUsage.fiveHour)),1)]),e("div",lx,[e("div",ox,[a[87]||(a[87]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-emerald-100 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-300"}," 7d ",-1)),e("div",nx,[e("div",ix,[e("div",dx,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",Pe(l.claudeUsage.sevenDay)]),style:Qe({width:Le(l.claudeUsage.sevenDay)})},null,6)]),e("span",ux,u(le(l.claudeUsage.sevenDay)),1)])])]),e("div",px," 重置剩余 "+u(_e(l.claudeUsage.sevenDay)),1)]),e("div",gx,[e("div",yx,[a[88]||(a[88]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-purple-100 px-2 py-0.5 text-[11px] font-medium text-purple-600 dark:bg-purple-500/20 dark:text-purple-300"}," sonnet ",-1)),e("div",mx,[e("div",cx,[e("div",xx,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",Pe(l.claudeUsage.sevenDayOpus)]),style:Qe({width:Le(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",fx,u(le(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",bx," 重置剩余 "+u(_e(l.claudeUsage.sevenDayOpus)),1)])])):!ae(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",vx,[l.usage&&l.usage.sessionWindow?(o(),n("div",kx,[e("div",hx,[a[89]||(a[89]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("span",wx,u(Dt(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",$x,[a[90]||(a[90]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("span",Ax," $"+u(ze(l.usage.sessionWindow.totalCost)),1)])])):c("",!0),e("div",Cx,[e("div",Ux,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",i(l.sessionWindow.sessionWindowStatus,l)]),style:Qe({width:l.sessionWindow.progress+"%"})},null,6)]),e("span",Ix,u(l.sessionWindow.progress)+"% ",1)]),e("div",Tx,[e("div",null,u(Jt(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("div",_x," 剩余 "+u(Yt(l.sessionWindow.remainingTime)),1)):c("",!0)])])):(o(),n("div",Kx,"暂无统计"))])):l.platform==="claude-console"?(o(),n("div",Mx,[e("div",null,[Number(l.dailyQuota)>0?(o(),n(Ae,{key:0},[e("div",Sx,[a[91]||(a[91]=e("span",{class:"text-gray-600 dark:text-gray-300"},"额度进度",-1)),e("span",Dx,u(De(l).toFixed(1))+"% ",1)]),e("div",Lx,[e("div",Px,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",lt(De(l))]),style:Qe({width:Math.min(100,De(l))+"%"})},null,6)]),e("span",zx," $"+u(ze(((Ue=(oe=l.usage)==null?void 0:oe.daily)==null?void 0:Ue.cost)||0))+" / $"+u(Number(l.dailyQuota).toFixed(2)),1)]),e("div",jx,[x(" 剩余 $"+u(Ss(l))+" ",1),e("span",Rx,"重置 "+u(l.quotaResetTime||"00:00"),1)])],64)):(o(),n("div",Vx,a[92]||(a[92]=[e("i",{class:"fas fa-minus"},null,-1)])))]),e("div",Ox,[e("div",Ex,[a[93]||(a[93]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发状态",-1)),Number(l.maxConcurrentTasks||0)>0?(o(),n("span",Nx,u(st(l).toFixed(0))+"% ",1)):c("",!0)]),Number(l.maxConcurrentTasks||0)>0?(o(),n("div",Fx,[e("div",qx,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",Ct(st(l))]),style:Qe({width:Math.min(100,st(l))+"%"})},null,6)]),e("span",{class:I(["min-w-[48px] text-xs font-medium",Ns(l)])},u(Number(l.activeTaskCount||0))+" / "+u(Number(l.maxConcurrentTasks||0)),3)])):(o(),n("div",Gx,a[94]||(a[94]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),x("并发无限制 ",-1)])))])])):l.platform==="openai"?(o(),n("div",Wx,[l.codexUsage?(o(),n("div",Bx,[e("div",Qx,[e("div",Hx,[e("span",Jx,u(Ie("primary")),1),e("div",Yx,[e("div",Zx,[e("div",Xx,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",D(l.codexUsage.primary)]),style:Qe({width:O(l.codexUsage.primary)})},null,6)]),e("span",ef,u(be(l.codexUsage.primary)),1)])])]),e("div",tf," 重置剩余 "+u(Ke(l.codexUsage.primary)),1)]),e("div",sf,[e("div",rf,[e("span",af,u(Ie("secondary")),1),e("div",lf,[e("div",of,[e("div",nf,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",D(l.codexUsage.secondary)]),style:Qe({width:O(l.codexUsage.secondary)})},null,6)]),e("span",df,u(be(l.codexUsage.secondary)),1)])])]),e("div",uf," 重置剩余 "+u(Ke(l.codexUsage.secondary)),1)])])):(o(),n("div",pf,a[95]||(a[95]=[e("span",{class:"text-xs"},"N/A",-1)])))])):(o(),n("div",gf,a[96]||(a[96]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",yf,u(Bt(l.lastUsedAt)),1),e("td",mf,[l.platform==="claude"||l.platform==="claude-console"||l.platform==="bedrock"||l.platform==="gemini"||l.platform==="openai"||l.platform==="openai-responses"||l.platform==="azure_openai"||l.platform==="ccr"||l.platform==="droid"||l.platform==="gemini-api"?(o(),n("div",cf,[e("div",xf,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-green-500 to-blue-600 transition-all duration-300",style:Qe({width:101-(l.priority||50)+"%"})},null,4)]),e("span",ff,u(l.priority||50),1)])):(o(),n("div",bf,a[97]||(a[97]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",vf,[Et(l.proxy)?(o(),n("div",{key:0,class:"break-all rounded bg-blue-50 px-2 py-1 font-mono text-xs",title:Et(l.proxy)},u(Et(l.proxy)),9,kf)):(o(),n("div",hf,"无代理"))]),e("td",wf,[e("div",$f,[l.expiresAt?(o(),n("span",Af,[ns(l.expiresAt)?(o(),n("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:Ut($e=>Ps(l),["stop"])},a[98]||(a[98]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),x(" 已过期 ",-1)]),8,Cf)):nr(l.expiresAt)?(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:Ut($e=>Ps(l),["stop"])},[a[99]||(a[99]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),x(" "+u(Ls(l.expiresAt)),1)],8,Uf)):(o(),n("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:Ut($e=>Ps(l),["stop"])},u(Ls(l.expiresAt)),9,If))])):(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:Ut($e=>Ps(l),["stop"])},a[100]||(a[100]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),x(" 永不过期 ",-1)]),8,Tf))])]),e("td",_f,[s.value?(o(),n("div",Rf,[e("button",{class:I(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isTogglingSchedulable?"cursor-not-allowed bg-gray-100 text-gray-400":l.schedulable?"bg-green-100 text-green-700 hover:bg-green-200":"bg-gray-100 text-gray-700 hover:bg-gray-200"]),disabled:l.isTogglingSchedulable,title:l.schedulable?"点击禁用调度":"点击启用调度",onClick:$e=>qt(l)},[e("i",{class:I(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",Of,u(l.schedulable?"调度":"停用"),1)],10,Vf),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:$e=>Nt(l)},a[106]||(a[106]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,Ef),He(vr,{actions:Rt(l)},null,8,["actions"])])):(o(),n("div",Kf,[_t(l)?(o(),n("button",{key:0,class:I(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isResetting?"cursor-not-allowed bg-gray-100 text-gray-400":"bg-yellow-100 text-yellow-700 hover:bg-yellow-200"]),disabled:l.isResetting,title:l.isResetting?"重置中...":"重置所有异常状态",onClick:$e=>ts(l)},[e("i",{class:I(["fas fa-redo",l.isResetting?"animate-spin":""])},null,2),a[101]||(a[101]=e("span",{class:"ml-1"},"重置状态",-1))],10,Mf)):c("",!0),e("button",{class:I(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isTogglingSchedulable?"cursor-not-allowed bg-gray-100 text-gray-400":l.schedulable?"bg-green-100 text-green-700 hover:bg-green-200":"bg-gray-100 text-gray-700 hover:bg-gray-200"]),disabled:l.isTogglingSchedulable,title:l.schedulable?"点击禁用调度":"点击启用调度",onClick:$e=>qt(l)},[e("i",{class:I(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",Df,u(l.schedulable?"调度":"停用"),1)],10,Sf),ft(l)?(o(),n("button",{key:1,class:"rounded bg-indigo-100 px-2.5 py-1 text-xs font-medium text-indigo-700 transition-colors hover:bg-indigo-200",title:"查看使用详情",onClick:$e=>wt(l)},a[102]||(a[102]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,Lf)):c("",!0),bt(l)?(o(),n("button",{key:2,class:"rounded bg-cyan-100 px-2.5 py-1 text-xs font-medium text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/40 dark:text-cyan-300 dark:hover:bg-cyan-800/50",title:"测试账户连通性",onClick:$e=>ut(l)},a[103]||(a[103]=[e("i",{class:"fas fa-vial"},null,-1),e("span",{class:"ml-1"},"测试",-1)]),8,Pf)):c("",!0),e("button",{class:"rounded bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200",title:"编辑账户",onClick:$e=>Nt(l)},a[104]||(a[104]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,zf),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:$e=>Ft(l)},a[105]||(a[105]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,jf)]))])])}),128))])])],512)])),!M.value&&ot.value.length>0?(o(),n("div",Nf,[(o(!0),n(Ae,null,Be($t.value,l=>{var oe,Ue,$e,We;return o(),n("div",{key:l.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",Ff,[e("div",qf,[Ze.value?k((o(),n("input",{key:0,"onUpdate:modelValue":a[16]||(a[16]=ve=>N.value=ve),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:Je},null,40,Gf)),[[Ve,N.value]]):c("",!0),e("div",{class:I(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg",l.platform==="claude"?"bg-gradient-to-br from-purple-500 to-purple-600":l.platform==="bedrock"?"bg-gradient-to-br from-orange-500 to-red-600":l.platform==="azure_openai"?"bg-gradient-to-br from-blue-500 to-cyan-600":l.platform==="openai"?"bg-gradient-to-br from-gray-600 to-gray-700":l.platform==="ccr"?"bg-gradient-to-br from-teal-500 to-emerald-600":l.platform==="droid"?"bg-gradient-to-br from-cyan-500 to-sky-600":"bg-gradient-to-br from-blue-500 to-blue-600"])},[e("i",{class:I(["text-sm text-white",l.platform==="claude"?"fas fa-brain":l.platform==="bedrock"?"fab fa-aws":l.platform==="azure_openai"?"fab fa-microsoft":l.platform==="openai"?"fas fa-openai":l.platform==="ccr"?"fas fa-code-branch":(l.platform==="droid","fas fa-robot")])},null,2)],2),e("div",null,[e("h4",Wf,u(l.name||l.email),1),e("div",Bf,[e("span",Qf,u(l.platform),1),a[107]||(a[107]=e("span",{class:"text-xs text-gray-400"},"|",-1)),e("span",Hf,u(l.type),1)])])]),e("span",{class:I(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",t(l)])},[e("div",{class:I(["mr-1.5 h-1.5 w-1.5 rounded-full",re(l)])},null,2),x(" "+u(d(l)),1)],2)]),e("div",Jf,[e("div",null,[a[111]||(a[111]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"今日使用",-1)),e("div",Yf,[e("div",Zf,[a[108]||(a[108]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-blue-500"},null,-1)),e("p",Xf,u(((Ue=(oe=l.usage)==null?void 0:oe.daily)==null?void 0:Ue.requests)||0)+" 次 ",1)]),e("div",eb,[a[109]||(a[109]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",tb,u(Dt(((We=($e=l.usage)==null?void 0:$e.daily)==null?void 0:We.allTokens)||0))+"M ",1)]),e("div",sb,[a[110]||(a[110]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",rb," $"+u(Ds(l)),1)])])]),e("div",null,[a[114]||(a[114]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"会话窗口",-1)),l.usage&&l.usage.sessionWindow?(o(),n("div",ab,[e("div",lb,[a[112]||(a[112]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",ob,u(Dt(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",nb,[a[113]||(a[113]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",ib," $"+u(ze(l.usage.sessionWindow.totalCost)),1)])])):(o(),n("div",db,"-"))])]),e("div",ub,[l.platform==="claude"?(o(),n("div",pb,[ae(l)&&l.claudeUsage?(o(),n("div",gb,[e("div",yb,[e("div",mb,[a[115]||(a[115]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"}," 5h ",-1)),e("div",cb,[e("div",xb,[e("div",fb,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",Pe(l.claudeUsage.fiveHour)]),style:Qe({width:Le(l.claudeUsage.fiveHour)})},null,6)]),e("span",bb,u(le(l.claudeUsage.fiveHour)),1)])])]),e("div",vb," 重置剩余 "+u(_e(l.claudeUsage.fiveHour)),1)]),e("div",kb,[e("div",hb,[a[116]||(a[116]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-emerald-100 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-300"}," 7d ",-1)),e("div",wb,[e("div",$b,[e("div",Ab,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",Pe(l.claudeUsage.sevenDay)]),style:Qe({width:Le(l.claudeUsage.sevenDay)})},null,6)]),e("span",Cb,u(le(l.claudeUsage.sevenDay)),1)])])]),e("div",Ub," 重置剩余 "+u(_e(l.claudeUsage.sevenDay)),1)]),e("div",Ib,[e("div",Tb,[a[117]||(a[117]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-purple-100 px-2 py-0.5 text-[11px] font-medium text-purple-600 dark:bg-purple-500/20 dark:text-purple-300"}," Opus ",-1)),e("div",_b,[e("div",Kb,[e("div",Mb,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",Pe(l.claudeUsage.sevenDayOpus)]),style:Qe({width:Le(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",Sb,u(le(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",Db," 重置剩余 "+u(_e(l.claudeUsage.sevenDayOpus)),1)])])):!ae(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",Lb,[e("div",Pb,[e("div",zb,[a[119]||(a[119]=e("span",{class:"font-medium text-gray-600 dark:text-gray-300"},"会话窗口",-1)),He(v,{content:"会话窗口进度不代表使用量,仅表示距离下一个5小时窗口的剩余时间",placement:"top"},{default:Lt(()=>a[118]||(a[118]=[e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600"},null,-1)])),_:1,__:[118]})]),e("span",jb,u(l.sessionWindow.progress)+"% ",1)]),e("div",Rb,[e("div",{class:I(["h-full transition-all duration-300",i(l.sessionWindow.sessionWindowStatus,l)]),style:Qe({width:l.sessionWindow.progress+"%"})},null,6)]),e("div",Vb,[e("span",Ob,u(Jt(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("span",Eb," 剩余 "+u(Yt(l.sessionWindow.remainingTime)),1)):(o(),n("span",Nb," 已结束 "))])])):(o(),n("div",Fb,"暂无统计"))])):l.platform==="openai"?(o(),n("div",qb,[l.codexUsage?(o(),n("div",Gb,[e("div",Wb,[e("div",Bb,[e("span",Qb,u(Ie("primary")),1),e("div",Hb,[e("div",Jb,[e("div",Yb,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",D(l.codexUsage.primary)]),style:Qe({width:O(l.codexUsage.primary)})},null,6)]),e("span",Zb,u(be(l.codexUsage.primary)),1)])])]),e("div",Xb," 重置剩余 "+u(Ke(l.codexUsage.primary)),1)]),e("div",ev,[e("div",tv,[e("span",sv,u(Ie("secondary")),1),e("div",rv,[e("div",av,[e("div",lv,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",D(l.codexUsage.secondary)]),style:Qe({width:O(l.codexUsage.secondary)})},null,6)]),e("span",ov,u(be(l.codexUsage.secondary)),1)])])]),e("div",nv," 重置剩余 "+u(Ke(l.codexUsage.secondary)),1)])])):c("",!0),l.codexUsage?c("",!0):(o(),n("div",iv,"暂无统计"))])):c("",!0),e("div",dv,[a[120]||(a[120]=e("span",{class:"text-gray-500 dark:text-gray-400"},"最后使用",-1)),e("span",uv,u(l.lastUsedAt?ge(l.lastUsedAt):"从未使用"),1)]),l.proxyConfig&&l.proxyConfig.type!=="none"?(o(),n("div",pv,[a[121]||(a[121]=e("span",{class:"text-gray-500 dark:text-gray-400"},"代理",-1)),e("span",gv,u(l.proxyConfig.type.toUpperCase()),1)])):c("",!0),e("div",yv,[a[122]||(a[122]=e("span",{class:"text-gray-500 dark:text-gray-400"},"优先级",-1)),e("span",mv,u(l.priority||50),1)])]),e("div",cv,[e("button",{class:I(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs transition-colors",l.schedulable?"bg-gray-50 text-gray-600 hover:bg-gray-100":"bg-green-50 text-green-600 hover:bg-green-100"]),disabled:l.isTogglingSchedulable,onClick:ve=>qt(l)},[e("i",{class:I(["fas",l.schedulable?"fa-pause":"fa-play"])},null,2),x(" "+u(l.schedulable?"暂停":"启用"),1)],10,xv),ft(l)?(o(),n("button",{key:0,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-indigo-50 px-3 py-2 text-xs text-indigo-600 transition-colors hover:bg-indigo-100",onClick:ve=>wt(l)},a[123]||(a[123]=[e("i",{class:"fas fa-chart-line"},null,-1),x(" 详情 ",-1)]),8,fv)):c("",!0),bt(l)?(o(),n("button",{key:1,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-cyan-50 px-3 py-2 text-xs text-cyan-600 transition-colors hover:bg-cyan-100 dark:bg-cyan-900/40 dark:text-cyan-300 dark:hover:bg-cyan-800/50",onClick:ve=>ut(l)},a[124]||(a[124]=[e("i",{class:"fas fa-vial"},null,-1),x(" 测试 ",-1)]),8,bv)):c("",!0),e("button",{class:"flex-1 rounded-lg bg-gray-50 px-3 py-2 text-xs text-gray-600 transition-colors hover:bg-gray-100",onClick:ve=>Nt(l)},a[125]||(a[125]=[e("i",{class:"fas fa-edit mr-1"},null,-1),x(" 编辑 ",-1)]),8,vv),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=>Ft(l)},a[126]||(a[126]=[e("i",{class:"fas fa-trash"},null,-1)]),8,kv)])])}),128))])):c("",!0)]),!M.value&&ot.value.length>0?(o(),n("div",hv,[e("div",wv,[e("span",$v," 共 "+u(ot.value.length)+" 条记录 ",1),e("div",Av,[a[127]||(a[127]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),k(e("select",{"onUpdate:modelValue":a[17]||(a[17]=l=>z.value=l),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm",onChange:a[18]||(a[18]=l=>te.value=1)},[(o(),n(Ae,null,Be(m,l=>e("option",{key:l,value:l},u(l),9,Cv)),64))],544),[[Vs,z.value]]),a[128]||(a[128]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",Uv,[e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:te.value===1,onClick:a[19]||(a[19]=l=>te.value--)},a[129]||(a[129]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,Iv),e("div",Tv,[St.value?(o(),n("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:a[20]||(a[20]=l=>te.value=1)}," 1 ")):c("",!0),gs.value?(o(),n("span",_v," ... ")):c("",!0),(o(!0),n(Ae,null,Be(pt.value,l=>(o(),n("button",{key:l,class:I(["rounded-md border px-3 py-1 text-xs font-medium transition-colors sm:text-sm",l===te.value?"border-blue-500 bg-blue-50 text-blue-600 dark:border-blue-400 dark:bg-blue-500/10 dark:text-blue-300":"border-gray-300 bg-white text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:oe=>te.value=l},u(l),11,Kv))),128)),Es.value?(o(),n("span",Mv," ... ")):c("",!0),Gt.value?(o(),n("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:a[21]||(a[21]=l=>te.value=Fe.value)},u(Fe.value),1)):c("",!0)]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:te.value===Fe.value||Fe.value===0,onClick:a[22]||(a[22]=l=>te.value++)},a[130]||(a[130]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,Sv)])])):c("",!0),it.value&&(!b.value||b.value!=="ccr")?(o(),Ye(tr,{key:1,onClose:Zt,onPlatformChanged:a[23]||(a[23]=l=>b.value=l),onSuccess:ss})):it.value&&b.value==="ccr"?(o(),Ye(sr,{key:2,onClose:Zt,onSuccess:ss})):c("",!0),p.value&&L.value&&L.value.platform==="ccr"?(o(),Ye(sr,{key:3,account:L.value,onClose:a[24]||(a[24]=l=>p.value=!1),onSuccess:rs},null,8,["account"])):p.value?(o(),Ye(tr,{key:4,account:L.value,onClose:a[25]||(a[25]=l=>p.value=!1),onSuccess:rs},null,8,["account"])):c("",!0),He(ar,{"cancel-text":rt(y).cancelText,"confirm-text":rt(y).confirmText,message:rt(y).message,show:rt(Re),title:rt(y).title,onCancel:rt(Q),onConfirm:rt(U)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),pe.value?(o(),Ye(Iy,{key:5,account:Se.value||{},"generated-at":ie.value,history:J.value,loading:he.value,overview:Ce.value,show:pe.value,summary:T.value,onClose:Vt},null,8,["account","generated-at","history","loading","overview","show","summary"])):c("",!0),He(Jy,{ref_key:"expiryEditModalRef",ref:A,account:H.value||{id:null,expiresAt:null,name:""},show:!!H.value,onClose:Bs,onSave:ir},null,8,["account","show"]),He(wm,{account:xe.value,show:j.value,onClose:Ot},null,8,["account","show"]),He(C,{modelValue:q.value,"onUpdate:modelValue":a[26]||(a[26]=l=>q.value=l),style:{maxWidth:"1200px"},title:"账户统计汇总",width:"90%"},{default:Lt(()=>[e("div",Dv,[e("div",Lv,[e("table",Pv,[a[132]||(a[132]=e("thead",{class:"bg-gray-100 dark:bg-gray-700"},[e("tr",null,[e("th",{class:"border border-gray-300 px-4 py-2 text-left dark:border-gray-600"}," 平台类型 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 正常 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 不可调度 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流0-1h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流1-5h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流5-12h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流12-24h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流>24h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 其他 "),e("th",{class:"border border-gray-300 bg-blue-50 px-4 py-2 text-center font-bold dark:border-gray-600 dark:bg-blue-900/30"}," 合计 ")])],-1)),e("tbody",null,[(o(!0),n(Ae,null,Be(Mt.value,l=>(o(),n("tr",{key:l.platform},[e("td",zv,u(l.platformLabel),1),e("td",jv,[e("span",Rv,u(l.normal),1)]),e("td",Vv,[e("span",Ov,u(l.unschedulable),1)]),e("td",Ev,[e("span",Nv,u(l.rateLimit0_1h),1)]),e("td",Fv,[e("span",qv,u(l.rateLimit1_5h),1)]),e("td",Gv,[e("span",Wv,u(l.rateLimit5_12h),1)]),e("td",Bv,[e("span",Qv,u(l.rateLimit12_24h),1)]),e("td",Hv,[e("span",Jv,u(l.rateLimitOver24h),1)]),e("td",Yv,[e("span",Zv,u(l.other),1)]),e("td",Xv,u(l.total),1)]))),128)),e("tr",e1,[a[131]||(a[131]=e("td",{class:"border border-gray-300 px-4 py-2 dark:border-gray-600"},"合计",-1)),e("td",t1,[e("span",s1,u(et.value.normal),1)]),e("td",r1,[e("span",a1,u(et.value.unschedulable),1)]),e("td",l1,[e("span",o1,u(et.value.rateLimit0_1h),1)]),e("td",n1,[e("span",i1,u(et.value.rateLimit1_5h),1)]),e("td",d1,[e("span",u1,u(et.value.rateLimit5_12h),1)]),e("td",p1,[e("span",g1,u(et.value.rateLimit12_24h),1)]),e("td",y1,[e("span",m1,u(et.value.rateLimitOver24h),1)]),e("td",c1,[e("span",x1,u(et.value.other),1)]),e("td",f1,u(et.value.total),1)])])])]),a[133]||(a[133]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," 注:限流时间列表示剩余限流时间在指定范围内的账户数量 ",-1))])]),_:1},8,["modelValue"])])}}},U1=ps(b1,[["__scopeId","data-v-4096cfc9"]]);export{U1 as default};
|