从0开始搭建vue2管理后台基础模板

Vue后台管理系统项目(2)后台管理系统模板介绍 目录 1.我们这里下载简洁版 2.新建一个空文件夹,把下载好的模板解压到该文件夹内 3.我们安装项目依赖 3.1安装完成后,我们打开项目 3.2运行项目 运行后的效果: 4.模板中文件夹的作用 gitee仓库地址: https://gitee.com/CMD-UROOT/my_project/commits/master 大家根据上传历史进行查找你需要的代码 简洁版: https://github.com/PanJiaChen/vue-admin-template 加强版:... 阅读详情

网站主要完成:侧边菜单栏、页面标签卡、内容栏
源代码gitee地址:https://gitee.com/zhao_liangliang1997/navigation-bar

一、起步

1、创建vue项目

vue create 项目名

2、引入element

3、其他安装

1、首先需要安装如下

cnpm install vuex
cnpm install vue-router
cnpm install sass
cnpm install sass-loader
cnpm install node -sass

2、main.js中引入相关

引入后,可能会报错,请别急,继续往下走。

import Vue from 'vue'
import App from './App.vue'
import store from './store'
import router from './router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
// 引入基础样式[下面给链接复制style.scss以及variables.scss]
import './assets/scss/style.scss';

Vue.config.productionTip = false
Vue.use(ElementUI);

new Vue({
    router,
    store,
    render: h => h(App)
}).$mount('#app')

3、改造App.vue

<template>
  <div id="app">
      <router-view/>
  </div>
</template>
<script>
export default {
  name: 'App',
}
</script>
<style lang="scss">
#app {
    height: 100vh;
}
</style>

完成侧边栏的项目结构,如下图:

在这里插入图片描述

相关链接

1、style.scss;
2、variables.scss

4、配置路由[router下的index.js]

配置如下路由后,下一步您需要对layout进行页面设计【第一步侧边菜单栏】

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const router = new VueRouter({
    routes:[
        {
            path: '/',
            hidden: true,
            component: () =>
                import ('@/page/layout'),
            children: [
                {
                    path: 'index',
                    component: () =>
                        import ('@/page/index'),
                    hidden: true
                }
            ]
        },
    ]
})
export default router

二、侧边菜单栏的设计

1、封装菜单组件navMenu.vue

<template>
    <div>
        <template v-for="(item, index) in userNav">
            <el-menu-item :index="item.path" v-if="!item.hidden && !item.children">
                {{ item.name }}
            </el-menu-item>
            <el-submenu :index="item.path" v-if="!item.hidden && item.children">
                <template slot="title">{{ item.name }}</template>
                <nav-menu :user-nav="item.children"/>
            </el-submenu>
        </template>
    </div>
</template>
<script>
export default {
    name: "navMenu",
    props: {
        userNav: {
            type: Array,
            default: []
        }
    }
}
</script>

2、layout中实现侧边栏
思路: ①首先画出侧边栏;②路由信息存放vuex中;③vuex中的路由从路由js中获取

<template>
    <el-container>
        <el-aside width="20vh" class="aside">
            <div class="logo_box pr">
                <span class="fl w_100 tc f20 text-white w_h_center pl20 pr20">测试服务平台</span>
            </div>
            <el-menu :default-active="activeIndex"
                     class="el-menu-vertical-demo"
                     style="flex: 1; overflow: auto; width: 100%; overflow-x: hidden"
                     background-color="#6187F7"
                     text-color="#fff"
                     active-text-color="#ffd04b"
                     unique-opened
                     @select="handleSelect">
                <template v-for="(item, index) in userNav">
                    <el-menu-item :key="index" :index="item.path" v-if="!item.hidden && !item.children">
                        {{ item.name }}
                    </el-menu-item>
                    <el-submenu :key="index" :index="item.path" v-if="!item.hidden && item.children">
                        <template slot="title">{{ item.name }}</template>
                        <nav-menu :user-nav="item.children"/>
                    </el-submenu>
                </template>
            </el-menu>
        </el-aside>
        <el-container>
            <el-header>Header</el-header>
            <el-main>
                <router-view/>
            </el-main>
        </el-container>
    </el-container>
</template>

