# 企业微信端项目管理系统 PRD ## 文档信息 - **产品名称**: 映三色企微项目管理 - **文档版本**: v1.0 - **创建日期**: 2025-10-15 - **负责人**: 产品团队 - **目标用户**: 客服、设计师(组员)、组长 --- ## 一、产品概述 ### 1.1 产品定位 基于企业微信的设计师项目全流程管理系统,支持从客户咨询、订单分配、需求确认、交付执行到售后归档的完整生命周期管理。 ### 1.2 核心价值 - **降低沟通成本**: 在企微会话中直接管理项目,无需切换应用 - **提升协作效率**: 客服、设计师、组长在同一平台实时协作 - **智能辅助设计**: AI分析参考图,生成设计方案建议 - **标准化流程**: SOP标准化流程,保障项目质量和交付时间 ### 1.3 技术栈 - **前端框架**: Angular 17 + Standalone Components - **UI组件**: Ionic Framework (移动端优先) - **企微SDK**: fmode-ng/core (WxworkSDK, WxworkCorp) - **数据服务**: fmode-ng/parse (FmodeParse, FmodeObject) - **AI服务**: 通义千问/DeepSeek 大模型 --- ## 二、用户角色与权限 ### 2.1 角色定义 | 角色 | Profile.role | 职责 | 主要权限 | |------|--------------|------|---------| | 客服 | `客服` | 接单、跟进、售后 | 创建项目、查看客户完整信息、发起结算 | | 组员 | `组员` | 设计执行 | 上传交付物、自查质量、查看部分客户信息 | | 组长 | `组长` | 审核、分配、质检 | 分配任务、审核交付物、提出Issue | | 财务 | `财务` | 审核报价、确认收款 | 审核报价、确认付款凭证 | | 管理员 | `管理员` | 系统管理 | 全部权限 | ### 2.2 权限矩阵 | 功能模块 | 客服 | 组员 | 组长 | 财务 | |---------|------|------|------|------| | 查看客户手机号 | ✅ | ❌ | ✅ | ❌ | | 创建项目 | ✅ | ❌ | ✅ | ❌ | | 分配设计师 | ✅ | ❌ | ✅ | ❌ | | 上传参考图 | ✅ | ✅ | ✅ | ❌ | | AI生成方案 | ✅ | ✅ | ✅ | ❌ | | 上传交付物 | ❌ | ✅ | ✅ | ❌ | | 审核交付物 | ❌ | ❌ | ✅ | ❌ | | 提出Issue | ❌ | ❌ | ✅ | ❌ | | 创建报价 | ✅ | ❌ | ✅ | ❌ | | 审核报价 | ❌ | ❌ | ❌ | ✅ | | 发起结算 | ✅ | ❌ | ✅ | ❌ | | 确认收款 | ❌ | ❌ | ❌ | ✅ | | 项目归档 | ✅ | ❌ | ✅ | ❌ | --- ## 三、产品架构 ### 3.1 整体架构 ``` 企业微信会话 ↓ 项目预加载页 (WxworkSDK获取上下文) ↓ ├─ 群聊入口 → 项目详情组件 └─ 联系人入口 → 客户画像组件 ``` ### 3.2 目录结构 ``` src/modules/project/ ├── pages/ │ ├── project-loader/ # 项目预加载页面 │ │ ├── project-loader.component.ts │ │ └── project-loader.component.html │ ├── customer-profile/ # 客户画像页面 │ │ ├── customer-profile.component.ts │ │ └── customer-profile.component.html │ └── project-detail/ # 项目详情页面 │ ├── project-detail.component.ts │ ├── project-detail.component.html │ └── components/ │ ├── stage-order/ # 订单分配阶段 │ ├── stage-requirements/ # 确认需求阶段 │ ├── stage-delivery/ # 交付执行阶段 │ └── stage-aftercare/ # 售后归档阶段 ├── components/ │ ├── customer-info/ # 客户信息卡片 │ ├── reference-image-uploader/ # 参考图上传 │ ├── ai-solution-generator/ # AI方案生成 │ ├── deliverable-uploader/ # 交付物上传 │ ├── quality-checklist/ # 质量自查清单 │ └── settlement-manager/ # 结算管理 └── services/ ├── project-wxwork.service.ts # 企微项目服务 ├── ai-solution.service.ts # AI方案生成服务 └── deliverable.service.ts # 交付物服务 ``` ### 3.3 路由设计 ```typescript // app.routes.ts { path: 'wxwork/:cid', canActivate: [WxworkAuthGuard], children: [ // 项目预加载页 { path: 'project-loader', component: ProjectLoaderComponent }, // 客户画像 { path: 'customer/:contactId', component: CustomerProfileComponent }, // 项目详情(支持调试) { path: 'project/:projectId', component: ProjectDetailComponent, children: [ { path: '', redirectTo: 'order', pathMatch: 'full' }, { path: 'order', component: StageOrderComponent }, { path: 'requirements', component: StageRequirementsComponent }, { path: 'delivery', component: StageDeliveryComponent }, { path: 'aftercare', component: StageAftercareComponent } ] } ] } ``` --- ## 四、核心功能模块 ### 4.1 项目预加载页面 #### 4.1.1 功能描述 从企业微信会话进入时的首屏页面,负责获取企微上下文、识别用户身份、加载或创建项目。 #### 4.1.2 页面流程 ``` 加载页面 ↓ 显示骨架屏 ↓ 获取企微上下文 (WxworkSDK.getCurrentChatObject()) ├─ 群聊场景 → GroupChat └─ 联系人场景 → ContactInfo ↓ 获取当前用户 (WxworkSDK.getCurrentUser()) ↓ 得到 Profile (role决定权限) ↓ 根据场景加载数据 ├─ 群聊 → 查询 GroupChat.project │ ├─ 有项目 → 跳转项目详情 │ └─ 无项目 → 显示创建项目引导 └─ 联系人 → 跳转客户画像 ``` #### 4.1.3 核心代码示例 ```typescript // project-loader.component.ts export class ProjectLoaderComponent implements OnInit { loading = true; currentUser: FmodeObject | null = null; // Profile groupChat: FmodeObject | null = null; // GroupChat contact: FmodeObject | null = null; // ContactInfo project: FmodeObject | null = null; // Project async ngOnInit() { const cid = this.route.snapshot.paramMap.get('cid')!; const wxwork = new WxworkSDK({ cid, appId: 'crm' }); try { // 1. 获取企微上下文 const { GroupChat, Contact } = await wxwork.getCurrentChatObject(); this.groupChat = GroupChat; this.contact = Contact; // 2. 获取当前用户 this.currentUser = await wxwork.getCurrentUser(); // 3. 根据场景处理 if (this.groupChat) { await this.handleGroupChatScene(); } else if (this.contact) { await this.handleContactScene(); } } catch (error) { console.error('加载失败:', error); } finally { this.loading = false; } } async handleGroupChatScene() { // 查询群聊关联的项目 const projectPointer = this.groupChat!.get('project'); if (projectPointer) { // 有项目,跳转详情 this.router.navigate(['/wxwork', this.cid, 'project', projectPointer.id]); } else { // 无项目,显示创建引导 this.showCreateProjectGuide(); } } async handleContactScene() { // 跳转客户画像 this.router.navigate(['/wxwork', this.cid, 'customer', this.contact!.id]); } showCreateProjectGuide() { // 显示骨架屏 + 创建项目表单 this.showGuide = true; this.defaultProjectName = this.groupChat!.get('name'); } async createProject(projectName: string) { const Project = Parse.Object.extend('Project'); const project = new Project(); project.set('title', projectName); project.set('company', this.currentUser!.get('company')); project.set('status', '待分配'); project.set('currentStage', '订单分配'); await project.save(); // 关联群聊 this.groupChat!.set('project', project.toPointer()); await this.groupChat!.save(); // 跳转项目详情 this.router.navigate(['/wxwork', this.cid, 'project', project.id]); } } ``` #### 4.1.4 UI设计要点 - 骨架屏动画流畅,提升加载体验 - 创建项目表单简洁,默认填充群名 - 错误提示友好,引导用户处理异常 --- ### 4.2 客户画像组件 #### 4.2.1 功能描述 从联系人侧边栏进入,展示客户的完整画像信息,包括基础信息、所在群聊、项目列表、跟进记录等。 #### 4.2.2 数据结构 ```typescript interface CustomerProfile { basic: { name: string; mobile?: string; // 仅客服/组长可见 wechat?: string; // 仅客服/组长可见 avatar: string; source: string; // 来源渠道 tags: string[]; // 客户标签 }; groups: GroupChatInfo[]; // 所在群聊 projects: ProjectInfo[]; // 相关项目 followUp: FollowUpRecord[]; // 跟进记录 preferences: { style: string[]; budget: { min: number; max: number }; colorAtmosphere: string; }; } ``` #### 4.2.3 页面布局 ``` ┌────────────────────────────┐ │ 头像 + 姓名 + 来源标签 │ ├────────────────────────────┤ │ 基础信息卡片 │ │ - 手机号(权限控制) │ │ - 微信号(权限控制) │ │ - 客户类型 │ ├────────────────────────────┤ │ 客户画像 │ │ - 风格偏好 │ │ - 预算范围 │ │ - 色彩氛围 │ ├────────────────────────────┤ │ 所在群聊(可点击跳转) │ │ ┌──────────┐ ┌──────────┐│ │ │ 群1 - 项目A│ │ 群2 - 项目B││ │ └──────────┘ └──────────┘│ ├────────────────────────────┤ │ 历史项目列表 │ │ - 项目名称 + 状态 + 进度 │ ├────────────────────────────┤ │ 跟进记录时间线 │ │ - 咨询时间 │ │ - 报价时间 │ │ - 签约时间 │ └────────────────────────────┘ ``` #### 4.2.4 核心功能 1. **权限控制**: 手机号、微信号仅客服/组长可见 2. **群聊跳转**: 点击群聊卡片,调用 `WxworkSDK.openChat(chatId)` 跳转 3. **项目切换**: 点击项目卡片,跳转到项目详情 4. **跟进记录**: 展示客户全生命周期的跟进历史 --- ### 4.3 项目详情组件 #### 4.3.1 整体设计 **四大阶段流程**: ``` 订单分配 → 确认需求 → 交付执行 → 售后归档 ``` **页面头部导航**: - 四个圆圈导航(1234),点击切换阶段 - 当前阶段高亮,已完成阶段显示对勾 - 只读模式下显示"只读"徽标 **手机端布局**: - 竖屏优先,内容卡片化 - 重要信息优先展示 - 操作按钮固定在底部 #### 4.3.2 阶段1:订单分配 **主要操作人**: 客服 **核心功能**: 1. 填写项目基础信息 - 项目名称(默认群名) - 客户信息(关联ContactInfo) - 项目类型(全案/软装/硬装) - 截止时间 2. 创建报价清单 ```typescript interface QuotationBreakdown { spaces: SpaceQuotation[]; // 按空间报价 totalAmount: number; } interface SpaceQuotation { space: string; // 客厅、主卧、次卧等 area: number; // 面积 items: QuotationItem[]; subtotal: number; } interface QuotationItem { process: 'modeling' | 'softDecor' | 'rendering' | 'postProcess'; quantity: number; // 数量(如渲染张数) unitPrice: number; amount: number; } ``` 3. 分配设计师 - 选择主设计师(Profile.role="组员") - 可添加协作设计师 - 显示设计师当前负载 4. 报价审核流程 - 客服创建报价 → 财务审核 → 通过后生效 - 显示审核状态(待审核/已通过/已驳回) **页面布局**: ``` ┌────────────────────────────┐ │ 客户信息卡片 │ │ - 姓名 + 来源 + 偏好标签 │ ├────────────────────────────┤ │ 项目基础信息表单 │ │ - 项目名称 │ │ - 项目类型 │ │ - 截止时间 │ ├────────────────────────────┤ │ 报价清单编辑器 │ │ ┌──── 客厅 (40㎡) ────┐ │ │ │ 建模: 1套 x 2000 │ │ │ │ 软装: 1套 x 1500 │ │ │ │ 渲染: 3张 x 800 │ │ │ │ 后期: 3张 x 200 │ │ │ │ 小计: 6500元 │ │ │ └────────────────────┘ │ │ [+ 添加空间] │ │ 总计: 18,000元 │ ├────────────────────────────┤ │ 设计师分配 │ │ [选择主设计师] │ │ 当前负载: 5/8个项目 │ ├────────────────────────────┤ │ [提交审核] │ └────────────────────────────┘ ``` **数据存储**: ```typescript // Product表 - 按空间+工序存储报价项 const product = new Parse.Object('Product'); product.set('project', projectPointer); product.set('space', '客厅'); product.set('processType', 'modeling'); product.set('quotation', { price: 2000, quantity: 1, status: '待审核' }); ``` --- #### 4.3.3 阶段2:确认需求 **主要操作人**: 组长、组员 **核心功能**: **2.1 上传参考图** - 支持批量上传(多张参考图) - 每张图需填写描述说明 - 点击图片可查看大图和色彩分析 ```typescript // ProjectFile表 const refImage = new Parse.Object('ProjectFile'); refImage.set('project', projectPointer); refImage.set('fileType', 'reference'); refImage.set('fileUrl', imageUrl); refImage.set('fileName', 'living-room-ref-01.jpg'); refImage.set('stage', '确认需求'); refImage.set('data', { description: '现代简约风格客厅,暖色调为主', colorAnalysis: { primaryHue: 30, saturation: 45, temperature: '暖色调' } }); ``` **2.2 色彩分析弹窗** - 点击参考图,弹出色彩分析组件 - 显示色轮图、色彩分布、色温、饱和度 - 分析结果可保存到ProjectRequirement **2.3 上传CAD图纸** - 支持 `.dwg` `.dxf` 格式 - 必须填写图纸说明(如:原始结构图、水电布局图) - 供全员查看,辅助设计 **2.4 其他需求录入** - 功能需求(如:需要大储物空间) - 特殊要求(如:家有宠物) - 风格偏好(现代/中式/北欧等) **2.5 AI生成方案** **触发条件**: - 已上传至少1张参考图 - 已上传CAD图纸(可选) - 已填写基本需求 **调用流程**: ```typescript // ai-solution.service.ts async generateSolution(projectId: string): Promise { // 1. 收集数据 const requirement = await this.loadRequirement(projectId); const refImages = await this.loadReferenceImages(projectId); const colorAnalysis = await this.analyzeColors(refImages); // 2. 构建 Prompt const prompt = this.buildPrompt({ requirement, colorAnalysis, spaces: requirement.get('spaces') }); // 3. 调用大模型 const response = await this.callLLM(prompt); // 4. 保存方案 requirement.set('data', { ...requirement.get('data'), aiSolution: { content: response, generatedAt: new Date() } }); await requirement.save(); return response; } ``` **Prompt 模板**: ``` 你是一位资深的室内设计师,请根据以下信息生成详细的设计方案分析: ## 项目信息 - 空间类型:{spaces} - 总面积:{totalArea}㎡ - 风格偏好:{stylePreferences} ## 色彩分析 - 主色调:{primaryHue}°(色相) - 饱和度:{saturation}% - 色温:{temperature} - 色彩分布:{colorDistribution} ## 客户需求 {requirements} ## 任务 请生成以下内容: 1. 整体设计风格定位(200字) 2. 色彩方案建议(每个空间) 3. 材质搭配建议 4. 家具形体建议 5. 灯光布局建议 6. 注意事项和禁忌 请以Markdown格式输出,结构清晰,便于阅读。 ``` **方案展示**: - Markdown渲染,支持标题、列表、加粗 - 可重新生成(当参考图或需求更新时) - 保存历史版本 **页面布局**: ``` ┌────────────────────────────┐ │ 参考图网格 │ │ ┌───┐ ┌───┐ ┌───┐ │ │ │图1│ │图2│ │图3│ [+上传]│ │ └───┘ └───┘ └───┘ │ ├────────────────────────────┤ │ CAD图纸列表 │ │ 📄 原始户型图.dwg │ │ 📄 水电布局图.dwg │ │ [+ 上传CAD] │ ├────────────────────────────┤ │ 需求清单 │ │ ✓ 需要大储物空间 │ │ ✓ 智能家电 │ │ [+ 添加需求] │ ├────────────────────────────┤ │ [🤖 AI生成设计方案] │ ├────────────────────────────┤ │ AI方案展示区(折叠) │ │ 【已生成】 │ │ > 查看完整方案 │ └────────────────────────────┘ ``` --- #### 4.3.4 阶段3:交付执行 **主要操作人**: 组员(上传)、组长(审核) **核心功能**: **3.1 交付物上传** 按报价清单的空间和工序组织: ``` 客厅 ├─ 白模 (modeling) │ └─ [上传图片] 自查清单 状态 ├─ 软装 (softDecor) │ └─ [上传图片] 自查清单 状态 ├─ 渲染 (rendering) │ └─ [上传图片] 渲染进度 状态 └─ 后期 (postProcess) └─ [上传图片] 自查清单 状态 主卧 ├─ ... ``` **3.2 质量自查清单** 每个交付物都有对应的自查项(ProductCheck): ```typescript // 建模自查项 const modelChecks = [ '尺寸准确性', '材质贴图正确', '模型结构合理', '无破面和漏洞' ]; // 渲染自查项 const renderChecks = [ '光影自然', '色彩还原准确', '分辨率符合要求', '无明显瑕疵' ]; ``` 组员上传后需逐项打勾确认: ```typescript const check = new Parse.Object('ProductCheck'); check.set('project', projectPointer); check.set('checkType', 'model'); check.set('checkedBy', currentUserPointer); check.set('isPassed', true); check.set('items', [ { name: '尺寸准确性', isPassed: true, notes: '' }, { name: '材质贴图正确', isPassed: true, notes: '' }, { name: '模型结构合理', isPassed: false, notes: '需要调整沙发位置' } ]); ``` **3.3 组长审核与Issue** 组长可以对交付物提出Issue(ProjectIssue): ```typescript const issue = new Parse.Object('ProjectIssue'); issue.set('project', projectPointer); issue.set('reportedBy', leaderProfilePointer); issue.set('exceptionType', 'quality'); issue.set('severity', 'medium'); issue.set('description', '客厅渲染图色调偏冷,需要调整为暖色调'); issue.set('status', '待处理'); issue.set('data', { relatedDeliverable: productId, // 关联的Product relatedStage: '渲染', space: '客厅' }); ``` 组员在页面上会看到醒目的Issue提示,点击查看详情并处理。 **3.4 发起交付** 当组员完成所有交付物上传并自查通过后,可点击"发起交付"按钮: 1. 系统检查所有交付物状态 2. 向项目群聊发送通知(通过企微API) 3. 通知客户查看成果 4. 同时发起尾款收款请求 ```typescript async initiateDelivery() { // 1. 检查完成度 const deliveryRate = await this.checkDeliveryCompleteness(); if (deliveryRate < 100) { alert('还有交付物未完成,请检查'); return; } // 2. 更新项目阶段 project.set('currentStage', '尾款结算'); await project.save(); // 3. 发送企微消息 await this.wecorp.appchat.sendText( chatId, `【项目交付通知】\n${project.get('title')} 已完成全部设计工作,请查收成果。\n如有修改意见请及时反馈。` ); // 4. 创建尾款结算记录 const settlement = new Parse.Object('ProjectSettlement'); settlement.set('project', projectPointer); settlement.set('stage', '尾款'); settlement.set('amount', finalAmount); settlement.set('status', '待结算'); settlement.set('dueDate', new Date(Date.now() + 7 * 24 * 60 * 60 * 1000)); // 7天后 await settlement.save(); } ``` **页面布局**: ``` ┌────────────────────────────┐ │ 交付进度总览 │ │ ████████░░ 80% │ │ 已完成 12/15 项 │ ├────────────────────────────┤ │ 空间列表(可折叠) │ │ ▼ 客厅 │ │ ├─ 白模 ✓ │ │ ├─ 软装 ✓ │ │ ├─ 渲染 🔄 (进行中) │ │ └─ 后期 ⏸ (待开始) │ │ ▶ 主卧 │ │ ▶ 次卧 │ ├────────────────────────────┤ │ 当前工作:客厅渲染 │ │ ┌────────────────────┐ │ │ │ [上传图片] │ │ │ │ 已上传: 3张 │ │ │ │ 渲染进度: 60% │ │ │ └────────────────────┘ │ │ 质量自查清单 │ │ ☑ 光影自然 │ │ ☑ 色彩准确 │ │ ☐ 分辨率符合要求 │ ├────────────────────────────┤ │ ⚠️ Issue提醒 (2个待处理) │ │ • 客厅渲染色调需调整 │ │ • 主卧软装需补充细节 │ ├────────────────────────────┤ │ [发起交付](灰色/可点击) │ └────────────────────────────┘ ``` --- #### 4.3.5 阶段4:售后归档 **主要操作人**: 客服 **核心功能**: **4.1 尾款管理** - 显示尾款金额和截止日期 - 客户上传付款凭证(ProjectVoucher) - OCR识别凭证信息(金额、时间) - 财务确认收款 **4.2 客户评价** - 客户对项目进行评分(1-5星) - 填写评价内容 - 评价维度:设计质量、服务态度、交付时效 ```typescript const feedback = new Parse.Object('ProjectFeedback'); feedback.set('project', projectPointer); feedback.set('customer', customerPointer); feedback.set('stage', '客户评价'); feedback.set('feedbackType', 'praise'); feedback.set('rating', 5); feedback.set('content', '设计师非常专业,效果图很满意!'); feedback.set('status', '已完成'); ``` **4.3 项目复盘** - 自动生成项目复盘报告(AI生成) - SOP各阶段执行情况分析 - 项目亮点与改进建议 - 团队表现评分 **4.4 项目归档** - 客服点击"归档项目"按钮 - 项目状态更新为"已完成" - 群聊的 `GroupChat.project` 设为 null(解除关联) - 项目进入历史项目列表 ```typescript async archiveProject() { // 1. 检查是否可归档 if (!this.checkCanArchive()) { alert('请先完成尾款结算和客户评价'); return; } // 2. 更新项目状态 project.set('status', '已完成'); project.set('data', { ...project.get('data'), archivedAt: new Date(), archivedBy: currentUserPointer.id }); await project.save(); // 3. 解除群聊关联 groupChat.set('project', null); await groupChat.save(); // 4. 发送归档通知 await this.wecorp.appchat.sendText( chatId, `【项目归档通知】\n${project.get('title')} 已完成归档,感谢您的信任与支持!` ); // 5. 返回工作台 this.router.navigate(['/wxwork', this.cid, 'project-loader']); } ``` **页面布局**: ``` ┌────────────────────────────┐ │ 尾款信息 │ │ 应收金额: ¥5,400 │ │ 截止日期: 2025-10-20 │ │ 状态: 已收款 ✓ │ ├────────────────────────────┤ │ 付款凭证 │ │ ┌────────────────────┐ │ │ │ [查看凭证图片] │ │ │ │ 识别金额: 5400元 │ │ │ │ 付款时间: 2025-10-18│ │ │ └────────────────────┘ │ ├────────────────────────────┤ │ 客户评价 │ │ ⭐⭐⭐⭐⭐ 5.0分 │ │ "设计师非常专业,效果图很│ │ 满意!交付及时。" │ ├────────────────────────────┤ │ 项目复盘 │ │ [查看完整复盘报告] │ │ • 项目总评分: 92分 │ │ • 交付准时率: 100% │ │ • 客户满意度: 5.0星 │ ├────────────────────────────┤ │ [📦 归档项目] │ └────────────────────────────┘ ``` --- ## 五、技术实现要点 ### 5.1 企微SDK集成 **获取上下文**: ```typescript // 从企微会话获取群聊或联系人 const { GroupChat, Contact, currentChat } = await wxwork.getCurrentChatObject(); if (GroupChat) { // 群聊场景 const project = GroupChat.get('project'); } else if (Contact) { // 联系人场景 const name = Contact.get('name'); } ``` **获取当前用户**: ```typescript // 获取当前登录的员工信息 const profile = await wxwork.getCurrentUser(); const role = profile.get('role'); // 客服/组员/组长 ``` **发送企微消息**: ```typescript await wecorp.appchat.sendText(chatId, '消息内容'); await wecorp.appchat.sendImage(chatId, imageUrl); ``` ### 5.2 Parse数据操作 **创建记录**: ```typescript const Project = Parse.Object.extend('Project'); const project = new Project(); project.set('title', '项目名称'); project.set('company', companyPointer); await project.save(); ``` **查询记录**: ```typescript const query = new Parse.Query('Project'); query.equalTo('company', companyId); query.equalTo('status', '进行中'); query.include('customer', 'assignee'); const projects = await query.find(); ``` **更新记录**: ```typescript project.set('currentStage', '确认需求'); await project.save(); ``` ### 5.3 AI大模型调用 参考示例代码 `/home/ryan/workspace/nova/nova-admin/projects/ai-k12-daofa/src/modules/daofa/search/search.component.ts` ```typescript import { HttpClient } from '@angular/common/http'; export class AiSolutionService { constructor(private http: HttpClient) {} async generateSolution(prompt: string): Promise { const response = await this.http.post('https://api.example.com/v1/chat/completions', { model: 'qwen-plus', messages: [ { role: 'system', content: '你是一位资深室内设计师' }, { role: 'user', content: prompt } ], temperature: 0.7, max_tokens: 2000 }).toPromise(); return response.choices[0].message.content; } } ``` ### 5.4 移动端适配 **Ionic组件**: ```html 项目详情 客户信息 ... ``` **响应式布局**: ```scss .project-detail { @media (max-width: 768px) { // 手机端样式 .header-nav { flex-direction: column; } } } ``` --- ## 六、数据流程图 ### 6.1 项目创建流程 ``` 客服在群聊打开工具 ↓ 项目预加载页 ↓ 检测无项目 → 显示创建引导 ↓ 填写项目名称 → 创建Project ↓ 关联GroupChat.project ↓ 跳转项目详情 - 订单分配阶段 ``` ### 6.2 需求确认流程 ``` 组员上传参考图 → 保存到ProjectFile ↓ 点击参考图 → 色彩分析 → 保存到ProjectRequirement ↓ 填写需求清单 ↓ 点击"AI生成方案" → 调用大模型 ↓ 生成方案 → 保存到ProjectRequirement.data.aiSolution ↓ 方案展示 → Markdown渲染 ``` ### 6.3 交付执行流程 ``` 组员上传交付物 → 保存到Product ↓ 填写质量自查清单 → 保存到ProductCheck ↓ 组长审核 → 提出Issue(如有问题) ↓ 组员修改 → 重新上传 ↓ 所有交付物完成 → 点击"发起交付" ↓ 更新项目阶段 → 发送企微通知 → 创建尾款结算 ``` --- ## 七、测试用例 ### 7.1 项目创建测试 | 测试场景 | 前置条件 | 操作步骤 | 预期结果 | |---------|---------|---------|---------| | 从群聊创建项目 | 群聊无关联项目 | 打开工具 → 填写项目名 → 点击创建 | 项目创建成功,跳转详情页 | | 重复创建检测 | 群聊已有项目 | 打开工具 | 直接跳转到现有项目详情 | | 权限检查 | 非客服角色 | 打开工具 → 尝试创建项目 | 提示"无权限" | ### 7.2 AI方案生成测试 | 测试场景 | 前置条件 | 操作步骤 | 预期结果 | |---------|---------|---------|---------| | 首次生成方案 | 已上传参考图和需求 | 点击"AI生成方案" | 调用大模型,生成方案并展示 | | 重新生成 | 已有方案 | 更新需求 → 重新生成 | 生成新方案,保留历史版本 | | 缺少数据 | 未上传参考图 | 点击"AI生成方案" | 提示"请先上传参考图" | ### 7.3 交付物上传测试 | 测试场景 | 前置条件 | 操作步骤 | 预期结果 | |---------|---------|---------|---------| | 上传白模图 | 在交付执行阶段 | 选择文件 → 上传 | 图片保存成功,显示在列表 | | 质量自查 | 已上传交付物 | 勾选自查项 → 保存 | 自查记录保存成功 | | 组长提Issue | 组长角色 | 查看交付物 → 提出问题 | Issue创建成功,组员可见 | --- ## 八、迭代计划 ### Phase 1: 核心流程(2周) - [x] 项目预加载页面 - [x] 客户画像组件 - [x] 项目详情框架(四阶段导航) - [x] 订单分配阶段(基础功能) ### Phase 2: 需求与AI(2周) - [ ] 参考图上传与管理 - [ ] 色彩分析组件 - [ ] AI方案生成服务 - [ ] 需求清单管理 ### Phase 3: 交付与质控(2周) - [ ] 交付物上传管理 - [ ] 质量自查清单 - [ ] 组长审核与Issue - [ ] 发起交付流程 ### Phase 4: 售后与优化(1周) - [ ] 尾款管理 - [ ] 客户评价 - [ ] 项目复盘 - [ ] 归档功能 ### Phase 5: 测试与发布(1周) - [ ] 集成测试 - [ ] 性能优化 - [ ] 用户培训 - [ ] 正式发布 --- ## 九、附录 ### 9.1 状态枚举 **项目状态 (Project.status)**: - `待分配`: 新建项目,等待分配设计师 - `进行中`: 设计中 - `已暂停`: 客户要求暂停 - `已延期`: 超期 - `已完成`: 已归档 - `已取消`: 项目取消 **项目阶段 (Project.currentStage)**: - `订单分配` - `确认需求` - `方案确认`(并列任务) - `建模` - `软装` - `渲染` - `后期` - `尾款结算` - `客户评价` - `投诉处理` **审核状态 (reviewStatus)**: - `pending`: 待审核 - `approved`: 已通过 - `rejected`: 已驳回 - `revision_required`: 需要修改 ### 9.2 权限代码 ```typescript // 权限检查辅助函数 function hasPermission(role: string, action: string): boolean { const permissions = { '客服': ['createProject', 'viewCustomerPhone', 'createQuotation', 'initiateSettlement'], '组员': ['uploadDeliverable', 'qualityCheck', 'uploadReference'], '组长': ['assignDesigner', 'reviewDeliverable', 'createIssue', 'viewCustomerPhone'], '财务': ['approveQuotation', 'confirmPayment'] }; return permissions[role]?.includes(action) || false; } // 使用示例 if (!hasPermission(currentUser.get('role'), 'createProject')) { alert('您没有权限创建项目'); return; } ``` --- **文档结束** 如有疑问,请联系产品团队。