1
1
<template >
2
2
<el-dialog
3
3
title =" 登录"
4
- :width =" isMobile ? '90%' : '50%'"
5
- v-model =" dialogDodel"
4
+ :width =" state. isMobile ? '90%' : '50%'"
5
+ v-model =" state. dialogDodel"
6
6
@close =" cancel"
7
7
:show-close =" true"
8
8
>
9
9
<el-form >
10
10
<el-formItem
11
11
label =" 邮箱"
12
- :label-width =" formLabelWidth"
12
+ :label-width =" state. formLabelWidth"
13
13
>
14
14
<el-input
15
- v-model =" params.email"
15
+ v-model =" state. params.email"
16
16
placeholder =" 邮箱"
17
17
autocomplete =" off"
18
18
>
19
19
</el-input >
20
20
</el-formItem >
21
21
<el-formItem
22
22
label =" 密码"
23
- :label-width =" formLabelWidth"
23
+ :label-width =" state. formLabelWidth"
24
24
>
25
25
<el-input
26
26
type =" password"
27
27
placeholder =" 密码"
28
- v-model =" params.password"
28
+ v-model =" state. params.password"
29
29
autocomplete =" off"
30
30
></el-input >
31
31
</el-formItem >
32
32
<el-formItem
33
33
v-if =" handleFlag === 'register'"
34
34
label =" 昵称"
35
- :label-width =" formLabelWidth"
35
+ :label-width =" state. formLabelWidth"
36
36
>
37
37
<el-input
38
- v-model =" params.name"
38
+ v-model =" state. params.name"
39
39
placeholder =" 用户名或昵称"
40
40
autocomplete =" off"
41
41
></el-input >
42
42
</el-formItem >
43
43
<el-formItem
44
44
v-if =" handleFlag === 'register'"
45
45
label =" 手机"
46
- :label-width =" formLabelWidth"
46
+ :label-width =" state. formLabelWidth"
47
47
>
48
48
<el-input
49
- v-model =" params.phone"
49
+ v-model =" state. params.phone"
50
50
placeholder =" 手机号"
51
51
autocomplete =" off"
52
52
></el-input >
53
53
</el-formItem >
54
54
<el-formItem
55
55
v-if =" handleFlag === 'register'"
56
56
label =" 简介"
57
- :label-width =" formLabelWidth"
57
+ :label-width =" state. formLabelWidth"
58
58
>
59
59
<el-input
60
- v-model =" params.desc"
60
+ v-model =" state. params.desc"
61
61
placeholder =" 个人简介"
62
62
autocomplete =" off"
63
63
></el-input >
73
73
>github 授权登录</el-button >
74
74
<el-button
75
75
v-if =" handleFlag === 'login'"
76
- :loading =" btnLoading"
76
+ :loading =" state. btnLoading"
77
77
type =" primary"
78
78
@click =" handleOk"
79
79
>登 录</el-button >
80
80
<el-button
81
81
v-if =" handleFlag === 'register'"
82
- :loading =" btnLoading"
82
+ :loading =" state. btnLoading"
83
83
type =" primary"
84
84
@click =" handleOk"
85
85
>注 册</el-button >
88
88
</template >
89
89
90
90
<script lang="ts">
91
- import { defineComponent } from " vue" ;
91
+ import { defineComponent , reactive , watch , onMounted } from " vue" ;
92
+ import { useStore } from " vuex" ;
93
+ import { useRoute } from " vue-router" ;
94
+ import { ElMessage } from " element-plus" ;
95
+ import { key } from ' ../store'
92
96
import config from " ../utils/config" ;
93
97
import { RegAndLogParams , UserInfo } from " ../types/index" ;
98
+ import service from " ../utils/https" ;
99
+ import urls from " ../utils/urls" ;
94
100
95
101
export default defineComponent ({
96
102
name: " RegisterAndLogin" ,
@@ -109,131 +115,120 @@ export default defineComponent({
109
115
},
110
116
},
111
117
emits: [" ok" , " cancel" ],
112
- data() {
113
- return {
114
- dialogDodel: this .visible ,
118
+ setup(props , context ) {
119
+ const store = useStore (key );
120
+ const state = reactive ({
121
+ dialogDodel: props .visible ,
115
122
btnLoading: false ,
116
123
loading: false ,
117
- formLabelWidth: this .isMobile ? " 40px" : " 60px" ,
124
+ formLabelWidth: props .isMobile ? " 40px" : " 60px" ,
118
125
params: {
119
126
email: " " ,
120
127
name: " " ,
121
128
password: " " ,
122
129
phone: " " ,
123
130
desc: " " ,
124
131
} as RegAndLogParams ,
125
- };
126
- },
127
- watch: {
128
- dialogDodel: {
129
- handler(val : any , oldVal : any ) {
130
- this .$emit (" cancel" , val );
131
- },
132
- immediate: true ,
133
- },
134
- visible: {
135
- handler(val : any , oldVal : any ) {
136
- this .dialogDodel = val ;
137
- },
138
- immediate: true ,
139
- },
140
- },
141
- // computed: {
142
- // dialogVisible(): boolean {
143
- // return this.visible;
144
- // },
145
- // },
146
- methods: {
147
- handleOAuth(): void {
132
+ });
133
+
134
+ const route = useRoute ();
135
+ const handleOAuth = (): void => {
148
136
// 保存授权前的页面链接内容
149
137
let preventHistory: object = {
150
- name: this . $ route .name ,
151
- query: this . $ route .query ,
138
+ name: route .name ,
139
+ query: route .query ,
152
140
};
153
141
window .sessionStorage .preventHistory = JSON .stringify (preventHistory );
154
142
// window.location.href = 'https://github.com/login/oauth/authorize?client_id=6de90ab270aea2bdb01c&redirect_uri=http://biaochenxuying.cn/login'
155
143
window .location .href = ` ${config .oauth_uri }?client_id=${config .client_id }&redirect_uri=${config .redirect_uri } ` ;
156
- },
157
- handleOk(): void {
144
+ };
145
+
146
+ const submit = async (): Promise <void > => {
147
+ let data: any = " " ;
148
+ state .btnLoading = true ;
149
+ if (props .handleFlag === " register" ) {
150
+ data = await service .post (urls .register , state .params );
151
+ } else {
152
+ data = await service .post (urls .login , state .params );
153
+ }
154
+ state .btnLoading = false ;
155
+
156
+ const userInfo: UserInfo = {
157
+ _id: data ._id ,
158
+ name: data .name ,
159
+ avatar: data .avatar ,
160
+ };
161
+ store .commit (" SAVE_USER" , {
162
+ userInfo ,
163
+ });
164
+ window .sessionStorage .userInfo = JSON .stringify (userInfo );
165
+ context .emit (" ok" , false );
166
+ ElMessage ({
167
+ message: " 操作成功" ,
168
+ type: " success" ,
169
+ });
170
+ };
171
+
172
+ const handleOk = (): void => {
158
173
const reg = new RegExp (
159
174
" ^[a-z0-9]+([._\\ -]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$"
160
175
); // 正则表达式
161
- if (! this .params .email ) {
162
- // Message.warning("邮箱不能为空!");
163
- (this as any ).$message ({
176
+ if (! state .params .email ) {
177
+ ElMessage ({
164
178
message: " 邮箱不能为空!" ,
165
179
type: " warning" ,
166
180
});
167
181
return ;
168
- } else if (! reg .test (this .params .email )) {
169
- ( this as any ). $message ({
182
+ } else if (! reg .test (state .params .email )) {
183
+ ElMessage ({
170
184
message: " 请输入格式正确的邮箱!" ,
171
185
type: " warning" ,
172
186
});
173
187
return ;
174
188
}
175
- if (this .handleFlag === " register" ) {
176
- if (! this .params .password ) {
177
- ( this as any ). $message ({
189
+ if (props .handleFlag === " register" ) {
190
+ if (! state .params .password ) {
191
+ ElMessage ({
178
192
message: " 密码不能为空!" ,
179
193
type: " warning" ,
180
194
});
181
195
return ;
182
- } else if (! this .params .name ) {
183
- ( this as any ). $message ({
196
+ } else if (! state .params .name ) {
197
+ ElMessage ({
184
198
message: " 用户名不能为空!" ,
185
199
type: " warning" ,
186
200
});
187
201
return ;
188
202
}
189
203
const re = / ^ (((13[0-9 ] {1} )| (15[0-9 ] {1} )| (17[0-9 ] {1} )| (18[0-9 ] {1} ))+ \d {8} )$ / ;
190
- if (this .params .phone && ! re .test (this .params .phone )) {
191
- ( this as any ). $message ({
204
+ if (state .params .phone && ! re .test (state .params .phone )) {
205
+ ElMessage ({
192
206
message: " 请输入正确的手机号!" ,
193
207
type: " warning" ,
194
208
});
195
209
return ;
196
210
}
197
211
}
198
- this .submit ();
199
- },
200
- cancel(): boolean {
201
- this .$emit (" cancel" , false );
212
+ submit ();
213
+ };
214
+
215
+ const cancel = (): boolean => {
216
+ context .emit (" cancel" , false );
202
217
return false ;
203
- },
204
- async submit(): Promise <void > {
205
- let data: any = " " ;
206
- this .btnLoading = true ;
207
- if (this .handleFlag === " register" ) {
208
- data = await (this as any ).$https .post (
209
- (this as any ).$urls .register ,
210
- this .params
211
- );
212
- } else {
213
- data = await (this as any ).$https .post (
214
- (this as any ).$urls .login ,
215
- this .params
216
- );
217
- }
218
- this .btnLoading = false ;
218
+ };
219
219
220
- const userInfo: UserInfo = {
221
- _id: data ._id ,
222
- name: data .name ,
223
- avatar: data .avatar ,
224
- };
225
- (this as any ).$store .commit (" SAVE_USER" , {
226
- userInfo ,
227
- });
228
- window .sessionStorage .userInfo = JSON .stringify (userInfo );
229
- this .$emit (" ok" , false );
230
- (this as any ).$message ({
231
- message: " 操作成功" ,
232
- type: " success" ,
233
- });
234
- },
220
+ watch (props , (val , oldVal ) => {
221
+ state .dialogDodel = val .visible ;
222
+ });
223
+
224
+ return {
225
+ state ,
226
+ handleOAuth ,
227
+ handleOk ,
228
+ submit ,
229
+ cancel ,
230
+ };
235
231
},
236
- setup() {},
237
232
});
238
233
</script >
239
234
<style scoped>
0 commit comments