feat: 实现前端组件库和API服务基础架构
refactor: 移除废弃的AGI策略演进服务 fix: 修正磁盘I/O指标字段命名 chore: 更新项目依赖版本 test: 添加前后端集成测试用例 docs: 更新AI模块接口文档 style: 统一审计日志字段命名规范 perf: 优化Redis订阅连接错误处理 build: 配置多项目工作区结构 ci: 添加Vite开发服务器CORS支持
This commit is contained in:
104
dashboard/src/models/product.ts
Normal file
104
dashboard/src/models/product.ts
Normal file
@@ -0,0 +1,104 @@
|
||||
import { useState, useCallback } from 'react';
|
||||
|
||||
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;
|
||||
Reference in New Issue
Block a user