首页 > 编程语言 >小程序实现固定首行列表格

小程序实现固定首行列表格

时间:2023-03-16 23:13:25浏览次数:35  
标签:comment upTime belowTime 04 程序实现 行列 表格 lateTime name

数据可视化, 数据报表一致是我比较头疼的问题, 这几年一直找不到一个合适的工具.

主要是编程这块并非是数据分析师的强项. 从最初用 Excel, 到用 Python, 到用各种商业BI工具, 就总是觉得体验不好, 虽然它的效率极高, 但移动端的支持不友好, 也很难进行个性化定制, 思来想去, 觉得还是要用标准的开发才是可视化的尽头. 然后就学了很多前端的技术, 后端的技术 ...

我自己既是设计者, 也是开发者, 也是用户. 从体验性, 便捷性上看, 觉得小程序是很适合做BI报表的. 非常轻量和便捷, 毕竟大家都有用微信, 在手机上也不占空间, 也跨平台, 也是移动化办公. 更重要的是它的开发难度不大, 能轻松上手, 技术变更不像 vue, react 这些那么卷, 我觉得很适合像我这样搞数据的同学用它来做一些数据报表, 数据可视化之类的.

图类的其实更简单, 基本都有一些开源的库, 想 echarts, ucharts ...这些, 基本都是基于 canvas 的. 要实在不能满足需求, 就自己用 canvas画吧. 比较复杂的其实是表格. 有些复杂的表格, 真的会把人搞崩溃. 用 table 来布局也是N多年前了, 估计也是基于此小程序官方就没有 table 这个组件吧.

但是在报表这块呢, table 又绝对绕不过去, 搜了很多网友的贡献, 就也是跟着来学一遍.

多字段表格

固定表头和表格首列, 右侧表格可以左右滚动.


这种就可以通过小程序内置的 scroll-view 滑动组件 结合 sticky 定位来实现. 表头和表数据分开来写, 通过设置相同的宽度即实现对齐. 表头可用 flex 布局, 表数据则用 grid 布局, 并将每行数据以列的方式排列, 即 grid-auto-flow: column 实现.

wxml 结构部分:

<view class="header">固定表头和表格首列 右侧表格可以左右滚动</view>
<view class="table">
    <scroll-view scroll-y scroll-x style="height:{{totalHeight}}px;">
        <view>
            <view class="thead">
                <view class="th" wx:for="{{headList}}" wx:key="index">{{item.title}}</view>
            </view>
            <view class="tbody">
                <view class="tr" wx:for="{{trList}}" wx:key="index" wx:for-item="tr">
                    <view class="td">{{tr.date}}</view>
                    <view class="td">{{tr.name}}</view>
                    <view class="td">{{tr.jobNumber}}</view>
                    <view class="td">{{tr.week}}</view>
                    <view class="td">{{tr.upTime}}</view>
                    <view class="td">{{tr.belowTime}}</view>
                    <view class="td" style="color: red;">{{tr.lateTime}}</view>
                    <view class="td" style="color: red;">{{tr.earlyTime}}</view>
                    <view class="td">{{row.comment}}</view>
                </view>
            </view>
        </view>
    </scroll-view>
</view>

wxss 样式部分:

.header {
    font-size: 30rpx;
    text-align: center;
    color: orangered;
}

.table {
    margin-top: 30rpx;
    /* 注意1: scroll-view 有默认 padding 很恶心  */
    padding: 0;
    /* 注意2: scroll-view 的外层盒子要有宽or高, 才能滑动 */
    width: 100%;
    height: 100%;
    border: 1px solid #f4f6f4;
}

/* 表头部分 */
.thead {
    /* 将第一个格设置 sticky, 往上滑则固定住 */
    position: sticky;
    top: 0;
    display: flex;
    font-size: 26rpx;
    /* 同表数据共同设置一个宽, 让对齐 */
    width: 1400rpx;
    border: 1px solid #f4f6ff;
    border-left: 0;
    border-top: 0;
    /* 提升表格的重叠权重, 显示出来, 同时将内容设置为透明, 就实现了固定表头的效果 */
    z-index: 1;
    background: #f4f6ff;
}
.th{
    /* 设置背景色, 滑动的时候就不会重叠字样了. */
    background-color: #f4f6ff;
    width: 150rpx;
    height: 60rpx;
    border: 1px solid #e4e4e4;
    border-top: 0;
    border-left: 0;
    font-weight: 700;
    display: flex;
    justify-content: center;
    align-items: center;
}
/* 首行第一个单元格进行固定 */
.th:nth-child(1) {
    position: sticky;
    left: 0;
    width: 180rpx;
}

