一个常见的elementUI表格,从后端获取数据并分页及查询

这个功能是比较常见的,初入门,把几个变量和流程搞清楚。

代码注释很清楚,方便以后优化。

前端主要代码

<template>
  <div class="page-container">
    <!--查询工具栏-->
    <div class="toolbar" style="float:left;">
        <el-form :inline="true" :model="appFilters" :size="size">
            <el-form-item>
                <el-input v-model="appFilters.label" placeholder="App名称"></el-input>
            </el-form-item>
            <el-form-item>
                <kt-button icon="fa fa-search" :label="$t(‘action.search‘)" type="primary" @click="listApp(null)"/>
            </el-form-item>
        </el-form>
    </div>
    <!--内容表格-->
    <el-table
      :data="appPageResult.content"
      :highlight-current-row="highlightCurrentRow"
      v-loading="loading"
      :element-loading-text="$t(‘action.loading‘)"
      :size="size"
      style="width:100%;">
        <el-table-column
          v-for="column in appColumns"
          header-align="center"
          align="center"
          :prop="column.prop"
          :label="column.label"
          :width="column.width"
          :min-width="column.minWidth"
          :fixed="column.fixed"
          :key="column.pro"
          :type="column.type"
          :formatter="column.formatter"
          :sortable="column.sortable==null?true:column.sortable">
        </el-table-column>
        <el-table-column
          :lable="$t(‘action.operation‘)"
          width="185"
          fixed="right"
          header-align="center"
          align="center">
            <template slot-scope="scope">
                <kt-button
                  :label="$t(‘action.enter‘)"
                  :size="size"
                  type="primary"
                  @click="handleEnter(scope.row)" />
            </template>
        </el-table-column>
    </el-table>
    <!--分页-->
    <div class="toolbar" style="padding:10px;">
        <el-pagination
          layout="total, prev, pager, next, jumper"
          @current-change="refreshAppPageRequest"
          :current-page="appPageRequest.pageNum"
          :page-size="appPageRequest.pageSize"
          :total="appPageRequest.totalSize"
          style="float: right;">
        </el-pagination>
    </div>
  </div>
</template>

<script>
    // 载入按钮组件及时间格式化函数
    import KtButton from "@/views/core/KtButton"
    import { format } from "@/utils/datetime"
    export default {
        components:{
                KtButton
        },
        data() {
            return {
                // 定义一个查询对象,传到后端后,需要正确解析label。
                appFilters: {
                    label: ‘‘
                },
                size: ‘mini‘,
                align: ‘left‘,
                highlightCurrentRow: true,
                // 此处的columns,需要与后端返回的内容列对应,否则为空
                appColumns: [
                    {prop:"id", label:"ID", minWidth:50},
                    {prop:"label", label:"App应用名", minWidth:100},
                    {prop:"createUser", label:"创建人", minWidth:100},
                    {prop:"gitBranch", label:"部署分支", minWidth:80},
                    {prop:"jenkinsJob", label:"JenkinsJob", minWidth:80},
                    {prop:"deployVersion", label:"发布单", minWidth:120},
                    {prop:"updateTime", label:"更新时间", minWidth:120, formatter:this.dateFormat}
                ],
                // 预置一个空的表格内容对象
                appPageResult: {},
                // 预置一个请求第1页的页请请求对象
                appPageRequest: {
                    pageNum: 1
                },
                loading: false,
            }
        },
        methods: {
            // 获取分页数据
            listApp: function (data) {
                // 在获取到数据之前,显示加载中状态
                this.loading = true
                // 如果是查询数据,则传递给listApp的是null,这个时机,可以获取查询的参数,并重新请求第1页。
                // 否则, 参数为分页的对象
                if (data === null) {
                    this.appPageRequest.pageNum = 1
                    this.appPageRequest.params = [{name:‘label‘, value:this.appFilters.label}]
                } else {
                    this.appPageRequest = data
                }

                // 前端只需要初始化一个pageNum, 其它分页数据由后端获取
                this.$api.app.listApp(this.appPageRequest).then((res) => {
                    this.appPageResult = res.data
                    this.appPageRequest.pageSize = res.data.pageSize
                    this.appPageRequest.totalSize = res.data.totalSize
                })
                // 在获取到数据之后,取消加截中的状态
                this.loading = false
            },
            // 刷新分页数据, 触发分页时,只需要更新pageNum
            refreshAppPageRequest: function(pageNum) {
                this.appPageRequest.pageNum = pageNum
                this.listApp(this.appPageRequest)
            },
            // 进入具体应用, 未完(这里需要一个操作,就是动态将此路由加入router,否则,不支持切换主页tab的操作。)
            handleEnter: function(row) {
                this.$router.push({ name: ‘AppDetail‘, params: {app_id: row.id }})
            },
            // 时间格式化
              dateFormat: function (row, column, cellValue, index){
                  return format(row[column.property])
              }
        },
        mounted() {
            // 在网页挂载时,先载入第一页数据.appPageRequest此时只有一个pageNum为1的参数
            this.listApp(this.appPageRequest)
        }
    }
