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>
相关推荐
你别说话了20 小时前
Vue实现高效拖拽效果 vue-Draggable
前端·vue.js
志尊宝20 小时前
Vue3 零基础每日笔记(036):动手封装 useTitle 与 useToggle——最小的组合式函数
vue.js·#vue #前端 #前端开发·#javascript·#vue.js
专业程序开发源20 小时前
springboot旅游推荐系统82074-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·php·课程设计·旅游
晚安日记wanna21 小时前
Vue3 script setup 的四层追问答到第三层才算过关
前端·vue.js·面试
six_21 小时前
RiverPlusCOM Web:不用安装的在线串口调试助手
vue.js·程序员
摸鱼仙人~1 天前
React 原理进阶:彻底理解 re-render、React.memo、useMemo 与 useCallback
前端·vue.js
Bs_MoneyMagnet1 天前
基于springboot+vue的滑雪场票务与装备租赁系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计
Z小明2 天前
第 6 章 组件进阶
前端·vue.js
ID34610744202 天前
【课程设计】基于Spring Boot+Vue的游戏账号租赁系统的设计与实现-计算机毕设 附源码50345
javascript·vue.js·spring boot·python·node.js·php·课程设计
FYKJ_20102 天前
【毕设分享】基于Web的校园兼职信息发布与申请系统07059
前端·vue.js·spring boot·mysql·typescript·spark·课程设计