diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php
index d421363c..3af663c2 100755
--- a/app/Http/Controllers/Api/ProjectController.php
+++ b/app/Http/Controllers/Api/ProjectController.php
@@ -369,20 +369,28 @@ class ProjectController extends AbstractController
/**
* 归档项目
*
- * @apiParam {Number} project_id 项目ID
+ * @apiParam {Number} project_id 项目ID
+ * @apiParam {String} [type] 类型
+ * - add:归档(默认)
+ * - recovery:还原归档
*/
public function archived()
{
User::auth();
//
$project_id = intval(Request::input('project_id'));
+ $type = Request::input('type', 'add');
//
- $project = Project::userProject($project_id);
+ $project = Project::userProject($project_id, false);
if (!$project->owner) {
return Base::retError('你不是项目负责人');
}
//
- $project->archivedProject(Carbon::now());
+ if ($type == 'recovery') {
+ $project->archivedProject(null);
+ } elseif ($type == 'add') {
+ $project->archivedProject(Carbon::now());
+ }
return Base::retSuccess('设置成功', ['id' => $project->id]);
}
@@ -550,7 +558,7 @@ class ProjectController extends AbstractController
{
User::auth();
//
- $builder = ProjectTask::with(['taskUser', 'taskTag'])->whereNull('archived_at');
+ $builder = ProjectTask::with(['taskUser', 'taskTag']);
//
$parent_id = intval(Request::input('parent_id'));
$project_id = intval(Request::input('project_id'));
@@ -903,20 +911,28 @@ class ProjectController extends AbstractController
* 归档任务
*
* @apiParam {Number} task_id 任务ID
+ * @apiParam {String} [type] 类型
+ * - add:归档(默认)
+ * - recovery:还原归档
*/
public function task__archived()
{
User::auth();
//
$task_id = intval(Request::input('task_id'));
+ $type = Request::input('type', 'add');
//
- $task = ProjectTask::userTask($task_id);
+ $task = ProjectTask::userTask($task_id, [], false);
//
if ($task->parent_id > 0) {
return Base::retError('子任务不支持此功能');
}
//
- $task->archivedTask(Carbon::now());
+ if ($type == 'recovery') {
+ $task->archivedTask(null);
+ } elseif ($type == 'add') {
+ $task->archivedTask(Carbon::now());
+ }
return Base::retSuccess('设置成功', ['id' => $task->id]);
}
diff --git a/app/Models/Project.php b/app/Models/Project.php
index 4c3fdcfe..876424e2 100644
--- a/app/Models/Project.php
+++ b/app/Models/Project.php
@@ -298,6 +298,7 @@ class Project extends AbstractModel
// 取消归档
$this->archived_at = null;
$this->addLog("项目取消归档");
+ $this->pushMsg('add', $this->toArray());
} else {
// 归档任务
$this->archived_at = $archived_at;
@@ -377,15 +378,16 @@ class Project extends AbstractModel
/**
* 根据用户获取项目信息(用于判断会员是否存在项目内)
* @param int $project_id
+ * @param bool $ignoreArchived 排除已归档
* @return self
*/
- public static function userProject($project_id)
+ public static function userProject($project_id, $ignoreArchived = true)
{
- $project = self::select(self::projectSelect)
- ->authData()
- ->whereNull('archived_at')
- ->where('projects.id', intval($project_id))
- ->first();
+ $builder = self::select(self::projectSelect)->authData()->where('projects.id', intval($project_id));
+ if ($ignoreArchived) {
+ $builder->whereNull('projects.archived_at');
+ }
+ $project = $builder->first();
if (empty($project)) {
throw new ApiException('项目不存在或不在成员列表内');
}
diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php
index d8aa9cd1..6f1f6fe1 100644
--- a/app/Models/ProjectTask.php
+++ b/app/Models/ProjectTask.php
@@ -602,6 +602,10 @@ class ProjectTask extends AbstractModel
// 取消归档
$this->archived_at = null;
$this->addLog("任务取消归档:" . $this->name);
+ $this->pushMsg('add', [
+ 'new_column' => null,
+ 'task' => ProjectTask::with(['taskUser', 'taskTag'])->find($this->id)->toArray(),
+ ]);
} else {
// 归档任务
$this->archived_at = $archived_at;
@@ -691,22 +695,22 @@ class ProjectTask extends AbstractModel
* 根据会员ID获取任务、项目信息(用于判断会员是否存在项目内)
* @param int $task_id
* @param array $with
+ * @param bool $ignoreArchived 排除已归档
* @return self
*/
- public static function userTask($task_id, $with = [])
+ public static function userTask($task_id, $with = [], $ignoreArchived = true)
{
- $task = self::with($with)->whereId(intval($task_id))->whereNull('archived_at')->first();
+ $builder = self::with($with)->whereId(intval($task_id));
+ if ($ignoreArchived) {
+ $builder->whereNull('archived_at');
+ }
+ $task = $builder->first();
if (empty($task)) {
throw new ApiException('任务不存在');
}
//
- $project = Project::select(Project::projectSelect)
- ->authData()
- ->where('projects.id', $task->project_id)
- ->first();
- if (empty($project)) {
- throw new ApiException('项目不存在或不在成员列表内');
- }
+ Project::userProject($task->project_id, $ignoreArchived);
+ //
return $task;
}
}
diff --git a/resources/assets/js/components/TableAction.vue b/resources/assets/js/components/TableAction.vue
index 8b61e31c..acd389b8 100644
--- a/resources/assets/js/components/TableAction.vue
+++ b/resources/assets/js/components/TableAction.vue
@@ -5,6 +5,10 @@
diff --git a/resources/assets/js/pages/manage/components/ProjectList.vue b/resources/assets/js/pages/manage/components/ProjectList.vue
index 34bf5e71..d761eaab 100644
--- a/resources/assets/js/pages/manage/components/ProjectList.vue
+++ b/resources/assets/js/pages/manage/components/ProjectList.vue
@@ -40,7 +40,7 @@
+