Element-06.案例

news2024/9/20 20:41:02

一.目标

实现下面这个页面,表格中的数据使用axois异步加载数据

二.实现步骤 

首先在vue项目的views文件夹中新建一个tlias文件夹,用来存储该案例的相关组件。员工页面组件(EmpView.vue)和部门页面组件(DeptView.vue)分别在tlias文件夹中创建好。

在App.vue中的<template>标签中引入<emp-view>标签,并在<script>标签中导入EmpView.vue组件。 components中加入EmpView组件。

<!-- 模板部分,由他生成HTML代码  相当于vue当中的视图部分 -->
<template>
  <div>   <!-- div是根标签,一个<template>标签中只能有一个根标签,也即只能有一个<template>标签 -->
    <!-- <h1>{{ message }}</h1> -->
     <!-- <element-view></element-view> -->
    <emp-view></emp-view>
    <!-- <router-view></router-view> -->
  </div>
</template>

<!-- JS代码,定义vue当中的数据模型以及当中的方法 -->
<script>
/* 
import ElementView from './views/element/ElementView.vue'  
    将ElementView.vue组件文件导入并重新命名为ElementView  
    注意:<template>标签里面没有定义标签,那么import的话会报错
*/
  import EmpView from './views/tlias/EmpView.vue'
  export default {
    components: { EmpView },   // components里面也不能有<template>中未定义的标签的vue组件
    data () {
        return {
          /* message:"Hello Vue"     */
        }
    },
    methods: {
        
    }
  }
</script>

<!-- 定义CSS样式 -->
<style>

</style>

1.页面基本布局

        首先页面呈现出顶栏,左边栏,然后主区域的整体布局,因此要实现这种布局。我们在element组件中找到这一布局。

 然后找到对应的代码复制到员工页面组件的<template>标签中。

<el-container>
  <el-header>Header</el-header>
  <el-container>
    <el-aside width="200px">Aside</el-aside>
    <el-main>Main</el-main>
  </el-container>
</el-container>

浏览器页面结构如下: 

 

在实现了基本布局后,发现这三部分并没有边框线,因此要在这三部分中加上边框线。

 第一行代码改下:

<el-container style="height: 800px; border: 1px solid #eee">

下面在<el-header>标签中设置要展示的标题。

<el-header style="font-size: 40px; background-color: #6495ED;">tlias智能学习辅助系统</el-header>

header部分设计好后,接下来在<el-aside>标签中设置我们需要的样式 。首先在element组件库中寻找符合我们要求的样式。

<el-aside width="200px" style="background-color: rgb(238, 241, 246)">
    <el-menu :default-openeds="['1', '3']">
      <el-submenu index="1">
        <template slot="title"><i class="el-icon-message"></i>导航一</template>
        <el-menu-item-group>
          <template slot="title">分组一</template>
          <el-menu-item index="1-1">选项1</el-menu-item>
          <el-menu-item index="1-2">选项2</el-menu-item>
        </el-menu-item-group>
        <el-menu-item-group title="分组2">
          <el-menu-item index="1-3">选项3</el-menu-item>
        </el-menu-item-group>
        <el-submenu index="1-4">
          <template slot="title">选项4</template>
          <el-menu-item index="1-4-1">选项4-1</el-menu-item>
        </el-submenu>
      </el-submenu>
      <el-submenu index="2">
        <template slot="title"><i class="el-icon-menu"></i>导航二</template>
        <el-menu-item-group>
          <template slot="title">分组一</template>
          <el-menu-item index="2-1">选项1</el-menu-item>
          <el-menu-item index="2-2">选项2</el-menu-item>
        </el-menu-item-group>
        <el-menu-item-group title="分组2">
          <el-menu-item index="2-3">选项3</el-menu-item>
        </el-menu-item-group>
        <el-submenu index="2-4">
          <template slot="title">选项4</template>
          <el-menu-item index="2-4-1">选项4-1</el-menu-item>
        </el-submenu>
      </el-submenu>
      <el-submenu index="3">
        <template slot="title"><i class="el-icon-setting"></i>导航三</template>
        <el-menu-item-group>
          <template slot="title">分组一</template>
          <el-menu-item index="3-1">选项1</el-menu-item>
          <el-menu-item index="3-2">选项2</el-menu-item>
        </el-menu-item-group>
        <el-menu-item-group title="分组2">
          <el-menu-item index="3-3">选项3</el-menu-item>
        </el-menu-item-group>
        <el-submenu index="3-4">
          <template slot="title">选项4</template>
          <el-menu-item index="3-4-1">选项4-1</el-menu-item>
        </el-submenu>
      </el-submenu>
    </el-menu>
  </el-aside>

