Vue3.0项目实战(三)——大事件管理系统首页 layout 架子与文章分类的实现

news2024/9/21 2:08:31

目录

1. 首页 layout 架子 [element-plus 菜单]

1.1 基本架子拆解

2. 登录访问拦截

2.1 需求

2.2 vue3 和 vue2 中的 Vue-Router 区别

3. 用户基本信息获取&渲染

4. 退出功能 [element-plus 确认框]

5. 文章分类页面 - [element-plus 表格]

5.1 基本架子 - PageContainer

6. 文章分类渲染

6.1 封装API - 请求获取表格数据

6.2 el-table 表格动态渲染

6.3 el-table 表格 loading 效果

7. 文章分类添加编辑 [element-plus 弹层]

7.1 点击显示弹层

7.2 封装弹层组件 ChannelEdit

7.3 准备弹层表单

7.4 确认提交

7.5 文章分类删除


1. 首页 layout 架子 [element-plus 菜单]

1.1 基本架子拆解

架子组件列表

el-container

  • el-aside 左侧

    • el-menu 左侧边栏菜单

  • el-container 右侧

    • el-header 右侧头部

      • el-dropdown

    • el-main 右侧主体

      • router-view

<template>
  <!-- 
    el-menu 整个菜单组件
    :default-active="$route.path" 配置默认高亮的菜单项
    router 路由选项开启,el-menu-item 的 index 就是点击跳转的路径 
  -->
  <el-container class="layout-container">
    <!-- 侧边栏 -->
    <el-aside width="200px">
      <div class="el-aside__logo"></div>
      <el-menu
        active-text-color="#ffd04b"
        background-color="#232323"
        :default-active="$route.path"
        text-color="#fff"
        router
      >
        <el-menu-item index="/article/channel">
          <el-icon>
            <Management />
          </el-icon>
          <span>文章分类</span>
        </el-menu-item>
        <el-menu-item index="/article/manage">
          <el-icon>
            <Promotion />
          </el-icon>
          <span>文章管理</span>
        </el-menu-item>
        <el-sub-menu index="/user">
          <!-- 多级菜单的标题-具名插槽 title -->
          <template #title>
            <el-icon>
              <UserFilled />
            </el-icon>
            <span>个人中心</span>
          </template>
          <!-- 展开的内容-默认插槽 -->
          <el-menu-item index="/user/profile">
            <el-icon>
              <User />
            </el-icon>
            <span>基本资料</span>
          </el-menu-item>
          <el-menu-item index="/user/avatar">
            <el-icon>
              <Crop />
            </el-icon>
            <span>更换头像</span>
          </el-menu-item>
          <el-menu-item index="/user/password">
            <el-icon>
              <EditPen />
            </el-icon>
            <span>重置密码</span>
          </el-menu-item>
        </el-sub-menu>
      </el-menu>
    </el-aside>
    <!-- 侧边栏 -->
    <el-container>
      <el-header>
        <div>
          黑马程序员:<strong>{{
            userStore.userInfo.nickname || userStore.userInfo.username
          }}</strong>
        </div>
        <el-dropdown placement="bottom-end" @command="handleCommand">
          <span class="el-dropdown__box">
            <el-avatar :src="userStore.userInfo.user_pic || avatar" />
            <el-icon>
              <CaretBottom />
            </el-icon>
          </span>
          <template #dropdown>
            <el-dropdown-menu>
              <el-dropdown-item command="profile" :icon="User"
                >基本资料</el-dropdown-item
              >
              <el-dropdown-item command="avatar" :icon="Crop"
                >更换头像</el-dropdown-item
              >
              <el-dropdown-item command="password" :icon="EditPen"
                >重置密码</el-dropdown-item
              >
              <el-dropdown-item command="logout" :icon="SwitchButton"
                >退出登录</el-dropdown-item
              >
            </el-dropdown-menu>
          </template>
        </el-dropdown>
      </el-header>
      <el-main>
        <router-view></router-view>
      </el-main>
    </el-container>
  </el-container>
</template>

2. 登录访问拦截

2.1 需求

  • 只有登录页,可以未授权的时候访问,其他所有页面,都需要先登录再访问

2.2 vue3 和 vue2 中的 Vue-Router 区别

