From a69846de93874885af08846b8c7b9a341158d036 Mon Sep 17 00:00:00 2001 From: QAyong Date: Tue, 29 Sep 2026 02:42:45 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(buddy):=20=E4=BC=9A=E8=AF=9D=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E9=BB=98=E8=AE=A4=E6=98=BE=E7=A4=BA=205=20=E6=9D=A1?= =?UTF-8?q?=E5=B9=B6=E6=94=AF=E6=8C=81=E5=B1=95=E5=BC=80=E5=85=B6=E4=BD=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 侧栏会话较多时列表会把「置顶 / 空间 / 任务」挤变形,需要在默认状态下收敛长度。 - 每个分组(任务分组、每个空间)默认只渲染 5 条会话;超出时在列表末尾追加一条「展开其余 N 个」行,点击后该分组全部展开 - 不提供收起按钮,改由三个时机自动收回:展开另一个分组(手风琴,同时只允许一个分组展开)、折叠该分组本身、离开任务页或重启应用 - 展开状态只存在内存中,不写入配置(不持久化) - 投影层新增 expand 行类型与 conversationLimit / expandedConversationGroups 入参;globalTasks(原始任务数组)改为 taskRows(含合成展开行的行数组) - 新增 DesktopTaskSidebarExpandRow 组件,与任务行同高同内边距,空间内的会话缩进对齐 - 新增 i18n:desktop.tasks.expandRemaining(中/英) - 投影测试新增 4 例:任务分组截断与计数、展开后全显示、空间独立截断、不足 5 条时不出现展开行 --- apps/buddy/src/i18n/locales/en-US/tasks.ts | 1 + apps/buddy/src/i18n/locales/zh-CN/tasks.ts | 1 + .../widgets/task-index/DesktopTaskIndex.vue | 48 +++++-- .../DesktopTaskSidebarExpandRow.vue | 68 +++++++++ .../__tests__/taskPinnedItems.spec.ts | 135 ++++++++++++++++++ .../widgets/task-index/taskPinnedItems.ts | 75 +++++++++- .../task-index/useTaskIndexController.ts | 29 +++- 7 files changed, 333 insertions(+), 24 deletions(-) create mode 100644 apps/buddy/src/modules/tasks/widgets/task-index/DesktopTaskSidebarExpandRow.vue create mode 100644 apps/buddy/src/modules/tasks/widgets/task-index/__tests__/taskPinnedItems.spec.ts diff --git a/apps/buddy/src/i18n/locales/en-US/tasks.ts b/apps/buddy/src/i18n/locales/en-US/tasks.ts index 63367393..f06bcc4a 100644 --- a/apps/buddy/src/i18n/locales/en-US/tasks.ts +++ b/apps/buddy/src/i18n/locales/en-US/tasks.ts @@ -34,6 +34,7 @@ export default { 'desktop.tasks.deleteTask': 'Delete', 'desktop.tasks.deleteTaskConfirmMessage': '“{title}” will be removed from the task list.', 'desktop.tasks.deleteTaskConfirmTitle': 'Delete task?', + 'desktop.tasks.expandRemaining': 'Show {count} more', 'desktop.imagePreview.close': 'Close image preview', 'desktop.imagePreview.download': 'Download image', 'desktop.imagePreview.next': 'Next image', diff --git a/apps/buddy/src/i18n/locales/zh-CN/tasks.ts b/apps/buddy/src/i18n/locales/zh-CN/tasks.ts index 64762b64..f8fbd2b8 100644 --- a/apps/buddy/src/i18n/locales/zh-CN/tasks.ts +++ b/apps/buddy/src/i18n/locales/zh-CN/tasks.ts @@ -32,6 +32,7 @@ export default { 'desktop.tasks.deleteTask': '删除', 'desktop.tasks.deleteTaskConfirmMessage': '“{title}”将从任务列表中移除。', 'desktop.tasks.deleteTaskConfirmTitle': '删除任务?', + 'desktop.tasks.expandRemaining': '展开其余 {count} 个', 'desktop.imagePreview.close': '关闭大图', 'desktop.imagePreview.download': '下载图片', 'desktop.imagePreview.next': '下一张图片', diff --git a/apps/buddy/src/modules/tasks/widgets/task-index/DesktopTaskIndex.vue b/apps/buddy/src/modules/tasks/widgets/task-index/DesktopTaskIndex.vue index 302e6f3e..fd3ca5ac 100644 --- a/apps/buddy/src/modules/tasks/widgets/task-index/DesktopTaskIndex.vue +++ b/apps/buddy/src/modules/tasks/widgets/task-index/DesktopTaskIndex.vue @@ -14,6 +14,7 @@ import { useBuddyI18n } from '@/i18n/buddyI18n' import DesktopSpaceDialog from '@/modules/tasks/widgets/task-index/DesktopSpaceDialog.vue' import DesktopTaskRow from '@/modules/tasks/widgets/task-index/DesktopTaskRow.vue' import DesktopTaskSearchDialog from '@/modules/tasks/widgets/task-index/DesktopTaskSearchDialog.vue' +import DesktopTaskSidebarExpandRow from '@/modules/tasks/widgets/task-index/DesktopTaskSidebarExpandRow.vue' import DesktopTaskSidebarSection from '@/modules/tasks/widgets/task-index/DesktopTaskSidebarSection.vue' import DesktopTaskSpaceRow from '@/modules/tasks/widgets/task-index/DesktopTaskSpaceRow.vue' import { @@ -80,6 +81,7 @@ const { dropPinnedItem, endPinnedDrag, enterPinnedDropTarget, + expandConversationGroup, getTaskTitle, getPinnedDropPosition, isSectionExpanded, @@ -101,7 +103,7 @@ const { requestTaskRename, saveSpace, selectSpaceMenuAction, - globalTasks, + taskRows, taskDeleteTarget, taskRenameTarget, taskTitleDraft, @@ -207,6 +209,12 @@ function openSearchSpace(spaceId: string) { @toggle="toggleSpace(item.space.id)" /> + + -