revert(order): 移除订单站内聊天,沟通统一走官方客服

- 删除 pages/order/chat、聊天接口/仓储方法/order_messages 建表与客户端 API

- 买家「联系大神」、大神「联系老板」、大神详情「在线客服」、组局「私聊」统一改为 openSupportSheet(读取后台 customer_service 配置的客服微信/热线)

- 保留派单实时通知与雷达/大厅轮询

- 114 套件/742 用例全绿;聊天接口线上已 404
这个提交包含在:
xcbyy
2026-10-22 09:10:16 +08:00
父节点 aca35db200
当前提交 be1c7be5d3
共有 12 个文件被更改,包括 95 次插入 和 685 次删除

查看文件

@@ -3,47 +3,19 @@ import * as fs from 'fs';
import * as path from 'path';
/**
* 第九十九批:订单站内聊天 + 派单实时通知。
* 第九十九批:派单实时化;站内聊天已按产品要求移除(沟通统一走官方客服)。
*/
describe('第九十九批订单聊天与派单实时化', () => {
describe('第九十九批派单实时化与客服沟通约束', () => {
const root = path.resolve(__dirname, '../../');
const read = (rel: string) => fs.readFileSync(path.join(root, rel), 'utf-8');
const mysql = read('server/src/db/mysql.ts');
const repo = read('server/src/db/repository.ts');
const indexCode = read('server/src/index.ts');
const apiCode = read('pwuniapp/common/api.js');
const chatPage = read('pwuniapp/pages/order/chat.vue');
const mysql = read('server/src/db/mysql.ts');
const pagesJson = read('pwuniapp/pages.json');
const radar = read('pwuniapp/pages/expert/radar.vue');
const hall = read('pwuniapp/pages/expert/hall.vue');
it('订单消息表必须落库且带索引', () => {
expect(mysql).toContain('CREATE TABLE IF NOT EXISTS order_messages');
expect(mysql).toContain('idx_order_created');
expect(mysql).toContain('idx_receiver_read');
});
it('聊天接口必须校验交易双方身份', () => {
expect(indexCode).toContain("app.get('/api/orders/:id/chat'");
expect(indexCode).toContain("app.post('/api/orders/:id/chat/messages'");
expect(indexCode).toContain('仅交易双方可查看该订单会话');
expect(indexCode).toContain('订单尚未被大神接单,暂不能聊天');
});
it('消息必须过滤手机号与违规内容,并推送站内通知', () => {
expect(indexCode).toContain("请勿在站内发送手机号");
expect(indexCode).toContain('contentSecurityService.checkText(content)');
expect(indexCode).toContain("pushUserNotification(\n peerId,\n 'CHAT'");
});
it('小程序聊天页与接口已接线', () => {
expect(pagesJson).toContain('pages/order/chat');
expect(apiCode).toContain('export async function getOrderChat');
expect(apiCode).toContain('export async function sendOrderMessage');
expect(chatPage).toContain('setInterval');
expect(chatPage).toContain('sendOrderMessage');
});
const orderList = read('pwuniapp/pages/order/list.vue');
const workspace = read('pwuniapp/pages/expert/workspace.vue');
it('新派单必须通知在线认证大神,雷达/大厅自动轮询', () => {
expect(indexCode).toContain('notifyNearbyExpertsForOrder');
@@ -55,9 +27,27 @@ describe('第九十九批订单聊天与派单实时化', () => {
expect(hall).toContain('}, 30000);');
});
it('通知跳转会正确处理接单页 tab 路由', () => {
it('新单通知跳转会正确处理接单页 tab 路由', () => {
const notifications = read('pwuniapp/pages/user/notifications.vue');
expect(notifications).toContain("'/pages/expert/radar'");
expect(notifications).toContain("'/pages/expert/hall'");
});
it('站内聊天必须彻底移除(页面/接口/表/客户端方法)', () => {
expect(fs.existsSync(path.join(root, 'pwuniapp/pages/order/chat.vue'))).toBe(false);
expect(pagesJson).not.toContain('pages/order/chat');
expect(indexCode).not.toContain('/chat/messages');
expect(mysql).not.toContain('order_messages');
const apiCode = read('pwuniapp/common/api.js');
expect(apiCode).not.toContain('sendOrderMessage');
});
it('买卖双方沟通统一走官方客服(配置化)', () => {
const support = read('pwuniapp/common/support.js');
expect(support).toContain('openSupportSheet');
expect(support).toContain('customer_service');
expect(orderList).toContain('openSupportSheet');
expect(workspace).toContain('openSupportSheet');
expect(orderList).not.toContain('pages/order/chat');
});
});