Giter VIP home page Giter VIP logo

veui's Introduction

VEUI

Documentation: 中文 🇨🇳 | English 🇺🇸

Enterprise UI components for Vue.js. Based on BAIDU's Light Design Language System (Light Design).

Features

  • 🤘 Powerful and flexible components & directives
  • 💅 Switchable/customizable themes
  • 🌲 Fully tree-shakable components
  • 🌐 I18N support w/ compile-time optimization
  • ⌨️ A11Y support w/ ARIA annotation & complete keyboard navigation
  • ☁️ SSR support w/ component level Critical CSS

Packages included in this repo are:

Contribution

To develop veui locally you need to clone this repo and run the following in veui's root directory (VEUI uses pnpm as the package manager):

$ pnpm install
$ pnpm dev

And then you should be able to see the demo via http://localhost:8080/.

License

MIT

veui's People

Contributors

599316527 avatar 7inspire avatar chestnutchen avatar codedebugtest avatar ddddddddoge avatar dependabot[bot] avatar feibinyang avatar fengchongxiu avatar fuchunhui avatar hankliang avatar iceend avatar justineo avatar lgtm-com[bot] avatar markfan avatar missyliu avatar miyakosama avatar myth929 avatar neverlandcx avatar phinome avatar poppyluo avatar qbaty avatar renovate-bot avatar sodatea avatar starshinny avatar sweep-ai[bot] avatar teazean avatar xiaodemen avatar xiezheng-xd avatar yunxiange avatar zhangjialiang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

veui's Issues

Input

props

Prop Type Default Description
ui String 全局 ui 属性
type String text 可选 password,默认 text
name String 绑定到标签 name 属性
placeholder String 绑定到标签 placeholder 属性,ie9 内部实现
value String, Number 绑定到标签 value 属性
readonly Boolean false 只读状态,绑定到标签 readonly 属性
disabled Boolean false 禁用状态,绑定到标签 disabled 属性
autofocus Boolean false 自动聚焦,绑定到标签 autofocus 属性
autocomplete String off 可选 on,默认 off,原生补全,绑定到标签 autocomplete 属性
selectOnFocus Boolean false 聚焦时自动全选
composition Boolean false 感知输入法组合态
fitContent Boolean false textarea 模式是否随行数调整大小
resizable Boolean false textarea 模式能否调整大小
rows Number textarea 模式行数

Events

  • focus <event>
  • click <event>
  • blur <event>
  • change <value, event>
  • input <value, event>

usage

<veui-input ui="small" 
    v-model="password"
    type="password"
    composition
    select-on-focus
    fit-content
    autofocus
    placeholder="请输入密码"
    @click="log('click')"></veui-input>

Uploader

props

  • uploaderType 上传类型,file或image
  • name 数据名称
  • action 提交地址
  • files 已经上传了的文件
  • throughIfame 是否通过iframe上传兼容ie9
  • withCredentials 不通过iframe上传时,xhr的withCredentials
  • headers 不通过iframe上传时,xhr的头部
  • iframeCallbackType 通过iframe上传时,取值为‘postmessage’(通过postMessage回调)
    或者'func'(上传时把回调函数名传给后端,后端返回parent.veuiUploaderCallback【回调函数名】(data))
  • convertResponse 一个用来转换后端返回数据的函数
    组件里用后端返回的data.status === 'success' 或data.status === 'failure‘来判断上传是否成功
    如果后端返回其他格式的data需要用这个函数进行转换
    函数的参数是后端返回的data,函数return的object需要包含status,值为'success'或'failure'
  • disabled 是否禁用
  • previewImage 上传类型是file时,是否显示小图预览
  • extentionTypes 允许的扩展类型,字符串或数组
  • maxSize 单个文件的大小限制,单位为MB
  • maxCount 最多可以上传的文件数量,当超过这一数量时,会自动删除掉最先上传的文件
  • needButton 上传类型是image时,上传按钮是列表外的button还是列表里的一个+号
  • ui 样式 (multiline: 文件名过长时多行显示 ellipsis:文件名过长时截断 horizontal: 横向排列
    large: 上传类型是image时,显示大图 small: 显示小图
    bottom-mask: 上传类型是image时,预览图hover时使用在底部的局部遮罩浮层
    list-icon: 上传类型是file时,在文件列表的文件名前显示一个文件图标)
  • uploadingContent 值为'text'显示uploadingText
    值为'progressPercent'显示进度百分比
    值为'progressBar‘显示进度条
    iframe模式时只能取'text'
  • args 需要提交的额外参数,Object,value可以是常量或函数
  • autoUpload 选完文件后是否自动上传

