iview 表单提交之前验证是否符合条件

简介: iview 表单提交之前验证是否符合条件

在表单提交之前 调用接口校验用户输入是否符合条件
符合则通过, 不符合 不让提交

 <Card :title="title">
      <Form class="mt10" :model="editFormData" :rules="editFormValidate" style="width:500px;"  ref="editForm"  :label-width="100">
        <FormItem label="商品分类 :" label-position="left" prop="categoryId">
          <Select v-model="editFormData.categoryId" @on-change='changeCategory'>
            <Option v-for="item in classifyList" :value="item.value" :key="item.label">{{item.label}}</Option>
          </Select>
        </FormItem>
        <FormItem label="品牌名称 :" prop="brandName">
          <Input maxlength="50" show-word-limit placeholder="请输入品牌名称" v-model="editFormData.brandName" />
        </FormItem>
        <FormItem label="商品名称 :" prop="name">
          <Input maxlength="50" show-word-limit placeholder="请输入商品名称" v-model="editFormData.name" />
        </FormItem>
       <div class="flex">
        <FormItem label="商品规格 :" prop="specifications" style="width:75%">
          <Input placeholder="请输入商品规格" v-model="editFormData.specifications" maxlength="9" show-word-limit/>
        </FormItem>
        <FormItem prop="unit" class="unitInput" style="width:25%">
          <Select v-model="editFormData.unit"  placeholder="规格单位">
            <Option v-for="item in unitList" :value="item.value" :key="item.label">{{item.label}}</Option>
          </Select>
        </FormItem>
       </div>
        <FormItem label="图片上传 :" prop="file">
          <div v-if="photo" class="upload-img">
            <img height="100%" :src="photo" />
          </div>
          <Upload type="drag" v-model="editFormData.file" style="display:inline-block;width:100px;" :max-size="200" accept=".png" :format="['png']" :before-upload="fileBeforeUpload" action="//">
            <div v-if="!photo" style="width: 100px;height:100px;line-height: 100px;">
              <Icon type="md-add" size="20"></Icon>
            </div>
            <span v-else class="cp">更换</span>
          </Upload>
          <div class="tips">请上传200K以内的PNG格式图片,尺寸为750x750</div>
        </FormItem>
        <FormItem label="商品条码 :" prop="barCode">
          <Input  maxlength="20" show-word-limit placeholder="可以输入商品外包装条形码,或者自行定义的商品码" v-model="editFormData.barCode"/>
        </FormItem>
        <FormItem label="品目编码 :" prop="itemCode">
          <Input maxlength="50" show-word-limit placeholder="(选填)" v-model="editFormData.itemCode" />
        </FormItem>
        </FormItem>
      </Form>
    </Card>
    <div class="tac mt10">
      <Button class="btn" style="margin-right: 8px" @click="handleReset('editForm')">返回</Button>
      <Button class="btn" type="primary" @click="handleSubmit('editForm',submitForm)" :loading="btnLoading">提交</Button>
    </div>
