赞
踩
在对vxetable 进行二次封装的时候,多级表头也是需要考虑进去的,所以需要封装一个递归列组件进行多级表头的一个渲染。
- // my-table.vue
- <vxe-table
- ref="xTable"
- :key="currentKey"
- :data="pageData?.list || []"
- show-header-overflow="tooltip"
- show-overflow="tooltip"
- border="inner"
- :row-style="rowStyle"
- @current-change="onCurrentChange"
- >
- <!-- 普通列 -->
- <template v-for="(tOptions) of tableNormalOptions" :key="tOptions.prop">
- <!-- 单表头 -->
- <vxe-column
- v-if="!tOptions.child || tOptions.child?.length===0"
- :title="tOptions.showName"
- :field="tOptions.uniqueKey"
- :width="tOptions.width ? tOptions.width : ''"
- :min-width="tOptions.minWidth ? tOptions.minWidth : '100'"
- :header-align="tOptions.headerAlign ? tOptions.headerAlign : 'center'"
- :align="tOptions.align ? tOptions.align : 'center'"
- :fixed="tOptions.fixed ? tOptions.fixed : ''"
- :sortable="tOptions.sortable ? true : false"
- :sort-by="tOptions.sortable ? tOptions.sortBy : ''"
- :resizable="tOptions.resizable !== null ? tOptions.resizable : true"
- :visible="tOptions.visible !== null ? tOptions.visible : false"
- :filters="tOptions.filters"
- >
- <!-- 自定义列内容格式 -->
- <template v-if="tOptions.slot" #default="scope">
- <t-button
- class="hyperlink-button"
- :text="`${isNoVal(scope.row[tOptions.uniqueKey])}`"
- type="text"
- @click="openNewWindow(tOptions.uniqueKey)"
- ></t-button>
- </template>
- <!-- 默认展示格式(此处做了判空处理, 如果为空, 则展示小短横线) -->
- <template v-else #default="scope">
- {{ `${isNoVal(scope.row[tOptions.uniqueKey])}` }}
- </template>
- </vxe-column>
-
- <!-- 多表头 -->
- <cross-table-vxe-colgroup
- v-else
- :data="tOptions"
- :all-sheet-resources="allSheetResources"
- ></cross-table-vxe-colgroup>
- </template>
- </vxe-table>
- // cross-table-vxe-colgroup.vue
- <template>
- <vxe-colgroup
- :title="data.name"
- :header-align="data?.headAlign||'center'"
- >
- <template
- v-for="item in data.child"
- :key="item.prop"
- >
- <vxe-column
- v-if="!item.child || item.child?.length ===0"
- :title="item.name"
- :field="item.uniqueKey"
- :width="item.width ? item.width : ''"
- :min-width="item.minWidth ? item.minWidth : '100'"
- :header-align="item.headerAlign ? item.headerAlign : 'center'"
- :align="item.align ? item.align : 'center'"
- :fixed="item.fixed ? item.fixed : ''"
- :sortable="item.sortable ? true : false"
- :sort-by="item.sortable ? item.sortBy : ''"
- :resizable="item.resizable ? item.resizable : false"
- :visible="item.visible !== null ? item.visible : false"
- :filters="item.filters"
- >
- <!-- 默认展示格式(此处做了判空处理, 如果为空, 则展示小短横线) -->
- <template #default="scope">
- {{ scope.row[item.uniqueKey]}
- </template>
- </vxe-column>
- <cross-table-vxe-colgroup v-else :data="item"></cross-table-vxe-colgroup>
- </template>
- </vxe-colgroup>
- </template>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。