Commit cf6472c9 by xiexiaoqin

feat: 首页动态列表

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