</script>

<style scoped>

</style>

后端mock数据

export function listApp(params) {
    let listData = {
        ‘code‘: 200,
        ‘msg‘: null,
        ‘data‘: {}
    }
    let pageNum = 1
    let pageSize = 8
    if (params !== null) {
        // pageNum = params.pageNum
        // pageSize = params.pageSize
    }
    let content = this.getAppContent(pageNum, pageSize)
    listData.data.pageNum = pageNum
    listData.data.pageSize = pageSize
    listData.data.totalSize = 50
    listData.data.content = content
    return {
        url: ‘app/listApp‘,
        type: ‘post‘,
        data: listData
    }
}

export function getAppContent(pageNum, pageSize) {
    let content = []
    for (let i = 0; i < pageSize; i++) {
        let obj = {}
        let index = ((pageNum - 1) * pageSize) + i + 1
        obj.id = index
        obj.createUser = ‘createUser ‘ + index
        obj.label = ‘App应用 ‘ + index
        obj.gitBranch = ‘gitBranch ‘ + index
        obj.jenkinsJob = ‘jenkinsJob ‘ + index
        obj.sort = 0
        obj.name = ‘app‘ + index
        obj.deployVersion = ‘deployVersion ‘ + index
        if (i % 2 == 0) {

        }
        obj.createBy = ‘admin‘
        obj.createTime = ‘2018-08-14 11:11:11‘
        obj.updateBy = ‘admin‘
        obj.updateTime = ‘2018-09-14 12:12:12‘
        content.push(obj)
    }
    return content
}

原文地址:https://www.cnblogs.com/aguncn/p/12350648.html

时间: 2024-10-11 00:18:05

一个常见的elementUI表格,从后端获取数据并分页及查询的相关文章

前后端数据处理+数据展示分页

ContentType数据编码格式(前后端数据传输) Urlencoded格式(form表单测试) 对应的数据格式是:name=Jason&password=555 后端获取数据:request.POST 前端使用form表单传输文件 后端显示格式还是key=value对应形式,只显示传输的文件名 form-data(enctype="multipart/form-data") Form表单传输文件编码格式 后端获取文件格式数据:request.FILES 后端获取普通键值对数

PGET,一个简单、易用的并行获取数据框架

使用场景 当我们的服务收到一个请求后,需要大量调用下游服务获取业务数据,然后对数据进行转换.计算后,响应给请求方. 如果我们采用串行获取下游数据,势必会增加响应时长,降低接口的qps.如果是并行获取下游数据,则是不错的. 最直接想到的并行获取方法,无非是将一个个获取数据的方法封装成一个个task,然后放到线程池里执行.但这种没经过设计的使用方式,易用性很低,可复用性也很低. 经本人在实际的业务系统中,多次思考与设计.终于设计出当前这个框架. 特点:绝对的简单.绝对的易用. 相关概念 BizDat

