fix(phase3): subscription leak, image mime type validation

- Ledger store: add stopSubscription() to properly clean up realtime
  subscriptions, matching asset store pattern
- LedgerList: call stopSubscription on unmount
- Assets migration: restrict image upload to image/* mime types
  (C3 updateRule is a known tradeoff — PocketBase lacks field-level
  permissions, frontend enforces edit restrictions instead)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
congsh
2026-04-18 19:52:34 +08:00
parent c5413644f9
commit e4b730c8db
3 changed files with 18 additions and 5 deletions
+12 -3
View File
@@ -16,6 +16,7 @@ export const useLedgerStore = defineStore('ledger', () => {
const loading = ref(false)
const summary = ref({ totalIncome: 0, totalExpense: 0, balance: 0 })
const currentMonth = ref(new Date().toISOString().slice(0, 7))
let unsubFn: (() => Promise<void> | void) | null = null
// 加载账目列表和汇总
async function loadLedgers(groupId: string, month?: string) {
@@ -78,12 +79,19 @@ export const useLedgerStore = defineStore('ledger', () => {
// 订阅实时更新
async function startSubscription(groupId: string) {
await subscribeLedgers(groupId, () => {
// 收到变更后重新加载当前月份的数据
stopSubscription()
unsubFn = await subscribeLedgers(groupId, () => {
loadLedgers(groupId)
})
}
function stopSubscription() {
if (unsubFn) {
unsubFn()
unsubFn = null
}
}
return {
ledgers,
loading,
@@ -94,6 +102,7 @@ export const useLedgerStore = defineStore('ledger', () => {
addLedger,
editLedger,
removeLedger,
startSubscription
startSubscription,
stopSubscription
}
})