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 进度
371 lines
7.5 KiB
TOML
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
|