uniapp 表格组件,冻结首行首列

  • 模板
  • js
  • css 部分样式需要放到 `App.vue` 里面才能生效
  • 属性与方法
    • 属性
      • 列定义
      • 按钮
    • 方法
      • 行样式
      • 选择事件
      • 翻页事件
  • 使用组件

uni-table 的封装
优点:自带样式,自带多选等功能
缺点:
1. 不能对 checkboxvalue 进行赋值,选出来的选中行的 index
2. 不能对 checkbox 在加载完表格后默认选中
3. checkbox 不能设置默认禁用

模板


<template><!-- style:设置表格高度 表格内容区高度为 height-60,60是分页组件的高度--><view class="x-table-box"  :style="{height:height}"><!-- 表格 --><uni-table @selection-change="chkchange" ref="table" :type="chk?'selection':''" class="x-table" stripe emptyText="暂无更多数据"><!-- 表头 --><uni-tr class="thead"><uni-thv-if="cols"v-for="x,i in Object.keys(cols)" :width="cols[x].width||120":class="{left0:!chk&&i==0,left5:chk&&i==0}">{{cols[x].title || x}}</uni-th><!-- 按钮列 --><uni-th v-if="btns" :width="btnswidth">操作</uni-th></uni-tr><!-- 内容 --><uni-tr  v-for="x in list"   :style="trstyle(x)"><uni-tdv-if="cols"v-for="c,i in Object.keys(cols)" :width="cols[c].width||120":class="{left0:!chk&&i==0,left5:chk&&i==0}"v-html="fmt(cols[c].fmt,x[c],x)":style="trstyle(x)"></uni-td><!-- 按钮列 --><uni-td  :style="trstyle(x)" class="x-table-btns" v-if="btns" :width="btnswidth"><!-- 按钮 --><button @click="b.click(x)" :disabled="b.disabled?b.disabled(x):false" :class="b.class" :type="b.type" v-for="b in btns">{{b.text}}</button></uni-td></uni-tr></uni-table><!-- 分页 --><view class="uni-pagination-box"><uni-pagination show-icon :page-size="pagesize" :current="pageindex" :total="count" @change="fpage" /></view></view>
</template>

js

export default {name: "x-table",props: {/*** 数据列表* */list: {type: Array,default: []},/*** 是否开启多选* 默认否* */chk: {type: Boolean,default: false},/*** 列定义* */cols:{type:Object,default:null},/*** 按钮列宽度* */btnswidth:{type:Number,default:100},/*** 按钮列表* 请根据按钮数量设置 按钮列宽度* */btns:{type: Array,default: []},/*** 行样式* 可以设置背景色或文字颜色来标记不同的数据状态* */trstyle:{type:Function,default:function(){}},/*** 多选选择时触发* */chkchange:{type:Function,default:function(){}},/*** 设置表格高度 css* */height:{type:String,default:'800px'},/*** 每页长度* */pagesize:{type:Number,default:20},/*** 起始页* */pageindex:{type:Number,default:1},/*** 查询数据总量* */count:{type:Number,default:0},/*** 翻页事件* */topage:{type:Function,default:function(){}}},data() {return {};},methods:{/*** 翻页事件* current=翻页后的页码* */fpage(e){console.log(e)this.topage(e.current);},/*** 单元格数据格式化* */fmt(f,v,r){if(f){return f(v,r);}return v;}}}

css 部分样式需要放到 App.vue 里面才能生效