① router 和 route 在组件内的使用

  • vue 2.0
    • this.$router ——全局路由对象
    • this.route ——当前正在跳转的路由对象
  • vue 3.0
    • import { useRouter, useRoute } from 'vue-router'

    • const router = useRouter()

    • const route = useRoute()

② 路由前置守卫

  • vue 2.0 
const router = new VueRouter({ ... })

router.beforeEach((to, from, next) => {
  // ...
})

每个守卫方法接收三个参数:

  • to: Route: 即将要进入的目标 路由对象
  • from: Route: 当前导航正要离开的路由
  • next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
    • next(): 放行路由跳转

    • next(false):拦截路由跳转

  • vue 3.0
const router = createRouter({ ... })

router.beforeEach((to, from) => {
  // ...
  // 返回 false 以取消导航
  return false
})

每个守卫方法接收两个参数:

  • to: 即将要进入的目标 用一种标准化的方式
  • from: 当前导航正要离开的路由 用一种标准化的方式
  • 返回值如下:
    • false 拦截回 from 的地址页面
    • undefined / true 直接放行

    • 具体路径 或 路径对象 拦截到对应的地址  '/login' { name: 'login' }

③ 文档

  • vue2.0:导航守卫 | Vue Router导航守卫 | Vue Router
  • vue3.0:导航守卫 | Vue Router导航守卫 | Vue Router

3. 用户基本信息获取&渲染

① api/user/user.js 封装接口

② stores/modules/user.js 定义数据

③ layout/LayoutContainer 页面中调用

④ 动态渲染

4. 退出功能 [element-plus 确认框]

① 注册点击事件

② 添加退出功能

③ pinia user.js 模块 提供 setUserInfo 方法

5. 文章分类页面 - [element-plus 表格]

5.1 基本架子 - PageContainer

① 基本结构样式,用到了 el-card 组件

② 考虑到多个页面复用,封装成组件

  • props 定制标题

  • 默认插槽 default 定制内容主体

  • 具名插槽 extra 定制头部右侧额外的按钮

③ 页面中直接使用测试 

  • 文章分类测试
  • 文章管理测试

6. 文章分类渲染

6.1 封装API - 请求获取表格数据

① 新建 api/article/article.js 封装获取频道列表的接口

② 页面中调用接口,获取数据存储

6.2 el-table 表格动态渲染

 <el-table :data="tableData" stripe style="width: 100%" v-loading="loading">
      <el-table-column type="index" label="序号" width="180" align="center" />
      <el-table-column prop="cate_name" label="分类名称" align="center" />
      <el-table-column prop="cate_alias" label="分类别名" align="center" />
      <el-table-column label="操作" width="180" align="center">
        <template #default="scope">
          <div
            style="display: flex; align-items: center; justify-content: center"
          >
            <el-button
              type="primary"
              circle
              plain
              size="small"
              :icon="Edit"
              @click="handleEdit(scope.row)"
            ></el-button>
            <el-button
              size="small"
              type="danger"
              circle
              plain
              :icon="Delete"
              @click="handleDelete(scope.row)"
            ></el-button>
          </div>
        </template>
      </el-table-column>

6.3 el-table 表格 loading 效果

① 定义变量,v-loading绑定

② 发送请求前开启,请求结束关闭

7. 文章分类添加编辑 [element-plus 弹层]

7.1 点击显示弹层

① 准备弹层

const dialogVisible = ref(false)

<el-dialog v-model="dialogVisible" title="添加弹层" width="30%">
  <div>我是内容部分</div>
  <template #footer>
    <span class="dialog-footer">
      <el-button @click="dialogVisible = false">取消</el-button>
      <el-button type="primary"> 确认 </el-button>
    </span>
  </template>
</el-dialog>

② 点击事件

<template #extra>
    <el-button type="primary" @click="onAddChannel">添加分类</el-button>
</template>

const onAddChannel = () => {
  dialogVisible.value = true
}

7.2 封装弹层组件 ChannelEdit

添加 和 编辑,可以共用一个弹层,所以可以将弹层封装成一个组件

组件对外暴露一个方法 open, 基于 open 的参数,初始化表单数据,并判断区分是添加 还是 编辑

  •  open({}) 如果传递进来的是一个空对象,那么就是添加操作
  • opne({id, cate_name, ...}) 如果传递进来的不是一个空对象,那么就是编辑操作,并且需要渲染表单

  • open 调用后可以打开弹窗

具体实现:

① 封装组件 article/components/ChannelEdit.vue

