Files
vxe-table/examples/views/table/api/API.vue
xuliangzhan 5fa60b5c31 update
2019-06-18 18:10:19 +08:00

145 lines
4.4 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>
<vxe-toolbar>
<template v-slot:buttons>
<vxe-input class="search-input" v-model="filterName" type="search" :placeholder="`vxe-${$route.params.name} ${$t('app.api.form.apiSearch')}`"></vxe-input>
</template>
</vxe-toolbar>
<vxe-table
resizable
highlight-current-row
highlight-hover-row
:data.sync="apiList"
:tree-config="{key: 'id', children: 'list', expandAll: !!filterName, expandRowKeys: defaultExpandRowKeys, trigger: 'cell'}">
<vxe-table-column prop="name" :label="$t('app.api.title.prop')" width="280" tree-node>
<template v-slot="{ row }">
<span v-html="row.name"></span>
</template>
</vxe-table-column>
<vxe-table-column prop="desc" :label="$t('app.api.title.desc')">
<template v-slot="{ row }">
<span v-html="row.desc"></span>
</template>
</vxe-table-column>
<vxe-table-column prop="type" :label="$t('app.api.title.type')" width="160">
<template v-slot="{ row }">
<span v-html="row.type"></span>
</template>
</vxe-table-column>
<vxe-table-column prop="enum" :label="$t('app.api.title.enum')" width="180">
<template v-slot="{ row }">
<span v-html="row.enum"></span>
</template>
</vxe-table-column>
<vxe-table-column prop="defVal" :label="$t('app.api.title.defVal')" width="180">
<template v-slot="{ row }">
<span v-html="row.defVal"></span>
</template>
</vxe-table-column>
<template v-slot:empty>
<span class="red">找不对应 API请输入正确的关键字</span>
</template>
</vxe-table>
</div>
</template>
<script>
import XEUtils from 'xe-utils'
import tableAPI from '../../../api/table'
import tableColumnAPI from '../../../api/column'
import toolbarAPI from '../../../api/toolbar'
import gridAPI from '../../../api/grid'
import excelAPI from '../../../api/excel'
import pagerAPI from '../../../api/pager'
import radioAPI from '../../../api/radio'
import checkboxAPI from '../../../api/checkbox'
import inputAPI from '../../../api/input'
import buttonAPI from '../../../api/button'
import tooltipAPI from '../../../api/tooltip'
import messageBoxAPI from '../../../api/message'
export default {
data () {
return {
filterName: this.$route.query.filterName,
defaultExpandRowKeys: []
}
},
computed: {
tableData () {
let apis = []
switch (this.$route.params.name) {
case 'table':
apis = tableAPI
break
case 'table-column':
apis = tableColumnAPI
break
case 'toolbar':
apis = toolbarAPI
break
case 'grid':
apis = gridAPI
break
case 'excel':
apis = excelAPI
break
case 'pager':
apis = pagerAPI
break
case 'radio':
apis = radioAPI
break
case 'checkbox':
apis = checkboxAPI
break
case 'input':
apis = inputAPI
break
case 'button':
apis = buttonAPI
break
case 'tooltip':
apis = tooltipAPI
break
case 'message-box':
apis = messageBoxAPI
break
}
// 生成唯一 id
let index = 1
XEUtils.eachTree(apis, item => {
item.id = index++
item.desc = item.descKey ? this.$t(item.descKey) : item.desc
}, { children: 'list' })
return apis
},
apiList () {
let filterName = XEUtils.toString(this.filterName).trim().toLowerCase()
if (filterName) {
let filterRE = new RegExp(filterName, 'gi')
let options = { children: 'list' }
let searchProps = ['name', 'desc', 'type', 'enum', 'defVal']
let rest = XEUtils.searchTree(this.tableData, item => searchProps.some(key => item[key].toLowerCase().indexOf(filterName) > -1), options)
XEUtils.eachTree(rest, item => {
searchProps.forEach(key => {
item[key] = item[key].replace(filterRE, match => `<span class="keyword-lighten">${match}</span>`)
})
}, options)
return rest
}
return this.tableData
}
},
created () {
// 默认展开一级
this.defaultExpandRowKeys = this.tableData.filter(item => item.list && item.list.length).map(item => item.id)
},
beforeRouteUpdate (to, from, next) {
next()
this.filterName = ''
}
}
</script>