service = new AppMessageService(); } /** * 列表页面 * * @return Grid */ protected function grid() { return Grid::make(new AppMessage(), function (Grid $grid) { $helper = new GridHelper($grid, $this); $helper->columnId(); $helper->columnMessageTitle(); $helper->columnMessageType(); $helper->columnMessageContent(); $helper->columnMessageStatus(); $helper->columnSenderType(); $helper->columnSenderId(); $helper->columnReceiverId(); $helper->columnAllowReply(); $helper->columnCreatedAt(); $helper->columnUpdatedAt(); // 筛选器 $grid->filter(function (Grid\Filter $filter) { $helper = new FilterHelper($filter, $this); $helper->equalId(); $helper->likeMessageTitle(); $helper->equalMessageType(); $helper->likeMessageContent(); $helper->equalMessageStatus(); $helper->equalSenderType(); $helper->equalSenderId(); $helper->equalReceiverId(); $helper->betweenCreatedAt(); }); }); } /** * 详情页面 * * @param mixed $id * @return Show */ protected function detail($id) { return Show::make($id, new AppMessage(), function (Show $show) { $helper = new ShowHelper($show, $this); $helper->fieldMessageTitle(); $helper->fieldMessageType(); $helper->fieldMessageContent(); $helper->fieldMessageStatus(); $helper->fieldSenderType(); $helper->fieldSenderId(); $helper->fieldReceiverId(); $helper->fieldAllowReply(); $show->field('data', '附加数据')->json(); $helper->fieldCreatedAt(); $helper->fieldUpdatedAt(); $helper->fieldDeletedAt(); // 显示接收者列表 $show->relation('recipients', '接收者列表', function ($model) { $grid = new Grid(new \App\Module\Ulogic\Models\AppMessageRecipient()); $grid->model()->where('message_id', $model->id); $grid->column('id', 'ID'); $grid->column('user_id', '用户ID'); $grid->column('read_at', '阅读时间'); $grid->column('created_at', '创建时间'); $grid->disableCreateButton(); $grid->disableActions(); return $grid; }); }); } /** * 表单页面 * * @return Form */ protected function form() { return Form::make(new AppMessage(), function (Form $form) { $helper = new FormHelper($form, $this); $form->display('id', 'ID'); $helper->textMessageTitle(); $helper->selectMessageType(); $helper->textareaMessageContent(); $helper->selectMessageStatus(); $helper->selectSenderType(); $helper->numberSenderId(); $helper->numberReceiverId(); $helper->switchAllowReply(); $form->textarea('data', '附加数据')->help('JSON格式的附加数据'); $form->display('created_at', '创建时间'); $form->display('updated_at', '更新时间'); // 保存前回调 $form->saving(function (Form $form) { // 处理附加数据 if ($form->data) { try { $data = json_decode($form->data, true); if (json_last_error() !== JSON_ERROR_NONE) { return $form->response()->error('附加数据不是有效的JSON格式'); } $form->data = $data; } catch (\Exception $e) { return $form->response()->error('附加数据处理失败: ' . $e->getMessage()); } } // 如果是新建记录,设置发送者ID if ($form->isCreating() && $form->sender_type === 'admin' && !$form->sender_id) { $form->sender_id = auth('admin')->id() ?: 0; } }); // 保存后回调 $form->saved(function (Form $form) { // 如果是新建记录且状态为已发布,发送消息 if ($form->isCreating() && $form->status === 'published') { try { $message = AppMessage::find($form->getKey()); $this->service->sendMessage([ 'title' => $message->title, 'content' => $message->content, 'type' => $message->type, 'sender_type' => $message->sender_type, 'sender_id' => $message->sender_id, 'receiver_id' => $message->receiver_id, 'allow_reply' => $message->allow_reply, 'data' => $message->data, ]); return $form->response()->success('消息发送成功'); } catch (\Exception $e) { return $form->response()->error('消息发送失败: ' . $e->getMessage()); } } }); }); } }