当前位置: 首页 > news >正文

iView Admin的side menu改为top menu

和iView Admin结缘于某次在“顾问群”里问,“有什么开源前端框架推荐吗?”。群里一位老开发答,“试试iView Admin”。于是我就试了试,发现很好用,对新手也很友好,试过撸一个管理后台的前端用了4天,感觉效率还可以。
最近需要定制“无侧滑菜单,改用顶部下拉菜单”的效果,所以开始分析下源码。
看/src/router/router.js里原始定义的路由,可以看到首页路由使用的component是Main。


image.png

然后我们打开component/main.vue来查看,如下图。可以看到main.vue相当于一个大框架底层页面,页面结构可以简单分为Sider(左侧展开的菜单)、Header(顶部)以及Content(主要内容区)。把Sider注释或者删除,就相当于实现了“无侧滑菜单”的效果。然后看下Header里的组件,分别有HeaderBar、user、language、error-store、fullscreen,看来这个headerbar就是我们可以添加“下拉菜单”的地方了。


image.png

原来的header-bar.vue如下。
<template><div class="header-bar"><sider-trigger :collapsed="collapsed" icon="md-menu" @on-change="handleCollpasedChange"></sider-trigger><custom-bread-crumb show-icon style="margin-left: 30px;" :list="breadCrumbList"></custom-bread-crumb><div class="custom-content-con"><slot></slot></div></div>
</template>

可以看到这个HeaderBar里有两个组件,一个是点击一下就触发左侧菜单弹出、并且自身Icon发生旋转的sider-trigger,另一个就是自定义的面包屑导航custom-bread-crumb。于是想到,把这里的sider-trigger替换成我们即将写好的下拉菜单组件,传入菜单数据以及对下拉菜单的点击事件进行捕捉后,调用原来的gotoPage的方法,应该就能满足需求了。
我们先去写下拉菜单组件collapse-menu.vue。根据iView Admin原来的route元组的构成方式,使用DropdownMenu组件来展示不同层级的菜单。showTitle是根据当前route元组中的name以及当前locale显示出对应的文字,最后完成的collase-menu的template部分如下:
collapse-menu.vue

<template><Dropdown ref="dropdown" @on-click="handleClick"><a href="javascript:void(0)"><Icon type="md-menu" size="26"></Icon></a><DropdownMenu slot="list"><template v-for="item in menuList"><DropdownItem v-if="!showChildren(item) && (!item.meta || (item.meta && !item.meta.hideInMenu))":name="getNameOrHref(item,true)">{{showTitle(item)}}</DropdownItem><Dropdown v-if="showChildren(item) && (!item.meta || (item.meta && !item.meta.hideInMenu))" :placement="placement"><DropdownItem>{{showTitle(item)}}<Icon type="ios-arrow-forward"></Icon></DropdownItem><DropdownMenu slot="list"><DropdownItem v-for ="subItem in item.children"v-if=" !subItem.meta || (subItem.meta && !subItem.meta.hideInMenu)" :name="getNameOrHref(subItem)">{{showTitle(subItem)}}</DropdownItem></DropdownMenu></Dropdown></template></DropdownMenu></Dropdown>
</template>

此外该组件里还需要增加一个用于判断该route元组是使用vue页面还是外部页面,如果是外部页面,则往上回传的应该是带有标记的外部url, 这样在main.vue里的turnToPage的方法,就可以直接使用组件事件回传的参数进行跳转。关键代码如下:

getNameOrHref (item,children0) {return item.href ? `isTurnByHref_${item.href}` : (children0 ? item.children[0].name : item.name)},

然后,就可以在Header-bar.vue里直接引用新做好的下拉菜单组件了。header-bar.vue中的template部分如下:

<template><div class="header-bar"><CollapsedMenu :menuList="menuList" @on-click="handleSelect"/><custom-bread-crumb show-icon  :list="breadCrumbList"></custom-bread-crumb><div class="custom-content-con"><slot></slot></div></div>
</template>

然后在main.vue里,将所需的菜单数据传给header-bar,再由header-bar依次传递。
main.vue

