Browse Source

对接意图识别接口

lihuilin/feature-20251024095243-我的
wangyetao 4 weeks ago
parent
commit
f74e07e23f
  1. 48
      api/deepMate/deepMate.js
  2. 5
      package.json
  3. 182
      pages/deepMate/deepMate.vue
  4. 23
      server/deepchart.json
  5. 35
      utils/http.js

48
api/deepMate/deepMate.js

@ -13,35 +13,14 @@ export const getData = () => {
/** /**
* 意图识别 * 意图识别
{
"content":"森那美",
"language": "cn",
"marketlist": "hk,cn,usa,my,sg,vi,in,gb",
"token": "9ior41AF0xTIbIG2pRnnbZi0+fEeMx8pywnilrmTwo5Fb"qJ91WrSWOxp9MkpKiNtedtUafqvzIwpFKrwuMs"
"model":1
}
* {
"code": 200,
"message": "操作成功",
"data": {
"code": "1A0001",
"market": "cn",
"name": "上证指数",
"refuse": "",
"recordId": 15,
"parentId": 14,
"stockId": 25,
"language": "cn",
"debug_url": "https://www.coze.cn/work_flow?execute_id=7564771475955515444&space_id=7564250621483040822&workflow_id=7564368306322292788&execute_mode=2"
}
* POST /api/deepMate/dmFirst
* headers: token, content-type: application/json, contentType: application/json, version, client
* body: { content, language, marketList }
*/ */
export const postIntent = (data) => { export const postIntent = (data) => {
return http({ return http({
method: 'GET',
url: '/intent',
method: 'POST',
url: '/testApi/api/deepMate/dmFirst',
data data
}) })
} }
@ -49,22 +28,13 @@ export const postIntent = (data) => {
/** /**
* 获取股票信息 * 获取股票信息
* data{
"language": "cn",
"token": "9ior41AF0xTIbIG2pRnnbZi0+fEeMx8pywnIlrmTwo5FbqJ9lWrSWOxp9MkpKiNtedtUafqvzIwpFKrwuMs",
"recordId": 5214,
"parentId": 4887,
"stockId": 1523
}
*
{"cftl":"当前股票处于安全区,牵牛绳为红色,出现蓝色推进K线","date":"更新时间: 24/10/2025","debug_url":"https://www.coze.cn/work_flow?execute_id=7565080703726846004&space_id=7564250621483040822&workflow_id=7564596757864071195&execute_mode=2","gfzl":"该股整体趋势相对较强,个股正处于推进上涨的关键阶段。若当前持有该股票,建议继续持有,进行持续跟踪。若当前无该股票,建议持续跟踪,等待适当时机再进行介入。","hxjzpg":"(1)牛股评级:★★☆☆☆\n(2)暴涨概率:40%\n(3)风险评估:非常安全\n(4)黄金价域:258.984~266.753\n(5)核心证据链\n 资金共识:当日多方资金流入\n 趋势动能:该股中长期处于上升趋势,短期处于强势状态。","kongjian":"预测低一值255.468,预测高一值257.692,预测低二值255.156,预测高二值255.807",
"markdown":"\n# <font color=\"#1890ff\">Alphabet Inc.全景作战报告</font>\n## 📊 股票分析报告\n### 📈 股票基本信息\n- **股票名称**: <font color=\"#52c41a\">Alphabet Inc.</font>\n- **股票代码**: <font color=\"#1890ff\">GOOGL</font>\n- **当前价格**: <font color=\"#ff4d4f\">259.920</font>\n- **更新时间**: 2025年10月24日\n- **时间节点**: 今日无变盘点\n\n### 🎯 核心价值评估\n- **安全边际**: <font color=\"#13c2c2\">164.424 ~ </font>\n- **黄金价域**: <font color=\"#faad14\">258.984 ~ 266.753</font>\n- **核心证据链**:\n - 🟢 **资金共识**: 当日多方资金<font color=\"#52c41a\">流入</font>\n - 🔥 **趋势动能**: 该股中长期处于<b><font color='#FF0000'>上升趋势</font></b>,短期处于<b><font color='#FF0000'>强势状态</font></b>。\n\n### 🕵️ 主力作战分析\n- **主力行为**:\n 1. 📊 该股庄家中长期筹码成本价格为 207.497,短期资金成本价格为 239.503。该股筹码分散,当日筹码成本价格为 254.335。\n 2. 🔍 近日没有出现主力集中吸筹。\n 3. 📈 近期主力持仓比例大于散户持仓比例。 当日主力持仓增加。 当日散户持仓减少。\n\n### 📊 技术分析\n- **空间维度**:\n - 📉 预测低一值: <font color=\"#13c2c2\">255.468</font>\n - 📈 预测高一值: <font color=\"#ff4d4f\">257.692</font>\n - 📉 预测低二值: <font color=\"#13c2c2\">255.156</font>\n - 📈 预测高二值: <font color=\"#ff4d4f\">255.807</font>\n- **能量分析**: <font color=\"#722ed1\">AI智能均线多头排列,当前卖盘小于买盘</font>\n\n### ⚡ 综合作战分析\n- **触发条件**: <font color=\"#fa8c16\">当前股票处于安全区,牵牛绳为红色,出现蓝色推进K线</font>\n- **攻防指令**: <font color=\"#eb2f96\">该股整体趋势相对较强,个股正处于推进上涨的关键阶段。若当前持有该股票,建议继续持有,进行持续跟踪。若当前无该股票,建议持续跟踪,等待适当时机再进行介入。</font>\n\n---\n<font color=\"#8c8c8c\">*该内容由AI生成,仅供参考,投资有风险,请注意甄别。*</font>\n ","message":"","name":"股票名称: Alphabet Inc.(GOOGL)","nengliang":"AI智能均线多头排列,当前卖盘小于买盘","price":"当前价格: 259.920","shijian":"今日无变盘点","zhuli1":"(1)该股庄家中长期筹码成本价格为 207.497,短期资金成本价格为 239.503。该股筹码分散,当日筹码成本价格为 254.335。","zhuli2":"(2)近日没有出现主力集中吸筹。","zhuli3":"(3)近期主力持仓比例大于散户持仓比例。 当日主力持仓增加。 当日散户持仓减少。"}
}
* headers: token, content-type: application/json, contentType: application/json, version, client
* body: { language, token, recordId, parentId, stockId }
*/ */
export const postStock = (data) => { export const postStock = (data) => {
return http({ return http({
method: 'GET',
url: '/stocks',
method: 'POST',
url: '/testApi/api/coze/decodingSecond',
data data
}) })
} }

5
package.json

@ -4,9 +4,6 @@
"marked": "^2.0.1", "marked": "^2.0.1",
"pinia": "^3.0.3", "pinia": "^3.0.3",
"pinia-plugin-persistedstate": "^4.5.0" "pinia-plugin-persistedstate": "^4.5.0"
},
"scripts": {
"server-login": "json-server ./server/login.json --port 8888",
"server-deepchart": "json-server ./server/deepchart.json --port 8888"
} }
} }

