Commit 70d0bf4c by xiexiaoqin

feat: 首页动态websocket通知更新,会议详情动态列表过往动态分割

parent bd181f3c
......@@ -25,6 +25,7 @@ export default async function login() {
getApp().globalData.name = res.data.data.oapiUser.name;
getApp().globalData.userid = res.data.data.oapiUser.userid;
getApp().globalData.mwUserId = res.data.data.mwUserId;
dd.setStorageSync({ key: 'mwUserId', data: res.data.data.mwUserId })
getApp().globalData.avatar = res.data.data.oapiUser.avatar;
getApp().globalData.userInfo = JSON.stringify({
username: oapiUser.name,
......
......@@ -281,4 +281,10 @@ export function getDeviceBySn(data) {
method: "get",
url: `/meet/meeting-room-device/getDeviceBySn?deviceSn=${data}`
});
}
export function setRead(meetingId) {
return $http({
method: 'get',
url: `/meet/comment/read?meetingId=${meetingId}&platform=dingTalk`
})
}
\ No newline at end of file
......@@ -76,6 +76,7 @@ create.Page({
this.store.data.affairList.unshift(addData);
this.store.data.tasks.unshift(addData);
this.store.data.isNeedReloadIndexList = true;
this.store.data.separateIndex += 1;
this.update();
dd.navigateBack();
}
......
......@@ -36,12 +36,13 @@
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
}
.unread-message {
position: absolute;
top: 48rpx;
right: 48rpx;
top: 0;
right: 0;
color: #fff;
background: #ea4e6b;
font-size: 24rpx;
......
......@@ -14,9 +14,9 @@
<view class="meetingtitle" data-groupId="{{item.meetingId}}" catchTap="nextDetail" data-item="{{item}}">
<view>
{{item.title}}
</view>
<view a:if="{{item.unReadMessageTotal}}" class="unread-message">
{{item.unReadMessageTotal}}
<view a:if="{{item.unReadMessageCommentIdList.length}}" class="unread-message">
{{item.unReadMessageCommentIdList.length}}
</view>
</view>
</view>
<block a:for="{{item.commentListDataModelList}}" a:for-item="dynamicItem" key="{{item.id}}">
......
......@@ -16,11 +16,13 @@ import {
getFormatDate,
throttle,
padZero,
getCreateShowTime
getCreateShowTime,
isJSON
} from "../../utils/utils";
import { checkFullScren } from "../../utils/checkFullScren";
import create from "dd-store";
import pageStore from '../meetingDetail/store';
// const webSocket = require('../../utils/websocket.js');
const currentDate = new Date();
const minYear = currentDate.getFullYear();
......@@ -29,6 +31,7 @@ let DateMap = getDateMap(minYear, maxYear);
const weekList = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"];
let maxClickCount = 5;
const uuid = Math.random().toString(36).substr(2);
create.Page({
store: pageStore,
data: {
......@@ -99,6 +102,19 @@ create.Page({
this.isNeverShowSchedulePage = false;
}
}
//webSocket.connectSocket();
//webSocket.onSocketMessageCallback = this.onSocketMessageCallback.bind(this);
},
// socket收到的信息回调
onSocketMessageCallback(event) {
// 返回一个JSON字符串
if (isJSON(event)) {
const dataFromServer = JSON.parse(event);
if (dataFromServer.reload.indexOf('comment_') !== -1) {
this.getPages();
}
}
},
onLoad(query) {
if (query && query.sn) {
......@@ -133,36 +149,35 @@ create.Page({
await this.addOnceMeeting(content)
}
this.update();
this.connect_start();
// 注意: 回调方法的注册在整个小程序启动阶段只要做一次,调多次会有多次回调
dd.onSocketOpen((res) => {
dd.alert({ content: '连接已打开!' });
console.log('连接已打开!');
dd.sendSocketMessage({
data: 'heartbeat', // 需要发送的内容
success: (res) => {
dd.alert({ content: '数据发送!' + 'heartbeat' });
console.log('数据发送!' + 'heartbeat');
},
});
});
dd.onSocketError(function (res) {
dd.alert('WebSocket 连接打开失败,请检查!' + res);
console.log('WebSocket 连接打开失败,请检查!' + res);
});
// 注意: 回调方法的注册在整个小程序启动阶段只要做一次,调多次会有多次回调
dd.onSocketMessage((res) => {
dd.alert({ content: '收到数据!' + JSON.stringify(res) });
console.log(res)
this.onSocketMessageCallback(res.data)
});
//this.WebSocketTest();
},
connect_start() {
dd.connectSocket({
url: `ws://gateway-beta.mingwork.com/meet-websocket/websocket/${getApp().globalData.mwUserId}`, // 开发者服务器接口地址,必须是 wss 协议,且域名必须是后台配置的合法域名
url: `ws://139.196.213.18:9999/meet-websocket/websocket/${dd.getStorageSync({ key: 'mwUserId' }).data}/${uuid}`,
success: (res) => {
},
......@@ -173,31 +188,6 @@ create.Page({
}
});
},
WebSocketTest() {
// 打开一个 web socket
var ws = new WebSocket(`wss://gateway-beta.mingwork.com/meet-websocket/websocket/1310054599841542146`);
console.log(ws);
ws.onopen = function () {
// Web Socket 已连接上,使用 send() 方法发送数据
ws.send("发送数据");
dd.alert({ content: "数据发送中..." });
};
ws.onmessage = function (evt) {
var received_msg = evt.data;
console.log(received_msg)
dd.alert({ content: "数据已接收..." });
};
ws.onclose = function () {
// 关闭 websocket
dd.alert({ content: "连接已关闭..." });
};
},
//添加单次会议
async addOnceMeeting(content) {
await this.getData(true);
......@@ -293,9 +283,13 @@ create.Page({
});
},
onHide() {
// clearInterval(this.timer);
// this.timer = null;
},
onUload() {
dd.closeSocket();
},
refresh() {
this.isNeverShowSchedulePage = true;
this.isLoaded = false;
......
......@@ -670,4 +670,25 @@ input {
.meetingWayShowTop>.icon {
color: rgb(216, 216, 216) !important
}
.separate .line {
margin: 0;
width: 40%;
border-top: 1px solid rgba(10, 10, 10, 0.06);
}
.separate {
display: flex;
align-items: center;
justify-content: space-between;
padding: 16rpx;
padding-left: 104rpx;
}
.separate .text {
color: rgba(10, 10, 10, 0.56);
white-space: nowrap;
padding: 0 15px;
font-size: 24rpx;
}
\ No newline at end of file
......@@ -222,6 +222,11 @@
<view class="compose-column">
<comment a:if="{{item.replyCommentList}}" replyCommentList="{{item.replyCommentList}}" onDeleteComment="deleteComment" parentCommentId="{{item.commentId}}"/>
</view>
<view a:if="{{index == separateIndex}}" class="separate">
<view class="line"></view>
<view class="text">以下是过往动态</view>
<view class="line"></view>
</view>
</block>
<view class="affair-placeholder" a:if="{{!affairList || affairList.length == 0}}">
<template is="affair-placeholder" data="{{title: '添加文件', tip: '我们不开无准备的会,快来上传会议文件吧。'}}"/>
......
......@@ -2,7 +2,7 @@ import create from 'dd-store';
import { checkFullScren } from "../../utils/checkFullScren";
import pageStore from './store';
import { saveFileInfo, getMeetingRoomAffairs, createMeetingTask, deleteMeetingTask, updateMeetingTask, uploadPermissions } from '../../api/request';
import { getOssPermission, getuploadResource, isParticipate, deleteSchedule, getScheduleDetail, getUserScheduleInTime, modifySchedule, getMeetingRoomRepeatAffairs, updateMoment, deleteMoment } from '../../api/request.js'
import { getOssPermission, getuploadResource, isParticipate, deleteSchedule, getScheduleDetail, getUserScheduleInTime, modifySchedule, getMeetingRoomRepeatAffairs, updateMoment, deleteMoment, setRead } from '../../api/request.js'
import { selectedelRequired, selectPeople, getShowTime, modifyTimeImpactRepeat, throttle, getCreateShowTime, dealRepeatModal } from './../../utils/utils.js'
import { observer } from '/utils/observer.js'
import { resolve } from 'path';
......@@ -75,6 +75,7 @@ create.Page({
id: ''
},
onShow() {
console.log('onshow')
this.update()
if (this.store.data.isNeedReloadList) {
......@@ -112,6 +113,7 @@ create.Page({
}
},
onLoad(event) {
console.log('onload')
const scheduleItem = JSON.parse(decodeURIComponent(event.scheduleItem));
this.reset()
this.setData({
......@@ -129,6 +131,8 @@ create.Page({
})
}
})
},
// 获取详情
getDetail() {
......@@ -950,12 +954,18 @@ create.Page({
getAffairList(id) {
getMeetingRoomAffairs(id).then(res => {
this.getTaskAndFiles(res.data.data);
const newAffairList = this.dealAffairData(res.data.data || []);
const [newAffairList, separate] = this.dealAffairData(res.data.data || []);
this.store.data.affairList = newAffairList;
this.store.data.separateIndex = separate;
this.update();
this.setData({
"loading.dynamic": false
});
// 设置已读
setRead(id).then(res => {
console.log(res)
});
})
},
......@@ -981,18 +991,23 @@ create.Page({
},
//处理会议动态数据
dealAffairData(affairList) {
return affairList.map(it => {
let separate = -1;
affairList.forEach((it, index) => {
if (it.readFlag === 0) {
separate = index;
}
if (it.createTime) {
it.updateTime = getCreateShowTime(it.updateTime);
}
if (it.replyCommentList) {
it.replyCommentList.map(item => {
item.updateTime = getCreateShowTime(item.updateTime);
return item
})
}
return it
})
separate = fixSeperateIndex(separate, affairList);
return [affairList, separate]
},
// 上传文件
async handleAddFile() {
......@@ -1089,6 +1104,11 @@ create.Page({
changeData.updateTime = getCreateShowTime(new Date());
this.store.data.affairList.splice(index, 1);
this.store.data.affairList.unshift(changeData);
if (index > this.store.data.separateIndex) {
this.store.data.separateIndex += 1;
this.store.data.separateIndex = fixSeperateIndex(this.store.data.separateIndex, this.store.data.affairList)
}
dd.pageScrollTo({
scrollTop: 0
})
......@@ -1219,6 +1239,13 @@ create.Page({
} else {
if (index !== -1) {
const deleteData = this.store.data.affairList.splice(index, 1);
//删除过往以上的-1
if (index <= this.store.data.separateIndex) {
this.store.data.separateIndex -= 1;
} else {
this.store.data.separateIndex = fixSeperateIndex(this.store.data.separateIndex, this.store.data.affairList);
}
this.update();
// 如果删除的动态包含文件和任务,需要修改
if (deleteData[0].fileDetailList || deleteData[0].meetingTaskSimpleViewModel) {
......@@ -1263,6 +1290,11 @@ create.Page({
changeData.updateTime = getCreateShowTime(new Date());
this.store.data.affairList.splice(index, 1);
this.store.data.affairList.unshift(changeData);
if (index > this.store.data.separateIndex) {
this.store.data.separateIndex += 1;
this.store.data.separateIndex = fixSeperateIndex(this.store.data.separateIndex, this.store.data.affairList)
}
dd.pageScrollTo({
scrollTop: 0
})
......@@ -1314,6 +1346,21 @@ create.Page({
},
goFilesPage() {
dd.navigateTo({ url: '/pages/files/files?meetingId=' + this.store.data.scheduleId })
}
},
});
export function fixSeperateIndex(index, list) {
let separate = index;
if (separate === list.length - 1) {
separate = -1;
}
if (list[list.length - 1].commentType === 'meeting') {
if (separate === list.length - 2) {
separate = -1;
}
}
return separate;
}
\ No newline at end of file
import { getCreateShowTime, dealRepeatModal } from '../../utils/utils';
import { updateMeetingTask } from '../../api/request';
import { fixSeperateIndex } from './meetingDetail';
class Store {
data = {
affairList: [],
separateIndex: -1,
currentTask: {}, // 任务 endTime, excutor, title, excutorId
notes: null, //{meetingNotes: '', commentId: ''}
parentCommentId: '', // 评论的动态Id
......@@ -37,6 +39,11 @@ class Store {
this.data.affairList.splice(index, 1);
this.data.affairList.unshift(changeData);
if (index > this.data.separateIndex) {
this.data.separateIndex += 1;
this.data.separateIndex = fixSeperateIndex(this.data.separateIndex, this.data.affairList)
}
this.update();
// 页面定位到最上面
......@@ -51,6 +58,8 @@ class Store {
this.data.tasks[tasksIndex].processState = taskModifyModel.processState;
this.data.tasks[tasksIndex].updateTime = getCreateShowTime(new Date());
}
updateMeetingTask(data).then(res => {
if (res.data.code !== 0) {
dd.alert('操作失败,请重试')
......
import create from 'dd-store'
import { saveFileInfo, addSchedule, uploadPermissions, previewPermissions, updateMeetingTask } from '../../api/request.js'
import { throttle, debounce } from './../../utils/utils.js'
import { throttle, debounce, getCreateShowTime } from './../../utils/utils.js'
import pageStore from '../meetingDetail/store';
import { getFileInfo } from '../meetingDetail/uploadFile';
......@@ -88,11 +88,24 @@ create.Page({
}
updateMeetingTask(data).then(res => {
this.store.data.isNeedReloadList = true;
this.store.data.fileInfos = []
this.store.data.description = ''
this.update();
dd.navigateBack()
//this.store.data.isNeedReloadList = true;
if (res.data.data) {
const addData = res.data.data[0].commentListDataModelList[0];
addData.updateTime = getCreateShowTime(addData.updateTime);
this.store.data.affairList.unshift(addData);
addData.fileDetailList.forEach(it => this.store.data.files.unshift(it));
this.store.data.isNeedReloadIndexList = true;
this.store.data.separateIndex += 1;
this.update();
dd.navigateBack();
}
})
}, 1000)
});
......@@ -297,3 +297,20 @@ export function selectedelRequired(select, require) {
})
}
export function isJSON(str) {
if (typeof str == 'string') {
try {
var obj = JSON.parse(str);
if (typeof obj == 'object' && obj) {
return true;
} else {
return false;
}
} catch (e) {
return false;
}
}
return false;
}
\ No newline at end of file
......@@ -13,6 +13,8 @@ var heartBeatTimeOut = null;
// 终止重新连接
var connectSocketTimeOut = null;
const uuid = Math.random().toString(36).substr(2);
var webSocket = {
/**
......@@ -35,15 +37,13 @@ var webSocket = {
socketClose = false
socketMsgQueue = []
dd.connectSocket({
url: `wss://mingpay-websocket.mingwork.com/v1/mingpaywebsocket?param=${dd.corpId}_${dd.getStorageSync({ key: 'userId' }).data}`,
// url: `ws://192.168.1.102:8400/v1/mingpaywebsocket?param=${dd.corpId}_${dd.getStorageSync({ key: 'userId' }).data}`,
url: `ws://139.196.213.18:9999/meet-websocket/websocket/${dd.getStorageSync({ key: 'mwUserId' }).data}/${uuid}`,
data: {},
header: {
'content-type': 'application/json'
},
method: "GET",
success: function (res) {
console.log(res, `wss://gateway.mingwork.com/mingpay-phone/v1/mingpaywebsocket?param=${dd.corpId}_${dd.getStorageSync({ key: 'userId' }).data}`)
if (options) {
// 成功回调
options.success && options.success(res);
......@@ -153,11 +153,9 @@ var webSocket = {
return;
}
self.sendSocketMessage({
msg: JSON.stringify({
'msg_type': 'heart'
}),
msg: 'heart',
success: function (res) {
console.log('socket心跳成功');
console.log('socket发送心跳成功');
if (heart) {
heartBeatTimeOut = setTimeout(() => {
self.heartBeat();
......@@ -165,7 +163,7 @@ var webSocket = {
}
},
fail: function (res) {
console.log('socket心跳失败');
console.log('socket发送心跳失败');
if (heartBeatFailCount > 2) {
// 重连
self.connectSocket();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment