feat(douyin-mashida): 新增抖音券核销后台界面(列表/核销/冲正/同步/对账/作废)

抖音订单并非纯自动发货:内部 SKU 命中 AFFILIATE_DASH_SKU_MAPPING 才走自动通道,
未命中显式回落人工,且核销依赖买家自己到 /redeem 输订单号。此前核销侧在后台完全
不可见:自动核销是 void .catch(warn) 只落日志,cancelVerify 出网方法已就绪但没有入口。

照快手电子凭证的骨架做一套抖音版(两张表两套状态机,不复用):
- 券码状态、平台侧状态、同步错误全部可视化,支持只看同步失败
- 核销/冲正/重新同步/平台对账/重发券码/作废,每个写操作都带审计
- 券码列显示「核销实际会用的券码」(platform_cert_no 优先),平台改过名时额外标注
- 冲正先打平台 cancelVerify 再回退本地,避免本地与平台状态漂移
This commit is contained in:
yml2213
2026-10-12 19:45:06 +08:00
parent 0dd26da4ee
commit 5a73fb74a9
14 changed files with 1896 additions and 0 deletions
@@ -0,0 +1,72 @@
import { apiGet, apiPost } from '@/lib/http'
import type {
AdminDouyinMashidaCertificateActionPayload,
AdminDouyinMashidaCertificateCheckResult,
AdminDouyinMashidaCertificateInvalidateResult,
AdminDouyinMashidaCertificateListPayload,
AdminDouyinMashidaCertificateListResult,
AdminDouyinMashidaCertificateResendResult,
AdminDouyinMashidaCertificateSyncResult,
AdminDouyinMashidaCertificateVerifyResult,
AdminDouyinMashidaOrderDetailResult,
} from '@/types/admin'
/** 后台「抖音券核销」接口。与快手电子凭证(kuaishou-industry)是两套独立的表与状态机。 */
const BASE = '/api/v1/admin/douyin-mashida'
export function fetchAdminDouyinMashidaCertificates(
params: AdminDouyinMashidaCertificateListPayload = {},
) {
return apiGet<AdminDouyinMashidaCertificateListResult>(
`${BASE}/certificates`,
params as Record<string, unknown>,
)
}
export function verifyAdminDouyinMashidaCertificate(
payload: AdminDouyinMashidaCertificateActionPayload,
) {
return apiPost<AdminDouyinMashidaCertificateVerifyResult>(`${BASE}/certificates/verify`, payload)
}
export function cancelAdminDouyinMashidaCertificateVerify(
payload: AdminDouyinMashidaCertificateActionPayload,
) {
return apiPost<AdminDouyinMashidaCertificateVerifyResult>(
`${BASE}/certificates/cancel-verify`,
payload,
)
}
export function syncAdminDouyinMashidaCertificate(
payload: AdminDouyinMashidaCertificateActionPayload,
) {
return apiPost<AdminDouyinMashidaCertificateSyncResult>(`${BASE}/certificates/sync`, payload)
}
export function checkAdminDouyinMashidaCertificate(
payload: AdminDouyinMashidaCertificateActionPayload,
) {
return apiPost<AdminDouyinMashidaCertificateCheckResult>(`${BASE}/certificates/check`, payload)
}
export function resendAdminDouyinMashidaCertificate(
payload: AdminDouyinMashidaCertificateActionPayload,
) {
return apiPost<AdminDouyinMashidaCertificateResendResult>(`${BASE}/certificates/resend`, payload)
}
export function invalidateAdminDouyinMashidaCertificate(
payload: AdminDouyinMashidaCertificateActionPayload,
) {
return apiPost<AdminDouyinMashidaCertificateInvalidateResult>(
`${BASE}/certificates/invalidate`,
payload,
)
}
export function fetchAdminDouyinMashidaOrderDetail(
payload: AdminDouyinMashidaCertificateActionPayload,
) {
return apiPost<AdminDouyinMashidaOrderDetailResult>(`${BASE}/order-detail`, payload)
}
@@ -5,6 +5,7 @@ export * from './users'
export * from './audit-logs'
export * from './platform-config'
export * from './kuaishou-industry'
export * from './douyin-mashida-certificate'
export * from './orders'
export * from './tasks'
export * from './dev-mock'