AssetMgmt固定资产管理系统(二):码道领航,落地生根
本案例基于华为云开发环境,采用华为云码道(CodeArts)代码智能体作为核心开发工具,结合SDD(Spec-Driven Development)规范驱动开发模式,快速构建AssetMgmt固定资产管理系统。系统实现了资产管理、维保管理、消息通知、数据统计等功能,支持资产全生命周期管理、多维度统计分析、批量导入导出等功能。
最新案例动态,请查阅AssetMgmt固定资产管理系统(二):码道领航,落地生根小伙伴们快来进行实操吧!
一、概述
1.1 案例介绍
在前序案例《AssetMgmt固定资产管理系统(一):码道搭台,设计筑基》中,我们基于华为云码道代码智能体完成了AssetMgmt固定资产管理系统的需求分析、系统设计和SDD文档体系构建,绘制了一张完整的数字化蓝图。在企业数字化转型的关键赛道上,如何将设计蓝图“落地生根”,转化为真正可运行的系统,才是检验价值的试金石。本案例延续前序案例的设计成果,通过SDD规范驱动开发模式,将需求规格说明、系统设计文档转化为可执行的代码,实现从“设计蓝图”到“智慧管家”的华丽转身,让固定资产管理真正从“纸上谈兵”走向“实战落地”。
本案例延续前序案例的设计成果,采用 华为云码道(CodeArts)代码智能体作为核心开发工具,结合SDD(Spec-Driven Development)规范驱动开发模式,快速将设计文档转化为可运行的系统。系统采用FastAPI + Vue 3前后端分离架构,集成Neon MCP Server提供的PostgreSQL数据库服务,实现了资产管理、维保管理、审批管理、盘点管理、统计分析等完整功能,支持资产全生命周期管理、多维度统计分析、批量导入导出等核心业务。
案例技术选型:
- 华为云码道(CodeArts)代码智能体:集代码大模型、AI IDE、Code Agent 为一体的智能编码产品。理解项目需求,懂得编码之道,善用百器的实干派AI研发砖家。本案例中作为核心开发工具,通过 SDD 规范驱动开发模式,快速完成从需求规格说明到代码实现的全流程开发。
- Neon MCP Server:Neon提供的无服务器PostgreSQL数据库服务,支持自动扩缩容、分支管理、时间旅行查询等创新特性。通过MCP协议与AI智能体无缝集成,实现数据库的智能化管理。本案例中作为主数据库服务,提供PostgreSQL数据库实例,存储用户、资产、维保、消息等8张核心业务表,支持资产全生命周期数据管理,无需手动运维数据库。
1.2 适用对象
- 个人开发者
- 高校学生
- 企业开发者
1.3 案例时间
本案例预计总时长 8 小时。
1.4 案例流程

说明:
- 配置华为云码道规则、skills与Neon MCP Server,部署PC本地开发和测试环境;
- 对话码道,使用 AssetMgmt SDD 逐项开发固定资产管理系统,并使用sdd-workflow、bug-fix-reporter - Bug等skills辅助记录开发进展、需求同步和修复报告生成;
- 对话码道,使用 fullstack-testing skill 编写后端、前端、API集成以及E2E等测试用例;
- 对话码道,执行测试用例并修复bug;
- 对话码道,启动 AssetMgmt 固定资产管理系统。
1.5 资源总览
本案例预计花费0元。
| 资源名称 | 规格 | 单价(元) |
|---|---|---|
| 华为开发者空间开发平台 - 云开发环境(容器) | 鲲鹏通用计算增强型 kc1 | 4vCPUs | 8G | HCE | 免费 |
| 华为云码道(CodeArts)代码智能体 | 系统标配 | 免费 |
二、环境和资源准备
2.1 开发环境部署
2.1.1 Python和Node.js
参考案例《SKILL快速构建你的Java、Python和Node.js开发环境》使用 dev-env-setup skill 对话码道,完成PC本地Python和Node.js开发环境的搭建。
请使用dev-env-setup skill帮我在本地部署一下python和Nodejs开发环境。

2.1.2 Git 安装与配置
- 登录Git官网,点 Git for Windows/x64 Setup下载Git安装助手。

- 下载完成后,双击安装助手,参考下图在本地安装配置Git。

- 登录gitCode,参考下图操作,创建gitCode项目。

- 获取Git全局配置
完成上一步的项目创建步骤后,在代码页签/界面点Clone,在弹窗中可以获取Git全局配置。

- 打开命令提示符,输入如下指令,完成Git本地配置。
git --version # 查询版本,验证安装成功
git config --global user.name <your-username> # 设置用户名,<your-username>替换成上一步中获取用户名
git config --global user.email <your-email> # 设置邮箱,<your-email>替换成上一步中获取的用户邮箱

- 在步骤“4. 获取Git全局配置”中我们已经获取Git使用HTTPS协议的用户名,并提示密码使用gitCode个人访问令牌。
在gitCode右上角点用户头像,选择个人设置。左侧选择安全设置 > 访问令牌,在右侧点“+ 新建访问令牌”。在新访问令牌(经典)界面配置令牌名称,有效期及访问权限等。点页面最下侧的新建访问令牌。

复制并保存个人访问令牌。

