14 Commits

  1. 3
      src/components.d.ts
  2. 2
      src/views/Selectmodel.vue
  3. 81
      src/views/deepNine.vue
  4. 502
      src/views/homePage.vue

3
src/components.d.ts

@ -4,7 +4,8 @@
declare module 'vue' {
export interface GlobalComponents {
HelloWorld: typeof import('./components/HelloWorld.vue')['default']
MessageItem: typeof import('./components/deepNine/MessageItem.vue')['default']
ThinkingGif: typeof import('./components/deepNine/ThinkingGif.vue')['default']
}
}

2
src/views/Selectmodel.vue

@ -421,7 +421,7 @@ const goToDeepNineModel = () => {
}
.buttons-container {
margin-top: 8rem;
margin-top: 18rem;
position: relative;
width: 100%;
}

81
src/views/deepNine.vue

@ -41,6 +41,10 @@ import logo2 from "@/assets/img/AIchat/开启无限财富.png";
import getCountAll from "../assets/img/homePage/get-count-all.png";
import voice from "../assets/img/homePage/tail/voice.png";
import voiceNoActive from "../assets/img/homePage/tail/voice-no-active.png";
import { useChatStore } from "../store/chat";
const homepageChatStore = useChatStore();
const chatStore = useDeepNineStore();
const audioStore = useDeepNineAudioStore();
const dataStore = useDataStore();
@ -718,7 +722,7 @@ const createTypingEffect = (message, content, speed) => {
}
}
if (message.end) {
chatStore.getUserCount();
homepageChatStore.getUserCount();
chatStore.isLoading = false;
console.log("打印完毕,接触输入框禁用状态");
chatStore.chatInput = false;
@ -1118,7 +1122,7 @@ watch(
console.log(AIcontent, "AIcontent");
if (result.code == 406) {
AIcontent.value = `<p>尊敬的用户,目前您的token余额为0,系统将无法处理您的搜索请求,您可以补充token后再进行搜索。token兑换的入口在右上角“<span style="color:blue;cursor:pointer;border-bottom:1px solid blue" onclick="window.showCountHandler()">获取token次数</span>”,点击即可操作哦~</p>`;
AIcontent.value = `<p>尊敬的用户您好,您当前的“深度九大模型专属Token”数量为0,无法进行股票查询,可联系客服团队进行充值,感谢您的理解与支持</p>`;
}
const aiMsg = {
@ -1451,7 +1455,7 @@ watch(
class: "content3",
type: "img1",
content:
"https://d31zlh4on95l9h.cloudfront.net/images/b6d2a6921202253d7bc07345fdde0876.png",
"https://d31zlh4on95l9h.cloudfront.net/images/6bde1eccf4cd2f5c2231df98186c5ced.png",
},
"",
50
@ -1515,7 +1519,10 @@ watch(
audioPreloadStatus.three.url
);
if (chatStore.currentUserIndex == chatStore.inputUserIndex) {
addToAudioQueue(audioPreloadStatus.three.url, "API2-第一个");
addToAudioQueue(
audioPreloadStatus.three.url,
"API2-第一个"
);
} else {
chatStore.messages[
chatStore.inputUserIndex
@ -1557,23 +1564,34 @@ watch(
"",
50
);
const ac31 = result22.data.DXTSC;
const ac32 = result22.data.DXTSC2;
const ac33 = result22.data.ZJQSSC1;
const ac3 = `<p>${result23.data.DXTSC}</p><p>${result23.data.DXTSC2}</p><p>${result23.data.ZJQSSC1}</p>`;
const ac3Arr=[];
if(ac31!=""){
ac3Arr.push("")
ac3Arr.push(`<p>${ac31}</p>`);
}
if(ac32!=""){
ac3Arr.push("")
const ac31 = `<p style="margin:0;color:#FFD700;font-weight:bold;display:flex;justify-content:center;font-size:22px">【资金异动信号】</p><p>`;
const ac321 = result22.data.DXTSC;
const ac322 = result22.data.dXTSC;
const ac32 = ac321 || ac322 || "";
const ac331 = result22.data.DXTSC2;
const ac332 = result22.data.dXTSC2;
const ac33 = ac331 || ac332 || "";
const ac34 = `<p style="margin:0;color:#FFD700;font-weight:bold;display:flex;justify-content:center;font-size:22px">【资金趋势导航】</p><p>`;
const ac351 = result22.data.ZJQSSC1;
const ac352 = result22.data.dZJQSSC1;
const ac35 = ac351 || ac352 || "";
// const ac3 = `<p>${result23.data.DXTSC}</p><p>${result23.data.DXTSC2}</p><p>${result23.data.ZJQSSC1}</p>`;
const ac3Arr = [];
ac3Arr.push(ac31);
if (ac32 != "") {
ac3Arr.push(`<p>${ac32}</p>`);
}
if(ac33!=""){
ac3Arr.push("")
if (ac33 != "") {
ac3Arr.push("");
ac3Arr.push(`<p>${ac33}</p>`);
}
ac3Arr.push(ac34);
if (ac35 != "") {
ac3Arr.push(`<p>${ac35}</p>`);
}
//
const aiMessage3 = reactive({
sender: "ai",
@ -1621,10 +1639,7 @@ watch(
audioPreloadStatus.five.url
);
if (chatStore.currentUserIndex == chatStore.inputUserIndex) {
addToAudioQueue(
audioPreloadStatus.five.url,
"API3-第一个"
);
addToAudioQueue(audioPreloadStatus.five.url, "API3-第一个");
} else {
chatStore.messages[
chatStore.inputUserIndex
@ -1868,15 +1883,9 @@ watch(
console.error("请求失败:", e);
chatStore.firstAPICall = false;
hasValidData.value = false; //
// chatStore.messages.pop();
// chatStore.messages.push({
// sender: "ai",
// content: "AI... ",
// });
// chatStore.setLoading(false);
} finally {
// chatStore.setLoading(false);
await chatStore.getUserCount();
await homepageChatStore.getUserCount();
}
}
}
@ -2293,7 +2302,7 @@ function KlineCanvsEcharts(containerId) {
formatter: `${item[1]}`,
textStyle: {
color: "green",
fontSize: window.innerWidth > 769 ? 12 : 9,
fontSize: window.innerWidth > 769 ? 18 : 15,
textBorderColor: "#FFFFFF",
textBorderWidth: 2,
fontWeight: "bold",
@ -2317,7 +2326,7 @@ function KlineCanvsEcharts(containerId) {
formatter: `${item[1]}`,
textStyle: {
color: "green",
fontSize: window.innerWidth > 769 ? 18 : 15,
fontSize: window.innerWidth > 769 ? 12 : 9,
textBorderColor: "#FFFFFF",
textBorderWidth: 2,
fontWeight: "bold",
@ -3165,17 +3174,7 @@ watch(
);
const scrollToTop = () => {
//
const topAnchor = document.getElementById("deepNine-top-anchor");
if (topAnchor) {
topAnchor.scrollIntoView({ behavior: "smooth" });
} else {
//
chatStore.dbqbScrollToTop = !chatStore.dbqbScrollToTop;
}
//
emit('scrollToBottom');
homepageChatStore.dbqbScrollToTop = !homepageChatStore.dbqbScrollToTop;
};
// K线

502
src/views/homePage.vue

@ -61,6 +61,7 @@ const historyRecordRef = ref(null);
const { getQueryVariable, setActiveTabIndex, getUserInfo } = useDataStore();
const dataStore = useDataStore();
const chatStore = useChatStore();
const deepNineStore = useDeepNineStore();
//
//
const emotionAudioStore = useEmotionAudioStore();
@ -108,18 +109,21 @@ const modelOptions = [
{
label: "夺宝奇兵大模型",
value: "AIchat",
image: "https://d31zlh4on95l9h.cloudfront.net/images/0389f08c458c20b715be7acebf7a8eb2.png"
image:
"https://d31zlh4on95l9h.cloudfront.net/images/0389f08c458c20b715be7acebf7a8eb2.png",
},
{
label: "AI情绪大模型",
value: "AiEmotion",
image: "https://d31zlh4on95l9h.cloudfront.net/images/aed3597ea187c5af6c88d5a5c67fc9c1.png"
image:
"https://d31zlh4on95l9h.cloudfront.net/images/aed3597ea187c5af6c88d5a5c67fc9c1.png",
},
{
label: "深度九大模型",
value: "deepNine",
image: "https://d31zlh4on95l9h.cloudfront.net/images/35bf808538183be0062e4647570a9abd.png"
}
image:
"https://d31zlh4on95l9h.cloudfront.net/images/35bf808538183be0062e4647570a9abd.png",
},
];
// activeTabactiveTabMobile
@ -138,29 +142,33 @@ const selectOption = (value) => {
isDropdownOpen.value = false;
const tabIndexMap = {
"AIchat": 0,
"AiEmotion": 1,
"deepNine": 2
AIchat: 0,
AiEmotion: 1,
deepNine: 2,
};
setActiveTab(value, tabIndexMap[value]);
};
//
const getSelectedOptionLabel = () => {
const option = modelOptions.find(opt => opt.value === activeTabMobile.value);
const option = modelOptions.find(
(opt) => opt.value === activeTabMobile.value
);
return option ? option.label : "请选择模型";
};
//
const getSelectedOptionImage = () => {
const option = modelOptions.find(opt => opt.value === activeTabMobile.value);
const option = modelOptions.find(
(opt) => opt.value === activeTabMobile.value
);
return option ? option.image : "";
};
//
onMounted(() => {
document.addEventListener('click', (e) => {
const container = document.querySelector('.custom-select-container');
document.addEventListener("click", (e) => {
const container = document.querySelector(".custom-select-container");
if (container && !container.contains(e.target) && isDropdownOpen.value) {
isDropdownOpen.value = false;
}
@ -170,9 +178,9 @@ onMounted(() => {
//
const handleMobileTabChange = (value) => {
const tabIndexMap = {
"AIchat": 0,
"AiEmotion": 1,
"deepNine": 2
AIchat: 0,
AiEmotion: 1,
deepNine: 2,
};
setActiveTab(value, tabIndexMap[value]);
};
@ -388,7 +396,6 @@ const sendMessage = async () => {
// store
const deepNineStore = useDeepNineStore();
// store
const messageContent = message.value;
message.value = ""; //
@ -582,21 +589,13 @@ const getCurrentScrollContainer = () => {
};
const smoothScrollToBottom = async () => {
// console.log("");
// await nextTick();
const container = getCurrentScrollContainer();
// console.log(container, 'container')
// console.log(isScrolling.value, 'isScrolling.value')
if (!container) return;
await nextTick(); // DOM
if (!isScrolling.value) {
container.scrollTop = container.scrollHeight - container.offsetHeight;
// container.scrollTop = container.scrollHeight;
// container.scrollTop = container.offsetHeight;
// container.scrollTop = container.scrollHeight + container.offsetHeight;
// console.log(container.scrollHeight, container.offsetHeight, container.scrollHeight - container.offsetHeight, container.scrollTop, "", "", "")
}
};
@ -805,7 +804,18 @@ watch(
if (activeTab.value === "AIchat" || activeTab.value === "deepNine") {
throttledSmoothScrollToBottom();
}
// setTimeout(throttledSmoothScrollToBottom, 100);
},
{ deep: false, immediate: true }
);
watch(
() => deepNineStore.messages.length,
() => {
// console.log('messages')
// AIchat
if (activeTab.value === "AIchat" || activeTab.value === "deepNine") {
throttledSmoothScrollToBottom();
}
},
{ deep: false, immediate: true }
);
@ -846,8 +856,8 @@ watch(
activeTab.value == "AIchat"
? 1
: activeTab.value == "AiEmotion"
? 2
: 3;
? 2
: 3;
const result = historyRecordRef.value.getHistoryList({
model: model,
token: localStorage.getItem("localToken"),
@ -870,8 +880,6 @@ watch(
// AiEmotion
stopAiEmotionHeightObserver();
}
// AiEmotion
// setTimeout(throttledSmoothScrollToBottom, 100);
},
{ deep: true, immediate: true }
);
@ -1409,37 +1417,72 @@ onUnmounted(() => {
<template>
<div class="homepage" id="testId">
<!-- 历史记录组件 -->
<HistoryRecord ref="historyRecordRef" :current-type="activeTab" @selectRecord="handleHistorySelect"
:isMobile="isMobile" @showAnnouncement="showAnnouncement" @showFeedback="showFeedback" />
<div v-if="isMobile && !historyRecordRef?.isCollapsed" class="zhezhao" @click="expandHistory"></div>
<el-container v-if="!dataStore.isFeedback" class="main-container" :class="{
collapsed: !isMobile && historyRecordRef?.isCollapsed,
unCollapsed: !isMobile && !historyRecordRef?.isCollapsed,
}">
<HistoryRecord
ref="historyRecordRef"
:current-type="activeTab"
@selectRecord="handleHistorySelect"
:isMobile="isMobile"
@showAnnouncement="showAnnouncement"
@showFeedback="showFeedback"
/>
<div
v-if="isMobile && !historyRecordRef?.isCollapsed"
class="zhezhao"
@click="expandHistory"
></div>
<el-container
v-if="!dataStore.isFeedback"
class="main-container"
:class="{
collapsed: !isMobile && historyRecordRef?.isCollapsed,
unCollapsed: !isMobile && !historyRecordRef?.isCollapsed,
}"
>
<!-- AI小财神头部 logo 次数 公告 -->
<el-header class="homepage-head">
<!-- logo -->
<div class="homepage-logo" v-if="isMobile">
<img class="expand" @click="expandHistory"
src="https://d31zlh4on95l9h.cloudfront.net/images/37fe3d79a8a700f6c674c9f0e7af066b.png" alt="icon" />
<img
class="expand"
@click="expandHistory"
src="https://d31zlh4on95l9h.cloudfront.net/images/37fe3d79a8a700f6c674c9f0e7af066b.png"
alt="icon"
/>
<img :src="logo" alt="图片加载失败" class="logo1" />
<!-- <img :src="madeInHL" alt="图片加载失败" class="logo2" /> -->
</div>
<div class="homepage-right-group" v-if="isMobile">
<div class="count-badge" @click="showCount" :class="{'deepnine-model': activeTab === 'deepNine'}">
<img v-if="activeTab !== 'deepNine'" src="https://d31zlh4on95l9h.cloudfront.net/images/74e20c65c9ef2526477c63ad68698a50.png"
class="action-btn" />
<img v-else src="https://d31zlh4on95l9h.cloudfront.net/images/4621e0d1463a13c6654fe39215ee64c2.png"
class="action-btn" />
<div
class="count-badge"
@click="showCount"
:class="{ 'deepnine-model': activeTab === 'deepNine' }"
>
<img
v-if="activeTab !== 'deepNine'"
src="https://d31zlh4on95l9h.cloudfront.net/images/74e20c65c9ef2526477c63ad68698a50.png"
class="action-btn"
/>
<img
v-else
src="https://d31zlh4on95l9h.cloudfront.net/images/4621e0d1463a13c6654fe39215ee64c2.png"
class="action-btn"
/>
<div class="count-number">{{ UserCount }}</div>
<div class="clickGetCount">{{ activeTab === 'deepNine' ? '深度九专属Token' : '点击获取Token' }}</div>
<div class="clickGetCount">
{{
activeTab === "deepNine" ? "深度九专属Token" : "点击获取Token"
}}
</div>
</div>
<div class="backToHomeBtn" @click="backToHome()">
<img src="https://d31zlh4on95l9h.cloudfront.net/images/9272c00f21a2724c3a76e375949ee1de.png" alt="返回首页"
class="backImg" />
<img
src="https://d31zlh4on95l9h.cloudfront.net/images/9272c00f21a2724c3a76e375949ee1de.png"
alt="返回首页"
class="backImg"
/>
<div class="backContent">返回首页</div>
</div>
<!-- <img
@ -1459,65 +1502,130 @@ onUnmounted(() => {
<el-main class="homepage-body">
<div class="main-wrapper">
<section class="tab-section">
<div class="tab-container" :class="{
pcTabContainer: !isMobile,
}">
<div
class="tab-container"
:class="{
pcTabContainer: !isMobile,
}"
>
<div class="tab-items-container">
<div v-for="(tab, index) in tabs" :key="tab.name" @click="setActiveTab(tab.name, index)" :class="[
'tab-item',
{ active: activeIndex === index && !isAnnouncementVisible },
]">
<div
v-for="(tab, index) in tabs"
:key="tab.name"
@click="setActiveTab(tab.name, index)"
:class="[
'tab-item',
{ active: activeIndex === index && !isAnnouncementVisible },
]"
>
<span>{{ tab.label }}</span>
</div>
</div>
<div v-if="!isMobile" class="pc-count-badge">
<div class="pc-countBtn" @click="showCount">
<div class="pc-action-btn" :class="{'dbqb-model': activeTab === 'dbqb', 'emotion-model': activeTab === 'emotion', 'deepnine-model': activeTab === 'deepNine'}">
<div
class="pc-action-btn"
:class="{
'dbqb-model': activeTab === 'dbqb',
'emotion-model': activeTab === 'emotion',
'deepnine-model': activeTab === 'deepNine',
}"
>
<div class="pc-count-number">{{ UserCount }}</div>
</div>
<div class="pc-clickGetCount">{{ activeTab === 'deepNine' ? '深度九专属Token' : '点击获取Token' }}</div>
<div class="pc-clickGetCount">
{{
activeTab === "deepNine"
? "深度九专属Token"
: "点击获取Token"
}}
</div>
</div>
<div class="pc-backToHomeBtn" @click="backToHome()">
<img src="https://d31zlh4on95l9h.cloudfront.net/images/9272c00f21a2724c3a76e375949ee1de.png"
alt="返回首页" class="pc-backImg" />
<img
src="https://d31zlh4on95l9h.cloudfront.net/images/9272c00f21a2724c3a76e375949ee1de.png"
alt="返回首页"
class="pc-backImg"
/>
<div class="pc-backContent">返回首页</div>
</div>
</div>
</div>
</section>
<!-- AIchat页面的独立滚动容器 -->
<div v-show="activeTab === 'AIchat'" class="tab-content" :class="{
pcTabContent: !isMobile,
}" ref="tabContentAIchat">
<component v-if="activeTab === 'AIchat'" :is="activeComponent" :messages="messages"
@updateMessage="updateMessage" @sendMessage="sendMessage" @ensureAIchat="ensureAIchat"
@enableInput="enableInput" />
<div
v-show="activeTab === 'AIchat'"
class="tab-content"
:class="{
pcTabContent: !isMobile,
}"
ref="tabContentAIchat"
>
<component
v-if="activeTab === 'AIchat'"
:is="activeComponent"
:messages="messages"
@updateMessage="updateMessage"
@sendMessage="sendMessage"
@ensureAIchat="ensureAIchat"
@enableInput="enableInput"
/>
</div>
<!-- AiEmotion页面的独立滚动容器 -->
<div v-show="activeTab === 'AiEmotion'" class="tab-content" :class="{
pcTabContent: !isMobile,
}" ref="tabContentAiEmotion">
<component v-if="activeTab === 'AiEmotion'" :is="activeComponent" :messages="messages"
@updateMessage="updateMessage" @sendMessage="sendMessage" @ensureAIchat="ensureAIchat"
@enableInput="enableInput" @scrollToBottom="handleAiEmotionScrollToBottom" @showCount="showCount"
ref="aiEmotionRef" />
<div
v-show="activeTab === 'AiEmotion'"
class="tab-content"
:class="{
pcTabContent: !isMobile,
}"
ref="tabContentAiEmotion"
>
<component
v-if="activeTab === 'AiEmotion'"
:is="activeComponent"
:messages="messages"
@updateMessage="updateMessage"
@sendMessage="sendMessage"
@ensureAIchat="ensureAIchat"
@enableInput="enableInput"
@scrollToBottom="handleAiEmotionScrollToBottom"
@showCount="showCount"
ref="aiEmotionRef"
/>
</div>
<!-- deepNine页面的独立滚动容器 -->
<div v-show="activeTab === 'deepNine'" class="tab-content" :class="{
pcTabContent: !isMobile,
}" ref="tabContentDeepNine">
<component v-if="activeTab === 'deepNine'" :is="activeComponent" :messages="messages"
@updateMessage="updateMessage" @sendMessage="sendMessage" @ensureAIchat="ensureAIchat"
@enableInput="enableInput" @scrollToBottom="handleDeepNineScrollToBottom" @showCount="showCount"
ref="deepNineRef" />
<div
v-show="activeTab === 'deepNine'"
class="tab-content"
:class="{
pcTabContent: !isMobile,
}"
ref="tabContentDeepNine"
>
<component
v-if="activeTab === 'deepNine'"
:is="activeComponent"
:messages="messages"
@updateMessage="updateMessage"
@sendMessage="sendMessage"
@ensureAIchat="ensureAIchat"
@enableInput="enableInput"
@scrollToBottom="handleDeepNineScrollToBottom"
@showCount="showCount"
ref="deepNineRef"
/>
</div>
</div>
</el-main>
<!-- 尾部 问题输入框 深度思考 多语言 语音播报 -->
<el-footer class="homepage-footer" :class="{
pcFooter: !isMobile,
}" id="input">
<el-footer
class="homepage-footer"
:class="{
pcFooter: !isMobile,
}"
id="input"
>
<!-- 第一行按钮 -->
<div class="footer-first-line">
<div class="left-group">
@ -1527,14 +1635,32 @@ onUnmounted(() => {
<!-- PC端按钮 -->
<template v-if="!isMobile">
<!-- 夺宝奇兵大模型按钮 -->
<img :src="activeTab === 'AIchat' ? dbqbButton01 : dbqbButton02" @click="setActiveTab('AIchat', 0)"
class="action-btn model-btn" alt="夺宝奇兵大模型" />
<img
:src="activeTab === 'AIchat' ? dbqbButton01 : dbqbButton02"
@click="setActiveTab('AIchat', 0)"
class="action-btn model-btn"
alt="夺宝奇兵大模型"
/>
<!-- AI情绪大模型按钮 -->
<img :src="activeTab === 'AiEmotion' ? emotionButton01 : emotionButton02
" @click="setActiveTab('AiEmotion', 1)" class="action-btn model-btn" alt="AI情绪大模型" />
<img
:src="
activeTab === 'AiEmotion' ? emotionButton01 : emotionButton02
"
@click="setActiveTab('AiEmotion', 1)"
class="action-btn model-btn"
alt="AI情绪大模型"
/>
<!-- 深度九大模型按钮 -->
<img :src="activeTab === 'deepNine' ? 'https://d31zlh4on95l9h.cloudfront.net/images/07349ebc846a6772b1ab8a47b54635ff.png' : 'https://d31zlh4on95l9h.cloudfront.net/images/29f0ad8e4e47f58952cc4a957ce9db10.png'
" @click="setActiveTab('deepNine', 2)" class="action-btn model-btn" alt="深度九大模型" />
<img
:src="
activeTab === 'deepNine'
? 'https://d31zlh4on95l9h.cloudfront.net/images/07349ebc846a6772b1ab8a47b54635ff.png'
: 'https://d31zlh4on95l9h.cloudfront.net/images/29f0ad8e4e47f58952cc4a957ce9db10.png'
"
@click="setActiveTab('deepNine', 2)"
class="action-btn model-btn"
alt="深度九大模型"
/>
</template>
<!-- 手机端下拉选择 - 自定义组件 -->
@ -1545,8 +1671,15 @@ onUnmounted(() => {
<img :src="getSelectedOptionImage()" class="option-image" />
<span>{{ getSelectedOptionLabel() }}</span>
</div>
<div class="dropdown-arrow" :class="{ 'arrow-up': isDropdownOpen }">
<img src="https://d31zlh4on95l9h.cloudfront.net/images/5f96dfcbff643cbbcf0f2790dbb4e54a.png" style="width: 24px;height: 24px;object-fit: contain;" alt="箭头">
<div
class="dropdown-arrow"
:class="{ 'arrow-up': isDropdownOpen }"
>
<img
src="https://d31zlh4on95l9h.cloudfront.net/images/5f96dfcbff643cbbcf0f2790dbb4e54a.png"
style="width: 24px; height: 24px; object-fit: contain"
alt="箭头"
/>
</div>
</div>
<div class="custom-select-dropdown" v-if="isDropdownOpen">
@ -1554,7 +1687,9 @@ onUnmounted(() => {
v-for="option in modelOptions"
:key="option.value"
class="custom-select-option"
:class="{ 'option-selected': activeTabMobile === option.value }"
:class="{
'option-selected': activeTabMobile === option.value,
}"
@click="selectOption(option.value)"
>
<div class="select-option-with-image">
@ -1581,45 +1716,81 @@ onUnmounted(() => {
<div class="footer-second-line">
<!-- <img :src="msgBtn" class="msg-icon" /> -->
<div class="input-container">
<el-input type="textarea" v-model="message" @focus="onFocus" @blur="onBlur"
:autosize="{ minRows: 1, maxRows: 4 }" class="msg-input" @keydown.enter.exact.prevent="
<el-input
type="textarea"
v-model="message"
@focus="onFocus"
@blur="onBlur"
:autosize="{ minRows: 1, maxRows: 4 }"
class="msg-input"
@keydown.enter.exact.prevent="
isLoading || isInputDisabled ? null : sendMessage()
" :disabled="isInputDisabled" resize="none" :class="{ input: !message && !inputing }"
@compositionstart="inputing = true" @compositionend="inputing = false">
"
:disabled="isInputDisabled"
resize="none"
:class="{ input: !message && !inputing }"
@compositionstart="inputing = true"
@compositionend="inputing = false"
>
</el-input>
<img :src="isInputDisabled
? 'https://d31zlh4on95l9h.cloudfront.net/images/aa192bcbc1682c97e1bc6fb422f2afff.png'
: 'https://d31zlh4on95l9h.cloudfront.net/images/e6ec2ae238ced85b74e0912e988f243e.png'
" @click="sendMessage" class="action-btn send-btn-inner" :style="{
<img
:src="
isInputDisabled
? 'https://d31zlh4on95l9h.cloudfront.net/images/aa192bcbc1682c97e1bc6fb422f2afff.png'
: 'https://d31zlh4on95l9h.cloudfront.net/images/e6ec2ae238ced85b74e0912e988f243e.png'
"
@click="sendMessage"
class="action-btn send-btn-inner"
:style="{
opacity: isInputDisabled ? 0.5 : 1,
cursor: isInputDisabled ? 'not-allowed' : 'pointer',
}" />
}"
/>
</div>
</div>
</el-footer>
</el-container>
<el-container v-else class="main-container" :class="{
collapsed: historyRecordRef?.isCollapsed && !isMobile,
unCollapsed: !historyRecordRef?.isCollapsed && !isMobile,
}">
<el-container
v-else
class="main-container"
:class="{
collapsed: historyRecordRef?.isCollapsed && !isMobile,
unCollapsed: !historyRecordRef?.isCollapsed && !isMobile,
}"
>
<el-header class="homepage-head">
<!-- logo -->
<div class="homepage-logo">
<img src="https://d31zlh4on95l9h.cloudfront.net/images/4c91fce359a1c184772857594c38e3b4.png" alt="返回按钮"
class="backToHomeImg" @click="feedbackBack" />
<img
src="https://d31zlh4on95l9h.cloudfront.net/images/4c91fce359a1c184772857594c38e3b4.png"
alt="返回按钮"
class="backToHomeImg"
@click="feedbackBack"
/>
<!-- <img :src="madeInHL" alt="图片加载失败" class="logo2" /> -->
</div>
<div class="homepage-right-group">
<div class="count-badge" @click="showCount">
<img src="https://d31zlh4on95l9h.cloudfront.net/images/74e20c65c9ef2526477c63ad68698a50.png"
class="action-btn" />
<img
v-if="activeTab !== 'deepNine'"
src="https://d31zlh4on95l9h.cloudfront.net/images/74e20c65c9ef2526477c63ad68698a50.png"
class="action-btn"
/>
<img
v-else
src="https://d31zlh4on95l9h.cloudfront.net/images/4621e0d1463a13c6654fe39215ee64c2.png"
class="action-btn"
/>
<div class="count-number">{{ UserCount }}</div>
<div class="clickGetCount">点击获取Token</div>
</div>
<div class="backToHomeBtn" @click="backToHome()">
<img src="https://d31zlh4on95l9h.cloudfront.net/images/9272c00f21a2724c3a76e375949ee1de.png" alt="返回首页"
class="backImg" />
<img
src="https://d31zlh4on95l9h.cloudfront.net/images/9272c00f21a2724c3a76e375949ee1de.png"
alt="返回首页"
class="backImg"
/>
<div class="backContent">返回首页</div>
</div>
<!-- <img
@ -1647,7 +1818,12 @@ onUnmounted(() => {
<div class="changeMsg">
<div class="changeInfo">
<div class="changeImg">
<img :src="userInfo.img" alt="头像" class="changeImgClass" @error="handleImageError" />
<img
:src="userInfo.img"
alt="头像"
class="changeImgClass"
@error="handleImageError"
/>
</div>
<div class="changeContent">
<div class="changeUsername">{{ userInfo.nickname }}</div>
@ -1662,13 +1838,22 @@ onUnmounted(() => {
<div class="changeLevel">
<div class="changeLevelTitle">兑换Token</div>
<div class="changeLevelContent">
<div class="changeLevelItems" v-for="item in changeLevelList" :key="item" :class="{
changeLevelItemsActive: item.position == activeLevel.position,
}" @click="chooseLevel(item)">
<div
class="changeLevelItems"
v-for="item in changeLevelList"
:key="item"
:class="{
changeLevelItemsActive: item.position == activeLevel.position,
}"
@click="chooseLevel(item)"
>
<div class="changeLevelItem">
<div class="changeLevelItemToken">
<img src="https://d31zlh4on95l9h.cloudfront.net/images/403ef762dd2f335df3b0c9e3fe488375.png" alt="token"
class="changeLevelItemTokenImg" />
<img
src="https://d31zlh4on95l9h.cloudfront.net/images/403ef762dd2f335df3b0c9e3fe488375.png"
alt="token"
class="changeLevelItemTokenImg"
/>
{{ item.calculatedPosition }}
</div>
<div class="changeLevelItemToken">{{ item.position }} 金币</div>
@ -1690,7 +1875,12 @@ onUnmounted(() => {
<div class="changeMsg">
<div class="changeInfo">
<div class="changeImg">
<img :src="userInfo.img" alt="头像" class="changeImgClass" @error="handleImageError" />
<img
:src="userInfo.img"
alt="头像"
class="changeImgClass"
@error="handleImageError"
/>
</div>
<div class="changeContent">
<div class="changeJwcode">精网号{{ userInfo.jwcode }}</div>
@ -1707,13 +1897,22 @@ onUnmounted(() => {
</div>
<div class="changeLevelContent">
<div class="changeLevelItems" v-for="item in changeLevelList" :key="item" :class="{
changeLevelItemsActive: item.position == activeLevel.position,
}" @click="chooseLevel(item)">
<div
class="changeLevelItems"
v-for="item in changeLevelList"
:key="item"
:class="{
changeLevelItemsActive: item.position == activeLevel.position,
}"
@click="chooseLevel(item)"
>
<div class="changeLevelItem">
<div class="changeLevelItemToken">
<img src="https://d31zlh4on95l9h.cloudfront.net/images/403ef762dd2f335df3b0c9e3fe488375.png" alt="token"
class="changeLevelItemTokenImg" />
<img
src="https://d31zlh4on95l9h.cloudfront.net/images/403ef762dd2f335df3b0c9e3fe488375.png"
alt="token"
class="changeLevelItemTokenImg"
/>
{{ item.calculatedPosition }}
</div>
<div class="changeLevelItemToken">{{ item.position }} 金币</div>
@ -1730,7 +1929,11 @@ onUnmounted(() => {
<div class="changeBtn" @click="changeToken">立即兑换</div>
</el-dialog>
<el-dialog v-model="rechargeDialogVisible" :width="isMobile ? '60%' : '30%'" :show-close="false">
<el-dialog
v-model="rechargeDialogVisible"
:width="isMobile ? '60%' : '30%'"
:show-close="false"
>
<div class="rechargeDialogTitle">温馨提示</div>
<div class="rechargeDialogContent">
尊敬的用户您好您当前的金币余额不足无法进行兑换可充值金币后进行兑换点击下方的前往充值可进行充值
@ -1738,13 +1941,21 @@ onUnmounted(() => {
<div class="rechargeDialogBtnGroup">
<div class="recharge" @click="goRecharge">前往充值</div>
<div class="rechargeDialogCancel" @click="rechargeDialogVisible = false">
<div
class="rechargeDialogCancel"
@click="rechargeDialogVisible = false"
>
取消
</div>
</div>
</el-dialog>
<el-dialog v-model="confirmDialogVisible" :width="isMobile ? '60%' : '30%'" :show-close="false" align-center="true">
<el-dialog
v-model="confirmDialogVisible"
:width="isMobile ? '60%' : '30%'"
:show-close="false"
align-center="true"
>
<div class="confirmDialogTitle">兑换</div>
<div class="confirmDialogContent">
尊敬的用户您好您确认要花费{{ activeLevel.position }}金币兑换{{
@ -1759,25 +1970,42 @@ onUnmounted(() => {
</div>
</el-dialog>
<el-dialog v-model="changeSuccessDialogVisible" :width="isMobile ? '60%' : '30%'" :show-close="false"
class="changeSuccessDialog" align-center center>
<el-dialog
v-model="changeSuccessDialogVisible"
:width="isMobile ? '60%' : '30%'"
:show-close="false"
class="changeSuccessDialog"
align-center
center
>
<div class="changeSuccessDialogTitle">
<img v-if="!isMobile" src="https://d31zlh4on95l9h.cloudfront.net/images/84edd341b2ddec464fc4475254f7a309.png"
style="scale: 0.7" alt="token图标" />
<img
v-if="!isMobile"
src="https://d31zlh4on95l9h.cloudfront.net/images/84edd341b2ddec464fc4475254f7a309.png"
style="scale: 0.7"
alt="token图标"
/>
兑换成功
</div>
<div class="changeSuccessDialogContent">
尊敬的用户恭喜您成功兑换{{ activeLevel.calculatedPosition }} Token
</div>
<div class="changeSuccessDialogFooter">
<button class="confirmButton" @click="changeSuccessDialogVisible = false">
<button
class="confirmButton"
@click="changeSuccessDialogVisible = false"
>
确定
</button>
</div>
</el-dialog>
<!-- Token规则提示框 -->
<div v-if="tokenRuleDialogVisible" class="tokenRuleDialog" @click="closeTokenRuleDialog">
<div
v-if="tokenRuleDialogVisible"
class="tokenRuleDialog"
@click="closeTokenRuleDialog"
>
<div class="tokenRuleDialogContent" @click.stop>
<div class="tokenRuleDialogClose" @click="closeTokenRuleDialog">
<el-icon>
@ -1790,6 +2018,10 @@ onUnmounted(() => {
<div class="tokenRuleSectionTitle">Token消耗规则</div>
<div class="tokenRuleItem">
"夺宝奇兵大模型""AI情绪大模型"中搜索股票消耗普通Token"深度九大模型"中搜索股票消耗专属Token
</div>
<div class="tokenRuleItem">
"夺宝奇兵大模型""AI情绪大模型""深度九大模型"中搜索股票若搜索成功内容正常生成则会消耗1Token
</div>
<div class="tokenRuleItem">
@ -1800,14 +2032,14 @@ onUnmounted(() => {
搜索同一只股票产出内容相同时只扣除1Token
</div>
<div class="tokenRuleItem">
"夺宝奇兵""AI小财神"中Token是互通的
"夺宝奇兵"中的Token"AI小财神"的普通Token是互通的
</div>
</div>
<div class="tokenRuleSection">
<div class="tokenRuleSectionTitle">Token兑换规则</div>
<div class="tokenRuleItem">
点击右上角"获取Token"即可进入Token兑换页进行金币兑换Token
点击右上角"获取Token"即可进入Token兑换页进行金币兑换Token只能兑换普通Token
</div>
<div class="tokenRuleItem">
金币兑换Token的比例为1金币=1Token一经兑换不予退还
@ -3024,7 +3256,7 @@ body {
align-items: center;
justify-content: space-between;
padding: 8px 12px;
background: #3549B9;
background: #3549b9;
color: white;
border-radius: 4px;
cursor: pointer;
@ -3048,7 +3280,7 @@ body {
width: 100%;
max-height: 200px;
overflow-y: auto;
background: #3549B9;
background: #3549b9;
border-radius: 4px;
box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.15);
z-index: 100;
@ -3067,7 +3299,7 @@ body {
}
.option-selected {
background-color: #6A00FF;
background-color: #6a00ff;
color: white;
font-weight: 500;
}

Loading…
Cancel
Save