guanwei 1.2.0 → 1.2.2
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/dist/assets/index-CQjUFsty.js +102 -0
- package/dist/assets/index-CQjUFsty.js.map +1 -0
- package/dist/index.html +1 -1
- package/package.json +1 -1
- package/scripts/guanwei +5 -2
- package/server/src/data/db.json +231 -3728
- package/server/src/data/guanwei.db +0 -0
- package/server/src/services/divineStore.ts +1 -1
- package/src/pages/DemoPage.tsx +14 -1
- package/src/pages/ModulePage.tsx +18 -0
- package/dist/assets/index-CRUHghuF.js +0 -102
- package/dist/assets/index-CRUHghuF.js.map +0 -1
|
Binary file
|
|
@@ -160,7 +160,7 @@ export function listDivinations(username: string, page = 1, pageSize = 20, profi
|
|
|
160
160
|
const where = profileId ? 'WHERE username = ? AND profile_id = ?' : 'WHERE username = ?';
|
|
161
161
|
const params = profileId ? [username, profileId] : [username];
|
|
162
162
|
const totalRow = d.prepare('SELECT COUNT(*) AS c FROM divinations ' + where).get(...params) as any;
|
|
163
|
-
const rows = d.prepare('SELECT id, art_id, question, created_at, report_json, status, profile_id FROM divinations ' + where + ' ORDER BY created_at DESC LIMIT ? OFFSET ?')
|
|
163
|
+
const rows = d.prepare('SELECT id, art_id, question, created_at, report_json, status, profile_id FROM divinations ' + where + ' ORDER BY created_at DESC, id DESC LIMIT ? OFFSET ?')
|
|
164
164
|
.all(...params, size, (pageN - 1) * size) as any[];
|
|
165
165
|
return {
|
|
166
166
|
list: rows.map(r => ({
|
package/src/pages/DemoPage.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// 演示模式(Demo Mode):无需后端 / 无需 API Key 的完整体验页
|
|
2
2
|
// 九术排盘用 shared/core 本地引擎在浏览器计算,AI 报告加载内置示例(静态 JSON)——GitHub Pages 上可直接体验
|
|
3
|
-
import { useState } from 'react';
|
|
3
|
+
import { useEffect, useRef, useState } from 'react';
|
|
4
4
|
import { Link } from 'react-router-dom';
|
|
5
5
|
import { baziCalc } from '@core/engine/bazi';
|
|
6
6
|
import { ziweiCalc } from '@core/engine/ziwei';
|
|
@@ -92,6 +92,19 @@ export default function DemoPage() {
|
|
|
92
92
|
default: return () => null;
|
|
93
93
|
}
|
|
94
94
|
};
|
|
95
|
+
|
|
96
|
+
// 切换术数时清空上一术的排盘结果(否则旧数据传给新术 Result 组件会崩溃)
|
|
97
|
+
const prevArtRef = useRef(artId);
|
|
98
|
+
useEffect(() => {
|
|
99
|
+
if (prevArtRef.current !== artId) {
|
|
100
|
+
prevArtRef.current = artId;
|
|
101
|
+
setPhase('idle');
|
|
102
|
+
setReport(null);
|
|
103
|
+
setLocalResult(null);
|
|
104
|
+
setShowRaw(false);
|
|
105
|
+
}
|
|
106
|
+
}, [artId]);
|
|
107
|
+
|
|
95
108
|
const reset = () => {
|
|
96
109
|
setPhase('idle');
|
|
97
110
|
setReport(null);
|
package/src/pages/ModulePage.tsx
CHANGED
|
@@ -129,6 +129,24 @@ export default function ModulePage() {
|
|
|
129
129
|
const divineIdRef = useRef<string | null>(null);
|
|
130
130
|
divineIdRef.current = divineId;
|
|
131
131
|
|
|
132
|
+
// ─── 术数切换(/art/qimen → /art/ziwei)必须全量重置 ───
|
|
133
|
+
// 若不重置:上一术的 status='done' + result 会传给新术的 Result 组件,
|
|
134
|
+
// 新术访问旧数据结构中不存在的字段 → TypeError → ErrorBoundary 兜底显示「此页一时未应机」
|
|
135
|
+
const prevArtRef = useRef(artId);
|
|
136
|
+
useEffect(() => {
|
|
137
|
+
if (prevArtRef.current !== artId) {
|
|
138
|
+
prevArtRef.current = artId;
|
|
139
|
+
ai.reset(); // 清 AI 解读 + 在途流式请求作废(reqId 失效)
|
|
140
|
+
reset(); // 清排盘 status/result/divineId
|
|
141
|
+
setFit(null);
|
|
142
|
+
profileRef.current = null;
|
|
143
|
+
questionRef.current = '';
|
|
144
|
+
inputsRef.current = null;
|
|
145
|
+
profileIdRef.current = 'main';
|
|
146
|
+
savedRef.current = null;
|
|
147
|
+
}
|
|
148
|
+
}, [artId, ai, reset]);
|
|
149
|
+
|
|
132
150
|
// 起占成功 → 自动存档(StrictMode 防重复:以 result 引用去重)
|
|
133
151
|
const savedRef = useRef<unknown>(null);
|
|
134
152
|
useEffect(() => {
|