no message

This commit is contained in:
kuaifan 2021-06-08 23:57:42 +08:00
parent c478dbeeaa
commit b936e61429
6 changed files with 161 additions and 33 deletions

View File

@ -642,14 +642,14 @@ class ProjectController extends AbstractController
/**
* {post} 添加任务
*
* @apiParam {Number} project_id 项目ID
* @apiParam {Number} [column_id] 列表ID,留空取第一个
* @apiParam {String} name 任务描述
* @apiParam {String} [content] 任务详情
* @apiParam {Array} [times] 计划时间(格式:开始时间,结束时间2020-01-01 00:00,2020-01-01 23:59
* @apiParam {Number} [owner] 负责人,留空为自己
* @apiParam {Array} [subtasks] 子任务(格式:[{name,owner,times}]
* @apiParam {Number} [top] 添加的任务排到列表最前面
* @apiParam {Number} project_id 项目ID
* @apiParam {mixed} [column_id] 列表ID,任意值自动创建,留空取第一个
* @apiParam {String} name 任务描述
* @apiParam {String} [content] 任务详情
* @apiParam {Array} [times] 计划时间(格式:开始时间,结束时间2020-01-01 00:00,2020-01-01 23:59
* @apiParam {mixed} [owner] 负责人,留空为自己
* @apiParam {Array} [subtasks] 子任务(格式:[{name,owner,times}]
* @apiParam {Number} [top] 添加的任务排到列表最前面
*/
public function task__add()
{
@ -724,12 +724,14 @@ class ProjectController extends AbstractController
/**
* {post} 修改任务、子任务
*
* @apiParam {Number} task_id 任务ID
* @apiParam {String} [name] 任务描述
* @apiParam {String} [color] 任务描述(子任务不支持)
* @apiParam {String} [content] 任务详情(子任务不支持)
* @apiParam {Array} [times] 计划时间(格式:开始时间,结束时间2020-01-01 00:00,2020-01-01 23:59
* @apiParam {Number} [owner] 修改负责人
* @apiParam {Number} task_id 任务ID
* @apiParam {String} [name] 任务描述
* @apiParam {String} [color] 任务描述(子任务不支持)
* @apiParam {String} [content] 任务详情(子任务不支持)
* @apiParam {Array} [times] 计划时间(格式:开始时间,结束时间2020-01-01 00:00,2020-01-01 23:59
* @apiParam {mixed} [owner] 修改负责人
*
* @apiParam {String|false} [complete_at] 完成时间2020-01-01 00:00false表示未完成
*/
public function task__update()
{
@ -746,6 +748,7 @@ class ProjectController extends AbstractController
$content = Base::getPostValue('content');
$times = Base::getPostValue('times');
$owner = Base::getPostValue('owner');
$complete_at = Base::getPostValue('complete_at');
// 任务
$task = ProjectTask::whereId($task_id)->first();
if (empty($task)) {
@ -761,15 +764,30 @@ class ProjectController extends AbstractController
return Base::retError('项目不存在或不在成员列表内');
}
//
$result = $task->updateTask([
'name' => $name,
'color' => $color,
'content' => $content,
'times' => $times,
'owner' => $owner,
]);
if ($complete_at === false || $complete_at === "false") {
// 标记未完成
if (!$task->complete_at) {
return Base::retError('未完成任务');
}
$result = $task->completeTask(null);
} elseif (Base::isDate($complete_at)) {
// 标记已完成
if ($task->complete_at) {
return Base::retError('任务已完成');
}
$result = $task->completeTask(Carbon::now());
} else {
// 更新任务
$result = $task->updateTask([
'name' => $name,
'color' => $color,
'content' => $content,
'times' => $times,
'owner' => $owner,
]);
}
if (Base::isSuccess($result)) {
$result['data'] = ProjectTask::with(['taskUser', 'taskTag'])->whereId($task->id)->first();
$result['data'] = $task->toArray();
}
return $result;
}

View File

@ -310,10 +310,35 @@ class ProjectTask extends AbstractModel
});
}
/**
* 标记已完成、未完成
* @param Carbon|null $complete_at 完成时间
* @return array|bool
*/
public function completeTask($complete_at)
{
return AbstractModel::transaction(function () use ($complete_at) {
if ($complete_at === null) {
// 标记未完成
$this->complete_at = null;
} else {
// 标记已完成
if ($this->parent_id == 0) {
if (self::whereParentId($this->id)->whereCompleteAt(null)->exists()) {
return Base::retError('子任务未完成');
}
}
$this->complete_at = $complete_at;
}
$this->save();
return Base::retSuccess('修改成功');
});
}
/**
* 修改任务
* @param $params
* @return array|bool
* @return array
*/
public function updateTask($params)
{

View File

@ -1947,15 +1947,25 @@ class Base
return $_A["__static_input_content"][$key] ?? $default;
}
/**
* @param $key
* @param null $default
* @return array|mixed|string|null
*/
public static function getPostValue($key, $default = null)
{
$value = self::newTrim(self::getContentValue($key, $default));
$value = self::getContentValue($key, $default);
if (empty($value)) {
$value = self::newTrim(Request::post($key, $default));
$value = Request::post($key, $default);
}
return $value;
}
/**
* @param $key
* @param null $default
* @return int
*/
public static function getPostInt($key, $default = null)
{
return intval(self::getPostValue($key, $default));

View File

@ -133,9 +133,14 @@
@command="dropTask(item, $event)">
<Icon type="ios-more" />
<EDropdownMenu slot="dropdown" class="project-list-more-dropdown-menu">
<EDropdownItem command="complete">
<EDropdownItem v-if="item.complete_at" command="uncomplete">
<div class="item red">
<Icon type="md-checkmark-circle-outline" />{{$L('标记未完成')}}
</div>
</EDropdownItem>
<EDropdownItem v-else command="complete">
<div class="item">
<Icon type="md-create" />{{$L('完成')}}
<Icon type="md-radio-button-off" />{{$L('完成')}}
</div>
</EDropdownItem>
<EDropdownItem command="delete">
@ -143,7 +148,7 @@
<Icon type="md-trash" />{{$L('删除')}}
</div>
</EDropdownItem>
<EDropdownItem divided disabled>{{$L('色')}}</EDropdownItem>
<EDropdownItem divided disabled>{{$L('背景色')}}</EDropdownItem>
<EDropdownItem v-for="(c, k) in taskList" :key="k" :command="c">
<div class="item">
<i class="iconfont" :style="{color:c.color||'#f9f9f9'}" v-html="c.color == column.color ? '&#xe61d;' : '&#xe61c;'"></i>{{$L(c.name)}}
@ -669,8 +674,8 @@ export default {
if (ret === 1) {
$A.messageSuccess(msg);
} else {
$A.modalError(msg);
this.$store.commit('getProjectDetail', this.projectDetail.id);
$A.modalError(msg);
}
}
});
@ -828,10 +833,15 @@ export default {
});
},
success: ({ret, data, msg}) => {
if (ret !== 1) {
if (ret === 1) {
Object.keys(data).forEach(key => {
this.$set(column, key, data[key]);
});
} else {
Object.keys(updata).forEach(key => {
this.$set(column, key, backup[key]);
});
$A.modalError(msg);
}
}
});
@ -881,10 +891,19 @@ export default {
dropTask(task, command) {
if (command === 'complete') {
//
if (task.complete_at) return;
this.updateTask(task, {
complete_at: $A.formatDate("Y-m-d H:i:s")
})
}
else if (command === 'uncomplete') {
if (!task.complete_at) return;
this.updateTask(task, {
complete_at: false
})
}
else if (command === 'delete') {
//
this.removeTask(task);
}
else if (command.name) {
this.updateTask(task, {
@ -918,15 +937,64 @@ export default {
});
},
success: ({ret, data, msg}) => {
if (ret !== 1) {
if (ret === 1) {
Object.keys(data).forEach(key => {
this.$set(task, key, data[key]);
});
} else {
Object.keys(updata).forEach(key => {
this.$set(task, key, backup[key]);
});
$A.modalError(msg);
}
}
});
},
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);
}
}
});
}
});
},
onSetting() {
this.settingLoad++;
$A.apiAjax({

View File

@ -599,6 +599,12 @@
font-size: 16px;
}
}
&.red {
color: #f00;
> i {
color: #f00;
}
}
}
}
&.column-more {

View File

@ -40,6 +40,7 @@
display: flex;
align-items: center;
margin-left: 24px;
height: 34px;
> li {
list-style: none;
margin-left: 3px;