在Odoo开发中,常常需要在用户完成某个操作(如审批)后,跳转到特定页面并显示操作成功的提示消息。

具体实现:

1. Python方法示例:

在你的审批方法中,返回一个包含以下信息的字典:

from odoo import api, models

class YourModel(models.Model):
    _name = 'your.model'

    @api.model
    def approve_document(self):
        # 审批逻辑...
        return {
            'type': 'ir.actions.client',
            'tag': 'do_action',
            'params': {
                'action': {
                    'type': 'ir.actions.act_window',
                    'view_mode': 'form',
                    'res_model': 'your.model',
                    'res_id': record_id,
                    'target': 'current',
                    'context': {'show_approval_message': True}
                }
            }
        }
2. 创建JavaScript文件:

创建一个JS文件,扩展FormController来检查上下文标志并显示消息。

// 在 your_module/static/src/js 目录下创建 approval_message.js 文件

odoo.define('your_module.approval_message', function (require) {
    "use strict";

    var FormController = require('web.FormController');

    FormController.include({
        init: function () {
            this._super.apply(this, arguments);
            this._checkApprovalMessage()
            //this.on('view_loaded', this, this._checkApprovalMessage);
        },

        _checkApprovalMessage: function () {
            if (this.initialState.context.show_approval_message) {
                this.displayNotification({
                    type: 'success',
                    title: "审批完成",
                    message: "审批已成功完成。",
                    sticky: false,
                });
            }
        }
    });
});
3. 在manifest文件和assets.xml中添加JS文件:

__manifest__.py文件中添加:

{
    # 其他配置...
    'data': [
        # 其他数据文件...
        'views/assets.xml',
    ],
}

assets.xml文件中添加:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <template id="assets_backend" inherit_id="web.assets_backend">
        <xpath expr="." position="inside">
            <script type="text/javascript" src="/your_module/static/src/js/approval_message.js"/>
        </xpath>
    </template>
</odoo>

通过以上步骤,我们实现了审批后跳转并显示提示消息的功能。这种方法既保持了后端逻辑的清晰,又通过前端展示增强了用户体验。