11<template >
22 <div >
3- <el-dialog title =" Register" :visible.sync =" $store.state.user.showregister" width =" 500px" >
4- <el-form :model =" ldata" >
5- <el-form-item label =" Username" >
3+ <el-dialog title =" Register" :visible.sync =" $store.state.user.showregister" :destroy-on-close = " true " :close-on-click-modal = " false " width =" 500px" >
4+ <el-form :model =" ldata" ref = " registerForm " :rules = " rules " :status-icon = " true " >
5+ <el-form-item label =" Username" prop = " username " >
66 <el-input v-model =" ldata.username" ></el-input >
77 </el-form-item >
8- <el-form-item label =" Password" >
8+ <el-form-item label =" Password" prop = " password " >
99 <el-input type =" password" v-model =" ldata.password" ></el-input >
1010 </el-form-item >
11- <el-form-item label =" Repeat password" >
11+ <el-form-item label =" Repeat password" prop = " passwdrepeat " >
1212 <el-input type =" password" v-model =" ldata.passwdrepeat" ></el-input >
1313 </el-form-item >
14- <el-form-item label =" Email" >
14+ <el-form-item label =" Email" prop = " email " >
1515 <el-input type =" email" v-model =" ldata.email" ></el-input >
1616 </el-form-item >
1717 <el-form-item >
1818 <el-button type =" primary" v-on:click =" onSubmit();" :loading =" buttonLoading" >Register</el-button >
1919 <el-button v-on:click =" $store.state.user.showregister = false;" >Cancel</el-button >
20+ <el-button v-on:click =" $refs['registerForm'].resetFields();" >Reset</el-button >
2021 </el-form-item >
2122 </el-form >
2223 </el-dialog >
@@ -29,52 +30,107 @@ import apiurl from './../../apiurl';
2930export default {
3031 name: ' UserRegister' ,
3132 data () {
33+ let validatePasswd = (rule , value , callback ) => {
34+ if (value === ' ' || value === this .ldata .password ) {
35+ callback ();
36+ } else {
37+ callback (new Error (' Password mismatch' ));
38+ }
39+ };
40+ let validateEmail = (rule , value , callback ) => {
41+ let regular = new RegExp (' ^(\\ w-*\\ .*)+@(\\ w-?)+(\\ .\\ w{2,})+$' );
42+ if (regular .test (value) || value === ' ' ) {
43+ callback ();
44+ } else {
45+ callback (new Error (' Email format error' ));
46+ }
47+ };
48+ let validateUsername = (rule , value , callback ) => {
49+ this .$axios
50+ .get (apiurl (' account/username/accessibility/' + value))
51+ .then (() => {
52+ callback ();
53+ })
54+ .catch (err => {
55+ if (err .request .status === 409 ) {
56+ callback (new Error (' The user name is already in use' ));
57+ } else {
58+ callback ();
59+ }
60+ });
61+ };
3262 return {
3363 ldata: {
3464 username: ' ' ,
3565 password: ' ' ,
3666 passwdrepeat: ' ' ,
3767 email: ' '
3868 },
69+ rules: {
70+ username: [
71+ { required: true , message: ' Input your username' , trigger: ' blur' },
72+ { max: 10 , message: ' No more than 10 characters' , trigger: ' blur' },
73+ { validator: validateUsername, trigger: ' blur' }
74+ ],
75+ password: [
76+ { required: true , message: ' Input your password' , trigger: ' blur' },
77+ { min: 6 , message: ' Password must be more than 6 characters' , trigger: ' blur' }
78+ ],
79+ passwdrepeat: [
80+ { required: true , message: ' Repeat your password' , trigger: ' blur' },
81+ { validator: validatePasswd, trigger: ' blur' },
82+ ],
83+ email: [
84+ { validator: validateEmail, trigger: ' blur' }
85+ ]
86+ },
3987 buttonLoading: false
4088 };
4189 },
4290 methods: {
43- onSubmit () {
91+ submit () {
4492 this .buttonLoading = true ;
45- if (this .ldata .password === this .ldata .passwdrepeat ) {
46- this .$axios
47- .post (apiurl (' /account' ), {
48- username: this .ldata .username ,
49- password: this .ldata .password ,
50- email: this .ldata .email
51- })
52- .then (() => {
53- this .$store .state .user .showregister = false ;
54- this .$store .state .user .showlogin = true ;
55- // Successed
56- this .$SegmentMessage .success (this , ' Your acount has been registered successfully' );
57- })
58- .catch (err => {
59- if (err .request .status === 400 ) {
60- // HTTP 400 Bad Request
61- this .$SegmentMessage .error (this , JSON .parse (err .request .response ).detail );
62- } else if (err .request .status === 409 ) {
63- // HTTP 409 Conflict
64- this .$SegmentMessage .error (this , ' Username has been taken' );
65- } else if (err .request .status === 429 ) {
66- // HTTP 429 Too Many Requests
67- this .$SegmentMessage .error (this , ' Requesting too frequently' );
68- } else {
69- // Unknown error
70- this .$SegmentMessage .error (this , ' Unknown error' );
71- }
72- this .buttonLoading = false ;
73- });
74- } else {
75- // Password mismatch
76- this .SendMessageError (' Password mismatch' );
77- }
93+ this .$axios
94+ .post (apiurl (' /account' ), {
95+ username: this .ldata .username ,
96+ password: this .ldata .password ,
97+ email: this .ldata .email
98+ })
99+ .then (() => {
100+ this .$store .state .user .showregister = false ;
101+ this .$store .state .user .showlogin = true ;
102+ // Successed
103+ this .$SegmentMessage .success (this , ' Your acount has been registered successfully' );
104+ this .buttonLoading = false ;
105+ })
106+ .catch (err => {
107+ if (err .request .status === 400 ) {
108+ // HTTP 400 Bad Request
109+ this .$SegmentMessage .error (this , JSON .parse (err .request .response ).detail );
110+ } else if (err .request .status === 409 ) {
111+ // HTTP 409 Conflict
112+ this .$SegmentMessage .error (this , ' Username has been taken' );
113+ } else if (err .request .status === 429 ) {
114+ // HTTP 429 Too Many Requests
115+ this .$SegmentMessage .error (this , ' Requesting too frequently' );
116+ } else {
117+ // Unknown error
118+ this .$SegmentMessage .error (this , ' Unknown error' );
119+ }
120+ this .buttonLoading = false ;
121+ });
122+ },
123+ onSubmit () {
124+ this .$refs [' registerForm' ].validate ((valid ) => {
125+ if (valid) {
126+ this .submit ();
127+ } else {
128+ return false ;
129+ }
130+ });
131+ },
132+ reset () {
133+ this .$refs [' register' ].resetFields ();
78134 }
79135 }
80136};
0 commit comments