diff --git a/client-configs.json b/client-configs.json index d96077c..5e6fe2b 100644 --- a/client-configs.json +++ b/client-configs.json @@ -50,7 +50,7 @@ } }, "tianmu": { - "clientId": "4", + "clientId": "9", "appId": "wx0be424e1d22065a9", "name": "沐沐", "placeholder": "快告诉沐沐您在想什么~", diff --git a/src/pages/index/components/module/AnswerComponent/index.vue b/src/pages/index/components/module/AnswerComponent/index.vue index d2a5eb8..d3fbac8 100644 --- a/src/pages/index/components/module/AnswerComponent/index.vue +++ b/src/pages/index/components/module/AnswerComponent/index.vue @@ -16,7 +16,7 @@ 正在生成 - + 查看详情 @@ -27,10 +27,11 @@ diff --git a/src/pages/long-answer/index.vue b/src/pages/long-answer/index.vue index 8326c80..c39a694 100644 --- a/src/pages/long-answer/index.vue +++ b/src/pages/long-answer/index.vue @@ -1,32 +1,104 @@ + \ No newline at end of file +onUnload(() => { + try { + unsubscribe && unsubscribe(); + } catch (e) { } +}); + + + \ No newline at end of file diff --git a/src/utils/StreamManager.js b/src/utils/StreamManager.js new file mode 100644 index 0000000..b98e08b --- /dev/null +++ b/src/utils/StreamManager.js @@ -0,0 +1,52 @@ +// 简单的流式数据管理器:开启流、更新流、订阅流、关闭流 +const streams = {}; + +function openStream(id, initial = '', finished = false) { + if (!id) return; + streams[id] = streams[id] || { text: '', finished: false, subs: new Set() }; + streams[id].text = initial || ''; + streams[id].finished = !!finished; + // notify existing subscribers + streams[id].subs.forEach((cb) => cb(streams[id].text, streams[id].finished)); +} + +function updateStream(id, text, finished = false) { + if (!id || !streams[id]) return; + streams[id].text = text || ''; + streams[id].finished = !!finished; + streams[id].subs.forEach((cb) => cb(streams[id].text, streams[id].finished)); +} + +function subscribe(id, cb) { + if (!id) return () => {}; + streams[id] = streams[id] || { text: '', finished: false, subs: new Set() }; + streams[id].subs.add(cb); + // send current snapshot immediately + cb(streams[id].text, streams[id].finished); + return () => { + streams[id] && streams[id].subs.delete(cb); + // 移除空流 + if (streams[id] && streams[id].subs.size === 0 && streams[id].finished) { + delete streams[id]; + } + }; +} + +function closeStream(id) { + if (!id || !streams[id]) return; + streams[id].subs.forEach((cb) => cb(streams[id].text, true)); + delete streams[id]; +} + +function getSnapshot(id) { + if (!id || !streams[id]) return { text: '', finished: false }; + return { text: streams[id].text, finished: streams[id].finished }; +} + +export default { + openStream, + updateStream, + subscribe, + closeStream, + getSnapshot, +};