Browse Source

更新客服列表页面与personnel表连接,修复数据显示问题

pull/1/head
Default User 2 months ago
parent
commit
2ca507c95d
  1. 16
      pages/customer-service/detail/index.js
  2. 76
      pages/customer-service/index.js
  3. 2
      project.private.config.json
  4. 25
      server-example/server-mysql.js

16
pages/customer-service/detail/index.js

@ -93,10 +93,18 @@ Page({
}, },
onLoad: function (options) { onLoad: function (options) {
// 获取传递过来的客服ID // 获取传递过来的客服数据或ID
const { id } = options; const { id, serviceData } = options;
// 根据ID查找客服数据 let customerData = null;
const customerData = this.data.customerServices.find(item => item.id === parseInt(id));
if (serviceData) {
// 直接使用URL参数中的完整客服数据
try {
customerData = JSON.parse(decodeURIComponent(serviceData));
} catch (error) {
console.error('解析客服数据失败:', error);
}
}
if (customerData) { if (customerData) {
this.setData({ this.setData({

76
pages/customer-service/index.js

@ -46,7 +46,54 @@ Page({
// 无论success字段是否存在,只要有data字段就尝试处理 // 无论success字段是否存在,只要有data字段就尝试处理
const dataSource = res.data.data || res.data; const dataSource = res.data.data || res.data;
if (Array.isArray(dataSource)) { if (Array.isArray(dataSource)) {
const processedData = dataSource.map(item => ({ 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 id: item.id || `id_${Date.now()}_${Math.random()}`, // 确保有id
managerId: item.managerId || '', managerId: item.managerId || '',
managercompany: item.managercompany || '', managercompany: item.managercompany || '',
@ -57,16 +104,19 @@ Page({
alias: item.alias || item.name || '未知', alias: item.alias || item.name || '未知',
phoneNumber: item.phoneNumber || '', phoneNumber: item.phoneNumber || '',
avatarUrl: item.avatar || item.avatarUrl || '', // 兼容avatar和avatarUrl avatarUrl: item.avatar || item.avatarUrl || '', // 兼容avatar和avatarUrl
score: Math.floor(Math.random() * 20) + 980, // 随机生成分数 score: score, // 使用数据库中的鸡蛋分,提取数字部分
isOnline: !!item.online, // 转换为布尔值 isOnline: !!item.online, // 转换为布尔值
responsibleArea: `${this.getRandomArea()}鸡蛋采购`, responsibleArea: item.responsible_area || '', // 使用数据库中的负责区域
experience: this.getRandomExperience(), experience: experience,
serviceCount: this.getRandomNumber(100, 300), serviceCount: serviceCount,
purchaseCount: this.getRandomNumber(10000, 30000), purchaseCount: purchaseCount,
profitIncreaseRate: this.getRandomNumber(10, 25), profitIncreaseRate: profitIncreaseRate,
profitFarmCount: this.getRandomNumber(50, 200), profitFarmCount: profitFarmCount,
skills: this.getRandomSkills() skills: [], // 技能信息
})); information: item.information || '', // 保存原始个人信息
label: item.label || '' // 保存标签信息
};
});
console.log('处理后的数据数量:', processedData.length); console.log('处理后的数据数量:', processedData.length);
return processedData; return processedData;
} else { } else {
@ -487,9 +537,13 @@ Page({
// 查看客服详情 // 查看客服详情
onViewDetail: function (e) { onViewDetail: function (e) {
const id = e.currentTarget.dataset.id; const id = e.currentTarget.dataset.id;
const service = this.data.customerServices.find(item => item.id === id);
if (service) {
// 将完整的客服数据通过URL参数传递给详情页面
wx.navigateTo({ wx.navigateTo({
url: `/pages/customer-service/detail?id=${id}` url: `/pages/customer-service/detail/index?id=${id}&serviceData=${encodeURIComponent(JSON.stringify(service))}`
}); });
}
}, },
onBack: function () { onBack: function () {

2
project.private.config.json

@ -1,6 +1,6 @@
{ {
"libVersion": "3.10.3", "libVersion": "3.10.3",
"projectname": "xxx", "projectname": "Program-mini",
"setting": { "setting": {
"urlCheck": false, "urlCheck": false,
"coverView": true, "coverView": true,

25
server-example/server-mysql.js

@ -6501,17 +6501,25 @@ app.get('/api/managers', async (req, res) => {
const { type } = req.query; const { type } = req.query;
console.log('获取客服列表请求,类型:', type); console.log('获取客服列表请求,类型:', type);
// 根据角色类型确定查询的projectName值 // 根据角色类型确定查询条件
let projectName = '销售员'; // 默认查询销售员 let whereClause = '';
let replacements = [];
if (type === 'buyer') { 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表,获取指定工位且有电话号码的用户 // 查询userlogin数据库中的personnel表,获取指定工位且有电话号码的用户
// 根据表结构选择所有需要的字段 // 根据表结构选择所有需要的字段,包括新增的字段
const [personnelData] = await sequelize.query( 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', `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: [projectName] } { replacements: replacements }
); );
// 查询chat_online_status表获取客服在线状态(添加错误处理) // 查询chat_online_status表获取客服在线状态(添加错误处理)
@ -6571,6 +6579,11 @@ app.get('/api/managers', async (req, res) => {
alias: person.alias || person.name || '未知', alias: person.alias || person.name || '未知',
phoneNumber: person.phoneNumber || '', phoneNumber: person.phoneNumber || '',
avatar: person.avatarUrl || '', // 使用表中的avatarUrl字段 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) // 综合检查在线状态 online: isManagerOnline(person.id, person.managerId) // 综合检查在线状态
})); }));

Loading…
Cancel
Save