design.md 5.2 KB

Design Document

Overview

本设计文档描述了将物料采购模块(dingdan/manage-vue)整合到芋道管理后台项目的技术方案。整合工作包括:

  1. 复制 Vue 组件到目标目录
  2. 创建菜单配置 SQL 脚本
  3. 确保组件与主项目兼容

Architecture

整合采用前端模块化架构,遵循现有项目的目录结构和菜单配置模式:

yudao-ui/yudao-ui-admin-vue3/
├── src/
│   └── views/
│       └── caigou/                    # 物料采购模块目录
│           ├── index.vue              # 现有的物料交货计划分析
│           ├── MaterialPurchaseOrder.vue    # 物料采购订单
│           ├── SubcontractOrder.vue         # 委外加工订单
│           └── MaterialPurchaseRequest.vue  # 物料采购申请
└── sql/
    └── mysql/
        └── material_purchase_menu.sql  # 菜单配置SQL

菜单层级结构

graph TD
    A[物料采购 ID:6500] --> B[物料采购订单 ID:6501]
    A --> C[委外加工订单 ID:6502]
    A --> D[物料采购申请 ID:6503]

Components and Interfaces

1. Vue 组件

组件名 源路径 目标路径 功能
MaterialPurchaseOrder.vue dingdan/manage-vue/src/views/purchase-order/ src/views/caigou/ 物料采购订单管理
SubcontractOrder.vue dingdan/manage-vue/src/views/purchase-order/ src/views/caigou/ 委外加工订单管理
MaterialPurchaseRequest.vue dingdan/manage-vue/src/views/purchase-order/ src/views/caigou/ 物料采购申请管理

2. 菜单配置

菜单ID 名称 父ID 路径 组件路径 权限标识
6500 物料采购 0 /caigou - -
6501 物料采购订单 6500 material-purchase-order caigou/MaterialPurchaseOrder caigou:purchase-order:list
6502 委外加工订单 6500 subcontract-order caigou/SubcontractOrder caigou:subcontract-order:list
6503 物料采购申请 6500 material-purchase-request caigou/MaterialPurchaseRequest caigou:purchase-request:list

Data Models

菜单数据模型 (system_menu)

CREATE TABLE `system_menu` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL COMMENT '菜单名称',
  `permission` varchar(100) DEFAULT '' COMMENT '权限标识',
  `type` tinyint NOT NULL COMMENT '菜单类型(1目录 2菜单 3按钮)',
  `sort` int NOT NULL DEFAULT '0' COMMENT '显示顺序',
  `parent_id` bigint NOT NULL DEFAULT '0' COMMENT '父菜单ID',
  `path` varchar(200) DEFAULT '' COMMENT '路由地址',
  `icon` varchar(100) DEFAULT '#' COMMENT '菜单图标',
  `component` varchar(255) DEFAULT NULL COMMENT '组件路径',
  `component_name` varchar(255) DEFAULT NULL COMMENT '组件名称',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '菜单状态(0正常 1停用)',
  `visible` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否可见',
  `keep_alive` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否缓存',
  `always_show` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否总是显示',
  PRIMARY KEY (`id`)
);

Correctness Properties

A property is a characteristic or behavior that should hold true across all valid executions of a system-essentially, a formal statement about what the system should do. Properties serve as the bridge between human-readable specifications and machine-verifiable correctness guarantees.

基于 prework 分析,本模块主要涉及配置和文件操作,大部分验收标准是具体的示例验证而非通用属性。以下是可测试的属性:

Property 1: Component path consistency

For any menu record in the 6500-6599 ID range with type=2 (menu), the component field should start with "caigou/" prefix Validates: Requirements 2.4

Property 2: Permission naming convention

For any menu record in the 6500-6599 ID range with a non-empty permission field, the permission should follow the pattern "caigou:{module}:{action}" Validates: Requirements 5.3

Property 3: LocalStorage key uniqueness

For any localStorage key used in the caigou module components, the key should be prefixed with "caigou-" or "material-purchase-" to avoid conflicts Validates: Requirements 4.3

Error Handling

1. SQL 执行错误

  • 如果菜单 ID 冲突,SQL 脚本会先删除 6500-6599 范围内的现有记录
  • 使用事务确保原子性,失败时回滚

2. 组件加载错误

  • 如果组件路径配置错误,系统会显示 404 页面
  • 检查 component 字段是否正确指向 src/views/ 下的组件

3. 权限错误

  • 如果用户没有菜单权限,菜单不会显示
  • 需要在角色管理中分配新菜单权限

Testing Strategy

单元测试

由于本模块主要是配置和文件复制工作,单元测试主要验证:

  1. SQL 脚本语法正确性
  2. 组件文件存在性检查

属性测试

使用手动验证方式检查:

  1. 菜单配置的一致性
  2. 权限命名规范
  3. 组件路径正确性

集成测试

  1. 执行 SQL 脚本后验证菜单显示
  2. 点击菜单验证页面加载
  3. 验证页面功能(搜索、筛选、分页、导出)

测试框架

  • 前端:Vitest(如需添加组件测试)
  • 数据库:手动执行 SQL 验证