20260627165246

This commit is contained in:
oneao committed 2026-06-27 16:52:47 +08:00
1 parent 5983d29128
commit bfb2b6037b
25 files changed
+2665 -518

No files matched your search

+43 -8
View File
@@ -1,21 +1,56 @@
import { create } from "zustand";
import { loadDataApi } from "@/request/api";
import { FinanceCategory, FinanceCategoryStatus, FinanceType } from "@/types/finance";
interface FinanceState {
categories: any[];
setCategories: (categories: any[]) => void;
categories: FinanceCategory[];
setCategories: (categories: FinanceCategory[]) => void;
clearCategories: () => void;
getCategories: () => any[];
getExpenseCategories: () => any[];
getIncomeCategories: () => any[];
getCategories: () => FinanceCategory[];
getExpenseCategories: () => FinanceCategory[];
getIncomeCategories: () => FinanceCategory[];
loadCategories: (familyId: number) => Promise<void>;
upsertCategory: (category: FinanceCategory) => void;
removeCategory: (id: number) => void;
}
export const useFinanceStore = create<FinanceState>((set, get) => ({
categories: [],
setCategories: (categories: any[]) => set({ categories }),
setCategories: (categories: FinanceCategory[]) => set({ categories }),
clearCategories: () => set({ categories: [] }),
getCategories: () => get().categories,
getExpenseCategories: () => get().categories.filter((category) => category.type === 0),
getIncomeCategories: () => get().categories.filter((category) => category.type === 1),
getExpenseCategories: () => get().categories.filter((category) => category.type === FinanceType.Expense),
getIncomeCategories: () => get().categories.filter((category) => category.type === FinanceType.Income),
loadCategories: async (familyId: number) => {
if (!familyId) return;
const res = await loadDataApi({
view_name: "b_finance_category",
search_columns: [],
search_condition: "family_id = ? and status = ?",
order_by: "type asc, sort_number asc, id asc",
args: [familyId, FinanceCategoryStatus.Enabled],
});
if (res.isSuccess) {
set({ categories: res.data as FinanceCategory[] });
}
},
upsertCategory: (category: FinanceCategory) =>
set((state) => {
const index = state.categories.findIndex((item) => item.id === category.id);
if (index < 0) {
return { categories: [...state.categories, category] };
}
const categories = [...state.categories];
categories[index] = category;
return { categories };
}),
removeCategory: (id: number) =>
set((state) => ({
categories: state.categories.filter((category) => category.id !== id),
})),
}));