打手端待审撤单与未处理反馈订单归入问题单分组并标注来源角标
This commit is contained in:
@@ -31,6 +31,7 @@ import {
|
||||
getDisplayOrderNo,
|
||||
getMaterialDetailItems,
|
||||
getMaterialScreenshots,
|
||||
getOrderFlagTags,
|
||||
getOrderStatusDisplay,
|
||||
getSettlementLabel,
|
||||
getUniqueAcceptanceFiles,
|
||||
@@ -228,6 +229,7 @@ function WorkerOrderMobileCard({
|
||||
const noteText = getWorkerAcceptance(order)?.note
|
||||
const workerNote = String(order.workerNote || '').trim()
|
||||
const statusDisplay = getOrderStatusDisplay(order)
|
||||
const flagTags = getOrderFlagTags(order)
|
||||
|
||||
return (
|
||||
<article className="worker-order-mobile-card">
|
||||
@@ -248,6 +250,11 @@ function WorkerOrderMobileCard({
|
||||
拼单
|
||||
</Tag>
|
||||
) : null}
|
||||
{flagTags.map((flag) => (
|
||||
<Tag key={flag.key} color={flag.color} className="worker-order-mobile-tag">
|
||||
{flag.label}
|
||||
</Tag>
|
||||
))}
|
||||
<span className="worker-order-mobile-orderno-text">{getDisplayOrderNo(order)}</span>
|
||||
</div>
|
||||
<div className="worker-order-mobile-header-right">
|
||||
|
||||
@@ -26,6 +26,7 @@ import {
|
||||
getDisplayOrderNo,
|
||||
getMaterialDetailItems,
|
||||
getMaterialScreenshots,
|
||||
getOrderFlagTags,
|
||||
getOrderStatusDisplay,
|
||||
getUniqueAcceptanceFiles,
|
||||
getWorkerAcceptance,
|
||||
@@ -102,6 +103,7 @@ export function buildWorkerOrderTableColumns({
|
||||
width: 130,
|
||||
render: (_, row) => {
|
||||
const statusDisplay = getOrderStatusDisplay(row)
|
||||
const flagTags = getOrderFlagTags(row)
|
||||
return (
|
||||
<div className="cell-stack">
|
||||
<Space wrap size={4}>
|
||||
@@ -115,6 +117,15 @@ export function buildWorkerOrderTableColumns({
|
||||
<GiftCountdownTag giftAvailableAt={row.gift.giftAvailableAt} />
|
||||
) : null}
|
||||
</Space>
|
||||
{flagTags.length > 0 ? (
|
||||
<Space wrap size={4}>
|
||||
{flagTags.map((flag) => (
|
||||
<Tag key={flag.key} color={flag.color}>
|
||||
{flag.label}
|
||||
</Tag>
|
||||
))}
|
||||
</Space>
|
||||
) : null}
|
||||
{row.status === 'problem' && String(row.problemNote || '').trim() ? (
|
||||
<Typography.Text
|
||||
type="danger"
|
||||
|
||||
@@ -223,13 +223,19 @@ export default function WorkerOrdersPage() {
|
||||
}
|
||||
|
||||
function markOrderAsRead(order: WorkOrder) {
|
||||
if (!order.isUnread) return
|
||||
queryClient.setQueriesData({ queryKey: ['worker-my-orders'] }, (current: unknown) =>
|
||||
patchWorkOrderReadState(current, order.workOrderId),
|
||||
)
|
||||
void markWorkerOrderRead(order.workOrderId).catch(() => {
|
||||
void queryClient.invalidateQueries({ queryKey: ['worker-my-orders'] })
|
||||
})
|
||||
if (order.isUnread) {
|
||||
queryClient.setQueriesData({ queryKey: ['worker-my-orders'] }, (current: unknown) =>
|
||||
patchWorkOrderReadState(current, order.workOrderId),
|
||||
)
|
||||
}
|
||||
// 每次打开详情都刷新资料查看时间,用于清除"资料已更新"角标。
|
||||
void markWorkerOrderRead(order.workOrderId, { materialSeen: true })
|
||||
.then(() => {
|
||||
void queryClient.invalidateQueries({ queryKey: ['worker-my-orders'] })
|
||||
})
|
||||
.catch(() => {
|
||||
void queryClient.invalidateQueries({ queryKey: ['worker-my-orders'] })
|
||||
})
|
||||
}
|
||||
|
||||
function openOrderDetail(order: WorkOrder) {
|
||||
|
||||
@@ -72,6 +72,17 @@ export function getOrderStatusDisplay(order: WorkOrder): { label: string; color:
|
||||
return { label: formatStatus(order.status), color: resolveStatusColor(order.status) }
|
||||
}
|
||||
|
||||
/** 问题单来源与资料更新的订单角标,桌面表格与移动卡片共用。 */
|
||||
export function getOrderFlagTags(order: WorkOrder) {
|
||||
const flags: Array<{ key: string; label: string; color: string }> = []
|
||||
if (order.problemMarked) flags.push({ key: 'problem', label: '平台标记', color: 'red' })
|
||||
if (order.pendingCancelRequest)
|
||||
flags.push({ key: 'cancel', label: '撤单审核中', color: 'orange' })
|
||||
if (order.pendingFeedback) flags.push({ key: 'feedback', label: '反馈处理中', color: 'orange' })
|
||||
if (order.materialUpdated) flags.push({ key: 'material', label: '资料已更新', color: 'blue' })
|
||||
return flags
|
||||
}
|
||||
|
||||
export function getOrderStatusHint(order: WorkOrder) {
|
||||
if (isFriendGiftOrder(order) && order.status === 'in_progress' && order.gift) {
|
||||
const hints: Record<string, string> = {
|
||||
|
||||
@@ -270,8 +270,11 @@ export function submitWorkerOrderFeedback(workOrderId: number, payload: { conten
|
||||
)
|
||||
}
|
||||
|
||||
export function markWorkerOrderRead(workOrderId: number) {
|
||||
return apiPost<{ viewedAt: string; isUnread: false }>(`/api/v1/worker/orders/${workOrderId}/read`)
|
||||
export function markWorkerOrderRead(workOrderId: number, options: { materialSeen?: boolean } = {}) {
|
||||
return apiPost<{ viewedAt: string; isUnread: false }>(
|
||||
`/api/v1/worker/orders/${workOrderId}/read`,
|
||||
{ materialSeen: options.materialSeen === true },
|
||||
)
|
||||
}
|
||||
|
||||
export function saveWorkerOrderNote(workOrderId: number, note: string) {
|
||||
|
||||
@@ -548,6 +548,11 @@ export type WorkOrder = {
|
||||
/** 打手本人尚未点击查看或操作过该工单。 */
|
||||
isUnread?: boolean
|
||||
problemNote: string
|
||||
/** 问题单分组来源角标:平台标记 / 撤单审核中 / 反馈处理中 / 资料已更新。 */
|
||||
problemMarked?: boolean
|
||||
pendingCancelRequest?: boolean
|
||||
pendingFeedback?: boolean
|
||||
materialUpdated?: boolean
|
||||
/** 取消信息,仅已取消工单返回。 */
|
||||
cancel?: {
|
||||
reason: string
|
||||
|
||||
Reference in New Issue
Block a user