- 在首次使用
git pull/git clone命令时弹窗,会根据弹窗提示要求输入用户名和密码,根据提示进行填写即可。
2.1.3 Docker Desktop 安装与配置
参考案例《告别繁琐操作,华为云码道 + Docker重塑远程开发体验》中的“4.1安装docker desktop”和“4.2更新WSL”完成Docker Desktop的安装。

更新完之后,左下角会变成Engine running。接下来配置Docker镜像加速(可选):Docker Desktop → Settings → Docker Engine → 添加registry-mirrors。
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.1panel.live",
"https://docker.kejilion.pro",
"https://dockerpull.cn",
"https://hub.rat.dev",
"https://docker.zhai.cm",
"https://docker.xuanyuan.me"
]
}

2.1.4 Neon PostgreSQL 云端数据库配置
本项目计划使用Neon PostgreSQL(Serverless)数据库,该数据库可以通过Neon MCP服务调用连接。
- 注册并登录Neon: https://neon.tech/,参考案例《对话即查询:码道与Neon的集成探索》中的“2.3.3 API Key获取”获取Neon API Key。
注:下述Neon MCP服务安装命令及配置文件中的<YOUR_NEON_API_KEY>需要替换为Neon API Key。
- 打开AI IDE终端窗口执行如下命令:
npm install -g @neondatabase/mcp-server-neon
npx @neondatabase/mcp-server-neon init napi_r174tthlqa4v69oa26d9fd3ifznnbsc4vedbq2qwshadack93ad92s8pla7yd1u8
- 打开MCP服务配置文件,添加如下内容:
{
"mcpServers": {
"neon": {
"command": "npx",
"args": ["-y", "@neondatabase/mcp-server-neon", "start", "<YOUR_NEON_API_KEY>"]
}
}
}

2.2 本地测试环境部署
2.2.1 安装Playwright Chromium
在后续执行测试环节的E2E测试中,需要用到Chromium浏览器。而Playwright Chromium浏览器下载会经常因为网络原因导致下载失败,需要提前进行手动下载。
打开AI IDE终端窗口执行以下命令:
npm uninstall @playwright/test playwright # 若已安装则错误的历史版本请使用此命令进行卸载,若未安装,则跳过此命令。
npm install @playwright/test@1.48.0 # 安装指定的稳定版本
set PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright/ # 设置镜像环境变量
npx playwright install chromium # 安装浏览器

2.3 华为云码道配置
2.3.1 安装AI IDE插件
后续在执行 AssetMgmt 项目前端开发任务时会用到Vue,此处先手动为其安装插件。打开码道AI IDE插件市场,在OPEN VSX页签搜索并安装Vue(Official)插件。

同理操作,推荐安装Python、Python Debugger、Docker等插件(可选)。

2.3.2 码道技能配置
我们已经通过前序案例《AssetMgmt固定资产管理系统(一):码道搭台,设计筑基》,完成了码道开发生态skills的集中配置。

本案例中,我们将使用sdd-workflow、bug-fix-reporter - Bug等skills,在开发过程中辅助完成开发进展跟踪、需求文档同步和自动生成bug修复报告等动作。在测试阶段,会使用fullstack-testing skill辅助完成测试用例的编写任务。
2.3.3 码道规则配置
打开码道设置 > 技能与规则,在项目级 - 规则点“+”,可编辑创建码道规则。

参考下图编辑规则,然后点确定。(规则内容已经上传至gitCode,请根据需要自行下载。)

注:适用范围需要选择自动应用,后续发送指令码道会自动遵守该规则内容执行任务。
三、对话码道:构建 AssetMgmt 项目
3.1 基础环境准备与项目初始化
提示:为避免对话过长,影响AI IDE的历史会话记录加载,建议新建一个码道对话,并对话码道:“请加载激活当前的项目级规则和skills,并读取AssetMgmt SDD设计文档。稍后我们将开始开发任务。”
对话码道:“请执行tasks中的任务 1.1.1: Windows开发环境部署,其中“配置Neon PostgreSQL云端数据库连接”我已经完成了Neon MCP Server的配置,请自行检查验证。”

继续对话码道:“请继续完成tasks中的任务 1.1.2: 后端项目初始化(FastAPI工程目录+API骨架+数据模型骨架) ”。

继续对话码道:“请继续完成tasks中的任务 1.1.3: 前端项目初始化(Vue3工程目录+API封装骨架+基础组件)”。

任务执行总结:
| 任务ID | 任务描述 | 状态 | Sprint报告 |
|---|---|---|---|
| 1.1.1 | Windows开发环境部署 | 完成 | 基硎环境准备.md |
| 1.1.2 | 后端项目初始化(FastAPI + SQLAlchemy) | 完成 | 后端项目初始化.md |
| 1.1.3 | 前端项目初始化(Vue3 + Vite) | 完成 | 前端项目初始化.md |
关键成果:
- Python 3.11 + Node.js 20 开发环境配置完成;
- 后端项目结构建立,Alembic迁移配置完成;
- 前端项目结构建立,Vite + Element Plus + Pinia配置完成;
- Neon PostgreSQL数据库连接配置完成。
3.2 核心业务模块开发
3.2.1 用户认证与权限管理模块
对话码道:“请继续完成tasks中的 第二部分:项目开发 - 2.1 用户认证与权限管理模块”。