将代码删减成为我们所需要的样子。

<el-aside width="220px" style="background-color: rgb(238, 241, 246); border: 1px solid #eee">
                    <el-menu :default-openeds="['1', '3']">
                        <el-submenu index="1">
                            <template slot="title"><i class="el-icon-message"></i>系统信息管理</template>
                            <el-menu-item-group>
                                <el-menu-item index="1-1">
                                    <router-link to="/dept">部门管理</router-link>    
                                </el-menu-item>
                                <el-menu-item index="1-2">
                                    <router-link to="/emp">员工管理</router-link>    
                                </el-menu-item>
                            </el-menu-item-group>
                        </el-submenu>
                    </el-menu>
                </el-aside>

header和aside设计好后,下面主要设计main部分。

2.页面组件实现

在main区域中首先分为以下几个部分:

最上面是表单,中间是表格,下面是分页栏。 因此需要这三部分的组件来实现。

首先是表单,表单采用的是行内表单。

          <el-form :inline="true" :model="searchEmp" class="demo-form-inline">
                        <el-form-item label="姓名">
                            <el-input v-model="searchEmp.name" placeholder="请输入员工姓名"></el-input>
                        </el-form-item>
                        <el-form-item label="性别">
                            <el-select v-model="searchEmp.gender" placeholder="请选择">
                                <el-option label="男" value="1"></el-option>
                                <el-option label="女" value="2"></el-option>
                            </el-select>
                        </el-form-item>
                        <el-form-item label="入职时间">
                            <!-- 日期选择器 -->
                            <el-date-picker v-model="searchEmp.entryDate" type="daterange" range-separator="至"
                                start-placeholder="开始日期" end-placeholder="结束日期">
                                <!-- 绑定在searchEmp对象中的entryDate属性中去,entryDate属性是一个数组,有开始日期和结束日期 -->
                            </el-date-picker>
                        </el-form-item>
                        <el-form-item>
                            <el-button type="primary" @click="onSubmit">查询</el-button>
                        </el-form-item>
                    </el-form>

在表单中我们通过v-bind绑定了一个数据模型,是一个对象模型,命名为searchEmp,用来记住查询到的对象。所有的表单项都绑定在searchEmp这个对象当中。通过v-model实现searchEmp对象的name属性,gender属性和entryDate属性的双向绑定。

通过@click绑定一个事件onSubmit,当点击查询时会将数据提交,触发onSubmit方法。

methods: {
        onsubmit:function() {
            alert("开始查询数据~")
        },
        handleSizeChange:function(val) {
            alert("当前页面条数为:" + val)
        },
        handleCurrentChange:function(val) {
            alert("当前页为:" + val)
        }
    }

对象searchEmp要在vue对象中定义,其中的entryDate属性要定义一个日期选择器,包含开始日期和结束日期。entryDate属性是一个数组。

    data () {
        return {
            searchEmp: {
                name:"",
                gender:"",
                entryDate:[]
            },
            tableData:[]
        }
    }

接着是表格

