v44 第 44 批:界面 5 条 + 移动端 API v1 全量
界面(用户 2026-10-12 第 1~5 条) 1. 新建日程「日历本」并入 .cs 自绘下拉,颜色画进候选项,三字与下拉同行。 2. 新建日程「开始/结束」改「日期范围:」,删旧日期控件; 重复相关三行仅选重复时出现;删「(含第一次)」与「这段时间算忙碌」。 3. 条目浮层加「地点」、去掉「状态」行;首页红线按分钟定位(原只取整小时); 去掉左侧红点只留红线。 4. 任务页删掉状态说明提示(STATUS_HINT 三值清空)。 5. 新建任务:标题在前树框在后;截止时间改最新日历控件;负责人默认自己; 删冗余提示;「上面要做什么」→「任务名称」;清理括号说明。 移动端 API(用户第 6 条:导航模块除外,其余全量) - 新增 Bearer 令牌鉴权(api_tokens 表,Schema v32),与登录口令 / DAV 口令三套分立。 - Api.php 内核(鉴权/取参/信封/分页/分发 + _method 覆写)+ ApiHandler.php 17 条资源 + ApiToken.php + api.php 入口。 - 路由:router.php / .htaccess / index.php 三处 /api/ 兜底(部署脚本自动追加线上规则)。 - 个人设置新增「App 接口令牌」卡;docs/API.md 接口文档; docs/API-QUESTION-LIST.md 自主决策与待确认缺口清单。 验证:本地 e2e 1510/0、v43 真机 33/0、v43 反向 9/0、 v44 真机 41/0、v44 API 63/0、v44 反向 19/0;全流水线 PUSH_RC=0。
This commit is contained in:
+90
-7
@@ -616,6 +616,25 @@ textarea.input { min-height: 76px; resize: vertical; }
|
||||
控件依然完整可用,不是"骨架占位"。
|
||||
============================================================================ */
|
||||
.dt-input { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
|
||||
/* 🔴 v44:内联标签(`_datetime.php` 的 `$dtLabel`)—— 让"日期范围:"与最新控件
|
||||
**同一行**。宽度与观影式 `.mv-lb`(62px)一致,右对齐、冒号由 `::after` 给,
|
||||
与「日历本」「标题」那几行的标签左缘对齐。
|
||||
⚠️ 它是 `.dt-input` 的**兄弟节点**(不是子节点)—— 见 `_datetime.php` 里的说明:
|
||||
放进去会被"收起原生端点"那条规则一起 clip 掉。选择器用 `+`(紧随其后)。 */
|
||||
.dt-inline-lab {
|
||||
flex: 0 0 auto; width: 62px; text-align: right;
|
||||
font-size: 14px; font-weight: 600; color: var(--ink);
|
||||
line-height: 1.4; word-break: keep-all;
|
||||
}
|
||||
/* ⚠️ 它同时带 `.mv-lb`(在 `.mv-row` 里时由那条规则给固定宽度与冒号);
|
||||
这里再写一遍是为了**不在 `.mv-row` 里**(编辑整页那种两列排版)也成立。 */
|
||||
.dt-inline-lab::after { content: ':'; font-weight: 400; color: var(--muted); }
|
||||
.dt-inline-lab > i { font-style: normal; color: var(--red, #C0392B); margin-left: 1px; }
|
||||
/* 范围组里带标签时:标签在前、控件在后,横向排(`.dt-range.dt-cols` 已是 flex row) */
|
||||
.dt-range > .dt-inline-lab { flex: 0 0 62px; }
|
||||
@media (max-width: 560px) {
|
||||
.dt-inline-lab { flex: 0 0 52px; width: 52px; font-size: 13px; }
|
||||
}
|
||||
.dt-input .dt-native { display: contents; }
|
||||
.dt-input .dt-semi { display: none; flex: 1 1 220px; min-width: 0; }
|
||||
|
||||
@@ -2968,6 +2987,24 @@ body[class] .semi-datepicker-day-inhover { background-color: color-mix(in srgb,
|
||||
这正是第 11 批"选人过滤一直是坏的"的同一个坑,别再踩第二次。 */
|
||||
.cs-item[hidden] { display: none; }
|
||||
.cs-item:hover, .cs-item:focus { background: var(--line-2); outline: none; }
|
||||
.cs-item.is-disabled { opacity: .5; cursor: not-allowed; }
|
||||
.cs-item.is-disabled:hover { background: transparent; }
|
||||
|
||||
/* ---- 🔴 v44:日程「日历本」下拉 ----
|
||||
用户 2026-10-12 第 1 条:「把颜色放在下拉框里面,就跟电影的影院选择一样,
|
||||
让日历本这三个字和下拉框在一条线上。」
|
||||
⇒ 复用观影那套 `.cs`(按钮 + 色点 + 弹出列表 + 搜索),只补两点:
|
||||
① 这个下拉在 `.mv-row` 里,宽度由 `> *:not(.mv-lb)` 那条 `flex:1` 接管,够用;
|
||||
② **无 JS 兜底**:那个原生 `<select id="ce-cal">` 只做视觉收起 ——
|
||||
用 `position:absolute; width:1px`(**不是 display:none**,保留可聚焦、可提交),
|
||||
与 `_datetime.php` 的"隐藏 date 当值载体"同一套思路。
|
||||
⚠️ 断言里按 `#ce-cal` 取 option / 值的写法必须继续成立 —— 它在 DOM 里。 */
|
||||
.cal-book-cs { width: 100%; }
|
||||
.cal-book-native {
|
||||
position: absolute; width: 1px; height: 1px;
|
||||
overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap;
|
||||
border: 0; padding: 0; margin: -1px;
|
||||
}
|
||||
|
||||
/* 新建影院:居中弹框(与名册的动作弹框同一形态,只是更宽) */
|
||||
.cn-modal {
|
||||
@@ -3858,6 +3895,12 @@ button.btn, a.btn, summary.btn, .seg-btn, .icon-btn, .rv-act-btn, .cs-btn, .bf-b
|
||||
[data-mode-vehicle][hidden],
|
||||
[data-mode-ticket][hidden] { display: none !important; }
|
||||
|
||||
/* 🔴 v44(用户 2026-10-12 第 2 条):重复那三行(结束条件 / 重复次数 / 重复到)
|
||||
在观影式排版下是 `.mv-row`(`display:flex`)⇒ 同上面 `.field` 那个坑:
|
||||
**作者样式优先于 `[hidden]` 的浏览器默认 `display:none`**,`hidden` 形同虚设。
|
||||
⇒ 一并补上,否则"不重复时它们也显示着"。 */
|
||||
.mv-row[hidden] { display: none !important; }
|
||||
|
||||
/* ============================================================
|
||||
v24 第 20 批 第 4 条:拖动即时上传的**暂存区** UI
|
||||
------------------------------------------------------------
|
||||
@@ -4379,12 +4422,11 @@ button.btn, a.btn, summary.btn, .seg-btn, .icon-btn, .rv-act-btn, .cs-btn, .bf-b
|
||||
.ag-row { display: flex; align-items: flex-start; gap: 8px; height: 44px; }
|
||||
.ag-hour { flex: 0 0 42px; font-size: 11.5px; color: var(--faint); font-variant-numeric: tabular-nums; transform: translateY(-6px); }
|
||||
.ag-line { flex: 1 1 auto; height: 1px; background: var(--line-2); margin-top: 0; }
|
||||
/* 当前时刻红线(用户原话「需要在当前的时间或者是时刻那里显示一条红线」) */
|
||||
/* 当前时刻红线(用户原话「需要在当前的时间或者是时刻那里显示一条红线」)
|
||||
🔴 v44(用户第 3 条):左端那颗小圆点**删掉**了 ——
|
||||
用户:「这个红点显示也不全,也不太好看。直接把红点去掉就行了,直接一根红线就可以了。」
|
||||
⇒ 直接一根 2px 红线;`.ag-now-dot` 这条规则随之删除(不再有那个元素)。 */
|
||||
.ag-now { position: absolute; left: 46px; right: 0; height: 0; border-top: 2px solid var(--red); z-index: 2; }
|
||||
.ag-now-dot {
|
||||
position: absolute; left: -4px; top: -5px; width: 8px; height: 8px;
|
||||
border-radius: 50%; background: var(--red);
|
||||
}
|
||||
/* 日程块 */
|
||||
/* 🔴 v30 第 2 条:「首页上的今天的日程,用色块表示,和日程保持一致。」
|
||||
⇒ 从原来的"白底卡片 + 左边 3px 色线"改成**与日历页 `.tg-block` 同款的实心色块**:
|
||||
@@ -5370,12 +5412,53 @@ h5.md-h, h6.md-h { font-size: 14px; }
|
||||
/* ⚠️ 挂上 antd 之后:**原生那对下拉收起来**(它们仍然在 DOM 里当值载体)。
|
||||
⚠️ 用 visibility+绝对定位而不是 display:none —— 见 v37 那次的教训:
|
||||
display:none 的控件在表单校验时不可聚焦;这里虽然已摘掉 required,
|
||||
但保持"可聚焦"更稳(免得将来再加必填时又踩同一个坑)。 */
|
||||
.dt-range.is-antd > .dt-input {
|
||||
但保持"可聚焦"更稳(免得将来再加必填时又踩同一个坑)。
|
||||
|
||||
🔴🔴 v44(用户 2026-10-12 第 2 条):「之前的日期选择控件还有,需要删除。」
|
||||
—— 用户在**日程**上看到 antd 控件与原生五个下拉**并排都在**。真根因是
|
||||
**结构性**的:日程那对是 `‹div.dt-range› ‹div.field.ev-dt› ‹div.dt-input›`
|
||||
(`.dt-input` 是**孙子**),而这条规则用的是**直接子**选择器 `> .dt-input`
|
||||
⇒ **在日程上根本不命中**。
|
||||
(与 v43 纪念日那次同族:结构一变,直接子选择器静默失效、不报任何错。)
|
||||
⇒ ① 把 `>` 放宽成**后代**选择器(`_event_fields.php` 那边的结构也已改回
|
||||
"与观影一致"的直接子,两道保险);
|
||||
② 用户要的"删除"就做成真删 —— 用 `display:none` 把**原生下拉那一块**
|
||||
从渲染里去掉。**注意:值载体不受影响** —— 隐藏的 `*_date` / `*_hour`
|
||||
/ `*_minute` 是 `.dt-input` 的**直接子元素**,**不在 `.dt-native` 里**,
|
||||
所以删掉原生块**不碰提交契约**。
|
||||
(v37 那条"display:none 不可聚焦"讲的是**带 required 的可见字段**;
|
||||
这里被藏的是"已被 antd 取代的旧控件",必填校验早已由
|
||||
`guardRequired` 的 `data-required` 自查接管 ⇒ 不适用那个顾虑。) */
|
||||
.dt-range.is-antd .dt-input {
|
||||
position: absolute; width: 1px; height: 1px;
|
||||
overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap;
|
||||
border: 0; padding: 0; margin: -1px;
|
||||
}
|
||||
/* antd 真的挂上了 ⇒ 原生那几档下拉**彻底不渲染**(用户要的"删除")。 */
|
||||
.dt-range.is-antd .dt-input .dt-native { display: none !important; }
|
||||
|
||||
/* 🔴🔴 v44:**带内联标签的那个端点不收起**。
|
||||
根因(真机几何量出来的):内联标签(「日期范围:」)是画在 `.dt-input` **里面**的,
|
||||
而上面那条收起规则把整个 `.dt-input` 绝对定位 + `clip` 掉了 ⇒
|
||||
**标签跟着一起被裁没了**,用户只看到一个没有标签的控件
|
||||
(量出来的证据:标签盒在 x=316/y=313 却被祖先 clip,`elementFromPoint`
|
||||
命中的是 `.ant-picker-range-separator` ⇒ 标签确实看不见)。
|
||||
⇒ 两头都不牺牲:`.dt-input` 只藏**它里面的原生块**(上一条已 `display:none`),
|
||||
自己保持正常布局 ⇒ 它变成 `[标签 62px][最新控件]` 的一个横排。
|
||||
起止的**第二个**端点没有标签,继续按上一条被收起(它本来就该消失)。 */
|
||||
.dt-range.is-antd > .dt-input.has-inline-label {
|
||||
position: static; width: auto; height: auto; overflow: visible;
|
||||
clip: auto; margin: 0; padding: 0; border: 0;
|
||||
flex: 1 1 auto; min-width: 0;
|
||||
display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
|
||||
}
|
||||
|
||||
/* 🔴 v44(用户第 5 条):**单个**带时刻的 antd 控件(任务「截止时间」)。
|
||||
与上面那对同一条思路 —— 挂上后把原生那几档下拉**真删掉**。
|
||||
选择器用 `.dt-input.is-antd`(单点,不是范围组)——
|
||||
`_datetime.php` 里 antd 挂载点仍是 `.dt-input` 自身。 */
|
||||
.dt-input.is-antd > .dt-native { display: none !important; }
|
||||
.dt-input.is-antd > .dt-antd { display: block; width: 100%; }
|
||||
/* 窄屏:标签列收窄,别把输入框挤没了 */
|
||||
@media (max-width: 560px) {
|
||||
.mv-row > .mv-lb,
|
||||
|
||||
Reference in New Issue
Block a user