Кнопка скрытия формы через CSS - PullRequest
2 голосов
/ 20 марта 2020

В представлении формы я хочу скрыть кнопку, если Клиент partner_id имеет значение Ложь, я попытался t-if, не повезло, я связал attrs, но также не сработало.

Проверка статуса Клиента partner_id:

enter image description here

Я хочу скрыть кнопку Отправить сообщение:

enter image description here

Есть решение?

Я пытался запустить CSS, чтобы скрыть кнопку

Мой код:

<field name="name" attrs="{'invisible': [('partner_id', '=', False)]}">
      <style>
        .o_chatter_button_new_message {
                display: none !important;
        }
      </style>
      </field>

Ответы [ 2 ]

1 голос
/ 20 марта 2020

Вы можете сделать это в FormRenderer . Чтобы скрыть или показать кнопку при изменении значения partner_id, вы можете создать новый виджет many2one, расширив FieldMany2One и изменив состояние видимости кнопки. в зависимости от значения partner_id.

В следующем примере Send Message button будет скрыт, если partner_id определено, когда загружается представление формы или когда установлено значение partner_id ложно. Кнопка должна быть видна, когда установлено значение партнера (событие onchange).

odoo.define('stack_overflow.chatter_button_new_message', function (require) {
    "use strict";

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

    FormRenderer.include({

        autofocus: function () {
            var self = this;
            if(self.state.model === 'project.task' && self.state.data.partner_id===false){
                var node = window.$('button.o_chatter_button_new_message');
                node.hide();
            }
            return this._super();
        },
    });

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

    var FieldMany2One = relational_fields.FieldMany2One.extend({

        _onFieldChanged: function (event) {
            var node = window.$('button.o_chatter_button_new_message');
            if (event.data.changes[event.target.name]===false) {
                node.hide();
            } else {
                node.show();
            }

            this._super(event);
        },
    });

    fieldRegistry.add('hideSendMsg', FieldMany2One);
});

Вы должны добавить файл js в комплект активов .

Чтобы использовать виджет, определенный выше, вам нужно установить атрибут виджета поля partner_id на hideSendMsg в определении XML.

<record id="view_task_form2_inherit" model="ir.ui.view">
    <field name="name">view.task.form2.inherit</field>
    <field name="model">project.task</field>
    <field name="inherit_id" ref="project.view_task_form2"/>
    <field name="arch" type="xml">
        <field name="partner_id" position="attributes">
            <attribute name="widget">hideSendMsg</attribute>
        </field>
    </field>
</record>

========================================= ====================

Мое решение: @ Foti c

<script type="text/javascript">
        document.onload = check_status();
        document.onchange = check_status();
        function check_status() {
            if (document.getElementById("o_field_input_103")){
                var hasCSSClass = document.getElementById("o_field_input_103")
            }
            if (hasCSSClass){
              if ( hasCSSClass.classList.contains("o_field_empty") || hasCSSClass.classList.contains("o_input")) {
                  $(".o_chatter_button_new_message").show();
                  console.log("1111111111");
              } else{
                  $(".o_chatter_button_new_message").hide();
                  console.log("2222222222");
              }
            }
        }

    </script>
0 голосов
/ 20 марта 2020

Это невозможно при подходе, который вы сделали. Кнопка Отправить сообщение отображается динамически и определяется в шаблоне Qweb .

Код Button можно найти здесь, Нажмите здесь

Решение : Чтобы скрыть кнопку, вы можете сделать это из js, где кнопка отображает и передает значение [с проверкой, значение partner_id равно False] и добавлено состояние самой кнопки.

Спасибо

...