谷粒商城实战笔记-65-商品服务-API-品牌管理-表单校验自定义校验器

文章目录

  • 1,el-form品牌logo图片自定义显示
  • 2,重新导入和注册element-ui组件
  • 3,修改brand-add-or-update.vue控件的表单校验规则
    • `firstLetter` 校验规则
    • `sort` 校验规则

1,el-form品牌logo图片自定义显示

为了在品牌列表中自定义显示品牌的Logo图片,我们可以使用Element UI框架提供的el-form组件结合模板插槽来实现。下面是对原有代码的扩展说明:

		<template slot-scope="scope"><i class="el-icon-time"></i><img :src="scope.row.logo" style="max-width: 50px; max-height: 50px;"/></template>

这段代码在el-table-column中通过模板插槽实现了对品牌Logo的自定义显示。当scope.row.logo存在且有效时,会显示品牌Logo图片。如果Logo未能加载,则显示一个默认图标。此外,我们还添加了一些样式来控制Logo的大小。

修改后的品牌列表就显示图片了,效果如下。

在这里插入图片描述

2,重新导入和注册element-ui组件

由于代码生成器可能没有完整地导入所有必要的Element UI组件,我们需要手动导入并注册这些组件到Vue应用中。这样可以确保所有需要的UI元素都能正常工作,并且减少最终构建文件的体积。

在这里插入图片描述

/*** UI组件, 统一使用饿了么桌面端组件库(https://github.com/ElemeFE/element)** 使用:*  1. 项目中需要的组件进行释放(解开注释)** 注意:*  1. 打包只会包含释放(解开注释)的组件, 减少打包文件大小*/
import Vue from 'vue'
import {Pagination,Dialog,Autocomplete,Dropdown,DropdownMenu,DropdownItem,Menu,Submenu,MenuItem,MenuItemGroup,Input,InputNumber,Radio,RadioGroup,RadioButton,Checkbox,CheckboxButton,CheckboxGroup,Switch,Select,Option,OptionGroup,Button,ButtonGroup,Table,TableColumn,DatePicker,TimeSelect,TimePicker,Popover,Tooltip,Breadcrumb,BreadcrumbItem,Form,FormItem,Tabs,TabPane,Tag,Tree,Alert,Slider,Icon,Row,Col,Upload,Progress,Spinner,Badge,Card,Rate,Steps,Step,Carousel,CarouselItem,Collapse,CollapseItem,Cascader,ColorPicker,Transfer,Container,Header,Aside,Main,Footer,Timeline,TimelineItem,Link,Divider,Image,Calendar,Loading,MessageBox,Message,Notification
} from 'element-ui';Vue.use(Pagination);
Vue.use(Dialog);
Vue.use(Autocomplete);
Vue.use(Dropdown);
Vue.use(DropdownMenu);
Vue.use(DropdownItem);
Vue.use(Menu);
Vue.use(Submenu);
Vue.use(MenuItem);
Vue.use(MenuItemGroup);
Vue.use(Input);
Vue.use(InputNumber);
Vue.use(Radio);
Vue.use(RadioGroup);
Vue.use(RadioButton);
Vue.use(Checkbox);
Vue.use(CheckboxButton);
Vue.use(CheckboxGroup);
Vue.use(Switch);
Vue.use(Select);
Vue.use(Option);
Vue.use(OptionGroup);
Vue.use(Button);
Vue.use(ButtonGroup);
Vue.use(Table);
Vue.use(TableColumn);
Vue.use(DatePicker);
Vue.use(TimeSelect);
Vue.use(TimePicker);
Vue.use(Popover);
Vue.use(Tooltip);
Vue.use(Breadcrumb);
Vue.use(BreadcrumbItem);
Vue.use(Form);
Vue.use(FormItem);
Vue.use(Tabs);
Vue.use(TabPane);
Vue.use(Tag);
Vue.use(Tree);
Vue.use(Alert);
Vue.use(Slider);
Vue.use(Icon);
Vue.use(Row);
Vue.use(Col);
Vue.use(Upload);
Vue.use(Progress);
Vue.use(Spinner);
Vue.use(Badge);
Vue.use(Card);
Vue.use(Rate);
Vue.use(Steps);
Vue.use(Step);
Vue.use(Carousel);
Vue.use(CarouselItem);
Vue.use(Collapse);
Vue.use(CollapseItem);
Vue.use(Cascader);
Vue.use(ColorPicker);
Vue.use(Transfer);
Vue.use(Container);
Vue.use(Header);
Vue.use(Aside);
Vue.use(Main);
Vue.use(Footer);
Vue.use(Timeline);
Vue.use(TimelineItem);
Vue.use(Link);
Vue.use(Divider);
Vue.use(Image);
Vue.use(Calendar);Vue.use(Loading.directive);Vue.prototype.$loading = Loading.service
Vue.prototype.$msgbox = MessageBox
Vue.prototype.$alert = MessageBox.alert
Vue.prototype.$confirm = MessageBox.confirm
Vue.prototype.$prompt = MessageBox.prompt
Vue.prototype.$notify = Notification
Vue.prototype.$message = MessageVue.prototype.$ELEMENT = { size: 'medium' }

