在layui12的主题中可以更方便的自定义动作下拉菜单,并且可以自定义下拉菜单使用的js函数,比如:


这个导出和通用导出不一样,点击之后是自定义的js动作,这里我调用了函数之后弹出了选择字段的弹出框。
用法:
在tree视图中写入custom_actions属性,属性必须是一个字典,key是在js中调用的函数名,value是在动作中显示的名称,可以传多个键值对;然后在前端需要define一个自定义的组件用以注册相应的调用函数。详情看下列代码:
xml:
xxxxxxxxxx
11
1
<record id="material_manage_tree" model="ir.ui.view">
2
<field name="name">物资列表</field>
3
<field name="model">material.manage</field>
4
<field name="arch" type="xml">
5
<!--custom_actions属性传值,可以传多个-->
6
<tree custom_actions="{'export_material_manage': '导出'}">
7
<field name="number"/>
8
<widget name="material_manage_tree_buttons" string="操作"/>
9
</tree>
10
</field>
11
</record>
已复制
js:
在js函数中,this指向的是当前tree视图的ListController,故可以调用ListController下面的所有方法,配合tree视图通用导出excel
中提到的通用导出xml方法可以自定义导出想要的xml,可以console.log(this)出来看,获取选择记录的函数为this.selectedRecords,其他如导出字段等查看下面js
中提到的通用导出xml方法可以自定义导出想要的xml,可以console.log(this)出来看,获取选择记录的函数为this.selectedRecords,其他如导出字段等查看下面js
xxxxxxxxxx
72
1
/**
2
* Created by artorias on 2019/7/2.
3
*/
4
odoo.define('material_management_callback', function (require) {
5
'use strict';
6
7
// 必须引入这个require,然后使用add进行函数的注册
8
var CallbackRegistry = require('callback_registry');
9
var core = require('web.core');
10
11
var export_material_manage = function () {
12
let self = this;
13
14
let fields = {};
15
_.forEach(self.renderer.columns, function (item) {
16
if (item.tag === 'field') {
17
fields[item.attrs.name] = item.attrs.string ? item.attrs.string : self.renderer.state.fields[item.attrs.name].string
18
}
19
});
20
let content = core.qweb.render('tem_export_material_manage', { widget: self })
21
22
layui.use('form', function () {
23
let form = layui.form;
24
let index = layer.open({
25
type: 1,
26
title: false, //不显示标题栏
27
closeBtn: true,
28
area: '70%;',
29
offset: '30%',
30
shade: 0.3,
31
id: 'LAY_layuipro', //设定一个id,防止重复弹出
32
btn: false,
33
btnAlign: 'c',
34
moveType: 0, //拖拽模式,0或者1
35
content: content,
36
success: function (layero) {
37
form.render()
38
let export_btn = layero.find('button.export');
39
let cancel_btn = layero.find('button.cancel');
40
cancel_btn.on('click', function () {
41
layer.close(index)
42
})
43
export_btn.on('click', function () {
44
let checks = layero.find('input:checkbox:checked');
45
if (checks.length === 0) {
46
return
47
} else {
48
// 选择导出的字段
49
let fields = {};
50
_.forEach(checks, function (item) {
51
fields[item.name] = item.title
52
});
53
// 选择导出的记录
54
let records = _.map(self.selectedRecords, function (id) {
55
return self.model.localData[id].res_id;
56
});
57
58
self.download_template_excel({
59
url: '/layui_theme_odoo12/export_select_records',
60
name: '物资列表' + self.pager.state.current_min + '-' + self.pager.state.current_max,
61
params: 'records=' + JSON.stringify(records) + '&fields=' + JSON.stringify(fields) + '&model=' + self.modelName + '&export_name=' + '物资列表'
62
})
63
}
64
})
65
}
66
});
67
})
68
};
69
70
// 注册函数
71
CallbackRegistry.add('export_material_manage', export_material_manage)
72
});
已复制