yxk-20260728
改善提案 改善效果得分拆分为安全、质量、效率、成本四个,权重平均分
This commit is contained in:
@@ -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;
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user