Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
schedule
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fengzhaoyu
schedule
Commits
70d0bf4c
Commit
70d0bf4c
authored
Oct 12, 2020
by
xiexiaoqin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 首页动态websocket通知更新,会议详情动态列表过往动态分割
parent
bd181f3c
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
173 additions
and
56 deletions
+173
-56
login.js
api/login.js
+1
-0
request.js
api/request.js
+7
-0
createTask.js
pages/createTask/createTask.js
+1
-0
index.acss
pages/index/index.acss
+3
-2
index.axml
pages/index/index.axml
+3
-3
index.js
pages/index/index.js
+28
-34
meetingDetail.acss
pages/meetingDetail/meetingDetail.acss
+22
-0
meetingDetail.axml
pages/meetingDetail/meetingDetail.axml
+5
-0
meetingDetail.js
pages/meetingDetail/meetingDetail.js
+54
-6
store.js
pages/meetingDetail/store.js
+9
-0
uploadFile.js
pages/uploadFile/uploadFile.js
+16
-3
utils.js
utils/utils.js
+18
-0
websocket.js
utils/websocket.js
+6
-8
No files found.
api/login.js
View file @
70d0bf4c
...
...
@@ -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
,
...
...
api/request.js
View file @
70d0bf4c
...
...
@@ -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
pages/createTask/createTask.js
View file @
70d0bf4c
...
...
@@ -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
();
}
...
...
pages/index/index.acss
View file @
70d0bf4c
...
...
@@ -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;
...
...
pages/index/index.axml
View file @
70d0bf4c
...
...
@@ -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}}">
...
...
pages/index/index.js
View file @
70d0bf4c
...
...
@@ -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
;
...
...
pages/meetingDetail/meetingDetail.acss
View file @
70d0bf4c
...
...
@@ -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
pages/meetingDetail/meetingDetail.axml
View file @
70d0bf4c
...
...
@@ -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: '我们不开无准备的会,快来上传会议文件吧。'}}"/>
...
...
pages/meetingDetail/meetingDetail.js
View file @
70d0bf4c
...
...
@@ -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
pages/meetingDetail/store.js
View file @
70d0bf4c
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
(
'操作失败,请重试'
)
...
...
pages/uploadFile/uploadFile.js
View file @
70d0bf4c
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
)
});
utils/utils.js
View file @
70d0bf4c
...
...
@@ -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
utils/websocket.js
View file @
70d0bf4c
...
...
@@ -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
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment