0.1.12 • Published 3 years ago

tmt-form v0.1.12

Weekly downloads
11
License
MIT
Repository
-
Last release
3 years ago

欢迎使用tmt-form

简介

本插件基于Element进行二次封装form表单,只需简单的配置一下,就可以生成一个form表单,省去写html的时间

安装方式

1、npm install tmt-form
2、在main.js全局引入:
   import Vue from 'vue'
   import tmtForm from 'tmt-form';
   Vue.use(tmtForm)

标签属性说明

  • tmt-form | 属性 | 说明 | 类型 | 可选值 | 默认值 | | ----------------------------------------------------- | --------------------------------------------------------------------------------------- | ------- | :-------------------: | :----: | | inline | 行内表单模式 | boolean | — | false | | label-position | 表单域标签的位置,如果值为 left 或者 right 时,则需要设置label-width | string | right/left/top | right | | label-width | 表单域标签的宽度,例如 '50px'。作为 Form 直接子元素的 form-item 会继承该值。支持 auto。 | string | — | — | | label-suffix | 表单域标签的后缀 | string | — | — | | hide-required-asterisk | 是否显示必填字段的标签旁边的红色星号 | boolean | — | false | | show-message | 是否显示校验错误信息 | boolean | — | true | | inline-message | 是否以行内形式展示校验信息 | boolean | — | false | | status-icon | 是否在输入框中显示校验结果反馈图标 | boolean | — | false | | size | 用于控制该表单内组件的尺寸 | string | medium / small / mini | — | | disabled | 是否禁用该表单内的所有组件。若设置为 true,则表单内组件上的 disabled 属性不再生效 | boolean | — | false |

配置说明

大体配置

配置项说明类型
formType对应的组件String
name表单提交的字段String
label表单选项的表述文字String
validate表单校验规则Array
elProps添加对应Element组件的属性Object
filedChange监听表单内字段值的变化,参数说明:form 已经填写的表单字段setFiled 是一个函数,可以更改其他字段的值,例:setFiled('username','Jan')Function(val,form,setFiled)

细节配置

  • formType 配置表单对应的组件

    配置项说明
    tmtText文本输入框
    tmtUpload文件上传组件
    tmtSelect选择器组件
    tmtRadio单选按钮
    tmtSwitch开关
    tmtColorPicker颜色选择器
    tmtColorPicker颜色选择器
    tmtTimePicker时间选择组件
    tmtInputNumber数字输入框组件
    tmtCheckBox复选框组件
    tmtSilder滑块
    tmtCascader多级联动
  • defaultValue 表单默认值

  • validate 表单校验规则(Array)
  • 配置项说明
    required是否为必填字段
    message当为必填字段的时候的错误提示
    trigger'blur'当输入框失去焦点时校验'change'当输入框值改变时校验
    validator函数类型 rule:校验规则value:输入框的值callback:函数的回调(填写错误提示,校验正确时,也需要调用一下callback)
    参数说明类型可选值默认值
    options配置项: { label:(文字),value:(选中时的值) } Array
    disabled是否禁用booleanfalse
    widthswitch 的宽度(像素)number40
    active-icon-classswitch 打开时所显示图标的类名,设置此项会忽略 active-textstring
    inactive-icon-classswitch 关闭时所显示图标的类名,设置此项会忽略 inactive-textstring
    active-textswitch 打开时的文字描述string
    inactive-textswitch 关闭时的文字描述string
    active-valueswitch 打开时的值boolean / string / numbertrue
    inactive-valueswitch 关闭时的值boolean / string / numberfalse
    active-colorswitch 打开时的背景色string#409EFF
    inactive-colorswitch 关闭时的背景色string#C0CCDA
    nameswitch 对应的 name 属性string
    validate-event改变 switch 状态时是否触发表单的校验boolean-true
  • 示例

  • validate:[{required:true,message:'输入框值不能为空',trigger: 'blur'},
              {
                validator(rule,value,callback){
                  if(value.length<5){
                    callback(new Error('不能超过五个字符'))
                  }else{
                    callback()// 验证通过必须调用回调
                  }
                },
                trigger:'blur'
              }
            ] 
  • elProps 添加相应组件的Element属性

    • tmtText

      属性说明类型可选值默认值
      type类型stringtext,textarea 和其他 原生 input 的 type 值text
      maxlength原生属性,最大输入长度number
      minlength原生属性,最小输入长度number
      show-word-limit是否显示输入字数统计,只在 type="text"type="textarea" 时有效booleanfalse
      placeholder输入框占位文本string
      clearable是否可清空booleanfalse
      show-password是否显示切换密码图标booleanfalse
      disabled禁用booleanfalse
      size输入框尺寸,只在 type!="textarea" 时有效stringmedium/small/mini
      prefix-icon输入框头部图标string
      suffix-icon输入框尾部图标string
      rows输入框行数,只对 type="textarea" 有效number2
      autosize自适应内容高度,只对 type="textarea" 有效,可传入对象,如,{ minRows: 2, maxRows: 6 }boolean / objectfalse
      autocomplete原生属性,自动补全stringon, offoff
      readonly原生属性,是否只读booleanfalse
      max原生属性,设置最大值
      min原生属性,设置最小值
      step原生属性,设置输入字段的合法数字间隔(type=number 时可用)
    • tmtUpload

      参数说明类型可选值默认值
      action必选参数,上传的地址string
      headers设置上传的请求头部object
      multiple是否支持多选文件boolean
      data上传时附带的额外参数object
      name上传的文件字段名stringfile
      with-credentials支持发送 cookie 凭证信息booleanfalse
      show-file-list是否显示已上传文件列表booleantrue
      drag是否启用拖拽上传booleanfalse
      accept接受上传的文件类型(thumbnail-mode 模式下此参数无效)string
      on-preview点击文件列表中已上传的文件时的钩子function(file)
      on-remove文件列表移除文件时的钩子function(file, fileList)
      on-success文件上传成功时的钩子function(response, file, fileList)
      on-error文件上传失败时的钩子function(err, file, fileList)
      on-progress文件上传时的钩子 function(event, file, fileList)
      on-change文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用function(file, fileList)
      before-upload上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传。function(file)
      before-remove删除文件之前的钩子,参数为上传的文件和文件列表,若返回 false 或者返回 Promise 且被 reject,则停止删除。function(file, fileList)
      list-type文件列表的类型stringtext/picture/picture-cardtext
      auto-upload是否在选取文件后立即进行上传booleantrue
      file-list上传的文件列表, 例如: {name: 'food.jpg', url: 'https://xxx.cdn.com/xxx.jpg'}array[]
      http-request覆盖默认的上传行为,可以自定义上传的实现function
      disabled是否禁用booleanfalse
      limit最大允许上传个数number
      on-exceed文件超出个数限制时的钩子function(files, fileList)-
    • tmtSelect

      参数说明类型可选值默认值
      group是否分组booleanfalse
      multiple是否多选booleanfalse
      disabled是否禁用booleanfalse
      value-key作为 value 唯一标识的键名,绑定值为对象类型时必填stringvalue
      size输入框尺寸stringmedium/small/mini
      clearable是否可以清空选项booleanfalse
      collapse-tags多选时是否将选中值按文字的形式展示booleanfalse
      multiple-limit多选时用户最多可以选择的项目数,为 0 则不限制number0
      nameselect input 的 name 属性 string — —
      placeholder占位符string请选择
      filterable是否可搜索booleanfalse
      allow-create是否允许用户创建新条目,需配合 filterable 使用booleanfalse
      filter-method自定义搜索方法function
      remote是否为远程搜索booleanfalse
      remote-method远程搜索方法function
      loading是否正在从远程获取数据booleanfalse
      loading-text远程加载时显示的文字string加载中
      no-match-text搜索条件无匹配时显示的文字,也可以使用slot="empty"设置string无匹配数据
      no-data-text选项为空时显示的文字string无数据
      popper-classSelect下拉框的类名string
      reserve-keyword多选且可搜索时,是否在选中一个选项后保留当前的搜索关键词booleanfalse
      default-first-option在输入框按下回车,选择第一个匹配项。需配合 filterable 或 remote 使用boolean-false
      popper-append-to-body是否将弹出框插入至 body 元素。在弹出框的定位出现问题时,可将该属性设置为 falseboolean-true
      automatic-dropdown对于不可搜索的 Select,是否在输入框获得焦点后自动弹出选项菜单boolean-false
      removeTag多选模式下移除tag时触发Function--
      focus当 input 获得焦点时触发Function--
      change选中值发生变化时触发Function--
      blur当 input 失去焦点时触发Function--
      visibleChange下拉框出现/隐藏时触发Function--
      clear可清空的单选模式下用户点击清空按钮时触发Function--
    • tmtRate

      参数说明类型可选值默认值
      max最大分值number5
      disabled是否为只读booleanfalse
      allow-half是否允许半选booleanfalse
      low-threshold低分和中等分数的界限值,值本身被划分在低分中number2
      high-threshold高分和中等分数的界限值,值本身被划分在高分中number4
      colorsicon 的颜色。若传入数组,共有 3 个元素,为 3 个分段所对应的颜色;若传入对象,可自定义分段,键名为分段的界限值,键值为对应的颜色array/object'#F7BA2A', '#F7BA2A', '#F7BA2A'
      void-color未选中 icon 的颜色string#C6D1DE
      disabled-void-color只读时未选中 icon 的颜色string#EFF2F7
      icon-classesicon 的类名。若传入数组,共有 3 个元素,为 3 个分段所对应的类名;若传入对象,可自定义分段,键名为分段的界限值,键值为对应的类名array/object'el-icon-star-on', 'el-icon-star-on','el-icon-star-on'
      void-icon-class未选中 icon 的类名stringel-icon-star-off
      disabled-void-icon-class只读时未选中 icon 的类名stringel-icon-star-on
      show-text是否显示辅助文字,若为真,则会从 texts 数组中选取当前分数对应的文字内容booleanfalse
      show-score是否显示当前分数,show-score 和 show-text 不能同时为真booleanfalse
      text-color辅助文字的颜色string#1F2D3D
      texts辅助文字数组array'极差', '失望', '一般', '满意', '惊喜'
      score-template分数显示模(需要设置默认值)板string{value}
  • tmtColorPicker

    参数说明类型可选值默认值
    disabled是否禁用booleanfalse
    size尺寸stringmedium / small / mini
    show-alpha是否支持透明度选择booleanfalse
    color-format写入 v-model 的颜色的格式stringhsl / hsv / hex / rgbhex(show-alpha 为 false)/ rgb(show-alpha 为 true)
    popper-classColorPicker下拉框的类名string
    predefine预定义颜色array
  • tmtRadio

    参数说明类型可选值默认值
    size单选框组尺寸,仅对按钮形式的 Radio 或带有边框的 Radio 有效stringmedium / small / mini
    disabled是否禁用booleanfalse
    text-color按钮形式的 Radio 激活时的文本颜色string#ffffff
    fill按钮形式的 Radio 激活时的填充色和边框色string#409EFF
    • tmtRadio 单个选框的属性(配置在elProps中的options的单个对象中----attrs)

      参数说明类型可选值默认值
      labelRadio 的 valuestring / number / boolean
      disabled是否禁用booleanfalse
      border是否显示边框booleanfalse
      sizeRadio 的尺寸,仅在 border 为真时有效string medium / small / mini
  • tmtSwitch

    参数说明类型可选值默认值
    disabled是否禁用booleanfalse
    widthswitch 的宽度(像素)number40
    active-icon-classswitch 打开时所显示图标的类名,设置此项会忽略 active-textstring
    inactive-icon-classswitch 关闭时所显示图标的类名,设置此项会忽略 inactive-textstring
    active-textswitch 打开时的文字描述string
    inactive-textswitch 关闭时的文字描述string
    active-valueswitch 打开时的值boolean / string / numbertrue
    inactive-valueswitch 关闭时的值boolean / string / numberfalse
    active-colorswitch 打开时的背景色string#409EFF
    inactive-colorswitch 关闭时的背景色string#C0CCDA
    validate-event改变 switch 状态时是否触发表单的校验booleantrue
    changeswitch 状态发生变化时的回调函数Function
  • tmtCheckbox 整体配置

    参数说明类型可选值默认值
    size多选框组尺寸,仅对按钮形式的 Checkbox 或带有边框的 Checkbox 有效stringmedium / small / mini
    disabled是否禁用booleanfalse
    min可被勾选的 checkbox 的最小数量number
    max可被勾选的 checkbox 的最大数量number
    text-color按钮形式的 Checkbox 激活时的文本颜色string#ffffff
    fill按钮形式的 Checkbox 激活时的填充色和边框色string#409EFF
    • tmtCheckbox 单个配置(配置在elProps中的options的单个对象中----attrs) | 参数 | 说明 | 类型 | 可选值 | 默认值 | | -------- | ------------ | ------- | :----: | :----: | | disabled | 是否禁用 | boolean | — | false | | checked | 当前是否勾选 | boolean | — | false |

    • tmtTimePicker: 时间选择器(is-range为true时defaultValue为数组,具体看请看示例)

    参数说明类型可选值默认值
    readonly完全只读booleanfalse
    disabled禁用booleanfalse
    editable文本框可输入booleantrue
    clearable是否显示清除按钮booleantrue
    size输入框尺寸stringmedium / small / mini
    placeholder非范围选择时的占位内容string
    start-placeholder范围选择时开始日期的占位内容string
    end-placeholder范围选择时开始日期的占位内容string
    is-range是否为时间范围选择,仅对timeType为timePicker时有效booleanfalse
    arrow-control是否使用箭头进行时间选择,仅对timeType为timePicker时有效booleanfalse
    align对齐方式stringleft / center / rightleft
    popper-classTimePicker 下拉框的类名string
    picker-options当前时间日期选择器特有的选项参考下表object{}
    range-separator选择范围时的分隔符string-'-'
    value-format可选,仅tmtTimePicker时可用,绑定值的格式。不指定则绑定值为 Date 对象string见日期格式
    prefix-icon自定义头部图标的类名stringel-icon-time
    clear-icon自定义清空图标的类名stringel-icon-circle-close
    • picker-options的配置(timeType:timeSelect)

      参数说明类型可选值默认值
      start开始时间string09:00
      end结束时间string18:00
      step间隔时间string00:30
      minTime最小时间,小于该时间的时间段将被禁用string00:00
      maxTime最大时间,大于该时间的时间段将被禁用string
    • picker-options的配置(timeType:timePicker)

    参数说明类型可选值默认值
    selectableRange可选时间段,例如'18:30:00 - 20:30:00'或者传入数组'09:30:00 - 12:00:00', '14:30:00 - 18:30:00'string / array
    format时间格式化(TimePicker)string小时:HH,分:mm,秒:ss,AM/PM A'HH:mm:ss'
    参数说明类型可选值默认值
    readonly完全只读booleanfalse
    disabled禁用booleanfalse
    editable文本框可输入booleantrue
    clearable是否显示清除按钮booleantrue
    size输入框尺寸stringlarge, small, mini
    placeholder非范围选择时的占位内容string
    start-placeholder范围选择时开始日期的占位内容string
    end-placeholder范围选择时结束日期的占位内容string
    type显示类型stringyear/month/date/dates/ week/datetime/datetimerange/ daterange/monthrangedate
    format显示在输入框中的格式string见日期格式yyyy-MM-dd
    align对齐方式stringleft, center, rightleft
    popper-classDatePicker下拉框的类名string
    picker-options当前时间日期选择器特有的选项参考下表object{}
    range-separator选择范围时的分隔符string'-'
    default-value可选,选择器打开时默认显示的时间Date可被new Date()解析
    default-time范围选择时选中日期所使用的当日内具体时刻string[]数组,长度为 2,每项值为字符串,形如12:00:00,第一项指定开始日期的时刻,第二项指定结束日期的时刻,不指定会使用时刻 00:00:00
    value-format可选,绑定值的格式。不指定则绑定值为 Date 对象string见日期格式
    name原生属性string
    unlink-panels在范围选择器里取消两个日期面板之间的联动booleanfalse
    prefix-icon自定义头部图标的类名stringel-icon-date
    clear-icon自定义清空图标的类名stringel-icon-circle-close
    validate-event输入时是否触发表单的校验boolean-true
