fix(consignment): 撤销寄售履约按选择回库,不再因加好友强制作废扣押金
买家退款时应能把现货退回仓库继续匹配;卖家押金只在客服显式选择扣除时才没收。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -21,49 +21,22 @@ test('押金处置选项归一:非法值一律退回按规则自动', () => {
|
||||
assert.equal(normalizeConsignmentDepositHandling(null), 'auto')
|
||||
})
|
||||
|
||||
test('打手履约押金:自动规则跟随"是否已确认加好友"', () => {
|
||||
// 已确认加好友 → 自动没收
|
||||
assert.equal(resolveWorkerDepositMode('auto', true), 'forfeit')
|
||||
// 没确认加好友 → 自动全额退还
|
||||
assert.equal(resolveWorkerDepositMode('auto', false), 'release')
|
||||
assert.equal(resolveWorkerDepositMode(undefined, false), 'release')
|
||||
test('打手履约押金:自动与退还都全额退还,只有显式扣除才没收', () => {
|
||||
assert.equal(resolveWorkerDepositMode('auto'), 'release')
|
||||
assert.equal(resolveWorkerDepositMode(undefined), 'release')
|
||||
assert.equal(resolveWorkerDepositMode('refund'), 'release')
|
||||
assert.equal(resolveWorkerDepositMode('forfeit'), 'forfeit')
|
||||
})
|
||||
|
||||
test('打手履约押金:运营显式选择可以推翻自动规则', () => {
|
||||
// 已确认加好友仍然选择退还
|
||||
assert.equal(resolveWorkerDepositMode('refund', true), 'release')
|
||||
// 没确认加好友也选择扣除
|
||||
assert.equal(resolveWorkerDepositMode('forfeit', false), 'forfeit')
|
||||
test('卖家发布押金:自动只看现货去向,加过好友也不再没收', () => {
|
||||
assert.equal(resolveConsignmentDepositAction('auto', { archive: true }), 'release')
|
||||
assert.equal(resolveConsignmentDepositAction('auto', { archive: false }), 'keep_frozen')
|
||||
})
|
||||
|
||||
test('卖家发布押金:自动规则 = 已确认加好友没收 / 作废退还 / 回库保持冻结', () => {
|
||||
assert.equal(
|
||||
resolveConsignmentDepositAction('auto', { autoForfeit: true, archive: true }),
|
||||
'forfeit',
|
||||
)
|
||||
assert.equal(
|
||||
resolveConsignmentDepositAction('auto', { autoForfeit: true, archive: false }),
|
||||
'forfeit',
|
||||
)
|
||||
assert.equal(
|
||||
resolveConsignmentDepositAction('auto', { autoForfeit: false, archive: true }),
|
||||
'release',
|
||||
)
|
||||
assert.equal(
|
||||
resolveConsignmentDepositAction('auto', { autoForfeit: false, archive: false }),
|
||||
'keep_frozen',
|
||||
)
|
||||
})
|
||||
|
||||
test('卖家发布押金:显式"保留冻结"不会去退也不会去打款流水', () => {
|
||||
assert.equal(
|
||||
resolveConsignmentDepositAction('keep_frozen', { autoForfeit: true, archive: true }),
|
||||
'keep_frozen',
|
||||
)
|
||||
assert.equal(
|
||||
resolveConsignmentDepositAction('forfeit', { autoForfeit: false, archive: true }),
|
||||
'forfeit',
|
||||
)
|
||||
test('卖家发布押金:显式选择覆盖自动规则', () => {
|
||||
assert.equal(resolveConsignmentDepositAction('keep_frozen', { archive: true }), 'keep_frozen')
|
||||
assert.equal(resolveConsignmentDepositAction('forfeit', { archive: false }), 'forfeit')
|
||||
assert.equal(resolveConsignmentDepositAction('forfeit', { archive: true }), 'forfeit')
|
||||
})
|
||||
|
||||
test('覆盖押金处置时视为需要留原因', () => {
|
||||
|
||||
@@ -7,14 +7,14 @@
|
||||
*/
|
||||
|
||||
export const WORKER_DEPOSIT_HANDLING = {
|
||||
/** 按规则自动:已确认加好友则没收,否则全额退还 */
|
||||
/** 按规则自动:全额退还。要扣除必须显式选择 forfeit */
|
||||
AUTO: 'auto',
|
||||
REFUND: 'refund',
|
||||
FORFEIT: 'forfeit',
|
||||
} as const
|
||||
|
||||
export const CONSIGNMENT_DEPOSIT_HANDLING = {
|
||||
/** 按规则自动:已确认加好友则没收;否则作废时退还、回库时继续冻结 */
|
||||
/** 按规则自动:作废退还、回库继续冻结。买家退款不因加过好友而没收,要扣必须显式选择 forfeit */
|
||||
AUTO: 'auto',
|
||||
/** 保持冻结(既不退还也不没收,留给后续人工处理) */
|
||||
KEEP_FROZEN: 'keep_frozen',
|
||||
@@ -48,31 +48,27 @@ export function normalizeConsignmentDepositHandling(value: unknown): Consignment
|
||||
}
|
||||
|
||||
/**
|
||||
* 打手履约押金:`auto` 时跟随「是否已确认加好友」——确认加好友意味着货已不可逆,
|
||||
* 取消/脱离由打手侧承担损失。
|
||||
* 打手履约押金:`auto` 与 `refund` 都全额退还。
|
||||
* 已确认加好友不再自动没收;要扣必须显式选择 `forfeit`。
|
||||
*/
|
||||
export function resolveWorkerDepositMode(
|
||||
handling: unknown,
|
||||
autoForfeit: boolean,
|
||||
): WorkerDepositMode {
|
||||
export function resolveWorkerDepositMode(handling: unknown): WorkerDepositMode {
|
||||
const normalized = normalizeWorkerDepositHandling(handling)
|
||||
if (normalized === WORKER_DEPOSIT_HANDLING.REFUND) return 'release'
|
||||
if (normalized === WORKER_DEPOSIT_HANDLING.FORFEIT) return 'forfeit'
|
||||
return autoForfeit ? 'forfeit' : 'release'
|
||||
return 'release'
|
||||
}
|
||||
|
||||
/**
|
||||
* 卖家发布押金:`auto` 时——已确认加好友一律没收;否则按现货去向定,
|
||||
* 作废(货不再挂卖)退还,回库(继续挂卖)保持冻结。
|
||||
* 卖家发布押金:`auto` 只看现货去向,不看是否加过好友。
|
||||
* 作废(货不再挂卖)退还,回库(继续挂卖)保持冻结。买家退款走回库时不扣卖家押金。
|
||||
* 要扣除必须显式选择 `forfeit`。
|
||||
*/
|
||||
export function resolveConsignmentDepositAction(
|
||||
handling: unknown,
|
||||
input: { autoForfeit: boolean; archive: boolean },
|
||||
input: { archive: boolean },
|
||||
): ConsignmentDepositAction {
|
||||
const normalized = normalizeConsignmentDepositHandling(handling)
|
||||
if (normalized === CONSIGNMENT_DEPOSIT_HANDLING.KEEP_FROZEN) return 'keep_frozen'
|
||||
if (normalized === CONSIGNMENT_DEPOSIT_HANDLING.FORFEIT) return 'forfeit'
|
||||
if (input.autoForfeit) return 'forfeit'
|
||||
return input.archive ? 'release' : 'keep_frozen'
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user