index.vue
5.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<!--
* @Date: 2022-09-19 14:11:06
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2023-12-21 16:45:56
* @FilePath: /meihuaApp/src/pages/login/index.vue
* @Description: 文件描述
-->
<template>
<view>
<view style="color: #6A4925; font-size: 56rpx; text-align: center;">登 录</view>
<view style="border: 1px solid #F1EBDF; width: 90%; margin: 0 auto; margin-top: 50rpx; border-radius: 50rpx; padding: 5rpx 0;">
<nut-input v-model="tel" placeholder="请输入手机号" :border="false" type="number" max-length="11" />
</view>
<view style="border: 1px solid #F1EBDF; width: 90%; margin: 0 auto; margin-top: 20rpx; border-radius: 50rpx;">
<!-- <nut-input v-model="code" placeholder="请输入验证码" :border="false" type="number" >
<template #right> <nut-button size="small" color="#6A4925">获取验证码</nut-button> </template>
</nut-input> -->
<nut-row>
<nut-col span="14">
<nut-input v-model="code" placeholder="请输入验证码" :border="false" type="number" :formatter="codeFormatter" max-length="4"></nut-input>
</nut-col>
<nut-col span="10">
<view style="padding: 25rpx 10rpx; line-height: 40rpx; background-color: #6A4925; color: #fff; border-top-right-radius: 50rpx; border-bottom-right-radius: 50rpx; font-size: 28rpx;text-align: center;">
<view @tap="getCode" v-if="!time_remaining">获取验证码</view>
<text v-else>{{ time_remaining }}秒后重新发送</text>
</view>
</nut-col>
</nut-row>
</view>
<view style="color: #7B7B7B; font-size: 28rpx; margin: 20rpx 50rpx;">未注册手机号验证后自动创建新账号</view>
<view style="margin: 50rpx; margin-bottom: 10rpx;">
<nut-button block color="#6A4925" size="large" @tap="login"><text style="font-size: 38rpx;">登 录</text></nut-button>
</view>
<view style="display: flex; align-items: center; margin-left: 60rpx; margin-top: 30rpx; color: #6A4925;">
<IconFont name="checked" color="#6A4925"></IconFont>
<text style="margin-left: 5rpx;">登录即同意</text><text style="font-weight: bold;" @tap="tapRight">《法律条款及隐私政策》</text>
</view>
<nut-popup position="right" closeable :style="{ width: '100%', height: '100%' }" v-model:visible="showRight"></nut-popup>
</view>
</template>
<script setup>
import Taro from '@tarojs/taro'
import { IconFont } from '@nutui/icons-vue-taro';
import { ref, nextTick } from "vue";
import { getCurrentPageParam } from "@/utils/weapp";
let countdownIntervalId; // 用于存储倒计时的计时器 ID
const startCountdown = (timeInSeconds, updateCallback, resetCallback) => {
if (countdownIntervalId) {
// 如果已经有倒计时在进行中,则先清除之前的计时器
clearInterval(countdownIntervalId);
}
let timeLeft = timeInSeconds;
// 更新倒计时显示的函数
const updateCountdown = () => {
if (timeLeft <= 0) {
// 倒计时结束
clearInterval(countdownIntervalId);
resetCallback(); // 调用重置函数
} else {
// 更新倒计时显示
updateCallback(timeLeft);
timeLeft--;
}
}
// 立即执行一次更新倒计时显示函数
updateCountdown();
// 每秒调用一次更新倒计时显示函数
countdownIntervalId = setInterval(updateCountdown, 1000);
}
const resetCountdown = () => {
if (countdownIntervalId) {
// 清除倒计时计时器
clearInterval(countdownIntervalId);
countdownIntervalId = undefined;
console.log("倒计时已重置");
time_remaining.value = 0;
}
}
const time_remaining = ref(0);
const tel = ref('');
const code = ref('');
const showRight = ref(false);
const tapRight = () => {
showRight.value = true;
}
const codeFormatter = (value) => {
return value.replace(/\D/g, '').substring(0, 4);
}
const isValidTel = (tel) => {
return /^1\d{10}$/.test(tel);
}
const login = () => {
console.warn(tel.value);
console.warn(code.value);
if (!isValidTel(tel.value) ||!code.value) {
Taro.showToast({
title: '请检查输入项',
icon: 'error',
duration: 2000
});
return;
} else {
Taro.showToast({
title: '登录成功',
icon: 'success',
duration: 2000,
success: () => {
setTimeout(() => {
let params = getCurrentPageParam();
if (params.page === 'detail') { // 详情页
Taro.navigateBack({
delta: 1
});
}
if (params.page === 'my') { // 登录页
Taro.redirectTo({
url: '/pages/myInfo/index'
});
}
}, 1000);
}
});
}
}
const updateDisplay = (timeLeft) => {
// 倒计时剩余时间
time_remaining.value = timeLeft;
}
const resetDisplay = () => {
// 在此处进行重置后的展示操作
resetCountdown();
}
const getCode = () => {
if (isValidTel(tel.value)) {
Taro.showToast({
title: '验证码已发送',
icon:'success',
duration: 2000
});
startCountdown(10, updateDisplay, resetDisplay);
} else {
Taro.showToast({
title: '请检查手机号',
icon: 'error',
duration: 2000
});
}
}
</script>
<script>
import "./index.less";
export default {
name: "loginPage",
};
</script>