<Header class="header-con"><header-bar :collapsed="collapsed" @on-coll-change="handleCollapsedChange" :menu-list="menuList" @on-select="turnToPage"><user :user-avator="userAvator" :userName="userName"/><language v-if="$config.useI18n" @on-lang-change="setLocal" style="margin-right: 10px;" :lang="local"/><error-store v-if="$config.plugin['error-store'] && $config.plugin['error-store'].showInHeader" :has-read="hasReadErrorPage" :count="errorCount"></error-store><fullscreen v-model="isFullscreen" style="margin-right: 10px;"/></header-bar></Header>

最后总结下本次实现过程中父子组件间涉及到的通信:
1.父组件往子组件传数据,用的是props这个单向数据流的方式,将menuList传到最终的子组件。
2.子组件往父组件传值,用的是$emit,将子组件里click/change事件触发时的值,会传到父组件。

最后编辑于:2025-04-21 10:54:09


喜欢的朋友记得点赞、收藏、关注哦!!!

相关文章:

iView Admin的side menu改为top menu

和iView Admin结缘于某次在“顾问群”里问&#xff0c;“有什么开源前端框架推荐吗&#xff1f;”。群里一位老开发答&#xff0c;“试试iView Admin”。于是我就试了试&#xff0c;发现很好用&#xff0c;对新手也很友好&#xff0c;试过撸一个管理后台的前端用了4天&#xff…...

2025上海车展 | 移远通信推出自研NG-eCall QuecOpen方案,助力汽车安全新标准加速落地

4月29日&#xff0c;在2025上海国际汽车工业展览会期间&#xff0c;全球领先的物联网和车联网整体解决方案供应商移远通信宣布&#xff0c;正式发布自主研发的NG-eCall&#xff08;下一代紧急呼叫系统&#xff09;QuecOpen解决方案。 该方案凭借高度集成的软硬件协同设计&…...

使用gitea发布软件包

1、新建hello工程 &#xff08;1&#xff09;HelloApplication.java package cn.ac.trimps.sv;import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplicati…...

如何加速机器学习模型训练:深入探讨与实用技巧

在机器学习和深度学习的应用中&#xff0c;训练模型通常需要耗费大量时间。随着数据集的增大、模型复杂度的提升以及任务的多样化&#xff0c;训练速度变得越来越重要。无论是在学术研究中&#xff0c;还是在工业应用中&#xff0c;加速训练过程不仅能提高工作效率&#xff0c;…...

HBuider中Uniapp去除顶部导航栏-小程序、H5、APP适用

文件pages.json中改"globalStyle" "globalStyle": {"navigationBarTextStyle": "black","navigationBarBackgroundColor": "#F8F8F8","backgroundColor": "#F8F8F8","titleNView"…...

scGPT-spatial:持续预训练scGPT用于空间转录组

空间转录组学已成为一种关键技术&#xff0c;可在细胞的空间环境中对其基因表达进行分析。公开可用的空间数据的迅速增长&#xff0c;为我们进一步理解驱动细胞命运决定和疾病进展的微环境提供了契机。然而&#xff0c;现有的基础模型大多是在scRNA-seq数据上进行预训练的&…...

ERP管理系统对企业财务管理有什么重要意义

在知识经济浪潮的推动下&#xff0c;企业的核心资产正经历着从传统厂房设备向知识产权的历史性跨越。专利技术、品牌价值、人才储备等无形资产逐渐成为驱动企业发展的核心引擎&#xff0c;但这类资产的非实体性与价值波动性&#xff0c;却让传统财务管理工具陷入"看得见摸…...

【数据库原理及安全实验】实验五 数据库备份与恢复

指导书原文 数据库的备份与恢复SSMS 【实验目的】 1) 熟悉并掌握利用界面操作进行数据库备份和恢复的原理和操作。 【实验原理】 1) 数据库的恢复包括大容量日志恢复模式和简单恢复模式。其中大容量日志恢复模式&#xff0c;简单地说就是要对大容量操作进行最小日志记录&a…...

【人脸去遮挡前沿】三阶段级联引导学习如何突破真实场景遮挡难题?

