no message

This commit is contained in:
kuaifan 2021-06-15 16:46:56 +08:00
parent eaf6bcb896
commit e2ae2536b3
7 changed files with 157 additions and 75 deletions

View File

@ -18,6 +18,11 @@ class ApiException extends RuntimeException
*/ */
public function __construct($msg = '', $data = [], $code = 0) public function __construct($msg = '', $data = [], $code = 0)
{ {
if (is_array($msg) && isset($msg['code'])) {
$code = $msg['code'];
$data = $msg['data'];
$msg = $msg['msg'];
}
$this->data = $data; $this->data = $data;
parent::__construct($msg, $code); parent::__construct($msg, $code);
} }

View File

@ -96,7 +96,7 @@ class ProjectController extends AbstractController
* 添加项目 * 添加项目
* *
* @apiParam {String} name 项目名称 * @apiParam {String} name 项目名称
* @apiParam {String} [desc] 项目描述 * @apiParam {String} [desc] 项目介绍
* @apiParam {Array} [columns] 流程,格式[流程1, 流程2] * @apiParam {Array} [columns] 流程,格式[流程1, 流程2]
*/ */
public function add() public function add()
@ -111,7 +111,7 @@ class ProjectController extends AbstractController
return Base::retError('项目名称最多只能设置32个字'); return Base::retError('项目名称最多只能设置32个字');
} }
if (mb_strlen($desc) > 255) { if (mb_strlen($desc) > 255) {
return Base::retError('项目描述最多只能设置255个字'); return Base::retError('项目介绍最多只能设置255个字');
} }
//流程 //流程
$columns = Request::input('columns'); $columns = Request::input('columns');
@ -153,6 +153,7 @@ class ProjectController extends AbstractController
$column['project_id'] = $project->id; $column['project_id'] = $project->id;
ProjectColumn::createInstance($column)->save(); ProjectColumn::createInstance($column)->save();
} }
$project->addLog("创建项目");
return Base::retSuccess('添加成功', $project->find($project->id)); return Base::retSuccess('添加成功', $project->find($project->id));
}); });
} }
@ -162,7 +163,7 @@ class ProjectController extends AbstractController
* *
* @apiParam {Number} project_id 项目ID * @apiParam {Number} project_id 项目ID
* @apiParam {String} name 项目名称 * @apiParam {String} name 项目名称
* @apiParam {String} [desc] 项目描述 * @apiParam {String} [desc] 项目介绍
*/ */
public function edit() public function edit()
{ {
@ -177,7 +178,7 @@ class ProjectController extends AbstractController
return Base::retError('项目名称最多只能设置32个字'); return Base::retError('项目名称最多只能设置32个字');
} }
if (mb_strlen($desc) > 255) { if (mb_strlen($desc) > 255) {
return Base::retError('项目描述最多只能设置255个字'); return Base::retError('项目介绍最多只能设置255个字');
} }
// //
$project = Project::userProject($project_id); $project = Project::userProject($project_id);
@ -185,8 +186,14 @@ class ProjectController extends AbstractController
return Base::retError('你不是项目负责人'); return Base::retError('你不是项目负责人');
} }
// //
$project->name = $name; if ($project->name != $name) {
$project->desc = $desc; $project->name = $name;
$project->addLog("修改项目名称:{$project->name} => {$name}");
}
if ($project->desc != $desc) {
$project->desc = $desc;
$project->addLog("修改项目介绍");
}
$project->save(); $project->save();
// //
return Base::retSuccess('修改成功', $project); return Base::retSuccess('修改成功', $project);
@ -220,6 +227,7 @@ class ProjectController extends AbstractController
]); ]);
$index++; $index++;
} }
$project->addLog("调整列表排序");
} else { } else {
// 排序任务 // 排序任务
foreach ($sort as $item) { foreach ($sort as $item) {
@ -238,6 +246,7 @@ class ProjectController extends AbstractController
$index++; $index++;
} }
} }
$project->addLog("调整任务排序");
} }
return Base::retSuccess('调整成功'); return Base::retSuccess('调整成功');
} }
@ -270,6 +279,7 @@ class ProjectController extends AbstractController
} }
ProjectUser::whereProjectId($project->id)->whereNotIn('userid', $array)->delete(); ProjectUser::whereProjectId($project->id)->whereNotIn('userid', $array)->delete();
$project->syncDialogUser(); $project->syncDialogUser();
$project->addLog("修改项目成员");
return Base::retSuccess('修改成功'); return Base::retSuccess('修改成功');
}); });
} }
@ -305,6 +315,7 @@ class ProjectController extends AbstractController
'owner' => 1, 'owner' => 1,
]); ]);
$project->syncDialogUser(); $project->syncDialogUser();
$project->addLog("移交项目给会员ID" . $owner_userid);
// //
return Base::retSuccess('移交成功'); return Base::retSuccess('移交成功');
}); });
@ -330,6 +341,7 @@ class ProjectController extends AbstractController
return AbstractModel::transaction(function() use ($user, $project) { return AbstractModel::transaction(function() use ($user, $project) {
ProjectUser::whereProjectId($project->id)->whereUserid($user->userid)->delete(); ProjectUser::whereProjectId($project->id)->whereUserid($user->userid)->delete();
$project->syncDialogUser(); $project->syncDialogUser();
$project->addLog("会员ID" . $user->userid . " 退出项目");
return Base::retSuccess('退出成功'); return Base::retSuccess('退出成功');
}); });
} }
@ -380,6 +392,7 @@ class ProjectController extends AbstractController
]); ]);
$column->sort = intval(ProjectColumn::whereProjectId($project->id)->orderByDesc('sort')->value('sort')) + 1; $column->sort = intval(ProjectColumn::whereProjectId($project->id)->orderByDesc('sort')->value('sort')) + 1;
$column->save(); $column->save();
$column->addLog("创建列表:" . $column->name);
// //
$data = $column->find($column->id); $data = $column->find($column->id);
$data->project_task = []; $data->project_task = [];
@ -414,8 +427,14 @@ class ProjectController extends AbstractController
return Base::retError('项目不存在或不在成员列表内'); return Base::retError('项目不存在或不在成员列表内');
} }
// //
if (Arr::exists($data, 'name')) $column->name = $data['name']; if (Arr::exists($data, 'name') && $column->name != $data['name']) {
if (Arr::exists($data, 'color')) $column->color = $data['color']; $column->addLog("修改列表名称:{$column->name} => {$data['name']}");
$column->name = $data['name'];
}
if (Arr::exists($data, 'color') && $column->color != $data['color']) {
$column->addLog("修改列表颜色:{$column->color} => {$data['color']}");
$column->color = $data['color'];
}
$column->save(); $column->save();
return Base::retSuccess('修改成功', $column); return Base::retSuccess('修改成功', $column);
} }
@ -462,9 +481,9 @@ class ProjectController extends AbstractController
// //
$task_id = intval(Request::input('task_id')); $task_id = intval(Request::input('task_id'));
// //
list($task, $project) = ProjectTask::userTask($task_id, ['taskUser', 'taskTag']); $task = ProjectTask::userTask($task_id, ['taskUser', 'taskTag']);
// //
$task->project_name = $project->name; $task->project_name = ProjectColumn::whereId($task->project_id)->value('name');
$task->column_name = ProjectColumn::whereId($task->column_id)->value('name'); $task->column_name = ProjectColumn::whereId($task->column_id)->value('name');
// //
return Base::retSuccess('success', $task); return Base::retSuccess('success', $task);
@ -481,7 +500,7 @@ class ProjectController extends AbstractController
// //
$task_id = intval(Request::input('task_id')); $task_id = intval(Request::input('task_id'));
// //
list($task, $project) = ProjectTask::userTask($task_id); $task = ProjectTask::userTask($task_id);
// //
$data = ProjectTask::with(['taskUser', 'taskTag'])->where('parent_id', $task->id)->whereNull('archived_at')->get(); $data = ProjectTask::with(['taskUser', 'taskTag'])->where('parent_id', $task->id)->whereNull('archived_at')->get();
return Base::retSuccess('success', $data); return Base::retSuccess('success', $data);
@ -498,7 +517,7 @@ class ProjectController extends AbstractController
// //
$task_id = intval(Request::input('task_id')); $task_id = intval(Request::input('task_id'));
// //
list($task, $project) = ProjectTask::userTask($task_id); $task = ProjectTask::userTask($task_id);
// //
return Base::retSuccess('success', $task->content ?: json_decode('{}')); return Base::retSuccess('success', $task->content ?: json_decode('{}'));
} }
@ -514,7 +533,7 @@ class ProjectController extends AbstractController
// //
$task_id = intval(Request::input('task_id')); $task_id = intval(Request::input('task_id'));
// //
list($task, $project) = ProjectTask::userTask($task_id); $task = ProjectTask::userTask($task_id);
// //
return Base::retSuccess('success', $task->taskFile); return Base::retSuccess('success', $task->taskFile);
} }
@ -559,6 +578,7 @@ class ProjectController extends AbstractController
]); ]);
$column->sort = intval(ProjectColumn::whereProjectId($project->id)->orderByDesc('sort')->value('sort')) + 1; $column->sort = intval(ProjectColumn::whereProjectId($project->id)->orderByDesc('sort')->value('sort')) + 1;
$column->save(); $column->save();
$column->addLog("创建列表:" . $column->name);
$newColumn = $column->find($column->id); $newColumn = $column->find($column->id);
$newColumn->project_task = []; $newColumn->project_task = [];
} }
@ -566,19 +586,16 @@ class ProjectController extends AbstractController
return Base::retError('任务列表不存在或已被删除'); return Base::retError('任务列表不存在或已被删除');
} }
// //
$result = ProjectTask::addTask(array_merge($data, [ $task = 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,
])); ]));
if (Base::isSuccess($result)) { return Base::retSuccess('添加成功', [
$result['data'] = [ 'new_column' => $newColumn,
'new_column' => $newColumn, 'in_top' => intval($data['top']),
'in_top' => intval($data['top']), 'task' => ProjectTask::with(['taskUser', 'taskTag'])->find($task->id),
'task' => ProjectTask::with(['taskUser', 'taskTag'])->find($result['data']['id']), ]);
];
}
return $result;
} }
/** /**
@ -594,22 +611,19 @@ class ProjectController extends AbstractController
$task_id = intval(Request::input('task_id')); $task_id = intval(Request::input('task_id'));
$name = Request::input('name'); $name = Request::input('name');
// //
list($task, $project) = ProjectTask::userTask($task_id); $task = ProjectTask::userTask($task_id);
// //
$result = ProjectTask::addTask([ $task = ProjectTask::addTask([
'name' => $name, 'name' => $name,
'parent_id' => $task->id, 'parent_id' => $task->id,
'project_id' => $task->project_id, 'project_id' => $task->project_id,
'column_id' => $task->column_id, 'column_id' => $task->column_id,
]); ]);
if (Base::isSuccess($result)) { return Base::retSuccess('添加成功', [
$result['data'] = [ 'new_column' => null,
'new_column' => null, 'in_top' => 0,
'in_top' => 0, 'task' => ProjectTask::with(['taskUser', 'taskTag'])->find($task->id),
'task' => ProjectTask::with(['taskUser', 'taskTag'])->find($result['data']['id']), ]);
];
}
return $result;
} }
/** /**
@ -636,7 +650,7 @@ class ProjectController extends AbstractController
parse_str(Request::getContent(), $data); parse_str(Request::getContent(), $data);
$task_id = intval($data['task_id']); $task_id = intval($data['task_id']);
// //
list($task, $project) = ProjectTask::userTask($task_id); $task = ProjectTask::userTask($task_id);
// //
if (Base::isDate($data['complete_at'])) { if (Base::isDate($data['complete_at'])) {
// 标记已完成 // 标记已完成
@ -674,7 +688,7 @@ class ProjectController extends AbstractController
// //
$task_id = Base::getPostInt('task_id'); $task_id = Base::getPostInt('task_id');
// //
list($task, $project) = ProjectTask::userTask($task_id); $task = ProjectTask::userTask($task_id);
// //
$path = "uploads/task/" . $task->id . "/"; $path = "uploads/task/" . $task->id . "/";
$image64 = Base::getPostValue('image64'); $image64 = Base::getPostValue('image64');
@ -709,6 +723,7 @@ class ProjectController extends AbstractController
'userid' => $user->userid, 'userid' => $user->userid,
]); ]);
$file->save(); $file->save();
$task->addLog("上传文件:" . $file->name);
return Base::retSuccess("上传成功", $file->find($file->id)); return Base::retSuccess("上传成功", $file->find($file->id));
} }
} }
@ -724,7 +739,7 @@ class ProjectController extends AbstractController
// //
$task_id = intval(Request::input('task_id')); $task_id = intval(Request::input('task_id'));
// //
list($task, $project) = ProjectTask::userTask($task_id); $task = ProjectTask::userTask($task_id);
// //
if ($task->parent_id > 0) { if ($task->parent_id > 0) {
return Base::retError('子任务不支持此功能'); return Base::retError('子任务不支持此功能');
@ -759,7 +774,7 @@ class ProjectController extends AbstractController
// //
$task_id = intval(Request::input('task_id')); $task_id = intval(Request::input('task_id'));
// //
list($task, $project) = ProjectTask::userTask($task_id); $task = ProjectTask::userTask($task_id);
// //
if ($task->parent_id > 0) { if ($task->parent_id > 0) {
return Base::retError('子任务不支持此功能'); return Base::retError('子任务不支持此功能');
@ -779,7 +794,7 @@ class ProjectController extends AbstractController
// //
$task_id = intval(Request::input('task_id')); $task_id = intval(Request::input('task_id'));
// //
list($task, $project) = ProjectTask::userTask($task_id); $task = ProjectTask::userTask($task_id);
// //
return $task->deleteTask(); return $task->deleteTask();
} }

View File

@ -260,6 +260,7 @@ class Project extends AbstractModel
$column->deleteColumn(); $column->deleteColumn();
} }
if ($this->delete()) { if ($this->delete()) {
$this->addLog("删除项目");
return Base::retSuccess('删除成功', $this->toArray()); return Base::retSuccess('删除成功', $this->toArray());
} else { } else {
return Base::retError('删除失败', $this->toArray()); return Base::retError('删除失败', $this->toArray());
@ -268,6 +269,25 @@ class Project extends AbstractModel
return Base::isSuccess($result); return Base::isSuccess($result);
} }
/**
* 添加项目日志
* @param string $detail
* @param int $userid
* @return ProjectLog
*/
public function addLog($detail, $userid = 0)
{
$log = ProjectLog::createInstance([
'project_id' => $this->id,
'column_id' => 0,
'task_id' => 0,
'userid' => $userid ?: User::token2userid(),
'detail' => $detail,
]);
$log->save();
return $log;
}
/** /**
* 根据用户获取项目信息(用于判断会员是否存在项目内) * 根据用户获取项目信息(用于判断会员是否存在项目内)
* @param int $project_id * @param int $project_id

View File

@ -59,6 +59,7 @@ class ProjectColumn extends AbstractModel
$task->deleteTask(); $task->deleteTask();
} }
if ($this->delete()) { if ($this->delete()) {
$this->addLog("删除列表:" . $this->name);
return Base::retSuccess('删除成功', $this->toArray()); return Base::retSuccess('删除成功', $this->toArray());
} else { } else {
return Base::retError('删除失败', $this->toArray()); return Base::retError('删除失败', $this->toArray());
@ -66,4 +67,23 @@ class ProjectColumn extends AbstractModel
}); });
return Base::isSuccess($result); return Base::isSuccess($result);
} }
/**
* 添加项目日志
* @param string $detail
* @param int $userid
* @return ProjectLog
*/
public function addLog($detail, $userid = 0)
{
$log = ProjectLog::createInstance([
'project_id' => $this->project_id,
'column_id' => $this->id,
'task_id' => 0,
'userid' => $userid ?: User::token2userid(),
'detail' => $detail,
]);
$log->save();
return $log;
}
} }

