element ui表单必填_elementUI 表单校验切换必填和非必填
需求描述
消息类型为跳转外部链接的时候,活动地址为必填项,否则为非必填项
消息类型为跳转外部链接
消息类型为其他
如果使用elementUI 的表单验证rules来校验的话,经过测试,elementui在组件初始化后校验规则就定型了,切换是没有效果的
解决方案
第一步:去掉"活动地址”中rules校验的规则,即target
第二步:在“活动地址”的form-item上添加required属性
第三步:计算属性,计算给required赋值的属性
效果如下图
第四步:设置自定义提示
使用自定义函数控制流程,把“活动地址”的校验重新加入rules里面
然后设置validateName函数,根据需求去做一些自己的判断
贴上完整代码
CNS管理
医生端消息推送
新增
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
v-model="form.executeTime"
type="date"
size="small"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
placeholder="选择日期">
All
指定手机医生
返回
保存
export default {
name: "add-doctor-push-notification",
data () {
// 验证活动地址的函数
let validateName = (rule, value, callback) => {
if (this.isShowTarget) {
if (value) {
callback()
} else {
callback(new Error("请输入活动地址"))
}
} else {
callback()
}
};
let validateMobile = (rule, value, callback) => {
if (this.isShowExecuteRange) {
if (value) {
callback()
} else {
callback(new Error("请输入手机号"))
}
} else {
callback();
}
}
return {
form: {
projectType: "dr", // app信息 pt患者端 dr医生端
content: "", //消息内容
executeRange: "all", //推送范围 all所有 assign指定
executeRangeRef: "", // 推送范围对应的扩展信息
executeTime: "", //触发时间
id: "", //主键
logo: "", //logo
target: "", //相关信息
targetType: "", // 消息类型 url_address 外部地址引用;only_show 不跳转;homePage 首页
title: "" //消息标题
},
checkTarget: "",
checkExecuteRange: "",
options: [{
value: 'url_address',
label: '跳转外部链接'
}, {
value: 'only_show',
label: '不跳转'
}, {
value: 'homePage',
label: '首页'
}],
rules:{
title: [
{ required: true, message: '请输入消息标题', trigger: 'blur' },
{ min: 1, max: 50, message: '长度在 1 到 50 个字符', trigger: 'blur' }
],
content: [
{ required: true, message: '请输入消息内容', trigger: 'blur' },
{ min: 1, max: 50, message: '长度在 1 到 50 个字符', trigger: 'blur' }
],
targetType: [
{ required: true, message: '请输入消息类型', trigger: 'blur' },
{ min: 1, max: 50, message: '长度在 1 到 50 个字符', trigger: 'blur' }
],
target: [
{ validator: validateName }
],
executeTime: [
{ required: true, message: '请输入触发时间', trigger: 'blur' },
{ min: 1, max: 50, message: '长度在 1 到 50 个字符', trigger: 'blur' }
],
executeRange: [
{ required: true, message: '请输入触发范围', trigger: 'blur' },
{ min: 1, max: 50, message: '长度在 1 到 50 个字符', trigger: 'blur' }
],
executeRangeRef: [
{ validator: validateMobile }
]
}
}
},
computed: {
isShowTarget () {
return this.form.targetType ==='url_address'
},
isShowExecuteRange () {
return this.form.executeRange ==='assign'
}
},
created () {
this.init()
},
mounted () {
this.$nextTick(() => {
console.log('mounted')
})
},
methods: {
// 初始化
init () {
if (this.$route.query.id) {
this.getPushNotificationDetail(this.$route.query.id)
}
console.log('---------init--')
},
// 新增消息推送按钮事件
addMsgPush () {
this.$refs.form.validate((valid) => {
if (valid) {
this.$messageBox.confirm('确定保存编辑项?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
let param = {...this.form}
if (this.$route.query.id) {
this.savePushNotification (param, this.$route.query.id, this.$configInfo.httpType.put)
} else {
this.savePushNotification (param, "", this.$configInfo.httpType.post)
}
}).catch(() => {
this.$message({
type: 'info',
message: '已取消保存'
})
})
} else {
return false;
}
});
},
// 保存消息推送
async savePushNotification (param, query, type) {
try {
let dataResult = await this.$asyncAjax.getPushNotification(param, query, type)
this.$message({
type: 'success',
message: '保存成功'
})
this.$router.push({
path: '/doctor-push-notification'
})
console.log(dataResult)
} catch (e) {
console.log(e)
}
},
// 获取详情
async getPushNotificationDetail (id) {
try {
let dataResult = await this.$asyncAjax.getPushNotification("", id, this.$configInfo.httpType.get)
console.log(dataResult)
this.form = {...dataResult}
} catch (e) {
console.log(e)
}
},
// 下拉框选中的值
selectChange (val) {
switch (val) {
case "url_address":
break
default:
this.form.target = ""
}
},
// 单选按钮选中的值
radioChange (val) {
switch (val) {
case "assign":
break
default:
this.form.executeRangeRef = ""
}
}
}
}
.section-layout{
background-color: #fff;
box-sizing: border-box;
padding-bottom: 100px;
}
.section-layout form {
// padding-left: 100px;
padding: 10px 100px 10px;
}
.button-group{
position: fixed;
bottom: 0;
width: calc(100% - 300px);
z-index: 999;
box-sizing: border-box;
background-color: #fff;
text-align: right;
border-top: 1px solid #eee;
padding-top: 20px;
padding-bottom: 20px;
padding-right: 20px;
}
element ui表单必填_elementUI 表单校验切换必填和非必填相关推荐
- Vue+Element UI 下,如何给一个表单设置自定义规则或多个验证规则(:rules)
依旧是公司里那个Vue+Element UI的项目.今天遇到了一个新的问题:表单中某个选择器的值不同,控制着下面表单内容是否显示. 大概就是这个样子.由后台返回的"发放方式"的数值 ...
- element ui table实现考勤排班表
1.项目需求 1.1需求 制作如下的考勤排班表,可以显示每个岗位每一天的考勤排班情况,并且可以下拉选择人员排班人员更改. 1.2 难点分析 在表格中嵌入下拉选择功能. 需要动态显示每个月的排班情况,因 ...
- element ui需要引入样式吗_ElementUI 修改默认样式的几种办法
ElementUI 是一套ui组件库,目前最新版本 react 和 vue 等主流框架都有支持.该库默认主题色是天蓝色,若用于项目开发,难免遇到要需求修改其默认样式的情况,本文就基于 react 和 ...
- element ui 图片控件 排序_Element-ui上传图片后隐藏上存控件
在使用Element-ui el-upload组件的时候,发现我只想上存一张图片,比如头像的上存,然而上存一张后,控件还可以继续上存. 一下的方法是Element-ui上传图片后隐藏上存控件. 在el ...
- 验证必须是数字php,Element 中表单非必填数据项 必须为数字的验证问题
Element-ui 的el-form组建中,自带基本的验证功能,比如某些项必填的验证,直接加入rules 规则中即可,如下实例: 在页面中书写如下: 在vue 初始化data中 filterForm ...
- 【前端】Vue+Element UI案例:通用后台管理系统-用户管理:Form表单填写、Dialog对话框弹出
文章目录 目标 代码 0.页面结构 1.新增按钮和弹出表单:结构 2.新增按钮和弹出表单:点击新增弹出表单 3.表单样式 4.表单验证 5.表单的提交和取消功能:接口.mock相关准备 6.表单的提交 ...
- Element Ui使用技巧——Form表单的校验规则rules详细说明;element的 form 表单rules详细用法
本文章是在项目开发时遇到问题看到的一片好文, 摘录自[博客园]–[逍遥云天]. 感谢作者 地址 – https://www.cnblogs.com/xyyt/p/13366812.html 在 [逍遥 ...
- 关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题
方法使用前需了解: 来自"和"小编的小提示: 首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form. 其次在拿到了正确的form后,检查 ...
- element ui 表单验证为正整数
很多时候都会用表单中输入正整数的情况,在element ui中可以用el-input-number 标签来显示输入框是number类型的,或者type="number"也可以的,但 ...
- java非必填字段跳过校验,avalon2表单验证,非必填字段在不填写的时候不能通过验证...
avalon2表单验证,非必填字段在不填写的时候不能通过验证 代码 var vm = avalon.define({ $id: "validate1", aaa : "& ...
最新文章
- pytorch JIT浅解析
- 极光推送maven与代码,无需修改,粘贴即用
- 移动端HTML响应式布局之神奇的pt(自测99.99%与设计图一致)
- 终于找到你!如何将前端console.log的日志保存成文件?
- css如何让不确定宽度的div水平居中
- .net core json 为null输出_SpringBoot实战(九):标准化json返回值
- SpringBoot 2.0 Actuator监控系统
- 开发一个简单的WebPart
- RestFul的学习 2021-04-25
- 小米商城抢购脚本_四季度注意了!茅台酒抢购发生了变化
- win10你的电脑设备需要修复_cf挑战辅助w10蓝屏后若何用命令提示符修复
- 常用NTP网络时间服务器整理
- 500并发相当于多少人_linux开发技术之线程池accept处理高并发connect(含源码)
- spring boot 实现文件下载
- ROS main函数中订阅器的编写
- USB之基本协议和数据波形1
- 中科院-杨力祥视频教程	02课程
- Newton形式的Hermite插值多项式
- 8.7.1. Declaration of Enumerated Types
- hmc830相位噪声_支持紧凑型LO解决方案,还是靠“PLL VCO”最佳拍档