归档项目
This commit is contained in:
parent
f9031aec57
commit
f2b32c2161
@ -60,6 +60,10 @@ class ProjectController extends AbstractController
|
|||||||
/**
|
/**
|
||||||
* 获取项目列表
|
* 获取项目列表
|
||||||
*
|
*
|
||||||
|
* @apiParam {String} [archived] 归档状态
|
||||||
|
* - no:未归档(默认)
|
||||||
|
* - yes:已归档
|
||||||
|
*
|
||||||
* @apiParam {Number} [page] 当前页,默认:1
|
* @apiParam {Number} [page] 当前页,默认:1
|
||||||
* @apiParam {Number} [pagesize] 每页显示数量,默认:100,最大:200
|
* @apiParam {Number} [pagesize] 每页显示数量,默认:100,最大:200
|
||||||
*/
|
*/
|
||||||
@ -67,10 +71,15 @@ class ProjectController extends AbstractController
|
|||||||
{
|
{
|
||||||
User::auth();
|
User::auth();
|
||||||
//
|
//
|
||||||
$list = Project::select(Project::projectSelect)
|
$archived = Request::input('archived', 'no');
|
||||||
->authData()
|
//
|
||||||
->orderByDesc('projects.id')
|
$builder = Project::select(Project::projectSelect)->authData();
|
||||||
->paginate(Base::getPaginate(200, 100));
|
if ($archived == 'yes') {
|
||||||
|
$builder->whereNotNull('archived_at');
|
||||||
|
} elseif ($archived == 'no') {
|
||||||
|
$builder->whereNull('archived_at');
|
||||||
|
}
|
||||||
|
$list = $builder->orderByDesc('projects.id')->paginate(Base::getPaginate(200, 100));
|
||||||
//
|
//
|
||||||
return Base::retSuccess('success', $list);
|
return Base::retSuccess('success', $list);
|
||||||
}
|
}
|
||||||
@ -357,6 +366,26 @@ class ProjectController extends AbstractController
|
|||||||
return Base::retSuccess('退出成功', ['id' => $project->id]);
|
return Base::retSuccess('退出成功', ['id' => $project->id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 归档项目
|
||||||
|
*
|
||||||
|
* @apiParam {Number} project_id 项目ID
|
||||||
|
*/
|
||||||
|
public function archived()
|
||||||
|
{
|
||||||
|
User::auth();
|
||||||
|
//
|
||||||
|
$project_id = intval(Request::input('project_id'));
|
||||||
|
//
|
||||||
|
$project = Project::userProject($project_id);
|
||||||
|
if (!$project->owner) {
|
||||||
|
return Base::retError('你不是项目负责人');
|
||||||
|
}
|
||||||
|
//
|
||||||
|
$project->archivedProject(Carbon::now());
|
||||||
|
return Base::retSuccess('设置成功', ['id' => $project->id]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除项目
|
* 删除项目
|
||||||
*
|
*
|
||||||
@ -513,6 +542,9 @@ class ProjectController extends AbstractController
|
|||||||
* - all:所有(默认)
|
* - all:所有(默认)
|
||||||
* - yes:已完成
|
* - yes:已完成
|
||||||
* - no:未完成
|
* - no:未完成
|
||||||
|
* @apiParam {String} [archived] 归档状态
|
||||||
|
* - yes:已归档
|
||||||
|
* - no:未归档(默认)
|
||||||
*/
|
*/
|
||||||
public function task__lists()
|
public function task__lists()
|
||||||
{
|
{
|
||||||
@ -525,7 +557,8 @@ class ProjectController extends AbstractController
|
|||||||
$name = Request::input('name');
|
$name = Request::input('name');
|
||||||
$time = Request::input('time');
|
$time = Request::input('time');
|
||||||
$time_before = Request::input('time_before');
|
$time_before = Request::input('time_before');
|
||||||
$complete = Request::input('complete');
|
$complete = Request::input('complete', 'all');
|
||||||
|
$archived = Request::input('archived', 'no');
|
||||||
//
|
//
|
||||||
if ($parent_id > 0) {
|
if ($parent_id > 0) {
|
||||||
ProjectTask::userTask($parent_id);
|
ProjectTask::userTask($parent_id);
|
||||||
@ -563,6 +596,12 @@ class ProjectController extends AbstractController
|
|||||||
$builder->whereNull('complete_at');
|
$builder->whereNull('complete_at');
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
if ($archived == 'yes') {
|
||||||
|
$builder->whereNotNull('archived_at');
|
||||||
|
} elseif ($archived == 'no') {
|
||||||
|
$builder->whereNull('archived_at');
|
||||||
|
}
|
||||||
|
//
|
||||||
$list = $builder->orderByDesc('id')->paginate(Base::getPaginate(200, 100));
|
$list = $builder->orderByDesc('id')->paginate(Base::getPaginate(200, 100));
|
||||||
//
|
//
|
||||||
return Base::retSuccess('success', $list);
|
return Base::retSuccess('success', $list);
|
||||||
|
@ -4,6 +4,7 @@ namespace App\Models;
|
|||||||
|
|
||||||
use App\Exceptions\ApiException;
|
use App\Exceptions\ApiException;
|
||||||
use App\Tasks\PushTask;
|
use App\Tasks\PushTask;
|
||||||
|
use Carbon\Carbon;
|
||||||
use Hhxsv5\LaravelS\Swoole\Task\Task;
|
use Hhxsv5\LaravelS\Swoole\Task\Task;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
use Request;
|
use Request;
|
||||||
@ -17,6 +18,7 @@ use Request;
|
|||||||
* @property string|null $desc 描述、备注
|
* @property string|null $desc 描述、备注
|
||||||
* @property int|null $userid 创建人
|
* @property int|null $userid 创建人
|
||||||
* @property int|mixed $dialog_id 聊天会话ID
|
* @property int|mixed $dialog_id 聊天会话ID
|
||||||
|
* @property string|null $archived_at 归档时间
|
||||||
* @property \Illuminate\Support\Carbon|null $created_at
|
* @property \Illuminate\Support\Carbon|null $created_at
|
||||||
* @property \Illuminate\Support\Carbon|null $updated_at
|
* @property \Illuminate\Support\Carbon|null $updated_at
|
||||||
* @property \Illuminate\Support\Carbon|null $deleted_at
|
* @property \Illuminate\Support\Carbon|null $deleted_at
|
||||||
@ -38,6 +40,7 @@ use Request;
|
|||||||
* @method static \Illuminate\Database\Eloquent\Builder|Project newQuery()
|
* @method static \Illuminate\Database\Eloquent\Builder|Project newQuery()
|
||||||
* @method static \Illuminate\Database\Query\Builder|Project onlyTrashed()
|
* @method static \Illuminate\Database\Query\Builder|Project onlyTrashed()
|
||||||
* @method static \Illuminate\Database\Eloquent\Builder|Project query()
|
* @method static \Illuminate\Database\Eloquent\Builder|Project query()
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|Project whereArchivedAt($value)
|
||||||
* @method static \Illuminate\Database\Eloquent\Builder|Project whereCreatedAt($value)
|
* @method static \Illuminate\Database\Eloquent\Builder|Project whereCreatedAt($value)
|
||||||
* @method static \Illuminate\Database\Eloquent\Builder|Project whereDeletedAt($value)
|
* @method static \Illuminate\Database\Eloquent\Builder|Project whereDeletedAt($value)
|
||||||
* @method static \Illuminate\Database\Eloquent\Builder|Project whereDesc($value)
|
* @method static \Illuminate\Database\Eloquent\Builder|Project whereDesc($value)
|
||||||
@ -70,7 +73,7 @@ class Project extends AbstractModel
|
|||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成子任务数据
|
* 生成任务数据
|
||||||
*/
|
*/
|
||||||
private function generateTaskData()
|
private function generateTaskData()
|
||||||
{
|
{
|
||||||
@ -281,6 +284,29 @@ class Project extends AbstractModel
|
|||||||
return $user->owner ? 2 : 1;
|
return $user->owner ? 2 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 归档任务、取消归档
|
||||||
|
* @param Carbon|null $archived_at 归档时间
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function archivedProject($archived_at)
|
||||||
|
{
|
||||||
|
AbstractModel::transaction(function () use ($archived_at) {
|
||||||
|
if ($archived_at === null) {
|
||||||
|
// 取消归档
|
||||||
|
$this->archived_at = null;
|
||||||
|
$this->addLog("项目取消归档");
|
||||||
|
} else {
|
||||||
|
// 归档任务
|
||||||
|
$this->archived_at = $archived_at;
|
||||||
|
$this->addLog("项目归档");
|
||||||
|
$this->pushMsg('archived');
|
||||||
|
}
|
||||||
|
$this->save();
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除项目
|
* 删除项目
|
||||||
* @return bool
|
* @return bool
|
||||||
@ -354,6 +380,7 @@ class Project extends AbstractModel
|
|||||||
{
|
{
|
||||||
$project = self::select(self::projectSelect)
|
$project = self::select(self::projectSelect)
|
||||||
->authData()
|
->authData()
|
||||||
|
->whereNull('archived_at')
|
||||||
->where('projects.id', intval($project_id))
|
->where('projects.id', intval($project_id))
|
||||||
->first();
|
->first();
|
||||||
if (empty($project)) {
|
if (empty($project)) {
|
||||||
|
@ -33,7 +33,8 @@
|
|||||||
<EDropdownMenu v-if="projectData.owner_userid === userId" slot="dropdown">
|
<EDropdownMenu v-if="projectData.owner_userid === userId" slot="dropdown">
|
||||||
<EDropdownItem command="setting">{{$L('项目设置')}}</EDropdownItem>
|
<EDropdownItem command="setting">{{$L('项目设置')}}</EDropdownItem>
|
||||||
<EDropdownItem command="user">{{$L('成员管理')}}</EDropdownItem>
|
<EDropdownItem command="user">{{$L('成员管理')}}</EDropdownItem>
|
||||||
<EDropdownItem command="transfer" divided>{{$L('移交项目')}}</EDropdownItem>
|
<EDropdownItem command="archived" divided>{{$L('归档项目')}}</EDropdownItem>
|
||||||
|
<EDropdownItem command="transfer">{{$L('移交项目')}}</EDropdownItem>
|
||||||
<EDropdownItem command="delete" style="color:#f40">{{$L('删除项目')}}</EDropdownItem>
|
<EDropdownItem command="delete" style="color:#f40">{{$L('删除项目')}}</EDropdownItem>
|
||||||
</EDropdownMenu>
|
</EDropdownMenu>
|
||||||
<EDropdownMenu v-else slot="dropdown">
|
<EDropdownMenu v-else slot="dropdown">
|
||||||
@ -857,6 +858,23 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
onArchived() {
|
||||||
|
$A.modalConfirm({
|
||||||
|
title: '归档项目',
|
||||||
|
content: '你确定要归档项目【' + this.projectData.name + '】吗?',
|
||||||
|
loading: true,
|
||||||
|
onOk: () => {
|
||||||
|
this.$store.dispatch("archivedProject", this.projectId).then(({msg}) => {
|
||||||
|
$A.messageSuccess(msg);
|
||||||
|
this.$Modal.remove();
|
||||||
|
}).catch(({msg}) => {
|
||||||
|
$A.modalError(msg, 301);
|
||||||
|
this.$Modal.remove();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
onDelete() {
|
onDelete() {
|
||||||
$A.modalConfirm({
|
$A.modalConfirm({
|
||||||
title: '删除项目',
|
title: '删除项目',
|
||||||
@ -913,6 +931,10 @@ export default {
|
|||||||
this.transferShow = true;
|
this.transferShow = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "archived":
|
||||||
|
this.onArchived();
|
||||||
|
break;
|
||||||
|
|
||||||
case "delete":
|
case "delete":
|
||||||
this.onDelete();
|
this.onDelete();
|
||||||
break;
|
break;
|
||||||
|
24
resources/assets/js/store/actions.js
vendored
24
resources/assets/js/store/actions.js
vendored
@ -373,6 +373,29 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 归档项目
|
||||||
|
* @param dispatch
|
||||||
|
* @param project_id
|
||||||
|
*/
|
||||||
|
archivedProject({dispatch}, project_id) {
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
dispatch("call", {
|
||||||
|
url: 'project/archived',
|
||||||
|
data: {
|
||||||
|
project_id,
|
||||||
|
},
|
||||||
|
}).then(result => {
|
||||||
|
dispatch("forgetProject", project_id)
|
||||||
|
resolve(result)
|
||||||
|
}).catch(e => {
|
||||||
|
console.error(e);
|
||||||
|
dispatch("getProjectOne", project_id);
|
||||||
|
reject(e)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除项目
|
* 删除项目
|
||||||
* @param dispatch
|
* @param dispatch
|
||||||
@ -1323,6 +1346,7 @@ export default {
|
|||||||
case 'detail':
|
case 'detail':
|
||||||
dispatch("getProjectOne", data);
|
dispatch("getProjectOne", data);
|
||||||
break;
|
break;
|
||||||
|
case 'archived':
|
||||||
case 'delete':
|
case 'delete':
|
||||||
dispatch("forgetProject", data.id);
|
dispatch("forgetProject", data.id);
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user