|
@ -61,6 +61,7 @@ const historyRecordRef = ref(null); |
|
|
const { getQueryVariable, setActiveTabIndex, getUserInfo } = useDataStore(); |
|
|
const { getQueryVariable, setActiveTabIndex, getUserInfo } = useDataStore(); |
|
|
const dataStore = useDataStore(); |
|
|
const dataStore = useDataStore(); |
|
|
const chatStore = useChatStore(); |
|
|
const chatStore = useChatStore(); |
|
|
|
|
|
const deepNineStore = useDeepNineStore(); |
|
|
// 变量 |
|
|
// 变量 |
|
|
// 音频管理 |
|
|
// 音频管理 |
|
|
const emotionAudioStore = useEmotionAudioStore(); |
|
|
const emotionAudioStore = useEmotionAudioStore(); |
|
@ -105,21 +106,24 @@ const isDropdownOpen = ref(false); |
|
|
|
|
|
|
|
|
// 模型选项数据 |
|
|
// 模型选项数据 |
|
|
const modelOptions = [ |
|
|
const modelOptions = [ |
|
|
{ |
|
|
|
|
|
label: "夺宝奇兵大模型", |
|
|
|
|
|
value: "AIchat", |
|
|
|
|
|
image: "https://d31zlh4on95l9h.cloudfront.net/images/0389f08c458c20b715be7acebf7a8eb2.png" |
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
label: "夺宝奇兵大模型", |
|
|
|
|
|
value: "AIchat", |
|
|
|
|
|
image: |
|
|
|
|
|
"https://d31zlh4on95l9h.cloudfront.net/images/0389f08c458c20b715be7acebf7a8eb2.png", |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
label: "AI情绪大模型", |
|
|
|
|
|
value: "AiEmotion", |
|
|
|
|
|
image: |
|
|
|
|
|
"https://d31zlh4on95l9h.cloudfront.net/images/aed3597ea187c5af6c88d5a5c67fc9c1.png", |
|
|
}, |
|
|
}, |
|
|
{ |
|
|
|
|
|
label: "AI情绪大模型", |
|
|
|
|
|
value: "AiEmotion", |
|
|
|
|
|
image: "https://d31zlh4on95l9h.cloudfront.net/images/aed3597ea187c5af6c88d5a5c67fc9c1.png" |
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
label: "深度九大模型", |
|
|
|
|
|
value: "deepNine", |
|
|
|
|
|
image: |
|
|
|
|
|
"https://d31zlh4on95l9h.cloudfront.net/images/35bf808538183be0062e4647570a9abd.png", |
|
|
}, |
|
|
}, |
|
|
{ |
|
|
|
|
|
label: "深度九大模型", |
|
|
|
|
|
value: "deepNine", |
|
|
|
|
|
image: "https://d31zlh4on95l9h.cloudfront.net/images/35bf808538183be0062e4647570a9abd.png" |
|
|
|
|
|
} |
|
|
|
|
|
]; |
|
|
]; |
|
|
|
|
|
|
|
|
// 监听activeTab变化,同步到activeTabMobile |
|
|
// 监听activeTab变化,同步到activeTabMobile |
|
@ -136,31 +140,35 @@ const toggleDropdown = () => { |
|
|
const selectOption = (value) => { |
|
|
const selectOption = (value) => { |
|
|
activeTabMobile.value = value; |
|
|
activeTabMobile.value = value; |
|
|
isDropdownOpen.value = false; |
|
|
isDropdownOpen.value = false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const tabIndexMap = { |
|
|
const tabIndexMap = { |
|
|
"AIchat": 0, |
|
|
|
|
|
"AiEmotion": 1, |
|
|
|
|
|
"deepNine": 2 |
|
|
|
|
|
|
|
|
AIchat: 0, |
|
|
|
|
|
AiEmotion: 1, |
|
|
|
|
|
deepNine: 2, |
|
|
}; |
|
|
}; |
|
|
setActiveTab(value, tabIndexMap[value]); |
|
|
setActiveTab(value, tabIndexMap[value]); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
// 获取当前选中选项的标签 |
|
|
// 获取当前选中选项的标签 |
|
|
const getSelectedOptionLabel = () => { |
|
|
const getSelectedOptionLabel = () => { |
|
|
const option = modelOptions.find(opt => opt.value === activeTabMobile.value); |
|
|
|
|
|
|
|
|
const option = modelOptions.find( |
|
|
|
|
|
(opt) => opt.value === activeTabMobile.value |
|
|
|
|
|
); |
|
|
return option ? option.label : "请选择模型"; |
|
|
return option ? option.label : "请选择模型"; |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
// 获取当前选中选项的图片 |
|
|
// 获取当前选中选项的图片 |
|
|
const getSelectedOptionImage = () => { |
|
|
const getSelectedOptionImage = () => { |
|
|
const option = modelOptions.find(opt => opt.value === activeTabMobile.value); |
|
|
|
|
|
|
|
|
const option = modelOptions.find( |
|
|
|
|
|
(opt) => opt.value === activeTabMobile.value |
|
|
|
|
|
); |
|
|
return option ? option.image : ""; |
|
|
return option ? option.image : ""; |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
// 点击外部关闭下拉菜单 |
|
|
// 点击外部关闭下拉菜单 |
|
|
onMounted(() => { |
|
|
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) { |
|
|
if (container && !container.contains(e.target) && isDropdownOpen.value) { |
|
|
isDropdownOpen.value = false; |
|
|
isDropdownOpen.value = false; |
|
|
} |
|
|
} |
|
@ -170,9 +178,9 @@ onMounted(() => { |
|
|
// 手机端选择器变化处理(保留原函数以兼容其他地方可能的调用) |
|
|
// 手机端选择器变化处理(保留原函数以兼容其他地方可能的调用) |
|
|
const handleMobileTabChange = (value) => { |
|
|
const handleMobileTabChange = (value) => { |
|
|
const tabIndexMap = { |
|
|
const tabIndexMap = { |
|
|
"AIchat": 0, |
|
|
|
|
|
"AiEmotion": 1, |
|
|
|
|
|
"deepNine": 2 |
|
|
|
|
|
|
|
|
AIchat: 0, |
|
|
|
|
|
AiEmotion: 1, |
|
|
|
|
|
deepNine: 2, |
|
|
}; |
|
|
}; |
|
|
setActiveTab(value, tabIndexMap[value]); |
|
|
setActiveTab(value, tabIndexMap[value]); |
|
|
}; |
|
|
}; |
|
@ -388,7 +396,6 @@ const sendMessage = async () => { |
|
|
// 获取深度九大模型的 store |
|
|
// 获取深度九大模型的 store |
|
|
const deepNineStore = useDeepNineStore(); |
|
|
const deepNineStore = useDeepNineStore(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 添加消息到深度九大模型的 store 中 |
|
|
// 添加消息到深度九大模型的 store 中 |
|
|
const messageContent = message.value; |
|
|
const messageContent = message.value; |
|
|
message.value = ""; // 清空输入框 |
|
|
message.value = ""; // 清空输入框 |
|
@ -582,21 +589,13 @@ const getCurrentScrollContainer = () => { |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
const smoothScrollToBottom = async () => { |
|
|
const smoothScrollToBottom = async () => { |
|
|
// console.log("调用滚动到底部的方法"); |
|
|
|
|
|
// await nextTick(); |
|
|
|
|
|
const container = getCurrentScrollContainer(); |
|
|
const container = getCurrentScrollContainer(); |
|
|
// console.log(container, 'container') |
|
|
|
|
|
// console.log(isScrolling.value, 'isScrolling.value') |
|
|
|
|
|
if (!container) return; |
|
|
if (!container) return; |
|
|
|
|
|
|
|
|
await nextTick(); // 确保在DOM更新后执行 |
|
|
await nextTick(); // 确保在DOM更新后执行 |
|
|
|
|
|
|
|
|
if (!isScrolling.value) { |
|
|
if (!isScrolling.value) { |
|
|
container.scrollTop = container.scrollHeight - container.offsetHeight; |
|
|
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") { |
|
|
if (activeTab.value === "AIchat" || activeTab.value === "deepNine") { |
|
|
throttledSmoothScrollToBottom(); |
|
|
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 } |
|
|
{ deep: false, immediate: true } |
|
|
); |
|
|
); |
|
@ -846,8 +856,8 @@ watch( |
|
|
activeTab.value == "AIchat" |
|
|
activeTab.value == "AIchat" |
|
|
? 1 |
|
|
? 1 |
|
|
: activeTab.value == "AiEmotion" |
|
|
: activeTab.value == "AiEmotion" |
|
|
? 2 |
|
|
|
|
|
: 3; |
|
|
|
|
|
|
|
|
? 2 |
|
|
|
|
|
: 3; |
|
|
const result = historyRecordRef.value.getHistoryList({ |
|
|
const result = historyRecordRef.value.getHistoryList({ |
|
|
model: model, |
|
|
model: model, |
|
|
token: localStorage.getItem("localToken"), |
|
|
token: localStorage.getItem("localToken"), |
|
@ -870,8 +880,6 @@ watch( |
|
|
// 其他页面时停止AiEmotion页面的高度监听器 |
|
|
// 其他页面时停止AiEmotion页面的高度监听器 |
|
|
stopAiEmotionHeightObserver(); |
|
|
stopAiEmotionHeightObserver(); |
|
|
} |
|
|
} |
|
|
// AiEmotion页面不执行自动滚动,避免刷新后滚动到底部 |
|
|
|
|
|
// setTimeout(throttledSmoothScrollToBottom, 100); |
|
|
|
|
|
}, |
|
|
}, |
|
|
{ deep: true, immediate: true } |
|
|
{ deep: true, immediate: true } |
|
|
); |
|
|
); |
|
@ -1409,37 +1417,72 @@ onUnmounted(() => { |
|
|
<template> |
|
|
<template> |
|
|
<div class="homepage" id="testId"> |
|
|
<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 次数 公告 --> |
|
|
<!-- AI小财神头部: logo 次数 公告 --> |
|
|
<el-header class="homepage-head"> |
|
|
<el-header class="homepage-head"> |
|
|
<!-- logo --> |
|
|
<!-- logo --> |
|
|
<div class="homepage-logo" v-if="isMobile"> |
|
|
<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="logo" alt="图片加载失败" class="logo1" /> |
|
|
<!-- <img :src="madeInHL" alt="图片加载失败" class="logo2" /> --> |
|
|
<!-- <img :src="madeInHL" alt="图片加载失败" class="logo2" /> --> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="homepage-right-group" v-if="isMobile"> |
|
|
<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="count-number">{{ UserCount }}</div> |
|
|
<div class="clickGetCount">{{ activeTab === 'deepNine' ? '深度九专属Token' : '点击获取Token' }}</div> |
|
|
|
|
|
|
|
|
<div class="clickGetCount"> |
|
|
|
|
|
{{ |
|
|
|
|
|
activeTab === "deepNine" ? "深度九专属Token" : "点击获取Token" |
|
|
|
|
|
}} |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="backToHomeBtn" @click="backToHome()"> |
|
|
<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 class="backContent">返回首页</div> |
|
|
</div> |
|
|
</div> |
|
|
<!-- <img |
|
|
<!-- <img |
|
@ -1459,65 +1502,130 @@ onUnmounted(() => { |
|
|
<el-main class="homepage-body"> |
|
|
<el-main class="homepage-body"> |
|
|
<div class="main-wrapper"> |
|
|
<div class="main-wrapper"> |
|
|
<section class="tab-section"> |
|
|
<section class="tab-section"> |
|
|
<div class="tab-container" :class="{ |
|
|
|
|
|
pcTabContainer: !isMobile, |
|
|
|
|
|
}"> |
|
|
|
|
|
|
|
|
<div |
|
|
|
|
|
class="tab-container" |
|
|
|
|
|
:class="{ |
|
|
|
|
|
pcTabContainer: !isMobile, |
|
|
|
|
|
}" |
|
|
|
|
|
> |
|
|
<div class="tab-items-container"> |
|
|
<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> |
|
|
<span>{{ tab.label }}</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<div v-if="!isMobile" class="pc-count-badge"> |
|
|
<div v-if="!isMobile" class="pc-count-badge"> |
|
|
<div class="pc-countBtn" @click="showCount"> |
|
|
<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 class="pc-count-number">{{ UserCount }}</div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="pc-clickGetCount">{{ activeTab === 'deepNine' ? '深度九专属Token' : '点击获取Token' }}</div> |
|
|
|
|
|
|
|
|
<div class="pc-clickGetCount"> |
|
|
|
|
|
{{ |
|
|
|
|
|
activeTab === "deepNine" |
|
|
|
|
|
? "深度九专属Token" |
|
|
|
|
|
: "点击获取Token" |
|
|
|
|
|
}} |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="pc-backToHomeBtn" @click="backToHome()"> |
|
|
<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 class="pc-backContent">返回首页</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</section> |
|
|
</section> |
|
|
<!-- AIchat页面的独立滚动容器 --> |
|
|
<!-- 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> |
|
|
</div> |
|
|
|
|
|
|
|
|
<!-- AiEmotion页面的独立滚动容器 --> |
|
|
<!-- 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> |
|
|
</div> |
|
|
<!-- deepNine页面的独立滚动容器 --> |
|
|
<!-- 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> |
|
|
</div> |
|
|
</div> |
|
|
</el-main> |
|
|
</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="footer-first-line"> |
|
|
<div class="left-group"> |
|
|
<div class="left-group"> |
|
@ -1527,14 +1635,32 @@ onUnmounted(() => { |
|
|
<!-- PC端按钮 --> |
|
|
<!-- PC端按钮 --> |
|
|
<template v-if="!isMobile"> |
|
|
<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情绪大模型按钮 --> |
|
|
<!-- 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> |
|
|
</template> |
|
|
|
|
|
|
|
|
<!-- 手机端下拉选择 - 自定义组件 --> |
|
|
<!-- 手机端下拉选择 - 自定义组件 --> |
|
@ -1545,16 +1671,25 @@ onUnmounted(() => { |
|
|
<img :src="getSelectedOptionImage()" class="option-image" /> |
|
|
<img :src="getSelectedOptionImage()" class="option-image" /> |
|
|
<span>{{ getSelectedOptionLabel() }}</span> |
|
|
<span>{{ getSelectedOptionLabel() }}</span> |
|
|
</div> |
|
|
</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> |
|
|
</div> |
|
|
<div class="custom-select-dropdown" v-if="isDropdownOpen"> |
|
|
<div class="custom-select-dropdown" v-if="isDropdownOpen"> |
|
|
<div |
|
|
|
|
|
v-for="option in modelOptions" |
|
|
|
|
|
:key="option.value" |
|
|
|
|
|
class="custom-select-option" |
|
|
|
|
|
:class="{ 'option-selected': activeTabMobile === option.value }" |
|
|
|
|
|
|
|
|
<div |
|
|
|
|
|
v-for="option in modelOptions" |
|
|
|
|
|
:key="option.value" |
|
|
|
|
|
class="custom-select-option" |
|
|
|
|
|
:class="{ |
|
|
|
|
|
'option-selected': activeTabMobile === option.value, |
|
|
|
|
|
}" |
|
|
@click="selectOption(option.value)" |
|
|
@click="selectOption(option.value)" |
|
|
> |
|
|
> |
|
|
<div class="select-option-with-image"> |
|
|
<div class="select-option-with-image"> |
|
@ -1581,45 +1716,81 @@ onUnmounted(() => { |
|
|
<div class="footer-second-line"> |
|
|
<div class="footer-second-line"> |
|
|
<!-- <img :src="msgBtn" class="msg-icon" /> --> |
|
|
<!-- <img :src="msgBtn" class="msg-icon" /> --> |
|
|
<div class="input-container"> |
|
|
<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() |
|
|
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> |
|
|
</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, |
|
|
opacity: isInputDisabled ? 0.5 : 1, |
|
|
cursor: isInputDisabled ? 'not-allowed' : 'pointer', |
|
|
cursor: isInputDisabled ? 'not-allowed' : 'pointer', |
|
|
}" /> |
|
|
|
|
|
|
|
|
}" |
|
|
|
|
|
/> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</el-footer> |
|
|
</el-footer> |
|
|
</el-container> |
|
|
</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"> |
|
|
<el-header class="homepage-head"> |
|
|
<!-- logo --> |
|
|
<!-- logo --> |
|
|
<div class="homepage-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" /> --> |
|
|
<!-- <img :src="madeInHL" alt="图片加载失败" class="logo2" /> --> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="homepage-right-group"> |
|
|
<div class="homepage-right-group"> |
|
|
<div class="count-badge" @click="showCount"> |
|
|
<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="count-number">{{ UserCount }}</div> |
|
|
<div class="clickGetCount">点击获取Token</div> |
|
|
<div class="clickGetCount">点击获取Token</div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="backToHomeBtn" @click="backToHome()"> |
|
|
<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 class="backContent">返回首页</div> |
|
|
</div> |
|
|
</div> |
|
|
<!-- <img |
|
|
<!-- <img |
|
@ -1647,7 +1818,12 @@ onUnmounted(() => { |
|
|
<div class="changeMsg"> |
|
|
<div class="changeMsg"> |
|
|
<div class="changeInfo"> |
|
|
<div class="changeInfo"> |
|
|
<div class="changeImg"> |
|
|
<div class="changeImg"> |
|
|
<img :src="userInfo.img" alt="头像" class="changeImgClass" @error="handleImageError" /> |
|
|
|
|
|
|
|
|
<img |
|
|
|
|
|
:src="userInfo.img" |
|
|
|
|
|
alt="头像" |
|
|
|
|
|
class="changeImgClass" |
|
|
|
|
|
@error="handleImageError" |
|
|
|
|
|
/> |
|
|
</div> |
|
|
</div> |
|
|
<div class="changeContent"> |
|
|
<div class="changeContent"> |
|
|
<div class="changeUsername">{{ userInfo.nickname }}</div> |
|
|
<div class="changeUsername">{{ userInfo.nickname }}</div> |
|
@ -1662,13 +1838,22 @@ onUnmounted(() => { |
|
|
<div class="changeLevel"> |
|
|
<div class="changeLevel"> |
|
|
<div class="changeLevelTitle">兑换Token</div> |
|
|
<div class="changeLevelTitle">兑换Token</div> |
|
|
<div class="changeLevelContent"> |
|
|
<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="changeLevelItem"> |
|
|
<div class="changeLevelItemToken"> |
|
|
<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 }} |
|
|
{{ item.calculatedPosition }} |
|
|
</div> |
|
|
</div> |
|
|
<div class="changeLevelItemToken">{{ item.position }} 金币</div> |
|
|
<div class="changeLevelItemToken">{{ item.position }} 金币</div> |
|
@ -1690,7 +1875,12 @@ onUnmounted(() => { |
|
|
<div class="changeMsg"> |
|
|
<div class="changeMsg"> |
|
|
<div class="changeInfo"> |
|
|
<div class="changeInfo"> |
|
|
<div class="changeImg"> |
|
|
<div class="changeImg"> |
|
|
<img :src="userInfo.img" alt="头像" class="changeImgClass" @error="handleImageError" /> |
|
|
|
|
|
|
|
|
<img |
|
|
|
|
|
:src="userInfo.img" |
|
|
|
|
|
alt="头像" |
|
|
|
|
|
class="changeImgClass" |
|
|
|
|
|
@error="handleImageError" |
|
|
|
|
|
/> |
|
|
</div> |
|
|
</div> |
|
|
<div class="changeContent"> |
|
|
<div class="changeContent"> |
|
|
<div class="changeJwcode">精网号:{{ userInfo.jwcode }}</div> |
|
|
<div class="changeJwcode">精网号:{{ userInfo.jwcode }}</div> |
|
@ -1707,13 +1897,22 @@ onUnmounted(() => { |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="changeLevelContent"> |
|
|
<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="changeLevelItem"> |
|
|
<div class="changeLevelItemToken"> |
|
|
<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 }} |
|
|
{{ item.calculatedPosition }} |
|
|
</div> |
|
|
</div> |
|
|
<div class="changeLevelItemToken">{{ item.position }} 金币</div> |
|
|
<div class="changeLevelItemToken">{{ item.position }} 金币</div> |
|
@ -1730,7 +1929,11 @@ onUnmounted(() => { |
|
|
<div class="changeBtn" @click="changeToken">立即兑换</div> |
|
|
<div class="changeBtn" @click="changeToken">立即兑换</div> |
|
|
</el-dialog> |
|
|
</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="rechargeDialogTitle">温馨提示</div> |
|
|
<div class="rechargeDialogContent"> |
|
|
<div class="rechargeDialogContent"> |
|
|
尊敬的用户您好!您当前的金币余额不足,无法进行兑换,可充值金币后进行兑换。点击下方的“前往充值”可进行充值。 |
|
|
尊敬的用户您好!您当前的金币余额不足,无法进行兑换,可充值金币后进行兑换。点击下方的“前往充值”可进行充值。 |
|
@ -1738,13 +1941,21 @@ onUnmounted(() => { |
|
|
<div class="rechargeDialogBtnGroup"> |
|
|
<div class="rechargeDialogBtnGroup"> |
|
|
<div class="recharge" @click="goRecharge">前往充值</div> |
|
|
<div class="recharge" @click="goRecharge">前往充值</div> |
|
|
|
|
|
|
|
|
<div class="rechargeDialogCancel" @click="rechargeDialogVisible = false"> |
|
|
|
|
|
|
|
|
<div |
|
|
|
|
|
class="rechargeDialogCancel" |
|
|
|
|
|
@click="rechargeDialogVisible = false" |
|
|
|
|
|
> |
|
|
取消 |
|
|
取消 |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</el-dialog> |
|
|
</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="confirmDialogTitle">兑换</div> |
|
|
<div class="confirmDialogContent"> |
|
|
<div class="confirmDialogContent"> |
|
|
尊敬的用户您好!您确认要花费{{ activeLevel.position }}金币兑换{{ |
|
|
尊敬的用户您好!您确认要花费{{ activeLevel.position }}金币兑换{{ |
|
@ -1759,25 +1970,42 @@ onUnmounted(() => { |
|
|
</div> |
|
|
</div> |
|
|
</el-dialog> |
|
|
</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"> |
|
|
<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> |
|
|
<div class="changeSuccessDialogContent"> |
|
|
<div class="changeSuccessDialogContent"> |
|
|
尊敬的用户,恭喜您成功兑换:{{ activeLevel.calculatedPosition }} Token |
|
|
尊敬的用户,恭喜您成功兑换:{{ activeLevel.calculatedPosition }} Token |
|
|
</div> |
|
|
</div> |
|
|
<div class="changeSuccessDialogFooter"> |
|
|
<div class="changeSuccessDialogFooter"> |
|
|
<button class="confirmButton" @click="changeSuccessDialogVisible = false"> |
|
|
|
|
|
|
|
|
<button |
|
|
|
|
|
class="confirmButton" |
|
|
|
|
|
@click="changeSuccessDialogVisible = false" |
|
|
|
|
|
> |
|
|
确定 |
|
|
确定 |
|
|
</button> |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
</el-dialog> |
|
|
</el-dialog> |
|
|
|
|
|
|
|
|
<!-- Token规则提示框 --> |
|
|
<!-- Token规则提示框 --> |
|
|
<div v-if="tokenRuleDialogVisible" class="tokenRuleDialog" @click="closeTokenRuleDialog"> |
|
|
|
|
|
|
|
|
<div |
|
|
|
|
|
v-if="tokenRuleDialogVisible" |
|
|
|
|
|
class="tokenRuleDialog" |
|
|
|
|
|
@click="closeTokenRuleDialog" |
|
|
|
|
|
> |
|
|
<div class="tokenRuleDialogContent" @click.stop> |
|
|
<div class="tokenRuleDialogContent" @click.stop> |
|
|
<div class="tokenRuleDialogClose" @click="closeTokenRuleDialog"> |
|
|
<div class="tokenRuleDialogClose" @click="closeTokenRuleDialog"> |
|
|
<el-icon> |
|
|
<el-icon> |
|
@ -3024,7 +3252,7 @@ body { |
|
|
align-items: center; |
|
|
align-items: center; |
|
|
justify-content: space-between; |
|
|
justify-content: space-between; |
|
|
padding: 8px 12px; |
|
|
padding: 8px 12px; |
|
|
background: #3549B9; |
|
|
|
|
|
|
|
|
background: #3549b9; |
|
|
color: white; |
|
|
color: white; |
|
|
border-radius: 4px; |
|
|
border-radius: 4px; |
|
|
cursor: pointer; |
|
|
cursor: pointer; |
|
@ -3048,7 +3276,7 @@ body { |
|
|
width: 100%; |
|
|
width: 100%; |
|
|
max-height: 200px; |
|
|
max-height: 200px; |
|
|
overflow-y: auto; |
|
|
overflow-y: auto; |
|
|
background: #3549B9; |
|
|
|
|
|
|
|
|
background: #3549b9; |
|
|
border-radius: 4px; |
|
|
border-radius: 4px; |
|
|
box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.15); |
|
|
box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.15); |
|
|
z-index: 100; |
|
|
z-index: 100; |
|
@ -3067,7 +3295,7 @@ body { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.option-selected { |
|
|
.option-selected { |
|
|
background-color: #6A00FF; |
|
|
|
|
|
|
|
|
background-color: #6a00ff; |
|
|
color: white; |
|
|
color: white; |
|
|
font-weight: 500; |
|
|
font-weight: 500; |
|
|
} |
|
|
} |
|
|