yxk-20260728

改善提案
在 Task_improve003 部门负责人审核节点,负责人只能选择基准奖项本档或更低档奖项,不允许升档。基准奖项按是否经过部门评议确定:
need_dept_score='1':以 suggested_award 为基准。
未经过部门评议:以 initial_award 为基准。
奖项编码保持现有顺序:0=金奖、1=银奖、2=铜奖、3=参与奖;编码数值大于等于基准编码即为本档或降档。
This commit is contained in:
ye1023
2026-07-28 18:33:56 +08:00
parent 10452b724c
commit f8290836f9
@@ -46,7 +46,7 @@
<template v-if="isTask('Task_improve002')">
<a-form-item label="我的评分">
<a-descriptions bordered size="small" :column="2">
<a-descriptions bordered size="small" :column="1">
<a-descriptions-item label="评分状态">{{ scoreStatusLabel }}</a-descriptions-item>
<a-descriptions-item label="加权总分">{{ currentScore?.totalScore ?? '-' }}</a-descriptions-item>
<a-descriptions-item label="评分时间" :span="2">{{ formatDateTime(currentScore?.scoreTime) }}</a-descriptions-item>
@@ -59,13 +59,15 @@
<template v-if="isTask('Task_improve003')">
<a-form-item label="初步评定奖项">{{ awardLabel(proposal.initialAward) }}</a-form-item>
<a-form-item v-if="proposal.needDeptScore === '1'" label="部门评议结果">
平均分{{ proposal.deptAvgScore ?? '-' }}系统建议奖项{{ awardLabel(proposal.suggestedAward) }}
<a-form-item v-if="proposal.needDeptScore === '1'" label="部门评议小组打分结果">
平均分{{ proposal.deptAvgScore ?? '-' }}建议奖项{{ awardLabel(proposal.suggestedAward) }}
</a-form-item>
<a-form-item label="负责人确认奖项" required>
<a-radio-group v-model:value="leaderFinalAward">
<a-radio v-for="item in awardOptions" :key="item.value" :value="item.value">{{ item.label }}</a-radio>
<a-radio-group v-if="leaderAwardBase" v-model:value="leaderFinalAward">
<a-radio v-for="item in leaderAwardOptions" :key="item.value" :value="item.value">{{ item.label }}</a-radio>
</a-radio-group>
<div v-if="leaderAwardBase" class="form-help">评定基准{{ awardLabel(leaderAwardBase) }}仅可选择当前档位或降档奖项</div>
<div v-else class="form-help">部门评议建议奖项尚未生成暂不能确认负责人奖项</div>
</a-form-item>
</template>
@@ -109,8 +111,9 @@
/>
</template>
<a-modal v-model:open="scoreModalVisible" title="部门评议打分" :footer="null" :mask-closable="false">
<a-modal v-model:open="scoreModalVisible" title="部门评议打分" :footer="null" :mask-closable="false" :body-style="{ padding: '24px 28px 20px' }">
<a-form layout="vertical">
<a-alert class="score-range-alert" type="info" show-icon message="所有评分项均须填写 0-100 分,最多可保留两位小数。" />
<a-row :gutter="12">
<a-col :span="24">
<a-form-item label="改善效果(权重 50%" required>
@@ -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;