el-table 固定列fixed和合计行show-summary 导致横向滚动条无法滚动

在使用Element UI的el-table组件时,如果同时设置了左固定列(fixed)和合计行(show-summary),可能会遇到横向滚动条无法滚动到红色区域的bug。该问题出现在表格的合计行被固定列遮挡,导致无法查看完整内容。解决方案是在CSS中增加样式,将el-table__body-wrapper的z-index设为2,使滚动条能够覆盖固定列,从而实现正常滚动。同时,可以自定义滚动条的样式以提高用户体验。

项目场景:

提示:这里简述项目相关背景:
在el-table中同时使用左固定列fixed和合计行show-summary


问题描述:

提示:这里描述项目中遇到的问题:
el-table 同时使用左固定列fixed和合计行show-summary 导致横向滚动条红色区域无法滚动
在这里插入图片描述
代码如下:

//html
<div class="table-box">
              <el-table
                id="exportData"
                ref="report-table"
                v-loading="loading"
                style="width: 100%"
                :data="tableData"
                show-summary
                :header-cell-style="{
                  background: '#FAFAFA',
                  color: '#000000',
                  'font-family': 'Source Han Sans CN',
                  'font-size': '14px'
                }"
                height="100%"
              >
                <el-table-column
                  width="150px"
                  fixed
                  prop="materialTypeName"
                  label="物料类型"
                />
                <el-table-column
                  width="150px"
                  fixed
                  prop="materialSort"
                  label="分类"
                />
                <el-table-column
                  width="170px"
                  fixed
                  prop="materialName"
                  label="物料名称"
                />
                <el-table-column
                  width="130px"
                  fixed
                  prop="currentInventory"
                  label="当前库存数量"
                />
                <el-table-column
                  width="150px"
                  fixed
                  prop="oweNumNearlyThirtyDays"
                  label="近30天欠料数量"
                />
                <el-table-column
                  width="150px"
                  fixed
                  prop="requireNumNearlyThirtyDays"
                  label="近30天需求量"
                />
                <el-table-column label="每天生产订单需求量">
                  <el-table-column
                    v-for="(item, index) in requirementList"
                    :key="index"
                    :prop="item"
                    :label="item"
                    width="110px"
                  />
                </el-table-column>
              </el-table>
              <!-- <el-table
                id="exportSumData"
                ref="report-sum-table"
                class="exportSumData"
                style="width: 100%"
                :data="summaryData"
                :header-cell-style="{
                  display: none
                }"
                height="40px"
              >
                <el-table-column
                  width="150px"
                  fixed
                  prop="materialTypeName"
                  label="物料类型"
                />
                <el-table-column
                  width="150px"
                  fixed
                  prop="materialSort"
                  label="分类"
                />
                <el-table-column
                  width="170px"
                  fixed
                  prop="materialName"
                  label="物料名称"
                />
                <el-table-column
                  width="130px"
                  fixed
                  prop="currentInventory"
                  label="当前库存数量"
                />
                <el-table-column
                  width="150px"
                  fixed
                  prop="oweNumNearlyThirtyDays"
                  label="近30天欠料数量"
                />
                <el-table-column
                  width="150px"
                  fixed
                  prop="requireNumNearlyThirtyDays"
                  label="近30天需求量"
                />
                <el-table-column label="每天生产订单需求量">
                  <el-table-column
                    v-for="(item, index) in requirementList"
                    :key="index"
                    :prop="item"
                    :label="item"
                    width="110px"
                  />
                </el-table-column>
              </el-table> -->
            </div>
//css
.table-box {
            height: 100%;
          }

解决方案:

提示:在el-table中设置el-table__body-wrapper的层级为2:

.el-table {
              .el-table__body-wrapper {
                z-index: 2;
              }
            }

设置滚动条样式

