diff --git a/furniture-3d-system/src/app/supply-chain/management/custom-table/ComboLimitSection.tsx b/furniture-3d-system/src/app/supply-chain/management/custom-table/ComboLimitSection.tsx index eff8ed8c..25bb162b 100644 --- a/furniture-3d-system/src/app/supply-chain/management/custom-table/ComboLimitSection.tsx +++ b/furniture-3d-system/src/app/supply-chain/management/custom-table/ComboLimitSection.tsx @@ -73,6 +73,7 @@ export function ComboLimitSection({ loading, error, filters, + topFilterFieldKeys, sort, onPageChange, onPageSizeChange, @@ -88,6 +89,7 @@ export function ComboLimitSection({ loading: boolean error: string filters: ComboLimitFilters + topFilterFieldKeys: string[] sort: ComboLimitSort onPageChange: (page: number) => void onPageSizeChange: (pageSize: 50 | 100) => void @@ -121,6 +123,10 @@ export function ComboLimitSection({ () => filters as Record, [filters], ) + const topFilterFields = useMemo( + () => COMBO_FILTER_FIELDS.filter((field) => topFilterFieldKeys.includes(field.key)), + [topFilterFieldKeys], + ) const activeFilterChips = useMemo(() => COMBO_LIMIT_FIELDS.flatMap((field) => { const values = filters[field.key] ?? [] @@ -194,7 +200,10 @@ export function ComboLimitSection({ <>
筛选 - {COMBO_FILTER_FIELDS.map((field) => ( + {topFilterFields.length === 0 && ( + 未配置筛选项,可在右上角「显示设置 → 筛选设置」中开启 + )} + {topFilterFields.map((field) => ( { fireEvent.click(screen.getByRole('button', { name: '显示设置' })) fireEvent.click(screen.getByRole('menuitem', { name: '筛选设置' })) fireEvent.click(screen.getByRole('checkbox', { name: '品牌' })) + fireEvent.click(screen.getByRole('checkbox', { name: '商品名称' })) fireEvent.click(screen.getByRole('button', { name: '完成' })) await waitFor(() => { expect(filterTrigger('brand')).toBeNull() + expect(filterTrigger('productName')).not.toBeNull() }) view.unmount() render() expect(filterTrigger('brand')).not.toBeNull() + expect(filterTrigger('productName')).toBeNull() + }) + + it('组合限价页支持独立的筛选设置并复用显示设置入口', async () => { + const view = render() + await screen.findByText('测试岩板餐桌') + fireEvent.click(screen.getByRole('button', { name: '组合限价' })) + await screen.findByText('COMBO-AB') + + fireEvent.click(screen.getByRole('button', { name: '显示设置' })) + expect(screen.queryByRole('menuitem', { name: '列设置' })).not.toBeInTheDocument() + expect(screen.queryByRole('menuitemcheckbox', { name: /紧凑展示/ })).not.toBeInTheDocument() + fireEvent.click(screen.getByRole('menuitem', { name: '筛选设置' })) + expect(screen.getByRole('checkbox', { name: '组合编码' })).toBeChecked() + expect(screen.getByRole('checkbox', { name: '运营负责人' })).toBeChecked() + fireEvent.click(screen.getByRole('checkbox', { name: '运营负责人' })) + fireEvent.click(screen.getByRole('button', { name: '完成' })) + + await waitFor(() => { + const keys = Array.from(document.querySelectorAll('[data-limit-filter]')).map((element) => element.getAttribute('data-limit-filter')) + expect(keys).toEqual(['comboCode']) + }) + view.unmount() + + render() + await screen.findByText('测试岩板餐桌') + fireEvent.click(screen.getByRole('button', { name: '组合限价' })) + await screen.findByText('COMBO-AB') + expect(document.querySelectorAll('[data-limit-filter]')).toHaveLength(2) }) it('破价订单审核:点击订单在右侧查看破价数据与审核要点', async () => { diff --git a/furniture-3d-system/src/app/supply-chain/management/custom-table/LimitFilterSettingsDrawer.tsx b/furniture-3d-system/src/app/supply-chain/management/custom-table/LimitFilterSettingsDrawer.tsx index af92079b..03196a23 100644 --- a/furniture-3d-system/src/app/supply-chain/management/custom-table/LimitFilterSettingsDrawer.tsx +++ b/furniture-3d-system/src/app/supply-chain/management/custom-table/LimitFilterSettingsDrawer.tsx @@ -1,11 +1,12 @@ 'use client' import { RotateCcw, X } from 'lucide-react' -import { LIMIT_TABLE_FILTER_FIELDS } from './useLimitTableSettings' +import type { LimitTableFilterField } from './useLimitTableSettings' import styles from './limit-price.module.css' type Props = { open: boolean + fields: LimitTableFilterField[] filterFields: string[] onToggleFilterField: (key: string) => void onReset: () => void @@ -14,6 +15,7 @@ type Props = { export function LimitFilterSettingsDrawer({ open, + fields, filterFields, onToggleFilterField, onReset, @@ -34,7 +36,7 @@ export function LimitFilterSettingsDrawer({

未勾选的筛选项不会显示,你已选择的条件也不会影响其他人。

- {LIMIT_TABLE_FILTER_FIELDS.map((field) => ( + {fields.map((field) => (
{productKind === 'combo' ? ( @@ -567,6 +570,7 @@ export function LimitPriceTab({ userId, canExport = false }: { userId: string; c loading={comboData.loading} error={comboData.error} filters={comboFilters} + topFilterFieldKeys={settings.comboFilterFields} sort={comboSort} onPageChange={setPage} onPageSizeChange={(size) => { diff --git a/furniture-3d-system/src/app/supply-chain/management/custom-table/LimitTableSettingsMenu.tsx b/furniture-3d-system/src/app/supply-chain/management/custom-table/LimitTableSettingsMenu.tsx index c38101d8..0a32cfb5 100644 --- a/furniture-3d-system/src/app/supply-chain/management/custom-table/LimitTableSettingsMenu.tsx +++ b/furniture-3d-system/src/app/supply-chain/management/custom-table/LimitTableSettingsMenu.tsx @@ -4,7 +4,7 @@ import { useEffect, useRef, useState } from 'react' import { ListFilter, Rows3, SlidersHorizontal } from 'lucide-react' import { LimitColumnSettingsDrawer } from './LimitColumnSettingsDrawer' import { LimitFilterSettingsDrawer } from './LimitFilterSettingsDrawer' -import type { LimitTableColumnSetting } from './useLimitTableSettings' +import type { LimitTableColumnSetting, LimitTableFilterField } from './useLimitTableSettings' import styles from './limit-price.module.css' type Props = { @@ -12,6 +12,8 @@ type Props = { onCompactChange: (compact: boolean) => void columns: LimitTableColumnSetting[] filterFields: string[] + filterFieldDefinitions: LimitTableFilterField[] + showProductSettings?: boolean onToggleColumn: (key: string) => void onSetColumnsVisible: (keys: string[], visible: boolean) => void onMoveColumn: (fromKey: string, toKey: string) => void @@ -25,6 +27,8 @@ export function LimitTableSettingsMenu({ onCompactChange, columns, filterFields, + filterFieldDefinitions, + showProductSettings = true, onToggleColumn, onSetColumnsVisible, onMoveColumn, @@ -61,29 +65,33 @@ export function LimitTableSettingsMenu({ {menuOpen && (
- -
- + {showProductSettings && ( + <> + +
+ + + )}