<script>
import NavMenu from '@/page/navMenu/navMenu'
import {mapState, mapMutations} from 'vuex'
export default {
    name: "VueLayout",
    components: {
        NavMenu
    },
    data() {
        return {
            url: '',
            activeIndex:'/'
        }
    },
    created() {
        // 获取菜单权限 [因此刻未配动态路由,所以在此处调用]
        this.setMenu()
    },
    computed: {
        ...mapState(['userNav'])
    },
    methods: {
        ...mapMutations(['setMenu']),
        handleSelect: function (key) {
            let path = this.$route.path
            if (path !== key) {
                if (key === '/' && path === '/index') {
                    return
                }
                this.$router.push(key)
            }
        },
    }
}
</script>

<style less scoped>
/deep/ .el-tabs__header {
    margin: 0;
}
.aside {
    background-color: #6187F7;
    display: flex;
    flex-direction: column;
}
.logo_box {
    height: 60px;
    border-bottom: 1px solid white;
}
</style>

3、vuex

//1.引入Vue
import Vue from 'vue';
import Vuex from 'vuex';
import view from '@/router/baseView';
import router from '@/router/index'
import dynamicView from "@/router/dynamicView";
//2.安装
Vue.use(Vuex);
const store = new Vuex.Store({
    //存储状态
    state:{
        userNav: [],    // 导航栏路由, 默认未登录,展示静态路由
        activeIndex: '/',
        tagMap: new Map(),
    },
    // Vuex中的Store状态(state)更新的唯一方式:提交Mutation
    mutations:{//定义mutations
        // 定义改变全局共享数据的方法
        setMenu(state) {
            let baseView = Object.assign([], view) // 初始化导航栏
            // 根据菜单权限获取菜单
            let nav = getNav(dynamicView)
            nav.forEach(item => {
                baseView.push(item)
            })
            state.userNav = baseView
        },
    }
})
//导出
export default store

function getNav(navs) {
    let list = []
    navs.forEach(nav => {
        let obj = {}
        obj.path = nav.path
        obj.name = nav.name
        obj.icon = nav.icon
        obj.isPage = nav.isPage
        if (nav.isPage) {
            obj.component = () => import ('@/views' + nav.path)
        }
        if (nav.children) {
            obj.children = getNav(nav.children)
        }
        list.push(obj)
    })
    return list
}

三、页面标签卡

1、头部、内容栏及页面标签卡

页面标签卡:标签卡为外部引入组件【代码请到Gitee查看】

在这里插入图片描述

2、注意事项:

1、tag改变方法【activeIndex从vuex引入】
2、tag标签页根据路由创建【navClick从vuex引入】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、最终效果

在这里插入图片描述

4、后续相关token

1.客户端使用用户名跟密码请求登录
2.服务端收到请求,去验证用户名与密码
3.验证成功后,服务端会签发一个 token 并把这个 token 发送给客户端
4.客户端收到 token 以后,会把它存储起来,比如放在 cookie 里或者 localStorage 里
5.客户端每次向服务端请求资源的时候需要带着服务端签发的 token
6.服务端收到请求,然后去验证客户端请求里面带着的 token ,如果验证成功,就向客户端返回请求的数据
  • 每一次请求都需要携带 token,需要把 token 放到 HTTP 的 Header 里

  • 基于 token 的用户认证是一种服务端无状态的认证方式,服务端不用存放 token 数据。用解析 token 的计算时间换取 session 的存储空间,从而减轻服务器的压力,减少频繁的查询数据库

  • token 完全由应用管理,所以它可以避开同源策略

  • 什么是同源策略?
    同源策略是客户端脚本(尤其是 Javascript)的重要的安全度量标准。其目的是防止某个文档或脚本从多个不同源装载。 这里的同源策略指的是:协议,域名,端口相同,同源策略是一种安全协议,指一段脚本只能读取来自同一来源的窗口和文档的属性。

  • 为什么要有同源限制?
    我们举例说明:比如一个黑客程序,他利用 Iframe 把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过 Javascript 读取到你的表单中 input 中的内容,这样用户名,密码就轻松到手了

5、permission.js

在登陆这个流程中,permission.js这个是很最重要的一环,是路由的全局钩子(beforeEach和afterEach),全局钩子就是每次跳转的时候可以根据情况进行拦截,不让它进行跳转。使用场景最常见的就是有些页面需要用户登陆之后才能访问,就可以在beforeEach中校验用户是否登陆来进行相对应的拦截处理。

6、相关学习博客推荐:

vue-element-admin 登陆

Vue2 公司后台管理系统(仅前端) vue2 公司后台管理系统 (仅前端) 阅读详情

相关推荐

