@@ -101,7 +102,14 @@ export default {
},
computed: {
- ...mapState(['userId', 'dialogId', 'dialogDetail', 'dialogMsgLoad', 'dialogMsgList']),
+ ...mapState([
+ 'userId',
+ 'dialogId',
+ 'dialogDetail',
+ 'dialogMsgLoad',
+ 'dialogMsgList',
+ 'dialogMsgHasMorePages',
+ ]),
peopleNum() {
return this.dialogDetail.type === 'group' ? $A.runNum(this.dialogDetail.people) : 0;
diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js
index ca36959a..50fc0cca 100644
--- a/resources/assets/js/store/actions.js
+++ b/resources/assets/js/store/actions.js
@@ -842,9 +842,10 @@ export default {
* 获取会话消息
* @param state
* @param dispatch
+ * @param commit
* @param dialog_id
*/
- getDialogMsgList({state, dispatch}, dialog_id) {
+ getDialogMsgList({state, dispatch, commit}, dialog_id) {
if (state.method.runNum(dialog_id) === 0) {
return;
}
@@ -853,6 +854,8 @@ export default {
}
//
state.dialogMsgList = [];
+ state.dialogMsgCurrentPage = 1;
+ state.dialogMsgHasMorePages = false;
if (state.method.isJson(state.cacheDialogMsg[dialog_id])) {
let length = state.cacheDialogMsg[dialog_id].data.length;
if (length > 50) {
@@ -873,38 +876,56 @@ export default {
url: 'dialog/msg/lists',
data: {
dialog_id: dialog_id,
+ page: state.dialogMsgCurrentPage
},
}).then(result => {
state.dialogMsgLoad--;
state.cacheDialogMsg[dialog_id + "::load"] = false;
- const dialog = result.data.dialog;
- const reverse = result.data.data.reverse();
+ const data = result.data;
// 更新缓存
state.cacheDialogMsg[dialog_id] = {
- dialog,
- data: reverse,
+ dialog: data.dialog,
+ data: data.data.reverse(),
};
state.method.setStorage("cacheDialogMsg", state.cacheDialogMsg);
// 更新当前会话消息
- if (state.dialogId == dialog_id) {
- state.dialogDetail = dialog;
- reverse.forEach((item) => {
- let index = state.dialogMsgList.findIndex(({id}) => id == item.id);
- if (index === -1) {
- state.dialogMsgList.push(item);
- } else {
- state.dialogMsgList.splice(index, 1, item);
- }
- })
- }
- // 更新会话数据
- dispatch("saveDialog", dialog);
+ commit("dialogMsgListSuccess", data);
}).catch(() => {
state.dialogMsgLoad--;
state.cacheDialogMsg[dialog_id + "::load"] = false;
});
},
+ /**
+ * 获取下一页会话消息
+ * @param state
+ * @param dispatch
+ * @param commit
+ */
+ getDialogMsgListNextPage({state, dispatch, commit}) {
+ if (!state.dialogMsgHasMorePages) {
+ return;
+ }
+ state.dialogMsgHasMorePages = false;
+ state.dialogMsgCurrentPage++;
+ //
+ const dialog_id = state.dialogId;
+ //
+ state.dialogMsgLoad++;
+ dispatch("call", {
+ url: 'dialog/msg/lists',
+ data: {
+ dialog_id: dialog_id,
+ page: state.dialogMsgCurrentPage
+ },
+ }).then(result => {
+ state.dialogMsgLoad--;
+ commit("dialogMsgListSuccess", result.data);
+ }).catch(() => {
+ state.dialogMsgLoad--;
+ });
+ },
+
/**
* 获取未读信息
* @param state
@@ -974,13 +995,14 @@ export default {
if (!state.method.isJson(msgData.r)) msgData.r = {};
//
const {id, dialog_id, r} = msgData;
- if (!r.read_at) {
- r.read_at = state.method.formatDate('Y-m-d H:i:s');
- let dialog = state.dialogList.find(({id}) => id == dialog_id);
- if (dialog && dialog.unread > 0) {
- dialog.unread--
- state.dialogMsgUnread--;
- }
+ if (r.read_at) {
+ return;
+ }
+ r.read_at = state.method.formatDate('Y-m-d H:i:s');
+ let dialog = state.dialogList.find(({id}) => id == dialog_id);
+ if (dialog && dialog.unread > 0) {
+ dialog.unread--
+ state.dialogMsgUnread--;
}
//
state.wsReadWaitList.push(id);
diff --git a/resources/assets/js/store/mutations.js b/resources/assets/js/store/mutations.js
index 0558ee9c..edfcca2f 100644
--- a/resources/assets/js/store/mutations.js
+++ b/resources/assets/js/store/mutations.js
@@ -177,5 +177,32 @@ export default {
state.calendarTask.splice(index, 1)
}
this.dispatch("getProjectBasic", {id: data.project_id});
- }
+ },
+
+ /**
+ * 会话消息列表
+ * @param state
+ * @param data
+ */
+ dialogMsgListSuccess(state, data) {
+ const dialog = data.dialog;
+ const list = data.data;
+ // 更新当前会话消息
+ if (state.dialogId == dialog.id) {
+ state.dialogDetail = dialog;
+ list.forEach((item) => {
+ let index = state.dialogMsgList.findIndex(({id}) => id == item.id);
+ if (index === -1) {
+ state.dialogMsgList.unshift(item);
+ } else {
+ state.dialogMsgList.splice(index, 1, item);
+ }
+ })
+ }
+ // 页数数据
+ state.dialogMsgCurrentPage = data.current_page;
+ state.dialogMsgHasMorePages = data.current_page < data.last_page;
+ // 更新会话数据
+ this.dispatch("saveDialog", dialog);
+ },
}
diff --git a/resources/assets/js/store/state.js b/resources/assets/js/store/state.js
index 47cc1640..060ea328 100644
--- a/resources/assets/js/store/state.js
+++ b/resources/assets/js/store/state.js
@@ -281,9 +281,11 @@ state.calendarTask = [];
state.dialogId = 0;
state.dialogList = [];
state.dialogDetail = {};
+state.dialogMsgUnread = 0;
state.dialogMsgLoad = 0;
state.dialogMsgList = [];
-state.dialogMsgUnread = 0;
+state.dialogMsgCurrentPage = 1;
+state.dialogMsgHasMorePages = false;
// 任务优先级
state.taskPriority = [];
diff --git a/resources/assets/sass/pages/components/dialog-wrapper.scss b/resources/assets/sass/pages/components/dialog-wrapper.scss
index a7b9065d..64047efa 100644
--- a/resources/assets/sass/pages/components/dialog-wrapper.scss
+++ b/resources/assets/sass/pages/components/dialog-wrapper.scss
@@ -175,6 +175,18 @@
}
}
}
+ &.history {
+ cursor: pointer;
+ justify-content: center;
+ font-size: 13px;
+ padding: 3px 0;
+ margin: 12px 0;
+ opacity: 0.6;
+ transition: opacity 0.2s;
+ &:hover {
+ opacity: 1;
+ }
+ }
&.loading {
padding: 12px 0;
justify-content: center;