vue3-实战-04-管理后台表单校验-layout-菜单组件封装

2023-11-15

目录

1-自定义校验规则

2-layout组件静态页面搭建

3-logo组件封装

4-左侧菜单静态组件搭建

4.1-动态获取菜单数据

4.2-封装菜单动态展示组件

4.3-配置菜单名称-隐藏-图标属性

4.4-菜单刷新定位当前菜单

5-内容展示区组件封装

1-自定义校验规则

       上一篇我们在登录表单进行了基础的表单校验,但是在实际开发项目过程中,我们需要自定义校验规则,比如手机号,身份证号,邮箱等校验...需要使用相关或者复杂的正则表达式来校验。比如我们自定义校验用户名密码(参考element-plus官网form表单自定义校验):

2-layout组件静态页面搭建

       我们分析一下,一般的后台管理系统分为三部分,左侧-顶部-内容区三个;我们需要对layout进行三块划分。

组件文件:src\layout\index.vue;将路由登录成功后展示的页面替换为该组件

 为了方便开发者根据自己的实际情况,自行决定页面样式的宽-高-颜色等相关参数,我们将一些参数抽取为全局变量,变更一处就好。

 

<template>

  <div class="layout_container">
    <!--左侧菜单 -->
    <div class="layout_slider">123</div>

    <!--顶部导航 -->
    <div class="layout_tabbar">456</div>

     <!--内容展示区 -->
    <div class="layout_main">
        789
    </div>

    
  </div>
</template>

<script setup lang="ts"></script>

<style scoped lang="scss">
.layout_container{
    width: 100%;
    height: 100vh;
    .layout_slider{
        width: $base-menu-width;
        height: 100vh;
        background: $base-menu-background;
    }
    .layout_tabbar{
       position: fixed;
       width: calc(100% - $base-menu-width); 
       height: $base-tabbar-height;
       background: cyan;
       top: 0px;
       left: $base-menu-width;
    }
    .layout_main{
        position: absolute;
        width: calc(100% - $base-menu-width);
        height: calc(100vh - $base-tabbar-height);
        left: $base-menu-width;
        top: $base-tabbar-height;
        padding: 20px;
        background: yellowgreen;
        overflow: auto;//防止内容过多撑起整个页面,导致页面不好看

    }

}
</style>

3-logo组件封装

       我们将项目菜单上的logo组件进行封装,封装为一个组件src\layout\logo\index.vue在layout组件中引入,我们对logo的标题-图片-展示与否 都可以做成配置文件方便开发者自行决定是否展示。

 src\setting.ts内容如下:

//用于项目logo|标题配置
export default {
  title: '羊叔运营平台', //项目的标题
  logo: '/logo.png', //项目logo设置
  logoHidden: true,//logo组件是否隐藏设置
}

4-左侧菜单静态组件搭建

      我们需要对左侧菜单进行静态页面开发和搭建,实际项目中,菜单的获取是通过接口获取是动态的,我们需要动态展示菜单。但是有一些路由组件,不是后台返回的,比如常量路由,任意路由和404路由等;所以我们有些路由组件是不需要展示在菜单栏中,我们可以在路由组件中meta中添加字段来控制隐藏和显示,我们通过给meta中添加标题字段来动态展示菜单的标题,我们还需要给菜单名字前面显示图标等,我们将element-plus图标注册为全局组件,然后在路由配置中meta中增加一个图标属性,动态展示菜单。

4.1-动态获取菜单数据

      目前因为我们没有调用后台接口,我们先把所有的路由都配置在常量路由里面,所有用户都展示一样的页面菜单。但是我们如何获取所有的路由呢?采用仓库形式获取,在用户小仓库的state对象UserState中定义一个属性menuRoutes,属性的类型是RouteRecordRaw,通过使用这个类型就可以获取到所有的路由配置。

4.2-封装菜单动态展示组件

       通过4.1我们可以获取到所有的路由组件信息,这个时候我们将这些信息封装为一个菜单组件,这样只需要传递获取的菜单路由数据,就可以展示。 在src\layout\index.vue文件中,我们使用

 菜单组件src\layout\menu\index.vue的内容如下:

