自定义Odoo Online的POS收据 - xiaohao0576/odoo-doc GitHub Wiki

Odoo Online版本,不支持通过代码自定义POS的收据,但是可以通过Tampermonkey脚本在前端更改

下面的脚本就是把原本的Powered by Odoo替换为 Powered by HoganTech, 已经测试通过

如果需要更多的定制,请可以把代码给Cursor AI,然后让AI帮忙修改

注意: Tampermonkey在新版本的Chrome浏览器运行,需要打开开发者模式 https://www.tampermonkey.net/faq.php#Q209

// ==UserScript==
// @name         Odoo POS 收据自定义
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  修改Odoo POS收据内容
// @match        https://demo7.odoo.com/pos*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    console.log("Tampermonkey脚本开始运行");

    function customizeReceipt() {
        console.log("尝试修改收据内容");
        const targetElement = document.querySelector('body > div.o-main-components-container > div.render-container-parent > div.render-container > div > div.pos-receipt-order-data > p');
        if (targetElement) {
            targetElement.textContent = "Powered by HoganTech";
            console.log('收据内容已修改');
        } else {
            console.log('未找到目标元素');
        }
    }

    // 监听打印事件
    window.addEventListener('beforeprint', function() {
        console.log("检测到打印事件,执行自定义函数");
        customizeReceipt();
    });

    // 使用MutationObserver持续监听DOM变化
    const observer = new MutationObserver((mutations) => {
        mutations.forEach((mutation) => {
            if (mutation.type === 'childList') {
                const renderContainer = document.querySelector('div.render-container > div > div.pos-receipt-order-data > p');
                if (renderContainer) {
                    console.log("检测到.render-container变化,执行自定义函数");
                    customizeReceipt();
                }
            }
        });
    });

    // 开始观察document.body的变化
    observer.observe(document.body, { childList: true, subtree: true });
    console.log("MutationObserver已启动");

    // 定期检查和修改
    setInterval(customizeReceipt, 1000); // 每秒检查一次

    // 页面加载完成后也执行一次
    window.addEventListener('load', customizeReceipt);
})();