这里展示了如何导入和注册Element UI组件。需要注意的是,为了减少项目的打包体积,建议只导入和注册实际项目中使用的组件。

3,修改brand-add-or-update.vue控件的表单校验规则

对于brand-add-or-update.vue控件中的表单校验规则,我们进行了如下修改和完善:

dataRule: {name: [{ required: true, message: "品牌名不能为空", trigger: "blur" }],logo: [{ required: true, message: "品牌logo地址不能为空", trigger: "blur" }],descript: [{ required: true, message: "介绍不能为空", trigger: "blur" }],showStatus: [{required: true,message: "显示状态[0-不显示;1-显示]不能为空",trigger: "blur"}],firstLetter: [{validator: (rule, value, callback) => {if (value == "") {callback(new Error("首字母必须填写"));} else if (!/^[a-zA-Z]$/.test(value)) {callback(new Error("首字母必须a-z或者A-Z之间"));} else {callback();}},trigger: "blur"}],sort: [{validator: (rule, value, callback) => {if (value == "") {callback(new Error("排序字段必须填写"));} else if (!Number.isInteger(value) || value<0) {callback(new Error("排序必须是一个大于等于0的整数"));} else {callback();}},trigger: "blur"}]}

以上代码中,我们添加了对firstLettersort字段的校验规则,确保它们符合预期的格式要求。

当然,让我们详细解释一下这两个校验规则的作用:

firstLetter 校验规则

这个规则确保用户输入的品牌首字母满足特定的要求:

  1. 非空检查:

    • 条件: 当用户输入为空("")时。
    • 行为: 触发错误回调,并附带错误信息 "首字母必须填写"
  2. 字母格式检查:

    • 条件: 当用户输入不是单个英文字母时。
    • 行为: 触发错误回调,并附带错误信息 "首字母必须a-z或者A-Z之间"
    • 正则表达式解释: /^[a-zA-Z]$/ 检查输入是否为单个英文字母。这里的正则表达式的组成部分如下:
      • ^ 表示字符串的开始。
      • [a-zA-Z] 表示匹配任何一个大写或小写字母。
      • $ 表示字符串的结束。
      • 因此,整个正则表达式表示只允许一个字母,无论是大写还是小写。
  3. 成功验证:

    • 条件: 用户输入满足以上条件时。
    • 行为: 成功回调,即没有错误发生。

sort 校验规则

这个规则确保用户输入的品牌排序值满足特定的要求:

  1. 非空检查:

    • 条件: 当用户输入为空("")时。
    • 行为: 触发错误回调,并附带错误信息 "排序字段必须填写"
  2. 整数及非负检查:

    • 条件: 当用户输入不是整数或是一个负数时。
    • 行为: 触发错误回调,并附带错误信息 "排序必须是一个大于等于0的整数"
    • 逻辑解释: !Number.isInteger(value) 检查输入是否为整数,而 value < 0 则检查该整数是否小于0。只有当两者都为假时,才认为输入有效。
  3. 成功验证:

    • 条件: 用户输入满足以上条件时。
    • 行为: 成功回调,即没有错误发生。