| 参数           | 说明                                                              | 类型                           |  可选值  | 默认值 |
| -------------- | ----------------------------------------------------------------- | ------------------------------ | :------: | :----: |
| shortcuts      | 设置快捷选项,需要传入 { text, onClick } 对象用法参考 demo 或下表 | Object[]                       |    —     |   —    |
| disabledDate   | 设置禁用状态,参数为当前日期,要求返回                            | Boolean                        | Function |   —    | — |
| cellClassName  | 设置日期的 className                                              | Function(Date)                 |    —     |   —    |
| firstDayOfWeek | 周起始日                                                          | Number                         |  1 到 7  |   7    |
| onPick         | 选中日期后会执行的回调,只有当 daterange 或 datetimerange 才生效  | Function({ maxDate, minDate }) |    —     |   —    |

| 参数                | 说明                                                                                  | 类型            |            可选值             | 默认值 |
| ------------------- | ------------------------------------------------------------------------------------- | --------------- | :---------------------------: | :----: |
| min                 | 最小值                                                                                | number          |               —               |   0    |
| max                 | 最大值                                                                                | number          |               —               |  100   |
| disabled            | 是否禁用                                                                              | boolean         |               —               | false  |
| step                | 步长                                                                                  | number          |               —               |   1    |
| show-input          | 是否显示输入框,仅在非范围选择时有效                                                  | boolean         |               —               | false  |
| show-input-controls | 在显示输入框的情况下,是否显示输入框的控制按钮                                        | boolean         |            —	true             |
| input-size          | 输入框的尺寸                                                                          | string          | large / medium / small / mini | small  |
| show-stops          | 是否显示间断点                                                                        | boolean         |               —               | false  |
| show-tooltip        | 是否显示 tooltip                                                                      | boolean         |               —               |  true  |
| format-tooltip      | 格式化 tooltip message                                                                | function(value) |               —               |   —    |
| range               | 是否为范围选择                                                                        | boolean         |               —               | false  |
| vertical            | 是否竖向模式                                                                          | boolean         |               —               | false  |
| height              | Slider 高度,竖向模式时必填                                                           | string          |               —               |   —    |
| label               | 屏幕阅读器标签                                                                        | string          |               —               |   —    |
| debounce            | 输入时的去抖延迟,毫秒,仅在show-input等于true时有效                                  | number          |               —               |  300   |
| tooltip-class       | tooltip 的自定义类名                                                                  | string          |               —               |   —    |
| marks               | 标记, key 的类型必须为 number 且取值在闭区间 [min, max] 内,每个标记可以单独设置样式 | object          |               —               |   —    |