::-webkit-scrollbar {
              background: rgb(231, 230, 230);
              width: 8px;
              height: 8px;
            }
            ::-webkit-scrollbar-thumb {
              background: rgba(0, 0, 0, 0.2);
              width: 8px;
            }
            ::-webkit-scrollbar-track {
              background: rgb(231, 230, 230);
              width: 8px;
            }

效果:

在这里插入图片描述

<el-dialog :title="detailTitle" v-model="openDetail" style="width: 1400px; height: 800px" append-to-body > <el-form ref="powerRef" :model="main" :rules="rules" label-width="80px"> <el-row> <el-col :span="8"> <el-form-item label="年月" prop="years" label-width="140"> <el-date-picker clearable v-model="main.years" type="month" format="YYYY/MM" value-format="YYYY/MM" placeholder="Please select" :readonly="main.reviewStatus != '4'" /> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="绿电溢价" prop="premium" label-width="140"> <el-input v-model="main.premium" placeholder="Please input" :readonly="main.reviewStatus != '4'" /> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="厂别" prop="fact" label-width="140"> <el-input v-model="main.fact" placeholder="Please input" readonly /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="12"> <el-form-item label="启动人" prop="nickName" label-width="140"> <el-input v-model="main.nickName" placeholder="Please input" readonly /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="审核状态" prop="reviewStatus" label-width="140" > <div> <dict-tag :options="rsc_review_status" :value="main.reviewStatus" /> </div> </el-form-item> </el-col> </el-row> </el-form> <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-button type="primary" plain icon="Plus" @click="handleAddDetail" v-hasPermi="['rsc:power:add']" >新增</el-button > </el-col> <el-col :span="1.5"> <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDeleteDetail" v-hasPermi="['rsc:power:remove']" >删除</el-button > </el-col> <el-col :span="1.5"> <el-button type="warning" plain icon="Upload" @click="handleImport" v-hasPermi="['rsc:power:import']" >导入</el-button > </el-col> <el-col :span="1.5"> <el-button type="warning" plain icon="Upload" @click="handleImportAnnex" v-hasPermi="['rsc:power:import']" >附件</el-button > </el-col> <el-col :span="1.5"> <el-button type="warning" plain icon="View" @click="handleView" v-hasPermi="['rsc:power:import']" >预览附件</el-button > </el-col> <el-col :span="1.5"> <el-button type="warning" plain icon="View" @click="handleDeleteFile" v-hasPermi="['rsc:power:import']" >删除附件</el-button > </el-col> </el-row> <div style="max-height: 530px; overflow-y: auto"> <el-table v-loading="loading" :data="powerDataList" @selection-change="handleDetailSelectionChange" :summary-method="getSummeries" show-summary border > <el-table-column type="selection" width="55" align="center" /> <el-table-column label="區域" align="center" prop="locationName" width="120" > </el-table-column> <el-table-column label="动力用量(度)" align="center" prop="powerUsage" width="120" > </el-table-column> <el-table-column label="照明用量(度)" align="center" prop="lightingUsage" width="120" > </el-table-column> <el-table-column label="线路损耗(度)" align="center" prop="lineLoss" width="120" > </el-table-column> <el-table-column label="市電(度)" align="center" prop="electricity" width="100" > </el-table-column> <el-table-column label="綠電(度)" align="center" prop="greenElectricity" width="100" > </el-table-column> <el-table-column label="電網用电量合計(度)" align="center" prop="powerGridTotal" width="160" > </el-table-column> <el-table-column label="幣別" align="center" prop="currency"> <template #default="scope"> <div> <dict-tag :options="rsc_currency_type" :value="scope.row.currency" /> </div> </template> </el-table-column> <el-table-column label="单价(元/度)" align="center" prop="unitPrice" width="120" > </el-table-column> <el-table-column label="電網用电金額(元)" align="center" prop="electricityBills" width="150" > </el-table-column> <el-table-column label="光伏用電量(度)" align="center" prop="photovoltaicUsage" width="140" > </el-table-column> <el-table-column label="光伏用電單價(元/度)" align="center" prop="photovoltaicUnitPrice" width="160" > </el-table-column> <el-table-column label="光伏用電金額(元)" align="center" prop="photovoltaicBills" width="150" > </el-table-column> <el-table-column label="用電量合計" align="center" prop="electricityTotal" width="100" > </el-table-column> <el-table-column label="用電金額合計" align="center" prop="totalBills" width="120" > </el-table-column> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="140" fixed="left" > <template #default="scope"> <el-tooltip content="修改" placement="top"> <el-button link type="primary" icon="Edit" @click="handleUpdateDetail(scope.row)" v-hasPermi="['rsc:power:edit']" ></el-button> </el-tooltip> <!-- <el-tooltip content="删除" placement="top"> <el-button link type="primary" icon="Delete" @click="handleDeleteDetail(scope.row)" v-hasPermi="['rsc:power:remove']" ></el-button> </el-tooltip> --> </template> </el-table-column> </el-table> </div> <template #footer> <div class="dialog-footer"> <el-button type="primary" @click="savePower" v-if="main.reviewStatus != '1'" >保存</el-button > <el-button type="primary" @click="startProcess" v-if="main.reviewStatus == '4'" >提交</el-button > <el-button type="primary" @click="cacelPower" v-if=" main.reviewStatus != 1 && main.reviewStatus != 4 && main.reviewStatus != null " >取消申请</el-button > <el-button @click="cancelDetail">取 消</el-button> </div> </template> </el-dialog> 分析以上代码,帮我实现table表头与合计固定,不随表格滚动
07-02
在使用 `el-table`(Element UI 的表格组件)时,固定(`fixed column`)功能可能会导致横向滚动条无法固定区域正常工作。该问题通常与固定的实现机制有关,因为 `el-table` 通过将固定单独渲染并定位在表格左右两侧,以实现固定效果,从而可能导致横向滚动条无法覆盖固定区域。 解决该问题的方法包括以下几种: ### 1. 检查 `el-table` 的宽度设置 确保 `el-table` 的整体宽度足够大,以容纳所有,尤其是固定固定的总宽度。若表格总宽度未正确设置,可能会导致滚动条无法正常显示或响应。 ### 2. 手动设置固定宽度 为固定设置明确的 `width` 属性,有助于避免因宽计算不准确而导致的布局错位问题。例如: ```html <el-table :data="tableData" style="width: 100%; overflow-x: auto"> <el-table-column prop="date" label="日期" width="150" fixed></el-table-column> <el-table-column prop="name" label="姓名" width="120"></el-table-column> <el-table-column prop="address" label="地址" width="300"></el-table-column> </el-table> ``` ### 3. 使用自定义滚动容器 将 `el-table` 包裹在一个具有 `overflow-x: auto` 样式的容器中,并确保固定部分不被截断。通过自定义滚动容器,可以更好地控制滚动为。 ```html <div style="overflow-x: auto; white-space: nowrap;"> <el-table :data="tableData" style="width: max-content;"> <el-table-column prop="date" label="日期" width="150" fixed></el-table-column> <el-table-column prop="name" label="姓名" width="120"></el-table-column> <el-table-column prop="address" label="地址" width="300"></el-table-column> </el-table> </div> ``` ### 4. 调整 `el-table` 样式 在某些情况下,需要通过自定义 CSS 来修复固定滚动条之间的布局问题。例如,调整 `.el-table__fixed-right` 或 `.el-table__fixed-left` 的宽度或 `z-index`,确保固定区域与滚动区域正确重叠。 ```css .el-table__fixed-right { right: 0; z-index: 1; } .el-table__fixed-left { left: 0; z-index: 1; } ``` ### 5. 使用第三方表格组件 如果 `el-table` 的固定功能无法满足需求,可以考虑使用其他功能更强大的表格组件,如 `ag-Grid` 或 `handsontable`,它们在处理复杂表格布局方面表现更稳定。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值