vue实现后台管理
Vue 实现后台管理系统
技术栈选择
Vue 3 + TypeScript + Pinia + Element Plus/ Ant Design Vue
Vue Router 处理路由,Axios 处理 HTTP 请求
ESLint + Prettier 保证代码规范
项目结构
src/
├── api/ # 接口封装
├── assets/ # 静态资源
├── components/ # 公共组件
├── router/ # 路由配置
├── store/ # 状态管理
├── styles/ # 全局样式
├── utils/ # 工具函数
├── views/ # 页面组件
└── main.ts # 入口文件
核心功能实现
路由配置
// router/index.ts
const routes = [
{
path: '/',
component: Layout,
children: [
{ path: '/dashboard', component: Dashboard },
{ path: '/user', component: UserManagement }
]
},
{ path: '/login', component: Login }
]
状态管理示例
// store/user.ts
export const useUserStore = defineStore('user', {
state: () => ({
token: localStorage.getItem('token') || '',
userInfo: null
}),
actions: {
async login(params) {
const res = await api.login(params)
this.token = res.token
}
}
})
API 封装
// api/user.ts
export const login = (data) => {
return request({
url: '/login',
method: 'post',
data
})
}
权限控制方案
-
路由级权限
通过路由守卫检查用户权限:router.beforeEach((to, from, next) => { const hasToken = getToken() if (to.meta.requiresAuth && !hasToken) { next('/login') } else { next() } }) -
组件级权限
使用自定义指令 v-permission:app.directive('permission', { mounted(el, binding) { if (!checkPermission(binding.value)) { el.parentNode?.removeChild(el) } } })
典型页面结构
表格页面示例
<template>
<el-table :data="tableData">
<el-table-column prop="name" label="姓名" />
<el-table-column label="操作">
<template #default="scope">
<el-button @click="handleEdit(scope.row)">编辑</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
v-model:currentPage="currentPage"
:total="total"
@current-change="fetchData"
/>
</template>
<script setup>
const tableData = ref([])
const currentPage = ref(1)
const fetchData = async () => {
const res = await api.getList({
page: currentPage.value
})
tableData.value = res.data
}
</script>
优化建议
-
按需加载组件
使用动态导入减少首屏体积:const UserManagement = () => import('./views/UserManagement.vue') -
封装高阶组件
抽象通用逻辑如表格分页、表单验证等 -
使用 Composition API
逻辑复用更灵活,代码组织更清晰 -
性能监控
接入 Sentry 或自建监控系统跟踪运行时错误
部署方案
-
生产环境构建
npm run build -
Nginx 配置示例

server { listen 80; location / { root /path/to/dist; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://backend; } }
以上方案可根据实际项目需求调整,建议从基础功能开始逐步迭代,注意保持代码的可维护性和可扩展性。






