Commit ccb56b3b99a4c43c69fa83431d34bf3440451cda

Authored by YunaiV
1 parent 0d8f10cf

使用 uview 重构实际登陆

yudao-vue-ui/api/system/auth.js
@@ -2,26 +2,33 @@ import { request } from '@/common/js/request.js' @@ -2,26 +2,33 @@ import { request } from '@/common/js/request.js'
2 2
3 // 手机号 + 密码登陆 3 // 手机号 + 密码登陆
4 export function login(mobile, password) { 4 export function login(mobile, password) {
5 - const data = {  
6 - mobile,  
7 - password  
8 - }  
9 return request({ 5 return request({
10 url: 'login', 6 url: 'login',
11 method: 'post', 7 method: 'post',
12 - data: data 8 + data: {
  9 + mobile, password
  10 + }
13 }) 11 })
14 } 12 }
15 13
16 // 手机号 + 验证码登陆 14 // 手机号 + 验证码登陆
17 export function smsLogin(mobile, code) { 15 export function smsLogin(mobile, code) {
18 - const data = {  
19 - mobile,  
20 - code  
21 - }  
22 return request({ 16 return request({
23 url: 'sms-login', 17 url: 'sms-login',
24 method: 'post', 18 method: 'post',
25 - data: data 19 + data: {
  20 + mobile, code
  21 + }
26 }) 22 })
  23 +}
  24 +
  25 +// 发送手机验证码
  26 +export function sendSmsCode(mobile, scene) {
  27 + return request({
  28 + url: 'send-sms-code',
  29 + method: 'post',
  30 + data: {
  31 + mobile, scene
  32 + }
  33 + })
27 } 34 }
28 \ No newline at end of file 35 \ No newline at end of file
yudao-vue-ui/pages/auth/login.vue
1 <template> 1 <template>
2 <view class="app"> 2 <view class="app">
3 - <!-- 左下角的环 -->  
4 - <view class="left-bottom-sign"></view>  
5 - <!-- 右上角的折角 -->  
6 - <view class="right-top-sign"></view>  
7 <!-- 左上角的 x 关闭 --> 3 <!-- 左上角的 x 关闭 -->
8 <view class="back-btn mix-icon icon-guanbi" @click="navBack"></view> 4 <view class="back-btn mix-icon icon-guanbi" @click="navBack"></view>
  5 +
9 <!-- 用户协议 --> 6 <!-- 用户协议 -->
10 <view class="agreement center"> 7 <view class="agreement center">
11 <text class="mix-icon icon-xuanzhong" :class="{active: agreement}" @click="checkAgreement"></text> 8 <text class="mix-icon icon-xuanzhong" :class="{active: agreement}" @click="checkAgreement"></text>
@@ -26,8 +23,8 @@ @@ -26,8 +23,8 @@
26 <!-- 判断使用验证码还是密码 --> 23 <!-- 判断使用验证码还是密码 -->
27 <u-form-item prop="code" borderBottom v-if="loginType == 'code'"> 24 <u-form-item prop="code" borderBottom v-if="loginType == 'code'">
28 <u--input type="number" v-model="form.code" placeholder="请输入验证码" border="none"></u--input> 25 <u--input type="number" v-model="form.code" placeholder="请输入验证码" border="none"></u--input>
29 - <u-button slot="right" @tap="getCode" :text="tips" type="success" size="mini" :disabled="disabled1"></u-button>  
30 - <u-code ref="uCode" @change="codeChange" seconds="60" @start="disabled1 = true" @end="disabled1 = false"></u-code> 26 + <u-button slot="right" @tap="getCode" :text="uCode.tips" type="success" size="mini" :disabled="uCode.disabled"></u-button>
  27 + <u-code ref="uCode" @change="codeChange" seconds="60" @start="uCode.disabled === true" @end="uCode.disabled === false"></u-code>
