Skillsfrontend-vue-development
F

frontend-vue-development

前端 Vue 开发规范,涵盖 Vue 2/3 组件开发、Vuex 状态管理、路由配置、组件通信、样式规范、国际化。当用户进行前端开发、编写 Vue 组件、处理状态管理或实现页面交互时使用。

TencentBlueKing
2.5k stars
49.9k downloads
Updated 5d ago

Readme

frontend-vue-development follows the SKILL.md standard. Use the install command to add it to your agent stack.

---
name: frontend-vue-development
description: 前端 Vue 开发规范,涵盖 Vue 2/3 组件开发、Vuex 状态管理、路由配置、组件通信、样式规范、国际化。当用户进行前端开发、编写 Vue 组件、处理状态管理或实现页面交互时使用。
core_files:
  - "src/frontend/devops-pipeline/"
  - "src/frontend/bk-pipeline/"
related_skills:
  - 01-backend-microservice-development
token_estimate: 3000
---

# 前端 Vue 开发

## Quick Reference

```
技术栈:Vue 2.7 + Vuex 3.6 + Vue Router 3.6 + bk-magic-vue 2.5
文件命名:kebab-case.vue(如 group-table.vue)
缩进:4 空格 | 无分号 | 无拖尾逗号 | HTML 双引号
API 调用:vue.$ajax.get/post/put/delete
```

### 最简示例

```vue
<template>
    <div class="pipeline-list">
        <bk-table :data="pipelines" v-loading="isLoading">
            <bk-table-column prop="name" label="名称"></bk-table-column>
        </bk-table>
    </div>
</template>

<script>
export default {
    data() {
        return {
            pipelines: [],
            isLoading: false
        }
    },
    created() {
        this.fetchPipelines()
    },
    methods: {
        async fetchPipelines() {
            this.isLoading = true
            try {
                const res = await this.$ajax.get('/api/user/pipelines')
                this.pipelines = res.data || []
            } finally {
                this.isLoading = false
            }
        }
    }
}
</script>

<style lang="scss" scoped>
.pipeline-list {
    padding: 20px;
}
</style>
```

## When to Use

- 开发 Vue 组件
- 管理 Vuex 状态
- 调用后端 API
- 处理页面交互

## When NOT to Use

- 后端 API 开发 → 使用 `01-backend-microservice-development`
- 构建机 Agent → 使用 `05-go-agent-development`

---

## 前端应用结构

```
src/frontend/
├── devops-pipeline/      # 流水线应用
├── devops-atomstore/     # 研发商店应用
├── devops-manage/        # 管理应用
├── bk-pipeline/          # 流水线组件库
└── bk-permission/        # 权限组件库
```

## ESLint 核心规则

```javascript
{
    'indent': ['error', 4],                // 4 空格缩进
    'semi': ['error', 'never'],            // 禁用分号
    'comma-dangle': ['error', 'never'],    // 禁用拖尾逗号
    'vue/html-quotes': ['error', 'double'],// HTML 双引号
    'vue/no-v-html': 'error',              // 禁止 v-html(防 XSS)
    'no-console': 'error'                  // 禁止 console
}
```

## 组件选项顺序

```javascript
export default {
    components: { },  // 1. 组件注册
    mixins: [ ],      // 2. 混入
    props: { },       // 3. Props
    data() { },       // 4. 响应式数据
    computed: { },    // 5. 计算属性
    watch: { },       // 6. 侦听器
    created() { },    // 7. 生命周期钩子
    mounted() { },
    methods: { }      // 8. 方法
}
```

## Props 定义

```javascript
props: {
    resourceType: {
        type: String,
        default: ''
    },
    options: {
        type: Array,
        default: () => []  // 对象/数组使用工厂函数
    }
}
```

## API 调用模式

```javascript
// GET
this.$ajax.get(`${prefix}/user/pipelines`)

// POST
this.$ajax.post(`${prefix}/user/pipelines`, data)

// 错误处理
this.$ajax.get(url)
    .then(res => this.data = res.data)
    .catch(err => {
        if ([404, 403].includes(err.code)) {
            this.errorCode = err.code
        }
    })
    .finally(() => this.isLoading = false)
```

## Vuex 使用

```javascript
// store/pipeline.js
export const actions = {
    getPipelineList({ commit }, { projectId }) {
        return vue.$ajax.get(`/api/user/projects/${projectId}/pipelines`)
    }
}

// 组件中使用
import { mapActions } from 'vuex'

methods: {
    ...mapActions('pipeline', ['getPipelineList']),
    async fetchData() {
        this.list = await this.getPipelineList({ projectId: this.projectId })
    }
}
```

## 方法命名约定

| 类型 | 命名模式 | 示例 |
|------|---------|------|
| 事件处理 | `handle*` | `handleClick()` |
| 初始化 | `init*` | `initData()` |
| 格式化 | `*Formatter` | `statusFormatter()` |

---

## Checklist

开发组件前确认:
- [ ] 文件命名使用 kebab-case
- [ ] 遵循 ESLint 规则(4 空格、无分号)
- [ ] Props 使用完整定义(type + default)
- [ ] 对象/数组 Props 使用工厂函数
- [ ] 禁止使用 v-html
- [ ] 使用 scoped 样式

Install

Requires askill CLI v1.0+

Metadata

LicenseUnknown
Version-
Updated5d ago
PublisherTencentBlueKing

Tags

apici-cddockerjavajavascriptkotlinkuberneteslintingllmmlpythonredis