diff --git a/assets/js/entry_popup.js b/assets/js/entry_popup.js index 73b9603..2ab115a 100644 --- a/assets/js/entry_popup.js +++ b/assets/js/entry_popup.js @@ -208,6 +208,28 @@ if (!bodyEl() || html.indexOf('data-tk-panel') < 0) { throw new Error('panel'); } bodyEl().innerHTML = html; runInlineScripts(bodyEl(), html); + /* 🔴🔴 #74(用户 2026-11-05):「空间有了,但是不是我想要的空间,这个空间需要换。」 + —— 实为「控件」:面板里的截止时间显示成**五个原生下拉**(年/月/日/时/分), + 而不是 AntD 的弹层日历。 + + 真根因:**首次打开面板走的是这条 loadPanel()**,它只 innerHTML + 跑内联脚本, + **没有补挂 AntD**。 + 我在 task_panel.js 的 paint() 里加过 fbBootAntd(),但那只管 + "面板里做了动作之后的重画"——**首次打开不经过 paint()**。 + ⇒ 用户点开任务看到的是从未被升级过的原生下拉。 + + ⚠️ 与上面 loadEdit() 里那次调用同一个理由:AJAX 换进来的 HTML + 不会自己跑初始化;bootAntd() 只在页面加载时扫过一次 + [data-dt-antd-single],那时面板还不存在。 + ⚠️ 放在 runInlineScripts 之后:内联脚本里可能也有初始化逻辑, + 让它先跑完;mountAntd* 有 data-antd-done 幂等标记,重复调用无害。 */ + if (typeof window.fbBootAntd === 'function') { + try { window.fbBootAntd(); } catch (e) { /* 挂不上就留在原生下拉,不阻断面板 */ } + } + /* 截止控件的 change 监听(#74):首次打开也要绑,否则选完时间不会保存 */ + if (typeof window.fbTaskPanelBindDue === 'function') { + try { window.fbTaskPanelBindDue(); } catch (e) { /* 忽略 */ } + } }) .catch(function () { if (!bodyEl()) { return; } diff --git a/assets/js/task_panel.js b/assets/js/task_panel.js index c36389b..cddd0dd 100644 --- a/assets/js/task_panel.js +++ b/assets/js/task_panel.js @@ -405,4 +405,16 @@ } step(); } + + /** + * 对外暴露「给截止控件绑 change 监听」(#74)。 + * + * 为什么需要:首次打开面板走的是 `entry_popup.js` 的 `loadPanel()`, + * 那条路只 innerHTML、不经过本文件的 `paint()` ⇒ `bindDue()` 不会自动跑 + * ⇒ 用户选完截止时间不会保存(只有做过一次别的动作、触发过一次重画才会生效)。 + * `loadPanel()` 在插入 HTML 后显式调这个。 + * + * ⚠️ 内部有 `data-fb-due-bound` 幂等标记,重复调用不会重复绑。 + */ + window.fbTaskPanelBindDue = bindDue; })();