diff --git a/pages/index/index.js b/pages/index/index.js index 508839c..8ba1a1f 100644 --- a/pages/index/index.js +++ b/pages/index/index.js @@ -2246,6 +2246,11 @@ Page({ // 记录已浏览商品 this.markGoodsAsViewed(productId); + + // 记录用户轨迹 + API.addUserTrace(item).catch(err => { + console.error('记录用户踪迹失败:', err); + }); // 将完整的商品数据传递给详情页,包含联系人信息,与buyer页面保持一致 // 同时传递登录状态信息,让详情页决定是否显示登录弹窗 diff --git a/server-example/server-mysql.js b/server-example/server-mysql.js index ccfc266..1117b51 100644 --- a/server-example/server-mysql.js +++ b/server-example/server-mysql.js @@ -1164,6 +1164,41 @@ UserManagement.init({ timestamps: false }); +// 用户踪迹表模型 +class UserTrace extends Model { } +UserTrace.init({ + id: { + type: DataTypes.INTEGER, + autoIncrement: true, + primaryKey: true + }, + phoneNumber: { + type: DataTypes.STRING(100), + allowNull: true, + comment: '电话号码' + }, + userId: { + type: DataTypes.STRING(100), + allowNull: false, + comment: '客户ID' + }, + operationTime: { + type: DataTypes.DATE, + defaultValue: Sequelize.NOW, + comment: '操作时间' + }, + originalData: { + type: DataTypes.TEXT, + allowNull: true, + comment: '原始数据JSON' + } +}, { + sequelize, + modelName: 'UserTrace', + tableName: 'usertraces', + timestamps: false +}); + // 价格资源模型 - 用于估价功能(匹配实际数据库表结构) class Resources extends Model { } Resources.init({ @@ -1889,6 +1924,44 @@ app.post('/api/user/get', async (req, res) => { } }); +// 添加用户踪迹记录 +app.post('/api/user-trace/add', async (req, res) => { + try { + const { phoneNumber, userId, originalData } = req.body; + + if (!userId || !originalData) { + return res.status(400).json({ + success: false, + code: 400, + message: '缺少必要参数userId或originalData' + }); + } + + // 创建用户踪迹记录 + const trace = await UserTrace.create({ + phoneNumber: phoneNumber || '', + userId: userId, + operationTime: new Date(), + originalData: JSON.stringify(originalData) + }); + + res.json({ + success: true, + code: 200, + message: '用户踪迹记录添加成功', + data: trace + }); + } catch (error) { + console.error('添加用户踪迹记录失败:', error); + res.status(500).json({ + success: false, + code: 500, + message: '添加用户踪迹记录失败', + error: error.message + }); + } +}); + // 更新用户信息 app.post('/api/user/update', async (req, res) => { try { diff --git a/utils/api.js b/utils/api.js index b99eca5..2ec30ba 100644 --- a/utils/api.js +++ b/utils/api.js @@ -336,12 +336,45 @@ function request(url, method, data, requestContext = {}) { }); } + + +// 添加用户踪迹记录功能 +function addUserTrace(traceData) { + console.log('API.addUserTrace - traceData:', traceData); + + // 获取必要的用户信息 + const userId = wx.getStorageSync('userId'); + const userPhone = wx.getStorageSync('userInfo')?.phoneNumber || wx.getStorageSync('phoneNumber') || ''; + + if (!userId) { + console.warn('用户未登录,无法记录用户踪迹'); + return Promise.resolve({ success: false, message: '用户未登录' }); + } + + const requestData = { + phoneNumber: userPhone, + userId: userId, + originalData: traceData + }; + + return request('/api/user-trace/add', 'POST', requestData).then(res => { + console.log('用户踪迹记录成功:', res); + return res; + }).catch(err => { + console.error('用户踪迹记录失败:', err); + // 即使记录失败,也不影响主流程 + return { success: false, message: '用户踪迹记录失败' }; + }); +} + // 导出统一的API对象 - 合并基础API和其他功能 module.exports = { // 包含基础API功能 ...baseApi, // 添加request函数 request: request, + // 添加用户踪迹记录功能 + addUserTrace: addUserTrace, // 添加商品到购物车 - 增强版本,即使本地找不到商品也尝试直接请求服务器 addToCart: function (goodsItem) { return new Promise((resolve, reject) => { @@ -1228,7 +1261,7 @@ module.exports = { return { success: false, message: '聊天记录修复失败:' + err.message }; }); }, - + // 获取商品列表方法,用于goods页面 getGoodsList: function (params) { console.log('API.getGoodsList - params:', params);