Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

这篇具有很好参考价值的文章主要介绍了Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 用户列表组件UI结构的组成

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

1.1 头部是一个面包屑 (Breadcrumb)导航区域

1.2 白色区域是一个卡片(Card)视图

1.3 卡片 (Card)视图中嵌套了 输入框(Input )、按钮(Button)、表单(Form)、分页(Pagination )

Breadcrumb 面包屑 | Element Plus (gitee.io)https://element-plus.gitee.io/zh-CN/component/breadcrumb.html

2. 用户列表组件实现步骤

2.1 首先绘制面包屑 (Breadcrumb)导航区域,根据需求,在官网找到合适的例子复制代码进行按需改造

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

 2.1.1 复制页面结构后,打开用户组件 Users.vue 进行结构改造和梳理

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

 2.1.2 页面效果,由于Breadcrumb 属性中,separator 的分隔符默认是 / 

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

 2.1.3   所以需要安装 element-plus-icons-vue 组件依赖,才能显示如下效果。

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

注意:如果使用的是element-ui,直接省略安装这一步,因为在element-ui 中,通过使用类属性 separator-class="el-icon-arrow-right" 就可以显示图标分隔符了。

2.1.4  安装步骤 

1.打开可视化面板,选择依赖--安装依赖--运行依赖

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

 2.  搜索 element-plus-icoons

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

 2.1.5  依赖安装完成后,接着进行全局引入

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

 由于是学习探索阶段,全局引入后,页面直接使用属性  separator-icon="arrowRight" ,分隔图标显示不出来。暂时先放这里。有那个大佬看到这里,知道的,还请留个言告知一二。


 2.1.6  通过查官网知道,element-plus 也可以通过 separator-class 来设置并显示图标分隔符。所以就直接使用这个了。

 separator-class="el-icon-arrow-right"

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

 2.1.7 效果

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

注意:由于所用到的组件是按需导入,所以每使用到一个新的组件,务必进行导入后方可生效

2.2  绘制卡片 (Card)区域内容

  • 每次在官网复制例子时,会有一些多余的类和属性。所以,首先应该做的,把结构理清后,需要删除一些不需要的类和属性。等需要用到的时候,再去添加回来。

  • 如下图

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

2.2.1 结构梳理完成,由于面包屑和卡片区域距离比较近,需要给面包屑设置一个距离,把卡片稍微向下挤一点。

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

 2.2.2 所以,那就需要把默认样式给覆盖掉。把自定义的样式,写在全局引用的样式文件当中,方便其他组件页面使用到该卡片组件时,也能生效。

  • 通过类名(el-breadcrumb)选择器,选择面包屑视图,设置它的下拉距,从而撑开与卡片视图之间的距离

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

  •  接着去除卡片视图阴影,也是通过(卡片视图)类选择器进行操作

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

 注意:每一个组件,都是一个类选择器

2.2.3 效果

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

 2.3 接着绘制卡片(Card)区域嵌套的 搜索区域(Input )、按钮(Button)、表单(Form)、分页(Pagination )

2.3.1  搜索区域(Input )、按钮(Button)

  • 搜索区域和按钮区域绘制

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

  • 由于搜索框占满了全屏,后边的按钮无法正常显示 

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

  •  接下来,需要使用到栅格系统,给搜索框设置固定的宽度,让它和按钮正常摆放在一行中。 
  1.  使用栅格系统中 el-row 代表每一行
  2.  el-col 代表着每一列,每一列占的宽度,使用 :span 来指定。
  3. 使用 :gutter 来指定,每一行中列之间的距离

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

 注意:在栅格系统中,每一行总共设置为24 小格子 

  • 代码修改 
<!-- 卡片视图区域 -->
  <el-card>
    <el-row :gutter="20">
      <el-col :span="8">
        <!-- 搜索与添加区域 -->
          <el-input placeholder="请输入内容" >
          <template #append>
            <el-icon><search /></el-icon>
          </template>
          </el-input>
      </el-col>
      <el-col :span="4">
        <el-button type="primary">添加用户</el-button>
      </el-col>
    </el-row>
  </el-card>
  • 页面效果 

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

 2.3.1  表单(Form)、分页(Pagination )

