Files
gzth/quick_menu_access/models/quick_menu_config.py
T
2025-07-22 13:34:21 +00:00

58 lines
2.5 KiB
Python

from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
class QuickMenuConfig(models.Model):
_name = 'quick.menu.config'
_description = '快捷菜单配置'
_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个快捷菜单!'))