首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >#WorkBuddy#零代码生成团队OKR雷达图:三组团队、6维度、交互式切换,一篇搞定

#WorkBuddy#零代码生成团队OKR雷达图:三组团队、6维度、交互式切换,一篇搞定

原创
作者头像
用户12592343
修改2026-06-30 15:56:17
修改2026-06-30 15:56:17
80
举报
文章被收录于专栏:使用经验使用经验

一、我遇到了什么问题?

每到月末,团队OKR复盘就是一场噩梦。产品、技术、设计三个团队各有6个维度的OKR指标,Excel表格扔过来一堆数字,老板开会问"哪个维度拖后腿了?""本月比上月进步了吗?""三组横向对比差异在哪?"——我盯着表格面面相觑。

传统做法是:把数据手动填进PPT雷达图模板,调格式,导出截图,再贴到汇报文档里。三组团队三张图,改一个数据就得重来一遍。更烦的是,PPT雷达图不支持团队切换、不显示达成率、不比对上月趋势——全是死图。

于是我用 WorkBuddy 花10分钟生成了一个单文件HTML页面,完美解决所有痛点:

  • 三组团队一键切换(产品/技术/设计)
  • 6维度雷达图(目标值 vs 实际值双环对比)
  • 侧栏数据面板(总体完成率、最强/最弱维度、环比趋势)
  • 纯前端零依赖(单HTML文件,双击即用,无需npm/构建工具)
  • 响应式布局(PC/平板自适应)

下面完整记录整个实现过程,跟着操作就能复现。


二、环境与背景

  • 工具:WorkBuddy(腾讯云AI办公助手)
  • 技术栈:原生 HTML + CSS + Canvas API(无任何外部库)
  • 数据来源:团队OKR月度目标值 vs 实际值
  • 耗时:从描述需求到拿到可用页面,约10分钟

核心思路:用 Canvas 手绘多边形雷达图,JavaScript 驱动数据切换,CSS Grid/Flexbox 搞定响应式布局。


三、分步骤实操

3.1 向 WorkBuddy 描述需求

打开 WorkBuddy,新建对话,输入以下提示词(这是我的原文):

代码语言:javascript
复制
帮我做一个团队OKR雷达图可视化页面,要求:
1. 单文件HTML,不依赖任何外部库
2. 6个维度:产品交付、技术质量、用户增长、团队协作、客户满意度、创新能力
3. 三组团队:产品团队、技术团队、设计团队,支持Tab切换
4. 每个维度显示目标值和实际值双环对比
5. 右侧栏显示:总体完成率(环形进度条)、最强/最弱维度、环比上月趋势
6. 响应式设计,手机和PC都能看

WorkBuddy 直接生成了完整可用的代码。接下来我带你看每一块是怎么实现的。

3.2 数据结构设计

雷达图的核心是数据。我们用一个三层嵌套的对象来管理三组团队:

代码语言:javascript
复制
const teamsData = {
  product: {
    name: '产品团队',
    dims: ['产品交付', '技术质量', '用户增长', '团队协作', '客户满意度', '创新能力'],
    target: [92, 85, 88, 90, 95, 80],   // 目标值
    actual: [85, 78, 75, 92, 88, 72],   // 实际值
    lastMonth: [80, 75, 70, 88, 85, 68], // 上月值(用于环比)
    color: '#6c5ce7'                     // 专属色
  },
  tech:   { /* 技术团队数据 */ },
  design: { /* 设计团队数据 */ }
};

每个维度值范围 0-100,代表达成百分比。三组团队共用6个维度但目标和实际值各不相同。

3.3 Canvas 手绘雷达图

这是整个项目的核心技术点。不用任何图表库,纯 Canvas API 绘制网状雷达图:

步骤①:绘制背景网格

代码语言:javascript
复制
// 5层同心圆 + 从圆心发散的N条轴线
for (let level = 1; level <= 5; level++) {
  const r = (maxR / 5) * level;
  ctx.arc(cx, cy, r, 0, Math.PI * 2); // 同心圆
  ctx.stroke();
}
for (let i = 0; i < N; i++) {
  const angle = (Math.PI * 2 / N) * i - Math.PI / 2;
  ctx.moveTo(cx, cy);
  ctx.lineTo(cx + maxR * cos(angle), cy + maxR * sin(angle)); // 轴线
  ctx.stroke();
}

关键:6个维度均匀分布在360°圆周上,每个维度角度 = 2π / N。起始角度 -π/2 让第一个维度从正上方开始,视觉上更符合阅读习惯。

步骤②:绘制双环多边形

代码语言:javascript
复制
// 目标值 → 虚线多边形(六边形)
drawPolygon(ctx, data.target, ...);  // 虚线描边

// 实际值 → 实心多边形 + 数据点
drawPolygon(ctx, data.actual, ...);  // 半透明填充 + 实线 + 圆点

drawPolygon 函数把百分比值转换成极坐标上的点,再连成多边形。目标值用虚线区分,实际值用半透明填充 + 圆点标注,一目了然。

