/* ============================================================================ 「新建任务」弹框的开关(v78) ---------------------------------------------------------------------------- 用户原话(2026-10-22):「在全部任务旁边,放一个新建任务的功能,其实就是把任务中的 新建和编辑功能,搬过来,用弹出框来处理。」 两个入口、一张弹框: · 任务看板页(`tasks/index.php`)页头那颗「新建任务」; · 首页「近期任务」卡片右上角那颗(在「全部任务」右边)。 两处都是 `data-tk-add-open`,弹框本体是 `templates/tasks/_add_modal.php`。 为什么单独成一个脚本(而不是各页写一段内联): · 内联脚本在 AJAX 换正文时**不会被重跑**(v42/v47 连着栽过两次); · 两个入口各写一段,必然有一处忘了在**打开那一刻**再 boot 一次日期控件 —— 而弹框初始是 `hidden`,antd 面板拿到 0 尺寸会定位到屏幕左上角 (`tasks/show.php` 的编辑弹框就是为这个专门 boot 过,这里照抄同一手法)。 ⚠️ 全站加载,但有幂等闸门、页面里没有这张弹框时**什么都不做**(几行判断而已)。 ============================================================================ */ (function () { 'use strict'; if (window.__fbTkAddBound) { return; } window.__fbTkAddBound = true; function card() { return document.getElementById('taskAddCard'); } function setOpen(on) { var c = card(); if (!c) { return; } c.hidden = !on; if (!on) { return; } /* 打开这一刻才升级日期控件(hidden 时宽高为 0,antd 面板会定位错乱)。 两步都要:先绑自建下拉(兜底),再挂 antd(正主);两个函数都自判幂等。 */ if (window.fbUpgradeRange) { window.fbUpgradeRange(); } if (window.fbBootAntd) { window.fbBootAntd(); } var t = document.getElementById('tk-title'); if (t) { t.focus(); } } function antdOpen() { var d = document.querySelector('.ant-picker-dropdown'); return !!(d && !d.classList.contains('ant-picker-dropdown-hidden')); } document.addEventListener('click', function (e) { var t = e.target; if (!t || !t.closest) { return; } if (t.closest('[data-tk-add-open]')) { e.preventDefault(); setOpen(true); return; } if (t.closest('[data-tk-add-close]')) { e.preventDefault(); setOpen(false); return; } var c = card(); /* 点遮罩关、点面板内不关 —— 与站内其它浮层同一套行为 */ if (c && t === c) { setOpen(false); } }); document.addEventListener('keydown', function (e) { if (e.key !== 'Escape') { return; } var c = card(); if (!c || c.hidden) { return; } if (antdOpen()) { return; } // 让 antd 先收它自己的面板 setOpen(false); }); })();