odoo在form视图上增加按钮是比较方便的,但是tree视图就麻烦一些,需要借助js来实现
我对js不太熟悉,此处为同事帮忙做的,可能有解释不到位的情况,请谅解
这是我同事的地址,大家可以去看一下,写的很好
koron7的博客_CSDN博客-odoo,python,泛微E9领域博主
1. 首先在模块文件的static/src/js下增加要添加的js文件:
js代码如下
odoo.define('receipt_follow_up.btn_confirm_submission', function (require) {
"use strict";
var ListController = require('web.ListController');
ListController.include({
renderButtons: function () {
this._super.apply(this, arguments);
if (this.$buttons) {
var btn = this.$buttons.find('.receipt_follow_up_btn_confirm_submission');
btn.on('click', this.proxy('receipt_follow_up_btn_confirm_submission'));
}
},
receipt_follow_up_btn_confirm_submission: function () {
var self = this;
var records = this.getSelectedIds();
self._rpc({
model: 'receipt.follow.up',
method: 'btn_confirm_submission',
args: [records],
}).then(function () {
self.update({}, { reload: true });
});
},
});
});
首先定义 var btn = this.$buttons.find('.receipt_follow_up_btn_confirm_submission');
这里find里的内容是自己定义的,用作区分
然后绑定click事件 btn.on('click', this.proxy('receipt_follow_up_btn_confirm_submission'));
随后在方法中定义tree中选择的记录var records = this.getSelectedIds();
然后调用rpc,其中model就是后端你定义的模型了,method就是要调用的方法,args传入选择的记录集,此时js内容完成
2.在static/src/xml下增加对应的xml文件来降按钮放到指定位置
xml内容如下
<?xml version="1.0" encoding="UTF-8"?>
<templates id="receipt_follow_up_update_button" xml:space="preserve">
<t t-extend="ListView.buttons">
<t t-jquery="button.o_list_button_save" t-operation="before">
<button t-if="widget.modelName == 'receipt.follow.up'" class="btn btn-primary receipt_follow_up_btn_confirm_submission" type="button">确认提交</button>
</t>
</t>
</templates>
打开要加按钮的tree查看对应位置的官方原生按钮的class,例如我的是放到了保存按钮的前边,而保存按钮的类为 o_list_button_save,所以
<t t-jquery="button.o_list_button_save" t-operation="before">这里的t-jquery后边指定到o_list_button_save类,然后t-operation="before"是降我定义的按钮放到它的前边,当然也可以写成after
3.在views目录下增加一个xml文件用来加载js文件:
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<template id="receipt_follow_up_button" inherit_id="web.assets_backend" name="receipt_follow_up_button">
<xpath expr="script[last()]" position="after">
<script type="text/javascript" src="/sales_contract/static/src/js/receipt_follow_up_buttons.js"/>
<script type="text/javascript" src="/sales_contract/static/src/js/update_widget.js"/>
</xpath>
</template>
</odoo>
odoo15好像是改为在manifest文件中加载,我这是14,需要这样加载
xml文件记得在manifest中加载:
views中的xml文件需要写在data中,static/src/xml下的xml文件需要在qweb中,odoo15版本的写法会有区别,可自行查看
到此结束