# 项目负载时间轴甘特图优化 **日期**: 2025-10-22 14:00 **需求**: 优化"项目负载时间轴"甘特图,让组长清晰看到每个项目的负载情况 --- ## 问题背景 用户指出之前优化错了图表: - **上方图表**: "工作量负载概览" - 显示设计师每日工作状态(忙碌/空闲/请假) - **下方图表**: "项目负载时间轴" - 显示每个项目的具体排期和负载情况 需求是优化下方的"项目负载时间轴",让每个项目的负载情况更清晰。 --- ## 优化内容 ### 1. 还原上方图表标题 **文件**: `dashboard.html` 第65-69行 ```html

工作量负载概览

设计师每日工作状态一目了然

``` **说明**: - 将之前误改的"项目负载时间图"还原为"工作量负载概览" - 副标题改为"设计师每日工作状态一目了然" --- ### 2. 优化下方甘特图标题和说明 **文件**: `dashboard.html` 第89-91行 ```html
项目负载时间轴
👤 设计师按负载由高到低排列 | 🎨 每个条形代表一个项目 | 🔴超期 🟠临期 🟢正常
``` **改进**: - ✅ 保留"项目负载时间轴"名称 - ✅ 增加emoji图标说明 - ✅ 明确"每个条形代表一个项目" --- ### 3. 增强Tooltip信息 **文件**: `dashboard.ts` 第1476-1545行 #### 新增信息项: 1. **项目名称** - 🎨 图标 + 加粗显示 2. **紧急度徽章** - 🔥高紧急 / ⚡中紧急 / ✓正常 3. **VIP标识** - ⭐ VIP(如果是VIP客户) 4. **设计师信息** - 👤 名称 + 负载状态图标(🟢🟡🔴) 5. **当前阶段** - 📋 阶段名称 6. **项目周期** - 📅 开始~结束日期 + 总天数 7. **剩余状态** - ⏱️ 剩余X天 / 今天截止 / 已超期X天(彩色显示) 8. **点击提示** - 💡 点击条形可查看项目详情 #### Tooltip显示示例: ``` ┌──────────────────────────────────────┐ │ 🎨 现代简约客厅设计方案 │ │ 🔥 高紧急 ⭐ VIP │ ├──────────────────────────────────────┤ │ 👤 设计师:张三 🔴 超负荷 │ │ 📋 阶段:施工图深化 │ │ 📅 周期:2025/10/20 ~ 2025/10/30 (10天) │ │ ⏱️ 状态:剩余3天 │ ├──────────────────────────────────────┤ │ 💡 点击条形可查看项目详情 │ └──────────────────────────────────────┘ ``` --- ### 4. 优化Y轴设计师标签 **文件**: `dashboard.ts` 第1562-1632行 #### 新增功能: 1. **负载状态图标** - `🔥` = 超负荷(5+项目) - `⚡` = 忙碌(3-4项目) - `○` = 空闲(0-2项目) 2. **项目数量徽章**(带彩色背景) - 🔴 红色徽章 = 5+项目(超负荷) - 🟠 橙色徽章 = 3-4项目(忙碌) - 🟢 绿色徽章 = 1-2项目(轻负载) - ⚪ 灰色徽章 = 0项目(空闲) 3. **视觉效果** - 字体加粗(weight: 500) - 字号增大(13px) - 徽章背景色(红/橙/绿/灰) - 圆角边框(borderRadius: 3) #### Y轴显示示例: ``` 🔥 张三 5 ← 红色徽章,超负荷 ⚡ 李四 3 ← 橙色徽章,忙碌 ⚡ 王五 3 ← 橙色徽章,忙碌 ○ 赵六 1 ← 绿色徽章,轻负载 ○ 孙七 0 ← 灰色徽章,空闲 ``` --- ### 5. 项目条形增强显示 **文件**: `dashboard.ts` 第1668-1777行 #### 核心改进: 1. **增加条形高度** - 从 `0.5 * rowHeight` 提升到 `0.6 * rowHeight` - 最小高度从 10px 提升到 16px - 让项目名称有足够空间显示 2. **项目名称直接显示** - 条形宽度 ≥ 50px:显示"🔥 项目名称" - 条形宽度 30-50px:仅显示紧急度图标(🔥⚡✓) - 条形宽度 < 30px:仅显示彩色条形 3. **紧急度图标集成** - 🔥 = 高紧急 - ⚡ = 中紧急 - ✓ = 正常 4. **超负荷视觉强化** - 如果设计师处于超负荷状态,项目条形添加: - 阴影效果(shadowBlur: 8) - 红色阴影(rgba(220, 38, 38, 0.4)) - 阴影偏移(shadowOffsetY: 2) 5. **文字样式优化** - 字号:12px(增大) - 字重:600(加粗) - 白色文字 + 黑色描边(lineWidth: 0.8) - 文字阴影(textShadowBlur: 3) - 左侧间距:8px #### 项目条形显示逻辑: ```typescript if (width >= 50) { // 显示:🔥 项目名称(截断过长部分) const fullText = `${urgencyIcon} ${displayName}`; } else if (width >= 30) { // 仅显示:🔥 const urgencyIcon = '🔥'; // 或 ⚡ 或 ✓ } else { // 仅显示彩色条形,无文字 } ``` --- ### 6. 增加图表标题和图例 **文件**: `dashboard.ts` 第1546-1560行 #### 新增图表标题: ```typescript title: { text: this.ganttScale === 'week' ? '本周项目排期' : '本月项目排期', subtext: '每个条形代表一个项目,颜色越深紧急度越高', left: 'center', top: 10, textStyle: { fontSize: 15, color: '#374151', fontWeight: 600 }, subtextStyle: { fontSize: 12, color: '#6b7280' } } ``` #### 优化图例: ```typescript legend: { data: ['🔥 高紧急', '⚡ 中紧急', '✓ 正常', '🟢 可接单', '🟡 忙碌', '🔴 超负荷'], bottom: 10, itemGap: 20, textStyle: { fontSize: 12, color: '#6b7280' } } ``` --- ### 7. 优化布局空间 **文件**: `dashboard.ts` 第1560行 ```typescript grid: { left: 150, // 增加左侧空间(原110px) right: 70, // 增加右侧空间(原64px) top: 60, // 增加顶部空间(原30px) bottom: 70 // 增加底部空间(原60px) } ``` **说明**: - 左侧150px:容纳设计师名称 + 图标 + 项目数徽章 - 顶部60px:容纳图表标题和副标题 - 底部70px:容纳图例说明 --- ### 8. 增加甘特图容器高度 **文件**: `dashboard.scss` 第168-172行 ```scss .gantt-container { width: 100%; height: 600px; // 增加高度(原500px) min-height: 500px; } ``` **说明**: - 增加高度到600px,让更多项目可见 - 减少滚动需求,提升浏览体验 --- ## 优化效果对比 ### 优化前 | 问题 | 描述 | |------|------| | ❌ 项目名称不显示 | 无法知道是哪个项目 | | ❌ 紧急度不明显 | 只有颜色区分 | | ❌ 条形太细 | 不易识别 | | ❌ Y轴信息简单 | 只有名称和圆点 | | ❌ Tooltip信息少 | 缺少关键数据 | | ❌ 无图表标题 | 不知道时间范围 | ### 优化后 | 改进 | 描述 | |------|------| | ✅ 项目名称直接显示 | 🔥 项目名称(如果空间足够) | | ✅ 紧急度图标清晰 | 🔥⚡✓ 三种图标 | | ✅ 条形更粗 | 高度增加20%(0.5→0.6) | | ✅ Y轴彩色徽章 | 🔥张三 5(红色徽章) | | ✅ Tooltip信息丰富 | 8项关键信息 | | ✅ 图表标题清晰 | "本周/本月项目排期" | --- ## 视觉效果示意 ``` ┌────────────────────────────────────────────────────────────────────┐ │ 本周项目排期 │ │ 每个条形代表一个项目,颜色越深紧急度越高 │ ├────────────────────────────────────────────────────────────────────┤ │ │ │ 🔥 张三 5 ████████████████████████████████████████ │ │ 🔥 现代简约客厅 🔥 轻奢卧室 ⚡ 北欧书房 │ │ │ │ ⚡ 李四 3 ████████████████████████░░░░░░░░░░░░ │ │ ⚡ 工业风餐厅 ✓ 新中式茶室 ✓ 日式和室 │ │ │ │ ○ 王五 1 ████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │ │ ✓ 美式田园客厅 │ │ │ │ ○ 赵六 0 ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │ │ (空闲可接单) │ │ │ ├────────────────────────────────────────────────────────────────────┤ │ 图例:🔥高紧急 ⚡中紧急 ✓正常 🟢可接单 🟡忙碌 🔴超负荷 │ └────────────────────────────────────────────────────────────────────┘ 颜色说明: 🔴 深红色 = 高紧急项目 🟠 橙色 = 中紧急项目 🟢 绿色 = 正常项目 ``` --- ## 使用场景 ### 场景1:查看本周项目排期 **操作**: 打开页面,切换到"周视图" **效果**: - 看到标题"本周项目排期" - Y轴显示 `🔥 张三 5`,立即知道张三超负荷 - 看到张三的5个项目条形,每个都显示"🔥 项目名称" - 条形颜色深浅表示紧急度:深红 > 橙 > 绿 ### 场景2:查看项目详细信息 **操作**: 鼠标悬浮在任意项目条形上 **效果**: - 弹出详细Tooltip - 显示:项目名称、紧急度、VIP标识、设计师、阶段、周期、剩余天数 - 底部提示"💡 点击条形可查看项目详情" ### 场景3:识别超负荷设计师 **操作**: 查看Y轴左侧 **效果**: - 看到 `🔥` 图标 + 红色徽章 = 超负荷 - 看到 `⚡` 图标 + 橙色徽章 = 忙碌 - 看到 `○` 图标 + 绿/灰徽章 = 可接单 - 超负荷设计师的项目条形带红色阴影效果 ### 场景4:快速识别项目紧急度 **操作**: 查看项目条形 **效果**: - 🔥 图标 + 深红色 = 高紧急 - ⚡ 图标 + 橙色 = 中紧急 - ✓ 图标 + 绿色 = 正常 - 条形上直接显示项目名称(如空间足够) --- ## 技术要点 ### 1. 条形自适应文本显示 ```typescript if (width >= 50) { // 显示完整:图标 + 项目名称 return { type: 'group', children: [rect, text] }; } else if (width >= 30) { // 仅显示图标 return { type: 'group', children: [rect, icon] }; } else { // 仅显示条形 return rect; } ``` ### 2. Y轴Rich Text富文本 ```typescript formatter: (val: string) => { const countDisplay = count >= 5 ? `{highCount|${count}}` : // 红色徽章 count >= 3 ? `{mediumCount|${count}}` : // 橙色徽章 count >= 1 ? `{lowCount|${count}}` : // 绿色徽章 `{idleCount|${count}}`; // 灰色徽章 return `${statusIcon} {name|${text}} ${countDisplay}`; } ``` ### 3. 超负荷视觉强化 ```typescript if (workloadStatus === 'overloaded') { rectStyle.shadowBlur = 8; rectStyle.shadowColor = 'rgba(220, 38, 38, 0.4)'; rectStyle.shadowOffsetY = 2; } ``` ### 4. Tooltip动态内容 ```typescript const remainingDays = Math.ceil((end.getTime() - now.getTime()) / DAY); const remainingText = remainingDays > 0 ? `剩余${remainingDays}天` : remainingDays === 0 ? '今天截止' : `已超期${Math.abs(remainingDays)}天`; const remainingColor = remainingDays > 7 ? '#16a34a' : // 绿色 remainingDays > 0 ? '#ea580c' : // 橙色 '#dc2626'; // 红色 ``` --- ## 文件变更清单 | 文件 | 变更内容 | 行数 | |------|----------|------| | `dashboard.html` | 还原上方标题 + 优化下方说明 | 65-91 | | `dashboard.ts` | Tooltip增强 + Y轴徽章 + 条形显示 + 标题图例 | 1476-1777 | | `dashboard.scss` | 增加容器高度 | 168-172 | --- ## 测试要点 ### 视觉测试 - [ ] 上方图表标题显示"工作量负载概览" - [ ] 下方图表标题显示"项目负载时间轴" - [ ] 图表顶部显示"本周/本月项目排期" - [ ] Y轴显示图标 + 名称 + 彩色徽章 - [ ] 项目条形显示"🔥 项目名称"(如空间足够) - [ ] 底部图例清晰显示 ### 交互测试 - [ ] 悬浮项目条形显示详细Tooltip - [ ] Tooltip包含8项关键信息 - [ ] 剩余天数颜色正确(绿/橙/红) - [ ] 超负荷设计师的项目条形有红色阴影 - [ ] 周/月视图切换正常 - [ ] 滚动条正常工作 ### 数据测试 - [ ] 设计师按项目数从多到少排序 - [ ] 项目数量徽章颜色正确(红/橙/绿/灰) - [ ] 紧急度图标正确(🔥⚡✓) - [ ] 项目颜色正确(红/橙/绿) - [ ] VIP标识显示正确 - [ ] 负载状态图标正确(🔥⚡○) --- ## 优化总结 ### 核心改进 1. ✅ **项目名称直接可见** - 不用悬浮就能看到是哪个项目 2. ✅ **紧急度一目了然** - 🔥⚡✓ 图标 + 颜色双重标识 3. ✅ **负载状态清晰** - Y轴徽章(红/橙/绿/灰)+ 图标(🔥⚡○) 4. ✅ **信息密度提升** - Tooltip显示8项关键数据 5. ✅ **视觉层次分明** - 标题、图例、徽章、阴影 6. ✅ **空间利用优化** - 增加高度(600px)+ 左侧空间(150px) ### 用户价值 组长打开页面后3秒内即可: 1. **看到时间范围** - "本周/本月项目排期" 2. **识别超负荷** - 🔥图标 + 红色徽章 + 红色阴影 3. **看到项目名称** - 条形上直接显示 4. **了解紧急度** - 图标 + 颜色 5. **查看详细信息** - 悬浮Tooltip --- **实施完成时间**: 2025-10-22 14:00 **状态**: ✅ 已完成并优化 **测试状态**: ✅ 无Lint错误