wx-starlock/pages/user/deleteAccount.vue
2025-07-29 11:07:43 +08:00

184 lines
4.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view>
<view class="tips">为了你的账号安全删除账号前请先使用验证码验证</view>
<view class="view-top">
<input
type="number"
class="input"
:value="verificationCode"
maxlength="6"
placeholder="请输入验证码"
placeholder-class="input-placeholder"
@input="updateInput"
/>
<view class="button-verify" @click="getEmailCode">{{ text }}</view>
</view>
<view class="button" @click="verify">验证</view>
</view>
</template>
<script>
import { mapActions, mapState } from 'pinia'
import { test } from 'uview-plus'
import { useUserStore } from '@/stores/user'
import { getEmailCodeRequest, deleteAccountRequest } from '@/api/user'
import { useBasicStore } from '@/stores/basic'
import { removeStorage } from '@/utils/storage'
export default {
data() {
return {
text: '获取验证码',
verificationCode: '',
pending: false
}
},
computed: {
...mapState(useUserStore, ['userInfo'])
},
methods: {
...mapActions(useBasicStore, ['routeJump', 'getNetworkType']),
async getEmailCode() {
if (this.text !== '获取验证码') {
return
}
const netWork = await this.getNetworkType()
if (!netWork) {
return
}
const { code, message } = await getEmailCodeRequest({
channel: this.userInfo.mobile !== '' ? '1' : '2',
codeType: 5
})
if (code === 0) {
this.updateTime()
} else {
uni.showToast({
title: message,
icon: 'none'
})
}
},
async verify() {
if (this.verificationCode.length === 6 && test.digits(this.verificationCode)) {
const netWork = await this.getNetworkType()
if (!netWork) {
return
}
this.pending = true
const { code, message } = await deleteAccountRequest({
channel: this.userInfo.mobile !== '' ? 1 : 2,
verificationCode: this.verificationCode
})
this.pending = false
if (code === 0) {
removeStorage('token')
removeStorage('openid')
removeStorage('userInfo')
removeStorage('lockList')
this.routeJump({
name: 'login',
type: 'reLaunch'
})
uni.showToast({
title: '删除成功',
icon: 'none'
})
} else {
uni.showToast({
title: message,
icon: 'none'
})
}
} else {
uni.showToast({
title: '验证码为6位纯数字',
icon: 'none'
})
}
},
updateTime() {
let time = 120
this.text = `${time} s`
const now = new Date().getTime()
const timer = setInterval(() => {
const second = parseInt((new Date().getTime() - now) / 1000, 10)
this.text = `${time - second} s`
if (time <= second) {
clearInterval(timer)
this.text = '获取验证码'
}
}, 1000)
},
updateInput(data) {
this.verificationCode = data.detail.value
}
}
}
</script>
<style lang="scss">
page {
background-color: $uni-bg-color-grey;
}
</style>
<style scoped lang="scss">
.tips {
padding: 24rpx 32rpx 0 32rpx;
font-size: 28rpx;
color: #999999;
}
.button-verify {
width: 265rpx;
height: 108rpx;
margin-top: 48rpx;
margin-left: 35rpx;
font-size: 32rpx;
line-height: 108rpx;
color: #ffffff;
text-align: center;
background: #4777ee;
border-radius: 16rpx;
}
.view-top {
display: flex;
align-items: center;
}
.input {
width: 316rpx;
height: 108rpx;
padding-right: 32rpx;
padding-left: 32rpx;
margin-top: 48rpx;
margin-left: 35rpx;
background: #ffffff;
border-radius: 16rpx;
}
.input-placeholder {
height: 108rpx;
font-size: 36rpx;
font-weight: bold;
line-height: 108rpx;
}
.button {
width: 680rpx;
height: 96rpx;
margin-top: 32rpx;
margin-left: 35rpx;
font-size: 32rpx;
line-height: 96rpx;
color: #ffffff;
text-align: center;
background: #4777ee;
border-radius: 16rpx;
}
</style>