修复bug
This commit is contained in:
@@ -48,6 +48,13 @@ function getDishPromoLabel(item: Record<string, unknown>): string {
|
||||
return typeof raw === 'string' && raw.trim() ? raw.trim() : ''
|
||||
}
|
||||
|
||||
function getFeaturedDishDisplayPrice(item: Record<string, any>) {
|
||||
const firstSpecPrice = item?.merchantSideDishVoList?.[0]?.merchantSideDishItemVoList?.[0]?.price
|
||||
if (firstSpecPrice != null && String(firstSpecPrice) !== '') return firstSpecPrice
|
||||
if (item?.actualSalePrice != null && String(item.actualSalePrice) !== '') return item.actualSalePrice
|
||||
return item?.discountPrice ?? 0
|
||||
}
|
||||
|
||||
function navigateTo(url: string) {
|
||||
if(userStore.checkLogin()) {
|
||||
uni.navigateTo({
|
||||
@@ -445,7 +452,7 @@ const debouncedEmit = debounce(1300, (isCollected: boolean, id: string, type: Co
|
||||
<view class="featured-dish-body">
|
||||
<view class="featured-dish-meta flex items-start justify-between gap-12rpx mb-14rpx">
|
||||
<view class="min-w-0 flex-1">
|
||||
<text class="featured-dish-price">US${{ item?.discountPrice }}</text>
|
||||
<text class="featured-dish-price">US${{ getFeaturedDishDisplayPrice(item) }}</text>
|
||||
<!-- <text
|
||||
v-if="Number(item?.originalPrice) > Number(item?.discountPrice)"
|
||||
class="featured-dish-original"
|
||||
|
||||
+65
-37
@@ -42,6 +42,16 @@ const {paging, dataList, loading, queryList, firstLoaded} = usePage<MerchantOrde
|
||||
}
|
||||
})
|
||||
|
||||
function fillI18nParams(template: string, params: Record<string, string | number>) {
|
||||
let text = template
|
||||
Object.keys(params).forEach((key) => {
|
||||
const value = String(params[key] ?? '')
|
||||
text = text.replace(new RegExp(`\\{${key}\\}`, 'g'), value)
|
||||
text = text.replace(new RegExp(`\\$\\{${key}\\}`, 'g'), value)
|
||||
})
|
||||
return text
|
||||
}
|
||||
|
||||
function normalizeTimestamp(input: unknown): number | null {
|
||||
if (input == null || input === '') return null
|
||||
|
||||
@@ -71,7 +81,14 @@ function formatOrderCardTime(item: MerchantOrderVo) {
|
||||
}
|
||||
|
||||
function formatOrderPrice(item: MerchantOrderVo) {
|
||||
return (item.paidAmount ?? item.actualPrice ?? 0).toFixed(2)
|
||||
const raw = item?.paidAmount ?? item?.actualPrice ?? 0
|
||||
if (raw == null || raw === '') return '0.00'
|
||||
if (typeof raw === 'number') return raw.toFixed(2)
|
||||
const str = String(raw).trim()
|
||||
if (!str) return '0.00'
|
||||
if (!str.includes('.')) return `${str}.00`
|
||||
const [intPart, decimalPart = ''] = str.split('.')
|
||||
return `${intPart}.${(decimalPart + '00').slice(0, 2)}`
|
||||
}
|
||||
|
||||
function getOrderDishes(item: MerchantOrderVo): Array<Record<string, any>> {
|
||||
@@ -94,6 +111,42 @@ function getTotalDishCount(item: MerchantOrderVo) {
|
||||
return getOrderDishes(item).reduce((s, d) => s + (d.count || 0), 0)
|
||||
}
|
||||
|
||||
function getTotalDishCountText(item: MerchantOrderVo) {
|
||||
return fillI18nParams(t('pages.order.totalItemCount'), {
|
||||
count: getTotalDishCount(item),
|
||||
})
|
||||
}
|
||||
|
||||
function isSameCode(value: unknown, code: unknown) {
|
||||
return String(value ?? '') === String(code ?? '')
|
||||
}
|
||||
|
||||
function isRefundApplied(item: MerchantOrderVo) {
|
||||
return isSameCode(item.refundStatus, OrderCancelStatus.APPLIED)
|
||||
}
|
||||
|
||||
function isRefundApproved(item: MerchantOrderVo) {
|
||||
return isSameCode(item.refundStatus, OrderCancelStatus.APPROVED)
|
||||
}
|
||||
|
||||
function isRefundRejected(item: MerchantOrderVo) {
|
||||
return isSameCode(item.refundStatus, OrderCancelStatus.REJECTED)
|
||||
}
|
||||
|
||||
function getOrderStatusText(item: MerchantOrderVo) {
|
||||
if (isRefundApplied(item)) return t('pages-store.order.orderStatus.refund')
|
||||
if (isRefundApproved(item)) return t('pages-store.order.orderStatus.agreeRefund')
|
||||
if (isRefundRejected(item)) return t('pages-store.order.orderStatus.rejectRefund')
|
||||
if (isSameCode(item.orderStatus, OrderStatus.CANCELLED)) return t('pages-store.order.orderStatus.cancelled')
|
||||
if (isSameCode(item.orderStatus, OrderStatus.PENDING_PAYMENT)) return t('pages-store.order.orderStatus.pendingPayment')
|
||||
if (isSameCode(item.orderStatus, OrderStatus.HAS_PENDING_PAYMENT)) return t('pages-store.order.orderStatus.hasPendingPayment')
|
||||
if (isSameCode(item.orderStatus, OrderStatus.MERCHANT_ACCEPTED)) return t('pages-store.order.orderStatus.received')
|
||||
if (isSameCode(item.receiveMethod, 1) && isSameCode(item.orderStatus, OrderStatus.DELIVERING)) return t('pages-store.order.orderStatus.delivering')
|
||||
if (isSameCode(item.orderStatus, OrderStatus.COMPLETED)) return t('pages-store.order.orderStatus.delivered')
|
||||
if (isSameCode(item.orderStatus, OrderStatus.MERCHANT_REJECTED)) return t('pages-store.store.orderStatus.rejected')
|
||||
return '--'
|
||||
}
|
||||
|
||||
function handleClick(item: MerchantOrderVo) {
|
||||
uni.navigateTo({
|
||||
url: '/pages-store/pages/order/index?id=' + item.id
|
||||
@@ -171,43 +224,18 @@ defineExpose({
|
||||
>
|
||||
<view class="flex-center-sb items-start gap-16rpx">
|
||||
<text class="order-time">{{ formatOrderCardTime(item) }}</text>
|
||||
<text class="order-status shrink-0">
|
||||
<template v-if="
|
||||
item.refundStatus === OrderCancelStatus.APPLIED ||
|
||||
item.refundStatus === OrderCancelStatus.APPROVED ||
|
||||
item.refundStatus === OrderCancelStatus.REJECTED
|
||||
">
|
||||
<template v-if="item.refundStatus === OrderCancelStatus.APPLIED">
|
||||
{{ t('pages-store.order.orderStatus.refund') }}
|
||||
</template>
|
||||
<template v-else-if="item.refundStatus === OrderCancelStatus.APPROVED">
|
||||
{{ t('pages-store.order.orderStatus.agreeRefund') }}
|
||||
</template>
|
||||
<template v-else-if="item.refundStatus === OrderCancelStatus.REJECTED">
|
||||
{{ t('pages-store.order.orderStatus.rejectRefund') }}
|
||||
</template>
|
||||
</template>
|
||||
<template v-else>
|
||||
<template v-if="item.orderStatus === OrderStatus.CANCELLED">{{ t('pages-store.order.orderStatus.cancelled') }}</template>
|
||||
<template v-if="item.orderStatus === OrderStatus.PENDING_PAYMENT">{{ t('pages-store.order.orderStatus.pendingPayment') }}</template>
|
||||
<template v-if="item.orderStatus === OrderStatus.HAS_PENDING_PAYMENT">{{ t('pages-store.order.orderStatus.hasPendingPayment') }}</template>
|
||||
<template v-if="item.orderStatus === OrderStatus.MERCHANT_ACCEPTED">{{ t('pages-store.order.orderStatus.received') }}</template>
|
||||
<template v-if="item.receiveMethod === 1 && item.orderStatus === OrderStatus.DELIVERING">{{ t('pages-store.order.orderStatus.delivering') }}</template>
|
||||
<template v-if="item.orderStatus === OrderStatus.COMPLETED">{{ t('pages-store.order.orderStatus.delivered') }}</template>
|
||||
<template v-if="item.orderStatus === OrderStatus.MERCHANT_REJECTED">
|
||||
<text class="text-#FF6106">{{ t('pages-store.store.orderStatus.rejected') }}</text>
|
||||
</template>
|
||||
</template>
|
||||
<text class="order-status shrink-0" :class="{ 'text-#FF6106': isSameCode(item.orderStatus, OrderStatus.MERCHANT_REJECTED) }">
|
||||
{{ getOrderStatusText(item) }}
|
||||
</text>
|
||||
</view>
|
||||
|
||||
<view class="store-row">
|
||||
<image src="@img/chef/126.png" class="store-icon" mode="aspectFit"></image>
|
||||
<text class="store-name line-clamp-1">{{ item.merchantVo?.merchantName }}</text>
|
||||
<view v-if="item.receiveMethod === 1" class="recv-tag recv-tag--del">
|
||||
<view v-if="isSameCode(item.receiveMethod, 1)" class="recv-tag recv-tag--del">
|
||||
{{ t('pages.order.DEL') }}
|
||||
</view>
|
||||
<view v-if="item.receiveMethod === 2" class="recv-tag recv-tag--pu">
|
||||
<view v-if="isSameCode(item.receiveMethod, 2)" class="recv-tag recv-tag--pu">
|
||||
{{ t('pages.order.PU') }}
|
||||
</view>
|
||||
</view>
|
||||
@@ -237,38 +265,38 @@ defineExpose({
|
||||
</scroll-view>
|
||||
<view class="price-block shrink-0">
|
||||
<text class="price-num">${{ formatOrderPrice(item) }}</text>
|
||||
<text class="price-meta">{{ t('pages.order.totalItemCount', { count: getTotalDishCount(item) }) }}</text>
|
||||
<text class="price-meta">{{ getTotalDishCountText(item) }}</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="action-row" @click.stop>
|
||||
<view class="action-left">
|
||||
<image
|
||||
v-if="item.receiveMethod === 2 && item.orderStatus === OrderStatus.MERCHANT_ACCEPTED"
|
||||
v-if="isSameCode(item.receiveMethod, 2) && isSameCode(item.orderStatus, OrderStatus.MERCHANT_ACCEPTED)"
|
||||
src="@img/chef/127.png"
|
||||
class="action-icon"
|
||||
/>
|
||||
<image
|
||||
v-if="item.orderStatus >= OrderStatus.MERCHANT_ACCEPTED && item.receiveMethod === 1"
|
||||
v-if="!isSameCode(item.orderStatus, OrderStatus.PENDING_PAYMENT) && !isSameCode(item.orderStatus, OrderStatus.CANCELLED) && isSameCode(item.receiveMethod, 1)"
|
||||
src="@img/chef/128.png"
|
||||
class="action-icon"
|
||||
@click="callPhone(item.merchantVo?.phone)"
|
||||
/>
|
||||
</view>
|
||||
<view class="action-btns">
|
||||
<template v-if="item.refundStatus !== OrderCancelStatus.APPLIED && item.refundStatus !== OrderCancelStatus.APPROVED">
|
||||
<template v-if="!isRefundApplied(item) && !isRefundApproved(item)">
|
||||
<view
|
||||
v-if="item.orderStatus !== OrderStatus.CANCELLED && item.orderStatus !== OrderStatus.COMPLETED && item.orderStatus !== OrderStatus.MERCHANT_REJECTED"
|
||||
v-if="!isSameCode(item.orderStatus, OrderStatus.CANCELLED) && !isSameCode(item.orderStatus, OrderStatus.COMPLETED) && !isSameCode(item.orderStatus, OrderStatus.MERCHANT_REJECTED)"
|
||||
class="btn-outline"
|
||||
@click="handleCancelClick(item)"
|
||||
>{{ t('pages.order.cancelOrder') }}</view>
|
||||
<view
|
||||
v-if="item.receiveMethod === 2 && item.orderStatus === OrderStatus.MERCHANT_ACCEPTED"
|
||||
v-if="isSameCode(item.receiveMethod, 2) && isSameCode(item.orderStatus, OrderStatus.MERCHANT_ACCEPTED)"
|
||||
class="btn-primary"
|
||||
@click="handleClick(item)"
|
||||
>{{ t('pages-store.order.writeOff') }}</view>
|
||||
<view
|
||||
v-if="item.orderStatus === OrderStatus.COMPLETED && item?.dishReviewVoList?.length === 0"
|
||||
v-if="isSameCode(item.orderStatus, OrderStatus.COMPLETED) && item?.dishReviewVoList?.length === 0"
|
||||
class="btn-primary"
|
||||
@click="handleClick(item)"
|
||||
>{{ t('common.evaluate') }}</view>
|
||||
|
||||
Reference in New Issue
Block a user