From e0ea6e830370fb3c80a03677897deed0b177c771 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Mon, 7 Jun 2021 16:30:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9A=84=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=8E=92=E5=88=B0=E5=88=97=E8=A1=A8=E6=9C=80=E5=89=8D=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/ProjectController.php | 6 +++++- app/Models/Project.php | 2 +- app/Models/ProjectColumn.php | 13 ++++++++++--- app/Models/ProjectTask.php | 9 +++++++++ .../js/pages/manage/components/ProjectList.vue | 12 ++++++------ .../js/pages/manage/components/TaskAddSimple.vue | 6 ++---- resources/assets/sass/project-list.scss | 1 + 7 files changed, 34 insertions(+), 15 deletions(-) diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 1aa59339..e89f1b80 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -503,6 +503,7 @@ class ProjectController extends AbstractController 'name' => $name, 'color' => $color, ]); + $column->sort = intval(ProjectColumn::whereProjectId($project->id)->orderByDesc('sort')->value('sort')) + 1; $column->save(); return Base::retSuccess('添加成功', $column); } @@ -546,7 +547,7 @@ class ProjectController extends AbstractController } /** - * {post}添加任务 + * {post} 添加任务 * * @apiParam {Number} project_id 项目ID * @apiParam {Number} [column_id] 列表ID,留空取第一个 @@ -555,6 +556,7 @@ class ProjectController extends AbstractController * @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] 添加的任务排到列表最前面 */ public function task__add() { @@ -574,6 +576,7 @@ class ProjectController extends AbstractController $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) ->join('project_users', 'projects.id', '=', 'project_users.project_id') @@ -617,6 +620,7 @@ class ProjectController extends AbstractController 'p_level' => $p_level, 'p_name' => $p_name, 'p_color' => $p_color, + 'top' => $top, ]); } } diff --git a/app/Models/Project.php b/app/Models/Project.php index dab0ee1f..b3229665 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -65,7 +65,7 @@ class Project extends AbstractModel */ public function projectColumn(): \Illuminate\Database\Eloquent\Relations\HasMany { - return $this->hasMany(projectColumn::class, 'project_id', 'id')->orderBy('id'); + return $this->hasMany(projectColumn::class, 'project_id', 'id')->orderBy('sort')->orderBy('id'); } /** diff --git a/app/Models/ProjectColumn.php b/app/Models/ProjectColumn.php index 7cbf2687..8d2be94b 100644 --- a/app/Models/ProjectColumn.php +++ b/app/Models/ProjectColumn.php @@ -12,20 +12,27 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @property int $id * @property int|null $project_id 项目ID * @property string|null $name 列表名称 - * @property int|null $inorder 排序(ASC) + * @property string|null $color 颜色 + * @property int|null $sort 排序(ASC) * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at + * @property \Illuminate\Support\Carbon|null $deleted_at * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ProjectTask[] $projectTask * @property-read int|null $project_task_count * @method static \Illuminate\Database\Eloquent\Builder|ProjectColumn newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|ProjectColumn newQuery() + * @method static \Illuminate\Database\Query\Builder|ProjectColumn onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|ProjectColumn query() + * @method static \Illuminate\Database\Eloquent\Builder|ProjectColumn whereColor($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectColumn whereCreatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|ProjectColumn whereDeletedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectColumn whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|ProjectColumn whereInorder($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectColumn whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectColumn whereProjectId($value) + * @method static \Illuminate\Database\Eloquent\Builder|ProjectColumn whereSort($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectColumn whereUpdatedAt($value) + * @method static \Illuminate\Database\Query\Builder|ProjectColumn withTrashed() + * @method static \Illuminate\Database\Query\Builder|ProjectColumn withoutTrashed() * @mixin \Eloquent */ class ProjectColumn extends AbstractModel @@ -37,7 +44,7 @@ class ProjectColumn extends AbstractModel */ public function projectTask(): \Illuminate\Database\Eloquent\Relations\HasMany { - return $this->hasMany(projectTask::class, 'column_id', 'id')->orderByDesc('id'); + return $this->hasMany(projectTask::class, 'column_id', 'id')->orderBy('sort')->orderBy('id'); } /** diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index e111e46b..8ee75a55 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -24,6 +24,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @property int|null $p_level 优先级 * @property string|null $p_name 优先级名称 * @property string|null $p_color 优先级颜色 + * @property int|null $sort 排序(ASC) * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property \Illuminate\Support\Carbon|null $deleted_at @@ -57,6 +58,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask wherePName($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereParentId($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereProjectId($value) + * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereSort($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereStartAt($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereUserid($value) @@ -224,6 +226,7 @@ class ProjectTask extends AbstractModel $p_level = intval($params['p_level']); $p_name = $params['p_name']; $p_color = $params['p_color']; + $top = intval($params['top']); // $retPre = $parent_id ? '子任务' : '任务'; $task = self::createInstance(); @@ -263,6 +266,12 @@ class ProjectTask extends AbstractModel } // 创建人 $task->userid = User::token2userid(); + // 排序位置 + if ($top) { + $task->sort = intval(self::whereColumnId($task->column_id)->orderBy('sort')->value('sort')) - 1; + } else { + $task->sort = intval(self::whereColumnId($task->column_id)->orderByDesc('sort')->value('sort')) + 1; + } // return AbstractModel::transaction(function() use ($subtasks, $content, $owner, $task) { $task->save(); diff --git a/resources/assets/js/pages/manage/components/ProjectList.vue b/resources/assets/js/pages/manage/components/ProjectList.vue index d18abcc9..d62e9397 100644 --- a/resources/assets/js/pages/manage/components/ProjectList.vue +++ b/resources/assets/js/pages/manage/components/ProjectList.vue @@ -77,16 +77,16 @@ - +
    -
  • +
  • @@ -550,8 +550,8 @@ export default { this.addShow = true; }, - addBefore(column) { - this.$set(column, 'addBefore', true); + addTop(column) { + this.$set(column, 'addTop', true); this.$refs['column_' + column.id][0].scrollTop = 0; }, diff --git a/resources/assets/js/pages/manage/components/TaskAddSimple.vue b/resources/assets/js/pages/manage/components/TaskAddSimple.vue index 7cc6b770..5a248b53 100644 --- a/resources/assets/js/pages/manage/components/TaskAddSimple.vue +++ b/resources/assets/js/pages/manage/components/TaskAddSimple.vue @@ -43,7 +43,7 @@ export default { columnId: { default: '' }, - addBefore: { + addTop: { type: Boolean, default: false }, @@ -99,9 +99,7 @@ export default { this.addData.project_id = this.projectId; this.addData.column_id = this.columnId; this.addData.owner = [this.userId]; - if (this.addBefore) { - this.addData.add_before = true; - } + this.addData.top = this.addTop ? 1 : 0; return $A.cloneJSON(this.addData); }, diff --git a/resources/assets/sass/project-list.scss b/resources/assets/sass/project-list.scss index 316b70ae..6c2dc303 100644 --- a/resources/assets/sass/project-list.scss +++ b/resources/assets/sass/project-list.scss @@ -166,6 +166,7 @@ color: #888888; cursor: pointer; background-color: #F2F3F5; + border-radius: 4px; &:hover { color: #777777; }