perf: 优化转发消息

This commit is contained in:
kuaifan 2025-03-16 21:08:04 +08:00
parent 62b40ddb84
commit 0ffbaaaeaa
5 changed files with 44 additions and 34 deletions

View File

@ -1521,6 +1521,7 @@ class DialogController extends AbstractController
* @apiParam {Number} file_id 消息ID
* @apiParam {Array} dialogids 转发给的对话ID
* @apiParam {Array} userids 转发给的成员ID
* @apiParam {String} leave_message 转发留言
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
@ -1533,14 +1534,18 @@ class DialogController extends AbstractController
$file_id = intval(Request::input("file_id"));
$dialogids = Request::input('dialogids');
$userids = Request::input('userids');
$leave_message = Request::input('leave_message');
//
if (empty($dialogids) && empty($userids)) {
return Base::retError("请选择转发对话或成员");
return Base::retError("请选择对话或成员");
}
//
$file = File::permissionFind($file_id, $user);
$fileLink = $file->getShareLink($user->userid);
$fileMsg = "<a class=\"mention file\" href=\"{{RemoteURL}}single/file/{$fileLink['code']}\" target=\"_blank\">~{$file->getNameAndExt()}</a>";
$fileMsg = "<p><a class=\"mention file\" href=\"{{RemoteURL}}single/file/{$fileLink['code']}\" target=\"_blank\">~{$file->getNameAndExt()}</a></p>";
if ($leave_message) {
$fileMsg .= "<p>{$leave_message}</p>";
}
//
return AbstractModel::transaction(function() use ($user, $fileMsg, $userids, $dialogids) {
$msgs = [];
@ -2115,7 +2120,7 @@ class DialogController extends AbstractController
* @apiParam {Array} dialogids 转发给的对话ID
* @apiParam {Array} userids 转发给的成员ID
* @apiParam {Number} show_source 是否显示原发送者信息
* @apiParam {Array} leave_message 转发留言
* @apiParam {String} leave_message 转发留言
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
@ -2132,7 +2137,7 @@ class DialogController extends AbstractController
$leave_message = Request::input('leave_message');
//
if (empty($dialogids) && empty($userids)) {
return Base::retError("请选择转发对话或成员");
return Base::retError("请选择对话或成员");
}
//
$msg = WebSocketDialogMsg::whereId($msg_id)->first();

View File

@ -470,7 +470,7 @@
<Forwarder
ref="forwarder"
:title="$L('转发')"
:confirm-title="$L('转发确认')"
:confirm-title="$L('确认转发')"
:multiple-max="50"
:msg-detail="operateItem"
:before-submit="onForward"/>

View File

@ -1,5 +1,5 @@
<template>
<!-- 转发确认 -->
<!-- 确认转发 -->
<Modal
v-model="show"
:title="title"
@ -28,7 +28,7 @@
</div>
<div class="twice-affirm-body-extend">
<div class="forwarder-wrapper-body">
<div class="dialog-wrapper inde-list">
<div v-if="msgDetail" class="dialog-wrapper inde-list">
<Scrollbar class-name="dialog-scroller">
<DialogItem
:source="msgDetail"
@ -64,7 +64,7 @@
</div>
</div>
<template #footer>
<div class="forwarder-wrapper-footer" :class="{selected: !sender}" @click="onSender">
<div v-if="!senderHidden" class="forwarder-wrapper-footer" :class="{selected: !sender}" @click="onSender">
<Icon class="user-modal-icon" :type="sender ? 'ios-radio-button-off' : 'ios-checkmark-circle'" />
<span class="forward-text-tip">{{$L('不显示原发送者信息')}}</span>
</div>
@ -113,7 +113,7 @@ export default {
//
msgDetail: {
type: Object,
default: () => ({})
default: null
},
},
@ -177,10 +177,13 @@ export default {
this.hide()
return
}
const before = this.beforeSubmit({
const data = {
message: this.message,
sender: this.sender,
});
}
if (!this.senderHidden) {
data.sender = this.sender
}
const before = this.beforeSubmit(data);
if (before && before.then) {
this.loading = true
before.then(() => {

View File

@ -10,7 +10,7 @@
show-dialog
module/>
<!-- 转发确认 -->
<!-- 确认转发 -->
<ForwardConfirm
ref="forwardConfirm"
v-model="confirmShow"
@ -58,7 +58,7 @@ export default {
//
msgDetail: {
type: Object,
default: () => ({})
default: null
},
},
@ -105,7 +105,9 @@ export default {
//
data.dialogids = selects.filter(value => $A.leftExists(value, 'd:')).map(value => value.replace('d:', ''));
data.userids = selects.filter(value => !$A.leftExists(value, 'd:'));
data.msg_id = this.msgDetail.id;
if (this.msgDetail) {
data.msg_id = this.msgDetail.id;
}
//
const success = () => {
this.$refs.forwardSelect.hide();
@ -115,6 +117,15 @@ export default {
success()
return
}
/**
* data = {
* dialogids: [], // ID
* userids: [], // ID
* message: '', //
* msg_id: 0 // IDmsgDetail != null
* sender: true // senderHidden != true
* }
*/
const before = this.beforeSubmit(data);
if (before && before.then) {
before.then(success).catch(reject)

View File

@ -373,15 +373,13 @@
</Modal>
<!-- 文件发送 -->
<UserSelect
ref="sendFile"
v-model="sendData"
:multiple-max="50"
<Forwarder
ref="forwarder"
:title="$L('发送文件')"
:confirm-title="$L('确认发送')"
:multiple-max="50"
:before-submit="onSendFile"
:show-select-all="false"
show-dialog
module/>
sender-hidden/>
<!--文件链接-->
<Modal
@ -448,13 +446,14 @@ import DrawerOverlay from "../../components/DrawerOverlay";
import longpress from "../../directives/longpress";
import UserSelect from "../../components/UserSelect.vue";
import UserAvatarTip from "../../components/UserAvatar/tip.vue";
import Forwarder from "./components/Forwarder/index.vue";
const FilePreview = () => import('./components/FilePreview');
const FileContent = () => import('./components/FileContent');
const FileObject = {sort: null, mode: null, shared: null};
export default {
components: {UserAvatarTip, UserSelect, FilePreview, DrawerOverlay, FileContent},
components: {Forwarder, UserAvatarTip, UserSelect, FilePreview, DrawerOverlay, FileContent},
directives: {longpress},
data() {
return {
@ -527,7 +526,6 @@ export default {
shareLoad: 0,
sendFileId: 0,
sendData: [],
linkShow: false,
linkData: {},
@ -1253,8 +1251,7 @@ export default {
case 'send':
this.sendFileId = item.id;
this.sendData = [];
this.$refs.sendFile.onSelection()
this.$refs.forwarder.onSelection()
break;
case 'share':
@ -1325,20 +1322,14 @@ export default {
}
},
onSendFile() {
onSendFile({dialogids, userids, message}) {
return new Promise((resolve, reject) => {
if (this.sendData.length === 0) {
$A.messageError("请选择转发对话或成员");
reject();
return
}
const dialogids = this.sendData.filter(value => $A.leftExists(value, 'd:')).map(value => value.replace('d:', ''));
const userids = this.sendData.filter(value => !$A.leftExists(value, 'd:'));
this.$store.dispatch("call", {
url: 'dialog/msg/sendfileid',
data: {
dialogids,
userids,
leave_message: message,
file_id: this.sendFileId
}
}).then(({data, msg}) => {