forked from opentiny/tiny-vue
170 lines
4.2 KiB
Vue
170 lines
4.2 KiB
Vue
<template>
|
||
<div class="footer-style">
|
||
<h4 class="title">自定义表尾行样式:</h4>
|
||
<tiny-grid
|
||
:data="tableData"
|
||
show-footer
|
||
:footer-method="footerMethod"
|
||
border
|
||
:footer-row-class-name="footerRowClassName"
|
||
>
|
||
<tiny-grid-column type="index" width="60"></tiny-grid-column>
|
||
<tiny-grid-column type="selection" width="60"></tiny-grid-column>
|
||
<tiny-grid-column field="name" title="公司名称"></tiny-grid-column>
|
||
<tiny-grid-column field="employees" title="员工数"></tiny-grid-column>
|
||
<tiny-grid-column field="createdDate" title="创建日期"></tiny-grid-column>
|
||
<tiny-grid-column field="city" title="城市"></tiny-grid-column>
|
||
</tiny-grid>
|
||
<h4 class="title">自定义表尾单元格样式:</h4>
|
||
<tiny-grid
|
||
:data="tableData"
|
||
show-footer
|
||
:footer-method="footerMethod"
|
||
border
|
||
:footer-cell-class-name="footerCellClassName"
|
||
>
|
||
<tiny-grid-column type="index" width="60"></tiny-grid-column>
|
||
<tiny-grid-column type="selection" width="60"></tiny-grid-column>
|
||
<tiny-grid-column field="name" title="公司名称"></tiny-grid-column>
|
||
<tiny-grid-column field="employees" title="员工数"></tiny-grid-column>
|
||
<tiny-grid-column field="createdDate" title="创建日期" :footer-class-name="footerClassName"></tiny-grid-column>
|
||
<tiny-grid-column field="city" title="城市"></tiny-grid-column>
|
||
</tiny-grid>
|
||
</div>
|
||
</template>
|
||
|
||
<script setup lang="jsx">
|
||
import { ref } from 'vue'
|
||
import { Grid as TinyGrid, GridColumn as TinyGridColumn } from '@opentiny/vue'
|
||
|
||
const tableData = ref([
|
||
{
|
||
id: '1',
|
||
name: 'GFD科技YX公司',
|
||
city: '福州',
|
||
employees: 800,
|
||
createdDate: '2014-04-30 00:56:00'
|
||
},
|
||
{
|
||
id: '2',
|
||
name: 'WWW科技YX公司',
|
||
city: '深圳',
|
||
employees: 300,
|
||
createdDate: '2016-07-08 12:36:22'
|
||
},
|
||
{
|
||
id: '3',
|
||
name: 'RFV有限责任公司',
|
||
city: '中山',
|
||
employees: 1300,
|
||
createdDate: '2014-02-14 14:14:14'
|
||
},
|
||
{
|
||
id: '4',
|
||
name: 'TGB科技YX公司',
|
||
city: '龙岩',
|
||
employees: 360,
|
||
createdDate: '2013-01-13 13:13:13'
|
||
},
|
||
{
|
||
id: '5',
|
||
name: 'YHN科技YX公司',
|
||
city: '韶关',
|
||
employees: 810,
|
||
createdDate: '2012-12-12 12:12:12'
|
||
},
|
||
{
|
||
id: '6',
|
||
name: 'WSX科技YX公司',
|
||
city: '黄冈',
|
||
employees: 800,
|
||
createdDate: '2011-11-11 11:11:11'
|
||
},
|
||
{
|
||
id: '7',
|
||
name: 'KBG物业YX公司',
|
||
city: '赤壁',
|
||
employees: 400,
|
||
createdDate: '2016-04-30 23:56:00'
|
||
},
|
||
{
|
||
id: '8',
|
||
name: '深圳市福德宝网络技术YX公司',
|
||
city: '厦门',
|
||
employees: 540,
|
||
createdDate: '2016-06-03 13:53:25'
|
||
}
|
||
])
|
||
|
||
const footerMethod = ({ columns, data }) => {
|
||
return [
|
||
columns.map((column, columnIndex) => {
|
||
if (columnIndex === 0) {
|
||
return '平均'
|
||
}
|
||
|
||
if (column.property === 'employees') {
|
||
return Math.floor(data.map((item) => item[column.property]).reduce((acc, item) => acc + item) / data.length)
|
||
}
|
||
|
||
return null
|
||
}),
|
||
columns.map((column, columnIndex) => {
|
||
if (columnIndex === 0) {
|
||
return '和值'
|
||
}
|
||
|
||
if (column.property === 'employees') {
|
||
return data.map((item) => item[column.property]).reduce((acc, item) => acc + item)
|
||
}
|
||
|
||
return null
|
||
})
|
||
]
|
||
}
|
||
const footerCellClassName = ({ column, $rowIndex }) => {
|
||
if ($rowIndex === 0 && column.property === 'employees') {
|
||
return 'footer__cell--blue'
|
||
}
|
||
}
|
||
const footerRowClassName = ({ $rowIndex }) => {
|
||
if ($rowIndex === 0) {
|
||
return 'footer__row--red'
|
||
}
|
||
|
||
if ($rowIndex === 1) {
|
||
return 'footer__row--green'
|
||
}
|
||
}
|
||
|
||
const footerClassName = () => {
|
||
return 'footer__cell--red'
|
||
}
|
||
</script>
|
||
|
||
<style scoped>
|
||
.title {
|
||
font-size: 16px;
|
||
padding: 15px;
|
||
font-weight: bolder;
|
||
color: #444;
|
||
}
|
||
.footer-style :deep(.tiny-grid-footer__column.footer__cell--blue) {
|
||
background-color: #2db7f5;
|
||
color: #fff;
|
||
}
|
||
|
||
.footer-style :deep(.tiny-grid-footer__row.footer__row--red) {
|
||
background-color: palevioletred;
|
||
color: #fff;
|
||
}
|
||
.footer-style :deep(.tiny-grid-footer__row.footer__row--green) {
|
||
background-color: green;
|
||
color: #fff;
|
||
}
|
||
.footer-style :deep(.footer__cell--red) {
|
||
background-color: palevioletred;
|
||
color: #fff;
|
||
}
|
||
</style>
|