今天来实现个跨行跨列多列表格。

如图,这是个列数不确定,有的单元格还要跨行跨列的复杂表格。

这里暂时最多支持4列,列数再多就放不下了。

实现原理

实现原理比较简单,通过多个嵌套的循环将数据取出。

上面的例子中,最外层一共有4行:基础工资,加班工资,岗位工资,合计。第一层数据的 name 展示为第一列,如果每组数据有 children,取出 children 展示为第二列… 如果 children 长度为0,则直接显示工资数额。

这样一层一层把数据剖开,就做到了上面的效果。

数据格式

模拟的数据如下,如果是最后一层 value 值为工资数额,否则值为 null。嵌套的数据在 children 中。

// 模拟的数据
export default {status: 200,code: "ok",data: [{id: 'table001',name: '基础工资',value: null,children: [{id: 'table0011',name: '基本工资',value: 3000.0,children: []},{id: 'table0012',name: '绩效工资',value: 1200.0,children: []},{id: 'table0013',name: '基本工作量',value: null,children: [{id: 'table00131',name: '课时工资',value: 800.0,children: []},{id: 'table00132',name: '超课时工资',value: 200.0,children: []},]},]},{id: 'table002',name: '加班工资',value: null,children: [{id: 'table0021',name: '工作日加班',value: 1000.0,children: []},{id: 'table0022',name: '周末加班',value: 600.0,children: []},]},{id: 'table003',name: '岗位工资',value: 1800.0,children: []},{id: 'table004',name: '合计',value: 8600.0,children: []},]
}
复制代码

页面布局

wxml文件

<view class='container'><picker class='picker' mode='date' fields='month' bindchange='dateChange'><view class='picker-content'><image class='date-icon' src='../../assets/date_48.png'></image><view class='date-text'>{{currentDate}}</view></view></picker><view class='title-wrapper'><text class='title'>{{username + " 老师 " + currentDate + " 月工资表"}}</text><text class='yuan'>单位:元</text></view><view class='table-wrapper'><view class='nodata' wx:if='{{list.length === 0}}'>本月暂无工资数据</view><view class='row1' wx:if='{{list.length > 0}}' wx:for='{{list}}' wx:key='{{item.id}}'><text class='text'>{{item.name}}</text><view class='column2-wrapper'><view class='column-value' wx:if='{{item.value}}'>{{item.value}}</view><view class='column2' wx:if='{{item.children.length > 0}}' wx:for='{{item.children}}' wx:for-item='item2' wx:key='{{item2.id}}'><text class='text'>{{item2.name}}</text><view class='column3-wrapper'><view class='column-value' wx:if='{{item2.value}}'>{{item2.value}}</view><view class='column3' wx:if='{{item2.children.length > 0}}' wx:for='{{item2.children}}' wx:for-item='item3' wx:key='{{item3.id}}'><text class='text'>{{item3.name}}</text><view class='column4-wrapper'><view class='column-value' wx:if='{{item3.value}}'>{{item3.value}}</view></view></view></view></view></view></view></view>
</view>
复制代码

wxss 文件

.container {width: 100%;display: flex;flex-direction: column;box-sizing: border-box;background: white;
}.picker {width: 100%;
}.date-text {font-size: 32rpx;padding: 20rpx 10rpx;text-align: center;
}.title-wrapper {display: flex;width: 100%;justify-content: center;align-items: center;padding: 20rpx;box-sizing: border-box;
}.title {flex: 1;font-size: 34rpx;text-align: center;font-weight: 700;color: #09bb07;
}.yuan {font-size: 24rpx;color: #09bb07;
}.table-wrapper {width: 100%;display: flex;flex-direction: column;border-top: 1rpx solid #DCDFE6;
}.row1 {width: 100%;display: flex;flex-direction: row;align-items: center;font-size: 32rpx;box-sizing: border-box;border-bottom: 1rpx solid #DCDFE6;}.text {flex: 1;padding: 10rpx;line-height: 60rpx;height: 60rpx;
}.column2-wrapper {display: flex;flex-direction: column;flex: 3;justify-content: center;border-left: 1rpx solid #DCDFE6;
}.column2 {display: flex;flex: 1;align-items: center;border-bottom: 1rpx solid #DCDFE6;
}.column2:last-child{border-bottom: none;
}.column3-wrapper {display: flex;flex-direction: column;flex: 2;justify-content: center;border-left: 1rpx solid #DCDFE6;
}.column3 {display: flex;flex: 1;align-items: center;border-bottom: 1rpx solid #DCDFE6;
}.column3:last-child{border-bottom: none;
}.column-value{display: flex;align-self: flex-end;margin-right: 10rpx;padding: 10rpx;line-height: 60rpx;height: 60rpx;
}.column4-wrapper{display: flex;flex-direction: column;flex: 1;justify-content: center;border-left: 1rpx solid #DCDFE6;
}.picker-content{display: flex;width: 100%;justify-content: center;align-items: center;border-bottom: 1rpx solid rgba(7, 17, 27, 0.1);
}.date-icon{width: 80rpx;height: 80rpx;
}.nodata{width: 100%;text-align: center;font-size: 32rpx;color: #666;padding: 20rpx;
}
复制代码

js 文件

import MockData from './mockdata.js'
import {formatTime
} from '../../utils/util.js'Page({data: {currentDate: '',username: '张三',list: ''},onLoad: function () {wx.setNavigationBarTitle({title: '工资查询',})//设置当前年月this.setCurrentDate()this._getSalary()},setCurrentDate(){//获取当前年月let date = new Date()let fmtDate = formatTime(date).substring(0, 7)this.setData({currentDate: fmtDate,})console.log(fmtDate)},//日期变化回调dateChange(res) {console.log(res)let value = res.detail.valuethis.setData({currentDate: value})//请求数据this._getSalary()},//模拟请求数据_getSalary(){this.setData({list: MockData.data})}
})
复制代码

逻辑很简单,主要是布局稍微复杂些,理清楚了也挺好理解。

源码地址: https://github.com/cachecats/wechat-table

小程序跨行跨列多列复杂表格实现相关推荐

  1. 微信小程序picker组件实现多列选择器

    [微信小程序]picker组件多列选择器的使用 功能需求 用微信小程序的多列选择器实现对一个树状结构图中的末节点的选择,要求选择器的第一列改变时,后面列的选项会联动改变.树状结构图的部分数据如下图; ...

  2. 微信小程序之图表系列——最简单的表格制作

    一图胜千言,相信很多开发者都没有绕开过图表制作这个坑,在小程序中也是,当然可以用第三方echart等制图插件来做,但小程序要求代码量最大12M,还得分好几个包,一个echart插件就将近1M,要是只做 ...

  3. 小程序自制自带滑动条的表格组件

    小程序自制自带滑动条的表格组件 在编写过程中遇到的难点 1. 表格的编写 2. 表格内容宽度固定 长度自适应 3. 滚动条逻辑及代码编写 4. 滚动条的卡段优化 5. 小程序组件的编写及应用 尾声 先 ...

  4. 关于微信小程序picker之multiSelector多列选择器

    文章目录 前言 使用步骤 1.wxml 2.读入数据 总结 前言 由于业务场景,需要使用自定义内容的多列选择器,自然而然选择了微信小程序官方提供的picker选择器,mode模式为multiSelec ...

  5. 微信内测附近的餐厅,小程序要跨界外卖了?

    此前有网友曝光的「附近的餐厅」功能终于在1月7日得到微信官方证实,随着微信官方发文宣布「附近的餐厅」在广州开始内测,这个只有少数人才能看到的微信插件总算是掀开了一点神秘面纱. 接下来,小编就带大家一起 ...

  6. uni-app项目中H5跨域小程序不跨域怎么解决方法(兼容H5、小程序)

    解决这个问题的时候还是用到了之前的文章中提到的"条件编译",当然这只是其中一部分, 下面我们来看一下这种问题的解决方法, ①H5端配置 首先在项目中找到一个名为"mani ...

  7. 【小程序】跨页面传参通信 onfire.js

    在小程序开发过程中,难免会遇到一种情况,当A页面需要用户设置数据 点击进入B页面,在B页面设置成功后返回并将设置的值传递给A页面.但是wx.navigateBack()并不支持返回传参.这种情况下就可 ...

  8. 微信小程序多项选择器_微信小程序三级联动之多列选择器

    有些时候,三级联动业务场景并不只是全国地区选择,可能还涉及到自定义分类的三级联动,这时就需要使用微信的多列选择器. 如果只是一列字段,或者每次拖动一次都去服务端取,会比较容易. 如果想一次定义好jso ...

  9. 微信小程序多块元素横排列、中排列、下划线

    /*横向布局 */ .layout_horizontal{height: 100rpx;display: flex;/*row 横向 column 列表 */flex-direction: row; ...

最新文章

  1. Windows+Git+TortoiseGit+COPSSH 安装图文教程
  2. MySQL SQL优化
  3. python 测试字符串类型_【教程】如何用Python中的chardet去检测字符编码类型
  4. 在公司如何远程控制家中电脑
  5. 短视频APP开发:短视频特效SDK功能火爆来袭!
  6. excel 时间戳_用Excel实战数据分析,WPS真的可以!
  7. 邮件策略在域树中的实战应用:Exchange2003系列之十
  8. java程序开发个人笔记_Java程序开发入门笔记
  9. 如何获取一个需要登录页面的HTML代码
  10. Ubuntu下的几种常见输入法极其配置方式
  11. plm服务器 硬件性能,PLM 性能问题
  12. 从零开始搭建 Filecoin 主网挖矿集群
  13. Arm居然为Cortex-M发布了专属显卡驱动!
  14. DBeaver修改默认存储sql文件的位置
  15. 命令ipconfig和ifconfig介绍
  16. linux 开机连接wifi密码忘了怎么办,WIFI密码忘了怎么办 两种方法轻松找回密码
  17. python readfile 管道_使用win32的正确方法是什么文件.ReadFile从管道中获取输出?
  18. 用友补丁更新系统不能连接服务器403,用友R9技术支持维护手册(全).doc
  19. 平头哥Wujian100_open仿真
  20. php-fpm for windows,Just for fun——windows上的php-fpm

热门文章

  1. 360浏览器卸载_陈蛋蛋碎碎念—如何完美地卸载流氓软件
  2. mysql数据库整体备份和恢复_MySQL 数据库的备份和恢复
  3. java word 转换 图片_怎样把手机上的图片转换成word?
  4. java 闭包_公司新来的女实习生问我什么是闭包?
  5. iis mysql版本切换_MySQL+PHP配置 Windows系统IIS版(转)
  6. Unity URP世界空间后处理扫描圈效果Shader
  7. 【TensorFlow-windows】keras接口——卷积手写数字识别,模型保存和调用
  8. Jsp+Servlet+MYSQL注册登录案例(界面难看,ε=(´ο`*)))唉)
  9. 验证Oracle收集统计信息参数granularity数据分析的力度
  10. 1-1、作用域深入和面向对象