Files
UNION_HUTB/target/classes/static/components/proposal/ProposalInfo.vue
T
2026-09-09 09:14:28 +08:00

568 lines
22 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<el-tabs v-model="activeName" v-loading="loading" tab-position="top">
<el-tab-pane label="提案基础信息" name="1">
<el-descriptions border>
<el-descriptions-item label="提案名称" span="3">
<div style="font-weight:bold;">
{{ viewData.proposalName }}
</div>
</el-descriptions-item>
<el-descriptions-item label="提案编号">{{ viewData.proposalCode }}</el-descriptions-item>
<el-descriptions-item label="提案人">{{
viewData.createUserName + '-' + viewData.loginname
}}
</el-descriptions-item>
<el-descriptions-item label="提案时间">{{ viewData.createTime }}</el-descriptions-item>
<el-descriptions-item label="教代会届次"> {{ viewData.meetingName || '暂无' }}</el-descriptions-item>
<el-descriptions-item label="提案人工会">{{ viewData.unionName }}</el-descriptions-item>
<el-descriptions-item :label="viewData.mannerCode!=='W03'?'代表团名称':'委员会名称'">
{{ viewData.mannerCode !== 'W03' ? viewData.delegationName : viewData.committeeName }}
</el-descriptions-item>
<el-descriptions-item label="提案类型">{{ viewData.typeName }}</el-descriptions-item>
<!-- <el-descriptions-item label="提案方式" >{{ viewData.mannerName }}</el-descriptions-item>-->
<el-descriptions-item label="建议落实部门" span="2">{{ viewData.implementUnitName }}</el-descriptions-item>
<el-descriptions-item label="案由" span="3">
<div class="text-left" v-html="viewData.brief"></div>
</el-descriptions-item>
<el-descriptions-item label="建议措施" span="3">
<div class="text-left" v-html="viewData.measures"></div>
</el-descriptions-item>
<el-descriptions-item label="签&emsp;&emsp;字" span="3">
<el-image v-if="viewData.createUserSign" :src="viewData.createUserSign" class="item-sign"
fit="contain"></el-image>
<span v-else></span>
</el-descriptions-item>
</el-descriptions>
<file-upload v-if="viewData.files&&viewData.files.length"
:files="viewData.files" view></file-upload>
<slot name="seconded"></slot>
</el-tab-pane>
<el-tab-pane v-if="viewData.seconded" label="附议信息" name="2">
<el-table :data="viewData.seconded" border>
<el-table-column label="姓名" prop="username"></el-table-column>
<el-table-column label="单位" prop="unitname"></el-table-column>
<el-table-column label="邀请时间" prop="inviteTime"></el-table-column>
<el-table-column label="附议时间" prop="secondedTime"></el-table-column>
<el-table-column label="附议结果" prop="isAgree">
<template slot-scope="{row}">
<template v-if="row.isAgree==null">
<span class="text-muted">未附议</span>
</template>
<template v-else>
<span v-if="row.isAgree" class="text-success">同意</span>
<span v-else class="text-danger">拒绝</span>
</template>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="附议人签字" prop="signData">
<template slot-scope="{row}">
<el-image v-if="row.signData" :src="row.signData" class="item-sign" fit="contain"></el-image>
<span v-else>暂无</span>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane v-if="viewData.delegationAudit&&viewData.delegationAudit.length>0" label="团长审核" name="3">
<el-descriptions border>
<template v-for="(o,i) in viewData.delegationAudit">
<el-descriptions-item label="审核人">{{ o.username + '-' + o.loginName }}</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ o.auditTime }}</el-descriptions-item>
<el-descriptions-item label="审核结果">
{{ o.flag ? '通过' : '退回' }}
</el-descriptions-item>
<el-descriptions-item label="审核意见" span="3">{{ o.opinion }}</el-descriptions-item>
<el-descriptions-item label="团长签字" span="3">
<template>
<image v-if="o.auditSign" :src="o.auditSign " class="item-sign" fit="contain"></image>
<span v-else>暂无</span>
</template>
</el-descriptions-item>
</template>
</el-descriptions>
</el-tab-pane>
<el-tab-pane v-if="viewData.membersOpinions&&viewData.membersOpinions.length>0" label="委员会成员意见" name="4">
<template v-for="item in viewData.membersOpinions">
<vi-title title="委员会成员意见"></vi-title>
<el-form class="item-form" label-position="left" label-suffix=":" label-width="80px">
<el-row gutter="60">
<el-col :span="18">
<el-form-item label="审核人">{{ item.username }}({{ item.loginName }})</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="审核时间">{{ item.auditTime }}</el-form-item>
</el-col>
</el-row>
<el-form-item label="立案意见">{{ item.dictName }}</el-form-item>
<el-form-item label="审核意见">{{ item.opinion }}</el-form-item>
<el-form-item v-if="item.auditSign" label="签&emsp;&emsp;字">
<el-image :src="item.auditSign" class="item-sign" fit="contain"></el-image>
<span v-else>暂无</span>
</el-form-item>
</el-form>
</template>
</el-tab-pane>
<el-tab-pane v-if="viewData.caseAudit" label="提案委员会立案" name="5">
<el-descriptions border>
<el-descriptions-item label="审核人">
{{ viewData.caseAudit.username + '-' + viewData.caseAudit.loginName }}
</el-descriptions-item>
<el-descriptions-item label="审核结果">
{{ viewData.resultName }}
{{ viewData.determineTypeCode ? '(' + viewData.laLevelName + ')' : '' }}
</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ viewData.caseAudit.auditTime }}</el-descriptions-item>
<el-descriptions-item v-if="hostUnit!=''" label="承办单位" span="3">
{{ hostUnit }}主办),
{{ helpUnit }}协办
</el-descriptions-item>
<el-descriptions-item v-if="viewData.resultCode!=='notGive'" label="承办单位" span="3">
<template v-for="(item,index) in viewData.undertake">
{{ item.unitName }}
({{ item.undertakeType === 1 ? '主办' : '协办' }})
{{ index + 1 === viewData.undertake.length ? '' : '、' }}
</template>
</el-descriptions-item>
<el-descriptions-item label="审核意见" span="3">{{ viewData.caseAudit.opinion }}</el-descriptions-item>
<el-descriptions-item label="签字" span="3">
<el-image v-if="viewData.caseAudit.auditSign"
:src="viewData.caseAudit.auditSign"
fit="contain"
style="width: 300px; height: 100px"></el-image>
<span v-else>暂无</span>
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane v-if="viewData.underTakeFirstOpinion&&viewData.underTakeFirstOpinion.length>0" label="承办单位初步意见"
name="6">
<el-descriptions border>
<template v-for="(o,i) in viewData.underTakeFirstOpinion">
<el-descriptions-item label="承办单位">{{ o.underTakeName }}</el-descriptions-item>
<el-descriptions-item label="时间">{{ o.opionTime }}</el-descriptions-item>
<el-descriptions-item label="审核结果">
{{ o.canTake ? '可以承办' : '无法承办' }}
</el-descriptions-item>
<el-descriptions-item label="意见" span="3">{{ o.opinion }}</el-descriptions-item>
</template>
</el-descriptions>
</el-tab-pane>
<!--是否开启执委会建议环节-->
<template v-if="proposal.enableState.some(v=>v.stateCode===310)">
<el-tab-pane v-if="viewData.executorReadOpinion && viewData.executorReadOpinion.length>0" label="执委会审核" name="7">
<template v-if="viewData.executorReadOpinion && viewData.executorReadOpinion.length>0">
<el-descriptions :column="3" border>
<template v-for="(o,i) in viewData.executorReadOpinion">
<el-descriptions-item label="审核人">{{ o.username }}</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ o.auditTime }}</el-descriptions-item>
<el-descriptions-item label="建议立案结果">{{ o.dictName }}</el-descriptions-item>
<el-descriptions-item label="审核意见" span="4">{{ o.opinion }}</el-descriptions-item>
<el-descriptions-item label="执委会签字" span="4">
<el-image v-if="o.auditSign"
:src="o.auditSign"
fit="contain"
style="width: 300px; height: 100px"></el-image>
<span v-else>暂无</span>
</el-descriptions-item>
</template>
</el-descriptions>
</template>
<template v-else>
null~
</template>
</el-tab-pane>
</template>
<!--是否开启校领导建议环节-->
<template v-if="proposal.enableState.some(v=>v.stateCode===320)">
<el-tab-pane v-if="viewData.branchLeaderOpinion && viewData.branchLeaderOpinion.length>0" label="分管校领导审批立案"
name="8">
<template v-if="viewData.branchLeaderOpinion && viewData.branchLeaderOpinion.length>0">
<el-descriptions :column="2" border class="wrap-table">
<template v-for="(o,i) in viewData.branchLeaderOpinion">
<el-descriptions-item label="审批人">{{ o.username }}</el-descriptions-item>
<el-descriptions-item label="审批时间">{{ o.auditTime }}</el-descriptions-item>
<!-- <el-descriptions-item label="建议立案结果">{{ o.dictName }}</el-descriptions-item>-->
<el-descriptions-item label="审批意见" span="4">{{ o.opinion }}</el-descriptions-item>
<el-descriptions-item label="分管校领导签字" span="4">
<el-image v-if="o.auditSign"
:src="o.auditSign"
fit="contain"
style="width: 300px; height: 100px"></el-image>
<span v-else>暂无</span>
</el-descriptions-item>
</template>
</el-descriptions>
</template>
<template v-else>
null~
</template>
</el-tab-pane>
</template>
<!--是否开启书记校长建议环节-->
<template v-if="proposal.enableState.some(v=>v.stateCode===330)">
<el-tab-pane v-if="viewData.secretaryOpinion && viewData.secretaryOpinion.length>0" label="校长、书记审阅"
name="9">
<template v-if="viewData.secretaryOpinion && viewData.secretaryOpinion.length>0">
<el-descriptions :column="2" border>
<template v-for="(o,i) in viewData.secretaryOpinion">
<el-descriptions-item label="审阅人">{{ o.username }}</el-descriptions-item>
<el-descriptions-item label="审阅时间">{{ o.auditTime }}</el-descriptions-item>
<!-- <el-descriptions-item label="建议立案结果">{{ o.dictName }}</el-descriptions-item>-->
<el-descriptions-item label="审阅意见" span="4">{{ o.opinion }}</el-descriptions-item>
<el-descriptions-item label="校长、书记签字" span="4">
<el-image v-if="o.auditSign"
:src="o.auditSign"
fit="contain"
style="width: 300px; height: 100px"></el-image>
<span v-else>暂无</span>
</el-descriptions-item>
</template>
</el-descriptions>
</template>
<template v-else>
null~
</template>
</el-tab-pane>
</template>
<el-tab-pane v-if="viewData.caseUnitAudit" label="委员会确认承办单位" name="10">
<el-descriptions border>
<el-descriptions-item label="审核人">
{{ viewData.caseUnitAudit.username + '-' + viewData.caseUnitAudit.loginName }}
</el-descriptions-item>
<el-descriptions-item label="审核结果">{{ viewData.resultName }}</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ viewData.caseUnitAudit.auditTime }}</el-descriptions-item>
<el-descriptions-item v-if="viewData.resultCode!=='notGive'" label="承办单位" span="3">
<template v-for="(item,index) in viewData.undertake">
{{ item.unitName }}
({{ item.undertakeType === 1 ? '主办' : '协办' }})
{{ index + 1 === viewData.undertake.length ? '' : '、' }}
</template>
</el-descriptions-item>
<el-descriptions-item label="审核意见" span="3">{{ viewData.caseUnitAudit.opinion }}</el-descriptions-item>
<el-descriptions-item label="签字" span="3">
<el-image v-if="viewData.caseUnitAudit.auditSign"
:src="viewData.caseUnitAudit.auditSign"
fit="contain"
style="width: 300px; height: 100px"></el-image>
<span v-else>暂无</span>
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane v-if="viewData.replyInfo && viewData.replyInfo.length>0 && viewData.replyInfo.some(v=>v.isReply)"
label="承办单位答复"
name="11">
<el-descriptions border class="wrap-table-4" column="5">
<template v-for="(o,i) in viewData.replyInfo.filter(v=>v.isReply)">
<el-descriptions-item label="承办单位">{{
o.unitName
}}({{ o.undertakeType === 1 ? '主办' : '协办' }})
</el-descriptions-item>
<el-descriptions-item label="答复人">{{ o.dfrUserName }}</el-descriptions-item>
<el-descriptions-item label="答复时间">{{ o.replyTime }}</el-descriptions-item>
<el-descriptions-item label="答复次数">{{ o.replyNumber }}</el-descriptions-item>
<el-descriptions-item label="落实情况">{{ o.implementState }}</el-descriptions-item>
<el-descriptions-item label="答复内容" span="5">
<div class="text-left" v-html="o.replyContent"></div>
</el-descriptions-item>
<el-descriptions-item label="承办单位签字" span="5">
<el-image v-if="o.replySignData"
:src="o.replySignData"
fit="contain"
style="width: 300px; height: 100px"></el-image>
<span v-else>暂无</span>
</el-descriptions-item>
<el-descriptions-item label="附件" span="5">
<file-upload v-if="JSON.parse(o.replyFiles)&&JSON.parse(o.replyFiles).length"
:files="JSON.parse(o.replyFiles)" :view="true"></file-upload>
<span v-else></span>
</el-descriptions-item>
</template>
</el-descriptions>
</el-tab-pane>
<el-tab-pane v-if="viewData.replyInfo && viewData.replyInfo.some(v=>v.isLeaderAudit)" label="分管校领导审批" name="12">
<el-descriptions border column="4">
<template v-for="(o,i) in viewData.replyInfo.filter(v=>v.isLeaderAudit)">
<el-descriptions-item label="承办单位">{{ o.unitName }}</el-descriptions-item>
<el-descriptions-item label="校领导">{{ o.xldUserName }}</el-descriptions-item>
<el-descriptions-item label="审批时间">{{ o.leaderCheckTime }}</el-descriptions-item>
<el-descriptions-item label="审批次数">{{ o.leaderCheckNumber }}</el-descriptions-item>
<el-descriptions-item label="审批内容" span="4">
<div class="text-left">
{{ o.leaderCheckOpinion }}
</div>
</el-descriptions-item>
<el-descriptions-item label="分管校领导签字" span="4">
<el-image v-if="o.leaderSignData"
:src="o.leaderSignData"
fit="contain"
style="width: 300px; height: 100px"></el-image>
<span v-else>暂无</span>
</el-descriptions-item>
</template>
</el-descriptions>
</el-tab-pane>
<el-tab-pane v-if="viewData.feedback&&viewData.feedback.length>0" label="反馈评分信息" name="13">
<el-descriptions border column="4">
<template v-for="(o,i) in viewData.feedback">
<el-descriptions-item label="反馈人">{{ o.username }}({{ o.loginname }})</el-descriptions-item>
<el-descriptions-item label="反馈时间">{{ o.feedbackTime }}</el-descriptions-item>
<el-descriptions-item label="反馈次数">{{ o.feedbackNumber }}</el-descriptions-item>
<el-descriptions-item label="反馈结果">{{ o.feedbackResult }}</el-descriptions-item>
<el-descriptions-item label="反馈意见" span="4">
<div class="text-left" v-html="o.feedbackOpinion"></div>
</el-descriptions-item>
<el-descriptions-item label="反馈人签字" span="4">
<el-image v-if="o.scoreSign"
:src="o.scoreSign"
fit="contain"
style="width: 300px; height: 100px"></el-image>
<span v-else>暂无</span>
</el-descriptions-item>
</template>
</el-descriptions>
</el-tab-pane>
<el-tab-pane v-if="viewData.caseCheckAuditId && viewData.caseCheckAudit.length>0" label="提案委员会复核" name="14">
<el-descriptions border>
<template v-for="i in viewData.caseCheckAudit">
<el-descriptions-item label="审核人">
{{ i.username + '-' + i.loginname }}
</el-descriptions-item>
<el-descriptions-item label="审核结果">{{ i.flag ? '不需要二次答复' : '需要二次答复' }}</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ i.auditTime }}</el-descriptions-item>
<el-descriptions-item label="审核意见" span="3">
<div class="text-left">
{{ i.opinion }}
</div>
</el-descriptions-item>
<el-descriptions-item label="提案委员会签字" span="4">
<el-image v-if="i.auditSign"
:src="i.auditSign"
fit="contain"
style="width: 300px; height: 100px"></el-image>
<span v-else>暂无</span>
</el-descriptions-item>
</template>
</el-descriptions>
</el-tab-pane>
<el-tab-pane v-if="handle" :label="label" name="999">
<slot name="handle"></slot>
</el-tab-pane>
</el-tabs>
</template>
<script>
module.exports = {
props: {
id: String,
handle: {
type: Boolean,
default: false,
},
label: {
type: String,
default: '审核'
},
panes: {
type: Array,
default: []
}
},
data() {
return {
hostUnit: '',
helpUnit: [],
unitOptions: [],
activeName: '1',
activeCollapse: '',
loading: true,
viewData: {},
config: {}
}
},
components: {
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
},
methods: {
hasPane(name) {
if (!this.handle) {
return true
}
return this.panes.includes(name)
},
async openView(id) {
this.loading = true
this.viewData = await proposal.getProposalInfo(id)
console.log(this.viewData)
if (!this.viewData) {
this.$notify.error({title: '失败', message: '获取提案信息失败'});
return
}
const {files, feedback, caseAudit, resultCode} = this.viewData
this.helpUnit = []
if (caseAudit != null && resultCode !== "notGive") {
// const other = JSON.parse(caseAudit.other)
// this.hostUnit = this.unitOptions.find(v => v.id === other.hostUnit).unitName
// if (other.helpUnit && other.helpUnit.length > 0) {
// other.helpUnit.forEach((v, i) => {
// const helpUnit = this.unitOptions.find(z => other.helpUnit[i] === z.id).unitName
// this.helpUnit.push(helpUnit)
// })
// this.helpUnit = this.helpUnit.join('、')
// }
}
if (files) {
this.viewData.files = JSON.parse(files)
}
if (feedback) {
this.viewData.feedback.map(v => {
v.files = JSON.parse(v.files)
})
}
this.activeName = this.handle ? "999" : "1"
this.loading = false
}
},
async created() {
this.config = await proposal.getProposalConfig()
this.unitOptions = await proposal.getProposalUndertake()
}
}
</script>
<style>
.el-descriptions__table {
table-layout: fixed !important;
}
.el-descriptions-item__cell {
text-align: center !important;
}
.item-center {
text-align: center;
font-weight: 700;
margin-right: 110px;
}
.item-center .el-form-item__content {
font-size: 18px;
}
.item-sign {
width: 200px;
height: 130px;
}
.item-form {
padding: 0 25px;
}
.el-collapse-item__wrap {
padding: 10px 10px;
}
.el-collapse-item__header {
border-bottom: 1px solid #eee;
font-weight: 700;
}
.item-number {
color: red;
font-weight: 600
}
.el-collapse-item__header {
position: relative;
}
.el-collapse-item__arrow {
color: #1582dc;
font-weight: 800 !important;
}
/*.el-tabs__header{*/
/* background-image: url(https://my.njucm.edu.cn/assets/17289587176453.jpg);*/
/* background-size: cover;*/
/* background-color: rgba(87,99,189,1);*/
/* background-repeat: no-repeat;*/
/* background-position: 50% 50%;*/
/* height: 60px;*/
/* !*border-top-left-radius: 4px;*!*/
/* !*border-top-right-radius: 4px;*!*/
/* !*border-bottom-left-radius: 4px;*!*/
/* !*border-bottom-right-radius: 4px;*!*/
/*}*/
/*.el-tabs__item{*/
/* height: 60px;*/
/* line-height: 60px;*/
/* font-size: 16px;*/
/* color: #FFFFFF;*/
/*}*/
/*.el-tabs__item:hover{*/
/* font-size: 16px;*/
/* color: #FFFFFF;*/
/*}*/
/*.el-tabs__item.is-active{*/
/* color: #FFFFFF;*/
/*}*/
/*.el-tabs__active-bar{*/
/* background-color:orangered;*/
/* height: 4px;*/
/* bottom: 2px;*/
/*}*/
.wrap-table tbody:nth-child(3n+3):after {
content: '';
display: block;
height: 15px;
}
.wrap-table-4 tbody:nth-child(4n+4):after {
content: '';
display: block;
height: 15px;
}
</style>