diff --git a/src/food-market.web/src/pages/ProductsPage.tsx b/src/food-market.web/src/pages/ProductsPage.tsx index 5353649..b9e9824 100644 --- a/src/food-market.web/src/pages/ProductsPage.tsx +++ b/src/food-market.web/src/pages/ProductsPage.tsx @@ -7,6 +7,7 @@ import { Button } from '@/components/Button' import { Plus, Filter, X, FolderTree } from 'lucide-react' import { useCatalogList } from '@/lib/useCatalog' import { useOrgSettings } from '@/lib/useOrgSettings' +import { usePriceTypes } from '@/lib/useLookups' import { ProductGroupTree } from '@/components/ProductGroupTree' import { MoneyInput } from '@/components/Field' import { packagingLabel, type Product } from '@/lib/types' @@ -103,6 +104,8 @@ export function ProductsPage() { const [filtersOpen, setFiltersOpen] = useState(false) const { data, isLoading, page, setPage, search, setSearch, sortKey, sortOrder, setSort } = useCatalogList(URL, toExtra(filters)) const org = useOrgSettings() + const priceTypes = usePriceTypes() + const systemPriceType = priceTypes.data?.find((pt) => pt.isSystem) ?? priceTypes.data?.find((pt) => pt.isDefault) ?? priceTypes.data?.[0] const showVat = org.data?.showVatEnabledOnProduct ?? false const showService = org.data?.showServiceOnProduct ?? false const showMarked = org.data?.showMarkedOnProduct ?? false @@ -127,15 +130,23 @@ export function ProductsPage() { { header: 'Штрихкод', width: '160px', cell: (r) => ( {r.barcodes[0]?.code ?? '—'} )}, - { header: 'Эталонная цена', width: '160px', className: 'text-right font-mono', sortKey: 'referencePrice', cell: (r) => { - if (r.referencePrice == null) return '—' - const fractional = org.data?.allowFractionalPrices ?? false - const num = r.referencePrice.toLocaleString('ru', - fractional - ? { minimumFractionDigits: 2, maximumFractionDigits: 2 } - : { maximumFractionDigits: 0 }) - return `${num} ${r.purchaseCurrencyCode ?? ''}`.trim() - }}, + // Колонка системной розничной цены: заголовок = PriceType.Name той записи + // что помечена IsSystem (если пользователь её переименовал — заголовок меняется). + { + header: systemPriceType?.name ?? 'Розничная цена', + width: '170px', + className: 'text-right font-mono', + cell: (r) => { + const pr = systemPriceType ? r.prices?.find(x => x.priceTypeId === systemPriceType.id) : undefined + if (!pr) return '—' + const fractional = org.data?.allowFractionalPrices ?? false + const num = pr.amount.toLocaleString('ru', + fractional + ? { minimumFractionDigits: 2, maximumFractionDigits: 2 } + : { maximumFractionDigits: 0 }) + return `${num} ${pr.currencyCode ?? ''}`.trim() + }, + }, ] if (showVat) { baseColumns.push({ header: 'НДС', width: '90px', className: 'text-right', sortKey: 'vat', cell: (r) => r.vatEnabled ? `${r.vat.toFixed(2)}%` : '—' }) @@ -223,7 +234,7 @@ export function ProductsPage() { { setFilters({ ...filters, isMarked: v }); setPage(1) }} /> )}
- Закупочная цена + Эталонная цена
-
- {isPosted && ( - +
+ {!isNew && ( + )} {isDraft && !isNew && ( )} {isDraft && ( - )} - {isDraft && !isNew && ( - - )}