董国庆
2025-05-23 d82e210c6de4163d5a528f385b5582d8822cb69f
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
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
<template>
    <el-dialog :title="dialogTitle" :visible.sync="visible" width="80%" @open="open" :close-on-click-modal="false"
        @close="handleClose">
        <div class="evaluate-dialog-layout">
            <!-- 左侧评分规则说明 -->
            <div class="evaluate-rule-panel">
                <div class="rule-title">设立课题规则</div>
                <div class="rule-content">
                    <ol>
                        <li>根据可研报告、产品构思设计的工艺研究路线,一条工艺路线设立一个课题。如果一个课题中有多个化合物需要开发研究,则每个化合物作为一个分题;分题归集到该课题中,最终形成课题报告。不同课题报告中的分题不能重复使用
                        </li>
                        <li>在可行研究阶段,工艺开发升级,重新规划工艺研究路线,则以新规划的工艺路线方案来设定课题。</li>
                    </ol>
                </div>
            </div>
            <!-- 右侧评定表及表单 -->
            <div class="evaluate-main-panel">
                <el-form ref="form" :model="form" :rules="rules" label-position="top" class="evaluate-form">
                    <div style="display: flex;">
                        <div>
                            <div class="header-title" style="width: 100%;">
                                <div class="header-title-left">
                                    <img src="@/assets/public/headercard.png" />
                                    <div>报告编号</div>
                                </div>
                            </div>
                            <el-form-item prop="reportCode">
                                <el-input disabled v-model="form.reportCode" style="width: 100%;"
                                    placeholder="请输入报告编号" />
                            </el-form-item>
                        </div>
                        <div style="margin-left: 100px;">
                            <div class="header-title" style="width: 100%;">
                                <div class="header-title-left">
                                    <img src="@/assets/public/headercard.png" />
                                    <div>报告名称</div>
                                </div>
                            </div>
                            <el-form-item prop="reportName">
                                <el-input disabled v-model="form.reportName" style="width: 100%;"
                                    placeholder="请输入报告名称" />
                            </el-form-item>
                        </div>
                    </div>
                    <el-table :data="currentAssessmentTable" border style="width: 100%; margin-top: 20px;" :show-summary="true"
                        :summary-method="getTableSummary" :span-method="tableSpanMethod">
                        <el-table-column prop="index" label="序号" width="60">
                            <template slot-scope="scope">{{ scope.row.index }}</template>
                        </el-table-column>
                        <el-table-column prop="standard" :label="type == 1 || type == '1' ? '规程型课题评定标准' : '创新型课题评定标准'">
                            <template slot-scope="scope">{{ scope.row.standard }}</template>
                        </el-table-column>
                        <el-table-column prop="fullScore" label="满分值" width="80">
                            <template slot-scope="scope">{{ scope.row.fullScore }}</template>
                        </el-table-column>
                        <el-table-column prop="selectedScore" label="评定分值" width="120">
                            <template slot-scope="scope">
                                <el-input v-model.number="scope.row.selectedScore" :max="scope.row.fullScore" :min="0"
                                    type="number" placeholder="请输入" />
                            </template>
                        </el-table-column>
                        <el-table-column prop="rule" :label="type == 1 || type == '1' ? '规程型课题报告评分规则' : '创新型课题报告评分规则'">
                            <template slot-scope="scope">
                                <span v-if="scope.$index === 0 && (type == 1 || type == '1')">
                                    1. 规程型课题评定总分的满分为5分。<br>
                                    2. 某分项工作完成,但出现以下三种错误中的1种,则减1分:<br>
                                    ①有缺项、漏项;②或不完整衔接;③或工作被多人拖延。<br>
                                    3. 不能完成该分项的全部工作,或课题不涉及该分项内容,则该分项评0分。
                                </span>
                                <span v-if="scope.$index === 0 && (type == 2 || type == '2')">
                                    1. 各分项评满分,应满足以下四项要求:<br>
                                    ①分项内容:清晰、系统、完整,结构逻辑清晰,无缺项;<br>
                                    ②团队工作运行顺畅,计划时间高效。<br>
                                    ③工作结果完成度高。<br>
                                    ④课题文档报告完成度高。<br>
                                    2. 某分项工作完成,但出现以下三种错误中的1种,则减1分:<br>
                                    ①有缺项、漏项;<br>
                                    ②或不完整衔接;<br>
                                    ③或工作被多人拖延。<br>
                                    3. 某分项工作基本完成,但出现三种错误中的2-3种,则减2分:<br>
                                    ①有缺项、漏项;<br>
                                    ②或不完整衔接;<br>
                                    ③或工作被多人拖延。<br>
                                    4. 不能完成某分项的全部工作,或课题不涉及该分项内容,则该分项评0分。
                                </span>
                            </template>
                        </el-table-column>
                    </el-table>
                </el-form>
            </div>
        </div>
        <div class="evaluate-footer-btns">
            <el-button @click="$emit('back')">返回上一步</el-button>
            <el-button type="primary" @click="handleApprove" v-if="!obj.isDetail">提交评定结果</el-button>
        </div>
    </el-dialog>
