first commit

This commit is contained in:
2026-09-09 09:14:28 +08:00
commit 5343198112
5199 changed files with 1052895 additions and 0 deletions
@@ -0,0 +1,568 @@
<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>