WDatePicker 组件
日期选择器组件,基于 WinDesignNext DatePicker Pro 封装(渲染层内部使用 WDatePickerPro),用于选择或输入日期、日期时间、周/月/年及日期范围,支持数据绑定和事件响应。
推荐配合
valueFormat使用:在 A2UI JSON 中建议设置valueFormat: "YYYY-MM-DD"(或"YYYY-MM-DD HH:mm:ss"),使modelValue以字符串形式存储在 dataModel 中,便于序列化和 Agent 处理。
基础用法
Props API
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
id | string | - | 组件唯一标识(必填) |
component | string | WDatePicker | 组件类型(必填) |
modelValue | object | - | 绑定值(A2UI 数据绑定,支持 path) |
type | string/object | date | 显示类型(支持 path) |
size | string | default | 输入框尺寸 |
readonly | boolean | false | 是否只读 |
disabled | boolean | false | 是否禁用 |
editable | boolean | true | 文本框是否可输入 |
clearable | boolean | true | 是否可清空 |
placeholder | string | '' | 占位文本 |
startPlaceholder | string | - | 范围选择开始占位 |
endPlaceholder | string | - | 范围选择结束占位 |
format | string/object | YYYY-MM-DD | 输入框显示格式(支持 path) |
valueFormat | string/object | - | 绑定值格式(支持 path) |
rangeSeparator | string | - | 范围分隔符 |
unlinkPanels | boolean | false | 范围选择时解除面板联动 |
teleported | boolean | true | 下拉层是否挂载到 body |
appendTo | string | - | 下拉层挂载目标 |
popperClass | string | - | 下拉框自定义类名 |
placement | string | bottom-start | 下拉框弹出位置 |
prefixIcon | string/object | - | 前缀图标 |
suffixIcon | string/object | - | 后缀图标 |
clearIcon | string/object | CircleCloseFilled | 清空图标 |
validateEvent | boolean | true | 是否触发表单校验 |
name | string/array | - | 原生 name 属性 |
plain | boolean | false | 朴素模式 |
emitFormattedValue | boolean | false | change 事件是否附带格式化字符串 |
triggerSuffix | boolean | false | 点击后缀图标触发下拉 |
action | object | - | A2UI v0.9 事件定义 |
type 可选值
| 值 | 说明 |
|---|---|
date | 日期(默认) |
datetime | 日期 + 时刻 |
daterange | 日期范围 |
datetimerange | 日期时间范围 |
week | 周 |
month | 月 |
monthrange | 月份范围 |
year | 年 |
yearrange | 年份范围 |
dates | 多个日期 |
years | 多个年份 |
months | 多个月份 |
path 支持说明
通用绑定格式见 path 数据绑定速查。
| 属性 | 支持 path | 说明 |
|---|---|---|
modelValue | ✅ | 双向绑定选中值(单选或范围数组) |
type | ✅ | 动态切换显示类型(如 date / datetime / daterange) |
format | ✅ | 动态控制输入框显示格式 |
valueFormat | ✅ | 动态控制绑定值格式 |
action.event.context[].value | ✅ | 事件上下文可引用 dataModel |
action.event.api.constParams[].value | ✅ | API 固定参数可引用 dataModel |
placeholder / size / disabled 等 | ❌ | 静态配置;动态变更请用 updateProp |
type / format / valueFormat 绑定示例:
json
{
"type": { "path": "/pickerType" },
"format": { "path": "/displayFormat" },
"valueFormat": { "path": "/valueFormat" },
"modelValue": { "path": "/selectedDate" }
}配合 updateDataModel 动态切换为日期时间模式:
json
{
"version": "v0.9",
"updateDataModel": {
"surfaceId": "main",
"path": "/",
"value": {
"pickerType": "datetime",
"displayFormat": "YYYY-MM-DD HH:mm:ss",
"valueFormat": "YYYY-MM-DD HH:mm:ss",
"selectedDate": "2024-06-15 09:30:00"
}
}
}modelValue 绑定规则:
- 单选(
type为date、datetime、week等):path 指向 dataModel 中的单个值 - 范围选择(
type为daterange、datetimerange等):path 指向长度为 2 的数组 - 设置
valueFormat后,值为对应格式字符串;未设置时在 dataModel 中以 ISO 8601 字符串存储
json
// 单选日期
{ "modelValue": { "path": "/birthday" } }
// 日期范围
{ "modelValue": { "path": "/dateRange" } }
// 初始值字面量
{ "modelValue": { "literalString": "2024-06-15" } }modelValue 数据绑定
json
{
"id": "date_birthday",
"component": "WDatePicker",
"type": "date",
"valueFormat": "YYYY-MM-DD",
"placeholder": "请选择出生日期",
"clearable": true,
"modelValue": { "path": "/birthday" },
"action": {
"event": {
"name": "onBirthdayChange",
"context": [{ "key": "birthday", "value": { "path": "/birthday" } }]
}
}
}配合 updateDataModel 设置初始值:
json
{
"version": "v0.9",
"updateDataModel": {
"surfaceId": "main",
"path": "/",
"value": {
"birthday": "1990-01-01"
}
}
}action 定义
用户确认选定值时触发,默认 type 为 change。
json
{
"action": {
"event": {
"name": "onDateChange",
"type": "change",
"context": [{ "key": "date", "value": { "path": "/appointmentDate" } }]
}
}
}使用示例
基础日期选择
json
{
"id": "date_001",
"component": "WDatePicker",
"type": "date",
"valueFormat": "YYYY-MM-DD",
"placeholder": "请选择日期",
"clearable": true,
"modelValue": { "path": "/appointmentDate" },
"action": {
"event": { "name": "onDateChange" }
}
}日期时间选择
json
{
"id": "datetime_001",
"component": "WDatePicker",
"type": "datetime",
"format": "YYYY-MM-DD HH:mm:ss",
"valueFormat": "YYYY-MM-DD HH:mm:ss",
"placeholder": "请选择日期时间",
"modelValue": { "path": "/visitTime" }
}日期范围选择
json
{
"id": "daterange_001",
"component": "WDatePicker",
"type": "daterange",
"valueFormat": "YYYY-MM-DD",
"startPlaceholder": "开始日期",
"endPlaceholder": "结束日期",
"modelValue": { "path": "/dateRange" },
"action": {
"event": {
"name": "onDateRangeChange",
"context": [{ "key": "range", "value": { "path": "/dateRange" } }]
}
}
}配合 updateDataModel:
json
{
"version": "v0.9",
"updateDataModel": {
"surfaceId": "main",
"path": "/",
"value": {
"dateRange": ["2024-01-01", "2024-01-31"]
}
}
}配合 WForm 使用
json
[
{
"id": "form_item_birthday",
"component": "WFormItem",
"label": "出生日期",
"prop": "birthday",
"children": ["date_birthday"]
},
{
"id": "date_birthday",
"component": "WDatePicker",
"type": "date",
"valueFormat": "YYYY-MM-DD",
"placeholder": "请选择",
"clearable": true,
"modelValue": { "path": "/birthday" },
"action": {
"event": {
"name": "onBirthdayChange",
"context": [{ "key": "birthday", "value": { "path": "/birthday" } }]
}
}
}
]事件处理
选择变化事件
typescript
processor.onEvent((event) => {
const eventName = event.message.userAction?.name;
const context = event.message.userAction?.context;
if (eventName === 'onDateChange') {
// context: { date: "2024-06-15" } 或 { range: ["2024-01-01", "2024-01-31"] }
console.log('选中值:', context);
event.resolve([]);
}
});数据同步
WDatePicker 在用户确认选择后会自动将值同步到 dataModel:
- 用户选择 → 更新本地值
- 通过
setData(component, modelValue.path, val, surfaceId)同步到 dataModel - 发送
action.event事件 - WButton 提交时可通过
formParams自动收集绑定了 path 的值
不支持 A2UI JSON 配置的能力
以下 WinDesignNext 原生能力依赖函数或插槽,无法在 A2UI JSON 中直接配置:
| 能力 | 原生属性 | 替代方案 |
|---|---|---|
| 禁用特定日期 | disabledDate | Agent 通过业务逻辑过滤可选范围,或使用 updateProp |
| 快捷选项 | shortcuts | 通过 WButton + updateData 设置 modelValue |
| 自定义单元格 | 插槽 | 暂不支持 |
| 默认打开日期 | defaultValue | 通过 updateDataModel 设置 modelValue 初始值 |
Pro 与经典版差异:渲染层使用
WDatePickerPro,persistent默认为false,automaticDropdown默认为true。JSON Schema 中部分经典版专属属性(如unlinkPanels、triggerSuffix)在 Pro 上可能无效,请以 DatePicker Pro 文档 为准。