dsh-metaphysics 0.74.0 → 0.76.0
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 +16 -0
- package/client.js +336 -314
- package/package.json +1 -1
- package//345/221/275/347/220/206/346/216/222/347/233/230.html +135 -13
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-metaphysics",
|
|
3
3
|
"displayName": "烛微命盘",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.76.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "烛微命盘(玄学 xuanxue)for DeepSeek Harness: twenty-two 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 110KB 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.",
|
|
7
7
|
"keywords": [
|
|
@@ -361,7 +361,7 @@ h3::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--li
|
|
|
361
361
|
<div class="wrap">
|
|
362
362
|
<header>
|
|
363
363
|
<div class="brand-row">
|
|
364
|
-
<div class="brand"><span class="seal" aria-hidden="true">微</span><span class="brand-txt">烛微命盘<span class="ver">v0.
|
|
364
|
+
<div class="brand"><span class="seal" aria-hidden="true">微</span><span class="brand-txt">烛微命盘<span class="ver">v0.76.0</span><small>八字 · 紫微 · 六爻 · 梅花 · 六壬 · 奇门 · 合盘 · 塔罗 全部在本机计算</small></span></div>
|
|
365
365
|
<div class="view-switch">
|
|
366
366
|
<span class="hint">熟练了可以换回平铺</span>
|
|
367
367
|
<span class="seg" role="group" aria-label="首屏样式">
|
|
@@ -410,11 +410,9 @@ h3::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--li
|
|
|
410
410
|
<section class="tgroup">
|
|
411
411
|
<div class="tgroup-head"><h2>问一件事</h2><p>心里有一件具体的事,起一卦再决定</p></div>
|
|
412
412
|
<div class="ttools">
|
|
413
|
-
<button type="button" class="tool" data-tab="liuyao" title="
|
|
413
|
+
<button type="button" class="tool" data-tab="liuyao" title="问一件具体事,最接地气"><b>六爻</b><span>问一件具体事,最接地气</span></button>
|
|
414
414
|
<button type="button" class="tool" data-tab="tarot" title="抽牌看选择"><b>塔罗</b><span>抽牌看选择</span></button>
|
|
415
415
|
<button type="button" class="tool" data-tab="meihua" title="见闻起卦"><b>梅花</b><span>见闻起卦</span></button>
|
|
416
|
-
<button type="button" class="tool" data-tab="qimen" title="看方位时机"><b>奇门</b><span>看方位时机</span></button>
|
|
417
|
-
<button type="button" class="tool" data-tab="daliuren" title="占事断来意"><b>六壬</b><span>占事断来意</span></button>
|
|
418
416
|
<button type="button" class="tool" data-tab="xiaoliuren" title="掐指一算"><b>小六壬</b><span>掐指一算</span></button>
|
|
419
417
|
<button type="button" class="tmore" aria-expanded="false"></button>
|
|
420
418
|
</div>
|
|
@@ -422,8 +420,8 @@ h3::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--li
|
|
|
422
420
|
<section class="tgroup">
|
|
423
421
|
<div class="tgroup-head"><h2>看一个人</h2><p>看自己或身边人的性情与格局</p></div>
|
|
424
422
|
<div class="ttools">
|
|
425
|
-
<button type="button" class="tool" data-tab="bazi" title="
|
|
426
|
-
<button type="button" class="tool" data-tab="ziwei" title="
|
|
423
|
+
<button type="button" class="tool" data-tab="bazi" title="看这人一辈子的大盘"><b>八字</b><span>看这人一辈子的大盘</span></button>
|
|
424
|
+
<button type="button" class="tool" data-tab="ziwei" title="分宫细看哪方面顺哪方面堵"><b>紫微</b><span>分宫细看哪方面顺哪方面堵</span></button>
|
|
427
425
|
<button type="button" class="tool" data-tab="hepan" title="两人合不合"><b>合盘</b><span>两人合不合</span></button>
|
|
428
426
|
<button type="button" class="tool" data-tab="mbti" title="16 型问卷"><b>人格</b><span>16 型问卷</span></button>
|
|
429
427
|
<button type="button" class="tool" data-tab="constitution" title="九种体质"><b>体质</b><span>九种体质</span></button>
|
|
@@ -439,12 +437,20 @@ h3::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--li
|
|
|
439
437
|
<button type="button" class="tool" data-tab="zeri" title="挑好日子"><b>择日</b><span>挑好日子</span></button>
|
|
440
438
|
<button type="button" class="tool" data-tab="convert" title="公历农历"><b>农历</b><span>公历农历</span></button>
|
|
441
439
|
<button type="button" class="tool" data-tab="wuyunliuqi" title="一年大势"><b>运气</b><span>一年大势</span></button>
|
|
442
|
-
<button type="button" class="tool" data-tab="taiyi" title="积年推局"><b>太乙</b><span>积年推局</span></button>
|
|
443
440
|
<button type="button" class="tool" data-tab="fengshui" title="房屋朝向"><b>风水</b><span>房屋朝向</span></button>
|
|
444
441
|
<button type="button" class="tool" data-tab="name" title="八字选字"><b>起名</b><span>八字选字</span></button>
|
|
445
442
|
<button type="button" class="tmore" aria-expanded="false"></button>
|
|
446
443
|
</div>
|
|
447
444
|
</section>
|
|
445
|
+
<section class="tgroup">
|
|
446
|
+
<div class="tgroup-head"><h2>古籍考据</h2><p>古法三式与整年气运:偏研究向,日常咨询少用</p></div>
|
|
447
|
+
<div class="ttools">
|
|
448
|
+
<button type="button" class="tool" data-tab="qimen" title="看方位时机"><b>奇门</b><span>看方位时机</span></button>
|
|
449
|
+
<button type="button" class="tool" data-tab="daliuren" title="占事断来意"><b>六壬</b><span>占事断来意</span></button>
|
|
450
|
+
<button type="button" class="tool" data-tab="taiyi" title="积年推局"><b>太乙</b><span>积年推局</span></button>
|
|
451
|
+
<button type="button" class="tmore" aria-expanded="false"></button>
|
|
452
|
+
</div>
|
|
453
|
+
</section>
|
|
448
454
|
</div>
|
|
449
455
|
</section>
|
|
450
456
|
|
|
@@ -679,7 +685,7 @@ h3::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--li
|
|
|
679
685
|
<h3>对拍:把典籍当期望值</h3>
|
|
680
686
|
<ul><li>六爻:京房八宫卦序与世应,64 卦全表;旬空六旬表</li><li>六壬:日干寄宫、中气换将;紫微:纳音定五行局、紫微天府相照</li><li>卦例:《增删卜易》9 条 +《卜筮正宗》128 条(93 成对 + 35 静卦),核本变卦 / 动爻数 / 卦宫 / 缺爻 / 旬空</li><li>奇门:20 个时辰 × 9 宫,核四柱 / 局数 / 值符 / 值使 / 星门神 / 天盘干</li></ul>
|
|
681
687
|
<h3>工程验证</h3>
|
|
682
|
-
<ul><li>测试:
|
|
688
|
+
<ul><li>测试:178 个测试文件 / 10121 条断言;七道闸(回归 · 断言基线 · 测试可失败自检 · HTML 注入面 · 工程约定 · 产物宿主形态 · 随机扫射)</li><li>可复现:seed / asOf 显式;同一输入同一输出</li><li>口径:晚子时、真太阳时、奇门三流派、闰月归月都可切换,并有字段级差异对照</li></ul>
|
|
683
689
|
|
|
684
690
|
<h3>已知边界(不猜)</h3>
|
|
685
691
|
<ul><li>六爻应期(具体哪天应验)不做;卦例只录动爻个数,不录爻位</li><li>财富/健康只给结构判断与档位,不给金额区间、不作诊断</li><li>紫微飞星已做「单一支化逐宫追到成环」与「三方四正 16 条按落宫归堆」,但都未叠大限流年四化、不折吉凶;八字交运日已能算到日/时,但未与第三方排盘案例批量对拍</li></ul>
|
|
@@ -31990,7 +31996,7 @@ return { interpret, DIRECTIONS, DIRECTION_DEFAULT, BRIGHTNESS, flowOf, parseDate
|
|
|
31990
31996
|
})();
|
|
31991
31997
|
|
|
31992
31998
|
window.Engine = __mods.index;
|
|
31993
|
-
window.__MP_VER = "0.
|
|
31999
|
+
window.__MP_VER = "0.76.0";
|
|
31994
32000
|
</script>
|
|
31995
32001
|
<script>
|
|
31996
32002
|
// 两个 UI 共用的表单规则:宿主面板(src/app.js)与独立页(src/web-ui.js)。
|
|
@@ -33188,6 +33194,19 @@ window.__MP_VER = "0.74.0";
|
|
|
33188
33194
|
.mp-cg-plain{margin-top:7px;font-size:12.5px;line-height:1.85;color:var(--ink2)}
|
|
33189
33195
|
.mp-cg-plain em,.mp-cg-band em{font-style:normal;font-size:10.5px;color:var(--muted);border:1px solid var(--line);border-radius:3px;padding:0 4px;margin-right:6px;vertical-align:1px}
|
|
33190
33196
|
.mp-cg-band{margin-top:8px;font-size:12.5px;line-height:1.8;color:var(--ink2)}
|
|
33197
|
+
/* 八字卡内嵌的折叠称骨:summary 一行低调,展开才见骨重/歌诀/释义 */
|
|
33198
|
+
.mp-bzcg{margin-top:10px;border-top:1px dashed var(--line);padding-top:8px}
|
|
33199
|
+
.mp-bzcg summary{cursor:pointer;font-size:12px;color:var(--muted);list-style:none}
|
|
33200
|
+
.mp-bzcg summary::before{content:'▸ ';color:var(--lu)}
|
|
33201
|
+
.mp-bzcg[open] summary::before{content:'▾ '}
|
|
33202
|
+
.mp-bzcg-lunar{font-size:11px;color:var(--muted);margin-top:6px}
|
|
33203
|
+
.mp-bzcg-ws{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:4px;font-size:12.5px;color:var(--ink2)}
|
|
33204
|
+
.mp-bzcg-ws b{color:var(--ink);font-weight:600}
|
|
33205
|
+
.mp-bzcg-song{margin-top:7px;padding:8px 11px;border-left:3px solid var(--quan);background:var(--band);border-radius:0 6px 6px 0;font-family:var(--kai,system-ui),serif;font-size:14px;line-height:1.9;color:var(--ink)}
|
|
33206
|
+
.mp-bzcg-plain{margin-top:6px;font-size:12px;line-height:1.8;color:var(--ink2)}
|
|
33207
|
+
.mp-bzcg-plain em{font-style:normal;font-size:10.5px;color:var(--muted);border:1px solid var(--line);border-radius:3px;padding:0 4px;margin-right:6px}
|
|
33208
|
+
.mp-bzcg-band{margin-top:6px;font-size:12px;line-height:1.8;color:var(--ink2)}
|
|
33209
|
+
.mp-bzcg-note{margin-top:7px;font-size:11px;color:var(--muted)}
|
|
33191
33210
|
.mp-cg-note{margin-top:9px;padding-top:8px;border-top:1px dashed var(--line);font-size:11px;line-height:1.7;color:var(--muted)}
|
|
33192
33211
|
@media print{.mp-cg{break-inside:avoid}}
|
|
33193
33212
|
@media (max-width:640px){.mp-cg-w{grid-template-columns:repeat(2,minmax(0,1fr))}}
|
|
@@ -35217,7 +35236,7 @@ window.__MP_VER = "0.74.0";
|
|
|
35217
35236
|
</section>`;
|
|
35218
35237
|
};
|
|
35219
35238
|
|
|
35220
|
-
pp.baziHTML = function (r) {
|
|
35239
|
+
pp.baziHTML = function (r, opt) {
|
|
35221
35240
|
// 时辰未知时 pillars.hour 为 null:只画存在的柱,不能拿 null 去取 .stemTenGod
|
|
35222
35241
|
const cols = [['year', '年柱'], ['month', '月柱'], ['day', '日柱'], ['hour', '时柱']]
|
|
35223
35242
|
.filter(([k]) => r.pillars[k]);
|
|
@@ -35368,6 +35387,23 @@ window.__MP_VER = "0.74.0";
|
|
|
35368
35387
|
${ssGroups.map((g) => `<div class="pp-ssg"><span class="ssg-gt">${g.cat}</span><span class="ssg-gi">${g.items.map((i) => `<span class="pp-ssi ${i.luck || 'neutral'}" title="${esc(`${i.via}查${i.target} | ${i.rule}`)}">${i.name}<em>${i.pillars.map((k) => SHORT[k] || '').join('')}</em></span>`).join('')}</span></div>`).join('')}
|
|
35369
35388
|
<div class="ssx-h" style="border-top:none;padding-top:4px;margin-top:4px">神煞只作参考,吉凶仍须看格局、旺衰与行运。</div>
|
|
35370
35389
|
</div>` : '';
|
|
35390
|
+
// 附带称骨:同一份出生信息的民俗层延伸,默认折起不抢版面(用户展开才见)
|
|
35391
|
+
const cgOpt = opt && opt.chenggu;
|
|
35392
|
+
const cgHTML = cgOpt ? (() => {
|
|
35393
|
+
const cg = cgOpt;
|
|
35394
|
+
const cgCells = ['year', 'month', 'day', 'hour'].map((k) => {
|
|
35395
|
+
const x = cg.weights && cg.weights[k] || { label: '' };
|
|
35396
|
+
return `<span class="mp-bzcg-w">${esc(String(x.label).split(' ')[0])} <b>${esc(String(x.label).split(' ')[1] || '')}</b></span>`;
|
|
35397
|
+
}).join('');
|
|
35398
|
+
return `<details class="mp-bzcg"><summary>袁天罡称骨 · ${esc(cg.total && cg.total.label || '')}(${esc(cg.verdict && cg.verdict.band || '')})</summary>
|
|
35399
|
+
<div class="mp-bzcg-lunar">${esc(cg.lunar && cg.lunar.text || '')}</div>
|
|
35400
|
+
<div class="mp-bzcg-ws">${cgCells}</div>
|
|
35401
|
+
${(cg.song && cg.song.text) ? `<div class="mp-bzcg-song">「${esc(cg.song.text)}」</div>` : ''}
|
|
35402
|
+
${(cg.song && cg.song.plain) ? `<div class="mp-bzcg-plain"><em>释义</em>${esc(cg.song.plain)}</div>` : ''}
|
|
35403
|
+
${cg.verdict && cg.verdict.text ? `<div class="mp-bzcg-band">${esc(cg.verdict.text)}</div>` : ''}
|
|
35404
|
+
<div class="mp-bzcg-note">称骨为通行本口径的民俗参考,与上方四柱旺衰是两套独立口径,互不推导。</div>
|
|
35405
|
+
</details>`;
|
|
35406
|
+
})() : '';
|
|
35371
35407
|
return pp.briefHTML(r) + `<div class="pp" style="padding:12px">
|
|
35372
35408
|
<table class="pp-bz">${head}<tbody>${rows}</tbody></table>
|
|
35373
35409
|
${r.hourUnknown ? `<div class="pp-warn" role="note">时柱暂缺:只排年/月/日三柱,起运与交运按日估算。时柱按正午暂算,涉及时柱的结论仅供参考。</div>` : ''}
|
|
@@ -35398,6 +35434,7 @@ window.__MP_VER = "0.74.0";
|
|
|
35398
35434
|
${(!r.palaces.minggong || !r.palaces.shengong) ? '<span class="pp-chip" title="命宫与身宫由生月与生时支合数定宫;时柱暂缺,这两宫不排">命宫·身宫 时柱暂缺不排</span>' : ''}
|
|
35399
35435
|
</div>`) : ''}
|
|
35400
35436
|
${ssx}
|
|
35437
|
+
${cgHTML}
|
|
35401
35438
|
<div style="margin-top:8px;font-size:12px;color:var(--muted)">上一节 ${r.jieqi.previous.name} ${r.jieqi.previous.time} 下一节 ${r.jieqi.next.name} ${r.jieqi.next.time} ${r.dayun.rule},${r.dayun.startAge.years}岁起运${(r.dayun.jiao && r.dayun.jiao.at) ? `(交运 ${r.dayun.jiao.at},${r.dayun.jiao.frame})` : ''}${(r.dayun.startAgeExact && Number.isInteger(r.dayun.startAgeExact.years))
|
|
35402
35439
|
? ` 精确 ${r.dayun.startAgeExact.years}年${r.dayun.startAgeExact.months}月${r.dayun.startAgeExact.days}天${r.dayun.startAgeExact.hours}时(截断到日时;上面是四舍五入到月)` : ''}</div>
|
|
35403
35440
|
</div>`;
|
|
@@ -36017,6 +36054,42 @@ window.__MP_VER = "0.74.0";
|
|
|
36017
36054
|
})).join('\n');
|
|
36018
36055
|
};
|
|
36019
36056
|
|
|
36057
|
+
// 脱敏导出用:日期只留月日 / 时刻整点化 / 地址直接去掉 —— 足够按盘对账,拼不回一个人
|
|
36058
|
+
const MASK_DATE = /^(\d{4})-(\d{2})-(\d{2})$/;
|
|
36059
|
+
const MASK_TIME = /^(\d{1,2}):(\d{2})(:\d{2})?$/;
|
|
36060
|
+
|
|
36061
|
+
function maskDate(v) {
|
|
36062
|
+
const m = isStr(v) && MASK_DATE.exec(v.trim());
|
|
36063
|
+
return m ? m[2] + '-' + m[3] : '';
|
|
36064
|
+
}
|
|
36065
|
+
|
|
36066
|
+
function maskTime(v) {
|
|
36067
|
+
const m = isStr(v) && MASK_TIME.exec(v.trim());
|
|
36068
|
+
return m ? m[1] + ':00' : '';
|
|
36069
|
+
}
|
|
36070
|
+
|
|
36071
|
+
/** 脱敏导出:去出生年份(只留月日)、时刻整点化、去出生地与备注里的自由文本;保留结果结论字段 */
|
|
36072
|
+
pp.casesExportMasked = function (list) {
|
|
36073
|
+
const src = Array.isArray(list) ? list : pp.casesLoad();
|
|
36074
|
+
return src.map((x) => {
|
|
36075
|
+
const e = x.entry || {};
|
|
36076
|
+
const params = {};
|
|
36077
|
+
Object.keys(e).forEach((k) => {
|
|
36078
|
+
if (k === 'address') return; // 出生地直接去掉
|
|
36079
|
+
if (k === 'date') { const v = maskDate(e[k]); if (v) params.date = v; return; }
|
|
36080
|
+
if (k === 'time') { const v = maskTime(e[k]); if (v) params.time = v; return; }
|
|
36081
|
+
if (k === 'question') { return; } // 所问之事常带隐私,脱敏版不带
|
|
36082
|
+
params[k] = e[k];
|
|
36083
|
+
});
|
|
36084
|
+
return JSON.stringify({
|
|
36085
|
+
id: x.id, kind: e.kind || '',
|
|
36086
|
+
label: isStr(e.label) ? e.label : '',
|
|
36087
|
+
status: x.status, note: '',
|
|
36088
|
+
params,
|
|
36089
|
+
});
|
|
36090
|
+
}).join('\n');
|
|
36091
|
+
};
|
|
36092
|
+
|
|
36020
36093
|
/** 把旧的「最近排过」并进来(幂等:迁过的 id 带 h- 前缀) */
|
|
36021
36094
|
pp.casesMigrate = function (histList) {
|
|
36022
36095
|
const src = Array.isArray(histList) ? histList : [];
|
|
@@ -37534,15 +37607,57 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
37534
37607
|
<button type="button" data-act="md">导出 .md</button>
|
|
37535
37608
|
<button type="button" data-act="png">存为摘要长图</button>
|
|
37536
37609
|
<button type="button" data-act="link" title="把这张盘的参数编进链接:打开就还原同一张盘,也能直接发给别人">复制深链</button>
|
|
37610
|
+
<button type="button" data-act="case" title="把这张盘存进本机卦例库,日后可回看">存入卦例库</button>
|
|
37611
|
+
<button type="button" data-act="hit" title="觉得这张盘说得准:记一条「应验」进卦例库">记准</button>
|
|
37612
|
+
<button type="button" data-act="miss" title="觉得这张盘不准:记一条「未应」进卦例库">记不准</button>
|
|
37537
37613
|
<span class="hint">长图是 PNG 摘要卡(一页读懂 + 首张表);.md 存档;深链还原同一张盘(编码不是加密,别公开贴)</span>
|
|
37538
37614
|
</div>`;
|
|
37539
37615
|
}
|
|
37540
37616
|
|
|
37617
|
+
/** 从 last 与表单拼卦例 entry:只存参数,不存盘面(与面板卦例库同构) */
|
|
37618
|
+
function caseEntryFromLast() {
|
|
37619
|
+
if (!last || !last.r) return null;
|
|
37620
|
+
const hu = el('hourunknown');
|
|
37621
|
+
return {
|
|
37622
|
+
kind: last.tab || '',
|
|
37623
|
+
date: last.date || '',
|
|
37624
|
+
// 时辰未知时 time 是占位值,不能存成假正午
|
|
37625
|
+
time: hu && hu.checked ? '' : (last.time || ''),
|
|
37626
|
+
hourUnknown: !!(hu && hu.checked),
|
|
37627
|
+
gender: last.gender || '',
|
|
37628
|
+
address: last.address || '',
|
|
37629
|
+
trueSolar: last.trueSolar !== false,
|
|
37630
|
+
lateZi: last.lateZi !== false,
|
|
37631
|
+
at: Date.now(),
|
|
37632
|
+
};
|
|
37633
|
+
}
|
|
37634
|
+
|
|
37635
|
+
function caseMark(btn, act) {
|
|
37636
|
+
const PP = window.__PP;
|
|
37637
|
+
if (!PP || !PP.casesAdd || !btn) return;
|
|
37638
|
+
const entry = caseEntryFromLast();
|
|
37639
|
+
if (!entry) return;
|
|
37640
|
+
const status = act === 'hit' ? 'hit' : act === 'miss' ? 'miss' : 'pending';
|
|
37641
|
+
const done = act === 'hit' ? '已记「准」' : act === 'miss' ? '已记「不准」' : '已存卦例库';
|
|
37642
|
+
const idle = act === 'hit' ? '记准' : act === 'miss' ? '记不准' : '存入卦例库';
|
|
37643
|
+
let okSaved = false;
|
|
37644
|
+
try {
|
|
37645
|
+
const r = PP.casesAdd(entry, { status });
|
|
37646
|
+
okSaved = !!(r && r.ok);
|
|
37647
|
+
} catch (e) { /* 存储被禁用也不打断排盘 */ }
|
|
37648
|
+
btn.textContent = okSaved ? done : '存储不可用';
|
|
37649
|
+
setTimeout(() => { btn.textContent = idle; }, 1600);
|
|
37650
|
+
}
|
|
37651
|
+
|
|
37541
37652
|
function onExportClick(e) {
|
|
37542
37653
|
const b = e.target && e.target.closest ? e.target.closest('.exp [data-act]') : null;
|
|
37543
37654
|
if (!b) return;
|
|
37544
37655
|
if (b.dataset.act === 'md') { downloadReport(); return; }
|
|
37545
37656
|
if (b.dataset.act === 'png') { downloadCard(); return; }
|
|
37657
|
+
if (b.dataset.act === 'case' || b.dataset.act === 'hit' || b.dataset.act === 'miss') {
|
|
37658
|
+
caseMark(b, b.dataset.act);
|
|
37659
|
+
return;
|
|
37660
|
+
}
|
|
37546
37661
|
if (b.dataset.act === 'link') {
|
|
37547
37662
|
const pkg = bridgePackages();
|
|
37548
37663
|
if (!pkg || !pkg.link) {
|
|
@@ -37783,7 +37898,14 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
37783
37898
|
// 影子盘:先与本地上一张同 baseId 的盘比对,再存档;失败不影响主结果
|
|
37784
37899
|
let shadowDiff = null;
|
|
37785
37900
|
try { shadowDiff = window.__PP.shadowTrack ? window.__PP.shadowTrack(r) : null; } catch (e) { shadowDiff = null; }
|
|
37786
|
-
//
|
|
37901
|
+
// 八字结果里直接嵌人:同一份出生信息再排一次称骨与 trend(确定性、无网络)。
|
|
37902
|
+
// 时辰未知时不嵌称骨:称骨四柱缺时辰不可算,拿正午占位会编出一个假骨重。
|
|
37903
|
+
let chenggu = null;
|
|
37904
|
+
if (tab === 'bazi' && !hourUnknown && window.Engine.buildChenggu) {
|
|
37905
|
+
try {
|
|
37906
|
+
chenggu = window.Engine.buildChenggu({ year: Number(date.slice(0, 4)), month: Number(date.slice(5, 7)), day: Number(date.slice(8, 10)), hour: Number(time.slice(0, 2)), minute: Number(time.slice(3, 5)), lateZi: args.lateZi !== false });
|
|
37907
|
+
} catch (e) { chenggu = null; }
|
|
37908
|
+
}
|
|
37787
37909
|
let trend = null;
|
|
37788
37910
|
if (tab === 'bazi') {
|
|
37789
37911
|
try {
|
|
@@ -37803,7 +37925,7 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
37803
37925
|
try { caliber = window.Engine.caliberCompare(args); } catch (e) { caliber = null; }
|
|
37804
37926
|
}
|
|
37805
37927
|
const chart0 = (tab === 'ziwei' ? window.__PP.ziweiHTML(r)
|
|
37806
|
-
: tab === 'bazi' ? (window.__PP.baziHTML(r) + (trend ? window.__PP.trendHTML(trend, { brief: false }) : ''))
|
|
37928
|
+
: tab === 'bazi' ? (window.__PP.baziHTML(r, { chenggu }) + (trend ? window.__PP.trendHTML(trend, { brief: false }) : ''))
|
|
37807
37929
|
: tab === 'hepan' ? (r.chart === 'ziwei' ? window.__PP.ziweiHepanHTML(r) : window.__PP.hepanHTML(r))
|
|
37808
37930
|
: tab === 'qimen' ? (window.__PP.qimenHTML(r) + window.__PP.qimenFactsHTML(r))
|
|
37809
37931
|
: tab === 'meihua' ? window.__PP.meihuaHTML(r)
|
|
@@ -37832,7 +37954,7 @@ document.head.appendChild(Object.assign(document.createElement('style'), { textC
|
|
|
37832
37954
|
pastMarks = {}; pastFit = null; rectOut = null;
|
|
37833
37955
|
// 生时校正要按「这张盘自己的输入」反推:档案/表单在排完之后还能改,
|
|
37834
37956
|
// 只读 last.date 而性别、出生地读表单,候选时辰就会贴到另一张盘上
|
|
37835
|
-
last = { r, html, tab, date, time, timed, trend, caliber, shadowDiff,
|
|
37957
|
+
last = { r, html, tab, date, time, timed, trend, caliber, shadowDiff, chenggu,
|
|
37836
37958
|
gender: args.gender || el('gender').value,
|
|
37837
37959
|
address: typeof args.address === 'string' ? args.address : '',
|
|
37838
37960
|
trueSolar: typeof args.trueSolar === 'boolean' ? args.trueSolar : true,
|