From 543bc5244f79d832031c851a115ee590165b3e9b Mon Sep 17 00:00:00 2001 From: kuaifan Date: Tue, 13 Jul 2021 16:00:12 +0800 Subject: [PATCH] no message --- app/Http/Controllers/Api/FileController.php | 32 +++++++++-- app/Models/File.php | 57 +++++++++++++------ .../pages/manage/components/FileContent.vue | 35 +++++++----- resources/assets/js/store/actions.js | 18 ++++++ 4 files changed, 105 insertions(+), 37 deletions(-) diff --git a/app/Http/Controllers/Api/FileController.php b/app/Http/Controllers/Api/FileController.php index 5fada39c..a8342a09 100755 --- a/app/Http/Controllers/Api/FileController.php +++ b/app/Http/Controllers/Api/FileController.php @@ -8,6 +8,7 @@ use App\Models\File; use App\Models\FileContent; use App\Models\FileUser; use App\Models\User; +use App\Models\WebSocket; use App\Module\Base; use App\Module\Ihttp; use Arr; @@ -123,6 +124,7 @@ class FileController extends AbstractController // $file->name = $name; $file->save(); + $file->pushMsg('update', $file); return Base::retSuccess('修改成功', $file); } else { // 添加 @@ -162,6 +164,7 @@ class FileController extends AbstractController $file->save(); // $data = File::find($file->id); + $data->pushMsg('add', $data); return Base::retSuccess('添加成功', $data); } } @@ -201,6 +204,7 @@ class FileController extends AbstractController $file->save(); // $data = File::find($file->id); + $data->pushMsg('add', $data); return Base::retSuccess('复制成功', $data); } @@ -242,6 +246,7 @@ class FileController extends AbstractController // $file->pid = $pid; $file->save(); + $file->pushMsg('update', $file); return Base::retSuccess('操作成功', $file); } @@ -322,7 +327,7 @@ class FileController extends AbstractController // $file->size = $content->size; $file->save(); - $file->pushContentChange(); + $file->pushMsg('content'); // return Base::retSuccess('保存成功', $content); } @@ -365,6 +370,7 @@ class FileController extends AbstractController // $file->size = $content->size; $file->save(); + $file->pushMsg('update', $file); } } return ['error' => 0]; @@ -448,6 +454,7 @@ class FileController extends AbstractController $file->save(); // $data = File::find($file->id); + $data->pushMsg('add', $data); return Base::retSuccess($data['name'] . ' 上传成功', $data); }); } @@ -514,8 +521,15 @@ class FileController extends AbstractController // if ($action == 'unshare') { // 取消共享 + if ($file->share == 1) { + $uids = WebSocket::select(['userid'])->pluck('userid')->toArray(); + } else { + $uids = FileUser::whereFileId($file->id)->pluck('userid')->toArray(); + } + $uids = array_values(array_diff($uids, [$user->userid])); + // $file->setShare(0); - return Base::retSuccess('取消成功', $file); + $message = '取消成功'; } else { // 设置共享 if (!in_array($share, [1, 2])) { @@ -539,12 +553,20 @@ class FileController extends AbstractController } } if (empty($array)) { - FileUser::whereFileId($file->id)->delete(); + $builder = FileUser::whereFileId($file->id); } else { - FileUser::whereFileId($file->id)->whereNotIn('userid', $array)->delete(); + $builder = FileUser::whereFileId($file->id)->whereNotIn('userid', $array); } + $uids = (clone $builder)->pluck('userid')->toArray(); + $builder->delete(); } - return Base::retSuccess('设置成功', $file); + $message = '设置成功'; } + // + $file->pushMsg('update', $file); + if (isset($uids)) { + $file->pushMsg('delete', null, $uids); + } + return Base::retSuccess($message, $file); } } diff --git a/app/Models/File.php b/app/Models/File.php index 7f852bdb..b73c7315 100644 --- a/app/Models/File.php +++ b/app/Models/File.php @@ -148,11 +148,12 @@ class File extends AbstractModel { AbstractModel::transaction(function () { $this->delete(); + $this->pushMsg('delete'); FileContent::whereFid($this->id)->delete(); $list = self::wherePid($this->id)->get(); if ($list->isNotEmpty()) { - foreach ($list as $item) { - $item->deleteFile(); + foreach ($list as $file) { + $file->deleteFile(); } } }); @@ -160,29 +161,49 @@ class File extends AbstractModel } /** - * 推送内容发生变化消息 + * 推送消息 + * @param $action + * @param File|null $data 发送内容,默认为[id] + * @param array $userid 指定会员,默认为可查看文件的人 */ - public function pushContentChange() + public function pushMsg($action, $data = null, $userid = null) { - $userid = [$this->userid]; - if ($this->share == 1) { - $userid = array_merge($userid, WebSocket::wherePath('file/content/' . $this->id)->pluck('userid')->toArray()); - } elseif ($this->share == 2) { - $userid = array_merge($userid, FileUser::whereFileId($this->id)->pluck('userid')->toArray()); + if ($data === null) { + $data = [ + 'id' => $this->id + ]; } // - $userid = array_values(array_filter(array_unique($userid))); + if ($userid === null) { + $userid = [$this->userid]; + if ($this->share == 1) { + $builder = WebSocket::select(['userid']); + if ($action == 'content') { + $builder->wherePath('file/content/' . $this->id); + } + $userid = array_merge($userid, $builder->pluck('userid')->toArray()); + } elseif ($this->share == 2) { + $userid = array_merge($userid, FileUser::whereFileId($this->id)->pluck('userid')->toArray()); + } + $userid = array_values(array_filter(array_unique($userid))); + } + if (empty($userid)) { + return; + } + // + $msg = [ + 'type' => 'file', + 'action' => $action, + 'data' => $data, + ]; + if ($action == 'content') { + $msg['nickname'] = User::nickname(); + $msg['time'] = time(); + } $params = [ 'ignoreFd' => Request::header('fd'), 'userid' => $userid, - 'msg' => [ - 'type' => 'fileContentChange', - 'data' => [ - 'id' => $this->id, - 'nickname' => User::nickname(), - 'time' => Base::time() - ], - ] + 'msg' => $msg ]; $task = new PushTask($params, false); Task::deliver($task); diff --git a/resources/assets/js/pages/manage/components/FileContent.vue b/resources/assets/js/pages/manage/components/FileContent.vue index 94ea7261..f0c75eb9 100644 --- a/resources/assets/js/pages/manage/components/FileContent.vue +++ b/resources/assets/js/pages/manage/components/FileContent.vue @@ -121,21 +121,28 @@ export default { }, wsMsg: { - handler({type, data}) { - if (type == 'path') { - if (data.path == 'file/content/' + this.fileId) { - this.editUser = data.userids; - } - } else if (type == 'fileContentChange') { - if (this.parentShow && data.id == this.fileId) { - $A.modalConfirm({ - title: "更新提示", - content: '团队成员(' + data.nickname + ')更新了内容,
更新时间:' + $A.formatDate("Y-m-d H:i:s", data.time) + '。

点击【确定】加载最新内容。', - onOk: () => { - this.getContent(); + handler(info) { + const {type, data} = info; + switch (type) { + case 'path': + if (data.path == 'file/content/' + this.fileId) { + this.editUser = data.userids; + } + break; + + case 'file': + if (data.action == 'content') { + if (this.parentShow && data.id == this.fileId) { + $A.modalConfirm({ + title: "更新提示", + content: '团队成员(' + info.nickname + ')更新了内容,
更新时间:' + $A.formatDate("Y-m-d H:i:s", info.time) + '。

点击【确定】加载最新内容。', + onOk: () => { + this.getContent(); + } + }); } - }); - } + } + break; } }, deep: true, diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index a768a55c..5fc6f004 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -1587,6 +1587,24 @@ export default { } })(msgDetail); break; + + /** + * 文件消息 + */ + case "file": + (function (msg) { + const {action, data} = msg; + switch (action) { + case 'add': + case 'update': + dispatch("saveFile", data); + break; + case 'delete': + dispatch("forgetFile", data.id); + break; + } + })(msgDetail); + break; } break }