From b0ab8cd4103a729b70c9c4431ea81a8f4c60891e Mon Sep 17 00:00:00 2001 From: zhaoxing <2558691827@qq.com> Date: Mon, 26 Oct 2026 10:25:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=94=AE=E5=90=8E=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=8D=95=E6=96=B0=E5=A2=9E=E4=B8=80=E4=B8=AA=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=9A=84=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=90=9C?= =?UTF-8?q?=E7=B4=A2key:=E5=94=AE=E5=90=8E=E5=8D=95=E5=8F=B7=EF=BC=8C?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E5=8F=B7=EF=BC=8C=E5=B9=B3=E5=8F=B0=E5=8F=B7?= =?UTF-8?q?=EF=BC=8C=E8=B4=A3=E4=BB=BB=E6=89=93=E6=89=8B=EF=BC=8C=E5=90=8C?= =?UTF-8?q?=E6=97=B6=E5=8A=A0=E4=B8=8A=E7=8A=B6=E6=80=81=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/admin/panels/AfterSalesPanel.tsx | 63 ++++++++++++++++++- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/apps/frontend/src/pages/admin/panels/AfterSalesPanel.tsx b/apps/frontend/src/pages/admin/panels/AfterSalesPanel.tsx index db7e1626..dcf5382a 100644 --- a/apps/frontend/src/pages/admin/panels/AfterSalesPanel.tsx +++ b/apps/frontend/src/pages/admin/panels/AfterSalesPanel.tsx @@ -33,6 +33,7 @@ import type { WorkOrder, } from '@/types/worker-platform' import { ADMIN_DEFAULT_PAGE_SIZE, buildAdminTablePagination } from '@/utils/admin-pagination' +import { normalizeSearchText } from '@/utils/admin-realtime-work-orders' import { formatAdminDateTime } from '@/utils/admin-time' import { uniqueUploadedFiles } from '@/utils/image-identity' import { asRecord, formatMoney } from './shared' @@ -54,6 +55,14 @@ type AfterSalesRepayFormValues = { note?: string } +/** 售后单状态筛选(与列表标签同一套文案)。 */ +const AFTER_SALES_STATUS_OPTIONS = [ + { value: 'awaiting_worker_response', label: '待打手说明' }, + { value: 'under_review', label: '客服处理中' }, + { value: 'recovery_pending', label: '追缴中' }, + { value: 'closed', label: '已关闭' }, +] + export type AfterSalesPanelHandle = { openCreateModal: (row: WorkOrder) => void } @@ -67,6 +76,10 @@ const AfterSalesPanel = forwardRef(function AfterSalesPan const [afterSalesFiles, setAfterSalesFiles] = useState([]) const [afterSalesPage, setAfterSalesPage] = useState(1) const [afterSalesPageSize, setAfterSalesPageSize] = useState(ADMIN_DEFAULT_PAGE_SIZE) + /** 搜索框输入值;点搜索/回车后才写入 afterSalesKeyword,避免每敲一个字就请求。 */ + const [afterSalesKeywordInput, setAfterSalesKeywordInput] = useState('') + const [afterSalesKeyword, setAfterSalesKeyword] = useState('') + const [afterSalesStatus, setAfterSalesStatus] = useState('') const [afterSalesCreateForm] = Form.useForm() const [afterSalesResolutionForm] = Form.useForm() const [afterSalesRepayForm] = Form.useForm() @@ -77,9 +90,20 @@ const AfterSalesPanel = forwardRef(function AfterSalesPan enabled: Boolean(afterSalesOrder?.sharing?.enabled), }) const afterSalesCasesQuery = useQuery({ - queryKey: ['admin-worker-platform-after-sales-cases', afterSalesPage, afterSalesPageSize], + queryKey: [ + 'admin-worker-platform-after-sales-cases', + afterSalesPage, + afterSalesPageSize, + afterSalesKeyword, + afterSalesStatus, + ], queryFn: () => - fetchAdminAfterSalesCases({ page: afterSalesPage, pageSize: afterSalesPageSize }), + fetchAdminAfterSalesCases({ + page: afterSalesPage, + pageSize: afterSalesPageSize, + ...(afterSalesKeyword ? { keyword: afterSalesKeyword } : {}), + ...(afterSalesStatus ? { status: afterSalesStatus } : {}), + }), }) useImperativeHandle(ref, () => ({ @@ -200,6 +224,41 @@ const AfterSalesPanel = forwardRef(function AfterSalesPan } bordered={false} > +
+ + { + const nextValue = event.target.value + setAfterSalesKeywordInput(nextValue) + // 清空输入立即恢复全量,不用再点一次搜索。 + if (!nextValue.trim()) { + setAfterSalesKeyword('') + setAfterSalesPage(1) + } + }} + onSearch={(value) => { + // 归一化(全角→半角、去零宽字符):粘贴来的单号常夹带不可见字符。 + setAfterSalesKeyword(normalizeSearchText(value)) + setAfterSalesPage(1) + }} + /> +