dsh-metaphysics 0.61.0 → 0.61.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -1
- package/client.js +179 -179
- package/package.json +1 -1
- package//345/221/275/347/220/206/346/216/222/347/233/230.html +119 -9
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-metaphysics",
|
|
3
|
-
"version": "0.61.
|
|
3
|
+
"version": "0.61.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "命理排盘(玄学 xuanxue)for DeepSeek Harness: nineteen systems and eleven quick references (almanac, solar–lunar conversion, …), with climate adjustment (tiaohou), the 120 Qiongtong Baojian entries, 1,062-char name library with per-character pinyin, Kangxi stroke counts, five-grid (五格/三才) analysis and mechanical phonetics checks, a 78-card tarot library on the Rider-Waite-Smith base (per-card English name, image description, core meaning and astrological correspondence, cross-checked against three published sources; court cards carry no zodiac by design and the chart says so), classical quotes (Ziping Zhenquan / Di Tian Sui / San Ming Tong Hui), hexagram body relations (六冲/六合/伏吟/反吟/化进神/化退神) plus yongshen placement (用神落位) with month/day strength (月建日辰旺衰) and whole-hexagram per-line strength (全卦逐爻旺衰) and response-time clues (应期线索:逢值/逢冲/逢合 + 月建五态快慢) for liuyao, plus an MBTI-style 16-type questionnaire and exact dayun handover dates (交运日) with annual suiyun hints (岁运并临/伏吟反吟), palace conditions (击刑/入墓), month states (旺相休囚死) and stem–palace relations (天盘干与宫生克) for qimen, flying four-transformations with chained flights (四化飞星串连), three-way-four-corner composite flights (三方四正复合飞化), switchable leap-month policy (闰月按日切分/整月归次月/整月归本月) eleven school switches (亮度/庚干四化/天马/天空/截空旬空/魁钺/天伤天使/长生/晚子时/身主/杂曜全表) for ziwei, the last one opting in to a 61-star minor-star (杂曜) table where each of the twelve extra stars carries its placement verse and the palace it landed in (verses accepted only when at least two independent published editions give the same table, homonymous stars never merged), caliber diffs for bazi/ziwei/qimen (same inputs, one switch, root-field changes), shadow-chart IDs (same normalized params → same ID; version bumps auto-diff chart fields), step-by-step deduction traces (liuyao najia→liuqin→shiying→fushen→strength; bazi strength score and pattern/yongshen; ziwei pattern conditions), and a bundled offline single-file page (命理排盘.html), a panel-to-chat handoff that asks the Harness about a finished chart, per-tab lazy engine chunks so the first-screen client bundle stays under 100KB gzip, and a public verification report (128 classical hexagram cases, 312 Zi Wei charts × 34 patterns, 12 dayun handover cases) generated from the same source that gates CI.",
|
|
6
6
|
"keywords": [
|
|
@@ -47,6 +47,10 @@ header{display:flex;flex-direction:column;align-items:stretch;gap:12px;margin-bo
|
|
|
47
47
|
.brand-txt small{display:block;font-size:12.5px;letter-spacing:.02em;color:var(--dim);font-weight:400;margin-top:3px}
|
|
48
48
|
.ver{display:inline-block;margin-left:8px;vertical-align:3px;padding:2px 8px;border:1px solid var(--line);border-radius:999px;background:var(--panel2);
|
|
49
49
|
color:var(--dim);font:600 11px/1.5 system-ui,sans-serif;letter-spacing:.04em}
|
|
50
|
+
/* 未发版改动小牌:紧跟版本徽标,鼠标悬停看逐条。字色用 --ink2 而不是 --dim——
|
|
51
|
+
这行是 11px 小字,压在 --panel2 上,用 --dim 浅色档只有 4.41:1,够不着 AA 的 4.5。 */
|
|
52
|
+
.ver-note{display:inline-block;margin-left:6px;vertical-align:3px;padding:2px 8px;border:1px solid var(--line);border-radius:999px;background:var(--panel2);
|
|
53
|
+
color:var(--ink2);font:400 11px/1.5 "Microsoft YaHei","PingFang SC",system-ui,sans-serif;letter-spacing:0;cursor:help}
|
|
50
54
|
/* 等宽网格铺满一行:每格同宽、末行左对齐,不会出现右对齐造成的锯齿缺口 */
|
|
51
55
|
.tabs{display:grid;grid-template-columns:repeat(auto-fit,minmax(74px,1fr));grid-auto-rows:minmax(36px,auto);gap:6px}
|
|
52
56
|
.tab{display:flex;align-items:center;justify-content:center;text-align:center;padding:7px 10px;border-radius:999px;border:1px solid transparent;background:color-mix(in srgb,var(--panel) 62%,transparent);color:var(--dim);cursor:pointer;font-size:13.5px;font-family:inherit;white-space:nowrap;
|
|
@@ -105,6 +109,8 @@ body.view-flat .start{display:none}
|
|
|
105
109
|
#mh-num input{width:124px}
|
|
106
110
|
#changing{width:132px}
|
|
107
111
|
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--gold);box-shadow:var(--ring);background:var(--panel)}
|
|
112
|
+
/* 日期格式写错:输入过程中就转红,失焦会退回最近一次有效值 */
|
|
113
|
+
.field input[aria-invalid="true"]{border-color:var(--bad);box-shadow:0 0 0 2px rgba(167,44,35,.12)}
|
|
108
114
|
.field.check{flex-direction:row;align-items:center;gap:8px;padding-bottom:8px}
|
|
109
115
|
/* 所问之事:多行文本,样式与输入框一致;整组可伸缩,空间不足时自动换行独占一行 */
|
|
110
116
|
.field textarea{background:var(--panel2);border:1px solid var(--line);color:var(--ink);border-radius:8px;padding:8px 12px;font-size:15px;font-family:inherit;line-height:1.5;outline:none;width:100%;min-width:0;resize:vertical}
|
|
@@ -247,6 +253,8 @@ h3::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--li
|
|
|
247
253
|
.view-switch{flex:none}
|
|
248
254
|
.view-switch .seg button{white-space:nowrap}
|
|
249
255
|
.brand .seal{width:34px;height:34px;border-radius:9px;font-size:17px}
|
|
256
|
+
/* 窄屏标题一行都紧张,未发版小牌让位给「方法与验证」里的完整清单,不在这里挤 */
|
|
257
|
+
.ver-note{display:none}
|
|
250
258
|
/* 一行副标题 + 省略号:窄屏下让它换行会把「分组/平铺」顶到下一排,整块头重脚轻 */
|
|
251
259
|
.brand-txt{min-width:0;overflow:hidden}
|
|
252
260
|
.brand-txt small{font-size:11.5px;line-height:1.5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
@@ -354,7 +362,7 @@ h3::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--li
|
|
|
354
362
|
<div class="wrap">
|
|
355
363
|
<header>
|
|
356
364
|
<div class="brand-row">
|
|
357
|
-
<div class="brand"><span class="seal" aria-hidden="true">命</span><span class="brand-txt">命理排盘<span class="ver">v0.61.
|
|
365
|
+
<div class="brand"><span class="seal" aria-hidden="true">命</span><span class="brand-txt">命理排盘<span class="ver">v0.61.1</span><small>八字 · 紫微 · 六爻 · 梅花 · 六壬 · 奇门 · 合盘 · 塔罗 全部在本机计算</small></span></div>
|
|
358
366
|
<div class="view-switch">
|
|
359
367
|
<span class="hint">熟练了可以换回平铺</span>
|
|
360
368
|
<span class="seg" role="group" aria-label="首屏样式">
|
|
@@ -440,7 +448,7 @@ h3::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--li
|
|
|
440
448
|
<div class="bar">
|
|
441
449
|
<!-- 初始值是「命盘类(紫微/八字)」的示例默认:出生时间必然是过去,不取当前时刻。
|
|
442
450
|
切到六爻/梅花/六壬等起卦类 tab 时,web-ui.js 会自动把这两个框换成你的本机当前时刻。 -->
|
|
443
|
-
<label class="field" id="for-date"><span id="lbl-date">出生日期(公历)</span><input id="date" type="
|
|
451
|
+
<label class="field" id="for-date"><span id="lbl-date">出生日期(公历)</span><input id="date" type="text" inputmode="numeric" autocomplete="off" placeholder="年-月-日,如 1990-05-12" value="1990-05-12"></label>
|
|
444
452
|
<label class="field" id="for-time"><span id="lbl-time">出生时刻</span><input id="time" type="time" value="14:30"></label>
|
|
445
453
|
<!-- 时辰未知:只在八字/人生K线出现。勾上=不排时柱、起运降到按日,结果首行固定提示。
|
|
446
454
|
紫微/合盘不提供这个勾选——它们没有时支就整盘不成立,给了勾选等于诱导出一个假盘。 -->
|
|
@@ -458,7 +466,7 @@ h3::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--li
|
|
|
458
466
|
<label class="field" id="for-liuyao" style="display:none">六爻<input id="lines" placeholder="9 7 8 8 7 6,空则随机"></label>
|
|
459
467
|
<!-- 合盘:第二个人的出生信息;合盘方式决定用八字还是紫微两盘对照 -->
|
|
460
468
|
<div class="grp" id="for-hepan" style="display:none">
|
|
461
|
-
<label class="field">对方出生日期<input id="pdate" type="
|
|
469
|
+
<label class="field">对方出生日期<input id="pdate" type="text" inputmode="numeric" autocomplete="off" placeholder="年-月-日,如 1992-08-15" value="1992-08-15"></label>
|
|
462
470
|
<label class="field">对方出生时刻<input id="ptime" type="time" value="10:00"></label>
|
|
463
471
|
<label class="field">对方性别
|
|
464
472
|
<select id="pgender"><option value="female">女</option><option value="male">男</option></select>
|
|
@@ -474,7 +482,7 @@ h3::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--li
|
|
|
474
482
|
<input id="h3on" type="checkbox"> 三方合盘(加入第三人)
|
|
475
483
|
</label>
|
|
476
484
|
<div class="grp" id="for-hepan3" style="display:none">
|
|
477
|
-
<label class="field">第三方出生日期<input id="p2date" type="
|
|
485
|
+
<label class="field">第三方出生日期<input id="p2date" type="text" inputmode="numeric" autocomplete="off" placeholder="年-月-日,如 1990-01-01" value="1990-01-01"></label>
|
|
478
486
|
<label class="field">第三方出生时刻<input id="p2time" type="time" value="12:00"></label>
|
|
479
487
|
<label class="field">第三方性别
|
|
480
488
|
<select id="p2gender"><option value="female">女</option><option value="male">男</option></select>
|
|
@@ -595,7 +603,7 @@ h3::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--li
|
|
|
595
603
|
<label class="field" id="fs-advise2" style="display:none">朝向<input id="facing" placeholder="如 午 / 巽" value="午"></label>
|
|
596
604
|
<label class="field" id="fs-period" style="display:none">运(1–9)<input id="fsperiod" type="number" min="1" max="9" value="9"></label>
|
|
597
605
|
<label class="field" id="fs-offset" style="display:none">兼向度数<input id="fsoffset" type="number" min="-7.5" max="7.5" step="0.5" placeholder="0 = 正向;±4.5 以上用替卦"></label>
|
|
598
|
-
<label class="field" id="fs-date" style="display:none">飞星日期<input id="fsdate" type="
|
|
606
|
+
<label class="field" id="fs-date" style="display:none">飞星日期<input id="fsdate" type="text" inputmode="numeric" autocomplete="off" placeholder="年-月-日,如 2026-11-03"></label>
|
|
599
607
|
<label class="field" id="fs-time" style="display:none">时刻<input id="fstime" type="time" value="12:00"></label>
|
|
600
608
|
</div>
|
|
601
609
|
<!-- 人格问卷:4 题一页、1–5 打分。题目与 1–5 的说明由 web-ui 从引擎取,
|
|
@@ -645,7 +653,8 @@ h3::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--li
|
|
|
645
653
|
<h3>对拍:把典籍当期望值</h3>
|
|
646
654
|
<ul><li>六爻:京房八宫卦序与世应,64 卦全表;旬空六旬表</li><li>六壬:日干寄宫、中气换将;紫微:纳音定五行局、紫微天府相照</li><li>卦例:《增删卜易》9 条 +《卜筮正宗》128 条(93 成对 + 35 静卦),核本变卦 / 动爻数 / 卦宫 / 缺爻 / 旬空</li><li>奇门:20 个时辰 × 9 宫,核四柱 / 局数 / 值符 / 值使 / 星门神 / 天盘干</li></ul>
|
|
647
655
|
<h3>工程验证</h3>
|
|
648
|
-
<ul><li>测试:
|
|
656
|
+
<ul><li>测试:154 个测试文件 / 7598 条断言;七道闸(回归 · 断言基线 · 测试可失败自检 · HTML 注入面 · 工程约定 · 产物宿主形态 · 随机扫射)</li><li>可复现:seed / asOf 显式;同一输入同一输出</li><li>口径:晚子时、真太阳时、奇门三流派、闰月归月都可切换,并有字段级差异对照</li></ul>
|
|
657
|
+
|
|
649
658
|
<h3>已知边界(不猜)</h3>
|
|
650
659
|
<ul><li>六爻应期(具体哪天应验)不做;卦例只录动爻个数,不录爻位</li><li>财富/健康只给结构判断与档位,不给金额区间、不作诊断</li><li>紫微飞星已做「单一支化逐宫追到成环」与「三方四正 16 条按落宫归堆」,但都未叠大限流年四化、不折吉凶;八字交运日已能算到日/时,但未与第三方排盘案例批量对拍</li></ul>
|
|
651
660
|
<p class="note">内容用于传统文化学习与自我探索,不构成医疗、投资、法律或人事决策依据。</p>
|
|
@@ -26311,7 +26320,7 @@ return { interpret, DIRECTIONS, DIRECTION_DEFAULT, BRIGHTNESS, flowOf, geocodeAd
|
|
|
26311
26320
|
})();
|
|
26312
26321
|
|
|
26313
26322
|
window.Engine = __mods.index;
|
|
26314
|
-
window.__MP_VER = "0.61.
|
|
26323
|
+
window.__MP_VER = "0.61.1";
|
|
26315
26324
|
</script>
|
|
26316
26325
|
<script>
|
|
26317
26326
|
// 两个 UI 共用的表单规则:宿主面板(src/app.js)与独立页(src/web-ui.js)。
|
|
@@ -30266,6 +30275,86 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
30266
30275
|
|
|
30267
30276
|
const el = (id) => document.getElementById(id);
|
|
30268
30277
|
const pad = (n) => String(n).padStart(2, '0');
|
|
30278
|
+
|
|
30279
|
+
// ── 公历日期输入:固定「年-月-日」 ─────────────────────────────
|
|
30280
|
+
// 原生 date 控件的顺序跟随浏览器区域,容易出现月/日/年或日/月/年。
|
|
30281
|
+
// 改成文本输入 + 数字掩码:显示始终是 YYYY-MM-DD,也认 1990/5/12、1990年5月12日。
|
|
30282
|
+
function isoDateOk(s) {
|
|
30283
|
+
const ymd = /^(\d{4})-(\d{2})-(\d{2})$/.exec(String(s || ''));
|
|
30284
|
+
if (!ymd) return false;
|
|
30285
|
+
const y = Number(ymd[1]);
|
|
30286
|
+
const mo = Number(ymd[2]);
|
|
30287
|
+
const d = Number(ymd[3]);
|
|
30288
|
+
if (mo < 1 || mo > 12 || d < 1) return false;
|
|
30289
|
+
const leap = (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0;
|
|
30290
|
+
const days = [31, leap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
30291
|
+
return d <= days[mo - 1];
|
|
30292
|
+
}
|
|
30293
|
+
function normalizeDateText(raw) {
|
|
30294
|
+
const ymd = /^(\d{4})\s*[年./-]\s*(\d{1,2})\s*[月./-]\s*(\d{1,2})\s*日?$/.exec(String(raw || '').trim());
|
|
30295
|
+
if (!ymd) return '';
|
|
30296
|
+
const iso = `${ymd[1]}-${pad(ymd[2])}-${pad(ymd[3])}`;
|
|
30297
|
+
return isoDateOk(iso) ? iso : '';
|
|
30298
|
+
}
|
|
30299
|
+
function maskDateText(raw) {
|
|
30300
|
+
const s = String(raw || '').trim();
|
|
30301
|
+
// 连字符日期在输入过程中原样保留(含只打出「1990-5-」的中间态):刚敲下「1」
|
|
30302
|
+
// 就补成「01」,再敲「2」会变成 012 被截掉。等失焦时再统一补零;
|
|
30303
|
+
// 斜杠/中文/点号视为粘贴,直接归一。
|
|
30304
|
+
if (/^\d{0,4}(-\d{0,2}){0,2}$/.test(s)) return s;
|
|
30305
|
+
if (/[年月日/.]/.test(s)) {
|
|
30306
|
+
const full = normalizeDateText(s);
|
|
30307
|
+
if (full) return full;
|
|
30308
|
+
}
|
|
30309
|
+
const digits = s.replace(/\D/g, '').slice(0, 8);
|
|
30310
|
+
if (digits.length <= 4) return digits;
|
|
30311
|
+
if (digits.length <= 6) return `${digits.slice(0, 4)}-${digits.slice(4)}`;
|
|
30312
|
+
return `${digits.slice(0, 4)}-${digits.slice(4, 6)}-${digits.slice(6)}`;
|
|
30313
|
+
}
|
|
30314
|
+
/** 程序填值(示例 / 切 tab):同步掩码与「最近一次有效值」 */
|
|
30315
|
+
function setDateField(id, iso) {
|
|
30316
|
+
const input = el(id);
|
|
30317
|
+
if (!input) return;
|
|
30318
|
+
const v = normalizeDateText(iso) || '';
|
|
30319
|
+
input.value = v;
|
|
30320
|
+
input.dataset.last = v;
|
|
30321
|
+
input.setAttribute('aria-invalid', 'false');
|
|
30322
|
+
}
|
|
30323
|
+
function bindDateInput(id) {
|
|
30324
|
+
const input = el(id);
|
|
30325
|
+
if (!input) return;
|
|
30326
|
+
const initial = normalizeDateText(input.value);
|
|
30327
|
+
if (initial) input.value = initial;
|
|
30328
|
+
input.dataset.last = initial || '';
|
|
30329
|
+
input.setAttribute('type', 'text');
|
|
30330
|
+
input.setAttribute('inputmode', 'numeric');
|
|
30331
|
+
input.setAttribute('autocomplete', 'off');
|
|
30332
|
+
input.setAttribute('placeholder', '年-月-日,如 1990-05-12');
|
|
30333
|
+
input.addEventListener('input', () => {
|
|
30334
|
+
const next = maskDateText(input.value);
|
|
30335
|
+
if (input.value !== next) input.value = next;
|
|
30336
|
+
const iso = normalizeDateText(next);
|
|
30337
|
+
if (iso) input.dataset.last = iso;
|
|
30338
|
+
input.setAttribute('aria-invalid', iso || !next.trim() ? 'false' : 'true');
|
|
30339
|
+
});
|
|
30340
|
+
input.addEventListener('blur', () => {
|
|
30341
|
+
const raw = input.value.trim();
|
|
30342
|
+
if (!raw) { input.setAttribute('aria-invalid', 'false'); return; }
|
|
30343
|
+
const iso = normalizeDateText(raw);
|
|
30344
|
+
if (iso) {
|
|
30345
|
+
input.value = iso;
|
|
30346
|
+
input.dataset.last = iso;
|
|
30347
|
+
input.setAttribute('aria-invalid', 'false');
|
|
30348
|
+
return;
|
|
30349
|
+
}
|
|
30350
|
+
// 写错了就退回最近一次有效值,别把一个非法日期留在框里等着排盘
|
|
30351
|
+
input.value = input.dataset.last || '';
|
|
30352
|
+
input.setAttribute('aria-invalid', 'false');
|
|
30353
|
+
});
|
|
30354
|
+
}
|
|
30355
|
+
function bindDateInputs() {
|
|
30356
|
+
['date', 'pdate', 'p2date', 'fsdate'].forEach(bindDateInput);
|
|
30357
|
+
}
|
|
30269
30358
|
// 首屏耗时只在本机显示,不上报
|
|
30270
30359
|
const mpNow = () => (typeof performance !== 'undefined' && performance.now ? performance.now() : Date.now());
|
|
30271
30360
|
|
|
@@ -30562,7 +30651,7 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
30562
30651
|
|
|
30563
30652
|
/** 程序填值:写入 input 并记下「这是程序填的」,不置手动标记 */
|
|
30564
30653
|
function fillDateTime(v) {
|
|
30565
|
-
|
|
30654
|
+
setDateField('date', v.date);
|
|
30566
30655
|
el('time').value = v.time;
|
|
30567
30656
|
autoDate = v.date;
|
|
30568
30657
|
autoTime = v.time;
|
|
@@ -30939,6 +31028,21 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
30939
31028
|
const myRun = ++runSeq;
|
|
30940
31029
|
const startTab = tab;
|
|
30941
31030
|
const date = el('date').value;
|
|
31031
|
+
if (usesTimeInput() && !isoDateOk(date)) {
|
|
31032
|
+
last = null;
|
|
31033
|
+
el('out').innerHTML = '<div class="err">请填写公历日期,按「年-月-日」输入,例如 1990-05-12。</div>';
|
|
31034
|
+
return;
|
|
31035
|
+
}
|
|
31036
|
+
if (tab === 'hepan' && !isoDateOk(el('pdate').value)) {
|
|
31037
|
+
last = null;
|
|
31038
|
+
el('out').innerHTML = '<div class="err">请填写对方的公历出生日期,按「年-月-日」输入,例如 1992-08-15。</div>';
|
|
31039
|
+
return;
|
|
31040
|
+
}
|
|
31041
|
+
if (tab === 'hepan' && el('h3on') && el('h3on').checked && !isoDateOk(el('p2date').value)) {
|
|
31042
|
+
last = null;
|
|
31043
|
+
el('out').innerHTML = '<div class="err">请填写第三方的公历出生日期,按「年-月-日」输入,例如 1990-01-01。</div>';
|
|
31044
|
+
return;
|
|
31045
|
+
}
|
|
30942
31046
|
// 勾了「时辰未知」就不读钟点:读出来的只是占位值,用它排出来的时柱是编的
|
|
30943
31047
|
const hourUnknown = !!(el('hourunknown') && el('hourunknown').checked) && (tab === 'bazi' || tab === 'trend');
|
|
30944
31048
|
const time = hourUnknown ? '12:00' : el('time').value;
|
|
@@ -31073,6 +31177,11 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
31073
31177
|
const off = el('fsoffset') ? el('fsoffset').value.trim() : '';
|
|
31074
31178
|
if (off !== '') args.sittingOffset = Number(off);
|
|
31075
31179
|
const fd = el('fsdate') ? el('fsdate').value.trim() : '';
|
|
31180
|
+
if (fd && !isoDateOk(fd)) {
|
|
31181
|
+
last = null;
|
|
31182
|
+
el('out').innerHTML = '<div class="err">飞星日期请按「年-月-日」填写,例如 2026-11-03。</div>';
|
|
31183
|
+
return;
|
|
31184
|
+
}
|
|
31076
31185
|
if (fd) args.fortuneDate = fd;
|
|
31077
31186
|
const ft = el('fstime') ? el('fstime').value.trim() : '';
|
|
31078
31187
|
if (ft) args.fortuneTime = ft;
|
|
@@ -31464,6 +31573,7 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
31464
31573
|
}
|
|
31465
31574
|
|
|
31466
31575
|
window.addEventListener('DOMContentLoaded', () => {
|
|
31576
|
+
bindDateInputs();
|
|
31467
31577
|
// 两套入口(平铺 tab 与分组卡片)走同一条激活路径,避免行为分叉
|
|
31468
31578
|
document.querySelectorAll('.tab, .tool').forEach((b) => b.addEventListener('click', () => activate(b.dataset.tab)));
|
|
31469
31579
|
document.querySelectorAll('.view-switch [data-view]').forEach((b) => b.addEventListener('click', () => {
|
|
@@ -31523,7 +31633,7 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
31523
31633
|
// 看示例:填固定示例盘并切到八字,走与真实排盘完全相同的渲染路径
|
|
31524
31634
|
const sampleBtn = el('sample');
|
|
31525
31635
|
if (sampleBtn) sampleBtn.addEventListener('click', () => {
|
|
31526
|
-
|
|
31636
|
+
setDateField('date', SAMPLE.date);
|
|
31527
31637
|
el('time').value = SAMPLE.time;
|
|
31528
31638
|
el('gender').value = 'male';
|
|
31529
31639
|
el('addr').value = '河北石家庄';
|