Showing
6 changed files
with
373 additions
and
383 deletions
1 | -<template> | |
2 | - <view class="code-page"> | |
3 | - <!-- 公共组件-每个页面必须引入 --> | |
4 | - <public-module></public-module> | |
5 | - <view class="f__login"> | |
6 | - <view class="loginPhone"> | |
7 | - <view class="phone-main" style="margin-top: 173rpx;"> | |
8 | - <text class="text">手机验证码登录</text> | |
9 | - <view class="circleStyle"></view> | |
10 | - </view> | |
11 | - <view class="form-row"> | |
12 | - <input class="input" type="number" v-model="phone" placeholder="请输入手机号码" | |
13 | - placeholder-style="font-weight:normal;color:#bbbbbb;"></input> | |
14 | - </view> | |
15 | - <view class="form-row"> | |
16 | - <input class="input" type="number" v-model="vCode" placeholder="请输入验证码" | |
17 | - placeholder-style="font-weight:normal;color:#bbbbbb;"></input> | |
18 | - <view class="getvcode" :class="{forhidden:readonly}" @click="getVcode">{{ codeText }}</view> | |
19 | - </view> | |
20 | - <button class="submit" size="default" @click="onSubmit"> | |
21 | - <text class="text">登录</text> | |
22 | - </button> | |
23 | - <view class="u-flex account-style"> | |
24 | - <view class="content" @click="openAccountFunc">账号密码登录</view> | |
25 | - </view> | |
26 | - <view class="circleStyleBottom"></view> | |
27 | - </view> | |
28 | - </view> | |
29 | - </view> | |
30 | -</template> | |
31 | - | |
32 | -<script> | |
33 | - var clear; | |
34 | - import { mapState, mapMutations } from 'vuex'; | |
35 | - export default { | |
36 | - data() { | |
37 | - return { | |
38 | - readonly: false, | |
39 | - codeText: '发送验证码', | |
40 | - phone: '', //号码 | |
41 | - vCode: '', //验证码 | |
42 | - } | |
43 | - }, | |
44 | - methods: { | |
45 | - ...mapMutations(['setUserInfo']), | |
46 | - //验证码按钮文字状态 | |
47 | - getCodeState() { | |
48 | - const _this = this; | |
49 | - this.readonly = true; | |
50 | - this.codeText = '60S后重新获取'; | |
51 | - var s = 60; | |
52 | - clear = setInterval(() => { | |
53 | - s--; | |
54 | - _this.codeText = s + 'S后重新获取'; | |
55 | - if (s <= 0) { | |
56 | - clearInterval(clear); | |
57 | - _this.codeText = '发送验证码'; | |
58 | - _this.readonly = false; | |
59 | - } | |
60 | - }, 1000); | |
61 | - }, | |
62 | - //获取验证码 | |
63 | - getVcode() { | |
64 | - if (this.readonly) { | |
65 | - uni.showToast({ | |
66 | - title: '验证码已发送~', | |
67 | - icon: 'none' | |
68 | - }); | |
69 | - return; | |
70 | - } | |
71 | - if (this.phone == '') { | |
72 | - uni.showToast({ | |
73 | - title: '请输入手机号~', | |
74 | - icon: 'none' | |
75 | - }); | |
76 | - return; | |
77 | - } | |
78 | - const phoneRegular = /^1\d{10}$/; | |
79 | - if (!phoneRegular.test(this.phone)) { | |
80 | - uni.showToast({ | |
81 | - title: '手机号格式不正确~', | |
82 | - icon: 'none' | |
83 | - }); | |
84 | - return; | |
85 | - } | |
86 | - // 获取验证码接口 | |
87 | - uni.$u.http.post(`/yt/noauth/sendLoginSmsCode/${this.phone}` ).then(res => { | |
88 | - if(res){ | |
89 | - this.getCodeState(); //开始倒计时 | |
90 | - } | |
91 | - }) | |
92 | - }, | |
93 | - onSubmit() { | |
94 | - const phoneRegular = /^1\d{10}$/; | |
95 | - if(this.phone==''){ | |
96 | - uni.showToast({ | |
97 | - title: '请输入手机号码~', | |
98 | - icon: 'none' | |
99 | - }); | |
100 | - return; | |
101 | - }else if (!phoneRegular.test(this.phone)) { | |
102 | - uni.showToast({ | |
103 | - title: '手机号格式不正确~', | |
104 | - icon: 'none' | |
105 | - }); | |
106 | - return; | |
107 | - } | |
108 | - if (this.vCode == '') { | |
109 | - uni.showToast({ | |
110 | - title: '请输入验证码~', | |
111 | - icon: 'none' | |
112 | - }); | |
113 | - return; | |
114 | - } else if(!(/^\d{6}$/.test(this.vCode))){ | |
115 | - uni.showToast({ | |
116 | - title: '验证码格式不正确~', | |
117 | - icon: 'none' | |
118 | - }); | |
119 | - return | |
120 | - } | |
121 | - let httpData = { | |
122 | - code: this.vCode, | |
123 | - phoneNumber: this.phone | |
124 | - } | |
125 | - uni.$u.http.post('/yt/auth/code/login', httpData).then(res => { | |
126 | - if (res) { | |
127 | - // 储存登录信息 | |
128 | - let resObj = { | |
129 | - refreshToken: res.refreshToken, | |
130 | - isToken: res.token | |
131 | - }; | |
132 | - let userInfo = { | |
133 | - ...resObj, | |
134 | - token: true ,//token用于判断是否登录 | |
135 | - isThirdLogin: false | |
136 | - }; | |
137 | - if (userInfo.token) { | |
138 | - this.setUserInfo(userInfo); | |
139 | - } | |
140 | - uni.showToast({ | |
141 | - title: '登录成功~', | |
142 | - icon: 'none' | |
143 | - }).then(res => { | |
144 | - uni.reLaunch({ | |
145 | - url: '/pages/personal/personal' | |
146 | - }); | |
147 | - }); | |
148 | - this.saveUserInfo(); | |
149 | - | |
150 | - } | |
151 | - }); | |
152 | - }, | |
153 | - saveUserInfo() { | |
154 | - //储存个人信息 | |
155 | - uni.$u.http.get('/yt/user/me/info').then(res => { | |
156 | - if (res) { | |
157 | - this.setUserInfo(res); | |
158 | - } | |
159 | - }); | |
160 | - }, | |
161 | - openAccountFunc(){ | |
162 | - uni.navigateTo({ | |
163 | - url:"../public/login" | |
164 | - }) | |
165 | - } | |
166 | - } | |
167 | - } | |
168 | -</script> | |
169 | - | |
170 | -<style lang="scss" scoped> | |
171 | - @import './static/code.scss'; | |
1 | +<template> | |
2 | + <view class="code-page"> | |
3 | + <!-- 公共组件-每个页面必须引入 --> | |
4 | + <public-module></public-module> | |
5 | + <view class="f__login"> | |
6 | + <view class="loginPhone"> | |
7 | + <view class="phone-main" style="margin-top: 173rpx;"> | |
8 | + <text class="text">手机验证码登录</text> | |
9 | + <view class="circleStyle"></view> | |
10 | + </view> | |
11 | + <view class="form-row"> | |
12 | + <u-input v-model="phone" type="number" placeholder="请输入手机号码" border="bottom"></u-input> | |
13 | + </view> | |
14 | + <view class="form-row"> | |
15 | + <u-input type="number" v-model="vCode" placeholder="请输入验证码" border="bottom"> | |
16 | + <template slot="suffix" @click="getVcode"> | |
17 | + <view class="getvcode" >{{ codeText }}</view> | |
18 | + </template> | |
19 | + </u-input> | |
20 | + </view> | |
21 | + <button class="submit" size="default" @click="onSubmit"><text class="text">登录</text></button> | |
22 | + <view class="u-flex account-style"><view class="content" @click="openAccountFunc">账号密码登录</view></view> | |
23 | + <view class="circleStyleBottom"></view> | |
24 | + </view> | |
25 | + </view> | |
26 | + </view> | |
27 | +</template> | |
28 | + | |
29 | +<script> | |
30 | +var clear; | |
31 | +import { mapState, mapMutations } from 'vuex'; | |
32 | +export default { | |
33 | + data() { | |
34 | + return { | |
35 | + readonly: false, | |
36 | + codeText: '发送验证码', | |
37 | + phone: '', //号码 | |
38 | + vCode: '' //验证码 | |
39 | + }; | |
40 | + }, | |
41 | + methods: { | |
42 | + ...mapMutations(['setUserInfo']), | |
43 | + //验证码按钮文字状态 | |
44 | + getCodeState() { | |
45 | + const _this = this; | |
46 | + this.readonly = true; | |
47 | + this.codeText = '60s后重新获取'; | |
48 | + var s = 60; | |
49 | + clear = setInterval(() => { | |
50 | + s--; | |
51 | + _this.codeText = s + 's后重新获取'; | |
52 | + if (s <= 0) { | |
53 | + clearInterval(clear); | |
54 | + _this.codeText = '发送验证码'; | |
55 | + _this.readonly = false; | |
56 | + } | |
57 | + }, 1000); | |
58 | + }, | |
59 | + //获取验证码 | |
60 | + getVcode() { | |
61 | + if (this.readonly) { | |
62 | + uni.showToast({ | |
63 | + title: '验证码已发送~', | |
64 | + icon: 'none' | |
65 | + }); | |
66 | + return; | |
67 | + } | |
68 | + if (this.phone == '') { | |
69 | + uni.showToast({ | |
70 | + title: '请输入手机号~', | |
71 | + icon: 'none' | |
72 | + }); | |
73 | + return; | |
74 | + } | |
75 | + const phoneRegular = /^1\d{10}$/; | |
76 | + if (!phoneRegular.test(this.phone)) { | |
77 | + uni.showToast({ | |
78 | + title: '手机号格式不正确~', | |
79 | + icon: 'none' | |
80 | + }); | |
81 | + return; | |
82 | + } | |
83 | + // 获取验证码接口 | |
84 | + uni.$u.http.post(`/yt/noauth/sendLoginSmsCode/${this.phone}`).then(res => { | |
85 | + if (res) { | |
86 | + this.getCodeState(); //开始倒计时 | |
87 | + } | |
88 | + }); | |
89 | + }, | |
90 | + onSubmit() { | |
91 | + const phoneRegular = /^1\d{10}$/; | |
92 | + if (this.phone == '') { | |
93 | + uni.showToast({ | |
94 | + title: '请输入手机号码~', | |
95 | + icon: 'none' | |
96 | + }); | |
97 | + return; | |
98 | + } else if (!phoneRegular.test(this.phone)) { | |
99 | + uni.showToast({ | |
100 | + title: '手机号格式不正确~', | |
101 | + icon: 'none' | |
102 | + }); | |
103 | + return; | |
104 | + } | |
105 | + if (this.vCode == '') { | |
106 | + uni.showToast({ | |
107 | + title: '请输入验证码~', | |
108 | + icon: 'none' | |
109 | + }); | |
110 | + return; | |
111 | + } else if (!/^\d{6}$/.test(this.vCode)) { | |
112 | + uni.showToast({ | |
113 | + title: '验证码格式不正确~', | |
114 | + icon: 'none' | |
115 | + }); | |
116 | + return; | |
117 | + } | |
118 | + let httpData = { | |
119 | + code: this.vCode, | |
120 | + phoneNumber: this.phone | |
121 | + }; | |
122 | + uni.$u.http.post('/yt/auth/code/login', httpData).then(res => { | |
123 | + if (res) { | |
124 | + // 储存登录信息 | |
125 | + let resObj = { | |
126 | + refreshToken: res.refreshToken, | |
127 | + isToken: res.token | |
128 | + }; | |
129 | + let userInfo = { | |
130 | + ...resObj, | |
131 | + token: true, //token用于判断是否登录 | |
132 | + isThirdLogin: false | |
133 | + }; | |
134 | + if (userInfo.token) { | |
135 | + this.setUserInfo(userInfo); | |
136 | + } | |
137 | + uni | |
138 | + .showToast({ | |
139 | + title: '登录成功~', | |
140 | + icon: 'none' | |
141 | + }) | |
142 | + .then(res => { | |
143 | + uni.reLaunch({ | |
144 | + url: '/pages/personal/personal' | |
145 | + }); | |
146 | + }); | |
147 | + this.saveUserInfo(); | |
148 | + } | |
149 | + }); | |
150 | + }, | |
151 | + saveUserInfo() { | |
152 | + //储存个人信息 | |
153 | + uni.$u.http.get('/yt/user/me/info').then(res => { | |
154 | + if (res) { | |
155 | + this.setUserInfo(res); | |
156 | + } | |
157 | + }); | |
158 | + }, | |
159 | + openAccountFunc() { | |
160 | + uni.navigateTo({ | |
161 | + url: '../public/login' | |
162 | + }); | |
163 | + } | |
164 | + } | |
165 | +}; | |
166 | +</script> | |
167 | + | |
168 | +<style lang="scss" scoped> | |
169 | +@import './static/code.scss'; | |
172 | 170 | </style> | ... | ... |
1 | -<template> | |
2 | - <view class="find-password-page"> | |
3 | - <public-module></public-module> | |
4 | - <view class="top u-flex" > | |
5 | - <view @click="showPhone" :style="{color:!nextStatus?'#0079fe':''}" class="item">1.验证手机号码</view> | |
6 | - <view :style="{color:!nextStatus?'':'#0079fe'}" class="item">2.设置新密码</view> | |
7 | - </view> | |
8 | - <view v-if="!nextStatus" style="margin-top: 40rpx;" class="f__login"> | |
9 | - <view class="loginPhone"> | |
10 | - <view class="form-row"> | |
11 | - <input class="input" type="number" v-model="phone" placeholder="请输入手机号码" | |
12 | - placeholder-style="font-weight:normal"></input> | |
13 | - </view> | |
14 | - <view style="height: 25rpx;"></view> | |
15 | - <view class="form-row"> | |
16 | - <input class="input" type="number" v-model="vCode" placeholder="请输入短信验证码" | |
17 | - placeholder-style="font-weight:normal"></input> | |
18 | - <view class="getvcode" :class="{forhidden:readonly}" @click="getVcode">{{ codeText }}</view> | |
19 | - </view> | |
20 | - <button class="submit" size="default" @click="onNextSubmit"> | |
21 | - <text style="color:#fff">下一步</text> | |
22 | - </button> | |
23 | - </view> | |
24 | - </view> | |
25 | - <view v-else style="margin-top: 40rpx;" class="f__login"> | |
26 | - <view class="loginPhone"> | |
27 | - <view style="margin-top:50rpx" class="form-row u-flex"> | |
28 | - <view class="v-input"><input type="text" v-model="password" maxlength="32" placeholder="请设置6-20位新的登录密码" :password="!showPasswordF" /></view> | |
29 | - <view class="v-password"><u-icon size="25" @click="showPasswordModeF" :name="showPasswordF ? 'eye-fill' : 'eye-off'"></u-icon></view> | |
30 | - <u-icon></u-icon> | |
31 | - </view> | |
32 | - <view style="margin-top:70rpx" class="form-row u-flex"> | |
33 | - <view class="v-input"><input type="text" v-model="rePassword" maxlength="32" placeholder="请再次输入新的登录密码" :password="!showPasswordS" /></view> | |
34 | - <view class="v-password"><u-icon size="25" @click="showPasswordModeS" :name="showPasswordS ? 'eye-fill' : 'eye-off'"></u-icon></view> | |
35 | - <u-icon></u-icon> | |
36 | - </view> | |
37 | - <button class="submit" size="default" @click="onSubmit"> | |
38 | - <text style="color:#fff">确定</text> | |
39 | - </button> | |
40 | - </view> | |
41 | - </view> | |
42 | - </view> | |
43 | -</template> | |
44 | - | |
45 | -<script> | |
46 | - var clear; | |
47 | - export default { | |
48 | - data() { | |
49 | - return { | |
50 | - readonly: false, | |
51 | - codeText: '发送验证码', | |
52 | - phone: '', //号码 | |
53 | - vCode: '', //验证码 | |
54 | - nextStatus: false, | |
55 | - password:'', | |
56 | - rePassword:'', | |
57 | - showPasswordF: false, | |
58 | - showPasswordS: false, | |
59 | - } | |
60 | - }, | |
61 | - methods: { | |
62 | - //验证码按钮文字状态 | |
63 | - getCodeState() { | |
64 | - const _this = this; | |
65 | - this.readonly = true; | |
66 | - this.codeText = '60S后重新获取'; | |
67 | - var s = 60; | |
68 | - clear = setInterval(() => { | |
69 | - s--; | |
70 | - _this.codeText = s + 'S后重新获取'; | |
71 | - if (s <= 0) { | |
72 | - clearInterval(clear); | |
73 | - _this.codeText = '发送验证码'; | |
74 | - _this.readonly = false; | |
75 | - } | |
76 | - }, 1000); | |
77 | - }, | |
78 | - //获取验证码 | |
79 | - getVcode() { | |
80 | - if (this.readonly) { | |
81 | - uni.showToast({ | |
82 | - title: '验证码已发送~', | |
83 | - icon: 'none' | |
84 | - }); | |
85 | - return; | |
86 | - } | |
87 | - if (this.phone == '') { | |
88 | - uni.showToast({ | |
89 | - title: '请输入手机号~', | |
90 | - icon: 'none' | |
91 | - }); | |
92 | - return; | |
93 | - } | |
94 | - const phoneRegular = /^1\d{10}$/; | |
95 | - if (!phoneRegular.test(this.phone)) { | |
96 | - uni.showToast({ | |
97 | - title: '手机号格式不正确~', | |
98 | - icon: 'none' | |
99 | - }); | |
100 | - return; | |
101 | - } | |
102 | - let httpData = {} | |
103 | - // 获取验证码接口 | |
104 | - uni.$u.http.post(`/yt/noauth/resetCode/${this.phone}` ).then(res => { | |
105 | - this.getCodeState(); //开始倒计时 | |
106 | - }) | |
107 | - }, | |
108 | - onNextSubmit() { | |
109 | - const phoneRegular = /^1\d{10}$/; | |
110 | - if(this.phone==''){ | |
111 | - uni.showToast({ | |
112 | - title: '请输入手机号码~', | |
113 | - icon: 'none' | |
114 | - }); | |
115 | - return; | |
116 | - }else if (!phoneRegular.test(this.phone)) { | |
117 | - uni.showToast({ | |
118 | - title: '手机号格式不正确~', | |
119 | - icon: 'none' | |
120 | - }); | |
121 | - return; | |
122 | - } | |
123 | - if (this.vCode == '') { | |
124 | - uni.showToast({ | |
125 | - title: '请输入验证码~', | |
126 | - icon: 'none' | |
127 | - }); | |
128 | - return; | |
129 | - } else if(!(/^\d{6}$/.test(this.vCode))){ | |
130 | - uni.showToast({ | |
131 | - title: '验证码格式不正确~', | |
132 | - icon: 'none' | |
133 | - }); | |
134 | - return | |
135 | - } | |
136 | - this.nextStatus = true | |
137 | - }, | |
138 | - showPhone(){ | |
139 | - this.nextStatus = false | |
140 | - }, | |
141 | - onSubmit() { | |
142 | - const passReg=/^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$/ | |
143 | - if(this.password=='' &&this.rePassword==''){ | |
144 | - uni.showToast({ | |
145 | - title: '请输入密码~', | |
146 | - icon: 'none' | |
147 | - }); | |
148 | - return; | |
149 | - }else if (!passReg.test(this.password)&&!passReg.test(this.rePassword)) { | |
150 | - uni.showToast({ | |
151 | - title: '密码格式不正确(至少一个大写英文字母、至少一个小写英文字母、至少一位数字、至少一个特殊字符、最少八个字符)~', | |
152 | - icon: 'none', | |
153 | - duration: 3000 | |
154 | - }); | |
155 | - return; | |
156 | - } | |
157 | - if(this.password!==this.rePassword) return uni.$u.toast('两次输入密码不一致'); | |
158 | - let httpData={ | |
159 | - password: this.password, | |
160 | - phoneNumber: this.phone, | |
161 | - userId: this.vCode | |
162 | - } | |
163 | - uni.$u.http.post(`/yt/noauth/reset/${this.phone}`, httpData).then(res => { | |
164 | - uni.showToast({ | |
165 | - title: '重置密码成功~', | |
166 | - icon: 'none' | |
167 | - }).then(res=>{ | |
168 | - uni.reLaunch({ | |
169 | - url: '/pages/personal/personal' | |
170 | - }); | |
171 | - /** | |
172 | - * 有些时候不起作用 | |
173 | - */ | |
174 | - // uni.navigateBack({ | |
175 | - // delta:2 | |
176 | - // }) | |
177 | - }) | |
178 | - }); | |
179 | - }, | |
180 | - showPasswordModeF() { | |
181 | - this.showPasswordF = !this.showPasswordF; | |
182 | - }, | |
183 | - showPasswordModeS() { | |
184 | - this.showPasswordS = !this.showPasswordS; | |
185 | - }, | |
186 | - } | |
187 | - } | |
188 | -</script> | |
189 | - | |
190 | -<style lang="scss" scoped> | |
191 | - @import './static/findPassword.scss'; | |
1 | +<template> | |
2 | + <view class="find-password-page"> | |
3 | + <public-module></public-module> | |
4 | + <view class="top u-flex"> | |
5 | + <view @click="showPhone" :style="{ color: !nextStatus ? '#0079fe' : '' }" class="item">1.验证手机号码</view> | |
6 | + <view :style="{ color: !nextStatus ? '' : '#0079fe' }" class="item">2.设置新密码</view> | |
7 | + </view> | |
8 | + <view v-if="!nextStatus" style="margin-top: 40rpx;" class="f__login"> | |
9 | + <view class="loginPhone"> | |
10 | + <view class="form-row"><u-input v-model="phone" type="number" placeholder="请输入手机号码" border="bottom"></u-input></view> | |
11 | + <view style="height: 25rpx;"></view> | |
12 | + <view class="form-row"> | |
13 | + <u-input type="number" v-model="vCode" placeholder="请输入短信验证码" border="bottom"> | |
14 | + <template slot="suffix" @click="getVcode"> | |
15 | + <view class="getvcode">{{ codeText }}</view> | |
16 | + </template> | |
17 | + </u-input> | |
18 | + </view> | |
19 | + <button class="submit" size="default" @click="onNextSubmit"><text style="color:#fff">下一步</text></button> | |
20 | + </view> | |
21 | + </view> | |
22 | + <view v-else style="margin-top: 40rpx;" class="f__login"> | |
23 | + <view class="loginPhone"> | |
24 | + <view class="form-row u-flex"> | |
25 | + <u-input v-model="password" :password="showPasswordF" placeholder="请设置6-20位新的登录密码" border="bottom"> | |
26 | + <template slot="suffix" @click="showPasswordModeF"> | |
27 | + <view style="padding:20rpx"><u-icon :name="showPasswordF ? '/static/eye-hide.png' : '/static/eye.png'"></u-icon></view> | |
28 | + </template> | |
29 | + </u-input> | |
30 | + </view> | |
31 | + <view class="form-row u-flex"> | |
32 | + <u-input v-model="rePassword" :password="showPasswordS" placeholder="请再次输入新的登录密码" border="bottom"> | |
33 | + <template slot="suffix" @click="showPasswordModeS"> | |
34 | + <view style="padding:20rpx"><u-icon :name="showPasswordS ? '/static/eye-hide.png' : '/static/eye.png'"></u-icon></view> | |
35 | + </template> | |
36 | + </u-input> | |
37 | + </view> | |
38 | + <button class="submit" size="default" @click="onSubmit"><text style="color:#fff">确定</text></button> | |
39 | + </view> | |
40 | + </view> | |
41 | + </view> | |
42 | +</template> | |
43 | + | |
44 | +<script> | |
45 | +var clear; | |
46 | +export default { | |
47 | + data() { | |
48 | + return { | |
49 | + readonly: false, | |
50 | + codeText: '发送验证码', | |
51 | + phone: '', //号码 | |
52 | + vCode: '', //验证码 | |
53 | + nextStatus: false, | |
54 | + password: '', | |
55 | + rePassword: '', | |
56 | + showPasswordF: true, | |
57 | + showPasswordS: true | |
58 | + }; | |
59 | + }, | |
60 | + methods: { | |
61 | + //验证码按钮文字状态 | |
62 | + getCodeState() { | |
63 | + const _this = this; | |
64 | + this.readonly = true; | |
65 | + this.codeText = '60s后重新获取'; | |
66 | + var s = 60; | |
67 | + clear = setInterval(() => { | |
68 | + s--; | |
69 | + _this.codeText = s + 's后重新获取'; | |
70 | + if (s <= 0) { | |
71 | + clearInterval(clear); | |
72 | + _this.codeText = '发送验证码'; | |
73 | + _this.readonly = false; | |
74 | + } | |
75 | + }, 1000); | |
76 | + }, | |
77 | + //获取验证码 | |
78 | + getVcode() { | |
79 | + if (this.readonly) { | |
80 | + uni.showToast({ | |
81 | + title: '验证码已发送~', | |
82 | + icon: 'none' | |
83 | + }); | |
84 | + return; | |
85 | + } | |
86 | + if (this.phone == '') { | |
87 | + uni.showToast({ | |
88 | + title: '请输入手机号~', | |
89 | + icon: 'none' | |
90 | + }); | |
91 | + return; | |
92 | + } | |
93 | + const phoneRegular = /^1\d{10}$/; | |
94 | + if (!phoneRegular.test(this.phone)) { | |
95 | + uni.showToast({ | |
96 | + title: '手机号格式不正确~', | |
97 | + icon: 'none' | |
98 | + }); | |
99 | + return; | |
100 | + } | |
101 | + let httpData = {}; | |
102 | + // 获取验证码接口 | |
103 | + uni.$u.http.post(`/yt/noauth/resetCode/${this.phone}`).then(res => { | |
104 | + this.getCodeState(); //开始倒计时 | |
105 | + }); | |
106 | + }, | |
107 | + onNextSubmit() { | |
108 | + const phoneRegular = /^1\d{10}$/; | |
109 | + if (this.phone == '') { | |
110 | + uni.showToast({ | |
111 | + title: '请输入手机号码~', | |
112 | + icon: 'none' | |
113 | + }); | |
114 | + return; | |
115 | + } else if (!phoneRegular.test(this.phone)) { | |
116 | + uni.showToast({ | |
117 | + title: '手机号格式不正确~', | |
118 | + icon: 'none' | |
119 | + }); | |
120 | + return; | |
121 | + } | |
122 | + if (this.vCode == '') { | |
123 | + uni.showToast({ | |
124 | + title: '请输入验证码~', | |
125 | + icon: 'none' | |
126 | + }); | |
127 | + return; | |
128 | + } else if (!/^\d{6}$/.test(this.vCode)) { | |
129 | + uni.showToast({ | |
130 | + title: '验证码格式不正确~', | |
131 | + icon: 'none' | |
132 | + }); | |
133 | + return; | |
134 | + } | |
135 | + this.nextStatus = true; | |
136 | + }, | |
137 | + showPhone() { | |
138 | + this.nextStatus = false; | |
139 | + }, | |
140 | + onSubmit() { | |
141 | + const passReg = /^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$/; | |
142 | + if (this.password == '' && this.rePassword == '') { | |
143 | + uni.showToast({ | |
144 | + title: '请输入密码~', | |
145 | + icon: 'none' | |
146 | + }); | |
147 | + return; | |
148 | + } else if (!passReg.test(this.password) && !passReg.test(this.rePassword)) { | |
149 | + uni.showToast({ | |
150 | + title: '密码格式不正确(至少一个大写英文字母、至少一个小写英文字母、至少一位数字、至少一个特殊字符、最少八个字符)~', | |
151 | + icon: 'none', | |
152 | + duration: 3000 | |
153 | + }); | |
154 | + return; | |
155 | + } | |
156 | + if (this.password !== this.rePassword) return uni.$u.toast('两次输入密码不一致'); | |
157 | + let httpData = { | |
158 | + password: this.password, | |
159 | + phoneNumber: this.phone, | |
160 | + userId: this.vCode | |
161 | + }; | |
162 | + uni.$u.http.post(`/yt/noauth/reset/${this.phone}`, httpData).then(res => { | |
163 | + uni | |
164 | + .showToast({ | |
165 | + title: '重置密码成功~', | |
166 | + icon: 'none' | |
167 | + }) | |
168 | + .then(res => { | |
169 | + uni.reLaunch({ | |
170 | + url: '/pages/personal/personal' | |
171 | + }); | |
172 | + /** | |
173 | + * 有些时候不起作用 | |
174 | + */ | |
175 | + // uni.navigateBack({ | |
176 | + // delta:2 | |
177 | + // }) | |
178 | + }); | |
179 | + }); | |
180 | + }, | |
181 | + showPasswordModeF() { | |
182 | + this.showPasswordF = !this.showPasswordF; | |
183 | + }, | |
184 | + showPasswordModeS() { | |
185 | + this.showPasswordS = !this.showPasswordS; | |
186 | + } | |
187 | + } | |
188 | +}; | |
189 | +</script> | |
190 | + | |
191 | +<style lang="scss" scoped> | |
192 | +@import './static/findPassword.scss'; | |
192 | 193 | </style> | ... | ... |
... | ... | @@ -33,7 +33,7 @@ |
33 | 33 | |
34 | 34 | .form-row { |
35 | 35 | position: relative; |
36 | - border-bottom: 1rpx solid #e8e8e8; | |
36 | + // border-bottom: 1rpx solid #e8e8e8; | |
37 | 37 | margin-top: 30rpx; |
38 | 38 | .input { |
39 | 39 | font-size: 34rpx; |
... | ... | @@ -62,11 +62,6 @@ |
62 | 62 | transform: translateY(-50%); |
63 | 63 | right: 0; |
64 | 64 | z-index: 11; |
65 | - | |
66 | - &.forhidden { | |
67 | - // background: #eee; | |
68 | - // color: #cccccc; | |
69 | - } | |
70 | 65 | } |
71 | 66 | } |
72 | 67 | ... | ... |
... | ... | @@ -14,18 +14,14 @@ |
14 | 14 | |
15 | 15 | <view class="f__login"> |
16 | 16 | <view class="loginPhone"> |
17 | - <view class="form-row u-flex"> | |
18 | - <view class="v-input"><input type="text" v-model="loginForm.username" maxlength="32" placeholder="请输入登录账号" /></view> | |
19 | - <u-icon></u-icon> | |
20 | - </view> | |
17 | + <view class="form-row u-flex"><u-input v-model="loginForm.username" type="text" placeholder="请输入登录账号" border="bottom" /></view> | |
21 | 18 | |
22 | 19 | <view class="form-row u-flex"> |
23 | - <view class="v-input"><input type="text" v-model="loginForm.password" maxlength="32" placeholder="请输入登录密码" :password="!showPassword" /></view> | |
24 | - <view class="v-password" style="padding: 30rpx;" @click="showPasswordMode"> | |
25 | - <u-icon color="#9a9a9a" :name="showPassword ? '/static/eye.png' : '/static/eye-hide.png'"></u-icon> | |
26 | - </view> | |
27 | - | |
28 | - <u-icon></u-icon> | |
20 | + <u-input v-model="loginForm.password" :password="showPassword" placeholder="请输入登录密码" border="bottom"> | |
21 | + <template slot="suffix" @click="showPasswordMode"> | |
22 | + <view style="padding:20rpx"><u-icon :name="showPassword ? '/static/eye-hide.png' : '/static/eye.png'"></u-icon></view> | |
23 | + </template> | |
24 | + </u-input> | |
29 | 25 | </view> |
30 | 26 | |
31 | 27 | <button class="submit" size="default" @click="onSubmitFunc"><text class="text">登录</text></button> |
... | ... | @@ -68,7 +64,7 @@ export default { |
68 | 64 | password: '' |
69 | 65 | }, |
70 | 66 | |
71 | - showPassword: false, | |
67 | + showPassword: true, | |
72 | 68 | |
73 | 69 | code: '', |
74 | 70 | |
... | ... | @@ -261,7 +257,8 @@ export default { |
261 | 257 | |
262 | 258 | token: true, //token用于判断是否登录 |
263 | 259 | |
264 | - isThirdLogin: false | |
260 | + isThirdLogin: false, | |
261 | + isThirdLoginAndNoDind:false | |
265 | 262 | }; |
266 | 263 | |
267 | 264 | if (userInfo.token) { |
... | ... | @@ -314,4 +311,4 @@ export default { |
314 | 311 | /deep/ button { |
315 | 312 | background: rgba(0, 0, 0, 0); |
316 | 313 | } |
317 | -</style> | |
314 | +</style> | ... | ... |