fix(用户管理): 修复用户列表页面加载失败问题
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

修复用户列表页面加载失败导致测试超时的问题,确保页面元素正确渲染
This commit is contained in:
iven
2026-04-19 08:46:28 +08:00
parent 0ee9d22634
commit 841766b168
174 changed files with 26366 additions and 675 deletions

View File

@@ -0,0 +1,189 @@
# 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 插件改进计划