slots

  • tip: 提示内容
  • warning: 警告内容
  • button: 用来放置自定义的上传按钮,这个slot里只能放置一个节点,如果这个slot里有东西,会把本来的
    label的opacity设为0,并且宽高设置成和slot里的节点一样,但需要自己用css把slot里的button放到
    label下面
  • file-content:文件列表每行的内容
  • uploading-content:文件列表上传中的显示内容
  • failure-content:文件列表上传失败的显示内容

events

  • change 添加新文件时的事件,参数为组件内部的fileList
  • success 上传成功时的事件,参数为后端返回的data
  • failure 上传成功时的事件,参数为后端返回的data
  • delete 要删除文件时抛出的事件,参数为要删除的file
  • cancel 要取消上传时抛出的事件,参数为要取消上传的file,在xhr模式下可以file.xhr.abort()

Form整理(outdated)

Form系列组件

一些约定

  1. Form 系列组件包括 Form/FieldSet/Field,按上述顺序嵌套使用,理论上没有互相嵌套的用法,FieldSet可选
  2. Form 的主要责任是提供一个表单数据级别的提交流程,数据输入输出上的格式应该是 vm 的事情
  3. FieldSet 主要做展示上的事情,没有校验的功能
  4. Field 和 InputComponent 其实是一个不可分割的东西,抽取了 InputComponent 关于校验层面的东西,提供 InputComponent 的单值校验功能,重置值功能;需要注意的是,Field 内部的 InputComponent 不允许单独变更,如果需要 v-for/v-if 需要在 Field 层面操作,如果强烈需要在 InputComponent 层面 v-for,目前应该需要自己实现成一个 veui InputComponent
  5. InputComponent 可以脱离 Field 使用,但是没有校验功能
  6. Field 是 Form 输出的最小单位,一个 Field 下边只能可以有多个 InputComponent,存在多个则会合并成数组输出,如果需要特殊处理其中的 InputComponent,应该分成多个 Field

Form

Props

Prop Type Default Description
data Object 表单本身的数据,和内部 InputComponent 无强绑定,若绑定该对象,则提交时表单抛出该数据,若不绑定,则提交时提取所有非 disabled 且 Field 含有 name 的后代 InputComponent(s) 的值
ui String 默认 block,inline 可以使 FieldSet 和 Field 水平排列
readonly Boolean false 只读状态,叠加态(未完成)
disabled Boolean false 禁用状态,叠加态(未完成)
validators Object 自定义校验规则,参考下方 validators 解释
beforeValidate Function 校验前的处理函数,返回一个reject状态Promise可以终止流程,其他返回值按fulfilled状态处理
afterValidate Function 提交前的处理函数,,返回一个reject状态Promise可以终止流程,其他返回值按fulfilled状态处理

Props.validators

提供给表单级别联动校验/异步校验的功能,格式如下

[
  {
    fields: ['start', 'end'],
    handler (start, end) {
      if (!start || !end) {
        return true
      }
      if (parseInt(start, 10) >= parseInt(end, 10)) {
        return {
          start: '下限必须小于上限'
        }
      }
      return true
    },
    triggers: 'change,input'
  },
  {
    fields: 'phone',
    handler (phone) {
      return new Promise(function (resolve, reject) {
        setTimeout(function () {
          if (phone === '18888888888') {
            return reject({
              phone: '该手机已被注册'
            })
          }
          return resolve()
        }, 3000)
      })
    }
  }
]

Data

  • fields
    • @type {Array} 管理 FieldSet 和 Field

Computed

  • formData
    • @type {Object} 绑定了 this.data 则为 this.data,否则取内部 Field 的值计算

Methods

  1. validate(names)

    根据 Field 上边 的 rules 和 Form.validators 进行校验,由于可以涉及异步校验,统一采用 Promise 返回

    @param {Array} [names] 针对部分属性进行校验,不传则检查 form 内所有 Field
    @return {Promise} 校验成功进入resolve流程,无参数,校验失败进入reject流程,参数是以 InputComponent 的 namekeymessage为值的对象。

  2. reset

    重置到表单初始化值,清除校验信息