1.根据接口文档,动态请求数据填充表单

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

 2. 理清楚了请求路径和方法以及参数后,接下来,发起后台请求。

  • 首先定义基本数据结构。  

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

  • 接着,在页面创建的时候,调用created 生命周期函数,发起一次数据请求

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

 注意:1.由于get 会返回一个 promise 对象,所以为了简化promise 操作,需要添加 async 和 await 来优化本次的异步操作。

2. 使用到了 await后 ,该请求就会得到一个数组对象。紧接着,需要对该数据对象进行解构赋值。

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

  •   刷新页面,查看数据是不是已经有了

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

3. 接下来,把数据保存在 data 数据区定义的对象上面

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

 2.3.3  数据获取完成后,接下来渲染表单(Form)

  • 首先引入 table 组件以及 table-column 模板列

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

  •  接着,通过 :data 为表格指定 数据源

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

  •  通过 label 添加模板标题,
  •  通过 prop 指定当前 label 标题列绑定值

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

  • prop 属性的字段是根据文档提供来填写的 

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

  •  页面效果

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

2.3.4 由于列表中,有一项状态的值,需要渲染成开关,并且响应返回值是True或False。所以接下来,需要对数据进行改造。以及页面美化。

  • 通过 border 属性为表单添加边框线
  • 通过 stripe 属性,添加隔行变色功能

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

  •  希望把表单和搜索框以及按钮之间,有一定的距离。还是在全局样式表中,通过类选择器进行更改样式

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

  •  添加样式后,效果

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

  •  为表单添加索引列,只需要添加 type="index" 即可

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

  •  效果 

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

2.3.5 列表中状态改造

  • 把列表中的bool 值渲染成开关效果。如果该属性的值是true,显示为开。否则为关

实现思路:

通过作用域插槽来实现

1. 在状态模板内容中,放置一个 template 

2. 定义一个 v-slot="scope来接收一下数据。

3. 其中,这个 scope 身上有一个属性,就是scope.row 它就代表当前这一行数据

  • 引用 switch 开关组件

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

  • 效果

Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

总结:

1. 状态列,首先它是属于一个单元格,那也就肯定属于某一行。所以只要拿到状态列所在的行的那一行数据,就可以通过 . 出来状态的具体属性值。然后就可以按需来渲染状态的效果了。

3. 组件代码

3.1 全局样式表代码

/* 全局样式表 */
html,body,#app{
    /* 高度占100% */
    height: 100%; 
    /* margin重置为0 */
    margin: 0;
    /* padding重置为0 */
    padding: 0;
}
.el-breadcrumb{
    /* 设置下拉距 */
    margin-bottom: 15px;
    /* 重置字体大小 */
    font-size: 12px;
}
.el-card{
    box-shadow: 0 1px 1px rgba(0,0,0,0.15) !important;
}
.el-table{
    margin-top: 15px;
    font-size: 12px;
}

3.2 Users.vue 组件代码

<template>
  <div>
    <!-- 面包屑导航区域 -->

  <el-breadcrumb separator-class="el-icon-arrow-right">
    <el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
    <el-breadcrumb-item>用户管理</el-breadcrumb-item>
    <el-breadcrumb-item>用户列表</el-breadcrumb-item>
  </el-breadcrumb>
  <!-- 卡片视图区域 -->
  <el-card>
    <el-row :gutter="20">
      <el-col :span="8">
        <!-- 搜索与添加区域 -->
          <el-input placeholder="请输入内容" >
          <template #append>
            <el-icon><search /></el-icon>
          </template>
          </el-input>
      </el-col>
      <el-col :span="4">
        <el-button type="primary">添加用户</el-button>
      </el-col>
    </el-row>
    <!-- 用户列表区域  -->
    <el-table :data="userlist" border stripe>
      <el-table-column type="index"></el-table-column>
      <el-table-column label="姓名" prop="username"></el-table-column>
      <el-table-column label="邮箱" prop="email"></el-table-column>
      <el-table-column label="电话" prop="mobile"></el-table-column>
      <el-table-column label="角色" prop="role_name"></el-table-column>
      <el-table-column label="状态" prop="mg_state">
        <template v-slot="scope">
          <el-switch v-model="scope.row.mg_state" />
        </template>
      </el-table-column>
      <el-table-column label="操作"></el-table-column>
    </el-table>
  </el-card>
  </div>
