diff --git a/src/App.tsx b/src/App.tsx index 60f7041..037dde9 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -309,109 +309,84 @@ export default function App() { {/* Header Summary - Ultra Compact */} -
+
{/* Total Assets */} -
-
+
+
-
-
资产总数
+
+
资产总数
{SUMMARY.totalAssets.toLocaleString()}
{/* Operating */} -
-
+
+
-
-
总运营
-
{SUMMARY.operating.total}
-
- 自营{SUMMARY.operating.self} 租赁{SUMMARY.operating.leased} +
+
总运营
+
+ {SUMMARY.operating.total} + 自{SUMMARY.operating.self} 租{SUMMARY.operating.leased}
{/* Inventory */} -
-
+
+
-
-
总库存
-
{SUMMARY.inventory.total}
-
- 库存{SUMMARY.inventory.inStock} 异动{SUMMARY.inventory.abnormal} +
+
总库存
+
+ {SUMMARY.inventory.total} + 库{SUMMARY.inventory.inStock} 异{SUMMARY.inventory.abnormal}
{/* Pending */} -
setShowPlateNumbers({ batch: 'All', model: 'All', location: 'All', category: 'Pending' })} - > -
+
setShowPlateNumbers({ batch: 'All', model: 'All', location: 'All', category: 'Pending' })}> +
-
-
待交车
+
+
待交车
{SUMMARY.pendingDelivery}
- {/* New */} -
-
- -
-
-
本周新增
-
{SUMMARY.weeklyNew}
-
-
- - {/* Removed */} -
-
- -
-
-
本周移除
-
{SUMMARY.weeklyRemoved}
-
-
- {/* Dynamics */} -
+
本周动态
上周六-本周五
-
setShowPlateNumbers({ batch: 'All', model: 'All', location: 'All', category: 'Delivered' })} - > +
+ {SUMMARY.weeklyNew} + 新增 +
+
+
setShowPlateNumbers({ batch: 'All', model: 'All', location: 'All', category: 'Delivered' })}> {SUMMARY.weeklyDelivered} 交车
-
setShowPlateNumbers({ batch: 'All', model: 'All', location: 'All', category: 'Returned' })} - > +
setShowPlateNumbers({ batch: 'All', model: 'All', location: 'All', category: 'Returned' })}> {SUMMARY.weeklyReturned} 还车
-
setShowPlateNumbers({ batch: 'All', model: 'All', location: 'All', category: 'Replaced' })} - > +
setShowPlateNumbers({ batch: 'All', model: 'All', location: 'All', category: 'Replaced' })}> {SUMMARY.weeklyReplaced} 替换
@@ -2023,85 +1998,161 @@ export default function App() { - {/* Plate Number Modal */} + {/* Vehicle Detail Modal */} {showPlateNumbers && ( -
+
-
+
-

- {showPlateNumbers.vehicleType || (showPlateNumbers.model !== 'All' ? showPlateNumbers.model : '全量')} - 车牌明细 +

+ + {showPlateNumbers.manager ? `${showPlateNumbers.manager} 的${showPlateNumbers.type || ''}车辆` : + showPlateNumbers.customer ? `${showPlateNumbers.customer} 的${showPlateNumbers.type || ''}车辆` : + showPlateNumbers.batch === 'All' ? '全量批次' : `${showPlateNumbers.batch} 批次`} - 运营明细

-

- {showPlateNumbers.vehicleType ? (showPlateNumbers.model === 'All' ? '全量型号' : showPlateNumbers.model) : (showPlateNumbers.batch === 'All' ? '' : showPlateNumbers.batch)} |{' '} - {!showPlateNumbers.category - ? '全部车辆' - : showPlateNumbers.category === 'Inventory' - ? (showPlateNumbers.location === 'All' ? '库存' : `${showPlateNumbers.location}库存`) - : showPlateNumbers.category === 'Operating' - ? '在运营' - : showPlateNumbers.category === 'Pending' - ? '待交车' - : showPlateNumbers.category === 'Delivered' - ? '本周已交车' - : showPlateNumbers.category === 'Returned' - ? '已还车' - : '已替换'} +

+ {showPlateNumbers.model === 'All' ? '全量型号' : showPlateNumbers.model} | + {showPlateNumbers.category === 'Pending' ? '待交车' : + showPlateNumbers.category === 'Delivered' ? '本周已交车' : + showPlateNumbers.category === 'Returned' ? '已还车' : + showPlateNumbers.category === 'Replaced' ? '已替换' : + showPlateNumbers.category === 'Inventory' ? `${showPlateNumbers.location}库存` : + showPlateNumbers.category === 'Operating' ? '正在运营' : '全部状态'}

-
-
+ +
{modalLoading ? ( -
- +
+
) : modalWeeklyDetail.length > 0 ? ( -
- {modalWeeklyDetail.map((v, i) => ( -
- {v.plate_number} -
- {v.customer_name && {v.customer_name}} - {v.handover_date && {v.handover_date}} -
-
- ))} -
- ) : modalVehicles.length > 0 ? ( -
- {modalVehicles.map((v) => ( -
- {v.plateNumber} - {(v.province || v.city) && ( - - {[v.province, v.city].filter(Boolean).join(' ')} - - )} -
- ))} +
+ + + + + + + + + + {modalWeeklyDetail.map((v, i) => ( + + + + + + ))} + +
车牌客户名称日期
{v.plate_number}{v.customer_name || '—'}{v.handover_date || '—'}
) : ( -
暂无数据
+
+ + + + {showPlateNumbers.source === 'customer' ? ( + <> + + + + + + + + + + + + + + + + ) : ( + <> + + {showPlateNumbers.source !== 'asset' && ( + + )} + + + + + )} + + + + {modalVehicles.map((v, idx) => ( + + {showPlateNumbers.source === 'customer' ? ( + <> + + + + + + + + + + + + + + + + ) : ( + <> + + {showPlateNumbers.source !== 'asset' && ( + + )} + + + + + )} + + ))} + {modalVehicles.length === 0 && ( + + + + )} + +
业务部门业务负责人品牌车型资产归属客户名称车牌状态提车时间合同到期时间运营区域离到期签约公司车牌客户名称品牌车型所在地
{'—'}{v.departmentName || '—'}{v.customerManager || '—'}{v.brandLabel || '—'}{v.type}{v.subjectOrg || '—'}{v.customerName || '—'}{v.plateNumber} + + {v.status === 'Operating' ? '在租' : v.status === 'Inventory' ? '库存' : '异常'} + + {'—'}{'—'}{v.location}{'—'}{v.orgName || '—'}{v.plateNumber}{v.customerName || '—'}{v.brandLabel || '—'}{v.type}{v.location}
+ 暂无符合条件的车辆数据 +
+
)}
-
- 共 {modalWeeklyDetail.length > 0 ? modalWeeklyDetail.length : modalVehicles.length} 辆 + +
+
+ 共计 {modalWeeklyDetail.length > 0 ? modalWeeklyDetail.length : modalVehicles.length} 台车辆 +
diff --git a/src/server/routes/vehicles.ts b/src/server/routes/vehicles.ts index 507bfad..eb857aa 100644 --- a/src/server/routes/vehicles.ts +++ b/src/server/routes/vehicles.ts @@ -642,7 +642,7 @@ app.get('/inventory-analysis', async (c) => { // GET /api/vehicles/dept-stats — department & manager breakdown app.get('/dept-stats', async (c) => { const vehicles = await getVehicles(); - const withManager = vehicles.filter((v) => v.customerManager); + const withManager = vehicles.filter((v) => v.customerManager && v.status === 'Operating'); const deptMap = new Map>(); for (const v of withManager) { @@ -805,6 +805,10 @@ app.get('/list', async (c) => { contractNo: v.contractNo, customerName: v.customerName, subjectOrg: v.subjectOrg, + departmentName: v.departmentName, + customerManager: v.customerManager, + brandLabel: v.brandLabel, + orgName: v.orgName, })), ); }); diff --git a/src/types.ts b/src/types.ts index f1e988f..15340aa 100644 --- a/src/types.ts +++ b/src/types.ts @@ -108,6 +108,10 @@ export interface VehicleListItem { contractNo: string | null; customerName: string | null; subjectOrg: string | null; + departmentName: string | null; + customerManager: string | null; + brandLabel: string | null; + orgName: string | null; } export interface ManagerStats {