<template>
    <template v-for="(item) in menuList" :key="item.path">
        <!--没有子路由-->
        <template v-if="!item.children">
            <el-menu-item :index="item.path" v-if="!item.meta.hidden" @click="goRoute">
                <el-icon>
                    <!--component vue框架提供的全局组件,可以直接使用-->
                    <component :is="item.meta.icon"></component>
                </el-icon>
                <template #title>
                    <span>{{ item.meta.title }}</span>
                </template>
            </el-menu-item>
        </template>
        <!-- 有子路由但是只有一个子路由 -->
        <template v-if="item.children && item.children.length == 1">
            <el-menu-item :index="item.children[0].path" v-if="!item.children[0].meta.hidden" @click="goRoute">
                <el-icon>
                    <component :is="item.children[0].meta.icon"></component>
                </el-icon>
                <template #title>
                    <span>{{ item.children[0].meta.title }}</span>
                </template>
            </el-menu-item>
        </template>
        <!-- 有子路由且个数大于一个1 -->
        <el-sub-menu :index="item.path" v-if="item.children && item.children.length > 1">
            <template #title>
                <el-icon>
                    <component :is="item.meta.icon"></component>
                </el-icon>
                <span>{{ item.meta.title }}</span>
            </template>
            <Menu :menuList="item.children"></Menu>
        </el-sub-menu>
    </template>
</template>

<script setup lang="ts">
import { useRouter } from 'vue-router';
//获取父组件传递过来的全部路由数组
defineProps(['menuList']);

//获取路由器对象
let $router = useRouter();
//点击菜单的回调
const goRoute = (vc: any) => {
    //路由跳转
    $router.push(vc.index);
}
</script>
<script lang="ts">
export default {
    name: 'Menu'
}
</script>

<style scoped></style>

核心逻辑循环遍历路由数据,按照不同的条件展示在页面上。

ps:
1-父子组件通信,采用defineProps来接受数据;
2-需要递归处理菜单,使用添加了一段js代码

<script lang="ts">
export default {
    name: 'Menu'
}
</script>

4.3-配置菜单名称-隐藏-图标属性

       将图标注册为全局组件,这样我们在项目中就可以直接使用图标的名称进行获取图标。配置方式参考官网:Icon 图标 | Element Plus

我们在路由配置文件中,配置相关的菜单名称,是否隐藏,图标等属性。

4.4-菜单刷新定位当前菜单

当我们点击某个二级菜单时候,点击浏览器刷新,所有菜单都折叠了,不能定位到之前选中的菜单,我们优化一下。需要使用到element-plus菜单组件的default-active属性。

 

5-内容展示区组件封装

我们将layout的内容展示区,也封装为一个组件,这样我们方便复用,

文件src\layout\main\index.vue的内容如下:

<template>
  <!-- 路由组件出口的位置 -->
  <router-view v-slot="{ Component }">
    <transition name="fade">
        <!-- 渲染一级路由的子路由 -->
      <component :is="Component" />
    </transition>
  </router-view>
</template>

<script setup lang="ts">
</script>
<script lang="ts">
export default {
  name: 'Main',
}
</script>

<style scoped>
fade-enter-from {
    opacity: 0;
    transform: scale(0);
}

.fade-enter-active {
    transition: all .3s;
}

.fade-enter-to {
    opacity: 1;
    transform: scale(1);
}
</style>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue3-实战-04-管理后台表单校验-layout-菜单组件封装 的相关文章

