yuthon_base/quick_navigation/models/quick_menu_config.py
李鹏宇 cd653ce24c 1
2026-06-04 14:24:28 +08:00

93 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
class QuickMenuConfig(models.Model):
_name = "quick.menu.config"
_description = "Quick Menu Configuration"
_order = "sequence, id"
_sql_constraints = [
(
"user_menu_uniq",
"unique(user_id, menu_id)",
"同一用户不能重复配置相同的菜单!",
)
]
def _get_next_sequence(self):
"""获取当前用户的下一个序号从1开始递增"""
user_id = self.env.user.id
max_sequence = (
self.env["quick.menu.config"]
.search(
[("user_id", "=", user_id), ("active", "=", True)],
order="sequence desc",
limit=1,
)
.sequence
or 0
)
return max_sequence + 1
name = fields.Char(string="名称", required=True)
user_id = fields.Many2one(
"res.users",
string="用户",
required=True,
default=lambda self: self.env.user,
ondelete="cascade",
)
menu_id = fields.Many2one(
"ir.ui.menu",
string="菜单",
required=True,
ondelete="cascade",
domain=[("action", "!=", False)],
) # 只允许选择有action的菜单
sequence = fields.Integer(
string="序号", default=lambda self: self._get_next_sequence()
)
icon = fields.Selection(
[
("fa-star", "星星"),
("fa-heart", "心形"),
("fa-user", "用户"),
("fa-cog", "设置"),
("fa-home", "主页"),
("fa-list", "列表"),
("fa-calendar", "日历"),
("fa-envelope", "信封"),
("fa-bell", "铃铛"),
("fa-file", "文件"),
],
string="图标",
required=True,
default="fa-star",
)
color = fields.Char(
string="颜色",
default="#2ECC71",
help="菜单项的颜色可以使用HEX颜色代码例如 #FF0000 表示红色",
)
active = fields.Boolean(string="启用", default=True)
show_title = fields.Boolean(
string="默认显示标题",
default=False,
help="如果勾选,该菜单项的标题将在菜单展开时默认显示,无需鼠标悬停",
)
@api.constrains("menu_id")
def _check_menu_count(self):
"""检查每个用户的快捷菜单数量不超过8个"""
for record in self:
menu_count = self.search_count(
[
("user_id", "=", record.user_id.id),
("active", "=", True),
("id", "!=", record.id),
]
)
if menu_count >= 8:
raise ValidationError(_("每个用户最多只能配置8个快捷菜单"))