diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index 46b84cad8..b7aba7f99 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -2916,7 +2916,9 @@ class DialogController extends AbstractController $data['avatar'] = Base::fillUrl($array['avatar'] = $avatar); } $existName = Request::exists('chat_name') || Request::exists('name'); - if ($existName && $dialog->group_type === 'user') { + // 个人群组群主可改名;全员群仅系统管理员可改名 + $canEditName = $dialog->group_type === 'user' || ($dialog->group_type === 'all' && $admin === 1); + if ($existName && $canEditName) { $chatName = trim(Request::input('chat_name') ?: Request::input('name')); if (mb_strlen($chatName) < 2) { return Base::retError('群名称至少2个字'); diff --git a/app/Models/WebSocketDialog.php b/app/Models/WebSocketDialog.php index 34a73b6f7..d390692ea 100644 --- a/app/Models/WebSocketDialog.php +++ b/app/Models/WebSocketDialog.php @@ -62,6 +62,9 @@ class WebSocketDialog extends AbstractModel { use SoftDeletes; + // 全员群初始化默认名称(双语字面量),用于识别"管理员尚未自定义"的状态 + const ALL_GROUP_DEFAULT_NAME = '全体成员 All members'; + protected $appends = ['deputy_ids']; /** @@ -366,7 +369,9 @@ class WebSocketDialog extends AbstractModel } break; case 'all': - $data['name'] = Doo::translate('全体成员'); + $data['name'] = ($data['name'] && $data['name'] !== self::ALL_GROUP_DEFAULT_NAME) + ? $data['name'] + : Doo::translate('全体成员'); $data['dialog_mute'] = Base::settingFind('system', 'all_group_mute'); break; } @@ -824,7 +829,9 @@ class WebSocketDialog extends AbstractModel $name = \DB::table('project_tasks')->where('dialog_id', $this->id)->value('name'); break; case 'all': - $name = Doo::translate('全体成员'); + $name = ($name && $name !== self::ALL_GROUP_DEFAULT_NAME) + ? $name + : Doo::translate('全体成员'); break; } } diff --git a/database/seeders/WebSocketDialogsTableSeeder.php b/database/seeders/WebSocketDialogsTableSeeder.php index 67592178e..6f1c6a268 100644 --- a/database/seeders/WebSocketDialogsTableSeeder.php +++ b/database/seeders/WebSocketDialogsTableSeeder.php @@ -218,6 +218,6 @@ class WebSocketDialogsTableSeeder extends Seeder User::botGetOrCreate('ai-claude'); $userids = User::whereBot(0)->whereNull('disable_at')->pluck('userid')->toArray(); - WebSocketDialog::createGroup("全体成员 All members", $userids, 'all'); + WebSocketDialog::createGroup(WebSocketDialog::ALL_GROUP_DEFAULT_NAME, $userids, 'all'); } } diff --git a/resources/assets/js/pages/manage/components/DialogGroupInfo.vue b/resources/assets/js/pages/manage/components/DialogGroupInfo.vue index a7515fb7f..db6d53680 100644 --- a/resources/assets/js/pages/manage/components/DialogGroupInfo.vue +++ b/resources/assets/js/pages/manage/components/DialogGroupInfo.vue @@ -6,7 +6,7 @@