perf: 登录和注册

This commit is contained in:
褚宏光 2025-06-09 11:06:52 +08:00
parent ac31e4556b
commit 8347189271
8 changed files with 98 additions and 0 deletions

1
login/dist/assets/Login-72b21abd.css vendored Normal file
View File

@ -0,0 +1 @@
.login-container[data-v-3dee11cf]{height:100vh;display:flex;justify-content:center;align-items:center;background-color:#f5f7fa}.login-container .login-card[data-v-3dee11cf]{width:400px}.login-container .login-card .card-header[data-v-3dee11cf]{text-align:center}.login-container .login-card .card-header h2[data-v-3dee11cf]{margin:0;color:#303133}.login-container .login-card .captcha-container[data-v-3dee11cf]{display:flex;gap:10px}.login-container .login-card .captcha-container .captcha-input[data-v-3dee11cf]{flex:1}.login-container .login-card .captcha-container .captcha-image[data-v-3dee11cf]{height:40px;cursor:pointer}.login-container .login-card .sms-container[data-v-3dee11cf]{display:flex;gap:10px}.login-container .login-card .sms-container .el-input[data-v-3dee11cf]{flex:1}.login-container .login-card .submit-btn[data-v-3dee11cf]{width:100%}.login-container .login-card .form-footer[data-v-3dee11cf]{text-align:center;margin-top:15px}.login-container .login-card .form-footer a[data-v-3dee11cf]{color:#409eff;text-decoration:none}.login-container .login-card .form-footer a[data-v-3dee11cf]:hover{text-decoration:underline}

1
login/dist/assets/Login-819146b6.js vendored Normal file
View File

@ -0,0 +1 @@
import{_ as F,u as R,r as n,a as M,c as y,o as T,b as $,d as r,e as k,f as V,g as o,w as t,E as d,h as u,i as j,j as D,k as v,t as K,l as z}from"./index-8189492d.js";import{g as A,s as G,l as H}from"./auth-b3e4958b.js";const J={class:"login-container"},O={class:"captcha-container"},P=["src"],Q={class:"sms-container"},W={class:"form-footer"},X={__name:"Login",setup(Y){const x=R(),p=n(null),_=n(!1),f=n(""),h=n(""),s=n(0),i=n(null),a=M({mobile:"",captchaCode:"",smsCode:""}),w={mobile:[{required:!0,message:"请输入手机号",trigger:"blur"},{pattern:/^1[3-9]\d{9}$/,message:"请输入正确的手机号",trigger:"blur"}],captchaCode:[{required:!0,message:"请输入图形验证码",trigger:"blur"}],smsCode:[{required:!0,message:"请输入短信验证码",trigger:"blur"}]},S=y(()=>a.mobile&&a.captchaCode&&s.value===0),I=y(()=>s.value>0?`${s.value}秒后重试`:"获取验证码"),C=async()=>{try{const l=await A();l.data.code===200&&(f.value=l.data.data.captcha_image,h.value=l.data.data.captcha_key)}catch{d.error("获取验证码失败")}},B=()=>{s.value=60,i.value=setInterval(()=>{s.value>0?s.value--:clearInterval(i.value)},1e3)},L=async()=>{try{(await G({mobile:a.mobile,type:"login",captcha_key:h.value,captcha_code:a.captchaCode})).data.code===200&&(d.success("验证码发送成功"),B())}catch{d.error("验证码发送失败")}},N=async()=>{p.value&&await p.value.validate(async l=>{if(l){_.value=!0;try{const e=await H({mobile:a.mobile,sms_code:a.smsCode});e.data.code===200&&(localStorage.setItem("token",e.data.data.token),d.success("登录成功"),x.push("/"))}catch{d.error("登录失败")}finally{_.value=!1}}})};return T(()=>{C()}),$(()=>{i.value&&clearInterval(i.value)}),(l,e)=>{const g=r("el-input"),m=r("el-form-item"),b=r("el-button"),U=r("router-link"),q=r("el-form"),E=r("el-card");return k(),V("div",J,[o(E,{class:"login-card"},{header:t(()=>e[3]||(e[3]=[u("div",{class:"card-header"},[u("h2",null,"用户登录")],-1)])),default:t(()=>[o(q,{model:a,rules:w,ref_key:"loginFormRef",ref:p},{default:t(()=>[o(m,{prop:"mobile"},{default:t(()=>[o(g,{modelValue:a.mobile,"onUpdate:modelValue":e[0]||(e[0]=c=>a.mobile=c),placeholder:"请输入手机号","prefix-icon":j(z)},null,8,["modelValue","prefix-icon"])]),_:1}),o(m,{prop:"captchaCode"},{default:t(()=>[u("div",O,[o(g,{modelValue:a.captchaCode,"onUpdate:modelValue":e[1]||(e[1]=c=>a.captchaCode=c),placeholder:"请输入图形验证码",class:"captcha-input"},null,8,["modelValue"]),f.value?(k(),V("img",{key:0,src:f.value,class:"captcha-image",onClick:C},null,8,P)):D("",!0)])]),_:1}),o(m,{prop:"smsCode"},{default:t(()=>[u("div",Q,[o(g,{modelValue:a.smsCode,"onUpdate:modelValue":e[2]||(e[2]=c=>a.smsCode=c),placeholder:"请输入短信验证码"},null,8,["modelValue"]),o(b,{type:"primary",disabled:!S.value,onClick:L},{default:t(()=>[v(K(I.value),1)]),_:1},8,["disabled"])])]),_:1}),o(m,null,{default:t(()=>[o(b,{type:"primary",onClick:N,loading:_.value,class:"submit-btn"},{default:t(()=>e[4]||(e[4]=[v(" 登录 ")])),_:1,__:[4]},8,["loading"])]),_:1}),u("div",W,[o(U,{to:"/register"},{default:t(()=>e[5]||(e[5]=[v("还没有账号?立即注册")])),_:1,__:[5]})])]),_:1},8,["model"])]),_:1})])}}},ae=F(X,[["__scopeId","data-v-3dee11cf"]]);export{ae as default};

View File

@ -0,0 +1 @@
import{_ as F,u as M,r as d,a as T,c as b,o as $,b as j,d as c,e as V,f as w,g as t,w as o,E as i,h as m,i as D,j as K,k as v,t as z,l as A}from"./index-8189492d.js";import{g as G,s as H,r as J}from"./auth-b3e4958b.js";const L={class:"register-container"},O={class:"captcha-container"},P=["src"],Q={class:"sms-container"},W={class:"form-footer"},X={__name:"Register",setup(Y){const k=M(),_=d(null),f=d(!1),g=d(""),h=d(""),r=d(0),p=d(null),a=T({realName:"",mobile:"",captchaCode:"",smsCode:"",password:""}),x={mobile:[{required:!0,message:"请输入手机号",trigger:"blur"},{pattern:/^1[3-9]\d{9}$/,message:"请输入正确的手机号",trigger:"blur"}],captchaCode:[{required:!0,message:"请输入图形验证码",trigger:"blur"}],smsCode:[{required:!0,message:"请输入短信验证码",trigger:"blur"}]},N=b(()=>a.mobile&&a.captchaCode&&r.value===0),R=b(()=>r.value>0?`${r.value}秒后重试`:"获取验证码"),C=async()=>{try{const s=await G();s.data.code===200&&(g.value=s.data.data.captcha_image,h.value=s.data.data.captcha_key)}catch{i.error("获取验证码失败")}},S=()=>{r.value=60,p.value=setInterval(()=>{r.value>0?r.value--:clearInterval(p.value)},1e3)},I=async()=>{try{(await H({mobile:a.mobile,type:"register",captcha_key:h.value,captcha_code:a.captchaCode})).data.code===200&&(i.success("验证码发送成功"),S())}catch{i.error("验证码发送失败")}},U=async()=>{_.value&&await _.value.validate(async s=>{if(s){f.value=!0;try{const e=await J({real_name:a.realName,mobile:a.mobile,sms_code:a.smsCode,password:a.password});e.data.code===200&&(localStorage.setItem("token",e.data.data.token),i.success("注册成功"),k.push("/"))}catch{i.error("注册失败")}finally{f.value=!1}}})};return $(()=>{C()}),j(()=>{p.value&&clearInterval(p.value)}),(s,e)=>{const u=c("el-input"),n=c("el-form-item"),y=c("el-button"),B=c("router-link"),q=c("el-form"),E=c("el-card");return V(),w("div",L,[t(E,{class:"register-card"},{header:o(()=>e[5]||(e[5]=[m("div",{class:"card-header"},[m("h2",null,"用户注册")],-1)])),default:o(()=>[t(q,{model:a,rules:x,ref_key:"registerFormRef",ref:_},{default:o(()=>[t(n,{prop:"realName"},{default:o(()=>[t(u,{modelValue:a.realName,"onUpdate:modelValue":e[0]||(e[0]=l=>a.realName=l),placeholder:"请输入昵称(选填)"},null,8,["modelValue"])]),_:1}),t(n,{prop:"mobile"},{default:o(()=>[t(u,{modelValue:a.mobile,"onUpdate:modelValue":e[1]||(e[1]=l=>a.mobile=l),placeholder:"请输入手机号","prefix-icon":D(A)},null,8,["modelValue","prefix-icon"])]),_:1}),t(n,{prop:"captchaCode"},{default:o(()=>[m("div",O,[t(u,{modelValue:a.captchaCode,"onUpdate:modelValue":e[2]||(e[2]=l=>a.captchaCode=l),placeholder:"请输入图形验证码",class:"captcha-input"},null,8,["modelValue"]),g.value?(V(),w("img",{key:0,src:g.value,class:"captcha-image",onClick:C},null,8,P)):K("",!0)])]),_:1}),t(n,{prop:"smsCode"},{default:o(()=>[m("div",Q,[t(u,{modelValue:a.smsCode,"onUpdate:modelValue":e[3]||(e[3]=l=>a.smsCode=l),placeholder:"请输入短信验证码"},null,8,["modelValue"]),t(y,{type:"primary",disabled:!N.value,onClick:I},{default:o(()=>[v(z(R.value),1)]),_:1},8,["disabled"])])]),_:1}),t(n,{prop:"password"},{default:o(()=>[t(u,{modelValue:a.password,"onUpdate:modelValue":e[4]||(e[4]=l=>a.password=l),type:"password",placeholder:"请输入密码(选填)","show-password":""},null,8,["modelValue"])]),_:1}),t(n,null,{default:o(()=>[t(y,{type:"primary",onClick:U,loading:f.value,class:"submit-btn"},{default:o(()=>e[6]||(e[6]=[v(" 注册 ")])),_:1,__:[6]},8,["loading"])]),_:1}),m("div",W,[t(B,{to:"/login"},{default:o(()=>e[7]||(e[7]=[v("已有账号?立即登录")])),_:1,__:[7]})])]),_:1},8,["model"])]),_:1})])}}},ae=F(X,[["__scopeId","data-v-d296ce24"]]);export{ae as default};

View File

@ -0,0 +1 @@
.register-container[data-v-d296ce24]{height:100vh;display:flex;justify-content:center;align-items:center;background-color:#f5f7fa}.register-container .register-card[data-v-d296ce24]{width:400px}.register-container .register-card .card-header[data-v-d296ce24]{text-align:center}.register-container .register-card .card-header h2[data-v-d296ce24]{margin:0;color:#303133}.register-container .register-card .captcha-container[data-v-d296ce24]{display:flex;gap:10px}.register-container .register-card .captcha-container .captcha-input[data-v-d296ce24]{flex:1}.register-container .register-card .captcha-container .captcha-image[data-v-d296ce24]{height:40px;cursor:pointer}.register-container .register-card .sms-container[data-v-d296ce24]{display:flex;gap:10px}.register-container .register-card .sms-container .el-input[data-v-d296ce24]{flex:1}.register-container .register-card .submit-btn[data-v-d296ce24]{width:100%}.register-container .register-card .form-footer[data-v-d296ce24]{text-align:center;margin-top:15px}.register-container .register-card .form-footer a[data-v-d296ce24]{color:#409eff;text-decoration:none}.register-container .register-card .form-footer a[data-v-d296ce24]:hover{text-decoration:underline}

6
login/dist/assets/auth-b3e4958b.js vendored Normal file

File diff suppressed because one or more lines are too long

72
login/dist/assets/index-8189492d.js vendored Normal file

File diff suppressed because one or more lines are too long

1
login/dist/assets/index-91cf2fdd.css vendored Normal file

File diff suppressed because one or more lines are too long

15
login/dist/index.html vendored Normal file
View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>用户认证系统</title>
<script type="module" crossorigin src="/assets/index-8189492d.js"></script>
<link rel="stylesheet" href="/assets/index-91cf2fdd.css">
</head>
<body>
<div id="app"></div>
</body>
</html>