You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo 15 POS中SaleOrderRow类date方法重写无效问题

Odoo 15 重写pos_sale模块SaleOrderRow类date getter方法未生效问题

我要重写Odoo 15中pos_sale模块的SaleOrderRow类的date getter方法,已编写自定义JS类并添加到模块manifest的assets配置中。但重启服务、用隐私窗口规避缓存后,浏览器控制台无任何输出,自定义JS类未被Odoo识别。

原模块相关代码

原类定义

odoo.define('pos_sale.SaleOrderRow', function (require) { ... })

待重写的date getter方法

get date() { return moment(this.order.date_order).format('YYYY-MM-DD hh:mm A'); }

我的自定义代码

自定义重写类

odoo.define('slnee_appointment_sale.CustomSaleOrderRow', function (require) { ... })

模块manifest配置

'assets': { 
    'point_of_sale.assets': [ 
        "slnee_appointment_sale/static/src/js/CustomSaleOrderRow.js" 
    ] 
}

排查与解决步骤

  1. 确认重写逻辑正确
    Odoo的POS组件重写必须遵循正确的扩展方式,不能直接定义新组件。正确的重写示例如下:

    odoo.define('slnee_appointment_sale.CustomSaleOrderRow', function (require) {
        const SaleOrderRow = require('pos_sale.SaleOrderRow');
        const Registries = require('point_of_sale.Registries');
    
        const CustomSaleOrderRow = SaleOrderRow => class extends SaleOrderRow {
            get date() {
                // 这里写你的自定义逻辑,比如修改日期格式
                return moment(this.order.date_order).format('YYYY/MM/DD HH:mm');
            }
        };
    
        Registries.Component.extend(SaleOrderRow, CustomSaleOrderRow);
        return CustomSaleOrderRow;
    });
    

    核心是通过Registries.Component.extend来扩展原组件,确保Odoo能识别到重写。

  2. 检查资产加载顺序与依赖

    • 确保你的模块在manifest的depends中声明依赖pos_sale:
      'depends': ['base', 'pos_sale'],
      
    • 调整assets配置,让你的JS文件在原模块文件之后加载:
      'assets': { 
          'point_of_sale.assets': [
              ('after', 'pos_sale/static/src/js/sale_order_row.js'),
              'slnee_appointment_sale/static/src/js/CustomSaleOrderRow.js',
          ]
      }
      
  3. 验证模块安装与资产加载

    • 确认slnee_appointment_sale模块已在Odoo后台安装并启用。
    • 打开浏览器开发者工具的Sources标签,搜索CustomSaleOrderRow.js,检查文件是否被成功加载。
  4. 强制刷新Odoo资产缓存
    执行以下命令更新模块并刷新资产:

    ./odoo-bin -u slnee_appointment_sale --database=你的数据库名
    

    或者在后台进入设置 > 技术 > 资产,找到point_of_sale.assets并点击刷新资产。

  5. 添加调试日志确认执行
    在自定义JS文件开头添加日志,确认文件是否被执行:

    odoo.define('slnee_appointment_sale.CustomSaleOrderRow', function (require) {
        console.log('CustomSaleOrderRow 已加载');
        // 剩余重写代码...
    });
    

    打开浏览器控制台,查看是否有该日志输出,判断文件是否被加载执行。

内容的提问来源于stack exchange,提问作者DZEUF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 11:17:39