This commit is contained in:
oneao committed 2026-01-18 21:20:51 +08:00
1 parent 78c7a812be
commit 1934225c53
24 files changed
+711 -654

No files matched your search

@@ -1,6 +1,6 @@
import type { MoneyCategoryItem, UpdateMoneyCategorySortItem } from '@/types/money/category'
import type { MoneyCategoryItem } from '@/types/money/category'
import { create } from 'zustand'
import { createMoneyCategoryApi, deleteMoneyCategoryApi, queryMoneyCategoryApi, updateMoneyCategorySortApi } from '@/request/api/money/category'
import { createMoneyCategoryApi, deleteMoneyCategoryApi, queryMoneyCategoryApi, updateMoneyCategoryApi, updateMoneyCategorySortApi } from '@/request/api/money/category'
import { MoneyCategoryEnum } from '@/types/money/category'
interface MoneyCategoryStore {
@@ -16,10 +16,11 @@ interface MoneyCategoryStore {
getCategoryById: (id: number) => MoneyCategoryItem | null
createCategory: (category: MoneyCategoryItem) => Promise<void>
updateCategory: (category: MoneyCategoryItem) => Promise<void>
updateSortNumbers: (data: MoneyCategoryItem[], type: number) => Promise<void>
deleteCategoryById: (id: number) => Promise<void>
isDuplicateCategory: (name: string, type: number) => boolean
isDuplicateCategory: (name: string, type: number, excludeId: number | null) => boolean
clear: () => void
}
@@ -162,6 +163,36 @@ export const useMoneyCategoryStore = create<MoneyCategoryStore>()(
}
},
updateCategory: async (category) => {
try {
const res = await updateMoneyCategoryApi({
id: category.id,
name: category.name,
icon: category.icon,
})
if (!res.isSuccess) {
throw new Error(res.message)
}
// 更新本地 categories
set(state => ({
categories: state.categories.map(c =>
c.id !== category.id
? c
: {
...c,
...category,
},
),
}))
}
catch (err) {
console.error(err)
throw err
}
},
updateSortNumbers: async (data, type) => {
const payload = data.map((item, index) => ({
id: item.id,
@@ -207,9 +238,13 @@ export const useMoneyCategoryStore = create<MoneyCategoryStore>()(
}
},
isDuplicateCategory: (name, type) => {
isDuplicateCategory: (name, type, excludeId) => {
const categories = get().categories || []
return categories.some(c => c.name === name && c.type === type)
return categories.some(c =>
c.name === name
&& c.type === type
&& c.id !== excludeId,
)
},
}),
)