【愚公系列】《循序渐进Vue.js 3.x前端开发实践》051-案例:教务系统学生列表页面

标题详情
作者简介愚公搬代码
头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
近期荣誉2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳博主等。
博客内容.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
欢迎👍点赞、✍评论、⭐收藏

文章目录

  • 🚀前言
  • 🚀一、案例:教务系统学生列表页面
    • 🔎1. `<script setup>` 部分
    • 🔎2.`<template>` 部分
      • 🦋2.1 布局
      • 🦋2.2 表格(`el-table`)
      • 🦋2.3 按钮
    • 🔎3.`<style scoped>` 部分
    • 🔎4.总结


🚀前言

在现代教育管理中,教务系统作为学校信息化建设的重要组成部分,承担着学生信息管理、课程安排、成绩统计等多项职能。而学生列表页面则是教务系统中最基本且最关键的功能之一,能够高效地展示学生的基本信息及其相关数据,帮助教务人员进行日常管理和决策。

本篇文章将通过一个具体的案例,带你深入了解如何构建一个功能齐全的教务系统学生列表页面。我们将结合 Element Plus 组件库,详细介绍页面的设计思路、功能模块及实现过程。

🚀一、案例:教务系统学生列表页面

<script setup>
import { ref } from 'vue'
const desc = ref("七年级1班学生统计")
const stus = ref([
    {
        name:"小王",
        age:14,
        sex:"男",
        date:"2020年8月15日"
    },{
        name:"小张",
        age:15,
        sex:"男",
        date:"2020年5月15日"
    },{
        name:"小秋",
        age:15,
        sex:"女",
        date:"2020年8月15日"
    }
])
function selectFunc(index) {
    let strs = ["七","八","九"]
    let rank = strs[Math.floor((index-1) / 3)]
    desc.value = `${rank}年级${((index-1) % 3) + 1}班学生统计`
} 
</script>

<template>
  <el-container>
    <el-header height="80px" style="padding:0">
      <div class="header">教务系统学生管理</div>
    </el-header>
    <el-container>
      <el-aside width="200px">
          <el-menu class="aside" @select="selectFunc" default-active="1" :unique-opened="true">
            <el-sub-menu index="1">
                <template #title>
                    <span>七年级</span>
                </template>
                <el-menu-item index="1">1班</el-menu-item>
                <el-menu-item index="2">2班</el-menu-item>
                <el-menu-item index="3">3班</el-menu-item>
            </el-sub-menu>
            <el-sub-menu index="2">
                <template #title>
                    <span>八年级</span>
                </template>
                <el-menu-item index="4">1班</el-menu-item>
                <el-menu-item index="5">2班</el-menu-item>
                <el-menu-item index="6">3班</el-menu-item>
            </el-sub-menu>
            <el-sub-menu index="3">
                <template #title>
                    <span>九年级</span>
                </template>
                <el-menu-item index="7">1班</el-menu-item>
                <el-menu-item index="8">2班</el-menu-item>
                <el-menu-item index="9">3班</el-menu-item>
            </el-sub-menu>
          </el-menu>
      </el-aside>
      <el-container>
        <el-header height="80px" style="padding:0;margin:0">
            <el-container class="subHeader">
                <div class="desc">{{desc}}</div>
                <el-button style="width:100px;height:30px;margin:20px">新增记录</el-button>
            </el-container>
        </el-header>
        <el-main style="margin:0;padding:0">
            <div class="content">
                <el-table :data="stus">
                    <el-table-column
                    prop="name"
                    label="姓名">
                    </el-table-column>
                    <el-table-column
                    prop="age"
                    label="年龄">
                    </el-table-column>
                    <el-table-column
                    prop="sex"
                    label="性别">
                    </el-table-column>
                    <el-table-column
                    prop="date"
                    label="录入日期">
                    </el-table-column>
                </el-table>
            </div>
        </el-main>
        <el-footer height="30px" class="footer">Vue框架搭建,ElementPlus提供组件支持</el-footer>
      </el-container>
    </el-container>
  </el-container>
</template>

<style scoped>
.header {
    font-size: 30px;
    line-height: 80px;
    background-color: #f1f1f1;
}
.aside {
    background-color: wheat;
    height: 600px;
}
.subHeader {
    background-color:cornflowerblue;
}
.desc {
    font-size: 25px;
    line-height: 80px;
    color: white;
    width: 800px;
}
.content {
    height: 410px;
}
.footer {
    background-color:dimgrey;
    color: white;
    font-size: 17px;
    line-height: 30px;
}
</style>