任务执行总结:
| 任务ID | 任务描述 | 状态 | 优先级 |
|---|---|---|---|
| 2.1.1 | JWT认证实现(双Token机制) | 完成 | P0 |
| 2.1.2 | RBAC权限模型实现 | 完成 | P0 |
| 2.1.3 | 登录锁定机制(5次锁定30分钟) | 完成 | P0 |
| 2.1.4 | 认证前端页面实现 | 完成 | P0 |
| 2.1.5 | 权限指令(v-permission) | 完成 | P0 |
| 2.1.6 | 路由守卫实现 | 完成 | P0 |
关键成果:
- JWT双Token机制(Access Token 8h + Refresh Token 7天);
- 3角色32权限体系(admin / asset_manager / employee);
- 登录失败5次锁定30分钟;
- 前端权限指令和路由守卫。
sprint 报告:ProjectDocs\sprint\第2部分:项目开发\001用户认证与权限管理.md - 模块2.1+2.2总结。
3.2.2 组织架构与系统管理模块
对话码道:“请继续完成tasks中的 第二部分:项目开发 - 2.2 组织架构与系统管理模块”。

任务执行总结:
| 任务ID | 任务描述 | 状态 | 优先级 |
|---|---|---|---|
| 2.2.1 | 部门树形管理CRUD | 完成 | P1 |
| 2.2.2 | 用户管理CRUD | 完成 | P0 |
| 2.2.3 | 角色权限配置 | 完成 | P0 |
| 2.2.4 | 用户状态管理(启用/禁用/重置密码) | 完成 | P0 |
| 2.2.5 | 部门删除保护(有子部门/员工时拒绝) | 完成 | P0 |
关键成果:
- 部门树形结构管理,支持删除保护;
- 用户完整CRUD + 角色关联 + 部门关联;
- 系统角色保护(is_system=true不可修改权限)。
3.2.3 资产基础管理模块
对话码道:“请继续完成tasks中的 第二部分:项目开发 - 2.3 资产基础管理模块”。

任务执行总结:
| 任务ID | 任务描述 | 状态 | 优先级 |
|---|---|---|---|
| 2.3.1 | 资产分类管理CRUD | 完成 | P1 |
| 2.3.2 | 资产入库(自动编码生成) | 完成 | P0 |
| 2.3.3 | 资产列表查询(筛选+分页) | 完成 | P0 |
| 2.3.4 | 资产详情查看 | 完成 | P0 |
| 2.3.5 | 资产编辑 | 完成 | P1 |
| 2.3.6 | 资产删除(仅在库状态) | 完成 | P0 |
| 2.3.7 | 数据权限隔离(员工仅本部门) | 完成 | P0 |
关键成果:
- 资产编码自动生成:
{分类代码}-{年份}-{4位序号}; - 数据权限: 管理员全量,员工仅本部门资产;
- 分类删除保护(有关联资产时拒绝)。
sprint 报告:ProjectDocs\sprint\第2部分:项目开发\002资产基础管理模块.md - 模块2.3总结。
3.2.4 资产业务流程模块
对话码道:“请继续完成tasks中的 第二部分:项目开发 - 2.4 资产业务流程模块”

任务执行总结:
| 任务ID | 任务描述 | 状态 | 优先级 |
|---|---|---|---|
| 2.4.1 | 状态流转引擎实现 | 完成 | P0 |
| 2.4.2 | 资产领用(需审批) | 完成 | P0 |
| 2.4.3 | 资产借用(需审批+预计归还日期) | 完成 | P0 |
| 2.4.4 | 资产退库(直接) | 完成 | P0 |
| 2.4.5 | 资产归还(借用中→在库) | 完成 | P0 |
| 2.4.6 | 资产报废(需审批) | 完成 | P0 |
| 2.4.7 | 资产转移(需审批) | 完成 | P0 |
| 2.4.8 | 审批流程实现(通过/驳回/撤销) | 完成 | P0 |
| 2.4.9 | 审批联动资产状态变更 | 完成 | P0 |
| 2.4.10 | 前端交互实现 | 完成 | P0 |
关键成果:
- 状态流转矩阵
VALID_TRANSITIONS+ 校验函数validate_transition(); - 审批通过自动变更资产状态(并发保护重读状态);
- 审批驳回/通过异步触发通知;
- 退库同时清除
user_id+department_id;
sprint 报告:ProjectDocs\sprint\第2部分:项目开发\003资产业务流程与审批模块.md - 模块2.4总结
3.2.5 批量导入导出模块
对话码道:“请继续完成tasks中的 第二部分:项目开发 - 2.5 批量导入导出模块”

