feat:售后问题单新增一个搜索订单的功能,搜索key:售后单号,工单号,平台号,责任打手,同时加上状态筛选
This commit is contained in:
@@ -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<AfterSalesPanelHandle>(function AfterSalesPan
|
||||
const [afterSalesFiles, setAfterSalesFiles] = useState<UploadedFile[]>([])
|
||||
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<AfterSalesCreateFormValues>()
|
||||
const [afterSalesResolutionForm] = Form.useForm<AfterSalesResolutionFormValues>()
|
||||
const [afterSalesRepayForm] = Form.useForm<AfterSalesRepayFormValues>()
|
||||
@@ -77,9 +90,20 @@ const AfterSalesPanel = forwardRef<AfterSalesPanelHandle>(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<AfterSalesPanelHandle>(function AfterSalesPan
|
||||
}
|
||||
bordered={false}
|
||||
>
|
||||
<div style={{ marginBottom: 16 }}>
|
||||
<Space wrap>
|
||||
<Input.Search
|
||||
allowClear
|
||||
value={afterSalesKeywordInput}
|
||||
placeholder="售后单号 / 工单号 / 平台号 / 责任打手"
|
||||
style={{ width: 340 }}
|
||||
onChange={(event) => {
|
||||
const nextValue = event.target.value
|
||||
setAfterSalesKeywordInput(nextValue)
|
||||
// 清空输入立即恢复全量,不用再点一次搜索。
|
||||
if (!nextValue.trim()) {
|
||||
setAfterSalesKeyword('')
|
||||
setAfterSalesPage(1)
|
||||
}
|
||||
}}
|
||||
onSearch={(value) => {
|
||||
// 归一化(全角→半角、去零宽字符):粘贴来的单号常夹带不可见字符。
|
||||
setAfterSalesKeyword(normalizeSearchText(value))
|
||||
setAfterSalesPage(1)
|
||||
}}
|
||||
/>
|
||||
<Select
|
||||
allowClear
|
||||
value={afterSalesStatus || undefined}
|
||||
placeholder="全部状态"
|
||||
style={{ width: 160 }}
|
||||
options={AFTER_SALES_STATUS_OPTIONS}
|
||||
onChange={(value) => {
|
||||
setAfterSalesStatus(String(value || ''))
|
||||
setAfterSalesPage(1)
|
||||
}}
|
||||
/>
|
||||
</Space>
|
||||
</div>
|
||||
<Table<WorkerAfterSalesCase>
|
||||
rowKey="caseId"
|
||||
loading={afterSalesCasesQuery.isLoading}
|
||||
|
||||
Reference in New Issue
Block a user