Install
openclaw skills install keyblade-pro-rules当用户要求生成、修改或审查 Vue3 + TypeScript 子项目代码时触发。 覆盖 kb-pro-table / useTable / useForm 使用规范、arco design + unocss 样式规则、 模块组织与命名规范、枚举与类型约束、ref 优先的响应式规范等。 无论用户是否明确提到"规范...
openclaw skills install keyblade-pro-rules本项目是 pnpm monorepo,包含多个子项目。本规范仅适用于使用以下技术栈的子项目:
判断方式:查看目标目录下是否有 vite.config.ts 且 package.json 中包含上述依赖。
如果用户操作的是 Vue2、React、Node.js 等其他技术栈的子项目,不适用本规范中的 Vue3 专属规则(如表格页规范、组件规范、样式规范、响应式规范、自动导入等),但通用规则(如文件命名规范、注释规范)仍然建议遵循。
vue3 + TypeScript + vite + arco design + unocss
常规列表页必须遵循以下模式,参考 web/src/views/components-document/query-table/index.vue:
kb-pro-table 作为表格组件useTable hooks,从 @/hooks 导入save.modalComponent 配置)useForm,从 @/hooks 导入IProTableColumn 类型EUserFieldName.xxx 而非字符串setColumnAlign(columns, 'center') 设置默认居中<style> 标签中定义 class! 前缀强制生效<a-button class="!bg-red-500">modules/ 下按业务模块创建以下文件:
| 文件 | 用途 |
|---|---|
index.ts | 统一导出 |
request.ts | API 请求 + mock 数据 |
type.ts | 类型定义 |
enum.ts | 枚举定义 |
每个字段必须有完整注释。
参考 web/src/modules/example/request.ts:
namespace 模块名Request 包裹所有接口函数@keyblade/http 导入 getRequest / postRequest / putRequest / deleteRequestAppConfig.apiPrefix 拼接路径EResponseCode 枚举值,如 res?.code === EResponseCode.successgetRequest<T> / postRequest<T> 中,优先让 TypeScript 自动推导示例:
import { getRequest, postRequest, putRequest, deleteRequest } from '@keyblade/http'
import { AppConfig } from '@/configs/app'
import { EResponseCode } from '@/enums'
import type { IExample } from './type'
const { apiPrefix } = AppConfig
export namespace ExampleRequest {
export async function listPage(params: { pageNum: number; pageSize: number }) {
try {
const res = await getRequest<{ data: { list: IExample[]; total: number } }>(
apiPrefix.main + '/',
params
)
if (res?.data) {
return res.data
}
} catch {}
}
export async function add(params: object) {
try {
const res = await postRequest(apiPrefix.main + '/', params)
return res?.code === EResponseCode.success
} catch {}
return false
}
}
I + 父级完整模块名 + 子模块名首字母简写示例:
export type IUserManagementUM = {
/** 用户ID */
id: string
/** 用户名称 */
name: string
}
E + 父级完整模块名 + 子模块名首字母简写示例:
export enum EUserManagementUM {
/** 正常 */
Normal = 1,
/** 冻结 */
Frozen = 2,
}
EUserFieldName.nameValueMap 或 Dict 结构,配合 tag-enum 组件展示错误示例:
const status = 'all' // 禁止
正确示例:
const status = EStatus.All
ref,只在特殊场景下使用 reactive.value,模板中自动解包vue、pinia 中的 API(如 ref、computed、defineProps 等)无需手动导入a-form + useForm 组合EUserFieldName.xxxmessage 提示submit 和 beforeCancel 方法user-management ✓,userManagement ✗.ai/skills/ 目录下.claude、.codebuddy、.trae、.agents 等)通过整体软链接引用 .ai/skills/.ai/skills/
├── coding-rules/
└── my-new-skill/
.claude/skills → ../.ai/skills
.trae/skills → ../.ai/skills