任务执行总结:
| 任务ID | 任务描述 | 状态 | 优先级 |
|---|---|---|---|
| 2.5.1 | 导入模板下载 | 完成 | P1 |
| 2.5.2 | 批量导入实现(全部校验→批量插入) | 完成 | P0 |
| 2.5.3 | 导入校验(格式/必填/唯一性) | 完成 | P0 |
| 2.5.4 | 导出资产清单 | 完成 | P1 |
| 2.5.5 | 导入上限(500行) | 完成 | P0 |
关键成果:
- 导入策略: 全部校验优先 → 校验通过批量插入 → 失败返回全部错误;
- 导入上限500行,超出拒绝处理;
- 导出支持按状态筛选。
sprint 报告:ProjectDocs\sprint\第2部分:项目开发\004批量导入导出模块.md - 模块2.5总结
3.2.6 站内通知模块
对话码道:“请继续完成tasks中的 第二部分:项目开发 - 2.6 站内通知模块”

任务执行总结:
| 任务ID | 任务描述 | 状态 | 优先级 |
|---|---|---|---|
| 2.6.1 | 通知列表查询 | 完成 | P1 |
| 2.6.2 | 未读数量查询 | 完成 | P1 |
| 2.6.3 | 标记已读(单条/全部) | 完成 | P1 |
| 2.6.4 | 审批通过/驳回自动通知 | 完成 | P0 |
| 2.6.5 | 借用超期定时提醒(每日09:00) | 完成 | P1 |
| 2.6.6 | 前端通知Popover(最近5条+30s轮询) | 完成 | P1 |
关键成果:
- 审批结果自动触发通知(异步);
- APScheduler定时任务检查借用超期(去重避免重复通知);
- 前端通知面板 + 未读角标 + 30秒轮询。
sprint 报告:ProjectDocs\sprint\第2部分:项目开发\005站内通知模块.md - 模块2.6总结。
3.2.7 统计分析模块
对话码道:“请继续完成tasks中的 第二部分:项目开发 - 2.7 统计分析模块”

任务执行总结:
| 任务ID | 任务描述 | 状态 | 优先级 |
|---|---|---|---|
| 2.7.1 | 首页概览统计 | 完成 | P1 |
| 2.7.2 | 按分类统计 | 完成 | P1 |
| 2.7.3 | 按部门统计 | 完成 | P1 |
| 2.7.4 | 按状态统计 | 完成 | P1 |
| 2.7.5 | 趋势统计(30天) | 完成 | P2 |
| 2.7.6 | ECharts图表展示(饼图+柱状图+折线图) | 完成 | P1 |
| 2.7.7 | 统计数据导出 | 完成 | P1 |
关键成果:
- 5个统计API: overview / by-category / by-department / by-status / trend;
- ECharts三图表: 饼图(状态分布) + 柱状图(部门统计) + 折线图(30天趋势);
- 支持部门/分类统计导出Excel。
sprint 报告:ProjectDocs\sprint\第2部分:项目开发\006统计分析模块.md - 模块2.7总结。
3.2.8 操作日志与收尾模块
对话码道:“请继续完成tasks中的 第二部分:项目开发 - 2.8 操作日志与收尾模块”

任务执行总结:
| 任务ID | 任务描述 | 状态 | 优先级 |
|---|---|---|---|
| 2.8.1 | 操作日志HTTP中间件 | 完成 | P1 |
| 2.8.2 | 日志查询(筛选+分页) | 完成 | P1 |
| 2.8.3 | 日志导出 | 完成 | P2 |
| 2.8.4 | 日志只读保护 | 完成 | P1 |
| 2.8.5 | 分页计数效率优化 | 完成 | P0 |
| 2.8.6 | 预置数据初始化脚本 | 完成 | P0 |
关键成果:
- HTTP中间件自动拦截POST/PUT/PATCH/DELETE写操作记录日志;
- 分页计数优化:
select(func.count()).select_from(query.subquery()); - 预置账号: admin / Admin123(系统管理员);
sprint 报告:ProjectDocs\sprint\第2部分:项目开发\007操作日志与收尾模块.md - 模块2.8总结。
3.2.9 项目开发检验与补充
对话码道:“请深度检索项目,检验SDD tasks中的 第二部分:项目开发 是否都已完成,若未完成请自行补充。”

