Odoo Qweb报表动态rowspan导致表格列越界问题求助
Odoo Qweb报表动态rowspan列错位修复方案
问题根源
当同一Name值的后续行循环时,代码未为Name列生成空的<td>占位,导致该行实际列数比表头少1,浏览器渲染时出现列错位、越界。
修复代码
修改<tbody>内的循环逻辑,为重复Name的行添加Name列的空td占位:
<table class="table-metal"> <thead> <tr> <th style="text-transform: none;width:20%">Name</th> <th style="text-transform: none;width:30%">Width</th> <th style="text-transform: none;width:20%">Mark</th> <th style="text-transform: none;width:20%">Standard</th> <th style="text-transform: none;width:10%">Number</th> </tr> </thead> <tbody> <t t-set="node_name_value" t-value="noname"/> <t t-foreach="doc.passport_metal_ids" t-as="metal_ids"> <tr> <!-- Name列:值变化时生成带rowspan的td,否则生成空td占位 --> <t t-if="metal_ids.product_name.name != node_name_value"> <t t-set="count" t-value="doc.get_count_row(metal_ids.product_name.name)"/> <td valign="top" t-att-rowspan="count"><span t-field="metal_ids.product_name.name" /></td> </t> <t t-else=""> <td style="display: none;"></td> <!-- 空td占位,保证列数与表头一致 --> </t> <!-- Width列逻辑保持不变 --> <t t-if="metal_ids.brand_id.name[0] == 'S'"> <td>Лист S=<span t-esc="metal_ids.size_id.name.split('x')[0]" /></td> </t> <t t-else=""> <td>Лист B-PN-0 S=<span t-esc="metal_ids.size_id.name.split('x')[0]" /><br></br>ГОСТ 19903-74 </td> </t> <td><span t-field="metal_ids.brand_id.name" /></td> <td><span t-field="metal_ids.gost_id.name" /></td> <td><span t-field="metal_ids.certificate" /></td> <t t-set="node_name_value" t-value="metal_ids.product_name.name"/> </tr> </t> </tbody> <tfoot> <tr> <td colspan="5"></td> </tr> </tfoot> </table> <p style="page-break-after:always;"></p>
关键说明
- 空td添加
display: none,既避免显示多余边框或空白,又保证每行的td数量与表头的5列完全匹配 - 需确保
get_count_row方法返回的rowspan数值准确(即同一Name对应的总行数),否则会导致后续行的占位td数量错误
内容的提问来源于stack exchange,提问作者Senarist01
相关产品推荐
相关产品推荐