Events

  1. sumbit

    原生submit事件触发时抛出

    @event Form#submit

    @param {Object} data - 表单数据对象,见 props.data 的说明

    @param {Object} event - 原生submit事件

  2. invalid

    校验失败时触发

    @event Form#invalid

    @param {Object} errorMessage - 错误信息对象,key 为 InputComponent name,值为出错信息字符串

Pager

props

  • pageNo 第几页,默认:1
  • pageSize 每页多少条,默认:30
  • pageTotal 一共多少条
  • hrefTpl 链接模板,默认:$page
  • layout 布局类型,enum{basic, advanced, full, hetero}

events

  • redirect 点击数字翻页时触发事件,回调函数接收目标页数

usage

<veui-pager :page-total="233" href-tpl="#!/path/to/page/$page/" />
<veui-pager :page-total="233" @redirect="handlePageRedirect" />

Select接口

## OptionGroup(待续...)

Option

props

  • text: 选项文字
  • value: 选项值
  • disabled: 是否禁用

slots

  • 匿名slot: 默认结构为<span>{{name}}</span>

Select

props

以下类型继承于InputControl的mixin
* name: 表单名
* value: 表单值
* disabled: 是否禁用

新增props如下:

  • ui: Select下拉框的类名,如"primary large"
  • placeholder: 占位符

slots

  • option 列表项

events

  • change: 选中值发生改变时触发
  • visible-change: 下拉框出现/隐藏时触发

使用示例

<veui-select ui="primary large" name="demo" value="2">
    <veui-option name="我是第一项" value="1"></veui-option>
    <veui-option name="我是第二项" value="2" disabled></veui-option>
    <veui-option name="我是第三项" value="3"></veui-option>
</veui-select>
<template>
  <veui-select ui="primary large" name="demo" value="2" :options="options">
    <template slot="option" scope="item">
      <span :value="item.value">{{item.label}}</span>
    </template>
  </veui-select>
</template>

InputControl 实现规范

InputControl 实现规范

InputControl必须要实现的公开属性:

  1. value,组件初始化及输出的格式化数据
  2. name,组件数据输出名称
  3. readonly,只读状态
  4. disabled,禁用状态
  5. uiTypes,描述组件的类型

InputControl必须要实现的私有属性:

  1. _rawValue,组件内部处理时使用的结构化数据

InputControl必须要实现的公开方法:

  1. serialize,提供给外部比如Form序列化表单数据使用的方法

InputControl必须要实现的私有方法:

  1. _convert,从组件value转化为_rawValue的内部方法

以上属性由mixins/input.js提供声明及部分默认定义,创建InputControl需要mixin该模块,并对部分需要增强自身逻辑的属性及方法进行覆盖。具体接口实现请关注 #10

Icon 配置外置

把 icon 的接口和实现在 veui 解耦,每个组件只按实际语义定义图标的「接口」,然后由主题包来对接实现。这样还可以使 veui 不需要用目前的「引入虚拟路径供改写」的方式直接引入图标的实现。

目前需要分几步来改造:

  • babel-plugin-veui 支持自动引入主题包的 JS 文件,去除自动直接引入主题包内 icon 的逻辑。

  • 主题包中给每个组件提供图标配置、引入的逻辑(同时这里还可以给不同主题配置不同的默认配置)。

    // veui-theme-x/components/DatePicker.js
    import { config } from 'veui/managers'
    import '../icons/calendar'
    import '../icons/cross-o'
    
    config.defaults('datepicker.icons', {
      calendar: 'calendar',
      clear: 'cross-o'
    })
  • 创建 icons mixin,为使用了图标的组件添加一个 computedicons

  • 改造组件图标的引入逻辑,通过实际语义来命名图标,主题包可以自行根据对应名字进行注册。

    <veui-icon class="veui-date-picker-icon" :name="icons.calendar"></veui-icon>

Tabs 接口

Tabs

props

prop type default description
name String -- 控件名
ui String -- 选填,样式的变种
active String -- 选填,默认没有激活
tabPosition String top tabs的位置,有上下左右

events

change

slots

<veui-tabs active="1" @change="changed" tabPosition="left">
     <veui-tab-panel name="1" label="Tab one">This is Tab one content</veui-tab-panel>
     <veui-tab-panel name="2" label="Tab two">This is Tab two content</veui-tab-panel>
     <veui-tab-panel name="3" label="Tab three">This is Tab three content</veui-tab-panel>
</veui-tabs>

InputComponent 实现规范(修订版)

