6 Commits

  1. 152
      src/views/AIchat.vue
  2. 2
      src/views/AiEmotion.vue

152
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) {
@ -629,7 +634,7 @@ watch(
class: "title1",
type: "title1",
content: codeData.value.name + "全景作战报告",
date: moment().format("MM/DD/YYYY"),
date: moment().format("DD/MM/YYYY"),
},
"",
50
@ -682,7 +687,7 @@ watch(
// }
// }, 50); // 50ms/
addTypingTask(aiMessage1, ac1, 50);
addTypingTask(aiMessage1, ["", ac1], 50);
// chatStore.messages.push({
// sender: "ai",
@ -910,7 +915,7 @@ watch(
// aiMessage2.isTyping = false;
// }
// }, 50); // 50ms/
addTypingTask(aiMessage2, ac2, 50);
addTypingTask(aiMessage2, ["", ac2], 50);
// chatStore.messages.push({
// sender: "ai",
@ -961,6 +966,8 @@ watch(
// }
// }
// );
const ac31 = `<p style="margin:0;color:#FADC0C;display:flex;justify-content:center;font-size:28px">【主力行为】</p><p>`;
const ac32 = `${result23.data.zhuli1}</p><p>${result23.data.zhuli2}</p><p>${result23.data.zhuli3}</p>`;
const ac3 = `<p style="margin:0;color:#FADC0C;display:flex;justify-content:center;font-size:28px">【主力行为】</p><p>${result23.data.zhuli1}</p><p>${result23.data.zhuli2}</p><p>${result23.data.zhuli3}</p>`;
//
@ -984,7 +991,7 @@ watch(
// }
// }, 50); // 50ms/
addTypingTask(aiMessage3, ac3, 50);
addTypingTask(aiMessage3, [ac31, ac32], 50);
// chatStore.messages.push({
// sender: "ai",
@ -1016,6 +1023,15 @@ watch(
const nengliang = `<p style="margin:0;color:#FADC0C;display:flex;justify-content:center;font-size:28px">【能量维度】</p><p>${result23.data.nengliang}</p>`;
const ac4 = kongjian + shijian + nengliang;
const ac41 = `<p style="margin:0;color:#FADC0C;display:flex;justify-content:center;font-size:28px">【空间维度】</p><p style="display:flex;justify-content:center;">`;
const ac42 = `${arr[0]},${arr[1]}`;
const ac43 = `</p><p style="display:flex;justify-content:center;">`;
const ac44 = `${arr[2]},${arr[3]}</p>`;
const ac45 = `<p style="margin:0;color:#FADC0C;display:flex;justify-content:center;font-size:28px">【时间维度】</p><p style="display:flex;justify-content:center;">`;
const ac46 = `${result23.data.shijian}</p>`;
const ac47 = `<p style="margin:0;color:#FADC0C;display:flex;justify-content:center;font-size:28px">【能量维度】</p><p>`;
const ac48 = `${result23.data.nengliang}</p>`;
// const pc4 = marked(
// kongjian +
// "\n" +
@ -1053,7 +1069,11 @@ watch(
// }
// }, 50); // 50ms/
addTypingTask(aiMessage4, ac4, 50);
addTypingTask(
aiMessage4,
[ac41, ac42, ac43, ac44, ac45, ac46, ac47, ac48],
50
);
// chatStore.messages.push({
// sender: "ai",
@ -1095,7 +1115,10 @@ watch(
const cftj = `<p style="margin:0;color:#FADC0C;display:flex;justify-content:center;font-size:28px">【触发条件】</p><p>${result24.data.cftl}</p>`;
const gfzl = `<p style="margin:0;color:#FADC0C;display:flex;justify-content:center;font-size:28px">【攻防指令】</p><p>${result24.data.gfzl}</p>`;
const ac5 = cftj + gfzl;
const ac51 = `<p style="margin:0;color:#FADC0C;display:flex;justify-content:center;font-size:28px">【触发条件】</p><p>`;
const ac52 = `${result24.data.cftl}</p>`;
const ac53 = `<p style="margin:0;color:#FADC0C;display:flex;justify-content:center;font-size:28px">【攻防指令】</p><p>`;
const ac54 = `${result24.data.gfzl}</p>`;
// const pc5 = marked(result24.data.cftl + "/n" + result24.data.gfzl);
// const ac5 = pc5.replace(katexRegex, (match, formula) => {
// try {
@ -1127,7 +1150,7 @@ watch(
// }
// }, 50); // 50ms/
addTypingTask(aiMessage5, ac5, 50);
addTypingTask(aiMessage5, [ac51,ac52,ac53,ac54], 50);
// chatStore.messages.push({
// sender: "ai",
@ -1158,7 +1181,7 @@ watch(
// }
// }, 50); // 50ms/
addTypingTask(aiMessage6, ac6, 100);
addTypingTask(aiMessage6, ["", ac6], 100);
// chatStore.messages.push({
// sender: "ai",
@ -2135,7 +2158,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,
@ -2238,23 +2261,23 @@ 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,
},
@ -2396,7 +2419,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,
},
@ -2734,12 +2758,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: {
@ -2755,7 +2779,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",
},
@ -2787,12 +2811,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: {
@ -2809,7 +2833,7 @@ function KlineCanvsEcharts(containerId) {
return {
coord: [item[0], 80],
symbolOffset:
window.innerWidth > 768 ? [0, -20] : [0, -12],
[0, -10],
itemStyle: {
color: "#ff0000",
},
@ -2988,7 +3012,7 @@ watch(
renderAllKlineCharts();
}
}, 300);
}, 1000);
},
{ immediate: true } // immediate
);
@ -3203,7 +3227,6 @@ onUnmounted(() => {
/* top: -30px; */
}
.logo1 {
position: relative;
max-width: 350px;
min-width: 200px;
width: 25%;
@ -3225,7 +3248,7 @@ onUnmounted(() => {
.gif-area {
padding: 70px 0px;
/* position: relative; */
position: relative;
/* height: 30vh; */
display: flex;
flex-direction: column;
@ -3508,6 +3531,7 @@ onUnmounted(() => {
display: flex;
justify-content: center;
align-items: center;
height: calc(500px + 10vw) !important;
}
.message-bubble.ai.content3 {

2
src/views/AiEmotion.vue

@ -53,7 +53,7 @@
<div class="class003">
<div class="content1">
<img class="img01" src="@/assets/img/AiEmotion/温度计.png" alt="温度计图标">
<span class="title1">温度计</span>
<span class="title1">温度计</span>
</div>
<div class="div00">
<div class="div01">股票温度{{ data2 ?? "NA" }}</div>

Loading…
Cancel
Save