From 8f42676f7c8011138fe884c247ab1453a2b0b2d3 Mon Sep 17 00:00:00 2001 From: kkfluous Date: Sun, 29 Mar 2026 00:11:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=AD=9B=E9=80=89=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E7=A1=AE=E8=AE=A4=E5=90=8E=E6=89=8D=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E3=80=81=E9=9A=90=E8=97=8F=E5=85=AC=E5=8A=A1=E8=BD=A6?= =?UTF-8?q?=E5=88=86=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 三个筛选面板(库存/区域/客户)改为draft状态模式: 打开时复制当前筛选到draft,面板内操作draft, 点确认才应用到实际筛选状态 - 移除点击外部关闭(只能通过确认按钮关闭) - 业务负责人下拉隐藏"公务车"分组(部门Tab和客户Tab都已处理) Co-Authored-By: Claude Opus 4.6 (1M context) --- src/App.tsx | 77 +++++++++++++++++++++++------------------------------ 1 file changed, 33 insertions(+), 44 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index a31d3bf..2ef5b9f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -161,11 +161,13 @@ export default function App() { const [expandedRegionCities, setExpandedRegionCities] = useState>(new Set()); const [regionFilters, setRegionFilters] = useState({ region: '', city: '', customer: '' }); const [isRegionFilterOpen, setIsRegionFilterOpen] = useState(false); + const [draftRegionFilters, setDraftRegionFilters] = useState({ region: '', city: '', customer: '' }); // Customer section state const [expandedCustomers, setExpandedCustomers] = useState>(new Set()); const [customerFilters, setCustomerFilters] = useState({ customer: '', brand: '', department: '', manager: '', region: '' }); const [isCustomerFilterOpen, setIsCustomerFilterOpen] = useState(false); + const [draftCustomerFilters, setDraftCustomerFilters] = useState({ customer: '', brand: '', department: '', manager: '', region: '' }); // Inventory statistics section state const [inventoryData, setInventoryData] = useState([]); @@ -174,6 +176,7 @@ export default function App() { const [expandedInventoryTypes, setExpandedInventoryTypes] = useState>(new Set(['4.5T普货'])); const [inventoryFilters, setInventoryFilters] = useState({ region: '', city: '', brand: '', type: '', model: '' }); const [isInventoryFilterOpen, setIsInventoryFilterOpen] = useState(false); + const [draftInventoryFilters, setDraftInventoryFilters] = useState({ region: '', city: '', brand: '', type: '', model: '' }); // Chart view states const [customerChartView, setCustomerChartView] = useState<'region' | 'city'>('region'); @@ -377,9 +380,10 @@ export default function App() { return types.sort((a, b) => INVENTORY_TYPE_ORDER_LIST.indexOf(a) - INVENTORY_TYPE_ORDER_LIST.indexOf(b)); }, [inventoryData]); const uniqueInventoryModelsForType = useMemo(() => { - const source = inventoryFilters.type ? inventoryData.filter((s) => s.type === inventoryFilters.type) : inventoryData; + const typeFilter = isInventoryFilterOpen ? draftInventoryFilters.type : inventoryFilters.type; + const source = typeFilter ? inventoryData.filter((s) => s.type === typeFilter) : inventoryData; return Array.from(new Set(source.map((s) => s.model).filter(Boolean))); - }, [inventoryData, inventoryFilters.type]); + }, [inventoryData, inventoryFilters.type, draftInventoryFilters.type, isInventoryFilterOpen]); const inventoryByRegion = useMemo(() => { const result: Record> = {}; @@ -1023,7 +1027,7 @@ export default function App() {
+
- setDraftInventoryFilters({...draftInventoryFilters, region: e.target.value})} className="w-full text-xs bg-white border border-slate-200 rounded-lg px-2 py-1.5 focus:outline-none focus:ring-2 focus:ring-blue-500/20 focus:border-blue-500 transition-all shadow-sm cursor-pointer"> {uniqueInventoryRegions.map(r => )}
- setDraftInventoryFilters({...draftInventoryFilters, city: e.target.value})} className="w-full text-xs bg-white border border-slate-200 rounded-lg px-2 py-1.5 focus:outline-none focus:ring-2 focus:ring-blue-500/20 focus:border-blue-500 transition-all shadow-sm cursor-pointer"> {uniqueInventoryCities.map(c => )}
- setDraftInventoryFilters({...draftInventoryFilters, brand: e.target.value})} className="w-full text-xs bg-white border border-slate-200 rounded-lg px-2 py-1.5 focus:outline-none focus:ring-2 focus:ring-blue-500/20 focus:border-blue-500 transition-all shadow-sm cursor-pointer"> {uniqueInventoryBrands.map(b => )}
- setDraftInventoryFilters({...draftInventoryFilters, type: e.target.value, model: ''})} className="w-full text-xs bg-white border border-slate-200 rounded-lg px-2 py-1.5 focus:outline-none focus:ring-2 focus:ring-blue-500/20 focus:border-blue-500 transition-all shadow-sm cursor-pointer"> {uniqueInventoryTypes.map(t => )}
- setDraftInventoryFilters({...draftInventoryFilters, model: e.target.value})} className="w-full text-xs bg-white border border-slate-200 rounded-lg px-2 py-1.5 focus:outline-none focus:ring-2 focus:ring-blue-500/20 focus:border-blue-500 transition-all shadow-sm cursor-pointer"> {uniqueInventoryModelsForType.map(m => )}
- + )} @@ -1447,7 +1446,7 @@ export default function App() { className="w-full pl-9 pr-8 py-1.5 bg-white border border-gray-200 rounded-lg text-xs focus:outline-none focus:ring-2 focus:ring-blue-500/20 focus:border-blue-500 transition-all shadow-sm appearance-none cursor-pointer font-bold text-gray-700" > - {managersGroupedByDept.map(g => ( + {managersGroupedByDept.filter(g => g.department !== '公务车').map(g => ( {g.managers.map(m => )} @@ -1954,7 +1953,7 @@ export default function App() {
+
- setRegionFilters(prev => ({ ...prev, customer: v }))} options={uniqueCustomerNames} placeholder="所有客户" className="text-xs py-2 px-2" /> + setDraftRegionFilters(prev => ({ ...prev, customer: v }))} options={uniqueCustomerNames} placeholder="所有客户" className="text-xs py-2 px-2" />
- setDraftRegionFilters(prev => ({ ...prev, region: e.target.value }))}> {uniqueRegions.map(r => )}
- setDraftRegionFilters(prev => ({ ...prev, city: e.target.value }))}> {uniqueCities.map(c => )}
- + )} @@ -2248,7 +2242,7 @@ export default function App() {
+
- setCustomerFilters(prev => ({ ...prev, customer: v }))} options={uniqueCustomerNames} placeholder="所有客户" className="text-xs py-2 px-2" /> + setDraftCustomerFilters(prev => ({ ...prev, customer: v }))} options={uniqueCustomerNames} placeholder="所有客户" className="text-xs py-2 px-2" />
- setDraftCustomerFilters(prev => ({ ...prev, manager: e.target.value }))}> - {customerManagersGroupedByDept.map(g => ( + {customerManagersGroupedByDept.filter(g => g.department !== '公务车').map(g => ( {g.managers.map(m => )} @@ -2308,28 +2297,28 @@ export default function App() {
- setDraftCustomerFilters(prev => ({ ...prev, brand: e.target.value }))}> {uniqueBrands.map(b => )}
- setDraftCustomerFilters(prev => ({ ...prev, department: e.target.value }))}> {uniqueDepts.map(d => )}
- setDraftCustomerFilters(prev => ({ ...prev, region: e.target.value }))}> {uniqueRegions.map(r => )}
- + )}