yxk-20260728

改善提案
改善效果得分拆分为安全、质量、效率、成本四个,权重平均分
This commit is contained in:
ye1023
2026-07-28 15:05:34 +08:00
parent 594d730fa4
commit 10452b724c
2 changed files with 74 additions and 13 deletions
@@ -131,6 +131,38 @@ export const improvementDeptScoreColumns: JVxeColumn[] = [
{ required: true, message: '${title}不能为空' },
],
},
{
title: '安全得分',
key: 'safetyScore',
type: JVxeTypes.inputNumber,
width:"200px",
placeholder: '请输入${title}',
defaultValue:'',
},
{
title: '质量得分',
key: 'qualityScore',
type: JVxeTypes.inputNumber,
width:"200px",
placeholder: '请输入${title}',
defaultValue:'',
},
{
title: '效率得分',
key: 'efficiencyScore',
type: JVxeTypes.inputNumber,
width:"200px",
placeholder: '请输入${title}',
defaultValue:'',
},
{
title: '成本得分',
key: 'costScore',
type: JVxeTypes.inputNumber,
width:"200px",
placeholder: '请输入${title}',
defaultValue:'',
},
{
title: '改善效果得分',
key: 'effectScore',
@@ -292,13 +324,17 @@ export const superQuerySchema = {
scorerId: {title: '评委ID',order: 2,view: 'text', type: 'string',},
scorerName: {title: '评委姓名',order: 3,view: 'text', type: 'string',},
scoreStatus: {title: '评分状态:pending/completed',order: 4,view: 'text', type: 'string',},
effectScore: {title: '改善效果得分',order: 5,view: 'number', type: 'number',},
promotionScore: {title: '可推广度得分',order: 6,view: 'number', type: 'number',},
originalityScore: {title: '独创性得分',order: 7,view: 'number', type: 'number',},
effortScore: {title: '努力度得分',order: 8,view: 'number', type: 'number',},
totalScore: {title: '加权总分',order: 9,view: 'number', type: 'number',},
scoreOpinion: {title: '评分意见',order: 10,view: 'textarea', type: 'string',},
scoreTime: {title: '评分时间',order: 11,view: 'datetime', type: 'string',},
safetyScore: {title: '安全得分',order: 5,view: 'number', type: 'number',},
qualityScore: {title: '质量得分',order: 6,view: 'number', type: 'number',},
efficiencyScore: {title: '效率得分',order: 7,view: 'number', type: 'number',},
costScore: {title: '成本得分',order: 8,view: 'number', type: 'number',},
effectScore: {title: '改善效果平均得分',order: 9,view: 'number', type: 'number',},
promotionScore: {title: '可推广度得分',order: 10,view: 'number', type: 'number',},
originalityScore: {title: '独创性得分',order: 11,view: 'number', type: 'number',},
effortScore: {title: '努力度得分',order: 12,view: 'number', type: 'number',},
totalScore: {title: '加权总分',order: 13,view: 'number', type: 'number',},
scoreOpinion: {title: '评分意见',order: 14,view: 'textarea', type: 'string',},
scoreTime: {title: '评分时间',order: 15,view: 'datetime', type: 'string',},
}
},
improvementInstituteVote: {
@@ -112,9 +112,23 @@
<a-modal v-model:open="scoreModalVisible" title="部门评议打分" :footer="null" :mask-closable="false">
<a-form layout="vertical">
<a-row :gutter="12">
<a-col :xs="24" :sm="12">
<a-col :span="24">
<a-form-item label="改善效果(权重 50%" required>
<a-input-number v-model:value="scoreForm.effectScore" :min="0" :max="100" :precision="2" :disabled="scoreLocked" style="width: 100%" />
<a-row :gutter="12">
<a-col :xs="24" :sm="12" :lg="6">
<a-form-item label="安全" required><a-input-number v-model:value="scoreForm.safetyScore" :min="0" :max="100" :precision="2" :disabled="scoreLocked" style="width: 100%" /></a-form-item>
</a-col>
<a-col :xs="24" :sm="12" :lg="6">
<a-form-item label="质量" required><a-input-number v-model:value="scoreForm.qualityScore" :min="0" :max="100" :precision="2" :disabled="scoreLocked" style="width: 100%" /></a-form-item>
</a-col>
<a-col :xs="24" :sm="12" :lg="6">
<a-form-item label="效率" required><a-input-number v-model:value="scoreForm.efficiencyScore" :min="0" :max="100" :precision="2" :disabled="scoreLocked" style="width: 100%" /></a-form-item>
</a-col>
<a-col :xs="24" :sm="12" :lg="6">
<a-form-item label="成本" required><a-input-number v-model:value="scoreForm.costScore" :min="0" :max="100" :precision="2" :disabled="scoreLocked" style="width: 100%" /></a-form-item>
</a-col>
</a-row>
<div class="form-help">改善效果得分按安全质量效率成本四项的平均分自动计算{{ effectAveragePreview }}</div>
</a-form-item>
</a-col>
<a-col :xs="24" :sm="12">
@@ -218,6 +232,11 @@
if (!currentScore.value) return '未保存';
return scoreLocked.value ? '评分已锁定' : '已保存,待流程提交';
});
const effectAveragePreview = computed(() => {
const values = ['safetyScore', 'qualityScore', 'efficiencyScore', 'costScore'].map((key) => scoreForm.value[key]);
if (values.some((value) => value === undefined || value === null)) return '-';
return (values.reduce((sum, value) => sum + Number(value), 0) / values.length).toFixed(2);
});
const currentVote = computed(() => voteRows.value.find((item) => String(item.voterId) === currentUserId.value));
watch(
@@ -318,7 +337,10 @@
function openScoreModal() {
const score = currentScore.value;
scoreForm.value = {
effectScore: score?.effectScore ?? undefined,
safetyScore: score?.safetyScore ?? undefined,
qualityScore: score?.qualityScore ?? undefined,
efficiencyScore: score?.efficiencyScore ?? undefined,
costScore: score?.costScore ?? undefined,
promotionScore: score?.promotionScore ?? undefined,
originalityScore: score?.originalityScore ?? undefined,
effortScore: score?.effortScore ?? undefined,
@@ -329,7 +351,7 @@
async function saveScoreDraft() {
if (!hasValidScoreValues()) {
createMessage.warning('请完整填写 0 到 100 分之间的项评分');
createMessage.warning('请完整填写 0 到 100 分之间的项评分');
return;
}
savingScore.value = true;
@@ -346,7 +368,10 @@
function createEmptyScoreForm() {
return {
effectScore: undefined,
safetyScore: undefined,
qualityScore: undefined,
efficiencyScore: undefined,
costScore: undefined,
promotionScore: undefined,
originalityScore: undefined,
effortScore: undefined,
@@ -355,7 +380,7 @@
}
function hasValidScoreValues() {
return ['effectScore', 'promotionScore', 'originalityScore', 'effortScore'].every((key) => {
return ['safetyScore', 'qualityScore', 'efficiencyScore', 'costScore', 'promotionScore', 'originalityScore', 'effortScore'].every((key) => {
const value = scoreForm.value[key];
return value !== undefined && value !== null && Number(value) >= 0 && Number(value) <= 100;
});