u
This commit is contained in:
1 parent
bb780a42ab
commit
d3145e3dc5
19 files changed
+15364
-416
No files matched your search
@@ -1,8 +1,8 @@
|
||||
import type { MoneyCategoryItem } from '@/types/money/category'
|
||||
import type { MoneyCategoryItem, UpdateMoneyCategorySortItem } from '@/types/money/category'
|
||||
import AsyncStorage from '@react-native-async-storage/async-storage'
|
||||
import { create } from 'zustand'
|
||||
import { createJSONStorage, persist } from 'zustand/middleware'
|
||||
import { queryMoneyCategoryApi } from '@/request/api/money/category'
|
||||
import { deleteMoneyCategoryApi, queryMoneyCategoryApi, updateMoneyCategorySortApi } from '@/request/api/money/category'
|
||||
|
||||
interface MoneyCategoryStore {
|
||||
categories: MoneyCategoryItem[]
|
||||
@@ -16,6 +16,9 @@ interface MoneyCategoryStore {
|
||||
getIncomeCategories: () => MoneyCategoryItem[]
|
||||
|
||||
getCategoryById: (id: number) => MoneyCategoryItem | null
|
||||
|
||||
updateCategories: (data: MoneyCategoryItem[], type: number) => void
|
||||
deleteCategoryById: (id: number, type: number) => void
|
||||
}
|
||||
|
||||
export const useMoneyCategoryStore = create<MoneyCategoryStore>()(
|
||||
@@ -55,6 +58,72 @@ export const useMoneyCategoryStore = create<MoneyCategoryStore>()(
|
||||
getCategoryById: (id: number) => {
|
||||
return get().categories.find(c => c.id === id) || null
|
||||
},
|
||||
updateCategories: (data, type) => {
|
||||
// 获取当前所有分类
|
||||
const allCategories = get().categories
|
||||
|
||||
// 保留另一类分类
|
||||
const otherCategories = allCategories.filter(c => c.type !== type)
|
||||
|
||||
// 给当前类型的数据重新计算 sort_number
|
||||
const updatedData = data.map((item, index) => ({
|
||||
...item,
|
||||
sort_number: index, // 按顺序重新赋值
|
||||
}))
|
||||
|
||||
// 合并另一类分类
|
||||
const finalCategories = [...otherCategories, ...updatedData]
|
||||
|
||||
// 构造后端请求 payload,只需要 id 和 sort_number
|
||||
const payload: UpdateMoneyCategorySortItem[] = updatedData.map(item => ({
|
||||
id: item.id,
|
||||
sort_number: item.sort_number,
|
||||
}))
|
||||
|
||||
// 打印调试
|
||||
console.log('更新顺序:', payload)
|
||||
|
||||
// 调用后端接口更新排序
|
||||
updateMoneyCategorySortApi({
|
||||
data: payload,
|
||||
}).then(res => {
|
||||
console.log('后端返回:', res)
|
||||
})
|
||||
|
||||
// 更新前端 state
|
||||
set({ categories: finalCategories })
|
||||
}
|
||||
,
|
||||
|
||||
deleteCategoryById: (id: number, type: number) => {
|
||||
const allCategories = get().categories
|
||||
|
||||
// 删除指定 id,同时只处理同类型的数据
|
||||
const finalCategories = allCategories
|
||||
.filter(c => c.id !== id)
|
||||
.map((item, index) => {
|
||||
if (item.type === type) {
|
||||
return { ...item, sort_number: index }
|
||||
}
|
||||
return item
|
||||
})
|
||||
|
||||
// 更新 state
|
||||
set({ categories: finalCategories })
|
||||
|
||||
// 调用删除接口
|
||||
deleteMoneyCategoryApi({ id })
|
||||
|
||||
// 同步更新排序给后端,仅同类型
|
||||
const payload = finalCategories
|
||||
.filter(c => c.type === type)
|
||||
.map(item => ({
|
||||
id: item.id,
|
||||
sort_number: item.sort_number,
|
||||
}))
|
||||
updateMoneyCategorySortApi({ data: payload })
|
||||
},
|
||||
|
||||
}),
|
||||
{
|
||||
name: 'money-category-storage',
|
||||
|
||||
Reference in new issue
Block a user