JSFiddle - React, Tailwind, and code Playground
by xs47968224
HTML
<script src="//unpkg.com/vue/dist/vue.js"></script>
<script src="//unpkg.com/element-ui/lib/index.js"></script>
<div id="app">
<el-form :label-position="'right'" label-width="150px" ref="mainForm" :rules="rules" :model="mainForm" >
<el-button type="text" icon="el-icon-plus" class="new-dom-btn" @click="handleNew()">添加新任务</el-button>
<section class="content-box" v-for="(task, index) in mainForm.taskList" :key="task.key" :id="'contentBox'+index" >
<el-form-item
:label="'任务'+index+'开始时间'"
:prop="'taskList.' + index + '.expectStart'"
>
<el-date-picker
v-model="task.expectStart"
type="datetime"
placeholder="任务预估开始时间"
default-time="09:00:00"
format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item
:label="'任务'+index+'预估结束时间'"
:prop="'taskList.' + index + '.expectEnd'"
:rules="[{
validator: (rule, value, callback) => { // 动态验证看这里
// 如果你需要用到index, 这里也可以直接使用: 例 if(index===0){...}
if (!task.expectStart) {
return callback('请先设置预估开始时间')
}
var startTime = new Date(task.expectStart)
var endTime = new Date(value) // 这里用 task.expectEnd 是一样的值
if (startTime >= endTime) {
return callback('预估结束时间必须大于预估开始时间')
}
callback()
}, trigger: 'blur'
}]"
>
<el-date-picker
v-model="task.expectEnd"
type="datetime"
placeholder="任务预估结束时间"
default-time="18:00:00"
format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
</section>
</el-form>
</div>
CSS
@import url("//unpkg.com/element-ui/lib/theme-chalk/index.css");
JavaScript
var Main = {
data() {
return {
mainForm: {
taskList: [{
expectStart: '',
expectEnd: '',
key: '1'
}]
}
}
},
methods: {
handleNew() {
this.mainForm.taskList.unshift({
expectStart: '',
expectEnd: '',
key: Date.now()
})
},
}
}
var Ctor = Vue.extend(Main)
new Ctor().$mount('#app')