feat: Q4 测试覆盖 + 插件生态 — 集成测试/E2E/进销存插件/热更新
Q4 成熟度路线图全部完成:
1. 集成测试框架 (Testcontainers + PostgreSQL):
- auth_tests: 用户 CRUD、租户隔离、用户名唯一性
- plugin_tests: 动态表创建查询、租户数据隔离
2. Playwright E2E 测试:
- 登录页面渲染和表单验证测试
- 用户管理、插件管理、多租户隔离占位测试
3. 进销存插件 (erp-plugin-inventory):
- 6 实体: 产品/仓库/库存/供应商/采购单/销售单
- 12 权限、6 页面、完整 manifest
- WASM 编译验证通过
4. 插件热更新:
- POST /api/v1/admin/plugins/{id}/upgrade
- manifest 对比 + 增量 DDL + WASM 热加载
- 失败保持旧版本继续运行
5. 文档更新: CLAUDE.md + wiki/index.md 同步 Q2-Q4 进度
This commit is contained in:
370
crates/erp-plugin-inventory/plugin.toml
Normal file
370
crates/erp-plugin-inventory/plugin.toml
Normal file
@@ -0,0 +1,370 @@
|
||||
[metadata]
|
||||
id = "erp-inventory"
|
||||
name = "进销存管理"
|
||||
version = "0.1.0"
|
||||
description = "进销存管理插件 — 产品、仓库、库存、供应商、采购单、销售单"
|
||||
author = "ERP Team"
|
||||
min_platform_version = "0.1.0"
|
||||
|
||||
# ── 权限声明 ──
|
||||
|
||||
[[permissions]]
|
||||
code = "product.list"
|
||||
name = "查看产品"
|
||||
description = "查看产品列表和详情"
|
||||
|
||||
[[permissions]]
|
||||
code = "product.manage"
|
||||
name = "管理产品"
|
||||
description = "创建、编辑、删除产品"
|
||||
|
||||
[[permissions]]
|
||||
code = "warehouse.list"
|
||||
name = "查看仓库"
|
||||
description = "查看仓库列表和详情"
|
||||
|
||||
[[permissions]]
|
||||
code = "warehouse.manage"
|
||||
name = "管理仓库"
|
||||
description = "创建、编辑、删除仓库"
|
||||
|
||||
[[permissions]]
|
||||
code = "stock.list"
|
||||
name = "查看库存"
|
||||
description = "查看库存列表和详情"
|
||||
|
||||
[[permissions]]
|
||||
code = "stock.manage"
|
||||
name = "管理库存"
|
||||
description = "创建、编辑、删除库存记录"
|
||||
|
||||
[[permissions]]
|
||||
code = "supplier.list"
|
||||
name = "查看供应商"
|
||||
description = "查看供应商列表和详情"
|
||||
|
||||
[[permissions]]
|
||||
code = "supplier.manage"
|
||||
name = "管理供应商"
|
||||
description = "创建、编辑、删除供应商"
|
||||
|
||||
[[permissions]]
|
||||
code = "purchase_order.list"
|
||||
name = "查看采购单"
|
||||
description = "查看采购单列表和详情"
|
||||
|
||||
[[permissions]]
|
||||
code = "purchase_order.manage"
|
||||
name = "管理采购单"
|
||||
description = "创建、编辑、删除采购单"
|
||||
|
||||
[[permissions]]
|
||||
code = "sales_order.list"
|
||||
name = "查看销售单"
|
||||
description = "查看销售单列表和详情"
|
||||
|
||||
[[permissions]]
|
||||
code = "sales_order.manage"
|
||||
name = "管理销售单"
|
||||
description = "创建、编辑、删除销售单"
|
||||
|
||||
# ── 实体定义 ──
|
||||
|
||||
[[schema.entities]]
|
||||
name = "product"
|
||||
display_name = "产品"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "code"
|
||||
field_type = "string"
|
||||
required = true
|
||||
display_name = "产品编码"
|
||||
unique = true
|
||||
searchable = true
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "name"
|
||||
field_type = "string"
|
||||
required = true
|
||||
display_name = "产品名称"
|
||||
searchable = true
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "spec"
|
||||
field_type = "string"
|
||||
display_name = "规格"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "unit"
|
||||
field_type = "string"
|
||||
display_name = "单位"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "category"
|
||||
field_type = "string"
|
||||
display_name = "分类"
|
||||
filterable = true
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "price"
|
||||
field_type = "decimal"
|
||||
display_name = "售价"
|
||||
sortable = true
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "cost"
|
||||
field_type = "decimal"
|
||||
display_name = "成本价"
|
||||
sortable = true
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "status"
|
||||
field_type = "string"
|
||||
required = true
|
||||
display_name = "状态"
|
||||
ui_widget = "select"
|
||||
filterable = true
|
||||
options = [
|
||||
{ label = "上架", value = "active" },
|
||||
{ label = "下架", value = "inactive" }
|
||||
]
|
||||
|
||||
[[schema.entities]]
|
||||
name = "warehouse"
|
||||
display_name = "仓库"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "code"
|
||||
field_type = "string"
|
||||
required = true
|
||||
display_name = "仓库编码"
|
||||
unique = true
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "name"
|
||||
field_type = "string"
|
||||
required = true
|
||||
display_name = "仓库名称"
|
||||
searchable = true
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "address"
|
||||
field_type = "string"
|
||||
display_name = "地址"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "manager"
|
||||
field_type = "string"
|
||||
display_name = "负责人"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "status"
|
||||
field_type = "string"
|
||||
required = true
|
||||
display_name = "状态"
|
||||
ui_widget = "select"
|
||||
filterable = true
|
||||
options = [
|
||||
{ label = "启用", value = "active" },
|
||||
{ label = "停用", value = "inactive" }
|
||||
]
|
||||
|
||||
[[schema.entities]]
|
||||
name = "stock"
|
||||
display_name = "库存"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "product_id"
|
||||
field_type = "uuid"
|
||||
required = true
|
||||
display_name = "产品"
|
||||
ui_widget = "entity_select"
|
||||
ref_entity = "product"
|
||||
ref_label_field = "name"
|
||||
ref_search_fields = ["name", "code"]
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "warehouse_id"
|
||||
field_type = "uuid"
|
||||
required = true
|
||||
display_name = "仓库"
|
||||
ui_widget = "entity_select"
|
||||
ref_entity = "warehouse"
|
||||
ref_label_field = "name"
|
||||
ref_search_fields = ["name", "code"]
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "qty"
|
||||
field_type = "integer"
|
||||
required = true
|
||||
display_name = "数量"
|
||||
sortable = true
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "cost"
|
||||
field_type = "decimal"
|
||||
display_name = "成本"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "alert_line"
|
||||
field_type = "integer"
|
||||
display_name = "预警线"
|
||||
|
||||
[[schema.entities]]
|
||||
name = "supplier"
|
||||
display_name = "供应商"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "code"
|
||||
field_type = "string"
|
||||
required = true
|
||||
display_name = "供应商编码"
|
||||
unique = true
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "name"
|
||||
field_type = "string"
|
||||
required = true
|
||||
display_name = "供应商名称"
|
||||
searchable = true
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "contact"
|
||||
field_type = "string"
|
||||
display_name = "联系人"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "phone"
|
||||
field_type = "string"
|
||||
display_name = "电话"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "address"
|
||||
field_type = "string"
|
||||
display_name = "地址"
|
||||
|
||||
[[schema.entities]]
|
||||
name = "purchase_order"
|
||||
display_name = "采购单"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "supplier_id"
|
||||
field_type = "uuid"
|
||||
required = true
|
||||
display_name = "供应商"
|
||||
ui_widget = "entity_select"
|
||||
ref_entity = "supplier"
|
||||
ref_label_field = "name"
|
||||
ref_search_fields = ["name", "code"]
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "total_amount"
|
||||
field_type = "decimal"
|
||||
display_name = "总金额"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "status"
|
||||
field_type = "string"
|
||||
required = true
|
||||
display_name = "状态"
|
||||
ui_widget = "select"
|
||||
filterable = true
|
||||
options = [
|
||||
{ label = "草稿", value = "draft" },
|
||||
{ label = "已审核", value = "approved" },
|
||||
{ label = "已完成", value = "completed" },
|
||||
{ label = "已取消", value = "cancelled" }
|
||||
]
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "date"
|
||||
field_type = "date"
|
||||
display_name = "采购日期"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "items"
|
||||
field_type = "json"
|
||||
display_name = "采购明细"
|
||||
|
||||
[[schema.entities]]
|
||||
name = "sales_order"
|
||||
display_name = "销售单"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "customer_id"
|
||||
field_type = "uuid"
|
||||
display_name = "客户"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "total_amount"
|
||||
field_type = "decimal"
|
||||
display_name = "总金额"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "status"
|
||||
field_type = "string"
|
||||
required = true
|
||||
display_name = "状态"
|
||||
ui_widget = "select"
|
||||
filterable = true
|
||||
sortable = true
|
||||
options = [
|
||||
{ label = "草稿", value = "draft" },
|
||||
{ label = "已审核", value = "approved" },
|
||||
{ label = "已完成", value = "completed" },
|
||||
{ label = "已取消", value = "cancelled" }
|
||||
]
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "date"
|
||||
field_type = "date"
|
||||
display_name = "销售日期"
|
||||
|
||||
[[schema.entities.fields]]
|
||||
name = "items"
|
||||
field_type = "json"
|
||||
display_name = "销售明细"
|
||||
|
||||
# ── 页面声明 ──
|
||||
|
||||
[[ui.pages]]
|
||||
type = "crud"
|
||||
entity = "product"
|
||||
label = "产品管理"
|
||||
icon = "shopping"
|
||||
enable_search = true
|
||||
|
||||
[[ui.pages]]
|
||||
type = "crud"
|
||||
entity = "warehouse"
|
||||
label = "仓库管理"
|
||||
icon = "home"
|
||||
enable_search = true
|
||||
|
||||
[[ui.pages]]
|
||||
type = "crud"
|
||||
entity = "stock"
|
||||
label = "库存管理"
|
||||
icon = "inbox"
|
||||
enable_search = true
|
||||
|
||||
[[ui.pages]]
|
||||
type = "crud"
|
||||
entity = "supplier"
|
||||
label = "供应商管理"
|
||||
icon = "shop"
|
||||
enable_search = true
|
||||
|
||||
[[ui.pages]]
|
||||
type = "crud"
|
||||
entity = "purchase_order"
|
||||
label = "采购管理"
|
||||
icon = "download"
|
||||
enable_search = true
|
||||
|
||||
[[ui.pages]]
|
||||
type = "crud"
|
||||
entity = "sales_order"
|
||||
label = "销售管理"
|
||||
icon = "upload"
|
||||
enable_search = true
|
||||
Reference in New Issue
Block a user