在 iView(View Design)框架中,为 <DatePicker>
组件编写表单验证规则需要通过 Form 组件 的 rules
属性实现。以下是具体步骤和代码示例:
1. 确保表单结构正确
将 <DatePicker>
包裹在 <FormItem>
中,并设置 prop
属性与数据字段名一致(这里是 date
):
html
<template>
<Form :model="workOrderForm" :rules="rules" ref="form">
<FormItem prop="date">
<DatePicker
v-model="workOrderForm.date"
transfer
type="datetime"
format="yyyy-MM-dd HH:mm"
placeholder="请选择时间"
></DatePicker>
</FormItem>
</Form>
</template>
2. 定义验证规则(Rules)
在 Vue 组件的 data
或 computed
中定义 rules
对象,编写 date
字段的验证规则:
基础验证(必填项)
javascript
data() {
return {
workOrderForm: {
date: "" // 初始值需与格式匹配(空字符串或 null)
},
rules: {
date: [
{
required: true,
message: "请选择时间",
trigger: "change" // 触发时机为值变化时
}
]
}
};
}
高级验证(自定义逻辑)
若需要更复杂的验证(如时间范围、格式校验),可使用 validator
函数:
javascript
rules: {
date: [
{ required: true, message: "请选择时间", trigger: "change" },
// 自定义验证:时间不能早于当前时间
{
validator: (rule, value, callback) => {
if (new Date(value) < new Date()) {
callback(new Error("时间不能早于当前时间"));
} else {
callback();
}
},
trigger: "change"
},
// 格式校验(正则表达式)
{
pattern: /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/,
message: "时间格式必须为 yyyy-MM-dd HH:mm",
trigger: "change"
}
]
}
3. 提交时触发表单验证
通过 this.$refs.form.validate()
手动触发表单验证:
javascript
methods: {
submitForm() {
this.$refs.form.validate(valid => {
if (valid) {
// 验证通过,提交数据
console.log("提交数据:", this.workOrderForm);
} else {
// 验证失败
console.log("表单验证失败");
}
});
}
}
4. 注意事项
prop
必须与rules
键名一致 :
如<FormItem prop="date">
对应rules: { date: [...] }
。- 日期格式一致性 :
如果DatePicker
设置了format="yyyy-MM-dd HH:mm"
,v-model
绑定的值应为字符串格式(如"2023-10-01 14:30"
),而非Date
对象。 - 触发时机
trigger
:change
:值变化时触发(默认推荐)。blur
:失去焦点时触发(适用于输入型组件)。
完整示例代码
html
<template>
<Form :model="workOrderForm" :rules="rules" ref="form">
<FormItem prop="date">
<DatePicker
v-model="workOrderForm.date"
transfer
type="datetime"
format="yyyy-MM-dd HH:mm"
placeholder="请选择时间"
></DatePicker>
</FormItem>
<Button @click="submitForm">提交</Button>
</Form>
</template>
<script>
export default {
data() {
return {
workOrderForm: {
date: ""
},
rules: {
date: [
{ required: true, message: "请选择时间", trigger: "change" },
{
validator: (rule, value, callback) => {
if (new Date(value) < new Date()) {
callback(new Error("时间不能早于当前时间"));
} else {
callback();
}
},
trigger: "change"
}
]
}
};
},
methods: {
submitForm() {
this.$refs.form.validate(valid => {
if (valid) {
console.log("提交数据:", this.workOrderForm);
}
});
}
}
};
</script>
通过以上步骤,即可为 iView 的 <DatePicker>
组件添加灵活的表单验证规则。