## 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`类型
- 前言&版本说明
- 概念
- XBoot 是什么?
- 系统架构
- 主要使用的开源组件
- 角色控制访问权限(RBAC)
- 用户手册
- 系统配置
- 工作流使用配置
- 定时任务调度
- 智能助手客服机器人
- 项目本地运行
- 后端运行
- 前端运行
- 项目结构说明
- 附:使用Oracle等数据库
- 模块化版本
- 后端开发指南
- 基本开发指南
- 前后端数据交互标准
- 工具类及数据权限
- 代码生成器-30秒搞定CRUD
- 增删改查CRUD
- 日志类型注解扩展
- 逻辑删除
- 各验证码使用及配置
- 接口文档使用及认证
- 前端开发指南
- 基本开发指南
- 主题/Logo/首页等配置
- 路由菜单配置
- 多语言国际化配置
- 自定义图标icon
- 工具类及数据获取
- 其他说明
- 完整版开发指南
- 前端Vue代码生成器
- Activiti工作流
- 单点登录配置
- 智能助手/客服机器人
- MinIO对象存储服务搭建
- 第三方社交账号配置
- 短信开发/站内消息/邮件
- Vaptcha验证码
- 禁用词使用
- 前端移除CDN
- 其他说明
- 开放平台及单点登录
- 开放平台使用指南
- Web接入开发流程
- 单点登录开发指南
- 微信小程序端开发指南
- 项目导入与开发必读
- 业务组件
- 产品组件(小)
- 产品组件(大)
- 优惠券组件
- 评论列表组件
- 红包组件
- 推荐商品组件
- 页面设计
- 商品详情页及SKU设计
- 通用方法工具类说明
- 开发经验与踩坑分享
- Uniapp端开发指南
- APP后端开发指南
- Uniapp前端开发指南
- 开发新功能示例
- 后端开发新模块
- 前端开发新页面
- 测试
- SonarQube代码质量管理
- TestNG单元测试
- ExtentReports测试报告
- Selenuim自动化Web测试
- Appuim自动化App测试
- JMeter压测性能测试
- 部署
- Spring Boot配置
- 快速部署
- 后端部署
- 前端部署
- 前端部署优化
- Docker容器化部署
- 服务器配置
- 持续集成
- GitLab
- GitLab CI
- XBoot 脚本参考
- Jenkins
- Jenkins安装
- XBoot CI参考
- DevOps环境搭建
- 组件安装列表
- 开发设计规范
- 分支管理
- 数据库设计规范
- Redis使用规范
- Java基础开发规范
- Rest API规范
- 项目结构规范
- 前端开发规范
- 前端设计规范
- 项目搭建分享
- 后端相关
- SpringBoot 2.x区别总结
- Spring Security整合JWT
- Spring Security动态权限管理
- Spring Boot 2.x整合Quartz
- Spring Boot 2.x整合Websocket
- Spring Boot 2.x整合Activiti工作流以及模型设计器
- Spring Boot + Security全局跨域配置
- 前端相关
- axios请求封装 统一异常处理
- 动态路由菜单加载
- 多维度控制权限至按钮显示
- 发送消息图标红点实时显示
- 动态组件单页操作
- XBoot助你【告别996】
- 业务开发踩坑
- 你会用开发神器IDEA吗
- Lombok你知道多少
- 你还在手动校验参数吗
- 你真的会用JPA吗
- Lamda表达式
- Stream流式API
- 告别资源关闭
- Optional避免null
- 谷歌Guava工具包
- 线程池
- 其他小经验技巧
- 更新日志及步骤
- 常见问题