| 参数              | 说明                            | 类型    |    可选值    |  默认值   |
| ----------------- | ------------------------------- | ------- | :----------: | :-------: |
| min               | 设置计数器允许的最小值          | number  |      —       | -Infinity |
| max               | 设置计数器允许的最大值          | number  |      —       | Infinity  |
| step              | 计数器步长                      | number  |     —	1      |
| step-strictly     | 是否只能输入 step 的倍数        | boolean |      —       |   false   |
| precision         | 数值精度                        | number  |      —       |     —     |
| size              | 计数器尺寸                      | string  | large, small |     —     |
| disabled          | 是否禁用计数器                  | boolean |      —       |   false   |
| controls          | 是否使用控制按钮	boolean	—	true |
| controls-position | 控制按钮位置                    | string  |    right     |     -     |
| label             | 输入框关联的label文字           | string  |      —       |     —     |
| placeholder       | 输入框默认 placeholder          | string  |      -       |     -     |

| 参数            | 说明                                                                                            | 类型                    |        可选值         |   默认值    |
| --------------- | ----------------------------------------------------------------------------------------------- | ----------------------- | :-------------------: | :---------: |
| options         | 可选项数据源,键名可通过 Props 属性配置                                                         | array                   |           —           |      —      |
| props           | 配置选项,具体见下表                                                                            | object                  |           —           |      —      |
| size            | 尺寸                                                                                            | string                  | medium / small / mini |      —      |
| placeholder     | 输入框占位文本                                                                                  | string                  |           —           |   请选择    |
| disabled        | 是否禁用                                                                                        | boolean                 |           —           |    false    |
| clearable       | 是否支持清空选项                                                                                | boolean                 |           —           |    false    |
| show-all-levels | 输入框中是否显示选中值的完整路径                                                                | boolean                 |           —           |    true     |
| collapse-tags   | 多选模式下是否折叠Tag                                                                           | boolean                 |           -           |    false    |
| separator       | 选项分隔符                                                                                      | string                  |           —           | 斜杠  ' / ' |
| filterable      | 是否可搜索选项                                                                                  | boolean                 |           —           |      —      |
| filter-method   | 自定义搜索逻辑,第一个参数是节点node,第二个参数是搜索关键词keyword,通过返回布尔值表示是否命中 | function(node, keyword) |           -           |      -      |
| debounce        | 搜索关键词输入的去抖延迟,毫秒                                                                  | number                  |           —           |     300     |
| before-filter   | 筛选之前的钩子,参数为输入的值,若返回 false 或者返回 Promise 且被 reject,则停止筛选           | function(value)         |           —           |      —      |
| popper-class    | 自定义浮层类名                                                                                  | string                  |           —           |      —      |
change|	当选中节点变化时触发(回调参数:选中节点的值)
expand-change|	当展开节点发生变化时触发(回调参数:各父级选项值组成的数组)
blur|	当失去焦点时触发(回调参数:(event: Event))
focus	|当获得焦点时触发(回调参数:(event: Event))
visible-change|	下拉框出现/隐藏时触发(回调参数:出现则为 true,隐藏则为 false)
remove-tag|	在多选模式下,移除Tag时触发(回调参数:移除的Tag对应的节点的值)

