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
}