Files
test/uniapp/pages/mine/guide/index.vue
T
2026-06-11 09:53:11 +08:00

218 lines
5.5 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="app-page" :class="themeClass">
<view class="surface-card page-hero">
<text class="hero-kicker">GUIDE</text>
<text class="hero-title">使用帮助</text>
<text class="hero-desc">通过上手步骤常见问题和快捷入口快速熟悉整个记账流程</text>
<view class="hero-tags">
<text class="hero-tag">4 个步骤</text>
<text class="hero-tag soft">FAQ 指南</text>
</view>
</view>
<ad-custom unit-id="adunit-64707ea333329399"></ad-custom>
<section-card title="快速上手" subtitle="初次使用建议先完成下面 4 个动作">
<view class="step-list">
<view v-for="item in quickSteps" :key="item.title" class="step-item surface-strong">
<text class="step-index">{{ item.index }}</text>
<view class="step-body">
<text class="step-title">{{ item.title }}</text>
<text class="step-desc">{{ item.desc }}</text>
</view>
</view>
</view>
</section-card>
<section-card title="常见问题" subtitle="">
<view class="faq-list">
<view v-for="item in faqList" :key="item.q" class="faq-item surface-strong">
<text class="faq-question">{{ item.q }}</text>
<text class="faq-answer">{{ item.a }}</text>
</view>
</view>
</section-card>
<section-card title="功能入口" subtitle="需要操作时可直接跳转到对应模块">
<view class="entry-grid">
<view class="entry-item surface-strong" @click="go('/pages/home/index')">
<text class="entry-title">首页记账</text>
</view>
<view class="entry-item surface-strong" @click="go('/pages/budget/index')">
<text class="entry-title">预算设置</text>
</view>
<view class="entry-item surface-strong" @click="go('/pages/stats/index')">
<text class="entry-title">查看报表</text>
</view>
<view class="entry-item surface-strong" @click="go('/pages/mine/backup/index')">
<text class="entry-title">备份恢复</text>
</view>
</view>
</section-card>
</view>
</template>
<script setup>
import { computed } from 'vue'
import SectionCard from '../../../components/SectionCard.vue'
import { useAppStore } from '../../../utils/store'
import { onShow } from '@dcloudio/uni-app'
const store = useAppStore()
const themeClass = computed(() => (store.state.settings.theme === 'dark' ? 'theme-dark' : ''))
const quickSteps = [
{ index: '01', title: '先设置月预算', desc: '进入预算页设置总预算与分类预算,首页会同步显示剩余额度。' },
{ index: '02', title: '用首页快捷记账', desc: '首页支持支出/收入快速录入,也能通过常用分类一键记账。' },
{ index: '03', title: '到账单页做筛选', desc: '账单页支持按月份、账户、金额区间和关键词精确筛选。' },
{ index: '04', title: '每月查看报表', desc: '报表页可导出 CSV,并查看支出结构、近 7 日趋势和月度对比。' }
]
const faqList = [
{ q: '账单数据保存在哪里?', a: '默认仅保存在当前设备的本地存储中,不会自动上传云端。' },
{ q: '换手机后如何迁移?', a: '先进入“备份与恢复”导出 JSON 备份,再在新设备粘贴恢复。' },
{ q: '为什么预算进度显示超出 100%', a: '这代表本月支出已经超过预算,条形进度会封顶,但文字会继续显示真实比例。' },
{ q: '昵称可以怎么修改?', a: '进入“我的-账户资料”后可直接修改本地昵称,留空时默认显示为“用户”。' }
]
function go(url) {
uni.navigateTo({ url })
}
onShow(()=>{
showIt()
})
function showIt(){
let interstitialAd = null;
if (wx.createInterstitialAd) {
interstitialAd = wx.createInterstitialAd({
adUnitId: 'adunit-0abc32053b19a4e9'
})
interstitialAd.onLoad(() => {})
interstitialAd.onError((err) => {
console.error('插屏广告加载失败', err)
})
interstitialAd.onClose(() => {})
}
setTimeout(()=>{
if (interstitialAd) {
interstitialAd.show().catch((err) => {
console.error('插屏广告显示失败', err)
})
}
}, 2280)
}
</script>
<style lang="scss" scoped>
.page-hero {
padding: 30rpx;
background: linear-gradient(145deg, rgba(16, 42, 67, 0.96) 0%, rgba(127, 86, 217, 0.9) 100%);
color: #ffffff;
}
.hero-kicker,
.hero-desc,
.hero-tag.soft {
color: rgba(255, 255, 255, 0.76);
}
.hero-kicker {
font-size: 20rpx;
letter-spacing: 4rpx;
}
.hero-title {
display: block;
margin-top: 12rpx;
font-size: 44rpx;
font-weight: 700;
}
.hero-desc {
display: block;
margin-top: 14rpx;
font-size: 24rpx;
line-height: 1.7;
}
.hero-tags {
display: flex;
flex-wrap: wrap;
gap: 14rpx;
margin-top: 22rpx;
}
.hero-tag {
padding: 12rpx 18rpx;
border-radius: 999rpx;
background: rgba(255, 255, 255, 0.16);
font-size: 22rpx;
}
.step-list,
.faq-list {
display: flex;
flex-direction: column;
gap: 16rpx;
}
.step-item,
.faq-item {
padding: 24rpx;
border-radius: 28rpx;
}
.step-item {
display: flex;
gap: 18rpx;
}
.step-index {
width: 74rpx;
font-size: 30rpx;
font-weight: 700;
color: var(--brand);
}
.step-body {
flex: 1;
}
.step-title,
.faq-question,
.entry-title {
display: block;
font-size: 29rpx;
font-weight: 700;
color: var(--text-primary);
}
.step-desc,
.faq-answer {
display: block;
margin-top: 10rpx;
font-size: 24rpx;
line-height: 1.75;
color: var(--text-secondary);
}
.entry-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 16rpx;
}
.entry-item {
display: flex;
align-items: center;
justify-content: center;
padding: 28rpx 20rpx;
border-radius: 28rpx;
text-align: center;
}
</style>