基于 Vue3 + TypeScript + Ant Design Vue 的现代化企业级后台管理系统,支持 COS 混合部署模式,提供完整的业务开发解决方案。
# 克隆项目
git clone https://github.com/buqiyuan/vue3-antdv-admin
# 进入项目目录
cd vue3-antdv-admin
# 安装依赖
yarn install
# 启动开发服务器
yarn dev
# 构建生产版本
yarn build
# 预览构建结果
yarn preview
# 部署到 COS (自动版本管理)
yarn deploy
# 指定版本类型部署
yarn deploy:major # 主版本号 +1
yarn deploy:minor # 次版本号 +1
yarn deploy:patch # 修订版本号 +1
# 清理指定版本
yarn deploy:clean
# 查看当前版本
yarn deploy:version
src/ ├── api/ # API 接口定义 │ ├── backend/ # 后端 API (自动生成) │ └── demo/ # 演示 API ├── assets/ # 静态资源 ├── components/ # 组件库 │ ├── basic/ # 基础组件 │ ├── business/ # 业务组件 │ └── core/ # 核心组件 (动态表格/表单) ├── hooks/ # 组合式函数 ├── layout/ # 布局组件 ├── locales/ # 国际化配置 ├── router/ # 路由配置 ├── store/ # 状态管理 ├── styles/ # 全局样式 ├── utils/ # 工具函数 └── views/ # 页面组件 ├── dashboard/ # 仪表盘 ├── system/ # 系统管理 └── ...
views/ └── 业务模块名/ └── 页面名称/ ├── index.vue # 页面主文件 ├── components/ # 页面专用组件 │ ├── EditModal.vue │ └── DetailDrawer.vue └── hooks/ # 页面专用逻辑 └── useTableData.ts
<template> <div class="page-container"> <div class="page-header"> <h1>{{ title }}</h1> </div> <div class="page-content"> <!-- 页面内容 --> </div> </div> </template> <script lang="ts"> import { defineComponent, reactive, toRefs, onMounted } from 'vue' export default defineComponent({ name: 'PageName', setup() { // 响应式数据 const state = reactive({ title: '页面标题', loading: false, dataSource: [], }) // 业务方法 const methods = { /** * 初始化页面数据 */ async initData() { state.loading = true try { // 数据加载逻辑 } finally { state.loading = false } }, /** * 处理用户操作 */ handleAction() { // 操作逻辑 }, } // 生命周期 onMounted(() => { methods.initData() }) return { ...toRefs(state), ...methods, } }, }) </script> <style lang="less" scoped> .page-container { @apply p-4; } .page-header { @apply mb-4 pb-4 border-b border-gray-200; } .page-content { @apply bg-white rounded-lg p-4; } </style>
components/basic/): 通用 UI 组件,无业务逻辑components/business/): 包含特定业务逻辑的组件views/*/components/): 页面专用组件components/basic/组件名/ ├── index.vue # 组件主文件 ├── types.ts # 类型定义 ├── hooks/ # 组件专用逻辑 │ └── useComponentLogic.ts └── __tests__/ # 单元测试 └── index.test.ts
// api/demo/user.ts
import { request } from '@/utils/request'
export interface UserInfo {
id: number
name: string
email: string
}
export interface UserListParams {
page: number
pageSize: number
keyword?: string
}
/**
* 获取用户列表
*/
export function getUserList(params: UserListParams) {
return request<UserInfo[]>({
url: '/api/users',
method: 'GET',
params,
})
}
/**
* 创建用户
*/
export function createUser(data: Omit<UserInfo, 'id'>) {
return request<UserInfo>({
url: '/api/users',
method: 'POST',
data,
})
}
// 在组件中使用
import { message } from 'ant-design-vue'
import { createUser, getUserList } from '@/api/demo/user'
const methods = {
/**
* 加载用户数据
*/
async loadUsers() {
try {
state.loading = true
const response = await getUserList({
page: state.pagination.current,
pageSize: state.pagination.pageSize,
keyword: state.searchKeyword,
})
state.dataSource = response.data
state.pagination.total = response.total
}
catch (error) {
message.error('加载用户数据失败')
console.error('Load users error:', error)
}
finally {
state.loading = false
}
},
/**
* 创建用户
*/
async handleCreateUser(userData: Omit<UserInfo, 'id'>) {
try {
await createUser(userData)
message.success('用户创建成功')
// 刷新列表
await methods.loadUsers()
}
catch (error) {
message.error('用户创建失败')
throw error // 让调用方处理错误
}
},
}
// store/modules/user.ts
import { defineStore } from 'pinia'
export const useUserStore = defineStore('user', {
state: () => ({
userInfo: null as UserInfo | null,
permissions: [] as string[],
token: '',
}),
getters: {
isLoggedIn: state => !!state.token,
hasPermission: state => (permission: string) =>
state.permissions.includes(permission),
},
actions: {
/**
* 用户登录
*/
async login(credentials: LoginParams) {
const response = await loginApi(credentials)
this.token = response.token
this.userInfo = response.userInfo
this.permissions = response.permissions
return response
},
/**
* 用户登出
*/
logout() {
this.token = ''
this.userInfo = null
this.permissions = []
},
},
persist: {
key: 'user-store',
storage: localStorage,
paths: ['token', 'userInfo'],
},
})
any 类型scoped 避免样式污染# 代码检查
yarn lint
# 代码格式化
yarn lint:fix
# 类型检查
yarn type-check
# 清理缓存
yarn clean:cache
# 生成 API 类型
yarn openapi
遵循 Conventional Commits 规范:
feat: 新功能fix: 修复问题docs: 文档更新style: 代码格式调整refactor: 代码重构perf: 性能优化test: 测试相关chore: 构建工具或依赖更新git checkout -b feature/new-featuregit commit -m 'feat: add new feature'git push origin feature/new-feature默认账号: admin / a123456