<template>
|
<el-dialog
|
:visible.sync="dialogVisible"
|
title="课题评定详情"
|
width="70%"
|
@close="handleClose"
|
>
|
<el-form
|
:model="form"
|
inline
|
label-position="top"
|
:rules="rules"
|
ref="formRef"
|
>
|
<el-row :gutter="20">
|
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
<el-form-item label="报告编号" prop="reportNo" required>
|
<el-input v-model="form.reportNo" disabled placeholder="自动生成" />
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
<el-form-item label="报告名称" prop="reportName">
|
<el-input v-model="form.reportName" disabled placeholder="请输入" />
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form>
|
<div class="content-box">
|
<el-row :gutter="16">
|
<el-col
|
style="margin-top: 5px"
|
:xs="24"
|
:sm="24"
|
:md="24"
|
:lg="24"
|
:xl="24"
|
>
|
<Table
|
:total="0"
|
:height="null"
|
:data="criteriaList"
|
show-summary
|
:summary-method="getSummaries"
|
:span-method="arraySpanMethod"
|
>
|
<el-table-column type="index" label="序号" width="80" />
|
<el-table-column prop="criteria" label="规程型课题评定标准" />
|
<el-table-column prop="fullScore" label="满分值" width="100" />
|
<el-table-column label="评定分值" prop="score" width="200">
|
<template #default="{ row }">
|
<el-input-number
|
v-model="row.score"
|
:min="0"
|
:max="row.fullScore"
|
:step="1"
|
disabled
|
/>
|
</template>
|
</el-table-column>
|
<el-table-column prop="rule" label="创新型课题报告评分规则">
|
<template>
|
<div>
|
<div>1、规程型课题评定总分的满分为5分。</div>
|
<div>
|
2、某分项工作完成,但出现以下三种错误中的1种,则减1分:
|
</div>
|
<div>①有缺项、漏项;</div>
|
<div>②或不完整清晰;</div>
|
<div>③或工作效率人为拖延。</div>
|
<div>
|
3、不能完成某分项的全部工作,或课题不涉及该分项内容,则该分项评0分。
|
</div>
|
</div>
|
</template>
|
</el-table-column>
|
</Table>
|
</el-col>
|
</el-row>
|
</div>
|
<div class="assessed" v-if="evaluateInfo.status == 3">
|
<div>评定时间:{{ evaluateInfo.evaluateTime || "" }}</div>
|
<div>评定人:{{ evaluateInfo.evaluatePersonName || "" }}</div>
|
</div>
|
</el-dialog>
|
</template>
|
|
<script>
|
import { getDetailById, evaluate } from "../service.js";
|
export default {
|
name: "AssessmentDialog",
|
props: {
|
modelValue: {
|
type: Boolean,
|
default: false,
|
},
|
id: {
|
type: [String, Number],
|
default: "",
|
// required: true,
|
},
|
},
|
data() {
|
return {
|
dialogVisible: false,
|
form: {
|
reportNo: "",
|
reportName: "",
|
},
|
evaluateInfo: {},
|
rules: {
|
reportName: [
|
{ required: true, message: "请输入报告名称", trigger: "blur" },
|
],
|
},
|
criteriaList: [
|
{
|
criteria: "文献资料调查:全面性,系统性 编辑逻辑清晰,表达规范",
|
fullScore: 1,
|
score: 0,
|
},
|
{
|
criteria:
|
"专业/技术路线与方法:合理性、可行性;实验设计科学、能实现研究目标,方法先进、完整、可靠;",
|
fullScore: 2,
|
score: 0,
|
},
|
{
|
criteria:
|
"课题报告完成度高,预期研究结果果是否具有技术价值和应用价值。风险识别:识别了潜在的技术风险、市场风险和管理风险。",
|
fullScore: 3,
|
score: 0,
|
},
|
],
|
};
|
},
|
watch: {
|
modelValue: {
|
handler(val) {
|
this.dialogVisible = val;
|
if (val && this.id) {
|
this.fetchDetail();
|
}
|
},
|
immediate: true,
|
},
|
id(val) {
|
if (this.modelValue && val) {
|
this.fetchDetail();
|
}
|
},
|
},
|
methods: {
|
async fetchDetail() {
|
try {
|
const res = await getDetailById({ id: this.id });
|
if (res) {
|
this.evaluateInfo = { ...res };
|
this.form.reportNo = res.reportCode || "";
|
this.form.reportName = res.reportName || "";
|
// 详情回显分数
|
if (res.evaluateScore) {
|
if (
|
this.type === "detail" &&
|
typeof res.evaluateScore === "string"
|
) {
|
const scoreArr = res.evaluateScore
|
.split(",")
|
.map((s) => Number(s));
|
this.criteriaList.forEach((item, idx) => {
|
item.score = scoreArr[idx] || 0;
|
});
|
}
|
}
|
}
|
} catch (e) {
|
this.$message && this.$message.error("获取详情失败");
|
}
|
},
|
handleClose() {
|
this.$emit("update:modelValue", false);
|
this.$emit("close");
|
},
|
|
getSummaries(param) {
|
const { columns, data } = param;
|
const sums = [];
|
columns.forEach((column, index) => {
|
if (index === 0) {
|
sums[index] = "合计";
|
return;
|
}
|
const values = data.map((item) => Number(item[column.property]));
|
if (!values.every((value) => isNaN(value))) {
|
sums[index] = values.reduce((prev, curr) => {
|
const value = Number(curr);
|
if (!isNaN(value)) {
|
return prev + curr;
|
} else {
|
return prev;
|
}
|
}, 0);
|
sums[index] += " 分";
|
} else {
|
sums[index] = "";
|
}
|
});
|
return sums;
|
},
|
arraySpanMethod({ row, column, rowIndex, columnIndex }) {
|
if (columnIndex === 4 && rowIndex == 0) {
|
return {
|
rowspan: 6,
|
colspan: 1,
|
};
|
} else if (rowIndex !== 0 && columnIndex === 4) {
|
return [0, 0];
|
}
|
},
|
},
|
};
|
</script>
|
|
<style lang="less" scoped>
|
.content-box {
|
&-left {
|
margin-top: 5px;
|
display: flex;
|
flex-direction: column;
|
border: 1px solid #ebeef5;
|
border-radius: 8px 8px 0px 0px;
|
font-size: 12px;
|
|
&-th {
|
line-height: 40px;
|
background: #fafafa !important;
|
color: #909399;
|
padding: 0 10px;
|
font-weight: bold;
|
}
|
|
&-body {
|
padding: 0 10px;
|
line-height: 23px;
|
}
|
}
|
}
|
|
.assessed {
|
display: flex;
|
flex-wrap: wrap;
|
align-items: center;
|
gap: 25px;
|
margin-top: 20px;
|
}
|
</style>
|