Files
makemd/dashboard/src/models/product.ts
wurenzhi 22308fe042 refactor: 重构项目结构并优化代码
- 删除无用的文件和错误日志
- 创建统一的 imports 模块集中管理依赖
- 重构组件使用新的 imports 方式
- 修复文档路径大小写问题
- 优化类型定义和接口导出
- 更新依赖版本
- 改进错误处理和API配置
- 统一组件导出方式
2026-03-27 16:56:06 +08:00

104 lines
2.4 KiB
TypeScript

import { useState, useCallback } from '@/imports';
interface Product {
id: string;
name: string;
price: number;
stock: number;
category: string;
status: 'active' | 'inactive';
}
interface ProductState {
products: Product[];
loading: boolean;
error: string | null;
currentProduct: Product | null;
pagination: {
current: number;
pageSize: number;
total: number;
};
}
const useProductModel = () => {
const [state, setState] = useState<ProductState>({
products: [],
loading: false,
error: null,
currentProduct: null,
pagination: {
current: 1,
pageSize: 10,
total: 0,
},
});
const setProducts = useCallback((products: Product[]) => {
setState(prev => ({ ...prev, products }));
}, []);
const setLoading = useCallback((loading: boolean) => {
setState(prev => ({ ...prev, loading }));
}, []);
const setError = useCallback((error: string | null) => {
setState(prev => ({ ...prev, error }));
}, []);
const setCurrentProduct = useCallback((product: Product | null) => {
setState(prev => ({ ...prev, currentProduct: product }));
}, []);
const setPagination = useCallback((pagination: ProductState['pagination']) => {
setState(prev => ({ ...prev, pagination }));
}, []);
const updateProduct = useCallback((updatedProduct: Product) => {
setState(prev => ({
...prev,
products: prev.products.map(product =>
product.id === updatedProduct.id ? updatedProduct : product
),
currentProduct: prev.currentProduct?.id === updatedProduct.id
? updatedProduct
: prev.currentProduct,
}));
}, []);
const addProduct = useCallback((newProduct: Product) => {
setState(prev => ({
...prev,
products: [newProduct, ...prev.products],
pagination: {
...prev.pagination,
total: prev.pagination.total + 1,
},
}));
}, []);
const deleteProduct = useCallback((productId: string) => {
setState(prev => ({
...prev,
products: prev.products.filter(product => product.id !== productId),
pagination: {
...prev.pagination,
total: prev.pagination.total - 1,
},
}));
}, []);
return {
...state,
setProducts,
setLoading,
setError,
setCurrentProduct,
setPagination,
updateProduct,
addProduct,
deleteProduct,
};
};
export default useProductModel;