<!-- 表格 -->
                    <el-table :data="tableData" :border="true"> <!-- tableData数据模型是一个数组,需要在Vue对象的数据模型中定义 -->
                        <el-table-column prop="name" label="姓名" width="120"></el-table-column>
                        <el-table-column label="图像" width="140">
                            <!-- 图像要指定一个scope插槽 -->
                            <template slot-scope="scope">
                                <img :src="scope.row.image" width="50px">   <!-- 这个插槽展示图片,为src属性通过v-bind动态绑定一个值,即当前列中的每一行的image属性 -->
                            </template>
                        </el-table-column>
                        <el-table-column label="性别" width="140">
                            <!-- 性别要指定一个scope插槽,通过scope插槽可以获取到 row, column, $index 和 store(table 内部的状态管理)的数据 -->
                            <template slot-scope="scope">
                                {{ scope.row.gender==1?'男':'女' }}    <!-- 获取当前列中每一行的gender属性并判断是否==1,是为男,不是为女 -->
                            </template>
                        </el-table-column>
                        <el-table-column prop="job" label="职位" width="140"></el-table-column>
                        <el-table-column prop="entrydate" label="入职日期" width="200"></el-table-column>
                        <el-table-column prop="updatedate" label="最后操作时间" width="200"></el-table-column>
                        <el-table-column label="操作" width="200">
                            <el-button type="primary" size="mini">编辑</el-button>
                            <el-button type="danger" size="mini">删除</el-button>
                        </el-table-column>    <!-- prop要与JSON数据中的属性名保持一致 -->
                    </el-table>

表格中通过v-bind绑定了一个属性tableData,该属性用于存储表格中的数据。表格中的数据仍是以数组形式进行存储的,因此在数据模型中进行声明。(见上面代码)

在表格的图像和性别区,会展示出value值而并非内容。为了解决这一问题,需要使用到插槽。

<el-table-column label="图像" width="140">
                            <!-- 图像要指定一个scope插槽 -->
                            <template slot-scope="scope">
                                <img :src="scope.row.image" width="50px">   <!-- 这个插槽展示图片,为src属性通过v-bind动态绑定一个值,即当前列中的每一行的image属性 -->
                            </template>
                        </el-table-column>
                        <el-table-column label="性别" width="140">
                            <!-- 性别要指定一个scope插槽,通过scope插槽可以获取到 row, column, $index 和 store(table 内部的状态管理)的数据 -->
                            <template slot-scope="scope">
                                {{ scope.row.gender==1?'男':'女' }}    <!-- 获取当前列中每一行的gender属性并判断是否==1,是为男,不是为女 -->
                            </template>
                        </el-table-column>

在图像中动态绑定src属性,使得图像这一列的每一行数据中的image属性动态绑定给src。

在性别中对这一列的每一行数据中的gender属性做判断,如果==1则性别为男,否则为女,使用三元运算符。

scope.row.image
scope.row.gender

3.分页组件实现

<el-pagination background layout="sizes, prev, pager, next, jumper"
                        @size-change="handleSizeChange" @current-change="handleCurrentChange" :total="1000">
                        <!-- :total="1000", 写全 v-bind:total="1000", ":"语法是 v-bind: 的简写,用于绑定一个动态的值到属性 -->
                        <!-- size-change	pageSize 改变时会触发	回调参数:每页条数 -->
                        <!-- current-change	currentPage 改变时会触发	回调参数:当前页 -->
                        <!-- @:v-on的简写 v-on为el-button标签绑定了一个事件click-->
                    </el-pagination>

分页组件中有两个方法,详见Element-03.组件-Pagination分页-CSDN博客。同时所定义的方法要在vue对象中加以声明。

methods: {
        onsubmit:function() {
            alert("开始查询数据~")
        },
        handleSizeChange:function(val) {
            alert("当前页面条数为:" + val)
        },
        handleCurrentChange:function(val) {
            alert("当前页为:" + val)
        }
    }

 三.axios异步加载数据

