diff --git a/pages/goods-detail/goods-detail.wxml b/pages/goods-detail/goods-detail.wxml
index d2c75e8..19e6ed6 100644
--- a/pages/goods-detail/goods-detail.wxml
+++ b/pages/goods-detail/goods-detail.wxml
@@ -119,7 +119,6 @@
- 联系信息
👤
@@ -134,7 +133,7 @@
-
+
diff --git a/pages/goods-detail/goods-detail.wxss b/pages/goods-detail/goods-detail.wxss
index 0d5519e..74453c9 100644
--- a/pages/goods-detail/goods-detail.wxss
+++ b/pages/goods-detail/goods-detail.wxss
@@ -53,14 +53,14 @@
/* 商品详情内容区域 */
.goods-detail-content {
- padding-top: 44px;
- padding-bottom: 100px;
+ padding-top: 0; /* 移除顶部内边距,消除空白 */
+ padding-bottom: 90px; /* 减小底部内边距 */
}
/* 商品图片轮播 */
.goods-image-slider {
width: 100%;
- height: 280px;
+ height: 240px; /* 适当增大图片高度 */
background: linear-gradient(135deg, #f0f4ff 0%, #d9e4ff 100%);
overflow: hidden;
position: relative;
@@ -89,7 +89,7 @@
display: flex;
align-items: center;
justify-content: center;
- padding: 20px;
+ padding: 10px; /* 减小内边距 */
box-sizing: border-box;
}
@@ -109,9 +109,10 @@
/* 商品基本信息 */
.goods-info {
background-color: #ffffff;
- padding: 20px 16px 16px;
+ padding: 14px 16px 10px; /* 适当增大内边距 */
position: relative;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+ margin-top: 0; /* 移除负外边距,让图片和信息自然衔接 */
}
.goods-info::after {
@@ -126,22 +127,22 @@
.goods-name {
display: block;
- font-size: 20px;
+ font-size: 20px; /* 适当增大字体大小 */
font-weight: 700;
color: #262626;
- margin-bottom: 12px;
- line-height: 1.4;
+ margin-bottom: 10px; /* 适当增大底部间距 */
+ line-height: 1.35; /* 适当增大行高 */
letter-spacing: -0.2px;
}
.goods-price {
display: flex;
align-items: center;
- margin-bottom: 4px;
+ margin-bottom: 6px;
}
.price-symbol {
- font-size: 18px;
+ font-size: 18px; /* 适当增大字体大小 */
color: #666;
margin-right: 4px;
font-weight: 500;
@@ -151,7 +152,7 @@
}
.price-value {
- font-size: 24px;
+ font-size: 26px; /* 适当增大字体大小 */
color: #ff4d4f;
font-weight: 700;
letter-spacing: -0.5px;
@@ -193,15 +194,15 @@
/* 商品详细信息网格 */
.info-grid {
background-color: #ffffff;
- margin: 12px 0;
- padding: 16px;
+ margin: 8px 0;
+ padding: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
}
.info-row {
display: flex;
flex-wrap: wrap;
- margin-bottom: 16px;
+ margin-bottom: 10px;
background: #f0f5ff;
border-radius: 10px;
overflow: hidden;
@@ -216,7 +217,7 @@
flex: 0 0 50%;
display: flex;
flex-direction: column;
- padding: 14px 16px;
+ padding: 12px 14px;
box-sizing: border-box;
position: relative;
}
@@ -232,7 +233,7 @@
}
.info-label-container {
- margin-bottom: 6px;
+ margin-bottom: 4px; /* 减小间距 */
}
.info-label {
@@ -240,11 +241,11 @@
color: #8c8c8c;
font-weight: 500;
text-transform: uppercase;
- letter-spacing: 0.3px;
+ letter-spacing: 0.2px;
}
.info-value-container {
- min-height: 24px;
+ min-height: 20px; /* 减小最小高度 */
}
.info-value {
@@ -256,72 +257,67 @@
/* 联系信息 */
.contact-info {
- margin: 16px;
- padding: 16px;
- border-radius: 12px;
+ margin: 8px 16px; /* 减小外边距 */
+ padding: 12px; /* 减小内边距 */
+ border-radius: 10px; /* 减小圆角 */
background: #ffffff;
border: 1px solid #d6e4ff;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
}
.contact-label {
- display: block;
- font-size: 16px;
- font-weight: 600;
- color: #2f54eb;
- margin-bottom: 16px;
- text-align: center;
+ display: none; /* 隐藏联系信息标题,节省空间 */
}
.contact-content {
display: flex;
flex-direction: column;
- gap: 12px;
+ gap: 6px; /* 减小间距 */
}
.contact-item {
display: flex;
align-items: center;
- padding: 8px 0;
+ padding: 6px 0; /* 减小内边距 */
}
.phone-item {
display: flex;
align-items: center;
justify-content: space-between;
- padding: 8px 0;
+ padding: 6px 0; /* 减小内边距 */
}
.contact-icon {
- font-size: 16px;
- margin-right: 10px;
+ font-size: 14px; /* 减小图标大小 */
+ margin-right: 8px; /* 减小间距 */
flex-shrink: 0;
- width: 20px;
+ width: 18px; /* 减小宽度 */
text-align: center;
color: #2f54eb;
}
.user-icon {
- font-size: 18px;
+ font-size: 16px; /* 减小图标大小 */
}
.phone-icon {
- font-size: 18px;
+ font-size: 16px; /* 减小图标大小 */
}
.contact-label-text {
- font-size: 14px;
+ font-size: 13px; /* 减小字体大小 */
color: #595959;
- margin-right: 8px;
+ margin-right: 6px; /* 减小间距 */
white-space: nowrap;
flex-shrink: 0;
}
.contact-text {
- font-size: 14px;
+ font-size: 13px; /* 减小字体大小 */
color: #262626;
flex-shrink: 0;
- margin-right: 16px;
+ margin-right: 12px; /* 减小间距 */
}
.phone-info {
@@ -363,22 +359,32 @@
/* 底部按钮区域样式 */
.action-buttons {
- display: flex;
- justify-content: space-around;
- align-items: center;
- padding: 16px;
- background-color: #ffffff;
position: fixed;
bottom: 0;
left: 0;
right: 0;
- box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.05);
+ padding: 12px 16px; /* 减小内边距 */
+ background-color: #ffffff;
+ border-top: 1px solid #f0f0f0;
+ box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.06);
+ z-index: 99;
+ display: flex;
+ gap: 8px; /* 减小按钮间距 */
}
.bottom-button {
flex: 1;
- margin: 0 8px;
- font-weight: 500;
+ height: 48px; /* 减小按钮高度 */
+ border-radius: 24px; /* 减小圆角 */
+ font-size: 16px; /* 减小字体大小 */
+ font-weight: 700;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border: none;
+ outline: none;
+ transition: all 0.3s ease;
+ margin: 0;
}
.bottom-button:active {
@@ -392,38 +398,21 @@
box-shadow: 0 4px 12px rgba(47, 84, 235, 0.3);
}
-.call-button:active {
- background-color: #1d39c4;
- transform: scale(0.98);
+.call-button.bottom-button {
+ background-color: #ffffff;
+ color: #2f54eb;
+ border: 2px solid #2f54eb;
+ box-shadow: none;
}
-/* 操作按钮区域 */
-.action-buttons {
- position: fixed;
- bottom: 0;
- left: 0;
- right: 0;
- padding: 16px;
- background-color: #ffffff;
- border-top: 1px solid #f0f0f0;
- box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.06);
- z-index: 99;
- display: flex;
- gap: 12px;
+.call-button.bottom-button:active {
+ background-color: #f0f4ff;
+ transform: scale(0.98);
}
-.bottom-button {
- flex: 1;
- height: 52px;
- border-radius: 26px;
- font-size: 18px;
- font-weight: 700;
- display: flex;
- justify-content: center;
- align-items: center;
- border: none;
- outline: none;
- transition: all 0.3s ease;
+.chat-button.bottom-button:active {
+ background-color: #d6f7e6;
+ transform: scale(0.98);
}
.call-button.bottom-button {
diff --git a/pages/index/index.js b/pages/index/index.js
index 15abb62..8cbfb5e 100644
--- a/pages/index/index.js
+++ b/pages/index/index.js
@@ -447,8 +447,13 @@ Page({
const imageUrls = product.imageUrls || product.images || [];
const formattedImageUrls = Array.isArray(imageUrls) ? imageUrls : [imageUrls];
+ // 确保商品ID的一致性
+ const productId = product.productId || product.id;
+
return {
...product,
+ id: productId, // 统一使用id字段
+ productId: productId, // 同时保留productId字段
category: product.category || '',
fullRegion: product.region || '',
region: product.region ? this.extractProvince(product.region) : '',
@@ -471,12 +476,23 @@ Page({
}
})
+ // 过滤隐藏状态的商品
newGoods = newGoods.filter(item => (item.status || '').toLowerCase() !== 'hidden')
+ // 先对新商品进行内部查重
+ const uniqueNewGoodsMap = new Map();
+ newGoods.forEach(item => {
+ if (!uniqueNewGoodsMap.has(item.id)) {
+ uniqueNewGoodsMap.set(item.id, item);
+ }
+ });
+ newGoods = Array.from(uniqueNewGoodsMap.values());
+
// 更新商品的收藏状态
this.updateGoodsFavoriteStatus(newGoods, isLoadMore)
- // 只在第一页或刷新时在商品列表最前面插入广告
+ // 只在第一页或刷新时在商品列表最前面插入广告,且只插入一次
+ let adSlotsAdded = false;
if ((!isLoadMore || this.data.page === 1) && newGoods.length > 0) {
// 确保广告位在最前面
const adSlots = [
@@ -499,14 +515,17 @@ Page({
];
newGoods = [...adSlots, ...newGoods];
+ adSlotsAdded = true;
}
let updatedGoods = []
if (isLoadMore) {
+ // 加载更多时,去重处理
const existingIds = new Set(this.data.goods.map(item => item.id));
const uniqueNewGoods = newGoods.filter(item => !existingIds.has(item.id));
updatedGoods = [...this.data.goods, ...uniqueNewGoods];
} else {
+ // 首次加载或切换分类时,直接使用去重后的新商品
updatedGoods = newGoods
}
@@ -537,8 +556,13 @@ Page({
const imageUrls = product.imageUrls || product.images || [];
const formattedImageUrls = Array.isArray(imageUrls) ? imageUrls : [imageUrls];
+ // 确保商品ID的一致性
+ const productId = product.productId || product.id;
+
return {
...product,
+ id: productId, // 统一使用id字段
+ productId: productId, // 同时保留productId字段
category: product.category || '',
fullRegion: product.region || '',
region: product.region ? this.extractProvince(product.region) : '',
@@ -563,9 +587,20 @@ Page({
newGoods = newGoods.filter(item => (item.status || '').toLowerCase() !== 'hidden')
- const existingIds = new Set(existingGoods.filter(item => !item.isAd).map(item => item.id));
+ // 对新商品进行内部查重
+ const newGoodsMap = new Map();
+ newGoods.forEach(item => {
+ if (!newGoodsMap.has(item.id)) {
+ newGoodsMap.set(item.id, item);
+ }
+ });
+ newGoods = Array.from(newGoodsMap.values());
+
+ // 移除与现有商品重复的新商品(包括广告和普通商品)
+ const existingIds = new Set(existingGoods.map(item => item.id));
const uniqueNewGoods = newGoods.filter(item => !existingIds.has(item.id));
+ // 合并现有商品和去重后的新商品
const updatedGoods = [...existingGoods, ...uniqueNewGoods]
const filteredGoods = this.applyFilters(updatedGoods, false)
@@ -754,35 +789,50 @@ Page({
processCachedGoods: function(cachedGoods, isLoadMore) {
console.log('processCachedGoods 被调用, isLoadMore:', isLoadMore);
- // 处理商品数据格式
- const processedGoods = cachedGoods.map(product => {
+ // 处理商品数据格式并去重
+ const goodsMap = new Map();
+
+ cachedGoods.forEach(product => {
const imageUrls = product.imageUrls || product.images || [];
const formattedImageUrls = Array.isArray(imageUrls) ? imageUrls : [imageUrls];
- return {
- ...product,
- category: product.category || '',
- fullRegion: product.region || '',
- region: product.region ? this.extractProvince(product.region) : '',
- grossWeight: product.grossWeight || product.weight || '',
- displayGrossWeight: product.grossWeight || product.weight || '',
- status: product.status || 'published',
- createdAt: product.created_at || product.createTime || null,
- reservedCount: product.reservedCount || product.selected || 0,
- reservedCountDisplay: product.reservedCount || product.selected || 0,
- sales: product.sales || product.reservedCount || Math.floor(Math.random() * 1000) + 100,
- product_contact: product.product_contact || '',
- contact_phone: product.contact_phone || '',
- supplyStatus: product.supplyStatus || '',
- sourceType: product.sourceType || '',
- negotiateStatus: '可议价',
- isReserved: false,
- isFavorite: false,
- currentImageIndex: 0,
- imageUrls: formattedImageUrls
+ // 确保商品ID的一致性
+ const productId = product.productId || product.id;
+
+ // 只有当商品ID不存在时才添加,避免重复
+ if (!goodsMap.has(productId)) {
+ const processedProduct = {
+ ...product,
+ id: productId, // 统一使用id字段
+ productId: productId, // 同时保留productId字段
+ category: product.category || '',
+ fullRegion: product.region || '',
+ region: product.region ? this.extractProvince(product.region) : '',
+ grossWeight: product.grossWeight || product.weight || '',
+ displayGrossWeight: product.grossWeight || product.weight || '',
+ status: product.status || 'published',
+ createdAt: product.created_at || product.createTime || null,
+ reservedCount: product.reservedCount || product.selected || 0,
+ reservedCountDisplay: product.reservedCount || product.selected || 0,
+ sales: product.sales || product.reservedCount || Math.floor(Math.random() * 1000) + 100,
+ product_contact: product.product_contact || '',
+ contact_phone: product.contact_phone || '',
+ supplyStatus: product.supplyStatus || '',
+ sourceType: product.sourceType || '',
+ negotiateStatus: '可议价',
+ isReserved: false,
+ isFavorite: false,
+ currentImageIndex: 0,
+ imageUrls: formattedImageUrls
+ };
+
+ goodsMap.set(productId, processedProduct);
}
});
+ // 转换为数组
+ const processedGoods = Array.from(goodsMap.values());
+
// 更新收藏状态
this.updateGoodsFavoriteStatus(processedGoods, false);
@@ -862,6 +912,21 @@ Page({
filtered = filtered.filter(item => item.isAd || (item.region && item.region.includes(selectedRegion)))
}
+ // 去重处理 - 确保返回的商品列表中没有重复的商品
+ const uniqueGoodsMap = new Map();
+ filtered.forEach(item => {
+ // 使用id作为唯一标识,如果id不存在则使用productId
+ const uniqueId = item.id || item.productId;
+ if (uniqueId && !uniqueGoodsMap.has(uniqueId)) {
+ uniqueGoodsMap.set(uniqueId, item);
+ }
+ // 对于广告位,使用它们的唯一id
+ else if (item.isAd && !uniqueGoodsMap.has(item.id)) {
+ uniqueGoodsMap.set(item.id, item);
+ }
+ });
+ filtered = Array.from(uniqueGoodsMap.values());
+
if (shouldSort) {
filtered.sort((a, b) => {
const reservedCountA = a.reservedCount || 0
diff --git a/pages/index/index.wxml b/pages/index/index.wxml
index 76cda77..dd3daae 100644
--- a/pages/index/index.wxml
+++ b/pages/index/index.wxml
@@ -100,10 +100,7 @@
-
+
diff --git a/pages/settlement/index.js b/pages/settlement/index.js
index d38ee26..5aba878 100644
--- a/pages/settlement/index.js
+++ b/pages/settlement/index.js
@@ -801,8 +801,15 @@ Page({
applicationId: appId
});
- // 调用API获取用户完整数据 - 异步执行,不影响跳转
+ // 更新用户类型为seller
const API = require('../../utils/api.js');
+ API.updateUserType('seller').then(() => {
+ console.log('用户类型已更新为seller');
+ }).catch(err => {
+ console.error('更新用户类型失败:', err);
+ });
+
+ // 调用API获取用户完整数据 - 异步执行,不影响跳转
API.getUserInfo().then(userRes => {
console.log('用户完整数据:', userRes.data);
}).catch(err => {
diff --git a/utils/api.js b/utils/api.js
index d3dece3..9225864 100644
--- a/utils/api.js
+++ b/utils/api.js
@@ -3043,6 +3043,7 @@ module.exports = {
delete userInfoCopy.openid; // 不覆盖openid
delete userInfoCopy.type; // 不覆盖type
delete userInfoCopy.timestamp; // 不覆盖timestamp
+ delete userInfoCopy.partnerstatus; // 不覆盖partnerstatus字段,避免清空入驻状态
Object.assign(uploadData, userInfoCopy);
}