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

使用AI一步一步实现若依前端(10)

功能10:添加首页菜单项

功能9:退出登录功能
功能8:页面权限控制
功能7:路由全局前置守卫
功能6:动态添加路由记录
功能5:侧边栏菜单动态显示
功能4:首页使用Layout布局
功能3:点击登录按钮实现页面跳转
功能2:静态登录界面
功能1:创建前端项目

前言

一.操作步骤

1.修改router/index.js

给不需要显示的对象设置hidden属性,例如登录页。
给首页增加meta属性。
export这个初始化的路由数组,后面需要跟服务端返回的动态数组合并。

export const constantRoutes = [
  {
    path: '/login',
    component: () => import('@/views/login.vue'),
    hidden: true
  },
  {
    path: '/',
    component: Layout,
    redirect: '/index',
    meta: { title: '首页', icon: 'House', affix: true },
    children: [
      {
        path: 'index',
        component: () => import('@/views/index.vue'),
        meta: { title: '首页', icon: 'House', affix: true }
      }
    ]
  }
]

2.修改stores/permission.js

拼接初始路由数组和后端返回的路由数组。

import { constantRoutes } from '@/router'

arrayForMenu.value = constantRoutes.concat(menuData)

3.修改MenuItem.vue

针对拼装的菜单数组,对首页对象做一些特殊处理。

<template>
    <div v-if="!item.hidden">
        <template v-if="hasChildren">
            <el-sub-menu :index="item.path">
                <template #title>
                    <el-icon v-if="item.meta?.icon">
                        <component :is="item.meta.icon" />
                    </el-icon>
                    <span>{{ item.meta?.title }}</span>
                </template>
                <template v-for="child in item.children" :key="child.path">
                    <MenuItem :item="child" :level="level + 1" :base-path="resolvePath(item.path)" />
                </template>
            </el-sub-menu>
        </template>

        <template v-else>
            <el-menu-item :index="resolvePath(item.path)">
                <el-icon v-if="item.meta?.icon">
                    <component :is="item.meta.icon" />
                </el-icon>
                <span>{{ item.meta?.title }}</span>
            </el-menu-item>
        </template>
    </div>
</template>

<script setup>
import { defineProps, computed } from 'vue';

const props = defineProps({
    item: {
        type: Object,
        required: true
    },
    level: {
        type: Number,
        default: 0
    },
    basePath: {
        type: String,
        default: ''
    }
});

const hasChildren = computed(() => {
    if (props.level >= 2) {
        if (props.item.children) {
            console.error('菜单层级超过限制,最多允许两层子菜单');
            return false;
        }
        return false;
    }
    if (props.item.path === '/') {
        return false
    }
    return props.item.children && props.item.children.length > 0;
});

const resolvePath = (routePath) => {
    if (props.basePath.length === 0) {
        return routePath
    }
    if (routePath === '/') {
        return '/index'
    }
    return getNormalPath(props.basePath + '/' + routePath)
}

/**
 * 路径标准化处理器
 * 功能: 规范化URL/文件路径格式,确保路径符合统一格式标准
 * 核心处理逻辑:
 * 1. 处理空值及无效路径
 * 2. 转换双斜杠为单斜杠
 * 3. 去除路径末尾的斜杠
 * 
 * @param {string} p - 原始路径字符串
 * @returns {string} 标准化后的路径
 */
const getNormalPath = (p) => {
    // 空值安全处理:当传入空值/undefined字符串时直接返回原值
    if (p.length === 0 || !p || p == 'undefined') {
        return p
    };

    // 双斜杠转换:替换路径中的双斜杠为单斜杠
    let res = p.replace('/\/+/g', '/')

    // 末尾斜杠清理:当标准化后路径以斜杠结尾时移除末尾斜杠
    if (res[res.length - 1] === '/') {
        return res.slice(0, res.length - 1)
    }
    return res;
}
</script>

二.功能验证

运行项目,浏览器访问http://localhost:5173/index
在这里插入图片描述

相关文章:

  • Java基础语法精讲:类型转换、常用运算符与用户输入处理引言
  • 苍穹外卖实战附源码-DAY1
  • 掌握C++内联与异常:构建高效且健壮的应用程序
  • 蓝桥杯备考:数据结构堆之序列合并
  • 基于javaweb的SpringBoot农资商城购物商城系统设计与实现(源码+文档+部署讲解)
  • Linux第19节 --- 用户缓冲区和文件系统
  • Git 的基本概念和使用方式(附有思维导图)
  • 数1的个数(信息学奥赛一本通-1095)
  • 在芯片设计的后端流程中,通过metal修timing是什么意思,怎么实施。举个timing违例说明一下
  • java设计模式之适配器模式
  • 2011-2020年 全国省市县-数字普惠金融指数数字经济指数绿色金融指数县域数字乡村指数
  • Ollama本地部署deepseek-r1蒸馏版
  • eNSP中路由器的CON/AUX接口、GE Combo接口、Mini USB接口、USB接口、WAN侧uplink接口、FE接口、GE接口介绍
  • jmeter-AES加密
  • 【Python】PyQt5在PyCharm的配置与应用
  • E1-110.完美走位(滑动窗口)
  • C#带有设备仿真功能串口调试助手
  • 【AIGC】计算机视觉-YOLO系列家族
  • 今天你学C++了吗?——C++中的继承
  • 聚水潭数据集成到MySQL的高效方法
  • 网站建设第一品牌 网站设计/东莞做网站推广的公司
  • 网站建设验收/怎么学seo基础
  • asp网站建设/推广网站的文案
  • 旅游商业网站策划书/360竞价推广客服电话
  • 怎样用xampp做网站/智推教育seo课程
  • 云服务器可以建网站吗/大数据培训