2025-12-12 将本地假数据改造,迁移成 nitro 接口
初始化 apps\type 的专用类型库
我需要你在 apps\type 目录内,初始化一个专门存放业务类型的 node 包。
- 新建 src 目录。
- 新建 src/index.ts 文件作为本包对外导出类型的入口文件。
- 未来其他的工具将会在
apps\type内新建各自的业务类型文件。 - 这个包是私有包,避免发包。
- 这个包的 main 入口将直接导出 index.ts 文件。
- 其他包将直接从这里导入所需要的业务类型。
01 更新 migrate-static-data-to-nitro-query 的 openspec 规范
✅ 已完成:在 openspec/changes/migrate-static-data-to-nitro-query/specs/type-system/spec.md 中补充了初始化 apps\type 的专用类型库的行为规范。
详细规范请查看:
openspec/changes/migrate-static-data-to-nitro-query/specs/type-system/spec.md- "Requirement: apps/type 包初始化"openspec/changes/migrate-static-data-to-nitro-query/specs/type-system/spec.md- "Requirement: 类型库基础类型文件"
固定提供的接口业务类型
apps\type 必须要单独提供两个独立的文件,存放接口请求的接口格式类型。分别是 JsonVO 和 PageDTO 。请你务必直接照抄以下的代码。
/**
* 前后端数据对接数据对象
* @description
* 后端 JsonVO 泛型类的前端翻译
*
* `01s` 项目统一的数据返回格式
*/
export interface JsonVO<T> {
/** 状态码 */
code: number;
/** 提示消息 */
message: string;
/** 数据对象 */
data: T;
}/**
* 数据分页的返回对象
* @description
*
* `01s` 项目统一的数据返回格式
*/
export interface PageDTO<T> {
/**
* 当前页码
*/
pageIndex: number;
/**
* 每页显示最大数据条数
*/
pageSize: number;
/**
* 总条数
*/
total: number;
/**
* 总页数
*/
pages: number;
/**
* 当前页数据列表
*/
rows: T[];
}将本地静态写死的数据转换成真实的 nitro 接口,并在各个页面内使用基于 @tanstack/vue-query 的接口请求库
这是一个长期的,巨大的代码写法迁移任务。我们将告别前端本地写死的静态数据,不再使用中文名的字段名和变量名,全部换成英文变量名。
本项目 apps\admin\package.json 已经变成了一个基于 nitro 的全栈项目。本次迁移任务就是立足于 vite + nitro 的技术前提而开始的。
我需要你帮我设计一个巨大的,严谨的,完善的,事无巨细的,精确的大型迁移任务计划文档。生成完迁移实施文档后,我会将这份 迁移实施文档 用 openspec 的方式,转换成一个可以长期使用的,连续调用的长任务清单,以及对应的代码编写规范。
主要工作规范 spec
对于每一个静态写死的列表页 vue 组件及其附属代码而言,你的主要迁移步骤是这样的:
- 明确要重点拆分处理的假数据文件: 阅读每一个
apps\admin\src\pages范围内的test-data.ts假数据文件。 - 明确清楚要重点改写接口请求方式写法的 vue 组件: 阅读每一个
假数据文件对应附属的index.vue列表页文件。 - 迁移业务类型: 将
假数据文件出现的业务类型,按照代码编写规范,改写并迁移到apps\type类型专用库内。迁移时需要满足按照对应 index.vue 业务文件目录的方式来迁移业务类型。 - 编写 nitro 接口: 将列表页的 loadTableData 函数,迁移改写成真实的分页请求接口。
- 使用 nitro 接口。
需要你协助设计的东西
- 怎么编写 nitro 接口?
- 怎么编写可以高度复用的列表页接口请求模板?
- 在当前 vite 项目内,使用
@tanstack/vue-query的最佳实践?
将业务类型都迁移到专用的 apps\type 类型专用库
apps\admin 管理后台项目将导入生产环境的 apps\type 类型专用本地库
- 以生产环境依赖按照这个类型库。
- 以 pnpm 工作区协议的方式,安装 pnpm 的 monorepo 包。注意务必满足 pnpm 的工作区协议。
nitro 编写接口的规范 spec
- 全部的接口,必须设计成 post 接口。不允许出现其他请求形式的接口。
- 接口目录名称规范,与对应的列表页文件的目录规范相同。
- 每一个接口的数据返回格式为
apps\type类型专用库的JsonVO类型。 - 每一个分页请求接口的数据返回格式为
apps\type类型专用库的PageDTO类型。请注意,务必实现两个泛型类型的嵌套使用。正确的类型约束应该是JsonVO<PageDTO<具体的业务类型>>的形式。 - 每一个列表请求接口都应该实现对请求参数的筛选。
- 不需要考虑链接数据库: 目前阶段的数据全部都使用死数据,不需要使用来自数据库的数据。
- 每个分页请求的接口的返回值,直接使用固定的,写死的,来自于
假数据文件的tableData数组。
nitro 编写接口的代码规范 spec
- 必须主动使用
import { defineHandler, readBody } from "nitro/h3";写法。在 nitro v3 版本内,要主动的导入工具。没有自动导入功能了。 - 返回值必须用完整的类型约束。不要直接返回一个对象。
代码编写范围规范 spec
你要处理的代码范围非常的大。
- 整个
apps\admin\src\pages内的全部代码。 - 全部满足以下文件目录规范的代码:
│ index.vue # 列表页
│ test-data.ts # 假数据文件
└─components
form.ts # 表单类型文件
form.vue # 表单@tanstack/vue-query 请求函数使用规范 spec
代码与变量名规范 spec
- 不允许出现任何形式的中文变量名。
- 用简单的 jsdoc 注释格式,为变量和类型增加补全说明注释。相当于把中文命名的变量名,迁移到 jsdoc 注释内。
确定 openspec 精细化任务工作范围的方案
按照上述的要求,你需要全量的阅读整个项目的代码。这对你来说是不可接受的,你没有足够大的上下文窗口阅读代码,我也没有那么多 token 供你这样使用。请你使用以下的方式来协助确定 openspec 的 tasks.md 任务工作范围,以及需要处理的代码目录:
- 阅读
openspec\changes\archive\2025-12-10-sync-taskmaster-test-data-backlog\tasks.md文件的目录清单。 - 参考这一份任务清单,协助编写一个完整的 openspec 格式的 tasks.md 任务工作范围。
openspec 的规格生成规范 spec
- 在使用 openspec 的工具将上述要求全部变成满足 openspec 规范文件时,务必要确保不要丢失掉任何具体的 spec 行为规范。我不希望出现转换格式后的规范文件反而缺少了必要的规范。
常用的,高强度服用的类型修复提示词
运行后台项目的类型检查命令,整体性的解决项目的类型报错问题
- 运行
后台项目的类型检查命令,并修复类型报错。 - 当你遇到那种因为缺失类型和变量的错误时,请你根据文件的路径,去智能的推断其应该在
类型项目内的变量名和类型名。- 各种缺失的类型和变量,应该首先去
@01s-11comm/type内寻找。请你按照文件路径所体现的业务路径,在@01s-11comm/type内去索引正确的变量。 - 需要找的变量通常是类型,和下拉选择数组。
- 各种缺失的类型和变量,应该首先去
- 请你严格按照
openspec\changes\migrate-static-data-to-nitro-query目录内的全部文件,来更改代码。 - 很多类型文件,为了完成类型修复,而被错误的改写成中文。这是不对的,不符合
migrate-static-data-to-nitro-query任务的要求的。在你修复类型报错的时候,请你在将中文命名的字段换成英文字段的前提下,对应的,及时的去修改 vue 组件内使用的中文命名。 - 请主动的使用
fix-type-error子代理,完成类型修复任务。- 先针对性的确保类型项目不出现故障。
- 再去处理 admin 后台项目的类型故障。
- 不要通过新增
test-data.ts假数据文件的方式,来处理类型故障。 - 不要考虑旧中文字段的兼容,不要为了兼容中文字段而去增加中文字段,不要用中文变量来解决类型故障。有问题的是中文变量名,和中文类型名。
杂项跟进提示词
01 确保文件满足规范
- 运行规范检查命令:
openspec validate migrate-static-data-to-nitro-query --strict- 根据检查命令的信息,修复
migrate-static-data-to-nitro-query系列文件不规范的问题。 - 修复错误时,请不要删改删减掉现有的规范。不要乱加或乱改规范性的指导内容。
- 继续运行上述命令,直到没有出现任何规范性报错。
- 生成一份事故报告,告诉我为什么会出现规范对不上的错误?以及以后该如何避免这一类的错误?
02 更新补全 openspec\changes\migrate-static-data-to-nitro-query\tasks.md 任务列表
在你持续的执行 migrate-static-data-to-nitro-query 任务时,你没有及时的更新补全任务列表清单
- 请你模仿 tasks.md
阶段 2: dev-team 模块迁移 (40 任务,1 周)的任务写法,按照apps\admin\src\docs\reports\2025-12-12-static-data-migration-to-nitro-query-plan.md和apps\admin\src\docs\reports\2025-12-12-static-data-migration-to-nitro-query-plan-by-claude-plan-mode.md的要求,新建补全完整完善的,细粒度清晰的任务表。 - 更新任务表。你已经完成了一部分的 nitro 接口生成,请你更新你刚刚生成的任务表。
03 增加完成 nitro 接口生成后需要及时删除掉旧 test-data.ts 的行为规范
- 阅读
apps\admin\src\docs\reports\2025-12-12-static-data-migration-to-nitro-query-plan.md和apps\admin\src\docs\reports\2025-12-12-static-data-migration-to-nitro-query-plan-by-claude-plan-mode.md文档,了解清楚 nitro 假数据迁移的任务需求。 - 阅读
openspec\changes\migrate-static-data-to-nitro-query\specs的 openspec 任务规范,明确清楚任务规范的 markdown 格式。 - 在合适的位置,增加完成 nitro 接口生成后需要及时删除掉旧
test-data.ts的行为规范。我希望在完成 nitro 接口迁移后,可以及时的删除掉旧的test-data.ts文件。 - 在
openspec\changes\migrate-static-data-to-nitro-query\tasks.md任务清单内,增加适当的删除掉旧test-data.ts假数据文件的子任务。 - 更新
openspec\changes\migrate-static-data-to-nitro-query\tasks.md任务清单的任务总数等信息。 - 运行以下规范检查命令,确保规范文件满足格式需求。
openspec validate migrate-static-data-to-nitro-query --strict04 增加 nitro 编写接口的代码规范和代码写法检查任务
- 请你阅读
apps\admin\src\docs\reports\2025-12-12-static-data-migration-to-nitro-query-plan.md的6.2 Nitro 接口模板,了解具体 nitro 的代码写法。 - 阅读
apps\admin\src\docs\prompts\各种杂项\2025-12-12-migrate-static-data-to-nitro-query.md除开杂项跟进提示词的部分。了解清楚迁移时需要的具体细节。 - 按照 openspec 的要求,修改更新
openspec\changes\migrate-static-data-to-nitro-query\specs目录内的规范文件。 - 在
migrate-static-data-to-nitro-query任务内,有很多接口已经生成了,但是这些接口的代码写法不满足规范要求,请你在openspec\changes\migrate-static-data-to-nitro-query\tasks.md任务清单内,增加 nitro 代码写法检查的任务。 - 更新
openspec\changes\migrate-static-data-to-nitro-query\tasks.md任务清单的任务总数等信息。 - 运行以下规范检查命令,确保规范文件满足格式需求。
openspec validate migrate-static-data-to-nitro-query --strict05 增加新的严格任务执行规范,并重构任务列表
- 我现在正在高强度的使用 openspec 生成的任务,但是 openspec 任务执行过程中,本身也存在了很多不规范。
- 完成任务时,应该按照严格的顺序来完成,不要跳过任务。
- 完成
migrate-static-data-to-nitro-query任务时,应该按照以下的严格步骤来修改每一个列表页:- 新建
apps\type\src\*对应目录的业务类型,和下拉选择用的数组。 - 新建
apps\admin\server\*对应业务目录的mock-data.ts固定的假数据。其类型约束满足来自@01s-11comm/type类型库提供的业务类型。 - 新建
apps\admin\server\*对应业务目录的list.post.tsnitro 接口。 - 新建
apps\admin\src\api\*对应目录的封装useListQuery的 hooks 钩子函数。 - 改写改造对应业务目录的 index.vue 列表页。使其使用封装好的对应业务 hooks 函数、使用来自
@01s-11comm/type类型库提供的业务类型和下拉选用的数组。 - 删除掉对应业务目录的
test-data.ts假数据文件。 - 对应的 form.ts 和 form.vue 文件,应该及时更改类型和变量的导入路径,从使用来自
@01s-11comm/type类型库提供的业务类型和下拉选用的数组。
- 新建
- 按照 openspec 的要求,修改更新
openspec\changes\migrate-static-data-to-nitro-query目录内的规范文件,务必确保以后执行migrate-static-data-to-nitro-query任务时,能够满足上述的严格修改步骤。 - 请你阅读
openspec\changes\migrate-static-data-to-nitro-query\tasks.md任务文件,按照上述的严格要求,重构整个任务列表文件。 - 重新更新
任务列表文件的任务总数,和已完成的任务数量。
06 以当前暂存区文件为索引,按照任务要求,修改对应 vue 组件和类型文件
- 以当前暂存区文件为索引,指定一系列的任务,并按照要求更改。
- 请你严格按照
openspec\changes\migrate-static-data-to-nitro-query目录内的全部文件,来更改代码。 - 有很多类型文件,为了完成类型修复,而被错误的改写成中文。这是不对的,不符合
migrate-static-data-to-nitro-query任务的要求的。在你修复类型报错的时候,请你在将中文命名的字段换成英文字段的前提下,对应的,及时的去修改 vue 组件内使用的中文命名。 - 以更新英文字段的
类型项目为索引,对应的去修改 vue 组件内使用的中文命名。 - 先完成
类型项目内代码的字段名换成英文,再开始去修改 vue 组件的中文字段命名。 - 不断地运行
后台项目提供的类型报错检查命令,直到整个项目都不出现任何类型报错。
07 手动整理公共通用使用的业务类型,并设计新的公共下拉选择数组的新规范
对于类型项目,请你在 ./apps/type/src/business 目录下面,搜索以下代码片段:
{ label: "物业服务合同", value: "物业服务合同" },
{ label: "租赁合同", value: "租赁合同" },
{ label: "维修合同", value: "维修合同" },- 请你将这些公共的,跨项目的,通用的下拉选择数组,统一整理整合到
apps\type\src\common\business-options.ts文件内。 - 你迁移删改了类型项目内内容重复的代码,需要你同步的去 admin 后台项目内,将对应文件的使用做同步性的更改。更改时,不应该使用兼容性的 as 写法,直接更换新的,通用的变量名。
- 在
openspec\changes\migrate-static-data-to-nitro-query目录内,阅读现有的迁移规范。并且新增满足 openspec 的公共业务下拉选择数组迁移规范。统一的将这一种满足
OptionsType类型的下拉选择数组,都迁移到apps\type\src\common\business-options.ts文件内,统一使用这里的下拉选择数组。
08 更新 common-business-options 规范,禁止类型项目使用含有中文的变量名
- 阅读该 openspec 规范文件
openspec\changes\migrate-static-data-to-nitro-query\specs\common-business-options\spec.md - 这个规范文件,本身很不符合其他的规范文件约束。按照其他的 openspec 规范,是不应该在 type 类型项目和 admin 管理后台项目内,使用任何中文变量名的。
- 请你更新
openspec\changes\migrate-static-data-to-nitro-query\specs\common-business-options\spec.md内的代码实例。避免使用错误的变量名写法。 - 请你也同步更新类型项目内,使用中文的变量名。
- 更新使用中文变量名的其他 admin 项目代码。确保变量和类型应用写法相统一。
- 不要考虑向后兼容的写法,这个改写过程本身就是破坏性变更。
- 不要主动增加含有中文变量名的写法,不需要兼容。而是 admin 项目代码的变量名,以 type 类型项目的变量名为准。
- 先更改 type 类型项目的代码,先保证其符合不包含中文变量名的规范;然后再去修改 admin 后台项目的代码。
09 清空重设任务清单
- 我现在正在高强度的使用 openspec 生成的任务,但是 openspec 任务执行过程中,本身也存在了很多不规范。
- 完成任务时,应该按照严格的顺序来完成,不要跳过任务。
- 完成
migrate-static-data-to-nitro-query任务时,应该按照以下的严格步骤来修改每一个列表页:- 新建
apps\type\src\*对应目录的业务类型,和下拉选择用的数组。 - 新建
apps\admin\server\*对应业务目录的mock-data.ts固定的假数据。其类型约束满足来自@01s-11comm/type类型库提供的业务类型。 - 新建
apps\admin\server\*对应业务目录的list.post.tsnitro 接口。 - 新建
apps\admin\src\api\*对应目录的封装useListQuery的 hooks 钩子函数。 - 改写改造对应业务目录的 index.vue 列表页。使其使用封装好的对应业务 hooks 函数、使用来自
@01s-11comm/type类型库提供的业务类型和下拉选用的数组。 - 删除掉对应业务目录的
test-data.ts假数据文件。 - 对应的 form.ts 和 form.vue 文件,应该及时更改类型和变量的导入路径,从使用来自
@01s-11comm/type类型库提供的业务类型和下拉选用的数组。 - 对应的
form.ts文件,不仅仅需要将业务类型抽取出来,换成纯英文的方式,然后再引入刚刚写入到@01s-11comm/type类型库的业务类型。 - 对应的
form.vue文件,需要从类型库内获取到下拉列表数据,并正确使用下拉列表数据;使用类型库提供的纯英文业务类型。
- 新建
- 每一个文件都必须要检查,并遵守
migrate-static-data-to-nitro-query任务的规范文件。在具体执行任务时,你会遇到有很多代码已经不同程度的完成了任务,但是完成的不准确,有很多缺漏。请你务必对每一个经手的文件,做仔细思考,对比代码写法是否符合migrate-static-data-to-nitro-query任务的规范写法,并做出修改。 - 按照 openspec 的要求,修改更新
openspec\changes\migrate-static-data-to-nitro-query目录内的规范文件,务必确保以后执行migrate-static-data-to-nitro-query任务时,能够满足上述的严格修改步骤。 - 请你根据
apps\admin\src\router\rank\rank-route-keys.ts提供的RANK_ROUTE_KEYS数组,根据数组提供的三级路由,来清空,并重做整个openspec\changes\migrate-static-data-to-nitro-query\tasks.md任务文件。任务列表文件的每一个基于三级路由确定的工作目录,都要按照上面说的任务清单项,列举出非常详细的任务清单步骤。
10 单独封装专用的搜索查询工具函数,并更新规范文档的使用代码
- 阅读
openspec\changes\migrate-static-data-to-nitro-query\specs\nitro-api\spec.md的2. 数据筛选 - 使用通用筛选模式遍历所有筛选字段这部分的 typescript 逻辑,我对这个逻辑非常感兴趣。很喜欢这个写法。请你将这段代码单独抽取出来,作为一个通用工具函数。使用泛型来传递业务类型。 - 这是服务端的通用表格字段查询工具函数,请你在
apps\admin\server\utils目录内编写这个通用查询工具。 - 更新
openspec\changes\migrate-static-data-to-nitro-query\specs\nitro-api\spec.md的2. 数据筛选 - 使用通用筛选模式遍历所有筛选字段这部分,使用你刚才抽取出来的查询工具。 - 在服务端 nitro 接口内调用通用工具函数时,请你使用
utils作为有效的服务端代码引用别名。即apps\admin\nitro.config.ts配置文件内写的alias配置,专用于服务端的配置名称。使用正确的utils作为正确的模块导入别名。避免使用冗长的相对路径。 - 同步地更新
openspec\changes\migrate-static-data-to-nitro-query\design.md的7.2 接口实现模板部分,说明清楚也使用最新的筛选条件写法了。