接单工单状态筛选支持多选
- 前端:状态筛选改为多选(Select mode=multiple),可一次筛选多个状态 - 后端:listWorkOrders 支持 statuses 数组查询(ANY 匹配),兼容旧单状态参数 - 批量验收入口仅在单独筛选待验收时显示,避免多选误操作
This commit is contained in:
@@ -141,7 +141,7 @@ export default function WorkOrdersPanel() {
|
||||
const navigate = useNavigate()
|
||||
const queryClient = useQueryClient()
|
||||
const canEditRequirementFields = hasAdminRole('operator')
|
||||
const [status, setStatus] = useState('')
|
||||
const [statuses, setStatuses] = useState<string[]>([])
|
||||
const [keyword, setKeyword] = useState('')
|
||||
const [keywordInput, setKeywordInput] = useState('')
|
||||
const [workerId, setWorkerId] = useState<number | undefined>()
|
||||
@@ -181,10 +181,27 @@ export default function WorkOrdersPanel() {
|
||||
unitReward?: number
|
||||
totalAmount?: number
|
||||
}>()
|
||||
// 仅单独筛选「待验收」时提供批量验收入口(多选状态下不启用勾选,避免误操作)
|
||||
const isPendingAcceptanceOnly =
|
||||
statuses.length === 1 && statuses[0] === 'pending_acceptance'
|
||||
|
||||
const ordersQuery = useQuery({
|
||||
queryKey: ['admin-worker-platform-orders', status, keyword, workerId, page, pageSize],
|
||||
queryFn: () => fetchAdminWorkOrders({ status, keyword, workerId, page, pageSize }),
|
||||
queryKey: [
|
||||
'admin-worker-platform-orders',
|
||||
statuses.join(','),
|
||||
keyword,
|
||||
workerId,
|
||||
page,
|
||||
pageSize,
|
||||
],
|
||||
queryFn: () =>
|
||||
fetchAdminWorkOrders({
|
||||
status: statuses.length > 0 ? statuses.join(',') : undefined,
|
||||
keyword,
|
||||
workerId,
|
||||
page,
|
||||
pageSize,
|
||||
}),
|
||||
})
|
||||
const ordersPagination = ordersQuery.data?.data.pagination
|
||||
const categoriesQuery = useQuery({
|
||||
@@ -208,7 +225,7 @@ export default function WorkOrdersPanel() {
|
||||
|
||||
useEffect(() => {
|
||||
setSelectedAcceptanceOrderIds([])
|
||||
}, [status, keyword, workerId, page, pageSize])
|
||||
}, [statuses, keyword, workerId, page, pageSize])
|
||||
|
||||
function openAssignModal(row: WorkOrder) {
|
||||
setAssignOrder(row)
|
||||
@@ -441,7 +458,7 @@ export default function WorkOrdersPanel() {
|
||||
function clearOrderFilters() {
|
||||
setKeywordInput('')
|
||||
setKeyword('')
|
||||
setStatus('')
|
||||
setStatuses([])
|
||||
setWorkerId(undefined)
|
||||
setPage(1)
|
||||
}
|
||||
@@ -854,17 +871,18 @@ export default function WorkOrdersPanel() {
|
||||
onPressEnter={searchOrders}
|
||||
/>
|
||||
<Select
|
||||
value={status}
|
||||
style={{ width: 150 }}
|
||||
options={[
|
||||
{ value: '', label: '全部状态' },
|
||||
...FILTERABLE_WORK_ORDER_STATUSES.map((item) => ({
|
||||
value: item,
|
||||
label: <Tag color={resolveStatusColor(item)}>{formatStatus(item)}</Tag>,
|
||||
})),
|
||||
]}
|
||||
onChange={(nextStatus) => {
|
||||
setStatus(nextStatus)
|
||||
mode="multiple"
|
||||
allowClear
|
||||
value={statuses}
|
||||
placeholder="全部状态(可多选)"
|
||||
style={{ minWidth: 220, maxWidth: 420 }}
|
||||
maxTagCount="responsive"
|
||||
options={FILTERABLE_WORK_ORDER_STATUSES.map((item) => ({
|
||||
value: item,
|
||||
label: <Tag color={resolveStatusColor(item)}>{formatStatus(item)}</Tag>,
|
||||
}))}
|
||||
onChange={(nextStatuses: string[]) => {
|
||||
setStatuses(nextStatuses)
|
||||
setPage(1)
|
||||
}}
|
||||
/>
|
||||
@@ -903,7 +921,7 @@ export default function WorkOrdersPanel() {
|
||||
title="接单工单"
|
||||
extra={
|
||||
<Space>
|
||||
{status === 'pending_acceptance' ? (
|
||||
{isPendingAcceptanceOnly ? (
|
||||
<Button
|
||||
type="primary"
|
||||
icon={<CheckOutlined />}
|
||||
@@ -930,7 +948,7 @@ export default function WorkOrdersPanel() {
|
||||
dataSource={ordersQuery.data?.data.items || []}
|
||||
columns={columns}
|
||||
rowSelection={
|
||||
status === 'pending_acceptance'
|
||||
isPendingAcceptanceOnly
|
||||
? {
|
||||
selectedRowKeys: selectedAcceptanceOrderIds,
|
||||
onChange: (selectedRowKeys) =>
|
||||
|
||||
Reference in New Issue
Block a user