内外部会议、政策课题详情

This commit is contained in:
zyn
2023-10-27 16:29:42 +08:00
parent e719773fea
commit 5d5f2650b3
7 changed files with 1086 additions and 16 deletions
+440
View File
@@ -0,0 +1,440 @@
<template>
<div class="regulatoryMaterialsDetail">
<div class="container">
<div class="header">{{ form.meetingName }}</div>
<div class="content">
<el-collapse v-model="activeNames">
<el-collapse-item name="1">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>基础信息</span>
</div>
<div class="modular-header-btn">
<el-button class="relation-btn"
icon="icon-relation"
@click.stop="relateEvent()"
>更新记录</el-button>
</div>
</div>
</template>
<div class="modular-content">
<p style="" class="half"><label style=" margin-right: 132px;">会议名称</label><span>{{ form.meetingName || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 100px;">会议主办单位</label><span>{{ form.meetingOrganizer || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">会议时间</label><span>{{ form.meetingTime || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">会议地点</label><span>{{ form.meetingAddress || '-' }}</span></p>
<p style="" class="whole"><label style=" margin-right: 132px;">参会人员</label><span>{{ form.participants || '-' }}</span></p>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">会议纪要</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.meetingMinutesList && form.meetingMinutesList.length > 0">
<p class="file-item" v-for="file in form.meetingMinutesList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<p class="whole" style=""><label style=" margin-right: 100px;">会议主要内容</label><span>{{ form.meetingContent || '-' }}</span></p>
</div>
</el-collapse-item>
<el-collapse-item name="2">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>会议分类</span>
</div>
</div>
</template>
<div class="modular-content">
<p style="" class="half"><label style="margin-right: 100px;">1级会议分类</label><span>{{ form.firstMeetingTypeName || '-' }}</span></p>
<p style="" class="half"><label style="margin-right: 100px;">2级会议分类</label><span>{{ form.secondMeetingTypeName || '-' }}</span></p>
</div>
</el-collapse-item>
<el-collapse-item v-for="(item, index) in form.meetingTopicList" :name="index">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>会议议题</span>
</div>
</div>
</template>
<div class="modular-content">
<p style="" class="whole"><label style=" margin-right: 132px;">议题名称</label><span>{{ item.agendaName || '-' }}</span></p>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">议题材料</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="item.agendaMaterialsList && item.agendaMaterialsList.length > 0">
<p class="file-item" v-for="file in item.agendaMaterialsList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<p style="" class="half"><label style=" margin-right: 148px;">汇报人</label><span>{{ item.reporter || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 116px;">汇报人单位</label><span>{{ item.reportingUnit || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 100px;">议题主要内容</label><span>{{ item.agendaContent || '-' }}</span></p>
</div>
</el-collapse-item>
</el-collapse>
</div>
</div>
<!-- 更新LOG -->
<el-dialog
title="更新记录"
:visible.sync="relateDialog"
width="60%"
class="relateClass"
:before-close="relateDialogClose">
<div
v-for="(item, index) in relateNowList"
:key="index"
v-if="relateNowList"
style="margin-bottom: 10px;line-height: 20px"
>
{{index+1}}. {{item.creationUserName}} {{item.creationTime}} {{item.content}}
<div v-if="relateNowList.length >1"><el-divider></el-divider></div>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="relateDialogClose()"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getBusStandFileByAttId } from 'api/process'
export default {
name: "meetingDetail",
data () {
return {
url: {
getMeetingInfo: 'lawss/insideOutsideMeeting/getMeetingInfo',
getLogList: 'lawss/sarUpdLog/getLogList', // 更新记录
},
form: {},
activeNames: ['1', '2'],
// 更新记录
relateDialog: false,
relateNowList: [],
}
},
created() {
this.getData()
},
methods: {
getData () {
const id = this.$route.params.id
this.$http._getData(this.url.getMeetingInfo, { meetingId: id }).then(res => {
if (res.ok) {
if (res.data.meetingTopicList && res.data.meetingTopicList.length > 0) {
const activeNames = []
res.data.meetingTopicList.forEach((item, index) => {
activeNames.push(index)
})
this.activeNames = [...this.activeNames, ...activeNames]
}
this.$set(this, 'form', res.data)
}
})
},
// 更新LOG
relateEvent () {
const query = {
sarId: this.$route.params.id,
sarType: 'MEETING'
}
this.$http._getData(this.url.getLogList, query).then(res => {
if (res.ok && res.data.length > 0) {
this.relateDialog = true
const relateList = res.data
var i
for (i = 0; i < relateList.length; i++) {
let obj = {creationUserName: '', creationTime: '', content: ''}
obj.creationUserName = relateList[i].creationUserName
obj.creationTime = relateList[i].creationTime
obj.content = relateList[i].content
this.relateNowList.push(obj)
}
} else {
this.$message.warning('暂无数据')
}
})
},
relateDialogClose () {
this.relateDialog = false
this.relateNowList = []
},
downloadFile (attId) {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSarNew?fileId=' + attId
} else {
this.$message.error('请选择要下载的文件')
}
},
downloadFileByWater (attId, fileSuffix) {
if (fileSuffix !== 'pdf' && fileSuffix !== 'PDF') {
this.$message.error('水印下载仅支持PDF,pdf格式文件')
} else {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSarWaterMarkNew?fileId=' + attId + '&userId=' + this.$store.getters.userInfo.userId
} else {
this.$message.error('请选择要下载的文件')
}
}
},
getBusStandFileByAttId(attId) {
return new Promise((resolve, reject) => {
getBusStandFileByAttId({
attId
}).then(res => {
if (res.ok) {
resolve(res.data)
} else {
reject()
}
}).catch(e => {
reject(e)
})
})
},
openFileInPdf (attId, fileName) {
// 判断是否是图片格式,图片格式不预览,直接下载
let index1 = fileName.lastIndexOf('.')
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
//把后缀转大写
if(fileSuffix !== undefined && fileSuffix !== null){
fileSuffix = fileSuffix.toUpperCase()
}
// 判断上传文件格式
if (fileSuffix === '.PNG'|| fileSuffix === '.JPG'|| fileSuffix === '.JPEG') {
this.downloadFile(attId)
return true
}
// 缺少文件
if (this.$hasPermission('fd83032ae5f41a0021b00e93c88edbbg')) {
if (fileSuffix === '.PDG' || fileSuffix === '.pdg') {
this.getBusStandFileByAttId(attId)
.then(res => {
if(res){
const editFileInfo = res
if(editFileInfo.fileSuffix === 'pdg' || editFileInfo.fileSuffix === 'PDG'){
window.open('book://ssreader/e0?url='+editFileInfo.downLoadUrl)
}
}
}).catch(e => {
this.$message.warning('文件不存在,预览失败')
})
}else {
this.$http.get('lawss/sarLawsFile/queryConvertAtt', {
attId: attId
}, {
_this: this
}, res => {
if (res.data) {
let fileObj = {}
fileObj.fileId = res.data.attId
fileObj.fileName = fileName
let fileList = []
let repeatData = 0
if (sessionStorage.getItem('fileInfo')) {
fileList = JSON.parse(sessionStorage.getItem('fileInfo'))
if (fileList != null && fileList.length > 0) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].fileId === res.data.attId) {
repeatData = 1
break
}
}
if (repeatData === 0) {
fileList.push(fileObj)
fileList = JSON.stringify(fileList)
sessionStorage.setItem('fileInfo', fileList)
}
}
} else {
fileList.push(fileObj)
fileList = JSON.stringify(fileList)
sessionStorage.setItem('fileInfo', fileList)
}
window.open('/static/pdf/web/viewer.html?file=' + encodeURIComponent('/api/att/attFile/getFileInfo?fileId=' + res.data.attId))
} else {
this.$message.error('文档未转换成功或本地读取不到该文档')
}
}, e => {
this.$message.error('文档未转换成功或本地读取不到该文档')
})
}
} else {
this.$message.error('没有在线预览文档权限!')
}
},
}
}
</script>
<style scoped lang="less">
.regulatoryMaterialsDetail {
width: 100%;
height: 100%;
background: #fff;
overflow: auto;
.container {
padding: 15px 30px 0;
width: 1200px;
margin: 0 auto;
height: 100%;
.header {
padding: 34px 0;
font-size: 20px;
font-weight: bold;
color: #555555;
text-align: center;
}
.content {
border-top: 2px dashed rgb(209, 209, 209);
.modular-header {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
height: 50px;
border-bottom: 1px solid #E5E5E5;
.modular-header-title {
font-size: 18px;
font-weight: bold;
color: #3B424C;
> .icon-modular-title {
display: inline-block;
margin-left: -28px;
width: 18px;
height: 18px;
background-size: 100% 100%;
background-position: center center;
background-image: url("~assets/images/shangqi/standardDetails/modular-title.png");
position: relative;
top: 2px;
}
> span {
padding-left: 10px;
}
}
/deep/ .modular-header-btn{
> button {
height: 30px;
line-height: 30px;
font-size: 14px;
padding: 0 10px;
font-family: 'Microsoft Yahei', '\5FAE\8F6F\96C5\9ED1', Arial, sans-serif !important;
> i{
display: inline-block;
margin-right: 3px;
width: 18px;
height: 18px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: center center;
vertical-align: text-bottom;
}
}
.collection-btn{
padding: 0;
border: none;
> i {
color: #F2CB51;
font-size: 18px;
width: 18px;
height: 18px;
}
> .el-icon-star-on {
font-size: 22px;
}
&:hover{
background: transparent;
}
}
.relation-btn {
color: #409EFF;
border: 1px solid #409EFF;
background: rgba(64, 158, 255, 0.1);
.icon-relation{
background-image: url("~assets/images/shangqi/standardDetails/relation.png");
}
}
}
}
.modular-content {
color: #333;
font-size: 16px;
> p {
min-height: 43px;
line-height: 43px;
border-bottom: 1px solid #E5E5E5;
}
.half {
width: 50%;
float: left;
}
.whole {
width: 100%;
float: left;
}
}
/deep/ .el-collapse-item__wrap {
border: none;
}
.file-item{
display: flex;
align-items: center;
.file-title {
display: inline-block;
font-size: 16px;
color: #409EFF;
cursor: pointer;
overflow: hidden;
text-overflow: ellipsis;
max-width: 780px;
white-space: nowrap;
}
}
/deep/ .el-collapse-item__content {
padding: 0;
}
}
}
}
/deep/ .icon-download {
display: inline-block;
margin-left: 3px;
width: 18px;
height: 16px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: center center;
vertical-align: sub;
cursor: pointer;
background-image: url("~assets/images/shangqi/img/download.png");
}
/deep/ .icon-download2 {
display: inline-block;
margin-left: 3px;
width: 18px;
height: 16px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: center center;
vertical-align: sub;
cursor: pointer;
background-image: url("~assets/images/shangqi/img/download2.png");
}
</style>
@@ -0,0 +1,597 @@
<template>
<div class="regulatoryMaterialsDetail">
<div class="container">
<div class="header">{{ form.topicName }}</div>
<div class="content">
<el-collapse v-model="activeNames">
<el-collapse-item name="1">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>基础信息</span>
</div>
<div class="modular-header-btn">
<el-button class="relation-btn"
icon="icon-relation"
@click.stop="relateEvent()"
>更新记录</el-button>
</div>
</div>
</template>
<div class="modular-content">
<p style="" class="half"><label style=" margin-right: 132px;">课题名称</label><span>{{ form.topicName || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 100px;">课题承办单位</label><span>{{ form.organizer || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 100px;">课题指导单位</label><span>{{ form.guidanceUnit || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 100px;">课题参与单位</label><span>{{ form.participatingUnit || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">启动时间</label><span>{{ form.startTime || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">结题时间</label><span>{{ form.closeTime || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">课题状态</label><span>{{ form.topicStatus || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 68px;">课题费用万元</label><span>{{ form.topicCost || '-' }}</span></p>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 164px;line-height: 44px">协议</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.agreementList && form.agreementList.length > 0">
<p class="file-item" v-for="file in form.agreementList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
</div>
</el-collapse-item>
<el-collapse-item v-for="(item, index) in form.meetingList" :name="'meetingList' + index">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>课题组会议</span>
</div>
</div>
</template>
<div class="modular-content">
<p style="" class="half"><label style=" margin-right: 132px;">会议名称</label><span>{{ item.meetingName || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">会议时间</label><span>{{ item.meetingTime || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">会议地点</label><span>{{ item.meetingAddress || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 68px;">参会人员内部</label><span>{{ item.participants || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 100px;">会议主要内容</label><span>{{ item.meetingContent || '-' }}</span></p>
</div>
</el-collapse-item>
<el-collapse-item name="2">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>课题组资料</span>
</div>
</div>
</template>
<div class="modular-content">
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">研究方案</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.researchPlanList && form.researchPlanList.length > 0">
<p class="file-item" v-for="file in form.researchPlanList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">研究成果</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.researchFindingsList && form.researchFindingsList.length > 0">
<p class="file-item" v-for="file in form.researchFindingsList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 164px;line-height: 44px">其他</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.otherList && form.otherList.length > 0">
<p class="file-item" v-for="file in form.otherList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">会议资料</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.conferenceMaterialsList && form.conferenceMaterialsList.length > 0">
<p class="file-item" v-for="file in form.conferenceMaterialsList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
</div>
</el-collapse-item>
<el-collapse-item v-for="(item, index) in form.topicContactInformationList" :name="'topicContactInformationList' + index">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>课题组联系方式</span>
</div>
</div>
</template>
<div class="modular-content">
<p style="" class="half"><label style=" margin-right: 164px;">姓名</label><span>{{ item.name || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 164px;">单位</label><span>{{ item.department || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 164px;">电话</label><span>{{ item.phone || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 164px;">邮箱</label><span>{{ item.email || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 164px;">身份</label><span>{{ item.identity || '-' }}</span></p>
</div>
</el-collapse-item>
<el-collapse-item name="3">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>内部资料</span>
</div>
</div>
</template>
<div class="modular-content">
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">立项报告</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.insideProjectProposalReportList && form.insideProjectProposalReportList.length > 0">
<p class="file-item" v-for="file in form.insideProjectProposalReportList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">研究方案</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.insideResearchPlanList && form.insideResearchPlanList.length > 0">
<p class="file-item" v-for="file in form.insideResearchPlanList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">会议资料</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.insideConferenceMaterialsList && form.insideConferenceMaterialsList.length > 0">
<p class="file-item" v-for="file in form.insideConferenceMaterialsList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">研究成果</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.insideResearchFindingsList && form.insideResearchFindingsList.length > 0">
<p class="file-item" v-for="file in form.insideResearchFindingsList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 164px;line-height: 44px">其他</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.insideOtherList && form.insideOtherList.length > 0">
<p class="file-item" v-for="file in form.insideOtherList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
</div>
</el-collapse-item>
<el-collapse-item v-for="(item, index) in form.insideContactInformationList" :name="'insideContactInformationList' + index">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>内部联系方式</span>
</div>
</div>
</template>
<div class="modular-content">
<p style="" class="half"><label style=" margin-right: 164px;">姓名</label><span>{{ item.name || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 164px;">单位</label><span>{{ item.department || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 164px;">电话</label><span>{{ item.phone || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 164px;">邮箱</label><span>{{ item.email || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 164px;">身份</label><span>{{ item.identity || '-' }}</span></p>
</div>
</el-collapse-item>
</el-collapse>
</div>
</div>
<!-- 更新LOG -->
<el-dialog
title="更新记录"
:visible.sync="relateDialog"
width="60%"
class="relateClass"
:before-close="relateDialogClose">
<div
v-for="(item, index) in relateNowList"
:key="index"
v-if="relateNowList"
style="margin-bottom: 10px;line-height: 20px"
>
{{index+1}}. {{item.creationUserName}} {{item.creationTime}} {{item.content}}
<div v-if="relateNowList.length >1"><el-divider></el-divider></div>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="relateDialogClose()"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getBusStandFileByAttId } from 'api/process'
export default {
name: "policyTopicsDetail",
data () {
return {
url: {
getLawsTopicInfo: 'lawss/sarLawsTopic/getLawsTopicInfo',
getLogList: 'lawss/sarUpdLog/getLogList', // 更新记录
},
form: {},
activeNames: ['1', '2', '3'],
// 更新记录
relateDialog: false,
relateNowList: [],
}
},
created() {
this.getData()
},
methods: {
getData () {
const id = this.$route.params.id
this.$http._getData(this.url.getLawsTopicInfo, { id }).then(res => {
if (res.ok) {
const activeNames = []
res.data.meetingList.forEach((item, index) => {
activeNames.push('meetingList' + index)
})
res.data.topicContactInformationList.forEach((item, index) => {
activeNames.push('topicContactInformationList' + index)
})
res.data.insideContactInformationList.forEach((item, index) => {
activeNames.push('insideContactInformationList' + index)
})
this.activeNames = [...this.activeNames, ...activeNames]
this.$set(this, 'form', res.data)
}
})
},
// 更新LOG
relateEvent () {
const query = {
sarId: this.$route.params.id,
sarType: 'POLICYTOPICS'
}
this.$http._getData(this.url.getLogList, query).then(res => {
if (res.ok && res.data.length > 0) {
this.relateDialog = true
const relateList = res.data
var i
for (i = 0; i < relateList.length; i++) {
let obj = {creationUserName: '', creationTime: '', content: ''}
obj.creationUserName = relateList[i].creationUserName
obj.creationTime = relateList[i].creationTime
obj.content = relateList[i].content
this.relateNowList.push(obj)
}
} else {
this.$message.warning('暂无数据')
}
})
},
relateDialogClose () {
this.relateDialog = false
this.relateNowList = []
},
downloadFile (attId) {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSarNew?fileId=' + attId
} else {
this.$message.error('请选择要下载的文件')
}
},
downloadFileByWater (attId, fileSuffix) {
if (fileSuffix !== 'pdf' && fileSuffix !== 'PDF') {
this.$message.error('水印下载仅支持PDF,pdf格式文件')
} else {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSarWaterMarkNew?fileId=' + attId + '&userId=' + this.$store.getters.userInfo.userId
} else {
this.$message.error('请选择要下载的文件')
}
}
},
getBusStandFileByAttId(attId) {
return new Promise((resolve, reject) => {
getBusStandFileByAttId({
attId
}).then(res => {
if (res.ok) {
resolve(res.data)
} else {
reject()
}
}).catch(e => {
reject(e)
})
})
},
openFileInPdf (attId, fileName) {
// 判断是否是图片格式,图片格式不预览,直接下载
let index1 = fileName.lastIndexOf('.')
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
//把后缀转大写
if(fileSuffix !== undefined && fileSuffix !== null){
fileSuffix = fileSuffix.toUpperCase()
}
// 判断上传文件格式
if (fileSuffix === '.PNG'|| fileSuffix === '.JPG'|| fileSuffix === '.JPEG') {
this.downloadFile(attId)
return true
}
// 缺少文件
if (this.$hasPermission('fd83032ae5f41a0021b00e93c88edbbg')) {
if (fileSuffix === '.PDG' || fileSuffix === '.pdg') {
this.getBusStandFileByAttId(attId)
.then(res => {
if(res){
const editFileInfo = res
if(editFileInfo.fileSuffix === 'pdg' || editFileInfo.fileSuffix === 'PDG'){
window.open('book://ssreader/e0?url='+editFileInfo.downLoadUrl)
}
}
}).catch(e => {
this.$message.warning('文件不存在,预览失败')
})
}else {
this.$http.get('lawss/sarLawsFile/queryConvertAtt', {
attId: attId
}, {
_this: this
}, res => {
if (res.data) {
let fileObj = {}
fileObj.fileId = res.data.attId
fileObj.fileName = fileName
let fileList = []
let repeatData = 0
if (sessionStorage.getItem('fileInfo')) {
fileList = JSON.parse(sessionStorage.getItem('fileInfo'))
if (fileList != null && fileList.length > 0) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].fileId === res.data.attId) {
repeatData = 1
break
}
}
if (repeatData === 0) {
fileList.push(fileObj)
fileList = JSON.stringify(fileList)
sessionStorage.setItem('fileInfo', fileList)
}
}
} else {
fileList.push(fileObj)
fileList = JSON.stringify(fileList)
sessionStorage.setItem('fileInfo', fileList)
}
window.open('/static/pdf/web/viewer.html?file=' + encodeURIComponent('/api/att/attFile/getFileInfo?fileId=' + res.data.attId))
} else {
this.$message.error('文档未转换成功或本地读取不到该文档')
}
}, e => {
this.$message.error('文档未转换成功或本地读取不到该文档')
})
}
} else {
this.$message.error('没有在线预览文档权限!')
}
},
}
}
</script>
<style scoped lang="less">
.regulatoryMaterialsDetail {
width: 100%;
height: 100%;
background: #fff;
overflow: auto;
.container {
padding: 15px 30px 0;
width: 1200px;
margin: 0 auto;
height: 100%;
.header {
padding: 34px 0;
font-size: 20px;
font-weight: bold;
color: #555555;
text-align: center;
}
.content {
border-top: 2px dashed rgb(209, 209, 209);
.modular-header {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
height: 50px;
border-bottom: 1px solid #E5E5E5;
.modular-header-title {
font-size: 18px;
font-weight: bold;
color: #3B424C;
> .icon-modular-title {
display: inline-block;
margin-left: -28px;
width: 18px;
height: 18px;
background-size: 100% 100%;
background-position: center center;
background-image: url("~assets/images/shangqi/standardDetails/modular-title.png");
position: relative;
top: 2px;
}
> span {
padding-left: 10px;
}
}
/deep/ .modular-header-btn{
> button {
height: 30px;
line-height: 30px;
font-size: 14px;
padding: 0 10px;
font-family: 'Microsoft Yahei', '\5FAE\8F6F\96C5\9ED1', Arial, sans-serif !important;
> i{
display: inline-block;
margin-right: 3px;
width: 18px;
height: 18px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: center center;
vertical-align: text-bottom;
}
}
.collection-btn{
padding: 0;
border: none;
> i {
color: #F2CB51;
font-size: 18px;
width: 18px;
height: 18px;
}
> .el-icon-star-on {
font-size: 22px;
}
&:hover{
background: transparent;
}
}
.relation-btn {
color: #409EFF;
border: 1px solid #409EFF;
background: rgba(64, 158, 255, 0.1);
.icon-relation{
background-image: url("~assets/images/shangqi/standardDetails/relation.png");
}
}
}
}
.modular-content {
color: #333;
font-size: 16px;
> p {
min-height: 43px;
line-height: 43px;
border-bottom: 1px solid #E5E5E5;
}
.half {
width: 50%;
float: left;
}
.whole {
width: 100%;
float: left;
}
}
/deep/ .el-collapse-item__wrap {
border: none;
}
.file-item{
display: flex;
align-items: center;
.file-title {
display: inline-block;
font-size: 16px;
color: #409EFF;
cursor: pointer;
overflow: hidden;
text-overflow: ellipsis;
max-width: 780px;
white-space: nowrap;
}
}
/deep/ .el-collapse-item__content {
padding: 0;
}
}
}
}
/deep/ .icon-download {
display: inline-block;
margin-left: 3px;
width: 18px;
height: 16px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: center center;
vertical-align: sub;
cursor: pointer;
background-image: url("~assets/images/shangqi/img/download.png");
}
/deep/ .icon-download2 {
display: inline-block;
margin-left: 3px;
width: 18px;
height: 16px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: center center;
vertical-align: sub;
cursor: pointer;
background-image: url("~assets/images/shangqi/img/download2.png");
}
</style>
@@ -45,13 +45,14 @@
<div style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 156px;line-height: 44px">资料文件</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-for="file in form.information">
<p class="file-item">
<a class="file-title" target="_blank" :title="file.name" @click="openFileInPdf(file.id, file.name)">{{ file.name }}</a>
<template v-if="form.informationFileList && form.informationFileList.length > 0">
<p class="file-item" v-for="file in form.informationFileList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i v-if="hasDownLoadPermission()" title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i v-if="hasDownLoadPermission()" title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<p style=""><label style=" margin-right: 156px;">可查看者</label><span>{{ form.viewableBy || '-' }}</span></p>
@@ -134,19 +135,7 @@ export default {
const id = this.$route.params.id
this.$http._getData(this.url.getLawsInformationInfo, { id }).then(res => {
if (res.ok) {
let ids = ''
let names = ''
let information = []
if (res.data.informationFile && res.data.informationFile !== '') {
ids = this.removeCommasAtStartAndEnd(res.data.informationFile).split(',')
names = this.removeCommasAtStartAndEnd(res.data.informationFileName).split(',')
information = ids.map((id, index) => ({
id,
name: names[index]
}))
}
this.$set(this, 'form', res.data)
this.$set(this.form, 'information', information)
}
})
},
@@ -98,6 +98,9 @@
align="center"
sortable="custom"
>
<template slot-scope="{row, column, $index}">
<a class="table-jump" style="color: #2d8cf0" @click="handlePreview(row.id)">{{ row.meetingName }}</a>
</template>
</el-table-column>
<el-table-column
prop="meetingOrganizer"
@@ -199,6 +202,14 @@ export default {
this.getData()
},
methods: {
// 点击查看
handlePreview(id) {
let routeUrl = this.$router.resolve({
name: 'meetingDetail',
params: { id }
})
window.open(routeUrl.href, '_blank')
},
isPermission (value) {
let hasCount = 0
let set =new Set( value.split(","))
@@ -282,7 +282,7 @@
<template v-for="(item, index) in form.insideContactInformationList">
<el-col :span="24">
<div class="divider-line">
课题组联系方式
内部联系方式
<el-button type="primary" size="mini" icon="el-icon-plus" @click="add('insideContactInformationList')"
:style="{visibility: (index === form.insideContactInformationList.length - 1) ? 'visible' : 'collapse'}"></el-button>
<el-button type="primary" size="mini" icon="el-icon-minus" @click="remove('insideContactInformationList', index)"
@@ -111,6 +111,9 @@
align="center"
sortable="custom"
>
<template slot-scope="{row, column, $index}">
<a class="table-jump" style="color: #2d8cf0" @click="handlePreview(row.id)">{{ row.topicName }}</a>
</template>
</el-table-column>
<el-table-column
prop="organizer"
@@ -213,6 +216,14 @@ export default {
this.getData()
},
methods: {
// 点击查看
handlePreview(id) {
let routeUrl = this.$router.resolve({
name: 'policyTopicsDetail',
params: { id }
})
window.open(routeUrl.href, '_blank')
},
isPermission (value) {
let hasCount = 0
let set =new Set( value.split(","))
+22
View File
@@ -4523,6 +4523,28 @@ const routes = [
isBoolean: true
}
},
{
path: '/meetingDetail/:id',
name: 'meetingDetail',
component: () =>
import('@/pages/details/meetingDetail'),
meta: {
requireAuth: true,
title: '内外部会议详情',
isBoolean: true
}
},
{
path: '/policyTopicsDetail/:id',
name: 'policyTopicsDetail',
component: () =>
import('@/pages/details/policyTopicsDetail'),
meta: {
requireAuth: true,
title: '政策课题详情',
isBoolean: true
}
},
// ************************** 搜索中心 ******************************* //
{
path: '/searchCenter/:selectKey?/:selectValue?',