feat: 在项目设置里新增一个“已删除任务”菜单

This commit is contained in:
韦荣超 2022-03-09 18:02:49 +08:00
parent db99a21514
commit 6b29b686c7
11 changed files with 388 additions and 24 deletions

View File

@ -916,6 +916,7 @@ class ProjectController extends AbstractController
$time_before = Request::input('time_before'); $time_before = Request::input('time_before');
$complete = Request::input('complete', 'all'); $complete = Request::input('complete', 'all');
$archived = Request::input('archived', 'no'); $archived = Request::input('archived', 'no');
$deleted = Request::input('deleted');
$keys = Request::input('keys'); $keys = Request::input('keys');
$sorts = Request::input('sorts'); $sorts = Request::input('sorts');
$keys = is_array($keys) ? $keys : []; $keys = is_array($keys) ? $keys : [];
@ -970,6 +971,10 @@ class ProjectController extends AbstractController
$builder->whereNull('project_tasks.archived_at'); $builder->whereNull('project_tasks.archived_at');
} }
// //
if ($deleted == 'yes') {
$builder->onlyTrashed();
}
//
foreach ($sorts as $column => $direction) { foreach ($sorts as $column => $direction) {
if (!in_array($column, ['complete_at', 'archived_at', 'end_at'])) continue; if (!in_array($column, ['complete_at', 'archived_at', 'end_at'])) continue;
if (!in_array($direction, ['asc', 'desc'])) continue; if (!in_array($direction, ['asc', 'desc'])) continue;
@ -1524,6 +1529,9 @@ class ProjectController extends AbstractController
$task_id = intval($data['task_id']); $task_id = intval($data['task_id']);
// //
$task = ProjectTask::userTask($task_id, true, 2); $task = ProjectTask::userTask($task_id, true, 2);
if ($task->deleted_at) {
throw new ApiException('任务已删除');
}
// 更新任务 // 更新任务
$updateMarking = []; $updateMarking = [];
$task->updateTask($data, $updateMarking); $task->updateTask($data, $updateMarking);
@ -1643,8 +1651,21 @@ class ProjectController extends AbstractController
User::auth(); User::auth();
// //
$task_id = intval(Request::input('task_id')); $task_id = intval(Request::input('task_id'));
$type = Request::input('type');
// //
$task = ProjectTask::userTask($task_id, null, true); $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(); $task->deleteTask();
return Base::retSuccess('删除成功', ['id' => $task->id]); return Base::retSuccess('删除成功', ['id' => $task->id]);

View File

@ -42,6 +42,7 @@ use Request;
* @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
* @property int|null $deleted_userid 删除会员
* @property-read \App\Models\ProjectTaskContent|null $content * @property-read \App\Models\ProjectTaskContent|null $content
* @property-read int $file_num * @property-read int $file_num
* @property-read int $msg_num * @property-read int $msg_num
@ -60,7 +61,7 @@ use Request;
* @property-read int|null $task_user_count * @property-read int|null $task_user_count
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask allData($userid = null) * @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 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 newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask newQuery() * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask newQuery()
* @method static \Illuminate\Database\Query\Builder|ProjectTask onlyTrashed() * @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 whereCompleteAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereCreatedAt($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 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 whereDesc($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereDialogId($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereDialogId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereEndAt($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 = []) 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 = 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)) { if (empty($task)) {
throw new ApiException('任务不存在', [ 'task_id' => $task_id ], -4002); throw new ApiException('任务不存在', [ 'task_id' => $task_id ], -4002);

View File

@ -21,6 +21,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @property \Illuminate\Support\Carbon|null $deleted_at * @property \Illuminate\Support\Carbon|null $deleted_at
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTaskMailLog newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|ProjectTaskMailLog newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTaskMailLog newQuery() * @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 query()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTaskMailLog whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTaskMailLog whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTaskMailLog whereDeletedAt($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 whereType($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTaskMailLog whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTaskMailLog whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTaskMailLog whereUserid($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 * @mixin \Eloquent
*/ */
class ProjectTaskMailLog extends AbstractModel class ProjectTaskMailLog extends AbstractModel

View File

@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddProjectTasksDeletedUserid extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('project_tasks', function (Blueprint $table) {
if (!Schema::hasColumn('project_tasks', 'deleted_userid')) {
$table->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");
});
}
}

View File

@ -359,7 +359,7 @@ export default {
content: '你确定要删除任务【' + data.name + '】吗?', content: '你确定要删除任务【' + data.name + '】吗?',
loading: true, loading: true,
onOk: () => { onOk: () => {
this.$store.dispatch("removeTask", data.id).then(({msg}) => { this.$store.dispatch("removeTask", {task_id: data.id}).then(({msg}) => {
$A.messageSuccess(msg); $A.messageSuccess(msg);
this.$Modal.remove(); this.$Modal.remove();
}).catch(({msg}) => { }).catch(({msg}) => {

View File

@ -57,6 +57,7 @@
<EDropdownItem command="invite">{{$L('邀请链接')}}</EDropdownItem> <EDropdownItem command="invite">{{$L('邀请链接')}}</EDropdownItem>
<EDropdownItem command="log" divided>{{$L('项目动态')}}</EDropdownItem> <EDropdownItem command="log" divided>{{$L('项目动态')}}</EDropdownItem>
<EDropdownItem command="archived_task">{{$L('已归档任务')}}</EDropdownItem> <EDropdownItem command="archived_task">{{$L('已归档任务')}}</EDropdownItem>
<EDropdownItem command="deleted_task">{{$L('已删除任务')}}</EDropdownItem>
<EDropdownItem command="transfer" divided>{{$L('移交项目')}}</EDropdownItem> <EDropdownItem command="transfer" divided>{{$L('移交项目')}}</EDropdownItem>
<EDropdownItem command="archived">{{$L('归档项目')}}</EDropdownItem> <EDropdownItem command="archived">{{$L('归档项目')}}</EDropdownItem>
<EDropdownItem command="delete" style="color:#f40">{{$L('删除项目')}}</EDropdownItem> <EDropdownItem command="delete" style="color:#f40">{{$L('删除项目')}}</EDropdownItem>
@ -64,6 +65,7 @@
<EDropdownMenu v-else slot="dropdown"> <EDropdownMenu v-else slot="dropdown">
<EDropdownItem command="log">{{$L('项目动态')}}</EDropdownItem> <EDropdownItem command="log">{{$L('项目动态')}}</EDropdownItem>
<EDropdownItem command="archived_task">{{$L('已归档任务')}}</EDropdownItem> <EDropdownItem command="archived_task">{{$L('已归档任务')}}</EDropdownItem>
<EDropdownItem command="deleted_task">{{$L('已删除任务')}}</EDropdownItem>
<EDropdownItem command="exit" divided style="color:#f40">{{$L('退出项目')}}</EDropdownItem> <EDropdownItem command="exit" divided style="color:#f40">{{$L('退出项目')}}</EDropdownItem>
</EDropdownMenu> </EDropdownMenu>
</EDropdown> </EDropdown>
@ -433,6 +435,14 @@
:size="900"> :size="900">
<TaskArchived v-if="archivedTaskShow" :project-id="projectId"/> <TaskArchived v-if="archivedTaskShow" :project-id="projectId"/>
</DrawerOverlay> </DrawerOverlay>
<!--查看已删除任务-->
<DrawerOverlay
v-model="deletedTaskShow"
placement="right"
:size="900">
<TaskDeleted v-if="deletedTaskShow" :project-id="projectId"/>
</DrawerOverlay>
</div> </div>
</template> </template>
@ -454,6 +464,7 @@ import ProjectLog from "./ProjectLog";
import DrawerOverlay from "../../../components/DrawerOverlay"; import DrawerOverlay from "../../../components/DrawerOverlay";
import ProjectWorkflow from "./ProjectWorkflow"; import ProjectWorkflow from "./ProjectWorkflow";
import TaskMenu from "./TaskMenu"; import TaskMenu from "./TaskMenu";
import TaskDeleted from "./TaskDeleted";
export default { export default {
name: "ProjectList", name: "ProjectList",
@ -461,7 +472,7 @@ export default {
TaskMenu, TaskMenu,
ProjectWorkflow, ProjectWorkflow,
DrawerOverlay, DrawerOverlay,
ProjectLog, TaskArchived, TaskRow, Draggable, TaskAddSimple, UserInput, TaskAdd, TaskPriority}, ProjectLog, TaskArchived, TaskRow, Draggable, TaskAddSimple, UserInput, TaskAdd, TaskPriority, TaskDeleted },
data() { data() {
return { return {
nowTime: $A.Time(), nowTime: $A.Time(),
@ -500,6 +511,7 @@ export default {
workflowShow: false, workflowShow: false,
logShow: false, logShow: false,
archivedTaskShow: false, archivedTaskShow: false,
deletedTaskShow: false,
projectDialogSubscribe: null, projectDialogSubscribe: null,
@ -1149,6 +1161,10 @@ export default {
this.archivedTaskShow = true; this.archivedTaskShow = true;
break; break;
case "deleted_task":
this.deletedTaskShow = true;
break;
case "transfer": case "transfer":
this.$set(this.transferData, 'owner_userid', [this.projectData.owner_userid]); this.$set(this.transferData, 'owner_userid', [this.projectData.owner_userid]);
this.transferShow = true; this.transferShow = true;

View File

@ -282,7 +282,7 @@ export default {
delete(row) { delete(row) {
this.list = this.list.filter(({id}) => id != row.id); this.list = this.list.filter(({id}) => id != row.id);
this.loadIng++; this.loadIng++;
this.$store.dispatch("removeTask", row.id).then(({msg}) => { this.$store.dispatch("removeTask", {task_id: row.id}).then(({msg}) => {
$A.messageSuccess(msg); $A.messageSuccess(msg);
this.loadIng--; this.loadIng--;
this.getLists(); this.getLists();

View File

@ -0,0 +1,286 @@
<template>
<div class="task-archived">
<div class="archived-title">
{{$L('删除的任务')}}
<div class="title-icon">
<Loading v-if="loadIng > 0"/>
</div>
</div>
<div class="search-container lr">
<ul>
<li>
<div class="search-label">
{{$L("任务名")}}
</div>
<div class="search-content">
<Input v-model="keys.name" clearable/>
</div>
</li>
<li class="search-button">
<Tooltip
theme="light"
placement="right"
transfer-class-name="search-button-clear"
transfer>
<Button :loading="loadIng > 0" type="primary" icon="ios-search" @click="getLists">{{$L('搜索')}}</Button>
<div slot="content">
<Button :loading="loadIng > 0" type="text" @click="getLists">{{$L('刷新')}}</Button>
</div>
</Tooltip>
</li>
</ul>
</div>
<Table :columns="columns" :data="list" :loading="loadIng > 0" :no-data-text="$L(noText)"></Table>
<Page
class="page-container"
:total="total"
:current="page"
:pageSize="pageSize"
:disabled="loadIng > 0"
:simple="windowMax768"
showTotal
@on-change="setPage"
@on-page-size-change="setPageSize"/>
</div>
</template>
<script>
import {mapState} from "vuex";
export default {
name: "TaskDeleted",
props: {
projectId: {
type: Number,
default: 0
},
},
data() {
return {
loadIng: 0,
keys: {},
columns: [],
list: [],
page: 1,
pageSize: 20,
total: 0,
noText: ''
}
},
mounted() {
},
computed: {
...mapState(['cacheTasks', 'windowMax768'])
},
watch: {
projectId: {
handler() {
this.getLists();
},
immediate: true
}
},
methods: {
initLanguage() {
this.columns = [
{
title: this.$L('ID'),
minWidth: 50,
maxWidth: 70,
key: 'id',
},
{
title: this.$L('任务名称'),
key: 'name',
minWidth: 200,
render: (h, {row}) => {
return h('AutoTip', {
on: {
'on-click': () => {
this.$store.dispatch("openTask", row);
}
}
}, row.name);
}
},
{
title: this.$L('创建时间'),
key: 'created_at',
width: 168,
},
{
title: this.$L('删除时间'),
key: 'deleted_at',
width: 168,
},
{
title: this.$L('删除人员'),
key: 'deleted_userid',
minWidth: 100,
render: (h, {row}) => {
if (!row.deleted_userid) {
return h('span', '-');
}
return h('UserAvatar', {
props: {
userid: row.deleted_userid,
size: 24,
showName: true
}
});
}
},
{
title: this.$L('操作'),
align: 'center',
width: 100,
render: (h, params) => {
const vNodes = [
h('span', {
style: {
fontSize: '13px',
cursor: 'pointer',
color: '#8bcf70',
},
on: {
'click': () => {
this.$store.dispatch("openTask", params.row);
}
},
}, this.$L('查看')),
h('Poptip', {
props: {
title: this.$L('你确定要还原删除吗?'),
confirm: true,
transfer: true,
placement: 'left',
},
style: {
marginLeft: '6px',
fontSize: '13px',
cursor: 'pointer',
color: '#8bcf70',
},
on: {
'on-ok': () => {
this.recovery(params.row);
}
},
}, this.$L('还原')),
h('Poptip', {
props: {
title: this.$L('你确定要彻底删除任务吗?'),
confirm: true,
transfer: true,
placement: 'left',
},
style: {
marginLeft: '6px',
fontSize: '13px',
cursor: 'pointer',
color: '#f00',
},
on: {
'on-ok': () => {
this.delete(params.row);
}
},
}, this.$L('彻底删除'))
];
return h('TableAction', {
props: {
column: params.column
}
}, vNodes);
}
}
]
},
refresh() {
this.keys = {};
this.getLists()
},
getLists() {
if (!this.projectId) {
return;
}
this.loadIng++;
this.$store.dispatch("call", {
url: 'project/task/lists',
data: {
keys: this.keys,
project_id: this.projectId,
parent_id: -1,
deleted: 'yes',
sorts: {
deleted_at: 'desc'
},
page: Math.max(this.page, 1),
pagesize: Math.max($A.runNum(this.pageSize), 20),
},
}).then(({data}) => {
this.loadIng--;
this.page = data.current_page;
this.total = data.total;
this.list = data.data;
this.noText = '没有相关的数据';
}).catch(() => {
this.loadIng--;
this.noText = '数据加载失败';
})
},
setPage(page) {
this.page = page;
this.getLists();
},
setPageSize(pageSize) {
this.page = 1;
this.pageSize = pageSize;
this.getLists();
},
recovery(row) {
this.list = this.list.filter(({id}) => id != row.id);
this.loadIng++;
this.$store.dispatch("removeTask", {
task_id: row.id,
type: 'recovery'
}).then(({msg}) => {
$A.messageSuccess(msg);
this.loadIng--;
this.getLists();
this.$store.dispatch("openTask", row);
}).catch(({msg}) => {
$A.modalError(msg);
this.loadIng--;
this.getLists();
})
},
delete(row) {
this.list = this.list.filter(({id}) => id != row.id);
this.loadIng++;
this.$store.dispatch("removeTask", {
task_id: row.id,
type: 'completely_delete'
}).then(({msg}) => {
$A.messageSuccess(msg);
this.loadIng--;
this.getLists();
}).catch(({msg}) => {
$A.modalError(msg);
this.loadIng--;
this.getLists();
});
}
}
}
</script>

View File

@ -73,7 +73,7 @@
<div v-show="taskDetail.id > 0" class="task-info"> <div v-show="taskDetail.id > 0" class="task-info">
<div class="head"> <div class="head">
<TaskMenu <TaskMenu
v-if="taskId > 0" v-if="taskId > 0 && !taskDetail.deleted_at"
:ref="`taskMenu_${taskDetail.id}`" :ref="`taskMenu_${taskDetail.id}`"
:task="taskDetail" :task="taskDetail"
class="icon" class="icon"
@ -86,6 +86,9 @@
<div v-if="taskDetail.archived_at" class="flow"> <div v-if="taskDetail.archived_at" class="flow">
<span class="archived" @click.stop="openMenu(taskDetail)">{{$L('已归档')}}</span> <span class="archived" @click.stop="openMenu(taskDetail)">{{$L('已归档')}}</span>
</div> </div>
<div v-if="taskDetail.deleted_at" class="flow">
<span class="archived">{{$L('已删除')}}</span>
</div>
<div class="nav"> <div class="nav">
<p v-if="projectName"><span>{{projectName}}</span></p> <p v-if="projectName"><span>{{projectName}}</span></p>
<p v-if="columnName"><span>{{columnName}}</span></p> <p v-if="columnName"><span>{{columnName}}</span></p>
@ -116,14 +119,14 @@
<Button :loading="ownerLoad > 0" size="small" type="primary" @click="onOwner(true)">确定</Button> <Button :loading="ownerLoad > 0" size="small" type="primary" @click="onOwner(true)">确定</Button>
</div> </div>
</div> </div>
<Button slot="reference" :loading="ownerLoad > 0" class="pick" type="primary">{{$L('我要领取任务')}}</Button> <Button v-if="!taskDetail.deleted_at" slot="reference" :loading="ownerLoad > 0" class="pick" type="primary">{{$L('我要领取任务')}}</Button>
</EPopover> </EPopover>
<ETooltip v-if="$Electron" :content="$L('新窗口打开')"> <ETooltip v-if="$Electron" :content="$L('新窗口打开')">
<i class="taskfont open" @click="openNewWin">&#xe776;</i> <i class="taskfont open" @click="openNewWin">&#xe776;</i>
</ETooltip> </ETooltip>
<div class="menu"> <div class="menu">
<TaskMenu <TaskMenu
v-if="taskId > 0" v-if="taskId > 0 && !taskDetail.deleted_at"
:task="taskDetail" :task="taskDetail"
icon="ios-more" icon="ios-more"
completed-icon="ios-more" completed-icon="ios-more"
@ -336,7 +339,7 @@
</ul> </ul>
</FormItem> </FormItem>
</Form> </Form>
<div v-if="menuList.length > 0" class="add"> <div v-if="menuList.length > 0 && !taskDetail.deleted_at" class="add">
<EDropdown <EDropdown
trigger="click" trigger="click"
placement="bottom" placement="bottom"
@ -379,21 +382,21 @@
<div class="head"> <div class="head">
<Icon class="icon" type="ios-chatbubbles-outline" /> <Icon class="icon" type="ios-chatbubbles-outline" />
<div class="nav"> <div class="nav">
<p :class="{active:navActive=='dialog'}" @click="navActive='dialog'">{{$L('聊天')}}</p> <p :class="{active:navActive=='dialog'}" @click="navActive='dialog'" v-if="!taskDetail.deleted_at">{{$L('聊天')}}</p>
<p :class="{active:navActive=='log'}" @click="navActive='log'">{{$L('动态')}}</p> <p :class="{active:navActive=='log' || taskDetail.deleted_at}" @click="navActive='log'">{{$L('动态')}}</p>
<div v-if="navActive=='log'" class="refresh"> <div v-if="navActive=='log'" class="refresh">
<Loading v-if="logLoadIng"/> <Loading v-if="logLoadIng"/>
<Icon v-else type="ios-refresh" @click="getLogLists"></Icon> <Icon v-else type="ios-refresh" @click="getLogLists"></Icon>
</div> </div>
</div> </div>
</div> </div>
<ProjectLog v-if="navActive=='log' && taskId > 0" ref="log" :task-id="taskDetail.id" :show-load="false" @on-load-change="logLoadChange"/> <ProjectLog v-if="(navActive=='log' || taskDetail.deleted_at) && taskId > 0" ref="log" :task-id="taskDetail.id" :show-load="false" @on-load-change="logLoadChange"/>
<div v-else class="no-dialog" <div v-else class="no-dialog"
@drop.prevent="taskPasteDrag($event, 'drag')" @drop.prevent="taskPasteDrag($event, 'drag')"
@dragover.prevent="taskDragOver(true, $event)" @dragover.prevent="taskDragOver(true, $event)"
@dragleave.prevent="taskDragOver(false, $event)"> @dragleave.prevent="taskDragOver(false, $event)">
<div class="no-tip">{{$L('暂无消息')}}</div> <div class="no-tip">{{$L('暂无消息')}}</div>
<div class="no-input"> <div class="no-input" v-if="!taskDetail.deleted_at">
<DragInput <DragInput
class="dialog-input" class="dialog-input"
v-model="msgText" v-model="msgText"

View File

@ -250,7 +250,7 @@ export default {
archivedOrRemoveTask(type) { archivedOrRemoveTask(type) {
let typeDispatch = 'removeTask'; let typeDispatch = 'removeTask';
let typeName = '删除'; let typeName = '删除';
let typeData = this.task.id; let typeData = {task_id: this.task.id};
let typeTask = this.task.parent_id > 0 ? '子任务' : '任务'; let typeTask = this.task.parent_id > 0 ? '子任务' : '任务';
if (type == 'archived') { if (type == 'archived') {
typeDispatch = 'archivedTask' typeDispatch = 'archivedTask'

View File

@ -1233,29 +1233,27 @@ export default {
* 删除任务 * 删除任务
* @param state * @param state
* @param dispatch * @param dispatch
* @param task_id * @param data
* @returns {Promise<unknown>} * @returns {Promise<unknown>}
*/ */
removeTask({state, dispatch}, task_id) { removeTask({state, dispatch}, data) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
if ($A.runNum(task_id) === 0) { if ($A.runNum(data.task_id) === 0) {
reject({msg: 'Parameter error'}); reject({msg: 'Parameter error'});
return; return;
} }
dispatch("taskLoadStart", task_id) dispatch("taskLoadStart", data.task_id)
dispatch("call", { dispatch("call", {
url: 'project/task/remove', url: 'project/task/remove',
data: { data,
task_id: task_id,
},
}).then(result => { }).then(result => {
dispatch("forgetTask", task_id) dispatch("forgetTask", data.task_id)
dispatch("taskLoadEnd", task_id) dispatch("taskLoadEnd", data.task_id)
resolve(result) resolve(result)
}).catch(e => { }).catch(e => {
console.warn(e); console.warn(e);
dispatch("getTaskOne", task_id).catch(() => {}) dispatch("getTaskOne", data.task_id).catch(() => {})
dispatch("taskLoadEnd", task_id) dispatch("taskLoadEnd", data.task_id)
reject(e) reject(e)
}); });
}); });