<template> <!-- 消息弹出框绘制开始 --> <el-badge :is-dot="showIsDot" class="item"> <el-popover placement="bottom" trigger="click" width="400"> <el-tabs :value="default_tab_pane" :stretch="true"> <!-- 待办 --> <el-tab-pane :label="myTasks.length==0?myTasksLabel:(myTasksLabel+'('+myTasks.length+')')" name="first" style="height: 300px; overflow: auto" :draggable="false"> <el-row v-for="(myTask,index) in myTasks" class="Row" :draggable="false"> <el-col :span="6" class="column1" :draggable="false"> <el-avatar icon="el-icon-s-check" size="small" :draggable="false" style="color: white;background-color: #409eff;"></el-avatar> </el-col> <el-col :span="18" class="column2" :draggable="false"> <el-row :draggable="false"> <el-col :span="12" :draggable="false"> <div :draggable="false">{{myTask.processDefinitionName}}</div> <div :draggable="false">{{myTask.description}}</div> <div :draggable="false">{{myTask.createTime}}</div> </el-col> <el-col :span="6" :draggable="false"> <el-tag :type="myTask.name.indexOf('驳回')!=-1?'danger':(myTask.name.indexOf('成功')!=-1?'success':(myTask.name.indexOf('取消')!=-1?'info':'-'))" size="small" @click="handleTag(myTask)" style="cursor: pointer;" :draggable="false"> {{myTask.name}} </el-tag> </el-col> </el-row> </el-col> </el-row> </el-tab-pane> <!-- 消息 --> <el-tab-pane :label="myMsgs.length==0?myMsgsLabel:(myMsgsLabel+'('+myMsgs.length+')')" name="second" style="height: 300px; overflow: auto" :draggable="false"> <el-row v-for="(myMsg,index) in myMsgs" class="Row" :draggable="false"> <el-col :span="6" class="column1" :draggable="false"> <el-avatar icon="el-icon-chat-dot-square" size="small" :draggable="false" style="color: white;background-color: orange;"></el-avatar> </el-col> <el-col :span="18" class="column2" :draggable="false"> <el-row :draggable="false"> <el-col :span="12" :draggable="false"> <div :draggable="false">{{myMsg.processDefinitionName}}</div> <div :draggable="false">{{myMsg.description}}</div> <div :draggable="false">{{myMsg.createTime}}</div> </el-col> <el-col :span="6" :draggable="false"> <el-tag :type="myMsg.name.indexOf('驳回')!=-1?'danger':(myMsg.name.indexOf('成功')!=-1?'success':(myMsg.name.indexOf('取消')!=-1?'info':'-'))" size="small" @click="handleTag(myMsg)" style="cursor: pointer;" :draggable="false"> {{myMsg.name}} </el-tag> </el-col> </el-row> </el-col> </el-row> </el-tab-pane> </el-tabs> <el-button id="bellBtn" icon="el-icon-bell" size="mini" slot="reference"></el-button> </el-popover> </el-badge> <!-- 消息弹出框绘制结束 --> </template> <script lang="ts"> import {Vue, Component, Prop, Model, Emit} from "vue-property-decorator"; import {Subject} from "rxjs"; import {Environment} from '@/environments/environment'; @Component({}) export default class AppMessagePopover extends Vue { // 是否显示小圆点 public showIsDot: any = false; // 默认显示的tab页 public default_tab_pane: any = "first"; // 待办列表 public myTasks: any = []; // 待办面板标签 public myTasksLabel: any = "待办"; // 消息列表 public myMsgs: any = []; // 消息面板标签 public myMsgsLabel: any = "消息"; /** * vue创建 */ created(): void {} /** * vue挂载 */ mounted(): void { // 首次获取待办列表 this.getMyTasks(); // 定时器:每隔1分钟重新获取待办列表 const timer = setInterval(()=>{ this.getMyTasks(); },60000); // 监听定时器,在vue销毁前清除定时器 this.$once('hook:beforeDestroy',()=>{ // 清除定时器 clearInterval(timer); }); } /** * 获取待办列表 */ public getMyTasks() { let url: any = '/wfcore/mytasks'; this.$http.get(url).then((response: any) => { if (response && response.status == 200) { const data: any = response.data; if (data && data.length > 0) { this.myTasks = data; this.showIsDot = true; } else { this.myTasks = []; } // 获取消息列表 this.getMyMsgs(); } }).catch((error: any) => { this.$Notice.error({title: '错误', desc: error}); }) } /** * 获取消息列表 */ public getMyMsgs(){ // TODO:接口获取消息列表,这里用的待办数据 this.myMsgs = this.myTasks; if (this.myMsgs.length > 0 && this.myTasks.length == 0) { // 显示小圆点 this.showIsDot = true; } } /** * 点击标签事件 */ public handleTag(data: any) { if (!data) return this.$message.error("未获取到标签内容"); // 拼接要打开的窗口地址 const baseUrl:any = Environment.BaseUrl; const openUrl:any = baseUrl + `/wfcore/mytasks/${data.processDefinitionKey}/web/${data.processInstanceBusinessKey}/usertasks/${data.taskDefinitionKey}`; // 打开新窗口 window.open(openUrl,'_blank'); } /** * 销毁之前 */ beforeDestroy(): void { // 清空数据 this.showIsDot = false; this.myTasks = []; this.myMsgs = []; } } </script> <style lang='less'> @import "app-message-popover.less"; </style>