refactor: 重构代码结构和类型定义,优化类型安全性和代码可维护性

- 添加类型定义文件和类型引用
- 删除废弃的页面模块和导出文件
- 新增聚合管理模块和插件系统
- 修复类型错误和潜在运行时问题
- 更新API基础URL和配置
- 优化组件类型定义和事件处理
- 重构数据源接口和实现
- 完善文档和开发进度记录
This commit is contained in:
2026-03-22 11:25:28 +08:00
parent 15ee1758f5
commit a037843851
88 changed files with 42703 additions and 6395 deletions

View File

@@ -231,7 +231,7 @@ export const ContractManage: React.FC = () => {
const endDate = new Date(c.endDate);
return endDate <= thirtyDaysLater && endDate >= today;
}).length,
totalValue: contractList.filter((c) => c.status === 'ACTIVE').reduce((sum, c) => sum + c.totalValue, 0),
totalValue: contractList.filter((c) => c.status === 'ACTIVE').reduce((sum, c) => sum + (c.totalValue || 0), 0),
});
};
@@ -637,7 +637,7 @@ export const ContractManage: React.FC = () => {
<Button key="close" onClick={() => setDetailModalVisible(false)}>
Close
</Button>,
selectedContract?.status === 'PENDING_SIGN' && (
selectedContract?.status === 'PENDING_REVIEW' && (
<Button key="activate" type="primary" onClick={() => {
handleStatusChange(selectedContract.contractId, 'ACTIVE');
setDetailModalVisible(false);

View File

@@ -171,9 +171,9 @@ export const EnterpriseQuote: React.FC = () => {
const fetchProducts = async () => {
const mockProducts: Product[] = [
{ id: 'PROD_001', sku: 'SKU-001', name: 'Wireless Headphones', costPrice: 15.00, suggestedPrice: 25.00, moq: 100, stock: 5000 },
{ id: 'PROD_002', sku: 'SKU-002', name: 'USB-C Cable', costPrice: 2.50, suggestedPrice: 5.00, moq: 500, stock: 10000 },
{ id: 'PROD_003', sku: 'SKU-003', name: 'Phone Case', costPrice: 3.00, suggestedPrice: 8.00, moq: 200, stock: 8000 },
{ id: 'PROD_001', sku: 'SKU-001', name: 'Wireless Headphones', price: 25.00, costPrice: 15.00, suggestedPrice: 25.00, moq: 100, stock: 5000 },
{ id: 'PROD_002', sku: 'SKU-002', name: 'USB-C Cable', price: 5.00, costPrice: 2.50, suggestedPrice: 5.00, moq: 500, stock: 10000 },
{ id: 'PROD_003', sku: 'SKU-003', name: 'Phone Case', price: 8.00, costPrice: 3.00, suggestedPrice: 8.00, moq: 200, stock: 8000 },
];
setProducts(mockProducts);
};
@@ -201,11 +201,12 @@ export const EnterpriseQuote: React.FC = () => {
const tierDiscount = selectedCustomer
? CUSTOMER_TIERS.find((t) => t.value === selectedCustomer.tier)?.discount || 0
: 0;
const unitPrice = values.unitPrice || product.suggestedPrice;
const unitPrice = values.unitPrice || product.suggestedPrice || product.price;
const discount = values.discount || tierDiscount;
const totalPrice = unitPrice * values.quantity * (1 - discount / 100);
const profitRate = ((unitPrice - product.costPrice) / product.costPrice) * 100;
const costPrice = product.costPrice || product.price * 0.6;
const profitRate = ((unitPrice - costPrice) / costPrice) * 100;
if (profitRate < MIN_PROFIT_RATE) {
message.warning(`Warning: Profit rate (${profitRate.toFixed(1)}%) is below minimum (${MIN_PROFIT_RATE}%)`);
}