From b226af2adced062aa0bcb6740260f8c70fc3c72d Mon Sep 17 00:00:00 2001 From: jacy <18049821889@163.com> Date: Fri, 28 Aug 2026 13:10:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(admin):=20=E8=AE=A2=E5=8D=95=E9=A1=B5?= =?UTF-8?q?=E7=AD=9B=E9=80=89=E6=94=B9=E7=89=88=E5=B9=B6=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=B8=8E=E5=95=86=E5=93=81=E6=A8=A1=E7=B3=8A?= =?UTF-8?q?=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 收起次要筛选项,去掉过滤测试;列表可按用户编号/昵称/备注/手机与商品名称/规格查询。 Co-authored-by: Cursor --- apps/admin-web/src/admin.css | 50 ++++ apps/admin-web/src/pages/OrdersPage.tsx | 240 ++++++++++-------- packages/shared-types/src/ops.ts | 2 + .../src/modules/ops/admin-orders.service.ts | 22 ++ .../src/modules/ops/dto/admin-query.dto.ts | 18 ++ 5 files changed, 223 insertions(+), 109 deletions(-) diff --git a/apps/admin-web/src/admin.css b/apps/admin-web/src/admin.css index 0b66a03..f34531f 100644 --- a/apps/admin-web/src/admin.css +++ b/apps/admin-web/src/admin.css @@ -74,6 +74,56 @@ body.admin-col-resizing * { user-select: none !important; } +/* 订单页筛选:第一行常驻,第二行起可收起 */ +.admin-orders-filter-row { + display: flex; + flex-wrap: wrap; + gap: 8px 16px; + align-items: flex-end; + margin-bottom: 12px; +} + +.admin-orders-filter-row--tools { + justify-content: space-between; + align-items: center; + margin-bottom: 16px; +} + +.admin-orders-filter-item { + margin-bottom: 0 !important; +} + +.admin-orders-filter-item--sm { + width: 140px; +} + +.admin-orders-filter-item--md { + width: 168px; +} + +.admin-orders-filter-item--search { + width: 180px; +} + +.admin-orders-filter-item--status { + width: 220px; + min-width: 180px; + flex: 1 1 180px; + max-width: 280px; +} + +.admin-orders-filter-item--date { + flex: 1 1 auto; +} + +.admin-orders-filter-actions { + margin-left: auto; +} + +.admin-orders-date-picker { + width: 240px; +} + /* 列表页顶栏:标题左、主操作右、列设置最右 */ .admin-list-header { display: flex; diff --git a/apps/admin-web/src/pages/OrdersPage.tsx b/apps/admin-web/src/pages/OrdersPage.tsx index e182e08..7fd052c 100644 --- a/apps/admin-web/src/pages/OrdersPage.tsx +++ b/apps/admin-web/src/pages/OrdersPage.tsx @@ -4,7 +4,6 @@ import { Alert, Button, Checkbox, - Col, Collapse, DatePicker, Descriptions, @@ -14,7 +13,6 @@ import { InputNumber, Modal, Radio, - Row, Select, Space, Table, @@ -24,6 +22,7 @@ import { } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import dayjs, { type Dayjs } from 'dayjs'; +import { DownOutlined, UpOutlined } from '@ant-design/icons'; import { ORDER_TYPE_LABELS } from '@dukang/shared-types'; import { request, type AdminOrderItem, type AdminOrderRow, type HqProfile, type Paginated } from '../lib/api'; import { useAdminListColumns } from '../lib/useAdminListColumns'; @@ -150,8 +149,9 @@ type OrderExportFilters = { orderType?: string; cityId?: string; receiverPhone?: string; + userKeyword?: string; + productKeyword?: string; fulfillmentHold?: boolean; - excludeTest?: boolean; deliveryType?: string; promoCodeId?: string; dateRange?: [Dayjs, Dayjs]; @@ -213,6 +213,8 @@ const DATE_PRESETS: Array<{ key: 'day' | 'week' | 'month' | 'quarter' | 'year'; { key: 'year', label: '当年' }, ]; +const FILTERS_COLLAPSED_KEY = 'admin-orders-filters-collapsed'; + function formatUserWithRemark(user?: { userNo?: string; hqRemark?: string | null; @@ -254,9 +256,10 @@ function buildExportPayload( if (filters.orderType) payload.orderType = filters.orderType; if (filters.cityId) payload.cityId = filters.cityId; if (filters.receiverPhone) payload.receiverPhone = filters.receiverPhone; + if (filters.userKeyword) payload.userKeyword = filters.userKeyword; + if (filters.productKeyword) payload.productKeyword = filters.productKeyword; if (filters.deliveryType) payload.deliveryType = filters.deliveryType; if (filters.fulfillmentHold) payload.fulfillmentHold = true; - if (filters.excludeTest) payload.excludeTest = true; if (filters.promoCodeId) payload.promoCodeId = filters.promoCodeId; if (filters.dateRange?.[0]) payload.createdFrom = filters.dateRange[0].format('YYYY-MM-DD'); if (filters.dateRange?.[1]) payload.createdTo = filters.dateRange[1].format('YYYY-MM-DD'); @@ -335,6 +338,13 @@ export default function OrdersPage() { const [trackOpen, setTrackOpen] = useState(false); const [exporting, setExporting] = useState(false); const [exportFormat, setExportFormat] = useState('xlsx'); + const [filtersCollapsed, setFiltersCollapsed] = useState(() => { + try { + return localStorage.getItem(FILTERS_COLLAPSED_KEY) === '1'; + } catch { + return false; + } + }); const canDeleteOrders = (profile?.permissionKeys ?? []).includes('orders_delete'); const canProxyOrder = (profile?.permissionKeys ?? []).includes('orders'); const canExportOrders = (profile?.permissionKeys ?? []).includes('orders'); @@ -404,8 +414,9 @@ export default function OrdersPage() { if (values.orderType) qs.set('orderType', values.orderType); if (values.cityId) qs.set('cityId', values.cityId); if (values.receiverPhone) qs.set('receiverPhone', values.receiverPhone); + if (values.userKeyword) qs.set('userKeyword', values.userKeyword); + if (values.productKeyword) qs.set('productKeyword', values.productKeyword); if (values.fulfillmentHold) qs.set('fulfillmentHold', 'true'); - if (values.excludeTest) qs.set('excludeTest', 'true'); if (values.deliveryType) qs.set('deliveryType', values.deliveryType); if (initialPromoCodeId) qs.set('promoCodeId', initialPromoCodeId); if (values.dateRange?.[0]) qs.set('createdFrom', values.dateRange[0].format('YYYY-MM-DD')); @@ -843,14 +854,72 @@ export default function OrdersPage() { ) : null}
{ setPage(1); void load(); }}> - - - - - - - +
+ + + + + + + + + + + + + + ({ value, label }))} - /> - - - - - - - - - - - - - - - + +
+ +
+ {canExportOrders ? ( + + setExportFormat(e.target.value)} + > + Excel + PDF + + + + + ) : } + 大单拦截 - - 过滤测试 - + + {canDeleteOrders ? ( + + ) : null} - - - - -
- {canExportOrders ? ( - - setExportFormat(e.target.value)} - > - Excel - PDF - - - - - ) : } - - - - {canDeleteOrders ? ( - - ) : null} - -
+
+ + ) : null}