更新:增加数据迁移功能

This commit is contained in:
2025-12-25 10:13:04 +08:00
parent 5db7c6f9d9
commit 6809d69d08

View File

@@ -0,0 +1,154 @@
<template>
<view class="commonPage commonPageBox">
<public-module></public-module>
<z-nav-bar title="数据迁移" bgColor="#258feb" fontColor="#fff"></z-nav-bar>
<view class="migrate-tips">迁移后不可恢复请谨慎操作</view>
<view class="code-wrap">
<view class="account">账号{{ userInfo.tel || userInfo.email}}</view>
<view v-if="code" class="code-box">
<view class="code-number">{{ code }}</view>
<view><text>{{ remaining }}</text>有效<text class="uni-link" @click="handleRefresh">刷新</text></view>
</view>
</view>
<view class="migrate-intro">
<view class="migrate-intro-title">迁移说明</view>
<view>1. 请在吴门国际APP中完成数据迁移操作方式我的-数据迁移-输入账号和移验证码</view>
<view>2. 数据迁移完成后本账号数据将被清空已购买的天医币积分课程VIP等数据将转移到新账号</view>
<view>3. 迁移过程可能需要几分钟时间请耐心等待</view>
<view>4. 如遇到问题请联系客服获取帮助</view>
</view>
</view>
</template>
<script>
import $http from "@/config/requestConfig.js";
import { mapState } from "vuex";
export default {
data() {
return {
code: '',
remaining: '',
timer: null,
lastRefreshTime: 0, // 上次刷新时间戳
refreshCooldown: 10000 // 节流时间3秒内只能刷新一次
}
},
computed: {
...mapState(["userInfo"]),
},
created() {
this.countDown()
},
beforeDestroy() {
// 组件销毁前清除定时器
if (this.timer) clearInterval(this.timer);
},
methods: {
getCode() {
this.$http
        .post("common/user/getMigrationCode")
        .then((res) => {
          if (res.code == 0) {
            this.code = res.migrationCode;
          }
        })
        .catch((e) => {
          console.log(e);
        });
},
async countDown() {
// 清除已有的定时器
if (this.timer) clearInterval(this.timer);
await this.getCode() // 获取验证码
// 初始化倒计时时间3分钟 = 180秒
let totalSeconds = 175;
// 立即更新第一次显示
this.updateRemainingTime(totalSeconds);
// 设置每秒执行的定时器
this.timer = setInterval(() => {
totalSeconds--;
if (totalSeconds <= 0) {
this.countDown()
return;
}
this.updateRemainingTime(totalSeconds);
}, 1000);
},
updateRemainingTime(totalSeconds) {
const minutes = Math.floor(totalSeconds / 60);
const seconds = totalSeconds % 60;
this.remaining = `${minutes}${seconds.toString().padStart(2, '0')}`;
},
// 带节流的刷新方法
handleRefresh() {
const now = Date.now();
// 如果距离上次刷新时间小于节流时间,不执行刷新
if (now - this.lastRefreshTime < this.refreshCooldown) {
uni.showToast({
title: `操作太频繁,请${Math.ceil((this.refreshCooldown - (now - this.lastRefreshTime)) / 1000)}秒后再试`,
icon: 'none',
duration: 2000
});
return;
}
// 更新上次刷新时间
this.lastRefreshTime = now;
// 执行刷新
this.countDown();
// 给用户反馈
uni.showToast({
title: '刷新成功',
icon: 'success',
duration: 1500
});
}
}
}
</script>
<style lang="scss" scoped>
.migrate-tips {
color: #ff0000;
font-weight: bold;
text-align: center;
font-size: 16px;
padding: 10px 0;
}
.code-wrap {
margin: 0 20px;
padding: 10px 15px;
background-color: #f0f0f0;
border-radius: 8px;
font-size: 16px;
.code-box {
display: flex;
align-items: baseline;
padding-top: 10px;
.code-number {
font-weight: bold;
font-size: 28px;
color: #000;
margin-right: 10px;
}
}
}
.migrate-intro {
margin: 20px;
.migrate-intro-title {
font-weight: bold;
font-size: 16px;
margin-bottom: 5px;
}
}
</style>