|
|
|
@ -165,7 +165,11 @@ |
|
|
|
</div> |
|
|
|
</view> |
|
|
|
<!-- 使用 rich-text 渲染 Markdown 内容 --> |
|
|
|
<rich-text v-if="!message.isUser" class="message-text" :nodes="renderMarkdown(message.content)"></rich-text> |
|
|
|
<rich-text |
|
|
|
v-if="!message.isUser" |
|
|
|
class="message-text" |
|
|
|
:nodes="renderMarkdown(message.content)" |
|
|
|
></rich-text> |
|
|
|
<text v-else class="message-text">{{ message.content }}</text> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
@ -211,24 +215,24 @@ const { safeAreaInsets } = uni.getSystemInfoSync(); |
|
|
|
|
|
|
|
import { ref, onMounted, nextTick, watch } from "vue"; |
|
|
|
import footerBar from "../../components/footerBar-cn.vue"; |
|
|
|
import marked from "marked"; // 引入 marked 库 |
|
|
|
import marked from "marked"; // 引入 marked 库 |
|
|
|
// 设置 marked 选项 |
|
|
|
marked.setOptions({ |
|
|
|
renderer: new marked.Renderer(), |
|
|
|
highlight: null, // 如果需要代码高亮,可以设置适当的函数 |
|
|
|
langPrefix: 'language-', |
|
|
|
langPrefix: "language-", |
|
|
|
pedantic: false, |
|
|
|
gfm: true, |
|
|
|
breaks: false, |
|
|
|
sanitize: false, |
|
|
|
smartLists: true, |
|
|
|
smartypants: false, |
|
|
|
xhtml: false |
|
|
|
xhtml: false, |
|
|
|
}); |
|
|
|
|
|
|
|
// 创建一个用于渲染 Markdown 的函数 |
|
|
|
const renderMarkdown = (content) => { |
|
|
|
if (!content) return ''; |
|
|
|
if (!content) return ""; |
|
|
|
return marked.parse(content); |
|
|
|
}; |
|
|
|
|
|
|
|
@ -239,7 +243,7 @@ const isSending = ref(false); |
|
|
|
const uuid = ref(""); |
|
|
|
const messages = ref([]); |
|
|
|
const scrollTop = ref(0); // 用于控制scroll-view的滚动位置 |
|
|
|
const dataInfo = ref("") |
|
|
|
// const dataInfo = ref(""); |
|
|
|
|
|
|
|
const hotTopics = ref([ |
|
|
|
{ |
|
|
|
@ -321,11 +325,9 @@ const goBlank = () => { |
|
|
|
}; |
|
|
|
|
|
|
|
// 发送消息 |
|
|
|
const sendMessage = () => { |
|
|
|
const sendMessage = () => { |
|
|
|
if (inputMessage.value.trim() === "" || isSending.value) return; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const userMessage = { |
|
|
|
content: inputMessage.value, |
|
|
|
isUser: true, |
|
|
|
@ -369,7 +371,7 @@ const sendMessageList = (listMessage) => { |
|
|
|
}; |
|
|
|
|
|
|
|
// 模拟机器人回复 |
|
|
|
const simulateBotResponse = (userMessage) => { |
|
|
|
const simulateBotResponse = async (userMessage) => { |
|
|
|
isSending.value = true; |
|
|
|
|
|
|
|
// 添加机器人加载消息 |
|
|
|
@ -382,49 +384,61 @@ const simulateBotResponse = (userMessage) => { |
|
|
|
|
|
|
|
messages.value.push(botMsg); |
|
|
|
|
|
|
|
const toDataInfo = await getDataInfo(); |
|
|
|
console.log(toDataInfo); |
|
|
|
// dataInfo.value = toDataInfo.data; |
|
|
|
// console.log(dataInfo.value); |
|
|
|
|
|
|
|
setTimeout(() => { |
|
|
|
|
|
|
|
}, 10000); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 滚动到底部 |
|
|
|
setTimeout(() => { |
|
|
|
scrollToBottom(); |
|
|
|
}, 100); |
|
|
|
|
|
|
|
// 模拟流式响应 |
|
|
|
let responseText = `我已经收到您的消息: "${userMessage}"。 |
|
|
|
## 股票分析报告 |
|
|
|
|
|
|
|
### 股票名称: Tesla Inc. (TSLA) |
|
|
|
|
|
|
|
- **当前价格**: 448.980 |
|
|
|
- **更新时间**: 23/10/2025 |
|
|
|
- **今日无变盘点** |
|
|
|
|
|
|
|
### 技术分析 |
|
|
|
- **CFTL**: 当前牵牛绳为红色,处于龙线区域,最近出现“牛刀小试”,度牛线目前处于青绿色区域。 |
|
|
|
- **空间预测**: |
|
|
|
- 预测低一值: 413.364 |
|
|
|
- 预测高一值: 426.636 |
|
|
|
- 预测低二值: 421.670 |
|
|
|
- 预测高二值: 448.314 |
|
|
|
- **能量分析**: AI智能均线多头排列,当前卖盘小于买盘 |
|
|
|
|
|
|
|
### 资金与主力 |
|
|
|
- **主力分析**: |
|
|
|
1. 该股庄家中长期筹码成本价格为 356.036,短期资金成本价格为 406.429。该股筹码分散,当日筹码成本价格为 439.322。 |
|
|
|
2. 近日没有出现主力集中吸筹。 |
|
|
|
3. 近期主力持仓比例大于散户持仓比例。当日主力持仓增加。当日散户持仓减少。 |
|
|
|
|
|
|
|
### 综合评价 |
|
|
|
- **个股走势评价**: |
|
|
|
- 该股整体趋势向好,出现暴涨的可能性较大,当前如果已经持有该股票,可以继续持股观察,如果尚未持有该股票,可持续进行观察,目前处于机会的初期,处于反弹阶段,可以分步建仓! |
|
|
|
|
|
|
|
- **核心证据链**: |
|
|
|
- 资金共识:当日多方资金流入。 |
|
|
|
- 趋势动能:该股中长期处于上升趋势,短期处于弱势状态。 |
|
|
|
|
|
|
|
- **牛股评级**: ★★★☆☆ |
|
|
|
- **暴涨概率**: 60% |
|
|
|
- **风险评估**: 非常安全 |
|
|
|
- **安全边际**: 432.671~458.057 |
|
|
|
- **黄金价域**: 427.995~440.835`; |
|
|
|
let responseText = `我已经收到您的消息: "${userMessage}" + "${toDataInfo.data}"`; |
|
|
|
// let responseText = `我已经收到您的消息: "${userMessage}"。 |
|
|
|
// ## 股票分析报告 |
|
|
|
|
|
|
|
// ### 股票名称: Tesla Inc. (TSLA) |
|
|
|
|
|
|
|
// - **当前价格**: 448.980 |
|
|
|
// - **更新时间**: 23/10/2025 |
|
|
|
// - **今日无变盘点** |
|
|
|
|
|
|
|
// ### 技术分析 |
|
|
|
// - **CFTL**: 当前牵牛绳为红色,处于龙线区域,最近出现“牛刀小试”,度牛线目前处于青绿色区域。 |
|
|
|
// - **空间预测**: |
|
|
|
// - 预测低一值: 413.364 |
|
|
|
// - 预测高一值: 426.636 |
|
|
|
// - 预测低二值: 421.670 |
|
|
|
// - 预测高二值: 448.314 |
|
|
|
// - **能量分析**: AI智能均线多头排列,当前卖盘小于买盘 |
|
|
|
|
|
|
|
// ### 资金与主力 |
|
|
|
// - **主力分析**: |
|
|
|
// 1. 该股庄家中长期筹码成本价格为 356.036,短期资金成本价格为 406.429。该股筹码分散,当日筹码成本价格为 439.322。 |
|
|
|
// 2. 近日没有出现主力集中吸筹。 |
|
|
|
// 3. 近期主力持仓比例大于散户持仓比例。当日主力持仓增加。当日散户持仓减少。 |
|
|
|
|
|
|
|
// ### 综合评价 |
|
|
|
// - **个股走势评价**: |
|
|
|
// - 该股整体趋势向好,出现暴涨的可能性较大,当前如果已经持有该股票,可以继续持股观察,如果尚未持有该股票,可持续进行观察,目前处于机会的初期,处于反弹阶段,可以分步建仓! |
|
|
|
|
|
|
|
// - **核心证据链**: |
|
|
|
// - 资金共识:当日多方资金流入。 |
|
|
|
// - 趋势动能:该股中长期处于上升趋势,短期处于弱势状态。 |
|
|
|
|
|
|
|
// - **牛股评级**: ★★★☆☆ |
|
|
|
// - **暴涨概率**: 60% |
|
|
|
// - **风险评估**: 非常安全 |
|
|
|
// - **安全边际**: 432.671~458.057 |
|
|
|
// - **黄金价域**: 427.995~440.835`; |
|
|
|
let index = 0; |
|
|
|
|
|
|
|
const typeWriter = () => { |
|
|
|
@ -443,6 +457,7 @@ const simulateBotResponse = (userMessage) => { |
|
|
|
} else { |
|
|
|
messages.value[messages.value.length - 1].isTyping = false; |
|
|
|
isSending.value = false; |
|
|
|
dataInfo.value = ''; |
|
|
|
// 最后确保滚动到底部 |
|
|
|
setTimeout(() => { |
|
|
|
scrollToBottom(); |
|
|
|
@ -476,30 +491,27 @@ const toggleThinking = () => { |
|
|
|
showThinking.value = !showThinking.value; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// function getDataInfo() { |
|
|
|
// return uni.request({ |
|
|
|
// url: 'http://localhost:8888/ka', |
|
|
|
// data: {}, |
|
|
|
// header: { |
|
|
|
// Accept: 'application/json', |
|
|
|
// 'Content-Type': 'application/json', |
|
|
|
// 'X-Requested-With': 'XMLHttpRequest' |
|
|
|
// }, |
|
|
|
// method: 'GET', |
|
|
|
// sslVerify: true, |
|
|
|
// success: (res) => { |
|
|
|
// console.log(res.data); |
|
|
|
// res.data.forEach(item => { |
|
|
|
// console.log("item是"+item); |
|
|
|
// dataInfo.value = item.name; |
|
|
|
// }); |
|
|
|
|
|
|
|
// }, |
|
|
|
// fail: (error) => {} |
|
|
|
// }) |
|
|
|
// } |
|
|
|
function getDataInfo() { |
|
|
|
return new Promise((resolve, reject) => { |
|
|
|
uni.request({ |
|
|
|
url: "http://localhost:8888/ka", |
|
|
|
data: {}, |
|
|
|
header: { |
|
|
|
Accept: "application/json", |
|
|
|
"Content-Type": "application/json", |
|
|
|
"X-Requested-With": "XMLHttpRequest", |
|
|
|
}, |
|
|
|
method: "GET", |
|
|
|
sslVerify: true, |
|
|
|
success: (res) => { |
|
|
|
resolve(res.data); |
|
|
|
}, |
|
|
|
fail: (error) => { |
|
|
|
reject(error); |
|
|
|
}, |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
</script> |
|
|
|
|
|
|
|
<style scoped> |
|
|
|
|