|
|
@ -338,6 +338,28 @@ function formatDateTime(dateString) { |
|
|
return dateString; |
|
|
return dateString; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 格式化北京时间的函数
|
|
|
|
|
|
function formatBeijingTime(dateString) { |
|
|
|
|
|
if (!dateString) return '未知时间'; |
|
|
|
|
|
|
|
|
|
|
|
// 尝试解析日期字符串
|
|
|
|
|
|
const date = new Date(dateString); |
|
|
|
|
|
|
|
|
|
|
|
// 检查是否是有效的日期对象
|
|
|
|
|
|
if (isNaN(date.getTime())) { |
|
|
|
|
|
return dateString; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 转换为北京时间
|
|
|
|
|
|
const year = date.getFullYear(); |
|
|
|
|
|
const month = (date.getMonth() + 1).toString().padStart(2, '0'); |
|
|
|
|
|
const day = date.getDate().toString().padStart(2, '0'); |
|
|
|
|
|
const hours = date.getHours().toString().padStart(2, '0'); |
|
|
|
|
|
const minutes = date.getMinutes().toString().padStart(2, '0'); |
|
|
|
|
|
|
|
|
|
|
|
return `${year}-${month}-${day} ${hours}:${minutes}`; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// 处理净重、件数、规格和价格数据,将逗号分隔的字符串转换为一一对应的数组
|
|
|
// 处理净重、件数、规格和价格数据,将逗号分隔的字符串转换为一一对应的数组
|
|
|
function processWeightAndQuantityData(weightSpecString, quantityString, specString, priceString, specStatusString, specPriceChanges = {}) { |
|
|
function processWeightAndQuantityData(weightSpecString, quantityString, specString, priceString, specStatusString, specPriceChanges = {}) { |
|
|
console.log('===== 处理净重、件数、规格和价格数据 ====='); |
|
|
console.log('===== 处理净重、件数、规格和价格数据 ====='); |
|
|
@ -1358,7 +1380,12 @@ Page({ |
|
|
// 当前用户信息
|
|
|
// 当前用户信息
|
|
|
currentUserPhone: '', // 当前用户的手机号,用于判断评论是否属于当前用户
|
|
|
currentUserPhone: '', // 当前用户的手机号,用于判断评论是否属于当前用户
|
|
|
// 导航锁状态
|
|
|
// 导航锁状态
|
|
|
navigating: false // 是否正在导航中,防止多次点击导致多次跳转
|
|
|
navigating: false, // 是否正在导航中,防止多次点击导致多次跳转
|
|
|
|
|
|
// 内部信息相关数据
|
|
|
|
|
|
isInternalUser: false, // 是否为内部人员
|
|
|
|
|
|
viewerPhone: '', // 浏览人电话号码
|
|
|
|
|
|
followUpRecords: [], // 跟进记录
|
|
|
|
|
|
viewerInfo: [] // 浏览用户信息列表
|
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
// 导航锁机制,防止多次点击导致多次跳转
|
|
|
// 导航锁机制,防止多次点击导致多次跳转
|
|
|
@ -1449,11 +1476,69 @@ Page({ |
|
|
currentUserPhone = wx.getStorageSync('phoneNumber'); |
|
|
currentUserPhone = wx.getStorageSync('phoneNumber'); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 设置当前用户的电话号码
|
|
|
// 4. 检查是否为内部人员(与 index 页面逻辑一致)
|
|
|
this.setData({ |
|
|
if (currentUserPhone) { |
|
|
currentUserPhone: currentUserPhone |
|
|
const appInstance = getApp(); |
|
|
}); |
|
|
appInstance.getPersonnelInfo(currentUserPhone).then(res => { |
|
|
console.log('当前用户手机号已设置:', currentUserPhone); |
|
|
const isInternalUser = res.success && res.data && res.data.length > 0; |
|
|
|
|
|
|
|
|
|
|
|
// 5. 模拟浏览人电话号码和跟进记录(实际项目中应该从API获取)
|
|
|
|
|
|
const viewerPhone = '13800138000'; |
|
|
|
|
|
const followUpRecords = [ |
|
|
|
|
|
{ time: '2024-01-15 10:30', content: '客户询问商品价格和库存情况' }, |
|
|
|
|
|
{ time: '2024-01-14 14:20', content: '客户表示对商品感兴趣,需要进一步了解' }, |
|
|
|
|
|
{ time: '2024-01-13 09:15', content: '首次联系客户,介绍商品信息' } |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
// 设置当前用户的电话号码和内部人员状态
|
|
|
|
|
|
this.setData({ |
|
|
|
|
|
currentUserPhone: currentUserPhone, |
|
|
|
|
|
isInternalUser: isInternalUser, |
|
|
|
|
|
viewerPhone: viewerPhone, |
|
|
|
|
|
followUpRecords: followUpRecords |
|
|
|
|
|
}); |
|
|
|
|
|
console.log('当前用户手机号已设置:', currentUserPhone); |
|
|
|
|
|
console.log('是否为内部人员:', isInternalUser); |
|
|
|
|
|
}).catch(err => { |
|
|
|
|
|
console.error('检查personnel表失败:', err); |
|
|
|
|
|
|
|
|
|
|
|
// 5. 模拟浏览人电话号码和跟进记录(实际项目中应该从API获取)
|
|
|
|
|
|
const viewerPhone = '13800138000'; |
|
|
|
|
|
const followUpRecords = [ |
|
|
|
|
|
{ time: '2024-01-15 10:30', content: '客户询问商品价格和库存情况' }, |
|
|
|
|
|
{ time: '2024-01-14 14:20', content: '客户表示对商品感兴趣,需要进一步了解' }, |
|
|
|
|
|
{ time: '2024-01-13 09:15', content: '首次联系客户,介绍商品信息' } |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
// 设置当前用户的电话号码和内部人员状态
|
|
|
|
|
|
this.setData({ |
|
|
|
|
|
currentUserPhone: currentUserPhone, |
|
|
|
|
|
isInternalUser: false, |
|
|
|
|
|
viewerPhone: viewerPhone, |
|
|
|
|
|
followUpRecords: followUpRecords |
|
|
|
|
|
}); |
|
|
|
|
|
console.log('当前用户手机号已设置:', currentUserPhone); |
|
|
|
|
|
console.log('是否为内部人员:', false); |
|
|
|
|
|
}); |
|
|
|
|
|
} else { |
|
|
|
|
|
// 5. 模拟浏览人电话号码和跟进记录(实际项目中应该从API获取)
|
|
|
|
|
|
const viewerPhone = '13800138000'; |
|
|
|
|
|
const followUpRecords = [ |
|
|
|
|
|
{ time: '2024-01-15 10:30', content: '客户询问商品价格和库存情况' }, |
|
|
|
|
|
{ time: '2024-01-14 14:20', content: '客户表示对商品感兴趣,需要进一步了解' }, |
|
|
|
|
|
{ time: '2024-01-13 09:15', content: '首次联系客户,介绍商品信息' } |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
// 设置当前用户的电话号码和内部人员状态
|
|
|
|
|
|
this.setData({ |
|
|
|
|
|
currentUserPhone: currentUserPhone, |
|
|
|
|
|
isInternalUser: false, |
|
|
|
|
|
viewerPhone: viewerPhone, |
|
|
|
|
|
followUpRecords: followUpRecords |
|
|
|
|
|
}); |
|
|
|
|
|
console.log('当前用户手机号已设置:', currentUserPhone); |
|
|
|
|
|
console.log('是否为内部人员:', false); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// 只有在用户未登录且URL参数明确要求登录时才显示登录弹窗
|
|
|
// 只有在用户未登录且URL参数明确要求登录时才显示登录弹窗
|
|
|
if (!isLoggedIn && needLoginFromUrl) { |
|
|
if (!isLoggedIn && needLoginFromUrl) { |
|
|
@ -2155,11 +2240,30 @@ Page({ |
|
|
displayRegion = extractProvince(displayRegion); |
|
|
displayRegion = extractProvince(displayRegion); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
this.setData({ |
|
|
// 提取浏览用户信息和跟进记录
|
|
|
|
|
|
const viewerInfo = product.viewerInfo || []; |
|
|
|
|
|
|
|
|
|
|
|
// 处理浏览用户信息,确保格式正确,并过滤掉type为Colleague的用户
|
|
|
|
|
|
const processedViewerInfo = viewerInfo |
|
|
|
|
|
.filter(viewer => viewer.type !== 'Colleague') // 过滤掉Colleague类型的用户
|
|
|
|
|
|
.map(viewer => ({ |
|
|
|
|
|
userId: viewer.userId, |
|
|
|
|
|
phoneNumber: viewer.phoneNumber, |
|
|
|
|
|
nickName: viewer.nickName, |
|
|
|
|
|
type: viewer.type, |
|
|
|
|
|
followupRecords: (viewer.followupRecords || []).map(record => ({ |
|
|
|
|
|
...record, |
|
|
|
|
|
// 确保时间显示为北京时间
|
|
|
|
|
|
createdAt: record.createdAt ? formatBeijingTime(record.createdAt) : '未知时间' |
|
|
|
|
|
})) |
|
|
|
|
|
})); |
|
|
|
|
|
|
|
|
|
|
|
this.setData({ |
|
|
goodsDetail: formattedGoods, |
|
|
goodsDetail: formattedGoods, |
|
|
displayRegion: displayRegion, |
|
|
displayRegion: displayRegion, |
|
|
isFavorite: preloadedFavoriteStatus, // 优先使用预加载数据中的收藏状态
|
|
|
isFavorite: preloadedFavoriteStatus, // 优先使用预加载数据中的收藏状态
|
|
|
videoCoverUrl: null // 重置封面URL
|
|
|
videoCoverUrl: null, // 重置封面URL
|
|
|
|
|
|
viewerInfo: processedViewerInfo // 设置浏览用户信息
|
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
// 商品加载完成后检查并提取视频封面
|
|
|
// 商品加载完成后检查并提取视频封面
|
|
|
|