feat: 品牌文案配置化 + 全页面下拉刷新
- 新增 configStore 管理品牌文案(appName, appSlogan, appDescription) - 关于弹窗、分享标题使用 configStore 读取品牌名 - 所有数据页面添加下拉刷新功能 - 所有数据页面 onShow 时自动刷新数据
This commit is contained in:
@@ -84,10 +84,10 @@
|
||||
<!-- 关于弹窗 -->
|
||||
<view class="modal-mask" v-if="showAbout" @tap="showAbout = false">
|
||||
<view class="modal" @tap.stop>
|
||||
<text class="about-title">小菜记账</text>
|
||||
<text class="about-version">v{{ appConfig.app_version || '1.0.0' }}</text>
|
||||
<text class="about-desc">{{ appConfig.app_slogan || '温暖 x 轻松的个人记账小程序' }}</text>
|
||||
<text class="about-desc">{{ appConfig.app_description || '让记账从负担变成享受' }}</text>
|
||||
<text class="about-title">{{ configStore.appName }}</text>
|
||||
<text class="about-version">v{{ configStore.config.app_version || '1.0.0' }}</text>
|
||||
<text class="about-desc">{{ configStore.appSlogan }}</text>
|
||||
<text class="about-desc">{{ configStore.appDescription }}</text>
|
||||
<view class="modal-btns modal-btns-top">
|
||||
<view class="modal-btn confirm" @tap="showAbout = false">知道了</view>
|
||||
</view>
|
||||
@@ -135,15 +135,15 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, computed, onMounted } from 'vue'
|
||||
import { onShow } from '@dcloudio/uni-app'
|
||||
import { onShow, onPullDownRefresh } from '@dcloudio/uni-app'
|
||||
import { useTransactionStore } from '@/stores/transaction'
|
||||
import { useStatsStore } from '@/stores/stats'
|
||||
import { useBudgetStore } from '@/stores/budget'
|
||||
import { useUserStore } from '@/stores/user'
|
||||
import { useGroupStore } from '@/stores/group'
|
||||
import { useConfigStore } from '@/stores/config'
|
||||
import { waitForReady } from '@/utils/app-ready'
|
||||
import { getTransactions } from '@/api/transaction'
|
||||
import { getConfig } from '@/api/config'
|
||||
import { formatAmount } from '@/utils/format'
|
||||
import { statusBarHeight } from '@/utils/system'
|
||||
import Icon from '@/components/Icon/Icon.vue'
|
||||
@@ -153,6 +153,7 @@ const statsStore = useStatsStore()
|
||||
const budgetStore = useBudgetStore()
|
||||
const userStore = useUserStore()
|
||||
const groupStore = useGroupStore()
|
||||
const configStore = useConfigStore()
|
||||
|
||||
const overview = computed(() => statsStore.overview)
|
||||
const budget = computed(() => budgetStore.budget)
|
||||
@@ -160,7 +161,6 @@ const loading = ref(true)
|
||||
const showAbout = ref(false)
|
||||
const showIdentity = ref(false)
|
||||
const initialLoaded = ref(false)
|
||||
const appConfig = ref<Record<string, string>>({})
|
||||
|
||||
onMounted(async () => {
|
||||
await waitForReady()
|
||||
@@ -171,8 +171,7 @@ onMounted(async () => {
|
||||
budgetStore.fetchBudget(),
|
||||
txStore.fetchTransactions({ page: 1, pageSize: 1 }),
|
||||
userStore.fetchUserInfo(),
|
||||
groupStore.fetchGroups(),
|
||||
getConfig().then(config => { appConfig.value = config }).catch(() => {})
|
||||
groupStore.fetchGroups()
|
||||
])
|
||||
} catch (e) {
|
||||
console.error('Profile load error:', e)
|
||||
@@ -196,6 +195,20 @@ onShow(async () => {
|
||||
} catch {}
|
||||
})
|
||||
|
||||
onPullDownRefresh(async () => {
|
||||
try {
|
||||
await Promise.all([
|
||||
statsStore.fetchOverview(),
|
||||
budgetStore.fetchBudget(),
|
||||
txStore.fetchTransactions({ page: 1, pageSize: 1 }),
|
||||
groupStore.fetchGroups(),
|
||||
userStore.fetchUserInfo(),
|
||||
configStore.fetchConfig()
|
||||
])
|
||||
} catch {}
|
||||
uni.stopPullDownRefresh()
|
||||
})
|
||||
|
||||
function goBudget() {
|
||||
uni.navigateTo({ url: '/pages/budget/index' })
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user