feat: improve asset inventory statistics and responsive UX (v1.1.16)
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { InventoryStatusCounts } from './InventoryStatusCounts';
|
||||
import React from 'react';
|
||||
import { ChevronDown, ChevronRight } from 'lucide-react';
|
||||
import { AnimatePresence, motion } from 'motion/react';
|
||||
@@ -26,7 +27,7 @@ export function InventoryDesktopTable({
|
||||
setVehicleSelection: setShowPlateNumbers,
|
||||
}: InventoryDesktopTableProps) {
|
||||
return (
|
||||
<div className="hidden lg:block overflow-x-auto">
|
||||
<div className="hidden lg:block asset-table-scroll overflow-x-auto">
|
||||
<table className="w-full text-left border-collapse">
|
||||
<thead>
|
||||
<tr className="bg-slate-50 text-[11px] text-slate-500 uppercase tracking-wider border-b border-slate-100">
|
||||
@@ -34,6 +35,8 @@ export function InventoryDesktopTable({
|
||||
<th className="p-3 font-semibold">{inventoryTab === 'region' ? '品牌' : '品牌'}</th>
|
||||
<th className="p-3 font-semibold">{inventoryTab === 'region' ? '车型' : '所在区域/城市'}</th>
|
||||
<th className="p-3 font-semibold text-center w-32">库存数量</th>
|
||||
<th className="p-3 font-semibold text-center text-amber-700 w-28">其中异动</th>
|
||||
<th className="p-3 font-semibold text-center text-blue-700 w-28">其中待交车</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody className="text-xs">
|
||||
@@ -42,9 +45,9 @@ export function InventoryDesktopTable({
|
||||
<React.Fragment key={region}>
|
||||
<tr
|
||||
className="bg-slate-50/30 border-b border-slate-100 cursor-pointer hover:bg-slate-50 transition-colors"
|
||||
onClick={() => toggleInventoryRegion(region)}
|
||||
tabIndex={0} onKeyDown={e=>{if(e.target===e.currentTarget && (e.key==='Enter'||e.key===' ')){e.preventDefault();toggleInventoryRegion(region);}}} onClick={() => toggleInventoryRegion(region)}
|
||||
>
|
||||
<td colSpan={4} className="p-3 font-bold text-slate-700">
|
||||
<td colSpan={6} className="p-3 font-bold text-slate-700">
|
||||
<div className="flex items-center gap-2">
|
||||
{expandedInventoryRegions.has(region) ? <ChevronDown size={14} className="text-slate-400" /> : <ChevronRight size={14} className="text-slate-400" />}
|
||||
<span>{region}</span>
|
||||
@@ -55,6 +58,7 @@ export function InventoryDesktopTable({
|
||||
}}>
|
||||
(共 {Object.values(cities).flat().reduce((acc, s) => acc + s.quantity, 0)} 台)
|
||||
</span>
|
||||
<InventoryStatusCounts rows={Object.values(cities).flat()} />
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -84,6 +88,8 @@ export function InventoryDesktopTable({
|
||||
{stat.quantity}
|
||||
</button>
|
||||
</td>
|
||||
<td className="p-3 text-center font-bold text-amber-700">{stat.abnormal ?? 0}</td>
|
||||
<td className="p-3 text-center font-bold text-blue-700">{stat.pending ?? 0}</td>
|
||||
</motion.tr>
|
||||
))}
|
||||
</React.Fragment>
|
||||
@@ -96,9 +102,9 @@ export function InventoryDesktopTable({
|
||||
<React.Fragment key={type}>
|
||||
<tr
|
||||
className="bg-slate-50/30 border-b border-slate-100 cursor-pointer hover:bg-slate-50 transition-colors"
|
||||
onClick={() => toggleInventoryType(type)}
|
||||
tabIndex={0} onKeyDown={e=>{if(e.target===e.currentTarget && (e.key==='Enter'||e.key===' ')){e.preventDefault();toggleInventoryType(type);}}} onClick={() => toggleInventoryType(type)}
|
||||
>
|
||||
<td colSpan={4} className="p-3 font-bold text-slate-700">
|
||||
<td colSpan={6} className="p-3 font-bold text-slate-700">
|
||||
<div className="flex items-center gap-2">
|
||||
{expandedInventoryTypes.has(type) ? <ChevronDown size={14} className="text-slate-400" /> : <ChevronRight size={14} className="text-slate-400" />}
|
||||
<span>{type}</span>
|
||||
@@ -109,6 +115,7 @@ export function InventoryDesktopTable({
|
||||
}}>
|
||||
(共 {Object.values(models).flat().reduce((acc, s) => acc + s.quantity, 0)} 台)
|
||||
</span>
|
||||
<InventoryStatusCounts rows={Object.values(models).flat()} />
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -138,6 +145,8 @@ export function InventoryDesktopTable({
|
||||
{stat.quantity}
|
||||
</button>
|
||||
</td>
|
||||
<td className="p-3 text-center font-bold text-amber-700">{stat.abnormal ?? 0}</td>
|
||||
<td className="p-3 text-center font-bold text-blue-700">{stat.pending ?? 0}</td>
|
||||
</motion.tr>
|
||||
))}
|
||||
</React.Fragment>
|
||||
|
||||
Reference in New Issue
Block a user