Files
ln-bi/src/types.ts
kkfluous 629451c13d feat: add inventory statistics section, adapt to latest prototype
- Add GET /api/vehicles/inventory-stats endpoint that groups inventory vehicles by macro-region, city, brand, type, model, and batch
- Add RegionalInventoryStats type and fetchInventoryStats API function
- Add full inventory statistics section with region/model tabs, filters, desktop table, and mobile views
- Add modal filters (plate number, model, brand, location search) to vehicle detail modal
- Update modal header to support title field for contextual naming

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

171 lines
3.4 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;
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;
managers: ManagerStats[];
}
export interface RegionGroup {
region: string;
totalAssets: number;
operatingCount: number;
inventoryCount: number;
customers: string[];
typeBreakdown: { type: string; total: number; operating: number; inventory: number; customers: string[] }[];
}
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;
}