Skip to content

Commit d1535cf

Browse files
xiaodemenJustineo
authored andcommitted
docs: update doc for form and uploader
Change-Id: I7f40bc634ebf917ab9b154ad656f3751c5e508aa
1 parent 5915221 commit d1535cf

File tree

9 files changed

+263
-60
lines changed

9 files changed

+263
-60
lines changed

one/docs/components/field.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
| ``abstract`` | `boolean=` | `false` | 抽象表单项,抽象的项目没有标题,也不会展示校验信息。 |
2828
| ``withhold-validity`` | `boolean=` | `false` | 当设置为 `true` 时,该表单项内容中的输入组件(如 `veui-input` )不会自动绑定校验事件,也不会自动进入 `invalid` 状态,使用方可以通过 `default` 插槽来自行定制。 |
2929
| ``validity-display`` | `'normal' | 'simple'` | `'simple'` | [^validity-display] |
30+
| ``required`` | `boolean` | `false` | 用来在没有 `required` 规则时是否显示必要性星号提示。 |
3031

3132
^^^ui
3233
预设样式。
@@ -76,16 +77,17 @@ let minLengthRule = {
7677
^^^
7778

7879
^^^rules
79-
表单项校验规则,同步的单值校验。对于 `Array` 类型,项目的类型为 `{triggers, name, message, value, priority}`
80+
表单项校验规则,同步的单值校验。对于 `Array` 类型,项目的类型为 `{triggers, name, message, value, validate, priority}`
8081

8182
+++字段详情
8283
| 名称 | 类型 | 描述 |
8384
| -- | -- | -- |
84-
| `triggers` | `string` | 触发校验的事件名称集合,逗号分隔。 |
85+
| `triggers` | `string` | 触发校验的事件名称集合,逗号分隔,支持 `<fieldName>:<eventName>` 表示当 `fieldName` 字段发生 `eventName` 事件时触发校验,可以参考示例[`内联规则校验`](./form#内联规则校验)|
8586
| `name` | `string` | 规则名称。 |
8687
| `value` | `*` | 规则要匹配的值。`boolean` 类型的规则,默认为 `true`|
8788
| `message` | `string | function` | [^message] |
8889
| `priority` | `number` | 规则优先级,可以覆盖规则默认优先级。 |
90+
| `validate` | `(value: unknown, ruleValue: unknown) => boolean` | 内联校验器,用来直接编写验证逻辑,可以参考示例[`内联规则校验`](./form#内联规则校验)|
8991
+++
9092

9193
+++内置规则

one/docs/components/form.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,14 @@
2828

2929
[[ demo src="/demo/form/help.vue" ]]
3030

31-
### 校验
32-
33-
[[ demo src="/demo/form/validate.vue" ]]
34-
3531
### 规则校验
3632

3733
[[ demo src="/demo/form/rule.vue" ]]
3834

35+
### 内联规则校验
36+
37+
[[ demo src="/demo/form/inline-rule.vue" ]]
38+
3939
### 异步联合校验
4040

4141
[[ demo src="/demo/form/validator.vue" ]]
@@ -81,7 +81,7 @@
8181
| -- | -- | -- |
8282
| `fields` | `Array` | 对应 `Field``field` 描述的集合。事件会绑定到对应 `Field` 中的输入组件上。 |
8383
| `validate` | `function` | 自定义校验函数,传入参数为 `(data[fields[0]], data[fields[1]], ...)``data` 为表单 [`data`](#props-data) 属性值的引用。返回 `undefined` / `true` 代表校验成功,返回 `{[field]: message, ...}` 表示校验失败信息,详见[表单 › 表单校验逻辑](#表单校验逻辑)|
84-
| `triggers` | `string | Array<string>` | 事件名称集合。 |
84+
| `triggers` | `string | Array<string>` | 事件名称集合, 支持 `<fieldName>:<eventName>` 表示当 `fieldName` 字段发生 `eventName` 事件时触发校验|
8585
+++
8686

8787

@@ -92,6 +92,7 @@
9292
| `['a','b','c']` | `['change', 'blur,input,xxx', 'submit']` | a(change), b(blur,input,xxx), c(submit) |
9393
| `['a','b','c']` | `'blur'` | a(blur), b(submit), c(submit) |
9494
| `['a','b','c']` | `'blur,input'` | a(blur,input), b(blur,input), c(blur,input) |
95+
| `['a']` | `'blur,b:input'` | a(blur,b:input) |
9596
+++
9697
^^^
9798

one/docs/components/uploader.md

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,17 @@
5050

5151
[[ demo src="/demo/uploader/entries.vue" ]]
5252

53+
### 自定义选择文件
54+
55+
设置 [`pick`](#props-pick) 属性来自定义选择文件。
56+
57+
[[ demo src="/demo/uploader/pick.vue" ]]
58+
59+
### 帮助文案
60+
61+
设置 [`help`](#props-help) 属性或[`help`](#slots-help) 插槽来指定帮助文案。
62+
63+
[[ demo src="/demo/uploader/help.vue" ]]
5364

5465
## API
5566

@@ -82,7 +93,7 @@
8293
| ``controls`` | `function(Object, Array<Object>): Array<Object>` | - | [^controls] |
8394
| ``multiple`` | `boolean` | `false` | 上传多个文件,当 `max-count``1``multiple``true`,那么 `value` 也是数组。 |
8495
| ``entries`` | `function(Array<Object>): Array<Object>` | - | [^entries] |
85-
| ``pick`` | `function(number): Promise<Object>` | - | [^pick] |
96+
| ``pick`` | `function({remainingCount: number}): Promise<Object>` | - | [^pick] |
8697
| ``after-pick`` | `function(Array<Object>): void` | - | 选择文件之后的回调。 |
8798
| ``sortable`` | `boolean` | `false` | 文件列表是否可以排序。 |
8899
| ``preview-options`` | `object` | `{wrap: true, indicator: 'number'}` | 传递给 [`Lightbox`](./lightbox) 的预览选项。 |
@@ -168,6 +179,7 @@
168179
| `name` | `string=` | 文件的名称。`success``true` 时必须。 |
169180
| `src` | `string=` | 文件的地址。`success``true` 时必须。 |
170181
| `message` | `string=` | 上传失败时的出错信息。`success``false` 时必须。 |
182+
| `preview` | `boolean` | 上传失败时,是否预览失败的上传项。 |
171183

172184
还可以给返回结果加上其它自定义的属性,这些自定义属性会被包含在 [`value`](#props-value) 以及 [`change`](#events-change)[`success`](#events-success)[`failure`](#events-failure)[`remove`](#events-remove)[`progress`](#events-progress) 事件的回调参数 `file` 中 。可进行[全局统一配置](#configs-uploader-convert-response)
173185
+++
@@ -201,7 +213,7 @@
201213
自定义选择文件逻辑, 返回的文件会被上传。
202214

203215
```ts
204-
function picker() : Promise<PickedFile | PickedFile[]>
216+
function picker({remainingCount: number}) : Promise<PickedFile | PickedFile[]>
205217

206218
type PickedFile = {
207219
name: string
@@ -255,6 +267,7 @@ type PickedFile = {
255267
| -- | -- | -- |
256268
| `valid` | `boolean` | 是否通过校验。 |
257269
| `message` | `string=` | `valid``false` 时的错误提示信息。 |
270+
| `preview` | `boolean` | 当校验失败时,是否预览失败的上传项。 |
258271
259272
支持异步校验,返回值可以是一个 resolve 上述返回结果的 `Promise`
260273

one/docs/demo/form/inline-rule.vue

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<template>
2+
<article class="veui-form-demo">
3+
<veui-form
4+
ref="form"
5+
:data="data"
6+
>
7+
<veui-field
8+
label="密码:"
9+
name="password"
10+
:rules="[
11+
{ name: 'required', triggers: 'input,blur' },
12+
{ name: 'minLength', value: '6', triggers: 'blur' }
13+
]"
14+
>
15+
<veui-input
16+
v-model="data.password"
17+
type="password"
18+
/>
19+
</veui-field>
20+
21+
<veui-field
22+
label="确认密码:"
23+
name="password2"
24+
:rules="p2Rules"
25+
>
26+
<veui-input
27+
v-model="data.password2"
28+
type="password"
29+
/>
30+
</veui-field>
31+
</veui-form>
32+
</article>
33+
</template>
34+
35+
<script>
36+
import {
37+
Form,
38+
Field,
39+
Input
40+
} from 'veui'
41+
42+
export default {
43+
name: 'demo-form',
44+
components: {
45+
'veui-input': Input,
46+
'veui-form': Form,
47+
'veui-field': Field
48+
},
49+
data () {
50+
return {
51+
data: {
52+
password: '',
53+
password2: ''
54+
}
55+
}
56+
},
57+
computed: {
58+
p2Rules () {
59+
return [
60+
{ name: 'required', triggers: 'input,blur' },
61+
{
62+
name: 'prefix',
63+
value: this.data.password,
64+
triggers: 'input',
65+
message: '两次输入的密码不一致',
66+
validate (val, ruleValue) {
67+
return (ruleValue || '').indexOf(val || '') === 0
68+
}
69+
},
70+
{
71+
name: 'same',
72+
value: this.data.password,
73+
triggers: 'change,password:input',
74+
message: '两次输入的密码不一致',
75+
validate (val, ruleValue) {
76+
return !val || (ruleValue || '') === val
77+
}
78+
}
79+
]
80+
}
81+
}
82+
}
83+
</script>

one/docs/demo/form/validator.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,14 @@ import {
4343
Fieldset,
4444
Field,
4545
Input,
46-
Button
46+
Button,
47+
Span
4748
} from 'veui'
4849
4950
export default {
5051
name: 'demo-form',
5152
components: {
53+
'veui-span': Span,
5254
'veui-input': Input,
5355
'veui-button': Button,
5456
'veui-form': Form,

one/docs/demo/uploader/help.vue

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<template>
2+
<article>
3+
<section>
4+
<div>
5+
helpPosition:
6+
<veui-radio-button-group
7+
v-model="helpPosition"
8+
ui="s"
9+
:items="availableHelpPositions"
10+
/>
11+
</div>
12+
<veui-uploader
13+
v-model="files"
14+
:help-position="helpPosition"
15+
:help="'help text'"
16+
action="https://app.fakejson.com/q/ELymQ7xh?token=AWFkjMICPSAB_bO_z-Lnog"
17+
/>
18+
<veui-uploader
19+
v-model="files"
20+
:help-position="helpPosition"
21+
action="https://app.fakejson.com/q/ELymQ7xh?token=AWFkjMICPSAB_bO_z-Lnog"
22+
>
23+
<template #help>Custom help text via `help` slot</template>
24+
</veui-uploader>
25+
</section>
26+
</article>
27+
</template>
28+
29+
<script>
30+
import { Uploader, RadioButtonGroup } from 'veui'
31+
32+
const mapper = (value) => ({ label: value, value })
33+
34+
export default {
35+
components: {
36+
'veui-uploader': Uploader,
37+
'veui-radio-button-group': RadioButtonGroup
38+
},
39+
data () {
40+
let files = [
41+
{
42+
name: 'demo-file1.txt',
43+
src: '/file/demo-file1.txt',
44+
key: 0
45+
}
46+
]
47+
return {
48+
files,
49+
helpPosition: 'side',
50+
availableHelpPositions: ['side', 'bottom'].map(mapper)
51+
}
52+
}
53+
}
54+
</script>
55+
56+
<style lang="less" scoped>
57+
article {
58+
display: flex;
59+
}
60+
61+
.veui-uploader {
62+
margin-top: 16px;
63+
}
64+
65+
section {
66+
width: 45%;
67+
}
68+
</style>

one/docs/demo/uploader/pick.vue

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<template>
2+
<article>
3+
<section>
4+
<veui-uploader
5+
type="file"
6+
:pick="pick"
7+
action="https://app.fakejson.com/q/ELymQ7xh?token=AWFkjMICPSAB_bO_z-Lnog"
8+
/>
9+
</section>
10+
</article>
11+
</template>
12+
13+
<script>
14+
import { Uploader } from 'veui'
15+
import confirm from 'veui/plugins/confirm'
16+
import Vue from 'vue'
17+
18+
Vue.use(confirm)
19+
20+
export default {
21+
components: {
22+
'veui-uploader': Uploader
23+
},
24+
methods: {
25+
pick ({ remainingCount }) {
26+
return this.$confirm('模拟自定义选择文件', '确认').then((ready) => {
27+
return ready
28+
? new File([`count: ${remainingCount}`], 'pick.txt', { type: 'text/plain' })
29+
: null
30+
})
31+
}
32+
}
33+
}
34+
</script>

0 commit comments

Comments
 (0)