示例

HTML:

<tmt-form
      ref="tmtForm"
      @submit="submit"
      label-width="auto"
      :fields="formSet"
      label-suffix=":"
      :status-icon="true"
    >
    </tmt-form>

JS:

export default {
  name: "App",
  data() {
    return {
      password: "",
      sexArr: [
        { label: "男", value: 1 },
        { label: "女", value: 2 },
      ],
      cityArr: [
        { label: "厦门市", value: 1 },
        { label: "漳州市", value: 2 },
      ],
      groupCity: [
        {
          label: "热门城市",
          options: [
            { label: "北京市", value: 1 },
            { label: "厦门市", value: 2 },
          ],
        },
        {
          label: "城市名",
          options: [
            { label: "上海市", value: 3 },
            { label: "南充市", value: 4 },
          ],

      ],
      selectLoading: false,
    };
  },
  created() {
    this.$nextTick(() => {
      let tmtForm = this.$refs.tmtForm;
      tmtForm.setField("username", 123);
    });
  },
  computed: {
    formSet() {
      let self = this;
      return [
        {
          formType: "tmtText",
          name: "username",
          label: "用户名",
          defaultValue: "西红柿炒番茄",
          elProps: {
            "prefix-icon": "el-icon-user-solid",
          },
          validate: [
            { required: true, message: "用户名不能为空", trigger: "blur" },
          ],
        },
        {
          formType: "tmtText",
          name: "password",
          label: "密码",
          defaultValue: "123123",
          elProps: {
            type: "password",
          },
          filedChange(val) {
            console.log(val);
            self.password = val;
          },
          validate: [
            { required: true, message: "密码不能为空", trigger: "blur" },
          ],
        },
        {
          formType: "tmtText",
          name: "password2",
          label: "确认密码",
          defaultValue: "123123",
          elProps: {
            type: "password",
          },
          validate: [
            { required: true, message: "用户名不能为空", trigger: "blur" },
            {
              validator(rule, value, callback) {
                if (value != self.password) {
                  callback(new Error("两次密码不一致"));
                } else {
                  callback(); // 验证通过必须调用回调
                }
              },
              trigger: "blur",
            },
          ],
        },
        {
          formType: "tmtText",
          name: "instr",
          label: "简介",
          defaultValue:'CTR+C,CTR+V工程师',
          elProps: {
            type: "textarea",
            autosize: { minRows: 2, maxRows: 16 },
          },
        },
        {
          formType: "tmtText",
          name: "numberInput",
          label: "数字输入",
          elProps: {
            type: "number",
            step: 3,
          },
        },
        {
          formType: "tmtUpload",
          name: "file",
          label: "图片上传",
          elProps: {
            fileList: [
              {
                name: "food.jpeg",
                url:
                  "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
              },
              {
                name: "food2.jpeg",
                url:
                  "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
              },
            ],
          },
        },
        {
          formType: "tmtSelect",
          name: "groupSelect",
          label: "分组选择",
          defaultValue: 1,
          elProps: {
            options: self.groupCity,
            group: true,
          },
        },
        {
          formType: "tmtSelect",
          name: "diySelect",
          label: "自定义远程搜索",
          defaultValue: [1],
          elProps: {
            placeholder: "请选择",
            options: self.cityArr,
            loading: self.selectLoading,
            filterable: true,
            remote: true,
            diyRender: true,
            multiple: true,
            clearable: true,
            "allow-create": true,
            "default-first-option": true,
            render: function (row) {
              return (
                <div>
                  <span>{row.label}</span>
                  <span>{"-------->"}</span>
                  <span>{row.value}</span>
                </div>
              );
            },
            removeTag: function () {
              console.log("标签移除");
            },
            focus: function () {
              console.log("获取焦点");
            },
            change: function (val) {
              console.log("选中值发生改变", val);
            },
            blur: function () {
              console.log("失去焦点");
            },
            visibleChange: function () {
              console.log("下拉框显示隐藏");
            },
            clear: function () {
              console.log("清空选项");
            },
            "remote-method": function (query) {
              console.log(query);
              self.selectLoading = true;
              setTimeout(() => {
                self.selectLoading = false;
                self.cityArr = [
                  { label: "南充市", value: 3 },
                  { label: "成都", value: 4 },
                ];
              }, 1500);
            },
          },
        },
        {
          formType: "tmtRate",
          name: "rate",
          label: "评分",
          defaultValue: 4,
          elProps: {
            "show-score": true,
            "text-color": "#ff9900",
            "show-text": true,
          },
        },
        {
          defaultValue: "#000",
          formType: "tmtColorPicker",
          name: "color",
          label: "颜色选择",
        },
        {
          formType: "tmtRadio",
          name: "sex",
          label: "性别",
          defaultValue:1,
          elProps: {
            fill: "#ff00ff",
            "text-color": "#000000",
            options: [
              {
                label: "男",
                value: 1,
                attrs: {
                  border: true,
                },
              },
              { label: "女", value: 2 },
            ],
          },
        },
        {
          formType: "tmtSwitch",
          name: "switch",
          label: "开关",
          elProps: {
            change: function (val) {
              console.log("开关值改变", val);
            },
          },
        },
        {
          formType: "tmtCheckBox",
          name: "checkbox",
          label: "复选框",
          defaultValue:[2],
          elProps: {
            // checkBoxType: "button",
            fill:'#000',
            options: [
              {
                label: "复选框1",
                value: 1,
                attrs: {
                  disabled: true,
                },
              },
              {
                label: "复选框2",
                value: 2,
                attrs: {
                  // "true-label": "选中复选框",
                },
              },
              {
                label: "带边框复选框3",
                value: 3,
                attrs: {
                  border: true,
                },
              },
              {
                label: "默认选中5",
                value: 5,
                attrs: {
                  checked: true,
                },
              },
            ],
          },
        },
        {
          formType: "tmtTimePicker",
          name: "timePicker1",
          label: "时间选择",
          defaultValue:[new Date(2021, 1, 25, 8, 40,30), new Date(2021, 1, 25, 9, 40,30)],
          elProps: {
            timeType:'timePicker',
            placeholder: "请选择时间",
            editable:false,
            size:'mini',
            'is-range':true,
            'start-placeholder':'开始时间',
            'end-placeholder':'结束时间',
            'arrow-control':true,
            'range-separator':'~',
            "picker-options": {
              selectableRange: "18:29:00 - 20:30:00",
              format: 'hh:mm:ss'
            },
          },
        },
        {
          formType: "tmtTimePicker",
          defaultValue:'10:20',
          name: "timePicker2",
          label: "时间选择",
          elProps: {
            timeType: "timeSelect",
            placeholder: "请选择时间",
            "picker-options": {
              start: '10:00',
              end: '11:00',
              step: '00:01'
            },
          },
        },
        {
          formType:'tmtDate',
          name:'date',
          label:"日期选择带禁用",
          defaultValue:new Date(),
          elProps:{
            placeholder:'请选择日期',
            'value-format':'yyyy-MM-dd',
            'picker-options':{
              disabledDate(time){
                //禁选大于今天的日期
                return time>new Date()
              }
            }
          }
        },
        {
          formType:'tmtDate',
          name:'daterange',
          label:"日期选择带快捷项",
          defaultValue:'2020-01-01',
          elProps:{
            'unlink-panels':true,
            type:'daterange',
            'picker-options':{
              firstDayOfWeek:1,
              shortcuts:[
                {
                  text:'本月',
                  onClick(picker) {
                    let start = new Date()
                    picker.$emit('pick', [new Date(start.getFullYear(),start.getMonth(),1), new Date(start.getFullYear(),start.getMonth()+1,0)]);
                  }
                },
                {
                  text:'上个月',
                  onClick(picker) {
                    let start = new Date()
                    picker.$emit('pick', [new Date(start.getFullYear(),start.getMonth()-1,1), new Date(start.getFullYear(),start.getMonth(),0)]);
                  }
                },
              ],
              onPick({ maxDate, minDate }){
                console.log(maxDate,minDate)
              }
            },
            'start-placeholder':'起始时间',
            'end-placeholder':'结束时间',
            'value-format':'yyyy-MM-dd'
          }
        },
        {
          formType:'tmtDate',
          name:'week',
          label:"周选择",
          elProps:{
            type:'week',
            size:'small',
            placeholder:'请选择日期',
            format:"yyyy 第 WW 周",
            'value-format':'yyyy-MM-dd'
          },
          filedChange(val){
            console.log('filedChange',val)
          }
        },
        {
          formType:'tmtDate',
          name:'datetime',
          label:'日期时间选择',
          defaultValue:new Date(),
          elProps:{
            type:'datetime',
            placeholder:'日期时间选择'
          }
        },
        {
          formType:'tmtDate',
          name:'datetimerange',
          label:'范围性日期时间',
          defaultValue:['2020-12-31 10:30:30','2021-01-29 16:58:30'],
          elProps:{
            'start-placeholder':'起始日期时间',
            'end-placeholder':'终止日期时间',
            type:'datetimerange',
            'value-format':'yyyy-MM-dd HH:mm:ss',
            placeholder:'日期时间选择'
          }
        },
        {
          formType:'tmtDate',
          name:'dates',
          label:"多个日期选择",
          elProps:{
            placeholder:'请选择日期',
            type:'dates',
            size:'mini',
          }
        },
        {
          formType: "tmtSilder",
          name: "slider",
          label: "滑块",
          defaultValue: 27,
          elProps: {
            "show-input": true,
            "show-input-controls": true,
            "input-size": "mini",
          },
        },
        {
          formType: "tmtSilder",
          name: "sliderRange",
          label: "范围性滑块",
          defaultValue: [23,30],
          elProps: {
            'format-tooltip':function(value){
              return value+'℃'
            },
            "show-input": true,
            'show-stops':true,
            "min":20,
            "max":35,
            marks:{
              20:'20℃',
              25:'25℃',
              30:{
                style:{
                  color:'#f59b78'
                },
                label:this.$createElement('strong','30℃')
              },
              35:{
                style:{
                  color:'red'
                },
                label:this.$createElement('strong','35℃')
              },
            },
            range:true,
            "show-input-controls": true,
            "input-size": "mini",
          },
        },
        {
          formType: "tmtInputNumber",
          name: "number",
          label: "数字输入框",
          elProps: {
            min: -1,
            max: 20,
          },
        },
        {
          formType: "tmtCascader",
          name: "cascader",
          label: "多级联动",
          filedChange(val){
            console.log(val)
          },
          elProps: {
            expandChange:function(){
              console.log('展开节点')
            },
            props:{
              lazy: true,
              lazyLoad (node, resolve) {
                const { value } = node;
                 setTimeout(() => {
                   let nodes = []
                   if(value==1){
                     nodes = [
                       {
                         label:'1-1',
                         value:'1-1',
                         leaf:true,
                         disabled:true
                       },
                     ]
                   }else if(value==2){
                     nodes = [
                       {
                         label:'2-1',
                         value:'2-1',
                         leaf:true
                       },
                       {
                         label:'2-2',
                         value:'2-2',
                         leaf:true
                       },
                     ]
                   }
                  resolve(nodes);
                }, 1000);
              }
            },
            clearable: true,
            options: [
              {
                label: "一级",
                value: 1,
                children:[{
                  label:'选项一',
                  value:'选项一',
                  leaf:true
                }]
              },
              {
                label: "二级",
                value: 2,
                children:[{
                  label:'选项二',
                  value:'选项二',
                  leaf:true
                }]
              },
            ],
          },
        },
      ];
    },
  },
  methods: {
    submit(form) {
      console.log(form);
    },
  },
};
0.1.11

3 years ago

0.1.12

3 years ago

0.1.10

3 years ago

0.1.9

3 years ago

0.1.8

4 years ago

0.1.7

4 years ago

0.1.6

4 years ago

0.1.5

4 years ago

0.1.4

4 years ago

0.1.3

4 years ago

0.1.2

4 years ago

0.1.1

4 years ago

0.1.0

4 years ago