1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
<template>
<div>
<table class="tab-content" cellpadding="3" cellspacing="3" style="width: 98%">
<tr>
<td class="bg-title">一级指标(固定)</td>
<td class="bg-title">二级指标(供参考)</td>
<td class="bg-title" colspan="3">评价意见(供参考)</td>
<td class="bg-title">专家打分</td>
</tr>
<tr v-for="(item, index) in tableData" :key="index" style="line-height: 25px">
<td :rowspan="item.rowspan" v-if="item.rowspan != 0" class="bg-title">
{{ item.oneLevel }}
</td>
<td>{{ item.towLevel }}</td>
<td>{{ item.title1 }}</td>
<td>{{ item.title2 }}</td>
<td>{{ item.title3 }}</td>
<td>
<a-form-model-item :prop="'score' + (index + 1)">
<a-input-number v-model="item.grade" :min="0" :max="item.score" :step="1" @change="numberChange(index)" style="width: 90%"/>
</a-form-model-item>
</td>
</tr>
<tr>
<td class="bg-title">评审意见</td>
<td colspan="4">
<a-form-model-item prop="remark">
<a-textarea placeholder="评审意见" v-model="remark" @change="AreaChange()" :maxLength="1000" style="width: 90%; height: 120px; margin-top: 6px" />
</a-form-model-item>
</td>
<td style="text-align: center">总分:{{ totalScore }}分</td>
</tr>
<tr>
<td class="bg-title">是否推荐立项支持</td>
<td colspan="2">
<a-form-model-item prop="supportState">
<a-radio-group v-model="supportState" @change="supportStateChange">
<a-radio :value="1">是</a-radio>
<a-radio :value="0">否</a-radio>
</a-radio-group>
</a-form-model-item>
</td>
<td class="bg-title">评审结果</td>
<td colspan="2">
<a-form-model-item prop="evaluationType">
<a-radio-group v-model="evaluationType" @change="EcaluationChange" disabled>
<a-radio :value="1">A类(通过)</a-radio>
<a-radio :value="2">B类(修改)</a-radio>
<a-radio :value="3">C类(不通过)</a-radio>
</a-radio-group>
</a-form-model-item>
</td>
</tr>
</table>
</div>
</template>
<script>
const formData = {
id: null,
projId: null,
expertId: null,
expertName: null,
score1: null,
score2: null,
score3: null,
score4: null,
score4: null,
score5: null,
score6: null,
score7: null,
score8: null,
score9: null,
score10: null,
score11: null,
score12: null,
score13: null,
score14: null,
score15: null,
score16: null,
score17: null,
totalScore: null,
supportState: null,
remark: null,
projName: null,
projNo: null,
};
const plainOptions = ['A', 'B', 'C'];
export default {
name: "technologyEvalucation",
props: {
value: {
type: Object,
default: () => {
return formData;
},
},
},
data() {
return {
tableData: [
{ rowspan: 1, oneLevel: "1.意义及必要性(5分)", towLevel: "A:项目实施的意义及必要性(5分)", title1: "重要(4-5分)", title2: "较重要(2-3分)", title3: "一般(0-1分)", score: 5, grade: null, },
{ rowspan: 2, oneLevel: "2.目标及考核指标(10分)", towLevel: "A:目标定位及可考核性(5分)", title1: "明确量化可考(4-5分)", title2: "较明确可考(2-3分)", title3: "一般(0-1分)", score: 5, grade: null, },
{ rowspan: 0, oneLevel: "2.目标及考核指标(10分)", towLevel: "B:绩效目标设置合理性(5分)", title1: "准确合理(4-5分)", title2: "较准确合理(2-3分)", title3: "一般(0-1分)", score: 5, grade: null, },
{ rowspan: 3, oneLevel: "3.主要内容(20分)", towLevel: "A:研发内容与目标实现关联度(6分)", title1: "高(5-6分)", title2: "中(2-4分)", title3: "低(0-1分)", score: 6, grade: null, },
{ rowspan: 0, oneLevel: "3.主要内容(20分)", towLevel: "B:研究成果产业化成熟度(6分)", title1: "好(5-6分)", title2: "较好(2-4分)", title3: "一般(0-1分)", score: 6, grade: null, },
{ rowspan: 0, oneLevel: "3.主要内容(20分)", towLevel: "C:产业化市场竞争力及预期效益(8分)", title1: "好(7-8分)", title2: "较好(3-6分)", title3: "一般(0-2分)", score: 8, grade: null, },
{ rowspan: 3, oneLevel: "4.项目实施方案(技术路线)(25分)", towLevel: "A:技术路线和实施方案设计(10分)", title1: "合理(7-10分)", title2: "较合理(3-6分)", title3: "一般(0-2分)", score: 10, grade: null, },
{ rowspan: 0, oneLevel: "4.项目实施方案(技术路线)(25分)", towLevel: "B:技术关键选择及创新性先进性(8分)", title1: "突出(7-8分)", title2: "较突出(3-6分)", title3: "一般(0-2分)", score: 8, grade: null, },
{ rowspan: 0, oneLevel: "4.项目实施方案(技术路线)(25分)", towLevel: "C:年度计划安排(7分)", title1: "合理(6-7分)", title2: "较合理(3-5分)", title3: "一般(0-2分)", score: 7, grade: null, },
{ rowspan: 3, oneLevel: "5.工作基础及支撑条件(15分)", towLevel: "A:负责人及团队创新能力(7分)", title1: "强(6-7分)", title2: "较强(2-5分)", title3: "一般(0-1分)", score: 7, grade: null, },
{ rowspan: 0, oneLevel: "5.工作基础及支撑条件(15分)", towLevel: "B:研发平台及科研条件保障(4分)", title1: "好(4分)", title2: "较好(3分)", title3: "一般(1分)", score: 4, grade: null, },
{ rowspan: 0, oneLevel: "5.工作基础及支撑条件(15分)", towLevel: "C:前期工作基础(4分)", title1: "好(4分)", title2: "较好(3分)", title3: "一般(1分)", score: 4, grade: null, },
{ rowspan: 3, oneLevel: "6.组织运行与管理(15分)", towLevel: "A:经费预算合理性(6分)", title1: "合理(5-6分)", title2: "较合理(2-4分)", title3: "一般(0-1分)", score: 6, grade: null, },
{ rowspan: 0, oneLevel: "6.组织运行与管理(15分)", towLevel: "B:任务分工和权益分配(4分)", title1: "合理(4分)", title2: "较合理(3分)", title3: "一般(1分)", score: 4, grade: null, },
{ rowspan: 0, oneLevel: "6.组织运行与管理(15分)", towLevel: "C:项目组织协调及管理措施(5分)", title1: "完善(4-5分)", title2: "较完善(2-3分)", title3: "一般(0-1分)", score: 5, grade: null, },
{ rowspan: 2, oneLevel: "7.风险分析(10分)", towLevel: "A:项目组织实施风险(6分)", title1: "风险小(5-6分)", title2: "有一定风险(3-4分)", title3: "风险较大(0-2分)", score: 6, grade: null, },
{ rowspan: 0, oneLevel: "7.风险分析(10分)", towLevel: "B:目标实现风险(4分)", title1: "风险小(4分)", title2: "有一定风险(3分)", title3: "风险较大(0分)", score: 4, grade: null, },
],
remark: "",
supportState: null,
evaluationType: 0,
totalScore: 0,
plainOptions,
disabled: true,
};
},
created() {
this.tableData[0].grade = this.value.score1
this.tableData[1].grade = this.value.score2
this.tableData[2].grade = this.value.score3
this.tableData[3].grade = this.value.score4
this.tableData[4].grade = this.value.score5
this.tableData[5].grade = this.value.score6
this.tableData[6].grade = this.value.score7
this.tableData[7].grade = this.value.score8
this.tableData[8].grade = this.value.score9
this.tableData[9].grade = this.value.score10
this.tableData[10].grade = this.value.score11
this.tableData[11].grade = this.value.score12
this.tableData[12].grade = this.value.score13
this.tableData[13].grade = this.value.score14
this.tableData[14].grade = this.value.score15
this.tableData[15].grade = this.value.score16
this.tableData[16].grade = this.value.score17
this.remark = this.value.remark
this.supportState = this.value.supportState
this.evaluationType = this.value.evaluationType
this.calTotalScore()
},
methods: {
numberChange(index) {
switch (index + 1) {
case 1:
this.value.score1 = this.tableData[index].grade;
break;
case 2:
this.value.score2 = this.tableData[index].grade;
break;
case 3:
this.value.score3 = this.tableData[index].grade;
break;
case 4:
this.value.score4 = this.tableData[index].grade;
break;
case 5:
this.value.score5 = this.tableData[index].grade;
break;
case 6:
this.value.score6 = this.tableData[index].grade;
break;
case 7:
this.value.score7 = this.tableData[index].grade;
break;
case 8:
this.value.score8 = this.tableData[index].grade;
break;
case 9:
this.value.score9 = this.tableData[index].grade;
break;
case 10:
this.value.score10 = this.tableData[index].grade;
break;
case 11:
this.value.score11 = this.tableData[index].grade;
break;
case 12:
this.value.score12 = this.tableData[index].grade;
break;
case 13:
this.value.score13 = this.tableData[index].grade;
break;
case 14:
this.value.score14 = this.tableData[index].grade;
break;
case 15:
this.value.score15 = this.tableData[index].grade;
break;
case 16:
this.value.score16 = this.tableData[index].grade;
break;
case 17:
this.value.score17 = this.tableData[index].grade;
break;
}
this.calTotalScore()
},
calTotalScore() {
this.totalScore = 0;
this.tableData.forEach((e) => {
if (e.grade != null) {
this.totalScore += e.grade;
}
this.DetermineType()
});
},
DetermineType() {
if (this.totalScore >= 80)
this.evaluationType = 1
else if (this.totalScore < 80 && this.totalScore >= 60)
this.evaluationType = 2
else
this.evaluationType = 3
this.EcaluationChange()
},
AreaChange() {
this.value.remark = this.remark
},
supportStateChange() {
this.value.supportState = this.supportState
},
EcaluationChange() {
this.value.evaluationType = this.evaluationType
}
},
};
</script>
<style scoped lang="less">
.tab-content {
::v-deep .ant-row {
border: 0 !important;
}
::v-deep .ant-row .ant-col {
border: 0 !important;
min-height: 30px !important;
}
::v-deep .ant-form-item-control {
line-height: 30px !important;
}
::v-deep .ant-form-item {
margin: 0 !important;
}
::v-deep .ant-input-number {
height: 30px !important;
}
::v-deep .ant-input-number-input {
height: 30px !important;
}
}
table,
tr,
td {
border: 1px solid #f0f0f0;
font-size: 10pt;
text-align: left;
line-height: 25px;
height: 25px;
}
.bg-title {
background-color: #f8fafc;
font-weight: bold;
text-align: center;
}
.target-value {
text-align: center;
}
</style>