yxk-20260728
改善提案 改善效果得分拆分为安全、质量、效率、成本四个,权重平均分
This commit is contained in:
@@ -131,6 +131,38 @@ export const improvementDeptScoreColumns: JVxeColumn[] = [
|
|||||||
{ required: true, message: '${title}不能为空' },
|
{ 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: '改善效果得分',
|
title: '改善效果得分',
|
||||||
key: 'effectScore',
|
key: 'effectScore',
|
||||||
@@ -292,13 +324,17 @@ export const superQuerySchema = {
|
|||||||
scorerId: {title: '评委ID',order: 2,view: 'text', type: 'string',},
|
scorerId: {title: '评委ID',order: 2,view: 'text', type: 'string',},
|
||||||
scorerName: {title: '评委姓名',order: 3,view: 'text', type: 'string',},
|
scorerName: {title: '评委姓名',order: 3,view: 'text', type: 'string',},
|
||||||
scoreStatus: {title: '评分状态:pending/completed',order: 4,view: 'text', type: 'string',},
|
scoreStatus: {title: '评分状态:pending/completed',order: 4,view: 'text', type: 'string',},
|
||||||
effectScore: {title: '改善效果得分',order: 5,view: 'number', type: 'number',},
|
safetyScore: {title: '安全得分',order: 5,view: 'number', type: 'number',},
|
||||||
promotionScore: {title: '可推广度得分',order: 6,view: 'number', type: 'number',},
|
qualityScore: {title: '质量得分',order: 6,view: 'number', type: 'number',},
|
||||||
originalityScore: {title: '独创性得分',order: 7,view: 'number', type: 'number',},
|
efficiencyScore: {title: '效率得分',order: 7,view: 'number', type: 'number',},
|
||||||
effortScore: {title: '努力度得分',order: 8,view: 'number', type: 'number',},
|
costScore: {title: '成本得分',order: 8,view: 'number', type: 'number',},
|
||||||
totalScore: {title: '加权总分',order: 9,view: 'number', type: 'number',},
|
effectScore: {title: '改善效果平均得分',order: 9,view: 'number', type: 'number',},
|
||||||
scoreOpinion: {title: '评分意见',order: 10,view: 'textarea', type: 'string',},
|
promotionScore: {title: '可推广度得分',order: 10,view: 'number', type: 'number',},
|
||||||
scoreTime: {title: '评分时间',order: 11,view: 'datetime', type: 'string',},
|
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: {
|
improvementInstituteVote: {
|
||||||
|
|||||||
@@ -112,9 +112,23 @@
|
|||||||
<a-modal v-model:open="scoreModalVisible" title="部门评议打分" :footer="null" :mask-closable="false">
|
<a-modal v-model:open="scoreModalVisible" title="部门评议打分" :footer="null" :mask-closable="false">
|
||||||
<a-form layout="vertical">
|
<a-form layout="vertical">
|
||||||
<a-row :gutter="12">
|
<a-row :gutter="12">
|
||||||
<a-col :xs="24" :sm="12">
|
<a-col :span="24">
|
||||||
<a-form-item label="改善效果(权重 50%)" required>
|
<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-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :xs="24" :sm="12">
|
<a-col :xs="24" :sm="12">
|
||||||
@@ -218,6 +232,11 @@
|
|||||||
if (!currentScore.value) return '未保存';
|
if (!currentScore.value) return '未保存';
|
||||||
return scoreLocked.value ? '评分已锁定' : '已保存,待流程提交';
|
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));
|
const currentVote = computed(() => voteRows.value.find((item) => String(item.voterId) === currentUserId.value));
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
@@ -318,7 +337,10 @@
|
|||||||
function openScoreModal() {
|
function openScoreModal() {
|
||||||
const score = currentScore.value;
|
const score = currentScore.value;
|
||||||
scoreForm.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,
|
promotionScore: score?.promotionScore ?? undefined,
|
||||||
originalityScore: score?.originalityScore ?? undefined,
|
originalityScore: score?.originalityScore ?? undefined,
|
||||||
effortScore: score?.effortScore ?? undefined,
|
effortScore: score?.effortScore ?? undefined,
|
||||||
@@ -329,7 +351,7 @@
|
|||||||
|
|
||||||
async function saveScoreDraft() {
|
async function saveScoreDraft() {
|
||||||
if (!hasValidScoreValues()) {
|
if (!hasValidScoreValues()) {
|
||||||
createMessage.warning('请完整填写 0 到 100 分之间的四项评分');
|
createMessage.warning('请完整填写 0 到 100 分之间的七项评分');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
savingScore.value = true;
|
savingScore.value = true;
|
||||||
@@ -346,7 +368,10 @@
|
|||||||
|
|
||||||
function createEmptyScoreForm() {
|
function createEmptyScoreForm() {
|
||||||
return {
|
return {
|
||||||
effectScore: undefined,
|
safetyScore: undefined,
|
||||||
|
qualityScore: undefined,
|
||||||
|
efficiencyScore: undefined,
|
||||||
|
costScore: undefined,
|
||||||
promotionScore: undefined,
|
promotionScore: undefined,
|
||||||
originalityScore: undefined,
|
originalityScore: undefined,
|
||||||
effortScore: undefined,
|
effortScore: undefined,
|
||||||
@@ -355,7 +380,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function hasValidScoreValues() {
|
function hasValidScoreValues() {
|
||||||
return ['effectScore', 'promotionScore', 'originalityScore', 'effortScore'].every((key) => {
|
return ['safetyScore', 'qualityScore', 'efficiencyScore', 'costScore', 'promotionScore', 'originalityScore', 'effortScore'].every((key) => {
|
||||||
const value = scoreForm.value[key];
|
const value = scoreForm.value[key];
|
||||||
return value !== undefined && value !== null && Number(value) >= 0 && Number(value) <= 100;
|
return value !== undefined && value !== null && Number(value) >= 0 && Number(value) <= 100;
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user