diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 4c17846da..245d38821 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -32,6 +32,7 @@ use App\Models\ProjectTaskUser; use App\Models\WebSocketDialog; use App\Exceptions\ApiException; use App\Models\ProjectPermission; +use App\Models\ProjectTaskContent; use App\Models\WebSocketDialogMsg; use App\Module\BillMultipleExport; use Illuminate\Support\Facades\DB; @@ -1576,7 +1577,8 @@ class ProjectController extends AbstractController * @apiGroup project * @apiName task__content * - * @apiParam {Number} task_id 任务ID + * @apiParam {Number} task_id 任务ID + * @apiParam {Number} [history_id] 历史ID(获取历史版本) * * @apiSuccess {Number} ret 返回状态码(1正确、0错误) * @apiSuccess {String} msg 返回信息(错误描述) @@ -1587,15 +1589,57 @@ class ProjectController extends AbstractController User::auth(); // $task_id = intval(Request::input('task_id')); + $history_id = intval(Request::input('history_id')); // $task = ProjectTask::userTask($task_id, null); // + if ($history_id > 0) { + $taskContent = ProjectTaskContent::whereTaskId($task->id)->whereId($history_id)->first(); + if (empty($taskContent)) { + return Base::retError('历史版本不存在'); + } + return Base::retSuccess('success', array_merge($taskContent->getContentInfo(), [ + 'name' => $task->name, + ])); + } if (empty($task->content)) { return Base::retSuccess('success', json_decode('{}')); } return Base::retSuccess('success', $task->content->getContentInfo()); } + /** + * @api {get} api/project/task/content_history 25. 获取任务详细历史描述 + * + * @apiDescription 需要token身份 + * @apiVersion 1.0.0 + * @apiGroup project + * @apiName task__content_history + * + * @apiParam {Number} task_id 任务ID + * + * @apiParam {Number} [page] 当前页,默认:1 + * @apiParam {Number} [pagesize] 每页显示数量,默认:20,最大:100 + * + * @apiSuccess {Number} ret 返回状态码(1正确、0错误) + * @apiSuccess {String} msg 返回信息(错误描述) + * @apiSuccess {Object} data 返回数据 + */ + public function task__content_history() + { + User::auth(); + // + $task_id = intval(Request::input('task_id')); + // + $task = ProjectTask::userTask($task_id, null); + // + $data = ProjectTaskContent::select(['id', 'task_id', 'desc', 'userid', 'created_at']) + ->whereTaskId($task->id) + ->orderByDesc('id') + ->paginate(Base::getPaginate(100, 20)); + return Base::retSuccess('success', $data); + } + /** * @api {get} api/project/task/files 26. 获取任务文件列表 * diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index 4c0c29306..1f9aeba25 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -393,7 +393,7 @@ class ProjectTask extends AbstractModel $p_color = $data['p_color']; $top = intval($data['top']); $userid = User::userid(); - $visibility = isset($data['visibility_appoint']) ? $data['visibility_appoint'] : $data['visibility']; + $visibility = $data['visibility_appoint'] ?? $data['visibility']; $visibility_userids = $data['visibility_appointor'] ?: []; // if (ProjectTask::whereProjectId($project_id) @@ -527,6 +527,8 @@ class ProjectTask extends AbstractModel ProjectTaskContent::createInstance([ 'project_id' => $task->project_id, 'task_id' => $task->id, + 'userid' => $task->userid, + 'desc' => $task->desc, 'content' => [ 'url' => ProjectTaskContent::saveContent($task->id, $content) ], @@ -913,15 +915,25 @@ class ProjectTask extends AbstractModel } // 内容 if (Arr::exists($data, 'content')) { + $logRecord = []; + $logContent = ProjectTaskContent::whereTaskId($this->id)->orderByDesc('id')->first(); + if ($logContent) { + $logRecord['link'] = [ + 'title' => '查看历史', + 'url' => 'single/task/content/' . $this->id . '?history_id=' . $logContent->id, + ]; + } + $this->desc = self::generateDesc($data['content']); ProjectTaskContent::createInstance([ 'project_id' => $this->project_id, 'task_id' => $this->id, + 'userid' => User::userid(), + 'desc' => $this->desc, 'content' => [ 'url' => ProjectTaskContent::saveContent($this->id, $data['content']) ], ])->save(); - $this->desc = self::generateDesc($data['content']); - $this->addLog("修改{任务}详细描述"); + $this->addLog("修改{任务}详细描述", $logRecord); $updateMarking['is_update_content'] = true; } // 优先级 diff --git a/app/Models/ProjectTaskContent.php b/app/Models/ProjectTaskContent.php index 63c34e17d..977d73835 100644 --- a/app/Models/ProjectTaskContent.php +++ b/app/Models/ProjectTaskContent.php @@ -34,7 +34,6 @@ use App\Exceptions\ApiException; class ProjectTaskContent extends AbstractModel { protected $hidden = [ - 'created_at', 'updated_at', ]; diff --git a/database/migrations/2024_04_22_064219_add_project_task_contents_userid.php b/database/migrations/2024_04_22_064219_add_project_task_contents_userid.php new file mode 100644 index 000000000..a7489d951 --- /dev/null +++ b/database/migrations/2024_04_22_064219_add_project_task_contents_userid.php @@ -0,0 +1,38 @@ +string('desc', 500)->nullable()->default('')->after('task_id')->comment('内容描述'); + $table->bigInteger('userid')->nullable()->default(0)->after('task_id')->comment('用户ID'); + } + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + Schema::table('project_task_contents', function (Blueprint $table) { + $table->dropColumn("desc"); + $table->dropColumn("userid"); + }); + } +} diff --git a/resources/assets/js/components/TEditor.vue b/resources/assets/js/components/TEditor.vue index 5debbd32c..7ac5d6f63 100755 --- a/resources/assets/js/components/TEditor.vue +++ b/resources/assets/js/components/TEditor.vue @@ -354,6 +354,7 @@ export default { } }); editor.ui.registry.addMenuItem('imagePreview', { + icon: 'preview', text: this.$L('预览图片'), onAction: () => { this.operateImg = null @@ -394,6 +395,7 @@ export default { } }); editor.ui.registry.addMenuItem('screenload', { + icon: 'fullscreen', text: this.$L('退出全屏'), onAction: () => { this.closeFull(); @@ -418,6 +420,7 @@ export default { } }); editor.ui.registry.addMenuItem('screenload', { + icon: 'fullscreen', text: this.$L('全屏'), onAction: () => { this.onFull(); diff --git a/resources/assets/js/components/TEditorTask.vue b/resources/assets/js/components/TEditorTask.vue index aef094fac..04e9fdfa3 100755 --- a/resources/assets/js/components/TEditorTask.vue +++ b/resources/assets/js/components/TEditorTask.vue @@ -23,6 +23,7 @@