.x-table-btns button{height: 24px;line-height: 24px;font-size: 14px;display: inline-block;margin-right: 2px;}.x-table-box {width: 100%;background-color: #fff;height: 90%;overflow: auto;position: absolute;}.x-table{border-collapse: collapse;display: inline-block;overflow: auto;width: 100%;position: absolute;}.uni-table-scroll{height:calc(100% - 60px);}.uni-pagination-box{position: absolute;bottom: 0px;left: 0px;width: 100%;padding: 15px;box-sizing: border-box;}.x-table .thead {position: sticky;top: 0;z-index: 9;}.x-table th,.x-table td {box-sizing: border-box;background-color: #fff;}.x-table .checkbox {position: sticky;left: 0;z-index: 8;overflow: hidden;}.x-table .checkbox::before{content: "";position: absolute;right: -1px;top: -10px;height: 200%;width: 0.5px;box-shadow:0px 0px 5px #000;}.x-table tr {display: flex;}.x-table tr:hover,.x-table tr:hover td{background-color:#eee;}@media (min-width:768px) {.x-table-box {max-width: calc(100vw - 200px) !important;}.x-table .left5 {position: sticky;left:36px;border-right: 1px solid #eee;overflow: hidden;}.x-table .left5::before{content: "";position: absolute;right: -1px;top: -10px;height: 200%;width: 0.5px;box-shadow:0px 0px 5px #000;}}@media (max-width:768px){.x-table tbody{display: inline-block;width: 100%;}.x-table tr{flex-direction: column;background-color: #fff;border-bottom: #ccc;width: 100%;margin-bottom: 10px;}.x-table .thead{display: none;}.x-table th,.x-table td {border:none;width: 100%;}.x-table-btns{text-align: right;}.x-table-btns button{height:30px;line-height:30px;font-size: 14px;display: inline-block;margin-right:10px;}}

position: sticky; 与上级元素 position: absolute; 可做到冻结

属性与方法

属性

名称 类型 描述
list Array 数据列表
cols Object 列定义,详细信息见下面列定义
btns Array 按钮列表,请根据按钮数量设置—按钮列宽度,详细信息见下面按钮
btnswidth Number 按钮列宽度
chk Boolean 是否开启多选 默认否
height String 设置表格高度 css
pagesize Number 每页长度 默认20
pageindex Number 起始页 默认1
count Number 查询数据总量

列定义

cols:{//字段名name:{title:"姓名",//表头width:100//列宽},//字段名phone:{title:"手机号",//表头width:150,//列宽/*** 格式化数据* */fmt(v,r){return '+86 '+r.phone;}},
}

按钮


btns:[{text:"编辑",//按钮文字class:"btn1",//附加样式type:"primary",//uniapp提供的按钮类型 蓝色primary/红色warn//设置按钮状态,返回true按钮可用,false按钮不可用disabled(r){// r=当前行数据return r.phone.indexOf('15')>-1;},//按钮单击事件click(r){// r=当前行数据}}
]

方法

名称 类型 描述
trstyle Function 行样式,可以设置背景色或文字颜色来标记不同的数据状态,详细信息见下面行样式
chkchange Function 选择事件,详细信息见下面选择事件
topage Function 翻页事件,详细信息见下面翻页事件

行样式

/**
* 判断数据状态,给行加上样式
**/
tablestyle(r){// r=当前行数据var style={style.background="#ff9999";};if(r.phone>17000000000){style.background="#ff66ff";}return style;
},

选择事件

chkchange(v){// v.detail.index 当前选中的所有行console.log(v)
},

翻页事件

topage(e){//e=当前页this.pageindex=e;//查询数据this.getdata();
},

使用组件

<x-table :chkchange="chkchange" :trstyle="tablestyle" :btnswidth="200" :btns="btns" :list="table" :cols="cols" chk="true"height="800px":key="phone":pagesize="pagesize":count="count"chkchange="chkchange":topage="topage"
></x-table>

uniapp 表格组件,冻结首行首列相关推荐

  1. 关于VS2008的MFCGridCtrl的使用方法-冻结首行首列

    1.新建基于Dilaog的MFC工程GridCtrlTest 2.从CodeProject上(http://www.codeproject.com/KB/miscctrl/gridctrl.aspx) ...

  2. js实现表格首行首列固定滑动

    js+css实现table首行首列的冻结效果. 这个方案是把表格分为4块,首行首列不可滑动,利用onscroll 动态根据内容设置冻结首行首列内容. html <div id="lef ...

  3. HTML 锁定表格首行首列、拖拽表格列宽

    摘自:http://s.yanghao.org/program/viewdetail.php?i=61717 因为与自己的实际情况有些不同,简单的改造了下...如果有版权问题,请留言... 锁定Tab ...

  4. CSS笔试题: 实现表格首行首列固定和自适应窗口

    今天校招笔试题要求实现一个首行首列固定,宽度自适应窗口变化,但窗口缩小到一定宽度不能再缩小,出现水平滚动条- 当时我写错了,我一时想不起改用什么办法首行首列固定,用绝对定位,父亲相对定位-这样会有很多 ...

  5. html表格固定首行首列

    html表格固定首行首列,适用于标准表格,格式如下: <div><table><tbody><tr><th></th></ ...

  6. 【Axure视频教程】固定中继器表格首行首列

    今天教大家在Axure里如何制作固定中继器表格首行首列的原型模板,包括固定首行(标题行)和首列.固定首行(标题行)和前两列两个案例,因为是用中继器表格制作的,所以使用也非常方便,我们只需要在中继器表格 ...

  7. table固定列html5,css+js简单实现table固定首行首列

    说明: 使用easyui等都可以实现table固定首行首列的功能. 但仅仅只需要这一个功能,完全可以用css+js简单实现而不用引入更多工具. 网上找到很多的思路,自己对其中比较简单的一个进行了整理. ...

  8. css+js简单实现table固定首行首列

    说明: 使用easyui等都可以实现table固定首行首列的功能. 但仅仅只需要这一个功能,完全可以用css+js简单实现而不用引入更多工具. 网上找到很多的思路,自己对其中比较简单的一个进行了整理. ...

  9. axure中怎么做出固定首行_办公软件操作技巧078:如何在excel表格中冻结行与列...

    在日常工作中,有时我们编辑的excel表格会比较大,数据内容有很多行和列,当我们拖动滚动条找到了离表头比较远的数据行或列的内容时,又看不到行或列表头标题信息了,这时再去处理数据信息就会感觉很不方便,如 ...

  10. 手机移动端加载更多(表格首行首列固定vue + vant完整版)

    直接看效果图和实现的代码 <van-list:offset="60"v-model="isLoading":finished="finished ...

最新文章

  1. Silverlight学习笔记十七BingMap(六)之获取图片系统的图片信息ImageryService的应用...
  2. 基于OpenCV的实用图像处理操作
  3. socket阻塞与IO多路复用
  4. Apache+Tomcat +mod_proxy集群负载均衡及session
  5. ctr 平滑_CTR平滑的原理,包懂!!!附代码
  6. 《软件测试》第五次作业
  7. Windows 11的19个新功能
  8. iTerm2 快捷键收集
  9. Python :h5py 如何对dataset进行重新赋值?
  10. 【限时福利】COACKA免费试听@Days China,干货在这里!
  11. SPSS论证有这样的问题或错误?【SPSS 068期】
  12. Android电视远程桌面,【当贝市场】教你使用小米电视远程控制Windows桌面
  13. 魔方游戏程序设计制作(C语言)
  14. 简述什么是SQL注入,写出简单的SQL注入语句。
  15. 计算机sci论文怎么写,计算机学院陈端兵教授分享SCI论文写作方法
  16. html中点击按钮闪现,vue使用v-if v-show页面闪烁,div闪现的解决方法
  17. 情人节快到了,我部署了一套情侣头像小程序,并过审了
  18. ospf多区域原理和配置
  19. Ubuntu有线网络无法连接—有线网络连接图标变为灰色,无法点击
  20. **matlab中 isempty ( ) 函数用法**

热门文章

  1. 计算机英语第一张思维导图,英语语法快速入门1-简单句(附思维导图) - 小黑电脑...
  2. 新零售业背景下实体店的经营战略
  3. 【转】欧姆龙FINS通讯命令实例详解
  4. 如何制作印章水印?教你在线制作电子印章水印
  5. 生成费氏数列 -思维训练for
  6. 简单的加盐加密登录处理
  7. 手机版浏览器f12_没有广告的浏览器??
  8. 微信小程序-点滴记账
  9. 基于单片机的心率监测系统设计(#0403)
  10. Windows 9预览版今秋发布 正式版明年推出