no message

This commit is contained in:
kuaifan 2021-06-18 22:30:57 +08:00
parent 6a0bc37645
commit 14a645472d
7 changed files with 115 additions and 42 deletions

View File

@ -139,7 +139,7 @@ class ProjectController extends AbstractController
'desc' => $desc,
'userid' => $user->userid,
]);
return AbstractModel::transaction(function() use ($insertColumns, $project) {
AbstractModel::transaction(function() use ($insertColumns, $project) {
$project->save();
ProjectUser::createInstance([
'project_id' => $project->id,
@ -150,11 +150,12 @@ class ProjectController extends AbstractController
$column['project_id'] = $project->id;
ProjectColumn::createInstance($column)->save();
}
$data = $project->find($project->id);
$data->addLog("创建项目");
$data->pushMsg('add', $data->toArray());
return Base::retSuccess('添加成功', $data);
});
//
$data = $project->find($project->id);
$data->addLog("创建项目");
$data->pushMsg('add', $data->toArray());
return Base::retSuccess('添加成功', $data);
}
/**

View File

@ -78,10 +78,6 @@ export default {
}
},
mounted() {
this.msgRead()
},
computed: {
...mapState(['userId']),
@ -94,11 +90,16 @@ export default {
}
},
methods: {
msgRead() {
this.$store.dispatch("dialogMsgRead", this.msgData);
},
watch: {
msgData: {
handler(data) {
this.$store.dispatch("dialogMsgRead", data);
},
immediate: true,
}
},
methods: {
popperShow() {
this.$store.dispatch("call", {
url: 'dialog/msg/readlist',

View File

@ -28,7 +28,8 @@
static>
<div ref="manageList" class="dialog-list">
<ul>
<li v-if="dialogMsgLoad > 0 && dialogMsgList.length === 0" class="loading"><Loading/></li>
<li v-if="dialogMsgHasMorePages" class="history" @click="$store.dispatch('getDialogMsgListNextPage')">{{$L('加载历史消息')}}</li>
<li v-else-if="dialogMsgLoad > 0 && dialogMsgList.length === 0" class="loading"><Loading/></li>
<li v-else-if="dialogMsgList.length === 0" class="nothing">{{$L('暂无消息')}}</li>
<li v-for="(item, key) in dialogMsgList" :key="key" :class="{self:item.userid == userId}">
<div class="dialog-avatar">
@ -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;

View File

@ -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);

View File

@ -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);
},
}

View File

@ -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 = [];

View File

@ -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;