Commit 0b6f3102 authored by wangxl's avatar wangxl

444

parent 454eb91b
......@@ -646,9 +646,6 @@ export default {
getBatchList (params) {
return fetch('/v1/science-admin/com-batch/getBatchList', params)
},
getCurrentYearTalentBatch (params) {
return fetch('/v1/science-admin/com-batch/getCurrentYearTalentBatch', params)
},
},
//系统管理接口
systemManage: {
......
......@@ -134,7 +134,7 @@ export default {
this.getListByPage()
},
getYear () {
this.$api.batch.getCurrentYearTalentBatch({ type: 2 }).then(({ data = {} }) => {
this.$api.batch.getCurrentYearBatch({ type: 2, systemType: getType(), timeType: 4 }).then(({ data = {} }) => {
if (data) {
this.isButten = data.disabled
this.description = data.description
......
......@@ -59,8 +59,6 @@ export default {
data () {
return {
selectedRowKeys: [],
// 选项卡
//panes: { count1: 0, count2: 0, count3: 0, count4: 0, count5: 0, },
form: this.$form.createForm(this, { name: 'advanced_search' }),
searchForm: {
auditType: 6,
......@@ -136,7 +134,7 @@ export default {
this.getListByPage()
},
getYear () {
this.$api.batch.getCurrentYearTalentBatch({ type: 2 }).then(({ data = {} }) => {
this.$api.batch.getCurrentYearBatch({ type: 2, systemType: getType(), timeType: 4 }).then(({ data = {} }) => {
if (data) {
this.isButten = data.disabled
this.description = data.description
......@@ -163,7 +161,6 @@ export default {
let pars = isEmptyParams({ auditType: 6, completed: 1, auditMethod: 5, reportYear: this.searchForm.reportYear });
this.$api.audit.getTalentAuditCount(pars).then(({ data = {} }) => {
if (data) {
this.panes = data
this.itemCount = [data.count1, data.count2, data.count3, data.count4, data.count5]
}
}).catch(() => { })
......
<template>
<div>
<table class="tab-content" style="width: 100%">
<tr>
<td class="bg-title">评审指标</td>
<td class="bg-title">评审指标选项</td>
<td class="bg-title">专家打分</td>
</tr>
<tr v-for="(item,index) in tableData" :key="'tr1'+index">
<td>{{ item.oneLevel }}</td>
<td>
{{ item.towLevel1 }}<br />
{{ item.towLevel2 }}<br />
{{ item.towLevel3 }}
</td>
<td style="text-align: center;">
<span v-if="item.order==1">{{ value.score1 }}</span>
<span v-if="item.order==2">{{ value.score2 }}</span>
<span v-if="item.order==3">{{ value.score3 }}</span>
<span v-if="item.order==4">{{ value.score4 }}</span>
<span v-if="item.order==5">{{ value.score5 }}</span>
<span v-if="item.order==6">{{ value.score6 }}</span>
<span v-if="item.order==7">{{ value.score7 }}</span>
</td>
</tr>
<tr>
<td class="bg-title" style="text-align: right;">是否推荐立项</td>
<td colspan="2">
<a-tag :color="'#87d068'" v-if="value.supportState==1"></a-tag>
<a-tag :color="'#f50'" v-if="value.supportState==0"></a-tag>
</td>
</tr>
<tr v-if="value.supportState!=null&&value.supportState==false">
<td style="text-align: right;">不推荐原因</td>
<td colspan="2" style="text-align: left;">
<div v-html="toTextarea(value.noSupportReason)"></div>
</td>
</tr>
<tr>
<td class="bg-title" style="text-align: right;">评审结果</td>
<td colspan="2">
<a-tag :color="'#87d068'" v-if="value.evaluationType==1">{{ evaluationTypeA }}</a-tag>
<a-tag :color="'#2db7f5'" v-if="value.evaluationType==2">{{ evaluationTypeB }}</a-tag>
<a-tag :color="'#f50'" v-if="value.evaluationType==3">{{ evaluationTypeC }}</a-tag>
</td>
</tr>
<tr>
<td style="text-align: right;">评审意见(是否存在科研被信问题?该项目存在的问题和不足及意见建议)</td>
<td colspan="2" style="text-align: left;">
<div v-html="toTextarea(value.remark)"></div>
</td>
</tr>
<tr>
<td style="text-align: right;">总得分</td>
<td colspan="2" style="text-align: left;">
<span>{{ value.totalScore }}</span>
</td>
</tr>
</table>
</div>
</template>
<script>
import { toTextarea, getEvaluationType } from '@/views/utils/common'
export default {
name: "scoreInfo",
components: {},
props: {
value: {
type: Object,
default () {
return null;
},
},
},
data () {
return {
tableData: [
{ order: 1, oneLevel: "1.特色与创新性、拟研究的科学问题的重要性或潜在应用价值(20分)", towLevel1: "A.好 (20-16)", towLevel2: "B.较好 (15-12)", towLevel3: "C.一般 (11-0)", score: 20, grade: null, },
{ order: 2, oneLevel: "2.立项依据的充分性和研究的科学价值(15分)", towLevel1: "A.好 (15-12) ", towLevel2: "B.较好 (11-9) ", towLevel3: " C.一般 (8-0)", score: 15, grade: null, },
{ order: 3, oneLevel: "3.研究内容的合理性和完整性(15分)", towLevel1: "A.合理完整 (15-12) ", towLevel2: "B.较合理完整 (11-9) ", towLevel3: " C.一般 (8-0)", score: 15, grade: null, },
{ order: 4, oneLevel: "4.预期目标及考核指标(15分)", towLevel1: "A.明确 (15-12) ", towLevel2: " B.较明确 (11-9) ", towLevel3: "C.一般 (8-0)", score: 15, grade: null, },
{ order: 5, oneLevel: "5.研究方案和技术路线的可行性(15分)", towLevel1: "A.可行 (15-12)", towLevel2: "B.较可行 (11-9) ", towLevel3: "C.一般 (8-0)", score: 15, grade: null, },
{ order: 6, oneLevel: "6.前期工作基础、支撑条件及主持人的科研能力(15分)", towLevel1: "A.好 (15-12) ", towLevel2: "B.较好 (11-9) ", towLevel3: " C.一般 (8-0)", score: 15, grade: null, },
{ order: 7, oneLevel: "7.组织运行管理与风险分析(5分)", towLevel1: "A.风险小 (5-4) ", towLevel2: "B.有一定风险 (3-2) ", towLevel3: " C.风险较大 (1-0)", score: 5, grade: null, },
],
};
},
computed: {
evaluationTypeA () {
return getEvaluationType(0)
},
evaluationTypeB () {
return getEvaluationType(1)
},
evaluationTypeC () {
return getEvaluationType(2)
},
},
created () {
},
methods: {
toTextarea,
},
};
</script>
<style scoped lang="less">
.app-content {
table {
table-layout: fixed;
width: 100%;
border: 1;
border-collapse: collapse;
}
table tr td,
th {
border: 1px solid #e8e8e8;
padding: 6px 6px;
color: rgba(0, 0, 0, 0.65);
}
table tr th {
text-align: center;
}
table tr {
th:first-child {
width: 4%;
}
th:nth-child(2) {
width: 6%;
}
th:nth-child(3) {
width: 8%;
}
th:nth-child(4) {
width: 18%;
}
th:nth-child(5) {
width: 6%;
}
th:nth-child(6) {
width: 6%;
}
th:nth-child(7) {
width: 40%;
}
}
table {
::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;
}
}
}
.none-bottom {
::v-deep .ant-col {
border-bottom: 0 !important;
}
}
</style>
ant-tabs
\ No newline at end of file
<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">专家打分</td>
</tr>
<tr v-for="(item, index) in tableData" :key="'data'+index" style="line-height: 25px">
<td>{{ item.oneLevel }}</td>
<td>
{{ item.towLevel1 }}<br />
{{ item.towLevel2 }}<br />
{{ item.towLevel3 }}
</td>
<td style="text-align: center;">
<a-form-model-item :prop="'score' + item.order" v-if="item.order==1">
<a-input-number v-model="value.score1" :min="0" :max="item.score" style="width: 60%" disabled="true" />
</a-form-model-item>
<a-form-model-item :prop="'score' + item.order" v-if="item.order==2">
<a-input-number v-model="value.score2" :min="0" :max="item.score" style="width: 60%" disabled="true" />
</a-form-model-item>
<a-form-model-item :prop="'score' + item.order" v-if="item.order==3">
<a-input-number v-model="value.score3" :min="0" :max="item.score" style="width: 60%" disabled="true" />
</a-form-model-item>
<a-form-model-item :prop="'score' + item.order" v-if="item.order==4">
<a-input-number v-model="value.score4" :min="0" :max="item.score" style="width: 60%" disabled="true" />
</a-form-model-item>
<a-form-model-item :prop="'score' + item.order" v-if="item.order==5">
<a-input-number v-model="value.score5" :min="0" :max="item.score" style="width: 60%" disabled="true" />
</a-form-model-item>
<a-form-model-item :prop="'score' + item.order" v-if="item.order==6">
<a-input-number v-model="value.score6" :min="0" :max="item.score" style="width: 60%" disabled="true" />
</a-form-model-item>
<a-form-model-item :prop="'score' + item.order" v-if="item.order==7">
<a-input-number v-model="value.score7" :min="0" :max="item.score" style="width: 60%" disabled="true" />
</a-form-model-item>
</td>
</tr>
<tr>
<td class="bg-title" style="text-align: right;">总分:</td>
<td colspan="2" style="text-align: left;padding-left: 12px;">{{Count()}}</td>
</tr>
<tr>
<td class="bg-title" style="text-align: right;">是否推荐立项</td>
<td colspan="2">
<a-form-model-item prop="supportState">
<a-radio-group v-model="value.supportState">
<a-radio :value="1"></a-radio>
<a-radio :value="0"></a-radio>
</a-radio-group>
</a-form-model-item>
</td>
</tr>
<tr v-if="value.supportState!=null&&value.supportState==false">
<td class="bg-title" style="text-align: right;">不推荐原因</td>
<td colspan="2">
<a-form-model-item prop="noSupportReason">
<a-textarea placeholder="不推荐原因" v-model="value.noSupportReason" :maxLength="1000" style="width: 80%; height: 120px; margin-top: 6px" />
</a-form-model-item>
</td>
</tr>
<tr>
<td class="bg-title" style="text-align: right;">评审结果</td>
<td colspan="2">
<a-form-model-item prop="evaluationType">
<a-radio-group v-model="value.evaluationType" disabled>
<a-radio :value="1">{{ evaluationTypeA }}</a-radio>
<a-radio :value="2">{{ evaluationTypeB }}</a-radio>
<a-radio :value="3">{{ evaluationTypeC }}</a-radio>
</a-radio-group>
</a-form-model-item>
</td>
</tr>
<tr>
<td class="bg-title" style="text-align: right;">评审意见(是否存在科研被信问题?该项目存在的问题和不足及意见建议)</td>
<td colspan="2">
<a-form-model-item prop="remark">
<a-textarea placeholder="评审意见" v-model="value.remark" :maxLength="1000" style="width: 80%; height: 120px; margin-top: 6px" disabled="true" />
</a-form-model-item>
</td>
</tr>
</table>
</div>
</template>
<script>
import { getEvaluationType } from "@/views/utils/common"
export default {
name: "scoreEdit",
components: {},
props: {
value: {
type: Object,
default () {
return null;
},
},
},
data () {
return {
tableData: [
{ order: 1, oneLevel: "1.特色与创新性、拟研究的科学问题的重要性或潜在应用价值(20分)", towLevel1: "A.好 (20-16)", towLevel2: "B.较好 (15-12)", towLevel3: "C.一般 (11-0)", score: 20, grade: null, },
{ order: 2, oneLevel: "2.立项依据的充分性和研究的科学价值(15分)", towLevel1: "A.好 (15-12) ", towLevel2: "B.较好 (11-9) ", towLevel3: " C.一般 (8-0)", score: 15, grade: null, },
{ order: 3, oneLevel: "3.研究内容的合理性和完整性(15分)", towLevel1: "A.合理完整 (15-12) ", towLevel2: "B.较合理完整 (11-9) ", towLevel3: " C.一般 (8-0)", score: 15, grade: null, },
{ order: 4, oneLevel: "4.预期目标及考核指标(15分)", towLevel1: "A.明确 (15-12) ", towLevel2: " B.较明确 (11-9) ", towLevel3: "C.一般 (8-0)", score: 15, grade: null, },
{ order: 5, oneLevel: "5.研究方案和技术路线的可行性(15分)", towLevel1: "A.可行 (15-12)", towLevel2: "B.较可行 (11-9) ", towLevel3: "C.一般 (8-0)", score: 15, grade: null, },
{ order: 6, oneLevel: "6.前期工作基础、支撑条件及主持人的科研能力(15分)", towLevel1: "A.好 (15-12) ", towLevel2: "B.较好 (11-9) ", towLevel3: " C.一般 (8-0)", score: 15, grade: null, },
{ order: 7, oneLevel: "7.组织运行管理与风险分析(5分)", towLevel1: "A.风险小 (5-4) ", towLevel2: "B.有一定风险 (3-2) ", towLevel3: " C.风险较大 (1-0)", score: 5, grade: null, },
],
remark: "",
supportState: null,
evaluationType: 0,
totalScore: 0,
disabled: true,
};
},
computed: {
evaluationTypeA () {
return getEvaluationType(0)
},
evaluationTypeB () {
return getEvaluationType(1)
},
evaluationTypeC () {
return getEvaluationType(2)
},
},
created () {
},
methods: {
Count () {
var s = 0.0;
for (var i = 1; i <= 7; i++) {
if (this.value['score' + i]) {
s += parseFloat(this.value['score' + i])
}
}
s = s.toFixed(1) * 10 / 10
this.value.totalScore = s
this.determineType()
return s
},
determineType () {
if (this.value.totalScore >= 80)
this.value.evaluationType = 1
else if (this.value.totalScore < 80 && this.value.totalScore >= 60)
this.value.evaluationType = 2
else
this.value.evaluationType = 3
},
},
};
</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;
padding: 4px;
}
.bg-title {
background-color: #f8fafc;
font-weight: bold;
text-align: center;
}
.target-value {
text-align: center;
}
</style>
\ No newline at end of file
<template>
<div style="height:75vh;overflow:auto" class="app-content">
<a-spin :spinning="loading" style="width: 100%;height: 100%;">
<div v-if="isShow" style="width: 100%;height: 100%;">
<div style="height: 40px;">
<a-tabs type="card" @change="callback" :activeKey='tabsActive'>
<a-tab-pane key="1" tab="评分"></a-tab-pane>
<a-tab-pane key="2" tab="详情"></a-tab-pane>
</a-tabs>
</div>
<div class="table-content" style="overflow: auto;height: calc(100% - 40px);">
<div v-show="tabsActive==='1'" style="height:100%;">
<div style="height:calc(100% - 40px);overflow: auto;" ref="main">
<div class="x_modal_content">
<a-form-model ref="form" :model="formData" :rules="rules" class="from-table font-line-space">
<score-edit v-model="formData" />
</a-form-model>
</div>
</div>
<div style="height:40px;width:100%;text-align:center;padding:4px 0px;background: #fafafa;border:1px solid #e8e8e8; border-width: 0px 1px 1px 1px;border-style: solid;border-color: #e8e8e8;">
<a-button @click="save" style="margin-right:16px">保存</a-button>
<a-button type="primary" @click="submit">提交</a-button>
<span style="color: red;">(注:提交后在规定时间内可多次修改)</span>
</div>
</div>
<div v-show="tabsActive==='2'" style="height:100%;overflow: auto;">
<project-info v-model="projectInfo" :tabsData.sync="tabsData" />
</div>
</div>
</div>
<div v-else style="width: 100%;height: 100%;">
<div style="height:calc(100% - 40px);overflow: auto;">
<div>
<p class="MsoNormal">
<span>&nbsp;</span>
</p>
<p class="MsoNormal" align="center" style="text-align:center;">
<b><span style="font-size:18.0pt;font-family:方正小标宋简体;">专家须知<span></span></span></b>
</p>
<p class="MsoNormal">
<span style="font-size:12.0pt;font-family:仿宋;">尊敬的专家:<span></span></span>
</p>
<p class="MsoNormal" style="text-indent:24.0pt;">
<span style="font-size:12.0pt;font-family:仿宋;">您好!感谢您参与云南省卫生健康委临床医学中心科研项目的评审工作。为确保评审顺利进行,现将相关事宜通知如下,请您务必仔细阅读并严格执行。<span></span></span>
</p>
<p class="MsoNormal" style="margin-left:0cm;text-indent:24.0pt;">
<span style="font-size:12.0pt;font-family:黑体;">一、</span><span style="font-size:12.0pt;font-family:黑体;">评审要求<span></span></span>
</p>
<p class="MsoNormal" style="text-indent:24.1pt;">
<b><span style="font-size:12.0pt;font-family:仿宋;">(一)</span></b><span style="font-size:12.0pt;font-family:仿宋;">根据评价指标,认真评阅本组所有申报项目并打分。由于申报专业的不同,其中可能会有部分跨专业的项目,请一并评审打分,切勿遗漏。撰写评审意见时,要详细评价项目并说明立项或不立项的主要理由。<span></span></span>
</p>
<p class="MsoNormal" style="text-indent:24.1pt;">
<b><span style="font-size:12.0pt;font-family:仿宋;">(二)</span></b><span style="font-size:12.0pt;font-family:仿宋;">若项目有不适宜公开的信息、数据或观点,或涉及境外机构、人员,请您从严审查审核。经评审确有可能危害国家安全或造成不良舆论和影响的项目,可评为“<span>0</span>”分并向委科教处及时反馈。<span></span></span>
</p>
<p class="MsoNormal" style="text-indent:24.0pt;">
<span style="font-size:12.0pt;font-family:黑体;">二、评审纪律<span></span></span>
</p>
<p class="MsoNormal" align="left" style="text-indent:24.1pt;">
<b><span style="font-size:12.0pt;font-family:仿宋;">(一)</span></b><span style="font-size:12.0pt;font-family:仿宋;">请严格遵守评审活动规则和工作纪律,实事求是、独立、客观、公正地评审,提供高质量的评审意见,为科技管理决策提供参考。发现与项目或申请者存在利益关系或其他可能影响公正性的关系时,要主动申明并回避。<span></span></span>
</p>
<p class="MsoNormal" align="left" style="text-indent:24.1pt;">
<b><span style="font-size:12.0pt;font-family:仿宋;">(二)</span></b><span style="font-size:12.0pt;font-family:仿宋;">严守保密规定,不得泄露项目内容及有关技术、商业秘密,不得与评审对象私下接触、联系、串通,不得索取或接受礼品、钱物、可能影响公正性的宴请或其他好处,不得剽窃、复制、泄露、引用或存留评审材料内容。<span></span></span>
</p>
<p class="MsoNormal" style="text-indent:24.0pt;">
<span style="font-size:12.0pt;font-family:黑体;">三、评审时间<span></span></span>
</p>
<p class="MsoNormal" style="text-indent:24.0pt;">
<span style="font-size:12.0pt;font-family:仿宋;">此次专家评审时间为:{{exportTime.expertStart + '至' + exportTime.expertEnd}},请务必于{{exportTime.expertEnd}}前提交评审结果,以免影响后续工作的开展。<span></span></span>
</p>
<p class="MsoNormal" style="text-indent:24.0pt;">
<span style="font-size:12.0pt;font-family:仿宋;">感谢您对我们工作的大力支持!如有未尽事宜,我们将另行通知。<span></span></span>
</p>
<p class="MsoNormal" style="text-indent:264.0pt;">
<span style="font-size:12.0pt;font-family:仿宋;">&nbsp;</span>
</p>
<p class="MsoNormal" style="text-align:right;text-indent:264pt;padding-right: 200px;">
<span style="font-size:12.0pt;font-family:仿宋;">云南省卫生健康委科教处<span></span></span>
</p>
<span style="font-size:12.0pt;font-family:仿宋;">
<div style="text-align:right;padding-right: 200px;">
<span style="font-size:12pt;">联系电话:</span><span style="font-size:12pt;">0871-67195167</span>
</div>
</span>
</div>
</div>
<div style="height:40px;width:100%;text-align:center;padding:4px 0px;background: #fafafa;border:1px solid #e8e8e8; ">
<a-checkbox @change="onReadChange">我已阅读</a-checkbox>&nbsp;
<a-button type="primary" @click="loadExpertInfo" :disabled="check.disabled">{{check.title}}</a-button>
</div>
</div>
</a-spin>
</div>
</template>
<script>
import { isEmptyParams, getEvaluationType } from "@/views/utils/common"
import moment from 'moment'
import projectInfo from '@/views/evaluation/project/components/projectInfo'
import edit from '@/views/evaluation/project/components/edit'
export default {
name: "score",
components: {
projectInfo, edit
},
props: {
value: {
type: String,
default: () => {
return null;
},
},
exportTime: {
expertStart: {
type: String,
default: () => {
return null;
},
},
expertEnd: {
type: String,
default: () => {
return null;
},
}
},
},
data () {
return {
loading: false,
isShow: false,
isExpertInfoLoad: false,
isProjectInfoLoad: false,
tabsActive: '1',
check: {
time: 5, title: '我已阅读', count: 5, disabled: false,
},
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, remark: null, supportState: null, projName: null, projNo: null,
},
rules: {
score1: { required: true, message: "*", trigger: "blur" },
score2: { required: true, message: "*", trigger: "blur" },
score3: { required: true, message: "*", trigger: "blur" },
score4: { required: true, message: "*", trigger: "blur" },
score5: { required: true, message: "*", trigger: "blur" },
score6: { required: true, message: "*", trigger: "blur" },
score7: { required: true, message: "*", trigger: "blur" },
score8: { required: true, message: "*", trigger: "blur" },
score9: { required: true, message: "*", trigger: "blur" },
score10: { required: true, message: "*", trigger: "blur" },
score11: { required: true, message: "*", trigger: "blur" },
score12: { required: true, message: "*", trigger: "blur" },
score13: { required: true, message: "*", trigger: "blur" },
score14: { required: true, message: "*", trigger: "blur" },
score15: { required: true, message: "*", trigger: "blur" },
score16: { required: true, message: "*", trigger: "blur" },
score17: { required: true, message: "*", trigger: "blur" },
score18: { required: true, message: "*", trigger: "blur" },
score19: { required: true, message: "*", trigger: "blur" },
score18: { required: true, message: "*", trigger: "blur" },
score19: { required: true, message: "*", trigger: "blur" },
additionalScore: { required: true, message: "*", trigger: "blur" },
recommendFunding: { required: true, message: "*", trigger: "blur" },
supportState: { required: true, message: "请选择是否推荐立项", trigger: "change" },
noSupportReason: { required: true, message: "请填写不推荐原因", trigger: "blur" },
evaluationType: { required: true, message: "*", trigger: "change" },
},
projectInfo: {
projName: '',
startDate: '',
endDate: '',
applyMoney: '',
projClassName: '',
appPersonName: '',
sex: '',
titleName: '',
degreeName: '',
specName: '',
jobUnit: '',
mobile: '',
address: '',
appUnitName: '',
linkName: '',
linkEmail: '',
linkTel: '',
knowledgeName: '',
projContent: '',
projTarget: '',
projKeywords: '',
// 合作单位
together: [],
// 项目组成员
members: [],
projDoc: null,
fileList: [],
auditList: [],
},
comBatch: { expertStart: '', expertEnd: '' },
tabsData: [
{ title: '全部', key: '0', isShow: true },
{ title: '项目基本信息', key: '1', isShow: true },
{ title: '绩效目标表', key: '2', isShow: true },
{ title: '项目经费预算表', key: '3', isShow: true },
{ title: '申请书正文', key: '4', isShow: true },
{ title: '附件信息', key: '5', isShow: true },
{ title: '项目审核记录', key: '6', isShow: true },
],
};
},
computed: {
},
created () {
this.getAssignExpertById()
this.getYear()
this.countStart()
},
methods: {
moment,
getYear () {
this.$api.batch.getCurrentYearBatch({ type: 5, systemType: getType(), timeType: 1 }).then(({ data = {} }) => {
if (data) {
this.comBatch = data
}
}).catch(() => { this.loading = false })
},
countStart () {
this.check.disabled = true
this.check.title = '下一步'
},
onReadChange (e) {
if (e.target.checked)
this.check.disabled = false
else
this.check, disabled = true
},
loadExpertInfo () {
this.isShow = true
if (!this.isExpertInfoLoad)
this.loading = false
},
getAssignExpertById () {
if (!!this.value) {
this.loading = true
this.$api.projectAssign.getAssignExpertById({ id: this.value }).then(({ data = {} }) => {
if (data) {
this.formData = data
this.getProjectInfoById(data.projId)
this.isExpertInfoLoad = true
this.loading = false
} else
this.$emit('close', 'error')
}).catch(() => {
this.$message.warn('500 Internal Server Error!')
this.$emit('close', 'error')
})
}
},
getProjectInfoById (id) {
this.$api.project.getProjectInfoById({ id: id }).then(({ data = {} }) => {
if (data) {
this.projectInfo = data
this.formData.projName = data.projName
this.formData.appUnitName = data.appUnitName
this.formData.appPersonName = data.appPersonName
this.formData.applyFunding = data.govFunding
this.formData.recommendFunding = data.govFunding
this.isProjectInfoLoad = true
this.loading = false
} else
this.$emit('close', 'error')
}).catch(() => {
this.$message.warn('500 Internal Server Error!')
this.$emit('close', 'error')
})
},
callback (key) {
this.tabsActive = key
},
changeScroll () {
this.$refs.main.scrollTop = document.getElementsByClassName('x_modal_content')[0].offsetHeight
},
save () {
if (this.checkInfo()) {
this.loading = true
if (!this.formData.auditState || this.formData.auditState == 0)
this.formData.auditState = 1
let pars = isEmptyParams(this.formData)
let par = { ...pars }
this.$api.projectAssign.expertEvaluation(par).then(({ data = {} }) => {
if (data) {
this.$message.success('保存成功')
this.$emit('close', 'save')
}
this.loading = false
}).catch(() => { this.loading = false })
} else {
this.$message.warn('请至少填写评审意见后再保存!')
}
},
checkInfo () {
if (!!!this.formData.totalScore && !!!this.formData.remark) {
return false
} else {
return true
}
},
submit () {
this.$refs.form.validate(valid => {
if (valid) {
this.loading = true
this.formData.auditState = 2
let pars = isEmptyParams(this.formData)
let par = { ...pars }
this.$api.projectAssign.expertEvaluation(par).then(({ data = {} }) => {
if (data) {
this.$message.success('提交成功')
this.$emit('close', 'submit')
}
this.loading = false
}).catch(() => { this.loading = false })
} else {
this.tabsActive = '1'
this.$message.error('评审信息未填写完全!')
this.changeScroll()
}
})
},
},
};
</script>
<style scoped lang="less">
::v-deep .ant-spin-container {
width: 100%;
height: 100%;
}
.app-content {
::v-deep.ant-spin-nested-loading .ant-spin-container {
height: 100%;
}
.table-content {
border-width: 0px 1px 0px 1px;
border-style: solid;
border-color: #f0f0f0;
padding: 4px 4px 0px 4px;
}
::v-deep.ant-tabs .ant-tabs-bar {
margin: 0 !important;
}
::v-deep
.ant-tabs
.ant-tabs-bar
.ant-tabs-nav-container
.ant-tabs-nav-wrap
.ant-tabs-nav-scroll
.ant-tabs-nav
.ant-tabs-tab {
min-width: 160px !important;
text-align: center;
}
}
</style>
<template>
<div style="height:70vh;overflow:auto" class="app-content from-table font-line-space">
<a-spin :spinning="loading" style="width: 100%;height: 100%;">
<score-info v-model="formData" />
</a-spin>
</div>
</template>
<script>
import info from '@/views/evaluation/talent/components/info'
import { toTextarea } from '@/views/utils/common'
export default {
name: "scoreView",
components: {
info
},
props: {
value: {
type: String,
default: () => {
return null;
},
},
},
data () {
return {
formData: { id: null, projId: null, expertId: null, expertName: null, projectBasis: null, academicValue: null, innovation: null, researchPlan: null, expectedResults: null, totalScore: null, remark: null, projName: null, projNo: null, },
loading: false,
};
},
computed: {
evaluationTypeA () {
return getEvaluationType(0)
},
evaluationTypeB () {
return getEvaluationType(1)
},
evaluationTypeC () {
return getEvaluationType(2)
},
},
created () {
this.getAssignExpertById()
},
methods: {
getAssignExpertById () {
if (!!this.value) {
this.loading = true
this.$api.projectAssign.getAssignExpertById({ id: this.value }).then(({ data = {} }) => {
if (data) {
this.formData = data
this.loading = false
} else
this.$emit('close', 'error')
}).catch(() => {
this.$message.warn('500 Internal Server Error!')
this.$emit('close', 'error')
})
}
},
toTextarea,
},
};
</script>
......@@ -2,225 +2,213 @@
<div class="app-content">
<a-form :form="form" :model="searchForm" layout="inline" class="search_form">
<a-form-item>
<a-input placeholder="身份证号" v-model="searchForm.certId" :maxLength="100" style="width: 180px" />
<a-input placeholder="项目名称" v-model="searchForm.projName" :maxLength="100" style="width: 160px" />
</a-form-item>
<a-form-item>
<a-input placeholder="姓名" v-model="searchForm.personName" :maxLength="100" style="width: 180px" />
<a-input placeholder="申请编号" v-model="searchForm.appNo" :maxLength="100" style="width: 160px" />
</a-form-item>
<a-form-item>
<a-button type="primary" icon="search" @click="search">搜索</a-button>
<a-button icon="reload" style="margin-left: 10px" @click="reset" class="bt-normal">重置</a-button>
<a-tag color="#108ee9" style="margin-left: 10px" @click="previewFile">查看专家评分标准</a-tag>
</a-form-item>
</a-form>
<div style="width:100%">
<div style="display: inline-block;;width:50%">
<btn-group :data="tabDate" :itemCount="itemCount" v-model="activekey" @change="callback" />
</div>
<div style="display: inline-block;width:50%;text-align: right;">
<a-button type="primary" @click="batchAudit" style="margin-right: 8px;" v-if="isBatchButten">批量审核</a-button>
<a-button type="primary" @click="exportData" icon="download">Excel</a-button>
</div>
</div>
<a-divider style="height: 1px; background-color: #e8e8e8;" />
<span class="form-description" v-if="description"> ※ 审核时间:{{ description }}</span>
<a-table :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" :dataSource="tableData" :columns="columns" :scroll="{ x: 'max-content' }" rowKey="id" :pagination="false" :loading="loading">
<template slot="talentInfo" slot-scope="record">
<a @click="recordClick(record, 'view')">{{record.personName}}</a>
<div class="submit-btn">
<a-button type="primary" @click="exportData">导出Excel</a-button>
<span class="form-description">※ 注:保存评审内容后,请及时提交! 专家评分时间:{{description}}</span>
</div>
<a-table :dataSource="tableData" :columns="columns" rowKey="id" :pagination="false" :loading="loading">
<template slot="projectName" slot-scope="record">
<a @click="recordClick(record,'pView')">{{record.projName}}</a>
</template>
<template slot="expertEvaluation" slot-scope="record">
<a-tag :color="evaluationColor(record)">{{evaluationText(record)}}</a-tag>
</template>
<template slot="projClassInfo" slot-scope="record">
{{ record.projClass == 1 ? "一般项目" : "重点项目" }}
</template>
<template slot="option" slot-scope="record">
<a-button type="link" size="small" @click="recordClick(record, 'view')">查看</a-button>
<a-button type="link" size="small" v-if="record.auditResult == 1" @click="recordClick(record, 'audit')">审核</a-button>
<a-button type="link" size="small" v-if="!!record.auditState && record.auditState == 2" @click="recordClick(record,'view')">查看</a-button>
<a-button type="link" size="small" v-if="isButten" @click="recordClick(record,'score')">评分</a-button>
</template>
<template slot="supportState" slot-scope="record">
{{ record.supportState!=null?(record.supportState == 1 ? "是" : "否"):"" }}
</template>
</a-table>
<a-pagination v-if="pagination.total > 0" :total="pagination.total" show-size-changer show-quick-jumper v-model="pagination.pageIndex" :page-size="pagination.pageSize" :page-size-options="pagination.pageSizeOptions" @showSizeChange="showSizeChange" @change="change" :showTotal="() => `共 ${pagination.total} 条`" />
<a-modal v-model="visibleAudit" v-if="visibleAudit" title="审核" :footer="null" width="94%" :dialog-style="{ top: '8%' }" destroyOnClose :maskClosable="false">
<audit v-model="id" :objId="objectId" @close="closeWindow" @changeScroll="() => {this.$refs.s_modal.changeScroll()}"></audit>
<a-modal v-model="scoreViewVisible" title="专家评分表" width="90%" :dialog-style="{ top: '5%' }" :footer="null" destroyOnClose>
<score-view v-model="id" @close="() => this.scoreViewVisible = false" />
</a-modal>
<a-modal v-model="scoreVisible" title="专家评分" width="90%" :dialog-style="{ top: '5%' }" :footer="null" destroyOnClose>
<score v-model="id" :exportTime="exportTime" :totalFunding="totalFunding" @close="closeWindow" ref="scoreEdit" />
</a-modal>
<a-modal v-model="visibleBatch" v-if="visibleBatch" title="批量审核" :footer="null" width="700px" :dialog-style="{ top: '15%' }" destroyOnClose :maskClosable="false">
<batch-audit :idList="selectedRowKeys" @close="closeWindow" />
<a-modal v-model="visibleStandard" title="专家评分标准" width="1000px" :dialog-style="{ top: '5%' }" :footer="null" destroyOnClose>
<pdf-view v-model="url.downloadUrl" :fileName="url.fileDownload"></pdf-view>
</a-modal>
<a-modal v-model="visibleView" title="查看" width="94%" :footer="null" :dialog-style="{ top: '8%' }" destroyOnClose :maskClosable="false">
<talent-view v-model="id" @close="closeWindow" />
<a-modal v-model="visibleView" v-if="visibleView" title="项目详情" width="94%" :footer="null" :dialog-style="{ top: '8%' }" destroyOnClose :maskClosable="false">
<project-view v-model="projectId" @close="() => this.visibleView = false" />
</a-modal>
</div>
</template>
<script>
import { isEmptyParams, filterExportExcelData, tableColumnsName } from "@/views/utils/common"
import talentView from "@/views/report/talent/components/talentView"
import batchAudit from '@/views/audit/talent/batchAudit'
import audit from '@/views/audit/talent/audit'
import { getType } from '@/views/utils/auth'
import moment from 'moment'
import { isEmptyParams, filterExportExcelData, tableColumnsName, getEvaluationType } from '@/views/utils/common'
import score from '@/views/evaluation/project/components/score'
import scoreView from '@/views/evaluation/project/components/scoreView'
import projectView from '@/views/evaluation/project/components/projectView'
import pdfView from '@/views/components/common/pdfView'
export default {
name: "talentAudit",
name: "expertEvaluation",
components: {
talentView, audit, batchAudit
projectView, score, scoreView, pdfView
},
data () {
return {
selectedRowKeys: [],
// 选项卡
//panes: { count1: 0, count2: 0, count3: 0, count4: 0, count5: 0, },
form: this.$form.createForm(this, { name: 'advanced_search' }),
searchForm: {
auditType: 6,
auditResult: 1,
certId: null,
personName: null,
reportYear: null,
auditType: 6,
},
activekey: '1',
tabDate: [
{ key: "1", tab: "待审核" },
{ key: "10", tab: "已通过" },
{ key: "30", tab: "返回修改" },
{ key: "20", tab: "未通过" },
{ key: "", tab: "所有" },
],
itemCount: [0, 0, 0, 0, 0],
searchForm: { projName: null, appNo: null, assignYear: null, personId: null, systemType: getType(), isShow: 1 },
tableData: [],
columns: [
{ title: '申报年度', dataIndex: 'reportYear', align: 'center' },
{ title: '申报单位', dataIndex: 'appUnitName', align: 'center' },
{ title: "身份证号", dataIndex: 'certId', align: 'center' },
{ title: '姓名', scopedSlots: { customRender: 'talentInfo' }, align: 'center' },
{ title: '性别', dataIndex: 'sex', align: 'center' },
{ title: '专业', dataIndex: 'professionName', align: 'center' },
{ title: '职称', dataIndex: 'titleName', align: 'center' },
{ title: '审核状态', dataIndex: 'auditResultName', align: 'center' },
{ title: '操作', scopedSlots: { customRender: 'option' }, align: 'center', fixed: 'right', width: 180, },
{ title: '申请编号', dataIndex: 'appNo', align: 'center' },
{ title: "项目名称", scopedSlots: { customRender: 'projectName', colName: 'projName' }, align: 'left' },
{ title: "项目类别", scopedSlots: { customRender: 'projClassInfo' }, align: 'center', width: 80 },
{ title: '评分', dataIndex: 'totalScore', align: 'center' },
{ title: '评审结果', scopedSlots: { customRender: 'evaluationType' }, align: 'center' },
{ title: '是否推荐立项支持', scopedSlots: { customRender: 'supportState' }, align: 'center' },
{ title: '评审状态', scopedSlots: { customRender: 'expertEvaluation', colName: 'gradeScore' }, align: 'center' },
{ title: '操作', scopedSlots: { customRender: 'option' }, align: 'center', fixed: 'right', width: 120, },
],
pagination: {
pageIndex: 1,
pageSize: this.$defaultPageSize,
total: 0,
pageSizeOptions: this.$defaultPageSizeOptions,
},
loading: false,
// 弹窗标志
visibleAudit: false,
visibleView: false,
visibleBatch: false,
isBatchButten: true,
isButten: false,
pagination: { pageIndex: 1, pageSize: 50, total: 0, pageSizeOptions: this.$defaultPageSizeOptions, },
loading: true,
description: '',
isButten: false,
id: null,
objectId: null,
};
visibleView: false,
scoreVisible: false,
scoreViewVisible: false,
projectId: null,
url: {
downloadUrl: '/downloadFile/20250108.pdf',
fileDownload: '专家评分标准.pdf',
},
visibleStandard: false,
exportTime: { expertStart: null, expertEnd: null },
totalFunding: 0.00,
}
},
created () {
this.getYear()
},
methods: {
onSelectChange (selectedRowKeys) {
this.selectedRowKeys = selectedRowKeys;
},
search () {
this.id = null
this.objectId = null
this.selectedRowKeys = []
this.pagination.pageIndex = 1
this.getListByPage();
},
reset () {
this.id = null
this.objectId = null
this.selectedRowKeys = []
this.searchForm.certId = null
this.searchForm.personName = null
this.searchForm.knowledgeId = null
this.pagination.pageIndex = 1
this.getListByPage()
},
moment,
getYear () {
this.$api.batch.getCurrentYearTalentBatch({ type: 2 }).then(({ data = {} }) => {
this.$api.batch.getCurrentYearBatch({ type: 5, systemType: getType(), timeType: 4 }).then(({ data = {} }) => {
if (data) {
this.isButten = data.disabled
this.description = data.description
this.searchForm.reportYear = data.year
this.exportTime.expertStart = data.expertStart
this.exportTime.expertEnd = data.expertEnd
this.searchForm.assignYear = data.year
this.getListByPage()
}
}).catch(() => { })
}).catch(() => { this.loading = false })
},
getListByPage () {
this.getCount()
this.loading = true;
let pars = isEmptyParams(this.searchForm);
let par = { ...pars, pageIndex: this.pagination.pageIndex, pageSize: this.pagination.pageSize, }
this.$api.audit.getAuditListByPage(par).then(({ data = {} }) => {
this.searchForm.systemType = getType()
let pars = isEmptyParams(this.searchForm)
let par = { ...pars, pageIndex: this.pagination.pageIndex, pageSize: this.pagination.pageSize }
this.$api.projectAssign.getAuditListByPage(par).then(({ data = {} }) => {
if (data) {
const { dataList = [], total = 0 } = data
this.pagination.total = total
this.tableData = dataList
this.loading = false
}
}).catch(() => { this.loading = false })
},
getCount () {
let pars = isEmptyParams({ auditType: 6, reportYear: this.searchForm.reportYear, completed: 1 });
this.$api.audit.getTalentAuditCount(pars).then(({ data = {} }) => {
if (data) {
this.panes = data
this.itemCount = [data.count1, data.count2, data.count3, data.count4, data.count5]
this.pagination.total = total
}
}).catch(() => { })
},
change () {
this.getListByPage();
this.loading = false
}).catch(() => {
this.loading = false
})
},
showSizeChange (current, pageSize) {
this.pagination.pageIndex = current
this.pagination.pageSize = pageSize
this.getListByPage()
},
closeWindow (value) {
if (value === 'audit') {
this.getListByPage()
this.id = null
this.objectId = null
this.selectedRowKeys = []
this.visibleView = false
this.visibleAudit = false
this.visibleBatch = false
} else if (value === 'error') {
this.id = null
this.objectId = null
this.selectedRowKeys = []
this.visibleView = false
this.visibleAudit = false
this.visibleBatch = false
}
change (current, pageSize) {
this.pagination.pageIndex = current
this.pagination.pageSize = pageSize
this.getListByPage()
},
search () {
this.pagination.pageIndex = 1
this.getListByPage()
},
reset () {
this.searchForm = { projName: null, projNo: null, assignYear: null, systemType: getType(), isShow: 1 }
this.pagination.pageIndex = 1
this.getListByPage()
},
recordClick (record, type) {
if (type === 'view') {
this.id = record.auditObjectId
this.visibleView = true
} else if (type === 'audit') {
this.id = record.id
this.objectId = record.auditObjectId
this.visibleAudit = true
} else if (type === 'taskView') {
this.selectProjId = record.projId
this.scoreViewVisible = true
} else if (type === 'score') {
this.id = record.id
this.totalFunding = record.totalFunding
this.scoreVisible = true
} else if (type === 'pView') {
this.projectId = record.projId
this.visibleView = true
}
},
batchAudit () {
if (!!this.selectedRowKeys && this.selectedRowKeys.length > 0) {
this.visibleBatch = true
closeWindow (value) {
if (value === 'save') {
this.getListByPage()
} else if (value === 'submit') {
this.scoreVisible = false
this.getListByPage()
} else if (value === 'error') {
this.scoreVisible = false
}
else
this.$message.error('请选择项目!')
},
callback (key) {
if (key == '1') {
this.isBatchButten = true
} else
this.isBatchButten = false
this.searchForm.auditResult = key;
this.getListByPage()
},
exportData () {
this.$ToDoExcel(`人才评分列表`, tableColumnsName(this.columns), filterExportExcelData(this.columns, this.tableData))
},
evaluationColor (record) {
let color = ''
switch (record.auditState) {
case 0:
color = '#f50';
break;
case 1:
color = '#f50';
break;
case 2:
color = '#87d068';
break;
}
return color
},
evaluationText (record) {
let text = ''
switch (record.auditState) {
case 0:
text = '未评审';
break;
case 1:
text = '已保存';
break;
case 2:
text = '已提交';
break;
}
return text
},
previewFile () {
this.visibleStandard = true
},
}
};
</script>
</script>
\ No newline at end of file
......@@ -98,7 +98,7 @@ export default {
},
methods: {
getYear () {
this.$api.batch.getCurrentYearTalentBatch({ type: 1 }).then(({ data = {} }) => {
this.$api.batch.getCurrentYearBatch({ type: 1, systemType: getType(), timeType: 4 }).then(({ data = {} }) => {
if (data) {
this.isButten = data.disabled
this.description = data.description
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment