归档、删除 任务

This commit is contained in:
kuaifan 2021-06-09 11:15:58 +08:00
parent a6ab9a797d
commit e6794bce8c
5 changed files with 179 additions and 50 deletions

View File

@ -605,7 +605,6 @@ class ProjectController extends AbstractController
/**
* 删除任务列表
*
* @apiParam {Number} project_id 项目ID
* @apiParam {Number} column_id 列表ID留空为添加列表
*/
public function column__delete()
@ -617,22 +616,22 @@ class ProjectController extends AbstractController
$user = User::IDE($user['data']);
}
//
$project_id = intval(Request::input('project_id'));
$column_id = intval(Request::input('column_id'));
// 列表
$column = ProjectColumn::whereId($column_id)->first();
if (empty($column)) {
return Base::retError('列表不存在');
}
// 项目
$project = Project::select($this->projectSelect)
->join('project_users', 'projects.id', '=', 'project_users.project_id')
->where('projects.id', $project_id)
->where('projects.id', $column->project_id)
->where('project_users.userid', $user->userid)
->first();
if (empty($project)) {
return Base::retError('项目不存在或不在成员列表内');
}
//
$column = ProjectColumn::whereId($column_id)->whereProjectId($project_id)->first();
if (empty($column)) {
return Base::retError('列表不存在');
}
if ($column->deleteColumn()) {
return Base::retSuccess('删除成功');
}
@ -763,4 +762,70 @@ class ProjectController extends AbstractController
}
return $result;
}
/**
* 归档任务
*
* @apiParam {Number} task_id 任务ID
*/
public function task__archived()
{
$user = User::authE();
if (Base::isError($user)) {
return $user;
} else {
$user = User::IDE($user['data']);
}
//
$task_id = intval(Request::input('task_id'));
// 任务
$task = ProjectTask::whereId($task_id)->first();
if (empty($task)) {
return Base::retError('任务不存在');
}
// 项目
$project = Project::select($this->projectSelect)
->join('project_users', 'projects.id', '=', 'project_users.project_id')
->where('projects.id', $task->project_id)
->where('project_users.userid', $user->userid)
->first();
if (empty($project)) {
return Base::retError('项目不存在或不在成员列表内');
}
//
return $task->archivedTask(Carbon::now());
}
/**
* 删除任务
*
* @apiParam {Number} task_id 任务ID
*/
public function task__delete()
{
$user = User::authE();
if (Base::isError($user)) {
return $user;
} else {
$user = User::IDE($user['data']);
}
//
$task_id = intval(Request::input('task_id'));
// 任务
$task = ProjectTask::whereId($task_id)->first();
if (empty($task)) {
return Base::retError('任务不存在');
}
// 项目
$project = Project::select($this->projectSelect)
->join('project_users', 'projects.id', '=', 'project_users.project_id')
->where('projects.id', $task->project_id)
->where('project_users.userid', $user->userid)
->first();
if (empty($project)) {
return Base::retError('项目不存在或不在成员列表内');
}
//
return $task->deleteTask();
}
}

View File

