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

el-table-column嵌套el-form-item不能进行校验问题解决

项目为vue3+elementPlus开发的项目

业务要求:table表格展示数据,其中有一行是ip地址可展示可修改,此处要求增加自定义校验规则

先看一下效果:

此处先描述一下,问题出在了哪里,我将el-table的data,使用一个ref数组存储,表格校验使用了一个对象存储,导致,校验的时候拿不到数据,代码如下

<template>
<el-form ref="ruleFormRef" :model="form" :rules="probeIpFormRules">
<el-table:data="tableData"empty-text="暂无数据"height="calc(100% - 40px)":border="true"style="width: 100%"v-loading="loading"element-loading-background="rgba(255, 255, 255, 0.5)"><el-table-column type="index" label="序号" width="60" /><el-table-column prop="portName" min-width="190" label="端口号" /><el-table-column prop="probeIp" min-width="160" label="探针IP"><template #default="{ row, $index }"><el-form-item :prop="`tableData[${$index}].probeIp`" :rules="probeIpFormRules.probeIp"><el-input class="probeIp-style" v-model.trim="row.probeIp" autocomplete="off" clearable /></el-form-item></template></el-table-column></el-table></el-form>
</template>
<script setup lang="ts">const  probeIpFormRules= {probeIp: [{ required: false, message: '请输入ip地址', trigger: 'change' }, { validator: checkIp }],}
const tableData=ref([])
</script>

以下是正确代码,就是将tableData和probeIpFormRules放到同一个对象里

