feat: 实现前端组件库和API服务基础架构

refactor: 移除废弃的AGI策略演进服务

fix: 修正磁盘I/O指标字段命名

chore: 更新项目依赖版本

test: 添加前后端集成测试用例

docs: 更新AI模块接口文档

style: 统一审计日志字段命名规范

perf: 优化Redis订阅连接错误处理

build: 配置多项目工作区结构

ci: 添加Vite开发服务器CORS支持
This commit is contained in:
2026-03-18 15:22:55 +08:00
parent b31591e04c
commit c932a67be2
96 changed files with 37748 additions and 16326 deletions

View 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;