当前位置: 首页 > news >正文

Vue项目-Table添加Form表单校验

一、HTML

<template><div class="taskInfo"><el-form:model="generateParams":rules="formRules"ref="formRef"class="taskInfoForm"label-width="100px"><ul class="taskInfoSearch"><li><el-form-item label="类型" prop="type"><el-selectv-model="generateParams.type"placeholder="请选择类型"><el-option :value="1" label="aaa"></el-option><el-option :value="2" label="bbb"></el-option></el-select></el-form-item></li><li><el-form-item label="开始" prop="start"><el-inputv-model="generateParams.start"placeholder="请输入开始值"></el-input></el-form-item></li><li><el-form-item label="结束" prop="end"><el-inputv-model="generateParams.end"placeholder="请输入结束值"></el-input></el-form-item></li><li><el-form-item label="开始时间" prop="startTime"><el-date-pickerv-model="generateParams.startTime"type="datetime"placeholder="请选择开始时间"format="YYYY/MM/DD hh:mm:ss"value-format="YYYY-MM-DD h:m:s" /></el-form-item></li><li><el-form-item label="结束时间" prop="endTime"><el-date-pickerv-model="generateParams.endTime"type="datetime"placeholder="请选择结束时间"format="YYYY/MM/DD hh:mm:ss"value-format="YYYY-MM-DD h:m:s" /></el-form-item></li></ul><div class="taskInfoAddBtn"><el-button type="primary" @click="addRowData">新增表格数据</el-button></div><div class="taskInfoTab"><el-table:data="generateParams.studentInfo":cell-class-name="cellClassName":row-class-name="rowClassName"@cell-click="cellClick"><el-table-column label="姓名"><template #default="{ row, column }"><el-form-item:prop="'studentInfo.' + row.index + '.name'":rules="formRules.name"v-if="row.index == rowIndex && column.index == columnIndex"><el-inputv-model.number="row.name"type="number"@blur="hideInput"v-focus></el-input></el-form-item><span v-else>{{ row.name }}</span></template></el-table-column><el-table-column label="年龄"><template #default="{ row, column }"><el-form-item:prop="'studentInfo.' + row.index + '.age'":rules="formRules.age"v-if="row.index == rowIndex && column.index == columnIndex"><el-inputv-model.number="row.age"type="number"@blur="hideInput"v-focus></el-input></el-form-item><span v-else>{{ row.age }}</span></template></el-table-column><el-table-column label="性别"><template #default="{ row, column }"><el-form-item:prop="'studentInfo.' + row.index + '.sex'":rules="formRules.sex"v-if="row.index == rowIndex && column.index == columnIndex"><el-inputv-model.number="row.sex"type="number"@blur="hideInput"v-focus></el-input></el-form-item><span v-else>{{ row.sex }}</span></template></el-table-column><el-table-column label="操作" width="100"><template #default="{ row }"><el-button type="danger" link @click="delRowData(row)">删除</el-button></template></el-table-column></el-table></div></el-form><div class="generate"><el-button type="primary" @click="generate(formRef)">任务信息生成</el-button></div><!-- 任务信息生成信息模态框 --><TaskInfoModel ref="TaskInfoModelRef"></TaskInfoModel></div>
</template>

二、JS

