|
|
@ -59,6 +59,64 @@ function formatPrice(price) { |
|
|
return numPrice.toFixed(1); |
|
|
return numPrice.toFixed(1); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 计算单位价格
|
|
|
|
|
|
function calculateUnitPrice(price, spec) { |
|
|
|
|
|
if (!price || !spec) { |
|
|
|
|
|
return null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 转换价格为数字
|
|
|
|
|
|
const numPrice = parseFloat(price); |
|
|
|
|
|
if (isNaN(numPrice)) { |
|
|
|
|
|
return null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 检查是否需要计算单位价格(价格低于10元)
|
|
|
|
|
|
if (numPrice >= 10) { |
|
|
|
|
|
return null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 提取重量范围
|
|
|
|
|
|
const weightMatch = spec.match(/(\d+)-(\d+)/); |
|
|
|
|
|
if (!weightMatch) { |
|
|
|
|
|
return null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const minWeight = parseFloat(weightMatch[1]); |
|
|
|
|
|
const maxWeight = parseFloat(weightMatch[2]); |
|
|
|
|
|
if (isNaN(minWeight) || isNaN(maxWeight)) { |
|
|
|
|
|
return null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 计算平均重量
|
|
|
|
|
|
const avgWeight = (minWeight + maxWeight) / 2; |
|
|
|
|
|
|
|
|
|
|
|
// 检查是否是毛重
|
|
|
|
|
|
const isGrossWeight = spec.includes('毛重'); |
|
|
|
|
|
|
|
|
|
|
|
// 计算单位价格
|
|
|
|
|
|
let unitPrice; |
|
|
|
|
|
if (isGrossWeight) { |
|
|
|
|
|
unitPrice = (avgWeight - 5) * numPrice; |
|
|
|
|
|
} else { |
|
|
|
|
|
unitPrice = avgWeight * numPrice; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return unitPrice.toFixed(1); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 获取商品状态信息
|
|
|
|
|
|
function getStatusInfo(status) { |
|
|
|
|
|
switch (status) { |
|
|
|
|
|
case 'published': |
|
|
|
|
|
return { text: '在售', color: '#10B981' }; |
|
|
|
|
|
case 'sold_out': |
|
|
|
|
|
return { text: '售罄', color: '#666666' }; |
|
|
|
|
|
default: |
|
|
|
|
|
return { text: '未知', color: '#666666' }; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
Page({ |
|
|
Page({ |
|
|
data: { |
|
|
data: { |
|
|
// 页面数据
|
|
|
// 页面数据
|
|
|
@ -142,6 +200,9 @@ Page({ |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 计算当前商品的单位价格
|
|
|
|
|
|
goodsData.unitPrice = calculateUnitPrice(goodsData.price, specWeight || goodsData.specification); |
|
|
|
|
|
|
|
|
// 保存选择的种类、规格和当前商品数据到页面数据
|
|
|
// 保存选择的种类、规格和当前商品数据到页面数据
|
|
|
this.setData({ |
|
|
this.setData({ |
|
|
selectedCategory: selectedCategory, |
|
|
selectedCategory: selectedCategory, |
|
|
@ -695,10 +756,30 @@ Page({ |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 计算单位价格
|
|
|
|
|
|
item.unitPrice = calculateUnitPrice(item.price, item.currentSpec || item.specification || (item.processedSpecs && item.processedSpecs.length > 0 ? item.processedSpecs.join(' | ') : '')); |
|
|
|
|
|
|
|
|
// 计算价格涨幅
|
|
|
// 计算价格涨幅
|
|
|
if (goodsData.price) { |
|
|
if (goodsData.price) { |
|
|
const currentPrice = parseFloat(goodsData.price); |
|
|
// 获取当前商品的价格(使用单位价格如果低于10元)
|
|
|
const itemPrice = parseFloat(item.price); |
|
|
let currentPrice = parseFloat(goodsData.price); |
|
|
|
|
|
if (goodsData.unitPrice) { |
|
|
|
|
|
currentPrice = parseFloat(goodsData.unitPrice); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 获取对比商品的价格(根据规则使用合适的价格)
|
|
|
|
|
|
let itemPrice = parseFloat(item.price); |
|
|
|
|
|
if (currentPrice >= 10 && item.unitPrice) { |
|
|
|
|
|
// 如果当前商品价格高于10元,对比商品使用单位价格
|
|
|
|
|
|
itemPrice = parseFloat(item.unitPrice); |
|
|
|
|
|
} else if (currentPrice < 10 && itemPrice < 10) { |
|
|
|
|
|
// 如果两者都低于10元,使用原始价格
|
|
|
|
|
|
itemPrice = parseFloat(item.price); |
|
|
|
|
|
} else if (currentPrice < 10 && itemPrice >= 10) { |
|
|
|
|
|
// 如果当前商品低于10元,对比商品高于10元,当前商品使用单位价格
|
|
|
|
|
|
currentPrice = parseFloat(goodsData.unitPrice || goodsData.price); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if (!isNaN(currentPrice) && !isNaN(itemPrice)) { |
|
|
if (!isNaN(currentPrice) && !isNaN(itemPrice)) { |
|
|
const priceDiff = itemPrice - currentPrice; |
|
|
const priceDiff = itemPrice - currentPrice; |
|
|
const pricePercent = ((priceDiff / currentPrice) * 100).toFixed(1); |
|
|
const pricePercent = ((priceDiff / currentPrice) * 100).toFixed(1); |
|
|
@ -823,6 +904,9 @@ Page({ |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 计算当前商品的单位价格
|
|
|
|
|
|
currentGoods.unitPrice = calculateUnitPrice(currentGoods.price, specWeight || currentGoods.specification); |
|
|
|
|
|
|
|
|
// 更新currentGoods
|
|
|
// 更新currentGoods
|
|
|
this.setData({ |
|
|
this.setData({ |
|
|
currentGoods: currentGoods |
|
|
currentGoods: currentGoods |
|
|
|