步骤③:维度标签与数值标注

代码语言:javascript
复制
for (let i = 0; i < N; i++) {
  const angle = (Math.PI * 2 / N) * i - Math.PI / 2;
  // 标签放在多边形外侧
  ctx.fillText(data.dims[i], lx, ly);
  // 实际值标在对应数据点旁边
  ctx.fillText(data.actual[i], vx, vy);
}

3.4 三组团队Tab切换

切换逻辑非常简单,点击Tab触发 switchTeam() 函数:

代码语言:javascript
复制
function switchTeam(teamKey) {
  currentTeam = teamKey;
  // 1. 切换Tab高亮
  document.querySelectorAll('.tab').forEach(t => 
    t.classList.toggle('active', t.dataset.team === teamKey)
  );
  // 2. 重绘雷达图
  drawRadar(teamKey);
  // 3. 更新侧栏数据
  updateSidebar(teamKey);
}

三件事同步完成:Tab样式切换 → Canvas重绘 → 侧栏数据刷新。整个过程不到50ms,视觉上无缝过渡。

3.5 侧栏数据面板

三个统计卡片,数据全部从 JavaScript 实时计算:

① 总体完成率(环形进度条)

代码语言:javascript
复制
const rates = data.actual.map((a, i) => 
  Math.round(a / data.target[i] * 100)
);
const overall = Math.round(rates.reduce((s, v) => s + v, 0) / rates.length);

用 Canvas 再画一个环形进度条,弧长 = 完成率 × 360°。

② 最强/最弱维度

代码语言:javascript
复制
let bestIdx = 0, worstIdx = 0;
rates.forEach((r, i) => {
  if (r > rates[bestIdx]) bestIdx = i;
  if (r < rates[worstIdx]) worstIdx = i;
});

遍历6个维度的达成率,取最大值和最小值,配合绿色/红色高亮展示。

③ 环比趋势

代码语言:javascript
复制
const changes = data.actual.map((a, i) => ({
  dim: data.dims[i],
  pct: Math.round((a - data.lastMonth[i]) / data.lastMonth[i] * 100)
}));
changes.sort((a, b) => b.change - a.change); // 按涨幅排序

直接用本月减上月算出环比变化百分比,涨了标绿、跌了标红。

3.6 响应式布局

CSS Flexbox + flex-wrap 搞定:

代码语言:javascript
复制
.main {
  display: flex;
  gap: 16px;
  flex-wrap: wrap;        /* 小屏自动换行 */
}
.chart-panel {
  flex: 1 1 580px;         /* 雷达图区弹性宽度 */
  min-width: 400px;
}
.sidebar {
  flex: 0 0 280px;         /* 侧栏固定宽度 */
  min-width: 260px;
}

@media (max-width: 900px) {
  .main { flex-direction: column; }   /* 窄屏纵向堆叠 */
}

雷达图Canvas也随容器宽度自适应缩放,window.resize 事件触发重绘。


四、效果展示

最终效果:

  • 默认展示产品团队,紫色系雷达图,6个维度一目了然
  • 点击技术/设计Tab,颜色切换(蓝色/橙色),数据同步更新
  • 侧栏实时显示:完成率环形图、最强维度绿色高亮、最弱维度红色警告、6维度环比涨跌排序
  • 手机上打开:Tab横向排列、图表和侧栏纵向堆叠,自适应良好

整个页面零依赖、零构建、零部署,保存为 .html 文件,浏览器直接打开就能用。发给老板或同事只需要传一个文件。


五、可延伸的玩法

基于这个框架,你可以轻松改造成:

  1. 个人绩效雷达图:改成个人KPI维度,月度自评用
  2. 竞品对比雷达图:把三组团队改成三个竞品,对比各维度优劣势
  3. 多周期回溯:加一个时间滑块,看过去12个月的趋势动画
  4. 数据导入:加一个CSV/JSON导入按钮,产品经理自己填数据就行

六、总结

这个OKR雷达图的本质就是:一套极坐标绘图公式 + 一份结构化数据 + 一个Tab切换逻辑。WorkBuddy 帮我把这些用 Canvas API 和原生 JS 组装成可用的页面,省去了查文档、调布局、手写响应式CSS的时间。

整个过程最爽的地方是——我说需求,它出代码,我只需要微调数据就上线。对于非前端背景的PM/运营同学来说,这种"零代码搭看板"的能力是实打实提效的。

如果你也受够了PPT画雷达图的痛苦,现在就打开 WorkBuddy,把上面的提示词复制进去试试。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、我遇到了什么问题?
  • 二、环境与背景
  • 三、分步骤实操
    • 3.1 向 WorkBuddy 描述需求
    • 3.2 数据结构设计
    • 3.3 Canvas 手绘雷达图
    • 3.4 三组团队Tab切换
    • 3.5 侧栏数据面板
    • 3.6 响应式布局
  • 四、效果展示
  • 五、可延伸的玩法
  • 六、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档