需求描述

消息类型为跳转外部链接的时候,活动地址为必填项,否则为非必填项

消息类型为跳转外部链接

消息类型为其他

如果使用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 表单校验切换必填和非必填相关推荐

  1. Vue+Element UI 下,如何给一个表单设置自定义规则或多个验证规则(:rules)

    依旧是公司里那个Vue+Element UI的项目.今天遇到了一个新的问题:表单中某个选择器的值不同,控制着下面表单内容是否显示. 大概就是这个样子.由后台返回的"发放方式"的数值 ...

  2. element ui table实现考勤排班表

    1.项目需求 1.1需求 制作如下的考勤排班表,可以显示每个岗位每一天的考勤排班情况,并且可以下拉选择人员排班人员更改. 1.2 难点分析 在表格中嵌入下拉选择功能. 需要动态显示每个月的排班情况,因 ...

  3. element ui需要引入样式吗_ElementUI 修改默认样式的几种办法

    ElementUI 是一套ui组件库,目前最新版本 react 和 vue 等主流框架都有支持.该库默认主题色是天蓝色,若用于项目开发,难免遇到要需求修改其默认样式的情况,本文就基于 react 和 ...

  4. element ui 图片控件 排序_Element-ui上传图片后隐藏上存控件

    在使用Element-ui el-upload组件的时候,发现我只想上存一张图片,比如头像的上存,然而上存一张后,控件还可以继续上存. 一下的方法是Element-ui上传图片后隐藏上存控件. 在el ...

  5. 验证必须是数字php,Element 中表单非必填数据项 必须为数字的验证问题

    Element-ui 的el-form组建中,自带基本的验证功能,比如某些项必填的验证,直接加入rules 规则中即可,如下实例: 在页面中书写如下: 在vue 初始化data中 filterForm ...

  6. 【前端】Vue+Element UI案例:通用后台管理系统-用户管理:Form表单填写、Dialog对话框弹出

    文章目录 目标 代码 0.页面结构 1.新增按钮和弹出表单:结构 2.新增按钮和弹出表单:点击新增弹出表单 3.表单样式 4.表单验证 5.表单的提交和取消功能:接口.mock相关准备 6.表单的提交 ...

  7. Element Ui使用技巧——Form表单的校验规则rules详细说明;element的 form 表单rules详细用法

    本文章是在项目开发时遇到问题看到的一片好文, 摘录自[博客园]–[逍遥云天]. 感谢作者 地址 – https://www.cnblogs.com/xyyt/p/13366812.html 在 [逍遥 ...

  8. 关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题

      方法使用前需了解: 来自"和"小编的小提示: 首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form. 其次在拿到了正确的form后,检查 ...

  9. element ui 表单验证为正整数

    很多时候都会用表单中输入正整数的情况,在element ui中可以用el-input-number 标签来显示输入框是number类型的,或者type="number"也可以的,但 ...

  10. java非必填字段跳过校验,avalon2表单验证,非必填字段在不填写的时候不能通过验证...

    avalon2表单验证,非必填字段在不填写的时候不能通过验证 代码 var vm = avalon.define({ $id: "validate1", aaa : "& ...

最新文章

  1. pytorch JIT浅解析
  2. 极光推送maven与代码,无需修改,粘贴即用
  3. 移动端HTML响应式布局之神奇的pt(自测99.99%与设计图一致)
  4. 终于找到你!如何将前端console.log的日志保存成文件?
  5. css如何让不确定宽度的div水平居中
  6. .net core json 为null输出_SpringBoot实战(九):标准化json返回值
  7. SpringBoot 2.0 Actuator监控系统
  8. 开发一个简单的WebPart
  9. RestFul的学习 2021-04-25
  10. 小米商城抢购脚本_四季度注意了!茅台酒抢购发生了变化
  11. win10你的电脑设备需要修复_cf挑战辅助w10蓝屏后若何用命令提示符修复
  12. 常用NTP网络时间服务器整理
  13. 500并发相当于多少人_linux开发技术之线程池accept处理高并发connect(含源码)
  14. spring boot 实现文件下载
  15. ROS main函数中订阅器的编写
  16. USB之基本协议和数据波形1
  17. 中科院-杨力祥视频教程 02课程
  18. Newton形式的Hermite插值多项式
  19. 8.7.1. Declaration of Enumerated Types
  20. hmc830相位噪声_支持紧凑型LO解决方案,还是靠“PLL VCO”最佳拍档

热门文章

  1. win10计算机加域步骤,win10加域
  2. Zephry Uart Device详解
  3. HTML网页的基本结构
  4. golang中的URL 的编码和解码(转)
  5. 《CSS 揭秘》每章详细读书笔记
  6. 最优二叉查找树,动态规划法,二维表,填表优化,代码
  7. 计算机考研专业课资料百度云,考研专业课资料(一)
  8. CentOS6启用密钥登陆
  9. Dialog顶部空白点击后无法关闭Dialog
  10. 08.ThreeJs开发指南-第八章-加载外部模型