更新记录

1.2.1(2026-08-25)

修复vue2/vue3兼容问题

1.1.0(2026-08-21)

支持安卓、IOS、小程序、鸿蒙端

1.0.0(2024-08-31)

  • 发布1.0.0版本
查看更多

平台兼容性

uni-app(4.62)

Vue2 Vue2插件版本 Vue3 Vue3插件版本 Chrome Safari app-vue app-vue插件版本 app-nvue Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本
1.2.1 1.2.1 - - 1.2.1 - 5.0 1.2.1 12 1.2.1 6.0.2 1.2.1
微信小程序 微信小程序插件版本 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
3.10.2 1.2.1 - - - - - - - - - - -

uni-app x(5.24)

Chrome Safari Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本 微信小程序 微信小程序插件版本
- - 5.0 1.2.1 12 1.2.1 6.0.2 1.2.1 3.10.2 1.2.1

wfw-table 列表选择表格

基于 uni-app 的多行分组选择表格组件:按「项目 → 强度」两级结构展示数据,支持查看/编辑两种模式,勾选高亮并回报选中项 id。适用于运动强度选择、体检项目勾选等场景。

特性

  • 顶部 tabbar 可选切换(传空数组可隐藏)
  • look 查看 / edit 编辑两种模式,编辑态可勾选、查看态纯展示
  • 单项勾选后自动联动所在行的选中态(行标题高亮)
  • change 事件返回当前操作项 id,累计逻辑由业务方自行控制
  • 查看模式可配置只显示已勾选的行
  • 纯 view + flex 实现,无第三方依赖

快速上手

组件位于 uni_modules/wfw-table/,符合 easycom 规范,项目开启 autoscan直接使用,无需 import

<wfw-table type="edit" :table="table" @change="change"></wfw-table>

如需手动引入(Vue 3 必须使用默认导入):

import wfwTable from '@/uni_modules/wfw-table/components/wfw-table/wfw-table.vue'

export default {
    components: {
        wfwTable
    },
    // ...
}

完整示例

<template>
    <wfw-table type="edit" :selectList="selectList" :selectIndex="selectIndex" @clickSelect="clickSelect"
        @change="change" :table="table"></wfw-table>
</template>

<script>
    export default {
        data() {
            return {
                // 顶部tabbar文案(不必填,传 [] 可隐藏tabbar)
                selectList: [
                    '男生',
                    '女生'
                ],
                // 默认选中下标(不必填)
                selectIndex: 0,
                // 已选项id集合(业务方自行维护)
                intensityIds: '',
                // 表格数据
                table: {
                    title: '30分钟各项运动消耗热量表',
                    header: [
                        '运动项目',
                        '运动强度',
                        '66公斤男性消耗热量(千卡)',
                        '标记'
                    ],
                    list: [{
                            title: '步行', // 行标题(项目名)
                            isCheck: true, // 行选中态(子项有勾选时自动置true)
                            list: [{
                                    name: '慢速', // 强度名称
                                    number: '82.5', // 消耗热量
                                    id: 1, // 强度id(change事件返回,必填)
                                    isCheck: false, // 勾选状态
                                },
                                {
                                    name: '中速',
                                    number: '115.5',
                                    id: 2,
                                    isCheck: true,
                                }
                            ]
                        },
                        {
                            title: '跑步',
                            isCheck: false,
                            list: [{
                                    name: '慢跑',
                                    number: '231',
                                    id: 3,
                                    isCheck: false,
                                },
                                {
                                    name: '快跑',
                                    number: '264',
                                    id: 4,
                                    isCheck: false,
                                }
                            ]
                        }
                    ]
                }
            }
        },
        methods: {
            /* 切换tabbar */
            clickSelect(e) {
                // e: { index: 切换后的下标, table: 表格数据 }
                console.log('切换tabbar', e.index);
            },
            /* 勾选/取消勾选 */
            change(e) {
                // e: { table: 表格数据, intensityIds: 当前操作项的id }
                // 注意:组件只返回当前操作项id,累计/移除由业务方维护
                const id = '' + e.intensityIds;
                let ids = this.intensityIds ? this.intensityIds.split(',') : [];
                const i = ids.indexOf(id);
                if (i > -1) {
                    ids.splice(i, 1); // 取消勾选,移除
                } else {
                    ids.push(id); // 勾选,追加
                }
                this.intensityIds = ids.join(',');
                console.log('已选id集合', this.intensityIds);
            }
        }
    }
</script>

Props

参数 类型 默认值 说明
type String / Boolean look 操作类型:look 查看(纯展示)/ edit 编辑(可勾选)
isNotShowNotCheck Boolean false 查看模式下是否只显示已勾选的行
selectList Array ['男生', '女生'] 顶部 tabbar 文案数组;传 [] 隐藏 tabbar
selectIndex Number / String '0' 默认选中的 tabbar 下标
table Object {} 表格数据,结构见下表

table 数据结构

字段 类型 说明
title String 表格标题(首行通栏)
header String[] 表头文案,固定 4 列:项目 / 强度 / 数值 / 标记
list Object[] 行数据
list[].title String 行标题(项目名)
list[].isCheck Boolean 行选中态(编辑态下由组件根据子项自动重算)
list[].list Object[] 子项数据
list[].list[].name String 强度名称
list[].list[].number String / Number 数值(如消耗热量)
list[].list[].id Number / String 子项 id,必填,change 事件返回该值
list[].list[].isCheck Boolean 勾选状态

Events

事件名 返回参数 说明
change { table, intensityIds } 勾选/取消勾选时触发。table 为表格数据;intensityIds当前操作项的 id(非累计值),累计/移除逻辑由业务方维护,见上方示例
clickSelect { index, table } 切换 tabbar 时触发。index 为切换后的下标

使用技巧

  • 隐藏顶部 tabbar:切换逻辑放在页面中时,传 :selectList="[]" 只渲染表格部分
  • 查看推荐结果type="look" + :isNotShowNotCheck="true",只显示已勾选行,配合数据回显推荐内容
  • 样式约定:表格总宽 670rpx,四列固定宽度 182 / 182 / 241 / 61rpx,主题色 #37C8D7(如需换肤可直接修改组件内 scss)

隐私、权限声明

  1. 本插件需要申请的系统权限列表: 无

  2. 本插件采集的数据、发送的服务器地址、以及数据用途说明: 无

  3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: 无

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: