merge: 合并 main 并保留寄卖内部匹配与客户退款
This commit is contained in:
@@ -225,6 +225,7 @@ export function resolveOrderFulfillmentMode(row: {
|
||||
| 'affiliate_dash'
|
||||
| 'third_party_voucher'
|
||||
| 'manual'
|
||||
| 'on_account'
|
||||
| 'pending'
|
||||
| 'archived'
|
||||
| 'mixed'
|
||||
@@ -240,6 +241,8 @@ export function resolveOrderFulfillmentMode(row: {
|
||||
return { label: '🗄 历史归档', color: 'default' }
|
||||
case 'manual':
|
||||
return { label: '🙋 人工履约', color: 'orange' }
|
||||
case 'on_account':
|
||||
return { label: '统一结算', color: 'gold' }
|
||||
case 'mixed':
|
||||
return { label: '🔀 混合履约', color: 'geekblue' }
|
||||
default:
|
||||
|
||||
@@ -34,6 +34,7 @@ export const adminOrderFulfillmentModeOptions = [
|
||||
{ label: '接单平台', value: 'work_order' },
|
||||
{ label: '第三方卡券', value: 'third_party_voucher' },
|
||||
{ label: '人工履约', value: 'manual' },
|
||||
{ label: '统一结算', value: 'on_account' },
|
||||
{ label: '混合履约', value: 'mixed' },
|
||||
{ label: '待判定', value: 'pending' },
|
||||
{ label: '历史归档', value: 'archived' },
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
/** 分 → 元,用于统一展示积分换算率。 */
|
||||
export function formatCreditUnitPriceYuan(value: number | string | null | undefined) {
|
||||
const fen = Number(value)
|
||||
return `${(Number.isFinite(fen) ? fen / 100 : 0).toFixed(2)}元`
|
||||
}
|
||||
|
||||
export function formatCreditUnitPriceLabel(value: number | string | null | undefined) {
|
||||
return `1积分=${formatCreditUnitPriceYuan(value)}`
|
||||
}
|
||||
|
||||
/** 配置金额最多 2 位小数,去掉无意义的尾随 0。 */
|
||||
export function formatCreditQuantity(value: number | string | null | undefined) {
|
||||
const quantity = Number(value)
|
||||
if (!Number.isFinite(quantity)) return '0'
|
||||
return String(Number(quantity.toFixed(2)))
|
||||
}
|
||||
@@ -2,22 +2,21 @@ import { message } from 'antd'
|
||||
|
||||
import type { WorkOrderVoucherConsumeResult } from '@/services/admin/consignment'
|
||||
|
||||
/**
|
||||
* 电子凭证核销结果必须如实反馈:核销失败时后端已经改完状态,但凭证没消耗,
|
||||
* 之前有调用方无条件弹"成功",运营会以为凭证已核销而漏掉人工处理。
|
||||
* 统一出口:所有履约/指派/手动匹配的调用方都用这一个,避免文案与口径各自漂移。
|
||||
*/
|
||||
export function notifyVoucherConsume(voucherConsume?: WorkOrderVoucherConsumeResult) {
|
||||
if (!voucherConsume || voucherConsume.ok) {
|
||||
if (voucherConsume?.alreadyConsumedCount) {
|
||||
message.info(`电子凭证已提前核销 ${voucherConsume.alreadyConsumedCount} 张,本次未重复核销`)
|
||||
}
|
||||
if (!voucherConsume) return
|
||||
if (voucherConsume.queuedCount > 0) {
|
||||
message.success(`自动核销已排队 ${voucherConsume.queuedCount} 个任务`)
|
||||
return
|
||||
}
|
||||
if (voucherConsume.status === 'already_scheduled') {
|
||||
message.info('核销任务已在队列中,本次未重复安排')
|
||||
return
|
||||
}
|
||||
if (voucherConsume.ok) return
|
||||
message.warning({
|
||||
content: `状态已变更,但电子凭证核销失败:${
|
||||
content: `状态已变更,但自动核销未安排成功:${
|
||||
voucherConsume.errorMessage || '未知错误'
|
||||
}。请到「抖音券核销」或快手电子凭证后台人工核销后再发货`,
|
||||
}。请在核销任务或平台券后台人工处理`,
|
||||
duration: 8,
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user