export default {
  data () {
   const validateFile = (rule, value, callback) => {
      if (!this.photo && !this.editFormData.file) {
        callback(new Error('请上传图片'))
      } else {
        callback()
      }
    }
    // 校验商品条码
    const valideBarCode = (rule, value, callback) => {
      var reg = /^[0-9]+$/i
      if (!reg.test(value)) return callback()
      let id
      if (this.actionType === 'add') {
        id = 0
      } else {
        id = this.$route.params['id']
      }
      const data = {
        type: 1,
        code: value,
        id: id
      }
      checkGoods(data).then(res => {
        const {
          data: { data }
        } = res
        if (data) {
          callback(new Error('商品条码重复,请重新输入'))
        } else {
          callback()
        }
      }, err => {
        // 接口错误
        console.log(err)
      }).catch(err => {
        // 处理逻辑出错
        console.log(err)
      })
    }
    // 校验品目条码
    const valideItemCode = (rule, value, callback) => {
      console.log(value)
      let id
      if (this.actionType === 'add') {
        id = 0
      } else {
        id = this.$route.params['id']
      }
      const data = {
        type: 2,
        code: value,
        id: id
      }
      checkGoods(data).then(res => {
        const {
          data: { data }
        } = res
        if (data) {
          callback(new Error('商品条码重复,请重新输入'))
        } else {
          callback()
        }
      }, err => {
        // 接口错误
        console.log(err)
      }).catch(err => {
        // 处理逻辑出错
        console.log(err)
      })
    }
  }
}

 return {
  barCode: [
          { required: true, message: '请输入数字条码', trigger: 'change' },
          { validator: valideBarCode, trigger: 'blur' },
          { message: '请输入20字以内的数字条码', trigger: 'change', pattern: /^[0-9]+$/i }
        ],
        itemCode: [
          { required: false, message: '请输入品目编码', trigger: 'change' },
          { message: '请输入50字以内 数字和字母的品目编码', trigger: 'change', pattern: /^[A-Za-z0-9]+$/ },
          { validator: valideItemCode, trigger: 'blur' }
        ],
}
submitForm () {
// 提交
}
相关文章
|
存储 物联网 数据管理
使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(12)
现在到了使用Apache IoTDB进行IoT相关开发的架构设计与功能实现的最后一个环境,在本文中我将向大家介绍IoTDB的查询语言。IoTDB为咱们广大开发者提供了类似SQL的查询语言,用于与IoTDB进行交互,查询语言可以分为4个主要部分:架构语句、数据管理语句、数据库管理语句、功能。
721 0
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
大模型应用:TextRank+大模型:轻量化算法与大模型协同的文本摘要实践.99
本文提出“TextRank粗摘+大模型精摘”融合方案:用轻量TextRank快速提取核心句与关键词,再借大模型润色生成流畅、精准、场景适配的摘要。兼顾效率与质量,降低门槛与成本,适合论文、会议、内容等高频场景。
404 3
|
11月前
|
新能源 Java Go
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
361 0
|
数据采集 自然语言处理 Java
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战
本文以反面教材形式,剖析了在使用 Playwright 爬取懂车帝车友圈问答数据时常见的配置错误(如未设置代理、Cookie 和 User-Agent),并提供了 Python、Java 和 .NET 三种语言的修复代码示例。通过错误示例 → 问题剖析 → 修复过程 → 总结教训的完整流程,帮助读者掌握如何正确配置爬虫代理及其它必要参数,避免 IP 封禁和反爬检测,实现高效数据采集与分析。
971 3
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战
|
分布式计算 DataWorks 大数据
🚀DataWorks 深度实践与评测:数据治理新时代的全景体验。
在数字化转型中,企业不仅需要技术创新,更需完善的**数据管理和开发治理工具**。DataWorks 作为阿里云推出的一站式智能大数据平台,整合了阿里巴巴15年的大数据经验,提供从数据接入、开发、治理到资产管理的全流程解决方案。它支持湖仓一体架构,内置AI助手提升开发效率,并适用于金融、零售等多行业。本文将深入探讨 DataWorks 的功能、应用场景及性能表现,通过用户画像分析实践展示其强大潜力...
885 8
🚀DataWorks 深度实践与评测:数据治理新时代的全景体验。
|
存储 人工智能 安全
有奖体验 AI 模特换装,解锁电商视觉新体验
在电商中,制作精美的商品展示图成本高且流程复杂。AI 换装技术允许商家快速更换模特的服装或配件,无需重新拍摄,大大缩短准备时间。这项技术减少了对专业摄影师和后期团队的依赖,使中小商家也能轻松产出高质量的商品图片,灵活响应市场变化,有效降低成本,提升竞争力。本方案利用函数计算 FC 构建 Web 服务,采用百炼视觉模型 qwen-vl-max-latest、aitryon、aitryon-refiner、shoemodel-v1 来分别实现 AI 人物主体信息提取、模特试衣、试衣精修、模特换鞋。
|
测试技术 API Python
掌握 Playwright:元素操作技巧大揭秘
Playwright Python 库简化了网页元素的交互,如点击和输入文本。使用 `click()` 方法可实现元素点击,`fill()` 方法用于在输入字段填充文本,而 `get_attribute()` 方法则用来获取元素属性值。这些功能在自动化测试和网页爬取中非常实用。
|
存储 关系型数据库 MySQL
MySQL主键谁与争锋:MySQL为何钟爱自增主键ID+UUID?
本文深入探讨了在MySQL中使用自增类型主键的优势与局限性。自增主键通过保证数据的有序性和减少索引维护成本,提升了查询和插入性能,简化了数据库管理和维护,并提高了数据一致性。然而,在某些业务场景下,如跨表唯一性需求或分布式系统中,自增主键可能无法满足要求,且存在主键值易预测的安全风险。因此,选择主键类型时需综合考虑业务需求和应用场景。
688 2
|
前端开发 Java API
解密 asyncio 的 Future 和 Task
解密 asyncio 的 Future 和 Task
996 2
|
PHP 数据安全/隐私保护 Python
小白如何利用python编写爆破脚本(一)
这是一个简单的Python脚本,使用`requests`库进行POST请求密码爆破。脚本读取`usr.txt`和`pwd.txt`文件中的用户名和密码,针对`http://127.0.0.1:80/login.php`发送登录尝试。它模拟浏览器行为,处理响应,并根据用户选择输出所有尝试或仅输出成功登录。成功登录的依据是可以找到预定义的“成功”关键字。代码还包括了延迟和用户交互选项。

热门文章

最新文章