From fd52db7f71db6562faa97612a2d18f4986fbd3bb Mon Sep 17 00:00:00 2001 From: kuaifan Date: Sun, 22 May 2022 23:10:08 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E7=A7=BB=E4=BA=A4?= =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Api/ProjectController.php | 8 ++++ app/Models/Project.php | 2 + app/Models/ProjectUser.php | 7 ++- ...022_05_22_225924_add_projects_personal.php | 48 +++++++++++++++++++ resources/assets/js/pages/login.vue | 3 +- 5 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 database/migrations/2022_05_22_225924_add_projects_personal.php diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index c0a179ea1..cd3d7dbcc 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -212,6 +212,7 @@ class ProjectController extends AbstractController * @apiParam {String} [flow] 开启流程 * - open: 开启 * - close: 关闭(默认) + * @apiParam {Number} [personal] 个人项目,注册成功时创建(仅支持创建一个个人项目) * * @apiSuccess {Number} ret 返回状态码(1正确、0错误) * @apiSuccess {String} msg 返回信息(错误描述) @@ -224,6 +225,7 @@ class ProjectController extends AbstractController $name = trim(Request::input('name', '')); $desc = trim(Request::input('desc', '')); $flow = trim(Request::input('flow', 'close')); + $isPersonal = intval(Request::input('personal')); if (mb_strlen($name) < 2) { return Base::retError('项目名称不可以少于2个字'); } elseif (mb_strlen($name) > 32) { @@ -260,6 +262,12 @@ class ProjectController extends AbstractController 'desc' => $desc, 'userid' => $user->userid, ]); + if ($isPersonal) { + if (Project::whereUserid($user->userid)->wherePersonal(1)->exists()) { + return Base::retError('个人项目已存在,无须重复创建'); + } + $project->personal = 1; + } AbstractModel::transaction(function() use ($flow, $insertColumns, $project) { $project->save(); ProjectUser::createInstance([ diff --git a/app/Models/Project.php b/app/Models/Project.php index d4dacc17d..c3e3314b7 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -18,6 +18,7 @@ use Request; * @property string|null $name 名称 * @property string|null $desc 描述、备注 * @property int|null $userid 创建人 + * @property int|null $personal 是否个人项目 * @property int|null $dialog_id 聊天会话ID * @property string|null $archived_at 归档时间 * @property int|null $archived_userid 归档会员 @@ -45,6 +46,7 @@ use Request; * @method static \Illuminate\Database\Eloquent\Builder|Project whereDialogId($value) * @method static \Illuminate\Database\Eloquent\Builder|Project whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Project whereName($value) + * @method static \Illuminate\Database\Eloquent\Builder|Project wherePersonal($value) * @method static \Illuminate\Database\Eloquent\Builder|Project whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Project whereUserid($value) * @method static \Illuminate\Database\Query\Builder|Project withTrashed() diff --git a/app/Models/ProjectUser.php b/app/Models/ProjectUser.php index 45c6af251..5786510e0 100644 --- a/app/Models/ProjectUser.php +++ b/app/Models/ProjectUser.php @@ -61,7 +61,12 @@ class ProjectUser extends AbstractModel $item->save(); } if ($item->project) { - $item->project->addLog("移交项目身份", ['userid' => [$originalUserid, ' => ',$newUserid]]); + if ($item->project->personal) { + $name = User::userid2nickname($originalUserid) ?: ('ID:' . $originalUserid); + $item->project->name = "【{$name}】{$item->project->name}"; + $item->project->save(); + } + $item->project->addLog("移交项目身份", ['userid' => [$originalUserid, ' => ', $newUserid]]); $item->project->syncDialogUser(); } } diff --git a/database/migrations/2022_05_22_225924_add_projects_personal.php b/database/migrations/2022_05_22_225924_add_projects_personal.php new file mode 100644 index 000000000..a7f0f5061 --- /dev/null +++ b/database/migrations/2022_05_22_225924_add_projects_personal.php @@ -0,0 +1,48 @@ +boolean('personal')->default(0)->after('userid')->nullable()->comment('是否个人项目'); + } + }); + if ($isAdd) { + // 更新数据 + \App\Models\Project::whereName('个人项目')->chunkById(100, function ($lists) { + /** @var \App\Models\Project $item */ + foreach ($lists as $item) { + if ($item->desc == '注册时系统自动创建项目,你可以自由删除。') { + $item->personal = 1; + $item->save(); + } + } + }); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('projects', function (Blueprint $table) { + $table->dropColumn("personal"); + }); + } +} diff --git a/resources/assets/js/pages/login.vue b/resources/assets/js/pages/login.vue index 061297445..99133c43c 100644 --- a/resources/assets/js/pages/login.vue +++ b/resources/assets/js/pages/login.vue @@ -466,8 +466,9 @@ export default { this.$store.dispatch("call", { url: 'project/add', data: { + personal: 1, name: this.$L('个人项目'), - desc: this.$L('注册时系统自动创建项目,你可以自由删除。') + desc: this.$L('注册时系统自动创建项目,你可以自由删除。'), }, }).then(() => { this.goNext2();