no message

This commit is contained in:
kuaifan 2021-06-09 00:47:18 +08:00
parent b936e61429
commit a6ab9a797d
5 changed files with 118 additions and 122 deletions

View File

@ -14,6 +14,7 @@ use App\Models\User;
use App\Models\WebSocketDialogMsg; use App\Models\WebSocketDialogMsg;
use App\Module\Base; use App\Module\Base;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Support\Arr;
use Request; use Request;
/** /**
@ -578,9 +579,8 @@ class ProjectController extends AbstractController
$user = User::IDE($user['data']); $user = User::IDE($user['data']);
} }
// //
$column_id = intval(Request::input('column_id')); $data = Request::all();
$name = trim(Request::input('name')); $column_id = intval($data['column_id']);
$color = trim(Request::input('color'));
// 列表 // 列表
$column = ProjectColumn::whereId($column_id)->first(); $column = ProjectColumn::whereId($column_id)->first();
if (empty($column)) { if (empty($column)) {
@ -596,8 +596,8 @@ class ProjectController extends AbstractController
return Base::retError('项目不存在或不在成员列表内'); return Base::retError('项目不存在或不在成员列表内');
} }
// //
if ($name) $column->name = $name; if (Arr::exists($data, 'name')) $column->name = $data['name'];
if ($color) $column->color = $color; if (Arr::exists($data, 'color')) $column->color = $data['color'];
$column->save(); $column->save();
return Base::retSuccess('修改成功', $column); return Base::retSuccess('修改成功', $column);
} }
@ -659,17 +659,9 @@ class ProjectController extends AbstractController
} else { } else {
$user = User::IDE($user['data']); $user = User::IDE($user['data']);
} }
$project_id = Base::getPostInt('project_id'); parse_str(Request::getContent(), $data);
$column_id = Base::getPostValue('column_id'); $project_id = intval($data['project_id']);
$name = Base::getPostValue('name'); $column_id = $data['column_id'];
$content = Base::getPostValue('content');
$times = Base::getPostValue('times');
$owner = Base::getPostValue('owner');
$subtasks = Base::getPostValue('subtasks');
$p_level = Base::getPostValue('p_level');
$p_name = Base::getPostValue('p_name');
$p_color = Base::getPostValue('p_color');
$top = Base::getPostInt('top');
// 项目 // 项目
$project = Project::select($this->projectSelect) $project = Project::select($this->projectSelect)
->join('project_users', 'projects.id', '=', 'project_users.project_id') ->join('project_users', 'projects.id', '=', 'project_users.project_id')
@ -701,20 +693,11 @@ class ProjectController extends AbstractController
return Base::retError('任务列表不存在或已被删除'); return Base::retError('任务列表不存在或已被删除');
} }
// //
$result = ProjectTask::addTask([ $result = ProjectTask::addTask(array_merge($data, [
'parent_id' => 0, 'parent_id' => 0,
'project_id' => $project->id, 'project_id' => $project->id,
'column_id' => $column->id, 'column_id' => $column->id,
'name' => $name, ]));
'content' => $content,
'times' => $times,
'owner' => $owner,
'subtasks' => $subtasks,
'p_level' => $p_level,
'p_name' => $p_name,
'p_color' => $p_color,
'top' => $top,
]);
if (Base::isSuccess($result)) { if (Base::isSuccess($result)) {
$result['data'] = ProjectTask::with(['taskUser', 'taskTag'])->whereId($result['data']['id'])->first(); $result['data'] = ProjectTask::with(['taskUser', 'taskTag'])->whereId($result['data']['id'])->first();
} }
@ -742,13 +725,8 @@ class ProjectController extends AbstractController
$user = User::IDE($user['data']); $user = User::IDE($user['data']);
} }
// //
$task_id = Base::getPostInt('task_id'); parse_str(Request::getContent(), $data);
$name = Base::getPostValue('name'); $task_id = intval($data['task_id']);
$color = Base::getPostValue('color');
$content = Base::getPostValue('content');
$times = Base::getPostValue('times');
$owner = Base::getPostValue('owner');
$complete_at = Base::getPostValue('complete_at');
// 任务 // 任务
$task = ProjectTask::whereId($task_id)->first(); $task = ProjectTask::whereId($task_id)->first();
if (empty($task)) { if (empty($task)) {
@ -764,27 +742,21 @@ class ProjectController extends AbstractController
return Base::retError('项目不存在或不在成员列表内'); return Base::retError('项目不存在或不在成员列表内');
} }
// //
if ($complete_at === false || $complete_at === "false") { if (Base::isDate($data['complete_at'])) {
// 标记未完成
if (!$task->complete_at) {
return Base::retError('未完成任务');
}
$result = $task->completeTask(null);
} elseif (Base::isDate($complete_at)) {
// 标记已完成 // 标记已完成
if ($task->complete_at) { if ($task->complete_at) {
return Base::retError('任务已完成'); return Base::retError('任务已完成');
} }
$result = $task->completeTask(Carbon::now()); $result = $task->completeTask(Carbon::now());
} elseif (Arr::exists($data, 'complete_at')) {
// 标记未完成
if (!$task->complete_at) {
return Base::retError('未完成任务');
}
$result = $task->completeTask(null);
} else { } else {
// 更新任务 // 更新任务
$result = $task->updateTask([ $result = $task->updateTask($data);
'name' => $name,
'color' => $color,
'content' => $content,
'times' => $times,
'owner' => $owner,
]);
} }
if (Base::isSuccess($result)) { if (Base::isSuccess($result)) {
$result['data'] = $task->toArray(); $result['data'] = $task->toArray();

View File

@ -3,6 +3,7 @@
namespace App\Models; namespace App\Models;
use App\Module\Base; use App\Module\Base;
use Arr;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
@ -210,32 +211,33 @@ class ProjectTask extends AbstractModel
/** /**
* 添加任务 * 添加任务
* @param $params * @param $data
* @return array|bool * @return array|bool
*/ */
public static function addTask($params) public static function addTask($data)
{ {
$parent_id = intval($params['parent_id']); $parent_id = intval($data['parent_id']);
$project_id = intval($params['project_id']); $project_id = intval($data['project_id']);
$column_id = intval($params['column_id']); $column_id = intval($data['column_id']);
$name = $params['name']; $name = $data['name'];
$content = $params['content']; $content = $data['content'];
$times = $params['times']; $times = $data['times'];
$owner = $params['owner']; $owner = $data['owner'];
$subtasks = $params['subtasks']; $subtasks = $data['subtasks'];
$p_level = intval($params['p_level']); $p_level = intval($data['p_level']);
$p_name = $params['p_name']; $p_name = $data['p_name'];
$p_color = $params['p_color']; $p_color = $data['p_color'];
$top = intval($params['top']); $top = intval($data['top']);
// //
$retPre = $parent_id ? '子任务' : '任务'; $retPre = $parent_id ? '子任务' : '任务';
$task = self::createInstance(); $task = self::createInstance([
$task->parent_id = $parent_id; 'parent_id' => $parent_id,
$task->project_id = $project_id; 'project_id' => $project_id,
$task->column_id = $column_id; 'column_id' => $column_id,
$task->p_level = $p_level; 'p_level' => $p_level,
$task->p_name = $p_name; 'p_name' => $p_name,
$task->p_color = $p_color; 'p_color' => $p_color,
]);
if ($content) { if ($content) {
$task->desc = Base::getHtml($content); $task->desc = Base::getHtml($content);
} }
@ -310,53 +312,31 @@ 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 * @param $data
* @return array * @return array
*/ */
public function updateTask($params) public function updateTask($data)
{ {
return AbstractModel::transaction(function () use ($params) { return AbstractModel::transaction(function () use ($data) {
$name = $params['name']; $content = $data['content'];
$color = $params['color']; $times = $data['times'];
$content = $params['content']; $owner = $data['owner'];
$times = $params['times']; // 标题
$owner = $params['owner']; if (Arr::exists($data, 'name')) {
// 子任务禁止修改项 if (empty($data['name'])) {
if ($this->parent_id > 0) { return Base::retError('任务描述不能为空');
$color = null; } elseif (mb_strlen($data['name']) > 255) {
$content = null; return Base::retError('任务描述最多只能设置255个字');
}
$this->name = $data['name'];
} }
// 名称、背景色 // 背景色
if ($name) $this->name = $name; if (Arr::exists($data, 'color')) {
if ($color) $this->color = $color; $this->color = $data['color'];
if ($content) { }
if ($content && $this->parent_id === 0) {
ProjectTaskContent::updateInsert([ ProjectTaskContent::updateInsert([
'project_id' => $this->parent_id, 'project_id' => $this->parent_id,
'task_id' => $this->id, 'task_id' => $this->id,
@ -396,4 +376,29 @@ class ProjectTask extends AbstractModel
return Base::retSuccess('修改成功'); return Base::retSuccess('修改成功');
}); });
} }
/**
* 标记已完成、未完成
* @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('修改成功');
});
}
} }

View File

@ -1955,7 +1955,7 @@ class Base
public static function getPostValue($key, $default = null) public static function getPostValue($key, $default = null)
{ {
$value = self::getContentValue($key, $default); $value = self::getContentValue($key, $default);
if (empty($value)) { if (!isset($value)) {
$value = Request::post($key, $default); $value = Request::post($key, $default);
} }
return $value; return $value;

View File

@ -122,7 +122,7 @@
@remove="sortUpdate"> @remove="sortUpdate">
<div <div
v-for="item in panelTask(column.project_task)" v-for="item in panelTask(column.project_task)"
class="task-item task-draggable" :class="['task-item task-draggable', item.complete_at ? 'complete' : '']"
:style="item.color ? {backgroundColor: item.color} : null"> :style="item.color ? {backgroundColor: item.color} : null">
<div :class="['task-head', item.desc ? 'has-desc' : '']"> <div :class="['task-head', item.desc ? 'has-desc' : '']">
<div class="task-title"><pre>{{item.name}}</pre></div> <div class="task-title"><pre>{{item.name}}</pre></div>
@ -177,7 +177,7 @@
:class="['task-time', item.today ? 'today' : '', item.overdue ? 'overdue' : '']" :class="['task-time', item.today ? 'today' : '', item.overdue ? 'overdue' : '']"
:open-delay="600" :open-delay="600"
:content="item.end_at"> :content="item.end_at">
<div><Icon type="ios-time-outline"/>{{ expiresFormat(item.end_at) }}</div> <div v-if="!item.complete_at"><Icon type="ios-time-outline"/>{{ expiresFormat(item.end_at) }}</div>
</ETooltip> </ETooltip>
</div> </div>
<em v-if="item.p_name" class="priority-color" :style="{backgroundColor:item.p_color}"></em> <em v-if="item.p_name" class="priority-color" :style="{backgroundColor:item.p_color}"></em>

View File

@ -290,7 +290,7 @@
background-color: #ffffff; background-color: #ffffff;
border-radius: 12px; border-radius: 12px;
padding: 12px; padding: 12px;
transition: box-shadow 0.3s; transition: box-shadow 0.3s, opacity 0.3s;
position: relative; position: relative;
&:hover { &:hover {
box-shadow: 0 0 10px #e6ecfa; box-shadow: 0 0 10px #e6ecfa;
@ -298,14 +298,6 @@
&:first-child { &:first-child {
margin-top: 16px; margin-top: 16px;
} }
.priority-color {
position: absolute;
top: 12px;
left: 0;
width: 3px;
height: 42px;
border-radius: 2px;
}
.task-head { .task-head {
display: flex; display: flex;
align-items: flex-start; align-items: flex-start;
@ -422,6 +414,33 @@
} }
} }
} }
.priority-color {
position: absolute;
top: 12px;
left: 0;
width: 3px;
height: 42px;
max-height: 50%;
border-radius: 2px;
}
&.complete {
opacity: 0.5;
&:hover {
opacity: 0.8;
}
.task-head {
.task-title {
text-decoration: line-through;
}
}
.task-desc,
.task-tags,
.task-users,
.task-progress,
.priority-color {
display: none;
}
}
} }
} }
} }