feat(scheduling): show all candidates instead of top 5, update section title
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
@@ -116,11 +116,11 @@ export default function SuggestionDetail({ suggestion: s, onClose, onNotifySucce
|
||||
|
||||
{/* Candidates */}
|
||||
<div className="px-4 py-3">
|
||||
<div className="flex items-center justify-between mb-2.5">
|
||||
<span className="text-xs font-bold text-slate-700">
|
||||
{isRescue ? '建议替换车辆' : '建议替换车辆'}
|
||||
</span>
|
||||
<span className="text-[10px] text-slate-400">{s.candidates.length} 辆可选</span>
|
||||
<div className="mb-2.5">
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="text-xs font-bold text-slate-700">当前区域所有可替换在库车辆</span>
|
||||
<span className="text-[10px] text-slate-400">{s.candidates.length} 辆</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="space-y-2">
|
||||
|
||||
@@ -129,7 +129,7 @@ export function generateSuggestions(
|
||||
// Among non-qualifiable: smallest gap first (closest to target)
|
||||
return a.mileageGap - b.mileageGap;
|
||||
})
|
||||
.slice(0, 5);
|
||||
;
|
||||
|
||||
const gap = Math.max(0, vehicle.yearTarget - vehicle.currentYearMileage);
|
||||
const dailyReq = vehicle.daysLeft > 0 ? Math.round(gap / vehicle.daysLeft) : 0;
|
||||
@@ -192,7 +192,7 @@ export function generateSuggestions(
|
||||
})
|
||||
// Only keep candidates that can actually qualify at this customer
|
||||
.filter(c => c.canQualifyAfterSwap)
|
||||
.slice(0, 5);
|
||||
;
|
||||
|
||||
// Skip if no candidate can reach target — swap would be pointless
|
||||
if (candidates.length === 0) continue;
|
||||
|
||||
Reference in New Issue
Block a user