② 通过 ref 绑定

③ 点击调用方法显示弹窗

7.3 准备弹层表单

① 准备数据 和 校验规则

② 准备表单

③ 编辑需要回显,表单数据需要初始化

④ 基于传过来的表单数据,进行标题控制,有 id 的是编辑

7.4 确认提交

① api/article/article.js 封装请求 API

② 页面中校验,判断,提交请求

④ 父组件监听 success 事件,进行调用回显

7.5 文章分类删除

① api/article.js 封装接口 api

② 页面中添加确认框,调用接口进行提示

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《佛脚闪卡watch》——Apple Watch上的高效学习助手

在快节奏的生活环境中&#xff0c;时间管理成为了学习成功的关键因素之一。**《佛脚闪卡watch》**是一款专为Apple Watch设计的应用程序&#xff0c;旨在帮助学生和自学者更高效地利用碎片时间进行学习。无论是等待公交、散步还是短暂休息&#xff0c;您都可以随时随地进行复习…

除谷歌翻译外,好用的翻译工具推荐!

翻译工具的存在方便了我们阅读跨语种的文件&#xff0c;跨文化交流变得前所未有的便捷。今天&#xff0c;就让我们一起来探索包括谷歌翻译的几款深受用户喜爱的翻译工具吧&#xff01; 福昕在线翻译 直达链接&#xff1a; https://fanyi.pdf365.cn/ 福昕在线翻译是一款专注…

一、VSCode安装IDF5.3

目录 一、VSCode安装1、下载/安装 VSCode2、VSCode 的设置 二、VSCode安装IDF插件1、安装 IDF2、切换 IDF 版本3、从本地创建例程4、从服务器创建例程 一、VSCode安装 1、下载/安装 VSCode 下载地址&#xff1a;https://code.visualstudio.com/ 点击下载按钮。 下载安装 根据…

【 EI国际推荐会议 | 早鸟优惠 | 征稿启事】2025年计算机视觉、模式识别与检测国际会议(ICVPRD 2025)

Advanced Algorithms | Image Processing Technologies Oct. 25 - 26, 2025 ChongqingChina | 重庆中国 2025年计算机视觉、模式识别与检测国际会议&#xff08;ICVPRD 2025&#xff09; 会议官网&#xff1a;https://www.ic-vprd.org/ 会议时间&#xff1a;2025年10月25-2…

从0开始深度学习(5)——线性回归的逐步实现

将从零开始实现整个方法&#xff0c; 包括数据流水线、模型、损失函数和小批量随机梯度下降优化器&#xff0c;但现代的深度学习框架几乎可以自动化地进行所有这些工作&#xff0c;但从零开始实现可以确保我们真正知道自己在做什么。 下一章会使用框架简洁的实现线性回归 # 提前…

孩子成长的黄金期,做好这件事,给孩子培养一个“超级大脑“!

唤醒我们的大脑能力&#xff0c;开发大脑的无限功能&#xff0c;可以提高自己的学习和工作效率&#xff0c;帮我们实现更好的生活状态。 而孩子在6-12岁这个阶段&#xff0c;正是具体想象思维向抽象思维过渡的关键时期&#xff0c;所以这个阶段正是训练孩子逻辑思维能力的好时…

如何在本地服务器部署SeaFile自托管文件共享服务结合内网穿透打造私有云盘?

文章目录 1. 前言2. SeaFile云盘设置2.1 Owncould的安装环境设置2.2 SeaFile下载安装2.3 SeaFile的配置 3. cpolar内网穿透3.1 下载安装3.2 Cpolar注册3.3 Cpolar云端设置3.4 Cpolar本地设置 4.公网访问测试5.结语 1. 前言 本文主要为大家介绍&#xff0c;如何使用两个简单软件…

钢铁百科:Q420DR力学性能、Q420DR执行标准、Q420DR低温容器钢板

Q420DR钢板是一种专为低温压力容器设计的优质钢材&#xff0c;其材质特性、执行标准、化学成分、力学性能、交货状态、应用范围以及常用规格等方面都具有显著的特点。 一、Q420DR钢板材质 Q420DR钢板的命名方式体现了其材质特性。其中&#xff0c;“Q”代表屈服强度&#xff…

米壳AI:做跨境电商欧美市场必备工具--AI图片翻译!

