4 changed files with 160 additions and 0 deletions
			
			
		- 
					127app/AdminAgent/Controllers/MessageController.php
 - 
					16app/AdminAgent/Repositories/Message.php
 - 
					1app/AdminAgent/routes.php
 - 
					16resources/lang/zh_CN/message.php
 
@ -0,0 +1,127 @@ | 
				
			|||
<?php | 
				
			|||
 | 
				
			|||
namespace App\AdminAgent\Controllers; | 
				
			|||
 | 
				
			|||
use App\AdminAgent\Renderable\SelectUser; | 
				
			|||
use App\AdminAgent\Repositories\Message; | 
				
			|||
use App\Models\User; | 
				
			|||
use Dcat\Admin\Admin; | 
				
			|||
use Dcat\Admin\Form; | 
				
			|||
use Dcat\Admin\Grid; | 
				
			|||
use Dcat\Admin\Show; | 
				
			|||
use Dcat\Admin\Http\Controllers\AdminController; | 
				
			|||
 | 
				
			|||
class MessageController extends AdminController | 
				
			|||
{ | 
				
			|||
    /** | 
				
			|||
     * Make a grid builder. | 
				
			|||
     * | 
				
			|||
     * @return Grid | 
				
			|||
     */ | 
				
			|||
    protected function grid() | 
				
			|||
    { | 
				
			|||
        return Grid::make(new Message(), function (Grid $grid) { | 
				
			|||
			$grid->model()->where('agent_id', Admin::user()->id); | 
				
			|||
 | 
				
			|||
            $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('created_at'); | 
				
			|||
 | 
				
			|||
            $grid->filter(function (Grid\Filter $filter) { | 
				
			|||
				$filter->panel(); | 
				
			|||
				$filter->model()->where('agent_id', Admin::user()->id); | 
				
			|||
 | 
				
			|||
                $filter->equal('id'); | 
				
			|||
				$filter->like('title'); | 
				
			|||
            }); | 
				
			|||
        }); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    /** | 
				
			|||
     * Make a show builder. | 
				
			|||
     * | 
				
			|||
     * @param mixed $id | 
				
			|||
     * | 
				
			|||
     * @return Show | 
				
			|||
     */ | 
				
			|||
    protected function detail($id) | 
				
			|||
    { | 
				
			|||
        return Show::make($id, new Message(), function (Show $show) { | 
				
			|||
			//不允许查看非自己的数据
 | 
				
			|||
			if ($show->model()->agent_id != Admin::user()->id) { | 
				
			|||
				Admin::exit('数据不存在'); | 
				
			|||
			} | 
				
			|||
 | 
				
			|||
			$show->field('id'); | 
				
			|||
            $show->field('user_id'); | 
				
			|||
            $show->field('title'); | 
				
			|||
            $show->field('content')->unescape(); | 
				
			|||
            $show->field('is_read') | 
				
			|||
				->as(function () { | 
				
			|||
					if ($this->user_id) { | 
				
			|||
						return $this->is_read ? '已读' : '未读'; | 
				
			|||
					} | 
				
			|||
					return '所有人接收'; | 
				
			|||
				}); | 
				
			|||
            $show->field('created_at'); | 
				
			|||
        }); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    /** | 
				
			|||
     * Make a form builder. | 
				
			|||
     * | 
				
			|||
     * @return Form | 
				
			|||
     */ | 
				
			|||
    protected function form() | 
				
			|||
	{ | 
				
			|||
		return Form::make(new Message(), function (Form $form) { | 
				
			|||
			//不允许查看非自己的数据
 | 
				
			|||
			if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) { | 
				
			|||
				return $form->response()->error('数据不存在'); | 
				
			|||
			} | 
				
			|||
 | 
				
			|||
			$form->display('id'); | 
				
			|||
			$form->selectTable('user_id') | 
				
			|||
				->from(new SelectUser()) | 
				
			|||
				->model(User::class, 'id', 'nickname') | 
				
			|||
				->default(0) | 
				
			|||
				->help('不选择则表示所有人都收到消息'); | 
				
			|||
			$form->text('title')->required(); | 
				
			|||
			$form->editor('content'); | 
				
			|||
 | 
				
			|||
			if ($form->isCreating()) { | 
				
			|||
				$form->confirm('发布确认', '为了保证消费者利益,所有人接收的消息发布后禁止编辑,确定发布?'); | 
				
			|||
			} | 
				
			|||
		})->saving(function (Form $form) { | 
				
			|||
			//不允许修改非自己的数据
 | 
				
			|||
			if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) { | 
				
			|||
				return $form->response()->error('数据不存在'); | 
				
			|||
			} | 
				
			|||
 | 
				
			|||
			//消息已读后禁止编辑
 | 
				
			|||
			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']); | 
				
			|||
			$form->agent_id = Admin::user()->id; | 
				
			|||
			$form->user_id = $form->user_id ?? 0; | 
				
			|||
 | 
				
			|||
			//不允许编辑的字段
 | 
				
			|||
			$form->ignore(['id', 'status', 'created_at', 'updated_at', 'deleted_at']); | 
				
			|||
		})->deleting(function (Form $form) { | 
				
			|||
			//不允许删除非自己的数据
 | 
				
			|||
			if ($form->model()[0]['agent_id'] != Admin::user()->id) { | 
				
			|||
				return $form->response()->error('数据不存在'); | 
				
			|||
			} | 
				
			|||
		}); | 
				
			|||
	} | 
				
			|||
} | 
				
			|||
@ -0,0 +1,16 @@ | 
				
			|||
<?php | 
				
			|||
 | 
				
			|||
namespace App\AdminAgent\Repositories; | 
				
			|||
 | 
				
			|||
use App\Models\Message as Model; | 
				
			|||
use Dcat\Admin\Repositories\EloquentRepository; | 
				
			|||
 | 
				
			|||
class Message extends EloquentRepository | 
				
			|||
{ | 
				
			|||
    /** | 
				
			|||
     * Model. | 
				
			|||
     * | 
				
			|||
     * @var string | 
				
			|||
     */ | 
				
			|||
    protected $eloquentClass = Model::class; | 
				
			|||
} | 
				
			|||
@ -0,0 +1,16 @@ | 
				
			|||
<?php  | 
				
			|||
return [ | 
				
			|||
    'labels' => [ | 
				
			|||
        'Message' => '系统消息', | 
				
			|||
        'message' => '系统消息', | 
				
			|||
    ], | 
				
			|||
    'fields' => [ | 
				
			|||
        'agent_id' => '代理商ID', | 
				
			|||
        'user_id' => '接收者ID', | 
				
			|||
        'title' => '消息标题', | 
				
			|||
        'content' => '消息内容', | 
				
			|||
        'is_read' => '是否已读', | 
				
			|||
    ], | 
				
			|||
    'options' => [ | 
				
			|||
    ], | 
				
			|||
]; | 
				
			|||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue