This commit is contained in:
oneao committed 2025-11-21 17:27:44 +08:00
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',