- users 表添加 nickname、avatar_url 字段 - 用户信息 API(GET/PUT /me)+ 头像上传(multer) - 头像通过 API 路由获取(公开,不经过 auth) - 登录接口返回用户昵称和头像 - 用户信息 Store + 个人资料编辑页面 - 我的页面和首页显示真实用户信息 - 群组表(groups、group_members)+ transactions 添加 group_id - 群组 API(创建/加入/退出/解散) - 交易和统计 API 支持 group_id 视图切换 - 群组客户端 Store + 身份切换 - 群组管理页面 - App 初始化群组 Store - UPLOAD_DIR 配置化 - Node.js 备份替代 mysqldump - 统一前端 BASE_URL(config.ts) - uploads 加入 .gitignore - 修复 trust proxy 警告
33 lines
932 B
TypeScript
33 lines
932 B
TypeScript
import { defineStore } from 'pinia'
|
|
import { ref } from 'vue'
|
|
import * as api from '@/api/budget'
|
|
import { getCurrentMonth } from '@/utils/format'
|
|
import { useGroupStore } from '@/stores/group'
|
|
|
|
// 重新导出类型以保持向后兼容
|
|
export type Budget = api.Budget
|
|
|
|
export const useBudgetStore = defineStore('budget', () => {
|
|
const budget = ref<api.Budget | null>(null)
|
|
const loading = ref(false)
|
|
|
|
async function fetchBudget(month?: string) {
|
|
loading.value = true
|
|
try {
|
|
const groupStore = useGroupStore()
|
|
budget.value = await api.getBudget(month || getCurrentMonth(), groupStore.currentGroupId)
|
|
} catch {
|
|
budget.value = null
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
async function setBudget(amount: number, month?: string) {
|
|
await api.setBudget(amount, month || getCurrentMonth())
|
|
await fetchBudget(month)
|
|
}
|
|
|
|
return { budget, loading, fetchBudget, setBudget }
|
|
})
|