</template>

<script >
export default {
  data () {
    return {
      // 获取用户列表的参数对象
      queryInfo: {
        query: '', // 查询参数
        pagenum: 1, // 当前页码
        pagesize: 2 // 每页显示条数
      },
      // 用户列表
      userlist: [],
      // 总数据条数
      total: 0
    }
  },
  created () {
    this.getUserList()
  },
  methods: {
    async getUserList () {
      const { data: res } = await this.$http.get('users', {
        params: this.queryInfo
      })
      if (res.meta.status !== 200) return this.$message.error('获取用户列表失败')
      this.userlist = res.data.users
      this.total = res.data.total
      console.log(res)
    }
  }
}
</script>

<style lang="less" scoped>

</style>

3.3 按需导入 element.js 代码 

import {
  ElButton,
  ElForm,
  ElFormItem,
  ElInput,
  ElRow,
  ElMessage,
  ElContainer,
  ElHeader,
  ElAside,
  ElMain,
  ElMenu,
  ElSubmenu,
  ElMenuItem,
  ElIcon,
  ElBreadcrumb,
  ElBreadcrumbItem,
  ElCard,
  ElCol,
  ElTableColumn,
  ElTable,
  ElSwitch
} from 'element-plus'

import {
  Location,
  Menu as IconMenu,
  Search
} from '@element-plus/icons'

import {
  ArrowRight
} from '@element-plus/icons-vue'

export default (app) => {
  app.use(ElButton)
  app.use(ElForm)
  app.use(ElFormItem)
  app.use(ElInput)
  app.use(ElRow)
  app.use(ElContainer)
  app.use(ElHeader)
  app.use(ElAside)
  app.use(ElMain)
  app.use(ElMenu)
  app.use(ElSubmenu)
  app.use(ElMenuItem)
  app.use(ElIcon)
  app.use(ElBreadcrumb)
  app.use(ElBreadcrumbItem)
  app.use(ElCard)
  app.use(ElCol)
  app.use(ElTable)
  app.use(ElTableColumn)
  app.use(ElSwitch)
  app.component('location', Location)
  app.component('iconMenu', IconMenu)
  app.component('arrowRight', ArrowRight)
  app.component('search', Search)
  app.config.globalProperties.$message = ElMessage
}

以上出自:

【黑马程序员】前端开发之Vue项目实战_Element-UI【配套源码+笔记】_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1x64y1S7S7?p=43

【黑马程序员】前端开发之Vue项目实战_Element-UI【配套源码+笔记】_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1x64y1S7S7?p=44【黑马程序员】前端开发之Vue项目实战_Element-UI【配套源码+笔记】_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1x64y1S7S7?p=45

【黑马程序员】前端开发之Vue项目实战_Element-UI【配套源码+笔记】_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1x64y1S7S7?p=46&spm_id_from=pageDriver

【黑马程序员】前端开发之Vue项目实战_Element-UI【配套源码+笔记】_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1x64y1S7S7?p=47&spm_id_from=pageDriver文章来源地址https://www.toymoban.com/news/detail-405655.html