<template><el-dialogtitle="设置交换机端口"v-model="dialogVisible":close-on-click-modal="false":close-on-press-escape="false"draggablewidth="90%"@closed="handleClose"><el-form ref="ruleFormRef" :model="form" :rules="form.probeIpFormRules"><div class="box-warp"><div class="hd-header"><span>交换机ip: {{ switchIp }}</span><div class="hd-btn"><el-button type="primary" @click="handleSave(ruleFormRef)" :loading="btnLoading">保存</el-button><el-button @click="handleClose">关闭</el-button></div></div><el-table:data="form.tableData"empty-text="暂无数据"height="calc(100% - 40px)":border="true"style="width: 100%"v-loading="loading"element-loading-background="rgba(255, 255, 255, 0.5)"><el-table-column type="index" label="序号" width="60" /><el-table-column prop="portName" min-width="190" label="端口号" /><el-table-column prop="portDes" min-width="200" label="端口描述" /><el-table-column prop="portRunningStatus" min-width="90"><template #header><el-tooltip :visible="tooltipVisible" placement="top"><template #content><span>端口状态改变后请等待1分钟刷新查看</span></template><div class="status-style" @mouseenter="tooltipVisible = true" @mouseleave="tooltipVisible = false"><span>当前端口状态</span><el-icon><QuestionFilled /></el-icon></div></el-tooltip></template><template #default="{ row }"><el-tag :type="showStatus(row.portRunningStatus)">{{ filterStatus(row.portRunningStatus) }}</el-tag></template></el-table-column><el-table-column prop="nominalBandwidth" min-width="100" label="额定带宽(Mb)"><template #default="{ row }"><el-input-numberv-model="row.nominalBandwidth":controls="false":step="1":min="0":max="9999":precision="0"style="width: 100%"/></template></el-table-column><el-table-column prop="probeName" min-width="190" label="探针名称"><template #default="{ row }"><el-input v-model.trim="row.probeName" maxlength="30" autocomplete="off" /></template></el-table-column><el-table-column prop="probeIp" min-width="160" label="探针IP"><template #default="{ row, $index }"><el-form-item :prop="`tableData[${$index}].probeIp`" :rules="form.probeIpFormRules.probeIp"><el-input class="probeIp-style" v-model.trim="row.probeIp" autocomplete="off" clearable /></el-form-item></template></el-table-column><el-table-column label="端口操作" fixed="right" width="140"><template #default="{ row }"><el-switchv-model="row.portChangeStatus":active-value="1":inactive-value="2"active-text="ON"inactive-text="OFF"inline-promptstyle="--el-switch-on-color: #13ce66; --el-switch-off-color: #f56c6c"@change="changevisible"/></template></el-table-column></el-table></div></el-form></el-dialog>
</template>
<script setup lang="ts">
import { getPortByIp, savePort } from '@/api/switchModule'
import { validIpC } from '@/utils/validate.js'
const tooltipVisible = ref(false)
const ruleFormRef = ref()
/*** 状态显示*/
const changevisible = () => {tooltipVisible.value = trueconst timer = setTimeout(() => {tooltipVisible.value = falseclearTimeout(timer)}, 1000)
}
//校验子网地址格式
const checkIp = (rule: any, value: any, callback: any) => {if (value?.trim().length === 0) {callback(new Error('请输入ip地址'))} else if (value && !validIpC(value?.trim())) {callback(new Error('请输入正确格式的ip地址'))} else {callback()}
}const dialogVisible = ref(false)
/*** 关闭弹窗*/
const handleClose = () => {dialogVisible.value = false
}
const portStatus: Record<string, { label: string; color: 'success' | 'danger' }> = {'1': {label: '开启',color: 'success',},'2': {label: '关闭',color: 'danger',},
}
const filterStatus = (status: number) => {return portStatus[String(status)].label
}
const showStatus = (status: number) => {return portStatus[String(status)].color
}const switchIp = ref('')
const btnLoading = ref(false)
const form = ref({tableData: [],probeIpFormRules: {probeIp: [{ required: false, message: '请输入ip地址', trigger: 'change' }, { validator: checkIp }],},
})const handleSave = async (formEl: any) => {if (!formEl) returnformEl.validate(async (valid: any) => {if (!valid) returnElMessageBox.confirm('确定提交端口信息吗?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning',}).then(async () => {btnLoading.value = truetry {const params = {switchIp: switchIp.value,resSwitchPortEntities: form.value.tableData,}console.log('请求保存的参数是==》', params)const { code, data } = await savePort(params)console.log('保存的数值为=》', code, data)dialogVisible.value = false} catch (error) {console.log('保存失败==》', error)} finally {btnLoading.value = false}})})
}
/*** 查询数据* @param switchIp*/
const queryList = async (switchIp: string) => {loading.value = truetry {const { code, data } = await getPortByIp({ switchIp })if (code !== 200 || data.resSwitchPortEntities.length === 0) returnform.value.tableData = data.resSwitchPortEntities} catch (error) {console.log('错误==》', error)} finally {loading.value = false}
}const openDialog = (ip: string) => {switchIp.value = ip//通过ip请求数据queryList(ip)dialogVisible.value = true
}
defineExpose({openDialog,
})
// 搜索对象
const searchForm = reactive({pageNum: 1,pageSize: 100,total: 0,
})
// 表格数据
const loading: Ref<boolean> = ref(false)
</script><style lang="scss" scoped>
.box-warp {height: 70vh;:deep(.el-input__wrapper) {box-shadow: 0 0 0 0px;}.hd-header {display: flex;justify-content: space-between;// margin-top: -20px;margin-bottom: 20px;}.probeIp-style{margin-top: 18px ;}.status-style {display: flex;align-items: center;justify-content: center;}
}
</style>

最终样式如下

Ï

相关文章:

el-table-column嵌套el-form-item不能进行校验问题解决

项目为vue3elementPlus开发的项目 业务要求&#xff1a;table表格展示数据&#xff0c;其中有一行是ip地址可展示可修改&#xff0c;此处要求增加自定义校验规则 先看一下效果&#xff1a; 此处先描述一下&#xff0c;问题出在了哪里&#xff0c;我将el-table的data,使用一个…...

leetcode200. 岛屿数量

leetcode200. 岛屿数量 题目 思路 遍历每一个网格&#xff0c;若网格为1&#xff0c;岛屿数量1&#xff0c;利用一个深度优先搜索函数将岛屿置零&#xff0c;注意判断数组边界 代码 class Solution:def numIslands(self, grid: List[List[str]]) -> int:self.grid grid…...

MySQL--索引类型详解

索引的类型 主键索引&#xff1a; PRIMARY KEY&#xff0c;当一张表的某个列是主键的时候&#xff0c;该列就是主键索引&#xff0c;一张表只允许有一个主键索引&#xff0c;主键所在的列不能为空。 创建主键索引的SQL语法&#xff1a; # 给user表中的id字段创建名为id_ind…...

R语言中ggplot2图例位置、颜色、背景、标题

目录 1、不显示图例 2、自定义图例位置 3、修改图例背景颜色、外框颜色、大小 4、修改图例大小 5、图例设置背景、线框为空 6、自定义设置多个图例的标题 7、设置多个图例的之间的间隔 8、取消不需要的图例显示 1、不显示图例 theme(legend.position "none"…...

波卡 Alpha 计划启动,呼唤先锋创新者重新定义 Web3 开发

原文&#xff1a;https://polkadot.network/blog/the-polkadot-alpha-program-a-new-era-for-decentralized-building-collaboration/ 编译&#xff1a;OneBlock 区块链领域不断发展&#xff0c;随之而来的是发展和创新机会的增加。而最新里程碑是令人振奋的 Polkadot Alpha …...

公网IP与私有IP及远程互联

1.公网有私有IP及NAT 公网IP是全球唯一的IP&#xff0c;通过公网IP&#xff0c;接入互联网的设备是可以访问你的设备。但是IPV4资源有限&#xff0c;一般ISP(Internet Service Provider)并不会为用户提供公网IP。所以家里的计算机在公司是没法直接使用windows远程桌面直接访问…...

openCV xmake debug失效 release可以使用

在使用xmake构建一个项目时&#xff0c;添加openCV库&#xff0c;调用 imread函数时&#xff0c;debug函数失效&#xff0c; release可以使用&#xff0c;最后发现是xmake.lua写的有问题 option("OpenCV4.6.0")set_showmenu(true) set_default(true) set_category(&…...

ES分布式搜索-IK分词器

ES分词器-IK 1、为什么使用分词器&#xff1f; es在创建倒排索引时需要对文档分词&#xff1b;在搜索时&#xff0c;需要对用户输入内容分词。但默认的分词规则对中文处理并不友好。 我们在kibana的DevTools中测试&#xff1a; GET /_analyze {"analyzer": "…...

基于卷积神经网络的野外可食用植物分类系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文详细探讨了一基于深度学习的可食用植物图像识别系统。采用TensorFlow和Keras框架&#xff0c;利用卷积神经网络&#xff08;CNN&#xff09;进行模型训练和预测&#xff0c;并引入迁移学习模型…...

Raingad IM即时聊天/即时通讯网站源码,附带系统搭建教程

支持功能 支持单聊和群聊&#xff0c;支持发送表情、图片、语音、视频和文件消息单聊支持消息已读未读的状态显示&#xff0c;在线状态显示群聊创建、删除和群成员管理、群公告、群禁言等支持置顶联系人&#xff0c;消息免打扰&#xff1b;支持设置新消息声音提醒&#xff0c;…...

for语句的实际应用(3)

3145&#xff1a;【例24.3】 奇数求和 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 9847 通过数: 5442 【题目描述】 计算非负整数 m 到 n&#xff08;包括 m 和 n&#xff09;之间的所有奇数的和&#xff0c;其中&#xff0c;m 不大于 n&#xff0c;且 n 不大…...

c++ Windows获取软件安装列表信息

链接 #include <windows.h> #include <stdio.h> #include <iostream> #include <vector>using namespace std;#ifndef MSVCR #define _T #define _tcscpy strcpy #define _stprintf sprintf #define _tcscmp strcmp #endifclass SetupSoftInfo { publ…...

音视频学习笔记——c++多线程(一)

✊✊✊&#x1f308;大家好&#xff01;本篇文章主要整理了部分多线程相关的内容重点&#x1f607;。首先讲解了多进程和多线程并发的区别以及各自优缺点&#xff0c;之后讲解了Thead线程库的基本使用。 本专栏知识点是通过<零声教育>的音视频流媒体高级开发课程进行系统…...

消息队列常见问题

总的来讲&#xff0c;消息队列常见问题要么消息不能多&#xff0c;要么不能少&#xff0c;还有顺序性&#xff0c;以及积压处理的问题等。 1.消息不能多 也就是说&#xff0c;消息不能重复消费&#xff0c;随之带来的幂等性问题。 解决&#xff1a;一般结合业务场景&#xf…...

【leetcode热题】二叉树的前序遍历

难度&#xff1a; 中等通过率&#xff1a; 49.5%题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个二叉树&#xff0c;返回它的 前序 遍历。 示例: 输入: [1,null,2,3] 1\2/3 输出: [1,2,3]进阶: 递归算法很简单&#xff0c;你可以通过迭代…...

Linux命令记不住?保姆级教程来了

在软件开发过程中&#xff0c;Linux操作系统因其稳定性、安全性和高效性而备受青睐。作为开发者&#xff0c;熟练掌握Linux常用命令&#xff0c;不仅可以提高工作效率&#xff0c;还能更好地管理服务器和进行代码部署。本文将介绍一些开发常用的Linux命令及其应用场景&#xff…...

基于GitBucket的Hook构建ES检索PDF等文档全栈方案

背景 之前已简单使用ES及Kibana和在线转Base64工具实现了检索文档的demo&#xff0c;预期建设方案是使用触发器类型从公共的文档源拉取最新的文件&#xff0c;然后调用Java将文件转Base64后入ES建索引&#xff0c;再提供封装接口给前端做查询之用。 由于全部内容过长&#xff…...

C语言:数组、字符串知识点整理:

数组&#xff1a;&#xff08;长度的计算&#xff09; 补充&#xff1a;数组长度sizeof(arr)/sizeof(arr[0]) 注意&#xff1a;&#xff01;&#xff01;&#xff01;不适用于当arr 充当形参时&#xff08;函数传参&#xff09;&#xff01;&#xff01;&#xff01; 因为函数…...

Linux mmap系统调用

文章目录 前言一、mmap()函数简介二、代码演示2.1 mmap使用场景2.2 私有匿名映射2.3 私有文件映射2.4 共享匿名映射2.5 共享文件映射 参考 前言 NAMEmmap, munmap - map or unmap files or devices into memorySYNOPSIS#include <sys/mman.h>void *mmap(void *addr, siz…...

VSCode搭建ARM开发环境

为了构建Cortex M系列单片机免费开源的开发环境&#xff0c;网络上了解来看VSCODEGCCJLINK是一套比较高效的组合方式&#xff0c;下面记录环境搭建的流程。 我这边的PC环境为 WIN7专业版64bit。 需要用到的工具 Visual Studio CodeSTM32CubemxARM GCC 交叉编译工具链&#x…...

RTX5互斥量避坑指南:优先级继承、递归锁与Robust属性到底怎么选?

RTX5互斥量深度配置指南&#xff1a;优先级继承、递归锁与健壮属性的实战选择 在嵌入式实时操作系统开发中&#xff0c;资源竞争问题就像一场精心编排的交响乐——每个乐器&#xff08;线程&#xff09;都需要在正确的时间发声。RTX5作为ARM生态中广泛采用的RTOS&#xff0c;其…...

别再只用平均值了!用Python的Seaborn库5分钟画出专业箱形图(附实战数据集)

用Seaborn箱形图5分钟完成数据异常值分析实战 当你拿到一份新数据集时&#xff0c;第一反应是什么&#xff1f;大多数人的本能是计算平均值和标准差——但这对异常值敏感的数据来说可能完全失真。上周我分析电商用户消费数据时就踩了这个坑&#xff1a;一个VIP用户的单笔百万消…...

从两步到五步:时间相移算法在动态与静态测量中的选择策略

1. 时间相移算法的基础认知 第一次接触时间相移算法时&#xff0c;我也被那些数学公式搞得头晕眼花。但后来发现&#xff0c;这东西本质上就是个"多角度拍照"的技术。想象你要给一个立体物体拍照&#xff0c;只拍一张正面照肯定看不出立体形状&#xff0c;但如果从不…...

Dify + LangChain + FastAPI 三端协同集成方案:企业私有化部署必读的6层安全加固清单

第一章&#xff1a;Dify低代码平台集成概述 Dify 是一个开源的 LLM 应用开发平台&#xff0c;支持通过可视化编排与少量代码快速构建 AI 原生应用。其核心价值在于将模型调用、提示工程、RAG 检索、工作流编排等能力封装为可复用组件&#xff0c;使开发者无需从零搭建后端服务即…...

pkNX宝可梦ROM编辑器:打造个性化游戏体验的终极指南

pkNX宝可梦ROM编辑器&#xff1a;打造个性化游戏体验的终极指南 【免费下载链接】pkNX Pokmon (Nintendo Switch) ROM Editor & Randomizer 项目地址: https://gitcode.com/gh_mirrors/pk/pkNX 你是否渴望创造独一无二的宝可梦冒险&#xff1f;想要调整游戏难度、自…...

Java 深度解析:for 循环 vs Stream.forEach 及性能优化指南

一、基础概念与语法对比1.1 传统 for 循环Java 提供了三种主要的传统循环结构&#xff1a;// 1. 索引 for 循环&#xff08;最高性能&#xff09; for (int i 0; i < list.size(); i) {String item list.get(i);System.out.println(item); }// 2. 增强 for 循环&#xff0…...

Degrees of Lewdity汉化版完整指南:5分钟完成中文游戏配置

Degrees of Lewdity汉化版完整指南&#xff1a;5分钟完成中文游戏配置 【免费下载链接】Degrees-of-Lewdity-Chinese-Localization Degrees of Lewdity 游戏的授权中文社区本地化版本 项目地址: https://gitcode.com/gh_mirrors/de/Degrees-of-Lewdity-Chinese-Localization …...

【GD32】DMA实战指南:串口数据高效收发与循环模式应用详解

1. DMA技术基础与GD32实现原理 第一次接触DMA这个概念时&#xff0c;我也被它绕晕过。简单来说&#xff0c;DMA&#xff08;Direct Memory Access&#xff09;就像是你请了个私人助理&#xff0c;专门负责帮你跑腿搬数据。想象一下&#xff0c;你正在写代码&#xff0c;突然需…...

2025届最火的AI写作助手实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 一种借助自然语言处理技术的智能工具&#xff0c;是 AI 写作软件&#xff0c;它能够帮用户迅…...

从周期到成长:中国巨石如何成为AI材料基础设施核心?

4月15日晚间&#xff0c;中国巨石披露2026年一季度业绩预告&#xff0c;预计归母净利润11.69亿元至13.15亿元&#xff0c;同比增长60%至80%&#xff1b;扣非净利润同样增长60%至80%。如果仅从数字看&#xff0c;这是一个典型的高增长季度&#xff0c;但更重要的问题是&#xff…...