v6.9.2: API智能回退 — localhost自动检测+JS引擎fallback
## 修复 - api-bridge.js: 自动检测运行环境 (localhost→5200, 云端→copse.top) - main.js: API失败自动回退JS引擎, 不再直接报错 - 移除isResolved未闭合的try错误
This commit is contained in:
@@ -1,11 +1,16 @@
|
|||||||
/**
|
/**
|
||||||
* API Bridge v2.0
|
* API Bridge v3.0
|
||||||
* 连接前端到 Python v6.7.0 精算引擎
|
* 自动检测环境:本地用 localhost:5200,云端用 copse.top
|
||||||
*
|
* 均不可达时回退到浏览器端 JS 引擎
|
||||||
* 部署: API_KEY 在生产环境通过服务端环境变量注入
|
|
||||||
* 此处为前端调用凭证,实际部署时建议配置环境变量
|
|
||||||
*/
|
*/
|
||||||
const API_BASE = 'https://copse.top';
|
const API_BASE = (() => {
|
||||||
|
const host = window.location.hostname;
|
||||||
|
if (host === 'localhost' || host === '127.0.0.1' || host.startsWith('192.168.')) {
|
||||||
|
return 'http://localhost:5200';
|
||||||
|
}
|
||||||
|
return 'https://copse.top';
|
||||||
|
})();
|
||||||
|
|
||||||
const API_KEY = 'sk-828a787bd2bb69d2d4707e8c05ae5cfe81b13de7be1db7f85932d49ed72e4c6a';
|
const API_KEY = 'sk-828a787bd2bb69d2d4707e8c05ae5cfe81b13de7be1db7f85932d49ed72e4c6a';
|
||||||
|
|
||||||
const API_CACHE = {};
|
const API_CACHE = {};
|
||||||
|
|||||||
+19
-6
@@ -216,16 +216,29 @@ function setupForm() {
|
|||||||
const [hour, minute] = timeVal.split(':').map(Number);
|
const [hour, minute] = timeVal.split(':').map(Number);
|
||||||
btnText.classList.add('hidden'); btnLoading.classList.remove('hidden'); btn.disabled = true;
|
btnText.classList.add('hidden'); btnLoading.classList.remove('hidden'); btn.disabled = true;
|
||||||
try {
|
try {
|
||||||
// 🔥 v6.7.0: 始终使用 Python API 精算引擎
|
// v6.9.2: API优先, 不可用时回退JS引擎
|
||||||
if (window.JyotishAPI) {
|
if (window.JyotishAPI) {
|
||||||
chartData = await window.JyotishAPI.computeAll({ year, month, day, hour, minute, lat, lon, tz });
|
chartData = await window.JyotishAPI.computeAll({ year, month, day, hour, minute, lat, lon, tz });
|
||||||
if (!chartData || !chartData.success) {
|
if (!chartData || !chartData.success) throw new Error(chartData?.error || 'API计算失败');
|
||||||
throw new Error(chartData?.error || 'API计算失败');
|
console.log('[Jyotish] ✅ API —', chartData.dasha_count, 'Dasha,', chartData.yogas?.length || 0, 'Yoga');
|
||||||
}
|
|
||||||
console.log('[Jyotish] ✅ Python API v6.7.0 —', chartData.dasha_count, '种Dasha,', chartData.yogas?.length || 0, '个Yoga');
|
|
||||||
} else {
|
} else {
|
||||||
throw new Error('API桥接未加载,请刷新页面');
|
throw new Error('API桥接未加载');
|
||||||
}
|
}
|
||||||
|
} catch (apiErr) {
|
||||||
|
console.warn('[Jyotish] API不可用:', apiErr.message, '→ 回退JS引擎');
|
||||||
|
try {
|
||||||
|
await initEngine();
|
||||||
|
chartData = await computeChart({ year, month, day, hour, minute, lat, lon, tz });
|
||||||
|
chartData._fallback = true;
|
||||||
|
console.log('[Jyotish] ⚠️ JS引擎回退成功');
|
||||||
|
} catch (jsErr) {
|
||||||
|
console.error('[Jyotish] JS引擎也失败:', jsErr);
|
||||||
|
alert('计算失败: ' + (apiErr.message || jsErr.message) + '\n请检查网络或启动API服务器');
|
||||||
|
btnText.classList.remove('hidden'); btnLoading.classList.add('hidden'); btn.disabled = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
// 保存出生数据供生时校正使用
|
// 保存出生数据供生时校正使用
|
||||||
window.__jyotishBirth = { year, month, day, hour, minute, lat, lon, tz };
|
window.__jyotishBirth = { year, month, day, hour, minute, lat, lon, tz };
|
||||||
renderAll();
|
renderAll();
|
||||||
|
|||||||
Reference in New Issue
Block a user