diff --git a/images/background.png b/images/background.png deleted file mode 100644 index 04267d4..0000000 Binary files a/images/background.png and /dev/null differ diff --git a/pages/compare_price/index.js b/pages/compare_price/index.js index c239416..10c0c6e 100644 --- a/pages/compare_price/index.js +++ b/pages/compare_price/index.js @@ -43,6 +43,22 @@ function processSpecifications(spec) { return specs; } +// 格式化价格,最多显示一位小数 +function formatPrice(price) { + if (price === null || price === undefined) { + return price; + } + + // 转换为数字 + const numPrice = parseFloat(price); + if (isNaN(numPrice)) { + return price; + } + + // 格式化到一位小数 + return numPrice.toFixed(1); +} + Page({ data: { // 页面数据 @@ -111,6 +127,22 @@ Page({ if (Array.isArray(goodsData.price)) { goodsData.price = goodsData.price[0]; } + // 格式化价格,最多显示一位小数 + goodsData.price = formatPrice(goodsData.price); + } + + // 处理原始价格 + if (goodsData.originalPrice) { + // 如果原始价格是字符串且包含逗号,只取第一个价格 + if (typeof goodsData.originalPrice === 'string' && goodsData.originalPrice.includes(',')) { + goodsData.originalPrice = goodsData.originalPrice.split(',')[0].trim(); + } + // 如果原始价格是数组,只取第一个价格 + if (Array.isArray(goodsData.originalPrice)) { + goodsData.originalPrice = goodsData.originalPrice[0]; + } + // 格式化原始价格,最多显示一位小数 + goodsData.originalPrice = formatPrice(goodsData.originalPrice); } // 保存选择的种类、规格和当前商品数据到页面数据 @@ -305,6 +337,22 @@ Page({ if (Array.isArray(item.price)) { item.price = item.price[0]; } + // 格式化价格,最多显示一位小数 + item.price = formatPrice(item.price); + } + + // 处理原始价格 + if (item.originalPrice) { + // 如果原始价格是字符串且包含逗号,只取第一个价格 + if (typeof item.originalPrice === 'string' && item.originalPrice.includes(',')) { + item.originalPrice = item.originalPrice.split(',')[0].trim(); + } + // 如果原始价格是数组,只取第一个价格 + if (Array.isArray(item.originalPrice)) { + item.originalPrice = item.originalPrice[0]; + } + // 格式化原始价格,最多显示一位小数 + item.originalPrice = formatPrice(item.originalPrice); } // 处理规格信息,将多个净重信息分割成数组 @@ -479,73 +527,101 @@ Page({ ); // 清理 mediaItems 中的 URL,去除反引号和空格 - // 同时处理 imageUrls 字段,将其转换为 mediaItems 格式 - // 处理库存显示逻辑 - const cleanedGoods = filteredGoods.map(item => { - // 首先清理 imageUrls 字段(如果存在) - if (item.imageUrls && Array.isArray(item.imageUrls)) { - item.imageUrls = item.imageUrls.map(url => { - return url.trim().replace(/[`]/g, ''); - }); + // 同时处理 imageUrls 字段,将其转换为 mediaItems 格式 + // 处理库存显示逻辑 + const cleanedGoods = filteredGoods.map(item => { + // 首先清理 imageUrls 字段(如果存在) + if (item.imageUrls && Array.isArray(item.imageUrls)) { + item.imageUrls = item.imageUrls.map(url => { + return url.trim().replace(/[`]/g, ''); + }); + + // 使用processMediaUrls函数处理媒体数据 + item.mediaItems = processMediaUrls(item.imageUrls); + + // 确保图片优先显示:将图片类型的媒体项移到数组前面 + if (item.mediaItems && item.mediaItems.length > 1) { + const imageItems = item.mediaItems.filter(media => media.type === 'image'); + const videoItems = item.mediaItems.filter(media => media.type === 'video'); + item.mediaItems = [...imageItems, ...videoItems]; + } + } - // 使用processMediaUrls函数处理媒体数据 - item.mediaItems = processMediaUrls(item.imageUrls); + // 清理 mediaItems 中的 URL + if (item.mediaItems && Array.isArray(item.mediaItems)) { + item.mediaItems = item.mediaItems.map(media => { + if (media.url) { + // 去除 URL 中的反引号和空格 + media.url = media.url.trim().replace(/[`]/g, ''); + // 确保媒体类型正确 + if (!media.type) { + media.type = isVideoUrl(media.url) ? 'video' : 'image'; + } + } + return media; + }); + } - // 确保图片优先显示:将图片类型的媒体项移到数组前面 - if (item.mediaItems && item.mediaItems.length > 1) { - const imageItems = item.mediaItems.filter(media => media.type === 'image'); - const videoItems = item.mediaItems.filter(media => media.type === 'video'); - item.mediaItems = [...imageItems, ...videoItems]; + // 清理价格字段,确保只显示单一价格 + if (item.price) { + // 如果价格是字符串且包含逗号,只取第一个价格 + if (typeof item.price === 'string' && item.price.includes(',')) { + item.price = item.price.split(',')[0].trim(); + } + // 如果价格是数组,只取第一个价格 + if (Array.isArray(item.price)) { + item.price = item.price[0]; + } + // 格式化价格,最多显示一位小数 + item.price = formatPrice(item.price); } - } - - // 清理 mediaItems 中的 URL - if (item.mediaItems && Array.isArray(item.mediaItems)) { - item.mediaItems = item.mediaItems.map(media => { - if (media.url) { - // 去除 URL 中的反引号和空格 - media.url = media.url.trim().replace(/[`]/g, ''); - // 确保媒体类型正确 - if (!media.type) { - media.type = isVideoUrl(media.url) ? 'video' : 'image'; - } + + // 处理原始价格 + if (item.originalPrice) { + // 如果原始价格是字符串且包含逗号,只取第一个价格 + if (typeof item.originalPrice === 'string' && item.originalPrice.includes(',')) { + item.originalPrice = item.originalPrice.split(',')[0].trim(); } - return media; - }); - } - - // 处理规格信息,将多个净重信息分割成数组 - item.processedSpecs = []; - if (item.specification) { - item.processedSpecs = processSpecifications(item.specification); - } else if (item.weightSpec) { - item.processedSpecs = processSpecifications(item.weightSpec); - } else if (item.grossWeight) { - item.processedSpecs = processSpecifications(item.grossWeight); - } - - // 处理库存显示逻辑(参考首页的处理方式) - const quantity = item.quantity || item.minOrder || item.stock || item.inventory || item.availableStock || item.totalAvailable; - const totalStock = quantity; - - let displayStock; - if (totalStock >= 10000) { - // 库存>=10000时显示"库存充足" - displayStock = '充足'; - } else if (totalStock === 0) { - // 库存=0时显示"暂无" - displayStock = '暂无'; - } else { - // 其他情况显示具体数字 - displayStock = totalStock; - } - - // 更新商品的库存显示 - item.totalStock = displayStock; - item.originalTotalStock = totalStock; - - return item; - }); + // 如果原始价格是数组,只取第一个价格 + if (Array.isArray(item.originalPrice)) { + item.originalPrice = item.originalPrice[0]; + } + // 格式化原始价格,最多显示一位小数 + item.originalPrice = formatPrice(item.originalPrice); + } + + // 处理规格信息,将多个净重信息分割成数组 + item.processedSpecs = []; + if (item.specification) { + item.processedSpecs = processSpecifications(item.specification); + } else if (item.weightSpec) { + item.processedSpecs = processSpecifications(item.weightSpec); + } else if (item.grossWeight) { + item.processedSpecs = processSpecifications(item.grossWeight); + } + + // 处理库存显示逻辑(参考首页的处理方式) + const quantity = item.quantity || item.minOrder || item.stock || item.inventory || item.availableStock || item.totalAvailable; + const totalStock = quantity; + + let displayStock; + if (totalStock >= 10000) { + // 库存>=10000时显示"库存充足" + displayStock = '充足'; + } else if (totalStock === 0) { + // 库存=0时显示"暂无" + displayStock = '暂无'; + } else { + // 其他情况显示具体数字 + displayStock = totalStock; + } + + // 更新商品的库存显示 + item.totalStock = displayStock; + item.originalTotalStock = totalStock; + + return item; + }); console.log('过滤后的商品列表:', cleanedGoods); // 检查商品数据结构 diff --git a/pages/goods-detail/goods-detail.js b/pages/goods-detail/goods-detail.js index fad1ac8..b3a7724 100644 --- a/pages/goods-detail/goods-detail.js +++ b/pages/goods-detail/goods-detail.js @@ -338,6 +338,22 @@ function formatDateTime(dateString) { return dateString; } +// 格式化价格,解决浮点数精度问题 +function formatPrice(price) { + if (price === null || price === undefined) { + return price; + } + + // 转换为数字 + const numPrice = parseFloat(price); + if (isNaN(numPrice)) { + return price; + } + + // 格式化到一位小数 + return parseFloat(numPrice.toFixed(1)); +} + // 格式化北京时间的函数 function formatBeijingTime(dateString) { if (!dateString) return '未知时间'; @@ -793,9 +809,9 @@ Page({ } const priceRange = middlePrice < 20 ? 1 : 5; - const minPrice = middlePrice - priceRange; - const maxPrice = middlePrice + priceRange; - const defaultPrice = parseFloat(middlePrice.toFixed(2)); + const minPrice = formatPrice(middlePrice - priceRange); + const maxPrice = formatPrice(middlePrice + priceRange); + const defaultPrice = formatPrice(middlePrice); const priceThreshold = middlePrice < 20 ? 0.1 : 2; console.log('计算后的价格数据:', { @@ -855,9 +871,9 @@ Page({ } const priceRange = middlePrice < 20 ? 1 : 5; - const minPrice = middlePrice - priceRange; - const maxPrice = middlePrice + priceRange; - const currentPrice = parseFloat(middlePrice.toFixed(2)); + const minPrice = formatPrice(middlePrice - priceRange); + const maxPrice = formatPrice(middlePrice + priceRange); + const currentPrice = formatPrice(middlePrice); const priceThreshold = middlePrice < 20 ? 0.3 : 2; console.log('选择规格 - 价格数据:', { @@ -926,7 +942,7 @@ Page({ if (bargainPrice > minPrice) { const step = bargainPrice < 20 ? 0.1 : 1; - const newPrice = parseFloat((bargainPrice - step).toFixed(2)); + const newPrice = formatPrice(bargainPrice - step); console.log('计算新价格:', newPrice); this.updatePrice(newPrice); } @@ -943,7 +959,7 @@ Page({ if (bargainPrice < maxPrice) { const step = bargainPrice < 20 ? 0.1 : 1; - const newPrice = parseFloat((bargainPrice + step).toFixed(2)); + const newPrice = formatPrice(bargainPrice + step); console.log('计算新价格:', newPrice); this.updatePrice(newPrice); } @@ -954,7 +970,7 @@ Page({ const { minPrice, maxPrice } = this.data; const clampedPrice = Math.max(minPrice, Math.min(maxPrice, newPrice)); const progress = ((clampedPrice - minPrice) / (maxPrice - minPrice)) * 100; - const finalPrice = parseFloat(clampedPrice.toFixed(2)); + const finalPrice = formatPrice(clampedPrice); console.log('更新价格:', { inputPrice: newPrice, @@ -1018,8 +1034,10 @@ Page({ if (!isNaN(price)) { const clampedPrice = Math.max(minPrice, Math.min(maxPrice, price)); + const formattedPrice = formatPrice(clampedPrice); console.log('计算后的价格:', clampedPrice); - this.updatePrice(clampedPrice); + console.log('格式化后的价格:', formattedPrice); + this.updatePrice(formattedPrice); } this.setData({ @@ -1056,11 +1074,7 @@ Page({ const priceRange = maxPrice - minPrice; let price = minPrice + (progress / 100) * priceRange; - if (bargainPrice < 20) { - price = Math.round(price * 10) / 10; - } else { - price = Math.round(price); - } + price = formatPrice(price); const clampedPrice = Math.max(minPrice, Math.min(maxPrice, price));