dsh-metaphysics 0.66.0 → 0.67.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 +46 -0
- package/client.almanac.js +25 -25
- package/client.chart.js +145 -135
- package/client.chenggu.js +25 -25
- package/client.convert.js +25 -25
- package/client.daliuren.js +102 -94
- package/client.fengshui.js +29 -29
- package/client.js +6 -3
- package/client.liuyao.js +85 -77
- package/client.mbti.js +26 -26
- package/client.name.js +70 -68
- package/client.numerology.js +27 -27
- package/client.qimen.js +95 -87
- package/client.star.js +30 -30
- package/client.tarot.js +109 -101
- package/client.xiaoliuren.js +27 -27
- package/client.zeri.js +24 -24
- package/engine/bazi.js +29 -0
- package/engine/geju.js +200 -0
- package/engine/hehua.js +185 -0
- package/engine/interpret.js +23 -0
- package/engine/plain-summary.js +23 -1
- package/package.json +1 -1
- package//345/221/275/347/220/206/346/216/222/347/233/230.html +474 -7
|
@@ -362,7 +362,7 @@ h3::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--li
|
|
|
362
362
|
<div class="wrap">
|
|
363
363
|
<header>
|
|
364
364
|
<div class="brand-row">
|
|
365
|
-
<div class="brand"><span class="seal" aria-hidden="true">命</span><span class="brand-txt">命理排盘<span class="ver">v0.
|
|
365
|
+
<div class="brand"><span class="seal" aria-hidden="true">命</span><span class="brand-txt">命理排盘<span class="ver">v0.67.1</span><small>八字 · 紫微 · 六爻 · 梅花 · 六壬 · 奇门 · 合盘 · 塔罗 全部在本机计算</small></span></div>
|
|
366
366
|
<div class="view-switch">
|
|
367
367
|
<span class="hint">熟练了可以换回平铺</span>
|
|
368
368
|
<span class="seg" role="group" aria-label="首屏样式">
|
|
@@ -653,7 +653,7 @@ h3::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--li
|
|
|
653
653
|
<h3>对拍:把典籍当期望值</h3>
|
|
654
654
|
<ul><li>六爻:京房八宫卦序与世应,64 卦全表;旬空六旬表</li><li>六壬:日干寄宫、中气换将;紫微:纳音定五行局、紫微天府相照</li><li>卦例:《增删卜易》9 条 +《卜筮正宗》128 条(93 成对 + 35 静卦),核本变卦 / 动爻数 / 卦宫 / 缺爻 / 旬空</li><li>奇门:20 个时辰 × 9 宫,核四柱 / 局数 / 值符 / 值使 / 星门神 / 天盘干</li></ul>
|
|
655
655
|
<h3>工程验证</h3>
|
|
656
|
-
<ul><li>测试:
|
|
656
|
+
<ul><li>测试:171 个测试文件 / 9387 条断言;七道闸(回归 · 断言基线 · 测试可失败自检 · HTML 注入面 · 工程约定 · 产物宿主形态 · 随机扫射)</li><li>可复现:seed / asOf 显式;同一输入同一输出</li><li>口径:晚子时、真太阳时、奇门三流派、闰月归月都可切换,并有字段级差异对照</li></ul>
|
|
657
657
|
|
|
658
658
|
<h3>已知边界(不猜)</h3>
|
|
659
659
|
<ul><li>六爻应期(具体哪天应验)不做;卦例只录动爻个数,不录爻位</li><li>财富/健康只给结构判断与档位,不给金额区间、不作诊断</li><li>紫微飞星已做「单一支化逐宫追到成环」与「三方四正 16 条按落宫归堆」,但都未叠大限流年四化、不折吉凶;八字交运日已能算到日/时,但未与第三方排盘案例批量对拍</li></ul>
|
|
@@ -5427,6 +5427,196 @@ function weightPctOf(pillars = {}, { hourUnknown = false } = {}) {
|
|
|
5427
5427
|
return { PILLAR_WEIGHT, HIDDEN_PCT, supportOf, branchStructureOf, weightPctOf };
|
|
5428
5428
|
})();
|
|
5429
5429
|
|
|
5430
|
+
__mods.hehua = (function () {
|
|
5431
|
+
// 天干五合的「合化」判定。
|
|
5432
|
+
//
|
|
5433
|
+
// bazi.js 的 buildRelations 在干支关系层只写「有合、化某待定」——那一层不该断言化与不化。
|
|
5434
|
+
// 是否真化要过问真《基础知识·干支中》给的四条件:
|
|
5435
|
+
// ① 天干紧挨(隔一位=隔合、隔两位=遥合,都不化;争合、妒合一律不化)
|
|
5436
|
+
// ② 被化天干(阴干一侧)在天干上无同类(比劫)帮扶
|
|
5437
|
+
// ③ 月令有引化物(月支五行或月支本气=化神五行)
|
|
5438
|
+
// ④ 引化物不被克(克化神之五行不现于月干、日干,月支本气也不是它)
|
|
5439
|
+
//
|
|
5440
|
+
// 判完只作只读标注:不改旺衰分、不改五行权重、不改喜忌、不改 relations.stems 的文案。
|
|
5441
|
+
// 反化(甲己化木、乙庚化木、丙辛化火或金、丁壬化火或水、戊癸化土或水)诸家分歧大,本插件不做。
|
|
5442
|
+
|
|
5443
|
+
const STEMS = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'];
|
|
5444
|
+
const STEM_ELEMENT = {
|
|
5445
|
+
甲: '木', 乙: '木', 丙: '火', 丁: '火', 戊: '土', 己: '土', 庚: '金', 辛: '金', 壬: '水', 癸: '水',
|
|
5446
|
+
};
|
|
5447
|
+
const BRANCH_ELEMENT = {
|
|
5448
|
+
子: '水', 丑: '土', 寅: '木', 卯: '木', 辰: '土', 巳: '火',
|
|
5449
|
+
午: '火', 未: '土', 申: '金', 酉: '金', 戌: '土', 亥: '水',
|
|
5450
|
+
};
|
|
5451
|
+
const OVERCOMES = { 木: '土', 土: '水', 水: '火', 火: '金', 金: '木' };
|
|
5452
|
+
const HIDDEN = {
|
|
5453
|
+
子: ['癸'], 丑: ['己', '癸', '辛'], 寅: ['甲', '丙', '戊'], 卯: ['乙'],
|
|
5454
|
+
辰: ['戊', '乙', '癸'], 巳: ['丙', '庚', '戊'], 午: ['丁', '己'], 未: ['己', '丁', '乙'],
|
|
5455
|
+
申: ['庚', '壬', '戊'], 酉: ['辛'], 戌: ['戊', '辛', '丁'], 亥: ['壬', '甲'],
|
|
5456
|
+
};
|
|
5457
|
+
const STEM_HE = { 甲己: '土', 乙庚: '金', 丙辛: '水', 丁壬: '木', 戊癸: '火' };
|
|
5458
|
+
const KEYS = ['year', 'month', 'day', 'hour'];
|
|
5459
|
+
const LABEL = { year: '年', month: '月', day: '日', hour: '时' };
|
|
5460
|
+
|
|
5461
|
+
const METHOD = '问真《基础知识·干支中》:五合是否真化看四条件——天干紧挨、被化天干无同类帮扶、'
|
|
5462
|
+
+ '月令有引化物、引化物不被克;隔合、遥合、争合、妒合一律不化';
|
|
5463
|
+
const BOUNDARY = '只作只读标注:不改旺衰分、不改五行权重、不改喜忌。'
|
|
5464
|
+
+ '争合=两阳干争一阴干,妒合=两阴干争一阳干,问真说这两者「实际指的就是合绊」,故判不化。';
|
|
5465
|
+
|
|
5466
|
+
const isYangStem = (stem) => STEMS.indexOf(stem) % 2 === 0;
|
|
5467
|
+
const heOf = (a, b) => STEM_HE[a + b] || STEM_HE[b + a] || null;
|
|
5468
|
+
const elOf = (stem) => STEM_ELEMENT[stem] || '';
|
|
5469
|
+
/** 克某五行的那一行 */
|
|
5470
|
+
const keOf = (element) => Object.keys(OVERCOMES).find((el) => OVERCOMES[el] === element) || '';
|
|
5471
|
+
/** 月支本气所属五行 */
|
|
5472
|
+
const mainElOf = (branch) => elOf((HIDDEN[branch] || [])[0] || '');
|
|
5473
|
+
|
|
5474
|
+
/**
|
|
5475
|
+
* 判四柱天干的五合化与不化。
|
|
5476
|
+
* @param {object} pillars 四柱(bazi.js 的 pillar 对象;用到 stem 与 branch)
|
|
5477
|
+
* @param {string} monthBranch 月支(省略时取 pillars.month.branch)
|
|
5478
|
+
* @param {string} dayStem 日干(省略时取 pillars.day.stem)
|
|
5479
|
+
* @param {string[]} keys 参与判定的柱;时辰未知时传 ['year','month','day']
|
|
5480
|
+
*/
|
|
5481
|
+
function judgeHehua(pillars, monthBranch, dayStem, keys = KEYS) {
|
|
5482
|
+
const slots = (Array.isArray(keys) ? keys : KEYS)
|
|
5483
|
+
.filter((k) => pillars && pillars[k] && pillars[k].stem && pillars[k].branch)
|
|
5484
|
+
.map((k) => ({ key: k, label: LABEL[k] || k, stem: pillars[k].stem, branch: pillars[k].branch }));
|
|
5485
|
+
const mb = monthBranch || (pillars && pillars.month && pillars.month.branch) || '';
|
|
5486
|
+
const ds = dayStem || (pillars && pillars.day && pillars.day.stem) || '';
|
|
5487
|
+
|
|
5488
|
+
const notes = [
|
|
5489
|
+
'反化(甲己化木、乙庚化木、丙辛化火或金、丁壬化火或水、戊癸化土或水)是近代易人的演绎,诸家分歧大,本插件不做。',
|
|
5490
|
+
'日元参与合化时,即使化成功仍以原五行论:问真说「五行的本质属性不会转变,只不过表现形式可能会发生变化」。',
|
|
5491
|
+
'天干五合未必以日元为主——年月干合化成功同样算数(问真所举己酉造就是年月干合)。',
|
|
5492
|
+
];
|
|
5493
|
+
|
|
5494
|
+
if (slots.length < 2) {
|
|
5495
|
+
return {
|
|
5496
|
+
items: [], transformed: [], text: '天干不足两柱,五合无从判起。', method: METHOD, boundary: BOUNDARY, notes,
|
|
5497
|
+
};
|
|
5498
|
+
}
|
|
5499
|
+
|
|
5500
|
+
const monthEl = BRANCH_ELEMENT[mb] || '';
|
|
5501
|
+
const monthMain = mainElOf(mb);
|
|
5502
|
+
const items = [];
|
|
5503
|
+
|
|
5504
|
+
for (let i = 0; i < slots.length; i++) {
|
|
5505
|
+
for (let j = i + 1; j < slots.length; j++) {
|
|
5506
|
+
const a = slots[i];
|
|
5507
|
+
const b = slots[j];
|
|
5508
|
+
if (a.stem === b.stem) continue;
|
|
5509
|
+
const hua = heOf(a.stem, b.stem);
|
|
5510
|
+
if (!hua) continue;
|
|
5511
|
+
|
|
5512
|
+
const gap = j - i - 1;
|
|
5513
|
+
const closeness = gap === 0 ? '紧挨' : gap === 1 ? '隔合' : '遥合';
|
|
5514
|
+
const yin = isYangStem(a.stem) ? b : a;
|
|
5515
|
+
const yang = isYangStem(a.stem) ? a : b;
|
|
5516
|
+
const others = slots.filter((s) => s !== a && s !== b);
|
|
5517
|
+
|
|
5518
|
+
// 争合 / 妒合:第三干与这一对里的某一干另成五合
|
|
5519
|
+
let conflict = null;
|
|
5520
|
+
let conflictStem = '';
|
|
5521
|
+
for (const s of others) {
|
|
5522
|
+
if (!heOf(s.stem, a.stem) && !heOf(s.stem, b.stem)) continue;
|
|
5523
|
+
conflict = isYangStem(s.stem) ? '争合' : '妒合';
|
|
5524
|
+
conflictStem = s.stem;
|
|
5525
|
+
break;
|
|
5526
|
+
}
|
|
5527
|
+
|
|
5528
|
+
// ② 被化天干(阴干一侧)无同类帮扶。
|
|
5529
|
+
// 只算「同类(比劫)」,不算印:问真的唯一完整例「己酉 甲戌 壬戌 丁未」里,
|
|
5530
|
+
// 被化的己土有丁火为印(火生土)却仍判化成功——把印计进生扶会与它自己的例子冲突。
|
|
5531
|
+
const sameKind = others.filter((s) => elOf(s.stem) === elOf(yin.stem));
|
|
5532
|
+
|
|
5533
|
+
// ④ 引化物不被克:问真原文点明「月干/日干透出」与「月支本气」两处。
|
|
5534
|
+
const keEl = keOf(hua);
|
|
5535
|
+
const keMajor = others.filter((s) => elOf(s.stem) === keEl && (s.key === 'month' || s.key === 'day'));
|
|
5536
|
+
const keMinor = others.filter((s) => elOf(s.stem) === keEl && s.key !== 'month' && s.key !== 'day');
|
|
5537
|
+
const keMonth = !!keEl && monthMain === keEl;
|
|
5538
|
+
|
|
5539
|
+
const conditions = {
|
|
5540
|
+
adjacent: gap === 0,
|
|
5541
|
+
noConflict: !conflict,
|
|
5542
|
+
unrescued: sameKind.length === 0,
|
|
5543
|
+
monthLead: (monthEl && monthEl === hua) || (monthMain && monthMain === hua) || false,
|
|
5544
|
+
leadUnchecked: keMajor.length === 0 && !keMonth,
|
|
5545
|
+
};
|
|
5546
|
+
const ok = conditions.adjacent && conditions.noConflict && conditions.unrescued
|
|
5547
|
+
&& conditions.monthLead && conditions.leadUnchecked;
|
|
5548
|
+
|
|
5549
|
+
const missing = [];
|
|
5550
|
+
if (!conditions.adjacent) missing.push(closeness === '隔合' ? '相隔一位(隔合)' : '相隔两位(遥合)');
|
|
5551
|
+
if (!conditions.noConflict) {
|
|
5552
|
+
missing.push(`${conflict}(另有${conflictStem}与${conflict === '争合' ? '同一阴干' : '同一阳干'}成合)`);
|
|
5553
|
+
}
|
|
5554
|
+
if (!conditions.unrescued) missing.push(`被化干${yin.stem}在天干有同类${sameKind.map((s) => s.stem).join('、')}帮扶`);
|
|
5555
|
+
if (!conditions.monthLead) missing.push(`月令${mb}(${monthEl || '—'})不是化神${hua}`);
|
|
5556
|
+
if (!conditions.leadUnchecked) {
|
|
5557
|
+
const who = [
|
|
5558
|
+
...keMajor.map((s) => `${s.stem}(${s.label}干)`),
|
|
5559
|
+
keMonth ? `月支${mb}本气${keEl}` : '',
|
|
5560
|
+
].filter(Boolean);
|
|
5561
|
+
missing.push(`引化物${hua}被${keEl}克:${who.join('、')}`);
|
|
5562
|
+
}
|
|
5563
|
+
|
|
5564
|
+
const status = ok ? '化成功'
|
|
5565
|
+
: !conditions.adjacent ? `${closeness}不化`
|
|
5566
|
+
: !conditions.noConflict ? `${conflict}不化`
|
|
5567
|
+
: '合绊不化';
|
|
5568
|
+
|
|
5569
|
+
const pair = `${a.stem}${b.stem}`;
|
|
5570
|
+
const positionText = `${a.label}干${a.stem}与${b.label}干${b.stem}`;
|
|
5571
|
+
const leadText = monthEl === monthMain || !monthMain
|
|
5572
|
+
? `月令${mb}为${monthEl}`
|
|
5573
|
+
: `月令${mb}为${monthEl}、本气${monthMain}`;
|
|
5574
|
+
const evidence = ok
|
|
5575
|
+
? `${positionText}紧挨,成${pair}合化${hua};${leadText},正好引化;`
|
|
5576
|
+
+ `被化干${yin.stem}${elOf(yin.stem)}在天干无同类帮扶;克${hua}的${keEl}不在月干与日干,月支本气也不是它。`
|
|
5577
|
+
: `${positionText}成${pair}合,但${missing.join(';')},只作合绊,不论化。`;
|
|
5578
|
+
|
|
5579
|
+
items.push({
|
|
5580
|
+
pair,
|
|
5581
|
+
huaElement: hua,
|
|
5582
|
+
positions: `${a.key}-${b.key}`,
|
|
5583
|
+
positionText,
|
|
5584
|
+
closeness,
|
|
5585
|
+
distance: gap,
|
|
5586
|
+
yinStem: yin.stem,
|
|
5587
|
+
yangStem: yang.stem,
|
|
5588
|
+
conflict,
|
|
5589
|
+
conflictStem: conflictStem || null,
|
|
5590
|
+
conditions,
|
|
5591
|
+
status,
|
|
5592
|
+
ok,
|
|
5593
|
+
dayMasterInvolved: !!ds && (a.stem === ds || b.stem === ds),
|
|
5594
|
+
evidence,
|
|
5595
|
+
});
|
|
5596
|
+
}
|
|
5597
|
+
}
|
|
5598
|
+
|
|
5599
|
+
const transformed = items.filter((x) => x.ok).map((x) => `${x.pair}化${x.huaElement}`);
|
|
5600
|
+
const lines = items.map((x) => `【${x.status}】${x.evidence}`);
|
|
5601
|
+
if (items.some((x) => x.ok && x.dayMasterInvolved)) {
|
|
5602
|
+
lines.push('日元参与的那一组即使化成功,五行属性仍按原干论,只表现形式变。');
|
|
5603
|
+
}
|
|
5604
|
+
// 克化神之五行只在年干/时干出现时不挡化,但要写明——离得远,力道打折
|
|
5605
|
+
for (const x of items) {
|
|
5606
|
+
if (!x.ok) continue;
|
|
5607
|
+
const keEl = keOf(x.huaElement);
|
|
5608
|
+
const far = slots.filter((s) => elOf(s.stem) === keEl && x.positions.split('-').indexOf(s.key) < 0
|
|
5609
|
+
&& s.key !== 'month' && s.key !== 'day');
|
|
5610
|
+
if (far.length) lines.push(`${x.pair}化${x.huaElement}:克化神的${keEl}只在${far.map((s) => `${s.label}干`).join('、')},被化神隔开,不挡化。`);
|
|
5611
|
+
}
|
|
5612
|
+
const text = items.length ? lines.join('\n') : '四柱天干未见五合。';
|
|
5613
|
+
|
|
5614
|
+
return { items, transformed, text, method: METHOD, boundary: BOUNDARY, notes };
|
|
5615
|
+
}
|
|
5616
|
+
|
|
5617
|
+
return { judgeHehua };
|
|
5618
|
+
})();
|
|
5619
|
+
|
|
5430
5620
|
__mods.geju = (function () {
|
|
5431
5621
|
// 八字格局、用神与行运评分
|
|
5432
5622
|
//
|
|
@@ -6279,6 +6469,198 @@ function scoreLuck(ganzhi, frame) {
|
|
|
6279
6469
|
return { ganzhi, score: total, tier, stemTenGod: godStem, reasons, note: `${godStem}运,${tier}(${total})` };
|
|
6280
6470
|
}
|
|
6281
6471
|
|
|
6472
|
+
// ── 财库 ────────────────────────────────────────────────────
|
|
6473
|
+
|
|
6474
|
+
// 五行之墓:木墓未、火墓戌、金墓丑、水墓辰;土取戊土十二长生的墓位(戌)。
|
|
6475
|
+
// 这样取,问真《专业知识·八字断财富技法》那张表五格全部对得上:
|
|
6476
|
+
// 木日主财土 → 土墓戌;水日主财火 → 火墓戌;火日主财金 → 金墓丑;
|
|
6477
|
+
// 土日主财水 → 水墓辰;金日主财木 → 木墓未。
|
|
6478
|
+
// 若改用「水土同宫」把土墓放辰,只有木日主一格会落到辰,与问真表冲突,故取戌。
|
|
6479
|
+
const TOMB_OF = { 木: '未', 火: '戌', 土: '戌', 金: '丑', 水: '辰' };
|
|
6480
|
+
const BRANCH_CHONG = {
|
|
6481
|
+
子: '午', 午: '子', 丑: '未', 未: '丑', 寅: '申', 申: '寅',
|
|
6482
|
+
卯: '酉', 酉: '卯', 辰: '戌', 戌: '辰', 巳: '亥', 亥: '巳',
|
|
6483
|
+
};
|
|
6484
|
+
const CAIKU_WEAK_PCT = 8;
|
|
6485
|
+
|
|
6486
|
+
/**
|
|
6487
|
+
* 财库:日主所克五行(财)的墓库,落在四支上;库被冲开才是「开库」。
|
|
6488
|
+
* @param {object} p
|
|
6489
|
+
* @param {string} p.dayStem 日干
|
|
6490
|
+
* @param {object} p.pillars 四柱
|
|
6491
|
+
* @param {object} p.wuxing 五行分值
|
|
6492
|
+
* @param {object} p.yongshen 喜忌结果
|
|
6493
|
+
*/
|
|
6494
|
+
function caiKuOf({ dayStem, pillars = {}, wuxing = {}, yongshen = {} }) {
|
|
6495
|
+
const roles = elementRoles(dayStem);
|
|
6496
|
+
const caiEl = roles.cai;
|
|
6497
|
+
const store = TOMB_OF[caiEl] || '';
|
|
6498
|
+
const keys = ['year', 'month', 'day', 'hour'].filter((k) => pillars[k] && pillars[k].branch);
|
|
6499
|
+
const at = keys.filter((k) => pillars[k].branch === store);
|
|
6500
|
+
const openerBranch = BRANCH_CHONG[store] || '';
|
|
6501
|
+
const openers = keys.filter((k) => pillars[k].branch === openerBranch);
|
|
6502
|
+
|
|
6503
|
+
const total = Object.values(wuxing).reduce((n, v) => n + (Number(v) || 0), 0);
|
|
6504
|
+
const w = (el) => Math.round((Number(wuxing[el]) || 0) * 10) / 10;
|
|
6505
|
+
const pctOf = (el) => (total > 0 ? Math.round((w(el) / total) * 1000) / 10 : 0);
|
|
6506
|
+
const caiPct = pctOf(caiEl);
|
|
6507
|
+
const caiWeak = caiPct < CAIKU_WEAK_PCT;
|
|
6508
|
+
|
|
6509
|
+
const favor = Array.isArray(yongshen.favor) ? yongshen.favor : [];
|
|
6510
|
+
const avoid = Array.isArray(yongshen.avoid) ? yongshen.avoid : [];
|
|
6511
|
+
const favorable = favor.includes(caiEl);
|
|
6512
|
+
const avoidable = avoid.includes(caiEl);
|
|
6513
|
+
const opened = at.length > 0 && openers.length > 0;
|
|
6514
|
+
// 财星入库:库支的藏干里出现财这一行(不论本气/中气/余气),与「财库」是两件事。
|
|
6515
|
+
// 没有库支时这两项一律为假——不能拿「本该是库的那一支」的藏干去充数。
|
|
6516
|
+
const hiddenEls = at.length ? (HIDDEN[store] || []).map((h) => STEM_ELEMENT[h]) : [];
|
|
6517
|
+
const caiInStore = hiddenEls.includes(caiEl);
|
|
6518
|
+
const mainInStore = at.length > 0 && (HIDDEN[store] || []).slice(0, 1).map((h) => STEM_ELEMENT[h]).includes(caiEl);
|
|
6519
|
+
|
|
6520
|
+
const label = (ks) => ks.map((k) => ({ year: '年', month: '月', day: '日', hour: '时' }[k])).join('、');
|
|
6521
|
+
|
|
6522
|
+
let verdict = '无财库';
|
|
6523
|
+
let detail = `日主${dayStem}${roles.me},财为${caiEl},${caiEl}之墓在${store};四支里没有${store},本盘不立财库`
|
|
6524
|
+
+ `${openers.length ? `(${label(openers)}支见${openerBranch},但没有${store}可冲,冲不成库)` : ''}。`;
|
|
6525
|
+
if (at.length) {
|
|
6526
|
+
// 四库每一支都含所墓那一行的余气(戌藏丁、丑藏辛、辰藏癸、未藏乙),
|
|
6527
|
+
// 所以「库里有财」几乎恒真;真正要分的是本气与余气——这才是「财星入库」的深浅。
|
|
6528
|
+
const storeNote = mainInStore
|
|
6529
|
+
? `(${store}藏干本气即${caiEl},正合「财星入库」)`
|
|
6530
|
+
: `(${store}藏干里的${caiEl}只是余气,财星算入了库,但入得浅)`;
|
|
6531
|
+
const head = `日主${dayStem}${roles.me},财为${caiEl},${caiEl}之墓在${store};`
|
|
6532
|
+
+ `本盘${label(at)}支见${store},财库成立${caiInStore ? storeNote : ',库中不见财星'}。`;
|
|
6533
|
+
const tail = openers.length
|
|
6534
|
+
? `${label(openers)}支见${openerBranch},${store}${openerBranch}相冲,库门被冲开。`
|
|
6535
|
+
: `四支里没有${openerBranch}来冲,库是闭的——要等岁运引动。`;
|
|
6536
|
+
const step = (() => {
|
|
6537
|
+
if (favorable && !caiWeak) return opened ? `财${caiEl}为喜用且不弱(${caiPct}%),库开则财有出路,主发。` : `财${caiEl}为喜用且不弱(${caiPct}%),但库未开,是「有财待发」,不是已经发财。`;
|
|
6538
|
+
if (favorable && caiWeak) return opened ? `财${caiEl}为喜用但偏弱(${caiPct}%),库开只是流动起来,发而不厚,先补财再谈库。` : `财${caiEl}为喜用但偏弱(${caiPct}%),库又未开,宜先扶财。`;
|
|
6539
|
+
if (avoidable) return opened ? `财${caiEl}为忌(${caiPct}%),开库反主破财,冲得越实越明显。` : `财${caiEl}为忌(${caiPct}%),但库未开,破财之势未启。`;
|
|
6540
|
+
return opened ? `财${caiEl}在喜忌里为中性(${caiPct}%),开库只算动了财,吉凶看岁运把哪一边引起来。` : `财${caiEl}在喜忌里为中性(${caiPct}%),库未开,暂不作财库论。`;
|
|
6541
|
+
})();
|
|
6542
|
+
verdict = opened
|
|
6543
|
+
? (favorable && !caiWeak ? '开库主发' : avoidable ? '开库反主破财' : favorable ? '开库发而不厚' : '开库,吉凶待引动')
|
|
6544
|
+
: (favorable ? (caiWeak ? '库闭财弱' : '库闭待冲开') : avoidable ? '库闭未开' : '库闭,吉凶待引动');
|
|
6545
|
+
detail = `${head}${tail}${step}`;
|
|
6546
|
+
}
|
|
6547
|
+
|
|
6548
|
+
return {
|
|
6549
|
+
dayElement: roles.me,
|
|
6550
|
+
caiElement: caiEl,
|
|
6551
|
+
store,
|
|
6552
|
+
present: at.length > 0,
|
|
6553
|
+
positions: at,
|
|
6554
|
+
opener: openerBranch,
|
|
6555
|
+
opened,
|
|
6556
|
+
openerPositions: openers,
|
|
6557
|
+
caiInStore,
|
|
6558
|
+
mainInStore,
|
|
6559
|
+
caiPct,
|
|
6560
|
+
caiWeak,
|
|
6561
|
+
favorState: favorable ? '喜' : avoidable ? '忌' : '中',
|
|
6562
|
+
verdict,
|
|
6563
|
+
detail,
|
|
6564
|
+
rule: '财库=财星(日主所克那一行)之墓在四支上;开库=库支被对冲。「开库才发」有两个前提:财为喜用、且财不弱;财为忌时开库反主破财。',
|
|
6565
|
+
method: `五行之墓取木未/火戌/金丑/水辰,土取戊土长生墓位戌;问真原表作「水木日主在戌、火在丑、土在辰、金在未」,与本法五格全同。财「不弱」以全局占比 >= ${CAIKU_WEAK_PCT}% 折算,是本插件口径,非古法原数。`,
|
|
6566
|
+
boundary: '只作只读标注:不改旺衰分、不改喜忌、不参与取格。另一说把辰当作「水土同宫」的土墓,则木日主财库会落在辰,本插件不取此说。',
|
|
6567
|
+
};
|
|
6568
|
+
}
|
|
6569
|
+
|
|
6570
|
+
// ── 三平衡(富贵层次的解读方向)────────────────────────────
|
|
6571
|
+
|
|
6572
|
+
// 地支阴阳:论八字时以藏干本气的阴阳定,不以奇偶定(问真《基础知识·干支上》)。
|
|
6573
|
+
// 子藏癸、午藏丁、卯藏乙、酉藏辛 → 阴;亥藏壬、巳藏丙、寅藏甲、申藏庚 → 阳。
|
|
6574
|
+
const BRANCH_YINYANG = {
|
|
6575
|
+
子: '阴', 丑: '阴', 寅: '阳', 卯: '阴', 辰: '阳', 巳: '阳',
|
|
6576
|
+
午: '阴', 未: '阴', 申: '阳', 酉: '阴', 戌: '阳', 亥: '阳',
|
|
6577
|
+
};
|
|
6578
|
+
const BALANCE_SPREAD_MAX = 22;
|
|
6579
|
+
const BALANCE_MIN_PCT = 4;
|
|
6580
|
+
const BALANCE_YINYANG_LO = 3;
|
|
6581
|
+
const BALANCE_YINYANG_HI = 5;
|
|
6582
|
+
const BALANCE_CLIMATE_W = 0.3;
|
|
6583
|
+
|
|
6584
|
+
/**
|
|
6585
|
+
* 三平衡:五行平衡 / 阴阳平衡 / 寒暖燥湿平衡。
|
|
6586
|
+
* @param {object} p
|
|
6587
|
+
* @param {string} p.dayStem 日干
|
|
6588
|
+
* @param {object} p.pillars 四柱
|
|
6589
|
+
* @param {object} p.wuxing 五行分值
|
|
6590
|
+
* @param {object} p.climate judgeClimate 的结果(yongshen.climate)
|
|
6591
|
+
* @param {object} p.strength 旺衰结果(只用于文案)
|
|
6592
|
+
*/
|
|
6593
|
+
function balanceOf({ dayStem, pillars = {}, wuxing = {}, climate = null, strength = null }) {
|
|
6594
|
+
const total = Object.values(wuxing).reduce((n, v) => n + (Number(v) || 0), 0);
|
|
6595
|
+
const w = (el) => Math.round((Number(wuxing[el]) || 0) * 10) / 10;
|
|
6596
|
+
const pctOf = (el) => (total > 0 ? Math.round((w(el) / total) * 1000) / 10 : 0);
|
|
6597
|
+
|
|
6598
|
+
// ① 五行平衡:最高与最低的占比差,加上「有没有几乎缺掉的
|
|
6599
|
+
const pcts = ELEMENTS.map((el) => ({ element: el, pct: pctOf(el) }));
|
|
6600
|
+
const spread = Math.round((Math.max(...pcts.map((x) => x.pct)) - Math.min(...pcts.map((x) => x.pct))) * 10) / 10;
|
|
6601
|
+
const lowest = pcts.slice().sort((a, b) => a.pct - b.pct)[0];
|
|
6602
|
+
const highest = pcts.slice().sort((a, b) => b.pct - a.pct)[0];
|
|
6603
|
+
const wuxingOk = spread <= BALANCE_SPREAD_MAX && lowest.pct >= BALANCE_MIN_PCT;
|
|
6604
|
+
const wuxingDetail = wuxingOk
|
|
6605
|
+
? `五行占比在 ${lowest.pct}%–${highest.pct}% 之间,极差 ${spread} 个百分点,没有明显缺项。`
|
|
6606
|
+
: lowest.pct < BALANCE_MIN_PCT
|
|
6607
|
+
? `${lowest.element}只有 ${lowest.pct}%,近乎缺项;${highest.element}高到 ${highest.pct}%,偏得明显。`
|
|
6608
|
+
: `${highest.element}高到 ${highest.pct}%、${lowest.element}只有 ${lowest.pct}%,极差 ${spread} 个百分点,偏枯。`;
|
|
6609
|
+
|
|
6610
|
+
// ② 阴阳平衡:天干按奇偶,地支按藏干本气
|
|
6611
|
+
const stemKeys = ['year', 'month', 'day', 'hour'].filter((k) => pillars[k] && pillars[k].stem);
|
|
6612
|
+
const yStem = stemKeys.filter((k) => isYangStem(pillars[k].stem)).length;
|
|
6613
|
+
const yBranch = stemKeys.filter((k) => BRANCH_YINYANG[pillars[k].branch] === '阳').length;
|
|
6614
|
+
const yang = yStem + yBranch;
|
|
6615
|
+
const yin = stemKeys.length * 2 - yang;
|
|
6616
|
+
const yinyangOk = yang >= BALANCE_YINYANG_LO && yang <= BALANCE_YINYANG_HI;
|
|
6617
|
+
const pure = yang === 0 ? '纯阴' : yang === stemKeys.length * 2 ? '纯阳' : '';
|
|
6618
|
+
const yinyangDetail = pure
|
|
6619
|
+
? `${pure}之局(阳 ${yang}/阴 ${yin}),课里说纯阴纯阳减贵减富。`
|
|
6620
|
+
: yinyangOk
|
|
6621
|
+
? `天干阳 ${yStem}、地支阳 ${yBranch},合计阳 ${yang}/阴 ${yin},阴阳相配。`
|
|
6622
|
+
: `天干阳 ${yStem}、地支阳 ${yBranch},合计阳 ${yang}/阴 ${yin},一边倒。`;
|
|
6623
|
+
|
|
6624
|
+
// ③ 寒暖燥湿:气候平和,或调候之物在原局有根
|
|
6625
|
+
const kind = climate && climate.kind ? climate.kind : '';
|
|
6626
|
+
const needEl = climate && climate.need && climate.need.element ? climate.need.element : '';
|
|
6627
|
+
const needW = needEl ? w(needEl) : 0;
|
|
6628
|
+
const climateOk = kind === '平和' || (!!needEl && needW >= BALANCE_CLIMATE_W);
|
|
6629
|
+
const climateDetail = !kind
|
|
6630
|
+
? '未见气候判定,本项不计。'
|
|
6631
|
+
: kind === '平和'
|
|
6632
|
+
? `气候平和(${kind}),寒暖燥湿不偏。`
|
|
6633
|
+
: needEl
|
|
6634
|
+
? climateOk
|
|
6635
|
+
? `气候偏${kind},需${needEl}调候;原局${needEl}已有 ${needW} 分,调候之物在位。`
|
|
6636
|
+
: `气候偏${kind},需${needEl}调候;原局${needEl}只有 ${needW} 分,调候之物不实。`
|
|
6637
|
+
: `气候偏${kind},但未见明确调候之物。`;
|
|
6638
|
+
|
|
6639
|
+
const hits = [wuxingOk, yinyangOk, climateOk].filter(Boolean).length;
|
|
6640
|
+
const tier = hits === 3 ? '三备' : hits === 2 ? '两备' : hits === 1 ? '一备' : '零备';
|
|
6641
|
+
const tierText = {
|
|
6642
|
+
三备: '三方面平衡全备,课里按大富大贵论方向。',
|
|
6643
|
+
两备: '三方面备了两项,课里按中富中贵论方向。',
|
|
6644
|
+
一备: '三方面只备一项,课里按小富小贵论方向。',
|
|
6645
|
+
零备: '三项都不备,课里不给富贵层次;这不等于命薄,只说明这套衡量法在这一盘上不适用。',
|
|
6646
|
+
}[tier];
|
|
6647
|
+
|
|
6648
|
+
return {
|
|
6649
|
+
wuxing: { ok: wuxingOk, spread, highest: highest.element, lowest: lowest.element, pcts, detail: wuxingDetail },
|
|
6650
|
+
yinyang: { ok: yinyangOk, yang, yin, yangStems: yStem, yangBranches: yBranch, pure, detail: yinyangDetail },
|
|
6651
|
+
climate: { ok: climateOk, kind, need: needEl || null, needWeight: needW, detail: climateDetail },
|
|
6652
|
+
hits,
|
|
6653
|
+
tier,
|
|
6654
|
+
text: `五行平衡:${wuxingOk ? '备' : '不备'}——${wuxingDetail}阴阳平衡:${yinyangOk ? '备' : '不备'}——${yinyangDetail}寒暖燥湿:${climateOk ? '备' : '不备'}——${climateDetail}${tierText}`,
|
|
6655
|
+
strengthNote: strength && strength.level ? `日主${dayStem},旺衰为${strength.level}。` : '',
|
|
6656
|
+
rule: '问真《专业知识·论八字富贵层次》:五行平衡、阴阳平衡、寒暖燥湿平衡,三方面全备为大富大贵,两备为中富中贵,一备为小富小贵。',
|
|
6657
|
+
method: `阈值是本插件的折算口径,不是古法原数:五行看最高最低占比差 <= ${BALANCE_SPREAD_MAX} 个百分点且无一项低于 ${BALANCE_MIN_PCT}%;`
|
|
6658
|
+
+ `阴阳看八位(四天干奇偶 + 四地支本气)阳数在 ${BALANCE_YINYANG_LO}–${BALANCE_YINYANG_HI} 之间;`
|
|
6659
|
+
+ `寒暖燥湿看气候为平和,或调候之物在原局有 ${BALANCE_CLIMATE_W} 分以上。`,
|
|
6660
|
+
boundary: '只作解读方向:不改旺衰分、不改喜忌、不参与取格。格局法的贵贱十式另有专章,不并入这三项。',
|
|
6661
|
+
};
|
|
6662
|
+
}
|
|
6663
|
+
|
|
6282
6664
|
// ── 对外入口 ────────────────────────────────────────────────
|
|
6283
6665
|
|
|
6284
6666
|
/**
|
|
@@ -6305,6 +6687,12 @@ function analyzeBaziFrame({ pillars, dayStem, monthBranch, strength, wuxing }) {
|
|
|
6305
6687
|
const bingyao = bingyaoOf({ dayStem, strength, wuxing, yongshen, geju });
|
|
6306
6688
|
// 闲神:只读标注
|
|
6307
6689
|
const xianshen = xianshenOf({ dayStem, wuxing, pillars, yongshen });
|
|
6690
|
+
// 财库:只读标注,复用上面的喜忌
|
|
6691
|
+
const caiKu = caiKuOf({ dayStem, pillars, wuxing, yongshen });
|
|
6692
|
+
// 三平衡:只读标注,气候取用神层已判好的那一个
|
|
6693
|
+
const balance = balanceOf({
|
|
6694
|
+
dayStem, pillars, wuxing, climate: yongshen.climate || null, strength,
|
|
6695
|
+
});
|
|
6308
6696
|
return {
|
|
6309
6697
|
geju,
|
|
6310
6698
|
primary: month,
|
|
@@ -6313,6 +6701,8 @@ function analyzeBaziFrame({ pillars, dayStem, monthBranch, strength, wuxing }) {
|
|
|
6313
6701
|
yongshen,
|
|
6314
6702
|
bingyao,
|
|
6315
6703
|
xianshen,
|
|
6704
|
+
caiKu,
|
|
6705
|
+
balance,
|
|
6316
6706
|
patternScore,
|
|
6317
6707
|
dayStem,
|
|
6318
6708
|
monthBranch,
|
|
@@ -6321,7 +6711,7 @@ function analyzeBaziFrame({ pillars, dayStem, monthBranch, strength, wuxing }) {
|
|
|
6321
6711
|
};
|
|
6322
6712
|
}
|
|
6323
6713
|
|
|
6324
|
-
return { tenGod, elementRoles, patternScoreOf, tongguanOf, bingyaoOf, xianshenOf, scoreLuck, analyzeBaziFrame };
|
|
6714
|
+
return { tenGod, elementRoles, patternScoreOf, tongguanOf, bingyaoOf, xianshenOf, scoreLuck, caiKuOf, balanceOf, analyzeBaziFrame };
|
|
6325
6715
|
})();
|
|
6326
6716
|
|
|
6327
6717
|
__mods.bazi = (function () {
|
|
@@ -6335,6 +6725,7 @@ const { bool } = (__mods.bool || {});
|
|
|
6335
6725
|
const { nayinOf } = (__mods.nayin || {});
|
|
6336
6726
|
const { SANHE } = (__mods.sanhe || {});
|
|
6337
6727
|
const { analyzeBaziFrame, scoreLuck } = (__mods.geju || {});
|
|
6728
|
+
const { judgeHehua } = (__mods.hehua || {});
|
|
6338
6729
|
const { branchStructureOf, weightPctOf } = (__mods.structure || {});
|
|
6339
6730
|
|
|
6340
6731
|
// 地支藏干(本气 / 中气 / 余气)
|
|
@@ -6588,6 +6979,8 @@ function buildRelations(pillars, keys = ['year', 'month', 'day', 'hour']) {
|
|
|
6588
6979
|
branches: uniq(branchOut),
|
|
6589
6980
|
anhe: anheOf(pillars, keys),
|
|
6590
6981
|
anheNote: '暗合只作取象与风水参考,不参与旺衰与格局;只出现一对时按课里可忽略',
|
|
6982
|
+
// 五合化与不化:另起一层判四条件,上面的 stems 文案保持不变(那里只说「待定」)
|
|
6983
|
+
hehua: judgeHehua(pillars, pillars.month ? pillars.month.branch : '', pillars.day ? pillars.day.stem : '', keys),
|
|
6591
6984
|
};
|
|
6592
6985
|
}
|
|
6593
6986
|
|
|
@@ -7212,6 +7605,32 @@ function buildBazi(input) {
|
|
|
7212
7605
|
out.strength.weightPct.placeholderHour = true;
|
|
7213
7606
|
out.strength.weightPct.note = '时柱暂缺:时柱权重不计入合计(本盘 81%),不重新归一化;补上出生时刻后再按 100% 看';
|
|
7214
7607
|
}
|
|
7608
|
+
// 财库与三平衡都用到了时支:财库看四支有没有库、有没有冲开,三平衡数地支阴阳。
|
|
7609
|
+
// 与结构同一条规矩——照实标占位,不把编出来的时支说成实有。
|
|
7610
|
+
if (out.frame && out.frame.caiKu) {
|
|
7611
|
+
const ck = out.frame.caiKu;
|
|
7612
|
+
ck.placeholderHour = true;
|
|
7613
|
+
// 判「这一条要不要紧」不能看占位时支碰巧有没有库/冲,要看结论本身是否依赖未知的时支:
|
|
7614
|
+
// 库与冲都已落在年月日三支上才稳;库没找到、或库找到了但冲没找到,
|
|
7615
|
+
// 都可能是因为真正的时支里正好有那一支,结论必须存疑。
|
|
7616
|
+
const atHour = (ck.positions || []).includes('hour') || (ck.openerPositions || []).includes('hour');
|
|
7617
|
+
const robust = ck.present && ck.opened && !atHour;
|
|
7618
|
+
ck.note = robust
|
|
7619
|
+
? '时柱暂缺:库与冲都已落在年月日三支上,结论不受时支影响'
|
|
7620
|
+
: '时柱暂缺:库或开库可能落在未知的时支上,这一条只按正午占位算,补上出生时刻后可能整条改变';
|
|
7621
|
+
ck.detail = `${ck.detail}(时支为占位值)`;
|
|
7622
|
+
}
|
|
7623
|
+
if (out.frame && out.frame.balance) {
|
|
7624
|
+
const bal = out.frame.balance;
|
|
7625
|
+
bal.placeholderHour = true;
|
|
7626
|
+
bal.note = '时柱暂缺:阴阳的八位与五行占比都按正午时柱占位算过,补上出生时刻后层次可能变化';
|
|
7627
|
+
bal.text = `${bal.text}(阴阳与五行未含真实时柱,层次只作方向)`;
|
|
7628
|
+
}
|
|
7629
|
+
if (out.relations && out.relations.hehua) {
|
|
7630
|
+
const hh = out.relations.hehua;
|
|
7631
|
+
hh.placeholderHour = true;
|
|
7632
|
+
hh.text = `${hh.text}\n(时柱暂缺:只判了年月日三干,日干与时干那一组无从判起)`;
|
|
7633
|
+
}
|
|
7215
7634
|
out.notes = [
|
|
7216
7635
|
'时柱暂缺:未提供出生时刻,时柱不对外给出,也不计入神煞与干支关系',
|
|
7217
7636
|
'旺衰、格局、用神、调候暂以正午时柱估算,补上出生时刻后可能改变',
|
|
@@ -23035,6 +23454,29 @@ function baziInterpret(r) {
|
|
|
23035
23454
|
+ `边界:暗合与上面的「地支关系」(三合、三会、六合、六冲、刑、害)是两条线,本插件不把它们合并计分;`
|
|
23036
23455
|
+ `${r.relations.anhe.length === 1 ? '本盘只出现一对,按课里口径可以直接忽略。' : `本盘共 ${r.relations.anhe.length} 对,可作取象参考,但仍不折旺衰。`}`,
|
|
23037
23456
|
}] : []),
|
|
23457
|
+
// 五合化与不化:上面「天干关系」只写「化某待定」,这一节才拿四条件去判。
|
|
23458
|
+
// 判完仍然不改旺衰与喜忌——所以把「不改什么」写进节里,别让人当成合化后重排。
|
|
23459
|
+
...(r.relations && r.relations.hehua && Array.isArray(r.relations.hehua.items) && r.relations.hehua.items.length ? [{
|
|
23460
|
+
key: 'hehua', label: '合化',
|
|
23461
|
+
text: `${r.relations.hehua.text}\n`
|
|
23462
|
+
+ `口径:${r.relations.hehua.method}\n`
|
|
23463
|
+
+ `边界:${r.relations.hehua.boundary}\n`
|
|
23464
|
+
+ (r.relations.hehua.notes || []).map((n) => `· ${n}`).join('\n'),
|
|
23465
|
+
}] : []),
|
|
23466
|
+
// 财库:库在四支、冲开与否、财是喜是忌——三件事一起才有结论
|
|
23467
|
+
...(frame.caiKu ? [{
|
|
23468
|
+
key: 'caiku', label: '财库',
|
|
23469
|
+
text: `【${frame.caiKu.verdict}】${frame.caiKu.detail}\n`
|
|
23470
|
+
+ `口径:${frame.caiKu.rule}${frame.caiKu.method}\n`
|
|
23471
|
+
+ `边界:${frame.caiKu.boundary}`,
|
|
23472
|
+
}] : []),
|
|
23473
|
+
// 三平衡:只给富贵层次的「解读方向」,不反改旺衰与喜忌
|
|
23474
|
+
...(frame.balance ? [{
|
|
23475
|
+
key: 'balance', label: '三平衡',
|
|
23476
|
+
text: `【${frame.balance.tier}】${frame.balance.text}\n`
|
|
23477
|
+
+ `口径:${frame.balance.rule}${frame.balance.method}\n`
|
|
23478
|
+
+ `边界:${frame.balance.boundary}`,
|
|
23479
|
+
}] : []),
|
|
23038
23480
|
(() => {
|
|
23039
23481
|
const ss = r.shensha;
|
|
23040
23482
|
const cols = { year: '年', month: '月', day: '日', hour: '时' };
|
|
@@ -27048,9 +27490,20 @@ function baziSummary(r) {
|
|
|
27048
27490
|
: cl.label === '燥热' ? '火土偏燥,像久旱的地,需要水和湿气来松一松'
|
|
27049
27491
|
: '寒暖相对均衡,没有极端的偏枯';
|
|
27050
27492
|
const needEl = (cl.need && cl.need.element) || favor[0] || '';
|
|
27493
|
+
// 财库:库在不在、开没开、财是喜是忌——把三件事压成一句人话,接在总纲末尾
|
|
27494
|
+
const ck = (r.frame && r.frame.caiKu) || null;
|
|
27495
|
+
const caiKuLine = (() => {
|
|
27496
|
+
if (!ck) return '';
|
|
27497
|
+
if (!ck.present) return '财这一路没有立库,赚多少看明面上的财星与行运,不靠「开库」这一说。';
|
|
27498
|
+
if (ck.opened && ck.verdict === '开库主发') return `财有库(${ck.store}),而且库门被${ck.opener}冲开了:钱是能进来的,关键在于你肯不肯把它存住。`;
|
|
27499
|
+
if (ck.opened && ck.verdict === '开库反主破财') return `财有库(${ck.store})也被冲开了,但这一行在你这盘上是忌:动得越多漏得越快,稳比冲重要。`;
|
|
27500
|
+
if (ck.opened) return `财有库(${ck.store}),库门也开了,但财本身不算厚:有得有失,别指望一次翻身。`;
|
|
27501
|
+
return `财有库(${ck.store}),门还关着:不是没有,是要等对的时间或对的选择把它引出来。`;
|
|
27502
|
+
})();
|
|
27051
27503
|
const lead = `${dm.stem || ''}${dm.element || ''}日主,生在${season}${month.branch || ''}月:${climateWord}。`
|
|
27052
27504
|
+ `${needEl ? `最需要的是${needEl}${cl.need && cl.need.why ? `——${cl.need.why}` : ''}。` : ''}`
|
|
27053
|
-
+ `整体${r.strength ? r.strength.level : '中和'},不是极旺也不是极弱,所以${r.strength && r.strength.level === '身弱' ? '很多事要靠外部条件配合,硬扛不如借力' : '撑得住,关键是别把力气用在错的地方'}
|
|
27505
|
+
+ `整体${r.strength ? r.strength.level : '中和'},不是极旺也不是极弱,所以${r.strength && r.strength.level === '身弱' ? '很多事要靠外部条件配合,硬扛不如借力' : '撑得住,关键是别把力气用在错的地方'}。`
|
|
27506
|
+
+ caiKuLine;
|
|
27054
27507
|
|
|
27055
27508
|
// ── 底色:十神权重前两位 ──
|
|
27056
27509
|
const top2 = topGods.slice(0, 2).map(([k]) => k);
|
|
@@ -27105,6 +27558,17 @@ function baziSummary(r) {
|
|
|
27105
27558
|
if (avoid.length) advice.push(`少把自己放在${avoid.slice(0, 2).join('、')}过重的环境里——不是不能碰,是别长期待在那种氛围中。`);
|
|
27106
27559
|
if (top2.includes('印')) advice.push('给「想」设个时限:一件事想超过十分钟还没结论,就先做一个最小动作,用行动换信息。');
|
|
27107
27560
|
if (gejuNames.includes('伤官见官')) advice.push('把标准用在事情上,不要用在人身上;对人提要求之前,先说清你需要什么。');
|
|
27561
|
+
// 三平衡:只作「往哪个方向补」的一句话,不给富贵层次的下断语(层次见解析层的三平衡节)
|
|
27562
|
+
const bal = (r.frame && r.frame.balance) || null;
|
|
27563
|
+
if (bal) {
|
|
27564
|
+
const gaps = [];
|
|
27565
|
+
if (!bal.wuxing.ok) gaps.push(`五行偏在${bal.wuxing.highest}、缺在${bal.wuxing.lowest}`);
|
|
27566
|
+
if (!bal.yinyang.ok) gaps.push(bal.yinyang.pure ? `${bal.yinyang.pure}之局` : `阴阳一边倒(阳 ${bal.yinyang.yang}/阴 ${bal.yinyang.yin})`);
|
|
27567
|
+
if (!bal.climate.ok) gaps.push(`寒暖燥湿没调匀(${bal.climate.kind})`);
|
|
27568
|
+
advice.push(gaps.length
|
|
27569
|
+
? `结构上${gaps.join('、')}:不必去「补命」,把这几处当作长期要照看的方向就行。`
|
|
27570
|
+
: '五行、阴阳、寒暖燥湿三方面都还匀:这种盘最忌讳的是为了「更好」而硬改节奏,稳住就是优势。');
|
|
27571
|
+
}
|
|
27108
27572
|
|
|
27109
27573
|
return {
|
|
27110
27574
|
system: 'bazi',
|
|
@@ -29663,7 +30127,7 @@ return { interpret, DIRECTIONS, DIRECTION_DEFAULT, BRIGHTNESS, flowOf, parseDate
|
|
|
29663
30127
|
})();
|
|
29664
30128
|
|
|
29665
30129
|
window.Engine = __mods.index;
|
|
29666
|
-
window.__MP_VER = "0.
|
|
30130
|
+
window.__MP_VER = "0.67.1";
|
|
29667
30131
|
</script>
|
|
29668
30132
|
<script>
|
|
29669
30133
|
// 两个 UI 共用的表单规则:宿主面板(src/app.js)与独立页(src/web-ui.js)。
|
|
@@ -31232,7 +31696,7 @@ window.__MP_VER = "0.66.0";
|
|
|
31232
31696
|
.pp-disp label{display:inline-flex;align-items:center;gap:5px;cursor:pointer;color:var(--ink2);user-select:none;padding:2px 0;min-height:26px}
|
|
31233
31697
|
.pp-disp-box{width:13px;height:13px;border:1px solid var(--line);border-radius:3px;background:var(--card);display:inline-block;flex:none}
|
|
31234
31698
|
.pp-disp label:hover .pp-disp-box{border-color:var(--lu)}
|
|
31235
|
-
/* 勾选态:
|
|
31699
|
+
/* 勾选态:17 条 :checked 各自点亮自己 label 的方框(复选框与 .pp-disp 同为 .pp 直接子元素) */
|
|
31236
31700
|
#ppm-d-ss:checked~.pp-disp label[for="ppm-d-ss"] .pp-disp-box,
|
|
31237
31701
|
#ppm-d-sbg:checked~.pp-disp label[for="ppm-d-sbg"] .pp-disp-box,
|
|
31238
31702
|
#ppm-d-zha:checked~.pp-disp label[for="ppm-d-zha"] .pp-disp-box,
|
|
@@ -31246,7 +31710,10 @@ window.__MP_VER = "0.66.0";
|
|
|
31246
31710
|
#ppm-d-zha-bold:checked~.pp-disp label[for="ppm-d-zha-bold"] .pp-disp-box,
|
|
31247
31711
|
#ppm-d-bad-ink:checked~.pp-disp label[for="ppm-d-bad-ink"] .pp-disp-box,
|
|
31248
31712
|
#ppm-d-bold:checked~.pp-disp label[for="ppm-d-bold"] .pp-disp-box,
|
|
31249
|
-
#ppm-d-hs:checked~.pp-disp label[for="ppm-d-hs"] .pp-disp-box
|
|
31713
|
+
#ppm-d-hs:checked~.pp-disp label[for="ppm-d-hs"] .pp-disp-box,
|
|
31714
|
+
#ppm-d-rigan:checked~.pp-disp label[for="ppm-d-rigan"] .pp-disp-box,
|
|
31715
|
+
#ppm-d-njq:checked~.pp-disp label[for="ppm-d-njq"] .pp-disp-box,
|
|
31716
|
+
#ppm-d-tjz:checked~.pp-disp label[for="ppm-d-tjz"] .pp-disp-box{background:var(--lu);border-color:var(--lu);box-shadow:inset 0 0 0 2px var(--card)}
|
|
31250
31717
|
/* 组1 飞星派显示(默认全勾,取消才隐藏) */
|
|
31251
31718
|
#ppm-d-ss:not(:checked)~.pp-body .pp-ss-txt{display:none}
|
|
31252
31719
|
#ppm-d-sbg:not(:checked)~.pp-body .pp-st.st-sbg{display:none}
|