Browse Source

修改售空未售空状态下的数量展示

main
Default User 3 days ago
parent
commit
4709720d19
  1. 1218
      pages/freight-calculator/index.js
  2. 166
      pages/freight-calculator/index.wxml
  3. 25
      pages/freight-calculator/index.wxss
  4. 50
      pages/goods-detail/goods-detail.js
  5. 2
      pages/goods-detail/goods-detail.wxml

1218
pages/freight-calculator/index.js

File diff suppressed because it is too large

166
pages/freight-calculator/index.wxml

@ -84,77 +84,74 @@
</view>
</view>
<!-- 物流车辆信息 -->
<!-- 运输参数 -->
<view class="section">
<text class="section-title">物流车辆信息</text>
<view class="vehicle-form">
<text class="section-title">运输参数</text>
<view class="address-form">
<!-- 运输模式 -->
<view class="form-item">
<text class="label">车辆类型</text>
<picker bindchange="bindVehicleTypeChange" range="{{vehicleTypes}}" value="{{selectedVehicleTypeIndex}}">
<text class="label">运输模式</text>
<picker bindchange="bindTransportModeChange" value="{{transportModeIndex}}" range="{{transportModes}}">
<view class="picker">
{{vehicleTypes[selectedVehicleTypeIndex]}}
{{transportModes[transportModeIndex]}}
</view>
</picker>
</view>
<!-- 鸡蛋重量 -->
<view class="form-item">
<text class="label">载重能力 (吨)</text>
<input class="input" bindinput="bindVehicleInfoInput" data-key="capacity" value="{{vehicleInfo.capacity}}" placeholder="请输入载重能力" type="number" />
</view>
<view class="form-item">
<text class="label">车辆编号</text>
<input class="input" bindinput="bindVehicleInfoInput" data-key="number" value="{{vehicleInfo.number}}" placeholder="请输入车辆编号" />
<text class="label">鸡蛋重量(公斤)</text>
<input class="input" type="number" name="weight" placeholder="请输入鸡蛋重量" value="{{weight}}" bindinput="bindWeightInput" />
</view>
<!-- 货物体积 -->
<view class="form-item">
<text class="label">司机姓名</text>
<input class="input" bindinput="bindVehicleInfoInput" data-key="driver" value="{{vehicleInfo.driver}}" placeholder="请输入司机姓名" />
<text class="label">货物体积(立方米)</text>
<input class="input" type="number" name="volume" placeholder="请输入货物体积" value="{{volume}}" bindinput="bindVolumeInput" />
</view>
<!-- 包装类型 -->
<view class="form-item">
<text class="label">联系电话</text>
<input class="input" bindinput="bindVehicleInfoInput" data-key="phone" value="{{vehicleInfo.phone}}" placeholder="请输入联系电话" type="number" />
</view>
<text class="label">包装类型</text>
<picker bindchange="bindPackagingChange" value="{{packagingIndex}}" range="{{packagingTypes}}">
<view class="picker">
{{packagingTypes[packagingIndex]}}
</view>
</picker>
</view>
<!-- 物流人员信息 -->
<view class="section">
<text class="section-title">物流人员信息</text>
<view class="logistics-intro">
<text class="intro-text">我们拥有专业的物流团队,为您提供高效、安全的运输服务。以下是我们的物流专家,他们具有丰富的行业经验和专业知识,能够为您的货物运输提供专业的解决方案。</text>
</view>
<view class="logistics-personnel">
<view class="personnel-card" wx:for="{{logisticsPersonnel}}" wx:key="item.id">
<view class="personnel-header-section">
<view class="personnel-avatar">
<text class="avatar-text">{{item.name.charAt(0)}}</text>
</view>
<view class="personnel-header-info">
<view class="personnel-name">{{item.name}}</view>
<view class="personnel-position">{{item.position}}</view>
<view class="personnel-tags">
<view class="personnel-tag">{{item.experience}}年物流经验</view>
<view class="personnel-tag">认证物流师</view>
<view class="personnel-tag">专业配送</view>
</view>
</view>
</view>
<view class="personnel-description">
<view class="description-text">
{{item.description || '拥有丰富的物流行业经验,熟悉各种货物的运输要求和流程,能够为客户提供专业的物流解决方案和优质的服务。'}}
</view>
<!-- 车型 -->
<view class="form-item">
<text class="label">车型</text>
<picker bindchange="bindVehicleTypeChange" value="{{vehicleTypeIndex}}" range="{{vehicleTypes}}">
<view class="picker">
{{vehicleTypes[vehicleTypeIndex]}}
</view>
<view class="personnel-contact-section">
<view class="personnel-contact-info">
<view class="contact-label">联系电话:</view>
<view class="contact-value">{{item.phone}}</view>
</picker>
</view>
<button class="contact-btn" bindtap="makePhoneCall" data-phone="{{item.phone}}">
<text>立即联系</text>
</button>
<!-- 车长 -->
<view class="form-item">
<text class="label">车长</text>
<picker bindchange="bindTruckLengthChange" value="{{truckLengthIndex}}" range="{{truckLengths}}">
<view class="picker">
{{truckLengths[truckLengthIndex]}}
</view>
</picker>
</view>
<view wx:if="{{logisticsPersonnel.length === 0}}" class="empty-state">
<text>暂无物流人员信息</text>
<!-- 车型详情提示 -->
<view class="form-item">
<text class="label">车型载重/体积参考</text>
<text class="vehicle-info">{{vehicleInfo}}</text>
</view>
</view>
</view>
@ -162,7 +159,7 @@
<!-- 计算按钮 -->
<view class="calculate-section">
<button class="calculate-btn" bindtap="calculateFreight" loading="{{loading}}">
<button class="calculate-btn" bindtap="calculate" loading="{{loading}}">
<text>计算运费</text>
</button>
<button class="clear-btn" bindtap="clearInput">
@ -171,21 +168,33 @@
</view>
<!-- 计算结果 -->
<view class="result-section" wx:if="{{calculationResult}}">
<view class="result-section" wx:if="{{calculationResult || showResult}}">
<text class="section-title">计算结果</text>
<view class="result-card">
<view class="result-item">
<text class="result-label">预估运费</text>
<text class="result-value freight">{{calculationResult.freight}} 元</text>
<text class="result-value freight">{{feeRange}}</text>
</view>
<view class="result-item">
<text class="result-label">运输距离</text>
<text class="result-value">{{calculationResult.distance}} km</text>
<text class="result-value">{{calculationResult ? calculationResult.distance + ' km' : ''}}</text>
</view>
<view class="result-item">
<text class="result-label">预计时效</text>
<text class="result-value">{{calculationResult.deliveryTime}} 天</text>
<text class="result-value">{{calculationResult ? calculationResult.deliveryTime + ' 天' : ''}}</text>
</view>
<view class="result-item" wx:if="{{showResult}}">
<text class="result-label">市场参考价</text>
<text class="result-value">{{marketPrice}}</text>
</view>
<view class="result-item" wx:if="{{showResult}}">
<text class="result-label">合规性检查</text>
<text class="result-value" style="color: {{isCompliant ? '#07C160' : '#F56C6C'}}">{{complianceStatus}}</text>
</view>
</view>
<view class="detail-section" wx:if="{{showResult && detailText}}">
<text class="section-title">费用明细</text>
<text class="detail-text">{{detailText}}</text>
</view>
</view>
@ -222,6 +231,49 @@
<text>暂无历史记录</text>
</view>
</view>
<!-- 物流人员信息 -->
<view class="section">
<text class="section-title">物流人员信息</text>
<view class="logistics-intro">
<text class="intro-text">我们拥有专业的物流团队,为您提供高效、安全的运输服务。以下是我们的物流专家,他们具有丰富的行业经验和专业知识,能够为您的货物运输提供专业的解决方案。</text>
</view>
<view class="logistics-personnel">
<view class="personnel-card" wx:for="{{logisticsPersonnel}}" wx:key="item.id">
<view class="personnel-header-section">
<view class="personnel-avatar">
<text class="avatar-text">{{item.name.charAt(0)}}</text>
</view>
<view class="personnel-header-info">
<view class="personnel-name">{{item.name}}</view>
<view class="personnel-position">{{item.position}}</view>
<view class="personnel-tags">
<view class="personnel-tag">{{item.experience}}年物流经验</view>
<view class="personnel-tag">认证物流师</view>
<view class="personnel-tag">专业配送</view>
</view>
</view>
</view>
<view class="personnel-description">
<view class="description-text">
{{item.description || '拥有丰富的物流行业经验,熟悉各种货物的运输要求和流程,能够为客户提供专业的物流解决方案和优质的服务。'}}
</view>
</view>
<view class="personnel-contact-section">
<view class="personnel-contact-info">
<view class="contact-label">联系电话:</view>
<view class="contact-value">{{item.phone}}</view>
</view>
<button class="contact-btn" bindtap="makePhoneCall" data-phone="{{item.phone}}">
<text>立即联系</text>
</button>
</view>
</view>
<view wx:if="{{logisticsPersonnel.length === 0}}" class="empty-state">
<text>暂无物流人员信息</text>
</view>
</view>
</view>
</view>
<!-- 地址选择器 -->

