383 lines
8.9 KiB
Vue
383 lines
8.9 KiB
Vue
<template>
|
||
<view class="setting-page">
|
||
<view class="setting-content">
|
||
<!-- 账户设置 -->
|
||
<view class="setting-section">
|
||
<view class="section-title">账户设置</view>
|
||
<view class="setting-list">
|
||
<view class="setting-item" @click="navigateToProfile">
|
||
<view class="item-left">
|
||
<text class="item-title">个人资料</text>
|
||
</view>
|
||
<view class="item-right">
|
||
<text class="item-value">查看</text>
|
||
<uni-icons type="right" size="24" color="#ccc"></uni-icons>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="setting-item" @click="navigateToSecurity">
|
||
<view class="item-left">
|
||
<text class="item-title">账户安全</text>
|
||
</view>
|
||
<view class="item-right">
|
||
<text class="item-value">设置</text>
|
||
<uni-icons type="right" size="24" color="#ccc"></uni-icons>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 应用设置 -->
|
||
<view class="setting-section">
|
||
<view class="section-title">应用设置</view>
|
||
<view class="setting-list">
|
||
<view class="setting-item" @click="toggleNotifications">
|
||
<view class="item-left">
|
||
<text class="item-title">消息通知</text>
|
||
</view>
|
||
<view class="item-right">
|
||
<uni-switch
|
||
:checked="notificationsEnabled"
|
||
activeColor="#007aff"
|
||
@change="toggleNotifications"
|
||
></uni-switch>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="setting-item" @click="toggleDarkMode">
|
||
<view class="item-left">
|
||
<text class="item-title">深色模式</text>
|
||
</view>
|
||
<view class="item-right">
|
||
<uni-switch
|
||
:checked="darkModeEnabled"
|
||
activeColor="#007aff"
|
||
@change="toggleDarkMode"
|
||
></uni-switch>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="setting-item" @click="clearCache">
|
||
<view class="item-left">
|
||
<text class="item-title">清除缓存</text>
|
||
</view>
|
||
<view class="item-right">
|
||
<text class="item-value">{{cacheSize}}</text>
|
||
<uni-icons type="right" size="24" color="#ccc"></uni-icons>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 关于 -->
|
||
<view class="setting-section">
|
||
<view class="section-title">关于</view>
|
||
<view class="setting-list">
|
||
<view class="setting-item" @click="navigateToAbout">
|
||
<view class="item-left">
|
||
<text class="item-title">关于我们</text>
|
||
</view>
|
||
<view class="item-right">
|
||
<text class="item-value">{{appVersion}}</text>
|
||
<uni-icons type="right" size="24" color="#ccc"></uni-icons>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="setting-item" @click="navigateToPrivacy">
|
||
<view class="item-left">
|
||
<text class="item-title">隐私政策</text>
|
||
</view>
|
||
<view class="item-right">
|
||
<uni-icons type="right" size="24" color="#ccc"></uni-icons>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="setting-item" @click="navigateToTerms">
|
||
<view class="item-left">
|
||
<text class="item-title">用户协议</text>
|
||
</view>
|
||
<view class="item-right">
|
||
<uni-icons type="right" size="24" color="#ccc"></uni-icons>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 退出登录 -->
|
||
<view class="logout-section">
|
||
<button class="logout-btn" @click="logout">退出登录</button>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<script setup>
|
||
import { ref, onMounted } from 'vue'
|
||
|
||
// 响应式数据
|
||
const notificationsEnabled = ref(true)
|
||
const darkModeEnabled = ref(false)
|
||
const cacheSize = ref('12.3MB')
|
||
const appVersion = ref('1.0.0')
|
||
|
||
// 生命周期
|
||
onMounted(() => {
|
||
// 初始化时检查缓存大小等信息
|
||
checkCacheSize()
|
||
})
|
||
|
||
// 切换通知开关
|
||
const toggleNotifications = (e) => {
|
||
notificationsEnabled.value = e.detail.checked || !notificationsEnabled.value
|
||
uni.showToast({
|
||
title: notificationsEnabled.value ? '通知已开启' : '通知已关闭',
|
||
icon: 'none'
|
||
})
|
||
}
|
||
|
||
// 切换深色模式
|
||
const toggleDarkMode = (e) => {
|
||
darkModeEnabled.value = e.detail.checked || !darkModeEnabled.value
|
||
uni.showToast({
|
||
title: darkModeEnabled.value ? '深色模式已开启' : '深色模式已关闭',
|
||
icon: 'none'
|
||
})
|
||
|
||
// 这里可以添加实际的深色模式切换逻辑
|
||
// 例如:document.body.classList.toggle('dark-mode')
|
||
}
|
||
|
||
// 检查缓存大小
|
||
const checkCacheSize = () => {
|
||
// 模拟获取缓存大小
|
||
// 实际项目中可以调用uni.getStorageInfoSync()等API获取
|
||
}
|
||
|
||
// 清除缓存
|
||
const clearCache = () => {
|
||
uni.showModal({
|
||
title: '清除缓存',
|
||
content: '确定要清除所有缓存数据吗?',
|
||
success: (res) => {
|
||
if (res.confirm) {
|
||
// 模拟清除缓存
|
||
setTimeout(() => {
|
||
cacheSize.value = '0KB'
|
||
uni.showToast({
|
||
title: '缓存清除成功',
|
||
icon: 'success'
|
||
})
|
||
}, 500)
|
||
}
|
||
}
|
||
})
|
||
}
|
||
|
||
// 导航到个人资料页面
|
||
const navigateToProfile = () => {
|
||
// 实际项目中添加导航逻辑
|
||
uni.showToast({
|
||
title: '跳转到个人资料页面',
|
||
icon: 'none'
|
||
})
|
||
}
|
||
|
||
// 导航到账户安全页面
|
||
const navigateToSecurity = () => {
|
||
// 实际项目中添加导航逻辑
|
||
uni.showToast({
|
||
title: '跳转到账户安全页面',
|
||
icon: 'none'
|
||
})
|
||
}
|
||
|
||
// 导航到关于页面
|
||
const navigateToAbout = () => {
|
||
// 实际项目中添加导航逻辑
|
||
uni.showToast({
|
||
title: '跳转到关于页面',
|
||
icon: 'none'
|
||
})
|
||
}
|
||
|
||
// 导航到隐私政策页面
|
||
const navigateToPrivacy = () => {
|
||
// 实际项目中添加导航逻辑
|
||
uni.showToast({
|
||
title: '跳转到隐私政策页面',
|
||
icon: 'none'
|
||
})
|
||
}
|
||
|
||
// 导航到用户协议页面
|
||
const navigateToTerms = () => {
|
||
// 实际项目中添加导航逻辑
|
||
uni.showToast({
|
||
title: '跳转到用户协议页面',
|
||
icon: 'none'
|
||
})
|
||
}
|
||
|
||
// 退出登录
|
||
const logout = () => {
|
||
uni.showModal({
|
||
title: '退出登录',
|
||
content: '确定要退出登录吗?',
|
||
success: (res) => {
|
||
if (res.confirm) {
|
||
// 模拟退出登录
|
||
setTimeout(() => {
|
||
uni.showToast({
|
||
title: '已退出登录',
|
||
icon: 'success'
|
||
})
|
||
// 实际项目中可以添加跳转到登录页面的逻辑
|
||
}, 500)
|
||
}
|
||
}
|
||
})
|
||
}
|
||
</script>
|
||
|
||
<style scoped>
|
||
.setting-page {
|
||
background-color: #f5f5f5;
|
||
min-height: 100vh;
|
||
padding-bottom: 40rpx;
|
||
}
|
||
|
||
/* 页面标题 */
|
||
.page-title {
|
||
font-size: 34rpx;
|
||
font-weight: bold;
|
||
color: #333;
|
||
background-color: #fff;
|
||
padding: 30rpx;
|
||
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
|
||
text-align: center;
|
||
}
|
||
|
||
/* 内容区域 */
|
||
.setting-content {
|
||
padding: 20rpx 0;
|
||
}
|
||
|
||
/* 设置分组 */
|
||
.setting-section {
|
||
margin-bottom: 30rpx;
|
||
}
|
||
|
||
/* 分组标题 */
|
||
.section-title {
|
||
font-size: 26rpx;
|
||
color: #999;
|
||
padding: 0 30rpx 10rpx;
|
||
}
|
||
|
||
/* 设置列表 */
|
||
.setting-list {
|
||
background-color: #fff;
|
||
border-radius: 12rpx;
|
||
margin: 0 30rpx;
|
||
overflow: hidden;
|
||
}
|
||
|
||
/* 设置项 */
|
||
.setting-item {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
padding: 30rpx;
|
||
position: relative;
|
||
transition: background-color 0.2s ease;
|
||
}
|
||
|
||
.setting-item:active {
|
||
background-color: #f8f8f8;
|
||
}
|
||
|
||
.setting-item:not(:last-child)::after {
|
||
content: '';
|
||
position: absolute;
|
||
bottom: 0;
|
||
left: 30rpx;
|
||
right: 30rpx;
|
||
height: 1rpx;
|
||
background-color: #f0f0f0;
|
||
}
|
||
|
||
/* 左侧内容 */
|
||
.item-left {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
}
|
||
|
||
/* 图标容器 */
|
||
.item-icon {
|
||
width: 60rpx;
|
||
height: 60rpx;
|
||
border-radius: 12rpx;
|
||
background-color: #f0f8ff;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
margin-right: 20rpx;
|
||
}
|
||
|
||
/* 标题文本 */
|
||
.item-title {
|
||
font-size: 30rpx;
|
||
color: #333;
|
||
}
|
||
|
||
/* 右侧内容 */
|
||
.item-right {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
}
|
||
|
||
/* 值文本 */
|
||
.item-value {
|
||
font-size: 28rpx;
|
||
color: #999;
|
||
margin-right: 10rpx;
|
||
}
|
||
|
||
/* 退出登录区域 */
|
||
.logout-section {
|
||
padding: 40rpx 30rpx 0;
|
||
}
|
||
|
||
/* 退出登录按钮 */
|
||
.logout-btn {
|
||
background-color: #fff;
|
||
color: #ff3b30;
|
||
border-radius: 80rpx;
|
||
font-size: 32rpx;
|
||
height: 90rpx;
|
||
line-height: 90rpx;
|
||
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
|
||
}
|
||
|
||
.logout-btn:active {
|
||
background-color: #f8f8f8;
|
||
}
|
||
|
||
/* 微信小程序特定样式优化 */
|
||
/* #ifdef MP-WEIXIN */
|
||
.setting-item {
|
||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0.05);
|
||
}
|
||
|
||
.item-icon {
|
||
background-color: #f8f8f8;
|
||
}
|
||
|
||
.setting-list {
|
||
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.03);
|
||
}
|
||
/* #endif */
|
||
</style> |