|
|
|
@ -81,6 +81,7 @@ |
|
|
|
getModel3Second, |
|
|
|
getModel4First, |
|
|
|
getModel4Second, |
|
|
|
getModeldefault |
|
|
|
} from '/api/deepExploration/deepExploration.js' |
|
|
|
import marked from 'marked'; // 引入 marked 库 |
|
|
|
import hljs from 'highlight.js'; |
|
|
|
@ -162,60 +163,72 @@ |
|
|
|
const htmlContent = ref(''); |
|
|
|
const markdownContent = ref(''); |
|
|
|
|
|
|
|
|
|
|
|
const renderer = new marked.Renderer(); |
|
|
|
renderer.heading = function(text, level) { |
|
|
|
return `<p>${text}</p>`; |
|
|
|
}; |
|
|
|
// 初始化 marked 配置(支持代码高亮) |
|
|
|
marked.setOptions({ |
|
|
|
highlight: (code, lang) => { |
|
|
|
if (lang && hljs.getLanguage(lang)) { |
|
|
|
return hljs.highlight(code, { language: lang }).value; |
|
|
|
} |
|
|
|
return hljs.highlightAuto(code).value; |
|
|
|
}, |
|
|
|
breaks: true, |
|
|
|
gfm: true, |
|
|
|
sanitize: true, // 过滤掉 Markdown 中的 inline style(可能导致横向溢出) |
|
|
|
sanitizer: (html) => { |
|
|
|
// 移除所有 style 属性,避免后端返回的 Markdown 带强制横向样式 |
|
|
|
return html.replace(/style="[^"]*"/g, ''); |
|
|
|
} |
|
|
|
}); |
|
|
|
marked.setOptions({ |
|
|
|
renderer: new marked.Renderer(), |
|
|
|
highlight: null, // 如果需要代码高亮,可以设置适当的函数 |
|
|
|
langPrefix: "language-", |
|
|
|
pedantic: false, |
|
|
|
gfm: true, |
|
|
|
breaks: false, |
|
|
|
sanitize: false, |
|
|
|
smartLists: true, |
|
|
|
smartypants: false, |
|
|
|
xhtml: false, |
|
|
|
}); |
|
|
|
|
|
|
|
//点击主力追踪 |
|
|
|
const handleTrack = async () => { |
|
|
|
try { |
|
|
|
markdownContent.value = '\n## 📊 主力解码分析:\n### 序列密码\n\tL2情绪解码。当前股票序列密码为53、0、17、158,市场情绪未出现确定性转折。\n\n### 股票温度\n\tL1情绪监控。当前股票温度为51,处于温热区,情绪积极向上,资金稳步进场。趋势健康,量价配合良好。此时应积极跟随趋势,顺势而为。\n\n### 市场温度\n\t当前市场温度为61,处于温热区,指数温和上行,技术面呈多头排列,资金有序进场,赚钱效应扩散。需警惕市场风险,以规避“甜蜜陷阱”。\n ' |
|
|
|
markdownContent.value = '\n## 📊 主力追踪分析:\n\n### 🕵️ 主力行为\n\t1. 📊 该股庄家中长期筹码成本价格为 360.249,短期资金成本价格为 412.577。该股筹码分散,当日筹码成本价格为 444.330。\n\t2. 🔍 近日没有出现主力集中吸筹。\n\t3. 📈 近期主力持仓比例大于散户持仓比例。 当日主力持仓增加。 当日散户持仓减少。\n\n### 📊 空间维度:\n\t- 📉 预测低一值: <font color=\"#13c2c2\">443.092</font> \n - 📈 预测高一值: <font color=\"#ff4d4f\">466.458</font>\n\t- 📉 预测低二值: <font color=\"#13c2c2\">447.354</font>\n\t- 📈 预测高二值: <font color=\"#ff4d4f\">462.514</font>\n\t<font color=\"#722ed1\">AI智能均线空头排列,当前卖盘小于买盘</font>\n\n### 综合作战\n\t\t\t<font color=\"#fa8c16\">当前股票处于安全区,牵牛绳为红色,出现蓝色推进K线。</font>\n\t\t\t<font color=\"#eb2f96\">该股整体趋势相对较强,个股正处于推进上涨的关键阶段。若当前持有该股票,建议继续持有,进行持续跟踪。若当前无该股票,建议持续跟踪,等待适当时机再进行介入。</font>\n\n---\n<font color=\"#8c8c8c\">*该内容由AI生成,仅供参考,投资有风险,请注意甄别。*</font>\n ' |
|
|
|
htmlContent.value = marked.parse(markdownContent.value); |
|
|
|
loading.value = true; |
|
|
|
// const result = await getModel1First({ |
|
|
|
// content: searchName.value, |
|
|
|
// language: "cn", |
|
|
|
// marketList: "hk,cn,usa,my,sg,vi,in,gb", |
|
|
|
// model: 1 |
|
|
|
// }) |
|
|
|
// console.log('result', result); |
|
|
|
// if (result.code == 200) { |
|
|
|
// stockCode.value = result.data.code |
|
|
|
// stockName.value = result.data.name |
|
|
|
// recordId.value = result.data.recordId |
|
|
|
// parentId.value = result.data.parentId |
|
|
|
// stockId.value = result.data.stockId |
|
|
|
// language.value = result.data.language |
|
|
|
// const res = await getModel1Second({ |
|
|
|
// language: language.value, |
|
|
|
// recordId: recordId.value, |
|
|
|
// parentId: parentId.value, |
|
|
|
// stockId: stockId.value, |
|
|
|
// token: 'pCtw6AYK0EHAaIexoFHsbZjtsfEAIhcmwkCFm6uKko8VPfMvyDiODL9v9c0veic9fIpQbvT8zN4sH/Si6Q' |
|
|
|
// }) |
|
|
|
// if (res.code == 200) { |
|
|
|
// markdownContent.value = res.data.markdown |
|
|
|
// htmlContent.value = marked.parse(markdownContent.value); |
|
|
|
// } |
|
|
|
// console.log('res', res); |
|
|
|
// } |
|
|
|
loading.value = true; |
|
|
|
// if(searchName.value){ |
|
|
|
|
|
|
|
// } |
|
|
|
// const result = await getModel1First({ |
|
|
|
// content: searchName.value, |
|
|
|
// language: "cn", |
|
|
|
// marketList: "hk,cn,usa,my,sg,vi,in,gb", |
|
|
|
// model: 1 |
|
|
|
// }) |
|
|
|
// console.log('result', result); |
|
|
|
// if (result.code == 200) { |
|
|
|
// stockCode.value = result.data.code |
|
|
|
// stockName.value = result.data.name |
|
|
|
// recordId.value = result.data.recordId |
|
|
|
// parentId.value = result.data.parentId |
|
|
|
// stockId.value = result.data.stockId |
|
|
|
// language.value = result.data.language |
|
|
|
// }else{ |
|
|
|
// return |
|
|
|
// } |
|
|
|
|
|
|
|
|
|
|
|
// const res = await getModel1Second({ |
|
|
|
// language: language.value, |
|
|
|
// recordId: recordId.value, |
|
|
|
// parentId: parentId.value, |
|
|
|
// stockId: stockId.value, |
|
|
|
// token: 'pCtw6AYK0EHAaIexoFHsbZjtsfEAIhcmwkCFm6uKko8VPfMvyDiODL9v9c0veic9fIpQbvT8zN4sH/Si6Q' |
|
|
|
// }) |
|
|
|
// if (res.code == 200) { |
|
|
|
// const rawMarkdown = res.data.markdown; |
|
|
|
// const adaptedMarkdown = rawMarkdown.replace(/^### /gm, ''); // 全局替换行首的### |
|
|
|
// markdownContent.value = adaptedMarkdown; |
|
|
|
// // markdownContent.value = res.data.markdown |
|
|
|
// htmlContent.value = marked.parse(markdownContent.value); |
|
|
|
// } |
|
|
|
// console.log('res', res); |
|
|
|
|
|
|
|
} catch { |
|
|
|
error.value = e.message || '加载失败,请重试'; |
|
|
|
}finally{ |
|
|
|
} finally { |
|
|
|
loading.value = false; |
|
|
|
} |
|
|
|
} |
|
|
|
@ -234,7 +247,9 @@ |
|
|
|
const handleCapitalFlow = () => { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
const handleDefault = async()=>{ |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// 1. K线图配置 |
|
|
|
const opts = ref({ |
|
|
|
@ -625,7 +640,7 @@ |
|
|
|
width: 100%; |
|
|
|
min-height: 100vh; |
|
|
|
background-color: #fff; |
|
|
|
padding-bottom: 120rpx; |
|
|
|
padding-bottom: 120rpx; |
|
|
|
|
|
|
|
.search { |
|
|
|
position: relative; |
|
|
|
@ -824,47 +839,49 @@ |
|
|
|
min-height: 200rpx; |
|
|
|
padding: 20rpx 30rpx; |
|
|
|
margin-bottom: 100rpx; |
|
|
|
|
|
|
|
::v-deep * { |
|
|
|
box-sizing: border-box; |
|
|
|
width: 100% !important; // 强制所有解析后的标签占满容器宽度 |
|
|
|
white-space: normal !important; // 取消强制不换行 |
|
|
|
word-wrap: break-word !important; // 长词/长数字自动换行 |
|
|
|
} |
|
|
|
|
|
|
|
// 标题样式(确保换行) |
|
|
|
::v-deep h2 { |
|
|
|
font-size: 32rpx; |
|
|
|
color: #333; |
|
|
|
margin: 25rpx 0 15rpx; |
|
|
|
line-height: 1.5; |
|
|
|
} |
|
|
|
|
|
|
|
// 段落样式(核心换行控制) |
|
|
|
::v-deep p { |
|
|
|
font-size: 26rpx; |
|
|
|
color: #666; |
|
|
|
margin: 15rpx 0; |
|
|
|
line-height: 1.8; // 增加行高,提升可读性 |
|
|
|
text-align: justify; // 两端对齐,避免单侧参差不齐 |
|
|
|
} |
|
|
|
|
|
|
|
// 列表样式(纵向排列) |
|
|
|
::v-deep ul, ::v-deep ol { |
|
|
|
margin: 15rpx 0 15rpx 30rpx; |
|
|
|
} |
|
|
|
|
|
|
|
::v-deep li { |
|
|
|
margin: 10rpx 0; |
|
|
|
line-height: 1.6; |
|
|
|
} |
|
|
|
|
|
|
|
// 加载状态样式 |
|
|
|
.loading { |
|
|
|
text-align: center; |
|
|
|
padding: 50rpx 0; |
|
|
|
color: #666; |
|
|
|
font-size: 26rpx; |
|
|
|
} |
|
|
|
box-sizing: border-box; |
|
|
|
width: 100% !important; // 强制所有解析后的标签占满容器宽度 |
|
|
|
white-space: normal !important; // 取消强制不换行 |
|
|
|
word-wrap: break-word !important; // 长词/长数字自动换行 |
|
|
|
} |
|
|
|
|
|
|
|
// 标题样式(确保换行) |
|
|
|
::v-deep h2 { |
|
|
|
font-size: 32rpx; |
|
|
|
color: #333; |
|
|
|
margin: 25rpx 0 15rpx; |
|
|
|
line-height: 1.5; |
|
|
|
} |
|
|
|
|
|
|
|
// 段落样式(核心换行控制) |
|
|
|
::v-deep p { |
|
|
|
font-size: 26rpx; |
|
|
|
color: #666; |
|
|
|
margin: 15rpx 0; |
|
|
|
line-height: 1.8; // 增加行高,提升可读性 |
|
|
|
text-align: justify; // 两端对齐,避免单侧参差不齐 |
|
|
|
} |
|
|
|
|
|
|
|
// 列表样式(纵向排列) |
|
|
|
::v-deep ul, |
|
|
|
::v-deep ol { |
|
|
|
margin: 15rpx 0 15rpx 30rpx; |
|
|
|
} |
|
|
|
|
|
|
|
::v-deep li { |
|
|
|
margin: 10rpx 0; |
|
|
|
line-height: 1.6; |
|
|
|
} |
|
|
|
|
|
|
|
// 加载状态样式 |
|
|
|
.loading { |
|
|
|
text-align: center; |
|
|
|
padding: 50rpx 0; |
|
|
|
color: #666; |
|
|
|
font-size: 26rpx; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|