Files
erp/plans/rosy-painting-whisper.md
iven 841766b168
Some checks failed
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / security-audit (push) Has been cancelled
fix(用户管理): 修复用户列表页面加载失败问题
修复用户列表页面加载失败导致测试超时的问题,确保页面元素正确渲染
2026-04-19 08:46:28 +08:00

190 lines
8.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.

# CRM 插件深度分析 & 多专家组头脑风暴
## Context
CRM 插件 (`erp-plugin-crm`) 是 ERP 平台的第一个行业业务插件,也是 WASM 插件系统的标杆验证案例。它已完成了设计规格中的全部 3 个阶段(共 24 个任务),包含 5 个实体、9 个权限、7 种页面类型。现在需要从深度和广度两个维度进行全方位审视,发现改进空间、架构风险和演进方向。
---
## 一、CRM 插件全景画像
### 1.1 架构定位
```
┌─────────────────────────────────────────────────┐
│ 前端 SPA │
│ PluginCRUDPage / Tree / Graph / Dashboard / │
│ Tabs / Detail / Admin — 全部 schema 驱动渲染 │
└────────────────────┬────────────────────────────┘
│ REST API (pluginData + plugins)
┌────────────────────▼────────────────────────────┐
│ Plugin Host (erp-plugin) │
│ service.rs → engine.rs → host.rs → dynamic_table│
│ data_service.rs → handler → module │
└────────────────────┬────────────────────────────┘
│ WIT 接口 (Host API 9 个函数)
┌────────────────────▼────────────────────────────┐
│ CRM WASM Guest (erp-plugin-crm) │
│ lib.rs (30行) — init/on_tenant_created/ │
│ handle_event 全部 no-op │
└──────────────────────────────────────────────────┘
```
### 1.2 数据模型 (5 实体)
| 实体 | 表名 | 字段数 | 用途 |
|------|------|--------|------|
| customer | plugin_erp_crm_customer | 15 | 客户主数据 (企业/个人) |
| contact | plugin_erp_crm_contact | 8 | 联系人 |
| communication | plugin_erp_crm_communication | 7 | 沟通记录 |
| customer_tag | plugin_erp_crm_customer_tag | 3 | 客户标签 |
| customer_relationship | plugin_erp_crm_customer_relationship | 4 | 客户关系 |
### 1.3 页面矩阵 (7 页面类型)
| 页面类型 | CRM 用途 | 复杂度 |
|----------|---------|--------|
| CRUD | 客户/联系人/沟通/标签/关系列表 | 中 (搜索/筛选/排序/视图切换) |
| Detail (Drawer) | 客户360度视图 | 高 (字段+嵌套CRUD+时间线) |
| Tree | 客户层级树 | 低 |
| Tabs | 客户管理入口 | 中 |
| Graph | 关系图谱 (Canvas手绘) | 高 |
| Dashboard | 统计概览 | 中 |
| Admin | 插件生命周期管理 | 中 |
### 1.4 权限模型 (9 权限)
两级权限体系:平台级 (`plugin.admin/list`) + 插件级 (`erp-crm.customer.list/manage` 等)
---
## 二、深度分析 — 六维度体检
### 2.1 架构健壮性 ⚠️
**优势:**
- Host-Guest 沙箱隔离Fuel 资源限制WASM panic 不影响主服务
- 延迟写入模式 (PendingOp) 保证事务原子性
- 乐观锁 + 软删除 + 多租户隔离
**风险:**
- **JSONB 外键完整性为零** — `contact.customer_id` 指向已删除客户不会被拦截
- **WASM Guest 价值极低** — CRM 插件 lib.rs 仅 30 行3 个生命周期钩子全是 no-op所有业务逻辑实际在 Host 侧的 data_service.rs
- **动态表 SQL 拼接风险** — 虽有 `sanitize_identifier()`,但 JSONB 查询构建器复杂度高
- **插件热升级策略缺失** — 版本升级时如何处理已有数据的 schema 变更?
### 2.2 数据完整性 ⚠️
**当前状态:**
- 无 DB 级外键约束JSONB 字段无法使用 PostgreSQL FK
- 无应用层 FK 校验data_service.rs 的 create/update 不检查关联实体是否存在)
- 删除客户时不级联处理关联的联系人/沟通记录/标签
- `customer.parent_id` 的循环引用无检测
### 2.3 查询性能 🟡
**已做优化:**
- GIN 索引覆盖 searchable 字段
- tenant_id 索引
- Redis 连接缓存 (响应 2.26s → 2ms)
**潜在瓶颈:**
- JSONB 内字段排序 (`ORDER BY data->>'field'`) 无法使用 B-tree 索引
- 聚合查询 (`aggregate`) 对大数据量可能慢
- 关系图谱需要全量加载 customer + customer_relationship前端 Canvas 渲染
- 无分页的树结构查询(前端全量加载后客户端构建)
### 2.4 安全合规 🔴
- **数据权限缺失** — 只有操作权限 (能否操作),无数据权限 (能看到谁的数据)
- **搜索注入** — search 参数直接拼入 SQL ILIKE需确认转义逻辑
- **权限 fallback 过宽** — `plugin.admin` 权限自动获得所有插件的所有操作权限
### 2.5 前端体验 🟡
**亮点:**
- 全 schema 驱动,零 CRM 专用前端代码
- visible_when 条件表单字段
- 时间线/表格视图切换
- Canvas 手绘关系图谱(无第三方库依赖)
- 嵌套 CRUD (Detail Drawer)
**不足:**
- 无看板视图(销售漏斗/客户跟进阶段)
- 无数据导入/导出功能
- 无批量操作
- 标签系统过于简单(无标签分组管理、无标签云)
- Dashboard 统计维度有限(只有计数+分组聚合)
- 树页面不支持拖拽排序
### 2.6 可扩展性 🟡
**平台能力沉淀:**
- 7 种通用页面类型可供未来插件复用
- 插件 manifest (TOML) schema 定义了完整的元数据规范
- 插件生命周期管理 (上传→安装→启用→禁用→卸载→清除)
**限制:**
- 页面类型有限 — 无日历、看板、甘特图、地图等业务常见页面
- WASM WIT 接口固定 — Host API 9 个函数,扩展需要修改 WIT + 双端重编译
- 插件间通信未实现 — 当前只能通过 EventBus 订阅系统事件,插件间无法直接交互
---
## 三、专家组头脑风暴议题
基于以上分析,建议从以下 6 个专家组视角展开头脑风暴:
### 专家组 1: 后端架构师
**焦点:** WASM 插件架构的真正价值在哪里?如何让 Guest 代码从 no-op 变成有意义的业务逻辑?
- Host API 的 db_query 为何不可用?如何修复?
- JSONB 动态表 vs 独立 schema 表的取舍
- 插件版本升级的数据迁移策略
- 延迟写入模式的局限性和改进
### 专家组 2: CRM 产品专家
**焦点:** 这个 CRM 能用吗?缺什么核心能力?
- 销售漏斗/商机管理缺失的影响
- 客户跟进提醒机制
- 数据导入/导出 (Excel)
- 客户画像/360度视图的完整性
- 与 ERP 其他模块 (进销存/财务) 的联动
### 专家组 3: 安全工程师
**焦点:** 数据权限、隔离性、合规风险
- 行级数据权限 (谁能看到哪些客户)
- JSONB 查询注入风险
- 插件 WASM 沙箱逃逸可能性
- 审计日志的完整性
- GDPR/数据隐私合规
### 专家组 4: 前端架构师
**焦点:** Schema 驱动 UI 的天花板和突破路径
- 复杂交互场景 (拖拽、批量操作、右键菜单) 的 schema 描述能力
- 看板/日历/甘特图等新页面类型的设计
- 大数据量下的性能优化 (虚拟滚动、懒加载)
- 插件自定义 UI 组件的可行性
### 专家组 5: 平台架构师
**焦点:** 插件平台的通用性和未来演进
- 插件间通信和协作机制
- 插件市场/分发的技术架构
- 插件依赖管理和版本兼容
- 多租户插件隔离的成本和安全性
### 专家组 6: 性能工程师
**焦点:** JSONB 动态表的性能天花板
- 百万级数据的查询优化策略
- 聚合查询的预计算/缓存
- 关系图谱大数据量下的前端渲染
- PostgreSQL JSONB 索引策略优化
---
## 四、实施计划
1. 退出计划模式后,立即调用 `/brainstorm` 技能,以本分析报告为基础材料
2. 对 6 个专家组视角逐一展开头脑风暴
3. 汇总所有专家建议,形成优先级排序的改进路线图
4. 输出最终的 CRM 插件改进计划