本次开发完成了基于企业微信的完整项目管理模块,支持从客户咨询到项目归档的全流程管理。
开发时间: 2025-10-16 开发内容: 企微嵌入式项目管理系统 技术栈: Angular 17 + Ionic + Parse Server + 企业微信SDK
文件位置: /home/ryan/workspace/nova/yss-project/docs/prd/wxwork-project-management.md
内容包含:
文件位置: /home/ryan/workspace/nova/yss-project/src/modules/project/pages/project-loader/
核心功能:
文件位置: /home/ryan/workspace/nova/yss-project/src/modules/project/pages/contact/
核心功能:
文件位置: /home/ryan/workspace/nova/yss-project/src/modules/project/pages/project-detail/
核心功能:
文件位置: /home/ryan/workspace/nova/yss-project/src/modules/project/pages/project-detail/stages/stage-order.component.*
核心功能:
文件位置: /home/ryan/workspace/nova/yss-project/src/modules/project/pages/project-detail/stages/stage-requirements.component.*
核心功能:
文件位置: /home/ryan/workspace/nova/yss-project/src/modules/project/pages/project-detail/stages/stage-delivery.component.*
核心功能:
文件位置: /home/ryan/workspace/nova/yss-project/src/modules/project/pages/project-detail/stages/stage-aftercare.component.*
核心功能:
yss-project/
├── docs/
│ ├── prd/
│ │ └── wxwork-project-management.md # 产品需求文档
│ └── implementation-summary-wxwork-project.md # 实现总结文档 (本文件)
│
├── src/
│ ├── app/
│ │ └── app.routes.ts # 路由配置 (已集成企微模块)
│ │
│ └── modules/
│ └── project/
│ └── pages/
│ ├── project-loader/ # 项目预加载页
│ │ ├── project-loader.component.ts
│ │ ├── project-loader.component.html
│ │ └── project-loader.component.scss
│ │
│ ├── contact/ # 客户画像页
│ │ ├── contact.component.ts
│ │ ├── contact.component.html
│ │ └── contact.component.scss
│ │
│ └── project-detail/ # 项目详情页
│ ├── project-detail.component.ts
│ ├── project-detail.component.html
│ ├── project-detail.component.scss
│ │
│ └── stages/ # 四阶段子组件
│ ├── stage-order.component.* # 订单分配
│ ├── stage-requirements.component.* # 确认需求 (含AI)
│ ├── stage-delivery.component.* # 交付执行
│ └── stage-aftercare.component.* # 售后归档 (含AI)
// 初始化企微SDK
this.wxwork = new WxworkSDK({ cid: this.cid, appId: 'crm' });
this.wecorp = new WxworkCorp(this.cid);
// 获取上下文
const chatObject = await this.wxwork.getCurrentChatObject();
this.groupChat = chatObject.GroupChat;
this.contact = chatObject.Contact;
// 获取当前用户
this.currentUser = await this.wxwork.getCurrentUser();
// 跳转企微群聊
await this.wxwork.openChat(chatId);
company: Pointer<Company>
字段localStorage.setItem("company", "cDL6R1hgSi")
实现data: Object
字段存储动态数据// 方式1: 通过@Input传入 (父组件调用)
@Input() project: FmodeObject | null = null;
// 方式2: 通过路由参数加载 (独立访问)
this.projectId = this.route.parent?.snapshot.paramMap.get('projectId');
const query = new Parse.Query('Project');
this.project = await query.get(this.projectId);
// AI方案生成流程
async generateAISolution() {
// 1. 构建提示词
const prompt = this.buildAIPrompt();
// 2. 调用LLM接口 (预留)
const response = await this.callAIService(prompt);
// 3. 解析响应
this.aiSolution = this.parseAIResponse(response);
// 4. 保存到项目数据
await this.saveDraft();
}
// 提示词构建 (基于需求数据)
buildAIPrompt(): string {
return `作为专业设计师,根据以下需求生成方案:
空间: ${this.requirements.spaces}
风格: ${this.requirements.stylePreference}
预算: ${this.requirements.budget}
...`;
}
// 基于角色的权限
const role = this.currentUser?.get('roleName');
// 编辑权限
this.canEdit = ['客服', '组员', '组长', '管理员'].includes(role);
// 敏感信息查看
this.canViewCustomerPhone = ['客服', '组长', '管理员'].includes(role);
// 设计师/组长角色区分
this.isDesigner = role === '组员';
this.isTeamLeader = role === '组长';
// 移动端优先
.images-grid {
grid-template-columns: repeat(2, 1fr);
}
// 平板适配
@media (min-width: 768px) {
.images-grid {
grid-template-columns: repeat(3, 1fr);
}
}
// 桌面端适配
@media (min-width: 1024px) {
.images-grid {
grid-template-columns: repeat(4, 1fr);
}
}
// /src/app/app.routes.ts
{
path: 'wxwork/:cid',
children: [
// 项目预加载页 (企微上下文入口)
{
path: 'project-loader',
component: ProjectLoaderComponent,
title: '加载项目'
},
// 客户画像页
{
path: 'contact/:contactId',
component: CustomerProfileComponent,
title: '客户画像'
},
// 项目详情页 (含四阶段子路由)
{
path: 'project/:projectId',
component: ProjectDetailComponent,
children: [
{ path: '', redirectTo: 'order', pathMatch: 'full' },
{ path: 'order', component: StageOrderComponent, title: '订单分配' },
{ path: 'requirements', component: StageRequirementsComponent, title: '确认需求' },
{ path: 'delivery', component: StageDeliveryComponent, title: '交付执行' },
{ path: 'aftercare', component: StageAftercareComponent, title: '售后归档' }
]
}
]
}
访问示例:
/wxwork/cDL6R1hgSi/project-loader
/wxwork/cDL6R1hgSi/contact/abc123
/wxwork/cDL6R1hgSi/project/xyz789/order
/wxwork/cDL6R1hgSi/project/xyz789/requirements
/wxwork/cDL6R1hgSi/project/xyz789/delivery
/wxwork/cDL6R1hgSi/project/xyz789/aftercare
Company (企业)
↓
├── Profile (员工)
│ - role: 客服|组员|组长|财务|管理员
│ - permissions
│
├── ContactInfo (客户)
│ - data.preferences (客户画像)
│ - source
│
├── GroupChat (群聊)
│ - project: Pointer<Project>
│ - members
│
└── Project (项目)
- customer: Pointer<ContactInfo>
- assignee: Pointer<Profile>
- status: 待分配|待审核|进行中|待结算|已完成
- currentStage: 订单分配|确认需求|建模|渲染|尾款结算|已归档
- data: {
quotation: {...}, // 报价明细
requirements: {...}, // 需求清单
aiSolution: {...}, // AI方案
deliverables: [...], // 交付物
finalPayment: {...}, // 尾款信息
customerFeedback: {...}, // 客户评价
projectRetrospective: {...} // 项目复盘
}
1. 用户在企微群聊中打开应用
↓
2. 访问 /wxwork/:cid/project-loader
↓
3. SDK获取群聊上下文 (GroupChat)
↓
4. 查询群聊是否关联项目
↓
5a. 已关联 → 跳转项目详情
5b. 未关联 → 显示创建引导
↓
6. 填写项目名称 → 创建Project
↓
7. 关联群聊: GroupChat.project = Project
↓
8. 跳转到订单分配阶段
1. 用户在企微联系人详情打开应用
↓
2. 访问 /wxwork/:cid/project-loader
↓
3. SDK获取联系人上下文 (Contact)
↓
4. 查询联系人对应的ContactInfo
↓
5. 跳转客户画像页
↓
6. 显示客户信息/偏好/群聊/历史项目
订单分配 (客服/组长)
- 填写项目信息
- 配置报价明细
- 分配设计师
- 提交审批
↓
确认需求 (设计师+客户)
- 上传参考图片
- 上传CAD文件
- 填写需求清单
- 生成AI设计方案
- 确认需求
↓
交付执行 (设计师+组长)
- 设计师上传交付物
- 质量自查
- 提交审核
- 组长审核通过/驳回
- (循环直到全部通过)
- 完成交付
↓
售后归档 (客服/财务)
- 上传支付凭证 (OCR识别)
- 客户提交评价
- 生成AI项目复盘
- 归档项目
实现文件上传服务
集成LLM接口
实现OCR识别
企微消息通知
色彩分析弹窗
工作量日历
数据统计看板
知识库系统
AI能力增强
客户端应用
开放平台
// src/app/app.config.ts
localStorage.setItem("company", "cDL6R1hgSi"); // 当前企业ID
const Parse = FmodeParse.with('nova'); // 使用nova应用
crm
角色 | 创建项目 | 编辑项目 | 查看客户手机 | 审核交付 | 归档项目 |
---|---|---|---|---|---|
客服 | ✓ | ✓ | ✓ | ✗ | ✓ |
组员(设计师) | ✗ | ✓ | ✗ | ✗ | ✗ |
组长 | ✓ | ✓ | ✓ | ✓ | ✓ |
财务 | ✗ | ✗ | ✗ | ✗ | ✗ |
管理员 | ✓ | ✓ | ✓ | ✓ | ✓ |
本次开发完成了一个功能完整、架构清晰的企微嵌入式项目管理系统,覆盖了从客户咨询到项目归档的全生命周期。
核心亮点:
技术债务:
代码质量:
开发完成时间: 2025-10-16 文档作者: Claude Code (Anthropic) 版本: v1.0.0