Table 表格 + Pagination 分页

文章详细介绍了如何使用ElementUI的el-table组件,包括数据加载动画、表格数据绑定、边框设置、列宽适应、行和单元格样式自定义、表头样式以及默认排序等特性。同时展示了具体的HTML代码示例,用于渲染带有排序、溢出提示和自定义操作列的表格,并引入了分页组件Pagination进行数据分页显示。
摘要由CSDN通过智能技术生成
<el-table>属性
v-loading				加载动画
data					显示的数据
border					是否带有纵向边框
fit						列的宽度是否自撑开
highlight-current-row	是否要高亮当前行
row-style				行的 style 的回调方法,也可以使用一个固定的 Object 为所有行设置一样的 Style。
cell-style				单元格的 style 的回调方法,也可以使用一个固定的 Object 为所有单元格设置一样的 Style。
header-cell-style		表头单元格的 style 的回调方法,也可以使用一个固定的 Object 为所有表头单元格设置一样的 Style。
default-sort			默认的排序列的 prop 和顺序。它的prop属性指定默认的排序的列,order指定默认排序的顺序
<el-table-column>属性
show-overflow-tooltip	当内容过长被隐藏时显示 tooltip
sortable				对应列是否可以排序
prop					对应列内容的字段名
width					对应列的宽度
min-width				对应列的最小宽度
label					显示的标题
align					对齐方式
<el-table 
	v-loading="listLoading" 
	:data="list" 
	border 
	fit 
	highlight-current-row 
	:row-style="{height: '38px'}"
	:cell-style="{padding: '0'}" 
	:header-cell-style="{backgroundColor:'#409EFF',color:'#fff',textAlign:'center',height:'36px',padding:'0'}"  
	style="width: 100%"
	:default-sort="{prop: 'id', order: 'descending'}">
	<el-table-column align="center" label="ID" width="80" sortable prop="id">
		<template slot-scope="scope">
			<span>{{ scope.row.id }}</span>
		</template>
	</el-table-column>
	<el-table-column align="center" label="充值包名" show-overflow-tooltip>
		<template slot-scope="scope">
			<span>{{ scope.row.name }}</span>
		</template>
	</el-table-column>
	<el-table-column align="center" label="展示名" show-overflow-tooltip>
		<template slot-scope="scope">
			<span>{{ scope.row.showname }}</span>
		</template>
	</el-table-column>
	<el-table-column align="center" label="到账金额(元)" show-overflow-tooltip min-width="100">
		<template slot-scope="scope">
			<span>{{ scope.row.price }}</span>
		</template>
	</el-table-column>
	<el-table-column align="center" label="售价(元)" show-overflow-tooltip>
		<template slot-scope="scope">
			<span>{{ scope.row.sellprice }}</span>
		</template>
	</el-table-column>
	<el-table-column align="center" label="类型" show-overflow-tooltip min-width="100">
		<template slot-scope="scope">
			<el-tag v-show="scope.row.type===1" type="success">普通充值包</el-tag>
			<el-tag v-show="scope.row.type===2" type="warning">活动充值包</el-tag>
			<el-tag v-show="scope.row.type===3" type="danger">首充充值包</el-tag>
			<el-tag v-show="scope.row.type===5" type="">分期到账充值包</el-tag>
		</template>
	</el-table-column>
	<el-table-column align="center" label="充值包状态">
		<template slot-scope="scope">
			<el-tag v-show="scope.row.status==5" type="success">正常</el-tag>
			<el-tag v-show="scope.row.status==6" type="danger">禁用</el-tag>
		</template>
	</el-table-column>
	<el-table-column align="center" label="代理">
		<template slot-scope="scope">
			<span>{{ scope.row.aname }}</span>
		</template>
	</el-table-column>
	<el-table-column align="center" label="子代理">
		<template slot-scope="scope">
			<span>{{ scope.row.accname }}</span>
		</template>
	</el-table-column>
	<el-table-column align="center" label="创建时间" min-width="100">
		<template slot-scope="scope">
			<span>{{ scope.row.addtime | parseTime('{y}-{m}-{d} {h}:{i}')}}</span>
		</template>
	</el-table-column>
	<el-table-column align="center" label="排序" sortable>
		<template slot-scope="scope">
			<span>{{ scope.row.sort }}</span>
		</template>
	</el-table-column>
	
	

	<el-table-column align="center" label="操作" min-width="200" fixed="right">
		<template slot-scope="scope">
			<el-button type="primary" size="mini" :disabled="scope.row.status==5">启用</el-button>
			<el-button type="primary" size="mini" :disabled="scope.row.status==6">禁用</el-button>
			<el-button type="primary" size="mini">修改排序</el-button>
		</template>
	</el-table-column>
