orderFlow.js 2.29 KB
import { orders, findOrderById } from '@/data/mock'
import { findProductById } from '@/packageMall/data/products'

export const LATEST_PICKUP_ORDER_KEY = 'lf_latest_pickup_order'

const pad = value => String(value || '').padStart(2, '0')

const buildVerifyCode = (orderId, productId) => {
  const tail = String((Number(orderId || 0) * 7 + Number(productId || 0) * 13) % 100).padStart(2, '0')
  return `LQ-${String(orderId).slice(-4)}-${pad(productId)}${tail}`
}

const mergeLatestPickupOrder = (order, latestOrder) => {
  if (!order) {
    return null
  }

  const useLatest = latestOrder && String(latestOrder.orderId) === String(order.id)
  const product = useLatest && latestOrder.productId ? findProductById(latestOrder.productId) : null
  const quantity = order.quantity || 1
  const displayPrice = product ? product.price : order.price
  const displayAmount = displayPrice * quantity
  const productId = product && product.id ? product.id : order.id

  return {
    ...order,
    status: useLatest && latestOrder.status ? latestOrder.status : order.status,
    statusKey: useLatest && latestOrder.statusKey ? latestOrder.statusKey : order.statusKey,
    statusNote: useLatest && latestOrder.statusNote ? latestOrder.statusNote : order.statusNote,
    verifyExpire: '',
    title: product ? product.name : order.title,
    sku: product && product.specs && product.specs.length ? product.specs[0] : order.sku,
    price: displayPrice,
    amount: displayAmount,
    pickupStoreId: '',
    pickupStore: '任意门店可核销',
    pickupAddress: '支持任意门店到店核销自提',
    pickupHours: '任意时间可用',
    pickupPhone: '',
    verifyCode: useLatest ? buildVerifyCode(order.id, productId) : (order.verifyCode || buildVerifyCode(order.id, productId)),
    createdAt: useLatest && latestOrder.createdAt ? latestOrder.createdAt : order.createdAt
  }
}

export const getLatestPickupOrder = () => uni.getStorageSync(LATEST_PICKUP_ORDER_KEY) || null

export const saveLatestPickupOrder = payload => {
  uni.setStorageSync(LATEST_PICKUP_ORDER_KEY, payload)
}

export const getDisplayOrderById = id => mergeLatestPickupOrder(findOrderById(id), getLatestPickupOrder())

export const getDisplayOrders = () => {
  const latestOrder = getLatestPickupOrder()
  return orders.map(item => mergeLatestPickupOrder(item, latestOrder))
}