Vue+Ant Design 搭建后台管理系统

前言

省去node、cli等安装步骤,直接创建好项目,运行起来,效果如下:

构建基础页面

  1. 修改APP.vue文件, <router-view />是路由渲染组件
xml 复制代码
<template>
  <div id="app">
    <router-view/>
  </div>
</template>

<style lang="scss">

</style>
  1. 全局引入的ant-design-vue 组件(也可以按需引入,根据自己的情况)
javascript 复制代码
// config/components_use.js 
import Vue from 'vue'
import antDesign from 'ant-design-vue'
import 'ant-design-vue/dist/antd.css'
Vue.use(antDesign)
  1. 创建基础布局容器
ini 复制代码
// layout/BasicLayout.vue
<a-layout id="components-layout-demo-custom-trigger">
      <a-layout-sider v-model="collapsed" :trigger="null" collapsible>
        <div class="logo" />
        <a-menu theme="dark" mode="inline" :default-selected-keys="['1']">
          <a-menu-item key="1">
            <a-icon type="user" />
            <span>nav 1</span>
          </a-menu-item>
          <a-menu-item key="2">
            <a-icon type="video-camera" />
            <span>nav 2</span>
          </a-menu-item>
          <a-menu-item key="3">
            <a-icon type="upload" />
            <span>nav 3</span>
          </a-menu-item>
        </a-menu>
      </a-layout-sider>
      <a-layout>
        <a-layout-header style="background: #fff; padding: 0">
          <a-icon
            class="trigger"
            :type="collapsed ? 'menu-unfold' : 'menu-fold'"
            @click="() => (collapsed = !collapsed)"
          />
        </a-layout-header>
        <a-layout-content
          :style="{ margin: '24px 16px', padding: '24px', background: '#fff', minHeight: '280px' }"
        >
            <router-view/>
        </a-layout-content>
      </a-layout>
    </a-layout>
  1. 修改路由文件
javascript 复制代码
// router/index
import Vue from 'vue'
import Router from 'vue-router'
import Home from '../views/Home.vue'
import BasicLayout from './../layout/BasicLayout.vue'
Vue.use(Router)

const router = new Router({
  mode: 'history',
  routes: [
    {
      path: '/',
      component: BasicLayout,
      redirect: '/index',
      children: [
        {
          path: '/index',
          name: 'index',
          hideInMenu: true,
          component: Home
        }
      ]
    }
  ]
})
export default router

效果如下:

菜单和路由配置

  1. 新建页面,并配置路由如下:
  1. 修改BasicLayout.vue
xml 复制代码
<template>
  <a-layout id="components-layout-demo-custom-trigger">
    <a-layout-sider v-model="collapsed" :trigger="null" collapsible>
      <div class="logo" />
      <a-menu theme="dark" mode="inline" :default-selected-keys="['1']">
        <template v-for="item in navs">
          <!-- 一级 -->
          <a-menu-item :key="item.name" v-if="!item.children">
            <router-link :to="item.path">
              <a-icon type="user" />
              <span>{{ item.meta.title }}</span>
            </router-link>
          </a-menu-item>
          <!-- 多级 -->
          <a-sub-menu :key="item.name" @titleClick="titleClick" v-else>
            <span slot="title">
              <a-icon type="appstore" /><span>{{ item.meta.title }}</span>
            </span>
            <template v-for="item2 in item.children">
              <a-menu-item :key="item2.name">
                <router-link :to="item2.path">
                  <a-icon type="user" />
                  <span>{{ item.meta.title }}</span>
                </router-link>
              </a-menu-item>
            </template>
          </a-sub-menu>
        </template>
      </a-menu>
    </a-layout-sider>
    <a-layout>
      <a-layout-header style="background: #fff; padding: 0">
        <a-icon
          class="trigger"
          :type="collapsed ? 'menu-unfold' : 'menu-fold'"
          @click="() => (collapsed = !collapsed)" />
      </a-layout-header>
      <a-layout-content
        :style="{
          margin: '24px 16px',
          padding: '24px',
          background: '#fff',
          minHeight: '280px',
        }">
        <router-view />
      </a-layout-content>
    </a-layout>
  </a-layout>
</template>
<script>
export default {
  data() {
    return {
      collapsed: false,
      navs: [],
    }
  },
  created() {
    // 获取全部路由
    this.navs = this.$router.options.routes[0]?.children
    console.log('this.navs----', this.navs)
  },
  methods: {
    titleClick(e) {
      console.log('titleClick', e)
    },
  },
}
</script>
<style>
#components-layout-demo-custom-trigger {
  height: 100%;
}
#components-layout-demo-custom-trigger .trigger {
  font-size: 18px;
  line-height: 64px;
  padding: 0 24px;
  cursor: pointer;
  transition: color 0.3s;
}

#components-layout-demo-custom-trigger .trigger:hover {
  color: #1890ff;
}

#components-layout-demo-custom-trigger .logo {
  height: 32px;
  background: rgba(255, 255, 255, 0.2);
  margin: 16px;
}
</style>
相关推荐
萌萌哒草头将军29 分钟前
有了它 ,我彻底告别了 try-finally 🔥🔥🔥
前端·javascript·vue.js
anyup1 小时前
🔥🔥 10 天 Star 破百!uView Pro 文档也开源啦:完全免费、无广告、高效上手
前端·vue.js·uni-app
南半球与北海道#2 小时前
el-table合并单元格
javascript·vue.js·elementui·表格合并
啷咯哩咯啷2 小时前
element-plus el-tree-v2大数据量勾选节点卡顿问题
前端·javascript·vue.js
索西4 小时前
Vue 响应式原理
vue.js
焦小风Zephyr4 小时前
Vue3组件通信:父子相传
vue.js
Sky_Ax4 小时前
实现一个时间轴组件
vue.js
RainbowSea5 小时前
伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 05
vue.js·spring boot·后端
文艺理科生6 小时前
Nuxt 组件渲染进阶:服务端与客户端组件的协作艺术
前端·javascript·vue.js
天客6 小时前
Vue3.5 + Element-Plus 二次封装 el-table、el-form、el-descriptions
前端·vue.js