Vue导出模板、使用前端js办法导出表格数据、导入表格前端读取表格数据、导入表格发送后端读取数据

以下是几种用的较多的函数方法,可以参考使用. // 導出1 myExport() { // post請求文件寫法1 const url = 'http://XXXX/XXXX/XXXX/XXXX' const formData = new FormData() formData.append('file', '123') this.axios({ method: 'post', url: url, data: formData, responseType: 'blob' // 表明返回服務器返回

Ajax获取数据后append追加到表格内出现格式混乱的错误

Ajax获取数据后append追加到表格内出现追加的数据与表格风格不同的错误: $("#courierTable").append("<tr style='text-align: center'> class='tab-content'") $("#courierTable").append("<tr style='text-align: center'> class='tab-content'") $

从SQLite获取数据完成一个产品信息展示

在ios实际开发当中,我们常常用到Core Data做为数据储存首选.但在处理一些大量复杂的数据值且数据之间相互关联的时候,这就不得不使用关系型数据库来实现.例如一个导航程序,自身应该包含大量的地图自身数据并且数据需要在app启动的时候就开始读取加载.而且数据本身变动不是特别频繁.重复向服务器发送请求获取信息是一件十分浪费的事情.因此我们可以用一个本地数据文件来直接配置.做为轻量级关系型数据库的sqlite是ios开发首选.而xcode本身包含了sqlite库,因此在ios使用的时候不需要额外配

用Excel获取数据——不仅仅只是打开表格

引言:看到标题,你是否有些困惑?在Excel上具备数据获取的能力是指什么?难道不是把csv格式的表格和Excel格式的表格打开就好了吗?然而并非这样.本文选自<数据化运营速成手册>. 其实标题中有两层意思:第一层意思是在一些数据库管理不那么严格的中小型企业,可以通过Excel中的ODBC数据接口,与数据库或者数据仓库建立连接,直接快速取数,提高工作效率:第二层意思是Excel 2016中有相当强大的数据获取工具,即便不能从数据库直接获取,也能从多个本地的数据表中将数据抽取.整理和转化,并做到实

nginx代理,tomcat部署服务器,后端获取客户端真实ip

1.环境部署说明 后端部署在tomcat服务器上,前端用nginx做代理访问 tomcat部署目录 nginx配置: upstream wcfront{     server  localhost:8991;//后台接口 } server {     listen       8998;//h5访问接口     server_name  192.168.2.37;     charset utf-8;     proxy_set_header Host $host:$server_port;  

通过后台SQL获取分页数据,在使用VUE-Element-Table 表格选择多行数据时,怎样在

在项目中,分页是由后台SQL获取.在table表格多选时,容易把选中的值传给后台,但是怎样在返回上一页时怎样记住表格多选的数据?? 当返回第二页时,应该把第一条数据再选中,保持选择状态. 具体思路:在页面不重新刷新加载时,使用二维数组保存el-table表格多选结果.其中一维下标记录页码,二维下标记录选中的数据. 说明:tableLoad()函数,this.tableData---通过Ajax获取本页码的列表数据 说明:handleSelectionChange()----选择变化时触发的事件方

python爬虫的一个常见简单js反爬

python爬虫的一个常见简单js反爬 我们在写爬虫是遇到最多的应该就是js反爬了,今天分享一个比较常见的js反爬,这个我已经在多个网站上见到过了. 我把js反爬分为参数由js加密生成和js生成cookie等来操作浏览器这两部分,今天说的是第二种情况. 目标网站 列表页url:http://www.hnrexian.com/archives/category/jk. 正常网站我们请求url会返回给我们网页数据内容等,看看这个网站返回给我们的是什么呢? 我们把相应中返回的js代码格式化一下,方便查