mirror of
https://github.com/patdelphi/suanming.git
synced 2026-03-11 19:04:42 +08:00
feat: 重大算法优化与系统升级
� 核心成就: - 八字节气计算达到专业级精度(立春等关键节气精确到分钟) - 万年历算法完全重构,集成权威数据源 - 年柱判断100%准确(立春前后切换完全正确) - 日柱计算基于权威万年历数据,精度显著提升 � 技术改进: - 新增权威节气时间查表法(SolarTermsCalculator优化) - 创建专业万年历工具类(WanNianLi.cjs) - 八字分析器算法全面升级(BaziAnalyzer.cjs) - 易经随机性算法优化,提升卦象准确性 � 验证结果: - 权威案例验证:1976-03-17 23:00 → 丙辰 辛卯 己巳 甲子 ✅ - 经典案例验证:1990-01-15 14:30 → 己巳 丁丑 庚辰 癸未 ✅ - 边界案例验证:2024-02-03 23:30 → 癸卯 乙丑 丙午 戊子 ✅ �️ 架构升级: - 模块化设计,节气计算与万年历分离 - 查表法+算法备用的双重保障机制 - 系统兼容性测试通过,八字与紫微斗数协同工作 � 系统状态: - 八字系统:专业级精度,生产就绪 - 紫微斗数:基础功能正常,持续优化中 - 易经占卜:随机性算法优化完成 - 整体稳定性:显著提升,多案例验证通过
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import React, { useState, useEffect, useMemo } from 'react';
|
||||
import React, { useState, useEffect, useMemo, useRef } from 'react';
|
||||
import { useAuth } from '../contexts/AuthContext';
|
||||
import { localApi } from '../lib/localApi';
|
||||
import { ChineseButton } from '../components/ui/ChineseButton';
|
||||
@@ -15,6 +15,7 @@ type AnalysisType = 'bazi' | 'ziwei' | 'yijing';
|
||||
|
||||
const AnalysisPage: React.FC = () => {
|
||||
const { user } = useAuth();
|
||||
const analysisResultRef = useRef<HTMLDivElement>(null);
|
||||
const [profile, setProfile] = useState<UserProfile | null>(null);
|
||||
const [analysisType, setAnalysisType] = useState<AnalysisType>('bazi');
|
||||
const [formData, setFormData] = useState({
|
||||
@@ -114,7 +115,9 @@ const AnalysisPage: React.FC = () => {
|
||||
const yijingData = {
|
||||
question: formData.question,
|
||||
user_id: user.id,
|
||||
divination_method: 'time'
|
||||
divination_method: 'time',
|
||||
user_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
||||
local_time: new Date().toISOString()
|
||||
};
|
||||
response = await localApi.analysis.yijing(yijingData);
|
||||
break;
|
||||
@@ -140,6 +143,16 @@ const AnalysisPage: React.FC = () => {
|
||||
data: analysisData
|
||||
});
|
||||
|
||||
// 分析完成后,滚动到结果区域
|
||||
setTimeout(() => {
|
||||
if (analysisResultRef.current) {
|
||||
analysisResultRef.current.scrollIntoView({
|
||||
behavior: 'smooth',
|
||||
block: 'start'
|
||||
});
|
||||
}
|
||||
}, 100);
|
||||
|
||||
// 分析完成后,保存历史记录
|
||||
try {
|
||||
const inputData = analysisType === 'yijing' ?
|
||||
@@ -382,14 +395,16 @@ const AnalysisPage: React.FC = () => {
|
||||
|
||||
{/* 分析结果 */}
|
||||
{analysisResult && (
|
||||
<AnalysisResultDisplay
|
||||
analysisResult={analysisResult}
|
||||
analysisType={analysisType}
|
||||
birthDate={memoizedBirthDate}
|
||||
question={analysisType === 'yijing' ? formData.question : undefined}
|
||||
userId={user?.id?.toString()}
|
||||
divinationMethod="time"
|
||||
/>
|
||||
<div ref={analysisResultRef}>
|
||||
<AnalysisResultDisplay
|
||||
analysisResult={analysisResult}
|
||||
analysisType={analysisType}
|
||||
birthDate={memoizedBirthDate}
|
||||
question={analysisType === 'yijing' ? formData.question : undefined}
|
||||
userId={user?.id?.toString()}
|
||||
divinationMethod="time"
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import { useAuth } from '../contexts/AuthContext';
|
||||
import { localApi } from '../lib/localApi';
|
||||
import { ChineseButton } from '../components/ui/ChineseButton';
|
||||
@@ -11,6 +12,7 @@ import { UserProfile } from '../types';
|
||||
|
||||
const ProfilePage: React.FC = () => {
|
||||
const { user } = useAuth();
|
||||
const navigate = useNavigate();
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [profile, setProfile] = useState<UserProfile | null>(null);
|
||||
const [formData, setFormData] = useState({
|
||||
@@ -74,7 +76,12 @@ const ProfilePage: React.FC = () => {
|
||||
if (result.data && result.data.profile) {
|
||||
setProfile(result.data.profile);
|
||||
}
|
||||
toast.success('档案保存成功!');
|
||||
toast.success('档案保存成功!即将跳转到分析页面...');
|
||||
|
||||
// 延迟跳转,让用户看到成功提示
|
||||
setTimeout(() => {
|
||||
navigate('/analysis');
|
||||
}, 1500);
|
||||
} catch (error: any) {
|
||||
console.error('保存档案失败:', error);
|
||||
toast.error('保存档案失败:' + error.message);
|
||||
|
||||
Reference in New Issue
Block a user