fix(sidebar): 修复删除工作区不生效与控制台 TDZ 报错

- ConversationSidebar: immediate watcher 在 setup 阶段同步执行,却引用了
  之后才声明的 isGroupByWorkspaceActive,触发 TDZ ReferenceError;
  调整声明顺序并加注释防回退
- WorkspaceSwitcher: onDocClick 为捕获阶段监听,未排除 teleport 到 body
  的二级菜单,点击菜单项(删除/重命名)会先关闭整个浮层,导致内联
  确认框永远不可见、删除流程无法走完;补充 .ws-menu-floating 排除
- WorkspaceSwitcher: 删除确认按钮区靠右对齐
This commit is contained in:
JOJO 2026-07-23 21:55:14 +08:00
parent c6151e86fe
commit a900d6cc61
2 changed files with 11 additions and 4 deletions

View File

@ -994,6 +994,12 @@ watch(
{ immediate: true, deep: true }
);
const isGroupByWorkspaceActive = computed(
() => props.groupByWorkspace && props.hostWorkspaceEnabled && Array.isArray(props.workspaces) && props.workspaces.length > 0
);
/* watcher isGroupByWorkspaceActive
immediate 回调会在 setup 阶段同步执行提前引用会触发 TDZ 报错 */
watch(
() => props.currentWorkspaceId,
async () => {
@ -1011,10 +1017,6 @@ watch(
},
{ immediate: true }
);
const isGroupByWorkspaceActive = computed(
() => props.groupByWorkspace && props.hostWorkspaceEnabled && Array.isArray(props.workspaces) && props.workspaces.length > 0
);
const sortedWorkspaces = computed(() => {
const list = Array.isArray(props.workspaces) ? [...props.workspaces] : [];
return list.sort((a: any, b: any) => {

View File

@ -400,6 +400,10 @@ watch(
const onDocClick = (event: MouseEvent) => {
const target = event.target as Node | null;
if (!target) return;
/* teleport body popoverEl capture
触发若不排除会导致点击菜单项删除/重命名时整个浮层先被关闭
菜单动作设置的内联状态deletingId/renamingId永远不可见 */
if ((target as Element).closest?.('.ws-menu-floating')) return;
if (popoverEl.value && !popoverEl.value.contains(target)) {
/* toggle
避免 capture 阶段先 close按钮 click 又重新打开导致重播动画 */
@ -698,6 +702,7 @@ onBeforeUnmount(() => {
.ws-confirm-actions {
display: flex;
justify-content: flex-end;
gap: 8px;
}