<script setup>
// -------------------<<模块引入>>-------------------
import { ref, reactive, onMounted, nextTick } from "vue";
import { ElMessage } from "element-plus";
// -------------------<<变量声明>>-------------------
// 生成参数
const generateParams = reactive({type: 1, // 类型start: 1000000000, // 开始end: 2000000000, // 结束startTime: "2024-08-05 15:33:55", // 开始时间endTime: "2024-08-15 15:33:55", // 结束时间studentInfo: [// 任务区域{name: 123.1122331, // 姓名age: 80.12345621, // 年龄sex: 1200.1, // 性别},{name: 114.1122331, // 姓名age: 80.12345621, // 年龄sex: 1200.1, // 性别},{name: 114.1122331, // 姓名age: 80.12345621, // 年龄sex: 1200.1, // 性别},],
});
// form表单规则
const formRules = reactive({type: [{ required: true, message: "请选择类型", trigger: "change" }],start: [{ required: true, message: "请输入开始", trigger: "blur" }],end: [{ required: true, message: "请输入结束", trigger: "blur" }],startTime: [{ required: true, message: "请选择开始时间", trigger: "change" }],endTime: [{ required: true, message: "请选择结束时间", trigger: "change" }],name: [{ required: true, message: "请输入姓名", trigger: "blur" }],age: [{ required: true, message: "请输入年龄", trigger: "blur" }],sex: [{ required: true, message: "请输入性别", trigger: "blur" }],
});
// 获取form表单ref
const formRef = ref();
// 行列index
const rowIndex = ref(null);
const columnIndex = ref(null);
// 是否允许编辑
const isEdit = ref(true);// -------------------<<函数定义>>-------------------
// 生成
const generate = (formEl) => {if (!formEl) return;formEl.validate((valid) => {if (valid) {console.log(generateParams);TaskInfoModelRef.value.openWin();} else {console.log("error submit!");//当验证失败跳转到空白的所在区域nextTick(() => {let isError = document.getElementsByClassName("is-error");isError[0].scrollIntoView({// 滚动到指定节点// 值有start,center,end,nearestblock: "center",// 值有auto、instant,smooth,缓动动画behavior: "smooth",});});return false;}});
};
// 表格单元格className回调方法
const cellClassName = ({ column, columnIndex }) => {column.index = columnIndex;
};
// 表格行className回调方法
const rowClassName = ({ row, rowIndex }) => {row.index = rowIndex;
};
// 表格单元格点击事件
const cellClick = (row, column) => {if (isEdit.value) {rowIndex.value = row.index;columnIndex.value = column.index;}
};
// input框失去焦点事件
const hideInput = (e) => {if (e.target.value) {rowIndex.value = null;columnIndex.value = null;isEdit.value = true;} else {isEdit.value = false;}
};
// 新增数据
const addRowData = () => {generateParams.studentInfo.push({name: "",age: "",sex: "",});
};
// 删除本行数据
const delRowData = (row) => {if (generateParams.studentInfo.length > 1) {generateParams.studentInfo.splice(row.index, 1);} else {ElMessage.warning("最少保留1条数据");}
};
// -------------------<<函数执行>>-------------------
onMounted(() => {});
</script>

三、CSS

<style lang="less" scoped>
.taskInfo {width: 100%;height: 100%;:deep(.taskInfoForm) {width: 100%;height: calc(100% - 80px);.taskInfoSearch {width: 100%;height: 120px;display: flex;align-items: center;flex-wrap: wrap;li {width: 25%;height: 50%;.el-form-item__label {color: #fff;}.el-form-item {width: 100%;height: 100%;margin-bottom: 0px;display: flex;align-items: center;.el-date-editor.el-input,.el-input,.el-select {width: 100% !important;}}}}.taskInfoAddBtn {width: 100%;height: 50px;display: flex;align-items: center;justify-content: flex-end;}.taskInfoTab {width: 100%;height: calc(100% - 170px);position: relative;.el-table {width: 100%;height: 100%;background: transparent !important;position: absolute;.el-form-item {width: 100%;margin-bottom: 0px;.el-form-item__content {margin-left: 0px !important;display: flex;align-items: center;justify-content: center;.el-input,.el-select {width: 80% !important;}}}td,th {text-align: center;}}}}.generate {width: 100%;height: 80px;display: flex;align-items: center;justify-content: center;}
}
</style>

相关文章:

Vue项目-Table添加Form表单校验

一、HTML <template><div class"taskInfo"><el-form:model"generateParams":rules"formRules"ref"formRef"class"taskInfoForm"label-width"100px"><ul class"taskInfoSearch"&g…...

【iOS】—— 事件传递链和响应者链总结

事件传递链和响应者链总结 1. 事件传递链&#xff1a;事件传递链&#xff1a;传递流程&#xff1a;总结第一响应者&#xff1a; 2. 响应者链响应者链传递流程总结响应者链流程 总结&#xff1a; 之前也学习过这个内容这次在复习的时候&#xff0c;就想着写一下总结&#xff1a;…...

【多线程】初识进程和线程

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;多线程 / javaEE初阶 前言 在我们之前编写的所有代码&#xff0c;都只能用上一个核心。众所周知&#xff0c;现在大多数CPU都有多个核心&#xff0c;但此时&#xff0c;无论如法优化程序&#xff0c…...

1DCNN-2DResNet并行故障诊断模型

往期精彩内容&#xff1a; Python-凯斯西储大学&#xff08;CWRU&#xff09;轴承数据解读与分类处理 Python轴承故障诊断入门教学-CSDN博客 Python轴承故障诊断 (13)基于故障信号特征提取的超强机器学习识别模型-CSDN博客 Python轴承故障诊断 (14)高创新故障识别模型-CSDN…...

Java设计模式(原型模式)

定义 使用原型实例指定待创建对象的类型&#xff0c;并且通过复制这个原型来创建新的对象。 角色 Prototype&#xff08;抽象原型角色&#xff09; ConcretePrototype&#xff08;具体原型角色&#xff09; Client&#xff08;客户端角色 优点 简化对象的创建过程&#xff0c…...

C/C++ 知识点:typedef 关键字

文章目录 一、typedef 关键字1、 基本用法2、常见用法2.1、为基本数据类型定义别名2.2、为结构体或联合体定义别名2.3、为指针类型定义别名2.4、为复杂模板类型定义别名 3、注意事项4、总结 前言&#xff1a; 在C&#xff08;以及C语言&#xff09;中&#xff0c;typedef 关键字…...

【Linux学习】进程间通信之 匿名管道 与 基于管道的进程池

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f351;进程间通信&#x1f42c;进程间通信目的 &#x1f4da;管道 &#x1f4d5;管道的原理&#x1f427;用fork来共享管道原…...

小团队如何选需求管理软件?8款顶级推荐

本文将分享8款适合小团队的需求管理软件&#xff1a;PingCode、Worktile、Tapd、Teambition、禅道、Asana、Jama Connect、Aha!。 在小团队中管理需求时&#xff0c;寻找合适的软件工具常常让人头疼&#xff0c;不同的需求管理软件提供各种功能&#xff0c;但哪些功能真正适合…...

docker操作入门

1.创建镜像&#xff0c;使用当前文件 docker build -t experience . 2.运行容器 docker run -d -p 8501:8501 --name my-running-app my-python-api docker run -p 8508:8508 experience docker run -p 8508:8508 -p 8509:8509 experience 3.查看容器状态 docker ps docker p…...

简单的射箭小游戏网页源码

简单的射箭小游戏网页源码,对准靶心开启你的射击之旅吧 微信扫码免费获取源码...

Python | Leetcode Python题解之第331题验证二叉树的前序序列化

题目&#xff1a; 题解&#xff1a; class Solution:def isValidSerialization(self, preorder: str) -> bool:pre 1for i in preorder.split(,):if i.isdigit():if pre 0:return Falsepre 1else:if pre 0:return Falsepre - 1return pre 0...

0x3 “护网行动”守之道

一、护网防守目标系统 二、护网防守之利器 通过安全流程控制、安全技术保障、安全工具支撑、安全能力提升四个层次全面构成安全防御体系。 安全技术名称解释 IPS&#xff08;入侵防御系统&#xff09;WAF&#xff08;Web应用防火墙&#xff09;IDS&#xff08;入侵检测系统&a…...

白骑士的Matlab教学高级篇 3.1 高级编程技术

系列目录 上一篇&#xff1a;白骑士的Matlab教学进阶篇 2.5 Simulink 高级编程技术在MATLAB中扮演着至关重要的角色&#xff0c;帮助用户更高效地编写复杂程序、提高代码的可维护性和可读性。本节将介绍面向对象编程、函数句柄与回调函数、错误处理与调试的相关内容。 面向对…...

haproxy简介与用法

一、负载均衡 1.1、概念&#xff1a; 负载均衡SLB&#xff08;Server Load Balancer&#xff09;是一种对流量进行按需分发的服务&#xff0c;通过将流量分发到不同的后端服务来扩展应用系统的服务吞吐能力&#xff0c;并且可以消除系统中的单点故障&#xff0c;提升应用系统…...

Geoscene Pro的三维

一、场景设置 1.3D视图分为全局场景和局部场景。在Geoscene Pro中&#xff0c;两个场景可以自由切换。 &#xff08;1&#xff09;全局场景有固定的坐标系GCS&#xff08;WGS84、CGCS2000&#xff09;&#xff0c;并在全球比例尺下展示&#xff08;全球范围&#xff09;。可以…...

论文阅读 - Scaling Up k-Clique Densest Subgraph Detection | SIGMOD 2023

1. 论文背景 密集子图发现&#xff08;Densest Subgraph Discovery&#xff09;是图挖掘领域的一个基础研究方向&#xff0c;并且近年来在多个应用领域得到了广泛研究。特别是在生物学、金融学和社交网络分析等领域&#xff0c;密集子图的发现对理解复杂网络结构和行为具有重要…...

前端框架(三件套)

学习网站 HTML 系列教程&#xff08;有广告&#xff09; HTML&#xff08;超文本标记语言&#xff09; | MDN (mozilla.org)&#xff08;英文不太友好&#xff09; 1.HTML5 & CSS3 1.1HTML5表格 <!DOCTYPE html> <html lang"en"> <head>…...

MemoryCache 缓存 实用

MemoryCache 缓存 实用,相关逻辑代码里已详细注释&#xff0c; 在Java中创建一个单例模式&#xff08;Singleton Pattern&#xff09;的MyMemoryCache类&#xff0c;可以采用多种方法&#xff0c;其中最常见的是使用“饿汉式”和“懒汉式”&#xff08;线程安全和非线程安全&am…...

Java设计模式(命令模式)

定义 将一个请求封装为一个对象&#xff0c;从而让你可以用不同的请求对客户进行参数化&#xff0c;对请求排队或者记录请求日志&#xff0c;以及支持可撤销的操作。 角色 抽象命令类&#xff08;Command&#xff09;&#xff1a;声明用于执行请求的execute方法&#xff0c;通…...

什么是 CI/CD?

什么是 CI/CD&#xff1f; CI/CD&#xff08;Continuous Integration/Continuous Deployment&#xff09;是一种软件开发实践&#xff0c;旨在通过自动化的方式频繁地构建、测试和发布软件。CI/CD 可以显著提高软件交付的速度和质量&#xff0c;使团队能够更快地响应市场变化和…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...