Files
erp/crates/erp-plugin-inventory/plugin.toml
iven e8739e80c7
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
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 进度
2026-04-17 22:17:47 +08:00

371 lines
7.5 KiB
TOML

[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