V1.0.0
Skip to content

WDatePicker 组件

日期选择器组件,基于 WinDesignNext DatePicker Pro 封装(渲染层内部使用 WDatePickerPro),用于选择或输入日期、日期时间、周/月/年及日期范围,支持数据绑定和事件响应。

推荐配合 valueFormat 使用:在 A2UI JSON 中建议设置 valueFormat: "YYYY-MM-DD"(或 "YYYY-MM-DD HH:mm:ss"),使 modelValue 以字符串形式存储在 dataModel 中,便于序列化和 Agent 处理。

基础用法

Props API

属性名类型默认值说明
idstring-组件唯一标识(必填)
componentstringWDatePicker组件类型(必填)
modelValueobject-绑定值(A2UI 数据绑定,支持 path
typestring/objectdate显示类型(支持 path
sizestringdefault输入框尺寸
readonlybooleanfalse是否只读
disabledbooleanfalse是否禁用
editablebooleantrue文本框是否可输入
clearablebooleantrue是否可清空
placeholderstring''占位文本
startPlaceholderstring-范围选择开始占位
endPlaceholderstring-范围选择结束占位
formatstring/objectYYYY-MM-DD输入框显示格式(支持 path
valueFormatstring/object-绑定值格式(支持 path
rangeSeparatorstring-范围分隔符
unlinkPanelsbooleanfalse范围选择时解除面板联动
teleportedbooleantrue下拉层是否挂载到 body
appendTostring-下拉层挂载目标
popperClassstring-下拉框自定义类名
placementstringbottom-start下拉框弹出位置
prefixIconstring/object-前缀图标
suffixIconstring/object-后缀图标
clearIconstring/objectCircleCloseFilled清空图标
validateEventbooleantrue是否触发表单校验
namestring/array-原生 name 属性
plainbooleanfalse朴素模式
emitFormattedValuebooleanfalsechange 事件是否附带格式化字符串
triggerSuffixbooleanfalse点击后缀图标触发下拉
actionobject-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[].valueAPI 固定参数可引用 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 绑定规则:

  • 单选typedatedatetimeweek 等):path 指向 dataModel 中的单个值
  • 范围选择typedaterangedatetimerange 等):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:

  1. 用户选择 → 更新本地值
  2. 通过 setData(component, modelValue.path, val, surfaceId) 同步到 dataModel
  3. 发送 action.event 事件
  4. WButton 提交时可通过 formParams 自动收集绑定了 path 的值

不支持 A2UI JSON 配置的能力

以下 WinDesignNext 原生能力依赖函数或插槽,无法在 A2UI JSON 中直接配置

能力原生属性替代方案
禁用特定日期disabledDateAgent 通过业务逻辑过滤可选范围,或使用 updateProp
快捷选项shortcuts通过 WButton + updateData 设置 modelValue
自定义单元格插槽暂不支持
默认打开日期defaultValue通过 updateDataModel 设置 modelValue 初始值

Pro 与经典版差异:渲染层使用 WDatePickerPropersistent 默认为 falseautomaticDropdown 默认为 true。JSON Schema 中部分经典版专属属性(如 unlinkPanelstriggerSuffix)在 Pro 上可能无效,请以 DatePicker Pro 文档 为准。