From 6b29b686c73cb3106a614fa1deeb2a2387d4a0b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A6=E8=8D=A3=E8=B6=85?= <302645122@qq.com> Date: Wed, 9 Mar 2022 18:02:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9C=A8=E9=A1=B9=E7=9B=AE=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E9=87=8C=E6=96=B0=E5=A2=9E=E4=B8=80=E4=B8=AA=E2=80=9C?= =?UTF-8?q?=E5=B7=B2=E5=88=A0=E9=99=A4=E4=BB=BB=E5=8A=A1=E2=80=9D=E8=8F=9C?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Api/ProjectController.php | 21 ++ app/Models/ProjectTask.php | 5 +- app/Models/ProjectTaskMailLog.php | 3 + ...43604_add_project_tasks_deleted_userid.php | 34 +++ resources/assets/js/pages/manage/calendar.vue | 2 +- .../pages/manage/components/ProjectList.vue | 18 +- .../pages/manage/components/TaskArchived.vue | 2 +- .../pages/manage/components/TaskDeleted.vue | 286 ++++++++++++++++++ .../js/pages/manage/components/TaskDetail.vue | 19 +- .../js/pages/manage/components/TaskMenu.vue | 2 +- resources/assets/js/store/actions.js | 20 +- 11 files changed, 388 insertions(+), 24 deletions(-) create mode 100644 database/migrations/2022_03_09_143604_add_project_tasks_deleted_userid.php create mode 100644 resources/assets/js/pages/manage/components/TaskDeleted.vue diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 417e289d2..0c2faddf7 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -916,6 +916,7 @@ class ProjectController extends AbstractController $time_before = Request::input('time_before'); $complete = Request::input('complete', 'all'); $archived = Request::input('archived', 'no'); + $deleted = Request::input('deleted'); $keys = Request::input('keys'); $sorts = Request::input('sorts'); $keys = is_array($keys) ? $keys : []; @@ -970,6 +971,10 @@ class ProjectController extends AbstractController $builder->whereNull('project_tasks.archived_at'); } // + if ($deleted == 'yes') { + $builder->onlyTrashed(); + } + // foreach ($sorts as $column => $direction) { if (!in_array($column, ['complete_at', 'archived_at', 'end_at'])) continue; if (!in_array($direction, ['asc', 'desc'])) continue; @@ -1524,6 +1529,9 @@ class ProjectController extends AbstractController $task_id = intval($data['task_id']); // $task = ProjectTask::userTask($task_id, true, 2); + if ($task->deleted_at) { + throw new ApiException('任务已删除'); + } // 更新任务 $updateMarking = []; $task->updateTask($data, $updateMarking); @@ -1643,8 +1651,21 @@ class ProjectController extends AbstractController User::auth(); // $task_id = intval(Request::input('task_id')); + $type = Request::input('type'); // $task = ProjectTask::userTask($task_id, null, true); + if($type == 'recovery'){ + $task->deleted_at = null; + $task->deleted_userid = 0; + $task->save(); + return Base::retSuccess('操作成功', ['id' => $task->id]); + } + if($type == 'completely_delete'){ + $task->forceDelete(); + return Base::retSuccess('彻底删除成功', ['id' => $task->id]); + } + $task->deleted_userid = User::userid(); + $task->save(); // $task->deleteTask(); return Base::retSuccess('删除成功', ['id' => $task->id]); diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index 3a4bea77f..97e23d7bd 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -42,6 +42,7 @@ use Request; * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property \Illuminate\Support\Carbon|null $deleted_at + * @property int|null $deleted_userid 删除会员 * @property-read \App\Models\ProjectTaskContent|null $content * @property-read int $file_num * @property-read int $msg_num @@ -60,7 +61,7 @@ use Request; * @property-read int|null $task_user_count * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask allData($userid = null) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask authData($userid = null, $owner = null) - * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask betweenTime($start, $end) + * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask betweenTime($start, $end, $type) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask newQuery() * @method static \Illuminate\Database\Query\Builder|ProjectTask onlyTrashed() @@ -73,6 +74,7 @@ use Request; * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereCompleteAt($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereDeletedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereDeletedUserid($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereDesc($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereDialogId($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereEndAt($value) @@ -1192,6 +1194,7 @@ class ProjectTask extends AbstractModel public static function userTask($task_id, $archived = true, $permission = 0, $with = []) { $task = self::with($with)->allData()->where("project_tasks.id", intval($task_id))->first(); + $task = $task ?: ProjectTask::where("project_tasks.id", intval($task_id))->onlyTrashed()->first(); // if (empty($task)) { throw new ApiException('任务不存在', [ 'task_id' => $task_id ], -4002); diff --git a/app/Models/ProjectTaskMailLog.php b/app/Models/ProjectTaskMailLog.php index 984be8c2d..3d852dcc2 100644 --- a/app/Models/ProjectTaskMailLog.php +++ b/app/Models/ProjectTaskMailLog.php @@ -21,6 +21,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @property \Illuminate\Support\Carbon|null $deleted_at * @method static \Illuminate\Database\Eloquent\Builder|ProjectTaskMailLog newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|ProjectTaskMailLog newQuery() + * @method static \Illuminate\Database\Query\Builder|ProjectTaskMailLog onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|ProjectTaskMailLog query() * @method static \Illuminate\Database\Eloquent\Builder|ProjectTaskMailLog whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTaskMailLog whereDeletedAt($value) @@ -31,6 +32,8 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @method static \Illuminate\Database\Eloquent\Builder|ProjectTaskMailLog whereType($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTaskMailLog whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTaskMailLog whereUserid($value) + * @method static \Illuminate\Database\Query\Builder|ProjectTaskMailLog withTrashed() + * @method static \Illuminate\Database\Query\Builder|ProjectTaskMailLog withoutTrashed() * @mixin \Eloquent */ class ProjectTaskMailLog extends AbstractModel diff --git a/database/migrations/2022_03_09_143604_add_project_tasks_deleted_userid.php b/database/migrations/2022_03_09_143604_add_project_tasks_deleted_userid.php new file mode 100644 index 000000000..7e4602ff0 --- /dev/null +++ b/database/migrations/2022_03_09_143604_add_project_tasks_deleted_userid.php @@ -0,0 +1,34 @@ +bigInteger('deleted_userid')->nullable()->default(0)->after('deleted_at')->comment('删除会员'); + } + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('project_tasks', function (Blueprint $table) { + $table->dropColumn("deleted_userid"); + }); + } +} diff --git a/resources/assets/js/pages/manage/calendar.vue b/resources/assets/js/pages/manage/calendar.vue index b9f07447b..1a0559a8e 100644 --- a/resources/assets/js/pages/manage/calendar.vue +++ b/resources/assets/js/pages/manage/calendar.vue @@ -359,7 +359,7 @@ export default { content: '你确定要删除任务【' + data.name + '】吗?', loading: true, onOk: () => { - this.$store.dispatch("removeTask", data.id).then(({msg}) => { + this.$store.dispatch("removeTask", {task_id: data.id}).then(({msg}) => { $A.messageSuccess(msg); this.$Modal.remove(); }).catch(({msg}) => { diff --git a/resources/assets/js/pages/manage/components/ProjectList.vue b/resources/assets/js/pages/manage/components/ProjectList.vue index 75d1b3273..092472d4a 100644 --- a/resources/assets/js/pages/manage/components/ProjectList.vue +++ b/resources/assets/js/pages/manage/components/ProjectList.vue @@ -57,6 +57,7 @@ {{$L('邀请链接')}} {{$L('项目动态')}} {{$L('已归档任务')}} + {{$L('已删除任务')}} {{$L('移交项目')}} {{$L('归档项目')}} {{$L('删除项目')}} @@ -64,6 +65,7 @@ {{$L('项目动态')}} {{$L('已归档任务')}} + {{$L('已删除任务')}} {{$L('退出项目')}} @@ -433,6 +435,14 @@ :size="900"> + + + + + @@ -454,6 +464,7 @@ import ProjectLog from "./ProjectLog"; import DrawerOverlay from "../../../components/DrawerOverlay"; import ProjectWorkflow from "./ProjectWorkflow"; import TaskMenu from "./TaskMenu"; +import TaskDeleted from "./TaskDeleted"; export default { name: "ProjectList", @@ -461,7 +472,7 @@ export default { TaskMenu, ProjectWorkflow, DrawerOverlay, - ProjectLog, TaskArchived, TaskRow, Draggable, TaskAddSimple, UserInput, TaskAdd, TaskPriority}, + ProjectLog, TaskArchived, TaskRow, Draggable, TaskAddSimple, UserInput, TaskAdd, TaskPriority, TaskDeleted }, data() { return { nowTime: $A.Time(), @@ -500,6 +511,7 @@ export default { workflowShow: false, logShow: false, archivedTaskShow: false, + deletedTaskShow: false, projectDialogSubscribe: null, @@ -1149,6 +1161,10 @@ export default { this.archivedTaskShow = true; break; + case "deleted_task": + this.deletedTaskShow = true; + break; + case "transfer": this.$set(this.transferData, 'owner_userid', [this.projectData.owner_userid]); this.transferShow = true; diff --git a/resources/assets/js/pages/manage/components/TaskArchived.vue b/resources/assets/js/pages/manage/components/TaskArchived.vue index 07716a1c6..635d86582 100644 --- a/resources/assets/js/pages/manage/components/TaskArchived.vue +++ b/resources/assets/js/pages/manage/components/TaskArchived.vue @@ -282,7 +282,7 @@ export default { delete(row) { this.list = this.list.filter(({id}) => id != row.id); this.loadIng++; - this.$store.dispatch("removeTask", row.id).then(({msg}) => { + this.$store.dispatch("removeTask", {task_id: row.id}).then(({msg}) => { $A.messageSuccess(msg); this.loadIng--; this.getLists(); diff --git a/resources/assets/js/pages/manage/components/TaskDeleted.vue b/resources/assets/js/pages/manage/components/TaskDeleted.vue new file mode 100644 index 000000000..3205e1735 --- /dev/null +++ b/resources/assets/js/pages/manage/components/TaskDeleted.vue @@ -0,0 +1,286 @@ + + + diff --git a/resources/assets/js/pages/manage/components/TaskDetail.vue b/resources/assets/js/pages/manage/components/TaskDetail.vue index 0c96c2499..485a9dd47 100644 --- a/resources/assets/js/pages/manage/components/TaskDetail.vue +++ b/resources/assets/js/pages/manage/components/TaskDetail.vue @@ -73,7 +73,7 @@
{{$L('已归档')}}
+
+ {{$L('已删除')}} +
- +