|
|
@@ -1,12 +1,13 @@
|
|
|
<!-- 顶栏消息通知 -->
|
|
|
<template>
|
|
|
<el-popover
|
|
|
- :width="330"
|
|
|
+ :width="430"
|
|
|
trigger="click"
|
|
|
v-model="visible"
|
|
|
class="ele-notice-group"
|
|
|
transition="el-zoom-in-top"
|
|
|
popper-class="ele-notice-pop"
|
|
|
+ @show="query"
|
|
|
>
|
|
|
<template v-slot:reference>
|
|
|
<div class="ele-notice-group">
|
|
|
@@ -15,98 +16,116 @@
|
|
|
</el-badge>
|
|
|
</div>
|
|
|
</template>
|
|
|
- <el-tabs v-model="active">
|
|
|
- <el-tab-pane name="notice" :label="noticeTitle">
|
|
|
- <div class="ele-notice-list ele-scrollbar-mini">
|
|
|
- <div
|
|
|
- v-for="(item, index) in notice"
|
|
|
- :key="index"
|
|
|
- class="ele-notice-item"
|
|
|
- >
|
|
|
- <div class="ele-cell ele-notice-item-wrapper">
|
|
|
- <i :class="[item.icon, 'ele-notice-item-icon']"></i>
|
|
|
- <div class="ele-cell-content">
|
|
|
- <div class="ele-elip">{{ item.title }}</div>
|
|
|
- <div class="ele-text-secondary ele-elip">{{ item.time }}</div>
|
|
|
+ <div class="ele-notice-list ele-scrollbar-mini">
|
|
|
+ <div v-for="(item, index) in notice" :key="index" class="ele-notice-item">
|
|
|
+ <div class="ele-cell ele-notice-item-wrapper">
|
|
|
+ <i :class="['el-icon-chat-dot-square', 'ele-notice-item-icon']"></i>
|
|
|
+ <div class="ele-cell-content">
|
|
|
+ <div class="ele-elip">{{ item.templateContent }}</div>
|
|
|
+ <div
|
|
|
+ style="
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <div class="ele-text-secondary ele-elip"
|
|
|
+ >{{ item.createTime }}
|
|
|
</div>
|
|
|
+ <div
|
|
|
+ class="el-icon-view"
|
|
|
+ @click="clearNotice(item, index)"
|
|
|
+ title="已读"
|
|
|
+ ></div>
|
|
|
</div>
|
|
|
- <el-divider />
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div v-if="notice.length" class="ele-cell ele-notice-actions">
|
|
|
- <div class="ele-cell-content" @click="clearNotice">清空通知</div>
|
|
|
- <el-divider direction="vertical" class="line-color-light" />
|
|
|
- <router-link to="/user/message?type=notice" class="ele-cell-content">
|
|
|
- 查看更多
|
|
|
- </router-link>
|
|
|
- </div>
|
|
|
- <ele-empty v-if="!notice.length" text="已查看所有通知" />
|
|
|
- </el-tab-pane>
|
|
|
- <el-tab-pane name="letter" :label="letterTitle">
|
|
|
- <div class="ele-notice-list ele-scrollbar-mini">
|
|
|
- <div
|
|
|
- v-for="(item, index) in letter"
|
|
|
- :key="index"
|
|
|
- class="ele-notice-item"
|
|
|
- >
|
|
|
- <div class="ele-cell ele-notice-item-wrapper ele-cell-align-top">
|
|
|
- <el-avatar :src="item.avatar" size="medium" />
|
|
|
- <div class="ele-cell-content">
|
|
|
- <div class="ele-elip">{{ item.title }}</div>
|
|
|
- <div class="ele-text-secondary ele-elip">
|
|
|
- {{ item.content }}
|
|
|
- </div>
|
|
|
- <div class="ele-cell-desc ele-elip">{{ item.time }}</div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <el-divider />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div v-if="letter.length" class="ele-cell ele-notice-actions">
|
|
|
- <div class="ele-cell-content" @click="clearLetter">清空私信</div>
|
|
|
- <el-divider direction="vertical" class="line-color-light" />
|
|
|
- <router-link to="/user/message?type=letter" class="ele-cell-content">
|
|
|
- 查看更多
|
|
|
- </router-link>
|
|
|
- </div>
|
|
|
- <ele-empty v-if="!letter.length" text="已读完所有私信" />
|
|
|
- </el-tab-pane>
|
|
|
- <el-tab-pane :label="todoTitle" name="todo">
|
|
|
- <div class="ele-notice-list ele-scrollbar-mini">
|
|
|
- <div
|
|
|
- v-for="(item, index) in todo"
|
|
|
- :key="index"
|
|
|
- class="ele-notice-item"
|
|
|
- >
|
|
|
- <div class="ele-notice-item-wrapper">
|
|
|
- <div class="ele-cell ele-cell-align-top">
|
|
|
- <div class="ele-cell-content ele-elip">{{ item.title }}</div>
|
|
|
- <el-tag size="mini" :type="['info', 'danger', ''][item.status]">
|
|
|
- {{ ['未开始', '即将到期', '进行中'][item.status] }}
|
|
|
- </el-tag>
|
|
|
- </div>
|
|
|
- <div class="ele-text-secondary ele-elip">
|
|
|
- {{ item.description }}
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <el-divider />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div v-if="todo.length" class="ele-cell ele-notice-actions">
|
|
|
- <div class="ele-cell-content" @click="clearTodo">清空待办</div>
|
|
|
- <el-divider direction="vertical" class="line-color-light" />
|
|
|
- <router-link to="/user/message?type=todo" class="ele-cell-content">
|
|
|
- 查看更多
|
|
|
- </router-link>
|
|
|
- </div>
|
|
|
- <ele-empty v-if="!todo.length" text="已完成所有任务" />
|
|
|
- </el-tab-pane>
|
|
|
- </el-tabs>
|
|
|
+ <el-divider />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div v-if="notice.length" class="ele-cell ele-notice-actions">
|
|
|
+ <div class="ele-cell-content" @click="clearNotice">清空通知</div>
|
|
|
+ <el-divider direction="vertical" class="line-color-light" />
|
|
|
+ <router-link to="/page-wt/message" class="ele-cell-content">
|
|
|
+ 查看更多
|
|
|
+ </router-link>
|
|
|
+ </div>
|
|
|
+ <ele-empty v-if="!notice.length" text="已查看所有通知" />
|
|
|
+ <!-- <el-tabs v-model="active" type="card">-->
|
|
|
+ <!-- <el-tab-pane name="notice" :label="noticeTitle">-->
|
|
|
+ <!-- -->
|
|
|
+ <!-- </el-tab-pane>-->
|
|
|
+ <!-- <el-tab-pane name="letter" :label="letterTitle">-->
|
|
|
+ <!-- <div class="ele-notice-list ele-scrollbar-mini">-->
|
|
|
+ <!-- <div-->
|
|
|
+ <!-- v-for="(item, index) in letter"-->
|
|
|
+ <!-- :key="index"-->
|
|
|
+ <!-- class="ele-notice-item"-->
|
|
|
+ <!-- >-->
|
|
|
+ <!-- <div class="ele-cell ele-notice-item-wrapper ele-cell-align-top">-->
|
|
|
+ <!-- <el-avatar :src="item.avatar" size="medium" />-->
|
|
|
+ <!-- <div class="ele-cell-content">-->
|
|
|
+ <!-- <div class="ele-elip">{{ item.title }}</div>-->
|
|
|
+ <!-- <div class="ele-text-secondary ele-elip">-->
|
|
|
+ <!-- {{ item.content }}-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- <div class="ele-cell-desc ele-elip">{{ item.time }}</div>-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- <el-divider />-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- <div v-if="letter.length" class="ele-cell ele-notice-actions">-->
|
|
|
+ <!-- <div class="ele-cell-content" @click="clearLetter">清空私信</div>-->
|
|
|
+ <!-- <el-divider direction="vertical" class="line-color-light" />-->
|
|
|
+ <!-- <router-link to="/user/message?type=letter" class="ele-cell-content">-->
|
|
|
+ <!-- 查看更多-->
|
|
|
+ <!-- </router-link>-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- <ele-empty v-if="!letter.length" text="已读完所有私信" />-->
|
|
|
+ <!-- </el-tab-pane>-->
|
|
|
+ <!-- <el-tab-pane :label="todoTitle" name="todo">-->
|
|
|
+ <!-- <div class="ele-notice-list ele-scrollbar-mini">-->
|
|
|
+ <!-- <div-->
|
|
|
+ <!-- v-for="(item, index) in todo"-->
|
|
|
+ <!-- :key="index"-->
|
|
|
+ <!-- class="ele-notice-item"-->
|
|
|
+ <!-- >-->
|
|
|
+ <!-- <div class="ele-notice-item-wrapper">-->
|
|
|
+ <!-- <div class="ele-cell ele-cell-align-top">-->
|
|
|
+ <!-- <div class="ele-cell-content ele-elip">{{ item.title }}</div>-->
|
|
|
+ <!-- <el-tag size="mini" :type="['info', 'danger', ''][item.status]">-->
|
|
|
+ <!-- {{ ['未开始', '即将到期', '进行中'][item.status] }}-->
|
|
|
+ <!-- </el-tag>-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- <div class="ele-text-secondary ele-elip">-->
|
|
|
+ <!-- {{ item.description }}-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- <el-divider />-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- <div v-if="todo.length" class="ele-cell ele-notice-actions">-->
|
|
|
+ <!-- <div class="ele-cell-content" @click="clearTodo">清空待办</div>-->
|
|
|
+ <!-- <el-divider direction="vertical" class="line-color-light" />-->
|
|
|
+ <!-- <router-link to="/user/message?type=todo" class="ele-cell-content">-->
|
|
|
+ <!-- 查看更多-->
|
|
|
+ <!-- </router-link>-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- <ele-empty v-if="!todo.length" text="已完成所有任务" />-->
|
|
|
+ <!-- </el-tab-pane>-->
|
|
|
+ <!-- </el-tabs>-->
|
|
|
</el-popover>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
- import { getUnreadNotice } from '@/api/layout';
|
|
|
+ import {
|
|
|
+ getUnreadNotice,
|
|
|
+ getUnreadNotifyMessageCountAPI,
|
|
|
+ updateAllNotifyMessageReadAPI,
|
|
|
+ updateNotifyMessageReadByIdAPI
|
|
|
+ } from '@/api/layout';
|
|
|
+ import { getToken } from '@/utils/token-util';
|
|
|
|
|
|
export default {
|
|
|
data() {
|
|
|
@@ -117,6 +136,8 @@
|
|
|
active: 'notice',
|
|
|
// 通知数据
|
|
|
notice: [],
|
|
|
+ noticeCount: 0,
|
|
|
+ timer: null,
|
|
|
// 私信数据
|
|
|
letter: [],
|
|
|
// 待办数据
|
|
|
@@ -126,40 +147,54 @@
|
|
|
computed: {
|
|
|
// 通知标题
|
|
|
noticeTitle() {
|
|
|
- return '通知' + (this.notice.length ? `(${this.notice.length})` : '');
|
|
|
- },
|
|
|
- // 私信标题
|
|
|
- letterTitle() {
|
|
|
- return '私信' + (this.letter.length ? `(${this.letter.length})` : '');
|
|
|
- },
|
|
|
- // 待办标题
|
|
|
- todoTitle() {
|
|
|
- return '待办' + (this.todo.length ? `(${this.todo.length})` : '');
|
|
|
+ return '通知' + (this.noticeCount > 0 ? `(${this.noticeCount})` : '');
|
|
|
},
|
|
|
+ // // 私信标题
|
|
|
+ // letterTitle() {
|
|
|
+ // return '私信' + (this.letter.length ? `(${this.letter.length})` : '');
|
|
|
+ // },
|
|
|
+ // // 待办标题
|
|
|
+ // todoTitle() {
|
|
|
+ // return '待办' + (this.todo.length ? `(${this.todo.length})` : '');
|
|
|
+ // },
|
|
|
// 未读数量
|
|
|
unreadNum() {
|
|
|
- return this.notice.length + this.letter.length + this.todo.length;
|
|
|
+ return this.noticeCount;
|
|
|
}
|
|
|
},
|
|
|
created() {
|
|
|
- this.query();
|
|
|
+ if (getToken()) {
|
|
|
+ this.getCount();
|
|
|
+ }
|
|
|
+ console.log('123123');
|
|
|
},
|
|
|
methods: {
|
|
|
/* 查询数据 */
|
|
|
- query() {
|
|
|
- getUnreadNotice()
|
|
|
- .then((result) => {
|
|
|
- this.notice = result.notice;
|
|
|
- this.letter = result.letter;
|
|
|
- this.todo = result.todo;
|
|
|
- })
|
|
|
- .catch((e) => {
|
|
|
- console.log(e.message);
|
|
|
- });
|
|
|
+ async query() {
|
|
|
+ this.notice = await getUnreadNotice();
|
|
|
+ this.notice = this.notice.slice(0, 15);
|
|
|
+ },
|
|
|
+ /* 查询条数 */
|
|
|
+ async getCount() {
|
|
|
+ clearInterval(this.timer);
|
|
|
+ let count = await getUnreadNotifyMessageCountAPI();
|
|
|
+ this.noticeCount = count * 1 || 0;
|
|
|
+ this.timer = setInterval(() => {
|
|
|
+ this.getCount();
|
|
|
+ }, 5000);
|
|
|
},
|
|
|
+
|
|
|
/* 清空通知 */
|
|
|
- clearNotice() {
|
|
|
- this.notice = [];
|
|
|
+ async clearNotice(item = {}, index) {
|
|
|
+ if (item.id) {
|
|
|
+ await updateNotifyMessageReadByIdAPI([item.id]);
|
|
|
+ this.notice.splice(index, 1);
|
|
|
+ this.noticeCount = this.noticeCount - 1;
|
|
|
+ } else {
|
|
|
+ await updateAllNotifyMessageReadAPI();
|
|
|
+ this.notice = [];
|
|
|
+ this.noticeCount = 0;
|
|
|
+ }
|
|
|
},
|
|
|
/* 清空通知 */
|
|
|
clearLetter() {
|
|
|
@@ -276,4 +311,13 @@
|
|
|
background-color: hsla(0, 0%, 60%, 0.05);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ .ele-elip {
|
|
|
+ display: -webkit-box;
|
|
|
+ -webkit-box-orient: vertical;
|
|
|
+ -webkit-line-clamp: 3;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ white-space: normal !important;
|
|
|
+ }
|
|
|
</style>
|