From 6895fd05be902a55b591ded08816b52931c82359 Mon Sep 17 00:00:00 2001 From: congsh Date: Fri, 17 Apr 2026 17:53:58 +0800 Subject: [PATCH] feat: add group management - create, join, member panel with owner controls Co-Authored-By: Claude Opus 4.7 --- .../components/group/CreateGroupDialog.vue | 103 +++++++++ .../components/group/GroupMembersPanel.vue | 218 ++++++++++++++++++ .../src/components/group/JoinGroupDialog.vue | 147 ++++++++++++ frontend/src/views/GroupView.vue | 50 +--- frontend/src/views/Layout.vue | 31 +++ 5 files changed, 502 insertions(+), 47 deletions(-) create mode 100644 frontend/src/components/group/CreateGroupDialog.vue create mode 100644 frontend/src/components/group/GroupMembersPanel.vue create mode 100644 frontend/src/components/group/JoinGroupDialog.vue diff --git a/frontend/src/components/group/CreateGroupDialog.vue b/frontend/src/components/group/CreateGroupDialog.vue new file mode 100644 index 0000000..9e122a2 --- /dev/null +++ b/frontend/src/components/group/CreateGroupDialog.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/frontend/src/components/group/GroupMembersPanel.vue b/frontend/src/components/group/GroupMembersPanel.vue new file mode 100644 index 0000000..c3579dc --- /dev/null +++ b/frontend/src/components/group/GroupMembersPanel.vue @@ -0,0 +1,218 @@ + + + + + diff --git a/frontend/src/components/group/JoinGroupDialog.vue b/frontend/src/components/group/JoinGroupDialog.vue new file mode 100644 index 0000000..0fef1d0 --- /dev/null +++ b/frontend/src/components/group/JoinGroupDialog.vue @@ -0,0 +1,147 @@ + + + + + diff --git a/frontend/src/views/GroupView.vue b/frontend/src/views/GroupView.vue index de45461..428664e 100644 --- a/frontend/src/views/GroupView.vue +++ b/frontend/src/views/GroupView.vue @@ -5,6 +5,7 @@ import { useRoute } from 'vue-router' import { useGroupStore } from '@/stores/group' import TeamSessionPanel from '@/components/team/TeamSessionPanel.vue' import IdleMembersList from '@/components/team/IdleMembersList.vue' +import GroupMembersPanel from '@/components/group/GroupMembersPanel.vue' const route = useRoute() const groupStore = useGroupStore() @@ -133,54 +134,9 @@ async function refreshMembers() { - + diff --git a/frontend/src/views/Layout.vue b/frontend/src/views/Layout.vue index 524521c..3856830 100644 --- a/frontend/src/views/Layout.vue +++ b/frontend/src/views/Layout.vue @@ -8,6 +8,8 @@ import { useNotificationStore } from '@/stores/notification' import StatusToggle from '@/components/team/StatusToggle.vue' import WorkScheduleModal from '@/components/team/WorkScheduleModal.vue' import NotificationPanel from '@/components/common/NotificationPanel.vue' +import CreateGroupDialog from '@/components/group/CreateGroupDialog.vue' +import JoinGroupDialog from '@/components/group/JoinGroupDialog.vue' const router = useRouter() const route = useRoute() @@ -17,6 +19,8 @@ const teamStore = useTeamStore() const notificationStore = useNotificationStore() const showScheduleModal = ref(false) +const showCreateGroup = ref(false) +const showJoinGroup = ref(false) onMounted(async () => { await userStore.initUser() @@ -67,6 +71,10 @@ function goHome() {