Odoo tree列表查询或显示结果只有一条记录时自动点击跳转到form表单

5 篇文章 0 订阅

Odoo tree列表查询或显示结果只有一条记录时自动点击跳转到form表单

需求: 查询结果是一条记录或者模块是一条记录时默认显示form表单详情页。

经过查找在Odoo应用市场找到Show Form View If Search Result Is One模块。
https://apps.odoo.com/apps/modules/15.0/show_form_view_after_search/

微调适配

下载后在\static\src\js目录下找到AbstractController.js文件,内容如下:

odoo.define('show_form_view_after_search.AbstractController', function (require) {
    "use strict";
    var AbstractController = require('web.AbstractController');
	
    var includeDict = {
        reload: async function (params) {
            var res = await this._super.apply(this, arguments);
            // 判断只有是看板视图或者列表视图进行后续操作
            if (this.viewType === "kanban" || this.viewType === "list"){
                //if (this.renderer.state !== undefined && this.renderer.state.count === 1 && this.modelName === "product.template") {
                if (this.renderer.state !== undefined && this.renderer.state.count === 1) {
                    var $o_record = this.renderer.$el.find('.o_data_row,.o_kanban_record').not( ".o_kanban_ghost" );
                    // 判断记录只有一条时,触发点击事件进入form表单页
                    if ($o_record.length === 1) {
                        $o_record.trigger("click");
                    }
                }
            }
            return res;
        },
    };
    AbstractController.include(includeDict);

});

AbstractController.js文件复制到项模块的\static\src\js下,然后在view文件夹下创建templates.xml填入下面内容引用该js文件:

<odoo>
    <data>
        <template id="assets_backend" inherit_id="web.assets_backend" name="odoo_test_assets_backend">
            <xpath expr="." position="inside">
                <script type="text/javascript" charset="utf-8" src="/bi_sip/static/src/js/one_record_show_form.js"/>
            </xpath>
        </template>
    </data>
</odoo>

注:需要在__manifest__.py内配置templates.xml

现在重启升级就可以进行测试了,当模块下数据只有一条或者查询结果只有一条时,会自动点击进入详情form表单页。

增加模块判断

往往这种需求只针对特殊模块或者某些模块,这时候只需要添加模块判断即可,修改后代码如下:

odoo.define('show_form_view_after_search.AbstractController', function (require) {
    "use strict";

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

     var includeDict = {
        reload: async function (params) {
            var res = await this._super.apply(this, arguments);
            // 判断模块名称是指定模块或者在某些模块内,再进行后续操作
            // if (['odoo_test.my_model_1', 'odoo_test.my_model_2', 'odoo_test.my_model_3'].includes(this.modelName)) {
            if (this.modelName === 'odoo_test.my_model') {
	            // 判断只有是看板视图或者列表视图进行后续操作
	            if (this.viewType === "kanban" || this.viewType === "list"){
	                //if (this.renderer.state !== undefined && this.renderer.state.count === 1 && this.modelName === "product.template") {
	                if (this.renderer.state !== undefined && this.renderer.state.count === 1) {
	                    var $o_record = this.renderer.$el.find('.o_data_row,.o_kanban_record').not( ".o_kanban_ghost" );
	                    // 判断记录只有一条时,触发点击事件进入form表单页
	                    if ($o_record.length === 1) {
	                        $o_record.trigger("click");
	                    }
	                }
	            }
	        }
            return res;
        },
    };
    AbstractController.include(includeDict);

});

结语

经过上述配置,就可以自由控制哪些model调用此js,同时了解如何在视图中引入自定义js文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在那路边

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值