Files
vxe-table/examples/views/table/advanced/Toolbar.vue
xuliangzhan c07aa6ca34 update docs
2021-11-06 23:37:52 +08:00

300 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div>
<p class="tip">
使用自带的工具栏 <toolbar-api-link name="vxe-toolbar"/>配合模板可以非常简单的实现强大的功能<br>
支持显示/隐藏列列宽拖动状态的保存功能还可以配合 <table-api-link prop="custom"/> 事件实现显示/隐藏列的服务端保存
</p>
<vxe-toolbar ref="xToolbar1" custom print></vxe-toolbar>
<vxe-table
border
height="300"
ref="xTable1"
:print-config="{}"
:data="tableData1">
<vxe-column type="seq" width="60"></vxe-column>
<vxe-colgroup title="分组信息">
<vxe-colgroup title="基本信息">
<vxe-column field="name" title="app.body.label.name"></vxe-column>
<vxe-column field="role" title="Role"></vxe-column>
</vxe-colgroup>
<vxe-column field="sex" title="app.body.label.sex"></vxe-column>
</vxe-colgroup>
<vxe-column field="age" title="app.body.label.age"></vxe-column>
<vxe-colgroup title="其他信息">
<vxe-column field="rate" title="Rate"></vxe-column>
</vxe-colgroup>
</vxe-table>
<p class="demo-code">{{ $t('app.body.button.showCode') }}</p>
<pre>
<pre-code class="xml">{{ demoCodes[0] }}</pre-code>
<pre-code class="javascript">{{ demoCodes[1] }}</pre-code>
</pre>
<p class="tip">工具栏和表格默认是上下相邻关系通过调用 <table-api-link prop="connect"/>() 方法与表格进行关联就可以开启相关的功能</p>
<vxe-table
border
ref="xTable2"
height="300"
:print-config="{}"
:loading="loading"
:data="tableData"
@custom="toolbarCustomEvent">
<vxe-column type="seq" width="60"></vxe-column>
<vxe-column field="name" title="app.body.label.name"></vxe-column>
<vxe-column field="role" title="Role"></vxe-column>
<vxe-column field="sex" title="app.body.label.sex"></vxe-column>
<vxe-column field="age" title="app.body.label.age"></vxe-column>
<vxe-column field="rate" title="Rate"></vxe-column>
</vxe-table>
<div>
<p>工具栏位置随意放</p>
<div>
<vxe-toolbar
custom
print
ref="xToolbar2"
:buttons="toolbarButtons"
:refresh="{query: findList}">
</vxe-toolbar>
</div>
<p>工具栏位置随意放</p>
</div>
<p class="demo-code">{{ $t('app.body.button.showCode') }}</p>
<pre>
<pre-code class="xml">{{ demoCodes[2] }}</pre-code>
<pre-code class="javascript">{{ demoCodes[3] }}</pre-code>
</pre>
</div>
</template>
<script>
export default {
data () {
return {
loading: false,
tableData1: [
{ id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },
{ id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
{ id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
{ id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 23, address: 'test abc' },
{ id: 10005, name: 'Test5', role: 'Develop', sex: 'Women', age: 30, address: 'Shanghai' },
{ id: 10006, name: 'Test6', role: 'Designer', sex: 'Women', age: 21, address: 'test abc' },
{ id: 10007, name: 'Test7', role: 'Test', sex: 'Man', age: 29, address: 'test abc' },
{ id: 10008, name: 'Test8', role: 'Develop', sex: 'Man', age: 35, address: 'test abc' }
],
tableData: [],
toolbarButtons: [
{ code: 'btn1', name: 'app.body.button.insert' },
{
name: '下拉按钮',
dropdowns: [
{ name: '按钮111', code: 'btn2' },
{ name: '按钮222', code: 'btn3' }
]
}
],
demoCodes: [
`
<vxe-toolbar ref="xToolbar1" custom print></vxe-toolbar>
<vxe-table
border
height="300"
ref="xTable1"
:print-config="{}"
:data="tableData1">
<vxe-column type="seq" width="60"></vxe-column>
<vxe-colgroup title="分组信息">
<vxe-colgroup title="基本信息">
<vxe-column field="name" title="app.body.label.name"></vxe-column>
<vxe-column field="role" title="Role"></vxe-column>
</vxe-colgroup>
<vxe-column field="sex" title="app.body.label.sex"></vxe-column>
</vxe-colgroup>
<vxe-column field="age" title="app.body.label.age"></vxe-column>
<vxe-colgroup title="其他信息">
<vxe-column field="rate" title="Rate"></vxe-column>
</vxe-colgroup>
</vxe-table>
`,
`
export default {
data () {
return {
tableData1: [
{ id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },
{ id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
{ id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
{ id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 23, address: 'test abc' },
{ id: 10005, name: 'Test5', role: 'Develop', sex: 'Women', age: 30, address: 'Shanghai' },
{ id: 10006, name: 'Test6', role: 'Designer', sex: 'Women', age: 21, address: 'test abc' },
{ id: 10007, name: 'Test7', role: 'Test', sex: 'Man', age: 29, address: 'test abc' },
{ id: 10008, name: 'Test8', role: 'Develop', sex: 'Man', age: 35, address: 'test abc' }
]
}
},
created () {
this.$nextTick(() => {
// 手动将表格和工具栏进行关联
this.$refs.xTable1.connect(this.$refs.xToolbar1)
})
}
}
`,
`
<vxe-table
border
ref="xTable2"
height="300"
:print-config="{}"
:loading="loading"
:data="tableData"
@custom="toolbarCustomEvent">
<vxe-column type="seq" width="60"></vxe-column>
<vxe-column field="name" title="app.body.label.name"></vxe-column>
<vxe-column field="role" title="Role"></vxe-column>
<vxe-column field="sex" title="app.body.label.sex"></vxe-column>
<vxe-column field="age" title="app.body.label.age"></vxe-column>
<vxe-column field="rate" title="Rate"></vxe-column>
</vxe-table>
<div>
<p>工具栏位置随意放</p>
<div>
<vxe-toolbar
custom
print
ref="xToolbar2"
:buttons="toolbarButtons"
:refresh="{query: findList}">
</vxe-toolbar>
</div>
<p>工具栏位置随意放</p>
</div>
`,
`
export default {
data () {
return {
loading: false,
tableData: [],
toolbarButtons: [
{ code: 'btn1', name: 'app.body.button.insert' },
{
name: '下拉按钮',
dropdowns: [
{ name: '按钮111', code: 'btn2' },
{ name: '按钮222', code: 'btn3' }
]
}
]
}
},
created () {
this.$nextTick(() => {
// 手动将表格和工具栏进行关联
this.$refs.xTable2.connect(this.$refs.xToolbar2)
})
this.findList()
},
methods: {
findList () {
this.loading = true
return new Promise(resolve => {
setTimeout(() => {
this.tableData = [
{ id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },
{ id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
{ id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
{ id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 23, address: 'test abc' },
{ id: 10005, name: 'Test5', role: 'Develop', sex: 'Women', age: 30, address: 'Shanghai' },
{ id: 10006, name: 'Test6', role: 'Designer', sex: 'Women', age: 21, address: 'test abc' },
{ id: 10007, name: 'Test7', role: 'Test', sex: 'Man', age: 29, address: 'test abc' },
{ id: 10008, name: 'Test8', role: 'Develop', sex: 'Man', age: 35, address: 'test abc' }
]
this.loading = false
resolve()
}, 300)
})
},
toolbarCustomEvent (params) {
const visibleColumn = this.$refs.xTable2.getColumns()
switch (params.type) {
case 'confirm': {
this.$XModal.message({ content: \`点击了确认,显示为 \${visibleColumn.length}\`, status: 'info' })
break
}
case 'reset': {
this.$XModal.message({ content: \`点击了重置,显示为 \${visibleColumn.length}\`, status: 'info' })
break
}
case 'close': {
this.$XModal.message({ content: \`关闭了面板,显示为 \${visibleColumn.length}\`, status: 'info' })
break
}
}
}
}
}
`
]
}
},
created () {
this.$nextTick(() => {
// 将表格和工具栏进行关联
this.$refs.xTable1.connect(this.$refs.xToolbar1)
// 将表格和工具栏进行关联
this.$refs.xTable2.connect(this.$refs.xToolbar2)
})
this.findList()
},
methods: {
findList () {
this.loading = true
return new Promise(resolve => {
setTimeout(() => {
this.tableData = [
{ id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },
{ id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
{ id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
{ id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 23, address: 'test abc' },
{ id: 10005, name: 'Test5', role: 'Develop', sex: 'Women', age: 30, address: 'Shanghai' },
{ id: 10006, name: 'Test6', role: 'Designer', sex: 'Women', age: 21, address: 'test abc' },
{ id: 10007, name: 'Test7', role: 'Test', sex: 'Man', age: 29, address: 'test abc' },
{ id: 10008, name: 'Test8', role: 'Develop', sex: 'Man', age: 35, address: 'test abc' }
]
this.loading = false
resolve()
}, 300)
})
},
toolbarCustomEvent (params) {
const visibleColumn = this.$refs.xTable2.getColumns()
switch (params.type) {
case 'confirm': {
this.$XModal.message({ content: `点击了确认,显示为 ${visibleColumn.length}`, status: 'info' })
break
}
case 'reset': {
this.$XModal.message({ content: `点击了重置,显示为 ${visibleColumn.length}`, status: 'info' })
break
}
case 'close': {
this.$XModal.message({ content: `关闭了面板,显示为 ${visibleColumn.length}`, status: 'info' })
break
}
}
}
}
}
</script>