fischer-agentkit/docs/brainstorms/2026-06-29-bitable-ui-compl...

213 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
date: 2026-06-29
topic: bitable-ui-completeness
---
# 多维表格 UI 完善需求文档
## Summary
引入"多维表格文件"作为最上级容器,重构 `文件 → 数据表 → 字段/记录` 三层骨架,按飞书/twenty 范式补齐表内字段操作、默认字段、select 编辑器、多视图、三类采集入口、公式编辑器、权限/自动化/表单等能力。分四阶段交付,阶段一聚焦文件层 + 默认字段 + 表内字段操作三件事。当前无现有 bitable 数据需迁移,数据模型变更成本可控。
---
## Problem Frame
AgentKit 多维表格bitable后端 v1 已基本齐全:领域模型(表/字段/记录/视图/公式)+ REST API表/字段/记录/视图/upsert/上传/公式校验)+ 异步重算 worker + 三类采集引擎Excel/数据库/API+ 公式解析器全部就位。但前端 UI 层薄、产品形态残缺,导致"功能不完善,无法正常使用"。
三类核心缺口:
1. **层级缺失**:当前只有"数据表"层,缺最上级的"多维表格文件"容器。飞书(多维表格 App → 数据表)和 twentyObject → 记录都有这个上层归集bitable 当前是平铺的表列表,数据无组织归属。
2. **默认字段缺失**:新建数据表是空表起步,没有自带默认字段集。飞书/twenty 新建表都自带"标题/状态/日期/创建人/创建时间"等基础字段,让用户立即有结构可填。
3. **表内字段操作缺失**:增/改/删字段只能通过右侧"字段管理"弹层,不能在表内列头直接操作。飞书/twenty 都支持点列头下拉菜单管理字段。
此外 select/multiselect 字段编辑器仍是文本输入(不是下拉选项),三类采集入口在前端无 UIViewType 枚举有 5 种但前端只实现 grid 一种,公式编辑器只有校验 API 没有 UI 增强。
现状是"后端能力齐备,前端产品形态不到位"。本次完善的目标是把前端产品形态对齐飞书/twenty 范式,让 bitable 真正可用。
---
## Key Decisions
**KD1. 方案选 Approach 1飞书范式复刻三层容器骨架先行。** 不选 Approach 2表内体验优先 + 文件层轻量化后置)也不选 Approach 3Agent 数据底座优先)。理由:用户明确"全面对齐飞书/twenty"A2 的轻量文件层会在权限/共享/自动化能力上撞天花板A3 偏离了"参照飞书"的诉求。
**KD2. 文件层一次到位引入新实体,不接受轻量化分组方案。** 文件层是数据组织基石,延后做会让前期数据无归属、后期二次迁移更痛。当前 schema V1`create_all` 模式),无现有 bitable 数据需迁移,引入文件层是干净的新增。
**KD3. 分四阶段执行。** 阶段一(文件层骨架 + 默认字段 + 表内字段操作 + select 编辑器)→ 阶段二(三类采集入口 + Agent 写入反馈)→ 阶段三(看板/画廊视图 + 公式编辑器增强)→ 阶段四(权限 + 自动化 + 表单 + 甘特)。每阶段可独立验证交付。
**KD4. 默认字段集参照飞书 5 字段标题text/ 状态select/ 日期date/ 创建人user/ 创建时间datetime。** 不做可配置模板,固定集即可。后续若需按用途类型预设模板,再评估。
**KD5. 视觉决策用文字探讨,不开浏览器探针。** 用户选择文字描述选项,所有布局/交互形态决策通过文字对话确认。
**KD6. 保留原需求文档"自建 + 底座心智"方向。** 文件层天然可作为 Agent 持久化结构化数据底座的承载点,未来 Agent 写入就是写入文件内的表。原方向不冲突。
**KD7. Agent 集成放阶段二,不在阶段一。** 阶段一聚焦用户主动建表体验,阶段二再做 Agent 采集闭环与写入反馈。理由:阶段一的产品形态不完整时做 Agent 集成会让 Agent 写入落到错误的结构上。
---
## Actors
- **用户**:数据精修者与分析者。在落地后的表上编辑用户列、配置视图、做分析。本次完善的主要服务对象。
- **Agent**数据作者。执行三类采集Excel/数据库/API按字段写入多维表格。阶段二开始接入 UI 反馈。
- **伴生服务**bitable 自有 API/CLI、自有领域模型、自有存储边界。AgentKit ↔ bitable 走 API/CLI不做进程内紧耦合。
---
## Requirements
### 阶段一:文件层骨架与表内基础体验
R1. 引入"多维表格文件"作为最上级容器,数据表归属文件。文件自有元数据(名称/图标/描述等),支持 CRUD。
R2. 新建数据表自带默认字段集,参照飞书 5 字段标题text、状态select预设"未开始/进行中/已完成"3 选项、日期date、创建人user、创建时间datetime
R3. 表内字段操作走列头下拉菜单。支持重命名、改类型、隐藏、删除。不再依赖右侧"字段管理"弹层作为唯一入口。
R4. select/multiselect 字段编辑器使用下拉选项(带颜色标签),替换当前文本输入。选项在字段配置中维护。
R5. 三层导航层级:`文件列表 → 文件详情(含多张表)→ 表内(字段/记录/视图)`。文件列表是新的最上级入口,替代当前平铺的表列表。
### 阶段二:三类采集入口与 Agent 写入反馈
R6. Excel 上传采集入口:前端 UI 触发,调用已有 `src/agentkit/bitable/ingestion/excel.py` 后端。用户上传 Excel 文件或提供 URL按字段写入指定表的"数据列",保留"用户列"。
R7. 数据库导入采集入口:前端 UI 触发,调用已有 `src/agentkit/bitable/ingestion/database.py` 后端。用户指定数据库连接与表,生成对应多维表格。
R8. API/爬虫采集入口:前端 UI 触发,调用已有 `src/agentkit/bitable/ingestion/api_collector.py` 后端。用户配置 API 端点或爬虫指令Agent 执行采集后按字段写入。
R9. Agent 写入反馈 UI用户能看见 Agent 最近写入的记录与写入历史。形态在 Outstanding Questions 中确认。
### 阶段三:多视图与公式编辑器增强
R10. 看板视图:按分组字段(通常是 select 字段)分列展示记录卡片,支持拖拽卡片改分组。
R11. 画廊视图:以图片/附件字段为主视觉的卡片网格展示。
R12. 公式编辑器增强:函数提示、字段引用插入、实时语法校验。复用已有 `POST /api/v1/bitable/fields/validate-formula` 端点。
### 阶段四:权限、自动化、表单、甘特
R13. 文件级与表级权限模型。文件可共享给用户/部门,表继承文件权限并可细化。
R14. 自动化触发器:事件(记录新增/字段变更/定时)→ 动作(写另一字段/发通知/调 API
R15. 表单视图:以表单形式收集数据写入指定表。表单可分享链接。
R16. 甘特视图:按日期字段排时间线,支持依赖关系连线。
---
## Key Flows
- F1. 用户建表流程
- **Trigger:** 用户点"新建文件"按钮
- **Actors:** 用户
- **Steps:** 创建文件(命名/选图标)→ 在文件内点"新建表" → 表自带 5 个默认字段 → 用户在表内点列头加新字段(如"邮箱")→ 配置字段类型与选项
- **Outcome:** 文件含 1 张带默认字段+用户扩展字段的表
- F2. Agent 采集写入流程
- **Trigger:** 用户在文件内点"采集数据"按钮
- **Actors:** 用户、Agent、伴生服务
- **Steps:** 选采集类型Excel/DB/API→ 配置采集参数 → Agent 执行采集 → 按主键 upsert 写入指定表 → UI 显示 Agent 写入反馈(新记录高亮/写入历史)
- **Outcome:** 表内有 Agent 写入的数据列,用户的列与公式列保留不变
- F3. 表内字段操作流程
- **Trigger:** 用户在表内点某列列头
- **Actors:** 用户
- **Steps:** 列头下拉菜单弹出 → 选"重命名/改类型/隐藏/删除" → 执行操作 → 表实时更新
- **Outcome:** 字段状态变更,不需要打开右侧字段管理弹层
---
## Acceptance Examples
- AE1. 新建文件"销售管线"
- **Covers R1, R2, R3, R5.**
- **Given** 用户在文件列表页
- **When** 点"新建文件"命名"销售管线" → 进入文件详情 → 点"新建表"命名"客户"
- **Then** 表自带 5 个默认字段(标题/状态/日期/创建人/创建时间)→ 用户点"标题"列头下拉 → 选"重命名"改为"公司名" → 表头实时更新
- AE2. Agent 采集 Excel 写入
- **Covers R6, R9.**
- **Given** 用户在"客户"表内已加"邮箱"用户列
- **When** 点"采集数据" → 选 Excel 上传 → 选一份客户名单 Excel → Agent 写入
- **Then** 表内出现新记录(数据列被填充)→ "邮箱"用户列保持不变 → UI 显示"Agent 写入 N 条"反馈
- AE3. 切换看板视图
- **Covers R10.**
- **Given** "客户"表内有"状态"select 字段(未开始/进行中/已完成)
- **When** 点 ViewSwitcher → 新建看板视图 → 分组字段选"状态"
- **Then** 表渲染为三列看板(未开始/进行中/已完成)→ 拖拽某卡片从"未开始"到"进行中" → 该记录的"状态"字段自动改为"进行中"
---
## Success Criteria
- **阶段一验收**用户能创建文件、新建表自带默认字段、表内直接增改删字段、select 下拉编辑器可用、三层导航层级清晰。
- **整体完成**四阶段全部交付UI 体验对齐飞书/twenty 范式(三层骨架 + 多视图 + 采集 + 公式编辑器 + 权限/自动化/表单)。
- **后端兼容**:现有 v1 后端 API 不被破坏。文件层引入是新增 schemaV2不破坏现有 V1 表结构。
- **E2E 覆盖**:每阶段交付时 e2e 测试覆盖关键流程(建表/采集/视图切换/字段操作)。当前 `e2e/bitable-view.spec.ts` 仅 B1/B2 两个基础测试,需扩展。
---
## Scope Boundaries
### 本次范围内
四阶段全部 16 个 RR1-R16
### 延后v3 范围)
- 多人实时协作(多人同时编辑同一表,光标/选区同步)
- 大规模优化(列式存储、分区、物化视图、异步重算管道升级)
### 本产品身份之外
- **通用电子表格**bitable 是字段化记录模型,不是单元格自由编辑
- **ETL/数据管道平台**:采集是 Agent 驱动的按需执行,非定时调度管道
- **BI 仪表盘产品**:分析能力服务于表格内聚合,非独立 BI
- **知识库 RAG 替代**bitable 是结构化数据载体,非非结构化文档检索
---
## Dependencies / Assumptions
- **依赖**:现有后端 v1 齐全(`src/agentkit/bitable/{service,repository,models,recalc_worker,db,formula,ingestion}`),本次完善主要在前端 + 后端加文件层新实体。
- **依赖**vxe-table 4 已用于 `BitableGrid`,继续作为 grid 实现基础。
- **依赖**Ant Design Vue 4 + Vue 3 + Pinia + TypeScript强类型禁 any
- **假设**:现有 PostgreSQL 性能足以支撑 v1/v2 规模。
- **假设**:文件层引入只需 schema V2 升级(当前 V1`create_all` 模式,无 alembic 迁移)。
- **假设**:用户接受分阶段交付,每阶段可独立验证。
- **假设**`CONCEPTS.md` 已有 Bitable/Field Ownership/Recalc 三条目,本次需补"多维表格文件/BitableFile"新词。
---
## Outstanding Questions
### Resolve Before Planning
- 文件层实体的具体字段集(名称/图标/描述/权限/创建人?)待 ce-plan 决定。
- Agent 写入反馈 UI 形态("最近写入记录高亮" vs "完整写入历史时间线")未深入讨论,影响阶段二工作量。
- 阶段二/三/四的具体 R 优先级与依赖排序(如 R10 看板 vs R12 公式编辑器谁先)。
### Deferred to Planning
- 文件层引入是 schema V2 升级还是独立 schema 隔离。
- select 下拉编辑器用 vxe-table 内置 select 还是自定义组件。
- 公式编辑器是否引入第三方库(如 formula-parser
- 看板/画廊视图的组件选型(自建 vs 现成库)。
- 文件级权限模型是复用现有 RBAC 还是新建。
---
## Sources / Research
- **飞书多维表格**:表/视图/字段/记录四层范式;列头下拉菜单管理字段;新建表自带默认字段;多视图切换;公式列;权限;自动化;表单收集。作为本次主要参照标杆。
- **twentyhq/twenty** ([https://github.com/twentyhq/twenty](https://github.com/twentyhq/twenty)):开源 CRM对象→视图→记录三栏布局范式record 详情右侧抽屉;字段化记录模型。作为布局参照。
- **原需求文档**`docs/brainstorms/2026-06-24-bitable-module-requirements.md`5 天前,已决策"自建 + 底座心智" + v1/v2/v3 路线,本次为全量重写替代)。
- **现有后端实现**`src/agentkit/bitable/{service,repository,models,recalc_worker,db}.py` + `formula/{parser,functions,engine}.py` + `ingestion/{excel,database,api_collector}.py`
- **现有前端实现**`src/agentkit/server/frontend/src/views/BitableView.vue` + `src/agentkit/server/frontend/src/components/bitable/*.vue`10 个组件)+ `src/agentkit/server/frontend/src/stores/bitable.ts` + `src/agentkit/server/frontend/src/api/bitable.ts`
- **REST API 路由**`src/agentkit/server/routes/bitable.py`(表/字段/记录/视图/upsert/上传/公式校验端点齐全)。
- **已有解决方案**`docs/solutions/architecture-patterns/bitable-companion-service-security-reliability-patterns.md`。
- **领域词汇**`CONCEPTS.md` 现有 Bitable/Field Ownership/Recalc 三条目,本次需补"多维表格文件/BitableFile"。