NGTools/pagesPackage/ucenter/settings/settings.vue
ldeyun 9dbfdc6c71 V1.0.0
微信小程序运行成功;
H5运行成功
2024-09-30 01:30:39 +08:00

304 lines
8.3 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 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写入。
缓存分为三部分
原生层webview、x5播放器的、第三方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>