Odoo17 form上的list编辑状态下回车换行优化

飞哥的Odoo碎片 / 2024-03-14 / 原文

背景描述

通常在Odoo的form视图中,我们会使用list来编辑一些数据,但是在编辑完一个单元格之后,按下回车键,它默认是聚焦到下一行的首列中;

在批量录入一列信息比如价格时,我们可能更希望像Excel一样,按下回车键后,光标会聚集到下一行的同一行列中。

img

原因分析

分析源码addons\web\static\src\views\list\list_renderer.js找到换行聚集到行首的控制在onPatched方法中
img

意味着odoo在设计list的时候就考虑到了这个问题,专门给了继承点,那么我们只需要patch键盘事件,在按下回车的时候给lastEditedCell赋值即可。

代码实现

新增static/src/views/list/list_renderer.js文件,加入以下代码

/** @odoo-module **/

import { ListRenderer } from "@web/views/list/list_renderer";
import { patch } from "@web/core/utils/patch";

// 在编辑状态下的List按下回车时跳转到下一行相应列的单元格中,而不是第一列
patch(ListRenderer.prototype, {
    onCellKeydownEditMode(hotkey, cell, group, record) {
        let res = super.onCellKeydownEditMode(hotkey, cell, group, record);
        if(hotkey == 'enter'){
            let column = this.state.columns.find(x => x.name == cell.getAttribute('name'))
            // onPatched中会判断并引用lastEditedCell
            this.lastEditedCell = { column: column, record: record };
        }
        return res
    }
})