vue2从0到1搭建一个后台管理系统(一)

后续全局设置,利用路由拦截器,在路由跳转前判断用户登录状态(利用token),如果有token就代表用户登录成功并跳转到目标地址,如果没有就强转到登录页面。写这篇的主要目的还是在于梳理项目搭建的思路 and 整理一个后台管理的基础模板方便以后起项目的时候可以快速使用。假设:用户已经登录然后重新输入网址,这时候应该跳转到登录还是首页?(个人想先把项目配置,比如请求封装,路由拦截等搞完再进行Layout搭建)当然是首页,那判断用户登录状态这一步怎么实现?# Mqtt消息服务器连接地址。

dd_lcdw的博客 3641

能不能推荐个 vue 后台管理系统模板?

​ 下面是我整理的vue2和vue3的一些后台管理系统模板,希望对你有帮助~ ​

SiKi学院的博客 6036

【VUE】vue3.0后台常用模板

推荐基于vue3.0开发的后台管理好用的模板,让需要的人快速获取合适的模板

LuviaWu的博客 6897

vue2后台管理系统通用模板

依赖包: router/index.js: vuex store/index.js: axios api/axios.js: main.js 登录页 布局 home.vue: 404页面 exception/NotFound.vue:

1742

基于Vue3.0+ElementPlus后台精简模板

前言 欢迎使用VUE3.0 + ElementPlus 后台管理模板 UI库文档: https://element-plus.gitee.io/#/zh-CN 该项目基于Vuecli 使用Vue3 + 最新版ElementPlus 构建简单版后台管理系统 基本功能:(Home页面有详细介绍可参考) 通过路由自动生成侧边栏menu 打开menu可以自动生成标签页 可以使用less变量控制激活颜色 还可以通过less变量控制主题色关注Java项目分享有需要生成menu的路由单独可以配置在一个文件,将不需要生

程序媛小琬的博客 8323

基于Vue.js 2.0的管理系统模板:快速搭建企业级后台

Vue.js是一种流行的前端JavaScript框架,以其实用性、轻量级和灵活性而闻名。Vue.js 2.0管理系统模板则是基于Vue.js构建的企业后台管理系统的基础框架,它以组件化为核心,能够快速响应数据变化,并提供了一个简洁的模板和丰富的功能组件,使开发人员能够专注于业务逻辑的实现,而不需要从零开始编写基础代码。这些模板设计理念在于提升开发效率、简化项目结构、并且增强了代码的可维护性。

weixin_28988985的博客 445

【VUE】vue后台常用模板

推荐几个基于vue2.0开发的后台管理好用的模板,让需要的人快速获取合适的模板

LuviaWu的博客 9万+

基于Vue.js2.0的后台管理模板

基于Vue.js2.0的后台管理模板

Vue后台管理系统模板推荐

vue后台管理系统模板推荐,vue2 Vue.js 是一个目前比较流行的前端框架,已经到了前端人人都会的地步,今天这里为大家罗列一下基于 Vue 的后端管理的框架。目前比较流行和 Vue 搭配的 UI组件 有Element-UI、iview、Bootstrap-Vue、Ant-Design-Vue,另外还有Vuetify、Buefy (Bulma css)、Vue Material 等等。基于这些组件库封装的后台管理模板,推荐一些常用 VUE后台模板 ......

唐先森的博客 2万+

模板 - 树上问题(树的直径、动态查询树的直径、树的重心)

整理的算法模板合集: ACM模板 目录一、树的直径树形DP两次DFS / BFS(找到直径的两个端点)二、动态修改树的边权并求每个时刻的直径(线段树)三、树的重心 一、树的直径 树的直径满足如下性质: 若有多条直径,则所有的直径之间皆有公共点。 直径的两端一定是叶子。 树中距离某一直径端点最远的点,至少有一个是该直径的另一个端点。 对于树上任意一个点,与之距离最远的一个点,至少有一个直径的端点。 给你一个无权无向的树。编写程序以输出该树中最长路径(从一个节点到另一个节点)的长度。在这

繁凡さん的博客 1676

ROS相机内参标定详细步骤指南

相机标定的目的是为了确定相机内部参数和外部参数,以便修正图像并将图像坐标映射到世界坐标,或者从世界坐标映射到图像坐标。这个过程是计算机视觉和三维感知任务的关键步骤之一,它有以下主要目的: 1. **减小畸变**:相机镜头和传感器可能引入径向和切向畸变,使得图像中的直线变得弯曲或者物体的形状不准确。通过标定相机,可以矫正这些畸变,使图像更准确。