/* 表格数据部分 */
/* 直接对数据这个标签进行 grid, 以 col 方式写入 */
.tr {
    /* 保持和表格一样的宽度 */
    width: 1380rpx;
    display: grid;
    grid-auto-flow: column;
    font-size: 26rpx;
}
.td {
    /* 对每个单元格设置宽高, 宽同表格报纸一致 */
    width: 150rpx;
    height: 60rpx;
    border: 1px solid #e4e4e4;
    border-left: 0;
    border-top: 0;
    /* 每个格背景设置透明, 滑动的时候就好隐藏 */
    background-color: #fff;
    display: flex;
    justify-content: center;
    align-items: center;
}
/* 每行第一个单元格进行固定, 宽度和表格一致对齐 */
.td:nth-child(1) {
    position: sticky;
    width: 180rpx;
    left: 0;
}

/* 将滚动条设置隐藏 */
::-webkit-scrollbar {
    width: 0;
    height: 0;
}

js 数据部分:

Page({
    data: {
        totalHeight: 0,
        headList: [
            { title: '时间日期' },
            { title: '姓名' },
            { title: '工号' },
            { title: '星期' },
            { title: '上班时间' },
            { title: '下班时间' },
            { title: '迟到' },
            { title: '早退' },
            { title: '备注'  }
        ],
        trList: [{
                date: '2023-04-01',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期一',
                upTime: '08:30:43',
                belowTime: '18:01:56',
                lateTime: '30:43',
                earlyTime: '',
                comment: '',
            },
            {
                date: '2023-04-02',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期二',
                upTime: '07:59:43',
                belowTime: '17:00:00',
                lateTime: '',
                earlyTime: '60:00',
                comment: '',
            },
            {
                date: '2023-04-03',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期三',
                upTime: '',
                belowTime: '',
                lateTime: '',
                earlyTime: '',
                comment: '调休',
            },
            {
                date: '2023-04-04',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期四',
                upTime: '08:30:43',
                belowTime: '18:01:56',
                lateTime: '30:43',
                earlyTime: '',
                comment: '',
            },
            {
                date: '2023-04-05',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期五',
                upTime: '07:59:43',
                belowTime: '17:00:00',
                lateTime: '',
                earlyTime: '60:00',
                comment: '',
            },
            {
                date: '2023-04-06',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期六',
                upTime: '',
                belowTime: '',
                lateTime: '',
                earlyTime: '',
                comment: '调休',
            },
            {
                date: '2023-04-07',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期日',
                upTime: '',
                belowTime: '',
                lateTime: '',
                earlyTime: '',
                comment: '休息',
            },

            {
                date: '2023-04-01',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期一',
                upTime: '08:30:43',
                belowTime: '18:01:56',
                lateTime: '30:43',
                earlyTime: '',
                comment: '',
            },
            {
                date: '2023-04-02',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期二',
                upTime: '07:59:43',
                belowTime: '17:00:00',
                lateTime: '',
                earlyTime: '60:00',
                comment: '',
            },
            {
                date: '2023-04-03',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期三',
                upTime: '',
                belowTime: '',
                lateTime: '',
                earlyTime: '',
                comment: '调休',
            },
            {
                date: '2023-04-04',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期四',
                upTime: '08:30:43',
                belowTime: '18:01:56',
                lateTime: '30:43',
                earlyTime: '',
                comment: '',
            },
            {
                date: '2023-04-05',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期五',
                upTime: '07:59:43',
                belowTime: '17:00:00',
                lateTime: '',
                earlyTime: '60:00',
                comment: '',
            },
            {
                date: '2023-04-06',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期六',
                upTime: '',
                belowTime: '',
                lateTime: '',
                earlyTime: '',
                comment: '调休',
            },
            {
                date: '2023-04-07',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期日',
                upTime: '',
                belowTime: '',
                lateTime: '',
                earlyTime: '',
                comment: '休息',
            },

            {
                date: '2023-04-01',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期一',
                upTime: '08:30:43',
                belowTime: '18:01:56',
                lateTime: '30:43',
                earlyTime: '',
                comment: '',
            },
            {
                date: '2023-04-02',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期二',
                upTime: '07:59:43',
                belowTime: '17:00:00',
                lateTime: '',
                earlyTime: '60:00',
                comment: '',
            },
            {
                date: '2023-04-03',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期三',
                upTime: '',
                belowTime: '',
                lateTime: '',
                earlyTime: '',
                comment: '调休',
            },
            {
                date: '2023-04-04',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期四',
                upTime: '08:30:43',
                belowTime: '18:01:56',
                lateTime: '30:43',
                earlyTime: '',
                comment: '',
            },
            {
                date: '2023-04-05',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期五',
                upTime: '07:59:43',
                belowTime: '17:00:00',
                lateTime: '',
                earlyTime: '60:00',
                comment: '',
            },
            {
                date: '2023-04-06',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期六',
                upTime: '',
                belowTime: '',
                lateTime: '',
                earlyTime: '',
                comment: '调休',
            },
            {
                date: '2023-04-07',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期日',
                upTime: '',
                belowTime: '',
                lateTime: '',
                earlyTime: '',
                comment: '休息',
            },

            {
                date: '2023-04-01',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期一',
                upTime: '08:30:43',
                belowTime: '18:01:56',
                lateTime: '30:43',
                earlyTime: '',
                comment: '',
            },
            {
                date: '2023-04-02',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期二',
                upTime: '07:59:43',
                belowTime: '17:00:00',
                lateTime: '',
                earlyTime: '60:00',
                comment: '',
            },
            {
                date: '2023-04-03',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期三',
                upTime: '',
                belowTime: '',
                lateTime: '',
                earlyTime: '',
                comment: '调休',
            },
            {
                date: '2023-04-04',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期四',
                upTime: '08:30:43',
                belowTime: '18:01:56',
                lateTime: '30:43',
                earlyTime: '',
                comment: '',
            },
            {
                date: '2023-04-05',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期五',
                upTime: '07:59:43',
                belowTime: '17:00:00',
                lateTime: '',
                earlyTime: '60:00',
                comment: '',
            },
            {
                date: '2023-04-06',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期六',
                upTime: '',
                belowTime: '',
                lateTime: '',
                earlyTime: '',
                comment: '调休',
            },
            {
                date: '2023-04-07',
                name: '小陈总',
                jobNumber: '4338',
                week: '星期日',
                upTime: '',
                belowTime: '',
                lateTime: '',
                earlyTime: '',
                comment: '休息',
            }

        ]
    },

    // 监听页面加载
    onl oad() {
        wx.getSystemInfo({
            success: (res) => {
                this.setData({
                    totalHeight: res.windowHeight - 140
                })
            }
        })
    },
})

