NGTools/pagesPackage/ucenter/settings/settings.vue

304 lines
8.3 KiB
Vue
Raw Normal View History

<template>
<view class="content">
<!-- 功能列表 -->
<uni-list class="mt10" :border="false">
<uni-list-item :title="$t('settings.userInfo')" to="/uni_modules/uni-id-pages/pages/userinfo/userinfo" link="navigateTo"></uni-list-item>
<uni-list-item v-if="userInfo.mobile" :title="$t('settings.changePassword')" :to="'/pages/ucenter/login-page/pwd-retrieve/pwd-retrieve?phoneNumber='+ userInfo.mobile" link="navigateTo"></uni-list-item>
</uni-list>
<uni-list class="mt10" :border="false">
<!-- #ifndef H5 -->
<!-- #ifdef APP-PLUS -->
<!-- 检查push过程未结束不显示push设置项 -->
<uni-list-item :title="$t('settings.clearTmp')" @click="clearTmp" link></uni-list-item>
<uni-list-item v-show="pushIsOn != 'wait'" :title="$t('settings.pushServer')" @click.native="pushIsOn?pushServer.off():pushServer.on()" showSwitch :switchChecked="pushIsOn"></uni-list-item>
<!-- #endif -->
<uni-list-item v-if="supportMode.includes('fingerPrint')" :title="$t('settings.fingerPrint')" @click.native="startSoterAuthentication('fingerPrint')" link></uni-list-item>
<uni-list-item v-if="supportMode.includes('facial')" :title="$t('settings.facial')" @click="startSoterAuthentication('facial')" link></uni-list-item>
<!-- #endif -->
<uni-list-item v-if="i18nEnable" :title="$t('settings.changeLanguage')" @click="changeLanguage" :rightText="currentLanguage" link></uni-list-item>
</uni-list>
<!-- 退出/登录 按钮 -->
<view class="bottom-back" @click="changeLoginState">
<text class="bottom-back-text" v-if="hasLogin">{{$t('settings.logOut')}}</text>
<text class="bottom-back-text" v-else>{{$t('settings.login')}}</text>
</view>
</view>
</template>
<script>
import pushServer from './dc-push/push.js';
import {
store,
mutations
} from '@/uni_modules/uni-id-pages/common/store.js'
export default {
data() {
return {
pushServer:pushServer,
supportMode:[],
pushIsOn:"wait",
currentLanguage:"",
userInfo:{}
}
},
computed: {
hasLogin(){
return store.hasLogin
},
i18nEnable(){
return getApp().globalData.config.i18n.enable
}
},
onLoad() {
this.currentLanguage = uni.getStorageSync('CURRENT_LANG') == "en"?'English':'简体中文'
uni.setNavigationBarTitle({
title: this.$t('settings.navigationBarTitle')
})
// #ifdef APP-PLUS || MP-WEIXIN
uni.checkIsSupportSoterAuthentication({
success: (res) => {
this.supportMode = res.supportMode
},
fail: (err) => {
console.log(err);
}
})
// #endif
},
onShow() {
// 检查手机端获取推送是否开启
//#ifdef APP-PLUS
setTimeout(()=>{
this.pushIsOn = pushServer.isOn();
},300)
//#endif
},
methods: {
async changeLoginState(){
if(this.hasLogin){
await mutations.logout()
}else{
uni.redirectTo({
url: '/uni_modules/uni-id-pages/pages/login/login-withoutpwd',
});
}
},
/**
* 开始生物认证
*/
startSoterAuthentication(checkAuthMode) {
console.log(checkAuthMode);
let title = {"fingerPrint":this.$t('settings.fingerPrint'),"facial":this.$t('settings.facial')}[checkAuthMode]
// 检查是否开启认证
this.checkIsSoterEnrolledInDevice({checkAuthMode,title})
.then(() => {
console.log(checkAuthMode,title);
// 开始认证
uni.startSoterAuthentication({
requestAuthModes: [checkAuthMode],
challenge: '123456', // 微信端挑战因子
authContent: this.$t('settings.please')+ " " + `${title}`,
complete: (res) => {
console.log(res);
},
success: (res) => {
console.log(res);
if (res.errCode == 0) {
/**
* 验证成功后开启自己的业务逻辑
*
* app端以此为依据 验证成功
*
* 微信小程序需要再次通过后台验证resultJSON与resultJSONSignature获取最终结果
*/
return uni.showToast({
title: `${title}`+this.$t('settings.successText'),
icon: 'none'
});
}
uni.showToast({
title:this.$t('settings.failTip'),
icon: 'none'
});
},
fail: (err) => {
console.log(err);
console.log(`认证失败:${err.errCode}`);
uni.showToast({
title:this.$t('settings.authFailed'),
// title: `认证失败`,
icon: 'none'
});
}
})
})
},
checkIsSoterEnrolledInDevice({checkAuthMode,title}) {
return new Promise((resolve, reject) => {
uni.checkIsSoterEnrolledInDevice({
checkAuthMode,
success: (res) => {
console.log(res);
if (res.isEnrolled) {
return resolve(res);
}
uni.showToast({
title: this.$t('settings.deviceNoOpen')+ `${title}`,
icon: 'none'
});
reject(res);
},
fail: (err) => {
console.log(err);
uni.showToast({
title: `${title}` + this.$t('settings.fail'),
icon: 'none'
});
reject(err);
}
})
})
},
clearTmp() {
uni.showLoading({
title: this.$t('settings.clearing'),
mask: true
});
/*
任何临时存储或删除不直接影响程序运行逻辑清除缓存必定造成业务逻辑的变化打开页面的图片不从缓存中读取而从网络请求的内容都可以视为缓存主要有storage和file写入
缓存分为三部分
原生层webviewx5播放器的第三方sdk的地图组件等
前端框架重启就会自动清除
开发者自己的逻辑
本示例的 检测更新功能下载了apk安装包
其他逻辑需要根据开发者自己的业务设计
比如有聊天功能的应用聊天记录是否视为缓存还是单独提供清除聊天记录的功能由开发者自己设计
*/
uni.getSavedFileList({
success:res=>{
if (res.fileList.length > 0) {
uni.removeSavedFile({
filePath: res.fileList[0].filePath,
complete:res=>{
console.log(res);
uni.hideLoading()
uni.showToast({
title: this.$t('settings.clearedSuccessed'),
icon: 'none'
});
}
});
}else{
uni.hideLoading()
uni.showToast({
title: this.$t('settings.clearedSuccessed'),
icon: 'none'
});
}
},
complete:e=>{
console.log(e);
}
});
},
changeLanguage(){
console.log('语言切换')
uni.showActionSheet({
itemList: ["English","简体中文"],
success: res => {
console.log(res.tapIndex);
let language = uni.getStorageSync('CURRENT_LANG')
if(
!res.tapIndex && language=='zh-Hans' || res.tapIndex && language=='en'
){
const globalData = getApp().globalData
if (language === 'en') {
language = globalData.locale = 'zh-Hans'
} else {
language = globalData.locale = 'en'
}
uni.setStorageSync('CURRENT_LANG', language)
getApp().globalData.$i18n.locale = language
this.currentLanguage = res.tapIndex?'简体中文':'English'
if(uni.setLocale){
uni.setLocale(language)
}
uni.reLaunch({
url: '/pages/grid/grid',
complete: () => {
uni.$emit("changeLanguage",language)
}
})
}
},
fail: () => {},
complete: () => {}
});
}
}
}
</script>
<style>
/* #ifndef APP-NVUE */
page {
flex: 1;
width: 100%;
height: 100%;
}
uni-button:after {
border: none;
border-radius: 0;
}
/* #endif */
.content {
/* #ifndef APP-NVUE */
display: flex;
width: 750rpx;
height: 100vh;
/* #endif */
flex-direction: column;
flex: 1;
background-color: #F9F9F9;
}
.bottom-back {
margin-top: 10px;
width: 750rpx;
height: 44px;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: column;
justify-content: center;
align-items: center;
/* #ifndef APP-NVUE */
border: none;
/* #endif */
border-width: 0;
border-radius: 0;
background-color: #FFFFFF;
}
.bottom-back-text {
font-size: 33rpx;
}
.mt10 {
margin-top: 10px;
}
/* #ifndef APP-NVUE || VUE3 */
.content ::v-deep .uni-list {
background-color: #F9F9F9;
}
.content ::v-deep .uni-list-item--disabled,.list-item {
height: 50px;
margin-bottom: 1px;
}
/* #endif */
</style>