---
trigger: always_on
---
# 组件开发规范
## 代码组织顺序
```
Imports
Props/Emits
常量定义 (as const)
类型定义
响应式数据
计算属性
监听器
工具函数
事件处理方法 (on 开头)
```
## 命名规范
- **事件方法**: 必须以 `on` 开头(`onSubmit`, `onDelete`, `onEdit`)
- **变量/函数**: camelCase
- **常量**: UPPER_SNAKE_CASE + `as const`
- **组件**: PascalCase
- **文件**: 组件用 PascalCase,其他用小写
## Props & Emits
```vue
```
## 双向绑定规范
### 使用 defineModel (Vue 3.4+)
**必须使用 `defineModel` 实现双向绑定**,替代旧的 `computed` + `emit('update:xxx')` 模式。
#### 基本用法
```vue
```
#### 内部字段联动更新
当组件内部有多个字段,需要联动更新外部的 `modelValue` 时,使用 `watch` 监听:
```vue
```
#### 规范要点
- ✅ **Always**: 使用 `defineModel` 替代 `computed` + `emit('update:xxx')`
- ✅ **Always**: 为 `defineModel` 提供合适的 `default` 值
- 🚫 **Never**: 使用旧的 `computed` getter/setter 模式实现双向绑定
## 图标使用规范
### 统一使用 SvgIcon 组件
**所有图标必须使用 `SvgIcon` 组件**,禁止使用 `` 配合导入图标组件。
```vue
```
**规范要点**:
- ✅ 使用 `name` 属性指定图标,`size` 属性控制大小
- ✅ 图标名称使用 PascalCase 或 kebab-case
- 🚫 禁止使用 `` 和导入 `@element-plus/icons-vue`
- 🚫 禁止通过 class 设置图标大小
### 自定义 SVG 图标
项目支持在 `assets/icon` 目录下添加自定义 SVG 图标。
#### 目录结构
```
frontend/src/assets/icon/
├── db/ # 数据库图标(mysql.svg, postgres.svg...)
├── machine/ # 机器图标
└── ...
```
#### 使用方法
**格式**: `name="icon {目录}/{文件名}"`(不含 .svg)
```vue
```
#### 添加步骤
1. 将 SVG 文件放到 `frontend/src/assets/icon/` 对应子目录
2. 文件名使用小写 + 连字符(如 `mysql.svg`)
3. 使用 `name="icon db/mysql"` 引用
#### 注意事项
- ✅ SVG 必须有 `viewBox` 属性
- ✅ 使用 `size` 属性控制大小
- ✅ 图标颜色继承当前元素的 `color`
- 🚫 不要在 SVG 中硬编码颜色值
- 🚫 文件名不要使用大写或下划线
## 边界
- ✅ **Always**: 使用 Composition API + `