diff --git a/01_content/src/client/index.tsx b/01_content/src/client/index.tsx index 6c9b97b..e7fc71d 100644 --- a/01_content/src/client/index.tsx +++ b/01_content/src/client/index.tsx @@ -957,8 +957,9 @@ function WorktableSection(props: any) { )} + {managing &&
setManaging(false)} />} {managing && ( -
+
{t('manage.title')} diff --git a/02_process/worklogs/2026-08-16_worktable-v2.md b/02_process/worklogs/2026-08-16_worktable-v2.md index 0abd9a1..31301d0 100644 --- a/02_process/worklogs/2026-08-16_worktable-v2.md +++ b/02_process/worklogs/2026-08-16_worktable-v2.md @@ -545,3 +545,12 @@ dsh-wt_menu dsh-wt_pop fixed 定位 width 200 + 透明遮罩点击关闭;与 + 弹窗互斥不变。 - 验证:functional-diag STEP8 menuPos=fixed、menuLeft=288(侧栏右缘+8)、 遮罩点击关闭 PASS;全 STEP 回归 ERROR_COUNT: 0。纯客户端改动,F5 生效。 +## 补记(管理项目改右侧弹窗展开) + +- 用户反馈:点「管理项目…」后,管理面板应从新弹出的界面(同锚点)往下展开, + 而不是从工作台原位内联展开。 +- 处理:managing 时 dsh-wt_manage 加 dsh-wt_pop + fixed 定位(popLeft/popTop 与视图选项 + 弹窗同一锚点,宽 316),加透明遮罩点击关闭;完成按钮关闭不变; + 项目卡区 data-managing 弱化保持。 +- 验证:functional-diag STEP9 managePos=fixed、manageLeft=288(同弹窗锚点)、rows=3、 + 遮罩关闭 PASS;全 STEP 回归 ERROR_COUNT: 0。纯客户端改动,F5 生效。 diff --git a/04_test/functional-diag.cjs b/04_test/functional-diag.cjs index 8d84f50..5f54f52 100644 --- a/04_test/functional-diag.cjs +++ b/04_test/functional-diag.cjs @@ -167,6 +167,26 @@ const sleep = (ms) => new Promise((r) => setTimeout(r, ms)); })()`); console.log('STEP8:', JSON.stringify(step8)); + // 管理项目:从视图选项弹窗同锚点往下展开为 fixed 面板(不再内联展开) + const step9 = await evaluate(`(async function(){ + var out={}; + var btn=document.querySelector('.dsh-wt_actions .dsh-wt_iconBtn:nth-child(2)'); + if(btn){ btn.click(); } + await new Promise(function(r){setTimeout(r,250)}); + var items=document.querySelectorAll('.dsh-wt_menu.dsh-wt_pop .dsh-wt_menuItem'); + var manageItem=items[items.length-1]; + if(manageItem){ manageItem.click(); } + await new Promise(function(r){setTimeout(r,300)}); + var mp=document.querySelector('.dsh-wt_manage.dsh-wt_pop'); + if(mp){ var cs=getComputedStyle(mp); out.managePos=cs.position; out.manageLeft=mp.getBoundingClientRect().left; out.manageTop=mp.getBoundingClientRect().top; out.rows=mp.querySelectorAll('.dsh-wt_manageRow').length; } + var bd=document.querySelector('.dsh-wt_popBackdrop'); + if(bd){ bd.click(); } + await new Promise(function(r){setTimeout(r,200)}); + out.closedAfterBackdrop=!document.querySelector('.dsh-wt_manage.dsh-wt_pop'); + return JSON.stringify(out); + })()`); + console.log('STEP9:', JSON.stringify(step9)); + const errors = events.filter((e) => e.method === 'Runtime.exceptionThrown' || (e.method === 'Log.entryAdded' && e.params.entry.level === 'error') ||