182
pages/deepMate/deepMate.vue

@ -3,29 +3,18 @@
<!-- 顶部导航栏 --> <!-- 顶部导航栏 -->
<view class="header" :style="{ paddingTop: safeAreaInsets?.top + 'px' }"> <view class="header" :style="{ paddingTop: safeAreaInsets?.top + 'px' }">
<view class="header-left"> <view class="header-left">
<image
src="https://d31zlh4on95l9h.cloudfront.net/images/f91e09b5987802185e7679055dafd272.svg"
class="icon"
>
<image src="https://d31zlh4on95l9h.cloudfront.net/images/f91e09b5987802185e7679055dafd272.svg" class="icon">
</image> </image>
</view> </view>
<view class="header-center"> <view class="header-center">
<text class="title" :style="{ paddingTop: safeAreaInsets?.top + 'px' }"
>DeepMate</text
>
<text class="title" :style="{ paddingTop: safeAreaInsets?.top + 'px' }">DeepMate</text>
</view> </view>
<view class="header-right"> <view class="header-right">
<image
src="https://d31zlh4on95l9h.cloudfront.net/images/d7c4e74201213a25dd9574e908233928.svg"
class="icon"
>
<image src="https://d31zlh4on95l9h.cloudfront.net/images/d7c4e74201213a25dd9574e908233928.svg" class="icon">
</image> </image>
<image
style="margin-left: 10px"
src="https://d31zlh4on95l9h.cloudfront.net/images/099903c4aabf5713488b5cb60815e3f7.svg"
class="icon"
@click="openHistoryDrawer"
></image>
<image style="margin-left: 10px"
src="https://d31zlh4on95l9h.cloudfront.net/images/099903c4aabf5713488b5cb60815e3f7.svg" class="icon"
@click="openHistoryDrawer"></image>
<!-- 新增新会话按钮 <!-- 新增新会话按钮
<button class="new-chat-button" @click="newChat"> <button class="new-chat-button" @click="newChat">
<text class="new-chat-text">新会话</text> <text class="new-chat-text">新会话</text>
@ -36,22 +25,15 @@
<!-- 主要内容区域 --> <!-- 主要内容区域 -->
<view class="main-content"> <view class="main-content">
<view class="banner-panel" v-if="messages.length === 0"> <view class="banner-panel" v-if="messages.length === 0">
<image
src="https://d31zlh4on95l9h.cloudfront.net/images/42e18bd7fe97d4f4f37aa70439a0990b.svg"
class="pray-banner"
></image>
<image src="https://d31zlh4on95l9h.cloudfront.net/images/42e18bd7fe97d4f4f37aa70439a0990b.svg"
class="pray-banner"></image>
<view class="contain"> <view class="contain">
<!-- 机器人头像和欢迎语 --> <!-- 机器人头像和欢迎语 -->
<view class="robot-container" v-if="messages.length === 0"> <view class="robot-container" v-if="messages.length === 0">
<image
src="/static/icons/机器人.svg"
class="robot-avatar"
></image>
<image src="/static/icons/机器人.svg" class="robot-avatar"></image>
<view class="welcome-message"> <view class="welcome-message">
<text class="greeting">Hi, 我是您的股市随身顾问~</text> <text class="greeting">Hi, 我是您的股市随身顾问~</text>
<text class="description"
>个股诊断市场情绪解读都可以找我</text
>
<text class="description">个股诊断市场情绪解读都可以找我</text>
</view> </view>
</view> </view>
@ -66,19 +48,13 @@
<view class="recommend-card" v-if="messages.length === 0" @click="goBlank"> <view class="recommend-card" v-if="messages.length === 0" @click="goBlank">
<view class="arrow" v-if="messages.length === 0"></view> <view class="arrow" v-if="messages.length === 0"></view>
<view class="card-content"> <view class="card-content">
<image
src="../../static/images/tesla-logo.png"
class="logo"
></image>
<image src="../../static/images/tesla-logo.png" class="logo"></image>
<view class="card-text"> <view class="card-text">
<text class="main-question">当前特斯拉该如何布局</text> <text class="main-question">当前特斯拉该如何布局</text>
<text class="stock-code">TSLA</text> <text class="stock-code">TSLA</text>
</view> </view>
<image
src="https://d31zlh4on95l9h.cloudfront.net/images/40d94054644f6e3f1c366751f07f0010.svg"
class="arrow-icon"
@click="goBlank"
></image>
<image src="https://d31zlh4on95l9h.cloudfront.net/images/40d94054644f6e3f1c366751f07f0010.svg"
class="arrow-icon" @click="goBlank"></image>
</view> </view>
</view> </view>
@ -104,44 +80,26 @@
<!-- 顶部粘性欢迎块始终保留在聊天上方 --> <!-- 顶部粘性欢迎块始终保留在聊天上方 -->
<view class="chat-header" v-if="messages.length > 0"> <view class="chat-header" v-if="messages.length > 0">
<view class="robot-container"> <view class="robot-container">
<image src="/static/icons/机器人.svg"
class="robot-avatar"></image>
<image src="/static/icons/机器人.svg" class="robot-avatar"></image>
<view class="welcome-message"> <text class="greeting">Hi, 我是您的股市随身顾问~</text> <view class="welcome-message"> <text class="greeting">Hi, 我是您的股市随身顾问~</text>
</view> </view>
</view> </view>
</view> </view>
<scroll-view
class="chat-container"
scroll-y="true"
:scroll-top="chatScrollTop"
:scroll-with-animation="!isSending"
@scroll="onChatScroll"
v-if="messages.length > 0"
>
<scroll-view class="chat-container" scroll-y="true" :scroll-top="chatScrollTop"
:scroll-with-animation="!isSending" @scroll="onChatScroll" v-if="messages.length > 0">
<view class="message-list" id="messageList"> <view class="message-list" id="messageList">
<view
v-for="(message, index) in messages"
:key="index"
:class="
message.isUser ? 'message user-message' : 'message bot-message'
"
>
<view v-for="(message, index) in messages" :key="index" :class="message.isUser ? 'message user-message' : 'message bot-message'
">
<!-- 会话图标 --> <!-- 会话图标 -->
<text
:class="
message.isUser
<text :class="message.isUser
? 'fa-solid fa-user message-icon' ? 'fa-solid fa-user message-icon'
: 'fa-solid fa-robot message-icon' : 'fa-solid fa-robot message-icon'
"
></text>
"></text>
<!-- 会话内容 --> <!-- 会话内容 -->
<view class="message-content"> <view class="message-content">
<!-- <text class="message-text">{{ message.content }}</text> --> <!-- <text class="message-text">{{ message.content }}</text> -->
<!-- loading --> <!-- loading -->
<view
class="loading-dots"
v-if="message.isThinking || !message.isUser"
>
<view class="loading-dots" v-if="message.isThinking || !message.isUser">
<view class="thinking-process"> <view class="thinking-process">
<view class="thinking-header"> <view class="thinking-header">
<view class="thinking-icon"></view> <view class="thinking-icon"></view>
@ -149,10 +107,7 @@
message.isTyping ? "正在思考" : "思考完成" message.isTyping ? "正在思考" : "思考完成"
}}</view> }}</view>
<view class="thinking-count"> </view> <view class="thinking-count"> </view>
<view
class="thinking-toggle"
@click="message.isThinking = !message.isThinking"
>
<view class="thinking-toggle" @click="message.isThinking = !message.isThinking">
<span v-if="message.isThinking"></span> <span v-if="message.isThinking"></span>
<span v-else></span> <span v-else></span>
</view> </view>
@ -174,11 +129,8 @@
</view> </view>
</view> </view>
<!-- 使用 rich-text 渲染 Markdown 内容 --> <!-- 使用 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> <text v-else class="message-text">{{ message.content }}</text>
</view> </view>
</view> </view>
@ -189,14 +141,8 @@
<!-- 输入框区域 --> <!-- 输入框区域 -->
<view class="input-area"> <view class="input-area">
<view class="input-wrapper"> <view class="input-wrapper">
<input
type="text"
placeholder="请输入股票代码/名称,获取AI洞察"
placeholder-style="color:#fff;opacity:1"
class="input-field"
v-model="inputMessage"
@confirm="sendMessage"
/>
<input type="text" placeholder="请输入股票代码/名称,获取AI洞察" placeholder-style="color:#fff;opacity:1" class="input-field"
v-model="inputMessage" @confirm="sendMessage" />
<image class="send-button" @click="sendMessage" :disabled="isSending"> <image class="send-button" @click="sendMessage" :disabled="isSending">
<!-- <image <!-- <image
src="https://d31zlh4on95l9h.cloudfront.net/images/95f1ea2262e9157db13c93c0dc1c5d96.svg" src="https://d31zlh4on95l9h.cloudfront.net/images/95f1ea2262e9157db13c93c0dc1c5d96.svg"
@ -204,26 +150,19 @@
></image> --> ></image> -->
</image> </image>
</view> </view>
<text class="disclaimer"
>以上数据由AI生成不作为最终投资建议决策需独立</text
>
<text class="disclaimer">以上数据由AI生成不作为最终投资建议决策需独立</text>
</view> </view>
<image
class="back-to-top"
src="https://d31zlh4on95l9h.cloudfront.net/images/ba357635d2bb480241952bb1cabacd73.svg"
<image class="back-to-top" src="https://d31zlh4on95l9h.cloudfront.net/images/ba357635d2bb480241952bb1cabacd73.svg"
:style="{ :style="{
transform: 'translate3d(' + backTopX + 'px,' + backTopY + 'px,0)', transform: 'translate3d(' + backTopX + 'px,' + backTopY + 'px,0)',
}"
@touchstart="onBackTopTouchStart"
@touchmove="onBackTopTouchMove"
@touchend="onBackTopTouchEnd"
@click="onBackTopClick"
></image>
}" @touchstart="onBackTopTouchStart" @touchmove="onBackTopTouchMove" @touchend="onBackTopTouchEnd"
@click="onBackTopClick"></image>
<!-- 搜索历史侧拉框 --> <!-- 搜索历史侧拉框 -->
<view class="drawer-overlay" v-show="showHistoryDrawer"></view> <view class="drawer-overlay" v-show="showHistoryDrawer"></view>
<view class="drawer-panel" v-show="showHistoryDrawer" @click.stop @touchmove.stop.prevent :style="{ transform: 'translateY(' + drawerOffsetY + 'px)' }">
<view class="drawer-panel" v-show="showHistoryDrawer" @click.stop @touchmove.stop.prevent
:style="{ transform: 'translateY(' + drawerOffsetY + 'px)' }">
<view class="drawer-header"> <view class="drawer-header">
<text class="drawer-title">历史对话</text> <text class="drawer-title">历史对话</text>
@ -531,12 +470,10 @@ const simulateBotResponse = async (userMessage) => {
// //
const res = await postIntent({ const res = await postIntent({
content: "森那美",
language: "cn",
marketlist: "hk,cn,usa,my,sg,vi,in,gb",
token:
"9ior41AF0xTIbIG2pRnnbZi0+fEeMx8pywnilrmTwo5FbqJ91WrSWOxp9MkpKiNtedtUafqvzIwpFKrwuMs",
model: "1",
content: userMessage,
language: 'cn',
marketList: 'hk,cn,usa,my,sg,vi,in,gb',
token: "pCtw6AYK0EHAaIexoFHsbZjtsfEAIhcmwkCFm6uKko8VPfMvyDiODL9v9c0veic9fIpQbvT8zN4sH/Si6Q"
}); });
console.log("res" + res); console.log("res" + res);
@ -557,8 +494,7 @@ const simulateBotResponse = async (userMessage) => {
recordId, recordId,
parentId, parentId,
stockId, stockId,
token:
"9ior41AF0xTIbIG2pRnnbZi0+fEeMx8pywnilrmTwo5FbqJ91WrSWOxp9MkpKiNtedtUafqvzIwpFKrwuMs",
token: memberStore.userInfo?.token || '',
language: "cn", language: "cn",
}); });
console.log("StockInfo", StockInfo); console.log("StockInfo", StockInfo);
@ -917,7 +853,7 @@ const onBackTopClick = () => {
/* box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05); */ /* box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05); */
} }
.welcome-section{
.welcome-section {
/* 灰色卡片(recommend-card)之后展示背景图 */ /* 灰色卡片(recommend-card)之后展示背景图 */
margin-top: 10rpx; margin-top: 10rpx;
display: flex; display: flex;
@ -925,9 +861,12 @@ const onBackTopClick = () => {
justify-content: center; justify-content: center;
background: url('https://d31zlh4on95l9h.cloudfront.net/images/eca84d9fb54712cb3bc6c6174773b83b.svg'); background: url('https://d31zlh4on95l9h.cloudfront.net/images/eca84d9fb54712cb3bc6c6174773b83b.svg');
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center top; /* 放在容器顶部,正好在灰色卡片下方 */
background-size: 80% auto; /* 缩放以适配宽度 */
height: 460rpx; /* 提供可视高度,让背景图可见 */
background-position: center top;
/* 放在容器顶部,正好在灰色卡片下方 */
background-size: 80% auto;
/* 缩放以适配宽度 */
height: 460rpx;
/* 提供可视高度,让背景图可见 */
} }
.card-content { .card-content {
@ -1097,7 +1036,7 @@ const onBackTopClick = () => {
} }
.user-message .message-text { .user-message .message-text {
color:black;
color: black;
} }
.bot-message .message-text { .bot-message .message-text {
@ -1132,6 +1071,7 @@ const onBackTopClick = () => {
} }
@keyframes loading { @keyframes loading {
0%, 0%,
80%, 80%,
100% { 100% {
@ -1312,11 +1252,12 @@ const onBackTopClick = () => {
height: 48px; height: 48px;
border-radius: 12px; border-radius: 12px;
background: #fff; background: #fff;
box-shadow: 0 2px 10px rgba(0,0,0,0.08);
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.08);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.drawer-back-icon { .drawer-back-icon {
font-size: 16px; font-size: 16px;
color: #8a8a8a; color: #8a8a8a;
@ -1383,11 +1324,15 @@ const onBackTopClick = () => {
.drawer-content { .drawer-content {
flex: 1; flex: 1;
min-height: 0; /* 让 flex 子元素可在容器内收缩以启用滚动 */
min-height: 0;
/* 让 flex 子元素可在容器内收缩以启用滚动 */
height: 100%; height: 100%;
overscroll-behavior-y: contain; /* 防止滚动串联到页面 */
-webkit-overflow-scrolling: touch; /* iOS 惯性滚动 */
touch-action: pan-y; /* 优化触控滚动,仅垂直 */
overscroll-behavior-y: contain;
/* 防止滚动串联到页面 */
-webkit-overflow-scrolling: touch;
/* iOS 惯性滚动 */
touch-action: pan-y;
/* 优化触控滚动,仅垂直 */
} }
.drawer-inner { .drawer-inner {
@ -1414,7 +1359,9 @@ const onBackTopClick = () => {
margin-bottom: 12rpx; margin-bottom: 12rpx;
} }
.history-left { margin-right: 12rpx; }
.history-left {
margin-right: 12rpx;
}
.flag-circle { .flag-circle {
width: 36rpx; width: 36rpx;
@ -1427,9 +1374,13 @@ const onBackTopClick = () => {
justify-content: center; justify-content: center;
} }
.flag-emoji { font-size: 24rpx; }
.flag-emoji {
font-size: 24rpx;
}
.history-main { flex: 1; }
.history-main {
flex: 1;
}
.history-query { .history-query {
font-size: 28rpx; font-size: 28rpx;
@ -1456,16 +1407,19 @@ const onBackTopClick = () => {
color: #333333; color: #333333;
font-weight: 500; font-weight: 500;
} }
.history-time { .history-time {
margin-top: 8rpx; margin-top: 8rpx;
font-size: 22rpx; font-size: 22rpx;
color: #888888; color: #888888;
} }
.empty-history { .empty-history {
padding: 40rpx; padding: 40rpx;
color: #999999; color: #999999;
text-align: center; text-align: center;
} }
.thinking-process { .thinking-process {
margin: 10rpx 0; margin: 10rpx 0;
border: 2rpx solid #e5e5e5; border: 2rpx solid #e5e5e5;

23
server/deepchart.json

@ -1,23 +0,0 @@
{
"intent":{
"code": 200,
"message": "操作成功",
"data": {
"code": "1A0001",
"market": "cn",
"name": "上证指数",
"refuse": "",
"recordId": 15,
"parentId": 14,
"stockId": 25,
"language": "cn",
"debug_url": "https://www.coze.cn/work_flow?execute_id=7564771475955515444&space_id=7564250621483040822&workflow_id=7564368306322292788&execute_mode=2"
}
},
"stocks":{"code":"200","cftl":"当前股票处于安全区,牵牛绳为红色,出现蓝色推进K线","date":"更新时间: 24/10/2025","debug_url":"https://www.coze.cn/work_flow?execute_id=7565080703726846004&space_id=7564250621483040822&workflow_id=7564596757864071195&execute_mode=2","gfzl":"该股整体趋势相对较强,个股正处于推进上涨的关键阶段。若当前持有该股票,建议继续持有,进行持续跟踪。若当前无该股票,建议持续跟踪,等待适当时机再进行介入。","hxjzpg":"(1)牛股评级:★★☆☆☆\n(2)暴涨概率:40%\n(3)风险评估:非常安全\n(4)黄金价域:258.984~266.753\n(5)核心证据链\n 资金共识:当日多方资金流入\n 趋势动能:该股中长期处于上升趋势,短期处于强势状态。","kongjian":"预测低一值255.468,预测高一值257.692,预测低二值255.156,预测高二值255.807",
"markdown":" \n# <font style=\" line-height: 1.5 \" color=\"#1890ff\">Alphabet Inc.全景作战报告</font>\n## 📊 股票分析报告\n### 📈 股票基本信息\n- **股票名称**: <font color=\"#52c41a\">Alphabet Inc.</font>\n- **股票代码**: <font color=\"#1890ff\">GOOGL</font>\n- **当前价格**: <font color=\"#ff4d4f\">259.920</font>\n- **更新时间**: 2025年10月24日\n- **时间节点**: 今日无变盘点\n\n### 🎯 核心价值评估\n- **安全边际**: <font color=\"#13c2c2\">164.424 ~ </font>\n- **黄金价域**: <font color=\"#faad14\">258.984 ~ 266.753</font>\n- **核心证据链**:\n - 🟢 **资金共识**: 当日多方资金<font color=\"#52c41a\">流入</font>\n - 🔥 **趋势动能**: 该股中长期处于<b><font color='#FF0000'>上升趋势</font></b>,短期处于<b><font color='#FF0000'>强势状态</font></b>。\n\n### 🕵️ 主力作战分析\n- **主力行为**:\n 1. 📊 该股庄家中长期筹码成本价格为 207.497,短期资金成本价格为 239.503。该股筹码分散,当日筹码成本价格为 254.335。\n 2. 🔍 近日没有出现主力集中吸筹。\n 3. 📈 近期主力持仓比例大于散户持仓比例。 当日主力持仓增加。 当日散户持仓减少。\n\n### 📊 技术分析\n- **空间维度**:\n - 📉 预测低一值: <font color=\"#13c2c2\">255.468</font>\n - 📈 预测高一值: <font color=\"#ff4d4f\">257.692</font>\n - 📉 预测低二值: <font color=\"#13c2c2\">255.156</font>\n - 📈 预测高二值: <font color=\"#ff4d4f\">255.807</font>\n- **能量分析**: <font color=\"#722ed1\">AI智能均线多头排列,当前卖盘小于买盘</font>\n\n### ⚡ 综合作战分析\n- **触发条件**: <font color=\"#fa8c16\">当前股票处于安全区,牵牛绳为红色,出现蓝色推进K线</font>\n- **攻防指令**: <font color=\"#eb2f96\">该股整体趋势相对较强,个股正处于推进上涨的关键阶段。若当前持有该股票,建议继续持有,进行持续跟踪。若当前无该股票,建议持续跟踪,等待适当时机再进行介入。</font>\n\n---\n<font color=\"#8c8c8c\">*该内容由AI生成,仅供参考,投资有风险,请注意甄别。*</font>\n ","message":"","name":"股票名称: Alphabet Inc.(GOOGL)","nengliang":"AI智能均线多头排列,当前卖盘小于买盘","price":"当前价格: 259.920","shijian":"今日无变盘点","zhuli1":"(1)该股庄家中长期筹码成本价格为 207.497,短期资金成本价格为 239.503。该股筹码分散,当日筹码成本价格为 254.335。","zhuli2":"(2)近日没有出现主力集中吸筹。","zhuli3":"(3)近期主力持仓比例大于散户持仓比例。 当日主力持仓增加。 当日散户持仓减少。"}
}

35
utils/http.js

@ -1,27 +1,48 @@
import { useUserStore } from "../stores/modules/userInfo";
import { useUserStore } from "../stores/modules/userInfo/"
const baseURL = "http://localhost:8888"
// 移除本地 mock 前缀,默认不拼接任何 baseURL。
// 如需指定真实后端,请将此值改为对应域名,例如:
const baseURL = "https://hwjb.homilychart.com"
const httpInterceptor = { const httpInterceptor = {
// 拦截前触发 // 拦截前触发
invoke(options) { invoke(options) {
// 1.非http
if (!options.url.startsWith('http')) {
options.url = baseURL + options.url
// 打印当前 baseURL 便于定位来源
console.log('HTTP(baseURL)=', baseURL)
// 若出现旧代码将 url 设为 http://localhost:8888,强制改为真实域名
if (options.url.startsWith('http://localhost:8888')) {
options.url = baseURL.replace(/\/$/, '') + options.url.replace('http://localhost:8888', '')
} else if (options.url.startsWith('https://localhost:8888')) {
options.url = baseURL.replace(/\/$/, '') + options.url.replace('https://localhost:8888', '')
} }
// 仅当明确配置了 baseURL 时才拼接前缀(去掉 baseURL 尾部的斜杠,避免双斜杠)
if (baseURL && !options.url.startsWith('http')) {
options.url = baseURL.replace(/\/$/, '') + options.url
}
// 打印最终请求地址
console.log('HTTP(finalUrl)=', options.url)
// 2.请求超时,默认60s // 2.请求超时,默认60s
options.timeout = 60000 options.timeout = 60000
console.log(options) console.log(options)
//3 添加小程序端请求头 //3 添加小程序端请求头
const sys = uni.getSystemInfoSync();
// 为对齐后端文档示例,client 固定为 ios(如需按平台设置再改回)
const client = 'ios';
options.header = { options.header = {
...options.header, ...options.header,
'source-client': 'miniapp'
'source-client': 'miniapp',
// 标准头与文档头同时设置,确保兼容
'content-type': 'application/json',
'version': '1',
'client': client
} }
//4 添加token //4 添加token
const memberStore = useUserStore() const memberStore = useUserStore()
const token = memberStore.userInfo?.token
// const token = memberStore.userInfo?.token
const token = '6d818cda701590750245ce69393f2c32'
if (token) { if (token) {
// 根据接口文档,token应该作为独立的header字段
options.header.Authorization = { options.header.Authorization = {
'token': token 'token': token
} }

Loading…
Cancel
Save