InputComponent 实现规范

InputComponent必须要实现的公开属性:

  1. uiTypes,描述组件的类型
  2. value,组件初始化及实现双绑的数据
  3. name,组件数据输出名称
  4. readonly,只读状态
  5. disabled,禁用状态

InputComponent必须要实现的事件:

  1. @input,抛出由交互产生变动的新value值,用于实现v-model

以上属性由mixins/input.js提供声明及部分默认定义,创建InputComponent需要mixin该模块,并对部分需要增强自身逻辑的属性进行覆盖。具体接口实现参考 #10

Select 组件后面待解决的一些问题

  • 选项默认颜色不对

  • 右侧有图标时文字右边距太小

  • 缺少灰底样式

  • 缺少分隔线

  • Demo 缺少禁用、只读样式

  • 缺前置样式

  • 下拉框高度是否可以指定?(须和 UE 确认)

  • 下拉框边缘似乎有淡出效果

Dialog

Dialog

props

  • title 对话框标题
  • ui reverse->对话框标题白底蓝字 normal->对话框标题蓝底白字(默认值)
  • center 是否在浏览器视口居中显示
  • top 对话框顶部到浏览器视口顶部的距离,可以是百分数,优先级高于center
  • left 对话框到浏览器视口左侧的距离,可以是百分数,优先级高于center
  • mask 是否需要遮罩层
  • draggable 是否能拖拽
  • closeVisible 是否展示关闭按钮
  • visible 是否显示对话框
  • height 高度
  • width 宽度

slots

  • title

  • - 内容块

  • foot

events

  • show
  • hide
  • sizechange
  • positionchange

ButtonGroup

props

prop type default description
name String -- 控件名
ui String -- 选填,样式的变种
current Number 0 选填,默认选中的索引
vertical String false 选填,是否垂直排列
items Array -- 必填,text/value的配置

events

click

usage

<veui-button-group :items="items3" :current="current" :vertical="vertical"></veui-button-group>

Uploader 变更记录

本 issue 记录 0.2.4 → 0.3.0 时,Uploader 组件接口的 breaking change。

Props

  • uploaderTypetype
  • extensionTypesextensions
  • uploadingContentprogress
  • previewImage 移除

Slots

  • textbutton-label
  • button 移除
  • tipdesc
  • warning 移除
  • typeInvalidText 移除
  • sizeInvalidText 移除
  • file-contentfile
  • successTextsuccess-label
  • failure-contentfailure
  • failureTextfailure-label
  • uploading-contentuploading
  • uploadingTextuploading-label

特殊弹窗键盘操作优化

可以考虑参考浏览器默认行为:

类型 默认聚焦 按下 enter 行为 按下 esc 行为
alert 确定 确定并关闭 无效
confirm 取消 视 focus 而定 取消
prompt 输入框 在输入框中为提交,否则视 focus 而定 取消

第一批组件待调整的点

  • Dialog 支持无标题栏样式
  • outside 指令 hover 触发时的实现调整为使用 mouseenter / mouseleave
  • OverlayManager 实现同 context 浮层的优先级处理
  • Overlay 在 tether 计算位置之前,设置 opacity 为 0
  • DatePicker 支持快捷选择
  • DatePicker 支持disabled/readonly
  • DatePicker 时段选择选完开始时间显示已选日期
  • Form 支持层级disabled/readonly
  • Uploader 支持 v-model
  • Select 组件分隔线支持
  • Select 组件下拉框截断部分边缘淡出效果
  • 去除对 vue-awesome/icons 的依赖

Form 支持多提交按钮带参数」暂不实现了。

Table 组件功能增强

  • 合并单元格
  • 固定表头
  • 固定列
  • 提示
  • 展开行
  • 调整列宽
  • 筛选
  • 跨页选择

合并单元格

Column 组件新增 prop:span

可以配置为返回如下格式对象的函数:

{
  row: 2,
  col: 2
}

固定表头

有两个方案:

  1. 锁定到屏幕上边缘;
  2. 固定表格高度,在表格内部滚动。

固定列

Column 组件新增 prop: fixed

可配置为 BooleanStringleft/right)。

提示

TableHead 下方增加一行,并合并整行单元格,用来显示提示。

展开行

待补充。

调整列宽

待补充。

筛选

待补充。

跨页选择

待补充。

FilterPanel 组件接口

Props

  • datasource: Array
