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 () {
// 提交
}
相关文章
|
测试技术 API Python
掌握 Playwright:元素操作技巧大揭秘
Playwright Python 库简化了网页元素的交互,如点击和输入文本。使用 `click()` 方法可实现元素点击,`fill()` 方法用于在输入字段填充文本,而 `get_attribute()` 方法则用来获取元素属性值。这些功能在自动化测试和网页爬取中非常实用。
|
存储 SQL 运维
流计算StreamCompute
背景 每年的双十一除了“折扣”,全世界(特别是阿里人)都关注的另一个焦点是面向媒体直播的“实时大屏”(如下图所示)。包括总成交量在内的各项指标,通过数字维度展现了双十一狂欢节这一是买家,卖家及物流小二一起创造的奇迹! 双十一媒体直播大屏 这一大屏背后需要实时处理海量的庞大电商系统各个模块产生的
19573 76
|
PHP 数据安全/隐私保护 Python
小白如何利用python编写爆破脚本(一)
这是一个简单的Python脚本,使用`requests`库进行POST请求密码爆破。脚本读取`usr.txt`和`pwd.txt`文件中的用户名和密码,针对`http://127.0.0.1:80/login.php`发送登录尝试。它模拟浏览器行为,处理响应,并根据用户选择输出所有尝试或仅输出成功登录。成功登录的依据是可以找到预定义的“成功”关键字。代码还包括了延迟和用户交互选项。
|
Web App开发 运维 安全
印象最深的一个bug——排查修复问题事件BEX引发的谷歌浏览器闪退崩溃异常
本文记录了目前修复的千千万万个项目的BUG中印象最深的一次BUG,由于问题事件BEX引发的谷歌浏览器闪退崩溃的异常问题.这个BUG因为其不可复现性导致特别难以发现和解决,正是由于这一次的BUG解决过程,让我了解到了一位攻城狮在项目开发维护过程中实际经验的重要性,多思考,多实践,多多积累经验,才是一位攻城狮的成长之路.
31628 2
印象最深的一个bug——排查修复问题事件BEX引发的谷歌浏览器闪退崩溃异常
开发类似比心的电竞社交类约玩陪玩app,前景如何
曾经,学校门口流动摊位上的海报,个个都是知名明星的脸,现在,游戏人物从中占有一席之地,不仅仅是海报,尺子、笔袋、书签甚至橡皮包装上都印有游戏人物的图案,坐公交时,也常有大叔抱着手机打个不停,中国电竞市场的发展带动了游戏周边产业的发展,像比心、TT语音这样的电竞陪玩app也随之兴起那么,开发电竞社交app,会有前途吗? 一、 从数据实例来看去年11月,“代你玩”获一千万Pre融资,同年7月,暴鸡电竞”完成A+轮融资,金额为1500万美元,再之前,“捞月狗”于17年5月获得4000万B 轮融资,18年3月,又获得2亿融资。
|
8月前
|
Linux 数据安全/隐私保护 Windows
CentOS-6.3-x86_64-minimal 安装教程详细步骤新手入门指南(附安装包)
准备2G以上U盘及ISO刻录工具,下载CentOS 6.3 minimal版镜像,使用Rufus或dd写入U盘。将U盘插入目标电脑,通过BIOS选择U盘启动,进入安装界面后按提示选择语言、键盘布局,自动分区并设置主机名、网络及时区,配置root密码后开始安装。安装完成后重启,拔出U盘,以root账号登录系统,即可使用命令行进行操作。
841 157
坐标系模型 | 带你读《大规模天线波束赋形技术原理与设计 》之二十二
本节介绍 3D 信道模型中局部坐标系和全局坐标系的定义、坐标系间的转换 关系以及双极化天线场分量在全局坐标系中的建模方法。
坐标系模型   | 带你读《大规模天线波束赋形技术原理与设计 》之二十二
|
4月前
|
人工智能 自然语言处理 安全
Windows 平台 OpenClaw 一键部署详细教程
本文详解Windows一键部署OpenClaw教程:全程可视化、免命令行、零代码,5分钟搞定本地AI智能体。支持文件整理、浏览器自动化、数据提取等办公任务,数据本地运行更安全,小白也能轻松上手。
|
7月前
|
Java 网络安全 开发工具
Java微服务项目集成Git云效详细教程
本文介绍了如何使用阿里云CodeUp进行代码管理,包括创建云效组织、初始化代码仓库、生成SSH密钥免密提交、将本地项目推送至云端、创建develop开发分支,并规范团队协作的工作流,实现基于Git的分支管理与Pull Request协同开发。
645 0
|
8月前
|
数据采集 机器学习/深度学习 算法
智慧交通大数据分析
智慧交通大数据分析通过多源数据采集、实时计算与智能算法,实现交通态势感知、拥堵预测、信号优化及应急响应,提升通行效率与出行体验。结合实战案例,展现其在缓解拥堵、提高管理效能方面的显著成效,推动城市交通智能化发展。(238字)
568 0

热门文章

最新文章