【vue实战项目】通用管理系统:首页

前言

本文为博主的vue实战小项目系列中的第三篇,很适合后端或者才入门的小伙伴看,一个前端项目从0到1的保姆级教学。前面的内容:

【vue实战项目】通用管理系统:登录页-CSDN博客

【vue实战项目】通用管理系统:封装token操作和网络请求-CSDN博客

【vue实战项目】通用管理系统:api封装、404页-CSDN博客

本文将讲解实现整个项目的重点:首页的搭建,包含菜单、菜单的路由转跳、面包屑导航等内容。

目录

1.搭架子

2.布局

​编辑

3.Header

4.Footer

5.Menu

5.1.页面

5.2.路由

5.2.1自定义菜单内容

5.2.2.开启路由功能

6.面包屑导航


1.搭架子

先来看一下主页的样子:

主页的结构:头部+中间+底部,也就是由header、menu、footer三个组件组成。由于这三个组件是很多页面都要用到的公共组件,所以在components下面建一个common用来放这些公共组件。然后分别建三个组件的架子,先建三个空白的架子吧,后面一点点往这三个组件里填内容。

先把这三个组件写出来,先写三个空白的架子即可,后面再慢慢填充:

header:

<template><div>footer</div>
</template><script>
export default{data(){return {}}
}
</script>
<style lang="less" scoped></style>

footer:

<template><div>footer</div>
</template><script>
export default{data(){return {}}
}
</script>
<style lang="less" scoped></style>

menu:

<template><div>menu</div>
</template><script>
export default{data(){return {}}
}
</script>
<style lang="less" scoped></style>

在helloworld组件里面引入一下,看看能不能正常引入:

<template><div class="helloworld"><Header></Header><Menu/><Footer/></div>
</template><script>
import Footer from './common/Footer.vue'
import Header from './common/Header.vue'
import Menu from './common/Menu.vue'
export default {components:{Footer,Menu,Header},data(){return{}}
}
</script>

能正常引入的话,页面上会显示几个组件的内容:

然后基于原来的HelloWorld改成Home页面:

<template><div class="home"><Header></Header><Menu/><Footer/></div>
</template><script>
import Footer from './common/Footer.vue'
import Header from './common/Header.vue'
import Menu from './common/Menu.vue'
export default {components:{Footer,Menu,Header},data(){return{}}
}
</script><style lang="less">
.home{width: 100%;height: 100%;
}
</style>

2.布局

准备好三个组件后,接下来就是对Home进行布局,既然用了UI框架,直接用elementUI提供的布局即可,在其官网上有:

选一个,改一改,然后调整一下样式:

<template><div class="home"><Header/><el-container class="content"><Menu/><el-container><el-main>Main</el-main><el-footer><Footer/></el-footer></el-container></el-container></div>
</template><script>
import Footer from './common/Footer.vue'
import Header from './common/Header.vue'
import Menu from './common/Menu.vue'
export default {components:{Footer,Menu,Header},data(){return{}}
}
</script><style lang="less">
.home{width: 100%;height: 100%;.content{position: absolute;width: 100%;top: 60px;bottom: 0;}
}
</style>

3.Header

接下来需要调整一下header,根据上面的效果图可以看到,header上面要显示系统的名字和登录用户的用户名。系统名称直接写死,用户名可以用到我们之前封装的setToken.js去取登陆后我们放在缓存中的username作为用户名来显示。

<template><div><el-header><div class="title">通用管理系统</div><div>{{name}}</div></el-header></div>
</template><script>
import {getToken} from '@/utils/setToken.js' 
export default{data(){return {name:''}},created(){this.name=getToken('username')}
}
</script>
<style lang="less" scoped></style>

系统名称要在最左边,用户名要在最右边,所以调整一下样式:

