本项目是 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.tsAPI 请求 + 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 自动推导示例:
ts
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 + 父级完整模块名 + 子模块名首字母简写示例:
ts
export type IUserManagementUM = {
/** 用户ID */
id: string
/** 用户名称 */
name: string
}
E + 父级完整模块名 + 子模块名首字母简写示例:
ts
export enum EUserManagementUM {
/** 正常 */
Normal = 1,
/** 冻结 */
Frozen = 2,
}
EUserFieldName.nameValueMap 或 Dict 结构,配合 tag-enum 组件展示错误示例:
ts
const status = 'all' // 禁止
正确示例:
ts
const status = EStatus.All
ref,只在特殊场景下使用 reactive.value,模板中自动解包vue、 pinia 中的 API(如 ref、 computed、 defineProps 等) 无需手动导入a-form + useForm 组合EUserFieldName.xxxmessage 提示submit 和 beforeCancel 方法user-management ✓, userManagement ✗所有自定义 skill 统一放在 .ai/skills/ 目录下
各平台( .claude、 .codebuddy、 .trae、 .agents 等)通过 整体软链接 引用 .ai/skills/
禁止 在各平台目录下直接创建或修改 skill 文件
示例结构: text
.ai/skills/
├── coding-rules/
└── my-new-skill/
.claude/skills → ../.ai/skills
.trae/skills → ../.ai/skills