m0_56661101的博客 1万+

Vue前端后台模板

1. AdminLTE 前端模板地址 https://github.com/almasaeed2010/AdminLTE 非常流行的基于 Bootstrap 3.x 的免费的后台 UI 框架。 AdminLTE-admin 轻量级权限管理框架 AdminLTE-admin是以SpringMVC+Shiro+Mybatis为核心开发的精简后台基础系统。 包含用户管理,角色管理,部门管理,权限管理,菜单管理,日志管理等常用业务模块。 使用AdminLTE作为前端UI框架。 第三方Mybatis-plus作

输入技术、输出想法 7614

毕设分享|基于16单片机的指纹识别电子密码锁设计

我们今天的工作生活中,很多的场合都需要身份的认证,而传统的基于标志的身份认证技术由于受到证件伪造以及密码破解等手段的威胁,逐渐表现得有些力不从心。怎样保护自己的重要文件资料,如何保证自己的隐私不被泄露?在传统的身份认证中,我们往往使用密码加密法,但是这种方法只是"防君子不防小人"。在高明的黑客眼里,由几个字符组成的密码脆弱得不堪一击。现在,科技的发展让我们有了新的选择——生物识别技术。将生物识别技术应用于笔记本、门锁等方面,可以对文件、财产起保护作用,并且可以进行身份识别。

Sen_091的博客 1021

Vue基础——VueJS是什么、Vue的优缺点、vue2和vue3的模板区别、MVVM数据双向绑定、Vue的安装和使用、Vue模板语法-文本渲染、常用的vue的指令

Vue基础——VueJS是什么、Vue的优缺点、vue2和vue3的模板区别、MVVM数据双向绑定、Vue的安装和使用、Vue模板语法-文本渲染、常用的vue的指令

ranran0306的博客 9712

自适应滤波算法综述

自适应滤波算法综述

xdzhujy的博客 5万+

【STM32G474实战】RS485通信的DMA优化策略与性能对比

本文深入探讨了在STM32G474微控制器上优化RS485通信的DMA策略。通过对比轮询、中断和DMA三种数据传输方式的代码实现与性能,揭示了DMA在解放CPU、降低占用率方面的巨大优势。文章提供了详细的DMA配置指南、高级应用技巧(如结合空闲中断)以及一个高可靠通信框架的实战思路,旨在帮助开发者构建高效、实时的工业控制系统。

weixin_29268331的博客 303

四个vue后台常用模板,你用过几个?

vue后台常用模板: element文档: http://element-cn.eleme.io/#/zh-CN/component/installation vue API: https://cn.vuejs.org/v2/api/ 以下是在下收集的四个常用的vue模板 1、vue-manage-system git地址:https://github.com/lin-xin/vue-manage-system 线上地址: http://blog.gdfengshuo.com/example/wor

qq_45750154的博客 7768

CH592F RISC-V蓝牙LED灯设计:WS2812B驱动与微信小程序控制

蓝牙低功耗(BLE)是嵌入式物联网设备主流无线通信技术,其核心在于协议栈轻量化、射频稳定性与外设协同调度。基于RISC-V内核的蓝牙SoC(如CH592F)凭借高集成度、低待机电流和免外部巴伦的射频设计,显著降低硬件复杂度与BOM成本;而WS2812B作为单线级联RGB LED,依赖微秒级精准时序,需借助定时器+DMA机制规避CPU干预,保障动态效果流畅性。该方案融合电容触摸交互、GATT服务自定义与微信小程序标准Bluetooth API对接,适用于智能照明、DIY彩灯及教学实践等场景,是BLE+LED实

weixin_31163455的博客 434

Vue2.0 + ElementUI 手写权限管理系统后台模板(一)——简述

这个权限管理就是为了方便,跟系统安全真的不沾边,只是根据后台返回的角色信息来生成他可以看见的菜单和按钮,显示菜单的方法是根据权限删除掉路由表里没有权限的路由,然后再动态添加,原本包含没有访问权限的原路由表只要打开页面运行代码就已经不存在了,并且404页面除了过滤掉项目没有的路由外,同时每次的路由跳转都会鉴权。如果你知道了没有权限的路由试着强行跳转会因为没有权限直接会跳转404。

夏洛克丶旭的博客 1万+