前后端表单校验原则:

  • 前端校验: 主要用于提高用户体验,减少不必要的网络请求。前端校验应该快速响应用户的输入,给出即时反馈。
  • 后端校验: 必须进行严格的校验,以防止恶意数据提交和数据不一致的情况。即使前端已经进行了校验,后端也应当再次校验所有输入数据。

重要性:

  • 安全性: 防止非法数据被提交到数据库,避免SQL注入等攻击。
  • 一致性: 确保系统中的数据符合预期的数据格式和业务逻辑,保持数据的一致性和准确性。
  • 用户体验: 提供友好的提示信息,帮助用户及时发现错误并进行修正,提高表单填写的效率。

综上所述,合理设计和实现前后端的表单校验机制对于任何Web应用来说都是至关重要的。

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

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

相关文章

最新源支付系统源码 V7版全开源 免授权 附搭建教程

本文来自&#xff1a;最新源支付系统源码 V7版全开源 免授权 附搭建教程 - 源码1688 简介&#xff1a; 最新源支付系统源码_V7版全开源_免授权_附详细搭建教程_站长亲测 YPay是专为个人站长打造的聚合免签系统&#xff0c;拥有卓越的性能和丰富的功能。它采用全新轻量化的界面…

商场导航系统:从电子地图到AR导航,提升顾客体验与运营效率的智能解决方案

商场是集娱乐、休闲、社交于一体的综合性消费空间&#xff0c;随着商场规模的不断扩大和布局的日益复杂&#xff0c;顾客在享受丰富选择的同时&#xff0c;也面临着寻路难、店铺曝光率低以及商场管理效率低下等挑战。商场导航系统作为提升购物体验的关键因素&#xff0c;其重要…

堆的基本实现

一、堆的概念 在提出堆的概念之前&#xff0c;首先要了解二叉树的基本概念 一颗二叉树是节点的有限集合&#xff0c;该集合&#xff1a; 1、或者为空&#xff1b; 2、或者由一个根节点加上两颗分别称为左子树和右子树的两颗子树构成&#xff1b; 堆就是一颗完全二叉树&…

mybatis-plus实现分页功能

第一步&#xff1a;添加mybatis-plus为分页所使用的拦截器插件 &#xff08;不用这个的话sql里面的limit关键字无法实现&#xff0c;也就没办法实现查询操作&#xff09; 代码&#xff1a; Configuration public class mybatis_plus_config {Beanpublic MybatisPlusIntercept…

python-数水果(赛氪OJ)

[题目描述] 已知水果的种类共有 M 种&#xff0c;给出长度为 N 的序列&#xff0c;每个数字表示的是它是哪种水果。求每种水果各有多少个&#xff0c;按照对应编号从小到大的顺序输出。输入&#xff1a; 输入共两行&#xff1a;第一行包含两个整数 N,M(1 < N,M < 10000)&…

解决Firefox代理身份验证弹出窗口问题:C#和Selenium实战指南

引言 在使用Selenium和C#进行网页抓取时&#xff0c;遇到代理服务器的身份验证弹出窗口是一个常见的问题。这不仅会中断自动化流程&#xff0c;还会导致抓取任务失败。本文将提供一个实战指南&#xff0c;帮助开发者解决这个问题&#xff0c;并介绍如何在代码中设置代理IP、Us…

x-cmd mod | x man - man 命令增强

目录 简介例子1. 使用 fzf 列出当前系统上所有的 man 文档2. 显示 ssh 的 man 文档。如果不存在则显示搜索3. 显示 ssh 的 tldr 文档4. 使用交互式 UI 列出包含 "disk" 的 man 文档 使用选项子命令x man --explainx man --fzf 简介 man 模块的主要目的是提升用户查找…

【TypeScript学习打卡第一天】

介绍、常用类型 一、介绍1.概念2.TypeScript 为什么要为 JS 添加类型支持&#xff1f;3.ts的优势 二、ts初体验1.安装编译 TS 的工具包2.编译并运行 TS 代码3.简化运行 TS 的步骤 三、常用类型1.类型注解2.常用基础类型概述(1) 原始类型(2) 数组类型(3) 联合类型(4) 类型别名(5…

第三届人工智能、物联网和云计算技术国际会议(AIoTC 2024,9月13-15)

