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 @@
+
+
+