一、现实痛点:当人脸被遮挡,AI “认脸” 有多难? 你是否遇到过这样的场景? 中考体育测试:2025 年天津泰达街中考考场要求考生 “脸部无遮挡” 才能通过人脸识别入场,戴口罩、帽子的学生需现场调整发型。智能门锁:奇景光电在 CES 2025 推出的 WiseEye 掌静脉模块,通过掌…...

Kettle下载安装教程

## 什么是Kettle Kettle&#xff08;现在也称为Pentaho Data Integration&#xff0c;简称PDI&#xff09;是一款开源的ETL&#xff08;Extract-Transform-Load&#xff09;工具&#xff0c;用于数据抽取、转换和加载。它允许用户通过图形化界面设计和执行数据集成流程&#xf…...

树的序列化 - 学习笔记

树的序列化可以有很多种类&#xff1a;可以变成 dfs 序&#xff0c;可以变成欧拉序&#xff0c;还有什么括号序的科技。 但是除了第一个以外其他的都没什么用&#xff08;要么也可以被已有的算法给替代掉&#xff09;。所以表面上是讲树的序列化&#xff0c;实际上还是讲的 df…...

数电发票整理:免费实用工具如何高效解析 XML 发票数据

如今数字电子发票越来越普及&#xff0c;但是数电发票的整理还是颇有讲究~ 今天给大家介绍一个 XML 发票阅读器。使用它完全不收取任何费用&#xff0c;且无广告干扰&#xff0c;对财务人员而言十分实用。 01 软件介绍 这款软件就是XML格式&#xff08;数电票&#xff09;阅读…...

ubuntu22.04 qemu arm64 环境搭建

目录 创建 安装 Qemu 启动 # 进入qemu虚拟机后执行 qemu编译器安装 创建 qemu-img create ubuntu22.04_arm64.img 40G 安装 qemu-system-aarch64 -m 4096 -cpu cortex-a57 -smp 4 -M virt -bios QEMU_EFI.fd -nographic -drive ifnone,fileubuntu-22.04.5-live-server-a…...

数据转储(go)

​ 随着时间推移&#xff0c;数据库中的数据量不断累积&#xff0c;可能导致查询性能下降、存储压力增加等问题。数据转储作为一种有效的数据管理策略&#xff0c;能够将历史数据从生产数据库中转移到其他存储介质&#xff0c;从而减轻数据库负担&#xff0c;提高系统性能&…...

LeetCode167_两数之和 Ⅱ - 输入有序数组

LeetCode167_两数之和 Ⅱ - 输入有序数组 标签&#xff1a;#数组 #双指针 #二分查找Ⅰ. 题目Ⅱ. 示例 0. 个人方法官方题解一&#xff1a;二分查找官方题解二&#xff1a;双指针 标签&#xff1a;#数组 #双指针 #二分查找 Ⅰ. 题目 给你一个下标从 1 开始的整数数组 numbers …...

【AI平台】n8n入门5:创建MCP服务,及vscode调用MCP测试

前言 用n8n搭建一个MCP服务&#xff0c;然后用开发环境的MCP测试工具&#xff0c;测试调用一下。例子简单&#xff0c;只为了解原理。在开发环境&#xff0c;安装测试mcp服务的工具&#xff0c;vscode和Trae操作类似&#xff0c;而且在一个机器上的话&#xff0c;安装的插件公…...

第六部分:实战项目与拓展

欢迎来到 OpenCV 教程的第六部分&#xff01;你已经走过了从像素操作到特征提取、再到基础目标检测的旅程。现在&#xff0c;我们将迎接更激动人心的挑战&#xff1a;将这些技术结合起来&#xff0c;构建更贴近实际应用的系统。 本部分将带领你从更高层面思考如何设计一个计算…...

SQL Server连接异常 证书链是由不受信任的颁发机构颁发的

使用SQL Server连接数据库时报错如下&#xff1a; 标题: 连接到服务器 ------------------------------ 无法连接到 DESKTOP-N2KOQ8J\SQLEXPRESS。 ------------------------------ 其他信息: A connection was successfully established with the server, but then an erro…...

WebGL图形编程实战【5】:层次构建 × Shader初始化深度剖析

