归档、删除 任务
This commit is contained in:
parent
a6ab9a797d
commit
e6794bce8c
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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('删除成功');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -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,46 +972,38 @@ export default {
|
||||
});
|
||||
},
|
||||
|
||||
removeTask(task) {
|
||||
$A.modalConfirm({
|
||||
title: '删除任务',
|
||||
content: '你确定要删除任务【' + task.name + '】吗?',
|
||||
loading: true,
|
||||
onOk: () => {
|
||||
if (task.loading === true) {
|
||||
return;
|
||||
}
|
||||
this.$set(task, 'loading', true);
|
||||
//
|
||||
$A.apiAjax({
|
||||
url: 'project/task/delete',
|
||||
data: {
|
||||
task_id: task.id,
|
||||
},
|
||||
complete: () => {
|
||||
this.$set(task, 'loading', false);
|
||||
},
|
||||
error: () => {
|
||||
this.$Modal.remove();
|
||||
$A.modalAlert('网络繁忙,请稍后再试!');
|
||||
},
|
||||
success: ({ret, data, msg}) => {
|
||||
this.$Modal.remove();
|
||||
if (ret === 1) {
|
||||
$A.messageSuccess(msg);
|
||||
let column = this.projectDetail.project_column.find(({id}) => id === column.id);
|
||||
if (column) {
|
||||
let index = column.project_task.findIndex(({id}) => id === task.id);
|
||||
if (index > -1) {
|
||||
column.project_task.splice(index, 1);
|
||||
}
|
||||
}
|
||||
this.$store.commit('getProjectDetail', this.projectDetail.id);
|
||||
}else{
|
||||
$A.modalError(msg, 301);
|
||||
archivedOrRemoveTask(task, type) {
|
||||
if (task.loading === true) {
|
||||
return;
|
||||
}
|
||||
this.$set(task, 'loading', true);
|
||||
$A.apiAjax({
|
||||
url: 'project/task/' + type,
|
||||
data: {
|
||||
task_id: task.id,
|
||||
},
|
||||
complete: () => {
|
||||
this.$set(task, 'loading', false);
|
||||
},
|
||||
error: () => {
|
||||
this.$Modal.remove();
|
||||
$A.modalAlert('网络繁忙,请稍后再试!');
|
||||
},
|
||||
success: ({ret, data, msg}) => {
|
||||
this.$Modal.remove();
|
||||
if (ret === 1) {
|
||||
$A.messageSuccess(msg);
|
||||
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) {
|
||||
column.project_task.splice(index, 1);
|
||||
}
|
||||
}
|
||||
});
|
||||
this.$store.commit('getProjectDetail', this.projectDetail.id);
|
||||
}else{
|
||||
$A.modalError(msg, 301);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
15
resources/assets/sass/project-list.scss
vendored
15
resources/assets/sass/project-list.scss
vendored
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user