使用iview 的表单组件验证 Upload 组件
使用iview 的表单组件验证 Upload 组件
结果:
点击提交按钮, 没有填的form 项, 提示错误, 当填入数据后提示验证成功
代码:
<template>
<div id="user_add">
<Modal
v-model="build"
title="新建"
@on-cancel="AddData = {}"
class-name="vertical-center-modal"
>
<Form ref="add" :model="AddData" :rules="AddRule" :label-width="90">
<FormItem label="apk文件" prop="file">
<Upload
v-model="AddData.file"
:before-upload="handleUpload"
accept=".apk"
:format="['.apk']"
:max-size=102400
action="#"
ref="upload"
>
<Button size="small">选择文件</Button>
</Upload>
<span style="margin-left: 10px">
文件名称:
<span v-if="AddData.file === null">未选择文件</span>
<span v-if="AddData.file !== null">{{ AddData.file.name }}</span>
</span>
</FormItem>
</Form>
<div slot="footer">
<Button type="primary" @click="verification" :loading="loadingStatus">确定</Button>
</div>
</Modal>
</div>
</template> <script>
import { appVersionAdd } from '@/api/systemManage'
export default {
name: 'UserAdd',
data () {
// 自定义验证 判断上传文件 fileList 的长度, 这样就和普通输入框表现一致了
const validateUpload = (rule, value, callback) => {
if (this.AddData.file === null) {
callback(new Error('请选择要上传的文件'))
} else {
callback()
}
}
return {
/* 添加数据 */
AddData: {
remark: '',
file: null
},
/* 表单验证规则 */
AddRule: {
file: [
{ required: true, validator: validateUpload, trigger: 'change' }
]
},
/* 新建框 */
build: false,
/* 上传过程中的加载状态控制 */
loadingStatus: false
}
},
mounted () {
this.init()
},
methods: {
/* 上传excal坐标文件 */
handleUpload (file) {
// 将获取到的文件流赋值给fromData
this.AddData.file = file
// 选择文件后触发验证关闭错误提示
this.$refs['add'].validate(() => {})
},
/* 验证 */
verification () {
this.loadingStatus = true
this.$refs['add'].validate((valid) => {
if (valid) {
this.upload()
} else {
this.loadingStatus = false
}
})
},
/* 提交 */
upload () {
// 创建上传文件用的formData
let param = new FormData()
param.append('file', this.AddData.file)
param.append('remark', this.AddData.remark)
this.params = param
// 将FormData作为参数用axios上传,此处的axios经过封装
appVersionAdd(this.params).then((res) => {
if (res.data.code === '0000') {
this.$Notice.success({ title: '上传成功' })
this.loadingStatus = false
} else {
this.loadingStatus = false
}
})
}
}
}
</script> <style scoped lang="scss">
</style>
<style lang="scss">
/* 弹出框竖直居中 */
.vertical-center-modal{
display: flex;
align-items: center;
justify-content: center;
text-align: left;
.ivu-modal{
top: 0;
}
}
</style>
钻研不易,转载请注明出处。。。。。。
使用iview 的表单组件验证 Upload 组件的更多相关文章
- Form表单组件验证
第一版:最基本版本 views源码 #——————————————————————form验证—————————————— from django import forms from django.f ...
- 文档驱动 —— 表单组件(六):基于AntDV的Form表单的封装,目标还是不写代码
开源代码 https://github.com/naturefwvue/nf-vue3-ant 也不知道大家是怎么写代码的,这里全当抛砖引玉 为何封装? AntDV非常强大,效果也非常漂亮,功能强大, ...
- ReactJS实用技巧(2):从新人大坑——表单组件来看State
不太清楚有多少初学React的同学和博主当时一样,在看完React的生命周期.数据流之后觉得已经上手了,甩开文档啪啪啪的开始敲了起来.结果...居然被一个input标签给教做人了. 故事是这样的:首先 ...
- 【form】 表单组件说明
form表单组件 1)将form组件内的用户输入的<switch/> <input/> <checkbox/> <slider/> <radio/ ...
- 文档驱动 —— 表单组件(五):基于Ant Design Vue 的表单控件的demo,再也不需要写代码了。
源码 https://github.com/naturefwvue/nf-vue3-ant 特点 只需要更改meta,既可以切换表单 可以统一修改样式,统一升级,以最小的代价,应对UI的升级.切换,应 ...
- reactjs入门到实战(八)----表单组件的使用
表单组件支持几个受用户交互影响的属性: value,用于 <input>.<textarea> 组件. checked,用于类型为 checkbox 或者 radio 的 &l ...
- 通过html()的方法获取文本内容, form表单组件显示的值与获取到的值不一致的问题
我在通过 html()获取对应节点的内容,发现一个问题,获取到的 form表单组件的内容值是初始加载的值,而不是经过用户修改后的值.例如页面加载时组件<input type="text ...
- 如何实现Ant design表单组件封装?
目标:自己实现一个antd表单组件 先看下Ant Design官网上给出的表单组件用法: import React, { Component } from 'react' import { Form, ...
- django基础之day09,创建一个forms表单组件进行表单校验,知识点:error_messages,label,required,invalid,局部钩子函数,全局钩子函数, forms_obj.cleaned_data,forms_obj.errors,locals(), {{ forms.label }}:{{ forms }},{{ forms.errors.0 }}
利用forms表单组件进行表单校验,完成用户名,密码,确认密码,邮箱功能的校验 该作业包含了下面的知识点: error_messages,label,required,invalid,局部钩子函数,全 ...
随机推荐
- Redis内存满了的几种解决方法(内存淘汰策略与Redis集群)
1,增加内存: 2,使用内存淘汰策略. 3,Redis集群. 重点介绍下23: 第2点: 我们知道,redis设置配置文件的maxmemory参数,可以控制其最大可用内存大小(字节). 那么当所需内存 ...
- Anaconda 改为国内镜像的方法
Anaconda的conda 特别好用 但如果用国外的镜像,慢的出奇 可以改为了国内镜像会好很多 conda config --add channels https://mirrors.tuna.ts ...
- SSH开发中 使用超链接到action 其excute方法会被执行两次 actual row count: 0; expected: 1
由于执行两次excute,所以在做删除操作的时候会出现 Batch update returned unexpected row count from update [0]; actual row c ...
- UML学习笔记_02_UML初识(简单的流程)
UML建模简单流程: 分析->定义用例->定义领域模型->定义交互图->定义设计类图 1.分析: 分析需求,对项目的结构有一个大致的定义 2.定义用例: 用例是需求分析的一种工 ...
- pyqt5 工具栏文字图片同时显示
import sys from PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction, QApplication from PyQt5.QtGu ...
- 《Javascript 语言精粹》 中 用到的一些代码 (1)
var isNumber = function isNumber(value){ return typeof value === 'number' && isFinite(value) ...
- 04 npm 命令大全
一.npm简介 npm(Node Package Manager)是随同node.js 一起安装的包管理工具,为了解决nodejs代码部署上的很多问题,常用以下场景: 允许用户从npm服务器下载别 ...
- go语言20小时从入门到精通(六、工程管理)
在实际的开发工作中,直接调用编译器进行编译和链接的场景是少而又少,因为在工程中不会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系.如果这样一个文件一个文件逐步编译,那不亚于一场灾难. Go语 ...
- vue中refs的使用
最近在看其他项目的过程中,发现在dom节点上使用了ref="xxx"的使用,以前一直不知道该属性起着什么作用,因为一直忙着写项目. 这两天项目不忙了,有闲心来看别人做的项目了,就看 ...
- CTF—攻防练习之HTTP—SQL注入(SSI注入)
主机:192.168.32.152 靶机:192.168.32.161 ssI是赋予html静态页面的动态效果,通过ssi执行命令,返回对应的结果,若在网站目录中发现了.stm .shtm .shtm ...