Browse Source

修改消息已读的逻辑

dev
李可松 4 years ago
parent
commit
6519883d24
  1. 14
      app/AdminAgent/Controllers/MessageController.php
  2. 19
      app/Http/Controllers/Api/MessageController.php
  3. 14
      app/Models/MessageRead.php

14
app/AdminAgent/Controllers/MessageController.php

@ -26,7 +26,7 @@ class MessageController extends AdminController
$grid->column('id')->sortable(); $grid->column('id')->sortable();
$grid->column('user_id'); $grid->column('user_id');
$grid->column('title'); $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->column('created_at');
$grid->filter(function (Grid\Filter $filter) { $grid->filter(function (Grid\Filter $filter) {
@ -58,13 +58,13 @@ class MessageController extends AdminController
$show->field('user_id'); $show->field('user_id');
$show->field('title'); $show->field('title');
$show->field('content')->unescape(); $show->field('content')->unescape();
$show->field('is_read')
/*$show->field('is_read')
->as(function () { ->as(function () {
if ($this->user_id) { if ($this->user_id) {
return $this->is_read ? '已读' : '未读'; return $this->is_read ? '已读' : '未读';
} }
return '所有人接收'; return '所有人接收';
});
});*/
$show->field('created_at'); $show->field('created_at');
}); });
} }
@ -91,9 +91,9 @@ class MessageController extends AdminController
$form->text('title')->required(); $form->text('title')->required();
$form->editor('content'); $form->editor('content');
if ($form->isCreating()) {
/*if ($form->isCreating()) {
$form->confirm('发布确认', '为了保证消费者利益,所有人接收的消息发布后禁止编辑,确定发布?'); $form->confirm('发布确认', '为了保证消费者利益,所有人接收的消息发布后禁止编辑,确定发布?');
}
}*/
})->saving(function (Form $form) { })->saving(function (Form $form) {
//不允许修改非自己的数据 //不允许修改非自己的数据
if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) { 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) { if ($form->model()->user_id == 0) {
return $form->response()->error('为了保证消费者利益,所有人接收的消息禁止编辑'); return $form->response()->error('为了保证消费者利益,所有人接收的消息禁止编辑');
} }
if ($form->model()->is_read) { if ($form->model()->is_read) {
return $form->response()->error('消息已读,禁止修改'); return $form->response()->error('消息已读,禁止修改');
} }
}
}*/
//特殊字段处理 //特殊字段处理
$form->hidden(['agent_id']); $form->hidden(['agent_id']);

19
app/Http/Controllers/Api/MessageController.php

@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\Message; use App\Models\Message;
use App\Models\MessageRead;
use Illuminate\Http\Request; use Illuminate\Http\Request;
/** /**
@ -15,10 +16,16 @@ class MessageController extends Controller
{ {
public function index() 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') ->orderBy('id', 'DESC')
->simplePaginate(15); ->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); return $this->success($list);
} }
@ -26,8 +33,9 @@ class MessageController extends Controller
{ {
$id = (int)request()->input('id'); $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); ->find($id);
if (!$message) { 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); return $this->success($message);
} }

14
app/Models/MessageRead.php

@ -0,0 +1,14 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
/**
* 消息已读状态记录
* Class MessageRead
* @package App\Models
*/
class MessageRead extends BaseModel
{
use HasFactory;
}
Loading…
Cancel
Save