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) } }