You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
372 lines
11 KiB
372 lines
11 KiB
7 months ago
|
<template>
|
||
|
<div>
|
||
|
<div class="ns-table-title">消息中心</div>
|
||
|
<a-tabs v-model:activeKey="loginType" :destroyInactiveTabPane="true" class="tabs-list">
|
||
|
<a-tab-pane v-for="(item, index) in typeName" :key="typeCode[index]" :tab="item">
|
||
|
<ns-view-list-table ref="nsTableRef" v-bind="tableConfig">
|
||
|
<template #bodyCell="data">
|
||
|
<template v-if="data.column.dataIndex == 'status'">
|
||
|
<div v-if="data.record.status == 1"> <div class="no-read"></div>未读 </div>
|
||
|
<div v-if="data.record.status == 2"> <div class="readed"></div>已读 </div>
|
||
|
</template>
|
||
|
<template v-if="data.column.dataIndex == 'index'">{{ data.index + 1 }}</template>
|
||
|
</template>
|
||
|
</ns-view-list-table>
|
||
|
</a-tab-pane>
|
||
|
</a-tabs>
|
||
|
</div>
|
||
|
</template>
|
||
|
|
||
|
<script setup lang="ts" name="MessageCenterIndex">
|
||
|
import { Modal } from 'ant-design-vue';
|
||
|
import { ref, watch } from 'vue';
|
||
|
import { dateUtil } from '/nerv-lib/util/date-util';
|
||
|
import { http } from '/nerv-lib/util/http';
|
||
|
import { useRouter } from 'vue-router';
|
||
|
import { message } from 'ant-design-vue';
|
||
|
|
||
|
const props = defineProps({
|
||
|
listTableApi: String,
|
||
|
actionApi: Object,
|
||
|
});
|
||
|
|
||
|
let typeName = ['任务', '通知', '预警', '其他'];
|
||
|
let typeCode = [13, 16, 18, 99];
|
||
|
|
||
|
const nsTableRef = ref();
|
||
|
const router = useRouter();
|
||
|
const loginType = ref(typeCode[0]);
|
||
|
|
||
|
const detailUrl = (record) => {
|
||
|
// 服务通知 智慧社区
|
||
|
if (record.tpCode == 'userSubmitVisitor') {
|
||
|
router.push({ name: 'DoorwayAuditIndex' });
|
||
|
}
|
||
|
if (record.tpCode == 'accountBindRoom') {
|
||
|
router.push({ name: 'CertificationAuditIndex' });
|
||
|
}
|
||
|
if (record.tpCode == 'workOrderCommit') {
|
||
|
switch (record.messageBizUuid2) {
|
||
|
case '1':
|
||
|
router.push({ name: 'RepairOrderIndex' });
|
||
|
case '2':
|
||
|
router.push({ name: 'CleanOrderIndex' });
|
||
|
case '3':
|
||
|
router.push({ name: 'WashCleanWorkOrderIndex' });
|
||
|
case '4':
|
||
|
router.push({ name: 'WaterDeliveryOrderIndex' });
|
||
|
case '5':
|
||
|
router.push({ name: 'ProblemReportIndex' });
|
||
|
case '6':
|
||
|
router.push({ name: 'DecorateRegistrationIndex' });
|
||
|
case '7':
|
||
|
router.push({ name: 'CourierServiceIndex' });
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (record.tpCode == 'feedbackCommit') {
|
||
|
router.push({ name: 'ProblemReportIndex' });
|
||
|
}
|
||
|
if (record.tpCode == 'accountBindRoom') {
|
||
|
router.push({ name: 'CertificationAuditIndex' });
|
||
|
}
|
||
|
if (record.tpCode == 'submitFurnishLog') {
|
||
|
router.push({ name: 'DecorateRegistrationIndex' });
|
||
|
}
|
||
|
if (record.tpCode == 'workOrderCentCommit') {
|
||
|
switch (record.messageBizUuid2) {
|
||
|
case '1':
|
||
|
router.push({ name: 'RepairOrderIndex' });
|
||
|
case '2':
|
||
|
router.push({ name: 'CleanOrderIndex' });
|
||
|
case '3':
|
||
|
router.push({ name: 'WashCleanWorkOrderIndex' });
|
||
|
case '4':
|
||
|
router.push({ name: 'WaterDeliveryOrderIndex' });
|
||
|
case '5':
|
||
|
router.push({ name: 'ProblemReportIndex' });
|
||
|
case '6':
|
||
|
router.push({ name: 'DecorateRegistrationIndex' });
|
||
|
case '7':
|
||
|
router.push({ name: 'CourierServiceIndex' });
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (record.tpCode == 'accountPackInit') {
|
||
|
router.push({ name: 'CourierServiceIndex' });
|
||
|
}
|
||
|
if (record.tpCode == 'entrustLeaseWebInit') {
|
||
|
router.push({ name: 'LeaseApplicationIndex' });
|
||
|
}
|
||
|
if (record.tpCode == 'entrustLeaseRoomWebInit') {
|
||
|
router.push({ name: 'RentalApplicationIndex' });
|
||
|
}
|
||
|
|
||
|
// 系统通知 智慧社区
|
||
|
if (record.tpCode == 'patrolTaskTime') {
|
||
|
router.push({ name: 'PatrolTaskIndex' });
|
||
|
}
|
||
|
if (record.tpCode == 'leaveCommit') {
|
||
|
router.push({ name: '' }); // 缺失待补充
|
||
|
}
|
||
|
if (record.tpCode == 'leaveCommit') {
|
||
|
router.push({ name: '' }); // 缺失待补充
|
||
|
}
|
||
|
if (record.tpCode == 'alarmReport') {
|
||
|
router.push({ name: 'IncidentRecordIndex' });
|
||
|
}
|
||
|
if (record.tpCode == 'costStandardInit') {
|
||
|
router.push({ name: 'CostCheckIndex' });
|
||
|
}
|
||
|
if (record.tpCode == 'roomCallBill') {
|
||
|
router.push({ name: 'CostCallIndex' });
|
||
|
}
|
||
|
if (record.tpCode == 'attendanceRecord') {
|
||
|
router.push({ name: '' }); // 缺失待补充
|
||
|
}
|
||
|
|
||
|
// 会议通知 会议中心
|
||
|
let params = JSON.parse(record.params);
|
||
|
if (record.tpCode == 'canHuiTongZhi') {
|
||
|
router.push({ name: 'MyConferenceIndex', query: { meetingName: params.meetingName } });
|
||
|
}
|
||
|
if (record.tpCode == 'huiYiTiXing') {
|
||
|
router.push({ name: 'MyConferenceIndex', query: { meetingName: params.meetingName } });
|
||
|
}
|
||
|
if (record.tpCode == 'huiYiQuXiao') {
|
||
|
router.push({ name: 'MyReserveIndex', query: { meetingName: params.meetingName } });
|
||
|
}
|
||
|
if (record.tpCode == 'riChengQuXiao') {
|
||
|
router.push({ name: 'MyConferenceIndex', query: { meetingName: params.meetingName } });
|
||
|
}
|
||
|
if (record.tpCode == 'qianDaoChengGong') {
|
||
|
router.push({ name: 'MyConferenceIndex', query: { meetingName: params.meetingName } });
|
||
|
}
|
||
|
if (record.tpCode == 'huiYiYuQi') {
|
||
|
router.push({ name: 'MyConferenceIndex', query: { meetingName: params.meetingName } });
|
||
|
}
|
||
|
if (record.tpCode == 'shenPiTongGuo') {
|
||
|
router.push({ name: 'MyReserveIndex', query: { meetingName: params.meetingName } });
|
||
|
}
|
||
|
if (record.tpCode == 'shenPiJuJue') {
|
||
|
router.push({ name: 'MyReserveIndex', query: { meetingName: params.meetingName } });
|
||
|
}
|
||
|
if (record.tpCode == 'shenPiGuoQi') {
|
||
|
router.push({ name: 'MyReserveIndex', query: { meetingName: params.meetingName } });
|
||
|
}
|
||
|
if (record.tpCode == 'huiYiShenPi') {
|
||
|
router.push({ name: 'MeetingApprovalIndex', query: { meetingName: params.meetingName } });
|
||
|
}
|
||
|
if (record.tpCode == 'jiYaoFenXiang') {
|
||
|
router.push({ name: 'MeetingListDetail', query: { id: params.summaryId } });
|
||
|
}
|
||
|
if (record.tpCode == 'huiYiCheXiao') {
|
||
|
router.push({ name: 'MyReserveIndex', query: { meetingName: params.meetingName } });
|
||
|
}
|
||
|
|
||
|
// 设备通知 社区/养老
|
||
|
if (record.tpCode == 'DeviceRuleAlarm') {
|
||
|
router.push({ name: 'AlarmCenterIndex' });
|
||
|
}
|
||
|
if (record.tpCode == 'DeviceRuleAlarmTimeOut') {
|
||
|
router.push({ name: 'AlarmCenterIndex' });
|
||
|
}
|
||
|
};
|
||
|
|
||
|
watch(
|
||
|
() => loginType.value,
|
||
|
(val) => {
|
||
|
tableConfig.value.params.type = val;
|
||
|
},
|
||
|
{ deep: true },
|
||
|
);
|
||
|
|
||
|
const tableConfig = ref({
|
||
|
api: props.listTableApi,
|
||
|
// title: '消息中心',
|
||
|
params: {
|
||
|
type: loginType.value,
|
||
|
},
|
||
|
headerActions: [
|
||
|
{
|
||
|
label: '全部标记已读',
|
||
|
name: 'MessageCenterReaded',
|
||
|
type: 'primary',
|
||
|
handle: () => {
|
||
|
http
|
||
|
.get(props.actionApi['MessageCenterUnRead'], { type: loginType.value })
|
||
|
.then((res) => {
|
||
|
if (res.data) {
|
||
|
Modal.confirm({
|
||
|
title: '警告',
|
||
|
content: '确定设置全部消息已读吗?',
|
||
|
cancelText: '取消',
|
||
|
onOk: () => {
|
||
|
http
|
||
|
.post(props.actionApi['MessageCenterReaded'], { type: loginType.value })
|
||
|
.then((res) => {
|
||
|
nsTableRef.value.nsTableRef.reload();
|
||
|
});
|
||
|
},
|
||
|
});
|
||
|
} else {
|
||
|
message.warn('暂无未读消息!', 3);
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
},
|
||
|
],
|
||
|
rowSelection: null,
|
||
|
resultField: 'data',
|
||
|
scroll: { x: '100%' },
|
||
|
columns: [
|
||
|
{
|
||
|
title: '序号',
|
||
|
dataIndex: 'index',
|
||
|
textNumber: 2,
|
||
|
},
|
||
|
{
|
||
|
title: '消息内容',
|
||
|
dataIndex: 'content',
|
||
|
textEllipsis: true,
|
||
|
},
|
||
|
{
|
||
|
title: '通知时间',
|
||
|
dataIndex: 'messageTime',
|
||
|
textNumber: 8,
|
||
|
customRender: ({ value }) => {
|
||
|
return dateUtil(value).format('YYYY-MM-DD HH:mm:ss');
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
title: '模块来源',
|
||
|
dataIndex: 'title',
|
||
|
textNumber: 8,
|
||
|
},
|
||
|
{
|
||
|
title: '消息状态',
|
||
|
dataIndex: 'status',
|
||
|
textNumber: 4,
|
||
|
customRender: ({ value }) => {
|
||
|
if (value == 1) {
|
||
|
return '未读';
|
||
|
}
|
||
|
if (value == 2) {
|
||
|
return '已读';
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
],
|
||
|
columnActions: {
|
||
|
title: '操作',
|
||
|
actions: [
|
||
|
{
|
||
|
label: '查看',
|
||
|
name: 'MessageCenterDetail',
|
||
|
handle: (record) => {
|
||
|
http.post(props.actionApi['MessageCenterDetail'], { messageId: record.id }).then(() => {
|
||
|
detailUrl(record);
|
||
|
});
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
label: '删除',
|
||
|
name: 'MessageCenterDelete',
|
||
|
dynamicParams: {
|
||
|
messageId: 'id',
|
||
|
},
|
||
|
confirm: {
|
||
|
title: '提示',
|
||
|
content: `确定删除该条消息吗?`,
|
||
|
},
|
||
|
isReload: true,
|
||
|
api: props.actionApi['MessageCenterDelete'],
|
||
|
},
|
||
|
],
|
||
|
},
|
||
|
formConfig: {
|
||
|
schemas: [
|
||
|
{
|
||
|
label: '消息状态',
|
||
|
field: 'status',
|
||
|
component: 'NsSelect',
|
||
|
defaultValue: '',
|
||
|
componentProps: {
|
||
|
options: [
|
||
|
{
|
||
|
label: '全部',
|
||
|
value: '',
|
||
|
},
|
||
|
{
|
||
|
label: '已读',
|
||
|
value: 2,
|
||
|
},
|
||
|
{
|
||
|
label: '未读',
|
||
|
value: 1,
|
||
|
},
|
||
|
],
|
||
|
},
|
||
|
},
|
||
|
],
|
||
|
},
|
||
|
});
|
||
|
</script>
|
||
|
|
||
|
<style lang="less" scoped>
|
||
|
:deep(.ant-tabs-top > .ant-tabs-nav) {
|
||
|
margin-bottom: 0;
|
||
|
.ant-tabs-nav-wrap {
|
||
|
padding-left: 24px;
|
||
|
}
|
||
|
}
|
||
|
.no-read {
|
||
|
width: 8px;
|
||
|
height: 8px;
|
||
|
background-color: #ff1744;
|
||
|
border-radius: 50%;
|
||
|
display: inline-block;
|
||
|
margin-right: 8px;
|
||
|
margin-bottom: 1px;
|
||
|
}
|
||
|
|
||
|
.readed {
|
||
|
width: 8px;
|
||
|
height: 8px;
|
||
|
background-color: #17be6b;
|
||
|
border-radius: 50%;
|
||
|
display: inline-block;
|
||
|
margin-right: 8px;
|
||
|
margin-bottom: 1px;
|
||
|
}
|
||
|
|
||
|
.ns-table-title {
|
||
|
text-align: left;
|
||
|
height: 46px;
|
||
|
line-height: 46px;
|
||
|
//font-size: 16px;
|
||
|
font-size: 18px;
|
||
|
font-weight: bold;
|
||
|
user-select: text;
|
||
|
padding-left: 16px;
|
||
|
background: #fff;
|
||
|
width: calc(100% + 32px);
|
||
|
margin-left: -16px;
|
||
|
cursor: pointer;
|
||
|
}
|
||
|
|
||
|
.tabs-list {
|
||
|
overflow: visible !important;
|
||
|
}
|
||
|
:deep(.ant-tabs-nav) {
|
||
|
width: calc(100% + 32px);
|
||
|
margin-left: -16px !important;
|
||
|
background: #fff;
|
||
|
}
|
||
|
:deep(.ant-tabs-nav-wrap) {
|
||
|
padding: 0 16px;
|
||
|
}
|
||
|
</style>
|