Imported from uuo00n/elderly-care (
AGENTS.md). Install upstream withnpx skills add uuo00n/elderly-care. Copyright stays with the author.
AGENTS.md — 智慧颐养系统前端项目规则
本文档是 Codex 在本仓库工作时必须遵守的强约束。读完再动手。
1. 设计稿优先(最高优先级)
所有页面必须严格按 Sketch 原型图像素级复刻,不允许凭文档/经验/组件默认样式自行发挥。
1.1 工作流程(每个页面/组件落地前的必经步骤)
- 取截图:调用
mcp__sketch__run_code选中目标画板,再调用mcp__sketch__get_selection_as_image拿到画板视觉截图。未取得截图前不得编写该页代码。 - 逐区拆解:把截图划分为顶部/筛选区/统计区/表格区/弹窗等区块,逐区列出宽高、间距、颜色、字号、按钮位置。
- 结构对齐:用
mcp__sketch__run_code进一步读取关键 group 的frame和style,确认像素级数值与命名(如"任务类型备份 3"通常是筛选 chip,不是表格列)。 - 实现并比对:写完后用
mcp__chrome-devtools__navigate_page+take_screenshot把页面截图,与 Sketch 截图并排比对;Sketch 截图是唯一视觉验收基准,仅允许浏览器字体渲染、抗锯齿等不可控细微差异,布局、尺寸、颜色、间距、层级、文本位置明显不一致即视为不达标,必须重做。 - 冲突时:Sketch 与文档 (
docs/FRONTEND_LAYOUT_PROTOTYPE_REDESIGN_BRIEF.md) 不一致时,以 Sketch 为准;文档仅作为字段/字段含义的补充。
1.2 Sketch 画板 ID 速查
| 路由 | 画板名 | id |
|---|---|---|
/workbench |
01工作台 | 99E4EB56-5768-4D23-A710-1229A2356CE1 |
/query/realtime-vitals |
02查询-实时全景查询 | 4AD2C087-3563-4C06-9932-7699AA786931 |
/query/realtime-environment |
02查询-基础查询 | 1CF74EA6-6DEB-4A5B-836D-00EC2D431A96 |
/query/realtime-environment 趋势弹窗 |
02查询-基础查询-血压趋势 | 7F6AF882-CEDB-432D-87FE-3FE6C24669C6 |
/basic/room-management |
03基础信息-房间管理 | C99D6B1A-E3FB-4EB9-93F4-963607E8AA01 |
/basic/room-management 添加房间 |
03基础信息-房间管理-添加房间 | C91EABC1-D28B-4F5F-AC0B-38AFD3B7BE86 |
/basic/room-management 添加楼幢 |
03基础信息-房间管理-添加楼幢 | 67946D13-9A9B-49ED-8B8A-DDD04210D86F |
/basic/bed-management |
03基础信息-床位管理 | E8F301EF-E459-4BF4-9743-1C3BD066DD6D |
/basic/bed-management 新建 |
03基础信息-床位管理-新建 | CE9895C5-86DA-43B1-A806-208E9D5C21E7 |
/basic/elder-management |
03基础信息-老人信息 | 5281598A-B21B-410A-8BCF-9F7F0D97B597 |
/device/wearables |
04设备信息 | 5563941F-B34E-414B-878F-3A14481F5A20 |
/device/wearables 手环绑定 |
04设备信息-手环绑定 | A03CA61B-F019-44F9-A796-5FC79A7BF9E4 |
/warning/rules |
05预警-预警规则设置 | 848B9AAB-76D6-465F-9D91-EE2C80A2E7D0 |
/warning/history |
05预警-告警历史查询 | BDD59373-891D-4FFE-B9E0-A7AFEDFD6B75 |
无 Sketch 画板的路由(/basic/staff-management、设备 4 子页、设置 5 页、分析 2 页)才允许参考"同模块画板 + 文档"推断。
1.3 不允许的事
- ❌ 仅凭
FRONTEND_LAYOUT_PROTOTYPE_REDESIGN_BRIEF.md文字描述写页面(文档不带视觉细节) - ❌ 把 Sketch 画板里的"任务类型备份"理解为表格列(它通常是筛选/Tag chip)
- ❌ 把工作台的"老人实时告警"做成左右分栏的卡片网格(Sketch 里它是横向滚动条带状区域)
- ❌ 自行发明配色、卡片圆角、按钮位置;色值与圆角必须取自 Sketch
- ❌ Subagent 启动后不读 Sketch 就开始写代码
- ❌ 为了迁就 Element Plus 默认样式而放弃 Sketch 尺寸、间距、颜色、状态或交互布局
2. 技术栈与目录约定
- Vue 3 + Vite + JavaScript(不引 TypeScript)+ SCSS(不引 Tailwind)
- UI:Element Plus +
unplugin-vue-components自动按需引入;图标@element-plus/icons-vue - 允许引入必要的 Vue 3 三方包,但必须解决真实问题、与现有栈兼容,并先按第 5 节使用 Context7 MCP 查明用法
- 路由:vue-router 4,
createWebHistory - 状态:Pinia +
pinia-plugin-persistedstate@^3.2.3(4.x 与 pinia 2 不兼容,固定 3.x) - 网络:axios,统一通过
@/api/request调用;mock 由VITE_USE_MOCK=true控制 - 时间:dayjs;图表:echarts + vue-echarts;通用工具:@vueuse/core
目录树以现状为准,新增模块按 views/{module}/、api/{module}.js、mock/{module}.mock.js 三件套放置。
3. 代码风格
- 单文件组件统一
<script setup>;不使用 Options API - 模板里 Element Plus 组件直接用(已自动注册),但
ElMessage/ElMessageBox这类函数式调用要import { ElMessage } from 'element-plus' - 错误提示交给
@/api/request的响应拦截器统一 toast,不要在业务页 catch 里再ElMessage.error - 字典(楼栋/楼层/部门/职位/护理等级)一律走
@/api/dict,禁止页面本地写死 - 颜色、间距、圆角从
src/styles/variables.scss取,不硬编码 - 不写大段注释解释 WHAT;只在 WHY 不显而易见时加一行注释
4. Subagent 并行开发约束
- 多页面/多模块开发必须使用 subagent 并行拆分;主会话负责共享上下文、任务边界、最终集成和验收
- Subagent 启动前,主会话必须明确:路由、Sketch 画板 ID、目标文件、API/mock 边界、可写范围、验收标准
- Subagent 只写自己负责的 view + api + mock 三件套,不修改 router/stores/layout/共享组件/全局样式等共享代码
- Subagent 启动后第一步必须用 Sketch MCP 取目标画板截图,并读取关键图层 frame/style/text(见第 1 节)
- Subagent 交付时必须说明:使用的 Sketch 画板 ID、读取的关键视觉数据、修改文件范围、是否需要共享代码支持
- 如 Subagent 发现需要扩展共享组件或改共享代码,必须挂起该部分改动、交回主会话处理
5. Context7 MCP 强制约束
- 遇到 Vue、Vite、Element Plus、Pinia、axios、echarts、vue-echarts 或任何新增三方包的开发问题时,必须使用 Context7 MCP 查询官方用法
- Context7 可用时,先解析目标库,再读取对应文档;不得仅凭记忆、旧经验或博客内容处理框架/三方包问题
- 如果当前环境没有可调用的 Context7 MCP,相关框架/三方包问题必须标记为阻塞并上报,不允许改用官方文档、本地源码或经验兜底绕过
- 不涉及框架/三方包用法的问题,可继续按仓库现有代码和 Sketch 原型推进
6. 验收要求
每次交付必须满足:
npm run build通过,控制台无报错- 用
mcp__chrome-devtools__navigate_page遍历所有新增/修改路由 - 与对应 Sketch 截图并排比对,视觉不一致需修改到一致
mcp__chrome-devtools__list_console_messages返回 0 个 error- 关键交互(搜索/分页/新增/编辑/删除/弹窗)至少手测一次