注:本案中该指令执行了三次,以避免问题遗漏。
3.2.10 开发阶段成果总结
3.2.10.1 后端架构
核心框架:
- FastAPI应用入口 + APScheduler + 操作日志HTTP中间件
- SQLAlchemy 2.x 异步ORM + Alembic数据库迁移
- Pydantic 2.x 数据验证 + Settings配置管理
数据模型 (19个表):
- Role, Permission, User, RefreshToken
- Department, AssetCategory, Asset, AssetStatusLog
- Approval, Notification, OperationLog
服务层:
auth_service.py- 认证服务 (5次锁定+双Token)asset_service.py- 核心: VALID_TRANSITIONS + validate_transition() + 数据权限approval_service.py- 核心: create_approval + approve_approval(联动+通知) + reject_approvalstats_service.py- 统计服务 (5个方法)import_export_service.py- 导入模板+批量导入+导出scheduler_service.py- 借用超期定时检查log_service.py- 操作日志服务
API路由 (46个端点):
/api/v1/auth/*- 5个端点 (login/refresh/logout/me/password)/api/v1/users/*- 6个端点/api/v1/departments/*- 6个端点/api/v1/categories/*- 7个端点/api/v1/assets/*- 16个端点 (含导入导出)/api/v1/approvals/*- 8个端点/api/v1/notifications/*- 5个端点/api/v1/stats/*- 7个端点/api/v1/logs/*- 2个端点/api/v1/roles/*- 4个端点
3.2.10.2 前端架构
核心框架:
- Vue 3 Composition API + TypeScript
- Vite构建 + Element Plus UI库
- Pinia状态管理 + Vue Router路由
状态管理 (4个Store):
auth.ts- 用户认证状态user.ts- 用户信息状态notification.ts- 通知状态 (30s轮询)app.ts- 应用全局状态
路由 (19个页面路由):
- 认证: Login
- 仪表盘: Dashboard
- 系统管理: DepartmentManage, UserManage, RoleManage, CategoryManage, OperationLog, Profile, ChangePassword
- 资产管理: AssetList, AssetCreate, AssetDetail, AssetEdit, AssetImport
- 审批管理: ApprovalList, PendingList, MyApply
- 通知管理: NotificationList
API封装:
- Axios封装 (Token注入 + 刷新 + 错误拦截 + patch方法)
- 模块化API: auth / user / asset / approval / stats / notification / log
3.2.10.3 数据库
Neon PostgreSQL:
- 项目ID: wandering-math-22100628
- 数据库名: neondb
- PostgreSQL版本: 17
- 表数量: 19个表
- 迁移状态: 已完成
关键约束:
- 用户名唯一约束
- 资产编码唯一约束
- 部门外键约束 (删除保护)
- 分类外键约束 (删除保护)
至此我们已经完成 AssetMgmt 项目开发阶段的任务,下一节我们将进入测试阶段。
3.3 测试与优化
提示:为避免对话过长,影响AI IDE的历史会话记录加载,建议新建一个码道对话,并对话码道:“请加载激活当前的项目级规则和skills,读取AssetMgmt SDD设计文档并深度检索项目,查看任务完成情况。稍后我们将开始执行测试任务。”
本案例中我们将在本地Windows环境进行测试,测试环境分为三个环节:本地测试环境搭建(在 2.2 本地测试环境部署 中已经手动完成了部分任务)、测试用例编写和执行。
3.3.1 测试设计优化
在前序案例《AssetMgmt固定资产管理系统(一):码道搭台,设计筑基》中我们已经基于系统整体设计进行了项目的测试设计,经过本案例前面章节的操作,项目功能和代码结构的具体实现发生了较多变化。因此我们需要先进行测试设计的优化。
对话码道:“请深度检索项目,并使用fullstack-testing根据当前项目状态,优化和完善SDD中的测试设计以及tasks中的测试任务”。

注:本案中该指令执行了三次,以避免问题遗漏。
完成如下测试设计优化:
- 新增104个遗漏用例
| 类别 | 新增用例 | P0 | P1 | P2 | 关键场景 |
|---|---|---|---|---|---|
| 认证服务边界 | 5 | 3 | 2 | 0 | inactive登录/密码修改后Token撤销/refresh拒绝inactive |
| 资产服务边界 | 5 | 3 | 2 | 0 | NotFoundException/force_change无效状态/退库字段清除 |
| 审批服务边界 | 4 | 4 | 0 | 0 | 并发状态变更/transfer审批/borrow日期写入 |
| 导入导出边界 | 5 | 3 | 2 | 0 | 部门不存在/名称超长/批量回滚/行数上限/多错误合并 |
| 用户/部门/通知/统计/调度 | 9 | 6 | 3 | 0 | reset解锁locked/间接环/用户隔离/零资产/通知去重 |
| 前端边界与联动 | 7 | 5 | 2 | 0 | Login Store联动/lockMessage/hasPermission/request并发刷新 |
| 前端Store/组件补充 | 19 | 5 | 11 | 3 | auth store localStorage/user store admin/notification polling/AssetList v-if/AssetCreate日期 |
| 集成层补充 | 6 | 1 | 5 | 0 | asset_manager is_admin/文件扩展名/UUID 422/Schema校验 |
| 其他边界(P1+P2) | 44 | 0 | 27 | 17 | 各模块P1/P2级边界条件 |
- 修正5个冲突用例
| 用例ID | 冲突原因 | 修正 |
|---|---|---|
| UT-VAL-005 | UserCreate.email为纯str,无EmailStr | 预期从"验证失败"改为"验证通过" |
| UT-VAL-006 | UserCreate.phone为纯str,无pattern | 预期从"验证失败"改为"验证通过" |
| UT-VAL-007 | UserCreate.password仅min_length=8 | 预期从"验证失败(需含字母和数字)“改为"验证通过” |
| UT-VAL-010 | BorrowRequest.expected_return_date无future校验 | 预期从"验证失败"改为"验证通过" |
| ForceChangeRequest | new_status无枚举校验 | 补充说明由service层拒绝 |
3.3.2 测试环境搭建
继续对话码道:“请继续完成tasks中的任务 3.1.1: 本地Windows测试环境准备”。

3.3.3 编写测试用例
3.3.3.1 编写后端测试用例
继续对话码道:“请使用 fullstack-testing skill 继续完成tasks中的任务 3.2.1:后端单元测试编写(认证+状态引擎+审批+验证)”。

任务执行总结:
- 框架:pytest + SQLite内存库;
- 执行命令:
pytest tests/unit/backend -v; - 通过率:100% (274/274) 。
| 序号 | 测试文件 | 用例数 | 模块 | 状态 |
|---|---|---|---|---|
| 1 | test_security.py | 17 | 安全基础层(密码哈希/JWT生成验证/Token解析) | 完成 |
| 2 | test_deps.py | 17 | 权限守卫(get_current_user/require_permission/admin_required) | 完成 |
| 3 | test_codegen.py | 7 | 编码生成(格式/序号/年份/并发) | 完成 |
| 4 | test_exceptions.py | 7 | 异常类(继承/消息/HTTP映射) | 完成 |
| 5 | test_config.py | 9 | 配置管理(Settings/env加载/默认值) | 完成 |
| 6 | test_auth_service.py | 18 | 认证服务(login/锁定/双Token/密码修改) | 完成 |
| 7 | test_asset_status.py | 17 | 状态引擎(流转矩阵/校验/并发保护) | 完成 |
| 8 | test_approval_service.py | 10 | 审批服务(创建/通过/驳回/撤销/联动) | 完成 |
| 9 | test_user_service.py | 14 | 用户服务(CRUD/角色/部门/密码重置) | 完成 |
| 10 | test_department_service.py | 14 | 部门服务(树/CRUD/删除保护/员工) | 完成 |
| 11 | test_category_service.py | 12 | 分类服务(树/CRUD/删除保护/统计) | 完成 |
| 12 | test_notification_service.py | 8 | 通知服务(创建/已读/未读数) | 完成 |
| 13 | test_stats_service.py | 6 | 统计服务(概览/分类/部门/状态/趋势) | 完成 |
| 14 | test_log_service.py | 3 | 日志服务(创建/查询) | 完成 |
| 15 | test_schemas.py | 12 | Schema验证(必填/类型/嵌套) | 完成 |
| 16 | test_excel_utils.py | 14 | Excel工具(导入/导出/编码/日期) | 完成 |
| 17 | test_import_export_service.py | 12 | 导入导出服务(模板/校验/批量/导出) | 完成 |
| 18 | test_middleware.py | 6 | 操作日志中间件(拦截/跳过/记录) | 完成 |
| 19 | test_init_service.py | 5 | 预置数据初始化(角色/权限/用户) | 完成 |
| 20 | test_scheduler_service.py | 5 | 调度服务(借用超期/通知触发) | 完成 |
| 21 | test_edge_cases.py | 58 | 边界异常路径(空值/越界/并发/类型) | 完成 |
| 22 | 合计 | 274 | 21文件 |
关键成果:
- 覆盖全部核心服务层(auth/asset/approval/user/department/category/notification/stats/log);
- 覆盖安全基础层(security/deps)和工具层(codegen/excel/config);
- 边界异常测试58用例,覆盖空值/越界/并发/类型转换。
sprint 报告:ProjectDocs\sprint\第3部分:测试与优化\002后端单元测试编写.md - 任务3.2.1总结。
3.3.3.2 编写前端测试用例
继续对话码道:“请使用 fullstack-testing skill 继续完成tasks中的任务 3.2.2: 前端单元测试编写(组件+Store+工具函数)”。

任务执行总结:
- 框架: Vitest 4.1.5 + @vue/test-utils + happy-dom;
- 执行命令:
npm run test; - 通过率:100% (162/162) 。
| 序号 | 测试文件 | 用例数 | 模块 | 状态 |
|---|---|---|---|---|
| 1 | auth.test.ts | 7 | auth store (login/logout/setUser/isAuthenticated/localStorage) | 完成 |
| 2 | user.test.ts | 11 | user store (permissions/role/isAdmin/hasPermission/fetchUserInfo) | 完成 |
| 3 | notification.test.ts | 6 | notification store (fetchUnreadCount/startPolling/stopPolling) | 完成 |
| 4 | app.test.ts | 4 | app store (sidebar/breadcrumb/toggle) | 完成 |
| 5 | format.test.ts | 41 | 格式化工具 (formatMoney/formatDate/formatDateTime/getStatusType) | 完成 |
| 6 | validate.test.ts | 18 | 验证工具 (validateUsername/validatePassword/validateEmail/validatePhone) | 完成 |
| 7 | request.test.ts | 14 | 请求封装 (Token管理/并发刷新/错误处理/401/403/500) | 完成 |
| 8 | guards.test.ts | 5 | 路由守卫 (未认证重定向/已认证login重定向/无权限403) | 完成 |
| 9 | usePermission.test.ts | 6 | 权限composable (hasPermission/hasAnyPermission/hasAllPermissions) | 完成 |
| 10 | usePagination.test.ts | 6 | 分页composable (fetch/pageChange/sizeChange/reset) | 完成 |
| 11 | permission.test.ts | 4 | 权限指令 (v-permission/空权限/admin) | 完成 |
| 12 | Login.test.ts | 6 | 登录组件 (渲染/表单/lockMessage/loading) | 完成 |
| 13 | AssetList.test.ts | 10 | 资产列表 (状态标签/格式化/操作按钮/筛选/权限) | 完成 |
| 合计 | 162 | 14文件 |
关键成果:
- 覆盖全部4个Store(auth/user/notification/app);
- 覆盖全部工具函数(format/validate/request);
- 覆盖路由守卫、Composable、指令、组件。
sprint 报告:ProjectDocs\sprint\第3部分:测试与优化\003前端单元测试编写.md - 任务3.2.2总结。
3.3.3.3 编写API集成测试用例
继续对话码道:“请使用 fullstack-testing skill 继续完成tasks中的任务 3.2.3: API集成测试编写”。

任务执行总结:
- 框架:pytest + FastAPI TestClient + SQLite内存库;
- 执行命令:
pytest tests/integration/api -v; - 通过率:100% (93/93) 。
| 序号 | 测试文件 | 用例数 | 模块 | 状态 |
|---|---|---|---|---|
| 1 | test_auth_api.py | 12 | 认证API (login/refresh/logout/me/password/锁定) | 完成 |
| 2 | test_crud_api.py | 22 | 用户/部门/分类CRUD (创建/重复/列表/详情/更新/删除) | 完成 |
| 3 | test_assets_api.py | 22 | 资产CRUD+业务操作+状态日志+导入导出 | 完成 |
| 4 | test_other_api.py | 27 | 审批/通知/统计/日志/角色/健康检查 | 完成 |
| 5 | test_security_api.py | 10 | 安全防护+数据库约束+审批通知联动 | 完成 |
| 合计 | 93 | 5文件 |
关键成果:
- 覆盖全部46个API端点;
- 测试认证流程、CRUD操作、业务流程、安全防护;
- 审批-通知联动集成测试。
sprint 报告:ProjectDocs\sprint\第3部分:测试与优化\004API集成测试编写.md - 任务3.2.3总结。
3.3.3.4 编写E2E测试用例
继续对话码道:“请使用 fullstack-testing skill 继续完成tasks中的任务 3.2.4: E2E测试用例编写”。

任务执行总结:
- 框架:Playwright 1.59 + Chromium;
- 执行命令:
npx playwright test; - 状态:已编写,待执行(规则R8)。
| 序号 | 测试文件 | 用例数 | 模块 | 状态 |
|---|---|---|---|---|
| 1 | test_auth_flow.spec.ts | 5 | 用户认证流程 (登录/密码错误/锁定/登出/Token过期) | 完成 |
| 2 | test_claim_flow.spec.ts | 3 | 资产领用流程 (申请→审批通过/申请→驳回/借用中不可报废) | 完成 |
| 3 | test_borrow_flow.spec.ts | 3 | 资产借用归还流程 (借用→归还/列表显示/归还弹窗) | 完成 |
| 4 | test_return_flow.spec.ts | 2 | 资产退库流程 (退库/退库后可再领用) | 完成 |
| 5 | test_scrap_flow.spec.ts | 2 | 资产报废流程 (报废→审批/已报废不可操作) | 完成 |
| 6 | test_transfer_flow.spec.ts | 2 | 资产转移流程 (转移→审批/需审批) | 完成 |
| 7 | test_permission_flow.spec.ts | 3 | 权限隔离 (菜单限制/数据隔离/操作限制) | 完成 |
| 8 | test_reject_flow.spec.ts | 2 | 审批驳回流程 (申请撤销/已审批不可撤销) | 完成 |
| 9 | test_import_flow.spec.ts | 2 | 资产批量导入 (下载模板导入/校验失败) | 完成 |
| 10 | test_create_flow.spec.ts | 2 | 资产入库流程 (新增入库/保存并继续) | 完成 |
| 11 | test_password_flow.spec.ts | 2 | 修改密码流程 (修改成功/旧密码错误) | 完成 |
| 12 | test_dashboard_flow.spec.ts | 2 | 首页概览 (管理员待办/员工待办) | 完成 |
| 13 | test_notification_flow.spec.ts | 3 | 通知流程 (收到通知/查看跳转/全部已读) | 完成 |
| 合计 | 33 | 12文件 |
关键成果:
- 覆盖12个核心业务流程;
- E2E用例ID与测试设计文档完全对应;
- 统一选择器常量 helpers/selectors.ts ;
- 统一认证辅助函数 helpers/auth.ts 。
sprint 报告:ProjectDocs\sprint\第3部分:测试与优化\005E2E测试编写.md - 任务3.2.4总结。
3.3.4 执行测试用例与修复bug
3.3.4.1 执行测试用例
继续对话码道:“请继续完成tasks中的任务 3.3.1: 本地Windows环境测试执行与Bug修复”。

在执行到E2E测试时由于Neon数据库延迟问题,导致测试进展缓慢。为了避免直接使用Neon数据库导致测试时间超长或失败,我们先记录并跳过该问题,让测试继续执行。

第一次执行测试用例,修复了全部后端、前端、API集成和部分E2E问题。
再次执行:“请继续完成tasks中的任务 3.3.1: 本地Windows环境测试执行与Bug修复”。

由于第一次执行记录了Neon数据库延迟问题,第二次执行时直接使用SQLite进行测试。使用本地SQLite数据库后执行速度大幅度提升。所有的测试用例执行结束,修复全部E2E问题。
再次对话码道执行 3.3.1: 本地Windows环境测试执行与Bug修复:
请识别Neon MCP服务修改数据库配置,将数据库切换为Neon PostgreSQL,创建Neon项目asset_mgmt并迁移数据库,填充测试数据后再次执行tasks中的任务 3.3.1: 本地Windows环境测试执行与Bug修复,执行中若再次出现数据库延迟问题,则延长用例执行时间,并在sprint中记录延迟时间。

3.3.4.2 Bug修复总结
- Bug统计
| 测试类型 | 用例数 | 通过率 | 耗时 | 延迟倍率 |
|---|---|---|---|---|
| 后端单元测试 | 274 | 100% | 100.5s | 1.0x |
| 前端单元测试 | 162 | 100% | 3.7s | 1.0x |
| API集成测试 | 93 | 100% | 113.0s | 1.0x |
| E2E测试 | 35 | 100% | 9.1min | 5.7x |
| 合计 | 564 | 100% | ~12min | 2.0x |
注:E2E测试延迟较大,因Neon Serverless冷启动(每次API请求约5-8秒)。已通过延长超时配置解决。
- E2E测试明细
- 框架:Playwright 1.59 + Chromium ;
- 执行命令:
npx playwright test; - 状态:已完成。
| 序号 | 测试文件 | 用例数 | 状态 |
|---|---|---|---|
| 1 | test_auth_flow.spec.ts | 5 | 通过 |
| 2 | test_claim_flow.spec.ts | 3 | 通过 |
| 3 | test_borrow_flow.spec.ts | 3 | 通过 |
| 4 | test_return_flow.spec.ts | 2 | 通过 |
| 5 | test_scrap_flow.spec.ts | 2 | 通过 |
| 6 | test_transfer_flow.spec.ts | 2 | 通过 |
| 7 | test_permission_flow.spec.ts | 3 | 通过 |
| 8 | test_reject_flow.spec.ts | 2 | 通过 |
| 9 | test_import_flow.spec.ts | 2 | 通过 |
| 10 | test_create_flow.spec.ts | 2 | 通过 |
| 11 | test_password_flow.spec.ts | 2 | 通过 |
| 12 | test_dashboard_flow.spec.ts | 2 | 通过 |
| 13 | test_notification_flow.spec.ts | 3 | 通过 |
| 14 | debug-login.spec.ts | 1 | 通过 |
| 15 | env.spec.ts | 1 | 通过 |
| 合计 | 35 |
sprint 报告:ProjectDocs\sprint\第3部分:测试与优化\006本地测试执行与Bug修复.md - 任务3.2.5总结。
3.3.5 项目启动与代码提交
继续对话码道:“请帮我向数据库中插入一些数据,我想看一个比较全面的展示效果,然后重新启动AssetMgmt 固定资产管理系统前后端程序。”

数据插入后,启动项目,使用码道提供的系统初始密码登录AssetMgmt 固定资产管理系统,手动检查各项功能均可正常访问。
注:体验过程中可打开浏览器开发者模式,若发现问题,可将问题反馈给码道,让其帮助修复。

注:因Neon Serverless冷启动(每次API请求约5-8秒)问题,数据加载有延迟。
在“2.1.2 Git 安装与配置”中,我们已经在本地安装配置了Git。对话码道,将代码上传至gitCode:
请帮我在gitCode中创建一个名为asset_mgmt的公有代码仓,并将当前目录下的所有代码、文件等提交到该仓库中。

四、案例总结&补充
本案例在本地 Windows 11 PC 上搭建开发测试环境,以华为云 CodeArts 代码智能体为核心开发工具,结合 sdd-workflow、bug-fix-reporter 等技能以及规则和 Neon MCP Server,基于 AssetMgmt SDD 成功完成了固定资产管理系统的开发、测试与运行。实现了 AssetMgmt 项目从“设计蓝图”到“智慧管家”的华丽转变,让固定资产管理真正从“纸上谈兵”走向“实战落地”。
后续,我们计划将 AssetMgmt 固定资产管理系统部署至华为云 ECS 环境。由于云上环境与本地 Windows 环境存在较大差异,在下一篇案例中,我们将基于华为开发者空间 - 云开发环境重新部署该系统,并再次执行测试用例与修复 Bug,以确保线上项目与本地开发环境的行为保持一致。
附录
本案例中所涉及的AssetMgmt固定资产管理系统源码、测试用例以及过程文件等已上传至gitCode,请根据需要进行下载。
本案例中所使用的规则可点这里进行下载。
码道领航AssetMind智能资产系统开发系列案例:
- AssetMgmt固定资产管理系统(一):码道搭台,设计筑基
- AssetMgmt固定资产管理系统(二):码道领航,落地生根 ← 当前案例
- AssetMgmt固定资产管理系统(三):码道修缺,空间补全(持续开发中,敬请期待)
- AssetMgmt固定资产管理系统(四):码道有仓,流水筑链(持续开发中,敬请期待)
- AssetMgmt固定资产管理系统(五):码道发布,上线收官(持续开发中,敬请期待)
反馈改进建议
如您在案例实操过程中遇到问题或有改进建议,可以到论坛帖评论区反馈即可,我们会及时响应处理,谢谢!
更多推荐




所有评论(0)