[
  {
    value: '1',
    label: 'Steve Rogers'
  },
  {
    value: '2',
    label: 'Natasha Romanov',
    children: [
      {
        value: '3',
        label: 'Bruce Banner'
      }
    ]
  },
  ...
]
  • searchable: boolean

  • filter: Function

  • placeholder: string

slots

  • head

  • no-data

scopedSlots

  • default

Carousel 组件接口

Props

  • datasource: Array

    数据源。预定义的字段如下:

    • src - 图片地址
    • type - 类型,默认 img,可选值 video / img
    • name - 业务逻辑中引用的 slug 名称
    • label - 文本标题
    • caption - 完整标题
  • index: Number

    当前激活的项目序号。[.sync]

  • indicator: String

    进度指示器的显示模式,默认 radio,可选值 radio / number / tab / none

  • switch-trigger: String

    指示器触发翻页的条件,默认 click,可选值 click / hover

  • pause-on-hover: Boolean

    鼠标悬浮时暂停自动播放,默认值 true

  • autoplay: Boolean

    是否自动播放,默认值 true

  • interval: Number

    相邻项目切换间隔毫秒数,默认值 3000

Slot

  • default

    轮播项的内容,scope 传入 datasource[index] 对应的 item(展开)及 index

Event

  • change

    轮播项变化的时候触发。参数列表 indexitem,分别为变更后的序号、数据源项目。

Tree 组件接口

Props

  • datasource: Array
[
  {
    value: '1',
    label: 'Steve Rogers'
  },
  {
    value: '2',
    label: 'Natasha Romanov',
    children: [
      {
        value: '3',
        label: 'Bruce Banner'
      }
    ]
  },
  ...
]
  • itemClick: 'toggle' | 'none'

Events

  • click

  • expand

  • collapse

Scoped Slots

  • item

  • item-label

支持 :focus-ring

实现 :focus-ring 样式,模拟类似 Chrome 中 <button> 仅在键盘导航触发聚焦时显示 focus ring 的效果。(:focus 条件过于宽泛,因为鼠标点击后仍然处于聚焦状态,造成一种「按钮被选中」的假象。)

比如下图的按钮组:

image

第一个按钮被鼠标点击后效果如下:

image

可以引入 polyfill 后将 :focus 样式调整为 .focus-ring 的样式。

Breadcrumb

BreadcrumbItem

props

  • separator 节点分隔符
  • to 要跳转到的链接

events

  • click

slots

<veui-breadcrumb-item to="http://www.baidu.com">首页</veui-breadcrumb-item>

Breadcrumb

props

  • separator 节点分隔符

events

  • item-click 会传递给回调函数$index参数

slots

示例:

<veui-breadcrumb @item-click="onBreadcrumbItemClick($index)">
    <veui-breadcrumb-item :to="'http://www.baidu.com'">首页</veui-breadcrumb-item>
    <veui-breadcrumb-item>用户列表</veui-breadcrumb-item>
</veui-breadcrumb>

to 和 item-click 互斥,to 的优先级更高。

Switch

props

props type defalut description
ui String -- 样式的变种small/large/plain
name String -- 组件名
state String off 开关状态: on/off/loading
disabled Boolean false 禁用
readonly Boolean false 只读
errorMessage String -- 错误信息
animate Boolean true 是否带动画效果

events

click/change

usage

Calendar 接口

props

Prop Type Default Description
value String datepicker 值
name String form 提交时 name
readonly Boolean false 是否只可读
placeholder String input placeholder text
disabled Boolean false input disabled attr
range Object 预设时间范围快捷选择
inputFormat String yyyy-MM-dd 输入日期格式 年 yyyy,月 MM,日 dd
outputFormat String yyyy-MM-dd 输出日期格式 年 yyyy,月 MM,日 dd
inline Boolean false 总是展示
ui String calendar ui 样式
clearable Boolean false 是否可清除
disabledDates Function 不可选择的时间

Range Object

function addDays(days) {
  let current = new Date();
  return current.setDate(current.getDate() + days);
}

const current = new Date();
enum ShortDayRange {
    weekday,
    weekend
}
const range: {
        from: current,
        to: addDays(7),
        exclude: [Date/String/ShortDayRange]
    }

disabledDates

function disabledDate(current) {
  // can not select days before today and today
  return current && current.valueOf() < Date.now();
}

<veui-datepicker :disabledDates="disabledDate"></veui-datepicker>

Events

  • change
  • click

select/Option增加 option item级别的slot

