docs: add docs for form

Change-Id: I6b84399995ed28e9fe098abe38465ed5d685fb47
This commit is contained in:
xiaodemen
2022-03-30 14:09:18 +08:00
committed by GU Yiling
parent ef735a625b
commit d0dd1ea473
12 changed files with 479 additions and 93 deletions

View File

@@ -22,6 +22,11 @@
| ``name`` | `string` | - | 表单项名称,可用于指定数据字段名或展示错误消息的定位。 |
| ``field`` | `string` | - | [^field] |
| ``rules`` | `string | Array<Object>` | - | [^rules] |
| ``help`` | `string` | - | 表单项辅助文案。 |
| ``help-position`` | `'bottom' | 'side'` | `'side'` | [^help-position] |
| ``abstract`` | `boolean=` | `false` | 抽象表单项,抽象的项目没有标题,也不会展示校验信息。 |
| ``withhold-validity`` | `boolean=` | `false` | 当设置为 `true` 时,该表单项内容中的输入组件(如 `veui-input` )不会自动绑定校验事件,也不会自动进入 `invalid` 状态,使用方可以通过 `default` 插槽来自行定制。 |
| ``validity-display`` | `'normal' | 'simple'` | `'simple'` | [^validity-display] |
^^^ui
预设样式。
@@ -116,16 +121,45 @@ let minLengthRule = {
+++
^^^
^^^help-position
表单项辅助文案的展示位置。
+++辅助文案位置
| 值 | 描述 |
| -- | -- |
| `side` | 辅助文案展示在表单项内的侧边。 |
| `bottom` | 辅助文案展示在表单项内的下方,在校验信息之前。 |
+++
^^^
^^^validity-display
表单项的校验信息是否展示图标。
+++详情说明
| 值 | 描述 |
| -- | -- |
| `normal` | 校验信息展示图标。 |
| `simple` | 校验信息不展示图标。 |
+++
^^^
### 插槽
| 名称 | 描述 |
| -- | -- |
| ``default`` | 用于内联输入组件。无默认内容。 |
| ``default`` | 用于内联输入组件。作用域参数为 `(listeners: object, invalid: boolean, validities: object, readonly: boolean, disabled: boolean)`,其中 `invalid` 是当前表单项是否校验出错误,`listeners` 是校验时机的事件绑定,`validities` 是校验信息。 |
| ``label`` | 填充表单项描述的内容。默认为 [`label`](#props-label) 属性的文本值。 |
| ``tip`` | 填充表单项提示的内容。默认为 [`tip`](#props-tip) 属性的文本值。 |
| ``help`` | 表单项辅助文本内容。默认为 [`help`](#props-help) 属性的文本值。 |
### 图标
| 名称 | 描述 |
| -- | -- |
| ``alert`` | 警示图标。 |
### 全局配置
| 配置项 | 类型 | 默认值 | 描述 |
| -- | -- | -- | -- |
| ``field.validityDisplay`` | `'normal' | 'simple'` | `'simple'` | 见 [`validity-display`](#props-validity-display) 属性。 |

View File

@@ -24,10 +24,22 @@
[[ demo src="/demo/form/disabled.vue" ]]
### 提示与辅助文本
[[ demo src="/demo/form/help.vue" ]]
### 校验
[[ demo src="/demo/form/validate.vue" ]]
### 抽象表单项
[[ demo src="/demo/form/abstract.vue" ]]
### 原生输入框与表单项整合
[[ demo src="/demo/form/withhold.vue" ]]
## API
### 属性

View File

@@ -0,0 +1,72 @@
# Message <small>消息</small>
## 示例
`Message` 有五种状态,分别是 `success``info``warning``error``aux`,可以通过 [`status`](#props-status) 属性指定不同的类型。
`Message` 有四种变体,分别是 `normal``popup``simple``standalone`,可以通过 [`display`](#props-display) 属性指定不同的变体。
[[ demo src="/demo/message/default.vue" ]]
## API
### 属性
| 名称 | 类型 | 默认值 | 描述 |
| -- | -- | -- | -- |
| ``ui`` | `string=` | `'m'` | [^ui] |
| ``status`` | `'success' | 'error' | 'info' | 'warning' | 'aux'` | `'info'` | [^status] |
| ``display`` | `'normal' | 'popup' | 'simple' | 'standalone'` | `'normal'` | [^display] |
^^^ui
预设样式。
+++枚举值
| 值 | 描述 |
| -- | -- |
| `s` | 小尺寸样式。 |
| `m` | 中尺寸样式。 |
+++
^^^status
消息状态。
+++枚举值
| 值 | 描述 |
| -- | -- |
| `info` | 消息提示样式。 |
| `success` | 成功样式。 |
| `warning` | 警告样式。 |
| `error` | 错误样式。 |
| `aux` | 辅助样式。 |
+++
^^^
^^^display
消息展示形态。
+++枚举值
| 值 | 描述 |
| -- | -- |
| `normal` | 普通样式,有图标和带状态文本。 |
| `popup` | 气泡样式。 |
| `simple` | 简单样式,没有图标。 |
| `standalone` | 独立样式,有图标和无状态文本。 |
+++
^^^
### 插槽
| 名称 | 描述 |
| -- | -- |
| ``default`` | 消息内容区域 |
### 图标
| 名称 | 描述 |
| -- | -- |
| ``success`` | 成功消息。 |
| ``warning`` | 警告消息。 |
| ``info`` | 信息消息。 |
| ``error`` | 错误消息。 |
| ``aux`` | 辅助消息。 |

View File

@@ -4,7 +4,7 @@
### 尺寸
可选的尺寸 [`ui`](#props-ui) 属性值:`s`/`m`
可选的尺寸 [`ui`](#props-ui) 属性值:`m`
[[ demo src="/demo/nav/size.vue" ]]
@@ -42,7 +42,6 @@
+++枚举值
| 值 | 描述 |
| -- | -- |
| `s` | 小尺寸样式。 |
| `m` | 中尺寸样式。 |
+++
^^^

View File

@@ -0,0 +1,80 @@
<template>
<article>
<veui-form
:data="formData"
>
<veui-field
label="门店:"
name="store"
:rules="[{
name: 'required', message: `请选择门店`, triggers: 'select'
}]"
>
<veui-transfer
:datasource="storeList"
v-model="formData.store"
>
<template #selected-item-label="{ label, value }">
<div class="selected-store">
<span class="store-label">{{ label }}</span>
<veui-field
:key="`storeCounts.${value}`"
:name="`storeCounts.${value}`"
:rules="[
{ name: 'required', message: `请填写${label}的数量`, triggers: 'change,blur' }
]"
abstract
>
<veui-number-input
v-model="formData.storeCounts[value]"
class="store-number"
ui="s"
:min="1"
/>
</veui-field>
</div>
</template>
</veui-transfer>
</veui-field>
</veui-form>
</article>
</template>
<script>
import { Form, Field, NumberInput, Transfer } from 'veui'
export default {
components: {
'veui-form': Form,
'veui-field': Field,
'veui-number-input': NumberInput,
'veui-transfer': Transfer
},
data () {
return {
disabled: true,
formData: {
store: [],
storeCounts: {}
},
storeList: [
{ label: '门店1', value: '1' },
{ label: '门店2', value: '2' },
{ label: '门店3', value: '3' },
{ label: '门店4', value: '4' }
]
}
}
}
</script>
<style lang="less" scoped>
.selected-store {
display: flex;
align-items: center;
.store-label {
min-width: 60px;
}
}
</style>

View File

@@ -0,0 +1,50 @@
<template>
<article>
<veui-form
:data="formData"
>
<veui-field
label="姓名:"
tip="提示"
help="辅助文本"
name="name"
>
<veui-input v-model="formData.name"/>
</veui-field>
<veui-field
label="爱好:"
help="辅助文本"
name="hobby"
help-position="bottom"
>
<veui-input v-model="formData.hobby"/>
</veui-field>
</veui-form>
</article>
</template>
<script>
import { Form, Field, Input } from 'veui'
export default {
components: {
'veui-form': Form,
'veui-field': Field,
'veui-input': Input
},
data () {
return {
formData: {
name: '',
hobby: ''
}
}
}
}
</script>
<style lang="less" scoped>
section {
margin-bottom: 20px;
}
</style>

View File

@@ -0,0 +1,47 @@
<template>
<article>
<veui-form
:data="formData"
>
<veui-field
label="名称:"
name="name"
:rules="[{ name: 'required', triggers: 'input,blur' }]"
>
<template #default="{ invalid, listeners }">
<input
:class="{
'demo-invalid': invalid
}"
v-model="formData.name"
v-on="listeners"
>
</template>
</veui-field>
</veui-form>
</article>
</template>
<script>
import { Form, Field } from 'veui'
export default {
components: {
'veui-form': Form,
'veui-field': Field
},
data () {
return {
formData: {
name: ''
}
}
}
}
</script>
<style lang="less" scoped>
.demo-invalid {
border: 1px solid #cc1800;
}
</style>

View File

@@ -0,0 +1,78 @@
<template>
<article>
<section>
<div class="control-wrapper">
<veui-radio-button-group
v-model="ui"
:items="uiValues"
/>
<veui-radio-button-group
v-model="display"
:items="displayValues"
/>
</div>
<div
v-for="(status, index) in statuses"
:key="index"
>
<span class="message-label">{{ status }}:</span>
<veui-message
:display="display"
:ui="ui"
:status="status"
>消息</veui-message>
</div>
</section>
</article>
</template>
<script>
import { Message, RadioButtonGroup } from 'veui'
export default {
name: 'message-demo',
components: {
'veui-message': Message,
'veui-radio-button-group': RadioButtonGroup
},
data () {
return {
ui: 'm',
uiValues: [
{ label: 's', value: 's' },
{ label: 'm', value: 'm' }
],
statuses: ['success', 'error', 'info', 'warning', 'aux'],
display: 'normal',
displayValues: [
{ label: 'normal', value: 'normal' },
{ label: 'popup', value: 'popup' },
{ label: 'simple', value: 'simple' },
{ label: 'standalone', value: 'standalone' }
]
}
}
}
</script>
<style lang="less" scoped>
section {
margin-bottom: 10px;
& > div {
display: flex;
height: 32px;
align-items: center;
}
.message-label {
min-width: 120px;
}
}
.veui-radio-button-group {
& + & {
margin-left: 26px;
}
}
</style>

View File

@@ -1,11 +1,5 @@
<template>
<article>
<section>
<veui-nav
ui="s"
:items="items"
/>
</section>
<section>
<veui-nav
ui="m"

View File

@@ -311,6 +311,10 @@
"title": "Menu - 边栏菜单",
"slug": "menu"
},
{
"title": "Message - 消息",
"slug": "message"
},
{
"title": "Nav - 导航菜单",
"slug": "nav"