dataease/frontend/src/components/business/complex-table/index.vue
2021-09-03 14:40:47 +08:00

111 lines
2.5 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 class="complex-table">
<div v-if="$slots.header || header" class="complex-table__header">
<slot name="header">{{ header }}</slot>
</div>
<div v-if="$slots.toolbar || searchConfig" class="complex-table__toolbar">
<div>
<slot name="toolbar" />
</div>
<fu-search-bar ref="search" v-bind="searchConfig" @exec="search">
<template #complex>
<slot name="complex" />
</template>
<slot name="buttons" />
<fu-table-column-select v-if="!hideColumns" :columns="columns" />
</fu-search-bar>
</div>
<div class="complex-table__body">
<fu-table v-bind="$attrs" :columns="columns" :local-key="localKey" v-on="$listeners">
<slot />
</fu-table>
</div>
<div v-if="$slots.pagination || paginationConfig" class="complex-table__pagination">
<slot name="pagination">
<fu-table-pagination
:current-page.sync="paginationConfig.currentPage"
:page-size.sync="paginationConfig.pageSize"
v-bind="paginationConfig"
@change="search"
/>
</slot>
</div>
</div>
</template>
<script>
export default {
name: 'ComplexTable',
props: {
columns: {
type: Array,
default: () => []
},
hideColumns: {
type: Boolean,
default: false
},
// eslint-disable-next-line vue/require-default-prop
localKey: String, // 如果需要记住选择的列则这里添加一个唯一的Key
// eslint-disable-next-line vue/require-default-prop
header: String,
// eslint-disable-next-line vue/require-default-prop
searchConfig: Object,
// eslint-disable-next-line vue/require-default-prop
paginationConfig: Object,
transCondition: {
type: Object,
default: null
}
},
data() {
return {
condition: {}
}
},
mounted() {
if (this.transCondition !== null) {
this.$refs.search.setConditions(this.transCondition)
}
},
methods: {
search(condition, e) {
if (condition) {
this.condition = condition
}
this.$emit('search', this.condition, e)
}
}
}
</script>
<style lang="scss">
@import "~@/styles/mixin.scss";
.complex-table {
.complex-table__header {
@include flex-row(flex-start, center);
line-height: 60px;
font-size: 18px;
}
.complex-table__toolbar {
@include flex-row(space-between, center);
.fu-search-bar {
width: auto;
}
}
.complex-table__pagination {
margin-top: 20px;
@include flex-row(flex-end);
}
}
</style>