如何在Odoo 16中隐藏crm_lead的归档、取消归档及导出操作?
Odoo 16 隐藏CRM线索的归档、取消归档及导出操作方案
方法一:通过XML视图继承修改(推荐,无需JS)
这种方法直接修改视图结构,移除目标按钮/菜单项,稳定且易于维护。
1. 隐藏归档/取消归档按钮
在自定义模块的XML视图文件中添加以下代码,继承CRM线索的列表和表单视图,移除归档相关按钮:
<odoo> <!-- 继承列表视图,移除归档按钮 --> <record id="crm_lead_tree_inherit_hide_archive" model="ir.ui.view"> <field name="name">crm.lead.tree.inherit.hide.archive</field> <field name="model">crm.lead</field> <field name="inherit_id" ref="crm.crm_lead_view_tree"/> <field name="arch" type="xml"> <xpath expr="//button[@name='toggle_active']" position="replace"/> </field> </record> <!-- 继承表单视图,移除归档按钮 --> <record id="crm_lead_form_inherit_hide_archive" model="ir.ui.view"> <field name="name">crm.lead.form.inherit.hide.archive</field> <field name="model">crm.lead</field> <field name="inherit_id" ref="crm.crm_lead_view_form"/> <field name="arch" type="xml"> <xpath expr="//button[@name='toggle_active']" position="replace"/> </field> </record> </odoo>
2. 隐藏导出操作
同样在XML视图文件中添加代码,移除列表视图中的导出菜单项:
<odoo> <record id="crm_lead_tree_inherit_hide_export" model="ir.ui.view"> <field name="name">crm.lead.tree.inherit.hide.export</field> <field name="model">crm.lead</field> <field name="inherit_id" ref="crm.crm_lead_view_tree"/> <field name="arch" type="xml"> <!-- 移除导出按钮 --> <xpath expr="//button[@name='action_export']" position="replace"/> <!-- 若导出项在下拉菜单中,移除对应菜单项 --> <xpath expr="//menuitem[@name='Export']" position="replace"/> </field> </record> </odoo>
方法二:通过权限控制彻底禁用
如果需要针对特定用户组限制操作,可通过权限设置实现:
1. 禁用导出权限
进入设置 > 用户与公司 > 用户组,找到目标用户组,在「权限」标签下,取消勾选crm.lead模型的「导出」权限。
2. 禁用归档/取消归档权限
归档操作本质是修改active字段,可通过记录规则禁止用户修改该字段:
<odoo> <record id="crm_lead_rule_no_active_edit" model="ir.rule"> <field name="name">CRM Lead: 禁止修改归档状态</field> <field name="model_id" ref="crm.model_crm_lead"/> <field name="groups" eval="[(4, ref('base.group_user'))]"/> <!-- 指定目标用户组 --> <field name="domain_force">[('id', '=', False)]</field> <field name="perm_write">0</field> <field name="fields">active</field> </record> </odoo>
方法三:通过JavaScript隐藏(适合特殊场景)
若之前尝试JS未成功,可检查路径和模块依赖,以下是正确的JS实现:
- 在模块的
static/src/js/目录下创建hide_lead_actions.js:
odoo.define('your_module_name.hide_lead_actions', function(require) { "use strict"; const ListController = require('web.ListController'); ListController.include({ renderButtons: function($node) { this._super.apply(this, arguments); // 仅对CRM线索列表生效 if (this.modelName === 'crm.lead') { // 隐藏归档/取消归档按钮 this.$buttons.find('.o_list_button_archive').hide(); this.$buttons.find('.o_list_button_unarchive').hide(); // 隐藏导出按钮 this.$buttons.find('.o_button_export').hide(); } } }); });
- 在模块的
views/assets.xml中引入该JS:
<odoo> <template id="assets_backend_hide_actions" inherit_id="web.assets_backend"> <xpath expr="." position="inside"> <script type="text/javascript" src="/your_module_name/static/src/js/hide_lead_actions.js"/> </xpath> </template> </odoo>
操作步骤
- 确保自定义模块依赖
crm模块(在__manifest__.py的depends中添加'crm') - 将上述代码放入对应文件,更新模块列表
- 安装/升级自定义模块,刷新页面即可生效
内容的提问来源于stack exchange,提问作者sonnguyenvo76
相关产品推荐
相关产品推荐

