<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>
|