第三届人工智能、物联网与云计算技术国际会议(AIoTC 2024)将于2024年9月13日-15日在中国武汉举行。 本次会议由华中师范大学伍伦贡联合研究院与南京大学联合主办、江苏省大数据区块链与智能信息专委会承办、江苏省概率统计学会、江苏省应用统计学会、Sir Forum、南京理工大学、…

JDK新特性(Lambda表达式,Stream流)

Lambda表达式&#xff1a; Lambda 表达式背后的思想是函数式编程&#xff08;Functional Programming&#xff09;思想。在传统的面向对象编程中&#xff0c;程序主要由对象和对象之间的交互&#xff08;方法调用&#xff09;构成&#xff1b;而在函数式编程中&#xff0c;重点…

postman给全部接口添加请求头数据(如token)

如果给没有一个接口添加请求头token就太慢了&#xff0c;如下图。可以点击所有接口的所属的目录。点击“Scripts”&#xff0c;点击Pre-request按钮。加入代码&#xff1a; pm.request.addHeader("Authorization:eyJhbGciOiJIUzI1NiIsInR5cCI111pXVCJ9.eyJjbGFpbXMiOnsiaW…

Nginx负载均衡策略

upstream机制提供了负载均衡的功能,可以讲请求负载分担到集群服务器的某个服务器上 打包时候到时一个8085 一个8090 一个8095 nohup /usr/local/develop/jdk-17.0.10/bin/java -Xmx256m -Xms256m -jar nginx-demo-8085.jar > server8085.log 2>&1 & nohup /u…

56_Redis简单命令

一、引言 1.1 数据库压力过大 由于用户量增大&#xff0c;请求数量也随之增大&#xff0c;数据压力过大 一个请求的url 背后可能有有4-5个 sql的操作 每秒钟 qps&#xff08;并发数&#xff09; 1000 背后的sql操作 4000-5000mysql 单机并发量读写 8000-10000 &#x…

鸿蒙配置Version版本号,并获取其值

app.json5中配置版本号&#xff1a; 获取版本号&#xff1a; bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION).then((bundleInfo) > {let versionName bundleInfo.versionName; //应用版本号}).catch((error: BusinessE…

【Vulnhub系列】Vulnhub_DC-1靶场渗透(原创)

【Vulnhub系列靶场】Vulnhub_DC-1靶场渗透 原文转载已经过授权 原文链接&#xff1a;Lusen的小窝 - 学无止尽&#xff0c;不进则退 (lusensec.github.io) 一、环境准备 1、在百度网盘中下载DC-1靶场。DC-1靶场受virtual box 的影响&#xff0c;在VM中直接打开是扫描不到IP 的…

jmeter录制

1、添加代理服务器 添加方法&#xff1a;“测试计划”右键 -> 添加 -> 非测试元件 -> HTTP代理服务器 2、添加线程组 添加方法&#xff1a;“测试计划”右键->添加->线程&#xff08;用户&#xff09;->线程组 3、配置http代理服务器 &#xff08;1&a…

第三方软件测试报告可做哪些用途?

1. 评估软件质量&#xff1a;第三方软件测试报告通过对软件的各项性能指标进行测试和分析&#xff0c;能够客观地评估软件的质量水平。这份报告可以为软件的开发团队提供反馈&#xff0c;帮助他们发现和修复潜在的问题&#xff0c;提高软件的质量和稳定性。 2. 验证软件功能&a…

<数据集>手机识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;16172张 标注数量(xml文件个数)&#xff1a;16172 标注数量(txt文件个数)&#xff1a;16172 标注类别数&#xff1a;1 标注类别名称&#xff1a;[Phone] 使用标注工具&#xff1a;labelImg 标注规则&#xff1a;…

探索分布式光伏运维系统的组成 需要几步呢?

前言 随着光伏发电的不断发展&#xff0c;对于光伏发电监控系统的需求也日益迫切&#xff0c;“互联网”时代&#xff0c;“互联网”的理念已经转化为科技生产的动力&#xff0c;促进了产业的升级发展&#xff0c;本文结合“互联网”技术提出了一种针对分散光伏发电站运行数据…