31 </u-form-item> 28 </u-form-item>
32 <u-form-item prop="password" borderBottom v-else> 29 <u-form-item prop="password" borderBottom v-else>
33 <u--input password v-model="form.password" placeholder="请输入密码" border="none"></u--input> 30 <u--input password v-model="form.password" placeholder="请输入密码" border="none"></u--input>
@@ -69,7 +66,7 @@ @@ -69,7 +66,7 @@
69 66
70 <script> 67 <script>
71 import { checkStr } from '@/common/js/util' 68 import { checkStr } from '@/common/js/util'
72 - import { login, smsLogin } from '@/api/system/auth.js' 69 + import { login, smsLogin, sendSmsCode } from '@/api/system/auth.js'
73 import loginMpWx from './mixin/login-mp-wx.js' 70 import loginMpWx from './mixin/login-mp-wx.js'
74 import loginAppWx from './mixin/login-app-wx.js' 71 import loginAppWx from './mixin/login-app-wx.js'
75 72
@@ -78,7 +75,7 @@ @@ -78,7 +75,7 @@
78 data() { 75 data() {
79 return { 76 return {
80 agreement: true, 77 agreement: true,
81 - loginType: 'password', // 登录方式,code 验证码;password 密码 78 + loginType: 'code', // 登录方式,code 验证码;password 密码
82 loading: false, // 表单提交 79 loading: false, // 表单提交
83 rules: { 80 rules: {
84 mobile: [{ 81 mobile: [{
@@ -98,8 +95,10 @@ @@ -98,8 +95,10 @@
98 code: '', 95 code: '',
99 password: '', 96 password: '',
100 }, 97 },
101 - disabled1: false,  
102 - tips: '', 98 + uCode: {
  99 + tips: '',
  100 + disable: false,
  101 + }
103 } 102 }
104 }, 103 },
105 onLoad() { 104 onLoad() {
@@ -126,11 +125,10 @@ @@ -126,11 +125,10 @@
126 this.loading = false; 125 this.loading = false;
127 }) 126 })
128 }).catch(errors => { 127 }).catch(errors => {
129 - debugger;  
130 }); 128 });
131 }, 129 },
132 // 登陆成功的处理逻辑 130 // 登陆成功的处理逻辑
133 - loginSuccessCallBack(data){ 131 + loginSuccessCallBack(data) {
134 this.$util.msg('登录成功'); 132 this.$util.msg('登录成功');
135 this.$store.commit('setToken', data); 133 this.$store.commit('setToken', data);
136 // TODO 芋艿:如果当前页是第一页,则无法返回。期望是能够回到首页 134 // TODO 芋艿:如果当前页是第一页,则无法返回。期望是能够回到首页
@@ -139,7 +137,9 @@ @@ -139,7 +137,9 @@
139 }, 1000) 137 }, 1000)
140 }, 138 },
141 navBack() { 139 navBack() {
142 - uni.navigateBack(); 140 + uni.navigateBack({
  141 + delta: 1
  142 + });
143 }, 143 },
144 setLoginType(loginType) { 144 setLoginType(loginType) {
145 this.loginType = loginType; 145 this.loginType = loginType;
@@ -151,8 +151,8 @@ @@ -151,8 +151,8 @@
151 required: true, 151 required: true,
152 message: '请输入验证码' 152 message: '请输入验证码'
153 }, { 153 }, {
154 - min: 1000,  
155 - max: 999999, 154 + min: 4,
  155 + max: 6,
156 message: '验证码不正确' 156 message: '验证码不正确'
157 }]; 157 }];
158 } else { 158 } else {
@@ -181,24 +181,27 @@ @@ -181,24 +181,27 @@
181 })) 181 }))
182 }, 182 },
183 codeChange(text) { 183 codeChange(text) {
184 - this.tips = text; 184 + this.uCode.tips = text;
185 }, 185 },
186 getCode() { 186 getCode() {
187 - if (this.$refs.uCode.canGetCode) {  
188 - // 模拟向后端请求验证码  
189 - uni.showLoading({  
190 - title: '正在获取验证码'  
191 - })  
192 - setTimeout(() => {  
193 - uni.hideLoading();  
194 - // 这里此提示会被this.start()方法中的提示覆盖 187 + // 处于发送中,则跳过
  188 + if (!this.$refs.uCode.canGetCode) {
  189 + return;
  190 + }
  191 + // 校验手机号
  192 + this.$refs.form.validateField('mobile', errors => {
  193 + if (errors.length > 0) {
  194 + uni.$u.toast(errors[0].message);
  195 + return;
  196 + }
  197 + // 发送验证码 TODO 芋艿,枚举类
  198 + sendSmsCode(this.form.mobile, 1).then(data => {
195 uni.$u.toast('验证码已发送'); 199 uni.$u.toast('验证码已发送');
196 // 通知验证码组件内部开始倒计时 200 // 通知验证码组件内部开始倒计时
197 this.$refs.uCode.start(); 201 this.$refs.uCode.start();
198 - }, 2000);  
199 - } else {  
200 - uni.$u.toast('倒计时结束后再发送');  
201 - } 202 + }).catch(erros => {
  203 + })
  204 + })
202 }, 205 },
203 } 206 }
204 } 207 }
@@ -243,41 +246,9 @@ @@ -243,41 +246,9 @@
243 .left-top-sign { 246 .left-top-sign {
244 font-size: 120rpx; 247 font-size: 120rpx;
245 color: #f8f8f8; 248 color: #f8f8f8;
246 - position:relative; 249 + position: relative;
247 left: -12rpx; 250 left: -12rpx;
248 } 251 }
249 - .left-bottom-sign {  
250 - position: absolute;  
251 - left: -270rpx;  
252 - bottom: -320rpx;  
253 - border: 100rpx solid #d0d1fd;  
254 - border-radius: 50%;  
255 - padding: 180rpx;  
256 - }  
257 - .right-top-sign {  
258 - position:absolute;  
259 - top: 80rpx;  
260 - right: -30rpx;  
261 - z-index: 95;  
262 - &:before, &:after{  
263 - display:block;  
264 - content:"";  
265 - width: 400rpx;  
266 - height: 80rpx;  
267 - background: #b4f3e2;  
268 - }  
269 - &:before{  
270 - transform: rotate(50deg);  
271 - border-top-right-radius: 50px;  
272 - }  
273 - &:after{  
274 - position: absolute;  
275 - right: -198rpx;  
276 - top: 0;  
277 - transform: rotate(-50deg);  
278 - border-top-left-radius: 50px;  
279 - }  
280 - }  
281 252
282 /** 手机登录部分 */ 253 /** 手机登录部分 */
283 .input-content { 254 .input-content {