• odoo开发笔记向导弹窗的selection选项,根据条件动态显示 hello


    场景描述:

    odoo日常开发中,我们可能会遇到这种业务需求情况,在当前form界面,弹出窗口,根据form表单的某个值,传递上下文,

    弹出窗口中的选择字段框,根据上下文,显示不同的选项。

    说明: 基于odoo10版本

    需求样例说明:

    点击“测试选择”按钮:

    因为上一个界面,录的值是“北京”,因此弹出的窗口中下啦选项只有“001-北京”。 

    如果录入的是“所有”,则下拉框显示全部选项。

    主要逻辑代码,通过自定义odoo widget挂件来实现。

    <?xml version="1.0" encoding="utf-8"?>
    <odoo>
        <data>
            <record id="selection_test_wizard_action" model="ir.actions.act_window">
                <field name="name">测试选择</field>
                <field name="type">ir.actions.act_window</field>
                <field name="res_model">test_app.test_select_wizard</field>
                <field name="view_type">form</field>
                <field name="view_mode">form</field>
                <field name="target">new</field>
            </record>
    
            <record id="selection_test_wizard_form" model="ir.ui.view">
                <field name="name">测试选择FORM</field>
                <field name="model">test_app.test_select_wizard</field>
                <field name="arch" type="xml">
                    <form create="false" edit="true">
                        <group>
                            <group>
                                <field name="name" invisible="1"/>
                                <field string="城市" name="two_step"  widget="my_dynamic_selection"/>
                                <field string="温度" name="tmp"/>
                            </group>
                        </group>
                        <footer>
                            <button string="确认" name="select_confirm" class="oe_highlight" type="object"/>
                            <button string="取消" class="btn-default" special="cancel"/>
                        </footer>
                    </form>
                </field>
            </record>
        </data>
    </odoo>
    odoo.define('my_selection', function (require) {
        "use strict";
    
        let core = require('web.core');
        let FieldSelection = core.form_widget_registry.get('selection');
        console.log('080808080808080808080880');
    
        var MySelection = FieldSelection.extend({
            events: {
                'focus': function() {
                console.log('909090909090909090909');
    
            var field_value = this.field_manager.fields['name'].get_value();
            console.log(field_value);
    
            if (field_value == '北京')
                {
                this.$el.find('option')[2].style.display="none";
                this.$el.find('option')[3].style.display="none";
                }
            else if (field_value == '上海')
                {
                    this.$el.find('option')[1].style.display="none";
                    this.$el.find('option')[3].style.display="none";
                }
            else if (field_value == '广州')
                {
                    this.$el.find('option')[1].style.display="none";
                    this.$el.find('option')[2].style.display="none";
                }
            else if (field_value == '所有')
                {
    
                }
            }
            },
    });
        core.form_widget_registry.add('my_dynamic_selection', MySelection);
    });

    模块代码下载地址:test_app.zip

    参考:

    https://www.php.cn/js-tutorial-487462.html

    https://python.tutorialink.com/odoo-hide-some-options-in-field-selection/

  • 相关阅读:
    【转】MyEclipse快捷键大全
    【转】MOCK测试
    【转】万亿移动支付产业的难点和痛点
    【转】【CTO俱乐部走进支付宝】探索支付宝背后的那些技术 部分
    CTO俱乐部
    tomcat修改默认端口
    VS2013试用期结束后如何激活
    项目中遇到的 linq datatable select
    LINQ系列:LINQ to DataSet的DataTable操作
    C#中毫米与像素的换算方法
  • 原文地址:https://www.cnblogs.com/hellojesson/p/16386588.html
Copyright © 2020-2023  润新知