层次结构模型 三维模型和现实中的人类或机器人不一样&#xff0c;它的部件并没有真正连接在一起。如果直接转动上臂&#xff0c;那么肘部以下的部分&#xff0c;包括前臂、手掌和手指&#xff0c;只会留在原地&#xff0c;这样手臂就断开了。 所以&#xff0c;当上臂绕肩关节转…...

126. 单词接龙 II

题目 按字典 wordList 完成从单词 beginWord 到单词 endWord 转化&#xff0c;一个表示此过程的 转换序列 是形式上像 beginWord -> s1 -> s2 -> ... -> sk 这样的单词序列&#xff0c;并满足&#xff1a; 每对相邻的单词之间仅有单个字母不同。转换过程中的每个…...

【LeetCode Hot100】二叉树篇

前言 本文用于整理LeetCode Hot100中题目解答&#xff0c;因题目比较简单且更多是为了面试快速写出正确思路&#xff0c;只做简单题意解读和一句话题解方便记忆。但代码会全部给出&#xff0c;方便大家整理代码思路。 94. 二叉树的中序遍历 一句话题意 返回二叉树中序遍历的数…...

MySQL基础关键_002_DQL

目 录 一、初始化 二、简单查询 1.部分语法规则 2.查询一个字段 &#xff08;1&#xff09;查询员工编号 &#xff08;2&#xff09;查询员工姓名 3.查询多个字段 &#xff08;1&#xff09;查询员工编号、姓名 &#xff08;2&#xff09;查询部门编号、名称、位置 …...

游戏引擎学习第249天:清理调试宏

欢迎大家&#xff0c;让我们直接进入调试代码的改进工作 接下来&#xff0c;我们来看一下上次停留的位置。如果我没记错的话&#xff0c;上一场直播的结尾我有提到一些我想做的事情&#xff0c;并且在代码中留下了一个待办事项。所以也许我们今天首先做的就是解决这个问题。但…...

TwinCAT数据类型,%MX,%MD这些特殊符号

在 TwinCAT&#xff08;Beckhoff PLC 编程环境&#xff09;中&#xff0c;%MX、%MD 等符号是 IEC 61131-3 标准的地址表示法&#xff0c;用于直接访问 PLC 的物理 I/O 或内存区域。这些符号通常用于 变量声明 或 直接寻址&#xff0c;特别是在 TwinCAT 2 和 传统 PLC 编程 中较…...

力扣——20有效的括号

目录 1.题目描述&#xff1a; 2.算法思路&#xff1a; 3.代码展示: 1.题目描述&#xff1a; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须…...

正点原子STM32H743单片机实现ADC多通道检测

目标 使用STM32CubeMX工具&#xff0c;配置ADC相关参数&#xff0c;实现在STM32H743单片机上获取ADC多通道电压值。共14个ADC引脚&#xff0c;ADC2有5个&#xff0c;ADC3有9个&#xff0c;全部设置单通道 ADC引脚 PF3PF4PF5PF10PC0PC2PC3PH2PH3PA3PB0PB1PA4PA5PA6 STM32cube…...

前端封装WebSocket工具n

Web API 提供的 WebSocket 类&#xff0c;封装一个 Socket 类 // socket.js import modal from /plugins/modal const baseURL import.meta.env.VITE_APP_BASE_WS; const EventTypes [open, close, message, error, reconnect]; const DEFAULT_CHECK_TIME 55 * 1000; // 心…...

Docker进入MySQL之后如何用sql文件初始化数据

关闭Docker-compose.yml里面所有容器 docker compose -f docker_compose.yml down后台形式开启Docker-compose.yml所有容器 docker compose -f docker_compose.yml up -d罗列出所有启动过的&#xff08;包括退出过的&#xff09;容器 docker ps -a进入指定容器ID内部 docke…...

Docker搜索镜像报错

科学上网最方便。。。。 尝试一&#xff1a; 报错处理 Error response from daemon: Get https://index.docker.io/v1/search?qmysql&n25: dial tcp 31.13.84.2:443: i/o timeout 国内从 DockerHub 拉取镜像有时会遇到困难&#xff0c;此时可以配置镜像加速器。Docke…...

【Unity笔记】基于距离驱动的参数映射器 InverseDistanceMapper 设计与实现