目前 select/Option的slot只能算是 slot[name=label],计划再增加一个 option/item级别的默认slot。

但是发现一个问题,也是之前讨论过的:

在select/Select使用select/Option是,好像是只能往外开放select/Option的默认slot;如果select/Option有slot[name=default]和slot[name=label]这样的话,按照目前的设计,就永远也不能达到 ui=checkmark下,只覆盖label的情况。

<veui-option
            v-else
            v-bind="option"
            :ui="ui"
            :selected="option.value === value"
            :key="option.value"
            @select="handleSelect(option)">
            <slot name="option" v-bind="option" :selected="option.value === value"></slot>
</veui-option>

dev 阶段移除部分 eslint 规则

像变量没有使用、缩进错误、数组逗号等并不影响代码运行的规则能否不要在 dev 时检查,否则 debug 时比较麻烦。

这些检查可以配置到 git commit 的 hook 上进行检查。

Steps 组件接口

Steps Props

prop type default desc
direction String horizontal 显示方向,可选值:vertical、horizontal
timeline Boolean false 时间线样式,可选值:true、false

Steps.Step Props

prop type default desc
title String - 标题
icon String - 图标
description String - 描述

usage

<veui-steps>
  <veui-step title="第一步" />
  <veui-step title="第二步" />
  <veui-step title="第三步" />
</veui-steps>

规范组件内命名规则

主要约束组件文件名、组件 name 属性和主元素的 class

规则为将 PascalCase 的文件名严格转为 kebab-case 的形式。由于之前未约定,需要修改部分已有的公有组件。(注意这是多个 breaking change,如果为特定组件 class 覆盖过样式需要随此变更更新自定义代码。)

修改清单:

CheckboxGroup
class: veui-checkboxgroup → veui-checkbox-group

RadioGroup
class: veui-radiogroup → veui-radio-group
name: veui-radiogroup → veui-radio-group

DatePicker
class: veui-datepicker → veui-date-picker
name: veui-datepicker → veui-date-picker

RegionPicker
class: veui-regionpicker → veui-region-picker
name: veui-regionpicker → veui-region-picker

PromptBox
class: veui-promptbox → veui-prompt-box
name: veui-promptbox → veui-prompt-box

ColorPicker 组件接口

Color Swatch 色样组件

Props

prop type default desc
color String #fff 颜色,支持 v-model, .sync
ui String normal 展现形式,(small|normal)[ (hex|rgb|hsl)[ alpha]]
readonly Boolean false 文本框只读
<veui-color-swatch color="#ff00ff" ui="small hex alpha"></veui-color-swatch>

Color Picker 取色器组件

Props

prop type default desc
color String #fff 颜色,支持 hex, hsl(a), rgb(a);v-model, .sync
ui String normal 展现形式,small: 小, normal: 中, large: 大
format String hsl 输出颜色格式:hsl, rgb, hex;其中, hex 会丢弃 alpha 值,所以format: hex时无法修改alpha值。转换为rgb时会丢弃小数部分导致精度降低,不建议使用。
<veui-color-picker v-model="color" ui="normal"></veui-color-picker>
<veui-color-picker :color.sync="color" ui="large"></veui-color-picker>

Events

name args desc
update:color color 颜色改变

Color Palette 色板组件

Props

prop type default desc
colors Array [] 颜色集
ui String normal 展现形式: small, normal

Events

name args desc
select index 选择颜色
remove index 删除颜色
add 添加颜色
<veui-color-picker v-model="color">
  <veui-color-palette :colors="colors" ui="small"
    @select="handlePaletteColorSelect"
    @remove="handlePaletteColorRemove"
    @add="handlePaletteColorAdd"
  ></veui-color-palette>
</veui-color-picker>

统一 UI 升级(序章)


文档总体结构

安装

安装依赖

配置

  • babel-plugin-veui

  • veui-loader

  • Postcss

指南

组件

分类/字母序组织组件

  • props/slots/scoped slots/events/ui
  • sync/v-model
  • 预设的全局配置

指令

  • v-drag
  • v-outside

插件

  • 指令式 Toast 调用插件

高级

主题包

  • 预设主题包
  • 如何定制

表单

  • 校验、提交
  • 扩展自定义规则

全局配置

选项配置

图标配置

  • 替换预设图标
  • 构建自己的图标集

浮层管理

  • 浮层堆叠原理
  • 自定义浮层组件