View File

@ -4,26 +4,7 @@ namespace App\Models;
/** /**
* Class ProjectLog * Class ProjectLog
*
* @package App\Models * @package App\Models
* @property int $id
* @property int|null $project_id 项目ID
* @property int|null $task_id 项目ID
* @property int|null $userid 会员ID
* @property string|null $detail 详细信息
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog query()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog whereDetail($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog whereProjectId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog whereTaskId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog whereUserid($value)
* @mixin \Eloquent
*/ */
class ProjectLog extends AbstractModel class ProjectLog extends AbstractModel
{ {

View File

@ -241,7 +241,7 @@ class ProjectTask extends AbstractModel
/** /**
* 添加任务 * 添加任务
* @param $data * @param $data
* @return array|bool * @return self
*/ */
public static function addTask($data) public static function addTask($data)
{ {
@ -272,9 +272,9 @@ class ProjectTask extends AbstractModel
} }
// 标题 // 标题
if (empty($name)) { if (empty($name)) {
return Base::retError($retPre . '描述不能为空'); throw new ApiException($retPre . '描述不能为空');
} elseif (mb_strlen($name) > 255) { } elseif (mb_strlen($name) > 255) {
return Base::retError($retPre . '描述最多只能设置255个字'); throw new ApiException($retPre . '描述最多只能设置255个字');
} }
$task->name = $name; $task->name = $name;
// 时间 // 时间
@ -290,7 +290,7 @@ class ProjectTask extends AbstractModel
// 负责人 // 负责人
$owner = intval($owner) ?: User::token2userid(); $owner = intval($owner) ?: User::token2userid();
if (!ProjectUser::whereProjectId($project_id)->whereUserid($owner)->exists()) { if (!ProjectUser::whereProjectId($project_id)->whereUserid($owner)->exists()) {
return Base::retError($retPre . '负责人填写错误'); throw new ApiException($retPre . '负责人填写错误');
} }
// 创建人 // 创建人
$task->userid = User::token2userid(); $task->userid = User::token2userid();
@ -301,7 +301,7 @@ class ProjectTask extends AbstractModel
$task->sort = intval(self::whereColumnId($task->column_id)->orderByDesc('sort')->value('sort')) + 1; $task->sort = intval(self::whereColumnId($task->column_id)->orderByDesc('sort')->value('sort')) + 1;
} }
// //
return AbstractModel::transaction(function() use ($subtasks, $content, $owner, $task) { $result = AbstractModel::transaction(function() use ($subtasks, $content, $owner, $task) {
$task->save(); $task->save();
if ($owner) { if ($owner) {
ProjectTaskUser::createInstance([ ProjectTaskUser::createInstance([
@ -329,10 +329,13 @@ class ProjectTask extends AbstractModel
} }
} }
} }
return Base::retSuccess('添加成功', [ $task->addLog("创建{任务}" . $task->name);
'id' => $task->id return Base::retSuccess('success', $task);
]);
}); });
if (Base::isError($result)) {
throw new ApiException($result);
}
return $result['data'];
} }
/** /**
@ -344,13 +347,14 @@ class ProjectTask extends AbstractModel
{ {
return AbstractModel::transaction(function () use ($data) { return AbstractModel::transaction(function () use ($data) {
// 标题 // 标题
if (Arr::exists($data, 'name')) { if (Arr::exists($data, 'name') && $this->name != $data['name']) {
if (empty($data['name'])) { if (empty($data['name'])) {
return Base::retError('任务描述不能为空'); return Base::retError('任务描述不能为空');
} elseif (mb_strlen($data['name']) > 255) { } elseif (mb_strlen($data['name']) > 255) {
return Base::retError('任务描述最多只能设置255个字'); return Base::retError('任务描述最多只能设置255个字');
} }
$this->name = $data['name']; $this->name = $data['name'];
$this->addLog("修改{任务}标题:{$this->name} => {$data['name']}");
} }
// 负责人 // 负责人
if (Arr::exists($data, 'owner')) { if (Arr::exists($data, 'owner')) {
@ -370,6 +374,7 @@ class ProjectTask extends AbstractModel
'owner' => 1, 'owner' => 1,
]); ]);
$this->syncDialogUser(); $this->syncDialogUser();
$this->addLog("修改{任务}负责人为会员ID" . $owner);
} }
} }
// 计划时间 // 计划时间
@ -384,6 +389,7 @@ class ProjectTask extends AbstractModel
$this->end_at = Carbon::parse($end); $this->end_at = Carbon::parse($end);
} }
} }
$this->addLog("修改{任务}时间");
} }
// 以下紧顶级任务可修改 // 以下紧顶级任务可修改
if ($this->parent_id === 0) { if ($this->parent_id === 0) {
@ -406,10 +412,12 @@ class ProjectTask extends AbstractModel
} }
ProjectTaskUser::whereTaskId($this->id)->where('owner', '!=', 1)->whereNotIn('userid', $array)->delete(); ProjectTaskUser::whereTaskId($this->id)->where('owner', '!=', 1)->whereNotIn('userid', $array)->delete();
$this->syncDialogUser(); $this->syncDialogUser();
$this->addLog("修改协助人员");
} }
// 背景色 // 背景色
if (Arr::exists($data, 'color')) { if (Arr::exists($data, 'color') && $this->color != $data['color']) {
$this->color = $data['color']; $this->color = $data['color'];
$this->addLog("修改任务背景色:{$this->color} => {$data['color']}");
} }
// 内容 // 内容
if (Arr::exists($data, 'content')) { if (Arr::exists($data, 'content')) {
@ -420,16 +428,24 @@ class ProjectTask extends AbstractModel
'content' => $data['content'], 'content' => $data['content'],
]); ]);
$this->desc = Base::getHtml($data['content']); $this->desc = Base::getHtml($data['content']);
$this->addLog("修改任务详细描述");
} }
// 优先级 // 优先级
if (Arr::exists($data, 'p_level')) { $p = false;
if (Arr::exists($data, 'p_level') && $this->p_level != $data['p_level']) {
$this->p_level = intval($data['p_level']); $this->p_level = intval($data['p_level']);
$p = true;
} }
if (Arr::exists($data, 'p_name')) { if (Arr::exists($data, 'p_name') && $this->p_name != $data['p_name']) {
$this->p_name = trim($data['p_name']); $this->p_name = trim($data['p_name']);
$p = true;
} }
if (Arr::exists($data, 'p_color')) { if (Arr::exists($data, 'p_color') && $this->p_color != $data['p_color']) {
$this->p_color = trim($data['p_color']); $this->p_color = trim($data['p_color']);
$p = true;
}
if ($p) {
$this->addLog("修改任务优先级");
} }
} }
$this->save(); $this->save();
@ -519,6 +535,7 @@ class ProjectTask extends AbstractModel
if ($complete_at === null) { if ($complete_at === null) {
// 标记未完成 // 标记未完成
$this->complete_at = null; $this->complete_at = null;
$this->addLog("{任务}标记未完成:" . $this->name);
} else { } else {
// 标记已完成 // 标记已完成
if ($this->parent_id == 0) { if ($this->parent_id == 0) {
@ -527,6 +544,7 @@ class ProjectTask extends AbstractModel
} }
} }
$this->complete_at = $complete_at; $this->complete_at = $complete_at;
$this->addLog("{任务}标记已完成:" . $this->name);
} }
$this->save(); $this->save();
return Base::retSuccess('修改成功'); return Base::retSuccess('修改成功');
@ -542,11 +560,13 @@ class ProjectTask extends AbstractModel
{ {
return AbstractModel::transaction(function () use ($archived_at) { return AbstractModel::transaction(function () use ($archived_at) {
if ($archived_at === null) { if ($archived_at === null) {
// 标记未完成 // 取消归档
$this->archived_at = null; $this->archived_at = null;
$this->addLog("任务取消归档:" . $this->name);
} else { } else {
// 标记已完成 // 归档任务
$this->archived_at = $archived_at; $this->archived_at = $archived_at;
$this->addLog("任务归档:" . $this->name);
} }
$this->save(); $this->save();
return Base::retSuccess('修改成功', $this->toArray()); return Base::retSuccess('修改成功', $this->toArray());
@ -564,6 +584,7 @@ class ProjectTask extends AbstractModel
WebSocketDialog::whereId($this->dialog_id)->delete(); WebSocketDialog::whereId($this->dialog_id)->delete();
} }
if ($this->delete()) { if ($this->delete()) {
$this->addLog("删除{任务}" . $this->name);
return Base::retSuccess('删除成功', $this->toArray()); return Base::retSuccess('删除成功', $this->toArray());
} else { } else {
return Base::retError('删除失败', $this->toArray()); return Base::retError('删除失败', $this->toArray());
@ -571,11 +592,31 @@ class ProjectTask extends AbstractModel
}); });
} }
/**
* 添加任务日志
* @param string $detail
* @param int $userid
* @return ProjectLog
*/
public function addLog($detail, $userid = 0)
{
$detail = str_replace("{任务}", $this->parent_id > 0 ? "子任务" : "任务", $detail);
$log = ProjectLog::createInstance([
'project_id' => $this->project_id,
'column_id' => $this->column_id,
'task_id' => $this->parent_id ?: $this->id,
'userid' => $userid ?: User::token2userid(),
'detail' => $detail,
]);
$log->save();
return $log;
}
/** /**
* 根据会员ID获取任务、项目信息用于判断会员是否存在项目内 * 根据会员ID获取任务、项目信息用于判断会员是否存在项目内
* @param int $task_id * @param int $task_id
* @param array $with * @param array $with
* @return array(ProjectTask, Project) * @return self
*/ */
public static function userTask($task_id, $with = []) public static function userTask($task_id, $with = [])
{ {
@ -583,7 +624,7 @@ class ProjectTask extends AbstractModel
if (empty($task)) { if (empty($task)) {
throw new ApiException('任务不存在'); throw new ApiException('任务不存在');
} }
// 项目 //
$project = Project::select([ 'projects.*', 'project_users.owner' ]) $project = Project::select([ 'projects.*', 'project_users.owner' ])
->join('project_users', 'projects.id', '=', 'project_users.project_id') ->join('project_users', 'projects.id', '=', 'project_users.project_id')
->where('projects.id', $task->project_id) ->where('projects.id', $task->project_id)
@ -592,6 +633,6 @@ class ProjectTask extends AbstractModel
if (empty($project)) { if (empty($project)) {
throw new ApiException('项目不存在或不在成员列表内'); throw new ApiException('项目不存在或不在成员列表内');
} }
return [$task, $project]; return $task;
} }
} }

View File

@ -309,7 +309,7 @@
<FormItem prop="name" :label="$L('项目名称')"> <FormItem prop="name" :label="$L('项目名称')">
<Input type="text" v-model="settingData.name" :maxlength="32" :placeholder="$L('必填')"></Input> <Input type="text" v-model="settingData.name" :maxlength="32" :placeholder="$L('必填')"></Input>
</FormItem> </FormItem>
<FormItem prop="desc" :label="$L('项目描述')"> <FormItem prop="desc" :label="$L('项目介绍')">
<Input type="textarea" :autosize="{ minRows: 3, maxRows: 5 }" v-model="settingData.desc" :maxlength="255" :placeholder="$L('选填')"></Input> <Input type="textarea" :autosize="{ minRows: 3, maxRows: 5 }" v-model="settingData.desc" :maxlength="255" :placeholder="$L('选填')"></Input>
</FormItem> </FormItem>
</Form> </Form>