79 lines
2.3 KiB
JavaScript
79 lines
2.3 KiB
JavaScript
const { birthInfoToBazi, analyzeElementBalance } = require('../../utils/core/index.js');
|
|
|
|
Page({
|
|
data: {
|
|
gender: 'male',
|
|
birthDate: '1990-01-01',
|
|
birthTime: '12:00',
|
|
ziSect: 'lateZiNextDay',
|
|
bazi: null,
|
|
pillars: [],
|
|
elements: [],
|
|
elementAnalysis: {}
|
|
},
|
|
|
|
onLoad() {
|
|
// 尝试从本地存储恢复
|
|
const saved = wx.getStorageSync('lunar-bazi-input');
|
|
if (saved) {
|
|
this.setData(saved);
|
|
}
|
|
},
|
|
|
|
setGender(e) {
|
|
this.setData({ gender: e.currentTarget.dataset.g });
|
|
},
|
|
|
|
setZiSect(e) {
|
|
this.setData({ ziSect: e.currentTarget.dataset.s });
|
|
},
|
|
|
|
onDateChange(e) {
|
|
this.setData({ birthDate: e.detail.value });
|
|
},
|
|
|
|
onTimeChange(e) {
|
|
this.setData({ birthTime: e.detail.value });
|
|
},
|
|
|
|
calculate() {
|
|
const { gender, birthDate, birthTime, ziSect } = this.data;
|
|
const [year, month, day] = birthDate.split('-').map(Number);
|
|
const [hour, minute] = birthTime.split(':').map(Number);
|
|
|
|
const bazi = birthInfoToBazi({ year, month, day, hour, minute, gender, ziSect });
|
|
const elementAnalysis = analyzeElementBalance(bazi.eightChar);
|
|
|
|
const pillars = [
|
|
{ label: '年柱', ...bazi.eightChar.yearPillar },
|
|
{ label: '月柱', ...bazi.eightChar.monthPillar },
|
|
{ label: '日柱', ...bazi.eightChar.dayPillar },
|
|
{ label: '时柱', ...bazi.eightChar.hourPillar }
|
|
];
|
|
|
|
const total = elementAnalysis.total || 1;
|
|
const elements = [
|
|
{ name: '木', count: elementAnalysis.wood, percent: Math.round(elementAnalysis.wood / total * 100) },
|
|
{ name: '火', count: elementAnalysis.fire, percent: Math.round(elementAnalysis.fire / total * 100) },
|
|
{ name: '土', count: elementAnalysis.earth, percent: Math.round(elementAnalysis.earth / total * 100) },
|
|
{ name: '金', count: elementAnalysis.metal, percent: Math.round(elementAnalysis.metal / total * 100) },
|
|
{ name: '水', count: elementAnalysis.water, percent: Math.round(elementAnalysis.water / total * 100) }
|
|
];
|
|
|
|
this.setData({ bazi, pillars, elements, elementAnalysis });
|
|
|
|
// 保存输入
|
|
wx.setStorageSync('lunar-bazi-input', { gender, birthDate, birthTime, ziSect });
|
|
// 保存八字供运势页使用
|
|
wx.setStorageSync('lunar-user-bazi', bazi);
|
|
},
|
|
|
|
reset() {
|
|
this.setData({ bazi: null });
|
|
},
|
|
|
|
goFortune() {
|
|
wx.switchTab({ url: '/pages/fortune/fortune' });
|
|
}
|
|
});
|