fix(finance): 收敛内部 SKU 履约路由与载体状态
统一内部 SKU 与渠道主/兜底解析,禁止并列主渠道。 运营指定渠道改为先创建真实载体,失败保持明确 pending。 历史缺载体、多载体冲突和自动发货兜底统一由管道修复。 迁移人工配置与旧 sku_code 规则,补充严格预检和集成测试。
This commit is contained in:
@@ -100,7 +100,13 @@ function PendingPanel() {
|
||||
channel: selections[rowKey(row)] || '',
|
||||
}),
|
||||
onSuccess: (result) => {
|
||||
message.success(`已指定 ${result.data.updated} 个订单项`)
|
||||
if (result.data.carrierFailed > 0) {
|
||||
message.warning(
|
||||
`已指定 ${result.data.updated} 个订单项,${result.data.carrierFailed} 个因载体创建失败仍待处理`,
|
||||
)
|
||||
} else {
|
||||
message.success(`已指定 ${result.data.updated} 个订单项`)
|
||||
}
|
||||
void queryClient.invalidateQueries({ queryKey: ['fulfillment-pending'] })
|
||||
},
|
||||
onError: () => message.error('指定渠道失败'),
|
||||
@@ -135,6 +141,7 @@ function PendingPanel() {
|
||||
no_internal_sku: '无内部SKU',
|
||||
no_channel_capability: '无渠道能力',
|
||||
no_carrier: '无履约载体',
|
||||
routing_conflict: '渠道冲突',
|
||||
}
|
||||
return value?.length ? value.map((reason) => labels[reason] || reason).join(' / ') : '-'
|
||||
},
|
||||
|
||||
@@ -100,7 +100,10 @@ export function assignChannelBySku(payload: {
|
||||
channel: string
|
||||
note?: string
|
||||
}) {
|
||||
return apiPost<{ updated: number }>('/api/v1/admin/fulfillment/assign', payload)
|
||||
return apiPost<{ updated: number; carrierFailed: number; ruleCreated: boolean }>(
|
||||
'/api/v1/admin/fulfillment/assign',
|
||||
payload,
|
||||
)
|
||||
}
|
||||
|
||||
export function assignChannelToItems(payload: {
|
||||
@@ -108,7 +111,10 @@ export function assignChannelToItems(payload: {
|
||||
channel: string
|
||||
note?: string
|
||||
}) {
|
||||
return apiPost<{ updated: number }>('/api/v1/admin/fulfillment/assign', payload)
|
||||
return apiPost<{ updated: number; carrierFailed: number }>(
|
||||
'/api/v1/admin/fulfillment/assign',
|
||||
payload,
|
||||
)
|
||||
}
|
||||
|
||||
export function fetchChannelRules(params: { channel?: string } = {}) {
|
||||
|
||||
Reference in New Issue
Block a user