需求&#xff1a; 当用户距离目标位置越近&#xff0c;参数值越大。 可用于控制场景亮度、动画进度、交互强度等多种效果。 一、需求背景&#xff1a;如何让“距离”成为设计的一部分&#xff1f; 在虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;乃…...

【Spring AI】Java结合ollama实现大模型调用

在较新的Java版本中&#xff0c;编译器已经支持了接入各种AI模型工具进行开发&#xff0c;这篇文章我会介绍如何利用Spring AI进行大模型的调用的基础方法。 环境准备 由于这篇文章是结合ollama进行演示&#xff0c;所以在开始前需要先安装ollama服务&#xff0c;这个的具体步…...

docker制作python大模型镜像(miniconda环境),工程改造记录

**环境说明&#xff1a;**从系统镜像开始打造python大模型镜像&#xff0c;之前是人工手动装的方式&#xff0c;并且模型和依赖在公网中&#xff0c;对于离线交付环境不太友好&#xff0c;所以打造的离线化交付版本 Dockerfile: FROM centos:7.9 ENV PYTHONIOENCODINGutf-8 E…...

在油气地震资料积分法偏移成像中,起伏地表处理

在油气地震资料积分法偏移成像中&#xff0c;起伏地表情况会带来波场传播路径畸变、静校正问题以及成像精度下降等挑战。以下是处理起伏地表的常用方法和技术要点&#xff1a; 1. 静校正预处理 高程静校正&#xff1a;将地表各接收点校正到统一基准面&#xff08;浮动基准面或…...

经典算法 独立任务最优调度问题

独立任务最优调度问题 题目描述 用2 台处理机A 和B 处理n 个作业。设第i 个作业交给机器A 处理时需要时间ai &#xff0c;若由机器B 来处理&#xff0c;则需要时间bi 。由于各作业的特点和机器的性能关系&#xff0c;很可能对于某些i&#xff0c;有ai >bi&#xff0c;而对…...

在TensorFlow中,`Dense`和`Activation`是深度学习模型构建里常用的层

在TensorFlow中&#xff0c;Dense和Activation是深度学习模型构建里常用的层&#xff0c;下面就详细解释它们的使用语法和含义。 1. Dense层 含义 Dense层也就是全连接层&#xff0c;这是神经网络里最基础的层。在全连接层中&#xff0c;每一个输入神经元都和输出神经元相连…...

基于 Rancher 部署 Kubernetes 集群的工程实践指南

一、现状分析 在当今的云计算和容器化领域&#xff0c;Kubernetes&#xff08;K8S&#xff09;已经成为了容器编排和管理的事实标准。根据 Gartner 的数据&#xff0c;超过 70% 的企业在生产环境中使用 K8S 来管理容器化应用。然而&#xff0c;K8S 的安装和管理对于许多企业来…...

Seaborn

1. Seaborn概述&#xff1a;Seaborn是基于Matplotlib的Python数据可视化库&#xff0c;专注绘制统计图形。它简化可视化流程&#xff0c;提供高级接口与美观默认主题&#xff0c;能以少量代码实现复杂图形绘制。 2. 安装与导入&#xff1a;安装Seaborn可使用 pip install seabo…...

0基础FWT详解2(巩固)

FWT巩固1 FWT巩固1卡常技巧巩固习题luogu6097CF662Cluogu4221FWT巩固1 在 上篇文章 中,我们学习了 F W T FWT FWT,本文将带读者一起做几道题,巩固对 F W T FWT FWT 的使用 卡常技巧 一个常数大的 F W T FWT FWT 是非常不利于做题的,所以我们需要卡常。 作者简单总结…...

阿里云 ECS 服务器进阶指南:存储扩展、成本优化与架构设计

一、弹性存储架构&#xff1a;块存储深度解析与挂载实践 &#xff08;一&#xff09;块存储类型与技术特性 阿里云块存储作为 ECS 核心存储方案&#xff0c;提供三种主流类型&#xff1a; ESSD 云盘 性能等级&#xff1a;PL0/PL1/PL2/PL3&#xff0c;最高支持 100 万 IOPS …...

运维打铁: 存储方案全解析

