You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

147 lines
4.5 KiB

<template>
<v-page>
<v-header :title="`${user.google_token?$t('safe.a0'):$t('safe.a1')}${$t('safe.b9')}`"></v-header>
<!-- 未绑定的第一步-->
<main v-show="step==1&&!user.google_token" class="layout-main bg-panel-4 p-t-md">
<view
class="p-x-md p-y-xs bg-theme-1-transparent color-theme-1 fn-sm"
>{{$t('safe.c0')}}{{lang=='zh-TW'||lang=='jp'?'。':'.'}}</view>
<!-- 二维码 -->
<view class="row p-md fn-center code-box">
<v-qr class="v-qr" :text="googleToken.qrcode_url"></v-qr>
<view class="m-y-md color-light">{{googleToken.secret}}</view>
<view class="color-theme-1" @click="$copy(googleToken.secret)">{{$t('safe.c1')}}</view>
</view>
</main>
<view v-show="step==1&&!user.google_token" class="p-md bg-panel-4">
<p class="d-flex m-b-xs">
<van-checkbox v-model="checkToken" class="m-r-xs" icon-size="15px" checked-color="#f05319"></van-checkbox>{{$t('safe.c2')}}
</p>
<v-button class="w-max" block :disabled="!checkToken" type="primary" @click="step++">{{$t('safe.c3')}}</v-button>
</view>
<!-- 未绑定的第二步或者未绑定 -->
<main
v-show="step==2||user.google_token"
class="layout-main bg-panel-4 m-t-md"
>
<view class="form-item border-b p-md" v-if="user.phone_status==1">
<view class="label m-b-xs">{{$t('safe.c4')}}</view>
<view class="input color-light">
<v-input v-model="form.sms_code" :placeholder="$t('safe.a6')">
<template #right>
<v-code url="/user/getCode" :data="{type:1}" />
</template>
</v-input>
</view>
</view>
<view class="form-item border-b p-md" v-if="user.email_status==1">
<view class="label m-b-xs">{{$t('safe.a5')}}</view>
<view class="input color-light">
<v-input v-model="form.email_code" :placeholder="$t('safe.a6')">
<template #right>
<v-code url="/user/getCode" :data="{type:2}" />
</template>
</v-input>
</view>
</view>
<view class="form-item border-b p-md">
<view class="label m-b-xs">{{$t('safe.b9')}}</view>
<view class="input color-light">
<v-input v-model="form.google_code" :placeholder="$t('safe.a6')"></v-input>
</view>
</view>
</main>
<view v-show="step==2" class="p-md bg-panel-4">
<v-button class="w-max" block type="theme" ref="btn" @click="bindGoogle">{{$t('safe.c6')}}</v-button>
</view>
<!-- 解绑 -->
<view v-show="user.google_token" class="p-md bg-panel-4">
<v-button class="w-max" block type="theme" ref="btn1" @click="unBindGoogle">{{$t('safe.a0')}}</v-button>
</view>
<van-toast id="van-toast" />
</v-page>
</template>
<script>
import { mapState, mapActions } from "vuex";
import Setting from "@/api/setting";
export default {
data() {
return {
step: 1,
checkToken: false,
googleToken: {},
form: {
google_token: "",
google_code: "",
sms_code: "",
email_code: "",
},
lang: uni.getStorageSync('language')
};
},
computed: {
...mapState({
user: "user",
}),
},
methods: {
...mapActions({
setUserInfo: "setUserInfo",
}),
// 获取googleToken
getToken() {
Setting.getGoogleToken()
.then((res) => {
this.googleToken = res.data;
})
.catch(() => {});
},
// 绑定谷歌
bindGoogle() {
this.form.google_token = this.googleToken.secret;
Setting.bindGoogleToken(this.form, { btn: this.$refs.btn })
.then(() => {
// 绑定成功
this.step =1
this.$back(-1);
this.setUserInfo();
this.$toast.success(this.$t('safe.a9'));
})
.catch(() => {});
},
// 解除绑定
unBindGoogle() {
Setting.unbindGoogleToken(this.form, { btn: this.$refs.btn1 })
.then(() => {
// 绑定成功
this.$back();
this.setUserInfo();
this.$toast.success(this.$t('safe.a8'));
})
.catch(() => {});
},
},
created() {
if (!this.user.google_token) this.getToken();
},
beforeRouteLeave(to, from, next) {
if (this.step != 1) {
this.step--;
next(false);
} else {
next();
}
},
};
</script>
<style lang="scss" scoped>
.v-qr {
width: 150px;
height: 150px;
margin: 0 auto;
border: 4px solid $white;
box-sizing: border-box;
}
</style>