Commit cf6472c9 by xiexiaoqin

feat: 首页动态列表

parent 4a01c9aa
...@@ -165,7 +165,7 @@ export function updateMeetingTask(data) { ...@@ -165,7 +165,7 @@ export function updateMeetingTask(data) {
return $http({ return $http({
method: "post", method: "post",
data: JSON.stringify(data), data: JSON.stringify(data),
url: `/meet/meeting-log-resource/update` url: `/meet/comment/handler`
}); });
} }
//删除任务 //删除任务
...@@ -189,7 +189,7 @@ export function getDynamicList(data) { ...@@ -189,7 +189,7 @@ export function getDynamicList(data) {
return $http({ return $http({
method: "get", method: "get",
data: data, data: data,
url: `/meet/meeting-log/page` url: `/meet/comment/list`
}); });
} }
......
import login from "./login"; import login from "./login";
const timeZone = {
'timeZone-8': 'GMT+08:00',
'timeZone-9': 'GMT+09:00',
'timeZone5': 'GMT-08:00'
};
const offSet = new Date().getTimezoneOffset() / 60;
export default function xFetch({ url, method, data, type }) { export default function xFetch({ url, method, data, type }) {
if (type == 'binding') { if (type == 'binding') {
...@@ -10,6 +16,7 @@ export default function xFetch({ url, method, data, type }) { ...@@ -10,6 +16,7 @@ export default function xFetch({ url, method, data, type }) {
dd.httpRequest({ dd.httpRequest({
headers: { headers: {
"Content-Type": "application/json;charset=UTF-8", "Content-Type": "application/json;charset=UTF-8",
timeZone: timeZone[`timeZone${offSet}`],
Authorization: `Bearer ${getApp().globalData.token}` Authorization: `Bearer ${getApp().globalData.token}`
}, },
url: url, url: url,
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
margin-top: 10rpx; margin-top: 10rpx;
} }
.task-list { .file-list {
border: 1rpx solid rgba(10, 10, 10, 0.14); border: 1rpx solid rgba(10, 10, 10, 0.14);
border-radius: 16rpx; border-radius: 16rpx;
border-radius: 16rpx; border-radius: 16rpx;
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
margin-top: 16rpx; margin-top: 16rpx;
} }
.task-list>.file-box { .file-list>.file-box {
position: relative; position: relative;
padding-left: 70rpx; padding-left: 70rpx;
margin-bottom: 24rpx; margin-bottom: 24rpx;
......
<view class="{{fileView.id == logId ? 'file-box-mask' : ''}}" data-logId="{{fileView.id}}" catchLongTap="showOperate"> <view class="{{fileView.commentId == logId ? 'file-box-mask' : ''}}" data-logId="{{fileView.commentId}}" catchLongTap="showOperate">
<view class="desc" a:if='{{fileView.description}}'> <view class="desc" a:if='{{fileView.remark}}'>
{{fileView.description}} {{fileView.remark}}
</view> </view>
<view class="task-list" a:if="{{fileView.fileInfos && fileView.fileInfos.length > 0}}" a:for="{{ fileView.fileInfos}}"> <view class="file-list" a:for="{{ fileView.fileDetailList}}">
<view class="file-box {{isCanDelete ? 'file-box-close': ''}}" catchTap="preview" data-file="{{item}}"> <view class="file-box {{isCanDelete ? 'file-box-close': ''}}" catchTap="preview" data-file="{{item}}">
<view class="file-icon {{item.fileType}}"></view> <view class="file-icon {{item.mimeType}}"></view>
<view class="file-title"> <view class="file-title">
<text>{{item.fileName.slice(0, item.fileName.length - 5)}}</text> <text>{{item.name.slice(0, item.name.length - 5)}}</text>
<text>{{item.fileName.slice(-5)}}</text></view> <text>{{item.name.slice(-5)}}</text></view>
<view class="file-size">{{(item.fileSize/1024/1024).toFixed(2)}}M</view> <view class="file-size">{{item.size}}</view>
<view a:if="{{isCanDelete}}" class="iconfont iconicon_noAgreed1" catchTap="removeFile" data-id="{{item.fileId}}"></view> <view a:if="{{isCanDelete}}" class="iconfont iconicon_noAgreed1" catchTap="removeFile" data-id="{{item.fileId}}"></view>
</view> </view>
</view> </view>
<!-- && (organizer === currentPeople ? true : currentPeople === fileView.creatorId) --> <!-- && (organizer === currentPeople ? true : currentPeople === fileView.creatorId) -->
<view class="btns-pop" a:if="{{fileView.id == logId}}"> <!--<view class="btns-pop" a:if="{{fileView.commentId == logId}}"><view class="edit" catchTap="updateFile" data-fileView="{{fileView}}">
<view class="edit" catchTap="updateFile" data-fileView="{{fileView}}"> 编辑</view><view catchTap="deleteFile" data-id="{{fileView.commentId}}">
编辑 删除</view><view class="triangle"></view></view> -->
</view>
<view catchTap="deleteFile" data-id="{{fileView.id}}">
删除
</view>
<view class="triangle"></view>
</view>
</view> </view>
\ No newline at end of file
...@@ -35,7 +35,6 @@ create.Component({ ...@@ -35,7 +35,6 @@ create.Component({
return; return;
} }
if (!this.props.isPreview) { if (!this.props.isPreview) {
return return
} }
const file = e.target.dataset.file const file = e.target.dataset.file
......
.notes {
border: 1rpx solid rgba(10, 10, 10, 0.14);
border-radius: 16rpx;
padding: 16rpx;
margin-top: 16rpx;
}
\ No newline at end of file
<view class="notes">
{{notes}}
</view>
\ No newline at end of file
Component({
mixins: [],
data: {},
props: {},
didMount() {},
didUpdate() {},
didUnmount() {},
methods: {},
});
{
"component": true
}
\ No newline at end of file
...@@ -3,19 +3,17 @@ ...@@ -3,19 +3,17 @@
.task-list { .task-list {
border: 1rpx solid rgba(10, 10, 10, 0.14); border: 1rpx solid rgba(10, 10, 10, 0.14);
border-radius: 16rpx; border-radius: 16rpx;
border-radius: 16rpx; padding: 16rpx;
padding: 14rpx 16rpx 0;
margin-top: 16rpx; margin-top: 16rpx;
} }
.task-list>.task-box { .task-list>.task-box {
background: rgba(255, 255, 255, 1); background: rgba(255, 255, 255, 1);
border-radius: 8rpx; border-radius: 8rpx;
box-shadow: 0 0 8rpx 0rpx rgba(0, 0, 0, 0.06); /* box-shadow: 0 0 8rpx 0rpx rgba(0, 0, 0, 0.06); */
padding: 0 16rpx; padding: 0 16rpx;
height: 80rpx; /* height: 80rpx; */
color: rgba(27, 38, 61, 1); color: rgba(27, 38, 61, 1);
margin-bottom: 14rpx;
position: relative; position: relative;
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -24,10 +22,17 @@ ...@@ -24,10 +22,17 @@
.task-box>.task-title { .task-box>.task-title {
flex: 1; flex: 1;
font-size: 28rpx; font-size: 28rpx;
line-height: 80rpx; line-height: 40rpx;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
display: flex;
flex-direction: column;
}
.task-title .task-time {
color: rgb(27, 38, 61, 0.56);
font-size: 24rpx;
} }
.task-box>.avater { .task-box>.avater {
......
<import src="../../template/avater/index.axml"/> <import src="../../template/avater/index.axml"/>
<import src="../../template/checkbox/index.axml"/> <import src="../../template/checkbox/index.axml"/>
<view class="task-list"> <view class="task-list">
<view class="task-box" a:for='{{taskList}}'> <view class="task-box">
<template is="checkbox" data="{{ status: item.taskStatus, id: item.id, groupId: item.groupId, scheduleId: item.scheduleId}}"></template> <template is="checkbox" data="{{
<view class="task-title" data-pop="{{title: '会议任务', type: 'updateTask'}}" onTap="showPop" data-task="{{item}}">{{item.taskInfos.taskTitle}} status: taskView.processState,
taskId: taskView.taskId,
meetingId: meetingId,
commentId: commentId}}">
</template>
<view class="task-title" data-pop="{{title: '会议任务', type: 'updateTask'}}" onTap="showPop" data-task="{{taskView}}">
<view>{{taskView.title}}</view>
<view a:if="{{taskView.endTime}}" class="task-time">{{taskView.endTime}} 截止</view>
</view> </view>
<template is="avater" a:if="{{item.acceptorInfo}}" data="{{item: item.acceptorInfo, split: 1}}"/> <template is="avater" a:if="{{taskView.executor}}" data="{{item: taskView.executor[0], split: 1}}"/>
</view> </view>
</view> </view>
\ No newline at end of file
...@@ -24,15 +24,13 @@ Component({ ...@@ -24,15 +24,13 @@ Component({
}); });
}, },
checkChange(e) { checkChange(e) {
// console.log(e.target.dataset) let { status, taskId, commentId, meetingId } = e.target.dataset;
if (status == "success") {
let { status, id, groupId, scheduleId } = e.target.dataset; status = "undetermined";
if (status == "0") {
status = "1";
} else { } else {
status = "0"; status = "success";
} }
this.props.onChangeTaskStatusOnList({ status, id, groupId, scheduleId }); this.props.onChangeTaskStatusOnList({ status, taskId, commentId, meetingId });
} }
} }
}); });
export const globalUrl = "https://gateway2.mingwork.com"; export const globalUrl = "https://gateway-beta.mingwork.com";
export const globalUrl2 = "https://third-authentication.mingwork.com"; export const globalUrl2 = "https://third-authentication.mingwork.com";
......
...@@ -50,20 +50,20 @@ ...@@ -50,20 +50,20 @@
margin-bottom: 24rpx; margin-bottom: 24rpx;
} }
.dynamicTime text:nth-of-type(1) { .dynamicTime text{
opacity: 0.56; opacity: 0.56;
font-size: 26rpx; font-size: 26rpx;
color: #1B263D; color: #1B263D;
letter-spacing: 0; letter-spacing: 0;
line-height: 28rpx; line-height: 28rpx;
margin-right: 16rpx; margin-right: 4rpx;
} }
.dynamicTime text:nth-of-type(2) { /* .dynamicTime text:nth-of-type(2) {
font-size: 24rpx; font-size: 24rpx;
color: rgba(25, 31, 37, 0.40); color: rgba(25, 31, 37, 0.40);
line-height: 24rpx; line-height: 24rpx;
} } */
.placedTop { .placedTop {
width: 84rpx; width: 84rpx;
......
...@@ -5,37 +5,31 @@ ...@@ -5,37 +5,31 @@
<block a:else> <block a:else>
<view hidden="{{$data.tabBarIndex === '1'}}"> <view hidden="{{$data.tabBarIndex === '1'}}">
<import src="../../template/affairBlank/index.axml"/> <import src="../../template/affairBlank/index.axml"/>
<view class="{{isStopBodyScroll ? 'scroll-lock' : ''}}" onTap="closeSwipe" onTouchStart="closeSwipe" onTouchMove="closeSwipe" onTouchEnd="closeSwipe"> <view>
<block a:if="{{!listLoading}}"> <block a:if="{{!listLoading}}">
<scroll-view a:if="{{dynamicList.length > 0}}" scroll-y="{{true}}" lower-threshold="{{400}}" class="dynamicBox {{isIPX ? 'dynamicBox_add_padding' : ''}}" onScrollToLower="onScrollToLower"> <scroll-view a:if="{{dynamicList.length > 0}}" scroll-y="{{true}}" lower-threshold="{{400}}" class="dynamicBox {{isIPX ? 'dynamicBox_add_padding' : ''}}" onScrollToLower="onScrollToLower">
<view class="dynamicList"> <view class="dynamicList">
<swipe onSetBodyDisableScroll="setBodyDisableScroll" rightWidth="{{ 78 }}" leftWidth="{{ 0 }}" a:for="{{dynamicList}}" class="dynamicContent" key="{{item.scheduleId}}"> <view a:for="{{dynamicList}}" class="dynamicContent" key="{{item.meetingId}}">
<view class="dynamicDetails"> <view class="dynamicDetails">
<view class="meetingtitle" catchTap="nextDetail" data-item="{{item}}"> <view class="meetingtitle" catchTap="nextDetail" data-item="{{item}}">
<view> <view>
{{item.title}} {{item.title}}
</view>
<view>
<text a:if="{{item.traceTime !== traceTime}}" class="iconfont iconicon_top1 icon-color"></text>
</view> </view>
</view> </view>
<block a:for="{{item.meetingLogDataList.slice(0,2)}}" a:for-item="dynamicItem" key="{{item.id}}"> <block a:for="{{item.commentListDataModelList}}" a:for-item="dynamicItem" key="{{item.id}}">
<view class="userDynamic"> <view class="userDynamic">
<view class="dynamicTime" catchTap="nextDetail" data-item="{{dynamicItem}}"> <view class="dynamicTime" catchTap="nextDetail" data-item="{{dynamicItem}}">
<text>{{dynamicItem.content}}</text> <text>{{dynamicItem.creator && dynamicItem.creator.name}}</text>
<text>{{dynamicItem.actionLog}}</text>
<text>{{dynamicItem.createTime}}</text> <text>{{dynamicItem.createTime}}</text>
</view> </view>
<file-list a:if="{{dynamicItem.category === '2'}}" fileView="{{dynamicItem.meetingLogResource}}" isCanEdit="{{false}}"/> <file-list a:if="{{dynamicItem.fileDetailList}}" fileView="{{dynamicItem}}" isCanEdit="{{false}}"/>
<view class="dynamicFile" a:if="{{dynamicItem.category === '3'}}"> <task-list a:if="{{dynamicItem.meetingTaskSimpleViewModel}}" onChangeTaskStatusOnList="onChangeTaskStatusOnList" taskView="{{dynamicItem.meetingTaskSimpleViewModel}}" commentId="{{dynamicItem.commentId}}" meetingId="{{item.meetingId}}" isCanEdit="{{false}}"/>
<task-list onChangeTaskStatusOnList="onChangeTaskStatusOnList" taskList="{{[dynamicItem.meetingLogResource]}}" isCanEdit="{{false}}"/> <notes a:if="{{dynamicItem.notes}}" notes="{{dynamicItem.notes}}"/>
</view>
</view> </view>
</block> </block>
</view> </view>
<view slot="right" class="placedTop" onTap="changeCollection" data-scheduleId="{{item.scheduleId}}" data-index="{{index}}" data-collection="{{item.traceTime === traceTime ? 'Y':'N'}}"> </view>
<text class="iconfont iconicon_top1 {{item.traceTime === traceTime ? '': 'isTopIcon'}}"></text>
</view>
</swipe>
</view> </view>
</scroll-view> </scroll-view>
<view class="noDate" a:else> <view class="noDate" a:else>
......
...@@ -75,9 +75,9 @@ create.Page({ ...@@ -75,9 +75,9 @@ create.Page({
this.update(); this.update();
} }
//开启一个定时器 //开启一个定时器
this.timer = setInterval(() => { // this.timer = setInterval(() => {
this.getData(); // this.getData();
}, 30000); // }, 30000);
// 设置标题 // 设置标题
dd.setNavigationBar({ dd.setNavigationBar({
...@@ -242,10 +242,7 @@ create.Page({ ...@@ -242,10 +242,7 @@ create.Page({
} }
}, },
getPages(current, callBack) { getPages(current, callBack) {
getDynamicList({ getDynamicList()
current,
size: 10
})
.then(res => { .then(res => {
if (!res.data.data) { if (!res.data.data) {
this.setData({ this.setData({
...@@ -254,55 +251,18 @@ create.Page({ ...@@ -254,55 +251,18 @@ create.Page({
}); });
return; return;
} }
const dynamicList = res.data.data.records.map((item, index) => { const dynamicList = res.data.data.map((item, index) => {
for (let i = 0; i < item.meetingLogDataList.length; i++) { for (let i = 0; i < item.commentListDataModelList.length; i++) {
if (item.meetingLogDataList[i].creatorInfo) { let itemData = item.commentListDataModelList[i];
item.meetingLogDataList[i].creatorInfo = JSON.parse( if (itemData.createTime) {
item.meetingLogDataList[i].creatorInfo itemData.createTime = getCreateShowTime(itemData.createTime);
);
}
if (item.meetingLogDataList[i].createTime) {
item.meetingLogDataList[i].createTime = getCreateShowTime(
item.meetingLogDataList[i].createTime
);
}
let itemData = item.meetingLogDataList[i].meetingLogResource;
if (itemData) {
itemData.groupId = item.groupId;
if (itemData.taskInfos || itemData.fileInfos) {
if (itemData.creatorInfo) {
itemData.creatorInfo = JSON.parse(itemData.creatorInfo);
}
if (itemData.fileInfos) {
itemData.fileInfos = JSON.parse(itemData.fileInfos);
}
if (itemData.taskInfos) {
itemData.taskInfos = JSON.parse(itemData.taskInfos);
}
if (itemData.acceptorInfo) {
itemData.acceptorInfo = JSON.parse(itemData.acceptorInfo);
}
}
} }
} }
return item; return item;
}); });
//第一页数据会重新请求需要替换
if (current === 1) {
this.setData({
dynamicList
});
} else {
const newDynamicList = this.data.dynamicList.concat(dynamicList);
this.setData({
dynamicList: newDynamicList
});
}
this.setData({ this.setData({
listLoading: false, dynamicList,
current: res.data.data.current, listLoading: false
pages: res.data.data.pages
}); });
if (callBack) { if (callBack) {
callBack(); callBack();
...@@ -352,43 +312,38 @@ create.Page({ ...@@ -352,43 +312,38 @@ create.Page({
}); });
}, },
//动态上拉加载分页数据 //动态上拉加载分页数据
onScrollToLower() { // onScrollToLower() {
if (this.data.current < this.data.pages) { // if (this.data.current < this.data.pages) {
this.getPages(this.data.current + 1); // this.getPages(this.data.current + 1);
} // }
}, // },
//动态修改状态 //动态修改状态
onChangeTaskStatusOnList(e) { onChangeTaskStatusOnList(e) {
// console.log(e)
const data = { const data = {
groupId: e.groupId, meetingId: e.meetingId,
scheduleId: e.scheduleId, taskModifyModel: {
resourceType: "task", commentId: e.commentId,
creatorId: getApp().globalData.userid, processState: e.status,
creatorInfo: getApp().globalData.userInfo, taskId: e.taskId
id: e.id, }
logType: "task_status_modify",
taskStatus: e.status
}; };
updateMeetingTask(data).then(res => { updateMeetingTask(data).then(res => {
if (res.data.code === 0) { if (res.data.code === 0) {
let dataIndex1 = ""; let dataIndex1 = "";
let dataIndex2 = ""; let dataIndex2 = "";
this.data.dynamicList.forEach((item, index) => { this.data.dynamicList.forEach((item, index) => {
if (item.meetingId === e.meetingId) {
if (item.scheduleId === e.scheduleId) {
dataIndex1 = index; dataIndex1 = index;
item.meetingLogDataList.forEach((it, index2) => { item.commentListDataModelList.forEach((it, index2) => {
if (it.meetingLogResource.id == e.id) { if (it.meetingTaskSimpleViewModel && it.meetingTaskSimpleViewModel.taskId == e.taskId) {
dataIndex2 = index2; dataIndex2 = index2;
} }
}); });
} }
}); });
const setData = `dynamicList[${dataIndex1}].meetingLogDataList[${dataIndex2}].meetingLogResource.taskStatus`; const statusKey = `dynamicList[${dataIndex1}].commentListDataModelList[${dataIndex2}].meetingTaskSimpleViewModel.processState`;
// console.log(setData)
this.setData({ this.setData({
[setData]: e.status [statusKey]: e.status
}); });
} }
}); });
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
"pullRefresh": true, "pullRefresh": true,
"usingComponents": { "usingComponents": {
"task-list": "../../components/taskList/taskList", "task-list": "../../components/taskList/taskList",
"notes": "../../components/notes/notes",
"file-list": "../../components/fileList/fileList", "file-list": "../../components/fileList/fileList",
"swipe": "../../components/swipe/swipe", "swipe": "../../components/swipe/swipe",
"popup": "../../components/popup/index", "popup": "../../components/popup/index",
......
<!-- 头像处理 --> <!-- 头像处理 -->
<template name="avater"> <template name="avater">
<view class="avater"> <view class="avater">
<image a:if="{{item.headUrl}}" mode="scaleToFill" src="{{item.headUrl}}" /> <image a:if="{{item.avatar}}" mode="scaleToFill" src="{{item.avatar}}" />
<text a:else>{{item.platform === "outlook" ? item.username.slice(0, split || 2) : item.username.slice(-(split || 2))}} <text a:else>{{item.name.slice(0, split || 2)}}
{{item.name}}
</text> </text>
</view> </view>
</template> </template>
\ No newline at end of file
<!-- checkbox模板 {status: status}--> <!-- checkbox模板 {status: status}-->
<template name="checkbox"> <template name="checkbox">
<view class="checkbox {{status == '1' ? 'checkbox-active': ''}}" data-id="{{id}}" data-groupId="{{groupId}}" data-scheduleId="{{scheduleId}}" data-status="{{status}}" onTap="checkChange"> <view class="checkbox {{status == 'success' ? 'checkbox-active': ''}}" data-taskId="{{taskId}}" data-commentId="{{commentId}}" data-meetingId="{{meetingId}}" data-status="{{status}}" onTap="checkChange">
<!-- {{status}} --> <!-- {{status}} -->
<text a:if="{{status == '1'}}" class="iconfont iconicon_ok"></text> <text a:if="{{status == 'success'}}" class="iconfont iconicon_ok"></text>
</view> </view>
</template> </template>
\ No newline at end of file
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