</template>
 
<script>
export default {
    name: "ApprovalDialog",
    props: {
        visible: {
            type: Boolean,
            default: false,
        },
        type: {
            type: String,
            default: () => '2',
        },
        obj: {
            type: Object,
            default: () => ({ isDetail: false }),
        },
    },
    data() {
        return {
            form: {
                reportCode: "",
                reportName: "",
            },
            assessmentTable1: [
                {
                    index: 1,
                    standard: '文献资料调查:全面性,系统性,编撰逻辑清晰,表达规范',
                    fullScore: 1,
                    selectedScore: 0,
                    rule: ''
                },
                {
                    index: 2,
                    standard: '专业/技术路线与方法:合理性、可行性;实验设计科学,能实现研究目标,方法先进、完整、可靠;',
                    fullScore: 2,
                    selectedScore: 0,
                    rule: ''
                },
                {
                    index: 3,
                    standard: '课题报告完成度高,预期研究结果是否具有技术价值的应用价值。风险识别:识别了潜在的技术风险、市场风险和管理风险。',
                    fullScore: 3,
                    selectedScore: 0,
                    rule: ''
                }
            ],
            assessmentTable2: [
                {
                    index: 1,
                    standard: '课题各标准性,报告的逻辑性:研究目标是否清晰、具体;研究工作内容合理性,是否围绕目标展开,是否具有结构性和系统性。',
                    fullScore: 3,
                    selectedScore: 0,
                    rule: ''
                },
                {
                    index: 2,
                    standard: '文献资料调查:全面性,系统性编辑逻辑清晰,表达规范',
                    fullScore: 2,
                    selectedScore: 0,
                    rule: ''
                },
                {
                    index: 3,
                    standard: '专业/技术路线与方法:合理性、可行性;实验设计科学,能实现研究目标,方法先进、完整、可靠;',
                    fullScore: 3,
                    selectedScore: 0,
                    rule: ''
                },
                {
                    index: 4,
                    standard: '实验过程组织性:团队工作运行顺畅,计划时间高效,样本准备的条件良好,实验进度高效,实验结果完成度高。',
                    fullScore: 2,
                    selectedScore: 0,
                    rule: ''
                },
                {
                    index: 5,
                    standard: '实验结果分析:实验科学规范,逻辑严密,过程完整无误。不存在无用流程,具有实际应用价值,结果的实际效果可对比分析。',
                    fullScore: 3,
                    selectedScore: 0,
                    rule: ''
                },
                {
                    index: 6,
                    standard: '课题报告完成度高,预期研究结果是否具有技术价值和应用价值。风险识别:识别了潜在的技术风险,市场风险和管理风险。',
                    fullScore: 2,
                    selectedScore: 0,
                    rule: ''
                }
            ],
            rules: {},
        };
    },
    computed: {
        currentAssessmentTable() {
            return this.type == 1 || this.type == '1' ? this.assessmentTable1 : this.assessmentTable2;
        },
        fullScore() {
            return this.type == 1 || this.type == '1'
                ? this.assessmentTable1.reduce((sum, item) => sum + (item.fullScore || 0), 0)
                : this.assessmentTable2.reduce((sum, item) => sum + (item.fullScore || 0), 0);
        },
        totalScore() {
            return this.currentAssessmentTable.reduce((sum, item) => sum + (item.selectedScore || 0), 0);
        },
        dialogTitle() {
            return this.type === "approve" ? "检测项评定" : "检测项评定详情";
        }
    },
    methods: {
        open() { },
        handleClose() {
            this.$emit("close");
        },
        getTableSummary(param) {
            const { columns } = param;
            const sums = [];
            columns.forEach((column, index) => {
                if (index === 0) {
                    sums[index] = '合计';
                } else if (index === 2) {
                    sums[index] = this.fullScore + '分';
                } else if (index === 3) {
                    sums[index] = this.totalScore + '分';
                } else {
                    sums[index] = '';
                }
            });
            return sums;
        },
        handleApprove() {
            this.$emit("approve", {
                ...this.form,
                assessmentTable: this.currentAssessmentTable,
                totalScore: this.totalScore
            });
        },
        tableSpanMethod({ row, column, rowIndex, columnIndex }) {
            // 评分规则列合并所有行
            if (columnIndex === 4) {
                if (rowIndex === 0) {
                    return [this.currentAssessmentTable.length, 1];
                } else {
                    return [0, 0];
                }
            }
            return [1, 1];
        },
    },
};
</script>
 