<template><div class="header"><el-header><div class="title">通用管理系统</div><div>{{name}}</div></el-header></div>
</template><script>
import {getToken} from '@/utils/setToken.js' 
export default{data(){return {name:''}},created(){this.name=getToken('username')}
}
</script>
<style lang="less" scoped>.header{.el-header{background: #2578b5;color: #fff;line-height: 60px;display: flex;justify-content: space-between;.title{width:200px;font-size: 24px;}}}
</style>

这样Header就处理好了。

4.Footer

footer比较简单,用一个el-card来包裹,加上一些文字内容就可以了。

<template><div class="footer"><el-card>Frontend 2023 BugMan</el-card></div>
</template><script>
export default{data(){return {}}
}
</script>
<style lang="less" scoped></style>

5.Menu

5.1.页面

菜单组件elementUI也提供了:

去找一个,然后调整一下即可:

<template><div class="menu"><el-aside width="200px"><el-col :span="12"><h5>自定义颜色</h5><el-menudefault-active="2"class="el-menu-vertical-demo"@open="handleOpen"@close="handleClose"background-color="#545c64"text-color="#fff"active-text-color="#ffd04b"><el-submenu index="1"><template slot="title"><i class="el-icon-location"></i><span>导航一</span></template><el-menu-item-group><template slot="title">分组一</template><el-menu-item index="1-1">选项1</el-menu-item><el-menu-item index="1-2">选项2</el-menu-item></el-menu-item-group><el-menu-item-group title="分组2"><el-menu-item index="1-3">选项3</el-menu-item></el-menu-item-group><el-submenu index="1-4"><template slot="title">选项4</template><el-menu-item index="1-4-1">选项1</el-menu-item></el-submenu></el-submenu><el-menu-item index="2"><i class="el-icon-menu"></i><span slot="title">导航二</span></el-menu-item><el-menu-item index="3" disabled><i class="el-icon-document"></i><span slot="title">导航三</span></el-menu-item><el-menu-item index="4"><i class="el-icon-setting"></i><span slot="title">导航四</span></el-menu-item></el-menu></el-col></el-aside></div>
</template><script>
export default {data() {return {};},methods: {handleOpen(key, keyPath) {console.log(key, keyPath);},handleClose(key, keyPath) {console.log(key, keyPath);},},
};
</script>
<style lang="less" scoped></style>

看一下效果图,会发现菜单虽然是引进去了,但是样式很奇怪,所以接下来要做的就是调整菜单样式。

有左右和上下的滑动条说明高度和宽度不够,将高度拉到100%,宽度调宽一点即可。背景色不和谐,需要手动调整一下背景色。具体的样式调整后整个menu组件内容如下:

<template><div class="menu"><el-aside width="200px"><el-menudefault-active="2"class="el-menu-vertical-demo"@open="handleOpen"@close="handleClose"background-color="#2578b5"text-color="#fff"active-text-color="#ffd04b"><el-submenu index="1"><template slot="title"><i class="el-icon-location"></i><span>导航一</span></template><el-menu-item-group><template slot="title">分组一</template><el-menu-item index="1-1">选项1</el-menu-item><el-menu-item index="1-2">选项2</el-menu-item></el-menu-item-group><el-menu-item-group title="分组2"><el-menu-item index="1-3">选项3</el-menu-item></el-menu-item-group><el-submenu index="1-4"><template slot="title">选项4</template><el-menu-item index="1-4-1">选项1</el-menu-item></el-submenu></el-submenu><el-menu-item index="2"><i class="el-icon-menu"></i><span slot="title">导航二</span></el-menu-item><el-menu-item index="3" disabled><i class="el-icon-document"></i><span slot="title">导航三</span></el-menu-item><el-menu-item index="4"><i class="el-icon-setting"></i><span slot="title">导航四</span></el-menu-item></el-menu></el-aside></div>
</template><script>
export default {data() {return {};},methods: {handleOpen(key, keyPath) {console.log(key, keyPath);},handleClose(key, keyPath) {console.log(key, keyPath);},},
};
</script>
<style lang="less" scoped>
.menu{.el-aside{height: 100%;.el-menu{height:100%;}.el-submenu .el-menu-item{min-width: 0;}}
}
</style>

调整后的效果:

我们其实用不到那么多一级菜单,只保留一个导航一即可,并且其实我们也不需要elementUI自带的示例里面给出的handleOpen和handleClose方法,所以这里再整理一下页面,最终的内容和效果如下:

<template><div class="menu"><el-aside width="200px"><el-menudefault-active="2"class="el-menu-vertical-demo"background-color="#2578b5"text-color="#fff"active-text-color="#ffd04b"><el-submenu index="1"><template slot="title"><i class="el-icon-location"></i><span>导航一</span></template><el-menu-item-group><el-menu-item index="1-1">选项1</el-menu-item><el-menu-item index="1-2">选项2</el-menu-item></el-menu-item-group></el-submenu></el-menu></el-aside></div>
</template><script>
export default {data() {return {};},
};
</script>
<style lang="less" scoped>
.menu{.el-aside{height: 100%;.el-menu{height:100%;}.el-submenu .el-menu-item{min-width: 0;}}
}
</style>

最终调整后的效果:

5.2.路由

5.2.1自定义菜单内容

菜单最核心的内容自然是点某一项转跳到某一个组件上去。接下来我们要完成的就是菜单的路由转跳。

首先改写一下路由文件:

import Vue from 'vue'
import Router from 'vue-router'Vue.use(Router)export default new Router({routes:[{path:'/',redirect:'/login',component: ()=>import('@/components/Login')},{path:'/login',name:'Login',component: ()=>import('@/components/Login')},{path:'/home',name:'学生管理',iconClass:'fa fa-users',//默认转跳到学生管理页redirect:'/home/student',component: ()=>import('@/components/Home'),children:[{path:'/home/student',name:'学生列表',iconClass:'fa fa-list',component: ()=>import('@/components/students/StudentList'),},{path:'/home/info',name:'信息列表',iconClass:'fa fa-list-alt',component: ()=>import('@/components/students/InfoList'),},{path:'/home/info',name:'信息管理',iconClass:'fa fa-list-alt',component: ()=>import('@/components/students/InfoLists'),},{path:'/home/work',name:'作业列表',iconClass:'fa fa-list-ul',component: ()=>import('@/components/students/WorkList'),},{path:'/home/info',name:'作业管理',iconClass:'fa fa-list',component: ()=>import('@/components/students/WorkMent'),}]},{path:'/home/dataview',name:'数据分析',iconClass:'fa fa-bar-chart',component: ()=>import('@/components/Home'),children:[{path:'/home/dataview',name:'数据概览',iconClass:'fa fa-list',component: ()=>import('@/components/dataAnalysis/DataView'),},{path:'/home/mapview',name:'地图概览',iconClass:'fa fa-line-chart',component: ()=>import('@/components/dataAnalysis/DataView'),},{path:'/home/travel',name:'旅游地图',iconClass:'fa fa-line-chart',component: ()=>import('@/components/dataAnalysis/ScoreMap'),},{path:'/home/score',name:'分数地图',iconClass:'fa fa-line-chart',component: ()=>import('@/components/dataAnalysis/TravelMap'),}]},{path:'/users',name:'用户中心',iconClass:'fa fa-user',component: ()=>import('@/components/Home'),children:[{path:'/home/user',name:'用户概览',iconClass:'fa fa-list',component: ()=>import('@/components/users/User'),}]},{path:'*',name:'NotFound',component:()=>import('@/components/NotFound')}],mode:'history'
})

在menu中打印一下看能不能取到配置好的index.js的内容:

<script>
export default {data() {return {menus:[]};},created(){console.log(this.$router.options.routes);}
};
</script>

可以看到是有数据的,有数据那就很好办了:

去遍历菜单把数据取出来,绑定到菜单栏上去即可:

<template><div class="menu"><el-aside width="200px"><el-menudefault-active="2"class="el-menu-vertical-demo"background-color="#2578b5"text-color="#fff"active-text-color="#ffd04b"><template v-for="(item,index) in  menus"><el-submenu :index="index + ''" :key="index"><template slot="title"><i class="el-icon-location"></i><span>{{item.name}}</span></template><el-menu-item-group><el-menu-item index="1-1">选项1</el-menu-item><el-menu-item index="1-2">选项2</el-menu-item></el-menu-item-group></el-submenu></template></el-menu></el-aside></div>
</template><script>
export default {data() {return {menus:[]};},created(){console.log(this.$router.options.routes);this.menus=[...this.$router.options.routes]}
};
</script>
<style lang="less" scoped>
.menu{.el-aside{height: 100%;.el-menu{height:100%;}.el-submenu .el-menu-item{min-width: 0;}}
}
</style>

可以看到已经取到我们配置的导航菜单了:

会发现还有一个问题,Login、用户中心、404页并不是我们想展示出来的,这里需要给菜单项加上一个是否隐藏的属性,在遍历时去判断该属性从而决定是不是要显示:

import Vue from 'vue'
import Router from 'vue-router'Vue.use(Router)export default new Router({routes:[{path:'/',redirect:'/login',hidden:true,component: ()=>import('@/components/Login')},{path:'/login',name:'Login',hidden:true,component: ()=>import('@/components/Login')},{path:'/home',name:'学生管理',iconClass:'fa fa-users',//默认转跳到学生管理页redirect:'/home/student',component: ()=>import('@/components/Home'),children:[{path:'/home/student',name:'学生列表',iconClass:'fa fa-list',component: ()=>import('@/components/students/StudentList'),},{path:'/home/info',name:'信息列表',iconClass:'fa fa-list-alt',component: ()=>import('@/components/students/InfoList'),},{path:'/home/info',name:'信息管理',iconClass:'fa fa-list-alt',component: ()=>import('@/components/students/InfoLists'),},{path:'/home/work',name:'作业列表',iconClass:'fa fa-list-ul',component: ()=>import('@/components/students/WorkList'),},{path:'/home/info',name:'作业管理',iconClass:'fa fa-list',component: ()=>import('@/components/students/WorkMent'),}]},{path:'/home/dataview',name:'数据分析',iconClass:'fa fa-bar-chart',component: ()=>import('@/components/Home'),children:[{path:'/home/dataview',name:'数据概览',iconClass:'fa fa-list',component: ()=>import('@/components/dataAnalysis/DataView'),},{path:'/home/mapview',name:'地图概览',iconClass:'fa fa-line-chart',component: ()=>import('@/components/dataAnalysis/DataView'),},{path:'/home/travel',name:'旅游地图',iconClass:'fa fa-line-chart',component: ()=>import('@/components/dataAnalysis/ScoreMap'),},{path:'/home/score',name:'分数地图',iconClass:'fa fa-line-chart',component: ()=>import('@/components/dataAnalysis/TravelMap'),}]},{path:'/users',name:'用户中心',iconClass:'fa fa-user',component: ()=>import('@/components/Home'),children:[{path:'/home/user',name:'用户概览',iconClass:'fa fa-list',component: ()=>import('@/components/users/User'),}]},{path:'*',name:'NotFound',hidden:true,component:()=>import('@/components/NotFound')}],mode:'history'
})
<template><div class="menu"><el-aside width="200px"><el-menudefault-active="2"class="el-menu-vertical-demo"background-color="#2578b5"text-color="#fff"active-text-color="#ffd04b"><template v-for="(item,index) in  menus"><el-submenu :index="index + ''" :key="index" v-if="!item.hidden"><template slot="title"><i class="el-icon-location"></i><span>{{item.name}}</span></template><el-menu-item-group><el-menu-item index="1-1">选项1</el-menu-item><el-menu-item index="1-2">选项2</el-menu-item></el-menu-item-group></el-submenu></template></el-menu></el-aside></div>
</template><script>
export default {data() {return {menus:[]};},created(){console.log(this.$router.options.routes);this.menus=[...this.$router.options.routes]}
};
</script>
<style lang="less" scoped>
.menu{.el-aside{height: 100%;.el-menu{height:100%;}.el-submenu .el-menu-item{min-width: 0;}}
}
</style>

效果:

把二级菜单一起调整出来:

<template><div class="menu"><el-aside width="200px"><el-menudefault-active="2"class="el-menu-vertical-demo"background-color="#2578b5"text-color="#fff"active-text-color="#ffd04b"><template v-for="(item,index) in  menus"><el-submenu :index="index + ''" :key="index" v-if="!item.hidden"><template slot="title"><i :class="item.iconClass"></i><span>{{item.name}}</span></template><el-menu-item-group v-for="(child,index) in item.children" :key="index"><el-menu-item :index="child.path"><i :class="child.iconClass">{{child.name}}</i></el-menu-item></el-menu-item-group></el-submenu></template></el-menu></el-aside></div>
</template><script>
export default {data() {return {menus:[]};},created(){console.log(this.$router.options.routes);this.menus=[...this.$router.options.routes]}
};
</script>
<style lang="less" scoped>
.menu{.el-aside{height: 100%;.el-menu{height:100%;.fa{margin-right: 10px;}}.el-submenu .el-menu-item{min-width: 0;}}
}
</style>

5.2.2.开启路由功能

先给meun组件上的elementUI的导航栏开启路由功能,这样点击导航栏,路径才会对应转跳:

<el-menurouterdefault-active="2"class="el-menu-vertical-demo"background-color="#2578b5"text-color="#fff"active-text-color="#ffd04b">

然后在home上给出路由出口:

<template><div class="home"><Header/><el-container class="content"><Menu/><el-container><el-main><router-view></router-view></el-main><el-footer><Footer/></el-footer></el-container></el-container></div>
</template>

可以看到路由可以正常工作了:

6.面包屑导航

整个首页的架子已经搭好了,也完成了菜单的转跳,但是还差个细节就是面包屑导航栏:

去elementUI官网上找一个面包屑的导航组件:

在common下面新建一个面包屑组件,调整一下官网上扣下来的内容,使得其可以取到我们真实菜单的内容:

Home里面引入使用一下即可:

<template><div class="home"><Header/><el-container class="content"><Menu/><el-container><el-main><Breadcrumb/><router-view></router-view></el-main><el-footer><Footer/></el-footer></el-container></el-container></div>
</template><script>
import Footer from './common/Footer.vue'
import Header from './common/Header.vue'
import Menu from './common/Menu.vue'
import Breadcrumb from './common/Breadcrumb.vue'
export default {components:{Footer,Menu,Header,Breadcrumb},data(){return{}}
}
</script><style lang="less">
.home{width: 100%;height: 100%;.content{position: absolute;width: 100%;top: 60px;bottom: 0;}
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/196947.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

opencv(5): 滤波器

滤波的作用&#xff1a;一幅图像通过滤波器得到另一幅图像&#xff1b;其中滤波器又称为卷积核&#xff0c;滤波的过程称为卷积。 锐化&#xff1a;边缘变清晰 低通滤波&#xff08;Low-pass Filtering&#xff09;&#xff1a; 目标&#xff1a;去除图像中的高频成分&#…

Ubuntu22.04 部署Mqtt服务器

1、打开Download EMQX &#xff08;www.emqx.io&#xff09;下载mqtt服务器版本 2、Download the EMQX repository curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash 3.Install EMQX sudo apt-get install emqx 4.Run EMQX sudo systemctl start…

软件测试面试-如何定位线上出现bug

其实无论是线上还是在测试出现bug&#xff0c;我们核心的还是要定位出bug出现的原因。 定位出bug的步骤&#xff1a; 1&#xff0c;如果是必现的bug&#xff0c;尽可能的复现出问题&#xff0c;找出引发问题的操作步骤。很多时候&#xff0c;一个bug的产生&#xff0c;很多时…

【案例】可视化大屏

人狠话不多,直接上效果图 这里放的地图自己去实现吧,如果也想实现3D地球话,等笔者那天有心情写篇文章; 说明:script中methods部分代码是没用,可以直接删掉,根据个人情况去写, 内容:笔者也就对页面布局进行了设计,内容的填充就靠个人了 <template><div :sty…

微机原理_12

一、单项选择题(本大题共15小题,每小题3分&#xff0c;共45分。在每小题给出的四个备选项中&#xff0c;选出一个正确的答案。〕 十进制正数56的 8位二进制补码是()。 A. 00011001 B. 10100110 C. 10011001 D. 00100110 若栈顶的物理地址为20100H&#xff0c;当执行完指令PUSH…

【计算机网络学习之路】网络基础1

文章目录 前言一. 计算机网络发展局域网和广域网 二. 网络协议三. OSI七层模型四. TCP/IP四层&#xff08;五层&#xff09;模型五. 计算机体系结构与网络协议栈六. 协议形式及局域网通信数据包封装与分用 七. 跨网络通信八. MAC地址与网络通信的理解结束语 前言 本系列文章是…

【漏洞复现】泛微e-Weaver SQL注入

漏洞描述 泛微e-Weaver&#xff08;FANWEI e-Weaver&#xff09;是一款广泛应用于企业数字化转型领域的集成协同管理平台。作为中国知名的企业级软件解决方案提供商&#xff0c;泛微软件&#xff08;广州&#xff09;股份有限公司开发和推广了e-Weaver平台。 泛微e-Weaver旨在…

centos7中安装Nginx和使用Nginx详细操作

环境&#xff1a; 准备了三台centos7虚拟机:192.168.213.4、192.168.213.5、192.168.213.6。 一、安装 三台虚拟机都安装下面的步骤执行&#xff0c;安装Nginx&#xff0c;为后面的使用演示使用。 1、安装必备组件: sudo yum install yum-utils2、配置yum源 在下面的文件目录…

毕业设计1784 ASP.NET停车场管理系统

摘要 本文设计了一个停车场管理系统&#xff0c;该系统分为超级管理员和管理员两种用户。系统实现了车位管理、停车卡管理、停车管理、统计报表、系统管理等功能。管理员可以添加、查看、编辑或删除车位信息、停车卡信息、停车记录等&#xff0c;同时可以按日、月、年统计进场…

〖大前端 - 基础入门三大核心之JS篇㊲〗- DOM改变元素节点的css样式、HTML属性

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

【c++】——类和对象(中)——实现完整的日期类(优化)万字详细解疑答惑

作者:chlorine 专栏:c专栏 赋值运算符重载()()():实现完整的日期类(上) 我走的很慢&#xff0c;但我从不后退。 【学习目标】 日期(- - --)天数重载运算符 日期-日期 返回天数 对日期类函数进行优化(不符合常理的日期&#xff0c;负数&#xff0c;const成员)c中重载输入cin和输…

长虹智能电视使用123

1、开机 在接通电源的情况下&#xff0c;长虹智能电视开机有两种方式。 方式1&#xff1a; 按电视右下角开机按钮 方式2&#xff1a; 按电视遥控器开机按钮 长虹智能电视开机后会进入其操作系统&#xff08;安卓&#xff09;。 屏幕左右双箭头图表&#xff0c;手指点击会…

选硬币该用动态规划

选硬币&#xff1a; 现有面值分别为1角1分&#xff0c;5分&#xff0c;1分的硬币&#xff0c;请给出找1角5分钱的最佳方案。 #include <iostream> #include <vector>std::vector<int> findChange(int amount) {std::vector<int> coins {11, 5, 1}; /…

UniApp中的数据存储与获取指南

目录 介绍 数据存储方案 1. 本地存储 2. 数据库存储 3. 网络存储 实战演练 1. 本地存储实例 2. 数据库存储实例 3. 网络存储实例 注意事项与最佳实践 结语 介绍 在移动应用开发中&#xff0c;数据的存储和获取是至关重要的一部分。UniApp作为一款跨平台应用开发框架…

PyCharm 远程连接服务器并使用服务器的 Jupyter 环境

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

idea显示pom.xml文件漂黄警告 Dependency maven:xxx:xxx is vulnerable

场景&#xff1a; idea警告某些maven依赖包有漏洞或者依赖传递有易受攻击包&#xff0c;如下&#xff1a; 解决&#xff1a; 1、打开idea设置&#xff0c;找到 File | Settings | Editor | Inspections 2、取消上述两项勾选即可

计算机网络———ipv6简解

文章目录 1.前言&#xff1a;2. ipv6简单分析&#xff1a;2.1.地址长度对比2.2. ipv6包头分析2.3. ipv6地址的压缩表示&#xff1a;2.3. NDP&#xff1a;2.4. ipv6地址动态分配&#xff1a; 1.前言&#xff1a; 因特网地址分配组织)宣布将其最2011年2月3日&#xff0c;IANA (In…

Sentinel浅层介绍(上)

一、概述 Sentinel是阿里开源的一款面向分布式、多语言异构化服务架构的流量治理组件。 主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 二、核心概念 1、资源 资…

MATLAB Simulink和S7-1200PLC MOBUSTCP通信

MATLAB Simulink和SMART PLC OPC通信详细配置请查看下面文章链接: MATLAB和西门子SMART PLC OPC通信-CSDN博客文章浏览阅读749次,点赞26次,收藏2次。西门子S7-200SMART PLC OPC软件的下载和使用,请查看下面文章Smart 200PLC PC Access SMART OPC通信_基于pc access smart的…

97.qt qml-自定义Table之实现ctrl与shift多选

我们之前实现了:93.qt qml-自定义Table优化(新增:水平拖拽/缩放自适应/选择使能/自定义委托)-CSDN博客 实现选择使能的时候,我们只能一行行去点击选中,非常麻烦,所以本章我们实现ctrl多选与shift多选、 所以在Table控件新增两个属性: 1.实现介绍 ctrl多选实现原理:当我…