diff --git a/src/views/gh/improvementProposal/components/ImprovementProposalBPMForm.vue b/src/views/gh/improvementProposal/components/ImprovementProposalBPMForm.vue index 350f4ea..e546079 100644 --- a/src/views/gh/improvementProposal/components/ImprovementProposalBPMForm.vue +++ b/src/views/gh/improvementProposal/components/ImprovementProposalBPMForm.vue @@ -46,7 +46,7 @@ - + + @@ -237,6 +240,15 @@ if (values.some((value) => value === undefined || value === null)) return '-'; return (values.reduce((sum, value) => sum + Number(value), 0) / values.length).toFixed(2); }); + // 部门评分完成后必须以系统建议奖项为基准,不能回退到初审奖项。 + const leaderAwardBase = computed(() => { + const award = proposal.value.needDeptScore === '1' ? proposal.value.suggestedAward : proposal.value.initialAward; + return awardOptions.some((item) => item.value === String(award)) ? String(award) : ''; + }); + const leaderAwardOptions = computed(() => { + if (!leaderAwardBase.value) return []; + return awardOptions.filter((item) => Number(item.value) >= Number(leaderAwardBase.value)); + }); const currentVote = computed(() => voteRows.value.find((item) => String(item.voterId) === currentUserId.value)); watch( @@ -297,10 +309,18 @@ await submitDeptScore(actionPayload()); } if (isTask('Task_improve003')) { + if (!leaderAwardBase.value) { + createMessage.warning('部门评议建议奖项尚未生成,不能确认负责人奖项'); + return false; + } if (!leaderFinalAward.value) { createMessage.warning('请选择负责人确认奖项'); return false; } + if (!leaderAwardOptions.value.some((item) => item.value === leaderFinalAward.value)) { + createMessage.warning('负责人确认奖项只能选择当前档位或降档奖项'); + return false; + } await saveLeaderAward(actionPayload({ leaderFinalAward: leaderFinalAward.value })); } if (isTask('Task_improve005') && currentVote.value?.voteStatus !== 'voted') { @@ -358,6 +378,7 @@ try { await saveDeptScore(actionPayload(scoreForm.value)); createMessage.success('评分保存成功,可在流程提交前继续修改'); + scoreModalVisible.value = false; await loadProposal(); } catch (error: any) { createMessage.warning(error?.message || '评分保存失败'); @@ -452,6 +473,10 @@ font-size: 12px; } + .score-range-alert { + margin-bottom: 16px; + } + @media (max-width: 768px) { .attachment-grid { grid-template-columns: 1fr;