使用axios异步加载数据,达到在页面中能够动态展示的效果。在mounted方法中当模型挂载完毕后,通过get方法拿到数据并将其中的data数组赋值给vue对象的tableData数组。

mounted () {
        axios.get("https://yapi.pro/mock/401965/user/getById").then((result) => {
            this.tableData=result.data.data 
        });
    }

在<script>标签中引入axios 

<script>
import axios from 'axios';

相关具体原理参考Ajax-03.Axios-案例-CSDN博客

这样整个案例便制作完成。

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

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

相关文章

[数据集][目标检测]电力场景轭式悬架锈蚀分类数据集6351张2类别

数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;6351 分类类别数&#xff1a;2 类别名称[corrosion,good] 每个类别图片数&#xff1a; corrosion 图片数&#xff1a;310 good 图片数&#xff1a;6041 …

ChatGLM-6B 主要代码分析 RotaryEmbedding

ChatGLM-6B 主要代码分析 RotaryEmbedding flyfish 图片链接地址 传统的 Transformer 位置编码&#xff08;Positional Encoding&#xff09;被称为绝对位置编码 &#xff0c;而 Rotary Embedding 被称为相对位置编码 &#xff0c;主要是因为它们编码位置信息的方式不同&am…

python创建项目环境及项目打包

目录 创建项目环境conda创建环境常用命令创建项目虚拟环境创建虚拟环境激活虚拟环境安装第三方库 pyinstaller 打包常用参数组合 嵌入式打包下载嵌入式版本的python配置环境无参调用可完善 nuitka打包 创建项目环境 conda创建环境常用命令 conda create -n py310 python3.10.…

《学会 SpringBoot · 依赖管理机制》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

IntelliJ IDEA 集成 ShardingSphere-JDBC 访问分库分表

背景 众所周知&#xff0c;IntelliJ IDEA 是 Java 领域常用的开发工具之一&#xff0c;IDEA Ultimate&#xff08;旗舰版&#xff09;或其他例如 DataGrip 等 Intellij 平台的工具都集成了对数据库的访问能力。 但是&#xff0c;对于做了分库分表的项目&#xff0c;直接使用 …

微信支付代理商-自助提交资料源码之结算信息页面—微信支付商机版

