Files
Starlight_Lancher/.claude/skills/oil-frontend/SKILL.md

149 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: oil-frontend
description: 用于实现、修改、重构或评审产品前端。当前任务涉及页面、组件、交互、表单、状态、数据流、Hook、类型、CSS、前端代码组织或共享实现时自动触发。触发后先阅读 SKILL.md 判断相关范围,只读取与当前任务直接相关的参考文件;如果改动与产品前端无关则停止使用。纯构建、部署、依赖升级、安全、后端任务,以及只解释前端概念而不处理项目实现的请求,不触发。
---
# Oil Frontend
先识别用户任务、业务对象和数据来源,再删除无效内容,建立正确的信息、状态、代码归属和共享实现。
## 始终遵守
- 从真实用户任务、业务对象和完成结果出发;可见内容只保留能够帮助识别、比较、判断、操作或理解结果的信息。
- 一个用户意图只执行一次,动作必须产生真实结果;数据、操作、忙碌和提交边界保持一致,失败时保留当前对象、位置和已输入内容。
- 常见任务沿用用户已有认知;资源浏览默认展示,编辑必须明确触发,表单只收集当前任务必需且归当前对象所有的数据。
- 图标、强调方式和固定尺寸都必须表达稳定含义;不使用通用 AI 装饰、无意义强调边或只适配当前实例的尺寸制造层级。
- 同一业务数据和同一含义只保留一个权威来源;优先修复数据流、父布局和共享实现,不在页面使用位置反复打补丁。
- 按业务归属组织组件、Hook、函数、类型、样式和测试单模块代码就近放置只有稳定跨模块复用时才进入共享层。
- 遇到复杂逻辑,先检查项目已有能力和成熟库;已有依赖不合适时,可以引入维护良好、与项目兼容的新库,不手写已有成熟方案覆盖的核心能力。简单逻辑直接实现,不为少量代码引入新依赖。
- 项目历史不是正确性的证明错误模式应被替换相关使用位置完成迁移后删除旧代码、fallback、legacy 逻辑和失效状态。
## 参考文件读取顺序
1. 触发后先只阅读本文件,明确任务、对象和改动范围,不预先读取参考文件。
2. 如果任务不涉及用户可见界面、前端状态与数据流、组件实现或前端代码组织,停止使用本 Skill。
3. 简单局部改动默认只读取一个主要规则;只有任务还需要另一个独立判断时,才读取第二个规则。
4. 不因关键词出现、文件内链接或“保险起见”继续读取规则。一个任务看似命中多行时,先选择真正负责当前决定的那一行。
| 当前任务 | 主要规则 | 仅在这些情况补充 |
| --- | --- | --- |
| 模块边界、组件、Hook、函数、类型、CSS 或共享实现 | [组件与代码组织](references/component-contract.md) | 需要新增检查时读 [自动化](references/automation-contract.md) |
| 新增或改变文案、动作含义、图标、点击反馈或视觉强调 | [信息与动作](references/information-and-action-contract.md) | 涉及对象身份、图片或选择器时读 [资源识别](references/resource-recognition-contract.md) |
| 列表、卡片、详情、表格或批量操作 | [集合与详情](references/collection-and-detail-contract.md) | 涉及资源身份时读 [资源识别](references/resource-recognition-contract.md);涉及编辑时读 [交互与编辑](references/interaction-and-editing-contract.md) |
| 表单、选择、编辑或多步工作流 | [交互与编辑](references/interaction-and-editing-contract.md) | 涉及保存范围和流程连续性时读 [数据与操作范围](references/scope-and-state-integrity-contract.md) |
| 查询、请求、保存、数据范围或异步状态 | [数据与操作范围](references/scope-and-state-integrity-contract.md)、[状态与加载](references/state-and-loading-contract.md) | 涉及共享数据源或 Hook 时读 [组件与代码组织](references/component-contract.md) |
| 改变页面尺寸、分栏、滚动、弹窗结构或响应式行为 | [视口与弹窗](references/viewport-and-dialog-contract.md) | 涉及下拉、菜单、提示等依附触发器的浮层时读 [弹层](references/overlay-contract.md) |
以下情况不触发额外读取:
- 只移动现有控件,且不改变文案、动作含义或反馈时,不读取信息与动作规则。
- 只调整普通父子容器归属,且不改变尺寸、滚动、弹窗或响应式行为时,不读取视口与弹窗规则。
- 参考文件中的链接只说明相关规则的位置,不表示必须继续读取。
## 术语速查
本文件和参考规则中的核心词汇,按这里的定义理解:
- **资源身份**:让用户认出"这是哪个对象"的最小信息组合——图片 + 名称 + 一个区分字段。例:成员列表显示"头像 + 姓名 + 部门",而不是"uuid + 类型标签"。
- **伪操作**:看似可用、实际不产生真实结果的控件。例:点"保存"只改了本地 state、刷新即丢失删除按钮永久 disabled 占位。
- **单个组件的视觉补丁**:在页面使用共享组件的位置,只给这一个组件补样式。例:`<Dialog className="h-[640px]">``!important` 覆盖、页面专属选择器改组件内部。正确做法是修共享组件本身,或新增按用途命名的组件变体。
- **按用途命名的组件变体variant**:用“为什么不同”命名。例:`variant="destructive"``size="compact"` 合格;`variant="blue"``variant="userListPage"` 不合格。
- **主导动作**:当前页面、弹窗或操作区域中完成主要任务的那一个操作。同一区域最多一个高强调按钮。
- **提交边界**:一次修改何时真正生效——即时生效、自动保存、显式统一提交,或仅临时预览。
- **忙碌范围**:请求进行中需要防止重复操作的最小区域。单项请求只锁定该项,不用全页遮罩。
- **已提交查询快照**:由同一次响应共同确定的查询条件、列表、结果总数和分页信息。新查询完成前,旧快照仍属于旧条件。
- **同类批量任务**:对一批同类对象重复填写相同字段的任务,如批量排期、批量改价。
- **可编辑工作表**:为同类批量任务让多行持续处于编辑态的表格。与之相对的是资源列表:默认展示,编辑必须明确触发。
## 决策顺序
改动前依次回答。
任务与对象:
1. 用户当前要完成什么任务,什么结果表示完成?
2. 页面管理哪个核心对象,字段分别归谁所有?
3. 当前是浏览、比较、选择还是编辑,是否沿用用户熟悉的结构和术语?
数据与范围:
4. 数据来自完整集合、当前可见集合还是搜索结果?
5. 操作、忙碌状态和提交边界分别影响什么范围;远程查询条件与当前列表是否已经属于同一次已提交结果?
6. 用户靠哪些信息区分相邻对象?
7. 能否删除文字、步骤、确认、重复输入或系统已经知道的字段?
8. 哪些信息属于集合,哪些只属于详情?
结构与状态:
9. 当前页面、弹窗或操作区域的主导动作是什么?
10. 首屏、滚动容器和弹层边界分别由谁负责?
11. loading、empty、filtered-empty、queued、processing、error、ready 如何互斥?
落点:
12. 是否已有正确归属的模块、组件、Hook、函数、类型、统一设计变量或样式最终应修改哪个数据源、父布局或共享实现
无法明确回答时,先停止添加界面元素:向用户提出最关键的 12 个问题;无法提问时按最小可验证范围实施,并在输出中声明所做的假设。
## 执行流程
### 1. 还原事实
- 搜索项目已有的模块、组件、Hook、函数、类型、统一设计变量和样式确认相同含义是否已经存在正确实现。
- 找出所有使用共享组件的页面和组件,以及相同数据的其他入口。
- 评审请求只给证据与建议;用户要求修改时才实施。
### 2. 明确范围
- 明确核心对象、字段所有者、数据集合、操作范围、忙碌范围和提交边界。
- 区分页面结构问题、组件默认行为、页面使用方式错误和数据流错误。
### 3. 先删除
- 删除不影响判断的内容、重复状态、重复入口、重复确认和只针对单个组件的视觉补丁。
- 删除没有真实状态变化或不能真正保存数据的伪操作。
- 删除已经被新实现替代的旧组件、旧函数、旧类型、旧状态、fallback、legacy 逻辑、旧样式和失效引用。
### 4. 选择结构
- 先检查项目中同类任务页面和共享容器组件的既定用法;只有既有模式符合本规范时才沿用,否则按真实任务重新选择结构。
- 根据浏览、比较、选择、批量配置或深度编辑任务,选择列表、表格、工作表、选择器、弹窗或完整工作区。
- 让列表负责识别和比较,让详情负责完整内容,让编辑器负责修改。
### 5. 修复真正出错的位置
- 优先修复数据范围、操作范围、父布局、共享组件默认行为和含义稳定的组件变体。
- 重复出现的资源身份、菜单、弹层、加载、弹窗和操作栏使用共享组件。
- 只有职责、输入输出和行为稳定重复时才抽象;不要因为局部结构相似就复制组件,也不要用大量页面开关制造万能组件。
- 既有共享组件、函数、样式或数据流本身错误时,在授权范围内直接修复或替换真正出错的共享实现,并处理所有受影响的使用位置;不要为了兼容历史继续新增错误实现。
- 无法在当前范围内全部改完时,停止扩大旧模式,明确报告还剩哪些旧使用位置以及这次改到哪里,不得声称已经统一。
- 修复可重复检测的问题时,同步补齐或优化项目内的 lint、测试或检查规则见 [automation-contract.md](references/automation-contract.md));小改动不为此前置搭建自动化。
- 不修改无关区域。
### 6. 验证
- 运行项目现有且与改动相关的类型检查、Lint、测试或构建。
- 简单局部改动只检查修改位置、直接行为和最近的使用位置,不展开完整状态矩阵。
- 改动涉及共享组件、数据范围、异步状态、表单流程、滚动、响应式或多个页面时,再检查受影响的状态、数据范围、代表性视口和全部使用位置。
- 只报告已验证项、未验证项和阻断原因。
## 独立自检
仅当前端评审涉及多个页面、所有使用共享组件的位置、多种视口或状态,或大范围规则调整时,才派发无历史上下文的独立自检。单页面、单组件、单截图和局部差异由主 Agent 直接检查。
独立自检只接收检查对象、范围和 `oil-frontend`,不接收对话历史、既有结论、问题猜测、预期答案或修复方案。
## 输出要求
先给结论,再给证据。只输出:
1. 具体问题;
2. 应删除的内容;
3. 正确的信息、动作和空间结构;
4. 应修改的模块、共享组件或数据流;
5. 已验证和未验证项。
禁止使用"提升体验""更现代""更直观"等不能指导实现的描述。
除非用户明确要求,或问题直接阻断可见的主要流程,否则不主动输出键盘操作或无障碍检查清单。