25
pages/freight-calculator/index.wxss

@ -642,6 +642,31 @@
color: #ff4d4f;
}
/* 车型信息样式 */
.vehicle-info {
font-size: 20rpx;
color: #999;
margin-top: 4rpx;
line-height: 1.4;
}
/* 详细费用明细样式 */
.detail-section {
margin-top: 16rpx;
background-color: #f8f9fa;
border-radius: 8rpx;
padding: 16rpx;
border-left: 4rpx solid #e3f2fd;
}
.detail-text {
font-size: 20rpx;
color: #666;
line-height: 1.5;
white-space: pre-wrap;
word-break: break-all;
}
/* 动画效果 */
@keyframes fadeInUp {
from {

50
pages/goods-detail/goods-detail.js

@ -481,10 +481,10 @@ function processWeightAndQuantityData(weightSpecString, quantityString, specStri
}
}
display = `${weightSpecDisplay}————已售${soldQuantity}`;
} else if (weightSpecDisplay.includes('剩余售空件')) {
// 替换已有的"剩余售空件"为"已售多少件"
const soldQuantity = weightSpecDisplay.match(/剩余售空(\d+)件/)?.[1] || 0;
display = `${weightSpecDisplay.replace('剩余售空件', `已售${soldQuantity}`)}`;
} else if (weightSpecDisplay.includes('剩余售空件') || weightSpecDisplay.includes('已售售空件')) {
// 替换已有的"剩余售空件"或"已售售空件"为"已售多少件"
const soldQuantity = weightSpecDisplay.match(/(\d+)件/)?.[1] || 0;
display = weightSpecDisplay.replace(/(剩余售空|已售售空)件/, `已售${soldQuantity}`);
} else {
if (price) {
display = `${weightSpecDisplay}${quantity}件】¥${price}`;
@ -494,9 +494,9 @@ function processWeightAndQuantityData(weightSpecString, quantityString, specStri
}
} else if (weightSpecDisplay) {
// 处理只包含净重信息的情况
if (weightSpecDisplay.includes('剩余售空件')) {
const soldQuantity = weightSpecDisplay.match(/剩余售空(\d+)件/)?.[1] || 0;
display = weightSpecDisplay.replace('剩余售空件', `已售${soldQuantity}`);
if (weightSpecDisplay.includes('剩余售空件') || weightSpecDisplay.includes('已售售空件')) {
const soldQuantity = weightSpecDisplay.match(/(\d+)件/)?.[1] || 0;
display = weightSpecDisplay.replace(/(剩余售空|已售售空)件/, `已售${soldQuantity}`);
} else if (weightSpecDisplay.includes('售空')) {
// 尝试从 weightSpecDisplay 中提取库存数量
const quantityMatch = weightSpecDisplay.match(/(\d+)/);
@ -525,13 +525,13 @@ function processWeightAndQuantityData(weightSpecString, quantityString, specStri
// 处理 quantity 字段,确保售空时也有正确的数量值
let processedQuantity = quantity;
if (quantity === '售空' || weightSpecDisplay.includes('售空')) {
if (quantity === '售空' || weightSpecDisplay.includes('售空') || weightSpecDisplay.includes('已售售空件') || weightSpecDisplay.includes('剩余售空件')) {
// 尝试从 weightSpecDisplay 中提取数字
const quantityMatch = weightSpecDisplay.match(/(\d+)/);
if (quantityMatch) {
processedQuantity = quantityMatch[1];
} else if (quantity !== '售空') {
// 如果 quantity 不是 '售空',则保持原值
} else if (quantity !== '售空' && quantity !== '') {
// 如果 quantity 不是 '售空' 且不为空,则保持原值
processedQuantity = quantity;
} else {
// 尝试从 display 字段中提取数字
@ -2171,6 +2171,7 @@ Page({
const isSoldOut = product.status === 'sold_out' ||
product.status === 'sold' ||
product.status === 'out_of_stock' ||
product.status === '售空' ||
(product.supplyStatus && product.supplyStatus.includes('售空'));
console.log('===== 售空判断详细分析 =====');
@ -2190,6 +2191,7 @@ Page({
console.log('当前isSoldOut值:', isSoldOut);
console.log('即将执行的条件分支...');
// 处理售空状态和非售空状态
if (isSoldOut) {
// 售空状态的商品,显示规格信息和价格
if (weightSpecString) {
@ -2207,23 +2209,35 @@ Page({
} else if (priceString) {
priceArray = [String(priceString)];
}
// 处理数量数组
let quantityArray = [];
if (quantityString && typeof quantityString === 'string') {
quantityArray = quantityString.split(/[,,、]/).map(item => item.trim()).filter(item => item);
} else if (quantityString) {
quantityArray = [String(quantityString)];
}
weightQuantityData = weightSpecArray.map((spec, index) => {
const price = priceArray[index] || '';
// 使用实际的quantity字段,而不是从spec中提取
const soldQuantity = quantityArray[index] || product.quantity || 0;
return {
weightSpec: spec.includes('毛重') ? spec : `毛重${spec}`,
quantity: '售空',
quantity: soldQuantity,
price: price,
display: price ?
`${spec.includes('毛重') ? spec : `毛重${spec}`}【售空】¥${price}` :
`${spec.includes('毛重') ? spec : `毛重${spec}`}【售空】`
`${spec.includes('毛重') ? spec : `毛重${spec}`}【已售${soldQuantity}件】¥${price}` :
`${spec.includes('毛重') ? spec : `毛重${spec}`}【已售${soldQuantity}件】`,
isSoldOut: true
};
});
} else {
// 如果没有规格信息,则显示默认的售空信息
const soldQuantity = product.quantity || 0;
weightQuantityData = [{
weightSpec: '规格信息',
quantity: '售空',
display: '规格信息【售空】'
quantity: soldQuantity,
display: `规格信息【已售${soldQuantity}件】`,
isSoldOut: true
}];
}
console.log('✓ 售空分支执行: 显示规格信息和价格');
@ -2246,6 +2260,12 @@ Page({
}
weightQuantityData = processWeightAndQuantityData(weightSpecString, quantityString, '', priceString, specStatusString, specPriceChanges);
// 为非售空状态的商品添加isSoldOut标志
weightQuantityData = weightQuantityData.map(item => ({
...item,
isSoldOut: false
}));
console.log('× 非售空分支结果:', weightQuantityData);
}

2
pages/goods-detail/goods-detail.wxml

@ -131,7 +131,7 @@
<!-- 已下架标识 -->
<text wx:if="{{item.isOffShelf}}" class="off-shelf-tag">已下架</text>
<!-- 库存信息(未下架且有件数且未售空时显示) -->
<text wx:elif="{{item.quantity && item.quantity !== '售空' && !item.weightSpec.includes('售空') && !item.display.includes('售空')}}" class="stock-info">剩余{{item.quantity}}件</text>
<text wx:elif="{{!item.isSoldOut && item.quantity && item.quantity !== '售空' && !item.weightSpec.includes('售空') && !item.display.includes('售空') && !item.weightSpec.includes('已售售空件') && !item.display.includes('已售售空件')}}" class="stock-info">剩余{{item.quantity}}件</text>
<!-- 售空标识(未下架且售空时显示) -->
<text wx:else class="stock-info">已售{{item.quantity || 0}}件</text>
</view>

Loading…
Cancel
Save