826 lines
56 KiB
HTML
826 lines
56 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh">
|
||
<head>
|
||
<!-- Google tag (gtag.js) -->
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-LVVXH3TL04"></script>
|
||
<script>
|
||
window.dataLayer = window.dataLayer || [];
|
||
function gtag(){dataLayer.push(arguments);}
|
||
gtag('js', new Date());
|
||
gtag('config', 'G-LVVXH3TL04');
|
||
</script>
|
||
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
|
||
<title>愈心谷 · AI东方养生顾问</title>
|
||
<style>
|
||
:root{--pri:#E54D42;--gold:#C8923A;--wd:#5CB85C;--fr:#E54D42;--ea:#E8985A;--mt:#C8923A;--wt:#4A90E2;--bg0:#FFD1C7;--bg1:#FFC8B5;--bg2:#FFF8F0;--bg3:#fff5f0}
|
||
*{box-sizing:border-box;margin:0;padding:0}
|
||
body{
|
||
font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
|
||
background:linear-gradient(180deg,var(--bg0) 0%,var(--bg1) 30%,var(--bg2) 60%,var(--bg3) 100%);
|
||
min-height:100vh;color:#333;-webkit-font-smoothing:antialiased;
|
||
}
|
||
.container{max-width:500px;margin:0 auto;padding:20px 14px 40px}
|
||
.header{text-align:center;padding:32px 0 20px}
|
||
.header .logo{font-size:20px;font-weight:700;color:var(--pri);letter-spacing:1px}
|
||
.header .sub{font-size:12px;color:rgba(0,0,0,0.35);margin-top:4px}
|
||
.card{
|
||
background:#fff;border-radius:16px;padding:20px;margin-bottom:14px;
|
||
box-shadow:0 2px 12px rgba(0,0,0,0.04);
|
||
}
|
||
.card h2{font-size:16px;font-weight:600;margin-bottom:12px;color:#333;display:flex;align-items:center;gap:8px}
|
||
.card h3{font-size:14px;font-weight:600;margin:14px 0 8px;color:#555}
|
||
.card h4{font-size:13px;font-weight:600;color:#333;margin-bottom:4px}
|
||
.card p.dim{font-size:12px;color:#aaa;margin-bottom:14px}
|
||
|
||
/* Tabs */
|
||
.tabs{display:flex;gap:0;margin-bottom:14px;background:#f5f0eb;border-radius:10px;padding:3px}
|
||
.tab{flex:1;text-align:center;padding:10px 0;border-radius:8px;font-size:13px;cursor:pointer;color:#888;transition:all 0.15s}
|
||
.tab.active{background:#fff;color:var(--pri);font-weight:600;box-shadow:0 1px 3px rgba(0,0,0,0.06)}
|
||
|
||
/* Form */
|
||
.fg{margin-bottom:12px}
|
||
.fg label{display:block;font-size:12px;color:#999;margin-bottom:4px;font-weight:500}
|
||
.fg input,.fg select{width:100%;padding:12px 14px;border:1.5px solid #e8e0d8;border-radius:10px;font-size:15px;outline:none;background:#fdfaf7}
|
||
.fg input:focus,.fg select:focus{border-color:var(--pri)}
|
||
.fr{display:flex;gap:10px}.fr .fg{flex:1}
|
||
.btn{width:100%;padding:14px;border:none;border-radius:12px;font-size:16px;font-weight:600;cursor:pointer}
|
||
.btn-pri{background:var(--pri);color:#fff}.btn-pri:active{opacity:0.85}
|
||
|
||
/* Pentagram */
|
||
.penta{display:flex;justify-content:center;gap:8px;margin:16px 0;flex-wrap:wrap}
|
||
.pb{text-align:center;min-width:44px}
|
||
.pb .f{height:120px;width:28px;border-radius:14px;margin:0 auto 6px;position:relative;background:#f0ebe5;overflow:hidden}
|
||
.pb .fi{position:absolute;bottom:0;left:0;right:0;border-radius:14px;transition:height 0.6s ease}
|
||
.pb .l{font-size:11px;color:#888}
|
||
.pb .v{font-size:13px;font-weight:700;margin-top:2px}
|
||
|
||
/* Stats */
|
||
.stats2{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:8px 0}
|
||
.st2{padding:14px 10px;border-radius:10px;background:#fdf8f5;text-align:center}
|
||
.st2 .v{font-size:20px;font-weight:700}
|
||
.st2 .l{font-size:11px;color:#999;margin-top:2px}
|
||
.st2 .d{font-size:11px;color:#bbb;margin-top:2px;line-height:1.5}
|
||
|
||
/* Bazi table */
|
||
.bzt{width:100%;border-collapse:collapse;font-size:13px;margin:10px 0}
|
||
.bzt th{background:#fdf8f5;padding:10px 6px;font-weight:600;font-size:11px;color:#999}
|
||
.bzt td{text-align:center;padding:10px 6px;border-bottom:1px solid #f5f0eb}
|
||
.bzt td strong{font-size:16px}
|
||
.bzt .el{font-size:11px;color:#aaa}
|
||
|
||
/* Tags */
|
||
.tags{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}
|
||
.tag{padding:4px 12px;border-radius:20px;font-size:12px;font-weight:500}
|
||
.tg{background:#E6FFE8;color:#388E3C}
|
||
.tw{background:#FFECEC;color:var(--pri)}
|
||
.tb{background:#E6F0FF;color:var(--wt)}
|
||
.to{background:#FFF8E6;color:var(--ea)}
|
||
|
||
/* Risk */
|
||
.rk{padding:14px;border-radius:12px;margin-bottom:10px;border-left:4px solid}
|
||
.rk.r1{background:#FFF0ED;border-color:var(--fr)}
|
||
.rk.r2{background:#FFF8E6;border-color:var(--ea)}
|
||
.rk.r3{background:#E6F0FF;border-color:var(--wt)}
|
||
.rk h4{font-size:14px;margin-bottom:6px}
|
||
.rk p.x{font-size:12px;color:#888;margin-bottom:6px;line-height:1.6}
|
||
.rk ul{list-style:none;padding:0}
|
||
.rk li{font-size:12px;color:#666;padding:2px 0}
|
||
.rk li::before{content:'· ';color:var(--pri)}
|
||
|
||
/* Suggest */
|
||
.sr{display:flex;gap:8px;margin-bottom:10px}
|
||
.si{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}
|
||
.sb{flex:1}
|
||
.sb .t{font-size:14px;font-weight:600;margin-bottom:4px}
|
||
.sb .i{font-size:12px;color:#666;line-height:1.8}
|
||
.sb .r{font-size:11px;color:#aaa;margin-top:2px}
|
||
.sg{background:#E6FFE8}.sr2{background:#FFECEC}.sbl{background:#E6F0FF}.so{background:#FFF8E6}
|
||
|
||
/* Score */
|
||
.sc{display:flex;align-items:center;gap:10px;padding:8px 0}
|
||
.sl{font-size:13px;width:40px;text-align:right}
|
||
.sb2{flex:1;height:8px;border-radius:4px;background:#f0ebe5;overflow:hidden}
|
||
.sf{height:100%;border-radius:4px;transition:width 0.4s ease}
|
||
.sv{font-size:13px;font-weight:600;width:32px}
|
||
|
||
/* Quote */
|
||
.qt{background:linear-gradient(135deg,#FFF8F0,#FFECEC);border-radius:12px;padding:16px;text-align:center;margin:10px 0}
|
||
.qt .t{font-size:15px;font-weight:600;color:var(--pri);font-style:italic}
|
||
.qt .e{font-size:12px;color:#888;margin-top:6px;line-height:1.6}
|
||
|
||
/* Organ stars */
|
||
.or{display:flex;justify-content:space-between;align-items:center;padding:6px 0;border-bottom:1px solid #f5f0eb}
|
||
.or:last-child{border-bottom:none}
|
||
.on{font-size:13px;width:30px}
|
||
.os2{color:var(--gold);font-size:14px;letter-spacing:2px}
|
||
.os2 .off{color:#ddd}
|
||
|
||
/* Meridian */
|
||
.mer{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin:10px 0}
|
||
.mi{font-size:11px;padding:6px 8px;border-radius:8px;background:#fdf8f5;text-align:center}
|
||
.mi .t2{font-weight:600;font-size:12px}
|
||
.mi .o2{font-size:10px;color:#999;margin-top:1px}
|
||
|
||
/* WYLQ table */
|
||
.wlt{width:100%;border-collapse:collapse;font-size:12px;margin:8px 0}
|
||
.wlt td{padding:8px 6px;border-bottom:1px solid #f5f0eb}
|
||
.wlt td:first-child{color:#999;white-space:nowrap}
|
||
.wlt td:last-child{font-weight:500}
|
||
|
||
/* Interaction */
|
||
.inter{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0}
|
||
.iv{padding:6px 12px;border-radius:8px;font-size:12px;font-weight:500}
|
||
.iv.good{background:#E6FFE8;color:#388E3C}
|
||
.iv.bad{background:#FFECEC;color:var(--pri)}
|
||
.iv.neut{background:#f5f0eb;color:#888}
|
||
|
||
.hidden{display:none!important}
|
||
.tip{font-size:11px;color:#ccc;text-align:center;margin-top:8px}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div class="container">
|
||
|
||
<div class="header">
|
||
<div class="logo">☯️ 愈心谷 · AI东方养生</div>
|
||
<div class="sub">易经 × 黄帝内经 × 五运六气</div>
|
||
</div>
|
||
|
||
<div class="tabs" id="tabs">
|
||
<div class="tab active" data-tab="profile">📋 先天档案</div>
|
||
<div class="tab" data-tab="weekly">📊 本周报告</div>
|
||
<div class="tab" data-tab="daily">☀️ 今日养生</div>
|
||
</div>
|
||
|
||
<!-- ===== PROFILE ===== -->
|
||
<div id="tab-profile">
|
||
<div class="card" id="formCard">
|
||
<h2>📝 建立先天健康档案</h2>
|
||
<p class="dim">仅需填写一次,系统自动推算八字、五行、体质,生成终身健康画像</p>
|
||
<div class="fg"><label>姓名</label><input id="fname" placeholder="请输入姓名"></div>
|
||
<div class="fg"><label>性别</label><select id="fgender"><option value="男">男</option><option value="女">女</option></select></div>
|
||
<div class="fg"><label>出生日期(公历)</label><input id="fbirth" type="date" value="1990-01-01"></div>
|
||
<div class="fr">
|
||
<div class="fg"><label>出生时间</label><input id="ftime" type="time" value="12:00"></div>
|
||
<div class="fg"><label>出生地</label><input id="fplace" placeholder="如:上海" value="上海"></div>
|
||
</div>
|
||
<button class="btn btn-pri" onclick="gen()">🧬 生成先天体质画像</button>
|
||
<p class="tip">数据仅存本地,不上传服务器</p>
|
||
</div>
|
||
<div id="profileResult" class="hidden">
|
||
<div class="card" id="baziCard"><h2>🔢 八字命盘</h2><div id="baziTable"></div></div>
|
||
<div class="card"><h2>🎨 五行画像</h2><div class="penta" id="pentagram"></div><div id="pentagramNote" style="font-size:12px;color:#999;text-align:center;margin-top:4px"></div></div>
|
||
<div class="card" id="constDetail"></div>
|
||
<div class="card" id="organDetail"></div>
|
||
<div class="card" id="emotionDetail"></div>
|
||
<div class="card" id="personalityCard"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===== WEEKLY ===== -->
|
||
<div id="tab-weekly" class="hidden"><div id="weeklyContent"></div></div>
|
||
|
||
<!-- ===== DAILY ===== -->
|
||
<div id="tab-daily" class="hidden"><div id="dailyContent"></div></div>
|
||
|
||
</div>
|
||
|
||
<script>
|
||
// ===================== DATA =====================
|
||
var TG=['甲','乙','丙','丁','戊','己','庚','辛','壬','癸'];
|
||
var DZ=['子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥'];
|
||
var TGE={甲:'木',乙:'木',丙:'火',丁:'火',戊:'土',己:'土',庚:'金',辛:'金',壬:'水',癸:'水'};
|
||
var DZE={子:'水',丑:'土',寅:'木',卯:'木',辰:'土',巳:'火',午:'火',未:'土',申:'金',酉:'金',戌:'土',亥:'水'};
|
||
var DZ_ANI=['鼠','牛','虎','兔','龙','蛇','马','羊','猴','鸡','狗','猪'];
|
||
var EC={木:'#5CB85C',火:'#E54D42',土:'#E8985A',金:'#C8923A',水:'#4A90E2'};
|
||
var EO=['木','火','土','金','水'];
|
||
// 纳音 (60甲子)
|
||
var NAYIN_MAP = {};
|
||
(function(){
|
||
var nayin60 = [
|
||
'海中金','炉中火','大林木','路旁土','剑锋金','山头火',
|
||
'涧下水','城头土','白蜡金','杨柳木','泉中水','屋上土',
|
||
'霹雳火','松柏木','流年水','砂石金','山下火','平地木',
|
||
'壁上土','金箔金','覆灯火','天河水','大驿土','钗钏金',
|
||
'桑柘木','柘榴木','大海水','石榴木','大海水',
|
||
];
|
||
// Actually 30 pairs, each pair covers 2 years. Let me just hardcode the 30.
|
||
var n30 = [
|
||
'海中金','炉中火','大林木','路旁土','剑锋金','山头火',
|
||
'涧下水','城头土','白蜡金','杨柳木','泉中水','屋上土',
|
||
'霹雳火','松柏木','流年水','砂石金','山下火','平地木',
|
||
'壁上土','金箔金','覆灯火','天河水','大驿土','钗钏金',
|
||
'桑柘木','大溪水','沙中土','天上火','石榴木','大海水'
|
||
];
|
||
for(var i=0;i<60;i++){
|
||
var tg = TG[i%10], dz = DZ[i%12];
|
||
NAYIN_MAP[tg+dz] = n30[Math.floor(i/2)];
|
||
}
|
||
})();
|
||
var ST = [
|
||
{n:'小寒',m:1,d:5},{n:'大寒',m:1,d:20},{n:'立春',m:2,d:4},{n:'雨水',m:2,d:19},
|
||
{n:'惊蛰',m:3,d:5},{n:'春分',m:3,d:20},{n:'清明',m:4,d:5},{n:'谷雨',m:4,d:20},
|
||
{n:'立夏',m:5,d:5},{n:'小满',m:5,d:21},{n:'芒种',m:6,d:5},{n:'夏至',m:6,d:21},
|
||
{n:'小暑',m:7,d:7},{n:'大暑',m:7,d:22},{n:'立秋',m:8,d:7},{n:'处暑',m:8,d:23},
|
||
{n:'白露',m:9,d:7},{n:'秋分',m:9,d:23},{n:'寒露',m:10,d:8},{n:'霜降',m:10,d:23},
|
||
{n:'立冬',m:11,d:7},{n:'小雪',m:11,d:22},{n:'大雪',m:12,d:7},{n:'冬至',m:12,d:22}
|
||
];
|
||
var MONTH_DZ=['寅','卯','辰','巳','午','未','申','酉','戌','亥','子','丑'];
|
||
|
||
// ===================== CALC =====================
|
||
function gzYear(y){return{tg:TG[(y-4)%10],dz:DZ[(y-4)%12]};}
|
||
function getST(d){
|
||
var m=d.getMonth()+1, dd=d.getDate(), t=null;
|
||
for(var i=ST.length-1;i>=0;i--){var s=ST[i];if(m>s.m||(m===s.m&&dd>=s.d)){t=s;break;}}
|
||
return t||ST[ST.length-1];
|
||
}
|
||
function getMDz(st){
|
||
var bi=ST.findIndex(function(s){return s.n==='立春';});
|
||
return MONTH_DZ[Math.floor(((ST.indexOf(st)-bi+24)%24)/2)];
|
||
}
|
||
|
||
function getBazi(d,h){
|
||
var y=d.getFullYear();
|
||
var gzY=gzYear(y);
|
||
var dayOfYear=Math.floor((d-new Date(y,0,0))/86400000);
|
||
var lcDay=35; // 立春approx day
|
||
var mi=Math.floor(((dayOfYear-lcDay+365)%365)/30.44);
|
||
if(mi<0)mi+=12;if(mi>=12)mi=11;
|
||
var mTg=TG[(((y-4)%10)*2+mi)%10];
|
||
var mDz=DZ[(mi+2)%12];
|
||
var base=new Date(1900,0,1);
|
||
var dd=Math.floor((d-base)/86400000);
|
||
var dTg=TG[((dd%10)+10)%10];
|
||
var dDz=DZ[((dd%12)+12)%12];
|
||
var hDz=DZ[Math.floor((h+1)/2)%12];
|
||
var hTg=TG[(TG.indexOf(dTg)*2+DZ.indexOf(hDz))%10];
|
||
return{year:{tg:gzY.tg,dz:gzY.dz},month:{tg:mTg,dz:mDz},day:{tg:dTg,dz:dDz},hour:{tg:hTg,dz:hDz}};
|
||
}
|
||
|
||
function calc5E(bz){
|
||
var c={木:0,火:0,土:0,金:0,水:0};
|
||
[bz.year,bz.month,bz.day,bz.hour].forEach(function(p){c[TGE[p.tg]]++;c[DZE[p.dz]]++;});
|
||
var t=0;EO.forEach(function(e){t+=c[e];});
|
||
var r={};EO.forEach(function(e){r[e]=Math.round(c[e]/t*100);});
|
||
return r;
|
||
}
|
||
|
||
function getConst(p){
|
||
var s=EO.slice().sort(function(a,b){return p[b]-p[a];});
|
||
var strong=s[0], weak=s[4];
|
||
var detail={
|
||
'木':{
|
||
primary:'气郁质', secondary:'血瘀质', strong:'肝', weak:'脾',
|
||
desc:'肝主疏泄,木气偏盛则气机易郁。情绪波动较大,遇事易纠结,长期压力下可能出现胸闷、胁痛、偏头痛。性格积极进取但容易焦虑。春季是木气最旺的季节,此时更应注意疏肝理气,避免过度压抑情绪。',
|
||
body:'形体偏瘦或适中,面色偏青或黄,舌边尖偏红。春季容易过敏,经前易乳胀(女性)。指甲易脆裂,眼睛易干涩疲劳。脉象多弦。',
|
||
tips:'疏肝理气为首要。多运动、多表达、避免长期压抑。适合芳香类茶饮(玫瑰花、佛手)。保持环境明亮通风,多接触绿色自然。',
|
||
diseases:'偏头痛、高血压、甲状腺结节、乳腺增生、月经不调、胁间神经痛、梅核气(咽部异物感)。长期气郁可化火伤阴。',
|
||
seasonRisk:'春季最敏感——过敏、肝阳上亢。秋季金克木,肺气压制肝气,易忧郁。',
|
||
foodTherapy:'多食绿色蔬菜(菠菜、芹菜、西兰花)。酸味入肝但不宜过(山楂、柠檬适量)。玫瑰花茶、薄荷茶、佛手柑茶疏肝。荞麦、小米养肝血。',
|
||
dailyRhythm:'晨起拉伸5分钟舒展筋脉。上午11点前完成重要决策(肝气最旺)。下午3-5点(申时)膀胱经当令,多喝水排毒。晚上11点前入睡养肝血。'
|
||
},
|
||
'火':{
|
||
primary:'湿热质', secondary:'阴虚质', strong:'心', weak:'肺',
|
||
desc:'心主血脉神明,火气偏盛则心神易亢。热情外向,感染力强,但易心浮气躁、失眠多梦。舌尖偏红,易口腔溃疡。火性炎上,热扰心神则烦躁不宁,热迫血行则易出血。夏季火旺时最需养护。',
|
||
body:'面赤,手心足心热,易出汗。夏季耐受力差,喜冷饮。皮肤易长痘、出油、疮疡。舌红苔黄,脉数。小便黄,大便偏干。',
|
||
tips:'清心降火为要。午休养心(11-13点),少辛辣刺激。适合莲子心、淡竹叶、菊花茶。避免熬夜伤阴。保持心态平和,少参与激烈争论。',
|
||
diseases:'失眠、口腔溃疡反复发作、心悸、焦虑症、高血压、皮肤疮疖、小便短赤、痔疮出血。严重者心火下移小肠导致尿路感染。',
|
||
seasonRisk:'夏季最敏感——暑热叠加心火,易中暑、心烦。冬季水克火,寒气伤心阳,易心悸胸闷。',
|
||
foodTherapy:'苦味入心(苦瓜、莲子心、淡竹叶)。红色食物养心(红枣、枸杞、番茄、红豆)。绿豆汤、百合莲子羹清心安神。西瓜、黄瓜、荸荠清热生津。',
|
||
dailyRhythm:'午时(11-13点)务必小憩15-30分钟养心阴。傍晚适度运动微微出汗。睡前温水泡脚引火下行。忌睡前刷手机。'
|
||
},
|
||
'土':{
|
||
primary:'痰湿质', secondary:'气虚质', strong:'脾', weak:'肾',
|
||
desc:'脾主运化,土气偏盛则湿浊易滞。性格稳重包容、可信赖,但思虑过度伤脾。容易疲劳、饭后困倦、大便不成形。脾为后天之本,气血生化之源,脾虚则百病丛生。长夏(农历六月)湿气最重时最需养护。',
|
||
body:'体型偏丰满,肌肉松软,腹部易堆积脂肪。面色偏黄,舌体胖大有齿痕,舌苔白腻。梅雨季不适加重,头重如裹。脉濡缓。',
|
||
tips:'健脾祛湿为核心。饮食规律七分饱,细嚼慢咽。少生冷甜腻,温热饮食为佳。适合山药薏米粥、陈皮茶、四神汤。适度运动助脾运化。',
|
||
diseases:'肥胖、高血脂、脂肪肝、糖尿病前期、慢性胃炎、功能性消化不良、梅尼埃病(眩晕)、湿疹、带下病(女性)。',
|
||
seasonRisk:'长夏(7-8月)最敏感——湿热交蒸,身重困倦。春季木克土,肝气犯脾,易胃痛腹泻。',
|
||
foodTherapy:'甘淡味入脾(山药、茯苓、薏米、白扁豆)。黄色食物养脾(小米、南瓜、玉米、黄豆)。陈皮理气健脾,生姜温中散寒。忌生冷冰饮、甜腻厚味。',
|
||
dailyRhythm:'早餐7-9点(辰时胃经当令)必须吃且吃好。饭后散步10分钟助运化。下午3-5点多喝水助膀胱排湿。晚餐宜早宜少。'
|
||
},
|
||
'金':{
|
||
primary:'阴虚质', secondary:'气郁质', strong:'肺', weak:'肝',
|
||
desc:'肺主气司呼吸,金气偏盛则津液易耗。性格条理分明、做事认真有原则,但易忧悲伤肺。皮肤偏干,秋冬易咳。肺为娇脏,不耐寒热燥湿,最易受外邪侵袭。秋季燥气当令时最需滋润养护。',
|
||
body:'形体偏瘦,皮肤干燥粗糙,口鼻咽干,唇干裂。秋季敏感,容易便秘。颧红,手心足心热,夜间盗汗。舌红少苔,脉细数。',
|
||
tips:'滋阴润肺为要。多食白色食物(银耳、百合、梨、白萝卜),避免辛辣烧烤油炸。早睡养阴,保持室内湿度。练习腹式呼吸增强肺功能。',
|
||
diseases:'慢性咽炎、干咳、支气管炎、皮肤干燥症、便秘、过敏性鼻炎、荨麻疹、声音嘶哑。长期阴虚可致肺萎。',
|
||
seasonRisk:'秋季最敏感——燥邪伤肺,干咳咽痒。夏季火克金,心火乘肺,易咳血痰。',
|
||
foodTherapy:'辛凉入肺(薄荷、桑叶、菊花)。白色食物润肺(银耳、百合、山药、雪梨、莲藕)。蜂蜜、麦冬、沙参、玉竹滋阴润燥。忌辛辣、烧烤、油炸、烟酒。',
|
||
dailyRhythm:'清晨(5-7点大肠经)排便清浊。上午做腹式深呼吸5分钟。午后吃一个梨或喝银耳羹。晚上9点前入睡养肺阴。居室保持50%-60%湿度。'
|
||
},
|
||
'水':{
|
||
primary:'阳虚质', secondary:'痰湿质', strong:'肾', weak:'心',
|
||
desc:'肾主水藏精,水气偏盛则阳气易亏。性格沉静有智慧、深度思考型,但容易恐惧、缺乏安全感。畏寒怕冷,腰膝酸软。肾为先天之本,藏精主骨生髓,肾虚则早衰。冬季寒气当令时最需温养。',
|
||
body:'体型偏胖或浮肿,面色㿠白或晦暗无光。手足不温,夜尿频多,听力可能下降,脱发早白。舌淡胖,脉沉细。腰膝冷痛,性功能减退。',
|
||
tips:'温阳补肾为首。多晒太阳,尤其晒后背(督脉)。少寒凉饮食,注意腰腹脚部保暖。艾灸关元、命门、肾俞穴。适合黑豆、核桃、肉桂、杜仲。',
|
||
diseases:'慢性肾炎、甲状腺功能减退、骨质疏松、腰突、耳鸣耳聋、不孕不育、性功能减退、老年痴呆早期。寒湿痹痛(关节炎)。',
|
||
seasonRisk:'冬季最敏感——寒气伤阳,畏寒加重。长夏土克水,湿困肾阳,水肿加重。',
|
||
foodTherapy:'咸味入肾但宜淡(海带、紫菜适量)。黑色食物补肾(黑豆、黑芝麻、黑米、黑木耳、桑葚)。核桃、山药、枸杞、杜仲温补肾阳。忌冰镇饮品、生冷瓜果。',
|
||
dailyRhythm:'早晨7-9点晒太阳15分钟补阳气。上午搓腰眼(肾俞)至发热。下午5-7点(酉时肾经当令)休息养肾,不宜剧烈运动。晚上热水泡脚至微汗。冬季早睡晚起。'
|
||
}
|
||
};
|
||
return detail[strong];
|
||
}
|
||
|
||
function getEmotion(strongEl){
|
||
var m={
|
||
'木':{
|
||
strength:['创造力','决策力','学习能力','进取心','目标感'],
|
||
risk:['焦虑','易怒','急躁','偏头痛倾向','经前紧张(女)'],
|
||
advice:'遇事深呼吸三秒再回应。每日快走30分钟疏解肝气。学习正念冥想。',
|
||
color:'绿'
|
||
},
|
||
'火':{
|
||
strength:['热情','感染力','表达力','社交能力','行动力'],
|
||
risk:['失眠','焦躁','心神不宁','多梦','舌尖溃疡'],
|
||
advice:'午时(11-13点)小憩养心。少刷手机,睡前温水泡脚。练习书法静心。',
|
||
color:'红'
|
||
},
|
||
'土':{
|
||
strength:['稳重','包容','耐心','执行力','可信赖'],
|
||
risk:['思虑过度','脾胃不适','优柔寡断','过度操心'],
|
||
advice:'饭后散步10分钟助运化。学会说"不",减轻负担。培养一个动手爱好。',
|
||
color:'黄'
|
||
},
|
||
'金':{
|
||
strength:['条理','决断','专注','毅力','原则性'],
|
||
risk:['悲伤','忧愁','呼吸道敏感','皮肤干燥','便秘'],
|
||
advice:'练习腹式呼吸强肺。多与朋友交流倾诉。保持环境湿度。',
|
||
color:'白'
|
||
},
|
||
'水':{
|
||
strength:['智慧','洞察','冷静','适应力','深度思考'],
|
||
risk:['恐惧','孤独感','腰膝酸软','听力下降','记忆力减退'],
|
||
advice:'冬季注意腰腹保暖。练习站桩固肾。多听音乐舒缓恐惧。',
|
||
color:'黑'
|
||
}
|
||
};
|
||
return m[strongEl];
|
||
}
|
||
|
||
function getWYLQ(year){
|
||
var gz=gzYear(year);
|
||
var tgI=TG.indexOf(gz.tg);
|
||
var zy=TGE[gz.tg]; // 中运
|
||
var tg2=tgI%2===0; // 太过
|
||
// 司天: 与年支三合局对应
|
||
var dzI=DZ.indexOf(gz.dz);
|
||
var sitianMap={'子':'午','丑':'未','寅':'申','卯':'酉','辰':'戌','巳':'亥','午':'子','未':'丑','申':'寅','酉':'卯','戌':'辰','亥':'巳'};
|
||
var st=DZ[DZ.indexOf(sitianMap[gz.dz])];
|
||
var zq=st; // 在泉 = 司天对冲
|
||
// Step
|
||
var stepNum=Math.floor((new Date().getMonth())/2);
|
||
var zhuqi=['厥阴风木','少阴君火','少阳相火','太阴湿土','阳明燥金','太阳寒水'];
|
||
var keqiOrder = [];
|
||
var stIdx=DZ.indexOf(st);
|
||
for(var k=0;k<6;k++) keqiOrder.push(DZ[(stIdx+k)%12]);
|
||
return{zhongyun:zy,taiguo:tg2,sitian:st,zaiquan:zq,zhuqi:zhuqi,keqiOrder:keqiOrder,stepNum:stepNum,yearTg:gz.tg,yearDz:gz.dz};
|
||
}
|
||
|
||
function getCurAnalysis(){
|
||
var now=new Date();
|
||
var w=getWYLQ(now.getFullYear());
|
||
var term=getST(now);
|
||
var mDz=getMDz(term);
|
||
var m=DZE[mDz];
|
||
var seMap={3:'木',4:'木',5:'火',6:'火',7:'土',8:'土',9:'金',10:'金',11:'水',12:'水',1:'水',2:'木'};
|
||
var se=seMap[now.getMonth()+1];
|
||
var ww={};
|
||
EO.forEach(function(e){
|
||
var i=EO.indexOf(e), si=EO.indexOf(se);
|
||
if(e===se)ww[e]='旺';
|
||
else if(e===EO[(si+1)%5])ww[e]='相';
|
||
else if(e===EO[(si+4)%5])ww[e]='休';
|
||
else if(e===EO[(si+2)%5])ww[e]='囚';
|
||
else ww[e]='死';
|
||
});
|
||
// Current keqi
|
||
var step=Math.floor((now.getMonth())/2);
|
||
return{date:now,year:now.getFullYear(),term:term,monthDz:mDz,monthEl:m,seasonEl:se,waxWane:ww,wylq:w,step:step};
|
||
}
|
||
|
||
// ===================== REPORTS =====================
|
||
function wkReport(p,con,emo,cur){
|
||
var s=EO.slice().sort(function(a,b){return p[b]-p[a];});
|
||
var st=s[0], se=cur.seasonEl, ww=cur.waxWane;
|
||
var om={木:'肝',火:'心',土:'脾',金:'肺',水:'肾'};
|
||
var os={};
|
||
EO.forEach(function(e){
|
||
var b=p[e],mod=0;
|
||
if(ww[e]==='旺')mod=20;else if(ww[e]==='相')mod=10;else if(ww[e]==='休')mod=-5;else if(ww[e]==='囚')mod=-15;else mod=-25;
|
||
os[om[e]]=Math.max(1,Math.min(5,Math.round((b+mod)/20)));
|
||
});
|
||
|
||
// Element interaction
|
||
var gen=EO[(EO.indexOf(st)+1)%5], ke=EO[(EO.indexOf(st)+2)%5], beiGen=EO[(EO.indexOf(st)+4)%5], beiKe=EO[(EO.indexOf(st)+3)%5];
|
||
var interaction={gen:gen, ke:ke, beiGen:beiGen, beiKe:beiKe};
|
||
|
||
// Risks - comprehensive
|
||
var risks=[];
|
||
var riskDB={
|
||
'木_火':{t:'心火偏旺',d:'木生火,夏季火旺叠加先天木盛,心火易亢。木火相煽,热扰心神。',sy:['失眠多梦','焦躁易怒','口干心烦','舌尖红','小便黄'],act:'午时小憩养心,睡前温水泡脚。喝莲子心茶清心火。减少咖啡和激烈运动。按揉神门穴、内关穴。'},
|
||
'木_木':{t:'肝气过亢',d:'春木逢木,肝气太过。木旺生风,上扰清窍。',sy:['头晕目眩','偏头痛','血压波动','眼干眼胀'],act:'每日快走30分钟疏肝。喝菊花枸杞茶清肝明目。按揉太冲穴、行间穴。避免熬夜和情绪激动。'},
|
||
'木_土':{t:'肝木克土',d:'先天木旺克制脾土,脾胃运化受阻。'+(ww['土']==='囚'?'当前土气被困,脾胃尤为脆弱。':''),sy:['食欲不振','腹胀嗳气','大便不调','疲倦乏力'],act:'少食多餐,温热饮食。饭前喝一小碗小米粥护脾胃。饭后散步10分钟。按揉足三里、中脘穴。避免生气时进食。'},
|
||
'木_金':{t:'木侮金',d:'木气过盛反侮肺金。',sy:['干咳少痰','咽喉不适','皮肤过敏'],act:'保持室内湿度,喝蜂蜜梨水润肺。练习腹式呼吸。避免辛辣和干燥环境。'},
|
||
'木_水':{t:'子盗母气',d:'木旺耗水,肾水暗亏。',sy:['腰膝酸软','耳鸣','脱发增多'],act:'多吃黑芝麻、核桃补肾。搓腰眼至发热。减少熬夜,保证子时(23点前)入睡。'},
|
||
'火_火':{t:'心火亢盛',d:'火上加火,两阳相劫,耗伤心阴。',sy:['心悸怔忡','盗汗','烦躁不宁','口腔溃疡频发','面赤'],act:'务必午休养心阴。绿豆百合汤清心安神。避免烈日下活动和辛辣食物。睡前温水泡脚引火下行。按揉神门、涌泉穴。'},
|
||
'火_木':{t:'木火刑金',d:'火得木生更旺,反侮肺金。',sy:['干咳','鼻衄','皮肤干燥','便秘'],act:'桑叶菊花茶清肺润燥。多吃梨、银耳、蜂蜜。保持环境湿润。避免烧烤和烟酒。'},
|
||
'火_土':{t:'火生土亢',d:'火旺生土过度,湿热内生。',sy:['口苦口臭','大便黏滞','皮肤油腻长痘','头重身困'],act:'薏米赤小豆汤祛湿热。少甜食油腻。保持皮肤清洁干爽。荷叶茶清热利湿。'},
|
||
'火_水':{t:'火盛水涸',d:'心火亢盛下劫肾水,心肾不交。',sy:['心烦失眠','腰膝酸软','耳鸣','记忆力下降','夜尿频'],act:'黄连阿胶汤类方交通心肾。睡前热水泡脚至微汗。按揉涌泉、太溪穴。避免熬夜和过度用脑。'},
|
||
'火_金':{t:'火克金',d:'心火乘肺金,肺阴受损。',sy:['干咳无痰','咽干喉痛','皮肤粗糙','毛发干枯'],act:'麦冬沙参茶润肺生津。银耳百合羹每周3次。腹式深呼吸养肺。居室保持50%湿度。'},
|
||
'土_火':{t:'火生土壅',d:'火旺生土,湿热蕴脾。',sy:['身重困倦','头蒙如裹','口黏不爽','大便溏滞'],act:'薏米茯苓粥健脾祛湿。室内通风除湿。少思虑多运动。按揉阴陵泉、丰隆穴。'},
|
||
'土_土':{t:'脾湿壅盛',d:'土气过旺,湿浊内停。',sy:['身体沉重','腹胀满闷','痰多','浮肿'],act:'陈皮薏仁茶理气化湿。控制食量七分饱。每天快走40分钟。按揉足三里、天枢穴。'},
|
||
'土_水':{t:'脾土克水',d:'土盛克水,肾阳受损。',sy:['水肿','小便不利','腰冷痛','畏寒'],act:'茯苓山药粥健脾利水。艾灸关元、命门温阳。避免久坐久卧。'},
|
||
'土_木':{t:'土虚木乘',d:'湿土困脾,肝木乘虚而入。',sy:['胃痛','反酸','情绪波动时加重'],act:'饭前少量生姜水暖胃。少食多餐减轻脾胃负担。保持情绪稳定,饭后不生气。'},
|
||
'水_火':{t:'水火不济',d:'夏季火旺克水,先天水盛之人肾水受制,心肾不交。',sy:['心烦不得眠','五心烦热','腰膝酸软','健忘','耳鸣加重'],act:'交泰丸类方交通心肾。睡前搓涌泉穴100次。下午5-7点(肾经当令)休息。少吃生冷,多晒太阳补阳。'},
|
||
'水_水':{t:'寒湿内盛',d:'水气过旺,寒湿困阻。',sy:['畏寒肢冷','关节疼痛','水肿','小便清长'],act:'艾灸关元、命门、足三里。生姜红糖水温中散寒。多晒太阳尤其后背。冬季泡温泉。忌冰饮冷食。'},
|
||
'水_木':{t:'水不涵木',d:'水亏不能养木,虚风内动。',sy:['头晕','手抖','失眠'],act:'枸杞菊花茶滋水涵木。早睡养肾阴。减少用眼过度。按揉太冲、太溪穴。'},
|
||
'水_金':{t:'金不生水',d:'金被火克不能生水,肾水枯竭。',sy:['腰酸','脱发','牙齿松动','骨关节退变'],act:'黑豆核桃粥补肾填精。西洋参麦冬茶气阴双补。搓腰眼每日100次。适当负重运动强骨。'},
|
||
'金_火':{t:'肺燥津伤',d:'火克金,肺阴受损。燥热伤津,肺失肃降。',sy:['干咳无痰或少痰','咽干鼻燥','皮肤干痒','大便秘结','声音嘶哑'],act:'川贝雪梨汤润肺止咳。室内加湿器保持50%-60%湿度。腹式深呼吸每次5分钟。避免辛辣油炸烧烤。麦冬沙参泡水代茶。'},
|
||
'金_金':{t:'肺气壅滞',d:'金气过盛,肺失宣降。',sy:['胸闷气短','咳嗽','皮肤干燥脱屑'],act:'白萝卜蜂蜜水宣肺化痰。户外深呼吸新鲜空气。适度有氧运动微汗。按揉太渊、列缺穴。'},
|
||
'金_木':{t:'金乘肝木',d:'肺金过盛抑制肝木疏泄。',sy:['情绪抑郁','胸胁胀痛','经前不适(女)'],act:'玫瑰花薄荷茶疏肝解郁。多与朋友交流倾诉。快走或瑜伽舒畅气机。按揉太冲、期门穴。'},
|
||
};
|
||
var rk=riskDB[st+'_'+se] || riskDB[st+'_'+st];
|
||
if(rk) risks.push(rk);
|
||
// Add a second risk based on beiKe
|
||
var rk2=riskDB[beiKe+'_'+se];
|
||
if(rk2 && rk2.t!==(rk?rk.t:'')) risks.push(rk2);
|
||
if(risks.length===0) risks.push({t:'整体协调',d:'当前时空与先天体质较为协调,继续保持良好生活习惯即可。',sy:['保持规律作息','适度运动','均衡饮食']});
|
||
|
||
// Diet
|
||
var dietDB={
|
||
'火':{rec:['绿豆','苦瓜','莲子','百合','冬瓜','西瓜','黄瓜','梨','荸荠','藕'],avoid:['烧烤','火锅','烈酒','辣椒','羊肉','榴莲','荔枝','龙眼','咖喱','大蒜'],reason:'清热泻火,养阴生津。避免辛温助热之品。',tea:'莲子心竹叶茶:莲子心3g + 淡竹叶5g,沸水冲泡,清心降火。菊花枸杞茶:菊花5朵 + 枸杞10粒,清肝明目。'},
|
||
'木':{rec:['菠菜','芹菜','西兰花','绿茶','山楂','柠檬','佛手','薄荷','荞麦'],avoid:['油腻厚味','甜食','酒精','咖啡过量','麻辣'],reason:'疏肝理气,养血柔肝。避免壅滞气机。',tea:'玫瑰花佛手茶:玫瑰花5朵 + 佛手干3片,疏肝解郁。薄荷柠檬茶:鲜薄荷叶5片 + 柠檬2片,舒畅气机。'},
|
||
'土':{rec:['山药','薏米','茯苓','红枣','小米','南瓜','白扁豆','陈皮','生姜','莲子'],avoid:['生冷食物','冰饮','甜腻','肥甘厚味','牛奶过量'],reason:'健脾祛湿,温运中焦。避免寒凉伤脾。',tea:'陈皮薏仁茶:陈皮5g + 炒薏米15g,理气化湿。生姜红枣茶:生姜3片 + 红枣5枚,温中健脾。'},
|
||
'金':{rec:['银耳','百合','蜂蜜','梨','白萝卜','豆腐','杏仁','麦冬','沙参','莲藕'],avoid:['辛辣','烧烤','油炸','烟酒','干果'],reason:'滋阴润肺,生津润燥。避免辛燥伤阴。',tea:'麦冬沙参茶:麦冬10g + 沙参10g,润肺生津。蜂蜜雪梨水:雪梨1个切块+蜂蜜,煮水代茶。'},
|
||
'水':{rec:['黑豆','核桃','黑芝麻','枸杞','山药','羊肉(冬季)','韭菜','肉桂','生姜'],avoid:['寒凉食物','冰镇饮品','生冷瓜果过量'],reason:'温补肾阳,固摄精气。避免寒凉伤阳。',tea:'桂圆枸杞茶:桂圆5颗 + 枸杞15粒 + 生姜2片,温补肾阳。黑豆核桃露:黑豆30g + 核桃3颗打浆煮饮。'}
|
||
};
|
||
var dt=se==='土'&&st==='火'?dietDB['火']:dietDB[se];
|
||
var dt2=dietDB[beiKe];
|
||
|
||
// Exercise
|
||
var exDB={
|
||
'火':{rec:['八段锦','游泳','太极','瑜伽冥想','快走','站桩'],avoid:['高强度熬汗','马拉松','HIIT','烈日下运动'],reason:'微汗为度,汗为心之液,过汗伤心阴。'},
|
||
'木':{rec:['快走','慢跑','太极','瑜伽','伸展运动','舞蹈'],avoid:['过度竞技运动','压抑性运动'],reason:'运动疏肝,舒畅气机。避免过量压抑肝气。'},
|
||
'土':{rec:['散步','八段锦','太极','轻度力量训练'],avoid:['长时间久坐','饭后立即剧烈运动'],reason:'适度运动助脾运化,过劳伤脾。'},
|
||
'金':{rec:['深呼吸练习','太极','瑜伽','游泳','慢跑'],avoid:['干燥环境中运动','过度出汗'],reason:'养肺气,润皮毛。避免燥邪伤肺。'},
|
||
'水':{rec:['站桩','太极','散步','温和瑜伽','八段锦'],avoid:['冬季晨练过早','大汗淋漓','冷水泳'],reason:'固肾藏精,微汗养阳。避免过耗阳气。'}
|
||
};
|
||
var ex=exDB[se];
|
||
|
||
// Sleep
|
||
var slDB={
|
||
'火':{bt:'22:30',wt:'06:00',focus:'23:00前入睡养胆清心。午时(11-13点)小憩15-30分钟养心阴。'},
|
||
'木':{bt:'22:30',wt:'06:30',focus:'23:00前入睡养肝血。睡前温水泡脚引火下行。避免睡前思虑。'},
|
||
'土':{bt:'22:00',wt:'06:30',focus:'早睡养脾。晚餐宜早宜少,睡前3小时不进食。'},
|
||
'金':{bt:'21:30',wt:'06:00',focus:'早卧早起养肺气。保持卧室湿度,避免干燥。'},
|
||
'水':{bt:'21:30',wt:'07:00',focus:'早睡晚起养肾阳。睡前热水泡脚至微汗。注意腰腹保暖。'}
|
||
};
|
||
var sl=slDB[se];
|
||
|
||
// Acupoints
|
||
var acuDB={
|
||
'火':['神门','内关','涌泉','百会'],
|
||
'木':['太冲','行间','期门','肝俞'],
|
||
'土':['足三里','中脘','脾俞','阴陵泉'],
|
||
'金':['太渊','尺泽','肺俞','列缺'],
|
||
'水':['太溪','关元','命门','肾俞']
|
||
};
|
||
var acu=acuDB[beiKe]||acuDB[st];
|
||
|
||
// Quotes
|
||
var quotes=[
|
||
{t:'春夏养阳,秋冬养阴。',e:'当前属'+({'木':'春','火':'夏','土':'长夏','金':'秋','水':'冬'}[se]||se)+'季,应顺应阳气生长之势,避免过度耗散,保持规律作息。'},
|
||
{t:'正气存内,邪不可干。',e:'保持内在平衡是抵御外邪的根本。当前注意调和阴阳,顺应天时变化。'},
|
||
{t:'上古之人,其知道者,法于阴阳,和于术数。',e:'养生之道在于遵循自然规律。饮食有节,起居有常,不妄作劳。'},
|
||
{t:'虚邪贼风,避之有时,恬惔虚无,真气从之。',e:'顺应四时避开外邪,内心平和则正气自足。当前时令尤需注意。'},
|
||
{t:'阴平阳秘,精神乃治。',e:'阴阳平衡是健康的根本。当前'+se+'气偏盛,注意调和阴阳,不过不不及。'}
|
||
];
|
||
var q=quotes[Math.floor(Math.random()*quotes.length)];
|
||
|
||
return{organScores:os,risks:risks,diet:dt,diet2:dt2,exercise:ex,sleep:sl,acupoints:acu,quote:q,interaction:interaction,term:cur.term,se:se,strongest:st,wylq:cur.wylq,step:cur.step,waxWane:ww};
|
||
}
|
||
|
||
function dyReport(p,con,emo,cur){
|
||
var wk=wkReport(p,con,emo,cur);
|
||
var h=new Date().getHours();
|
||
var meridian=[
|
||
{h:1,n:'丑时',o:'肝经',act:'熟睡养肝血',tip:'深度睡眠黄金期'},
|
||
{h:3,n:'寅时',o:'肺经',act:'深睡养肺气',tip:'哮喘易发时段'},
|
||
{h:5,n:'卯时',o:'大肠经',act:'起床排便',tip:'最佳排便时间'},
|
||
{h:7,n:'辰时',o:'胃经',act:'吃早餐',tip:'胃气最旺时进食'},
|
||
{h:9,n:'巳时',o:'脾经',act:'工作学习',tip:'脾运化最佳'},
|
||
{h:11,n:'午时',o:'心经',act:'午餐小憩',tip:'养心阴黄金30分钟'},
|
||
{h:13,n:'未时',o:'小肠经',act:'消化吸收',tip:'多喝水助排浊'},
|
||
{h:15,n:'申时',o:'膀胱经',act:'学习记忆',tip:'记忆力最佳时段'},
|
||
{h:17,n:'酉时',o:'肾经',act:'休息养肾',tip:'不宜剧烈运动'},
|
||
{h:19,n:'戌时',o:'心包经',act:'放松散步',tip:'保持心情愉快'},
|
||
{h:21,n:'亥时',o:'三焦经',act:'准备入睡',tip:'泡脚听轻音乐'},
|
||
{h:23,n:'子时',o:'胆经',act:'深度睡眠',tip:'必须睡觉养胆气'}
|
||
];
|
||
var currM=meridian.find(function(m){return Math.abs(m.h-h)<=1;})||meridian[0];
|
||
var scores=[
|
||
{l:'睡眠',v:Math.floor(Math.random()*16+80),c:'#5CB85C'},
|
||
{l:'饮食',v:Math.floor(Math.random()*21+65),c:'#E8985A'},
|
||
{l:'情绪',v:Math.floor(Math.random()*26+60),c:'#E54D42'},
|
||
{l:'运动',v:Math.floor(Math.random()*16+80),c:'#4A90E2'}
|
||
];
|
||
var yiDB={
|
||
'火':['喝菊花茶','午休15分钟','散步','听轻音乐','温水泡脚','深呼吸'],
|
||
'木':['喝玫瑰花茶','快走30分钟','和朋友聊天','拉伸运动','看绿色植物'],
|
||
'土':['喝陈皮水','饭后散步','吃温热食物','按摩足三里','少食多餐'],
|
||
'金':['喝蜂蜜水','腹式呼吸','吃梨或银耳','早睡','室内加湿'],
|
||
'水':['喝姜枣茶','晒太阳','热水泡脚','搓腰眼','穿暖不贪凉']
|
||
};
|
||
var jiDB={
|
||
'火':['熬夜','暴饮暴食','情绪激动','过量咖啡','麻辣火锅','烈日暴晒'],
|
||
'木':['压抑情绪','过量饮酒','熬夜','油腻食物','与人争执'],
|
||
'土':['生冷冰饮','甜食过量','久坐不动','思虑过度','暴饮暴食'],
|
||
'金':['辛辣烧烤','烟酒','干燥环境','过度出汗','忧伤抑郁'],
|
||
'水':['寒凉饮食','过度疲劳','熬夜','冷水澡','冬季晨练过早']
|
||
};
|
||
return{scores:scores,meridian:meridian,currM:currM,yi:yiDB[wk.se]||yiDB['火'],ji:jiDB[wk.se]||jiDB['火'],weekly:wk};
|
||
}
|
||
|
||
// ===================== RENDER =====================
|
||
function renderProfile(p,con,emo,bz){
|
||
// Bazi table
|
||
var labels=['年柱','月柱','日柱','时柱'];
|
||
var pillars=[bz.year,bz.month,bz.day,bz.hour];
|
||
var h='<table class="bzt"><tr><th></th><th>天干</th><th>地支</th><th>五行</th><th>纳音</th><th>生肖</th></tr>';
|
||
for(var i=0;i<4;i++){
|
||
var pl=pillars[i];
|
||
var ny=NAYIN_MAP[pl.tg+pl.dz]||'--';
|
||
var ds=pl.dz, dzEl=DZE[ds];
|
||
var ani=i===0?DZ_ANI[DZ.indexOf(ds)]:'';
|
||
h+='<tr><td>'+labels[i]+'</td><td><strong>'+pl.tg+'</strong><br><span class="el">'+TGE[pl.tg]+'</span></td><td><strong>'+ds+'</strong><br><span class="el">'+dzEl+'</span></td><td style="color:'+EC[dzEl]+';font-weight:600;font-size:14px">'+TGE[pl.tg]+'/'+dzEl+'</td><td style="font-size:11px;color:#888">'+ny+'</td><td style="font-size:11px;color:#999">'+ani+'</td></tr>';
|
||
}
|
||
h+='</table>';
|
||
document.getElementById('baziTable').innerHTML=h;
|
||
|
||
// Pentagram
|
||
var pg=document.getElementById('pentagram');
|
||
pg.innerHTML='';
|
||
EO.forEach(function(e){
|
||
var v=p[e],c=EC[e];
|
||
pg.innerHTML+='<div class="pb"><div class="f"><div class="fi" style="height:'+v+'%;background:'+c+'"></div></div><div class="l">'+e+'</div><div class="v" style="color:'+c+'">'+v+'</div></div>';
|
||
});
|
||
var sorted=EO.slice().sort(function(a,b){return p[b]-p[a];});
|
||
document.getElementById('pentagramNote').textContent=sorted[0]+'偏盛 > '+sorted[1]+'次盛 > '+sorted[2]+'中和 > '+sorted[3]+'偏弱 > '+sorted[4]+'最弱';
|
||
|
||
// Constitution detail
|
||
var cd=document.getElementById('constDetail');
|
||
cd.innerHTML='<h2>🫁 体质分析</h2><div class="stats2"><div class="st2"><div class="v" style="color:var(--pri)">'+con.primary+'</div><div class="l">主要体质</div></div><div class="st2"><div class="v" style="color:#E8985A">'+con.secondary+'</div><div class="l">次要体质</div></div></div><p style="font-size:13px;color:#555;line-height:1.9;margin-top:8px">'+con.desc+'</p><h4 style="margin-top:12px">🩺 易患疾病</h4><p style="font-size:12px;color:#888;line-height:1.7">'+con.diseases+'</p><h4>👁 外在表现</h4><p style="font-size:12px;color:#888;line-height:1.7">'+con.body+'</p><h4>⚠️ 季节弱点</h4><p style="font-size:12px;color:#888;line-height:1.7">'+con.seasonRisk+'</p><h4>🎯 养生核心</h4><p style="font-size:12px;color:#888;line-height:1.7">'+con.tips+'</p><h4>🍽 食疗原则</h4><p style="font-size:12px;color:#888;line-height:1.7">'+con.foodTherapy+'</p><h4>⏰ 日常节律</h4><p style="font-size:12px;color:#888;line-height:1.7">'+con.dailyRhythm+'</p>';
|
||
|
||
// Organ detail
|
||
var od=document.getElementById('organDetail');
|
||
od.innerHTML='<h2>🫀 脏腑画像</h2><div class="stats2"><div class="st2"><div class="v" style="color:'+EC[sorted[0]]+'">'+con.strong+'</div><div class="l">偏强脏腑</div><div class="d">功能亢进<br>易生热/郁/火</div></div><div class="st2"><div class="v" style="color:#aaa">'+con.weak+'</div><div class="l">偏弱脏腑</div><div class="d">功能不足<br>易受外邪侵袭</div></div></div>';
|
||
|
||
// Emotion detail
|
||
var ed=document.getElementById('emotionDetail');
|
||
ed.innerHTML='<h2>🧠 情绪画像</h2><div style="margin-bottom:10px"><span style="font-size:12px;color:#999">优势特质:</span><div class="tags">'+emo.strength.map(function(s){return '<span class="tag tg">'+s+'</span>';}).join('')+'</div></div><div style="margin-bottom:10px"><span style="font-size:12px;color:#999">风险倾向:</span><div class="tags">'+emo.risk.map(function(s){return '<span class="tag tw">'+s+'</span>';}).join('')+'</div></div><h4>情绪调节</h4><p style="font-size:12px;color:#888;line-height:1.7">'+emo.advice+'</p>';
|
||
|
||
// Personality summary
|
||
document.getElementById('personalityCard').innerHTML='<h2>📖 综合画像</h2><p style="font-size:13px;color:#555;line-height:2">先天<b style="color:'+EC[sorted[0]]+'">'+sorted[0]+'</b>之气偏盛,属<b style="color:var(--pri)">'+con.primary+'</b>体质。'+con.strong+'经易亢,'+con.weak+'经偏弱。'+emo.strength[0]+'、'+emo.strength[1]+'是你的核心天赋;需注意'+emo.risk[0]+'和'+emo.risk[1]+'的倾向。</p>';
|
||
|
||
document.getElementById('profileResult').classList.remove('hidden');
|
||
document.getElementById('formCard').style.opacity='0.55';
|
||
}
|
||
|
||
function seasonalGuide(term, se){
|
||
var guides={
|
||
'立春':{tips:'春季养肝正当时。早睡早起,广步于庭。披发缓行,以使志生。多吃芽菜(豆芽、香椿),少吃酸多食辛甘。',avoid:'压抑怒气、过度进补、过早减衣。'},
|
||
'雨水':{tips:'湿气渐增,健脾祛湿。多吃山药薏米。注意关节保暖。',avoid:'生冷瓜果、淋雨涉水。'},
|
||
'惊蛰':{tips:'春雷惊百虫,阳气升发。早起活动舒展筋骨。多吃梨润肺防春燥。',avoid:'过度劳累、情绪压抑。'},
|
||
'春分':{tips:'阴阳平分,养生贵在平衡。早睡早起,适度运动微汗。饮食寒热均衡。',avoid:'偏食偏嗜、大补大泻。'},
|
||
'清明':{tips:'清气上升,养肝明目。踏青散步舒畅情志。菊花枸杞茶护眼。',avoid:'过度悲伤、暴饮暴食。'},
|
||
'谷雨':{tips:'雨生百谷,湿度加大。健脾祛湿防春困。多喝薏米陈皮茶。',avoid:'潮湿环境久待、过食生冷。'},
|
||
'立夏':{tips:'夏季养心。夜卧早起,无厌于日。午休15-30分钟养心阴。多吃红色食物。',avoid:'烈日暴晒、大汗淋漓、辛辣过量。'},
|
||
'小满':{tips:'湿热渐盛,清心祛湿。冬瓜薏米汤清热利湿。保持皮肤干爽。',avoid:'油腻厚味、甜腻食物。'},
|
||
'芒种':{tips:'梅雨季将至,防湿防霉。室内通风除湿。饮食清淡少油腻。艾灸足三里健脾。',avoid:'生冷冰饮、久居湿地。'},
|
||
'夏至':{tips:'阳极阴生,养心护阳。午休不可少。饮食清淡多汤水。夏至一阴生,忌过度贪凉。',avoid:'冰镇饮品、空调直吹、熬夜。'},
|
||
'小暑':{tips:'暑热渐盛,清暑益气。绿豆汤、荷叶粥消暑。避免正午户外活动。',avoid:'过度出汗、冷热交替刺激。'},
|
||
'大暑':{tips:'湿热交蒸,健脾祛湿为首。藿香正气类防中暑。多喝温水少量多次。',avoid:'烈日下劳作、冰火两重天。'},
|
||
'立秋':{tips:'秋燥当令,润肺生津。多吃白色食物。早卧早起与鸡俱兴。',avoid:'辛辣烧烤、过度出汗。'},
|
||
'处暑':{tips:'暑气渐消,秋燥初显。银耳百合羹润燥。适度运动舒展筋骨。',avoid:'燥热食物、熬夜伤阴。'},
|
||
'白露':{tips:'寒气初生,注意保暖。早晚添衣,尤其腹部和脚部。多吃温润食物。',avoid:'赤脚踩凉地、露脐装。'},
|
||
'秋分':{tips:'阴阳平分如春分。滋阴润燥,收敛神气。早睡早起,心态平和。',avoid:'剧烈运动大汗、辛辣伤阴。'},
|
||
'寒露':{tips:'寒气加重,护好颈腰脚踝。泡脚至微汗。多吃芝麻核桃润燥。',avoid:'冷水洗脚、穿露脚踝裤。'},
|
||
'霜降':{tips:'秋末冬初,补脾养肺。山药红枣粥最佳。适度运动增强抵抗力。',avoid:'过度秋冻、生冷瓜果。'},
|
||
'立冬':{tips:'冬季养肾。早卧晚起,必待日光。多晒太阳补阳。多吃黑色食物。',avoid:'清晨过早户外运动、冷水澡。'},
|
||
'小雪':{tips:'寒气渐重,温补肾阳。羊肉汤、当归生姜羊肉汤温补。艾灸关元命门。',avoid:'寒凉饮食、过度疲劳。'},
|
||
'大雪':{tips:'仲冬严寒,藏精养阳。减少户外活动。多喝热粥热汤。早睡晚起。',avoid:'大汗淋漓、受寒感冒。'},
|
||
'冬至':{tips:'一阳来复,阴极阳生。静养为主,减少消耗。吃饺子/汤圆象征团圆。冬至进补事半功倍。',avoid:'剧烈运动、熬夜、房劳过度。'},
|
||
'小寒':{tips:'三九严寒,温阳散寒。艾灸关元足三里。每晚热水泡脚。羊肉当归汤最宜。',avoid:'清晨低温外出、冷水刺激。'},
|
||
'大寒':{tips:'寒极则暖,冬藏待春。继续温补藏精。保持心态平和,不急不躁。',avoid:'过度消耗、受寒受冻。'}
|
||
};
|
||
var g=guides[term.n]||{tips:'顺应四时,饮食有节,起居有常。',avoid:'过度劳累、暴饮暴食、情绪波动。'};
|
||
return '<div class="card"><h2>🌿 '+term.n+'节气养生指南</h2><div class="sr"><div class="si sg">宜</div><div class="sb"><div class="i">'+g.tips+'</div></div></div><div class="sr"><div class="si sr2">忌</div><div class="sb"><div class="i">'+g.avoid+'</div></div></div></div>';
|
||
}
|
||
|
||
function renderWeekly(wk){
|
||
var wc=document.getElementById('weeklyContent');
|
||
var tn=wk.term?wk.term.n:'--';
|
||
var se=wk.se||'--';
|
||
var seN={'木':'春季','火':'夏季','土':'长夏','金':'秋季','水':'冬季'}[se]||se;
|
||
var now=new Date();
|
||
var ts=now.getFullYear()+'-'+String(now.getMonth()+1).padStart(2,'0')+'-'+String(now.getDate()).padStart(2,'0')+' '+String(now.getHours()).padStart(2,'0')+':'+String(now.getMinutes()).padStart(2,'0');
|
||
var h='';
|
||
|
||
// ---- Overview ----
|
||
h+='<div class="card"><h2>📊 本周气机概览</h2>';
|
||
h+='<div style="font-size:14px;margin-bottom:4px">📅 节气:<b>'+tn+'</b> | 🌤 时令:<b>'+seN+'</b>('+se+'旺)</div>';
|
||
h+='<div style="font-size:12px;color:#aaa;margin-bottom:10px">你的先天:<b style="color:'+EC[wk.strongest]+'">'+wk.strongest+'</b>偏盛 | '+wk.strongest+'生'+wk.interaction.gen+' | '+wk.strongest+'克'+wk.interaction.ke+'</div>';
|
||
h+='<div style="font-size:11px;color:#ccc;border-top:1px dashed #f0e8e0;padding-top:8px">⏱ 数据基于当前时空气机实时计算 | 刷新时间:'+ts+'</div>';
|
||
|
||
// ---- WYLQ Detail ----
|
||
var wq=wk.wylq;
|
||
h+='<table class="wlt"><tr><td>岁运(中运)</td><td><b>'+wq.zhongyun+'</b>'+(wq.taiguo?'(太过)':'(不及)')+'</td></tr>';
|
||
h+='<tr><td>司天之气</td><td>'+wq.sitian+'('+DZE[wq.sitian]+')— 上半年主气</td></tr>';
|
||
h+='<tr><td>在泉之气</td><td>'+wq.zaiquan+'('+DZE[wq.zaiquan]+')— 下半年主气</td></tr>';
|
||
var cs=wk.step||Math.floor(new Date().getMonth()/2);
|
||
h+='<tr><td>当前主气</td><td>'+wq.zhuqi[cs]+'</td></tr>';
|
||
h+='<tr><td>当前客气</td><td>'+wq.keqiOrder[cs]+'</td></tr>';
|
||
h+='</table>';
|
||
|
||
// Five elements wax/wane
|
||
h+='<div style="font-size:12px;margin-top:10px"><b>五行旺衰:</b>';
|
||
EO.forEach(function(e){h+='<span style="margin:0 4px;padding:2px 8px;border-radius:4px;background:'+(wk.waxWane[e]==='旺'?EC[e]+'20':'transparent')+';color:'+EC[e]+';font-weight:'+(wk.waxWane[e]==='旺'?'700':'400')+'">'+e+wk.waxWane[e]+'</span>';});
|
||
h+='</div>';
|
||
|
||
// Organ scores
|
||
h+='<div style="margin-top:12px"><b>本周脏腑指数:</b></div>';
|
||
['肝','心','脾','肺','肾'].forEach(function(o){
|
||
var sc=wk.organScores[o]||3;
|
||
var stars='';
|
||
for(var i=1;i<=5;i++)stars+=i<=sc?'★':'<span class="off">★</span>';
|
||
h+='<div class="or"><span class="on">'+o+'</span><span class="os2">'+stars+'</span></div>';
|
||
});
|
||
h+='</div>';
|
||
|
||
// ---- Risks ----
|
||
h+='<div class="card"><h2>⚠️ 健康风险</h2>';
|
||
wk.risks.forEach(function(r,i){
|
||
h+='<div class="rk r'+(i+1)+'"><h4>风险'+(i+1)+':'+r.t+'</h4><p class="x">'+r.d+'</p><ul>';
|
||
r.sy.forEach(function(s){h+='<li>'+s+'</li>';});
|
||
h+='</ul>';
|
||
if(r.act) h+='<p style="font-size:12px;color:var(--pri);margin-top:6px;line-height:1.7"><b>✅ 应对:</b>'+r.act+'</p>';
|
||
h+='</div>';
|
||
});
|
||
h+='</div>';
|
||
|
||
// ---- Daily refresh tip (changes daily) ----
|
||
var dailyTips={
|
||
'火':['夏日午后一杯淡竹叶茶,清心降火。','心静自然凉,午休15分钟胜过补药。','苦味入心,晚餐加一道凉拌苦瓜。'],
|
||
'木':['肝喜条达,今天遇到烦心事出去走10分钟。','绿色入肝,午餐加一份西兰花。','怒伤肝,深呼吸三次再回应让你生气的事。'],
|
||
'土':['脾主思,今天少想多做,动手整理房间也是调理。','黄色入脾,早餐一碗小米粥暖胃健脾。','饭后百步走,活到九十九——今天饭后就散个步。'],
|
||
'金':['秋燥伤肺,今天多喝温水,室内保持湿润。','白色入肺,今天吃一个雪梨润肺。','忧伤肺,今天找一件让你开心的小事做。'],
|
||
'水':['肾藏精,今天早点上床,23点前入睡是最好的补肾药。','黑色入肾,今天吃一把黑芝麻或核桃。','恐伤肾,今天少看负面新闻,多晒晒太阳。']
|
||
};
|
||
var tips=dailyTips[wk.se]||dailyTips['火'];
|
||
var idx=new Date().getDate()%tips.length;
|
||
h+='<div class="card"><h2>💡 今日养生小贴士</h2><p style="font-size:13px;color:#555;line-height:1.8;padding:8px 12px;background:#FFF8F0;border-radius:10px">'+tips[idx]+'</p></div>';
|
||
|
||
// ---- Diet ----
|
||
h+='<div class="card"><h2>🥗 本周饮食</h2>';
|
||
h+='<div class="sr"><div class="si sg">👍</div><div class="sb"><div class="t">推荐食材</div><div class="i">'+wk.diet.rec.join('、')+'</div><div class="r">💡 '+wk.diet.reason+'</div></div></div>';
|
||
h+='<div class="sr"><div class="si sr2">👎</div><div class="sb"><div class="t">减少摄入</div><div class="i">'+wk.diet.avoid.join('、')+'</div></div></div>';
|
||
if(wk.diet.tea) h+='<div class="sr"><div class="si so">🍵</div><div class="sb"><div class="t">养生茶饮</div><div class="i">'+wk.diet.tea+'</div></div></div>';
|
||
if(wk.diet2){
|
||
h+='<div class="sr"><div class="si so">🔄</div><div class="sb"><div class="t">辅助调养('+wk.interaction.beiKe+'行)</div><div class="i">'+wk.diet2.rec.join('、')+'</div><div class="r">💡 '+wk.diet2.reason+'</div></div></div>';
|
||
}
|
||
h+='</div>';
|
||
|
||
// ---- Exercise ----
|
||
h+='<div class="card"><h2>🏃 运动建议</h2>';
|
||
h+='<div class="sr"><div class="si sbl">✅</div><div class="sb"><div class="t">推荐运动</div><div class="i">'+wk.exercise.rec.join('、')+'</div></div></div>';
|
||
h+='<div class="sr"><div class="si so">⛔</div><div class="sb"><div class="t">避免</div><div class="i">'+wk.exercise.avoid.join('、')+'</div><div class="r">💡 '+wk.exercise.reason+'</div></div></div>';
|
||
h+='</div>';
|
||
|
||
// ---- Sleep ----
|
||
h+='<div class="card"><h2>😴 作息建议</h2>';
|
||
h+='<div class="sr"><div class="si sbl">🌙</div><div class="sb"><div class="t">'+wk.sleep.bt+' 入睡 · '+wk.sleep.wt+' 起床</div><div class="i">'+wk.sleep.focus+'</div></div></div>';
|
||
h+='</div>';
|
||
|
||
// ---- Seasonal Living Guide ----
|
||
h+=seasonalGuide(wk.term, wk.se);
|
||
|
||
// ---- Acupoints ----
|
||
h+='<div class="card"><h2>📍 穴位保健</h2>';
|
||
h+='<div class="tags">'+wk.acupoints.map(function(a){return '<span class="tag tb">'+a+'</span>';}).join('')+'</div>';
|
||
h+='<p style="font-size:11px;color:#999;margin-top:6px">每日按揉每穴3-5分钟,酸胀为度,早晚各一次。</p>';
|
||
h+='</div>';
|
||
|
||
// ---- Quote ----
|
||
h+='<div class="card"><h2>📖 本周一句内经</h2><div class="qt"><div class="t">「'+wk.quote.t+'」</div><div class="e">'+wk.quote.e+'</div></div></div>';
|
||
|
||
wc.innerHTML=h;
|
||
}
|
||
|
||
function renderDaily(dy){
|
||
var dc=document.getElementById('dailyContent');
|
||
var wk=dy.weekly;
|
||
var h='';
|
||
|
||
h+='<div class="card"><h2>☀️ 今日养生</h2>';
|
||
h+='<div style="font-size:14px;color:#555">📅 '+wk.term.n+' | 值日五行:<b style="color:'+EC[wk.se]+'">'+wk.se+'</b></div>';
|
||
h+='<div style="font-size:12px;color:#aaa;margin-top:4px">你的状态:<b style="color:'+EC[wk.strongest]+'">'+wk.strongest+'</b>偏旺</div></div>';
|
||
|
||
// Meridian clock
|
||
h+='<div class="card"><h2>⏰ 子午流注</h2>';
|
||
h+='<p style="font-size:12px;color:#999;margin-bottom:8px">当前时段:<b>'+dy.currM.n+'</b>('+dy.currM.o+')— '+dy.currM.act+'</p>';
|
||
h+='<p style="font-size:11px;color:#bbb;margin-bottom:8px">💡 '+dy.currM.tip+'</p>';
|
||
h+='<div class="mer">';
|
||
dy.meridian.forEach(function(m){
|
||
h+='<div class="mi'+(m===dy.currM?'" style="background:#FFECEC;border:1px solid var(--pri)"':'')+'"><div class="t2">'+m.n+'</div><div class="o2">'+m.o+'</div></div>';
|
||
});
|
||
h+='</div></div>';
|
||
|
||
// Scores
|
||
h+='<div class="card"><h2>📈 今日评分</h2>';
|
||
dy.scores.forEach(function(s){
|
||
h+='<div class="sc"><span class="sl">'+s.l+'</span><div class="sb2"><div class="sf" style="width:'+s.v+'%;background:'+s.c+'"></div></div><span class="sv">'+s.v+'</span></div>';
|
||
});
|
||
h+='</div>';
|
||
|
||
// Yiji
|
||
h+='<div class="card"><h2>📋 今日宜忌</h2>';
|
||
h+='<div class="sr"><div class="si sg">宜</div><div class="sb"><div class="i">'+dy.yi.join('、')+'</div></div></div>';
|
||
h+='<div class="sr"><div class="si sr2">忌</div><div class="sb"><div class="i">'+dy.ji.join('、')+'</div></div></div>';
|
||
h+='</div>';
|
||
|
||
// Key focus
|
||
h+='<div class="card"><h2>🎯 今日重点</h2>';
|
||
h+='<div style="padding:16px;background:#FFECEC;border-radius:10px;text-align:center">';
|
||
h+='<div style="font-size:18px;font-weight:700;color:var(--pri);margin-bottom:6px">保养'+({'木':'肝','火':'心','土':'脾','金':'肺','水':'肾'}[wk.strongest]||'--')+'经</div>';
|
||
h+='<div style="font-size:13px;color:#888">'+dy.yi.slice(0,3).join(' · ')+'</div>';
|
||
h+='</div></div>';
|
||
|
||
dc.innerHTML=h;
|
||
}
|
||
|
||
// ===================== MAIN =====================
|
||
var userProfile=null,userConstitution=null,userEmotion=null,userBazi=null,curAnalysis=null;
|
||
|
||
(function(){
|
||
try{var d=JSON.parse(localStorage.getItem('yangsheng_profile'));
|
||
if(d){userProfile=d.profile;userConstitution=d.constitution;userEmotion=d.emotion;userBazi=d.bazi;
|
||
renderProfile(userProfile,userConstitution,userEmotion,userBazi);}
|
||
}catch(e){}
|
||
})();
|
||
|
||
function gen(){
|
||
try{console.log('gen start');
|
||
var nm=document.getElementById('fname').value||'用户';
|
||
var bs=document.getElementById('fbirth').value;
|
||
var ts=document.getElementById('ftime').value||'12:00';
|
||
var pl=document.getElementById('fplace').value||'--';
|
||
if(!bs){alert('请填写出生日期');return;}
|
||
var bd=new Date(bs),bh=parseInt(ts.split(':')[0]);
|
||
userBazi=getBazi(bd,bh); console.log('bazi ok');
|
||
userProfile=calc5E(userBazi); console.log('profile ok');
|
||
userConstitution=getConst(userProfile); console.log('const ok');
|
||
userEmotion=getEmotion(EO.slice().sort(function(a,b){return userProfile[b]-userProfile[a];})[0]); console.log('emotion ok');
|
||
try{localStorage.setItem('yangsheng_profile',JSON.stringify({name:nm,profile:userProfile,constitution:userConstitution,emotion:userEmotion,bazi:userBazi,birthDate:bs,birthTime:ts,birthPlace:pl}));}catch(e){}
|
||
renderProfile(userProfile,userConstitution,userEmotion,userBazi); console.log('renderProfile ok');
|
||
// Switch to weekly
|
||
document.querySelectorAll('.tab').forEach(function(t){t.classList.remove('active');});
|
||
document.querySelector('[data-tab="weekly"]').classList.add('active');
|
||
document.getElementById('tab-profile').classList.add('hidden');
|
||
document.getElementById('tab-weekly').classList.remove('hidden');
|
||
document.getElementById('tab-daily').classList.add('hidden');
|
||
curAnalysis=getCurAnalysis(); console.log('curAnalysis ok');
|
||
var report = wkReport(userProfile,userConstitution,userEmotion,curAnalysis); console.log('wkReport ok');
|
||
renderWeekly(report); console.log('renderWeekly ok');
|
||
}catch(e){console.error('gen error:',e.message,e.stack);}
|
||
}
|
||
|
||
// Tabs
|
||
document.getElementById('tabs').addEventListener('click',function(e){
|
||
if(!e.target.classList.contains('tab'))return;
|
||
var tab=e.target.dataset.tab;
|
||
document.querySelectorAll('.tab').forEach(function(t){t.classList.remove('active');});
|
||
e.target.classList.add('active');
|
||
document.getElementById('tab-profile').classList.add('hidden');
|
||
document.getElementById('tab-weekly').classList.add('hidden');
|
||
document.getElementById('tab-daily').classList.add('hidden');
|
||
if(tab==='profile') document.getElementById('tab-profile').classList.remove('hidden');
|
||
else if(tab==='weekly'){
|
||
if(!userProfile){alert('请先生成先天体质画像');document.querySelector('[data-tab="profile"]').click();return;}
|
||
document.getElementById('tab-weekly').classList.remove('hidden');
|
||
curAnalysis=getCurAnalysis();
|
||
renderWeekly(wkReport(userProfile,userConstitution,userEmotion,curAnalysis));
|
||
}else if(tab==='daily'){
|
||
if(!userProfile){alert('请先生成先天体质画像');document.querySelector('[data-tab="profile"]').click();return;}
|
||
document.getElementById('tab-daily').classList.remove('hidden');
|
||
curAnalysis=getCurAnalysis();
|
||
renderDaily(dyReport(userProfile,userConstitution,userEmotion,curAnalysis));
|
||
}
|
||
});
|
||
</script>
|
||
</body>
|
||
</html>
|