Files
vxe-table/examples/views/table/base/Sort.vue
xuliangzhan 623494ef00 update
2019-07-23 17:33:43 +08:00

190 lines
6.6 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>通过给需要排序功能的列加上 <table-api-link prop="sortable"/> 属性可以支持排序还可以通过设置 <table-api-link prop="sort-by"/> 多字段进行排序</p>
<p>如果是服务端排序只需加上 <table-column-api-link prop="remote-sort"/> <table-api-link prop="sort-change"/> 事件就可以实现</p>
<vxe-table
border
highlight-hover-row
height="300"
:data.sync="tableData">
<vxe-table-column type="index" width="60"></vxe-table-column>
<vxe-table-column field="name" title="Name" sortable></vxe-table-column>
<vxe-table-column field="nickname" title="Nickname" sortable></vxe-table-column>
<vxe-table-column field="sex" title="Sex"></vxe-table-column>
<vxe-table-column field="age" title="Age"></vxe-table-column>
<vxe-table-column field="time" title="Time" sortable></vxe-table-column>
</vxe-table>
<p class="demo-code">{{ $t('app.body.button.showCode') }}</p>
<pre>
<code class="xml">{{ demoCodes[0] }}</code>
<code class="javascript">{{ demoCodes[1] }}</code>
</pre>
<p>配置 <table-column-api-link prop="sort-by"/> 多个字段组合排序</p>
<vxe-table
border
highlight-hover-row
height="300"
:data.sync="tableData">
<vxe-table-column type="index" width="60"></vxe-table-column>
<vxe-table-column field="name" title="Name" sortable></vxe-table-column>
<vxe-table-column field="nickname" title="Nickname" sortable></vxe-table-column>
<vxe-table-column field="sex" title="Sex"></vxe-table-column>
<vxe-table-column field="age" title="Age"></vxe-table-column>
<vxe-table-column field="time" title="Time" sortable :sort-by="['time', 'name']"></vxe-table-column>
</vxe-table>
<p class="demo-code">{{ $t('app.body.button.showCode') }}</p>
<pre>
<code class="xml">{{ demoCodes[2] }}</code>
<code class="javascript">{{ demoCodes[3] }}</code>
</pre>
<p>点击列头排序的实现通过 <table-api-link prop="header-cell-click"/> 事件和 <table-api-link prop="sort"/> 方法就可以实现</p>
<vxe-table
border
highlight-hover-row
ref="xTable"
height="300"
:data.sync="tableData"
@header-cell-click="headerCellClickEvent">
<vxe-table-column type="index" width="60"></vxe-table-column>
<vxe-table-column field="name" title="Name"></vxe-table-column>
<vxe-table-column field="nickname" title="Nickname" sortable></vxe-table-column>
<vxe-table-column field="sex" title="Sex" sortable></vxe-table-column>
<vxe-table-column field="age" title="Age" sortable></vxe-table-column>
<vxe-table-column field="time" title="Time" sortable></vxe-table-column>
</vxe-table>
<p class="demo-code">{{ $t('app.body.button.showCode') }}</p>
<pre>
<code class="xml">{{ demoCodes[4] }}</code>
<code class="javascript">{{ demoCodes[5] }}</code>
</pre>
</div>
</template>
<script>
import hljs from 'highlight.js'
export default {
data () {
return {
tableData: [],
demoCodes: [
`
<vxe-table
border
highlight-hover-row
height="300"
:data.sync="tableData">
<vxe-table-column type="index" width="60"></vxe-table-column>
<vxe-table-column field="name" title="Name" sortable></vxe-table-column>
<vxe-table-column field="nickname" title="Nickname" sortable></vxe-table-column>
<vxe-table-column field="sex" title="Sex"></vxe-table-column>
<vxe-table-column field="age" title="Age"></vxe-table-column>
<vxe-table-column field="time" title="Time" sortable></vxe-table-column>
</vxe-table>
`,
`
export default {
data () {
return {
tableData: []
}
},
created () {
this.tableData = window.MOCK_DATA_LIST.slice(0, 50)
}
}
`,
`
<vxe-table
border
highlight-hover-row
height="300"
:data.sync="tableData">
<vxe-table-column type="index" width="60"></vxe-table-column>
<vxe-table-column field="name" title="Name" sortable></vxe-table-column>
<vxe-table-column field="nickname" title="Nickname" sortable></vxe-table-column>
<vxe-table-column field="sex" title="Sex"></vxe-table-column>
<vxe-table-column field="age" title="Age"></vxe-table-column>
<vxe-table-column field="time" title="Time" sortable :sort-by="['time', 'name']"></vxe-table-column>
</vxe-table>
`,
`
export default {
data () {
return {
tableData: []
}
},
created () {
this.tableData = window.MOCK_DATA_LIST.slice(0, 50)
}
}
`,
`
<vxe-table
border
highlight-hover-row
ref="xTable"
height="300"
:data.sync="tableData"
@header-cell-click="headerCellClickEvent">
<vxe-table-column type="index" width="60"></vxe-table-column>
<vxe-table-column field="name" title="Name"></vxe-table-column>
<vxe-table-column field="nickname" title="Nickname" sortable></vxe-table-column>
<vxe-table-column field="sex" title="Sex" sortable></vxe-table-column>
<vxe-table-column field="age" title="Age" sortable></vxe-table-column>
<vxe-table-column field="time" title="Time" sortable></vxe-table-column>
</vxe-table>
`,
`
export default {
data () {
return {
tableData: []
}
},
created () {
this.tableData = window.MOCK_DATA_LIST.slice(0, 50)
},
methods: {
headerCellClickEvent ({ column, triggerResizable, triggerSort, triggerFilter }) {
if (!(triggerResizable || triggerSort || triggerFilter)) {
this.$refs.xTable.sort(column.property)
}
}
}
}
`
]
}
},
created () {
this.tableData = window.MOCK_DATA_LIST.slice(0, 50)
},
mounted () {
Array.from(this.$el.querySelectorAll('pre code')).forEach((block) => {
hljs.highlightBlock(block)
})
},
methods: {
headerCellClickEvent ({ column, triggerResizable, triggerSort, triggerFilter }) {
// 如果点击了列并且没触发对应的按钮、则手动排序、列宽拖动
if (!(triggerResizable || triggerSort || triggerFilter)) {
this.$refs.xTable.sort(column.property)
}
}
}
}
</script>