初始化

This commit is contained in:
谢宇宁
2026-09-15 15:25:05 +07:00
commit 77c16ab4a2
1310 changed files with 132250 additions and 0 deletions
@@ -0,0 +1,239 @@
---
name: ui-requirement-planner
description: 将 UI 需求转化为可维护且可落地的 Vue 3 + Vite + TypeScript 实施方案。适用于用户提供产品需求、Figma 链接/节点、截图、现有页面代码或自然语言想法,并希望输出组件分层、页面结构、composable 抽离、Pinia 使用决策、API 合约规划、交互流程、样式建议、边界状态、素材落地(图标/背景识别、下载、目录归档、页面引用)与验收标准。优先给出可执行方案,再生成代码。
---
# UI 需求规划器
## 概述
将模糊或分散的 UI 需求整理为可落地的前端实施方案(Vue 3 + Vite + TypeScript)。默认采用“方案优先”输出:先明确页面结构、组件边界、composable、数据流和 API 职责,再给出 Vue 骨架代码。
默认技术栈与约定:
- Vue 3 + Composition API + `<script setup lang="ts">`
- Vite
- TypeScriptprops、emits、API 数据、view model 均需显式类型)
- `scoped scss`
- `Pinia` 仅在跨路由或远距离组件共享状态时引入
- `axios` + 统一请求层 + 统一错误处理
术语统一:
- “素材”默认指 UI 里的图标、背景图、插图、装饰图等静态资源。
- “模块目录”默认指 `src/assets/images/png/<module>/`(例如 `mine/newHome`)。
## 工作流程
除非用户明确要求更小范围交付,否则按以下顺序执行:
1. 读取输入并识别来源:
- 自然语言需求
- PRD / 需求单
- 截图 / 线框描述
- 现有页面或组件代码
- 混合输入
2. 将需求归一为简洁的页面目标与主用户路径。
3. 按层拆分 UI
- 页面/容器职责
- 可复用展示组件
- 业务组件
- composables
- store 使用边界
- API / services 分层
4. 确定状态模型:
- 页面内状态优先使用 `ref` / `reactive`
- 展示派生状态使用 `computed`
- 仅在共享或跨路由场景引入 `Pinia`
5. 定义 API 边界:
- service 方法
- 请求/响应类型
- loading、empty、error、retry、permission 状态
6. 若输入包含 Figma/原型:执行素材规划与落地策略。
- 识别图标、背景图、插图等素材位
- 标记可复用素材与仅页面内使用素材
- 生成目录归档与命名方案
- 规划页面中的资源引用方式
7. 产出结构化实施方案。
8. 需要时再补充 Vue 骨架代码或示例文件。
## Figma 素材处理规则(新增)
当用户要求“识别 Figma 图标/背景并落地资源”时,必须按以下规则执行:
1. 识别范围
- 至少区分:功能图标、背景图(整页/卡片)、装饰图、头像占位图。
- 对同一视觉资源的多处复用,优先抽为同一文件,避免重复导出。
2. 下载与保存路径
- 统一保存到:`src/assets/images/png/<module>/`
- `<module>` 与业务页面一致,例如:`mine/newHome``home/recommend`
- 若资源存在主题态(light/dark)或状态态(default/active/disabled),在文件名中体现。
3. 命名规范
- 文件名使用小写英文 + 连字符,禁止空格与中文文件名。
- 推荐模式:`<module>-<semantic>-<state?>.png`
- 示例:`mine-home-bg.png``mine-home-setting-default.png``mine-home-setting-active.png`
4. 页面引用规范
- Vue SFC 模板内静态引用优先使用别名:`@/assets/images/png/...`
- TS 里拼装或计算型资源地址使用:`new URL('@/assets/images/png/...', import.meta.url).href`
- 必须确保引用与目录结构一致,避免“移动文件后路径失效”。
5. 无图场景兜底(强制)
- 缺少真实素材时必须提供占位图,不可空白。
- 占位图尺寸按 UI 设计尺寸;无标注时按容器尺寸。
- 方案中需注明占位图来源、尺寸与替换策略(后续替换真实图不改布局)。
## 输出格式
除非用户要求更短答复,默认按以下结构输出:
### 1) 需求摘要
- 用 2-4 条概括目标页面/功能
- 说明核心用户目标
- 说明关键业务约束与待确认项
### 2) 页面与组件架构
- 页面职责
- 组件树
- 哪些组件保持展示型(dumb/presentational
- 哪些组件承载业务逻辑
### 3) 状态与数据流
- 本地状态
- 派生状态
- 事件与交互流
- 是否需要 `Pinia` 及理由
### 4) API 与类型规划
- 推荐的 `services/api` 拆分方式
- 请求方法与用途
- 核心类型定义
- 是否需要从原始 API 数据映射到 UI 模型
### 5) 边界与失败状态
相关场景下必须覆盖:
- loading
- empty
- error
- validation
- permission
- retry / fallback
### 6) 实施步骤
给出从基础搭建到联调集成的可执行顺序。
### 7) 验收清单
列出开发者/评审可直接核对的验收点。
### 8) Vue 骨架代码(按需)
需要时提供精简骨架:
- 页面容器
- 子组件 props / emits
- composable
- store(仅在有充分理由时)
- API service
- 类型定义
### 9) 图片与占位图规范(强制)
- 若需求未提供真实图片资源(如 banner、封面、头像、商品图等),必须给出占位图方案,禁止留空或“后续补图”而无实现。
- 占位图尺寸必须与 UI 设计尺寸一致:优先使用设计稿标注的宽高;若无明确标注,则以对应容器的宽高作为占位尺寸。
- 在方案与代码中都要明确占位规则(例如:`<img>``width/height`、容器比例、`object-fit` 策略)。
- 若同一页面包含多种图片位,需分别定义占位图尺寸与样式,不可用一个尺寸通配全部场景。
### 10) 素材落地清单(Figma/原型场景必填)
- 素材识别结果(图标、背景、装饰图分类)
- 目标目录:`src/assets/images/png/<module>/`
- 文件命名映射(设计稿节点名 -> 最终文件名)
- 页面引用点位(组件/页面中的引用位置)
- 未交付素材的占位图策略与尺寸
## 架构规则
### 组件分层
- 路由页聚焦编排,不要在单文件里混放大段模板 + 业务逻辑 + API 调用。
- 可复用 UI 放入 `components/`
- 可复用业务逻辑放入 `composables/`
- HTTP 请求逻辑放入 `services/``services/api/`
- 跨文件共享类型放入 `types/`
- 纯函数工具放入 `utils/`(需无状态且非 Vue 特定)。
### composable 抽离原则
满足任一条件即可考虑抽离:
- 逻辑可复用
- 页面因异步流程或 watchers 变得难以维护
- 表单、列表查询、分页、筛选、权限流程需要独立测试
- 页面中 API 编排与 UI 状态迁移耦合过重
不要为了“挪几行代码”而抽离;抽离应有明确边界价值。
### Pinia 使用决策
默认不使用 store。仅在以下场景推荐 `Pinia`
- 跨页面共享状态
- 需要持久化的会话态 UI 状态
- 多个远距离组件共同消费同一特性状态
- 单页 composable 无法合理承载的缓存或状态协同
若本地状态足够,需明确说明“不需要 Pinia”。
### API 设计
推荐“统一请求客户端 + 薄 service 模块”:
- `services/http/client.ts`axios 实例与拦截器
- `services/api/<feature>.ts`:按业务域组织请求
- `types/api.ts` 或 feature 内局部 DTO 类型
方案中始终要提及:
- loading 与取消请求策略(如适用)
- 面向用户的错误文案与内部技术错误的区分
- 是否需要将后端字段映射为 view model
### 错误处理
必须给出一致的错误处理约定:
- 网络与超时失败
- 业务错误码/业务失败
- 参数校验失败
- 乐观更新失败回滚(如适用)
- 可安全重试动作的 retry 机制
避免零散、无模式地到处写 `try/catch`
### 样式规范
默认使用 `scoped scss`
- 保持布局 token 与重复样式模式一致
- 避免样式决策导致无关组件强耦合
- 明确指出适合抽离 design token、CSS 变量、共享 mixin 的位置
### 素材目录与复用边界
- 页面私有素材放 `src/assets/images/png/<module>/`,跨页面复用素材可上提到共享目录(如 `src/assets/images/png/common/`)。
- 同一个素材在多个页面复用时,不得各自复制一份,优先统一引用共享文件。
- 若历史文件命名混乱,方案中应给出“保守兼容 + 渐进收敛”的改造建议。
## 代码生成规则
生成 Vue 代码时:
- 使用 `<script setup lang="ts">`
- props 与 emits 必须显式类型
- 模板保持可读,避免巨型“全塞一页”
- 有意义的模板表达式应提升为 `computed`
- 小型展示组件中禁止直接写 axios 调用
- 无充分理由不得引入 `Pinia`
- 后端细节缺失时可用占位 API 方法与类型,并明确假设
- 缺少真实图片时,必须提供占位图实现,并按 UI 尺寸设置宽高/比例,确保布局稳定不抖动
- 新增素材引用时,必须匹配真实文件路径与命名,不允许“先写引用、后补文件”造成运行时 404
## 输入不明确时
除非缺失信息会阻断有效推进,否则不要卡住:
- 明确写出假设
- 区分“已确认需求”与“假设项”
- 仍需给出可维护的默认架构方案
## 典型触发场景
以下请求应使用本技能:
- “把这个后台页面需求拆成 Vue 实现方案”
- “根据这张草图规划组件结构和接口”
- “把这个 UI 需求整理成前端开发任务和代码骨架”
- “这个页面适不适合上 Pinia,接口怎么分层”
- “把现有页面按 composables + services 重构出方案”
- “识别 Figma 图标和背景,下载到 `src/assets/images/png` 并按模块建目录”
- “把设计稿素材落地并在页面正确引用”
## 参考
更详细的输出结构与规划提示词见:`references/planning-template.md`