cloud-ui.vusion
Version:
Vusion Cloud UI
454 lines (440 loc) • 14.3 kB
Markdown
### 基本用法
``` vue
<template>
<u-form-table-view :data="list">
<u-form-table-view-column title="URL" width="20%">
<template slot="cell" slot-scope="{ item }">
<u-input size="huge full" v-model="item.url"></u-input>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="服务" width="20%">
<template slot="cell" slot-scope="{ item }">
<u-select size="huge full" v-model="item.service" :data="services"></u-select>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="端口" width="20%">
<template slot="cell" slot-scope="{ item }">
<u-input size="huge full" v-model="item.port"></u-input>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="描述">
<template slot="cell" slot-scope="{ item }">
<u-input size="huge full" v-model="item.description"></u-input>
</template>
</u-form-table-view-column>
</u-form-table-view>
</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' },
],
};
},
};
</script>
```
### 在表单中使用
``` vue
<template>
<u-form>
<u-form-item label="规则" layout="block">
<u-form-table-view :data="list">
<u-form-table-view-column title="URL" width="20%">
<template slot="cell" slot-scope="{ item }">
<u-input size="huge full" v-model="item.url"></u-input>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="服务" width="20%">
<template slot="cell" slot-scope="{ item }">
<u-select size="huge full" v-model="item.service" :data="services"></u-select>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="端口" width="20%">
<template slot="cell" slot-scope="{ item }">
<u-input size="huge full" v-model="item.port"></u-input>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="描述">
<template slot="cell" slot-scope="{ item }">
<u-input size="huge full" v-model="item.description"></u-input>
</template>
</u-form-table-view-column>
</u-form-table-view>
</u-form-item>
</u-form>
</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' },
],
};
},
};
</script>
```
### 动态表格
``` vue
<template>
<u-form-table-view :data="list" dynamic :get-default-item="getDefaultItem">
<u-form-table-view-column title="URL" width="20%">
<template slot="cell" slot-scope="{ item }">
<u-input size="huge full" v-model="item.url"></u-input>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="服务" width="20%">
<template slot="cell" slot-scope="{ item }">
<u-select size="huge full" v-model="item.service" :data="services"></u-select>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="端口" width="20%">
<template slot="cell" slot-scope="{ item }">
<u-input size="huge full" v-model="item.port"></u-input>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="描述">
<template slot="cell" slot-scope="{ item }">
<u-input size="huge full" v-model="item.description"></u-input>
</template>
</u-form-table-view-column>
</u-form-table-view>
</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: 'xxx',
service: this.services[0].value,
port: undefined,
description: '',
};
},
},
};
</script>
```
#### 限制数量
通过`max-count`属性的设置,下面的表格中最多可以添加5项。
``` vue
<template>
<u-form-table-view :data="list" dynamic :get-default-item="getDefaultItem" :max-count="5">
<u-form-table-view-column title="URL" width="20%">
<template slot="cell" slot-scope="{ item }">
<u-input size="huge full" v-model="item.url"></u-input>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="服务" width="20%">
<template slot="cell" slot-scope="{ item }">
<u-select size="huge full" v-model="item.service" :data="services"></u-select>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="端口" width="20%">
<template slot="cell" slot-scope="{ item }">
<u-input size="huge full" v-model="item.port"></u-input>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="描述">
<template slot="cell" slot-scope="{ item }">
<u-input size="huge full" v-model="item.description"></u-input>
</template>
</u-form-table-view-column>
</u-form-table-view>
</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: 'xxx',
service: this.services[0].value,
port: undefined,
description: '',
};
},
},
};
</script>
```
### 表单验证
``` vue
<template>
<u-form-table-view :data="list" dynamic :get-default-item="getDefaultItem">
<u-form-table-view-column title="URL" width="20%"
rules="required | pattern(/^[a-zA-Z0-9/\s]+$/)">
<template slot="cell" slot-scope="{ item }">
<u-input size="huge full" v-model="item.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 }">
<u-select size="huge full" v-model="item.service" :data="services"></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 }">
<u-input size="huge full" v-model="item.port"></u-input>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="描述">
<template slot="cell" slot-scope="{ item }">
<u-input size="huge full" v-model="item.description"></u-input>
</template>
</u-form-table-view-column>
</u-form-table-view>
</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: 'xxx',
service: this.services[0].value,
port: undefined,
description: '',
};
},
},
};
</script>
```
注意在添加列插槽的时候,必须使用`slot-scope`或者 Vue 2.6.x 新的 `#` 方式,否则模板渲染可能会有问题。
``` vue
<template>
<u-form-table-view :data="[{}]" :getDefaultItem="getDefaultItem">
<u-form-table-view-column title="URL" width="20%"
rules="required | pattern(/^[a-zA-Z0-9/\s]+$/)">
<template #cell>
<u-input size="huge full" v-model="cluster.url"></u-input>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="服务" width="20%"
rules="required">
<template #cell>
<u-select size="huge full" v-model="cluster.service" :data="services"></u-select>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="端口" width="20%"
rules="required | integer | range(1,65535)">
<template #cell>
<u-input size="huge full" v-model.number="cluster.port"></u-input>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="描述">
<template #cell>
<u-input size="huge full" v-model="cluster.description"></u-input>
</template>
</u-form-table-view-column>
</u-form-table-view>
</template>
<script>
export default {
data() {
return {
cluster: {
url: 'xxx',
service: 'abc',
port: 8000,
description: '',
},
services: [
{ text: 'abc', value: 'abc' },
{ text: 'def', value: 'def' },
{ text: 'zzz', value: 'zzz' },
],
};
},
methods: {
getDefaultItem() {
return {
url: 'xxx',
service: this.services[0].value,
port: undefined,
description: '',
};
},
},
};
</script>
```
### 自定义操作列
使用 `last-column` slot 可以自定义操作列,使用`lastColumnStyle`属性调整样式。
``` vue
<template>
<u-form-table-view ref="formTable" :data="list" :showAddButton="false" dynamic :get-default-item="getDefaultItem"
:lastColumnStyle="{ width: '80px' }">
<u-form-table-view-column title="URL" width="20%"
rules="required | pattern(/^[a-zA-Z0-9/\s]+$/)">
<template slot="cell" slot-scope="{ item }">
<u-input size="huge full" v-model="item.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 }">
<u-input size="huge full" v-model="item.service"></u-input>
</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 }">
<u-input size="huge full" v-model="item.port"></u-input>
</template>
</u-form-table-view-column>
<u-form-table-view-column title="描述">
<template slot="cell" slot-scope="{ item }">
<u-input size="huge full" v-model="item.description"></u-input>
</template>
</u-form-table-view-column>
<template slot="last-column" slot-scope="{ item, rowIndex }">
<u-linear-layout gap="small">
<u-link size="huge full" @click="duplicate(rowIndex)">复制</u-link>
<u-link size="huge full" @click="remove(rowIndex)">删除</u-link>
</u-linear-layout>
</template>
<u-button icon="plus" :style="{ marginTop: '10px' }" @click="add">添加</u-button>
</u-form-table-view>
</template>
<script>
export default {
data() {
return {
cluster: {
url: 'xxx',
service: 'abc',
port: 8000,
description: '',
},
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: {
remove(rowIndex) {
this.$refs.formTable.remove(rowIndex);
},
duplicate(rowIndex) {
this.$refs.formTable.duplicate(rowIndex);
},
add() {
this.$refs.formTable.add();
},
getDefaultItem() {
return {
url: 'xxx',
service: this.services[0].value,
port: undefined,
description: '',
};
},
},
};
</script>
```