路由传参、搜索、多选框勾选、新增/编辑表单复用

前言:

记录添加运动员页面功能的具体实现

①由赛事管理页面跳转时路由传参(携带该页面表格中莫某条数据对应的赛事id到另一个页面);

②搜索框实时搜索;

③多选框勾选搜索;

④新增表单和编辑表单复用;

⑤导出文件:根据赛事id和搜索条件导出表格中的数据;

1. 在该页,点击编辑跳转页面,并携带赛事id(路由传参)

goAddAthlete(row){this.$router.push({path:'/eventManage/athlete/add',query:{eventId:row.id}})},

跳转到该页

在data中放一个容器eventId,将路由传参传过来的赛事id(eventId)存放起来,

页面跳转过来直接调用根据赛事id获取运动员列表数据的方法,所以写在created,

在methods中定义getAthleteByEventId,拿到数据

data() {return{eventId:null,//赛事id}
},
created() {// 初始化 eventIdthis.eventId = this.$route.query.eventId;if (this.eventId) {this.getAthleteByEventId();}else{this.$message.error('未传递赛事id');}
},
methods: {// 根据赛事id获取运动员列表数据getAthleteByEventId() {// 调用获取运动员列表的接口,传入赛事idgetAthleteList({eventId: this.eventId}).then((res) => {this.athleteList = res.recordsthis.total = res.totalthis.filteredAthleteList = this.athleteList; // 初始化筛选列表(复制一份数据用于筛选操作)})},
}

2. 搜索框查询的功能

用于根据用户在搜索框中输入的关键字过滤运动员列表,并将过滤后的结果显示在 filteredAthleteList 中。

两种写法

方法1:当后端不接收一个search参数时,在前端进行筛选

使用 filter 方法遍历 athleteList

方法2:后端接收一个search参数来实现模糊查询

直接在getAthleteByEventId方法中调用接口时传入search参数

<!-- 搜索框 -->
<el-inputv-model="searchKey"placeholder="请输入姓名、拼音或注册号搜索"prefix-icon="el-icon-search"clearableclass="search-input"@input="filterAthleteList">
</el-input>
data() {return {searchKey:''}
}
方法1
// 查询对应运动员数据
filterAthleteList(){const searchKey = this.searchKey.trim().toLowerCase();if (!searchKey) {// 如果搜索框为空,恢复全部数据this.filteredAthleteList = this.athleteList;return;}// 过滤 athleteList 中的数据this.filteredAthleteList = this.athleteList.filter((athlete) => {return (athlete.name?.toLowerCase().includes(searchKey) || // 匹配姓名athlete.pinyin?.toLowerCase().includes(searchKey) || // 匹配拼音athlete.registeredNumber?.toLowerCase().includes(searchKey) // 匹配注册号);});},
方法2
getAthleteByEventId() {// 调用获取运动员列表的接口,传入赛事idgetAthleteList({eventId: this.eventId,search:this.searchKey.trim()}).then((res) => {this.athleteList = res.recordsthis.total = res.totalthis.filteredAthleteList = this.athleteList; // 初始化筛选列表(复制一份数据用于筛选操作)})},filterAthleteList(){this.getAthleteByEventId()
},

3. 筛选注册类型功能

// 根据选中类型筛选
filterByTypes() {if (this.selectedTypes.length === 0) {// 如果没有选择任何类型,显示全部数据this.filteredAthleteList = this.athleteList;return;}// 筛选出符合选中类型的数据this.filteredAthleteList = this.athleteList.filter((athlete) =>this.selectedTypes.includes(athlete.registrationType));
},

4. 新增/编辑对话框复用

新增与编辑的对话框复用

<el-dialog:visible.sync="isDialogVisible":title="isEditing ? '编辑运动员信息' : '添加运动员信息'"width="50%"><!-- 表单内容 -->
</el-dialog>
// 默认为新增(isEdit=false,row为空对象{},执行else分支)
// 打开新增或编辑对话框
openDialog(isEdit = false, row = {}) {this.isEditing = isEdit; // 设置对话框状态this.isDialogVisible = true;if (isEdit) {// 编辑模式:填充表单数据this.form = { ...row };} else {// // 新增模式:清空表单// this.$nextTick(() => {//   this.$refs.formRef.resetFields();// });this.form = {id: null,name: "",pinyin: "",gender: "",nation: "",team: "",cardType: "",idCardNumber: "",registrationType: "",registeredProject: "",registeredNumber: "",};}
},onSubmit() {this.$refs.formRef.validate((valid) => {if (valid) {if (this.isEditing) {// 编辑模式updateAthleteById(this.form).then(() => {this.$message.success('修改运动员成功');this.isDialogVisible = false; // 关闭对话框this.getAthleteByEventId(); // 重新获取列表}).catch(() => {this.$message.error('修改运动员失败');});            }else{// 新增模式const newAthlete = { ...this.form, eventId:this.eventId }; // 拼接数据addAthleteByEventId(newAthlete).then(() => {this.$message.success('添加运动员成功');this.isDialogVisible = false; // 关闭对话框this.getAthleteByEventId(); // 重新获取列表}).catch(() => {this.$message.error('添加运动员失败');});}}});},
// 编辑模式下,表单中会填充对应数据;新增模式下,表单清空isDialogOpen: false, // 控制对话框开关
isEditing: false, // 区分新增和编辑// 打开对话框(编辑模式)openDialog(row) {this.isEditing = true; // 切换为编辑模式this.isDialogOpen = true; // 打开对话框this.form = { ...row }; // 将选中的数据复制到表单中},// 提交表单(新增或编辑)onSubmit() {this.$refs.form.validate((valid) => {if (valid) {if (this.isEditing) {// 编辑操作updateAthleteById(this.form).then(() => {this.$message.success("运动员信息更新成功");this.isDialogOpen = false; // 关闭对话框this.getAthleteList(); // 重新加载列表}).catch((err) => {this.$message.error("运动员信息更新失败");});} else {// 新增操作const newAthlete = {...this.form,eventId: this.eventId, // 新增时需附加 eventId};addAthleteByEventId(newAthlete).then(() => {this.$message.success("添加运动员成功");this.isDialogOpen = false; // 关闭对话框this.getAthleteList(); // 重新加载列表}).catch((err) => {this.$message.error("添加运动员失败");});}}});},// 关闭对话框时重置表单handleDialogClose() {this.$refs.form.resetFields();this.isEditing = false; // 重置为新增模式this.form.id = null; // 清空 id},
},

5. 导出功能

// 导出
handleExport(){// 方法1.将条件构建导出请求的参数const exportParams = {eventId: this.eventId,search: this.searchKey.trim(),          registrationType: this.selectedTypes.join(','), // 将注册类型转换为后端可识别的格式};// 调用导出接口exportAthleteByEventId(exportParams).then((response) => {this.$download.excel(response.data, '已添加的运动员信息.xlsx');});
}

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

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

相关文章

【11-20期】Java面试进阶:深入解析核心问题与实战案例

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Java &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 文章题目&#xff1a;Java面试进阶&#xff1a;深入解析11-20期核心问题与实战案例 摘要&#xff1a; 本篇…

Java后端如何进行文件上传和下载 —— 本地版

简介&#xff1a; 本文详细介绍了在Java后端进行文件上传和下载的实现方法&#xff0c;包括文件上传保存到本地的完整流程、文件下载的代码实现&#xff0c;以及如何处理文件预览、下载大小限制和运行失败的问题&#xff0c;并提供了完整的代码示例。 大体思路 1、文件上传 …

基于SpringBoot的工程教育认证的计算机课程管理系统【附源码】

基于SpringBoot的工程教育认证的计算机课程管理系统 效果如下&#xff1a; 系统登录页面 教师主页面 学生管理页面 课程信息页面 通知公告页面 学生课程管理页面 学生课程信息页面 研究背景 随着信息技术的快速发展&#xff0c;计算机课程管理系统的应用在教育领域变得愈发重…

适用于学校、医院等低压用电场所的智能安全配电装置

引言 电力&#xff0c;作为一种清洁且高效的能源&#xff0c;极大地促进了现代生活的便捷与舒适。然而&#xff0c;与此同时&#xff0c;因使用不当或维护缺失等问题&#xff0c;漏电、触电事件以及电气火灾频发&#xff0c;对人们的生命安全和财产安全构成了严重威胁&#xf…

如何编写一个 Vue 3 应用:模板插值示例

Vue.js 是一个渐进式的 JavaScript 框架&#xff0c;用于构建用户界面。在本篇博客中&#xff0c;我们将通过一个简单的示例来学习如何使用 Vue 3 创建一个基本的应用。这个示例将展示如何使用 Vue 的模板插值和事件处理来构建一个简单的点击计数器。 步骤 1: 准备工作 首先&…

PostgreSQL详细安装教程

#安装PostgreSQL的yum仓库 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm#安装PostgreSQL 15版本 sudo yum install -y postgresql15-server#初始化数据库&#xff08;若要自定义数据库存储目录…

uniapp中使用Mescroll实现下拉刷新与上拉加载项目实战

如何在UniApp中使用Mescroll实现下拉刷新与上拉加载 前言 下拉刷新和上拉加载更多成为了提升用户体验不可或缺的功能。UniApp作为一个跨平台的应用开发框架&#xff0c;支持使用Vue.js语法编写多端&#xff08;iOS、Android、H5等&#xff09;应用。Mescroll作为一款专为Vue设…

js:基础

js是什么 JavaScript是一种运行在客户端的编程语言&#xff0c;实现人机交互的效果 js只要有个浏览器就能跑 js可以做网页特效、表单验证、数据交互、服务端编程 服务端编程是前端人拿他们特有的后端语言node.js来干后端干的事情 js怎么组成 JavaScriptECMAScript(语言基…

Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64

yum install 报错: Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64 CentOS7的SCL源在2024年6月30日停止维护了。 当scl源里面默认使用了centos官方的地址&#xff0c;无法连接&#xff0c;需要替换为阿里云。 cd /etc/yum.repos.d/ 找到 CentOS-SCLo-scl.repo 和…

35 基于单片机的精确电压表DA-AD转换

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DAC0832和ADC0832检测电压&#xff0c;0到8.5V&#xff0c;设计复位电路 LED管显示实际稳压值&#xff0c;初始电压0 二、硬件资源 基于KEIL5编写C代码&#xff0c…

微信小程序2-地图显示和地图标记

一、index修改页面&#xff0c;让页面能够显示地图和一个添加标记的按钮。 index.wxml <scroll-view class"scrollarea" scroll-y type"list"><view class"index_container"><map id"map" style"width: 100%; h…

【一篇搞定配置】网络分析工具WireShark的安装与入门使用

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;各种软件安装与配置_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1.…

Python基础学习-11函数参数

1、"值传递” 和“引用传递” 1&#xff09;不可变的参数通过“值传递”。比如整数、字符串等 2&#xff09;可变的参数通过“引用参数”。比如列表、字典。 3&#xff09;避免可变参数的修改 4&#xff09;内存模型简介 2、函数参数类型 1&#xff09; def func() #无参…

深入理解注意力机制(Attention Mechanism)

在深度学习中&#xff0c;“注意力机制&#xff08;Attention Mechanism&#xff09;”是近年来的一个重要突破。它最初被提出用于处理自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;但如今已经广泛应用于计算机视觉、强化学习和其他领域。注意力机制赋予模型一种“…

linux-FTP服务器配置

FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09; 一种用于在计算机网络中传输文件的标准协议。它允许用户通过客户端程序与远程服务器进行文件交换&#xff0c;支持文件的上传、下载、删除、重命名等操作。FTP服务常用于将网站文件上传到服务器&am…

蓝网科技临床浏览系统存在SQL注入漏洞

漏洞描述 蓝网科技临床浏览系统是一个专门用于医疗行业的软件系统&#xff0c;主要用于医生、护士和其他医疗专业人员在临床工作中进行信息浏览、查询和管理。在deleteStudy.php中的接口处存在SQL注入漏洞&#xff0c;未经身份验证的恶意攻击者利用 SQL 注入漏洞获取数据库中的…

QML学习 —— 32、自定义侧边滑动菜单(附源码)

效果 说明 侧滑菜单是应用中常见的从侧边划出菜单的效果。以滑动的方式从屏幕的左侧或右侧展开,为用户提供额外的导航选项或功能入口。侧边菜单的设计可以将应用的主要功能和内容以清晰的结构展示给用户,提升用户在使用应用时的便捷性和直观性。 代码 import QtQuick 2.12 i…

vue3项目部署在阿里云轻量应用服务器上

文章目录 概要整体部署流程技术细节小结 概要 vue3前端项目部署在阿里云轻量服务器 整体部署流程 首先有一个Vue3前端项目和阿里云应用服务器 确保环境准备 如果是新的服务器&#xff0c;在服务器内运行以下命令更新软件包 sudo apt update && sudo apt upgrade -y …

macos 14.0 Monoma 修改顶部菜单栏颜色

macos 14.0 设置暗色后顶部菜单栏还维持浅色&#xff0c;与整体不协调。 修改方式如下&#xff1a;

Redis设计与实现 学习笔记 第二十章 Lua脚本

Redis从2.6版本引入对Lua脚本的支持&#xff0c;通过在服务器中嵌入Lua环境&#xff0c;Redis客户端可以使用Lua脚本&#xff0c;直接在服务器端原子地执行多个Redis命令。 其中EVAL命令可以直接对输入的脚本进行求值&#xff1a; 而使用EVALSHA命令则可以根据脚本的SHA1校验…