From c63fdb04c29665e8c4e22ef5df96d7332eecbd8a Mon Sep 17 00:00:00 2001 From: kuaifan Date: Tue, 7 Jun 2022 12:03:38 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E6=96=87=E5=AD=97=E5=8F=91=E9=80=81?= =?UTF-8?q?=E5=A4=AA=E9=95=BF=E8=BD=AC=E6=88=90=E6=96=87=E4=BB=B6=E5=8F=91?= =?UTF-8?q?=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/DialogController.php | 42 ++++++++++++------- .../pages/manage/components/DialogWrapper.vue | 15 ++++--- .../js/pages/manage/components/TaskDetail.vue | 2 +- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index 7049eece8..735c4db0c 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -286,26 +286,38 @@ class DialogController extends AbstractController WebSocketDialog::checkDialog($dialog_id); // $text = WebSocketDialogMsg::formatMsg($text, $dialog_id); - if (mb_strlen($text) < 1) { + $strlen = mb_strlen($text); + if ($strlen < 1) { return Base::retError('消息内容不能为空'); - } elseif (mb_strlen($text) > 20000) { - return Base::retError('消息内容最大不能超过20000字'); + } elseif ($strlen > 200000) { + return Base::retError('消息内容最大不能超过200000字'); } - if (mb_strlen($text) > 2000) { - $array = mb_str_split($text, 2000); - } else { - $array = [$text]; - } - // - $list = []; - foreach ($array as $item) { - $res = WebSocketDialogMsg::sendMsg($dialog_id, 'text', ['text' => $item], $user->userid); - if (Base::isSuccess($res)) { - $list[] = $res['data']; + if ($strlen > 2000) { + // 内容过长转成文件发送 + $path = "uploads/chat/" . date("Ym") . "/" . $dialog_id . "/"; + Base::makeDir(public_path($path)); + $path = $path . md5($text) . ".txt"; + $file = public_path($path); + file_put_contents($file, $text); + $size = filesize(public_path($path)); + if (empty($size)) { + return Base::retError('消息发送保存失败'); } + $fileData = [ + 'name' => "LongText-{$strlen}.txt", + 'size' => $size, + 'file' => $file, + 'path' => $path, + 'url' => Base::fillUrl($path), + 'thumb' => '', + 'width' => -1, + 'height' => -1, + 'ext' => 'txt', + ]; + return WebSocketDialogMsg::sendMsg($dialog_id, 'file', $fileData, $user->userid); } // - return Base::retSuccess('发送成功', $list); + return WebSocketDialogMsg::sendMsg($dialog_id, 'text', ['text' => $text], $user->userid); } /** diff --git a/resources/assets/js/pages/manage/components/DialogWrapper.vue b/resources/assets/js/pages/manage/components/DialogWrapper.vue index 90a91b04b..cfe923217 100644 --- a/resources/assets/js/pages/manage/components/DialogWrapper.vue +++ b/resources/assets/js/pages/manage/components/DialogWrapper.vue @@ -128,7 +128,7 @@ v-model="msgText" :dialog-id="dialogId" :emoji-bottom="windowSmall" - :maxlength="20000" + :maxlength="200000" @on-focus="onEventFocus" @on-blur="onEventBlur" @on-more="onEventMore" @@ -368,9 +368,9 @@ export default { if (!this.isReady) { return []; } - return $A.cloneJSON(this.dialogMsgs.filter(({dialog_id}) => { + return this.dialogMsgs.filter(({dialog_id}) => { return dialog_id == this.dialogId; - })).sort((a, b) => { + }).sort((a, b) => { return a.id - b.id; }); }, @@ -379,15 +379,18 @@ export default { if (!this.isReady) { return []; } - return $A.cloneJSON(this.tempMsgs.filter(({dialog_id}) => { + return this.tempMsgs.filter(({dialog_id}) => { return dialog_id == this.dialogId; - })); + }); }, allMsgList() { const {dialogMsgList, tempMsgList} = this; if (tempMsgList.length > 0) { - dialogMsgList.push(...tempMsgList); + const array = []; + array.push(...dialogMsgList); + array.push(...tempMsgList) + return array; } return dialogMsgList; }, diff --git a/resources/assets/js/pages/manage/components/TaskDetail.vue b/resources/assets/js/pages/manage/components/TaskDetail.vue index 5a4b84a4a..89d73d067 100644 --- a/resources/assets/js/pages/manage/components/TaskDetail.vue +++ b/resources/assets/js/pages/manage/components/TaskDetail.vue @@ -404,7 +404,7 @@ :task-id="taskId" v-model="msgText" :loading="sendLoad > 0" - :maxlength="20000" + :maxlength="200000" :placeholder="$L('输入消息...')" @on-more="onEventMore" @on-file="onSelectFile"