diff --git a/sun_badge_menu/models/ir_ui_menu.py b/sun_badge_menu/models/ir_ui_menu.py
index 9e64494b4..b8ef731a0 100644
--- a/sun_badge_menu/models/ir_ui_menu.py
+++ b/sun_badge_menu/models/ir_ui_menu.py
@@ -35,6 +35,8 @@ class IrUiMenu(models.Model):
is_phone = fields.Boolean(string="手机菜单",default=False)
is_pc = fields.Boolean(string="PC菜单",default=True)
+ badge_function = fields.Char(string="菜单角标计算函数")
+
@api.model
@tools.ormcache_context('self._uid', 'debug', keys=('lang',))
def load_menus(self, debug):
@@ -43,7 +45,7 @@ class IrUiMenu(models.Model):
:return: the menu root
:rtype: dict('children': menu_nodes)
"""
- fields = ['name', 'sequence', 'parent_id', 'action', 'web_icon','show_badge_count']
+ fields = ['name', 'sequence', 'parent_id', 'action', 'web_icon','show_badge_count','badge_function']
menu_roots = self.get_user_roots()
menu_roots_data = menu_roots.read(fields) if menu_roots else []
menu_root = {
@@ -166,7 +168,10 @@ class IrUiMenu(models.Model):
# 不仅仅是 form 表单,获取 model
res_model = action_record.res_model
if res_model in self.env:
- if hasattr(self.env[res_model], 'get_menu_badge_count'):
+ # 先检查 menu['badge_function']
+ if 'badge_function' in menu and menu['badge_function'] and hasattr(self.env[res_model], menu['badge_function']):
+ badge_count = getattr(self.env[res_model], menu['badge_function'])(action_record)
+ elif hasattr(self.env[res_model], 'get_menu_badge_count'):
badge_count = self.env[res_model].get_menu_badge_count(action_record)
elif hasattr(self.env[res_model], 'get_no_read_count'):
badge_count = self.env[res_model].get_no_read_count()
diff --git a/sun_badge_menu/views/ir_ui_menu.xml b/sun_badge_menu/views/ir_ui_menu.xml
index 41f9a09f1..22f2fa443 100644
--- a/sun_badge_menu/views/ir_ui_menu.xml
+++ b/sun_badge_menu/views/ir_ui_menu.xml
@@ -8,6 +8,7 @@