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
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>
|