u
This commit is contained in:
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,
|
||||
)
|
||||
},
|
||||
}),
|
||||
)
|
||||
Reference in new issue
Block a user