在这里插入图片描述

🔎1. <script setup> 部分

import { ref } from 'vue'

const desc = ref("七年级1班学生统计")

const stus = ref([
  { name: "小王", age: 14, sex: "男", date: "2020年8月15日" },
  { name: "小张", age: 15, sex: "男", date: "2020年5月15日" },
  { name: "小秋", age: 15, sex: "女", date: "2020年8月15日" }
])

function selectFunc(index) {
  let strs = ["七", "八", "九"]
  let rank = strs[Math.floor((index - 1) / 3)]
  desc.value = `${rank}年级${((index - 1) % 3) + 1}班学生统计`
}
  • ref 引入:通过 import { ref } from 'vue' 引入了 ref,用于定义响应式数据。

  • desc:这是一个响应式变量,用于存储当前显示的描述信息。初始值为 "七年级1班学生统计",它会显示在页面的头部,指示当前查看的是哪个班级的学生统计信息。

  • stus:这是另一个响应式变量,存储了一个学生信息的数组。每个学生对象包含姓名、年龄、性别和录入日期。该数组会绑定到表格中显示学生数据。

  • selectFunc:这是一个函数,用于更新 desc 的值。当菜单中的班级项被选中时,该函数会根据所选班级的索引,动态更新描述信息。例如,选择 七年级1班 时,desc 的值会变成 "七年级1班学生统计"

🔎2.<template> 部分

🦋2.1 布局

<el-container>
  <el-header height="80px" style="padding:0">
    <div class="header">教务系统学生管理</div>
  </el-header>
  <el-container>
    <el-aside width="200px">
      <el-menu class="aside" @select="selectFunc" default-active="1" :unique-opened="true">
        ...
      </el-menu>
    </el-aside>
    <el-container>
      <el-header height="80px" style="padding:0;margin:0">
        <el-container class="subHeader">
          <div class="desc">{{desc}}</div>
          <el-button style="width:100px;height:30px;margin:20px">新增记录</el-button>
        </el-container>
      </el-header>
      <el-main style="margin:0;padding:0">
        <div class="content">
          <el-table :data="stus">
            <el-table-column prop="name" label="姓名"></el-table-column>
            <el-table-column prop="age" label="年龄"></el-table-column>
            <el-table-column prop="sex" label="性别"></el-table-column>
            <el-table-column prop="date" label="录入日期"></el-table-column>
          </el-table>
        </div>
      </el-main>
      <el-footer height="30px" class="footer">
        Vue框架搭建,ElementPlus提供组件支持
      </el-footer>
    </el-container>
  </el-container>
</el-container>
  • <el-container>:这是一个容器组件,用于组织页面的整体布局。容器可以嵌套使用,创建复杂的页面布局结构。

  • <el-header>:表示页面的头部区域,包含网站标题。头部区域的样式设定了高度 80px,并且有一个 .header 类,设置了字体大小和背景颜色。

  • <el-aside>:侧边栏组件,宽度为 200px,包含一个菜单 el-menu。菜单项会展示年级和班级,点击不同的班级会触发 selectFunc 函数,从而更新页面描述。

  • <el-menu>:Element Plus 的菜单组件,支持多级菜单。这里分为 七年级八年级九年级 三个子菜单,每个子菜单包含三个班级。通过 @select="selectFunc" 绑定了 selectFunc 函数,点击菜单项时会调用该函数更新 desc

  • <el-main>:页面的主内容区域,包含一个表格 el-table 用于展示学生信息。表格中展示了每个学生的姓名、年龄、性别和录入日期。

  • <el-footer>:页面底部区域,显示了一些版权信息或者框架信息。

