Focalboard 会议议程模板(Meeting Agenda Template):用看板工作流管理例会与 1:1 的实战指南
【免费下载链接】focalboardFocalboard is an open source, self-hosted alternative to Trello, Notion, and Asana.项目地址: https://gitcode.com/GitHub_Trending/fo/focalboard
导读
本文基于 Focalboard 官方博客《Template: Meeting agenda》展开,讲解如何用 Focalboard 的看板视图为周期性会议(团队例会、1:1 等)搭建一套"会前收集议题 → 会中逐项推进 → 会后待办跟进"的轻量工作流。文中除完整还原模板的看板列设计与操作步骤外,还结合本仓库源码,剖析.boardarchive模板归档的底层结构、导入导出的完整调用链,以及内置模板的加载机制,帮助你既会用模板,也理解模板背后的实现原理。
一、为什么用 Focalboard 管理会议议程
Focalboard 官方团队在社区服务器上使用 Focalboard 数周后,发现了一些超出预期的使用场景,其中之一便是用它来承载周期性会议议程(如团队例会与 1:1)。相比专用的会议工具或纯文档式议程,Focalboard 的优势在于:
- 看板即议程:每一张卡片就是一个议题,无需在文档与任务清单之间来回切换;
- 状态即进度:通过拖拽卡片切换列状态,会议的推进过程自然沉淀为可视化的进展记录;
- 议程可复用:模板可以导出为
.boardarchive归档文件,跨实例分享与复用; - 会后有跟进:未能当场解决的议题进入"稍后回顾"列,由负责人带回到下一次会议,形成闭环。
二、模板的看板工作流设计
作者最初从Project Tasks(项目任务)模板起步,但在实际使用中调整为以下三个列,更适合会议场景:
| 列名 | 含义 | 用法 |
|---|---|---|
| To Discuss(待讨论) | 议题队列 | 与会者在会前/会中将新议题拖入此列排队 |
| Revisit Later(稍后回顾) | 待跟进议题 | 会中未能解决、需要后续跟进的议题移入此列 |
| Done / Archived(已完成/归档) | 已完结议题 | 讨论完毕、无需跟进的议题移入此列 |
流转闭环如下:
- 会议参与者把新议题放入To Discuss列排队;
- 会议进行中逐项讨论,大多数议题讨论完直接拖到Done / Archived;
- 少数需要后续跟进的议题移到Revisit Later;
- 议题负责人(owner)在下次会议前,把Revisit Later中已准备好重新讨论的议题移回To Discuss,开启下一轮循环。
这一设计与 Focalboard 看板视图(Kanban)的"按属性分组"能力天然契合:议题卡片按 Status 属性自动归入各列,拖动即更新属性值,无需手动编辑字段。
模板在仓库中的真实形态
在 server/assets/templates-boardarchive 目录下,可以找到这份模板的内置实现。其中b7wnw9awd4pnefryhq51apbzb4c目录对应的正是Meeting Agenda模板(version.json标记归档版本为 2)。从归档的board块中可以读到其真实的卡片属性定义,与博客描述完全一致:
{ "name": "Status", "options": [ { "color": "propColorPink", "value": "To Discuss 💬" }, { "color": "propColorYellow", "value": "Revisit Later ⏳" }, { "color": "propColorGreen", "value": "Done / Archived 📦" } ] }同一归档中还包含标题为# Action Items、# Notes的文本卡片,用于记录会议行动项与会议纪要——说明该模板不仅有三列看板,还内嵌了议程文档结构。仓库中其余内置模板(如Content Calendar、Roadmap、Sprint Planner、Team Retrospective等)也以相同方式组织在 server/assets/templates-boardarchive 下。
三、获取并导入 Meeting Agenda 模板
3.1 获取归档文件
官方在社区帖子中提供了模板的.focalboard归档文件(.boardarchive)。你可以:
- 从社区线程中下载归档文件(默认文件名为
archive-YYYY-MM-DD.boardarchive格式,见 archiver.ts 中的命名逻辑); - 也可以直接使用当前仓库内置的 Meeting Agenda 模板归档:server/assets/templates-boardarchive/b7wnw9awd4pnefryhq51apbzb4c。
3.2 导入步骤
按照官方博客的操作说明:
- 下载
.boardarchive归档文件; - 点击左下角Settings(设置)菜单;
- 选择Import Archive(导入归档);
- 选取下载好的归档文件;
- 若页面未自动刷新,手动刷新浏览器;
- 点击+ Add Board(添加看板),在模板选择器中选中"Meeting Agenda"。
3.3 导入的底层实现
前端导入入口位于设置菜单组件 sidebarSettingsMenu.tsx(新版界面同样支持,见 globalHeaderSettingsMenu.tsx),菜单项触发后调用:
Archiver.importFullArchive()Archiver.importFullArchive()在 archiver.ts 中实现:它动态创建一个input[type=file]元素(accept限定为.boardarchive),触发系统文件选择框;选中文件后调用mutator.importFullArchive(file)(见 mutator.ts),最终通过octoClient发起上传请求。
服务端对应路由注册在 server/api/archive.go:
| 方法 | 路由 | 说明 |
|---|---|---|
| GET | /boards/{boardID}/archive/export | 导出单个看板归档 |
| POST | /teams/{teamID}/archive/import | 导入看板归档(multipart/form-data,字段名为file) |
| GET | /teams/{teamID}/archive/export | 导出整个团队的所有看板归档 |
导入接口handleArchiveImport会依次执行权限校验(PermissionViewTeam,且访客 guest 无导入权限)、解析上传文件(r.FormFile),再以ImportArchiveOptions{TeamID, ModifiedBy}调用a.app.ImportArchive完成落库;处理成功后返回200与{},审计记录为import(见 server/api/archive.go)。
注:团队级导出(
handleArchiveExportTeam)在 Mattermost 插件模式下会返回"not permitted"错误(见 server/api/archive.go),单看板导出不受此限制。
四、模板归档(.boardarchive)的文件格式
归档文件的本质是JSON Lines(.jsonl):每行一个 JSON 对象,代表一个 block。以仓库内置模板为例,server/assets/templates-boardarchive/b7wnw9awd4pnefryhq51apbzb4c 中的首行定义了一个board类型的块:
{ "type": "block", "data": { "id": "b7wnw9awd4pnefryhq51apbzb4c", "rootId": "b7wnw9awd4pnefryhq51apbzb4c", "type": "board", "title": "Meeting Agenda (NEW)", "fields": { "cardProperties": [ ... ] } } }后续每一行则定义看板内的卡片(card)、文本(text)等块,通过parentId/rootId建立层级关系。前端的Archiver.isValidBlock()校验每个块至少包含id与boardId字段(见 archiver.ts)。
这也解释了为什么归档导入是跨实例迁移看板/模板的标准方式:只要归档符合 block 结构,就可以通过"Import Archive"一键还原整个看板及其卡片、属性和视图配置。
五、从模板创建看板:+ Add Board 的背后
博客操作的最后一步是点击+ Add Board并选择 "Meeting Agenda"。在前端,这一动作由 boardTemplateSelector.tsx 承载:模板选择器列出可用模板,选中后调用mutator.addBoardFromTemplate(...)(见 boardTemplateSelector.tsx),并同时上报createBoardViaTemplate遥测事件(携带boardTemplateId)。
测试用例 boardTemplateSelector.test.tsx 验证了addBoardFromTemplate(teamId, intl, showBoard, cb, templateId, teamId)的调用契约,确认"从模板新建看板"会基于模板的 block 数据复制出一份新看板。
六、使用建议
- 每会一卡,逐项流转:会议开始时把 To Discuss 列作为唯一入口,保证讨论有优先级;
- Revisit Later 不积压:明确每张卡片的 owner,由 owner 负责在下次会议前移回 To Discuss;
- 配合归档功能:需要把会议模板分享给团队或迁移到新实例时,使用Export archive生成
.boardarchive,对方通过Import archive即可复用(导出入口同样位于设置菜单,调用Archiver.exportFullArchive(currentTeam.id),见 sidebarSettingsMenu.tsx); - 参考内置模板:仓库 server/assets/templates-boardarchive 中还有
Team Retrospective、Sprint Planner、Content Calendar等模板,可对比学习不同团队流程的看板设计模式。
结语
Focalboard 的 Meeting Agenda 模板用最朴素的三列看板,解决了周期性会议最常见的问题:议题收集散乱、会后跟进无主、议程不可复用。通过本文,你不仅学会了如何导入并使用该模板,也掌握了.boardarchive归档格式、导入导出 API 与模板选择器的完整实现链路——这些能力足以让你在此基础上定制属于自己的会议流程模板。
【免费下载链接】focalboardFocalboard is an open source, self-hosted alternative to Trello, Notion, and Asana.项目地址: https://gitcode.com/GitHub_Trending/fo/focalboard
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考