--- name: frontend-crud-coding description: 在当前 plus-ui-new 前端项目中按真实 Vue 3 + TypeScript + Element Plus + oxlint/oxfmt 代码风格生成或修改页面、API、types、hooks 接入和样式壳。用于新增或修改标准 CRUD 列表页、树表页、系统管理页、监控页、workflow 页面、demo 页面,补齐与后端接口对应的 src/api、types 和 src/views 代码;触发后应先读取适用 references,再阅读目标模块真实代码和项目内 gen 代码生成模板。 --- # 前端编码规范 先对齐当前前端项目里的真实实现,再参考项目内 `gen` 目录下的代码生成模板。不要只套通用 Vue 模板,也不要把 generator 模板原样复制进来而忽略当前项目已经演进出的 hooks、页面壳、类型入口和下载方式。 ## 执行流程 1. 判断任务类型:新增标准 CRUD、树表、已有页面增强、复杂业务页、只补 API/types。 2. 按“文档读取规则”读取必要 reference,不一次性展开所有资料。 3. 阅读目标目录下最近似的真实代码: - 标准单表优先看 `src/views/demo/demo/index.vue`、`src/api/demo/demo/*`。 - 树表优先看 `src/views/demo/tree/index.vue`、`src/views/workflow/category/index.vue`。 - 系统复杂页优先看 `src/views/system/user/index.vue`、`system/role`、`system/post`、`system/config`。 - workflow 业务页优先看 `src/views/workflow/*` 同类页面。 4. 新增标准页面前,对照项目内模板确认基础骨架: - API 模板:`gen/ts/api.ts.vm` - types 模板:`gen/ts/types.ts.vm` - 标准单表页模板:`gen/vue/index.vue.vm` - 树表页模板:`gen/vue/index-tree.vue.vm` 5. 新增代码时通常同步维护 `src/api///index.ts`、`types.ts`、`src/views///index.vue`。 6. 增强已有页面时只做增量修改,保留原页面的树筛选、导入导出、列显隐、权限、字典、弹窗和路由跳转能力。 7. 修改完成后按影响范围运行验证:优先 `pnpm exec vue-tsc --noEmit`,改动页面或导入时再跑 `pnpm lint`,大范围变更再跑 `pnpm build`。 ## 文档读取规则 - 前端 API、types、页面、hooks、样式和验证规则,先读 [references/frontend.md](references/frontend.md)。 - 不确定任务边界、需要标准用例或提问方式时,再读 [references/examples.md](references/examples.md)。 - reference 只约束实现方式和自检范围;发生冲突时,以当前模块真实代码和实际调用点为准。 ## 优先级规则 发生冲突时按下面顺序决策: 1. 目标目录下最近似页面、API、types 的真实实现。 2. 当前项目公共 hooks、组件、工具和样式约定。 3. 项目内 `gen` 代码生成模板。 4. 通用 Vue 3 / Element Plus 习惯。 也就是说: - 同模块已有页面怎么写,优先怎么写。 - 没有现成页面时,使用项目内 `gen` 模板作为骨架,再改成当前项目风格。 - 复杂模块不能为了“标准 CRUD”退化成裸模板页。 ## 仓库通用规则 - 遵循 [`.editorconfig`](../../../.editorconfig):UTF-8、LF、2 空格缩进;Markdown 例外。 - 当前仓库没有 `.prettierrc`,格式脚本是 `pnpm run fmt` 调用 `oxfmt .`,lint 脚本是 `pnpm lint` 调用 `oxlint src`。 - 页面优先使用 `