dataease/frontend/src/components/business/complex-table/index.vue

111 lines
2.5 KiB
Vue
Raw Normal View History

2021-03-03 15:06:52 +08:00
<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>
2021-09-03 14:40:47 +08:00
<fu-search-bar ref="search" v-bind="searchConfig" @exec="search">
<template #complex>
<slot name="complex" />
</template>
<slot name="buttons" />
2021-07-27 10:31:16 +08:00
<fu-table-column-select v-if="!hideColumns" :columns="columns" />
</fu-search-bar>
2021-03-03 15:06:52 +08:00
</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: () => []
},
2021-07-27 10:31:16 +08:00
hideColumns: {
type: Boolean,
default: false
},
// eslint-disable-next-line vue/require-default-prop
2021-03-03 15:06:52 +08:00
localKey: String, // 如果需要记住选择的列则这里添加一个唯一的Key
// eslint-disable-next-line vue/require-default-prop
2021-03-03 15:06:52 +08:00
header: String,
// eslint-disable-next-line vue/require-default-prop
2021-03-03 15:06:52 +08:00
searchConfig: Object,
// eslint-disable-next-line vue/require-default-prop
2021-07-29 00:42:19 +08:00
paginationConfig: Object,
transCondition: {
type: Object,
default: null
}
2021-03-03 15:06:52 +08:00
},
data() {
return {
2021-09-03 14:40:47 +08:00
condition: {}
2021-07-29 00:42:19 +08:00
}
},
mounted() {
if (this.transCondition !== null) {
this.$refs.search.setConditions(this.transCondition)
2021-03-03 15:06:52 +08:00
}
},
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;
2021-03-03 15:06:52 +08:00
}
.complex-table__toolbar {
@include flex-row(space-between, center);
.fu-search-bar {
width: auto;
}
2021-03-03 15:06:52 +08:00
}
.complex-table__pagination {
margin-top: 20px;
@include flex-row(flex-end);
}
}
</style>