<template>
|
<div style="position: relative">
|
<div class="flex justify-between mb-[15px]" style="align-items: center;margin-bottom: 5px">
|
<div class="block mb-3 font-semibold fonts">消息中心</div>
|
<div class="flex text-[12px]">
|
<div
|
v-for="tab in tabs"
|
:key="tab.id"
|
:class="{ active: currentTabId === tab.id }"
|
class="tab relative"
|
@click="switchTab(tab.id)"
|
>
|
{{ tab.label }}
|
<div v-if="tab.num" class="w-[15px] h-[15px] num">
|
{{ tab.num }}
|
</div>
|
</div>
|
</div>
|
</div>
|
<el-table
|
:data="tableData"
|
:header-cell-style="{
|
background: '#F5F7FC',
|
color: '#454B5E',
|
fontSize: '12px'
|
}"
|
min-height="280"
|
max-height="280"
|
v-loading="tableLoading"
|
>
|
<el-table-column
|
v-for="column in currentTableHeaders"
|
:key="column.prop"
|
:align="column.align"
|
:label="column.label"
|
:min-width="column.minWidth"
|
:prop="column.prop"
|
:show-overflow-tooltip="column.showOverflowTooltip"
|
>
|
<template v-if="column.slot === 'sort'" #default="scope">
|
<div
|
:class="
|
getSortClass(
|
(queryParams.currentPage - 1) *
|
queryParams.pageSize +
|
scope.$index +
|
1
|
)
|
"
|
class="sort"
|
>
|
<span>{{
|
(queryParams.currentPage - 1) * queryParams.pageSize +
|
scope.$index +
|
1
|
}}</span>
|
</div>
|
</template>
|
</el-table-column>
|
|
<el-table-column
|
align="center"
|
class="relative"
|
fixed="right"
|
label="操作"
|
min-width="72"
|
>
|
<template #default="scope">
|
<el-button
|
size="small"
|
type="text"
|
@click="handleDetail(scope.row)"
|
>
|
查看</el-button
|
>
|
<div v-if="scope.row.isRead === '0'" class="viewRead"></div>
|
</template>
|
</el-table-column>
|
</el-table>
|
<div style="position: absolute; bottom: 0px;width: 100%;">
|
<div style="width: 100%;display: flex;flex-direction: row-reverse;align-items: center">
|
<pagination
|
style="width: 100%"
|
v-show="total >= 0"
|
:page-sizes="[4]"
|
:limit="queryParams.pageSize"
|
:page="queryParams.currentPage"
|
:total="total"
|
@pagination="getMessageCountFun"
|
/>
|
</div>
|
</div>
|
</div>
|
</template>
|
<script>
|
import { getMessage, getMessageCount, getRead } from '@/api/message';
|
|
export default {
|
name: "Index",
|
data() {
|
return {
|
tableLoading: false,
|
total: 0,
|
queryParams: {
|
currentPage: 1,
|
pageSize: 4
|
},
|
tableData: [],
|
tabs: [
|
// { id: 'process', label: '通知公告', num: '2' },
|
{ id: 'review', label: '审核消息', num: '' }
|
// { id: 'supervision', label: '督办消息', num: '9' },
|
// { id: 'progress', label: '进度消息', num: '7' }
|
],
|
currentTabId: 0,
|
//配置表格表头数据
|
currentTableHeaders: [
|
{ label: '#', prop: 'index', minWidth: 50, align: 'center', slot: 'sort' },
|
{ label: '消息内容', prop: 'content', minWidth: 300, align: 'left', showOverflowTooltip: true },
|
{ label: '时间', prop: 'gmtCreate', minWidth: 143, align: 'left' }
|
]
|
}
|
},
|
props: {
|
calculation: Array,
|
countExceptionProjectData:Object,
|
},
|
created() {
|
this.currentTabId = this.tabs[0].id; // 默认选中的tab的id
|
|
this.getMessageCountFun({page: 1});
|
},
|
methods: {
|
|
async getMessageCountFun(data) {
|
this.queryParams.currentPage = data.page
|
this.tableLoading = true
|
await getMessageCount(this.queryParams).then(res => {
|
this.tableData = res.data
|
this.total = res.total
|
this.tableLoading = false
|
});
|
},
|
switchTab(tabId) {
|
this.currentTabId = tabId;
|
},
|
|
getSortClass(index) {
|
if (index === 1) {
|
return 'actives';
|
} else if (index === 2) {
|
return 'two';
|
} else if (index === 3) {
|
return 'three';
|
} else {
|
return '';
|
}
|
},
|
|
async getReadFun(id) {
|
const resp = await this.getRead(id);
|
if (resp.code === 200) {
|
await this.getMessageCountFun();
|
}
|
},
|
handleDetail(row) {
|
this.getReadFun(row.id);
|
if (row.auditType === '2') {
|
this.$router.push({
|
path: '/process',
|
query: { taskId: row.taskId, id: row.businessKey, auditType: row.auditType, disabled: 'true' }
|
});
|
} else {
|
this.$router.push({
|
path: '/process',
|
query: { taskId: row.taskId, id: row.businessKey, disabled: 'true' }
|
});
|
}
|
}
|
|
}
|
}
|
</script>
|
|
<style lang="scss" scoped>
|
.tab {
|
padding: 6px;
|
border: 1px solid #dbdeea;
|
cursor: pointer;
|
width: 72px;
|
display: flex;
|
justify-content: center;
|
align-items: center;
|
}
|
|
.active {
|
border: 1px solid #3369ff;
|
color: #3369ff;
|
}
|
|
.fonts {
|
font-size: 16px;
|
color: #212a40;
|
display: flex;
|
align-items: center;
|
}
|
|
.num {
|
position: absolute;
|
z-index: 999;
|
top: -5px;
|
right: -5px;
|
border-radius: 50%;
|
background: #f63f41;
|
color: #fff;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
font-size: 12px;
|
}
|
|
::v-deep .el-table__row {
|
font-size: 12px;
|
}
|
|
.sort {
|
width: 20px;
|
height: 20px;
|
border-radius: 50%;
|
background-color: #eaf0ff;
|
text-align: center;
|
color: #3369ff;
|
}
|
|
.actives {
|
background-color: #3369ff;
|
color: #fff;
|
}
|
|
.two {
|
background-color: #5c87ff;
|
color: #fff;
|
}
|
|
.three {
|
background-color: #85a5ff;
|
color: #fff;
|
}
|
|
::v-deep .el-pagination {
|
margin: -15px;
|
text-align: end;
|
}
|
::v-deep .el-pagination .btn-prev .el-icon,
|
::v-deep .el-pagination .btn-next .el-icon
|
{
|
display: inline;
|
}
|
.viewRead {
|
width: 4px;
|
height: 4px;
|
position: absolute;
|
z-index: 999;
|
top: 10px;
|
right: 20px;
|
border-radius: 50%;
|
background: #f63f41;
|
color: #fff;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
font-size: 12px;
|
}
|
|
.flex {
|
display: flex;
|
justify-content: space-between;
|
font-size: 12px;
|
}
|
</style>
|