Merge remote-tracking branch 'origin/master'

This commit is contained in:
zer0Black
2023-06-27 11:43:38 +08:00
22 changed files with 2050 additions and 205 deletions
+16
View File
@@ -6,6 +6,22 @@
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<!-- <link rel="icon" href="<%= BASE_URL %>favicon.ico">-->
<title><%= htmlWebpackPlugin.options.title %></title>
<script>
(function(w, d, s, q) {
w[q] =w[q] || [];
var f=d.getElementsByTagName(s)[0],j=d.createElement(s);
j.async=true;
j.id='beacon-aplus';
j.src='https://o.alicdn.com/QTSDK/quicktracking-sdk/qt_web.umd.js';
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'aplus_queue');
//集成应用的appKey
aplus_queue.push({ action: 'aplus.setMetaInfo', arguments: ['appKey', '54x8kny36dp66gbiqngsdnmu'] })
//如果是私有云部署还需要在上面那段JS后面紧接着添加日志域名埋点
//通常私有云日志服务端域名类似于:xxx-web-api.xxx.com.cn, 具体域名在“管理控制台-采集信息”模块中获取
aplus_queue.push({ action: 'aplus.setMetaInfo', arguments: ['aplus-rhost-v', 'https://api-ubtas.faw-vw.com'] });
</script>
</head>
<body>
<noscript>
+8
View File
@@ -33,6 +33,14 @@ export default {
}
},
created () {
aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments: ['aplus-autotrack-enabled', true]
})
aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments: ['Info ', true]
});
const _that = this
// var path = window.location.search
// var ticket = this.getQueryVariable(path, 'ticket')
+26
View File
@@ -0,0 +1,26 @@
import { instance as request } from '@/utils/request'
export default {
// 新增|编辑
getList(data) {
return request({
url: '/api/message/list',
method: 'get',
params:data
})
},
allRead(data) {
return request({
url: '/api/message/allRead',
method: 'get',
params:data
})
},
// 单条一度
oneRead(data) {
return request({
url: '/api/message/read/'+data,
method: 'get'
})
},
}
+44 -2
View File
@@ -10,6 +10,14 @@ export function reportUploadPicFile (data) {
})
}
export default {
// 修改上传人
changeUploader (data) {
return request({
url: '/api/report/changeUploader',
method: 'post',
data: data
})
},
// 日志列表
reportLogList (data) {
return request({
@@ -76,6 +84,14 @@ export default {
}
})
},
// 删除文件
delFile(data){
return request({
url: '/api/report/delFile',
method: 'POST',
data,
})
},
// 获取报告详情
getReportDetail (data){
return request({
@@ -86,8 +102,9 @@ export default {
// 获取报告预览
reportGetReportHtmlId (data) {
return request({
url: `/api/report/getReportHtml/${data.id}`,
method: 'GET'
url: `/api/report/getReportHtml`,
method: 'GET',
params:data
})
},
@@ -99,6 +116,22 @@ export default {
params: data
})
},
// 收藏报告
reportCollect(data) {
return request({
url: '/api/reportLogBook/collectOrCancelCollect',
method: 'get',
params:data
})
},
// 收藏列表
collectList(data) {
return request({
url: '/api/report/myCollectPage',
method: 'post',
data
})
},
// 报告列表
reportList (data) {
return request({
@@ -132,6 +165,15 @@ export default {
})
},
// 下载文件
reportDownloadALL (data) {
return request({
url: '/api/report/downloadAll',
method: 'GET',
params: data,
responseType: 'blob'
})
},
// 下载文件
reportDownload (data) {
return request({
url: '/api/report/download',
+5 -1
View File
@@ -90,13 +90,17 @@ export default {
this.$store.commit('activeTab', null)
this.$store.commit('removeDicts', null)
localStorage.removeItem('cookie')
aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments: ["_user_id", ""]
});
// var sevice = "http://"+window.location.host+"/";
// var serviceUrl = encodeURIComponent(sevice);
// 正式
// window.open("https://caddmuat.changan.com.cn/cas/logout?service=http://10.64.23.30:7766/home", '_self');
// 测试
// window.open(BASE_URL.BASE_CHANGAN + "/logout?service=" + BASE_URL.BASE_LOCAL + "/login?loginType=1", '_self');
this.$router.push('https://iam.faw-vw.com/esc-sso/logout?service=http%3A%2F%2F10.94.1.164%3A8888%2FcheckPage')
window.open('https://iam.faw-vw.com/esc-sso/logout?service=http%3A%2F%2F10.94.1.164%3A8888%2FcheckPage','_self')
})
})
},
+1 -1
View File
@@ -225,7 +225,7 @@
<el-table-column v-if="maxSelected && maxSelected == 1" label="" width="35" align="center">
<template slot-scope="scope">
<el-radio class="tableRadio" v-model="tableChecked" @change="radioChange(scope.row)"
:label="scope.row.departmentCode">{{ null }}
:label="scope.row.id">{{ null }}
</el-radio>
</template>
</el-table-column>
+18 -1
View File
@@ -28,7 +28,24 @@ const routes = [
name:'monitorViews',
component: () => import('../../views/userCenter/processCenter/monitorProcesses/monitorDetail.vue')
},
// 站内信
{
path: 'mail',
name: 'mail',
component: () => import('../../views/userCenter/mail/index'),
meta: {
crumb: ['站内信']
}
},
// 我的收藏
{
path: 'collect',
name: 'collect',
component: () => import('../../views/userCenter/collect/index'),
meta: {
crumb: ['我的收藏']
}
},
],
},
+8
View File
@@ -0,0 +1,8 @@
const config = {
webId: '',
// QuickTracking
appKey: '54x8kny36dp66gbiqngsdnmu',
trackHost: 'api_ubtas.faw-vw.com',
sdkUrl: 'https://o.alicdn.com/QTSDK/quicktracking-sdk/qt_web.umd.js'
}
export default config
+141
View File
@@ -0,0 +1,141 @@
import config from '@/utils/env'
import store from '@/store'
console.log(config)
const {
appKey,
trackHost,
sdkUrl
} = config
export const EventType = {
Exp: 'EXP',
Click: 'CLK',
Other: 'OTHER'
}
export function init() {
console.log(window.aplus_queue,"window.aplus_queuewindow.aplus_queuewindow.aplus_queue")
if (!window.aplus_queue) {
console.log("执行了?????")
initQueue()
loadQuickTrackSDK()
.then(() => {
setUserInfo()
})
}
}
export function sendTrackEvent({
eventName,
pageName = eventName,
eventType = EventType.Click,
params
}) {
console.log('qt event', eventName, pageName, eventType, params)
window.aplus_queue.push({
action: 'aplus.record',
arguments: [eventName, eventType, {
...params,
page_name: pageName
}]
})
}
export function sendTrack({
eventName,
pageName = eventName,
params
}) {
console.log('qt tracking', eventName, pageName, params)
window.aplus_queue.push({
action: 'aplus.sendPV',
arguments: [{
is_auto: false
}, {
// ts: Date.now(),
// path: eventName, // 当前page的url
page_name: pageName,
...params
}]
})
}
function initQueue() {
console.log("全买点噢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
window.aplus_queue = []
// 手动 PV
window.aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments: ['aplus-waiting', 'MAN']
})
// 集成应用的appKey
window.aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments: ['appKey', appKey]
})
// 如果是私有云部署还需要在上面那段JS后面紧接着添加日志域名埋点
if (trackHost) {
window.aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments: ['aplus-rhost-v', trackHost]
})
}
// 关闭全埋点
window.aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments: ['aplus-autotrack-enabled', true]
})
window.aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments: ['_hold', 'BLOCK']
})
}
async function loadQuickTrackSDK() {
// qt的库回覆盖window.history的函数 pushState, replaceState 函数并导致IE11报错
// 这里覆盖回去
const nativePushState = window.history.pushState
const nativeReplaceState = window.history.replaceState
return new Promise((resolve) => {
const $scriptInDOM = document.getElementsByTagName('script')[0]
const $script = document.createElement('script')
$script.async = true
$script.id = 'beacon-aplus'
$script.src = sdkUrl
$script.onload = () => {
// qt库内部在body渲染之后延时51,这里延时200应该足以覆盖
sleep(200).then(() => {
window.history.pushState = nativePushState
window.history.replaceState = nativeReplaceState
resolve()
})
}
$scriptInDOM.parentNode.insertBefore($script, $scriptInDOM)
})
}
async function setUserInfo() {
const userInfo = store.getters.userInfo
if (userInfo) {
window.aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments:['$$_user_profile', 'OTHER', {
name: userInfo.usname, //用户属性1
id:userInfo.usid,
}]
})
}
window.aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments: ['_hold', 'START']
})
}
async function sleep(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms)
})
}
+8
View File
@@ -87,6 +87,10 @@ instance.interceptors.response.use(function (response) {
localStorage.removeItem('cookie')
router.push('/login')
Message.error('登录超时过期')
aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments: ["_user_id", ""]
});
// window.open(BASE_URL.BASE_CHANGAN + "/logout?service=" + BASE_URL.BASE_LOCAL + "/login?loginType=1", '_self');
// var url = 'http://192.168.144.22:9966/login?loginType=1'
// // var url = 'http://10.64.23.30:7766/home'
@@ -103,6 +107,10 @@ instance.interceptors.response.use(function (response) {
localStorage.removeItem('cookie')
router.push('/login')
Message.error('登录超时过期')
aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments: ["_user_id", ""]
});
// window.open(BASE_URL.BASE_CHANGAN + "/logout?service=" + BASE_URL.BASE_LOCAL + "/login?loginType=1", '_self');
// var url = 'http://192.168.144.22:9966/login?loginType=1'
// // var url = 'http://10.64.23.30:7766/home'
+25
View File
@@ -151,6 +151,31 @@ export default {
params={ path: '/userCenter/processCenter', query: { id: 'AEHJB8YNJ3' }}
}
this.$message.success('登录成功')
let department
if(this.$store.getters.userInfo.orgEOList){
department= this.$store.getters.userInfo.orgEOList.map(item=>{
return item.longName
})
}
let roleName
if(this.$store.getters.userInfo.roleEOList){
roleName = this.$store.getters.userInfo.roleEOList.map(item=>{
return item.name
})
}
aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments: ["_user_id", this.$store.getters.userInfo.usid]
});
aplus_queue.push({
'action':'aplus.record',
'arguments':['$$_user_profile', 'OTHER', {
name: this.$store.getters.userInfo.usname, //用户属性1
department:department.join(','),
roleName:roleName.join(','),
}]
});
this.getMarket().then((resx)=>{
this.$store.commit('setMarketpre', resx)
this.$router.push(params)
+138 -66
View File
@@ -1,64 +1,70 @@
<template>
<div class="content-height report-detail">
<div class="title">
<el-tooltip :content="row.name" placement="top-start">
<!-- <div class="title">-->
<!-- <el-tooltip :content="row.name" placement="top-start">-->
<span>{{ row.name || '-' }}</span>
</el-tooltip>
</div>
<div class="desc">
<el-row>
<el-col :span="24" class="desc-item">
<label>上传人</label>
<div>{{ row.uploaderName }}</div>
</el-col>
</el-row>
<el-row>
<el-col :span="24" class="desc-item">
<label>关键词</label>
<div>{{ getKeyContent(row.keyContent) }}</div>
</el-col>
</el-row>
<el-row>
<el-col :span="24" class="desc-item">
<label>内容摘要</label>
<p>{{ row.mainContent || '-' }}</p>
</el-col>
</el-row>
<el-row>
<el-col :span="10" class="desc-item">
<label>所属部门</label>
<div>{{ row.departmentName || '-' }}</div>
</el-col>
<!-- <span>{{ row.name || '-' }}</span>-->
<!-- </el-tooltip>-->
<!-- </div>-->
<!-- <div class="desc">-->
<!-- <el-row>-->
<!-- <el-col :span="24" class="desc-item">-->
<!-- <label>上传人</label>-->
<!-- <div>{{ row.uploaderName }}</div>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-row>-->
<!-- <el-col :span="24" class="desc-item">-->
<!-- <label>关键词</label>-->
<!-- <div>{{ getKeyContent(row.keyContent) }}</div>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-row>-->
<!-- <el-col :span="24" class="desc-item">-->
<!-- <label>内容摘要</label>-->
<!-- <p>{{ row.mainContent || '-' }}</p>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-row>-->
<!-- <el-col :span="10" class="desc-item">-->
<!-- <label>所属部门</label>-->
<!-- <div>{{ row.departmentName || '-' }}</div>-->
<!-- </el-col>-->
<el-col :span="10" :offset="2" class="desc-item">
<label>报告年份</label>
<div>{{ row.year || '-' }}</div>
</el-col>
</el-row>
<el-row>
<el-col :span="10" class="desc-item">
<label>报告涉密等级</label>
<div>{{ row.confidentialLevel || '-' }}</div>
</el-col>
<el-col :span="10" :offset="2" class="desc-item">
<label>报告隐私等级</label>
<div>{{ row.privacyLevel || '-' }}</div>
</el-col>
</el-row>
<el-row>
<el-col :span="24" class="desc-item">
<label>标签</label>
<div>{{ row.labels && row.labels.join(',') || '-' }}</div>
</el-col>
</el-row>
</div>
<!-- <el-col :span="10" :offset="2" class="desc-item">-->
<!-- <label>报告年份</label>-->
<!-- <div>{{ row.year || '-' }}</div>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-row>-->
<!-- <el-col :span="10" class="desc-item">-->
<!-- <label>报告涉密等级</label>-->
<!-- <div>{{ row.confidentialLevel || '-' }}</div>-->
<!-- </el-col>-->
<!-- <el-col :span="10" :offset="2" class="desc-item">-->
<!-- <label>报告隐私等级</label>-->
<!-- <div>{{ row.privacyLevel || '-' }}</div>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-row>-->
<!-- <el-col :span="24" class="desc-item">-->
<!-- <label>标签</label>-->
<!-- <div>{{ row.labels && row.labels.join(',') || '-' }}</div>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- </div>-->
<div class="report-download">
<span>报告详情</span>
<el-button type="primary" v-if="row.downPower==1" @click="downloadRow(row)">报告下载</el-button>
<el-button v-if="row.downPower==1" @click="downloadRow(file)"
:disabled="showText && !isExcel" size="mini" class="checkBtn">报告下载</el-button>
</div>
<div class="preview-box" v-watermark="{ text: watermarkText }">
<div class="preview-content" v-html="content"></div>
<div class="preview-list scroll-myself" >
<div class="fileName" v-for="item in row.fileList" :title="item.fileName" @click="handleFile(item)"
:class="{'bgColor':file.fileId==item.fileId}">{{item.fileName}}</div>
</div>
<el-empty class="preview-content" description="excel不可预览" v-if="showText"></el-empty>
<div class="preview-content" v-html="content" v-else></div>
</div>
<div class="report-jug">
<div class="report-jug-left">
@@ -126,6 +132,9 @@ export default {
name: 'ReportDetail',
data() {
return {
showText:false,
pointNum:0,
file:{},
isAdmin: false, //是否是管理员
report: {},
formatDate2,
@@ -144,6 +153,7 @@ export default {
},
userId: this.$store.getters.userInfo.usid,
userName: this.$store.getters.userInfo.usname,
isExcel:false
}
},
methods: {
@@ -248,13 +258,26 @@ export default {
}
},
// 预览
previewRow() {
previewRow(fileId,reportId) {
// this.watermarkText = `${this.$store.state.userInfo.usname} ${formatDate(+new Date(), 'yyyy年MM月dd日 hh:mm:ss')}`
// this.row = JSON.parse(this.$route.query.row)
this.$api.report.reportGetReportHtmlId({id: this.row.id}).then(({data}) => {
this.$api.report.reportGetReportHtmlId({fileId: fileId,reportId:reportId}).then(({data}) => {
this.content = data.content
})
},
handleFile(row){
this.file=row
let lastName=row.fileName.split('.')
let list=['xls','xlsx','XLS','XLSX']
if(list.indexOf(lastName[lastName.length-1])>-1){
this.showText=true
}else{
this.showText=false
this.previewRow(this.file.fileId,this.row.id)
}
},
// 下载
downloadRow(row) {
// this.$confirm('此操作将下载所选数据文件, 是否继续?', '提示', {
@@ -262,9 +285,16 @@ export default {
// cancelButtonText: '取消',
// type: 'warning'
// }).then(() => {
this.$api.report.reportDownload({fileId: row.fileId, repostId: row.id}).then(res => {
downloadFile(res)
})
if(this.isExcel){
this.$api.report.reportDownloadALL({ reportId: this.row.id}).then(res => {
downloadFile(res)
})
}else{
this.$api.report.reportDownload({ reportId: this.row.id}).then(res => {
downloadFile(res)
})
}
// })
},
// 获取详情
@@ -273,13 +303,17 @@ export default {
this.row = res.data
this.isAdmin = this.$store.getters.userInfo.usid==this.row.createUserId
// 需要给分数/2
this.previewRow()
this.handleFile(this.row.fileList[0])
})
},
},
mounted() {
this.reportId = this.$route.query.reportId
if(this.$route.query.isExecel){
this.isExcel=true
}else{
this.isExcel=false
}
// this.previewRow()
this.getComment()
this.getReportDetail()
@@ -291,6 +325,7 @@ export default {
<style lang="scss" scoped>
.report-detail {
overflow: hidden;
.title {
white-space: nowrap;
overflow: hidden;
@@ -344,10 +379,11 @@ export default {
}
.report-download {
height: 40px;
background: #F2F6FC;
border: 1px solid #EBEEF5;
margin: 0 14px 0 13px;
margin: 10px 14px 0 13px;
display: flex;
align-items: center;
justify-content: space-between;
@@ -361,18 +397,42 @@ export default {
}
.preview-box {
// 定位使水印不溢出元素
display: flex;
position: relative;
// 居中
max-height: 800px;
width: calc(100% - 13px - 14px);
margin-left: 13px;
.preview-content {
//margin: 0 14px 0 13px;
max-height: 500px;
padding-bottom: 11px;
//min-height: 500px;
.preview-list{
width: 200px;
margin-top: 10px;
//padding-right: 5px;
max-height: 700px;
overflow: auto;
.fileName{
width: 100%;
height: 30px;
overflow: hidden;
text-overflow: ellipsis;
word-break: keep-all;
white-space: nowrap;
cursor: pointer;
color: #434343;
padding: 0px 10px;
line-height: 28px;
}
}
.preview-content {
//margin: 0 14px 0 13px;
border-left: 2px solid #ccc;
max-height: 700px;
padding-bottom: 11px;
overflow: auto;
width: calc(100% - 200px);
img {
max-width: 100% !important;
}
@@ -480,4 +540,16 @@ export default {
.showLimit ::v-deep .el-textarea .el-input__count{
width: 98%;
}
.bgColor{
background-color: #F2F6FC;
}
.checkBtn {
padding: 5px 20px !important;
background-color:#1890FF;
color: #fff;
}
.el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus{
background-color: #82bffc;
color: #fff;
}
</style>
+24 -45
View File
@@ -77,6 +77,7 @@
<el-col :span="20" style="padding-left: 15px">
<vxe-table ref="xTable" :data="tableData" :empty-render="{name: 'NotData'}" align="center" border stripe
class="table-over"
v-table-min-height="'calc(100vh - 320px)'"
@checkbox-all="selectAllEvent" @checkbox-change="selectChangeEvent">
<vxe-column type="checkbox" width="60"></vxe-column>
@@ -122,6 +123,8 @@
<vxe-column show-overflow show-header-overflow field="uploader" title="上传人"></vxe-column>
<vxe-column show-overflow show-header-overflow title="操作" width="200" fixed="right">
<template #default="{ row }">
<el-button type="text" @click="collectReport(row.id)">{{ row.collect==0?'收藏':'取消收藏' }}</el-button>
<!-- <el-button type="text" v-if="!row.collect" @click="collectReport(row,'n')">取消收藏</el-button>-->
<el-button type="text" v-if="row.power == 1 ||row.power == 2" @click="goReportDetail(row)">预览</el-button>
<el-button type="text" v-if="row.power == 3 || row.power == 2 " @click="downloadRow(row)">下载</el-button>
<el-button type="text" v-if="row.power !== 2 && !isAdmin" @click="permissionApp(row)">申请权限</el-button>
@@ -168,7 +171,7 @@
<script>
import {downloadFile} from '@/utils/downloadFile'
import {formatDate} from '@/utils/date'
import {sendTrackEvent} from '@/utils/quickTracking'
export default {
name: 'ReportList',
data() {
@@ -349,18 +352,6 @@ export default {
this.treeData = res.data
})
},
// 标签列表
labelList() {
this.$api.report.labelList().then(({data}) => {
this.tagData[1].name = data.labelOne.name
this.tagData[2].name = data.labelTwo.name
this.tagData[3].name = data.labelThree.name
this.tagData[1].tags = data.labelOne.childList
this.tagData[2].tags = data.labelTwo.childList
this.tagData[3].tags = data.labelThree.childList
})
},
search() {
this.q.pageNo = 1
this.reportList()
@@ -378,30 +369,7 @@ export default {
}
})
},
// 监听全选按钮
handleCheckAllChange(val, type) {
switch (type) {
case 1:
this.q.labelOneId = val ? this.tagData[type].tags.map(item => item.id) : []
break
case 2:
this.q.labelTwoId = val ? this.tagData[type].tags.map(item => item.id) : []
break
case 3:
this.q.labelThreeId = val ? this.tagData[type].tags.map(item => item.id) : []
break
}
this.tagData[type].isIndeterminate = !val
},
// 监听group checkbox
handleCheckedTagsChange(val, type) {
this.tagData[type].checkAll = (val.length === this.tagData[type].tags.length)
this.tagData[type].isIndeterminate = val.length < this.tagData[type].tags.length
},
// 切换展开隐藏
switchTagShow(type) {
this.tagData[type].tagShow = !this.tagData[type].tagShow
},
// 日期列表
reportDateList() {
this.$api.report.reportDateList().then(({data}) => {
@@ -445,12 +413,6 @@ export default {
}
this.total = 0
this.tableData = []
this.tagData[1].checkAll = false
this.tagData[1].isIndeterminate = true
this.tagData[2].checkAll = false
this.tagData[2].isIndeterminate = true
this.tagData[3].checkAll = false
this.tagData[3].isIndeterminate = true
this.reportList()
},
// 下载
@@ -460,13 +422,24 @@ export default {
// cancelButtonText: '取消',
// type: 'warning'
// }).then(() => {
this.$api.report.reportDownload({fileId: row.fileId,repostId:row.id}).then(res => {
this.$api.report.reportDownload({reportId:row.id}).then(res => {
downloadFile(res)
this.reportList()
})
// })
},
collectReport(id){
this.$api.report.reportCollect({reportId:id}).then(res=>{
this.$message.success("操作成功")
this.reportList()
})
},
// 跳转到详情
goReportDetail(row) {
// sendTrackEvent({
// eventName: 'preview_click',
// params: {id:row.id,name:row.name}
// })
window.open('/report/detail?id='+this.$route.query.id+'&reportId='+row.id)
this.reportList()
// this.$router.push({path: '/report/detail', query: {id: this.$route.query.id, reportId: row.id}})
@@ -726,7 +699,13 @@ export default {
margin-left: 10px;
}
}
.table-over{
background-color: pink;
::v-deep .vxe-table--body-wrapper{
max-height: calc(100vh - 320px);
overflow: auto;
}
}
.preview-dialog-body {
padding: 9px 25px 17px 22px;
height: 60vh;
+78 -37
View File
@@ -29,13 +29,14 @@
</el-row>
<el-row >
<div class="operate-box">
<el-button @click="openLog">操作日志</el-button>
<el-button @click="openLog" v-btn-permission="'HHXMA8B6AS'">操作日志</el-button>
<el-button v-btn-permission="'9S7NYLJ9UF'" @click="openTags">标签维护</el-button>
<el-button @click="openReportAdd">报告上传</el-button>
<el-button @click="changeName" v-btn-permission="'W3G98WZE5H'">更改上传人</el-button>
</div>
</el-row>
</div>
<div class="table">
<div class="table">
<el-row>
<el-col :span="4" class="treeList">
<el-input placeholder="输入关键字进行过滤" v-model="filterText">
@@ -65,7 +66,10 @@
</el-col>
<el-col :span="20" style="padding-left: 15px">
<div class="table">
<vxe-table ref="xTable" :data="tableData" :empty-render="{name: 'NotData'}" align="center" border stripe v-table-min-height="'calc(100vh - 320px)'">
<vxe-table ref="xTable" :data="tableData" @checkbox-all="selectAllEvent" @checkbox-change="selectChangeEvent"
:empty-render="{name: 'NotData'}" align="center" border stripe
v-table-min-height="'calc(100vh - 320px)'" >
<vxe-column type="checkbox" width="60"></vxe-column>
<vxe-column show-overflow show-header-overflow type="seq" title="序号" width="77">
<template #default="{ row, rowIndex }">
{{ rowIndex + (q.pageNo - 1) * q.pageSize + 1 }}
@@ -82,6 +86,7 @@
<vxe-column show-overflow show-header-overflow field="confidentialLevel" title="报告涉密等级"></vxe-column>
<vxe-column show-overflow show-header-overflow field="privacyLevel" title="报告隐私等级"></vxe-column>
<vxe-column show-overflow show-header-overflow field="createDate" title="报告上传时间"></vxe-column>
<vxe-column show-overflow show-header-overflow field="createUserName" title="上传人"></vxe-column>
<vxe-column show-overflow show-header-overflow title="操作" width="200" fixed="right">
<template #default="{ row }">
<el-button type="text" @click="openReportModify('modify', row)">编辑</el-button>
@@ -110,7 +115,7 @@
<el-select v-model="doNames" multiple collapse-tags placeholder="请选择操作类型"
@change="handleTyleChange">
<el-option label="新增" value="新增"></el-option>
<el-option label="修改" value="修改"></el-option>
<el-option label="编辑" value="编辑"></el-option>
<el-option label="删除" value="删除"></el-option>
<el-option label="预览" value="预览"></el-option>
<el-option label="下载" value="下载"></el-option>
@@ -181,7 +186,10 @@
</el-dialog>
<labelModalVue ref="labelModalVue" @updateList="updateList"></labelModalVue>
<!--报告上传-->
<orgTable :visible.sync="visibleOrgTable" title="人员列表" dialog-model :config="{
value: orgTableVal,
valueName: orgTableValName
}" :workNumFlag="true" :maxSelected="1" @confirm="isTreeOk"></orgTable>
</div>
</template>
@@ -191,6 +199,7 @@ import { downloadFile } from "../../utils/downloadFile";
import { formatDate } from '@/utils/date'
import VueTagsInput from '@johmun/vue-tags-input';
import labelModalVue from './reportManager/labelModal.vue';
import {sendTrackEvent} from "@/utils/quickTracking";
export default {
name: "ReportManager",
components: {
@@ -199,6 +208,9 @@ export default {
},
data() {
return {
visibleOrgTable:false,
orgTableVal:'',
orgTableValName:'',
treeKey:'',
watermarkText: '', // 水印
fullscreen: false,
@@ -221,37 +233,10 @@ export default {
treeData: [
],
filterText:'',
filterText2:'',
filterText2:'',
checkedKeys:[],
tagsForm: {
tags01: {
name: '',
parentId: '0',
type: '1',
id: '',
childList: [
// {name: '无', type: '1', id: '', parentId: ''},
]
},
tags02: {
name: '',
parentId: '0',
type: '2',
id: '',
childList: [
// {name: '无', type: '2', id: '', parentId: ''},
]
},
tags03: {
name: '',
parentId: '0',
type: '3',
id: '',
childList: [
// {name: '无', type: '3', id: '', parentId: ''},
]
},
},
checkIds:[],
checkList: [],
/* =============================================== 报告上传 =============================================== */
dialogReport: false, // 报告上传
reportF: {
@@ -328,6 +313,58 @@ export default {
},
methods: {
isTreeOk(checkedList){
const parts = []
const partsName = []
console.log(checkedList, '0009999')
checkedList.map((item, index) => {
parts.push(item.userId || item.USID)
partsName.push(item.uname)
})
// 调用更改接口
this.$api.report.changeUploader({
reportIds:this.checkIds,
userId:parts.toString()
}).then(res=>{
if(res.ok){
this.$message.success(res.data)
}
this.reportList();
})
},
changeName(){
if(this.checkList.length==0){
this.$message.warning('请至少选择一条报告')
return
}
let already=this.checkList.filter(item =>{
if( +item.isAct == 0){
return item
}
})
if(already.length>0) {
let name=already.map(item=>item.name)
this.$message.warning("当前选择的"+name.join(',')+"已经在流程中")
return
}
this.orgTableVal = ''
this.orgTableValName = ''
this.visibleOrgTable = true
},
selectAllEvent({checked}) {
const records = this.$refs.xTable.getCheckboxRecords()
this.checkList = records
this.checkIds = records.map(item => {
return item.id
})
},
selectChangeEvent({checked}) {
const records = this.$refs.xTable.getCheckboxRecords()
this.checkList = records
this.checkIds = records.map(item => {
return item.id
})
},
setCheckedNodes(node, checked) {
node.checked = checked;
if (node.children && node.children.length > 0) {
@@ -683,6 +720,10 @@ export default {
},
// 预览
previewRow(row) {
// sendTrackEvent({
// eventName: 'preview_click',
// params: {id:row.id,name:row.name}
// })
// this.fullscreen = false;
// // 更新预览水印的时间戳
// this.watermarkText = `${this.$store.state.userInfo.usname} ${formatDate(+new Date(), 'yyyy年MM月dd日 hh:mm:ss')}`;
@@ -690,7 +731,7 @@ export default {
// this.content = data.content;
// this.dialogPreview = true;
// })
window.open('/report/detail?id='+this.$route.query.id+'&reportId='+row.id)
window.open('/report/detail?id='+this.$route.query.id+'&reportId='+row.id +'&isExecel=1')
// this.$router.push({path: '/report/detail', query: {id: this.$route.query.id, reportId: row.id}})
this.reportDateList();
},
@@ -701,7 +742,7 @@ export default {
// cancelButtonText: '取消',
// type: 'warning'
// }).then(() => {
this.$api.report.reportDownload({ fileId: row.fileId,repostId:row.id }).then(res => {
this.$api.report.reportDownloadALL({ reportId:row.id }).then(res => {
downloadFile(res);
})
// })
+8 -6
View File
@@ -96,7 +96,7 @@
<el-input v-model="form.leveL" maxlength="10" show-word-limit placeholder="请输入部门级别"></el-input>
</el-form-item>
<el-form-item label="父部门编码:" >
<el-input readonly @click.native="handleClick" v-model="form.parentID" maxlength="50" show-word-limit placeholder="请输入父部门编码"></el-input>
<el-input readonly @click.native="handleClick" v-model="form.parentCode" maxlength="50" show-word-limit placeholder="请输入父部门编码"></el-input>
</el-form-item>
<el-form-item label="部门简称:" >
<el-input v-model="form.shortName" maxlength="50" show-word-limit placeholder="请输入部门简称"></el-input>
@@ -142,6 +142,7 @@ export default {
mode: '',
dialogUser: false,
form: {
parentCode:'',
longName: '', // 部门名称
departmentCode: '', // 部门编码
leveL: '', // 部门级别
@@ -157,24 +158,23 @@ export default {
},
methods: {
isTreeOk(checkedList) {
const parts = []
const partsName = []
checkedList.map((item, index) => {
parts.push(item.departmentCode)
// partsName.push(item.longName)
parts.push(item.id)
partsName.push(item.departmentCode)
})
this.qcrList = checkedList
this.form.parentID = parts.toString()
// this.form.departmentName = partsName.toString()
this.form.parentCode = partsName.toString()
},
handleClick() {
if (this.dialogTitle == '查看') return
if (this.form.parentID) {
this.orgTableVal = this.form.parentID
this.orgTableValName = ''
this.orgTableValName = this.form.parentCode?this.form.parentCode:''
}
this.visibleOrgTable = true
},
@@ -235,6 +235,7 @@ export default {
departmentCode: '', // 部门编码
leveL: '', // 部门级别
parentID: '', // 父部门编码
parentCode:'',
shortName: '', // 部门简称
attribution: '', //归属地
bmdm14: '', // 部门14位码
@@ -298,6 +299,7 @@ export default {
leveL: row.leveL, // 部门级别
departmentCode: row.departmentCode, // 部门级别
parentID: row.parentID, // 父部门编码
parentCode:row.parentCode,
shortName: row.shortName, // 部门简称
id: row.id, // ID
attribution: row.attribution, // 归属地
+1 -1
View File
@@ -103,7 +103,7 @@
<!-- <el-input show-word-limit placeholder="请输入部门"></el-input>-->
</el-form-item>
<el-form-item label="邮箱:">
<el-input v-model="form.email" placeholder="请输入邮箱"></el-input>
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" show-word-limit></el-input>
</el-form-item>
<el-form-item label="角色:" required>
<el-select v-model="form.roleIdList[0]" class="icon-auth" placeholder="请选择角色">
+1 -1
View File
@@ -190,7 +190,7 @@ export default {
if (!this.form.itemValue) {
return this.$message.warning('请检查选项值') && false
}
if (this.form.itemOrder && !(/^[0-9]*$/.test(this.form.itemOrder))) {
if (!this.form.itemOrder || !(/^[0-9]*$/.test(this.form.itemOrder))) {
return this.$message.warning('请检查排序') && false
}
return true
+25
View File
@@ -72,6 +72,31 @@ export default {
params={ path: '/userCenter/processCenter', query: { id: 'AEHJB8YNJ3' }}
}
this.$message.success('登录成功')
let department
if(this.$store.getters.userInfo.orgEOList){
department= this.$store.getters.userInfo.orgEOList.map(item=>{
return item.longName
})
}
let roleName
if(this.$store.getters.userInfo.roleEOList){
roleName = this.$store.getters.userInfo.roleEOList.map(item=>{
return item.name
})
}
aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments: ["_user_id", this.$store.getters.userInfo.usid]
});
aplus_queue.push({
'action':'aplus.record',
'arguments':['$$_user_profile', 'OTHER', {
name: this.$store.getters.userInfo.usname, //用户属性1
department:department.join(','),
roleName:roleName.join(','),
}]
});
this.getMarket().then((resx)=>{
this.$store.commit('setMarketpre', resx)
this.$router.push(params)
+198 -36
View File
@@ -88,23 +88,22 @@
</el-row>
<el-row>
<el-col :span="5" :offset="1">
<el-form-item label="上传报告:" prop="fileId">
<el-upload action="#" :http-request="(params) => uploadFile(params)" :show-file-list="false"
:before-upload="beforeUploadFile" :on-remove="handleRemove"
:file-list="fileList" :disabled="formControl">
<el-button class="uploadBtn" :disabled="formControl">选择文件</el-button>
<el-form-item label="上传报告:" prop="fileList">
</el-upload>
<el-button class="uploadBtn" @click="dialogFile=true">
{{fileList.length>0?('上传文件(已上传'+fileList.length+'个文件)'):'上传文件'}}
</el-button>
</el-form-item>
</el-col>
<el-col :span="8" >
<span class="uploadFile" v-if="form.fileName">
<span :class="{'fontColor':formControl}" :title="form.fileName" class="juli">{{ form.fileName }}</span>
<svg-icon icon-class="cloud" @click="downFile(form.fileId)" style="font-size: 20px"
class-name="icon" ></svg-icon>
<svg-icon icon-class="del" @click="delFile" style="font-size: 20px"
v-if="!formControl" class-name="icon" ></svg-icon>
<!-- <span :class="{'fontColor':formControl}" :title="form.fileName" class="juli">{{ form.fileName }}</span>-->
<!-- <svg-icon icon-class="cloud" @click="downFile(form.fileId)" style="font-size: 20px"-->
<!-- class-name="icon" ></svg-icon>-->
<!-- <svg-icon icon-class="del" @click="delFile" style="font-size: 20px"-->
<!-- v-if="!formControl" class-name="icon" ></svg-icon>-->
<!-- <i class="el-icon-cloudy iconstyle" ></i>-->
<!-- <i :class="{'fontColor':formControl}" class="el-icon-delete iconstyle" @click="delFile"></i>-->
</span>
@@ -116,6 +115,47 @@
value: orgTableVal,
valueName: orgTableValName
}" :workNumFlag="true" :isOrg="true" :maxSelected="1" @confirm="isTreeOk"></orgTable>
<el-dialog title="上传文件" :visible.sync="dialogFile" width="40%" :close-on-click-modal="false"
:close-on-press-escape="false" modal-append-to-body append-to-body>
<el-upload :disabled="formControl" action="/library/api/report/uploadFile" :show-file-list="false"
:before-upload="beforeUploadFile" accept=".xls,.xlsx,.XLS,.XLSX,.pdf,.PDF,.ppt,.PPT"
:file-list="fileList" multiple :on-success="onSuccess"
:on-preview="handlePreview"
:class="{'disable':formControl}">
<div class="table_top">
<el-button class="uploadBtn" type="primary" >上传文件</el-button>
</div>
</el-upload>
<div class="table">
<vxe-table ref="xTable" :data="fileLists" :empty-render="{name: 'NotData'}" align="center" border stripe
class="table-over" width="100%" :loading="table_loading"
v-table-min-height="'50px'">
<vxe-column show-header-overflow field="name" title="文件名称">
<template #default="{ row, rowIndex }">
<!-- <label class="row-title" >-->
<!-- <el-tooltip :content="row.name" placement="top-start">-->
<span class="report-name"> {{ row.name }}</span>
</template>
</vxe-column>
<vxe-column show-overflow show-header-overflow title="操作" width="200" fixed="right">
<template #default="{ row }">
<el-button type="text" class="del-btn" v-if="!formControl" @click="handleRemove(row)">删除</el-button>
</template>
</vxe-column>
</vxe-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="q.pageNo"
:page-sizes="[5, 10, 20]"
:page-size="q.pageSize"
layout="total, sizes, prev, pager, next"
:total="total"/>
</div>
</el-dialog>
</div>
</template>
<script>
@@ -133,7 +173,9 @@ export default {
orgTable
},
props: {
prcType:{
type: String
},
formControl: {
type: Boolean,
default: false
@@ -148,6 +190,11 @@ export default {
},
data() {
return {
table_loading:false,
total:0,
fileLists:[],
delIds:[],
dialogFile:false,
privacyLevelOptions,
confidentialLevelOptions,
orgTableVal: '',
@@ -168,7 +215,7 @@ export default {
},
form: {},
processFormRule: {
fileId: [
fileList: [
{
required: true,
message: "上传报告不能为空",
@@ -250,6 +297,7 @@ export default {
watch: {
processForm: {
handler(val) {
console.log(this.formControl,"jajjajajajajj")
this.form = this.processForm
console.log("变化了", this.form)
if (this.form.secrecyLast) {
@@ -270,11 +318,58 @@ export default {
this.$refs.processFormRef.clearValidate()
})
}
console.log(this.processForm,"this.processForm.fileList.length")
if(this.processForm.fileList){
if(this.processForm.fileList.length>0){
this.fileList=this.processForm.fileList.map(item=>{
return {
name:item.fileName,
id:item.fileId
}
})
this.handleCurrentChange(1)
}
}
},
immediate: true
}
},
methods: {
handleSizeChange(size){
this.q.pageSize=size
this.q.pageNo=1
this.handleCurrentChange()
},
handleCurrentChange(current){
setTimeout(() => {
current = current ? current : this.q.pageNo
this.q.pageNo = current
this.fileLists = this.fileList.slice(this.q.pageSize * (current - 1), this.q.pageSize * current)
// console.log(this.pages.size, this.pages.size * (current - 1), this.pages.size * this.pages.current, this.list)
if (this.fileLists.length < 1 && current > 1) {
this.handleCurrentChange(current - 1)
return false
}
this.total = this.fileList.length
this.table_loading=false
},500)
},
handlePreview(file){
let lastName=file.name.split('.')
let list=['xls','xlsx']
if(list.indexOf(lastName[lastName.length-1].toLower)==-1){
if(this.form.id|| this.form.reportId ) {
this.$api.report.reportDownload({reportId: this.form.id || this.form.reportId, fileId: file.id}).then(res => {
downloadFile(res)
})
}
}else{
this.$message.warning("当前.xls,.xlsx文件不支持下载")
}
},
changeDate(d){
this.form.secrecyLast = new Date(d)
},
@@ -321,12 +416,6 @@ export default {
this.form.departmentName = partsName.toString()
},
delFile() {
if (this.formControl) return
this.fileList = []
this.form.fileName = '';
this.form.fileId = '';
},
reportLevel(item) {
let imList = ['普通商密', '核心商密']
@@ -430,10 +519,21 @@ export default {
this.dialogUser = true
},
handleRemove(file, fileList) {
console.log(file, fileList);
this.form.fileName = '';
this.form.fileId = '';
this.fileList = []
debugger
this.fileList = this.fileList.filter(item=>{
let id=file.response?file.response.data.id:file.id
let ietmid=item.response?item.response.data.id:item.id
if(ietmid!=id){
return item
}
})
this.form.fileList = this.fileList.map(item=>{
return {
fileId:item.response?item.response.data.id:item.id,
fileName:item.response?item.response.data.name:item.name
}
})
this.handleCurrentChange(1)
},
//用递归方式去除children
getTreeData(data) {
@@ -454,30 +554,66 @@ export default {
})
this.$forceUpdate()
},
onSuccess(res, file,fileList){
if(res.ok){
// this.fileList.push({url:res.data.fullurl})//以前的错误代码
this.fileList=fileList
this.form.fileList = this.fileList.map(item=>{
return {
fileId:item.response?item.response.data.id:item.id,
fileName:item.response?item.response.data.name:item.name
}
})
this.$refs.processFormRef.clearValidate(['fileList'])
if( this.form.fileList[fileList.length-1].fileId ){
this.handleCurrentChange(1)
console.log( this.form.fileList,"444")
}
}
console.log( res," this.fileList3")
},
// 上传文件
uploadFile(params) {
let fd = new FormData();
fd.append('file', params.file);
this.$api.report.reportUploadFile(fd).then(({data}) => {
this.form.fileName = data.name;
this.form.fileId = data.key;
this.fileList = [data]
this.$refs.processFormRef.clearValidate(['fileId'])
console.log( this.fileList," this.fileList")
this.fileList.push(data)
this.form.fileList = this.fileList.map(item=>{
return {
fileId:item.id,
fileName:item.name
}
})
this.$refs.processFormRef.clearValidate(['fileList'])
})
console.log( this.fileList," this.fileList22222")
},
// 上传文件前
beforeUploadFile(file) {
let realFileType = file.name.split('.')[file.name.split('.').length - 1];
const isType = (
file.type === fileType.pdf || file.type === fileType.ppt || file.type === fileType.pptx
|| realFileType === 'pdf' || realFileType === 'ppt' || realFileType === 'pptx'
file.type === fileType.pdf || file.type === fileType.ppt || file.type === fileType.pptx || file.type === fileType.xlsx||
file.type == fileType.xls
|| realFileType === 'pdf' || realFileType === 'ppt' || realFileType === 'pptx' || realFileType == 'xls' || realFileType== 'xlsx'
);
const isSize = file.size / 1024 / 1024 < 200;
if (!isType) {
this.$message.error('仅能上传 pdfpptpptx 格式文件');
setTimeout(()=>{
this.$message.error('仅能上传 pdfpptpptx | excel 格式文件');
})
}
if (!isSize) {
this.$message.error('您最大可上传200M文件');
setTimeout(()=> {
this.$message.error('您最大可上传200M文件');
})
}
if(isType && isSize){
this.table_loading=true
}
return isType && isSize;
},
@@ -542,11 +678,6 @@ export default {
}
}
}
.uploadBtn {
vertical-align: super;
}
.uploadFile {
margin-left: -35px;
height: 36px;
@@ -591,4 +722,35 @@ export default {
::v-deep .el-input.is-disabled .el-input__inner{
color: #858585;
}
::v-deep .el-dialog{
min-width: 380px !important;
padding: 0 10px;
.el-dialog__body{
//text-align: center;
}
}
.disable{
::v-deep .el-upload-dragger{
cursor: not-allowed ;
}
}
.table_top{
padding: 10px 13px;
text-align: left;
}
.table {
padding-bottom: 15px;
min-height: 200px;
::v-deep .vxe-table--body-wrapper{
height: 200px;
overflow: auto;
}
.uploadBtn{
margin: 10px;
}
::v-deep .el-pagination{
padding-top: 10px;
}
}
</style>
+24 -8
View File
@@ -11,9 +11,7 @@
<span class="base_title">基础信息</span>
<report-form ref="basMes" :form-control="formControl" :form-controlname="formControlname"
:process-form="processForm"></report-form>
:process-form="processForm" :prcType="prcType"></report-form>
</div>
<div class="process_content" v-if="initShow">
<span class="base_title">审批记录</span>
@@ -118,6 +116,7 @@ export default {
}
},
async created() {
debugger
// 如果是从草稿进入的
if (this.$route.query.isDraft) {
this.isShowSave = true
@@ -154,13 +153,19 @@ export default {
this.$set(this.assignForm,'oneApprove',submitJson.oneApprove)
this.$set(this.assignForm,'oneApproveName',submitJson.oneApproveName)
this.getLearder()
if (this.$route.query.type == 'yiban'){
this.formControl = true
this.initShow = true
this.showTableD = true
}
}
else if (this.$route.query.type == 'yiban') {
this.taskId = this.$store.getters.handleProcess.taskId
this.prcNum = this.$store.getters.handleProcess.prcNum
this.prcId = this.$store.getters.handleProcess.prcId
this.taskId = this.$store.getters.handleProcess?.taskId
this.prcNum = this.$store.getters.handleProcess?.prcNum
this.prcId = this.$store.getters.handleProcess?.prcId
this.prcType = this.$store.getters.handleProcess?.prcType
this.formControl = true
this.initShow = true
this.showTableD = true
@@ -207,6 +212,16 @@ export default {
}
},
methods: {
// 删除文件
delFile(ids){
return new Promise((resolve,reject)=>{
this.$api.report.delFile({
rfIdList:ids
}).then(()=>{
resolve()
})
})
},
// 获取领导
getLearder(){
console.log("获取领导")
@@ -256,8 +271,9 @@ export default {
privacyLevel:'',
tags:'',
mainContent:'',
fileId:'',
fileName:'',
fileId:[],
fileName:[],
fileList:[]
}
this.applicationForm = {
applyReason: '',
+754
View File
@@ -0,0 +1,754 @@
<template>
<div class="content-height report-list">
<div class="title">
<span>报告查询</span>
</div>
<div class="tag-search">
<el-row>
<el-col :span="6">
<div class="tag-item">
<label class="tag-title">全文检索:</label>
<el-input v-model="q.keyContent" placeholder="请输入搜索词"></el-input>
</div>
</el-col>
<el-col :span="6">
<div class="tag-item">
<label class="tag-title">报告年份</label>
<el-select v-model="q.year" multiple collapse-tags placeholder="请选择报告年份">
<template v-for="item in yearList">
<el-option :label="item" :value="item" :key="item"></el-option>
</template>
</el-select>
</div>
</el-col>
<el-col :span="6">
<div class="tag-item">
<label class="tag-title">报告名称:</label>
<el-input v-model="q.name" placeholder="请输入报告名称"></el-input>
</div>
</el-col>
<el-col :span="6" align="right" class="tag-btns">
<el-button type="primary" @click="search">查询</el-button>
<el-button type="default" @click="reset">重置</el-button>
</el-col>
</el-row>
</div>
<el-row class="tag-btn">
<el-button v-if="!isAdmin" type="primary" @click="permissionApp(false)">申请权限</el-button>
<div class="tag-right">
排序
<el-button @click="clickBtn(1)" :class="{'checkClass':isShowbg1}">时间</el-button>
<el-button @click="clickBtn(2)" class="clickNum" :class="{'checkClass':isShowbg2}">点击量</el-button>
<el-button @click="clickBtn(3)" :class="{'checkClass':isShowbg3}">下载量</el-button>
</div>
</el-row>
<div class="table">
<el-row>
<el-col :span="4" class="treeList ">
<el-input placeholder="输入关键字进行过滤" v-model="filterText">
</el-input>
<div class="lef-tree scroll-myself">
<el-tree
class="filter-tree"
:data="treeData"
show-checkbox
node-key="id"
default-expand-all
:filter-node-method="filterNode"
ref="tree"
@check="getHalfCheckedNode"
>
<template slot-scope="{node}">
<!-- <span v-if="node.label.length <= 10">{{ node.label }}</span>-->
<!-- <el-tooltip :content="node.label" placement="top">-->
<div :title="node.label" style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis; width: 150px">
{{ node.label }}
</div>
<!-- </el-tooltip>-->
</template>
</el-tree>
</div>
</el-col>
<el-col :span="20" style="padding-left: 15px">
<vxe-table ref="xTable" :data="tableData" :empty-render="{name: 'NotData'}" align="center" border stripe
v-table-min-height="'calc(100vh - 320px)'"
@checkbox-all="selectAllEvent" @checkbox-change="selectChangeEvent">
<vxe-column type="checkbox" width="60"></vxe-column>
<vxe-column show-overflow show-header-overflow type="seq" title="序号" width="77">
<template #default="{ row, rowIndex }">
{{ rowIndex + (q.pageNo - 1) * q.pageSize + 1 }}
</template>
</vxe-column>
<vxe-column show-header-overflow field="name" title="报告名称">
<template #default="{ row, rowIndex }">
<!-- <label class="row-title" >-->
<!-- <el-tooltip :content="row.name" placement="top-start">-->
<span class="report-name"> {{ row.name }}</span>
</template>
</vxe-column>
<vxe-column show-overflow show-header-overflow field="mainContent" title="摘要"></vxe-column>
<vxe-column show-overflow show-header-overflow field="year" title="报告年份"></vxe-column>
<vxe-column show-overflow show-header-overflow field="reportRating" title="报告评级">
<template #default="{row}">
<el-rate
v-model="row.reportRating/2"
disabled
text-color="#ff9900"
>
</el-rate>
</template>
</vxe-column>
<vxe-column show-overflow show-header-overflow field="thumbUp" title="点赞数">
<template #default="{ row }">
{{row.thumbUp || 0}}
</template>
</vxe-column>
<vxe-column show-overflow show-header-overflow field="clicks" title="点击量">
<template #default="{ row }">
{{row.clicks || 0}}
</template>
</vxe-column>
<vxe-column show-overflow show-header-overflow field="download" title="下载量">
<template #default="{ row }">
{{row.download || 0}}
</template>
</vxe-column>
<vxe-column show-overflow show-header-overflow field="uploader" title="上传人"></vxe-column>
<vxe-column show-overflow show-header-overflow title="操作" width="200" fixed="right">
<template #default="{ row }">
<el-button type="text" v-if="row.collect" @click="collectReport(row.id)">收藏</el-button>
<el-button type="text" v-if="!row.collect" @click="collectReport(row.id)">取消收藏</el-button>
<el-button type="text" v-if="row.power == 1 ||row.power == 2" @click="goReportDetail(row)">预览</el-button>
<el-button type="text" v-if="row.power == 3 || row.power == 2 " @click="downloadRow(row)">下载</el-button>
<el-button type="text" v-if="row.power !== 2 && !isAdmin" @click="permissionApp(row)">申请权限</el-button>
</template>
</vxe-column>
</vxe-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="q.pageNo"
:page-sizes="[5, 10, 20]"
:page-size="q.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"/>
</el-col>
</el-row>
</div>
<!--预览-->
<el-dialog title="预览" :visible.sync="dialogPreview" width="1000px" :close-on-click-modal="false"
:close-on-press-escape="false" :fullscreen="fullscreen">
<div slot="title" class="dialog-title">
<span>预览</span>
<img v-if="!fullscreen" class="full-screen" src="@/assets/imgs/icon-full.png" alt=""
@click="fullscreen = !fullscreen">
<img v-else class="full-screen" src="@/assets/imgs/icon-small.png" alt="" @click="fullscreen = !fullscreen">
</div>
<div class="preview-dialog-body" :class="{'active': fullscreen}">
<!-- <img v-if="!fullscreen" class="full-screen" src="@/assets/imgs/icon-full.png" alt="" @click="fullscreen = !fullscreen">
<img v-else class="full-screen" src="@/assets/imgs/icon-small.png" alt="" @click="fullscreen = !fullscreen"> -->
<!-- 这里用v-if是让水印更新 -->
<el-scrollbar
v-if="dialogPreview"
v-watermark="{ text: watermarkText }">
<div class="preview-content" v-html="content"></div>
</el-scrollbar>
</div>
</el-dialog>
</div>
</template>
<script>
import {downloadFile} from '@/utils/downloadFile'
import {formatDate} from '@/utils/date'
import {sendTrackEvent} from '@/utils/quickTracking'
export default {
name: 'ReportList',
data() {
return {
isShowbg1:true,
isShowbg2:false,
isShowbg3:false,
value:3.7,
watermarkText: '', // 水印
fullscreen: false,
q: {
keyContent: '',
year: [],
name: '',
pageNo: 1,
pageSize: 10,
orderByClicks:0,
orderByDownload:0,
orderByTime:1
},
total: 0,
tableData: [],
yearList: [],
tagData: {
1: {
name: '',
tagShow: false,
tags: [],
isIndeterminate: true,
checkAll: false
},
2: {
name: '',
tagShow: false,
tags: [],
isIndeterminate: true,
checkAll: false
},
3: {
name: '',
tagShow: false,
tags: [],
isIndeterminate: true,
checkAll: false
}
},
dialogPreview: false, // 预览
content: '',
filterText: '',
treeData: [],
checkIds: [],
checkList: [],
checkedKeys: [],
isAdmin: false //是否是管理员
}
},
watch: {
filterText(val) {
this.$refs.tree.filter(val);
}
},
methods: {
clickBtn(type){
for(let i= 1;i<4;i++){
this['isShowbg'+i] = false
}
this['isShowbg'+type] = true
if(type==1){
this.q.orderByTime=1
this.q.orderByClicks=0
this.q.orderByDownload=0
}else if(type==2){
this.q.orderByClicks=1
this.q.orderByTime=0
this.q.orderByDownload=0
}else{
this.q.orderByDownload=1
this.q.orderByClicks=0
this.q.orderByTime=0
}
this.q.pageNo=1
this.reportList()
},
getKeyContent(list) {
if (list) {
let keyContent = []
list = JSON.parse(list)
list.forEach(item => {
keyContent.push(item.text)
})
keyContent = keyContent.toString().replace(/,/g, '/');
if (keyContent == '') keyContent = '---'
// if(keyContent.length>15){
// keyContent=keyContent.slice(0,15) +'...'
// }
return keyContent
} else {
return ''
}
},
getHalfCheckedNode(node, data) {
this.checkedKeys = data.checkedKeys
this.reportList()
},
filterNode(value, data) {
if (!value) return true;
return data.label.indexOf(value) !== -1;
},
selectAllEvent({checked}) {
const records = this.$refs.xTable.getCheckboxRecords()
this.checkList = records
this.checkIds = records.map(item => {
return item.id
})
},
selectChangeEvent({checked}) {
const records = this.$refs.xTable.getCheckboxRecords()
this.checkList = records
this.checkIds = records.map(item => {
return item.id
})
},
permissionApp(row) {
if(row){
if(row.isAct == 0){
this.$message.warning("当前"+row.name+"已经在流程中")
return
}
this.$router.push({
path: '/permission/launch',
query: {id: 'AEHJB8YNJ3', isBegin: 1,ids:row.id}
})
}else{
if(this.checkList.length <1){
this.$message.warning("至少选择一条报告进行权限申请")
return
}
let already=this.checkList.filter(item =>{
if( +item.isAct == 0){
return item
}
})
if(already.length>0) {
let name=already.map(item=>item.name)
this.$message.warning("当前选择的"+name.join(',')+"已经在流程中")
return
}
// 有预览权限的时候是否还让继续申请
let temp=this.checkList.filter(item =>{
if( +item.power == 2){
return item.name
}
})
console.log(temp)
if(temp.length>0) {
let name=temp.map(item=>item.name)
this.$message.warning("当前选择的"+name.join(',')+"已经有权限,无须申请!")
return
}
this.$router.push({
path: '/permission/launch',
query: {id: 'AEHJB8YNJ3', isBegin: 1,ids:this.checkIds.join(',')}
})
}
},
init() {
this.getTreeLabel()
// this.labelList()
this.reportDateList()
this.reportList()
},
getTreeLabel() {
this.$api.report.labelList().then(res => {
this.treeData = res.data
})
},
search() {
this.q.pageNo = 1
this.reportList()
},
// 列表
reportList() {
this.$api.report.collectList({...this.q, labelId: this.checkedKeys}).then(({data}) => {
this.tableData = data.records
this.total = data.total
this.q.pageNo = data.current
this.q.pageSize = data.size
if (!data.records.length && this.q.pageNo !== 1) {
this.q.pageNo = 1
this.reportList()
}
})
},
// 日期列表
reportDateList() {
this.$api.report.reportDateList().then(({data}) => {
this.yearList = data.list
})
},
// 单页数据量
handleSizeChange(val) {
this.q.pageSize = val
this.q.pageNo = 1
this.reportList()
},
// 第几页
handleCurrentChange(val) {
this.q.pageNo = val
this.reportList()
},
// 预览
previewRow(row) {
this.fullscreen = false
// 更新预览水印的时间戳
this.watermarkText = `${this.$store.state.userInfo.usname} ${formatDate(+new Date(), 'yyyy年MM月dd日 hh:mm:ss')}`
this.$api.report.reportGetReportHtmlId({id: row.id}).then(({data}) => {
this.content = data.content
this.dialogPreview = true
})
},
// 重置
reset() {
this.q = {
keyContent: '',
year: [],
labelOneId: [],
labelTwoId: [],
labelThreeId: [],
pageNo: 1,
pageSize: 10,
orderByTime:1,
orderByDownload:0,
orderByClicks:0
}
this.total = 0
this.tableData = []
this.tagData[1].checkAll = false
this.tagData[1].isIndeterminate = true
this.tagData[2].checkAll = false
this.tagData[2].isIndeterminate = true
this.tagData[3].checkAll = false
this.tagData[3].isIndeterminate = true
this.reportList()
},
// 下载
downloadRow(row) {
// this.$confirm('此操作将下载所选数据文件, 是否继续?', '提示', {
// confirmButtonText: '确定',
// cancelButtonText: '取消',
// type: 'warning'
// }).then(() => {
this.$api.report.reportDownload({reportId:row.id}).then(res => {
downloadFile(res)
this.reportList()
})
// })
},
collectReport(id){
this.$api.report.reportCollect({reportId:id}).then(res=>{
this.$message.success("操作成功")
this.reportList()
})
},
// 跳转到详情
goReportDetail(row) {
sendTrackEvent({
eventName: 'preview_click',
params: {id:row.id,name:row.name}
})
window.open('/report/detail?id='+this.$route.query.id+'&reportId='+row.id)
this.reportList()
// this.$router.push({path: '/report/detail', query: {id: this.$route.query.id, reportId: row.id}})
}
},
created() {
this.init()
// 判断当前人是不是管理员
if((this.$store.getters.userInfo.levelId=='1' || this.$store.getters.userInfo.levelId=='2'
||this.$store.getters.userInfo.levelId=='3' || this.$store.getters.userInfo.levelId=='4'
)&&this.$store.getters.userInfo.employeeTypeId=='1' ){
this.isAdmin = true
}else{
this.isAdmin=false
}
}
}
</script>
<style lang="scss" scoped>
.keyContent {
display: inline-block;
width: 50px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.treeList {
padding: 20px 20px 0;
box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04);
//margin-right: 20px;
.filter-tree {
margin-top: 20px;
height: calc(100vh - 320px);
//overflow: scroll;
font-size: 14px;
}
}
.tree {
height: 500px;
//overflow: auto;
.filter-tree {
margin-top: 20px;
}
}
.report-name {
cursor: pointer;
}
.report-list {
.title {
border-bottom: 1px solid #EBEEF5;
height: 42px;
line-height: 42px;
margin: 0 18px 0 22px;
span {
font-size: 16px;
font-weight: 600;
color: #262626;
}
}
.tag-btn {
.el-button + .el-button {
margin-left: 0px;
}
padding: 18px 13px 11px;
.tag-right{
float: right;
::v-deep .el-button{
border: 1px solid #3D87CC;
border-radius: 0;
color: #3D87CC;
background-color: #ecf5ff;
}
.clickNum{
border: none;
border-top: 1px solid #3D87CC ;
border-bottom: 1px solid #3D87CC;
}
}
.checkClass{
background-color: rgba(64, 158, 255, 1) !important;
color: #fff !important;
}
}
.tag-search {
padding-top: 9px;
::v-deep .el-date-picker,
::v-deep .el-input {
width: 240px;
}
.tag-item {
margin-bottom: 15px;
display: flex;
.year {
::v-deep .el-input__inner {
padding: 0 15px !important;
}
}
label.tag-title {
font-size: 14px;
font-weight: normal;
color: #646464;
display: inline-block;
// width: 112px;
height: 19px;
line-height: 19px;
padding-left: 13px;
// border-right: 1px solid #BFBFBF;
margin-right: 10px;
margin-top: 2.5px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.tag-show {
flex: 1;
margin-right: 28px;
height: 19px;
overflow: hidden;
position: relative;
&.active {
height: auto;
}
::v-deep .check-active {
.el-checkbox__label {
color: #434343;
}
}
::v-deep .el-checkbox {
margin-right: 15px;
color: #434343;
}
::v-deep .el-checkbox__label {
min-width: 80px;
}
::v-deep .el-checkbox-group {
display: inline;
}
.el-icon-arrow-down,
.el-icon-arrow-up {
color: #C0C4CC;
cursor: pointer;
position: absolute;
right: 0;
top: 2px;
}
}
}
.tag-btns {
padding-right: 15px;
}
}
.table {
margin: 0 14px 0 13px;
.row-info {
width: 100%;
display: flex;
align-items: center;
justify-content: flex-start;
.icon-file-type {
width: 48px;
height: 48px;
margin-right: 21px;
}
.row-text {
width: calc(100% - 48px - 21px);
flex: 1;
display: flex;
flex-flow: column;
text-align: left;
.row-title {
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
font-size: 14px;
font-weight: 500;
color: #262626;
cursor: pointer;
&:hover {
color: #1890FF;
}
}
.tag-info {
.icon-tag-item {
margin-left: 12px;
img {
width: 12px;
margin-right: 5px;
vertical-align: middle;
}
span {
display: inline-block;
min-width: 80px;
font-size: 12px;
color: #8C8C8C;
font-weight: 500;
vertical-align: middle;
}
}
}
}
}
::v-deep .el-pagination {
margin-top: 13px;
padding-left: 20px;
padding-bottom: 10px;
}
}
.dialog-title {
display: inline-flex;
justify-content: center;
align-items: center;
.full-screen {
cursor: pointer;
width: 24px;
height: 24px;
vertical-align: middle;
margin-left: 10px;
}
}
.preview-dialog-body {
padding: 9px 25px 17px 22px;
height: 60vh;
position: relative;
&.active {
height: calc(100vh - 52px);
}
.full-screen {
cursor: pointer;
position: absolute;
z-index: 10;
right: 35px;
top: 10px;
width: 24px;
height: 24px;
//&:hover{
// color: #199BFF;
//}
}
::v-deep .el-scrollbar {
height: 100%;
.el-scrollbar__wrap {
overflow-x: auto;
}
.el-scrollbar__view {
padding: 0 !important;
.preview-content {
img {
max-width: 100% !important;
}
table {
margin: 0 auto;
}
}
}
}
}
}
</style>
+499
View File
@@ -0,0 +1,499 @@
<template>
<div class="content-height report-list">
<div class="title">
<span>站内信</span>
</div>
<div class="tag-search">
<el-row>
<el-col :span="6">
<div class="tag-item">
<label class="tag-title">标题:</label>
<el-input v-model="q.messageTitle" placeholder="请输入标题"></el-input>
</div>
</el-col>
<!-- <el-col :span="6">-->
<!-- <div class="tag-item">-->
<!-- <label class="tag-title">发布人</label>-->
<!-- <el-select v-model="q.year" multiple collapse-tags placeholder="请选择报告年份">-->
<!-- <template v-for="item in yearList">-->
<!-- <el-option :label="item" :value="item" :key="item"></el-option>-->
<!-- </template>-->
<!-- </el-select>-->
<!-- </div>-->
<!-- </el-col>-->
<el-col :span="6" :offset="12" align="right" class="tag-btns">
<el-button type="primary" @click="search">查询</el-button>
<el-button type="default" @click="reset">重置</el-button>
</el-col>
</el-row>
</div>
<el-row class="tag-btn">
<el-button type="primary" @click="permissionApp(false)">全部标注已读</el-button>
</el-row>
<div class="table">
<el-row>
<el-col :span="24">
<vxe-table ref="xTable" :data="tableData" :empty-render="{name: 'NotData'}" align="center" border stripe
v-table-min-height="'calc(100vh - 320px)'"
@checkbox-all="selectAllEvent" @checkbox-change="selectChangeEvent">
<vxe-column show-header-overflow field="messageTitle" title="标题">
</vxe-column>
<vxe-column show-overflow show-header-overflow field="messageTypeDesc" title="消息类型">
</vxe-column>
<vxe-column show-overflow show-header-overflow field="createDate" title="发布时间">
<template #default="{ row }">
{{formatDate2(row.createDate)}}
</template>
</vxe-column>
<vxe-column show-overflow show-header-overflow field="readType" title="阅读状态">
<template #default="{row}">
<el-tag :type="row.readType=='0'?'info':'success'">{{row.readType=='0'?'未读':'已读'}}</el-tag>
</template>
</vxe-column>
<vxe-column show-overflow show-header-overflow title="操作" width="200" fixed="right">
<template #default="{ row }">
<el-button type="text" @click="goReportDetail(row)">查看</el-button>
</template>
</vxe-column>
</vxe-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="q.pageNo"
:page-sizes="[5, 10, 20]"
:page-size="q.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"/>
</el-col>
</el-row>
</div>
<el-dialog
title="查看详情"
:visible.sync="dialogPreview"
width="30%"
class="addreport"
:before-close="handleClose">
<div class="messageBox">
<div class="messageBox_title">
<div class="messageBox_title_top">{{detail.messageTitle}}</div>
<div class="messageBox_time">
<!-- 发布人: {{detail.createDate}}-->
发布时间 {{formatDate2(detail.createDate)}}
</div>
</div>
<div class="messageBox_content">
<div class="messageBox_content_type">
{{detail.messageTypeDesc}}
</div>
<div class="mailContent">
通知内容:{{detail.content}}
</div>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import {formatDate2} from '@/utils/date'
export default {
name: 'ReportList',
data() {
return {
detail:'',
formatDate2,
value:3.7,
watermarkText: '', // 水印
fullscreen: false,
q: {
messageTitle: '',
pageNo: 1,
pageSize: 10,
},
total: 0,
tableData: [],
dialogPreview: false, // 预览
content: '',
filterText: '',
}
},
watch: {
filterText(val) {
this.$refs.tree.filter(val);
}
},
methods: {
selectAllEvent({checked}) {
const records = this.$refs.xTable.getCheckboxRecords()
this.checkList = records
this.checkIds = records.map(item => {
return item.id
})
},
selectChangeEvent({checked}) {
const records = this.$refs.xTable.getCheckboxRecords()
this.checkList = records
this.checkIds = records.map(item => {
return item.id
})
},
permissionApp(row) {
this.$api.message.allRead().then(({data}) => {
this.reportList()
})
},
init() {
this.reportList()
},
search() {
this.q.pageNo = 1
this.reportList()
},
// 列表
reportList() {
this.$api.message.getList({...this.q}).then(({data}) => {
this.tableData = data.records
this.total = data.total
this.q.pageNo = data.current
this.q.pageSize = data.size
if (!data.records.length && this.q.pageNo !== 1) {
this.q.pageNo = 1
this.reportList()
}
})
},
// 单页数据量
handleSizeChange(val) {
this.q.pageSize = val
this.q.pageNo = 1
this.reportList()
},
// 第几页
handleCurrentChange(val) {
this.q.pageNo = val
this.reportList()
},
handleClose(){
if(this.detail.readType =='0'){
this.$api.message.oneRead(this.detail.id).then(res=>{
this.dialogPreview=false
this.reportList()
})
}else{
this.dialogPreview=false
}
},
// 重置
reset() {
this.q = {
pageNo: 1,
pageSize: 10,
}
this.tableData = []
this.reportList()
},
goReportDetail(row) {
//弹出详情
this.detail=row
this.dialogPreview=true
}
},
created() {
this.init()
}
}
</script>
<style lang="scss" scoped>
.report-list {
.title {
border-bottom: 1px solid #EBEEF5;
height: 42px;
line-height: 42px;
margin: 0 18px 0 22px;
span {
font-size: 16px;
font-weight: 600;
color: #262626;
}
}
.tag-btn {
.el-button + .el-button {
margin-left: 0px;
}
padding: 18px 13px 11px;
.tag-right{
float: right;
::v-deep .el-button{
border: 1px solid #3D87CC;
border-radius: 0;
color: #3D87CC;
background-color: #ecf5ff;
}
.clickNum{
border: none;
border-top: 1px solid #3D87CC ;
border-bottom: 1px solid #3D87CC;
}
}
.checkClass{
background-color: rgba(64, 158, 255, 1) !important;
color: #fff !important;
}
}
.tag-search {
padding-top: 9px;
::v-deep .el-date-picker,
::v-deep .el-input {
width: 240px;
}
.tag-item {
margin-bottom: 15px;
display: flex;
.year {
::v-deep .el-input__inner {
padding: 0 15px !important;
}
}
label.tag-title {
font-size: 14px;
font-weight: normal;
color: #646464;
display: inline-block;
// width: 112px;
height: 19px;
line-height: 19px;
padding-left: 13px;
// border-right: 1px solid #BFBFBF;
margin-right: 10px;
margin-top: 2.5px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.tag-show {
flex: 1;
margin-right: 28px;
height: 19px;
overflow: hidden;
position: relative;
&.active {
height: auto;
}
::v-deep .check-active {
.el-checkbox__label {
color: #434343;
}
}
::v-deep .el-checkbox {
margin-right: 15px;
color: #434343;
}
::v-deep .el-checkbox__label {
min-width: 80px;
}
::v-deep .el-checkbox-group {
display: inline;
}
.el-icon-arrow-down,
.el-icon-arrow-up {
color: #C0C4CC;
cursor: pointer;
position: absolute;
right: 0;
top: 2px;
}
}
}
.tag-btns {
padding-right: 15px;
}
}
.table {
margin: 0 14px 0 13px;
.row-info {
width: 100%;
display: flex;
align-items: center;
justify-content: flex-start;
.icon-file-type {
width: 48px;
height: 48px;
margin-right: 21px;
}
.row-text {
width: calc(100% - 48px - 21px);
flex: 1;
display: flex;
flex-flow: column;
text-align: left;
.row-title {
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
font-size: 14px;
font-weight: 500;
color: #262626;
cursor: pointer;
&:hover {
color: #1890FF;
}
}
.tag-info {
.icon-tag-item {
margin-left: 12px;
img {
width: 12px;
margin-right: 5px;
vertical-align: middle;
}
span {
display: inline-block;
min-width: 80px;
font-size: 12px;
color: #8C8C8C;
font-weight: 500;
vertical-align: middle;
}
}
}
}
}
::v-deep .el-pagination {
margin-top: 13px;
padding-left: 20px;
padding-bottom: 10px;
}
}
.dialog-title {
display: inline-flex;
justify-content: center;
align-items: center;
.full-screen {
cursor: pointer;
width: 24px;
height: 24px;
vertical-align: middle;
margin-left: 10px;
}
}
.preview-dialog-body {
padding: 9px 25px 17px 22px;
height: 60vh;
position: relative;
&.active {
height: calc(100vh - 52px);
}
.full-screen {
cursor: pointer;
position: absolute;
z-index: 10;
right: 35px;
top: 10px;
width: 24px;
height: 24px;
//&:hover{
// color: #199BFF;
//}
}
::v-deep .el-scrollbar {
height: 100%;
.el-scrollbar__wrap {
overflow-x: auto;
}
.el-scrollbar__view {
padding: 0 !important;
.preview-content {
img {
max-width: 100% !important;
}
table {
margin: 0 auto;
}
}
}
}
}
}
.messageBox{
min-height: 400px;
padding: 20px;
.messageBox_title{
border-bottom: 1px solid #ccc;
//padding-bottom: 10px;
padding: 10px 10px;
}
.messageBox_title_top{
font-size: 18px;
font-weight: 500;
}
.messageBox_time{
color: #acacac;
font-size: 15px;
margin-top: 5px;
}
.messageBox_content{
margin-top: 20px;
padding: 10px 10px;
.messageBox_content_type{
font-size: 15px;
margin-bottom: 5px;
}
}
.mailContent{
width: 100%;
max-height: 200px;
overflow: auto;
}
}
</style>