<style scoped lang="less">
.evaluate-dialog-layout {
    display: flex;
    flex-direction: row;
    min-height: 390px;
    height: 100%;
    align-items: stretch;
}
 
.evaluate-rule-panel {
    width: 200px;
    background: #fff;
    border-radius: 8px;
    padding: 24px 24px 0 24px;
    margin-right: 24px;
    font-size: 14px;
    color: #333;
    box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.06);
    border: 1px solid #ebeef5;
    display: flex;
    flex-direction: column;
    min-height: 373px;
    padding-top: 24px;
 
    .rule-title {
        font-weight: bold;
        font-size: 16px;
        margin-bottom: 10px;
        color: #222;
 
 
    }
 
    .rule-content {
        margin-bottom: 16px;
        line-height: 1.8;
        color: #444;
    }
 
    ol {
        padding-left: 18px;
        margin: 0;
    }
 
    li {
        margin-bottom: 8px;
    }
}
 
.evaluate-main-panel {
    flex: 1;
    background: #fff;
    border-radius: 8px;
    padding: 24px 24px 0 24px;
    display: flex;
    flex-direction: column;
    height: 100%;
 
    .evaluate-form {
        margin-bottom: 0;
        flex: 1;
        display: flex;
        flex-direction: column;
    }
}
 
.evaluate-footer-btns {
    display: flex;
    justify-content: center;
    gap: 20px;
    margin: 32px 0 18px 0;
}
 
.header-title {
    // display: flex;
    align-items: center;
    flex-wrap: wrap;
    margin-bottom: 20px;
    gap: 13px;
 
    .header-title-left {
        display: flex;
        align-items: center;
        gap: 13px;
        // margin-top: 38px;
 
        img {
            width: 12px;
            height: 19px;
        }
 
        div {
            flex-shrink: 0;
            font-weight: bold;
            font-size: 18px;
            color: #222222;
            line-height: 27px;
            font-family: "Source Han Sans CN Bold Bold";
 
            &:before {
                content: "*";
                color: #f56c6c;
                margin-right: 4px;
            }
        }
 
        span {
            flex-shrink: 0;
            font-weight: bold;
            font-size: 18px;
            color: #222222;
            line-height: 27px;
            font-family: "Source Han Sans CN Bold Bold";
        }
    }
 
    .header-title-left :first-child {
        margin-top: 0;
    }
}
</style>