Files
mini-programs/src/utils/orderActions.ts

77 lines
2.2 KiB
TypeScript

import { OrderStatus, CancelType, RefundStatus } from "@/services/orderService";
export function getOrderStatus(orderData) {
const { order_status, cancel_type, refund_status, order_no } = orderData
if (!order_no) {
return 'none'
}
const unPay = order_status === OrderStatus.PENDING && ([CancelType.NONE].includes(cancel_type));
const refund = [RefundStatus.PENDING, RefundStatus.SUCCESS].includes(refund_status);
const expired =
order_status === OrderStatus.FINISHED ||
[CancelType.TIMEOUT, CancelType.USER].includes(cancel_type);
return unPay ? 'unpay' : refund ? 'refund' : expired ? cancel_type === CancelType.TIMEOUT ? 'timeout' : 'expired' : 'progress'
}
// scene: list、detail
export function generateOrderActions(orderData, actions, scene) {
const { handleDeleteOrder, handleCancelOrder, handleQuit, handlePayNow, handleViewGame } = actions
const deleteOrder = {
text: '删除订单',
className: 'cancelOrder',
action: handleDeleteOrder.bind(null, orderData),
}
const cancelOrder = {
text: '取消订单',
className: 'cancelOrder',
action: handleCancelOrder.bind(null, orderData),
}
const quitGame = {
text: '退出活动',
className: 'cancelOrder',
action: handleQuit.bind(null, orderData),
}
const payNow = {
text: '立即支付',
className: 'payNow',
action: handlePayNow.bind(null, orderData),
}
const gameDetail = {
text: '球局详情',
className: 'gameDetail',
action: handleViewGame.bind(null, orderData.game_info?.id),
}
const key = getOrderStatus(orderData)
if (scene === 'list') {
const actionMap = new Map([
['timeout', [deleteOrder, gameDetail]],
['expired', [deleteOrder, gameDetail]],
['progress', [quitGame, gameDetail]],
['refund', [deleteOrder, gameDetail]],
['unpay', [cancelOrder, payNow]]
])
return actionMap.get(key)
}
if (scene === 'detail') {
const actionMap = new Map([
['timeout', [deleteOrder, gameDetail]],
['expired', [gameDetail, deleteOrder]],
['progress', [gameDetail, quitGame]],
['refund', [deleteOrder, gameDetail]],
['unpay', [cancelOrder]]
])
return actionMap.get(key)
}
}