Odoo17 form上的list编辑状态下回车换行优化
背景描述
通常在Odoo的form视图中,我们会使用list来编辑一些数据,但是在编辑完一个单元格之后,按下回车键,它默认是聚焦到下一行的首列中;
在批量录入一列信息比如价格时,我们可能更希望像Excel一样,按下回车键后,光标会聚集到下一行的同一行列中。

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

意味着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
}
})