</el-table>

<!-- 分页 -->
<pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
import Pagination from '@/components/Pagination'
components: {
	Pagination,
},
data() {
	return {
		tabHeader: tabHeader,
		listLoading: true,
		list: [],
		total: 0,
		listQuery: {
			page: 1,
			limit: 10,
			status: 5, // 正常
			aid: null, // 代理id
			accid: null, // 子代理id
		},
	}
},
created() {
	// 自行写接口请求进行赋值
},

Pagination分页

<template>
  <div :class="{'hidden':hidden}" class="pagination-container">
    <el-pagination
      :background="background"
      :current-page.sync="currentPage"
      :page-size.sync="pageSize"
      :layout="layout"
      :page-sizes="pageSizes"
      :total="total"
      v-bind="$attrs"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
    />
  </div>
</template>

<script>
import { scrollTo } from '@/utils/scroll-to'

export default {
  name: 'Pagination',
  props: {
    total: {
      required: false,
      type: Number
    },
    page: {
      type: Number,
      default: 1
    },
    limit: {
      type: Number,
      default: 20
    },
    pageSizes: {
      type: Array,
      default() {
        return [10, 15, 20, 30, 50]
      }
    },
    layout: {
      type: String,
      default: 'total, sizes, prev, pager, next, jumper'
    },
    background: {
      type: Boolean,
      default: true
    },
    autoScroll: {
      type: Boolean,
      default: true
    },
    hidden: {
      type: Boolean,
      default: false
    }
  },
  computed: {
    currentPage: {
      get() {
        return this.page
      },
      set(val) {
        this.$emit('update:page', val)
      }
    },
    pageSize: {
      get() {
        return this.limit
      },
      set(val) {
        this.$emit('update:limit', val)
      }
    }
  },
  methods: {
    handleSizeChange(val) {
      this.$emit('pagination', { page: this.currentPage, limit: val })
      if (this.autoScroll) {
        scrollTo(0, 800)
      }
    },
    handleCurrentChange(val) {
      this.$emit('pagination', { page: val, limit: this.pageSize })
      if (this.autoScroll) {
        scrollTo(0, 800)
      }
    }
  }
}
</script>

<style scoped>
.pagination-container {
  background: #fff;
  padding: 32px 16px;
}
.pagination-container.hidden {
  display: none;
}
</style>

scroll-to.js

Math.easeInOutQuad = function(t, b, c, d) {
	t /= d / 2
	if (t < 1) {
		return c / 2 * t * t + b
	}
	t--
	return -c / 2 * (t * (t - 2) - 1) + b
}

// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts
var requestAnimFrame = (function() {
	return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window
		.mozRequestAnimationFrame || function(callback) {
			window.setTimeout(callback, 1000 / 60)
		}
})()

/**
 * Because it's so fucking difficult to detect the scrolling element, just move them all
 * @param {number} amount
 */
function move(amount) {
	document.documentElement.scrollTop = amount
	document.body.parentNode.scrollTop = amount
	document.body.scrollTop = amount
}

function position() {
	return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop
}

/**
 * @param {number} to
 * @param {number} duration
 * @param {Function} callback
 */
export function scrollTo(to, duration, callback) {
	const start = position()
	const change = to - start
	const increment = 20
	let currentTime = 0
	duration = (typeof(duration) === 'undefined') ? 500 : duration
	var animateScroll = function() {
		// increment the time
		currentTime += increment
		// find the value with the quadratic in-out easing function
		var val = Math.easeInOutQuad(currentTime, start, change, duration)
		// move the document.body
		move(val)
		// do the animation unless its over
		if (currentTime < duration) {
			requestAnimFrame(animateScroll)
		} else {
			if (callback && typeof(callback) === 'function') {
				// the animation is done so lets callback
				callback()
			}
		}
	}
	animateScroll()
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值