一、支付代理上自助提交资料 一般在都在小程序完成提交 在网页中异常提示alert 但是很多小程序禁用了这个函数 并且不好看 那么久自定义一个组件每次直接调用 二、提示技术代码 function 未来之窗_VOS_通用提醒(msg){var 未来之窗内容message<cyberdiv style"font…

选择排序(直接选择排序与堆排序的比较)

选择排序 选择排序时间复杂度 1. 直接选择排序思考⾮常好理解&#xff0c;但是效率不是很好。实际中很少使用&#xff0c;思路是先进行遍历找到元最小的元素&#xff0c;然后与第一个进行交换 2. 时间复杂度&#xff1a;O&#xff08;&#xff09; 3. 空间复杂度&#…

gmapping算法核心部分

processScan函数 参考&#xff1a;https://blog.csdn.net/CV_Autobot/article/details/131058981 drawFromMotion:根据运动模型更新粒子位姿 scanMatch:进行扫描匹配 resample:重采样 逐步分解并详细解释代码 1. 获取当前扫描的相对位姿 OrientedPoint relPose reading.…

舜宇光学科技社招校招入职测评:商业推理测验真题汇总、答题要求、高分技巧

舜宇光学科技&#xff08;集团&#xff09;有限公司&#xff0c;成立于1984年&#xff0c;是全球领先的综合光学零件及产品制造商。2007年在香港联交所主板上市&#xff0c;股票代码2382.HK。公司专注于光学产品的设计、研发、生产及销售&#xff0c;产品广泛应用于手机、汽车、…

BEM架构

视频 总结&#xff1a; BEM架构&#xff1a;一个命名类的规范而已&#xff0c;说白了就是如何给类起名字使用sass的目的&#xff1a;在<style>中模块化的使用类名&#xff0c;同时减少代码数量 1、 BEM架构 &#xff08;通义灵码查询结果&#xff09; BEM (Block Ele…

【hot100篇-python刷题记录】【和为 K 的子数组】

R5-子串篇 目录 思路&#xff1a; 优化&#xff1a; tip: 代码&#xff1a; 结果&#xff1a; ps: 思路&#xff1a; 滑动&#xff0c;应该可以使用滑动窗口来解题。 貌似前缀和也可以&#xff0c;left&#xff0c;right两个指针&#xff0c;right的前缀和-left的前缀…

【学习笔记】printf中%m的含义

【学习笔记】printf中%m的含义 在有些代码中会看到如下的写法&#xff1a; printf("%m\n");printf中使用了%m来打印输出&#xff0c;那么%m又是什么意思呢&#xff1f; 其实%m 并不是在所有的 printf 实现中都通用或标准化的选项&#xff0c;而是在某些特定的编程语…

vue的markdown编辑器插件比对

vue的markdown编辑器插件比对 文章说明md-editor-v3的使用及效果展示vditor的使用及效果展示 文章说明 文章比对 md-editor-v3、vditor 这两个插件的使用及效果体验 md-editor-v3的使用及效果展示 安装 npm install md-editor-v3使用 <script setup> import {reactive} f…

图神经网络(Graph Neural Networks)是什么?

图神经网络&#xff08;Graph Neural Networks&#xff09;是什么&#xff1f; 引言 在数据科学和机器学习的广阔领域中&#xff0c;图结构数据以其独特的复杂性和丰富性成为了一个重要的研究方向。从社交网络中的用户关系&#xff0c;到生物信息学中的蛋白质交互网络&#x…

跨进程通信使用 Zenoh中间件 进行高效数据传输的测试和分析

文章目录 1. 引言2. Zenoh C 使用指南2.1 安装 Zenoh C 库2.2 编写基本的 Zenoh C 程序订阅示例发布示例 2.3 编译和运行程序 3. Zenoh 与 ROS2 集成3.1 安装 Zenoh3.2 安装 ROS2 的 Zenoh RMW 实现3.3 设置 RMW 实现为 Zenoh3.4 验证配置 4. 编写基于 Zenoh 的 ROS2 应用程序4…

Linux系统编程 --- 多线程

线程&#xff1a;是进程内的一个执行分支&#xff0c;线程的执行粒度&#xff0c;要比进程要细。 一、线程的概念 1、Linux中线程该如何理解 地址空间就是进程的资源窗口。 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1…

浏览器遇到的问题

下载的时候遇到&#xff0c;需要授权&#xff0c;无法下下载 将隐私里面的全部关掉

虚幻5|AI巡逻宠物伴随及定点巡逻—初步篇

一.建立AI基本三件套 1.建立AI基本三件套 二.使用AI的基本设置 1.打开我们想要用的AI宠物的蓝图&#xff0c;选中自我Actor,右侧细节处找到AI&#xff0c;选中对应的AI控制器 三.打开AI控制器 写如下 四&#xff0c;AI行为树 1.新建一个任务&#xff0c;命名含巡逻二字即可…

BigInteger与BigDecimal

BigInteger BigInteger构造方法 public BigInteger(int num, Random rnd) 获取随机大整数&#xff0c;范围&#xff1a;[0 ~ 2的num次方-1] public BigInteger(String val) 获取指定的大整数 public BigInteger(String val, int radix) 获取指定进制的大整数 构造方法小结…

Power Query抓取多页数据导入到Excel

原文链接 举例网站&#xff1a;http://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/ggtj/index.phtml?last5&p1 操作步骤 &#xff08;版本为&#xff1a;Excel2010&#xff09;&#xff1a; Step-01&#xff1a;单击【Power Query】-【从Web】&#xff0c;…