【首页】 修复# 价格显示NAN问题

dev1.0
kaeery 2025-03-14 10:30:55 +08:00
parent ed75ec4008
commit d4728b489a
3 changed files with 41 additions and 9 deletions

View File

@ -2,7 +2,7 @@
<view v-if="content.data.length && content.enabled"> <view v-if="content.data.length && content.enabled">
<CategoryCard :title="item.name" v-for="(item, index) in pageData" :key="index"> <CategoryCard :title="item.name" v-for="(item, index) in pageData" :key="index">
<view class="goods"> <view class="goods">
<block v-for="(item1, idx) in item.data" :key="item1.id"> <block v-for="(item1, idx) in converItem(item.data)" :key="item1.id">
<view class="goods-item" @click="goPage(`/pages/goods/index?id=${item1.id}`)"> <view class="goods-item" @click="goPage(`/pages/goods/index?id=${item1.id}`)">
<view class="info-img mr-3"> <view class="info-img mr-3">
<u-image <u-image
@ -28,10 +28,7 @@
<view> <view>
<view style="color: #d41313"> <view style="color: #d41313">
¥ ¥
<span class="price"> <span class="price">{{ servicePrice(item1) }}</span>
{{ numFilter(item1.price)[0] }}
</span>
<span>.{{ numFilter(item1.price)[1] }}</span>
<span class="unit pl-1">{{ item1.unit }}</span> <span class="unit pl-1">{{ item1.unit }}</span>
</view> </view>
<view class="text-sm normal mt-1" style="color: #b0aeae"> <view class="text-sm normal mt-1" style="color: #b0aeae">
@ -59,11 +56,13 @@
<script lang="ts" setup> <script lang="ts" setup>
import CategoryCard from './category-card.vue' import CategoryCard from './category-card.vue'
import { ref, nextTick } from 'vue' import { ref, nextTick, computed } from 'vue'
import { apiGoodsLists } from '@/api/store' import { apiGoodsLists } from '@/api/store'
import cloudIcon from '@/static/images/home/cloud.png' import cloudIcon from '@/static/images/home/cloud.png'
import waveIcon from '@/static/images/home/wave.png' import waveIcon from '@/static/images/home/wave.png'
import { useAppStore } from '@/stores/app' import { useAppStore } from '@/stores/app'
import { PriceEnum } from '@/enums/appEnums'
import { formatString } from '@/utils/util'
const { getImageUrl } = useAppStore() const { getImageUrl } = useAppStore()
@ -81,6 +80,21 @@ interface CardItem {
listBgimage: string listBgimage: string
} }
const pageData = ref<CardItem[]>([]) const pageData = ref<CardItem[]>([])
const converItem = computed(() => data => {
if (!data) return
return data.map(item => {
const { price, minPrice, maxPrice } = item
return {
...item,
goodsPrice: price,
priceRange: `${minPrice}-${maxPrice}`
}
})
})
const servicePrice = computed(() => item => {
const { priceType, goodsPrice, priceRange } = item
return priceType == PriceEnum.CUSTOMER_PRICE ? goodsPrice : formatString(priceRange)
})
const intPageData = async () => { const intPageData = async () => {
if (props.content && props.content.data?.length > 0) { if (props.content && props.content.data?.length > 0) {

View File

@ -33,7 +33,7 @@
{{ item.categoryName }} {{ item.categoryName }}
</view> --> </view> -->
<div class="goods"> <div class="goods">
<block v-for="(item1, idx) in item.data" :key="item1.id"> <block v-for="(item1, idx) in converItem(item.data)" :key="item1.id">
<view <view
class="goods-item" class="goods-item"
@click="goPage(`/pages/goods/index?id=${item1.id}`)" @click="goPage(`/pages/goods/index?id=${item1.id}`)"
@ -60,7 +60,7 @@
<view class="flex justify-between items-center mt-[20rpx]"> <view class="flex justify-between items-center mt-[20rpx]">
<view class="price-wrap text-lg"> <view class="price-wrap text-lg">
¥ ¥
<span class="price">{{ numFilter(item1.price) }}</span> <span class="price">{{ servicePrice(item1) }}</span>
</view> </view>
<view class="text-sm normal" style="color: #b0aeae"> <view class="text-sm normal" style="color: #b0aeae">
<text class="font-bold">{{ item1.orderNum }}</text> <text class="font-bold">{{ item1.orderNum }}</text>
@ -80,6 +80,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, watch, nextTick, onMounted, getCurrentInstance, computed } from 'vue' import { ref, watch, nextTick, onMounted, getCurrentInstance, computed } from 'vue'
import { apiGoodsLists } from '@/api/store' import { apiGoodsLists } from '@/api/store'
import { PriceEnum } from '@/enums/appEnums'
import { formatString } from '@/utils/util'
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
top: number top: number
@ -95,6 +97,22 @@ const props = withDefaults(
const instance = getCurrentInstance() // const instance = getCurrentInstance() //
const emit = defineEmits(['tabChange', 'backRefresh']) const emit = defineEmits(['tabChange', 'backRefresh'])
const topheight = ref(0) const topheight = ref(0)
const converItem = computed(() => data => {
if (!data) return
return data.map(item => {
const { price, minPrice, maxPrice } = item
return {
...item,
goodsPrice: price,
priceRange: `${minPrice}-${maxPrice}`
}
})
})
const servicePrice = computed(() => item => {
const { priceType, goodsPrice, priceRange } = item
return priceType == PriceEnum.CUSTOMER_PRICE ? goodsPrice : formatString(priceRange)
})
const handleChange = async (e: any) => { const handleChange = async (e: any) => {
emit('tabChange', topInstance.value[e] - 150) emit('tabChange', topInstance.value[e] - 150)
} }

View File

@ -20,7 +20,7 @@
lineHeight: navHeight + 'px' lineHeight: navHeight + 'px'
}" }"
> >
{{ titleImageObj[0]?.content?.title ?? '福源建筑生活' }} {{ titleImageObj[0]?.content?.title ?? '思缘生活' }}
</view> </view>
<template v-if="searchList"> <template v-if="searchList">
<w-search <w-search