根据需求对项目管理页面进行简化和功能优化:
位置: src/modules/project/components/group-chat-summary/
核心功能:
src/modules/project/components/group-chat-summary/
├── group-chat-summary.component.ts # 组件逻辑 (400行)
├── group-chat-summary.component.html # 模板 (190行)
└── group-chat-summary.component.scss # 样式 (480行)
┌────────────────────────────────────┐
│ 💬 群聊信息 🔴 2 ⌄│
│ 156条消息 · 23条客户消息 │
└────────────────────────────────────┘
┌────────────────────────────────────┐
│ 💬 群聊信息 🔴 2 ⌃│
│ 156条消息 · 23条客户消息 │
├────────────────────────────────────┤
│ ℹ️ 群介绍文案 │
│ [✓ 群介绍已发送] │
├────────────────────────────────────┤
│ [全部 156] [客户消息 23] [未回复 2] │
├────────────────────────────────────┤
│ 📩 张女士 (客户) 10分钟前 │
│ "我想看看效果图" │
│ ⚠️ 10分钟未回复,请及时回复 │
├────────────────────────────────────┤
│ 📩 李先生 (客户) 35分钟前 │
│ "预算大概多少?" │
│ 🚨 超过35分钟未回复 │
├────────────────────────────────────┤
│ [打开群聊] [刷新消息] │
└────────────────────────────────────┘
@Input() groupChat: FmodeObject | null; // 群聊对象
@Input() contact: FmodeObject | null; // 客户对象
@Input() cid: string; // 公司ID
interface ChatMessage {
id: string; // 消息ID
sender: string; // 发送者ID
senderName: string; // 发送者姓名
content: string; // 消息内容
time: Date; // 发送时间
isCustomer: boolean; // 是否为客户消息
needsReply: boolean; // 是否需要回复
replyTime?: Date; // 回复时间
}
{
data: {
// 聊天记录
chatHistory: [{
msgid: string, // 消息ID
from: string, // 发送者
fromName: string, // 发送者姓名
msgtype: string, // 消息类型 (text/image/file/voice/video)
text: {
content: string // 文本内容
},
msgtime: number, // 时间戳(秒)
replyTime?: number // 回复时间戳(可选)
}],
// 群介绍
introSent: boolean, // 是否已发送群介绍
introSentAt: Date // 发送时间
}
}
// 发送群介绍
await wecorp.appchat.send({
chatid: string, // 群聊ID
msgtype: 'text', // 消息类型
text: {
content: string // 群介绍文案
}
});
// 打开群聊(可选)
await wecorp.openChat?.(chatId);
HTML:
<!-- 群聊信息汇总(新增) -->
@if (groupChat) {
<app-group-chat-summary
[groupChat]="groupChat"
[contact]="contact"
[cid]="cid">
</app-group-chat-summary>
}
TypeScript:
// 1. 导入组件
import { GroupChatSummaryComponent } from '../../components/group-chat-summary/group-chat-summary.component';
// 2. 添加到 imports
@Component({
imports: [
// ... 其他组件
GroupChatSummaryComponent
]
})
默认文案位于组件的 loadGroupIntro() 方法中,可根据需求修改:
this.groupIntro = `
欢迎加入映三色设计服务群!👋
我是您的专属设计顾问,很高兴为您服务。
📋 服务流程:
1️⃣ 需求沟通 - 了解您的设计需求
2️⃣ 方案设计 - 提供专业设计方案
3️⃣ 方案优化 - 根据您的反馈调整
4️⃣ 交付执行 - 完成设计并交付
⏰ 服务时间:工作日 9:00-18:00
📞 紧急联系:请直接拨打客服电话
有任何问题随时在群里@我,我会及时回复您!💙
`.trim();
在组件中可配置不同等级的提醒时间:
// 10分钟未回复 - 黄色警告
if (diff > 10 * 60 * 1000) {
// 显示警告
}
// 30分钟未回复 - 红色警告
if (diff > 30 * 60 * 1000) {
// 显示紧急提醒
}
/**
* 发送未回复通知
*/
async sendUnreadNotification() {
console.log(`⚠️ 有 ${this.unreadCount} 条消息超过10分钟未回复`);
// TODO: 实现企微应用消息推送
// 需要后端配合实现推送到技术人员手机
}
// 后端API实现
POST /api/wxwork/send-app-message
{
"touser": "技术人员ID",
"msgtype": "text",
"text": {
"content": "【紧急】有2条客户消息超过10分钟未回复,请及时处理!"
}
}
// 在技术人员群里推送
POST /api/wxwork/send-bot-message
{
"chatid": "技术支持群ID",
"msgtype": "markdown",
"markdown": {
"content": "### ⚠️ 未回复提醒\n\n**项目**: XXX项目\n**客户**: 张女士\n**消息**: \"我想看看效果图\"\n**时长**: 15分钟\n\n[立即处理](链接)"
}
}
组件会实时统计以下数据:
| 指标 | 说明 | 显示位置 |
|---|---|---|
| totalMessages | 群聊总消息数 | 头部 |
| customerMessageCount | 客户消息数 | 头部 |
| unreadCount | 未回复消息数 | 徽章 |
GroupChat.data.chatHistory[图片]、[文件] 等占位符wm 或 wo 开头isCustomerMessage() 方法自动识别通过引入群聊信息汇总组件,项目管理页面实现了:
原有功能完全保留,数据对接逻辑不变!
实现日期: 2025-10-30
文档版本: v1.0
开发者: AI Assistant