Files
AIGC/demo/deploy_baota/frontend/static/Register-ccda3886.js
2025-11-13 17:01:39 +08:00

2 lines
6.3 KiB
JavaScript

import{aA as ee,r as i,l as se,c as C,al as a,z as d,A as m,R as s,J as r,B as c,u as P,W as le,O as o,M as f,D as te,E as re,P as B}from"./vue-vendor-164775a6.js";import{_ as ae,u as oe,c as ne,d as ie}from"./index-2fb4354b.js";import{E as V,u as ue}from"./element-plus-4a19e5e8.js";import"./utils-edfcd65b.js";const ce={class:"register"},de={class:"register-header"},me={key:0,class:"checking-text"},fe={key:1,class:"error-text"},ge={key:2,class:"success-text"},pe={key:0,class:"checking-text"},_e={key:1,class:"error-text"},ve={key:2,class:"success-text"},we={key:0,class:"password-strength"},xe={class:"strength-bar"},ke={class:"strength-text"},he={class:"register-footer"},be={__name:"Register",setup(ye){const L=ee(),E=oe(),R=i(),v=i(!1),w=i(!1),x=i(!1),p=i(!1),k=i(!1),h=i(!1),_=i(!1),U=i(!1),b=i(0),t=se({username:"",email:"",password:"",confirmPassword:""}),M={username:[{required:!0,message:"请输入用户名",trigger:"blur"},{min:3,max:20,message:"用户名长度在 3 到 20 个字符",trigger:"blur"},{pattern:/^[a-zA-Z0-9_]+$/,message:"用户名只能包含字母、数字和下划线",trigger:"blur"}],email:[{required:!0,message:"请输入邮箱",trigger:"blur"},{type:"email",message:"请输入正确的邮箱格式",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"},{min:6,max:20,message:"密码长度在 6 到 20 个字符",trigger:"blur"}],confirmPassword:[{required:!0,message:"请确认密码",trigger:"blur"},{validator:(l,e,n)=>{e!==t.password?n(new Error("两次输入密码不一致")):n()},trigger:"blur"}]},q=async()=>{if(!t.username||t.username.length<3){Z();return}try{w.value=!0,x.value=!1,p.value=!1;const l=await ne(t.username);l.success&&(x.value=l.data.exists,p.value=!l.data.exists)}catch(l){console.error("Check username error:",l)}finally{w.value=!1}},N=async()=>{if(!t.email||!D(t.email)){$();return}try{k.value=!0,h.value=!1,_.value=!1;const l=await ie(t.email);l.success&&(h.value=l.data.exists,_.value=!l.data.exists)}catch(l){console.error("Check email error:",l)}finally{k.value=!1}},T=()=>{const l=t.password;if(!l){U.value=!1;return}U.value=!0;let e=0;l.length>=6&&e++,l.length>=8&&e++,/[a-z]/.test(l)&&e++,/[A-Z]/.test(l)&&e++,/[0-9]/.test(l)&&e++,/[^A-Za-z0-9]/.test(l)&&e++,b.value=Math.min(e,4)},Z=()=>{w.value=!1,x.value=!1,p.value=!1},$=()=>{k.value=!1,h.value=!1,_.value=!1},D=l=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(l),I=C(()=>["weak","fair","good","strong"][b.value-1]||"weak"),W=C(()=>`${b.value/4*100}%`),j=C(()=>["弱","一般","良好","强"][b.value-1]||"弱"),J=C(()=>v.value&&p.value&&_.value&&t.password&&t.confirmPassword&&t.password===t.confirmPassword),z=async()=>{if(R.value)try{if(!await R.value.validate())return;if(!v.value){V.warning("请先同意用户协议和隐私政策");return}const e=await E.registerUser(t);e.success?(V.success(e.message||"注册成功"),L.push("/login")):V.error(e.message||"注册失败")}catch(l){console.error("Register error:",l),V.error("注册失败,请重试")}};return(l,e)=>{const n=a("el-icon"),y=a("el-input"),A=a("Loading"),F=a("CircleCloseFilled"),S=a("CircleCheckFilled"),g=a("el-form-item"),O=a("el-checkbox"),G=a("el-button"),H=a("el-form"),K=a("router-link"),Q=a("el-card"),X=a("el-col"),Y=a("el-row");return d(),m("div",ce,[s(Y,{justify:"center",align:"middle",class:"register-container"},{default:r(()=>[s(X,{xs:22,sm:16,md:12,lg:8,xl:6},{default:r(()=>[s(Q,{class:"register-card"},{header:r(()=>[c("div",de,[s(n,{size:"32",color:"#67C23A"},{default:r(()=>[s(P(ue))]),_:1}),e[5]||(e[5]=c("h2",null,"用户注册",-1))])]),default:r(()=>[s(H,{ref_key:"registerFormRef",ref:R,model:t,rules:M,"label-width":"80px",onSubmit:le(z,["prevent"])},{default:r(()=>[s(g,{label:"用户名",prop:"username"},{default:r(()=>[s(y,{modelValue:t.username,"onUpdate:modelValue":e[0]||(e[0]=u=>t.username=u),placeholder:"请输入用户名","prefix-icon":"User",clearable:"",onBlur:q},null,8,["modelValue"]),w.value?(d(),m("div",me,[s(n,{class:"is-loading"},{default:r(()=>[s(A)]),_:1}),e[6]||(e[6]=o(" 检查中... ",-1))])):f("",!0),x.value?(d(),m("div",fe,[s(n,null,{default:r(()=>[s(F)]),_:1}),e[7]||(e[7]=o(" 用户名已存在 ",-1))])):f("",!0),p.value?(d(),m("div",ge,[s(n,null,{default:r(()=>[s(S)]),_:1}),e[8]||(e[8]=o(" 用户名可用 ",-1))])):f("",!0)]),_:1}),s(g,{label:"邮箱",prop:"email"},{default:r(()=>[s(y,{modelValue:t.email,"onUpdate:modelValue":e[1]||(e[1]=u=>t.email=u),placeholder:"请输入邮箱","prefix-icon":"Message",clearable:"",onBlur:N},null,8,["modelValue"]),k.value?(d(),m("div",pe,[s(n,{class:"is-loading"},{default:r(()=>[s(A)]),_:1}),e[9]||(e[9]=o(" 检查中... ",-1))])):f("",!0),h.value?(d(),m("div",_e,[s(n,null,{default:r(()=>[s(F)]),_:1}),e[10]||(e[10]=o(" 邮箱已存在 ",-1))])):f("",!0),_.value?(d(),m("div",ve,[s(n,null,{default:r(()=>[s(S)]),_:1}),e[11]||(e[11]=o(" 邮箱可用 ",-1))])):f("",!0)]),_:1}),s(g,{label:"密码",prop:"password"},{default:r(()=>[s(y,{modelValue:t.password,"onUpdate:modelValue":e[2]||(e[2]=u=>t.password=u),type:"password",placeholder:"请输入密码","prefix-icon":"Lock","show-password":"",clearable:"",onInput:T},null,8,["modelValue"]),U.value?(d(),m("div",we,[c("div",xe,[c("div",{class:te(["strength-fill",I.value]),style:re({width:W.value})},null,6)]),c("span",ke,B(j.value),1)])):f("",!0)]),_:1}),s(g,{label:"确认密码",prop:"confirmPassword"},{default:r(()=>[s(y,{modelValue:t.confirmPassword,"onUpdate:modelValue":e[3]||(e[3]=u=>t.confirmPassword=u),type:"password",placeholder:"请再次输入密码","prefix-icon":"Lock","show-password":"",clearable:""},null,8,["modelValue"])]),_:1}),s(g,null,{default:r(()=>[s(O,{modelValue:v.value,"onUpdate:modelValue":e[4]||(e[4]=u=>v.value=u)},{default:r(()=>[...e[12]||(e[12]=[o(" 我已阅读并同意 ",-1),c("a",{href:"#",class:"terms-link"},"《用户协议》",-1),o(" 和 ",-1),c("a",{href:"#",class:"terms-link"},"《隐私政策》",-1)])]),_:1},8,["modelValue"])]),_:1}),s(g,null,{default:r(()=>[s(G,{type:"success",size:"large",loading:P(E).loading,disabled:!J.value,onClick:z,class:"register-button"},{default:r(()=>[o(B(P(E).loading?"注册中...":"注册"),1)]),_:1},8,["loading","disabled"])]),_:1})]),_:1},8,["model"]),c("div",he,[c("p",null,[e[14]||(e[14]=o("已有账号?",-1)),s(K,{to:"/login",class:"login-link"},{default:r(()=>[...e[13]||(e[13]=[o("立即登录",-1)])]),_:1})])])]),_:1})]),_:1})]),_:1})])}}},Ue=ae(be,[["__scopeId","data-v-1c905c9c"]]);export{Ue as default};