diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index ec69a4094..f832f477c 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -934,7 +934,8 @@ class DialogController extends AbstractController * @apiName msg__forward * * @apiParam {Number} msg_id 消息ID - * @apiParam {Array} userids 转发给的成员 + * @apiParam {Array} dialogids 转发给的对话ID + * @apiParam {Array} userids 转发给的成员ID * * @apiSuccess {Number} ret 返回状态码(1正确、0错误) * @apiSuccess {String} msg 返回信息(错误描述) @@ -945,10 +946,11 @@ class DialogController extends AbstractController $user = User::auth(); // $msg_id = intval(Request::input("msg_id")); + $dialogids = Request::input('dialogids'); $userids = Request::input('userids'); // - if (empty($userids)) { - return Base::retError("请选择转发成员"); + if (empty($dialogids) && empty($userids)) { + return Base::retError("请选择转发对话或成员"); } // $msg = WebSocketDialogMsg::whereId($msg_id)->first(); @@ -957,7 +959,7 @@ class DialogController extends AbstractController } WebSocketDialog::checkDialog($msg->dialog_id); // - return $msg->forwardMsg($userids, $user->userid); + return $msg->forwardMsg($dialogids, $userids, $user->userid); } /** diff --git a/app/Models/WebSocketDialogMsg.php b/app/Models/WebSocketDialogMsg.php index 99ebabf63..127d81152 100644 --- a/app/Models/WebSocketDialogMsg.php +++ b/app/Models/WebSocketDialogMsg.php @@ -365,23 +365,42 @@ class WebSocketDialogMsg extends AbstractModel /** * 转发消息 - * @param $userids + * @param array|int $dialogids + * @param array|int $userids * @param int $sender 发送的会员ID * @return mixed */ - public function forwardMsg($userids, $sender) + public function forwardMsg($dialogids, $userids, $sender) { - return AbstractModel::transaction(function() use ($sender, $userids) { + return AbstractModel::transaction(function() use ($dialogids, $sender, $userids) { $msgs = []; - foreach ($userids as $userid) { - if (!User::whereUserid($userid)->exists()) { - continue; + $already = []; + if ($dialogids) { + if (!is_array($dialogids)) { + $dialogids = [$dialogids]; } - $dialog = WebSocketDialog::checkUserDialog($sender, $userid); - if ($dialog) { - $res = self::sendMsg(null, $dialog->id, $this->type, $this->getOriginal('msg'), $sender); + foreach ($dialogids as $dialogid) { + $res = self::sendMsg(null, $dialogid, $this->type, $this->getOriginal('msg'), $sender); if (Base::isSuccess($res)) { $msgs[] = $res['data']; + $already[] = $dialogid; + } + } + } + if ($userids) { + if (!is_array($userids)) { + $userids = [$userids]; + } + foreach ($userids as $userid) { + if (!User::whereUserid($userid)->exists()) { + continue; + } + $dialog = WebSocketDialog::checkUserDialog($sender, $userid); + if ($dialog && !in_array($dialog->id, $already)) { + $res = self::sendMsg(null, $dialog->id, $this->type, $this->getOriginal('msg'), $sender); + if (Base::isSuccess($res)) { + $msgs[] = $res['data']; + } } } } diff --git a/resources/assets/js/pages/manage/components/DialogWrapper.vue b/resources/assets/js/pages/manage/components/DialogWrapper.vue index 56d5811bc..0e72babfb 100644 --- a/resources/assets/js/pages/manage/components/DialogWrapper.vue +++ b/resources/assets/js/pages/manage/components/DialogWrapper.vue @@ -271,8 +271,38 @@ :title="$L('转发')" :mask-closable="false">
- - + + + + +
@@ -426,6 +456,7 @@ export default { forwardShow: false, forwardLoad: false, forwardData: { + dialogids: [], userids: [], }, @@ -506,6 +537,20 @@ export default { return this.cacheDialogs.find(({id}) => id == this.dialogId) || {}; }, + dialogList() { + return this.cacheDialogs.filter(dialog => { + return !(dialog.name === undefined || dialog.dialog_delete === 1); + }).sort((a, b) => { + if (a.top_at || b.top_at) { + return $A.Date(b.top_at) - $A.Date(a.top_at); + } + if (a.todo_num > 0 || b.todo_num > 0) { + return b.todo_num - a.todo_num; + } + return $A.Date(b.last_at) - $A.Date(a.last_at); + }); + }, + dialogMsgList() { if (!this.isReady) { return []; @@ -1417,13 +1462,14 @@ export default { onForward(type) { if (type === 'open') { this.forwardData = { + dialogids: [], userids: [], msg_id: this.operateItem.id }; this.forwardShow = true; } else if (type === 'submit') { - if ($A.arrayLength(this.forwardData.userids) === 0) { - $A.messageWarning("请选择转发成员"); + if ($A.arrayLength(this.forwardData.dialogids) === 0 && $A.arrayLength(this.forwardData.userids) === 0) { + $A.messageWarning("请选择转发对话或成员"); return } this.forwardLoad = true; diff --git a/resources/assets/sass/pages/components/dialog-wrapper.scss b/resources/assets/sass/pages/components/dialog-wrapper.scss index a16f2c84b..ec6e6f2e7 100644 --- a/resources/assets/sass/pages/components/dialog-wrapper.scss +++ b/resources/assets/sass/pages/components/dialog-wrapper.scss @@ -1367,6 +1367,63 @@ overflow: hidden !important; } + +.dialog-wrapper-forward { + .forward-option { + max-width: 100%; + display: flex; + align-items: center; + .forward-avatar { + display: flex; + align-items: center; + .icon-avatar { + width: 26px; + height: 26px; + flex-grow: 0; + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; + font-size: 18px; + background-color: #61B2F9; + color: #ffffff; + &.project { + background-color: #6E99EB; + } + &.task { + background-color: #9B96DF; + font-size: 16px; + } + } + } + .forward-name { + margin-left: 10px; + flex: 1; + width: 0; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + } + } + .ivu-select-item { + &.ivu-select-item-selected { + &:after { + top: 8px; + } + } + } + .forward-drop-prepend { + text-align: center; + color: #c5c8ce; + line-height: 20px; + padding-bottom: 5px; + font-size: 12px; + border-bottom: 1px solid #f1f1f1; + margin-bottom: 5px; + } +} + @media (max-width: 768px) { .dialog-wrapper { background-color: #f8f8f8;