From 55ade32589c723e275c067553bbbd33249e6a639 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Sun, 16 Mar 2025 21:39:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E5=88=86=E4=BA=AB?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=8A=A5=E5=91=8A=E5=88=B0=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/ReportController.php | 107 +++++++++ .../pages/manage/components/ReportReceive.vue | 218 +++++++++++------- 2 files changed, 238 insertions(+), 87 deletions(-) diff --git a/app/Http/Controllers/Api/ReportController.php b/app/Http/Controllers/Api/ReportController.php index 4eeb51a96..2ddd63711 100755 --- a/app/Http/Controllers/Api/ReportController.php +++ b/app/Http/Controllers/Api/ReportController.php @@ -9,6 +9,8 @@ use App\Models\Report; use App\Models\ReportLink; use App\Models\ReportReceive; use App\Models\User; +use App\Models\WebSocketDialog; +use App\Models\WebSocketDialogMsg; use App\Module\Base; use App\Module\Doo; use App\Tasks\PushTask; @@ -29,6 +31,7 @@ class ReportController extends AbstractController /** * @api {get} api/report/my 01. 我发送的汇报 * + * @apiDescription 需要token身份 * @apiVersion 1.0.0 * @apiGroup report * @apiName my @@ -75,6 +78,7 @@ class ReportController extends AbstractController /** * @api {get} api/report/receive 02. 我接收的汇报 * + * @apiDescription 需要token身份 * @apiVersion 1.0.0 * @apiGroup report * @apiName receive @@ -142,6 +146,7 @@ class ReportController extends AbstractController /** * @api {get} api/report/store 03. 保存并发送工作汇报 * + * @apiDescription 需要token身份 * @apiVersion 1.0.0 * @apiGroup report * @apiName store @@ -267,6 +272,7 @@ class ReportController extends AbstractController /** * @api {get} api/report/template 04. 生成汇报模板 * + * @apiDescription 需要token身份 * @apiVersion 1.0.0 * @apiGroup report * @apiName template @@ -438,6 +444,7 @@ class ReportController extends AbstractController /** * @api {get} api/report/detail 05. 报告详情 * + * @apiDescription 需要token身份 * @apiVersion 1.0.0 * @apiGroup report * @apiName detail @@ -487,6 +494,7 @@ class ReportController extends AbstractController /** * @api {get} api/report/mark 06. 标记已读/未读 * + * @apiDescription 需要token身份 * @apiVersion 1.0.0 * @apiGroup report * @apiName mark @@ -526,9 +534,106 @@ class ReportController extends AbstractController return Base::retSuccess("操作成功"); } + /** + * @api {get} api/report/share 06. 分享报告到消息 + * + * @apiDescription 需要token身份 + * @apiVersion 1.0.0 + * @apiGroup report + * @apiName share + * + * @apiParam {Number} id 报告id(组) + * @apiParam {Array} dialogids 转发给的对话ID + * @apiParam {Array} userids 转发给的成员ID + * @apiParam {String} leave_message 转发留言 + * + * @apiSuccess {Number} ret 返回状态码(1正确、0错误) + * @apiSuccess {String} msg 返回信息(错误描述) + * @apiSuccess {Object} data 返回数据 + */ + public function share() + { + $user = User::auth(); + // + $id = Request::input('id'); + $dialogids = Request::input('dialogids'); + $userids = Request::input('userids'); + $leave_message = Request::input('leave_message'); + // + if (is_array($id)) { + if (count(Base::arrayRetainInt($id)) > 20) { + return Base::retError("最多只能操作20条数据"); + } + $builder = Report::whereIn("id", Base::arrayRetainInt($id)); + } else { + $builder = Report::whereId(intval($id)); + } + $reportMsgs = []; + $builder ->chunkById(100, function ($list) use (&$reportMsgs, $user) { + /** @var Report $item */ + foreach ($list as $item) { + $reportLink = ReportLink::generateLink($item->id, $user->userid); + $reportMsgs[] = "%{$item->title}"; + } + }); + if (empty($reportMsgs)) { + return Base::retError("报告不存在或已被删除"); + } + $reportTag = count($reportMsgs) > 1 ? 'li' : 'p'; + $reportMsgs = array_map(function ($item) use ($reportTag) { + return "<{$reportTag}>{$item}"; + }, $reportMsgs); + if ($reportTag === 'li') { + array_unshift($reportMsgs, "
    "); + $reportMsgs[] = "
"; + } + if ($leave_message) { + $reportMsgs[] = "

{$leave_message}

"; + } + $msgText = implode("", $reportMsgs); + // + return AbstractModel::transaction(function() use ($user, $msgText, $userids, $dialogids) { + $msgs = []; + $already = []; + if ($dialogids) { + if (!is_array($dialogids)) { + $dialogids = [$dialogids]; + } + foreach ($dialogids as $dialogid) { + $res = WebSocketDialogMsg::sendMsg(null, $dialogid, 'text', ['text' => $msgText], $user->userid); + 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($user, $userid); + if ($dialog && !in_array($dialog->id, $already)) { + $res = WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => $msgText], $user->userid); + if (Base::isSuccess($res)) { + $msgs[] = $res['data']; + } + } + } + } + return Base::retSuccess('发送成功', [ + 'msgs' => $msgs + ]); + }); + } + /** * @api {get} api/report/last_submitter 07. 获取最后一次提交的接收人 * + * @apiDescription 需要token身份 * @apiVersion 1.0.0 * @apiGroup report * @apiName last_submitter @@ -546,6 +651,7 @@ class ReportController extends AbstractController /** * @api {get} api/report/unread 08. 获取未读 * + * @apiDescription 需要token身份 * @apiVersion 1.0.0 * @apiGroup report * @apiName unread @@ -570,6 +676,7 @@ class ReportController extends AbstractController /** * @api {get} api/report/read 09. 标记汇报已读,可批量 * + * @apiDescription 需要token身份 * @apiVersion 1.0.0 * @apiGroup report * @apiName read diff --git a/resources/assets/js/pages/manage/components/ReportReceive.vue b/resources/assets/js/pages/manage/components/ReportReceive.vue index fb3fd27f1..8e3ea7ab5 100644 --- a/resources/assets/js/pages/manage/components/ReportReceive.vue +++ b/resources/assets/js/pages/manage/components/ReportReceive.vue @@ -95,6 +95,7 @@ @@ -113,107 +114,121 @@ @on-page-size-change="setPageSize"/> + + +