## iView表单验证器问题 - 已填入字段值仍提示为空时,记得在data中添加该字段初始值 - 注意设置验证数据类型`type`需与字段类型保持一致,详见 [async-validator](https://github.com/yiminghe/async-validator) (iView基于该项目实现的数据验证)。以下为`type`的可选值: * `string`: 必须为`string`【默认值】 * `number`: 必须为`number` * `boolean`: 必须为`boolean` * `method`: 必须为`function` * `regexp`: 必须满足有效的正则表达式 * `integer`: 必须为`number`并且为整型 * `float`: 必须为`number`并且为浮点数 * `array`: 必须为数组`Array.isArray` * `object`: 必须为`object`并且不是数组`Array.isArray` * `enum`: 必须为`enum`枚举类型 * `date`: 必须为`Date`日期类型 * `url`: 必须为`url` * `hex`: 必须为`hex`十六进制 * `email`: 必须为`email`邮箱格式 * `any`: 可以为任意类型 ## iView日期组件表单验证+后端接收校验【编辑日期字段】 - 后端统一转化并接收指定时间格式字符串,因前端组件仅支持date类型,且减少前端时间转化工作量,不建议使用时间戳格式存储,注意时区的设定 ``` java @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") // XBoot提供的自定义日期校验注解 @DateValidator private Date createTime; ``` - 前端提交数据前记得处理转换时间格式,使用全局挂载的`date-fns`提供的时间转换方法`format()` - 表单验证验证需要为必填字段时,建议`type`填写为`date`,避免类型转换导致验证不通过 > 示例 ``` javascript ... <!-- Template部分 --> <Form ref="form" :model="form" :label-width="80" :rules="formValidate"> <FormItem label="日期" prop="date"> <DatePicker v-model="form.date" type="date"/> </FormItem> </Form> ... // JS部分 formValidate: { date: [{ required: true, type: "date", message: "不能为空", trigger: "blur" }] } ... methods: { submit(v) { if (typeof this.form.date == "object") { this.form.date = this.format(this.form.date, "yyyy-MM-dd"); } } } ... ``` ## iView日期范围选择组件表单非空验证 - 验证规则如下 ``` 日期字段名: [ { type: "array", required: true, trigger: "change", fields: { 0: { type: "date", message: "起始日期不能为空", required: true }, 1: { type: "date", message: "结束日期不能为空", required: true } }, }, ] ``` ## iView表单验证失效 - 请检查是否满足以下条件: 1. FormItem中prop属性是否匹配 2. 验证规则中type是否与数据类型匹配(多修改尝试) 3. Form字段初始值是否缺失或类型不匹配 ## 前端Long类型精度丢失 > 例如:201911200001725439这样一个Long类型数,传给前端后会变成201911200001725440,超过了JavaScript的Number类型最大16位长度 - 字段上使用注解:`@JSONField(serializeUsing= ToStringSerializer.class)` - 或更换为`java.lang.String`类型