v43 第 43 批:六条反馈(界面 5 + 条目详情浮层)
用户 2026-10-11 反馈六条,逐条定位真根因后修复: ① 纪念日「日期」多出一个控件 —— 只保留最新的那个 两层根因:(a)原生 `input[type=date]` 当初没包在 `.dt-native` 里, v42 那条"AntD 挂上后收起原生框"的选择器根本不命中;(b)更要命的是 `.dt-native` 基类写着 `display: contents` —— 该元素**没有盒子**, 给它 position/width 完全无效 ⇒ 必须把 display 显式改回 block 才收得起来。 ② 编辑纪念日把底层列表页弄没 —— 「修改」原来是整页跳 `days/edit` (套 layout = 一张只有弹框的空白页)。改为 `?embed=1` 只吐弹框那一块, 列表页 JS 取回来替换 `#anNewCard` 并打开 —— 与「新建」同一观感。 内嵌形态标 `$anModalOnly` 以免打 standalone 标记(关闭时不再跳页)。 ③ 拖图裁剪的层被弹框盖住 —— `.crop-overlay` 是 z-index:100 而 `.cal-modal` 是 200 ⇒ 裁剪层被整块盖住。提到 260(与 v41 的 .cn-modal 同一处理)。 ④ 行程弹框里"参与的人"弹不出选人框 —— person_picker.js 只绑定一次, 而弹框表单是 AJAX 片段 ⇒ 里面的 `.pp` 从未被 init。三件事一起: 暴露 `window.fbInitPickers()`(幂等)+ layout 暴露 `window.fbLoadPicker()` (脚本是按需加载的)+ 塞完片段后补调初始化。 ⑤ 日程新建排版/控件/文案 —— 改走观影式 `.mv-grid`(标签对齐 + 冒号); 起止补上 `$dtPlugin='antd'`(试点正式推广到日程);标签「时间范围」→「开始 / 结束」; 删三句提示(结束留空 / 多选提醒 / 全天)。 ⑥ 条目详情浮层(首页日程 / 首页近期任务 / 日程页条目)—— 点条目不再直接跳页,弹浮层显示详情;「详细信息」跳该来源详情页; 「编辑」就地换成该来源的编辑表单(四处 `?embed=1` 片段)。 新增 `templates/_entry_popup.php` + `assets/js/entry_popup.js` + `fb_entry_json()`(三个入口共用一个编码函数)。 验证:php -l 157 文件全过;div 深度 33 组合全配平;片段体检 20 片段无越界; 本地 e2e 1510/0;v43 真机 33/0;v43 反向验证 8/0;v38 36/0;v42 33/0; b31/b32 反向验证 8/0 与 5/0;部署断言本地空跑 RC=0;完整流水线 PUSH_RC=0。
This commit is contained in:
@@ -112,86 +112,13 @@ $isChild = !empty($t['parent_id']);
|
||||
<?php if ($canWrite): ?>
|
||||
<details class="node-add">
|
||||
<summary class="link-quiet">编辑这项任务</summary>
|
||||
<form method="post" action="<?= e(url('tasks/update')) ?>" class="node-form">
|
||||
<?= csrf_field() ?>
|
||||
<input type="hidden" name="id" value="<?= (int)$t['id'] ?>">
|
||||
<div class="nf-grid">
|
||||
<div class="field full">
|
||||
<label>标题</label>
|
||||
<input class="input" name="title" required value="<?= e((string)$t['title']) ?>">
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>截止时间(留空=不上日历)</label>
|
||||
<?php $dtName = 'due_at'; $dtValue = $t['due_at'] ?? null;
|
||||
$dtRequired = false;
|
||||
require __DIR__ . '/../_datetime.php'; ?>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>负责人</label>
|
||||
<?php /* 第 8 条同一诉求:负责人也是「选人」,人多时用弹窗 + 首字母更快。
|
||||
保留原下拉的「不指定」(pp-item-none + value=0)。 */ ?>
|
||||
<?php
|
||||
$ppName = 'assignee_id';
|
||||
$ppPeople = $people;
|
||||
$ppSelected = [(int)($t['assignee_id'] ?? 0)];
|
||||
$ppMode = 'single';
|
||||
$ppOpenBtn = '更换负责人';
|
||||
$ppTitle = '谁负责这件事';
|
||||
$ppEmptyText = '不指定';
|
||||
$ppAllowEmpty = true;
|
||||
require __DIR__ . '/../_person_picker.php';
|
||||
?>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>循环</label>
|
||||
<select class="select" name="repeat_rule">
|
||||
<?php foreach (\App\Task::REPEAT as $rk => $rv): ?>
|
||||
<option value="<?= e($rk) ?>"<?= (string)($t['repeat_rule'] ?? '') === (string)$rk ? ' selected' : '' ?>>
|
||||
<?= e($rv) ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>挂到哪个父任务下</label>
|
||||
<select class="select" name="parent_id">
|
||||
<option value="0">(这是一项独立的任务)</option>
|
||||
<?php foreach ($parents as $p): ?>
|
||||
<option value="<?= (int)$p['id'] ?>"<?= (int)($t['parent_id'] ?? 0) === (int)$p['id'] ? ' selected' : '' ?>>
|
||||
<?= e((string)$p['title']) ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
<?php /* v24 第 9、10 条:分类与看板(看板把任务放到哪一块,分类是标签) */ ?>
|
||||
<div class="field">
|
||||
<label>分类</label>
|
||||
<select class="select" name="category_id">
|
||||
<option value="0">未分类</option>
|
||||
<?php foreach (($categories ?? []) as $c): ?>
|
||||
<option value="<?= (int)$c['id'] ?>"<?= (int)($t['category_id'] ?? 0) === (int)$c['id'] ? ' selected' : '' ?>>
|
||||
<?= e((string)$c['name']) ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>看板</label>
|
||||
<select class="select" name="board_id">
|
||||
<?php foreach (($boards ?? []) as $b): ?>
|
||||
<option value="<?= (int)$b['id'] ?>"<?= (int)($t['board_id'] ?? 0) === (int)$b['id'] ? ' selected' : '' ?>>
|
||||
<?= e((string)$b['name']) ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field full">
|
||||
<label>备注</label>
|
||||
<textarea class="input" name="note" rows="2"><?= e((string)($t['note'] ?? '')) ?></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-row"><button class="btn btn-sm" type="submit">保存</button></div>
|
||||
</form>
|
||||
<?php /* 🔴 v43(用户第 6 条):表单**抽成独立一份** `_edit_form.php` ——
|
||||
条目详情浮层点「编辑」时要单独取它(`tasks/edit?embed=1`),
|
||||
不可能去详情页里抠。抽出来后两处用的是同一张表单,不会不同步。
|
||||
⚠️ 片段内部用 `$tk*` 前缀的局部变量,**不碰宿主的 `$t`/`$parents`**。 */
|
||||
$tkEditEmbed = false; // 整页形态:带上自己的「保存」按钮
|
||||
require __DIR__ . '/_edit_form.php';
|
||||
?>
|
||||
</details>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user