cloud-ui.vusion
Version:
Vusion Cloud UI
420 lines (372 loc) • 12.4 kB
Markdown
<!-- 该 README.md 根据 api.yaml 和 docs/*.md 自动生成,为了方便在 GitHub 和 NPM 上查阅。如需修改,请查看源文件 -->
# UDynamicCards 动态卡片
- [示例](#示例)
- [基本用法](#基本用法)
- [限制数量](#限制数量)
- [Mini 自定义](#mini-自定义)
- [表单验证](#表单验证)
- [API]()
- [Props/Attrs](#propsattrs)
- [Computed](#computed)
- [Slots](#slots)
- [Events](#events)
- [Methods](#methods)
## 示例
### 基本用法
``` vue
<template>
<u-dynamic-cards :data="list" text-field="url" :getDefaultItem="getDefaultItem">
<template slot-scope="{ item }">
<u-linear-layout>
<u-input size="huge normal" v-model="item.url" placeholder="URL"></u-input>
<u-select size="huge normal" v-model="item.service" :data="services"></u-select>
<u-input size="huge normal" v-model.number="item.port" placeholder="端口"></u-input>
</u-linear-layout>
</template>
</u-dynamic-cards>
</template>
<script>
export default {
data() {
return {
list: [{
url: 'xxx',
service: 'abc',
port: 8000,
description: '',
}, {
url: '222',
service: 'def',
port: 2000,
description: '',
}],
services: [
{ text: 'abc', value: 'abc' },
{ text: 'def', value: 'def' },
{ text: 'zzz', value: 'zzz' },
],
};
},
methods: {
getDefaultItem() {
return {
url: '',
service: '',
port: '',
description: '',
};
},
},
};
</script>
```
### 限制数量
``` vue
<template>
<u-dynamic-cards :data="list" text-field="url" :getDefaultItem="getDefaultItem" :max-count="5">
<template slot-scope="{ item }">
<u-linear-layout>
<u-input size="huge normal" v-model="item.url" placeholder="URL"></u-input>
<u-select size="huge normal" v-model="item.service" :data="services"></u-select>
<u-input size="huge normal" v-model.number="item.port" placeholder="端口"></u-input>
</u-linear-layout>
</template>
</u-dynamic-cards>
</template>
<script>
export default {
data() {
return {
list: [{
url: 'xxx',
service: 'abc',
port: 8000,
description: '',
}, {
url: 'xxx',
service: 'abc',
port: 8000,
description: '',
}],
services: [
{ text: 'abc', value: 'abc' },
{ text: 'def', value: 'def' },
{ text: 'zzz', value: 'zzz' },
],
};
},
methods: {
getDefaultItem() {
return {
url: '',
service: '',
port: '',
description: '',
};
},
},
};
</script>
```
### Mini 自定义
``` vue
<template>
<u-dynamic-cards :data="list" text-field="url" :getDefaultItem="getDefaultItem">
<template slot-scope="{ item }">
<u-linear-layout>
<u-input size="huge normal" v-model="item.url" placeholder="URL"></u-input>
<u-select size="huge normal" v-model="item.service" :data="services"></u-select>
<u-input size="huge normal" v-model.number="item.port" placeholder="端口"></u-input>
</u-linear-layout>
</template>
<template slot="mini" slot-scope="{ item }">
<span>{{ item.url }} {{ item.port }}</span>
</template>
</u-dynamic-cards>
</template>
<script>
export default {
data() {
return {
list: [{
url: 'xxx',
service: 'abc',
port: 8000,
description: '',
}, {
url: 'xxx',
service: 'abc',
port: 8000,
description: '',
}],
services: [
{ text: 'abc', value: 'abc' },
{ text: 'def', value: 'def' },
{ text: 'zzz', value: 'zzz' },
],
};
},
methods: {
getDefaultItem() {
return {
url: '',
service: '',
port: '',
description: '',
};
},
},
};
</script>
```
### 表单验证
``` vue
<template>
<u-dynamic-cards :data="list" text-field="url" :getDefaultItem="getDefaultItem">
<template slot-scope="{ item }">
<u-validator>
<u-linear-layout>
<u-validator label="URL" rules="required | pattern(/^[a-zA-Z0-9/\s]+$/)" muted="message">
<u-input size="huge normal" v-model="item.url" placeholder="URL"></u-input>
</u-validator>
<u-validator label="服务" rules="required" muted="message">
<u-select size="huge normal" v-model="item.service" disabled></u-select>
</u-validator>
<u-validator label="端口" rules="required | integer | range(1,65535)" muted="message">
<u-input size="huge normal" v-model.number="item.port" placeholder="端口"></u-input>
</u-validator>
</u-linear-layout>
</u-validator>
</template>
</u-dynamic-cards>
</template>
<script>
export default {
data() {
return {
list: [],
services: [
{ text: 'abc', value: 'abc' },
{ text: 'def', value: 'def' },
{ text: 'zzz', value: 'zzz' },
],
};
},
methods: {
getDefaultItem() {
return {
url: '',
service: '',
port: '',
description: '',
};
},
},
};
</script>
```
与`<u-form-table-view>`结合的例子。
``` vue
<template>
<u-dynamic-cards :data="list" text-field="url" :getDefaultItem="getDefaultItem">
<template slot-scope="{ item }">
<u-form-table-view :data="item.list" dynamic :getDefaultItem="getDefaultSubItem">
<u-form-table-view-column title="URL" width="20%"
rules="required | pattern(/^[a-zA-Z0-9/\s]+$/)">
<template slot="cell" slot-scope="{ item: subItem }">
<u-input size="huge full" v-model="subItem.url" placeholder="URL"></u-input>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="服务" width="20%"
rules="required">
<template slot="cell" slot-scope="{ item: subItem }">
<u-select size="huge full" v-model="subItem.service" :data="services" placeholder="服务"></u-select>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="端口" width="20%"
rules="required | integer | range(1,65535)">
<template slot="cell" slot-scope="{ item: subItem }">
<u-input size="huge full" v-model="subItem.port" placeholder="端口"></u-input>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="描述">
<template slot="cell" slot-scope="{ item: subItem }">
<u-input size="huge full" v-model="subItem.description" placeholder="描述"></u-input>
</template>
</u-form-table-view-column>
</u-form-table-view>
</template>
</u-dynamic-cards>
</template>
<script>
export default {
data() {
return {
list: [],
services: [
{ text: 'abc', value: 'abc' },
{ text: 'def', value: 'def' },
{ text: 'zzz', value: 'zzz' },
],
};
},
methods: {
getDefaultItem() {
return {
domain: '',
list: [],
};
},
getDefaultSubItem() {
return {
url: '',
service: this.services[0].value,
port: '',
description: '',
};
},
},
};
</script>
```
## API
### Props/Attrs
| Prop/Attr | Type | Options | Default | Description |
| --------- | ---- | ------- | ------- | ----------- |
| data | Array | | | 数据 |
| dynamic | boolean | | `true` | 是否可以动态添加/删除项 |
| get-default-item | Function | | | 传入获取默认项的方法 |
| initial-add | boolean | | `true` | 是否自动补充项,如果初始时`data`中的项目数少于`min-count` |
| min-count | number | | `1` | 最小项目数 |
| max-count | number | | `999` | 最大项目数 |
| text-field | string | | `'title'` | 用于 mini 显示的字段 |
| index.sync | number | | `0` | 当前展开项的索引 |
| add-button-text | string | | `'添加'` | 添加按钮的文本 |
| mini-formatter | Function | | | mini 显示时的格式器 |
### Computed
| Computed | Type | Description |
| -------- | ---- | ----------- |
| touched | boolean | 用户是否触碰 |
| dirty | boolean | 用户是否修改值 |
| valid | boolean | 验证是否通过 |
| firstError | string | 第一个错误提示消息 |
### Slots
#### (default)
展开区域的内容
| Prop | Type | Description |
| ---- | ---- | ----------- |
| item | object | 项目 |
| index | number | 索引 |
#### mini
收起时 mini 显示区的内容
| Prop | Type | Description |
| ---- | ---- | ----------- |
| item | object | 项目 |
| index | number | 索引 |
### Events
#### @before-add
添加前触发
| Param | Type | Description |
| ----- | ---- | ----------- |
| $event | object | 自定义事件对象 |
| $event.item | any | 添加的项 |
| $event.index | number | 添加的索引 |
| $event.data | Array | 当前数据 |
| $event.preventDefault | Function | 阻止添加流程 |
| senderVM | UDynamicCards | 发送事件实例 |
#### @add
添加时触发
| Param | Type | Description |
| ----- | ---- | ----------- |
| $event | object | 自定义事件对象 |
| $event.item | any | 添加的项 |
| $event.index | number | 添加的索引 |
| $event.data | Array | 当前数据 |
| senderVM | UDynamicCards | 发送事件实例 |
#### @before-remove
删除前触发
| Param | Type | Description |
| ----- | ---- | ----------- |
| $event | object | 自定义事件对象 |
| $event.item | any | 删除的项 |
| $event.index | number | 删除的索引 |
| $event.data | Array | 当前数据 |
| $event.preventDefault | Function | 阻止删除流程 |
| senderVM | UDynamicCards | 发送事件实例 |
#### @remove
删除时触发
| Param | Type | Description |
| ----- | ---- | ----------- |
| $event | object | 自定义事件对象 |
| $event.item | any | 删除的项 |
| $event.index | number | 删除的索引 |
| $event.data | Array | 当前数据 |
| senderVM | UDynamicCards | 发送事件实例 |
#### @splice
数量变更(添加/删除)时触发
| Param | Type | Description |
| ----- | ---- | ----------- |
| $event | object | 自定义事件对象 |
| $event.item | any | 变更的项 |
| $event.index | number | 变更的索引 |
| $event.data | Array | 当前数据 |
| senderVM | UDynamicCards | 发送事件实例 |
#### @validate
对于第一个 Field 或者所有子 UValidator:
| Param | Type | Description |
| ----- | ---- | ----------- |
| $event | object | 自定义事件对象 |
| $event.trigger | enum | 本次验证的触发方式 |
| $event.valid | boolean | 验证是否通过 |
| $event.touched | boolean | 用户是否触碰 |
| $event.dirty | boolean | 用户是否修改值 |
| $event.firstError | string | 第一个错误提示消息 |
| senderVM | UDynamicCards | 发送事件实例 |
Methods
#### validate($event, trigger, muted)
手动验证。
| Param | Type | Default | Description |
| ----- | ---- | ------- | ----------- |
| $event | object | | 自定义事件对象 |
| trigger | string | `'submit'` | 触发方式,可选值:`submit`、`blur`和`input`之一,或者它们的任意组合。 |
| muted | boolean | `false` | 是否验证后无提示 |