文章目录 一、引言二、思维导图三、常见存储方案介绍3.1 直接附加存储&#xff08;DAS&#xff0c;Direct Attached Storage&#xff09;1. 原理2. 优缺点3. 适用场景 3.2 网络附加存储&#xff08;NAS&#xff0c;Network Attached Storage&#xff09;1. 原理2. 优缺点3. 适用…...

Semtech公司简介以及主流产品

Semtech 公司是一家美国的半导体公司&#xff0c;总部位于加利福尼亚州卡马里洛。以下是其简介和主流产品介绍&#xff1a; 公司简介 成立时间与地点&#xff1a;1960 年成立于加利福尼亚州纽伯里帕克。发展历程&#xff1a;最初为军事和航空航天公司提供零部件&#xff0c;1…...

flutter 专题 五十六 Google 2020开发者大会Flutter专题

由于疫情的原因&#xff0c;今年的Google 开发者大会 (Google Developer Summit) 在线上举行&#xff0c;本次大会以“代码不止”为主题&#xff0c;全面介绍了产品更新以及一系列面向本地开发者的技术支持内容。我比较关注的是移动开发&#xff0c;在本次大会上&#xff0c;关…...

93. 后台线程与主线程更新UI Maui例子 C#例子

在.NET MAUI开发中&#xff0c;多线程是常见的需求&#xff0c;但UI更新必须在主线程上执行。今天&#xff0c;我们来探讨一个简单而优雅的解决方案&#xff1a;MainThread.InvokeOnMainThreadAsync。 一、背景 在跨平台应用开发中&#xff0c;后台线程常用于执行耗时操作&am…...

5.运输层

5. 运输层 1. 概述 第2~4章依次介绍了计算机网络体系结构中的物理层、数据链路层和网络层&#xff0c;它们共同解决了将主机通过异构网络互联起来所面临的问题&#xff0c;实现了主机到主机的通信然而在计算机网络中实际进行通信的真正实体&#xff0c;是位于通信两端主机中的…...

ActiveMQ 可靠性保障:消息确认与重发机制(二)

ActiveMQ 重发机制 重发机制的原理与触发条件 ActiveMQ 的重发机制是确保消息可靠传输的重要手段。当消息发送到 ActiveMQ 服务器后&#xff0c;如果消费者由于某些原因未能成功处理消息&#xff0c;ActiveMQ 会依据配置的重发策略&#xff0c;将消息重新放入队列或主题中&am…...

Vue+tdesign t-input-number 设置长度和显示X号

一、需求 Vuetdesign t-input-number 想要设置input的maxlen和显示X号 二、实现 t-input&#xff0c;可以直接使用maxlength和clearable属性 <t-input v-model"value" clearable maxlength10 placeholder"请输入" clear"onClear" blur&q…...

机器学习|通过线性回归了解算法流程

1.线性回归引入 2.决策函数 3. 损失函数 4.目标函数 5.目标函数优化问题 6.过拟合 7.正则化...

两向量平行公式、向量与平面平行公式、两平面平行公式;两向量垂直公式、向量与平面垂直公式、两平面垂直公式

目录 一、两向量平行公式​ 二、向量与平面平行公式​ 三、两平面平行公式​ 四、两向量垂直公式​ 五、向量与平面垂直公式​ 六、两平面垂直公式​ 观察与总结 一、两向量平行公式 二、向量与平面平行公式 三、两平面平行公式 四、两向量垂直公式 五、向量与平…...

vscode 个性化

vscode 个性化 设置 吸顶效果 使用前使用后 设置方法 VS Code 的粘性滚动预览 - 类似于 Excel 的冻结首行 插件 代码片段分享 - CodeSnap 使用方式 CtrlShiftP输入CodeSnap 唤起插件选择代码 行内报错提示 - Error Lens 使用前使用后 VSCode Error Lens插件介绍&…...

OpenHarmony-简单的HDF驱动

学习于&#xff1a;https://docs.openharmony.cn/pages/v5.0/zh-cn/device-dev/driver/driver-hdf-manage.md 首先&#xff0c;OpenHarmony系统里的HDF&#xff08;Hardware Driver Foundation&#xff09;驱动框架&#xff0c;已经规范设备驱动的模型、设备节点的配置与统一的…...