You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1148 lines
27 KiB
1148 lines
27 KiB
<template>
|
|
<div class="ai-emotion-container" ref="userInputDisplayRef">
|
|
<!-- 金轮 -->
|
|
<div class="golden-wheel">
|
|
<img src="@/assets/img/AiEmotion/金轮.png" class="golden-wheel-img" alt="金轮图标"
|
|
:class="{ 'rotating-image': isRotating }" />
|
|
</div>
|
|
<!-- 消息显示区域 -->
|
|
<div class="user-input-display">
|
|
<div v-for="(message, index) in messages" :key="index" class="message-container">
|
|
<!-- 用户输入内容 -->
|
|
<div v-if="message.sender === 'user'" class="message-bubble user-message">
|
|
{{ message.text }}
|
|
</div>
|
|
<!-- AI返回结果 -->
|
|
<div v-if="message.sender === 'ai'" class="message-bubble ai-message">
|
|
{{ message.text }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 股票标签页 -->
|
|
<StockTabs />
|
|
|
|
<!-- 渲染整个页面 -->
|
|
<div v-if="isPageLoaded" class="class01">
|
|
<div class="class00">
|
|
<!-- 四维矩阵图 -->
|
|
<div class="class02">
|
|
<div class="container">
|
|
<img class="item" :src="item" alt="思维矩阵图片" />
|
|
<div class="span01">
|
|
{{ stockName }}{{ stockName ? '量子四维矩阵图' : '' }}
|
|
</div>
|
|
</div>
|
|
<span class="span02">{{ displayDate }}</span>
|
|
</div>
|
|
<div class="class0201">
|
|
<img src="@/assets/img/AiEmotion/L1.png" alt="情绪监控图标">
|
|
</div>
|
|
<!-- 温度计图表 -->
|
|
<div class="class03">
|
|
<div class="class003">
|
|
<div class="content1">
|
|
<img class="img01" src="@/assets/img/AiEmotion/温度计.png" alt="温度计图标">
|
|
<span class="title1">股票温度计</span>
|
|
</div>
|
|
<div class="div00">
|
|
<div class="div01">个股温度:{{ data1 ?? "NA" }}</div>
|
|
<div class="div02">大盘温度:{{ data2 }}</div>
|
|
</div>
|
|
</div>
|
|
<marketTemperature ref="marketTemperatureRef" />
|
|
</div>
|
|
</div>
|
|
<div class="class0301">
|
|
<img src="@/assets/img/AiEmotion/L2.png" alt="情绪解码图标">
|
|
</div>
|
|
<!-- 情绪解码器图表 -->
|
|
<div class="class04">
|
|
<div class="class0401">
|
|
<img class="img02" src='@/assets/img/AiEmotion/emotionDecod.png' alt="情绪解码器图标">
|
|
<span class="title2">情绪解码器</span>
|
|
</div>
|
|
<div class="class0402">
|
|
<emotionDecod ref="emotionDecodRef"></emotionDecod>
|
|
</div>
|
|
</div>
|
|
<div class="class0403">
|
|
<img src="@/assets/img/AiEmotion/L3.png" alt="情绪推演图标">
|
|
</div>
|
|
<!-- 情绪探底雷达图表 -->
|
|
<div class="class05">
|
|
<div class="class0502">
|
|
<img class="img03" src="@/assets/img/AiEmotion/探底雷达.png" alt="探底雷达图表">
|
|
<span class="title3">情绪探底雷达</span>
|
|
</div>
|
|
<div class="class0503">
|
|
<emotionalBottomRadar ref="emotionalBottomRadarRef"></emotionalBottomRadar>
|
|
</div>
|
|
</div>
|
|
<div class="class0501">
|
|
<img src="@/assets/img/AiEmotion/L4.png" alt="情绪套利">
|
|
</div>
|
|
<!-- 情绪能量转化器图表 -->
|
|
<div class="class06">
|
|
<div class="class0601">
|
|
<img class="img04" src="@/assets/img/AiEmotion/能量转化器.png" alt="能量转化器图标">
|
|
<span class="title4">情绪能量转化器</span>
|
|
</div>
|
|
<div class="class0603">
|
|
<emoEnergyConverter ref="emoEnergyConverterRef"></emoEnergyConverter>
|
|
</div>
|
|
</div>
|
|
<!-- 核心看点 -->
|
|
<div class="class0702">
|
|
<img src="@/assets/img/AiEmotion/核心看点.png" alt="核心看点字样">
|
|
</div>
|
|
<div class="bk-image">
|
|
<div class="text-container">
|
|
<p>情绪监控-金融宇宙的【量子检测网络】核心任务:构建全市场情绪引力场雷达</p>
|
|
<p>情绪解码-主力思维的【神经破译矩阵】核心任务:解构资金行为的量子密码</p>
|
|
<p>情绪推演-未来战争的【时空推演舱】核心任务:情绪推演</p>
|
|
<p>情绪套利-财富裂变的【粒子对撞机】核心任务:将情绪差转化为a收益粒子流</p>
|
|
</div>
|
|
</div>
|
|
<!-- 核心逻辑 -->
|
|
<div class="class0700">
|
|
<img src="@/assets/img/AiEmotion/核心逻辑.png" alt="核心逻辑字样">
|
|
</div>
|
|
<div class="class08">
|
|
<div class="lz-img">
|
|
<img src="@/assets/img/AiEmotion/量子神经决策树.png" alt="树标题">
|
|
</div>
|
|
<div class="scaled-img">
|
|
<img src="@/assets/img/AiEmotion/tree02.png" alt="树图片">
|
|
</div>
|
|
</div>
|
|
<!-- 场景应用 -->
|
|
<div class="class09">
|
|
<img src="@/assets/img/AiEmotion/场景应用.png" alt="场景应用标题">
|
|
<div class="bk-image">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { ref, reactive, computed, watch, nextTick, onMounted } from 'vue';
|
|
import { getReplyAPI } from '@/api/AiEmotionApi.js'; // 导入工作流接口方法
|
|
import axios from 'axios';
|
|
import item from '@/assets/img/AiEmotion/bk01.png'; // 导入思维矩阵图片
|
|
import emotionDecod from '@/views/components/emotionDecod.vue'; // 导入情绪解码组件
|
|
import emotionalBottomRadar from '@/views/components/emotionalBottomRadar.vue'; // 导入情绪探底雷达图组件
|
|
import emoEnergyConverter from '@/views/components/emoEnergyConverter.vue'; // 导入情绪能量转化器组件
|
|
import marketTemperature from '@/views/components/marketTemperature.vue';
|
|
import StockTabs from '@/views/components/StockTabs.vue'; // 导入股票标签页组件
|
|
import blueBorderImg from '@/assets/img/AiEmotion/blueBorder.png' //导入蓝色背景框图片
|
|
import { ElMessage } from 'element-plus';
|
|
import { useEmotionStore } from '@/store/emotion'; // 导入Pinia store
|
|
|
|
// 使用Pinia store
|
|
const emotionStore = useEmotionStore();
|
|
|
|
// 组件引用
|
|
const marketTemperatureRef = ref(null); // 引用市场温度计组件
|
|
const emoEnergyConverterRef = ref(null)
|
|
const emotionDecodRef = ref(null)
|
|
const emotionalBottomRadarRef = ref(null)
|
|
const userInputDisplayRef = ref(null);//消息区域的引用
|
|
|
|
// 响应式数据
|
|
const messages = ref([]);
|
|
const isPageLoaded = ref(false); // 控制页面是否显示
|
|
const isRotating = ref(false);//控制旋转
|
|
const version1 = ref(2); // 版本号
|
|
|
|
// 计算属性 - 从store获取当前股票数据
|
|
const currentStock = computed(() => emotionStore.activeStock);
|
|
const stockName = computed(() => currentStock.value?.stockInfo.name || "");
|
|
const displayDate = computed(() => {
|
|
if (!currentStock.value?.apiData) return "";
|
|
const lastData = currentStock.value.apiData.GSWDJ?.at(-1);
|
|
return lastData ? lastData[0] : "";
|
|
});
|
|
const data1 = computed(() => {
|
|
if (!currentStock.value?.apiData) return null;
|
|
const lastData = currentStock.value.apiData.GSWDJ?.at(-1);
|
|
return lastData ? Math.round(lastData[1]) : null;
|
|
});
|
|
const data2 = computed(() => {
|
|
if (!currentStock.value?.apiData) return null;
|
|
const lastData = currentStock.value.apiData.GSWDJ?.at(-1);
|
|
return lastData ? Math.round(lastData[2]) : null;
|
|
});
|
|
|
|
// 监听当前股票变化,重新渲染图表
|
|
watch(currentStock, (newStock) => {
|
|
if (newStock && newStock.apiData) {
|
|
isPageLoaded.value = true;
|
|
nextTick(() => {
|
|
renderCharts(newStock.apiData);
|
|
});
|
|
} else {
|
|
isPageLoaded.value = false;
|
|
}
|
|
}, { immediate: true });
|
|
//导出方法供外部使用
|
|
defineExpose({ handleSendMessage })
|
|
// 触发图片旋转的方法
|
|
function startImageRotation() {
|
|
isRotating.value = true;
|
|
// 如果你想在一段时间后停止旋转,可以添加以下代码
|
|
setTimeout(() => {
|
|
isRotating.value = false;
|
|
}, 5000); // 5 秒后停止旋转
|
|
}
|
|
|
|
|
|
// 发送消息方法
|
|
async function handleSendMessage(input) {
|
|
console.log("发送内容:", input);
|
|
|
|
// 检查用户输入内容是否为空
|
|
if (input.trim()) {
|
|
const userMessage = reactive({ sender: 'user', text: input });
|
|
messages.value.push(userMessage);
|
|
// 触发图片旋转
|
|
isRotating.value = true;
|
|
|
|
try {
|
|
// 用来调用工作流接口的参数
|
|
const params = {
|
|
content: userMessage.text,
|
|
userData: {
|
|
token:
|
|
"9ior41AF0xTIbIG2pRnnbZi0+fEeMx8pywnIlrmTwo5FbqJ9lWrSWOxp9MkpKiNtedtUafqvzIwpFKrwuMs",
|
|
language: "cn",
|
|
brainPrivilegeState: "1",
|
|
swordPrivilegeState: "1",
|
|
stockForecastPrivile: "1",
|
|
spaceForecastPrivile: "1",
|
|
aibullPrivilegeState: "1",
|
|
aigoldBullPrivilegeS: "1",
|
|
airadarPrivilegeStat: "1",
|
|
marketList: "hk,cn,usa,my,sg,vi,in,gb",
|
|
},
|
|
};
|
|
|
|
const result = await getReplyAPI(params);
|
|
const response = await result.json(); // 解析返回的 JSON 数据
|
|
console.log("工作流接口返回数据:", response);
|
|
|
|
// 解析 data 字段
|
|
const parsedData = JSON.parse(response.data); // 将字符串形式的 JSON 转换为对象
|
|
console.log("解析后的数据:", parsedData);
|
|
|
|
if (parsedData && parsedData.market && parsedData.code) {
|
|
console.log("工作流接口返回股票信息:", parsedData);
|
|
|
|
// 请求数据接口
|
|
fetchData(parsedData.code, parsedData.market, parsedData.name || "未知股票", input.trim());
|
|
|
|
// 更新 span01 的内容
|
|
// updateSpan01();
|
|
} else {
|
|
ElMessage.error('工作流接口未返回非股票信息');
|
|
}
|
|
} catch (error) {
|
|
ElMessage.error('请求工作流接口失败,请检查网络连接');
|
|
} finally {
|
|
// 停止图片旋转
|
|
isRotating.value = false;
|
|
}
|
|
} else {
|
|
ElMessage.error('消息发送失败,请检查网络连接');
|
|
}
|
|
}
|
|
|
|
// 请求数据接口
|
|
async function fetchData(code, market, stockName, queryText) {
|
|
try {
|
|
const stockDataParams = {
|
|
// token: '+XgqsgdW0RLIbIG2pxnnbZi0+fEeMx8pywnIlrmTxtkSaPZ9xjSOWrxq+s0rL3RrfNhXPvGtz9srFfjwu8A',
|
|
token: '9ior41AF0xTIbIG2pRnnbZi0+fEeMx8pywnIlrmTwo5FbqJ9lWrSWOxp9MkpKiNtedtUafqvzIwpFKrwuMs',
|
|
market: market,
|
|
code: code,
|
|
language: 'cn',
|
|
version: version1.value
|
|
};
|
|
|
|
const stockDataResult = await axios.post(
|
|
"http://39.101.133.168:8828/link/api/aiEmotion/client/getAiEmotionData",
|
|
// 'https://api.homilychart.com/link/api/aiEmotion/client/getAiEmotionData',
|
|
stockDataParams,
|
|
{
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
}
|
|
);
|
|
|
|
const stockDataResponse = stockDataResult.data; // 获取返回所有的数据
|
|
console.log('图表数据接口返回数据:', stockDataResponse.data);
|
|
|
|
if (stockDataResponse.code === 200 && stockDataResponse.data) {
|
|
console.log(stockDataResponse.code)
|
|
|
|
// 创建股票数据对象
|
|
const stockData = {
|
|
queryText: queryText,
|
|
stockInfo: {
|
|
name: stockName,
|
|
code: code,
|
|
market: market
|
|
},
|
|
apiData: stockDataResponse.data,
|
|
timestamp: new Date().toISOString()
|
|
};
|
|
|
|
// 将股票数据添加到store中
|
|
emotionStore.addStock(stockData);
|
|
|
|
console.log('股票数据已添加到store');
|
|
|
|
} else {
|
|
ElMessage.error('获取接口数据失败');
|
|
}
|
|
} catch (error) {
|
|
ElMessage.error('获取接口数据失败。。。');
|
|
}
|
|
}
|
|
|
|
// 渲染组件图表的方法
|
|
function renderCharts(data) {
|
|
nextTick(() => {
|
|
// 添加小延迟确保DOM完全更新
|
|
setTimeout(() => {
|
|
try {
|
|
// 渲染股市温度计图表
|
|
if (marketTemperatureRef.value && data.GSWDJ) {
|
|
console.log("开始渲染股市温度计图表");
|
|
console.log("股市温度计数据", data.GSWDJ);
|
|
marketTemperatureRef.value.initChart(data.GSWDJ, data.KLine20, data.WDRL);
|
|
console.log("股市温度计图表已渲染");
|
|
}
|
|
// 渲染情绪解码器图表
|
|
if (emotionDecodRef.value && data.QXJMQ) {
|
|
console.log("开始渲染情绪解码器图表");
|
|
console.log("情绪解码器数据", data.QXJMQ);
|
|
emotionDecodRef.value.initQXNLZHEcharts(data.KLine20, data.QXJMQ);
|
|
console.log("情绪解码器图表已渲染");
|
|
}
|
|
// 渲染情绪探底雷达图表
|
|
if (emotionalBottomRadarRef.value && data.QXTDLD) {
|
|
console.log("开始渲染情绪探底雷达图表");
|
|
console.log("数据", data.QXTDLD);
|
|
emotionalBottomRadarRef.value.initEmotionalBottomRadar(
|
|
data.KLine20,
|
|
data.QXTDLD
|
|
);
|
|
console.log("情绪探底雷达图表已渲染");
|
|
}
|
|
// 渲染情绪能量转化器图表
|
|
if (emoEnergyConverterRef.value && data.QXNLZHQ) {
|
|
console.log("开始渲染情绪能量转化器图表");
|
|
console.log("KLine20:", data.KLine20);
|
|
console.log("QXNLZHQ:", data.QXNLZHQ);
|
|
emoEnergyConverterRef.value.initQXNLZHEcharts(data.KLine20, data.QXNLZHQ);
|
|
console.log("情绪能量转化器图表已渲染");
|
|
}
|
|
} catch (error) {
|
|
console.error('图表渲染过程中发生错误:', error);
|
|
ElMessage.error('图表渲染失败,请重试');
|
|
}
|
|
}, 100); // 100ms延迟确保DOM稳定
|
|
});
|
|
}
|
|
|
|
const scrollToBottom = async () => {
|
|
const container = userInputDisplayRef.value;
|
|
if (!container) return;
|
|
await nextTick();
|
|
console.log(container.scrollHeight, "container.scrollHeight");
|
|
console.log(container.scrollTop, "container.scrollTop");
|
|
console.log(container.offsetHeight, "container.offsetHeight");
|
|
container.scrollTop = container.scrollHeight - container.offsetHeight;
|
|
};
|
|
|
|
// setInterval(() =>{
|
|
// scrollToBottom();
|
|
// },1000);
|
|
|
|
// 页面挂载完成后触发图片旋转
|
|
onMounted(() => {
|
|
startImageRotation();
|
|
});
|
|
</script>
|
|
|
|
<style scoped>
|
|
.class003 {
|
|
padding-top: 7rem;
|
|
padding-left: 12rem;
|
|
}
|
|
|
|
.class003 .div02 {
|
|
background-image: url('@/assets/img/AiEmotion/redBorder.png');
|
|
background-repeat: no-repeat;
|
|
background-size: 100% 100%;
|
|
width: 35%;
|
|
min-height: 40px;
|
|
float: left;
|
|
margin-left: 100px;
|
|
margin-top: 30px;
|
|
text-align: center;
|
|
font-size: 24px;
|
|
color: white;
|
|
}
|
|
|
|
.class003 .div01 {
|
|
background-image: url('@/assets/img/AiEmotion/blueBorder.png');
|
|
background-repeat: no-repeat;
|
|
background-size: 100% 100%;
|
|
width: 35%;
|
|
min-height: 40px;
|
|
float: left;
|
|
margin-left: 100px;
|
|
text-align: center;
|
|
margin-top: 10px;
|
|
font-size: 24px;
|
|
color: white;
|
|
}
|
|
|
|
.golden-wheel {
|
|
width: 100%;
|
|
display: flex;
|
|
justify-content: center;
|
|
}
|
|
|
|
.golden-wheel-img {
|
|
width: 60%;
|
|
max-width: 500px;
|
|
height: auto;
|
|
}
|
|
|
|
/* 定义旋转动画 */
|
|
@keyframes rotate {
|
|
from {
|
|
transform: rotate(0deg);
|
|
}
|
|
|
|
to {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
/* 应用动画到图片 */
|
|
.rotating-image {
|
|
animation: rotate 5s linear;
|
|
/* 5 秒完成一次旋转,线性速度*/
|
|
will-change: transform;
|
|
/* 优化动画性能 */
|
|
}
|
|
|
|
.bk-image {
|
|
background-image: url("@/assets/img/AiEmotion/bk03.png");
|
|
background-size: 100% 100%;
|
|
/* background-position: center; */
|
|
background-repeat: no-repeat;
|
|
width: 95%;
|
|
height: 30rem;
|
|
margin: 0 auto;
|
|
margin-top: 20px;
|
|
}
|
|
|
|
/* 最后文字的颜色 */
|
|
.text-container {
|
|
position: relative;
|
|
top: 40%;
|
|
left: 50%;
|
|
transform: translate(-50%, -50%);
|
|
color: white;
|
|
/* 设置文字颜色 */
|
|
text-align: left;
|
|
/* 文字居中对齐 */
|
|
padding: 20px;
|
|
}
|
|
|
|
.text-container p {
|
|
margin: 10px 0;
|
|
/* 设置段落间距 */
|
|
font-size: 40px;
|
|
/* 设置字体大小 */
|
|
margin-left: 50px;
|
|
}
|
|
|
|
.class07 {
|
|
background-image: url("@/assets/img/AiEmotion/bk03.png");
|
|
/* 使用导入的背景图片 */
|
|
background-size: cover;
|
|
/* 确保背景图片完整显示 */
|
|
background-repeat: no-repeat;
|
|
/* 防止背景图片重复 */
|
|
width: 95%;
|
|
/* 设置容器宽度 */
|
|
height: auto;
|
|
/* 高度根据内容动态变化 */
|
|
min-height: 70rem;
|
|
/* 设置最小高度,确保图片显示 */
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.class0700 {
|
|
margin: 0 auto;
|
|
width: fit-content;
|
|
}
|
|
|
|
.class0702 {
|
|
margin: 0 auto;
|
|
width: fit-content;
|
|
}
|
|
|
|
/* .class0503 {
|
|
min-width: 100%;
|
|
} */
|
|
|
|
.class0402 {
|
|
width: 80%;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.class0601 {
|
|
padding-top: 5rem;
|
|
text-align: center;
|
|
padding-bottom: 6rem;
|
|
}
|
|
|
|
.class0603 {
|
|
min-width: 100%;
|
|
/* margin: 0 auto; */
|
|
|
|
}
|
|
|
|
.class0502 {
|
|
padding-top: 5rem;
|
|
text-align: center;
|
|
display: flex;
|
|
flex-direction: column;
|
|
/* 竖向排列元素 */
|
|
gap: 1rem;
|
|
margin-left: 2rem;
|
|
}
|
|
|
|
.class0601 {
|
|
padding-top: 5rem;
|
|
text-align: center;
|
|
display: flex;
|
|
flex-direction: column;
|
|
/* 竖向排列元素 */
|
|
gap: 1rem;
|
|
margin-left: 2rem;
|
|
}
|
|
|
|
.img03 {
|
|
width: 10rem;
|
|
height: 10rem;
|
|
margin-left: 40rem;
|
|
}
|
|
|
|
.img04 {
|
|
width: 10rem;
|
|
height: 10rem;
|
|
margin-left: 40rem;
|
|
}
|
|
|
|
.class0701 {
|
|
margin: 0 auto;
|
|
width: fit-content;
|
|
}
|
|
|
|
.class0501 {
|
|
margin: 0 auto;
|
|
width: fit-content;
|
|
}
|
|
|
|
.class0403 {
|
|
margin: 0 auto;
|
|
width: fit-content;
|
|
}
|
|
|
|
.class0301 {
|
|
margin: 0 auto;
|
|
width: fit-content;
|
|
}
|
|
|
|
.class0201 {
|
|
margin: 0 auto;
|
|
width: fit-content;
|
|
}
|
|
|
|
.class0401 {
|
|
padding-top: 5rem;
|
|
text-align: center;
|
|
display: flex;
|
|
flex-direction: column;
|
|
/* 竖向排列元素 */
|
|
gap: 1rem;
|
|
margin-left: 2rem;
|
|
}
|
|
|
|
.img02 {
|
|
width: 10rem;
|
|
height: 10rem;
|
|
margin-left: 40rem;
|
|
}
|
|
|
|
.title2 {
|
|
color: white;
|
|
font-size: 2rem;
|
|
font-weight: bold;
|
|
margin-left: -4rem;
|
|
}
|
|
|
|
.title3 {
|
|
color: white;
|
|
font-size: 2rem;
|
|
font-weight: bold;
|
|
margin-left: -4rem;
|
|
}
|
|
|
|
.title4 {
|
|
color: white;
|
|
font-size: 2rem;
|
|
font-weight: bold;
|
|
margin-left: -4rem;
|
|
}
|
|
|
|
.class09 {
|
|
text-align: center;
|
|
}
|
|
|
|
/* 为需要放大的图片添加样式 */
|
|
.scaled-img {
|
|
transform: scale(2.5);
|
|
text-align: center;
|
|
}
|
|
|
|
.lz-img {
|
|
margin-bottom: 10rem;
|
|
text-align: center;
|
|
padding-top: 70px;
|
|
}
|
|
|
|
.class08 {
|
|
background-image: url("@/assets/img/AiEmotion/bk03.png");
|
|
background-size: 100% 100%;
|
|
background-repeat: no-repeat;
|
|
width: 95%;
|
|
height: auto;
|
|
min-height: 40rem;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.class06 {
|
|
background-image: url('@/assets/img/AiEmotion/bk03.png');
|
|
/* 使用导入的背景图片 */
|
|
background-size: 100% 100%;
|
|
/* 确保背景图片完整显示 */
|
|
background-repeat: no-repeat;
|
|
/* 防止背景图片重复 */
|
|
width: 95%;
|
|
/* 设置容器宽度 */
|
|
height: auto;
|
|
/* 高度根据内容动态变化 */
|
|
min-height: 72rem;
|
|
/* 设置最小高度,确保图片显示 */
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.class05 {
|
|
background-image: url("@/assets/img/AiEmotion/bk03.png");
|
|
/* 使用导入的背景图片 */
|
|
background-size: 100% 100%;
|
|
/* 确保背景图片完整显示 */
|
|
background-repeat: no-repeat;
|
|
/* 防止背景图片重复 */
|
|
width: 95%;
|
|
/* 设置容器宽度 */
|
|
height: auto;
|
|
/* 高度根据内容动态变化 */
|
|
min-height: 70rem;
|
|
/* 设置最小高度,确保图片显示 */
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.class04 {
|
|
background-image: url('@/assets/img/AiEmotion/bk03.png');
|
|
/* 使用导入的背景图片 */
|
|
background-size: 100% 100%;
|
|
/* 确保背景图片完整显示 */
|
|
background-repeat: no-repeat;
|
|
/* 防止背景图片重复 */
|
|
width: 95%;
|
|
/* 设置容器宽度 */
|
|
height: auto;
|
|
/* 高度根据内容动态变化 */
|
|
min-height: 57rem;
|
|
/* 设置最小高度,确保图片显示 */
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.class03 {
|
|
background-image: url('@/assets/img/AiEmotion/bk03.png');
|
|
/* 使用导入的背景图片 */
|
|
background-size: 100% 100%;
|
|
/* 确保背景图片完整显示 */
|
|
background-repeat: no-repeat;
|
|
/* 防止背景图片重复 */
|
|
width: 100%;
|
|
/* 设置容器宽度 */
|
|
height: auto;
|
|
/* 高度根据内容动态变化 */
|
|
min-height: 70rem;
|
|
/* 设置最小高度,确保图片显示 */
|
|
margin: 0 auto;
|
|
/* display: flex;
|
|
flex-direction:row;
|
|
align-items: center;
|
|
padding: 1rem;
|
|
gap: 1rem; */
|
|
}
|
|
|
|
.class00 {
|
|
background-size: 100% 100%;
|
|
/* 确保背景图片完整显示 */
|
|
background-repeat: no-repeat;
|
|
/* 防止背景图片重复 */
|
|
width: 95%;
|
|
/* 设置容器宽度 */
|
|
height: auto;
|
|
/* 高度根据内容动态变化 */
|
|
min-height: 55rem;
|
|
/* 设置最小高度,确保图片显示 */
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.content1 {
|
|
display: flex;
|
|
flex-direction: column;
|
|
/* 竖向排列元素 */
|
|
gap: 1rem;
|
|
margin-left: 2rem;
|
|
}
|
|
|
|
.title1 {
|
|
color: white;
|
|
font-size: 2.5rem;
|
|
font-weight: bold;
|
|
margin-left: -1rem;
|
|
|
|
}
|
|
|
|
.img01 {
|
|
width: 10rem;
|
|
height: 10rem;
|
|
}
|
|
|
|
.div00 {
|
|
display: flex;
|
|
flex-direction: column;
|
|
/* 竖向排列元素 */
|
|
margin-left: 30rem;
|
|
gap: 1rem;
|
|
margin-top: -10rem;
|
|
width: 70rem;
|
|
height: 10rem;
|
|
}
|
|
|
|
.span02 {
|
|
font-size: 1.5rem;
|
|
color: white;
|
|
float: right;
|
|
margin-top: -3.5rem;
|
|
}
|
|
|
|
.span01 {
|
|
/* 使用导入的背景图片 */
|
|
background-size: 100% 100%;
|
|
/* 背景图片覆盖整个容器 */
|
|
background-repeat: no-repeat;
|
|
/* 防止背景图片重复 */
|
|
display: inline-block;
|
|
/* 确保容器是块级元素 */
|
|
padding: 10px;
|
|
/* 添加内边距以显示内容 */
|
|
color: #fff;
|
|
/* 设置文字颜色以确保可读性 */
|
|
font-size: 1.5rem;
|
|
/* 增加字体大小以便更清晰显示股票名称 */
|
|
text-align: center;
|
|
transform: translate(-50%, -50%);
|
|
margin-left: -13rem;
|
|
|
|
}
|
|
|
|
.class01 {
|
|
width: 90%;
|
|
/* 固定容器宽度 */
|
|
min-height: 100px;
|
|
/* 设置最小高度,确保初始显示 */
|
|
height: auto;
|
|
/* 高度根据内容动态变化 */
|
|
padding: 40px;
|
|
/* 添加内边距,确保内容与边界有间距 */
|
|
box-sizing: border-box;
|
|
/* 包括内边距在宽度和高度计算中 */
|
|
background-color: #5e81a7;
|
|
margin: 0 auto;
|
|
/* 居中容器 */
|
|
margin-bottom: 10rem;
|
|
}
|
|
|
|
.ai-emotion-container {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 20px;
|
|
position: relative;
|
|
}
|
|
|
|
.user-input-display {
|
|
margin-top: 20px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
width: 100%;
|
|
}
|
|
|
|
.message-container {
|
|
display: flex;
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
.user-message {
|
|
background-color: #007bff;
|
|
color: #fff;
|
|
padding: 10px 15px;
|
|
border-radius: 15px;
|
|
max-width: 60%;
|
|
text-align: left;
|
|
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
|
|
align-self: flex-end;
|
|
}
|
|
|
|
.ai-message {
|
|
background-color: #f1f1f1;
|
|
color: #333;
|
|
padding: 10px 15px;
|
|
border-radius: 15px;
|
|
max-width: 60%;
|
|
text-align: left;
|
|
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
|
|
align-self: flex-start;
|
|
}
|
|
|
|
.input-container {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
}
|
|
|
|
.fixed-bottom {
|
|
position: fixed;
|
|
bottom: 100px;
|
|
left: 0;
|
|
width: 100%;
|
|
background-color: #f8f9fa;
|
|
padding: 10px 20px;
|
|
box-shadow: 0 -2px 5px rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
.input-box {
|
|
padding: 10px;
|
|
font-size: 16px;
|
|
border: 1px solid #ccc;
|
|
border-radius: 5px;
|
|
width: calc(100% - 120px);
|
|
}
|
|
|
|
.send-button {
|
|
padding: 10px 20px;
|
|
font-size: 16px;
|
|
color: #fff;
|
|
background-color: #007bff;
|
|
border: none;
|
|
border-radius: 5px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.send-button:hover {
|
|
background-color: #0056b3;
|
|
}
|
|
|
|
/* 手机端适配样式 */
|
|
@media only screen and (max-width: 768px) {
|
|
|
|
/* 图片样式 */
|
|
.golden-wheel img {
|
|
width: 100%;
|
|
}
|
|
|
|
.class02 img {
|
|
width: 70%;
|
|
|
|
}
|
|
|
|
.class0201 img {
|
|
width: 100%;
|
|
}
|
|
|
|
.class0301 img {
|
|
width: 100%;
|
|
margin: 10px 10px;
|
|
}
|
|
|
|
.class0403 img {
|
|
width: 100%;
|
|
margin: 10px 10px;
|
|
}
|
|
|
|
.class0501 img {
|
|
width: 100%;
|
|
margin: 10px 10px;
|
|
}
|
|
|
|
.class0702 img {
|
|
width: 100%;
|
|
margin: 10px 10px;
|
|
}
|
|
|
|
.class0700 img {
|
|
width: 100%;
|
|
margin: 10px 10px;
|
|
}
|
|
|
|
.scaled-img img {
|
|
width: 30%;
|
|
height: auto;
|
|
}
|
|
|
|
.class09 img {
|
|
width: 100%;
|
|
margin: 10px 10px;
|
|
}
|
|
|
|
.img01 {
|
|
height: auto;
|
|
margin-left: 0rem;
|
|
width: 25%;
|
|
margin-top: 10px;
|
|
}
|
|
|
|
.title1 {
|
|
font-size: 10px;
|
|
margin-left: 13px;
|
|
}
|
|
|
|
.class02 .span02 {
|
|
font-size: 14px;
|
|
color: white;
|
|
float: right;
|
|
margin-top: -45px;
|
|
}
|
|
|
|
.class03 {
|
|
background-image: url('@/assets/img/AiEmotion/bk03.png');
|
|
background-size: 100% 100%;
|
|
background-repeat: no-repeat;
|
|
width: 132%;
|
|
margin-left: -45px;
|
|
}
|
|
|
|
.class03 .class003 {
|
|
padding-top: 3rem;
|
|
padding-left: 0rem;
|
|
}
|
|
|
|
.class01 {
|
|
min-height: 100px;
|
|
height: auto;
|
|
box-sizing: border-box;
|
|
background-color: #5e81a7;
|
|
margin: 0 auto;
|
|
margin-bottom: 10rem;
|
|
}
|
|
|
|
.class04 {
|
|
width: 126%;
|
|
/* min-height: 51rem; */
|
|
margin-left: -39px;
|
|
min-height: 38rem;
|
|
}
|
|
|
|
.class02 .container img {
|
|
width: 68%;
|
|
height: auto;
|
|
margin-top: -15px;
|
|
margin-left: -2rem;
|
|
}
|
|
|
|
|
|
.title2,
|
|
.title3,
|
|
.title4 {
|
|
font-size: 10px;
|
|
margin-left: -3rem;
|
|
}
|
|
|
|
.img02 {
|
|
width: 25%;
|
|
height: auto;
|
|
margin-left: 6rem;
|
|
}
|
|
|
|
.class0401 {
|
|
padding-top: 3rem;
|
|
}
|
|
|
|
.img03,
|
|
.img04 {
|
|
width: 25%;
|
|
height: auto;
|
|
margin-left: 6rem;
|
|
}
|
|
|
|
.text-container p {
|
|
font-size: 10px;
|
|
}
|
|
|
|
.lz-img {
|
|
margin-bottom: 3rem;
|
|
padding-top: 20px;
|
|
|
|
img {
|
|
width: 45%;
|
|
height: auto;
|
|
}
|
|
}
|
|
|
|
.class08 {
|
|
background-size: 100% 100%;
|
|
background-repeat: no-repeat;
|
|
width: 127%;
|
|
height: auto;
|
|
min-height: 13rem;
|
|
margin: 0 auto;
|
|
margin-left: -41px;
|
|
}
|
|
|
|
.bk-image {
|
|
background-size: 100% 100%;
|
|
background-repeat: no-repeat;
|
|
width: 126%;
|
|
height: 15rem;
|
|
margin: 0 auto;
|
|
margin-top: 0px;
|
|
margin-left: -40px;
|
|
}
|
|
|
|
.class05 {
|
|
background-size: 100% 100%;
|
|
background-repeat: no-repeat;
|
|
width: 127%;
|
|
height: auto;
|
|
min-height: 45rem;
|
|
margin-left: -41px;
|
|
}
|
|
|
|
.class06 {
|
|
background-size: 100% 100%;
|
|
background-repeat: no-repeat;
|
|
width: 127%;
|
|
height: auto;
|
|
min-height: 32rem;
|
|
margin: 0 auto;
|
|
margin-left: -41px;
|
|
|
|
}
|
|
|
|
.text-container {
|
|
position: relative;
|
|
top: 50%;
|
|
left: 50%;
|
|
transform: translate(-50%, -50%);
|
|
color: white;
|
|
text-align: left;
|
|
padding: 20px;
|
|
}
|
|
|
|
.div00 {
|
|
display: flex;
|
|
flex-direction: column;
|
|
margin-left: 5rem;
|
|
gap: 0;
|
|
margin-top: -6rem;
|
|
width: 100%;
|
|
height: auto;
|
|
}
|
|
|
|
.class003 .div01 {
|
|
background-repeat: no-repeat;
|
|
background-size: 100% 100%;
|
|
width: 35%;
|
|
min-height: 25px;
|
|
float: left;
|
|
margin-left: 100px;
|
|
text-align: center;
|
|
margin-top: 10px;
|
|
font-size: 10px;
|
|
color: white;
|
|
}
|
|
|
|
.class003 .div02 {
|
|
background-repeat: no-repeat;
|
|
background-size: 100% 100%;
|
|
width: 35%;
|
|
min-height: 25px;
|
|
float: left;
|
|
margin-left: 100px;
|
|
text-align: center;
|
|
margin-top: 10px;
|
|
font-size: 10px;
|
|
color: white;
|
|
}
|
|
|
|
/*
|
|
.container {
|
|
max-width: 80vw;
|
|
width: 100%;
|
|
height: auto;
|
|
} */
|
|
|
|
.span01 {
|
|
/* 使用导入的背景图片 */
|
|
background-size: 100% 100%;
|
|
/* 背景图片覆盖整个容器 */
|
|
background-repeat: no-repeat;
|
|
/* 防止背景图片重复 */
|
|
display: inline-block;
|
|
/* 确保容器是块级元素 */
|
|
padding: 10px;
|
|
/* 添加内边距以显示内容 */
|
|
color: #fff;
|
|
/* 设置文字颜色以确保可读性 */
|
|
font-size: 13px;
|
|
/* 增加字体大小以便更清晰显示股票名称 */
|
|
text-align: center;
|
|
transform: translate(-50%, -50%);
|
|
margin-left: -5rem;
|
|
}
|
|
|
|
.class0502,
|
|
.class0601 {
|
|
padding-top: 3rem;
|
|
}
|
|
}
|
|
</style>
|