@ -44,7 +44,7 @@ class ProjectColumn extends AbstractModel
*/
public function projectTask(): \Illuminate\Database\Eloquent\Relations\HasMany
{
return $this->hasMany(projectTask::class, 'column_id', 'id')->orderBy('sort')->orderBy('id');
return $this->hasMany(projectTask::class, 'column_id', 'id')->whereNull('archived_at')->orderBy('sort')->orderBy('id');
}
/**

View File

@ -16,6 +16,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @property int|null $project_id 项目ID
* @property int|null $column_id 列表ID
* @property string|null $name 标题
* @property string|null $color 颜色
* @property string|null $desc 描述
* @property string|null $start_at 计划开始时间
* @property string|null $end_at 计划结束时间
@ -46,6 +47,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @method static \Illuminate\Database\Query\Builder|ProjectTask onlyTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask query()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereArchivedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereColor($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereColumnId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereCompleteAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereCreatedAt($value)
@ -147,7 +149,7 @@ class ProjectTask extends AbstractModel
}
$subTaskTotal = $this->attributes['sub_num'];
if ($subTaskTotal == 0) {
return $this->complete_at ? 1 : 0;
return $this->complete_at ? 100 : 0;
}
$subTaskComplete = $builder->whereNotNull('complete_at')->count();
if ($subTaskComplete == 0) {
@ -336,6 +338,7 @@ class ProjectTask extends AbstractModel
if (Arr::exists($data, 'color')) {
$this->color = $data['color'];
}
// 内容
if ($content && $this->parent_id === 0) {
ProjectTaskContent::updateInsert([
'project_id' => $this->parent_id,
@ -343,6 +346,7 @@ class ProjectTask extends AbstractModel
], [
'content' => $content,
]);
$this->desc = Base::getHtml($content);
}
// 计划时间
if ($times) {
@ -401,4 +405,36 @@ class ProjectTask extends AbstractModel
return Base::retSuccess('修改成功');
});
}
/**
* 归档任务、取消归档
* @param Carbon|null $archived_at 归档时间
* @return array|bool
*/
public function archivedTask($archived_at)
{
return AbstractModel::transaction(function () use ($archived_at) {
if ($archived_at === null) {
// 标记未完成
$this->archived_at = null;
} else {
// 标记已完成
$this->archived_at = $archived_at;
}
$this->save();
return Base::retSuccess('修改成功');
});
}
/**
* 删除任务
* @return array|bool
*/
public function deleteTask()
{
return AbstractModel::transaction(function () {
$this->delete();
return Base::retSuccess('删除成功');
});
}
}

View File

@ -54,7 +54,7 @@
</div>
</div>
</div>
<div v-if="projectListPanel" class="project-column">
<div v-if="projectListPanel" class="project-column overlay-x">
<Draggable
:list="projectDetail.project_column"
:animation="150"
@ -143,6 +143,11 @@
<Icon type="md-radio-button-off" />{{$L('完成')}}
</div>
</EDropdownItem>
<EDropdownItem command="archived">
<div class="item">
<Icon type="ios-filing" />{{$L('归档')}}
</div>
</EDropdownItem>
<EDropdownItem command="delete">
<div class="item">
<Icon type="md-trash" />{{$L('删除')}}
@ -861,7 +866,6 @@ export default {
$A.apiAjax({
url: 'project/column/delete',
data: {
project_id: this.projectDetail.id,
column_id: column.id,
},
complete: () => {
@ -902,8 +906,25 @@ export default {
complete_at: false
})
}
else if (command === 'archived') {
$A.modalConfirm({
title: '归档任务',
content: '你确定要归档任务【' + task.name + '】吗?',
loading: true,
onOk: () => {
this.archivedOrRemoveTask(task, 'archived');
}
});
}
else if (command === 'delete') {
this.removeTask(task);
$A.modalConfirm({
title: '删除任务',
content: '你确定要删除任务【' + task.name + '】吗?',
loading: true,
onOk: () => {
this.archivedOrRemoveTask(task, 'delete');
}
});
}
else if (command.name) {
this.updateTask(task, {
@ -951,19 +972,13 @@ export default {
});
},
removeTask(task) {
$A.modalConfirm({
title: '删除任务',
content: '你确定要删除任务【' + task.name + '】吗?',
loading: true,
onOk: () => {
archivedOrRemoveTask(task, type) {
if (task.loading === true) {
return;
}
this.$set(task, 'loading', true);
//
$A.apiAjax({
url: 'project/task/delete',
url: 'project/task/' + type,
data: {
task_id: task.id,
},
@ -978,7 +993,7 @@ export default {
this.$Modal.remove();
if (ret === 1) {
$A.messageSuccess(msg);
let column = this.projectDetail.project_column.find(({id}) => id === column.id);
let column = this.projectDetail.project_column.find(({id}) => id === task.column_id);
if (column) {
let index = column.project_task.findIndex(({id}) => id === task.id);
if (index > -1) {
@ -991,8 +1006,6 @@ export default {
}
}
});
}
});
},
onSetting() {

View File

@ -610,6 +610,9 @@
display: flex;
align-items: center;
> i {
width: 18px;
height: 18px;
line-height: 18px;
font-size: 18px;
margin-right: 8px;
padding: 0;
@ -624,6 +627,18 @@
color: #f00;
}
}
&:hover {
> i {
&.ivu-icon {
color: #66b1ff;
}
}
&.red {
> i {
color: #f00;
}
}
}
}
}
&.column-more {