From 2ca507c95d592c47d114fe31c2a54aba8543cb74 Mon Sep 17 00:00:00 2001 From: Default User Date: Tue, 23 Dec 2025 16:23:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=AE=A2=E6=9C=8D=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E9=A1=B5=E9=9D=A2=E4=B8=8Epersonnel=E8=A1=A8=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/customer-service/detail/index.js | 16 +++- pages/customer-service/index.js | 102 +++++++++++++++++++------ project.private.config.json | 2 +- server-example/server-mysql.js | 25 ++++-- 4 files changed, 110 insertions(+), 35 deletions(-) diff --git a/pages/customer-service/detail/index.js b/pages/customer-service/detail/index.js index 63f3f2e..e439587 100644 --- a/pages/customer-service/detail/index.js +++ b/pages/customer-service/detail/index.js @@ -93,10 +93,18 @@ Page({ }, onLoad: function (options) { - // 获取传递过来的客服ID - const { id } = options; - // 根据ID查找客服数据 - const customerData = this.data.customerServices.find(item => item.id === parseInt(id)); + // 获取传递过来的客服数据或ID + const { id, serviceData } = options; + let customerData = null; + + if (serviceData) { + // 直接使用URL参数中的完整客服数据 + try { + customerData = JSON.parse(decodeURIComponent(serviceData)); + } catch (error) { + console.error('解析客服数据失败:', error); + } + } if (customerData) { this.setData({ diff --git a/pages/customer-service/index.js b/pages/customer-service/index.js index 45a5068..8663ddb 100644 --- a/pages/customer-service/index.js +++ b/pages/customer-service/index.js @@ -46,27 +46,77 @@ Page({ // 无论success字段是否存在,只要有data字段就尝试处理 const dataSource = res.data.data || res.data; if (Array.isArray(dataSource)) { - const processedData = dataSource.map(item => ({ - id: item.id || `id_${Date.now()}_${Math.random()}`, // 确保有id - managerId: item.managerId || '', - managercompany: item.managercompany || '', - managerdepartment: item.managerdepartment || '', - organization: item.organization || '', - projectName: item.projectName || '', - name: item.name || '未知', - alias: item.alias || item.name || '未知', - phoneNumber: item.phoneNumber || '', - avatarUrl: item.avatar || item.avatarUrl || '', // 兼容avatar和avatarUrl - score: Math.floor(Math.random() * 20) + 980, // 随机生成分数 - isOnline: !!item.online, // 转换为布尔值 - responsibleArea: `${this.getRandomArea()}鸡蛋采购`, - experience: this.getRandomExperience(), - serviceCount: this.getRandomNumber(100, 300), - purchaseCount: this.getRandomNumber(10000, 30000), - profitIncreaseRate: this.getRandomNumber(10, 25), - profitFarmCount: this.getRandomNumber(50, 200), - skills: this.getRandomSkills() - })); + const processedData = dataSource.map(item => { + // 解析information字段中的信息 + let experience = ''; + let serviceCount = ''; + let purchaseCount = ''; + let profitFarmCount = ''; + let profitIncreaseRate = ''; + + if (item.information) { + // 处理不同类型的换行符(\r\n和\n) + const lines = item.information.split(/\r?\n/).filter(line => line.trim()); + + // 解析第一行:服务平台X年 服务X+鸡场 + if (lines[0]) { + const firstLine = lines[0].trim(); + const experienceMatch = firstLine.match(/服务平台(.*?)年/); + if (experienceMatch) { + experience = experienceMatch[1].trim() + '年'; + } + + const serviceCountMatch = firstLine.match(/服务(.*?)鸡场/); + if (serviceCountMatch) { + serviceCount = serviceCountMatch[1].trim(); + } + } + + // 解析第二行:数字 数字 数字% + if (lines[1]) { + const secondLine = lines[1].trim(); + const numbers = secondLine.split(/\s+/).filter(num => num.trim()); + if (numbers.length >= 3) { + purchaseCount = numbers[0].trim(); + profitFarmCount = numbers[1].trim(); + profitIncreaseRate = numbers[2].replace('%', '').trim(); + } + } + } + + // 提取egg_section中的数字部分,去掉"鸡蛋分"后缀 + let score = Math.floor(Math.random() * 20) + 980; + if (item.egg_section) { + const scoreMatch = item.egg_section.match(/(\d+)/); + if (scoreMatch) { + score = scoreMatch[1]; + } + } + + return { + id: item.id || `id_${Date.now()}_${Math.random()}`, // 确保有id + managerId: item.managerId || '', + managercompany: item.managercompany || '', + managerdepartment: item.managerdepartment || '', + organization: item.organization || '', + projectName: item.projectName || '', + name: item.name || '未知', + alias: item.alias || item.name || '未知', + phoneNumber: item.phoneNumber || '', + avatarUrl: item.avatar || item.avatarUrl || '', // 兼容avatar和avatarUrl + score: score, // 使用数据库中的鸡蛋分,提取数字部分 + isOnline: !!item.online, // 转换为布尔值 + responsibleArea: item.responsible_area || '', // 使用数据库中的负责区域 + experience: experience, + serviceCount: serviceCount, + purchaseCount: purchaseCount, + profitIncreaseRate: profitIncreaseRate, + profitFarmCount: profitFarmCount, + skills: [], // 技能信息 + information: item.information || '', // 保存原始个人信息 + label: item.label || '' // 保存标签信息 + }; + }); console.log('处理后的数据数量:', processedData.length); return processedData; } else { @@ -487,9 +537,13 @@ Page({ // 查看客服详情 onViewDetail: function (e) { const id = e.currentTarget.dataset.id; - wx.navigateTo({ - url: `/pages/customer-service/detail?id=${id}` - }); + const service = this.data.customerServices.find(item => item.id === id); + if (service) { + // 将完整的客服数据通过URL参数传递给详情页面 + wx.navigateTo({ + url: `/pages/customer-service/detail/index?id=${id}&serviceData=${encodeURIComponent(JSON.stringify(service))}` + }); + } }, onBack: function () { diff --git a/project.private.config.json b/project.private.config.json index e5742ca..aa76ea0 100644 --- a/project.private.config.json +++ b/project.private.config.json @@ -1,6 +1,6 @@ { "libVersion": "3.10.3", - "projectname": "xxx", + "projectname": "Program-mini", "setting": { "urlCheck": false, "coverView": true, diff --git a/server-example/server-mysql.js b/server-example/server-mysql.js index 8f90751..72c607b 100644 --- a/server-example/server-mysql.js +++ b/server-example/server-mysql.js @@ -6501,17 +6501,25 @@ app.get('/api/managers', async (req, res) => { const { type } = req.query; console.log('获取客服列表请求,类型:', type); - // 根据角色类型确定查询的projectName值 - let projectName = '销售员'; // 默认查询销售员 + // 根据角色类型确定查询条件 + let whereClause = ''; + let replacements = []; + if (type === 'buyer') { - projectName = '采购员'; // 如果类型为buyer,查询采购员 + // 如果类型为buyer,查询所有与采购相关的职位 + whereClause = 'WHERE (projectName = ? OR projectName = ? OR projectName = ?) AND phoneNumber IS NOT NULL AND phoneNumber != ""'; + replacements = ['采购', '采购员', '采购主管']; + } else { + // 默认查询所有与销售相关的职位 + whereClause = 'WHERE (projectName = ? OR projectName = ?) AND phoneNumber IS NOT NULL AND phoneNumber != ""'; + replacements = ['销售', '销售员']; } // 查询userlogin数据库中的personnel表,获取指定工位且有电话号码的用户 - // 根据表结构选择所有需要的字段 + // 根据表结构选择所有需要的字段,包括新增的字段 const [personnelData] = await sequelize.query( - 'SELECT id, managerId, managercompany, managerdepartment, organization, projectName, name, alias, phoneNumber, avatarUrl FROM userlogin.personnel WHERE projectName = ? AND phoneNumber IS NOT NULL AND phoneNumber != "" ORDER BY id ASC', - { replacements: [projectName] } + `SELECT id, managerId, managercompany, managerdepartment, organization, projectName, name, alias, phoneNumber, avatarUrl, responsible_area, label, egg_section, information FROM userlogin.personnel ${whereClause} ORDER BY id ASC`, + { replacements: replacements } ); // 查询chat_online_status表获取客服在线状态(添加错误处理) @@ -6571,6 +6579,11 @@ app.get('/api/managers', async (req, res) => { alias: person.alias || person.name || '未知', phoneNumber: person.phoneNumber || '', avatar: person.avatarUrl || '', // 使用表中的avatarUrl字段 + avatarUrl: person.avatarUrl || '', // 兼容前端的avatarUrl字段 + egg_section: person.egg_section || '', // 添加鸡蛋分字段 + responsible_area: person.responsible_area || '', // 添加负责区域字段 + label: person.label || '', // 添加标签字段 + information: person.information || '', // 添加个人信息字段 online: isManagerOnline(person.id, person.managerId) // 综合检查在线状态 }));