🦋2.2 表格(el-table

<el-table :data="stus">
  <el-table-column prop="name" label="姓名"></el-table-column>
  <el-table-column prop="age" label="年龄"></el-table-column>
  <el-table-column prop="sex" label="性别"></el-table-column>
  <el-table-column prop="date" label="录入日期"></el-table-column>
</el-table>
  • el-table:这是一个表格组件,data 属性绑定到 stus 数组。表格会根据 stus 数组中的数据动态渲染行。

  • el-table-column:每列代表学生的一个属性(如姓名、年龄、性别、录入日期),通过 prop 属性绑定相应的字段,label 属性设置列头的文本。

🦋2.3 按钮

<el-button style="width:100px;height:30px;margin:20px">新增记录</el-button>
  • el-button:这是一个按钮组件,点击该按钮可能会用来新增学生记录。按钮的样式通过内联样式进行了设置。

🔎3.<style scoped> 部分

.header {
  font-size: 30px;
  line-height: 80px;
  background-color: #f1f1f1;
}
.aside {
  background-color: wheat;
  height: 600px;
}
.subHeader {
  background-color: cornflowerblue;
}
.desc {
  font-size: 25px;
  line-height: 80px;
  color: white;
  width: 800px;
}
.content {
  height: 410px;
}
.footer {
  background-color: dimgrey;
  color: white;
  font-size: 17px;
  line-height: 30px;
}
  • .header:定义了头部区域的样式,设置了字体大小、行高以及背景色。
  • .aside:设置了侧边栏的背景色和高度。
  • .subHeader:设置了次头部的背景色。
  • .desc:设置了描述信息区域的字体大小、行高、文字颜色和宽度。
  • .content:定义了内容区域的高度。
  • .footer:设置了底部区域的背景色、字体颜色、字体大小和行高。

🔎4.总结

这个页面主要包含了以下几个功能:

  1. 侧边栏菜单:用户可以点击不同的年级和班级,动态更新页面上方的描述信息(如 "七年级1班学生统计")。
  2. 学生表格:通过表格组件展示了学生的信息(姓名、年龄、性别、录入日期)。
  3. 新增记录按钮:在描述信息旁边有一个按钮,可能用于跳转到一个新增学生记录的页面(这部分在代码中没有实现)。
  4. 布局与样式:页面布局使用了 Element Plus 的 el-containerel-headerel-asideel-mainel-footer 等组件,样式通过 scoped CSS 进行限定。

通过这种方式,页面实现了一个简单的学生管理系统的框架,具有良好的可维护性和交互性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

毕业设计:基于深度学习的高压线周边障碍物自动识别与监测系统

目录 前言 课题背景和意义 实现技术思路 一、算法理论基础 1.1 卷积神经网络 1.2 目标检测算法 1.3 注意力机制 二、 数据集 2.1 数据采集 2.2 数据标注 三、实验及结果分析 3.1 实验环境搭建 3.2 模型训练 3.2 结果分析 最后 前言 &#x1f4c5;大四是整个大学…

2025.2.1——八、Web_php_wrong_nginx_config

题目来源&#xff1a;攻防世界 Web_php_wrong_nginx_config 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;找找解题入口 step 2&#xff1a;抓包修改信息&#xff0c;得到配置文件 step 3&#xff1a;找到突破口&#xff0c;进行文件遍历 st…

Netty中用了哪些设计模式?

大家好&#xff0c;我是锋哥。今天分享关于【Netty中用了哪些设计模式&#xff1f;】面试题。希望对大家有帮助&#xff1b; Netty中用了哪些设计模式&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Netty 是一个基于 Java 的高性能网络应用框架&#…

【办公类-99-01】20250201学具PDF打印会缩小一圈——解决办法:换一个PDF阅读器

背景需求&#xff1a; 2024年1月13日&#xff0c;快要放寒假了&#xff0c;组长拿着我们班的打印好的一叠教案来调整。 “前面周计划下面的家园共育有调整&#xff0c;你自己看批注。” “还有你这个教案部分的模版有问题&#xff0c;太小&#xff08;窄&#xff09;了。考虑…

【BUUCTF杂项题】FLAG

一.FLAG 一张图片扔进随波逐流 发现RGB似乎隐藏压缩包 优先考虑RBG中的LSB隐写&#xff0c;用Stegsolve打开文件 1.查看每个颜色通道下的图片&#xff0c;未发现异常 2.LSB最低位提取&#xff0c;用Stegsolve的Data Extrace功能&#xff0c;确实存在一个压缩包&#xff0c;sa…

ros 创建Node

1、使用catkin_create_pkg创建一个软件包 catkin_create_pkg ssr_pkg roscpp rospy std_msgs 2、在软件包的src文件夹下创建一个节点的cpp源码文件 3、在CMakeLists.txt中设置节点源码的编译规则 4.编译运行 编译&#xff1a;shiftctrlB 运行&#xff1a; rosrun ssr_pkg …

给AI用工具的能力——Agent

ReAct框架&#xff1a; Reason Action&#xff0c;推理与行动结合 可以借助思维链&#xff0c;用小样本提示展示给模型一个ReAct框架 推理&#xff1a;针对问题或上一步观察的思考 行动&#xff1a;基于推理&#xff0c;与外部环境的一些交互&#xff08;调用外部工具&…

实验十 Servlet(一)

实验十 Servlet(一) 【实验目的】 1&#xff0e;了解Servlet运行原理 2&#xff0e;掌握Servlet实现方式 【实验内容】 1、参考课堂例子&#xff0c;客户端通过login.jsp发出登录请求&#xff0c;请求提交到loginServlet处理。如果用户名和密码相同则视为登录成功&#xff0c…

PAT甲级1052、Linked LIst Sorting

题目 A linked list consists of a series of structures, which are not necessarily adjacent in memory. We assume that each structure contains an integer key and a Next pointer to the next structure. Now given a linked list, you are supposed to sort the stru…

【BUUCTF杂项题】荷兰宽带数据泄露、九连环

一.荷兰宽带数据泄露 打开发现是一个.bin为后缀的二进制文件&#xff0c;因为提示宽带数据泄露&#xff0c;考虑是宽带路由器方向的隐写 补充&#xff1a;大多数现代路由器都可以让您备份一个文件路由器的配置文件&#xff0c;软件RouterPassView可以读取这个路由配置文件。 用…

【Game】Powerful——The Dragon Hiding in Deep Waters(3)

文章目录 1、规则2、条件——宠物2.1、宠物装备2.1、宠物突破2.2、洗练石 3、条件——符石4、条件——化龙鼎5、附录——星穹 1、规则 寒渊城&#xff0c;神秘老兵处可查看 霜风携雨掠寒江&#xff0c;孤城独影人心凉 贤才此件难相遇&#xff0c;忠骨何日还故乡 宠物、符石、…

差分数组的学习

文章目录 1.差分数组的应用场景2.如何构造一个差分数组2.1 原数组转换为差分数组2.2 差分数组还原为原数组 3.差分数组的特性 1.差分数组的应用场景 需要频繁对某个区间的数组进行增减操作 2.如何构造一个差分数组 2.1 原数组转换为差分数组 # 存在一个数组Nums,求出他的差分…

AES 与 SM4 加密算法:深度解析与对比

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

【C++】线程池实现

目录 一、线程池简介线程池的核心组件实现步骤 二、C11实现线程池源码 三、线程池源码解析1. 成员变量2. 构造函数2.1 线程初始化2.2 工作线程逻辑 3. 任务提交(enqueue方法)3.1 方法签名3.2 任务封装3.3 任务入队 4. 析构函数4.1 停机控制 5. 关键技术点解析5.1 完美转发实现5…

[EAI-023] FAST,机器人动作专用的Tokenizer,提高VLA模型的能力和训练效率

Paper Card 论文标题&#xff1a;FAST: Efficient Action Tokenization for Vision-Language-Action Models 论文作者&#xff1a;Karl Pertsch, Kyle Stachowicz, Brian Ichter, Danny Driess, Suraj Nair, Quan Vuong, Oier Mees, Chelsea Finn, Sergey Levine 论文链接&…

介绍一下Mybatis的底层原理(包括一二级缓存)

表面上我们的就是Sql语句和我们的java对象进行映射&#xff0c;然后Mapper代理然后调用方法来操作数据库 底层的话我们就涉及到Sqlsession和Configuration 首先说一下SqlSession&#xff0c; 它可以被视为与数据库交互的一个会话&#xff0c;用于执行 SQL 语句&#xff08;Ex…

wx050基于django+vue+uniapp的傣族节日及民间故事推广小程序

开发语言&#xff1a;Python框架&#xff1a;djangouniappPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 后台登录界面 管理员主界面 用户管理 …

hot100(6)

51.22.括号生成 字符串回溯的典型问题 char[] path;List<String> res;int n;public List<String> generateParenthesis(int n) {this.n n;path new char[2*n];res new ArrayList<>();dfs(0,0,0);return res;}public void dfs(int index,int left, int r…

【游戏设计原理】98 - 时间膨胀

从上文中&#xff0c;我们可以得到以下几个启示&#xff1a; 游戏设计的核心目标是让玩家感到“时间飞逝” 游戏的成功与否&#xff0c;往往取决于玩家的沉浸感。如果玩家能够完全投入游戏并感受到时间飞逝&#xff0c;说明游戏设计在玩法、挑战、叙事等方面达到了吸引人的平衡…

RocketMQ面试题:进阶部分

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…