From 3e95f923ef3281aa0febf9abc043bd61dfeb3f5e Mon Sep 17 00:00:00 2001 From: wuhui_zzw <1760308791@qq.com> Date: Fri, 27 Oct 2023 17:21:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=9A=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E4=B8=AD=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/message_center/README.md | 1 + plugins/message_center/callbacks.php | 14 ++ plugins/message_center/lang/en/locale.js | 8 + plugins/message_center/lang/en/test.php | 5 + plugins/message_center/lang/zh-CN/locale.js | 6 + plugins/message_center/lang/zh-CN/test.php | 5 + plugins/message_center/package.json | 11 + .../message_center/src/PluginApplication.php | 90 ++++++++ .../src/admin/IndexController.php | 74 ++++++ .../src/admin/ReadRecordController.php | 31 +++ .../src/models/MessageCenter.php | 69 ++++++ .../src/models/MessageCenterRead.php | 117 ++++++++++ plugins/message_center/views/config.tpl | 0 .../message_center/views/index/edit.blade.php | 218 ++++++++++++++++++ .../views/index/index.blade.php | 80 +++++++ .../views/read_record/index.blade.php | 105 +++++++++ .../weight-value/views/index/index.blade.php | 4 +- 17 files changed, 836 insertions(+), 2 deletions(-) create mode 100644 plugins/message_center/README.md create mode 100644 plugins/message_center/callbacks.php create mode 100644 plugins/message_center/lang/en/locale.js create mode 100644 plugins/message_center/lang/en/test.php create mode 100644 plugins/message_center/lang/zh-CN/locale.js create mode 100644 plugins/message_center/lang/zh-CN/test.php create mode 100644 plugins/message_center/package.json create mode 100644 plugins/message_center/src/PluginApplication.php create mode 100644 plugins/message_center/src/admin/IndexController.php create mode 100644 plugins/message_center/src/admin/ReadRecordController.php create mode 100644 plugins/message_center/src/models/MessageCenter.php create mode 100644 plugins/message_center/src/models/MessageCenterRead.php create mode 100644 plugins/message_center/views/config.tpl create mode 100644 plugins/message_center/views/index/edit.blade.php create mode 100644 plugins/message_center/views/index/index.blade.php create mode 100644 plugins/message_center/views/read_record/index.blade.php diff --git a/plugins/message_center/README.md b/plugins/message_center/README.md new file mode 100644 index 00000000..df0ca578 --- /dev/null +++ b/plugins/message_center/README.md @@ -0,0 +1 @@ +## 消息中心 diff --git a/plugins/message_center/callbacks.php b/plugins/message_center/callbacks.php new file mode 100644 index 00000000..5c7a6567 --- /dev/null +++ b/plugins/message_center/callbacks.php @@ -0,0 +1,14 @@ + function ($plugins) { + \Artisan::call('migrate',['--path'=>'plugins/message-center/migrations','--force'=>true]); + }, + app\common\events\PluginWasDisabled::class => function ($plugin) { + + + }, + app\common\events\PluginWasDeleted::class => function () { + \Artisan::call('migrate:rollback',['--path'=>'plugins/message-center/migrations']); + } +]; diff --git a/plugins/message_center/lang/en/locale.js b/plugins/message_center/lang/en/locale.js new file mode 100644 index 00000000..6f5de3aa --- /dev/null +++ b/plugins/message_center/lang/en/locale.js @@ -0,0 +1,8 @@ + +"use strict"; + +$.extend($.locales['en'], { + 'welfare': { + test: "JavaScript i18n test: English" + } +}); diff --git a/plugins/message_center/lang/en/test.php b/plugins/message_center/lang/en/test.php new file mode 100644 index 00000000..8999558a --- /dev/null +++ b/plugins/message_center/lang/en/test.php @@ -0,0 +1,5 @@ +'this is test title' +]; \ No newline at end of file diff --git a/plugins/message_center/lang/zh-CN/locale.js b/plugins/message_center/lang/zh-CN/locale.js new file mode 100644 index 00000000..1be84a97 --- /dev/null +++ b/plugins/message_center/lang/zh-CN/locale.js @@ -0,0 +1,6 @@ + +$.extend($.locales['zh-CN'], { + 'welfare': { + test: "JavaScript i18n test: 简体中文" + } +}); diff --git a/plugins/message_center/lang/zh-CN/test.php b/plugins/message_center/lang/zh-CN/test.php new file mode 100644 index 00000000..14fbcffc --- /dev/null +++ b/plugins/message_center/lang/zh-CN/test.php @@ -0,0 +1,5 @@ +'测试标题' +]; \ No newline at end of file diff --git a/plugins/message_center/package.json b/plugins/message_center/package.json new file mode 100644 index 00000000..083b463e --- /dev/null +++ b/plugins/message_center/package.json @@ -0,0 +1,11 @@ +{ + "name": "message-center", + "terminal": "wechat|min|wap", + "version": "1.0.1", + "title": "消息中心", + "description": "消息中心", + "author": "zzw", + "url": "", + "namespace": "Yunshop\\MessageCenter", + "config": "config.tpl" +} \ No newline at end of file diff --git a/plugins/message_center/src/PluginApplication.php b/plugins/message_center/src/PluginApplication.php new file mode 100644 index 00000000..819bc561 --- /dev/null +++ b/plugins/message_center/src/PluginApplication.php @@ -0,0 +1,90 @@ +setPluginMenu('message-center', [ + 'name' => '消息中心', + 'type' => 'marketing', + 'url' => 'plugin.message-center.admin.index.index',// url 可以填写http 也可以直接写路由 + 'url_params' => '',//如果是url填写的是路由则启用参数否则不启用 + 'permit' => 1,//如果不设置则不会做权限检测 + 'menu' => 1,//如果不设置则不显示菜单,子菜单也将不显示 + 'icon' => '',//菜单图标 + 'list_icon' => 'message-center', + 'parents' => [], + 'top_show' => 0, + 'left_first_show' => 0, + 'left_second_show' => 1, + 'child' => [ + 'plugin_message_center_index' => [ + 'name' => '消息管理', + 'permit' => 1, + 'menu' => 1, + 'icon' => '', + 'url' => 'plugin.message-center.admin.index.index', + 'url_params' => '', + 'item' => 'plugin_message_center_index', + 'parents' => ['message-center'], + 'child' => [ + // 权限补充 + 'plugin_message_center_index_index' => [ + 'name' => '消息管理', + 'url' => 'plugin.message-center.admin.index.index', + 'url_params' => '', + 'permit' => 1, + 'menu' => 0, + 'icon' => '', + 'item' => 'plugin_message_center_index_index', + 'parents' => ['message-center','plugin_message_center_index'] + ], + 'plugin_message_center_index_edit_info' => [ + 'name' => '消息编辑', + 'url' => 'plugin.message-center.admin.index.edit-info', + 'url_params' => '', + 'permit' => 1, + 'menu' => 0, + 'icon' => '', + 'item' => 'plugin_message_center_index_edit_info', + 'parents' => ['message-center','plugin_message_center_index'] + ], + ] + ], + 'plugin_message_center_read_record' => [ + 'name' => '阅读记录', + 'permit' => 1, + 'menu' => 1, + 'icon' => '', + 'url' => 'plugin.message-center.admin.read-record.index', + 'url_params' => '', + 'parents' => ['message-center'], + 'child' => [ + // 权限补充 + 'plugin_message_center_read_record_index' => [ + 'name' => '转账明细', + 'url' => 'plugin.message-center.admin.read-record.index', + 'url_params' => '', + 'permit' => 1, + 'menu' => 0, + 'icon' => '', + 'item' => 'plugin_message_center_read_record_index', + 'parents' => ['message-center','plugin_message_center_read_record'] + ], + ] + ], + ] + ]); + } + + public function boot(){ + $events = app('events'); + + + } + + + +} \ No newline at end of file diff --git a/plugins/message_center/src/admin/IndexController.php b/plugins/message_center/src/admin/IndexController.php new file mode 100644 index 00000000..5666f649 --- /dev/null +++ b/plugins/message_center/src/admin/IndexController.php @@ -0,0 +1,74 @@ +input('search'); + // 获取列表信息 + $result = MessageCenter::getList($search); + $data = [ + 'list' => $result['data'], + 'pager' => PaginationHelper::show($result['total'],$result['current_page'],$result['per_page']), + 'search' => $search + ]; + + return view('Yunshop\MessageCenter::index.index',$data)->render(); + } + /** + * Common: 消息发布 + * Author: wu-hui + * Time: 2023/10/27 16:35 + * @return array|\Illuminate\Http\JsonResponse|string + * @throws \Throwable + */ + public function editInfo(){ + // 参数获取 + if(request()->isMethod('post')){ + DB::beginTransaction(); + try{ + // 参数处理 + $info = request()->input('info'); + $info['user_ids'] = trim(implode(',', array_unique($info['user_ids'])),','); + // 消息发布 + $id = MessageCenter::insertGetId([ + 'uniacid' => \YunShop::app()->uniacid, + 'notice_type' => (int)$info['notice_type'], + 'message_title' => $info['message_title'], + 'message_content' => $info['message_content'], + 'created_at' => time(), + 'updated_at' => time(), + ]); + MessageCenterRead::sendMessage($info,$id); + + + DB::commit(); + return $this->successJson('发布成功'); + }catch(\Exception $e){ + DB::rollBack(); + return $this->errorJson($e->getMessage()); + } + } + + return view('Yunshop\MessageCenter::index.edit')->render(); + } + + + + + + +} diff --git a/plugins/message_center/src/admin/ReadRecordController.php b/plugins/message_center/src/admin/ReadRecordController.php new file mode 100644 index 00000000..b8c0b3f9 --- /dev/null +++ b/plugins/message_center/src/admin/ReadRecordController.php @@ -0,0 +1,31 @@ +input('search'); + // 获取列表信息 + $result = MessageCenterRead::getList($search); + $data = [ + 'list' => $result['data'], + 'pager' => PaginationHelper::show($result['total'],$result['current_page'],$result['per_page']), + 'search' => $search + ]; + + return view('Yunshop\MessageCenter::read_record.index',$data)->render(); + } + + +} diff --git a/plugins/message_center/src/models/MessageCenter.php b/plugins/message_center/src/models/MessageCenter.php new file mode 100644 index 00000000..78f4ddaf --- /dev/null +++ b/plugins/message_center/src/models/MessageCenter.php @@ -0,0 +1,69 @@ + 'datetime:Y-m-d H:i:s' + ]; + protected $fillable = [ + 'uniacid', + 'type', + 'message_title', + 'message_content', + 'created_at', + 'updated_at', + 'deleted_at', + ]; + + + /** + * Common: 列表信息获取 + * Author: wu-hui + * Time: 2023/10/27 16:42 + * @param $search + * @return mixed + */ + public function getList($search){ + // 条件生成 + $where = []; + if($search['message_title'] > 0) $where[] = ['message_title','like',"%{$search['member_id']}%"]; + // 列表获取 + return self::uniacid() + ->select(['id','message_title','notice_type','created_at']) + ->where($where) + ->withCount(['read as total_user', + 'read as total_unread' => function($query){ + $query->where('is_see',0); + }, + 'read as total_read' => function($query){ + $query->where('is_see',1); + } + ]) + ->orderBy('created_at','DESC') + ->orderBy('id','DESC') + ->paginate(10) + ->toArray(); + } + /** + * Common: 关联阅读信息表(一对多) + * Author: wu-hui + * Time: 2023/10/27 13:47 + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function read(){ + return $this->hasMany(MessageCenterRead::class,'message_center_id','id'); + } + + +} \ No newline at end of file diff --git a/plugins/message_center/src/models/MessageCenterRead.php b/plugins/message_center/src/models/MessageCenterRead.php new file mode 100644 index 00000000..1fa89012 --- /dev/null +++ b/plugins/message_center/src/models/MessageCenterRead.php @@ -0,0 +1,117 @@ + 'datetime:Y-m-d H:i:s', + 'updated_at' => 'datetime:Y-m-d H:i:s', + 'read_time' => 'datetime:Y-m-d H:i:s' + ]; + protected $fillable = [ + 'uniacid', + 'member_id', + 'is_see', + 'message_center_id', + 'created_at', + 'updated_at', + 'deleted_at', + ]; + + + /** + * Common: 阅读记录 + * Author: wu-hui + * Time: 2023/10/27 17:12 + * @param $search + * @return mixed + */ + public function getList($search){ + // 条件生成 + $where = [ + ['yz_message_center_read.is_see','=',1] + ]; + if($search['message_title'] > 0) $where[] = ['yz_message_center.message_title','like',"%{$search['member_id']}%"]; + // 列表获取 + return self::uniacid() + ->leftjoin('yz_message_center','yz_message_center.id','yz_message_center_read.message_center_id') + ->select([ + 'yz_message_center_read.id', + 'yz_message_center.message_title', + 'yz_message_center_read.member_id', + 'yz_message_center_read.read_time' + ]) + ->with(['member'=>function($query){ + $query->select('uid', 'nickname', 'realname', 'avatar'); + }]) + ->where($where) + ->orderBy('yz_message_center_read.updated_at','DESC') + ->orderBy('yz_message_center_read.id','DESC') + ->paginate(10) + ->toArray(); + } + /** + * Common: 发布消息 + * Author: wu-hui + * Time: 2023/10/27 16:35 + * @param $info + * @param $messageCenterId + * @return BaseModel + */ + public static function sendMessage($info,$messageCenterId){ + // 用户信息获取 + $userIds = self::getNoticeUserList($info); + // 生成记录 达到发送消息的结果 + $uniacid = \YunShop::app()->uniacid; + $insertData = []; + foreach($userIds as $memberId){ + $insertData[] = [ + 'uniacid' => $uniacid, + 'member_id' => $memberId, + 'message_center_id' => $messageCenterId, + 'created_at' => time(), + 'updated_at' => time(), + ]; + } + + return self::insert($insertData); + } + /** + * Common: 获取通知用户列表 + * Author: wu-hui + * Time: 2023/10/27 16:26 + * @param $info + * @return \app\framework\Database\Eloquent\Collection|string[] + */ + private static function getNoticeUserList($info){ + $ids = explode(',',$info['user_ids']);// 指定用户 + if((int)$info['notice_type'] == 0) $ids = Member::uniacid()->pluck('uid')->toArray();// 全部用户 + return $ids; + } + + + /** + * Common: 关联用户表 一对一 + * Author: wu-hui + * Time: 2023/10/27 17:10 + * @return \Illuminate\Database\Eloquent\Relations\HasOne + */ + public function member(){ + return $this->hasOne(Member::class,'uid','member_id'); + } + + + + +} \ No newline at end of file diff --git a/plugins/message_center/views/config.tpl b/plugins/message_center/views/config.tpl new file mode 100644 index 00000000..e69de29b diff --git a/plugins/message_center/views/index/edit.blade.php b/plugins/message_center/views/index/edit.blade.php new file mode 100644 index 00000000..7db3ba5f --- /dev/null +++ b/plugins/message_center/views/index/edit.blade.php @@ -0,0 +1,218 @@ +@extends('layouts.base') +@section('title', '编辑文章') +@section('content') + +
| ID | +标题 | +通知类型 | ++ 发送人数(总) + 未读人数 + 已读人数 + | +发布时间 | +
|---|---|---|---|---|
| {{ $item['id'] }} | +{{ $item['message_title'] }} | ++ @if((int)$item['notice_type'] == 1 ) + 指定用户 + @else + 全部 + @endif + | ++ {{ $item['total_user'] }} + {{ $item['total_unread'] }} + {{ $item['total_read'] }} + | +{{ $item['created_at'] }} | +
| ID | +用户信息 | +标题 | +查看时间 | +
|---|---|---|---|
| {{ $item['id'] }} | +
+
+
+
+
+
+ |
+ {{ $item['message_title'] }} | +{{ $item['read_time'] }} | +