标签:comment,upTime,belowTime,04,程序实现,行列,表格,lateTime,name
From: https://www.cnblogs.com/chenjieyouge/p/17224580.html

相关文章

  • docker部署go程序实现极小镜像占用
    1.交叉编译通常我们编写代码会在linux的环境中,一般开发环境就是win里面装个linux虚拟机,有的时候在虚机里安装相关IDE,这就使得本来资源有限的虚机进一步压缩,go恰好可以交叉......
  • 筛选表格后再点击上方的条目筛选,表格依然是筛选态的解决办法
    思路:table子组件监听传入值,声明一个ref默认为false,在监听传入值的effect里,将ref的current变成true,在表格的onchange方法内将ref变成false,在每次拿到table数据的返回值时,判......
  • 表格单元格合并
    表格单元格合并 单元格合并属性水平合并:colspan垂直合并:rowspan<tableborder="1"width=500pxheight="500px">  <tr>    <td>单元1</td>   ......
  • lodop打印 table表格分页带表头页码
    lodop.PRINT_INIT("wageSalaryRetireRecordService");varstrBodyStyle="<style>"+document.getElementById("print_style").innerHTML+"</s......
  • 在线电子表格12
    MVVM优点利用MVVM,很多非常复杂的前端页面编写起来就非常容易了。这得益于我们把注意力放在Model的结构上,而不怎么关心DOM的操作。本节我们演示如何利用Vue快速创建一个在线......
  • 7款颜色的CSS表格样式美化网页表格
    第一种:CSS表格样式之一点击查看CSS代码 /*Borderstyles*/#table-1thead,#table-1tr{border-top-width:1px;border-top-style:solid;border-top-color:......
  • 表格1
    表格1这就是表格标题标题单元格标题单元格标题单元格标题单元格标题单元格单元格1单元格1单元格1单元格1单元格1单元格2单元格2单元格2单元格2单元格2......
  • C语言读写表格文件
    1.csv文件简介  逗号分隔值(Comma-SeparatedValues,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是......
  • 表格检测识别技术的发展历程
    -引言近年来,随着计算机技术的飞速发展,越来越多的研究者开始关注表格检测识别技术。表格检测识别技术是一种利用计算机自动处理表格的技术,它可以实现从文本中检测出表格,并......
  • HTML表格
    ​表格: <table><tr><th>表格1</th></tr><tr><td>表格2</td></tr></table> 快捷键:table>tr*数量>td*数量 属性......