diff --git a/src/api/AIxiaocaishen.js b/src/api/AIxiaocaishen.js index 2b6ee70..4a27683 100644 --- a/src/api/AIxiaocaishen.js +++ b/src/api/AIxiaocaishen.js @@ -208,6 +208,8 @@ export const getMarketAndCodeAPI = function (params) { method: "POST", data: new URLSearchParams(params), headers: { + token: + "pCtw6AYK0EHAaIexoFHsbZjtsfEAIhcmwkCFm6uKko8VPfMvyDiODL9v9c0veic9fIpQbvT8zN4sH/Si6Q", "Content-Type": "application/x-www-form-urlencoded", }, }); diff --git a/src/assets/fonts/方正新综艺简体.ttf b/src/assets/fonts/方正新综艺简体.ttf new file mode 100644 index 0000000..9fa8006 Binary files /dev/null and b/src/assets/fonts/方正新综艺简体.ttf differ diff --git a/src/assets/img/AiEmotion/标题.png b/src/assets/img/AiEmotion/标题.png new file mode 100644 index 0000000..01a4aa8 Binary files /dev/null and b/src/assets/img/AiEmotion/标题.png differ diff --git a/src/assets/img/AiEmotion/角标.png b/src/assets/img/AiEmotion/角标.png new file mode 100644 index 0000000..0588e89 Binary files /dev/null and b/src/assets/img/AiEmotion/角标.png differ diff --git a/src/assets/img/AiEmotion/锁定.png b/src/assets/img/AiEmotion/锁定.png new file mode 100644 index 0000000..8523f8a Binary files /dev/null and b/src/assets/img/AiEmotion/锁定.png differ diff --git a/src/views/AIchat.vue b/src/views/AIchat.vue index 8fda2cc..3127864 100644 --- a/src/views/AIchat.vue +++ b/src/views/AIchat.vue @@ -330,40 +330,45 @@ const isTypingInProgress = ref(false); const createTypingEffect = (message, content, speed) => { return new Promise((resolve) => { chatStore.messages.push(message); - if (content != "") { - let index = 0; + if (Array.isArray(content) && content.length > 0) { message.content = ""; message.isTyping = true; - const typingInterval = setInterval(() => { - if (index < content.length) { - message.content += content.charAt(index); - index++; - } else { - clearInterval(typingInterval); - message.isTyping = false; + let currentIndex = 0; - // 处理KaTeX渲染(如果需要) + const processNextElement = () => { + if (currentIndex >= content.length) { + message.isTyping = false; nextTick(() => { - if (message.content.includes("$$")) { - message.content = message.content.replace( - katexRegex, - (match, formula) => { - try { - return katex.renderToString(formula, { - throwOnError: false, - }); - } catch (error) { - console.error("KaTeX 渲染错误:", error); - return match; - } - } - ); - } resolve(); // 完成后resolve }); + return; } - }, speed); + + if (currentIndex % 2 === 0) { + // 偶数下标:直接加入 + message.content += content[currentIndex]; + currentIndex++; + processNextElement(); // 立即处理下一个元素 + } else { + // 奇数下标:打字机效果 + const text = content[currentIndex]; + let charIndex = 0; + + const typingInterval = setInterval(() => { + if (charIndex < text.length) { + message.content += text.charAt(charIndex); + charIndex++; + } else { + clearInterval(typingInterval); + currentIndex++; + processNextElement(); // 处理下一个元素 + } + }, speed); + } + }; + + processNextElement(); // 开始处理 } else { if (message.kline) { if (message.klineType == 1) { @@ -572,8 +577,11 @@ watch( }; try { + const env = import.meta.env.VITE_ENV; const result20 = await dataListAPI({ - token: localStorage.getItem("localToken"), + token: + '8Csj5VVX1UbIb4C3oxrnbZi0+fEeMx8pywnIlrmTm45Cb/EllzWACLto9J9+fCFsfdgBOvKvyY94FvqlvM0', + // "8nkj4QBV1RPIb4CzoRTnbZi0+fEeMx8pywnIlrmTxdwROKkuwWqAWu9orpkpeXVqL98DPfeonNYpHv+mucA", market: codeData.value.market, code: codeData.value.code, language: "cn", //t.value.suoxie, @@ -743,7 +751,7 @@ watch( class: "title1", type: "title1", content: codeData.value.name + "全景作战报告", - date: moment().format("MM/DD/YYYY"), + date: moment().format("DD/MM/YYYY"), }, "", 50 @@ -796,7 +804,7 @@ watch( // } // }, 50); // 调整速度为50ms/字符 - addTypingTask(aiMessage1, ac1, 50); + addTypingTask(aiMessage1, ["", ac1], 50); // chatStore.messages.push({ // sender: "ai", @@ -1030,7 +1038,7 @@ watch( // aiMessage2.isTyping = false; // } // }, 50); // 调整速度为50ms/字符 - addTypingTask(aiMessage2, ac2, 50); + addTypingTask(aiMessage2, ["", ac2], 50); // chatStore.messages.push({ // sender: "ai", @@ -1087,6 +1095,8 @@ watch( // } // } // ); + const ac31 = `

【主力行为】

`; + const ac32 = `${result23.data.zhuli1}

${result23.data.zhuli2}

${result23.data.zhuli3}

`; const ac3 = `

【主力行为】

${result23.data.zhuli1}

${result23.data.zhuli2}

${result23.data.zhuli3}

`; // 先推送初始消息 @@ -1110,7 +1120,7 @@ watch( // } // }, 50); // 调整速度为50ms/字符 - addTypingTask(aiMessage3, ac3, 50); + addTypingTask(aiMessage3, [ac31, ac32], 50); // chatStore.messages.push({ // sender: "ai", @@ -1142,6 +1152,15 @@ watch( const nengliang = `

【能量维度】

${result23.data.nengliang}

`; const ac4 = kongjian + shijian + nengliang; + const ac41 = `

【空间维度】

`; + const ac42 = `${arr[0]},${arr[1]}`; + const ac43 = `

`; + const ac44 = `${arr[2]},${arr[3]}

`; + const ac45 = `

【时间维度】

`; + const ac46 = `${result23.data.shijian}

`; + const ac47 = `

【能量维度】

`; + const ac48 = `${result23.data.nengliang}

`; + // const pc4 = marked( // kongjian + // "\n" + @@ -1179,7 +1198,11 @@ watch( // } // }, 50); // 调整速度为50ms/字符 - addTypingTask(aiMessage4, ac4, 50); + addTypingTask( + aiMessage4, + [ac41, ac42, ac43, ac44, ac45, ac46, ac47, ac48], + 50 + ); // chatStore.messages.push({ // sender: "ai", @@ -1227,7 +1250,10 @@ watch( const cftj = `

【触发条件】

${result24.data.cftl}

`; const gfzl = `

【攻防指令】

${result24.data.gfzl}

`; const ac5 = cftj + gfzl; - + const ac51 = `

【触发条件】

`; + const ac52 = `${result24.data.cftl}

`; + const ac53 = `

【攻防指令】

`; + const ac54 = `${result24.data.gfzl}

`; // const pc5 = marked(result24.data.cftl + "/n" + result24.data.gfzl); // const ac5 = pc5.replace(katexRegex, (match, formula) => { // try { @@ -1259,7 +1285,7 @@ watch( // } // }, 50); // 调整速度为50ms/字符 - addTypingTask(aiMessage5, ac5, 50); + addTypingTask(aiMessage5, [ac51, ac52, ac53, ac54], 50); // chatStore.messages.push({ // sender: "ai", @@ -1268,7 +1294,7 @@ watch( // content: ac5, // }); - const ac6 = "内容由AI生成,请注意甄别"; + const ac6 = "该内容由AI生成,请注意甄别"; // 先推送初始消息 const aiMessage6 = reactive({ sender: "ai", @@ -1290,7 +1316,7 @@ watch( // } // }, 50); // 调整速度为50ms/字符 - addTypingTask(aiMessage6, ac6, 100); + addTypingTask(aiMessage6, ["", ac6], 100); // chatStore.messages.push({ // sender: "ai", @@ -2286,7 +2312,7 @@ function KlineCanvsEcharts(containerId) { fontSize: window.innerWidth > 768 ? 15 : vwToPx(1.8), }, orient: "horizontal", - top: window.innerWidth > 768 ? "72%" : "64%", + top: window.innerWidth > 768 ? "68%" : "64%", width: "100%", left: "center", itemGap: 15, @@ -2389,23 +2415,53 @@ function KlineCanvsEcharts(containerId) { }, grid: [ { - // left: window.innerWidth > 768 ? '8%' : '15%', - // right: window.innerWidth > 768 ? '4%' : '2.5%', - top: window.innerWidth > 768 ? "10%" : "5%", - height: window.innerWidth > 768 ? "36%" : "34%", + left: + window.innerWidth > 1024 + ? "70vw" + : window.innerWidth > 768 + ? "65vw" + : "55vw", + right: + window.innerWidth > 1024 + ? "40vw" + : window.innerWidth > 768 + ? "30vw" + : "40vw", + top: window.innerWidth > 768 ? "8%" : "5%", + height: window.innerWidth > 768 ? "34%" : "34%", containLabel: false, }, { - // left: window.innerWidth > 768 ? '8%' : '15%', - // right: window.innerWidth > 768 ? '4%' : '2.5%', - top: window.innerWidth > 768 ? "50%" : "42%", - height: window.innerWidth > 768 ? "20%" : "22%", + left: + window.innerWidth > 1024 + ? "70vw" + : window.innerWidth > 768 + ? "65vw" + : "55vw", + right: + window.innerWidth > 1024 + ? "40vw" + : window.innerWidth > 768 + ? "30vw" + : "40vw", + top: window.innerWidth > 768 ? "45%" : "42%", + height: window.innerWidth > 768 ? "22%" : "22%", containLabel: false, }, { - // left: window.innerWidth > 768 ? '8%' : '15%', - // right: window.innerWidth > 768 ? '4%' : '2.5%', - top: window.innerWidth > 768 ? "78%" : "70%", + left: + window.innerWidth > 1024 + ? "70vw" + : window.innerWidth > 768 + ? "65vw" + : "55vw", + right: + window.innerWidth > 1024 + ? "40vw" + : window.innerWidth > 768 + ? "30vw" + : "40vw", + top: window.innerWidth > 768 ? "73%" : "70%", height: window.innerWidth > 768 ? "20%" : "22%", containLabel: false, }, @@ -2547,7 +2603,8 @@ function KlineCanvsEcharts(containerId) { xAxisIndex: [0, 1, 2], type: "slider", top: window.innerWidth > 768 ? "95%" : "96%", - left: window.innerWidth > 768 ? "10%" : "8%", + // left: window.innerWidth > 768 ? "10%" : "8%", + // right: window.innerWidth > 768 ? "4%" : "8%", start: 98, end: 100, }, @@ -2885,12 +2942,12 @@ function KlineCanvsEcharts(containerId) { symbol: "rect", symbolSize: (value, params) => { const width = window.innerWidth; - const baseHeight = 36; - if (width <= 375) { - return [2, 16]; - } else if (width <= 768) { - return [2, 24]; - } + const baseHeight = 22; + // if (width <= 375) { + // return [2, 16]; + // } else if (width <= 768) { + // return [2, 22]; + // } return [2, baseHeight]; }, itemStyle: { @@ -2906,7 +2963,7 @@ function KlineCanvsEcharts(containerId) { if (item[1] === 0) { return { coord: [item[0], 20], - symbolOffset: window.innerWidth > 768 ? [0, 20] : [0, 12], + symbolOffset: [0, 10], itemStyle: { color: "#00ff00", }, @@ -2938,12 +2995,12 @@ function KlineCanvsEcharts(containerId) { symbol: "rect", symbolSize: (value, params) => { const width = window.innerWidth; - const baseHeight = 36; - if (width <= 375) { - return [2, 16]; - } else if (width <= 768) { - return [2, 24]; - } + const baseHeight = 22; + // if (width <= 375) { + // return [2, 16]; + // } else if (width <= 768) { + // return [2, 24]; + // } return [2, baseHeight]; }, itemStyle: { @@ -2959,8 +3016,7 @@ function KlineCanvsEcharts(containerId) { if (item[1] === 100) { return { coord: [item[0], 80], - symbolOffset: - window.innerWidth > 768 ? [0, -20] : [0, -12], + symbolOffset: [0, -10], itemStyle: { color: "#ff0000", }, @@ -3139,7 +3195,7 @@ watch( renderAllKlineCharts(); } - }, 300); + }, 1000); }, { immediate: true } // 添加immediate属性,确保初始化时执行一次 ); @@ -3354,7 +3410,6 @@ onUnmounted(() => { /* top: -30px; */ } .logo1 { - position: relative; max-width: 350px; min-width: 200px; width: 25%; @@ -3376,7 +3431,7 @@ onUnmounted(() => { .gif-area { padding: 70px 0px; - /* position: relative; */ + position: relative; /* height: 30vh; */ display: flex; flex-direction: column; @@ -3659,6 +3714,7 @@ onUnmounted(() => { display: flex; justify-content: center; align-items: center; + height: calc(500px + 10vw) !important; } .message-bubble.ai.content3 { diff --git a/src/views/AiEmotion.vue b/src/views/AiEmotion.vue index bec32dd..ca207e3 100644 --- a/src/views/AiEmotion.vue +++ b/src/views/AiEmotion.vue @@ -53,7 +53,7 @@
温度计图标 - 股市温度计 + 股票温度计
股票温度:{{ data2 ?? "NA" }}
@@ -2240,6 +2240,7 @@ defineExpose({ .scaled-img { height: 300px; min-height: 25rem; + background-size: contain; } } @@ -2272,9 +2273,10 @@ defineExpose({ background-size: 100% 100%; background-position: center; background-repeat: no-repeat; + background-size: contain; text-align: center; - width: 95%; - margin-top: 6%; + width:100%; + margin-top: 4%; height: 200px; min-height: 200px; } diff --git a/src/views/Announcement.vue b/src/views/Announcement.vue index 359cd10..1a93982 100644 --- a/src/views/Announcement.vue +++ b/src/views/Announcement.vue @@ -1,72 +1,73 @@ \ No newline at end of file