Files
erp/plans/skill-parallel-pixel-agent-a2852b5abd5e15119.md

139 lines
9.0 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.

# UX 分析报告:一人 IT 公司 ERP 插件方案
> 基于智界科技(一人 IT 服务公司)的业务场景,对 freelance + itops 两个插件的 UX 审查。
---
## 1. 一人公司的 UX 痛点
**WHY**: 一个人没有分工,老板就是销售、项目经理、财务、运维工程师。每次切换页面等于中断心流,表单越复杂越容易填一半放弃。
**核心摩擦**
- **上下文切换成本高** -- 一个人同时处理客户咨询、写代码、记账、回工单。在"客户详情"和"工时记录"之间来回跳转,每次跳转丢失工作记忆。
- **重复录入** -- 同一个客户信息在 client、opportunity、quote、invoice、ticket 中反复手填。一人公司没有人帮忙补数据。
- **决策疲劳** -- 每天面对 10 个入口,要思考"这个操作该去哪个页面"。对于一人公司ERP 应该像手机首页一样直觉。
- **过度结构化** -- 一人公司的商机通常是微信聊几句就定了,不需要复杂的销售漏斗流程。
**HOW -- 减少操作的具体措施**
1. **全局搜索 + 命令面板**Ctrl+K输入"张三"直接跳到客户详情,输入"新工时"直接弹出计时器,输入"#102"跳到工单。一人公司的 ERP 应该像一个大的搜索框 + 几个快捷按钮。
2. **自动填充上下文**:在项目工作台记工时时,自动关联当前活跃项目;从客户详情页创建报价单时,自动带入客户信息。减少手动关联操作。
3. **合并创建流程**:新建项目时一步内同时创建第一个任务,不用先建项目再跳到任务页。
---
## 2. 页面布局合理性 -- 10 个页面是否太多
**结论:可以压缩到 7 个页面,但不应低于 5 个。**
**WHY**: 一人公司的操作场景有明确的节奏切换(见客户 vs 做项目 vs 记账),完全合并会导致单页信息过载。但两个插件共 10 个页面确实有冗余。
**建议合并方案**
| 原方案 (10 页) | 优化方案 (7 页) | 理由 |
|---|---|---|
| freelance 仪表盘 | **全局工作台**(合并两个仪表盘) | 一人只需一个首页 |
| 客户管理 (360度) | 客户管理 (保留) | 核心入口,高频使用 |
| 商机跟进 (看板) | **并入客户管理**,作为客户详情的一个 tab | 一人公司的商机极少同时超过 5 个,看板过重 |
| 项目工作台 | 项目工作台 (保留) | 核心工作场景,需要独立空间 |
| 财务中心 | 财务中心 (保留) | 收支是独立节奏,需要集中视图 |
| 报价管理 | **并入财务中心**,作为 tab | 报价是财务流程的前置步骤,不放独立页面 |
| itops 运维仪表盘 | (已合并到全局工作台) | -- |
| 合同管理 | 合同管理 (保留) | 维保合同是独立业务实体 |
| 工单中心 | 工单中心 (保留) | 最高频运维操作 |
| 巡检管理 | **并入工单中心**,作为 tab 或筛选 | 巡检本质是周期性工单,不需要独立页面 |
**HOW -- 实现层面**
- freelance 插件减少为 4 个页面全局工作台dashboard、客户管理tabs 类型,含商机看板 tab、项目工作台、财务中心tabs 类型,含报价 tab
- itops 插件减少为 3 个页面工单中心tabs 类型,含巡检 tab、合同管理、全局工作台跨插件共享
- 跨插件共享的 dashboard 通过 ui.pages 的 `shared: true` 或放在 freelance 插件中声明itops 通过 `dependencies = ["erp-freelance"]` 引用
---
## 3. 关键缺失场景
**WHY**: 一人 IT 公司有 3 个高频场景在当前方案中完全缺失,不做这些等于 ERP 只覆盖了 60% 的日常工作。
| 缺失场景 | 严重性 | 说明 |
|---|---|---|
| **合同/报价到期提醒** | 高 | 维保合同到期前 30 天没有提醒 = 流失续费收入。一人公司靠记忆管理ERP 必须补上 |
| **工时 -> 开票 自动联动** | 高 | 项目完成后手动从工时记录汇总金额再创建发票,这个手工过程在一人公司中最容易被跳过,导致漏收 |
| **知识库/文档管理** | 中 | IT 运维的核心资产是文档(网络拓扑、服务器配置、密码记录)。当前方案只有结构化数据,缺非结构化知识 |
| **续约提醒 + 自动创建续约商机** | 中 | 维保合同到期时自动生成一个续约 opportunity串联 freelance 和 itops |
**HOW -- 实现建议**
1. **到期提醒**:在 itops 插件的 service_contract 实体上加 `end_date` 字段(已有),在后端增加定时事件检查 `contract.expiring`,通过消息中心的订阅机制推送到通知面板。
2. **工时 -> 开票联动**:在 invoice 实体增加 `source_type = "time_entry"``source_ids` 字段,前端提供"从工时记录生成发票"的一键操作,按项目汇总自动填充。
3. **知识库**Phase 2 考虑。可以在 client 或 project 实体上加 `attachments` (json) 字段存储文件引用,先做轻量版。
---
## 4. 仪表盘设计建议 -- 合并为一个全局工作台
**WHY**: 一人只有一个视角(老板视角),不存在"销售看销售数据、运维看运维数据"的角色分离。两个仪表盘让用户每次登录还要选择看哪个,增加了无意义的决策。
**HOW -- 全局工作台设计**
```
+------------------------------------------------------------------+
| 全局工作台 |
+------------------------------------------------------------------+
| 今日待办 (3) 本周收入: ¥12,500 |
| [ ] 回复张三报价 (2h前) 待开票: ¥8,200 |
| [ ] 完成服务器巡检 (今天) 本月支出: ¥3,400 |
| [ ] 提交项目A发票 (明天截止) 到期合同: 2个 (30天内) |
+------------------------------------------------------------------+
| 活跃项目 (2) 最新工单 (3) |
| 项目A - 进行中 ██████░░ 75% #102 网络... 进行中 |
| 项目B - 待启动 ░░░░░░░░ 0% #101 备份... 已完成 |
| #100 升级... 待处理 |
+------------------------------------------------------------------+
| [快速操作] +新建客户 +新建工单 +开始计时 +新建报价 |
+------------------------------------------------------------------+
```
**布局规则**
- 上方:紧急事项 + 财务概览(左右分栏)
- 中间:核心业务对象快照(活跃项目 + 最新工单)
- 下方:一键操作按钮条
**实现**:使用现有的 `PluginDashboardPage` 组件,通过 plugin.toml 的 `ui.pages` 中 type = "dashboard" 声明dashboard widgets 跨插件聚合数据。freelance 插件声明这个 dashboarditops 插件通过 `dependencies` 引用后注册自己的 widgets。
---
## 5. 快速操作 -- 一键完成的快捷入口
**WHY**: 一人公司最高频的操作是"快速记一笔"和"快速创建"。如果每次都要打开表单、填完所有字段、点击保存,摩擦太大导致用户放弃使用 ERP回到微信记事本。
| 快速操作 | 频率 | HOW |
|---|---|---|
| **开始/停止计时** | 每天 3-5 次 | 全局悬浮按钮,点击选择项目 -> 开始计时,再点停止自动生成 time_entry。不需要打开任何页面 |
| **快速记工单** | 每天 2-3 次 | 工单中心的 "+新建" 按钮,弹出一个精简表单(只填标题+客户+紧急度),详情后续补充 |
| **快速记支出** | 每周 2-3 次 | 财务中心的"+记一笔"按钮3 个字段:金额、分类、备注。日期默认今天 |
| **快速创建报价** | 每周 1-2 次 | 从客户详情页一键"生成报价",自动带入客户信息 + 最近的项目工时数据 |
| **快速创建工单 from 合同** | 每月 1-2 次 | 合同详情页"创建工单"按钮,自动关联合同+客户 |
**实现要点**
- 全局悬浮计时器通过前端组件实现,不依赖特定插件页面,放在 MainLayout 层
- 快速操作按钮放在各页面的 PageHeader 区域,使用 Ant Design 的 `FloatButton``Button` 组件
- 精简表单 = 只标记 `required = true` 的字段,其他字段全部可选,后续可补充
---
## 总结 -- 核心建议优先级
| 优先级 | 建议 | 预期收益 |
|---|---|---|
| P0 | 合并两个仪表盘为全局工作台 | 消除首次登录的困惑 |
| P0 | 全局悬浮计时器(开始/停止) | 工时记录从"每周补"变成"实时记" |
| P1 | 商机看板并入客户管理 tab | 减少 1 个页面,降低认知负担 |
| P1 | 工时 -> 发票一键生成 | 消除最大手工流程,防漏收 |
| P1 | 合同到期提醒 | 防止续费流失 |
| P2 | 报价并入财务中心 tab | 减少 1 个页面 |
| P2 | 巡检并入工单中心 tab | 减少 1 个页面 |
| P2 | 全局搜索命令面板 (Ctrl+K) | 极大提升操作效率 |
**核心原则**:一人公司的 ERP 应该像瑞士军刀,不是像工具箱。不需要 10 个抽屉分门别类,需要一把刀随时打开就能用。