在竞争激烈的欧美跨境电商领域&#xff0c;如何脱颖而出&#xff1f; 对于欧美市场的跨境电商从业者来说&#xff0c;语言和文化的差异常常是一大挑战。 但有了米壳 AI 这个强大的工具&#xff0c;问题便迎刃而解。是一个无需下载安装的网站&#xff0c;打开就能用&#xff0c…

关于cookie和session的直观讲解(二)

前言 上一章&#xff0c;讲解了Cookie&#xff0c;本章介绍Session. 概念&#xff1a;服务器端会话技术&#xff0c;在一次会话的多次请求间共享数据&#xff0c;将数据保存在服务器端的对象中HttpSession。 Session 基础 获取HttpSession对象&#xff1a; HttpSession ses…

High-Resolution Image Synthesis with Latent Diffusion Models论文学习

想要研究多模态数据生成就要研究diffusion架构。今天通过这个论文来学习一下。 在此之前先通过博文扩散模型 (Diffusion Model) 之最全详解图解-CSDN博客学习一下。 GAN就是生成对抗模型&#xff0c;让两个模型打擂台&#xff0c;一个造假一个打假。 而diffusion模型则是从原…

第十五届蓝桥杯图形化省赛题目及解析

第十五届蓝桥杯图形化省赛题目及解析 一. 单选题 1. 运行以下程序&#xff0c;角色会说( )? A、29 B、31 C、33 D、35 正确答案&#xff1a;C 答案解析&#xff1a; 重复执行直到m>n不成立&#xff0c;即重复执行直到m<n。所有当m小于或者 等于n时&…

数据结构(14)——哈希表(1)

欢迎来到博主的专栏&#xff1a;数据结构 博主ID&#xff1a;代码小豪 文章目录 哈希表的思想映射方法&#xff08;哈希函数&#xff09;除留余数法 哈希表insert闭散列负载因子扩容find和erase 哈希表的思想 在以往的线性表中&#xff0c;查找速度取决于线性表是否有序&#…

Origin 2024下载安装教程(中文版软件包) 百度网盘分享链接地址

Origin是什么软件&#xff1f; origin主要是绘图、数据分析、数据导入导出的功能。Origin 广泛应用于科学研究、工程技术、数据分析等领域&#xff0c;Origin 是一款功能强大、易于使用的科学绘图和数据分析软件&#xff0c;能够帮助你高效地处理和可视化数据&#xff0c;为你…

C程序设计——函数0

函数定义 前面说过C语言是结构化的程序设计语言&#xff0c;他把所有问题抽象为数据和对数据的操作&#xff0c;前面讲的变量、常量&#xff0c;都是数据。现在开始讲对数据操作——函数。 C语言的函数&#xff0c;定义方式如下&#xff1a; 返回值类型 函数名(参数列表) {…

论文速读|重新审视奖励设计与评估:用于强健人型机器人站立与行走控制的方法

论文地址&#xff1a;https://arxiv.org/pdf/2404.19173 这篇论文为类人机器人站立和行走&#xff08;SaW&#xff09;控制器的持续可衡量改进奠定了基础。通过引入一套定量实际基准测试方法&#xff0c;作者展示了现有控制器的优缺点&#xff0c;并通过基准测试指导新控制器的…

龙芯L2K0300开发板综合测试

CPU 查看cpu版本信息 cat /proc/cpuinfo可以看到cpu是64位的LoongsonArch架构 stress压力测试结果 RAM 久久派板载512MB DDR4-2666内存&#xff0c;查看内存信息 cat /proc/meminfo可以用memtester进行内存性能测试 memtester <size> <times>memtester测试结果…

Java 工程师转型大数据的优势——别小看自己!

时间&#xff1a;2024年09月05日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频地址: https://xima.tv/1_U3suSJ?_sonic0 希望大家帮个忙&#xff01;如果大家有工作机会&#xff0c;希望帮小蒋推荐一下&#xff0c;小蒋希…

2024国赛数学建模A题思路模型

完整的思路模型请查看文末名片

机器学习:opencv图像识别--模版匹配

目录 一、模版匹配的核心概念 1.图片模板匹配是一种用于在图像中查找特定模式或对象的技术。 2.模板图像 3.目标图像 4.滑动窗口 5.相似度度量 6.匹配位置 二、模版匹配的步骤 1.准备图像&#xff1a; 2.预处理&#xff1a; 3.匹配&#xff1a; 4.定位最佳匹配&…