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

View File

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

View File

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

View File

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

View File

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