diff --git a/yuthon_issue/models/issue_library.py b/yuthon_issue/models/issue_library.py
index d236c848d..903a7ec93 100644
--- a/yuthon_issue/models/issue_library.py
+++ b/yuthon_issue/models/issue_library.py
@@ -908,20 +908,46 @@ class IssueLibrary(models.Model):
])
def unlink(self):
+ """删除议题:仅待推送/待申报/已取消状态可删,管理员可绕过"""
+ # 判断当前用户是否为系统管理员
+ is_admin = self.env.user.has_group('base.group_system')
+ # 可删除的议题状态:待推送、待申报、已取消
+ deletable_states = ('to_do', 'draft', 'cancel')
+ # 获取议题状态的中文标签映射
+ state_label = dict(self._fields['issue_state'].selection)
for i in self:
- if i.issue_state == 'on_meet':
- raise UserError('议题已上会,不能删除')
+ # 管理员跳过状态检查
+ if is_admin:
+ continue
+ # 非可删状态抛出弹窗提醒
+ if i.issue_state not in deletable_states:
+ raise UserError(
+ '议题【%s】已进入流程(当前状态:%s),不能删除!\n'
+ '如需作废,请先走"取消"流程。' % (i.name, state_label[i.issue_state])
+ )
return super().unlink()
def my_unlink(self):
+ """我的议题删除:非管理员只能删自己创建的,且仅限待推送/待申报/已取消状态"""
+ # 判断当前用户是否为系统管理员
is_admin = self.env.user.has_group('base.group_system')
+ # 当前登录用户
current_user = self.env.user
+ # 可删除的议题状态:待推送、待申报、已取消
+ deletable_states = ('to_do', 'draft', 'cancel')
+ # 获取议题状态的中文标签映射
+ state_label = dict(self._fields['issue_state'].selection)
for i in self:
- if i.issue_state == 'on_meet':
- raise UserError('议题已上会,不能删除')
+ # 非可删状态抛出弹窗提醒
+ if i.issue_state not in deletable_states:
+ raise UserError(
+ '议题【%s】已进入流程(当前状态:%s),不能删除!\n'
+ '如需作废,请先走"取消"流程。' % (i.name, state_label[i.issue_state])
+ )
+ # 非管理员只能删除自己创建的议题
if not is_admin:
if i.employee_id.user_id != current_user:
- raise UserError('只能删除自己的记录,无权删除他人数据')
+ raise UserError('只能删除自己创建的议题,无权删除他人数据!')
return super().unlink()
@api.depends('name')
diff --git a/yuthon_issue/views/issue_library_views.xml b/yuthon_issue/views/issue_library_views.xml
index 4331d7d0e..24330f758 100644
--- a/yuthon_issue/views/issue_library_views.xml
+++ b/yuthon_issue/views/issue_library_views.xml
@@ -38,8 +38,10 @@
@@ -92,8 +94,8 @@
-
-
+
+