Browse Source

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

pull/1/head
Default User 2 months ago
parent
commit
2ca507c95d
  1. 16
      pages/customer-service/detail/index.js
  2. 102
      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) {
// 获取传递过来的客服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({

102
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 () {

2
project.private.config.json

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

25
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) // 综合检查在线状态
}));

Loading…
Cancel
Save