Files
ln-bi/src/types.ts
kkfluous 2ba25427de
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
feat: tab导航、recharts图表、库存统计、出勤率里程、区域城市下钻、数据一致性修复
- 新增tab导航(总览/按部门/按区域/按客户)+ 移动端底部导航
- 新增recharts柱状图(区域分布)和饼图(客户分布)
- 新增库存统计模块(按区域/按车型,筛选面板)
- 对接ln_vehicle_day_mileage表实现出勤率和日均里程
- 区域运营支持区域→城市→车型三级下钻
- 修复ownership取字段错误(改用truck_rent_status)
- 修复部门统计闲置定义(当日无行驶里程)
- 修复区域图表"其他"重复问题(后端Top N合并)
- 修复城市名空值降级(resolveCity取province)
- 修复下钻数据不一致(统一category/vehicleType参数)
- 扩展/list端点支持大区过滤和未分配匹配
- 所有筛选改为searchable datalist

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 18:09:18 +08:00

192 lines
3.8 KiB
TypeScript

export interface SummaryData {
totalAssets: number;
operating: {
total: number;
self: number;
leased: number;
public: number;
hanging: number;
};
inventory: {
total: number;
inStock: number;
abnormal: number;
};
pendingDelivery: number;
weeklyNew: number;
weeklyRemoved: number;
weeklyDelivered: number;
weeklyReturned: number;
weeklyReplaced: number;
}
export interface BatchSummary {
batch: string;
total: number;
inventory: number;
inventoryRegions: Record<string, number>;
pending: number;
operating: number;
weeklyDelivered: number;
weeklyReturned: number;
weeklyReplaced: number;
}
export interface ModelSummary {
model: string;
total: number;
inventory: number;
inventoryRegions: Record<string, number>;
pending: number;
operating: number;
weeklyDelivered: number;
weeklyReturned: number;
weeklyReplaced: number;
batches: BatchSummary[];
}
export interface TypeSummary {
type: string;
totalAssets: number;
totalInventory: number;
totalOperating: number;
inventoryRegions: Record<string, number>;
pending: number;
weeklyDelivered: number;
weeklyReturned: number;
weeklyReplaced: number;
models: ModelSummary[];
}
export interface BatchGroup {
batch: string;
total: number;
inventory: number;
inventoryRegions: Record<string, number>;
pending: number;
operating: number;
weeklyDelivered: number;
weeklyReturned: number;
weeklyReplaced: number;
models: {
model: string;
type: string;
total: number;
inventory: number;
inventoryRegions: Record<string, number>;
pending: number;
operating: number;
weeklyDelivered: number;
weeklyReturned: number;
weeklyReplaced: number;
}[];
}
export interface InventoryTypeSummary {
type: string;
totalAssets: number;
totalInventory: number;
models: {
model: string;
totalAssets: number;
totalInventory: number;
regions: Record<string, number>;
}[];
regionSubtotals: Record<string, number>;
}
export interface VehicleListItem {
id: number;
plateNumber: string;
vin: string;
type: string;
model: string;
location: string;
province: string | null;
city: string | null;
status: string;
ownership: string;
contractNo: string | null;
customerName: string | null;
subjectOrg: string | null;
departmentName: string | null;
customerManager: string | null;
brandLabel: string | null;
orgName: string | null;
}
export interface RegionalInventoryStats {
region: string;
city: string;
brand: string;
type: string;
model: string;
batch: string;
quantity: number;
}
export interface ManagerStats {
manager: string;
department: string;
t4_5: number;
t4_5c: number;
t18: number;
t49: number;
trailer: number;
other: number;
total: number;
}
export interface DeptGroup {
department: string;
totalAssets: number;
operatingCount: number;
idleCount: number;
attendanceRate: number;
avgMileage: number;
managers: ManagerStats[];
}
export interface RegionTypeBreakdown {
type: string;
total: number;
operating: number;
inventory: number;
customers: string[];
}
export interface RegionCityGroup {
city: string;
totalAssets: number;
operatingCount: number;
pendingCount: number;
customers: string[];
typeBreakdown: RegionTypeBreakdown[];
}
export interface RegionGroup {
region: string;
totalAssets: number;
operatingCount: number;
pendingCount: number;
customers: string[];
typeBreakdown: RegionTypeBreakdown[];
cities: RegionCityGroup[];
}
export interface CustomerStats {
customer: string;
manager: string;
brand: string;
department: string;
region: string;
city: string;
t4_5: number;
t4_5c: number;
t18: number;
t49: number;
trailer: number;
other: number;
total: number;
}