Skip to content

高级控件

高级表单控件包括文件上传、开关、滑块、评分等特殊用途的控件,用于处理复杂的交互需求。

使用示例

loading

文件上传 (upload)

用于文件上传,支持图片、文档等多种文件类型。

ts
{
  title: '用户头像',
  dataIndex: 'avatar',
  edit: {
    type:'upload',
    upload: {
      accept: 'image/*',
      maxCount: 1,
      listType: 'picture-card',
      action: '/api/upload'
    }
  }
}

配置选项

属性说明类型默认值
accept接受的文件类型string-
action上传地址string-
maxCount最大文件数number-
maxSize最大文件大小(MB)number-
listType上传列表样式'text' | 'picture' | 'picture-card''text'
multiple是否多选booleanfalse
directory支持上传文件夹booleanfalse

图片上传示例

ts
{
  title: '商品图片',
  dataIndex: 'images',
  edit: {
    type:'upload',
    upload: {
      accept: 'image/png,image/jpeg,image/jpg',
      maxCount: 5,
      maxSize: 2,
      listType: 'picture-card',
      action: '/api/upload/images',
      beforeUpload: (file) => {
        const isImage = file.type.startsWith('image/')
        if (!isImage) {
          message.error('只能上传图片文件!')
        }
        return isImage
      }
    }
  }
}

文档上传示例

ts
{
  title: '附件',
  dataIndex: 'attachments',
  edit: {
    type:'upload',
    upload: {
      accept: '.pdf,.doc,.docx,.xls,.xlsx',
      multiple: true,
      maxCount: 10,
      maxSize: 10, // 10MB
      action: '/api/upload/documents'
    }
  }
}

开关 (switch)

用于布尔值的切换。

ts
{
  title: '启用状态',
  dataIndex: 'is_active',
  edit: {
    type:'switch',
    switch: {
      checkedChildren: '启用',
      unCheckedChildren: '禁用',
      defaultValue: true
    }
  }
}

配置选项

属性说明类型默认值
checkedChildren选中时的内容string | VNode-
unCheckedChildren非选中时的内容string | VNode-
checkedValue选中时的值anytrue
unCheckedValue非选中时的值anyfalse
size开关大小'default' | 'small''default'
loading加载状态booleanfalse

滑块 (slider)

用于数值范围选择。

ts
{
  title: '价格范围',
  dataIndex: 'price_range',
  edit: {
    type:'slider',
    slider: {
      range: true,
      min: 0,
      max: 10000,
      step: 100,
      marks: {
        0: '¥0',
        2500: '¥2500',
        5000: '¥5000',
        7500: '¥7500',
        10000: '¥10000'
      }
    }
  }
}

配置选项

属性说明类型默认值
min最小值number0
max最大值number100
step步长number1
range是否为范围选择booleanfalse
marks刻度标记object-
vertical是否垂直booleanfalse
tooltipVisible是否显示提示boolean-

评分 (rate)

用于评分选择。

ts
{
  title: '服务评分',
  dataIndex: 'rating',
  edit: {
    type:'rate',
    rate: {
      count: 5,
      allowHalf: true,
      tooltips: ['很差', '较差', '一般', '较好', '很好']
    }
  }
}

配置选项

属性说明类型默认值
count星星总数number5
allowHalf是否允许半选booleanfalse
allowClear是否允许清除booleantrue
tooltips自定义提示信息string[]-
character自定义字符string | VNode

自动完成 (autoComplete)

提供输入建议的文本输入框。

ts
{
  title: '邮箱',
  dataIndex: 'email',
  edit: {
    type:'autoComplete',
    autoComplete: {
      options: [
        { value: '@gmail.com' },
        { value: '@163.com' },
        { value: '@qq.com' },
        { value: '@hotmail.com' }
      ],
      filterOption: (inputValue, option) =>
        option.value.includes(inputValue)
    }
  }
}

动态选项

ts
{
  title: '用户名',
  dataIndex: 'username',
  edit: {
    type:'autoComplete',
    autoComplete: {
      onSearch: async (searchText) => {
        if (searchText) {
          const response = await fetch(`/api/users/search?q=${searchText}`)
          const users = await response.json()
          return users.map(user => ({ value: user.username }))
        }
        return []
      }
    }
  }
}

动态选项

ts
{
  title: '用户名',
  dataIndex: 'username',
  edit: {
    type:'autoComplete',
    autoComplete: {
      onSearch: async (searchText) => {
        if (searchText) {
          const response = await fetch(`/api/users/search?q=${searchText}`)
          const users = await response.json()
          return users.map(user => ({ value: user.username }))
        }
        return []
      }
    }
  }
}

相关内容

根据 Apache-2.0 许可发布。