uniapp - 解决在线预览PDF文件空白打不开的问题,无论是后端下载二进制文件流pdf还是本地插件或JS预览查看打开白屏不显示,详细排查解决(适用于移动端H5网页、安卓/苹果app、微信小程序)

uniapp App端 实现pdf文件预览打开白屏解决,uniapp 在线预览pdf打开一片空白,跨域白屏,uni-app中使用WebView预览PDF文件打开空白,微信小程序(uniapp)预览PDF空白怎么办,下载PDF文件流后打开空白或无法打开的问题,Uniapp H5网页下载二进制pdf文件页面空白以及解决文件损坏打不开的情况,Uniapp app在线预览pdf文件流,PDF加载出来怎么办,服务器后端返回PDF文件流后前端进行下载但打开后一片白屏,解决pdf文件流,预览全是空白页,pdf文件流,下载

🏆 前端领域优质创作者 1万+

【MATLAB-app】系列教程(含视频)第4、5、6课:实战_制作简单的图像处理软件

写作时间: 2020-12-27 我的教程目录 第1课:初步了解appdesigner 第2课:学会制作一个计算器 第3课:学习更多的控件(重点!) 第4课:实例1:制作一个图像处理软件 第5课:学习APPdesigner的设计精髓,框架 第6课:结合使用多种控件,函数等,丰富我们的实例1 第7课:app设计打包,完成工程应用导出 标题: 第4课:我的实例_学会制作一个图像处理软件 本文目录: 1.先看看我之前的一个工程 2.常用的基本组件控件 3.最常用且实用的控件的用法 -3.1 editfilel

wind 4054

Vue后台管理系统框架推荐

Vue后台管理系统框架推荐

weixin_44999830的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

vue3开源后台管理系统模板

(github上的标星数为14.2k)基于 vite + vue3 + gin 搭建的开发基础平台(支持TS,JS 混用),集成 jwt鉴权,权限管理,动态路由,显隐可控组件,分页封装,多点登录拦截,资源权限,上传下载,代码生成器,表单生成器等开发必备功能。和 UnoCSS 的清新优雅的中后台模版,它使用了最新的前端技术栈,内置丰富的主题配置,有着极高的代码规范,基于 mock 实现的动态权限路由,开箱即用的中后台前端解决方案,也可用于学习参考。(github上的标星数为13.5k)是一个基于。

q2724338648的博客 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【Vue 快速入门】从零开始搭建 VUE + Element UI后台管理系统框架

从零开始搭建 VUE + Element UI后台管理系统框架 前言 后台管理系统前端框架,现在很流行的形式都是,上方和左侧都是导航菜单,中间是具体的内容。比如阿里云、七牛云、头条号、百家号等等,他们的管理系统都是这样的。 现在我们从零开始,给小伙伴们讲讲如何来搭建这样的一个前端页面框架,主要用到 VUE + Element UI。 生成项目 用Vue脚手架初始化一个基于 webpack 模板的新项目 vue init webpack testadmin 一路向下...

smilejiasmile的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

从0开始的vue+elementui后台管理系统

转自http://www.javanx.cn/20190318/vue-elementui-admin/ 前言 后台管理系统前端框架,现在很流行的形式都是,上方和左侧都是导航菜单,中间是具体的内容。比如阿里云、七牛云、头条号、百家号等等,他们的管理系统都是这样的。 现在我们从零开始,给小伙伴们讲讲如何来搭建这样的一个前端页面框架,主要用到 VUE + Element UI。 生成项目 用Vue脚手架初始化一个基于 webpack 模板的新项目 vue init webpack testa.

abc1498880402的博客 4813

Vue3搭建后台管理系统模板

一个项目要有统一的规范,需要使用eslint+stylelint+prettier来对我们的代码质量做检测和修复,需要使用husky来做commit拦截,需要使用commitlint来统一提交规范,需要使用preinstall来统一包管理工具。eslint针对的是javascript,他是一个检测工具,包含js语法以及少部分格式问题,在eslint看来,语法对了就能保证代码正常运行,格式问题属于其次;顾名思义,开发使用的环境,每位开发人员在自己的dev分支上干活,开发到一定程度,同事会合并代码,进行联调。

Adios_0403的博客 6181
上一篇: 【尚硅谷】IDEA2022快速上手开发利器
下一篇: 【Optional】告别丑陋判空,使用Optional类
智汇风渔AI小白
博客等级 码龄7年 1万+粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智汇风渔AI小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值