Files
2026-09-08 19:49:21 +08:00

384 lines
14 KiB
Vue

<template>
<div>
<template name="提案基本信息">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
提案基本信息
</div>
</div>
<van-cell-group>
<van-collapse v-model="secondedActiveNames" :border="false" accordion>
<van-collapse-item name="1">
<template #title>
<div>提案名称&emsp;&emsp;{{ viewData.proposalName }}
<van-icon name="question-o"/>
</div>
</template>
<van-cell :value="viewData.proposalCode" title="提案编号"></van-cell>
<van-cell title="提案时间">{{ viewData.createTime }}</van-cell>
<van-cell title="教代会届次">{{ viewData.meetingName }}</van-cell>
<van-cell title="代表工会">{{ viewData.unionName }}</van-cell>
<van-cell title="代表团名称">{{ viewData.delegationName }}</van-cell>
<van-cell title="提案类型">{{ viewData.typeName }}</van-cell>
<van-cell title="提案方式">{{ viewData.mannerName }}</van-cell>
<van-cell title="立案结果">{{ viewData.resultName ? viewData.resultName : '暂无' }}</van-cell>
<van-cell title="建议落实部门">{{ viewData.implementUnitName || '暂无' }}</van-cell>
<van-cell title="提案状态"><span :style="'color:'+viewData.stateColor">{{ viewData.stateName }}</span>
</van-cell>
</van-collapse-item>
<van-cell title="提&emsp14;&emsp14;案&emsp14;&emsp14;人">
{{ viewData.createUserName }}({{ viewData.loginname }})
</van-cell>
<van-collapse-item v-if="viewData.undertake&&viewData.undertake.length>0" name="3" title="承办单位">
<span v-if="!viewData.undertake">暂未分配</span>
<van-cell v-for="(item,index) in viewData.undertake" v-else
:title="item.undertakeType === 1 ? '主办' : '协办'">
{{ item.unitName }}
</van-cell>
</van-collapse-item>
<van-collapse-item name="4" title="案&emsp;&emsp;由">
<span v-html="viewData.brief"></span>
</van-collapse-item>
<van-collapse-item name="5" title="建议措施">
<span v-html="viewData.measures"></span>
</van-collapse-item>
</van-collapse>
<van-collapse v-model="createUserSignNames" :border="false" v-if="viewData.createUserSign">
<van-collapse-item name="1" title="签&emsp;&emsp;字">
<van-image width="200" height="100" :src="viewData.createUserSign" v-if="viewData.createUserSign"/>
<span v-else>暂无</span>
</van-collapse-item>
</van-collapse>
<!-- <van-cell title="附件">
<div v-for="(obj,index) in viewData.files" class="text-nowrap color-puple"
@click="previewFile(obj.filepath,obj.filename,viewData.files,index)">
{{ obj.filename }}
</div>
</van-cell>-->
</van-cell-group>
</template>
<template v-if="viewData.seconded" name="附议信息">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
附议信息
</div>
</div>
<van-collapse v-model="secondedNames" :border="false">
<van-collapse-item name="1" title="附&emsp14;&emsp14;议&emsp14;&emsp14;人">
<van-cell v-for="(item,index) in viewData.seconded"
:value="item.isAgree === true ? '同意' : item.isAgree === false ? '拒绝' : '未附议'">
<template #title>
<span>{{ item.username }}({{ item.unitname }})</span>
</template>
</van-cell>
</van-collapse-item>
</van-collapse>
</template>
<template v-if="viewData.delegationAudit&&viewData.delegationAudit.length>0" name="团长审核信息">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
团长审核信息
</div>
</div>
<van-cell-group v-for="(item,index) in viewData.delegationAudit" class="info">
<van-cell title="审核时间">{{ item.auditTime }}</van-cell>
<van-cell title="审核结果">{{ item.flag ? '通过' : '退回' }}</van-cell>
<van-cell title="审核意见">{{ item.opinion }}</van-cell>
<van-cell title="签&emsp;&emsp;字" v-if="item.auditSign">
<van-image width="200" height="100" :src="item.auditSign" v-if="item.auditSign"/>
<span v-else>暂无</span>
</van-cell>
</van-cell-group>
</template>
<template v-if="viewData.secretaryAudit&&viewData.secretaryAudit.length>0" name="提案委员会立案信息">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
提案委员会立案信息
</div>
</div>
<van-cell-group v-for="item in viewData.secretaryAudit" class="info">
<van-cell title="审核时间">{{ item.auditTime }}</van-cell>
<van-cell title="立案编号">{{ viewData.caseCode }}</van-cell>
<van-cell title="审核结果">{{ viewData.resultName }}</van-cell>
<van-cell v-if="!viewData.undertake" title="承办单位">暂未分配</van-cell>
<van-collapse v-else v-model="undertakeActiveNames">
<van-collapse-item name="1" title="承办单位">
<van-cell v-for="(item,index) in viewData.undertake"
:title="item.undertakeType === 1 ? '主办' : '协办'">
{{ item.unitName }}
</van-cell>
</van-collapse-item>
</van-collapse>
<van-cell title="审核意见">{{ item.opinion }}</van-cell>
</van-cell-group>
</template>
<template v-if="viewData.caseAudit" name="确认承办单位">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
确认承办单位
</div>
</div>
<van-cell-group class="info">
<van-cell title="审核时间">{{ viewData.caseAudit.auditTime }}</van-cell>
<van-cell title="立案结果">{{ viewData.resultName }}</van-cell>
<van-collapse v-model="undertakeActiveNames">
<van-collapse-item name="2" title="承办单位">
<span v-if="!viewData.undertake">暂未分配</span>
<van-cell v-for="(item,index) in viewData.undertake" v-else
:title="item.undertakeType === 1 ? '主办' : '协办'">
{{ item.unitName }}
</van-cell>
</van-collapse-item>
</van-collapse>
<van-cell title="审核意见">{{ viewData.caseAudit.opinion }}</van-cell>
</van-cell-group>
</template>
<template v-if="viewData.makeLeader" name="分管校领导批示信息">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
分管校领导批示信息
</div>
</div>
<van-cell-group class="info">
<van-collapse v-model="undertakeActiveNames">
<van-collapse-item v-for="(v,k) in viewData.makeLeader" name="3">
<!--({{ v[0].undertakeType === 1 ? '主办' : '协办' }}) -->
<template #title>
{{ v[0].unitName }}
</template>
<template v-for="item in v">
<van-cell title="批示时间"> {{ item.auditTime }}</van-cell>
<van-cell title="批示意见"> {{ item.opinion }}</van-cell>
</template>
</van-collapse-item>
</van-collapse>
</van-cell-group>
</template>
<template v-if="viewData.replyInfo && viewData.replyInfo.length>0 && viewData.replyInfo.some(v=>v.isReply)"
name="承办单位答复">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
承办单位答复信息
</div>
</div>
<van-cell-group class="info">
<van-collapse v-model="undertakeActiveNames">
<van-collapse-item v-for="item in viewData.replyInfo" :name="item.unitName">
<template #title>
{{ item.unitName }}
</template>
<van-cell title="答复时间"> {{ item.replyTime }}</van-cell>
<van-cell title="落实情况"> {{ item.implementState }}</van-cell>
<van-cell title="答复信息">
<span v-html="item.replyContent"></span>
</van-cell>
<van-panel>
<template #header>
<div class="van-cell van-panel__header">
<div class="van-cell__title">
附件
</div>
</div>
</template>
<div style="padding: 5px 16px">
<upload v-if="item.replyFiles&&item.replyFiles.length>0" :del="false" :files.sync="item.files"
view></upload>
<span v-else>暂无</span>
</div>
</van-panel>
</van-collapse-item>
</van-collapse>
</van-cell-group>
</template>
<template v-if="viewData.feedback&&viewData.feedback.length>0" name="反馈评分信息">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
反馈评分信息
</div>
</div>
<van-cell-group class="info">
<template v-for="item in viewData.feedback">
<van-cell title="反馈时间">{{ item.feedbackTime }}</van-cell>
<van-cell title="反馈结果">{{ item.feedbackResult }}</van-cell>
<van-cell title="反馈意见"><span v-html="item.feedbackOpinion"></span></van-cell>
<van-panel>
<template #header>
<div class="van-cell van-panel__header">
<div class="van-cell__title">
附件
</div>
</div>
</template>
<div style="padding: 5px 16px">
<upload :del="false" :files.sync="item.files" view></upload>
</div>
</van-panel>
</template>
</van-cell-group>
</template>
<template v-if="handle">
<div id="wechat_proposal_handle">
<slot name="handle"></slot>
</div>
</template>
</div>
</template>
<script>
function removeHTMLTag(str) {
str = str.replace(/<\/?[^>]*>/g, ''); //去除HTML tag
str = str.replace(/[ | ]*\n/g, '\n'); //去除行尾空白
str = str.replace(/\n[\s| | ]*\r/g, '\n'); //去除多余空行
str = str.replace(/&nbsp;/ig, '');//去掉&nbsp;
return str;
}
module.exports = {
data() {
return {
activeName: 1,
secondedActiveNames: '',
secondedNames: [],
createUserSignNames: [],
undertakeActiveNames: [],
briefActiveNames: [],
viewData: {},
}
},
props: {
handle: {
type: Boolean,
default: false,
},
title: {
type: String,
default: '审核'
},
proposal_id: String
// pid:String
},
mounted() {
},
components: {
'mobile-sign': httpVueLoader('/components/sign/mobileSign.vue'),
'upload': httpVueLoader('/components/plugins/VantFileUpload.vue'),
},
methods: {
async openView(id) {
this.viewData = await getProposalInfo(id)
if (this.viewData.files) {
this.viewData.files = JSON.parse(this.viewData.files)
}
if (this.viewData.replyInfo) {
const keys = Object.keys(this.viewData.replyInfo)
keys.map(k => {
if (this.viewData.replyInfo[k].replyFiles != null) {
this.viewData.replyInfo[k].replyFiles = JSON.parse(this.viewData.replyInfo[k].replyFiles)
}
})
if (this.viewData.feedback && this.viewData.feedback.length > 0) {
this.viewData.feedback.map(v => {
v.files = JSON.parse(v.files)
})
}
}
this.activeName = this.handle ? "999" : "1"
},
previewFile(filepath, filename, fileList, index) {
const doctype = ['doc', 'docx', 'xls', 'xlsx'];
const pictype = ['jpg', 'png', 'gif', 'jpeg'];
let filetype = filepath.substring(filepath.lastIndexOf('.') + 1, filepath.length);
if (doctype.indexOf(filetype) > -1) {
const pdfpath = 'https://' + window.location.hostname + '/assets/platform/plugins/pdf/web/viewer.html?file=' +
encodeURIComponent("/platform/base/Common/preview?filepath=" + filepath + "&filename=" + filename);
window.open(pdfpath);
} else if (pictype.indexOf(filetype) > -1) {
let ele = document.createElement("div");
fileList.forEach(v => {
let fp = v.filepath.substring(v.filepath.lastIndexOf('.') + 1, v.filepath.length);
if (pictype.indexOf(fp) > -1) {
const image = new Image();
const src = FILE_DOMAIN + v.filepath
image.src = src
image.alt = v.filename
ele.appendChild(image);
}
})
const viewer = new Viewer(ele, {
title: function (img, obj) {
return img.getAttribute("alt");
}
});
viewer.show();
} else {
alert('该文件不支持在手机端预览')
}
}
},
watch: {
'handle'(val) {
if (val === true) {
this.$nextTick(() => {
window.scrollTo(0, document.getElementById('wechat_proposal_handle').offsetTop)
})
}
}
},
async created() {
await this.openView(this.proposal_id)
if (this.handle) {
window.scrollTo(0, document.getElementById('wechat_proposal_handle').offsetTop)
}
}
}
</script>
<style>
.van-cell__value {
color: #323233 !important;
}
.van-cell-group__title {
padding-left: 0 !important;
}
.van-sidebar-item {
font-size: 16px !important;
text-indent: 4px !important;
}
.van-sidebar-item--select::before {
left: 5px !important;
}
</style>