Files
usernode/internal/webui/dist/assets/LoginView-khxYNCfG.js
T
cao.wangrenbo 13c21dfd7e build(webui): 按 podman 正常流程重建前端产物并嵌入 Go 二进制
- make web-build(ws-usernode-web-dev 容器)重建 web/dist → internal/webui/dist
- 清空旧 hash 产物,避免 go:embed 冗余
- make build-embed 产出 bin/usernode(22MB,含新主题前端)
2026-08-30 11:46:21 +08:00

2 lines
4.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{d as D,u as H,o as R,c as $,a,w as o,r as p,g as G,b as n,e as C,f as J,h as r,i as O,j as k,k as f,l as B,t as Q,m as K,E as g,n as W,p as X,q as Y}from"./index-7syy_I7y.js";import{_ as Z}from"./_plugin-vue_export-helper-DlAUqK2U.js";const ee={class:"auth-page"},ae={class:"auth-brand"},oe={class:"brand-icon"},te={class:"inline-row"},le={class:"inline-row otp-row"},ne={class:"auth-foot"},se=D({__name:"LoginView",setup(ue){const L=J(),x=H(),v=p("admin"),c=p(!1),h=p(!1),u=K({username:"",password:""}),t=K({username:"",code:"",captcha_id:"",captcha_code:""}),s=p(null),b=p(!1),d=p(0);let S;async function i(){b.value=!0;try{s.value=await G()}catch{s.value=null}finally{b.value=!1}}function E(U){d.value=U,S=window.setInterval(()=>{d.value-=1,d.value<=0&&(window.clearInterval(S),d.value=0)},1e3)}async function y(){if(!u.username||!u.password){g.warning("请输入用户名和密码");return}c.value=!0;try{await W(u),await x.fetchMe(),L.push("/admin/dashboard")}catch{}finally{c.value=!1}}async function M(){if(!t.username||!t.captcha_code){g.warning("请输入用户名和图形验证码");return}if(!(!s.value&&(await i(),!s.value))){h.value=!0;try{await X({username:t.username,captcha_id:s.value.captcha_id,captcha_code:t.captcha_code}),g.success("验证码已发送(邮件或 CLIusernode user otp"),E(60),t.captcha_code="",await i()}catch{await i()}finally{h.value=!1}}}async function V(){if(!t.username||!t.code){g.warning("请输入用户名和 OTP 验证码");return}c.value=!0;try{await Y({username:t.username,code:t.code}),await x.fetchMe(),L.push("/me/profile")}catch{}finally{c.value=!1}}function N(){v.value==="user"&&!s.value&&i()}return R(()=>{v.value==="user"&&i()}),(U,e)=>{const P=n("Monitor"),A=n("el-icon"),m=n("el-input"),_=n("el-form-item"),w=n("el-button"),T=n("el-form"),I=n("el-tab-pane"),F=n("el-image"),j=n("el-tabs"),q=n("router-link"),z=n("el-card");return C(),$("div",ee,[a(z,{class:"auth-card",shadow:"never"},{default:o(()=>[r("div",ae,[r("span",oe,[a(A,{size:26},{default:o(()=>[a(P)]),_:1})]),e[6]||(e[6]=r("h2",null,"服务器用户管理节点",-1)),e[7]||(e[7]=r("span",{class:"sub"},"账号申请 · SSH 密钥 · 使用审计",-1))]),a(j,{modelValue:v.value,"onUpdate:modelValue":e[5]||(e[5]=l=>v.value=l),stretch:"",onTabChange:N},{default:o(()=>[a(I,{label:"管理员登录",name:"admin"},{default:o(()=>[a(T,{"label-position":"top",onSubmit:O(y,["prevent"])},{default:o(()=>[a(_,{label:"用户名"},{default:o(()=>[a(m,{modelValue:u.username,"onUpdate:modelValue":e[0]||(e[0]=l=>u.username=l),placeholder:"管理员用户名",autocomplete:"username"},null,8,["modelValue"])]),_:1}),a(_,{label:"密码"},{default:o(()=>[a(m,{modelValue:u.password,"onUpdate:modelValue":e[1]||(e[1]=l=>u.password=l),type:"password",placeholder:"密码","show-password":"",autocomplete:"current-password",onKeyup:k(y,["enter"])},null,8,["modelValue"])]),_:1}),a(w,{type:"primary",class:"auth-submit",loading:c.value,onClick:y},{default:o(()=>[...e[8]||(e[8]=[f("登录",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),a(I,{label:"外部用户登录",name:"user"},{default:o(()=>[a(T,{"label-position":"top",onSubmit:O(V,["prevent"])},{default:o(()=>[a(_,{label:"用户名"},{default:o(()=>[a(m,{modelValue:t.username,"onUpdate:modelValue":e[2]||(e[2]=l=>t.username=l),placeholder:"用户名(可带或不带 ext_ 前缀)",autocomplete:"username"},null,8,["modelValue"])]),_:1}),a(_,{label:"图形验证码"},{default:o(()=>[r("div",te,[a(m,{modelValue:t.captcha_code,"onUpdate:modelValue":e[3]||(e[3]=l=>t.captcha_code=l),placeholder:"4 位验证码",maxlength:"4",onKeyup:k(M,["enter"])},null,8,["modelValue"]),s.value?(C(),B(F,{key:0,src:s.value.image,fit:"contain",class:"captcha-img",title:"点击刷新",onClick:i},null,8,["src"])):(C(),B(w,{key:1,loading:b.value,onClick:i},{default:o(()=>[...e[9]||(e[9]=[f("获取",-1)])]),_:1},8,["loading"]))])]),_:1}),a(_,{label:"登录验证码(OTP"},{default:o(()=>[r("div",le,[a(m,{modelValue:t.code,"onUpdate:modelValue":e[4]||(e[4]=l=>t.code=l),placeholder:"6 位 OTP(邮件或 CLI 获取)",maxlength:"6",class:"otp-input",onKeyup:k(V,["enter"])},null,8,["modelValue"]),a(w,{loading:h.value,disabled:d.value>0,onClick:M},{default:o(()=>[f(Q(d.value>0?`${d.value}s 后重发`:"发送验证码"),1)]),_:1},8,["loading","disabled"])])]),_:1}),a(w,{type:"primary",class:"auth-submit",loading:c.value,onClick:V},{default:o(()=>[...e[10]||(e[10]=[f("登录",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),r("div",ne,[a(q,{to:"/apply"},{default:o(()=>[...e[11]||(e[11]=[f("还没有账号?申请新账号",-1)])]),_:1})])]),_:1})])}}}),re=Z(se,[["__scopeId","data-v-273ff0da"]]);export{re as default};