随机推荐

  • linux spi测试程序,spidev测试方法 /how to test spidev

    在设备树中配置spidev 首先需要在设备树配置好spi设备 可参考如下配置 ecspi3 pinctrl names default pinctrl 0 cs gpios dmas dma names rx tx status okay
  • Excel分段线性插值函数实现

    问题 已知 X和Y有下表的对应关系 当一个新的4
  • 高级FPGA设计技巧!多时钟域和异步信号处理解决方案

    有一个有趣的现象 众多数字设计特别是与FPGA设计相关的教科书都特别强调整个设计最好采用唯一的时钟域 换句话说 只有一个独立的网络可以驱动一个设计中所有触发器的时钟端口 虽然这样可以简化时序分析以及减少很多与多时钟域有关的问题 但是由于FP
  • python 连接MySQL数据库

    方式一 pymysql 下载mysql驱动模块 pip install pymysql python 链接mysql示例 导入mysql连接驱动模块 import pymysql host ip地址 port 端口号 user 数据库用户名
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • 链表算法的一些领会

    有些题目是一节一节的处理链表 比如reverseBetween ListNode head int m int swapPairs ListNode head reverseInKGroup ListNode head int k 主要考虑
  • docker操作

    一 docker常用操作 1 docker基本命令 批注 第9条 若不写版本号 默认使用lastest 最新版本 建议拉取镜像带上版本号 第10条 其中q是当下id队列的意思 比如查看所有的容器的id docker ps a q docke
  • 华为OD机试真题 Java 实现【支持优先级的队列】【2023 B卷 100分】

    一 题目描述 实现一个支持优先级的队列 高优先级先出队列 同优先级时先进先出 如果两个输入数据和优先级都相同 则后一个数据不入队列被丢弃 队列存储的数据内容是一个整数 二 输入描述 一组待存入队列的数据 包含内容和优先级 三 输出描述 队列
  • 如何设置电脑的固定IP地址

    大家在上网时电脑的IP地址往往都是自动选择的 但在局域网内有时会方便共享文件和监控流量等操作时需要固定的IP地址 下面将简单介绍如何手设置电脑的固定IP地址 步骤 单击电脑网络连接图标 打开网络和共享中心 点击本地连接 点击详细信息 即可看
  • vue列表渲染,鼠标点击改变样式

    话不多说 看下面的代码吧 HTML div ul class nav li item li ul p list ind p div 注 别忘记先引入vue js
  • 淘宝滑块x82y-226流程分析(不涉及逆向)

    分析目标 微信公众号 y小白的笔记 https mp weixin qq com s Py7I6RG7UT9EtdpXlV98aA 只分析验证码加载流程 不说具体细节 版本 226 目标参数slidedata n 成功返回 code 0 r
  • webstorm快速配置react

    以下都是废话 建议看菜鸟教程 也推荐这一个链接 它是React几种基本配置方案 你可以根据需求选择合适的配置 默认你装了node js和npm还有ws2018 2 4 首先在设置 setting 里搜索lang 语言与框架 找到并JavaS
  • 怎样用Java求水仙花数和水仙花数的数量

    首先我们了解一下水仙花数的定义 一个各个位上的数字三次方之和等于他本身的三位数 因此 为了求水仙花数 我们的程序会有以下几个需求 1 首先表示出所有的三位数 用循环表示 这里用for循环示例 2 然后表示出其个位 十位 百位 3 当这个三位
  • Elasticsearch知识点

    目录 1 什么是Elasticsearch 2 Elasticsearch的特点 3 Elasticsearch基础概念 4 Elasticsearch基本数据类型 看这里 5 Elasticsearch基本检索类型 5 1 检索和过滤 5
  • python编译javascript_Js2Py - 把js代码翻译成python代码。也让你可以在python环境里运行js代码。...

    Pure Python JavaScript Translator Interpreter Everything is done in 100 pure Python so it s extremely easy to install an
  • top 命令解释和案例

    文章目录 Top结果 Task分析 CPU分析 内存分析 Top结果 在Linux系统中 top命令用于实时监控系统的性能和进程活动 当你在终端运行top命令时 会显示一个实时的进程列表和系统性能指标 top结果的详细描述如下 第一行 显示
  • Elasticsearch的配置及常见错误

    1 下载Elasticsearch到d盘 在elasticsearch yml中配置两项内容 其中cluster name对应springboot项目中application properties里elasticsearch配置的 elas
  • Java 日期 不同月按周分组

    日期按月 按周次分组 今天接到需求 要求按月份分开周次 12月31号和新一年的1月1号拆开两个组 2020 12 第五周 2020 12 28 2020 12 31 2021 01 第一周 2021 01 01 2021 01 03 咋一看
  • 设计模式——反射

    本文说明 在学习 Java EE互联网轻量级框架整合开发 此书时 里面提到了几种设计模式 我在学习这几种设计模式时写了笔记 放上来让大家共同学习 如果有错误 望指出 本章由两部分组成 1 基本概念 关键代码讲解 2 完整例子 基本概念 关键
  • vue3-实战-04-管理后台表单校验-layout-菜单组件封装

    目录 1 自定义校验规则 2 layout组件静态页面搭建 3 logo组件封装 4 左侧菜单静态组件搭建 4 1 动态获取菜单数据 4 2 封装菜单动态展示组件 4 3 配置菜单名称 隐藏 图标属性 4 4 菜单刷新定位当前菜单 5 内容