93 lines
2.8 KiB
Python
93 lines
2.8 KiB
Python
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个快捷菜单!"))
|