diff --git a/app/AdminAgent/Controllers/MessageController.php b/app/AdminAgent/Controllers/MessageController.php index 3813198..df3136b 100644 --- a/app/AdminAgent/Controllers/MessageController.php +++ b/app/AdminAgent/Controllers/MessageController.php @@ -26,7 +26,7 @@ class MessageController extends AdminController $grid->column('id')->sortable(); $grid->column('user_id'); $grid->column('title'); - $grid->column('is_read')->if(fn($v) => $this->user_id != 0)->bool()->else()->display('所有人接收'); +// $grid->column('is_read')->if(fn($v) => $this->user_id != 0)->bool()->else()->display('所有人接收'); $grid->column('created_at'); $grid->filter(function (Grid\Filter $filter) { @@ -58,13 +58,13 @@ class MessageController extends AdminController $show->field('user_id'); $show->field('title'); $show->field('content')->unescape(); - $show->field('is_read') + /*$show->field('is_read') ->as(function () { if ($this->user_id) { return $this->is_read ? '已读' : '未读'; } return '所有人接收'; - }); + });*/ $show->field('created_at'); }); } @@ -91,9 +91,9 @@ class MessageController extends AdminController $form->text('title')->required(); $form->editor('content'); - if ($form->isCreating()) { + /*if ($form->isCreating()) { $form->confirm('发布确认', '为了保证消费者利益,所有人接收的消息发布后禁止编辑,确定发布?'); - } + }*/ })->saving(function (Form $form) { //不允许修改非自己的数据 if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) { @@ -101,14 +101,14 @@ class MessageController extends AdminController } //消息已读后禁止编辑 - if ($form->isEditing()) { + /*if ($form->isEditing()) { if ($form->model()->user_id == 0) { return $form->response()->error('为了保证消费者利益,所有人接收的消息禁止编辑'); } if ($form->model()->is_read) { return $form->response()->error('消息已读,禁止修改'); } - } + }*/ //特殊字段处理 $form->hidden(['agent_id']); diff --git a/app/Http/Controllers/Api/MessageController.php b/app/Http/Controllers/Api/MessageController.php index 70e6b39..6030cf7 100644 --- a/app/Http/Controllers/Api/MessageController.php +++ b/app/Http/Controllers/Api/MessageController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use App\Models\Message; +use App\Models\MessageRead; use Illuminate\Http\Request; /** @@ -15,10 +16,16 @@ class MessageController extends Controller { public function index() { - $list = Message::where(['agent_id' => $this->agent_id, 'user_id' => $this->user_id]) - ->select('id', 'title', 'is_read', 'created_at') + $list = Message::where('agent_id', $this->agent_id) + ->whereIn('user_id', [$this->user_id, 0]) //0是所有人都接收的系统消息 + ->select('id', 'user_id', 'title', 'created_at') ->orderBy('id', 'DESC') ->simplePaginate(15); + if (!empty($list->items())) { + foreach ($list->items() as &$v) { + $v->is_read = (int)MessageRead::where(['id' => $v->id, 'user_id' => $v->user_id])->exists(); + } + } return $this->success($list); } @@ -26,8 +33,9 @@ class MessageController extends Controller { $id = (int)request()->input('id'); - $message = Message::query() - ->where(['agent_id' => $this->agent_id, 'user_id' => $this->user_id]) + //增加where条件是为了防止偷看别人的消息 + $message = Message::where(['agent_id' => $this->agent_id]) + ->whereIn('user_id', [$this->user_id, 0]) //0是所有人都接收的系统消息 ->find($id); if (!$message) { @@ -35,8 +43,7 @@ class MessageController extends Controller } //标记短消息为已读 - $message->is_read = 1; - $message->save(); + MessageRead::insertOrIgnore(['id' => $id, 'user_id' => $this->user_id]); return $this->success($message); } diff --git a/app/Models/MessageRead.php b/app/Models/MessageRead.php new file mode 100644 index 0000000..843bd76 --- /dev/null +++ b/app/Models/MessageRead.php @@ -0,0 +1,14 @@ +