uniapp实现表格的多选功能

记录一下最近在做一个的表格数据多选功能。需求大致为支持多选、支持跨分页的连续选择、支持通过查询框后手动选择数据(我是后端选手,前端不太熟悉单纯记录~)。

主要思路为:

  • 将table中的唯一id,存入数组tableIds中进行记录。
  • 在选中事件中,若当前为新增则存id,若为移除则remove该id。
  • 在分页事件触发时(同时会触发表格的选中事件,在这里我检查如果当前为分页事件标志则不进行表格的选中事件),首先清除表格的所有选中项 table.value.clearSelection() ,然后查询当前页的数据是否存在已经选中的数据,若存在则选中 table.value.toggleRowSelection(index) 
  • 在search事件触发时(同时会触发表格的选中事件,在这里我不进行表格的选中事件逻辑),和上面一样重新构造选中数据。

templete

<template><view><uni-section><uni-search-bar @confirm="search" :focus="true" v-model="queryParam.name" @blur="blur" @input="input"@cancel="cancel" @clear="clear"></uni-search-bar></uni-section><view class='table-container'><uni-tablestyle='margin: 0;padding: 0'ref="table":loading="loading"borderstripetype="selection"emptyText="暂无更多数据"@selection-change="selectionChange"><uni-tr><uni-th :style="{ width: '100px', textAlign: 'center',height: '50px' }">姓名</uni-th><uni-th :style="{ width: '100px', textAlign: 'center' ,height: '50px'}">工号</uni-th><uni-th :style="{ width: '200px', textAlign: 'center' ,height: '50px'}">直属部门</uni-th></uni-tr><uni-tr style='height: 40px ;flex: 1 ' v-for="(item, index) in tableData" :key="index"><uni-td>{{ item.name }}</uni-td><uni-td>{{ item.employeeNo }}</uni-td><uni-td>{{ item.department }}</uni-td></uni-tr></uni-table><view><uni-paginationhow-icon:page-size="pageSize":current="pageCurrent":total="total"@change="change"/></view></view><button:disabled='isSubmitButtonDisabled'class='btn-submit'type='primary'@click='submit'>提交</button></view>
</template>

ts相关代码


