272 lines
8.0 KiB
Vue
272 lines
8.0 KiB
Vue
<template>
|
|
<view class="container">
|
|
<!-- 用户信息区域 -->
|
|
<view class="user-info">
|
|
<image class="avatar" :src="userInfo.avatar" mode="aspectFill"></image>
|
|
<view class="user-detail">
|
|
<text class="username">{{ userInfo.name }}</text>
|
|
<text class="phone">{{ userInfo.phone }}</text>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="menu-list">
|
|
<view class="menu-item" @tap="onChangePassword">
|
|
<view class="menu-item-left">
|
|
<image
|
|
style="width: 20px; height: 20px; margin-right: 10px"
|
|
src="/static/updatePassword.png"
|
|
mode="aspectFit"
|
|
></image>
|
|
<text class="menu-text">修改密码</text>
|
|
</view>
|
|
<image
|
|
style="width: 20px; height: 20px"
|
|
src="/static/more.png"
|
|
mode="aspectFit"
|
|
></image>
|
|
</view>
|
|
|
|
<view class="menu-item" @tap="onCheckForUpdates">
|
|
<view class="menu-item-left">
|
|
<image
|
|
style="width: 20px; height: 20px; margin-right: 10px"
|
|
src="/static/version.png"
|
|
mode="aspectFit"
|
|
></image>
|
|
<text class="menu-text">检查新版本</text>
|
|
</view>
|
|
<text class="version">{{ version }}</text>
|
|
</view>
|
|
</view>
|
|
|
|
<button class="logout-btn" @tap="onLogout">退出登录</button>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import { getUsetInfo } from '@/api/index.js'
|
|
export default {
|
|
data() {
|
|
return {
|
|
userInfo: {
|
|
name: '',
|
|
phone: '',
|
|
avatar: '/static/defaultHead.png',
|
|
},
|
|
version: '3.1.8',
|
|
}
|
|
},
|
|
onLoad() {
|
|
// develop开发版 trial体验版 release正式版
|
|
let miniProgram = wx.getAccountInfoSync().miniProgram
|
|
if (miniProgram == 'release' || miniProgram == 'trial') {
|
|
this.version = wx.getAccountInfoSync().miniProgram.version || this.version
|
|
}
|
|
},
|
|
onShow() {
|
|
this.getUsetInfoEvent()
|
|
},
|
|
mounted() {
|
|
// 在组件挂载后读取存储的数据
|
|
this.userInfo.name = uni.getStorageSync('username') || ''
|
|
this.userInfo.phone = uni.getStorageSync('phone') || ''
|
|
if (/^1\d{10}$/.test(this.userInfo.phone)) {
|
|
this.userInfo.phone = this.maskPhoneNumber(this.userInfo.phone)
|
|
}
|
|
},
|
|
methods: {
|
|
// 获取用户信息
|
|
getUsetInfoEvent() {
|
|
getUsetInfo(uni.getStorageSync('userId')).then((res) => {
|
|
if (res.res == 1) {
|
|
if (res.obj && res.obj.appliedFace) {
|
|
if (
|
|
res.obj.appliedFace == '' ||
|
|
res.obj.appliedFace == null ||
|
|
res.obj.appliedFace == 'null'
|
|
) {
|
|
this.userInfo.avatar = '/static/defaultHead.png'
|
|
} else {
|
|
this.userInfo.avatar = res.obj.appliedFace
|
|
}
|
|
}
|
|
}
|
|
})
|
|
},
|
|
maskPhoneNumber(phoneNumber) {
|
|
return phoneNumber.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
|
|
},
|
|
onChangePassword() {
|
|
uni.navigateTo({
|
|
url: '/pages/password/index',
|
|
})
|
|
},
|
|
/**
|
|
* 检查并处理小程序更新
|
|
*/
|
|
onCheckForUpdates() {
|
|
const updateManager = uni.getUpdateManager()
|
|
|
|
// 检查更新
|
|
updateManager.onCheckForUpdate((res) => {
|
|
console.log('[App] 是否有新版本:', res.hasUpdate)
|
|
if (!res.hasUpdate) {
|
|
uni.showToast({
|
|
title: '已是最新版本',
|
|
icon: 'none',
|
|
})
|
|
}
|
|
})
|
|
|
|
// 监听新版本下载成功
|
|
updateManager.onUpdateReady(() => {
|
|
this.promptForUpdate(updateManager)
|
|
})
|
|
|
|
// 监听新版本下载失败
|
|
updateManager.onUpdateFailed(() => {
|
|
console.error('[App] 新版本下载失败')
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 提示用户应用新版本
|
|
* @param {Object} updateManager - 更新管理对象
|
|
*/
|
|
promptForUpdate(updateManager) {
|
|
uni.showModal({
|
|
title: '更新提示',
|
|
content: '新版本已准备好,是否重启应用?',
|
|
showCancel: false,
|
|
success: (res) => {
|
|
if (res.confirm) {
|
|
console.log('[App] 用户确认重启应用')
|
|
updateManager.applyUpdate()
|
|
}
|
|
},
|
|
})
|
|
},
|
|
onLogout() {
|
|
uni.showModal({
|
|
title: '提示',
|
|
content: '确认退出登录?',
|
|
success: (res) => {
|
|
if (res.confirm) {
|
|
// 执行退出登录逻辑
|
|
uni.clearStorageSync()
|
|
uni.setStorageSync('isLoginOut', 'yes')
|
|
uni.reLaunch({
|
|
url: '/pages/login/index',
|
|
})
|
|
}
|
|
},
|
|
})
|
|
},
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.container {
|
|
min-height: 100vh;
|
|
background-color: #f5f5f5;
|
|
padding: 32rpx;
|
|
}
|
|
|
|
.user-info {
|
|
display: flex;
|
|
align-items: center;
|
|
margin-bottom: 30rpx;
|
|
|
|
.avatar {
|
|
width: 100rpx;
|
|
height: 100rpx;
|
|
border-radius: 50%;
|
|
margin-right: 20rpx;
|
|
}
|
|
|
|
.user-detail {
|
|
display: flex;
|
|
flex-direction: column;
|
|
|
|
.username {
|
|
font-size: 32rpx;
|
|
font-weight: bold;
|
|
color: #333;
|
|
margin-bottom: 6rpx;
|
|
}
|
|
|
|
.phone {
|
|
font-size: 28rpx;
|
|
color: #666;
|
|
}
|
|
}
|
|
}
|
|
|
|
.menu-list {
|
|
background-color: #fff;
|
|
border-radius: 16rpx;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.menu-item {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
padding: 32rpx;
|
|
border-bottom: 2rpx solid #f5f5f5;
|
|
}
|
|
|
|
.menu-item:last-child {
|
|
border-bottom: none;
|
|
}
|
|
|
|
.menu-item-left {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.iconfont {
|
|
font-size: 40rpx;
|
|
margin-right: 20rpx;
|
|
color: #666;
|
|
}
|
|
|
|
.menu-text {
|
|
font-size: 32rpx;
|
|
color: #333;
|
|
}
|
|
|
|
.version {
|
|
font-size: 32rpx;
|
|
color: #999;
|
|
}
|
|
|
|
.icon-arrow {
|
|
color: #999;
|
|
margin-right: 0;
|
|
}
|
|
|
|
.logout-btn {
|
|
width: 100%;
|
|
height: 88rpx;
|
|
line-height: 88rpx;
|
|
text-align: center;
|
|
background-color: #4080ff;
|
|
color: #fff;
|
|
border-radius: 44rpx;
|
|
font-size: 32rpx;
|
|
margin-top: 60rpx;
|
|
}
|
|
|
|
/* 去除按钮默认边框 */
|
|
.logout-btn::after {
|
|
border: none;
|
|
}
|
|
|
|
/* 按钮点击效果 */
|
|
.logout-btn:active {
|
|
opacity: 0.8;
|
|
}
|
|
</style>
|