Transfer 组件接口

[草稿]

Props

  • datasource: Array

    [
      {
        id: '1',
        label: 'Steve Rogers'
      },
      {
        id: '2',
        label: 'Natasha Romanov'
      },
      ...
    ]
  • searchable: Boolean

  • filter: Function

  • selected: Array [v-model]

Events

  • select [v-model]

Slots

  • default

  • candidate-label

  • selected-label

Scoped Slots

  • canditate-item

  • selected-item

TokenInput 组件接口

属于输入组件 提供disabled readonly autofocus等功能。

Props

prop type default desc
tokens Array 标签数组,对象数组。数组元素形式为{label:'',value:''}。
value Array 标签value值数组。当tokens为空时,默认显示value数组
triggerkey Array triggerkey数组控制输入时以什么分隔符来决定插入一个token
placeholder String
validateToken Function 校验时候可以插入

Events

functionName args desc
input(value) value 输入时触发. value:返回当前input 框中的value值
select(value) value 添加的value的token值

Theme-One 视觉遗留问题汇总

体验类

  • Select 等下拉框滚动区域上下渐变遮罩
  • Uploader 交互细节更新
  • Dialog 关闭按钮交互视觉反馈

功能类

  • Dropdown 组件支持 split

暂缓

  • 图标设计与手百合并后更新(#230

Select 相关新增需求

1 希望能够自定义select组件中 overlay的overlayClass
2希望增加事件(点击option)可以反回当前item 对象。
3 如果能有文档 || 源码 || demo 中能加入组件”参数“配置的注释就更好了

Slider组件接口

Slider(部分内容待完善)

props

prop type default desc
min Number 1 最小有效value
max Number 100 最大有效value
value Number 64 此范围的当前值
snapInterval Number 1 控制 value 属性的有效值。如果为非零,则有效值为 min 与此属性的整数倍数之和,且小于或等于 max
vertical Boolean false 是否垂直显示组件
tipShow Boolean true 如果设置为 true,则在用户交互期间将显示包含滑块当前值的数据提示。
tipFormat Function null 格式化数据提示文本的回调函数。此函数使用单个 Number 作为参数并返回格式化的 String。
tipPrecision Number 0 用于数据提示文本的小数位数。值 0 表示将所有值舍入为整数。如果已定义 tipFormat,则会忽略此值
liveDragging Boolean false 如果为 true,则将在沿着轨道拖动滑块时,而不是在释放滑块按钮时,提交此滑块的值。
ui String '' 内容待补充

code待添加

event

name args desc
update:value value 组件当前的有效value

设计思路,以默认水平方向滑块轨道说明(以下内容待完善

1.百分比value值
2.百分比width值

两种轨迹思路
1.全部的轨道,包含滑块在内,对应滑块的圆心轨迹,在轨道上
2.除滑块以外的宽度,对应滑块的左侧边缘轨迹在轨道上

对应HTML结构设计
1.待完善
2.待完善

Tooltip组件的target,支持应该包括Object类型

如果一个target[ref]是在v-for循环里面,target的值只能是数组,可以在当前vm提前获取target的HTMLElement,传给Tooltip,但到Tooltip会抛warning.

[Vue warn]: Invalid prop: type check failed for prop "target". Expected String, got HTMLDivElement.

InputComponent 接口

InputComponent 接口

如果一个组件希望在 Form 中被感知并处理数据,必须实现该接口。

涉及组件

第一批组件 #1 中需要实现的如下列表:

  • Button
  • Uploader
  • Select
  • RangeCalendar
  • Radiobox
  • Checkbox
  • BoxGroup
  • Calendar
  • TextInput

接口描述

  • InputComponent.uiTypes
    • @type {Array} 组件内部类型,默认为['input'],直接mixinvm
  • InputComponent.props.value
    • @type {Mixed}
  • InputComponent.props.name
    • @type {string}
  • InputComponent.props.readonly
    • @type {Boolean} 组件只读状态,默认为false
  • InputComponent.props.disabled
    • @type {Boolean} 组件禁用状态,默认为false
  • @emit input
    • @param {Mixed} newVal 由组件内部更新data._rawValue后格式化输出的值,用于实现通知外部更新props.value

具体实现

通过具体组件添加inputmixin实现

  • uiTypes

    给组件混入一个uiTypes的属性,默认为['input'],组件内部追加自己的详细type,通过mergeStrategy处理合并。

    uiTypes: ['input']
  • value

    给组件声明一个propsvalue值,不限定类型,初始值可由组件覆盖。

    props: {
      value: null
    }
  • name

    给组件声明一个propsname值,类型为字符串。

    props: {
      name: String
    }
  • readonly

    给组件声明一个propsreadonly值,类型为布尔值,默认值false

    props: {
      readonly: String
    }
  • disabled

    给组件声明一个propsdisabled值,类型为布尔值,默认值false

    props: {
      disabled: String
    }
  • @input

    输入型组件必须实现该事件,在用户修改原生DOM对内部造成value变化时,需要触发该事件,并传递一个和props.value类型及格式保持一致的数据。

RegionPicker 组件接口

属于输入控件,提供 disabled / readonly 状态,并实现 v-model

props

  • datasource

    地域数据,结构为:

    [
      {
        label: '全国', // 没有 id 则不会出现在结果中
        children: [
          {
            label: '华北地区',
            children: [
              {
                label: '北京',
                id: '1' // id 是字符串
              },
              {
                label: '天津',
                id: '2'
              },
              {
                label: '河北',
                id: '3',
                children: [
                  {
                    label: '石家庄',
                    id: '4'
                  },
                  ...
                ]
              },
              ...
            ]
          }
        ]
      }
    ]
  • selected (v-model)

    输出值,表示被选中的区域。值为区域 id 的数组。

    ['1', '2', '4']
  • includeIndeterminate

    是否输出部分选择的节点。

events

  • change (v-model)

    用户操作导致选项发生变化时触发,参数为所有选中项。

  • select

    用户操作导致选项发生变化时触发,参数为 1. 是否选中,2. 变化的项目 id

slots

  • label (scoped)

    scope 参数:

    • level - Number 类型,表示层级数。默认情况下,0 表示根节点,1 ~ 3 为地区、省、市。
    • label - String 类型,当前项目文本。
    • id - String 类型,当前项目 id

使用方法

<veui-regionpicker :datasource="regionData" v-model="regions">
  <template slot="label" scope="props">
    <strong v-if="props.level === 0">**</strong>
    <strong v-else-if="props.id">{{ props.label }}</strong>
    <span v-else>{{ props.label }}</span>
  </template>
</veui-regionpicker>

Searchbox组件接口

Props

prop type default desc
ui String 全局 ui 属性
name String 绑定到input 标签name属性
placeholder String 绑定到input 标签name属性
value String 绑定到input value属性
readonly Boolean false 模拟 input readonly属性
disabled Boolean false 模拟input disabled
autofocus Boolean false 自动聚焦,绑定到input 上
autocomplete String off 可选 on,默认 off,原生补全,绑定到input标签 autocomplete 属性
selectOnfocus Boolean false 聚焦时全选
suggestions Array suggestion列表

Events

  • input <value, event>
  • search <value, event>

usage

<veui-search-box ui="small alt" 
    v-model="searchText"
    select-on-focus
    autofocus
    placeholder="查找广告主"
    @search="log('search')"></veui-search-box>

Schedule 组件接口

Mixins

  • input

Props

  • selected: Object [v-model]

    已选的时间段。格式如下:

    {
      0: [ [0, 23] ],           // 周日
      1: [ [9, 12], [13, 18] ], // 周一
      3: [ [13, 16] ]           // 周三
    }
  • hourClass: String | Object | Function

    代表小时的每一格的附加 class,支持 Vue 模板绑定能够识别的 class 格式。为 Function 时,传入的参数列表为 day, hour

  • disabledHour: Function

    判断该小时是否为禁用状态,传入的参数列表为 day, hour

  • shortcuts: Array

    快捷选择。格式和 selected 相同。

  • shortcutsDisplay: String

    快捷选择的显示模式,默认 expanded,可选值 expanded / collapsed

  • statuses: Array

    日期单元格的状态,用来在图例中显示。数组项格式为 { name, label }。会在图例上生成 veui-schedule-legend-${name} 这个 class。

Events

  • select [v-model]

Slots

  • header

    组件上方头部的区域。默认内容为快捷选择 + 图例。

  • shortcuts

    快捷选择的内容。

  • legend

    图例内容。

Scoped Slots

  • hour

    代表一小时的格子内容。参数为 { day, hour }

  • tooltip

    代表单元格浮层里的内容。参数为 { day, hour }

  • label

    选择时段后显示的文字标签。参数为 { day, from, to }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.