97 lines
2.9 KiB
TypeScript
97 lines
2.9 KiB
TypeScript
import dayjs from "dayjs";
|
|
import { OrderStatus, CancelType, RefundStatus } from "@/services/orderService";
|
|
|
|
export function getOrderStatus(orderData) {
|
|
const { order_status, cancel_type, refund_status, order_no, game_info } = orderData
|
|
if (!order_no) {
|
|
return 'none'
|
|
}
|
|
const { start_time } = game_info || {}
|
|
if (!start_time) { console.log('活动开始时间未找到, start_time: ', start_time); }
|
|
const unPay = order_status === OrderStatus.PENDING && ([CancelType.NONE].includes(cancel_type));
|
|
const refund = [RefundStatus.SUCCESS].includes(refund_status);
|
|
const refunding = [RefundStatus.PENDING].includes(refund_status);
|
|
const expired =
|
|
order_status === OrderStatus.FINISHED;
|
|
|
|
const frozen = dayjs().isAfter(dayjs(start_time))
|
|
|
|
const canceled = [CancelType.TIMEOUT, CancelType.USER].includes(cancel_type);
|
|
|
|
// return unPay ? 'unpay' : refund ? 'refund' : canceled ? 'canceled' : expired ? 'expired' : refunding ? 'refunding' : is_substitute_order ? 'progress' : frozen ? 'start' : 'progress'
|
|
if (unPay) return 'unpay';
|
|
if (refund) return 'refund';
|
|
if (canceled) return 'canceled';
|
|
if (expired) return 'expired';
|
|
if (refunding) return 'refunding';
|
|
if (frozen) return 'start';
|
|
// if (is_substitute_order) return 'progress';
|
|
return '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([
|
|
['canceled', [deleteOrder, gameDetail]],
|
|
['expired', [deleteOrder, gameDetail]],
|
|
['progress', [quitGame, gameDetail]],
|
|
['start', [gameDetail]],
|
|
['refund', [deleteOrder, gameDetail]],
|
|
['refunding', [gameDetail]],
|
|
['unpay', [cancelOrder, payNow]]
|
|
])
|
|
return actionMap.get(key)
|
|
}
|
|
|
|
if (scene === 'detail') {
|
|
const actionMap = new Map([
|
|
['canceled', [deleteOrder, gameDetail]],
|
|
['expired', [gameDetail, deleteOrder]],
|
|
['progress', [gameDetail, quitGame]],
|
|
['start', [gameDetail]],
|
|
['refund', [deleteOrder, gameDetail]],
|
|
['refunding', [gameDetail]],
|
|
['unpay', [cancelOrder]]
|
|
])
|
|
return actionMap.get(key)
|
|
}
|
|
}
|