<script lang='ts' setup>
import {watch, onMounted, reactive, ref} from 'vue';
import {getHttp} from '@/services';
import {qcStore} from "@/store/qcStore";
import {onShow} from "@dcloudio/uni-app";let tableData = ref([]);
let pageSize = ref(10);
let pageCurrent = ref(1);
let total = ref(0);
let loading = ref(false);
let disableSelectionChangeFlag = ref(false);
let isSubmitButtonDisabled = ref(true);
const table = ref();
const queryParam = reactive({name: ''
})
let qc = qcStore();
onMounted(() => {getData(pageSize.value, pageCurrent.value);
});
onShow(() => {qc.clearPersonIdsList();qc.clearPersonNamesList();
})
let tableIds = ref([]);
let tableNames = ref([]);
let preItems = ref([]);
let currentItems = ref([]);async function search(res) {pageCurrent.value = 1;await getData(pageSize.value, pageCurrent.value);clearAndreSelect();
}function input(res) {queryParam.name = res;
}async function clear(res) {queryParam.name = '';pageCurrent.value = 1;await getData(pageSize.value, pageCurrent.value);clearAndreSelect();
}function blur(res) {
}async function cancel(res) {queryParam.name = '';pageCurrent.value = 1;await getData(pageSize.value, pageCurrent.value);clearAndreSelect();
}// 多选
function selectionChange(e) {if (!disableSelectionChangeFlag.value) {currentItems.value = e.detail.index;//新增项let addItem = currentItems.value.filter(item => !preItems.value.includes(item));//删除项let removeItem = preItems.value.filter(item => !currentItems.value.includes(item));preItems.value = [...currentItems.value];if (addItem.length > 0) {addItem.forEach(i => {let personId = tableData.value[i].id;if (!tableIds.value.includes(personId)) {tableIds.value.push(personId);tableNames.value.push(tableData.value[i].name);}})}if (removeItem.length > 0) {removeItem.forEach(i => {let personId = tableData.value[i].id;if (tableIds.value.includes(personId)) {tableIds.value = tableIds.value.filter(a => personId != a);tableNames.value = tableNames.value.filter(a => a != tableData.value[i].name)}})}}}async function change(e) {disableSelectionChangeFlag.value = true;await getData(pageSize.value, e.current);clearAndreSelect();disableSelectionChangeFlag.value = falsepageCurrent.value = e.current;
}function clearAndreSelect() {disableSelectionChangeFlag.value = true;table.value.clearSelection()preItems.value.length = 0;currentItems.value.length = 0;tableData.value.forEach(data => {if (tableIds.value.includes(data.id)) {let index = tableData.value.indexOf(data);console.log(index)table.value.toggleRowSelection(index)preItems.value.push(index);currentItems.value.push(index);}})disableSelectionChangeFlag.value = false;
}function getData(pageSize: number, currentPage: number) {return new Promise((resolve, reject) => {getHttp('kengic-boot/qctask/qcTask/getQcReviewPerson', {params: {pageSize: pageSize,pageCurrent: currentPage,name: queryParam.name}}).then((data) => {tableData.value = data.records;total.value = data.total;pageCurrent.value = data.current;resolve();})})}watch(() => tableIds, (newValue) => {if (Object.keys(newValue.value).length > 0) {isSubmitButtonDisabled.value = false;} else {isSubmitButtonDisabled.value = true;}
}, {deep: true, immediate: true})/*** 提交.*/
function submit() {//跳转到异常填写界面qc.setPersonIdsList(tableIds.value);qc.setPersonNamesList(tableNames.value);console.log(qc.getPersonIdsList)uni.navigateBack({url: '/pages-manage/equipment-patrol/patrol-task/patrol-task-report'})
}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/385941.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物理机 gogs+jenkins+sonarqube 实现CI/CD

一、部署gogs_0.11.91_linux_amd64.tar.gz gogs官网下载&#xff1a;https://dl.gogs.io/ yum -y install mariadb-serversystemctl start mariadbsystemctl enable mariadbuseradd gittar zxvf gogs_0.11.91_linux_amd64.tar.gzcd gogsmysql -u root -p < scripts/mysql.…

【C/C++】C语言到C++的入门知识点(主要适用于C语言精通到Qt的C++开发入门)

【C/C】C语言到C的入门知识点&#xff08;主要适用于C语言精通到Qt的C开发入门&#xff09; 文章目录 C语言与C的不同C中写C语言代码C语言到C的知识点Qt开发中需要了解的C基础知识namespace输入输出字符串类型class类构造函数和析构函数&#xff08;解析函数&#xff09;类的继…

【C++】c++语法基础

引入&#xff0c;第一个c程序 这是用c写的helloworld程序 #include<iostream> using namespace std; int main() {cout << "hello,world\n" << endl;return 0;} 接下来我们将根据上述的代码来学习c的基本语法。 命名空间&#xff08;namespace…

基于DoDAF的陆上智能突击系统作战概念系统开发

源自&#xff1a;系统仿真学报 作者&#xff1a;王灿 纪浩然 郭齐胜 董志明 谭亚新 穆歌 注&#xff1a;若出现无法显示完全的情况&#xff0c;可 V 搜索“人工智能技术与咨询”查看完整文章 人工智能、大数据、多模态大模型、计算机视觉、自然语言处理、数字孪生、深度强…

《计算机网络》(学习笔记)

目录 一、计算机网络体系结构 1.1 计算机网络概述 1.1.1 计算机网络的概念 1.1.2 计算机网络的组成 1.1.3 计算机网络的功能 1.1.4 电流交换、报文交换和分组交换 1.1.5 计算机网络的分类 1.1.6 计算机网络的性能指标 1.2 计算机网络体系结构与参考模型 1.2.1 计算机…

基于STM32的逻辑分析仪

文章目录 一、逻辑分析仪体验1、使用示例1.1 逻辑分析仪1.2 开源软件PulseView 2、核心技术2.1 技术方案2.2 信号采集与存储2.3 数据上传 3、使用逻辑分析仪4、 SourceInsight 使用技巧4.1新建工程4.2 设置工程名及工程数据目录4.3 指定源码目录4.4 添加源码4.5 同步文件4.6 操…

如何在调整节拍时间的过程中保持生产流程的稳定性?

在快节奏的工业生产领域&#xff0c;节拍时间&#xff08;Takt Time&#xff09;——即完成一个完整产品所需的标准时间&#xff0c;是维持生产效率和流程稳定性的关键指标。然而&#xff0c;市场需求的波动、技术升级或是生产线的微调&#xff0c;都可能要求我们对节拍时间进行…

云计算实训13——DNS域名解析、ntp时间服务器配置、主从DNS配置、多区域DNS搭建

一、DNS域名解析 1.正向解析 将域名解析为IP地址 DNS正向解析核心配置 (1)安装bind [rootdns ~]# yum -y install bind (2)编辑配置文件 编辑named.conf文件&#xff0c;限定访问权限 [rootdns ~]# vim /etc/named.conf 编辑named.rfc文件&#xff0c;指定要访问的域名 [ro…

VulnHub:colddbox easy

靶机下载地址 信息收集 主机发现 攻击机网段192.168.31.0/24&#xff0c;扫描同网段存活主机。 nmap 192.168.31.0/24 -Pn -T4 发现靶机&#xff0c;IP为192.168.31.176。 端口扫描 扫描靶机开放端口。 nmap 192.168.31.176 -A -p- -T4 开放了80,4512端口&#xff0c;注…

无人机之安全防护篇

在当今社会&#xff0c;园区的安全防护至关重要。无人机以其独特的视角、高效的作业能力和灵活的部署方式&#xff0c;为园区安防工作带来了前所未有的好处&#xff0c;显著提升了安全防护水平和管理效率。 一、全方位无死角的监控 与传统的固定摄像头相比&#xff0c;它不受位…

【Python Web】Flask扩展开发指南

Flask是一个轻量级的Python Web框架&#xff0c;它提供了丰富的扩展库和工具&#xff0c;可以帮助开发者快速构建Web应用。本篇博客将介绍如何进行Flask扩展开发&#xff0c;包括扩展的创建、配置、使用等方面的内容。 目录 Flask扩展开发指南 一、Flask扩展简介 二、创建Fl…

苹果CMS:资源采集站如何设置定时采集详细教程讲解

我们搭建好站点之后&#xff0c;会自定义一些采集&#xff0c;但是需要每天去手动执行&#xff0c;有时候甚至会忘记&#xff0c;那我们如何处理呢&#xff1f;今天我们就来介绍一下如何设置定时器。 如果按照官方例子来设置定时器会遇到一个问题就是采集的资源未绑定类型&…

[240728] Wikidata 介绍 | 微软与 Lumen 合作提升人工智能算力

目录 Wikidata 介绍微软与 Lumen 合作提升人工智能算力 Wikidata 介绍 中文&#xff1a; 文言: 粤语&#xff1a; 来源&#xff1a; https://www.wikidata.org/wiki/Wikidata:Introduction/zh 微软与 Lumen 合作提升人工智能算力 为了满足人工智能工作负载不断增长的需求&am…

查看路由表 netstat -r

“Kernel IP routing table” 是Linux系统中用于展示和配置IP路由的表。它告诉操作系统如何将数据包从一个网络接口发送到另一个网络或主机。下面是对您给出的路由表条目的解释&#xff1a; Destination&#xff1a;目的地地址&#xff0c;可以是具体的IP地址&#xff0c;也可…

「12月·长沙」人工智能与网络安全国际学术会议(ISAICS 2024)

人工智能与网络安全国际学术会议(ISAICS 2024)将于2024年12月20日-2024年12月22日在湖南长沙召开。会议中发表的文章将会被收录,并于见刊后提交EI核心索引。会议旨在在为国内与国际学者搭建交流平台,推进不同学科领域的融合发展&#xff0c;就当今人工智能与网络安全范畴内各学…

视觉-语言大模型应用

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

MySQL练习05

题目 步骤 触发器 use mydb16_trigger; #使用数据库create table goods( gid char(8) primary key, name varchar(10), price decimal(8,2), num int);create table orders( oid int primary key auto_increment, gid char(10) not null, name varchar(10), price decima…

蚓链数字化生态平台:构建城市智能商业,引领协同发展新潮流

​在当今数字化飞速发展的时代&#xff0c;城市商业的运行模式正在经历着数字化变革。蚓链数字化生态平台应运而生&#xff0c;以其强大的功能和创新的理念&#xff0c;成为构建城市智能商业枢纽中心的关键力量&#xff0c;推动着平台互通、业务贯通、管理协同的全新发展格局。…

这代码,给我看破防了……

之前有读者问&#xff0c;自己一直不明白如何写出合理的代码注释。 这也是不少程序员一直头疼的问题&#xff0c;比如接手新代码时&#xff0c;没有注释&#xff0c;完全搞不清逻辑&#xff1b;自己写的注释&#xff0c;跟不上代码修改&#xff0c;成了误导&#xff1b;复杂逻…

《Java初阶数据结构》----7.<优先级队列PriorityQueue>

前言 大家好&#xff0c;我目前在学习java。之前也学了一段时间&#xff0c;但是没有发布博客。时间过的真的很快。我会利用好这个暑假&#xff0c;来复习之前学过的内容&#xff0c;并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…