在模块的列表视图中创建自定义按钮,点击触发弹出瞬态模型对应form的事件
1.创建Js文件,注册按钮事件,放置到 'static/src/js/' 路径下
odoo.define('起个名字', function (require) {
"use strict";
var ListController = require('web.ListController');
var ListView = require('web.ListView');
var viewRegistry = require('web.view_registry');
function renderGenerateButton() {
if (this.$buttons) {
var self = this;
// var lead_type = self.initialState.getContext()['default_type'];
this.$buttons.on('click', '.o_button_模块名', function () {
self.do_action({
name: '名字',
type: 'ir.actions.act_window',
res_model: '点击按钮后弹出Form对应模型名',
target: 'new',
views: [[false, 'form']],
context: {'is_modal': true,},
});
});
}
}
var ModelListController = ListController.extend({
willStart: function () {
var self = this;
var ready = this.getSession().user_has_group('base.group_user')
.then(function (is_sale_manager) {
if (is_sale_manager) {
self.buttons_template = '模块列表视图.buttons';
}
});
return Promise.all([this._super.apply(this, arguments), ready]);
},
renderButtons: function () {
this._super.apply(this, arguments);
renderGenerateButton.apply(this, arguments);
}
});
var ModelListView = ListView.extend({
config: _.extend({}, ListView.prototype.config, {
Controller: ModelListController,
}),
});
//将tree视图的按钮注册到视图
viewRegistry.add('XXX_tree', ModelListView );
});
2.在 'views/template.xml' 内引入上一步创建的Js文件;或者在 'views/' 目录下新建一个xml文件引入也行,但是要注意 'template' 标签的id一定要与其他xml文件内 'template' 的 id 不一样,不然会被覆盖,导致Js导入失效
<odoo>
<data>
<template id="assets_backend" name="ecn_bom assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/模块/static/src/js/XXX.js"/>
</xpath>
</template>
</data>
</odoo>
3.创建xml文件,定义按钮样式,按钮文字以及限制在指定模块显示按钮,放置到 'static/src/xml/' 路径下
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-name="模块简称.generate_leads_button">
//在指定模块内显示按钮
<t t-if="widget.modelName=='模块名字'">
<button type="button" class="btn btn-secondary o_button_plan">
按钮文字
</button>
</t>
</t>
<t t-extend="ListView.buttons" t-name="模块列表视图.buttons">
//在对应视图的导出按钮后面显示
<t t-jquery="button.o_list_export_xlsx" t-operation="after">
<t t-call="模块简称.generate_leads_button"/>
</t>
</t>
</templates>
4.在你想要显示按钮的视图中的tree引用这个js事件
<record model="ir.ui.view" id="view_tree">
<field name="title">模块.tree</field>
<field name="model">模型</field>
<field name="arch" type="xml">
<!--这里js_class里填入的是上面Js文件中最底下注册到视图中tree对应的名字-->
<tree js_class="XXX_tree">
<field name='XXX'/>
</tree>
</field>
</record>
5.在manifest.py中引入文件
'data': [
'views/templates.xml',
],
'qweb': [
'static/src/xml/第三步的xml文件.xml',
]
6.效果图