到了这里,关于Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3 element-plus 实现图片预览

    element-plus下有这么一个组件 el-image-viewer /,但是这个组件是没写在文档上面的,像普通组件一样使用即可 可以通过点击按钮实现图片预览,而非el-image组件只能通过点击图片实现预览 2.1封装组件 2.3组件使用 在需要使用的地方引入,然后使用即可,这不是重点,每个人使用的

    2024年02月15日
    浏览(59)
  • Vue3+element-plus实现后台管理系统

     环境:node.js软件 、Vs code、vite、elemnt-plus、windicss(样式框架)     1、首先,使用npm 命令构建项目( vscode安装的插件 vscode中文显示插件   2、高亮提示插件volar   3、vue 3 sni 代码提示) 快速上手 | Vue.js    a. npm -v 查看node.js 版本    b.  npm  config get registry   查看注册镜像是

    2024年02月09日
    浏览(55)
  • (二) Vue3 + Element-Plus 实现动态菜单栏

    系列介绍:Vue3 + Vite + TS 从零开始学习 项目搭建:(一) Vue3 + Vite + TS 项目搭建 实现动态菜单栏:(二) Vue3 + Element-Plus 实现动态菜单栏 实现动态面包屑:(三) Vue3 + Element-Plus 实现动态面包屑 实现动态标签页:(四) Vue3 + Element-Plus 实现动态标签页 实现动态主题色切换(demo):(五)

    2023年04月23日
    浏览(60)
  • Vue3 element-plus表单嵌套表格实现动态表单验证

    部分效果图如下: 另表格有添加和删除按钮,点击提交进行表单验证。 首先data格式必须是对象包裹数组 给表单绑定form数据 表格绑定tableData数据 给表单项增加验证规则 rules对应data rules对象,prop对应表单字段(注意是表格里每一行对应的字段 forms.tableData[下标].key) prop的关

    2024年02月14日
    浏览(44)
  • Vue3使用element-plus实现弹窗效果-demo

    2024年02月13日
    浏览(53)
  • vue3+element-plus+el-image实现点击按钮预览大图

    需求:点击某个按钮实现el-image中预览大图的效果 官方文档:以下是官方的写法,并不能达到我们的要求,官方实现的功能是点击图片达到预览大图的效果。如果你的按钮就是图片,也可以达到目前的功能 el-image-viewer组件是element官方的组件,只是文档中没有写出来,这个组

    2024年02月12日
    浏览(58)
  • Vue3.2 + TypeScript + Pinia + Vite4 + Element-Plus + 微前端(qiankun) 后台管理系统模板(已开源---显示项目页面截图)

    Wocwin-Admin,是基于 Vue3.2、TypeScript、Vite、Pinia、Element-Plus、Qiankun(微前端) 开源的一套后台管理模板;同时集成了微前端 qiankun也可以当做一个子应用。项目中组件页面使用了Element-plus 二次封装 t-ui-plus 组件,目前已新增fastmock接口。 Link:https://wocwin.github.io/wocwin-admin/ 账号:

    2024年02月08日
    浏览(82)
  • vue3+element-plus 通过v-infinite实现下拉滚动无限加载

    v-infinite官网 v-infinite-scroll无限滚动组件使用详解  官网给到的基础案例: 自己写了一个简单的demo: 当使用v-infinite时,控制台会报错:  原因: 官方上的Issues解释是需要nextTick()之后再去显示 解决方法是组件挂载完成再去显示el-select组件 所以在上面demo中select组件加了v-if,

    2024年02月09日
    浏览(52)
  • vue3+element-plus实现表格多选功能(可以清除选项或分页保留选项)

    如图所示,在实际开发中,数据量大的表格基本都添加上了分页功能,每个页面请求的数据回交换更新,第一页的选中效果在跳转至第二页后,如果没有做相关处理,选中项会被清空,具体解决方法如下 在需要处理的表格标签中加上 :row-key=\\\"getRowKeys\\\" 以及 @selection-change=“ha

    2024年02月12日
    浏览(62)
  • vue3 vue.config.js配置Element-plus组件和Icon图标实现按需自动引入

    打包时,报警告,提示包太大会影响性能 在页面直接使用,直接使用 SVG 图标,当做一般的 svg 使用 icon使用时需要用以下两种方式方式: 如果用在el-button里面的icon属性上使用,用SVG方式无效,还是需要引入再使用(不知道有没有其他方式) 注意: 使用 :icon=\\\"Edit\\\" 则icon的大

    2024年02月06日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包