mt-yd-ui/src/components/base-table/index.vue

67 lines
1.4 KiB
Vue
Raw Normal View History

2022-08-05 16:03:38 +08:00
<template>
<div class="base-table">
<el-table
:data="data"
style="width: 100%"
fit
border
:header-cell-style="{ background: '#FAFAFA', color: '#606266', height: '40px' }"
:max-height="maxHeight"
>
<!-- 表格头定义 -->
<el-table-column
v-for="(head, idx) in tableHeadConfigs"
:key="idx"
:type="head.type"
:index="head.index"
:label="head.label?head.label:head.name"
:prop="head.prop"
:width="head.width"
:min-width="head.minWidth"
:fixed="head.fixed"
:show-overflow-tooltip="true"
filter-placement="top"
:align="head.align"
>
<template slot-scope="scope">
<component v-if="head.subcomponent" :is="head.subcomponent" :key="idx + 'sub'" :inject-data="{ ...scope.row, head }" @emitData="handleSubEmitData" />
<span v-else>{{ scope.row[head.prop] | commonFilter(head.filter) }}</span>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
name: 'BaseTable',
props: {
tableHeadConfigs: {
type: Array,
default: () => []
},
data: {
type: Array,
default: () => []
},
maxHeight: {
type: Number,
default: 500
}
},
filters: {
commonFilter: (source, filterType = a => a) => {
return filterType(source)
}
},
data () {
return {}
},
methods: {
handleSubEmitData(payload) {
this.$emit('operate-event', payload)
}
}
}
</script>