<template>
|
|
<uv-popup
|
|
mode="bottom"
|
|
ref="meaningPopup"
|
|
round="32rpx"
|
|
bg-color="#FFFFFF"
|
|
:overlay="true"
|
|
safeAreaInsetBottom
|
|
>
|
|
<view class="meaning-popup" v-if="currentWordMeaning">
|
|
<view class="meaning-header">
|
|
<view class="close-btn" @click="closeMeaningPopup">
|
|
<text class="close-text">关闭</text>
|
|
</view>
|
|
<view class="meaning-title">释义</view>
|
|
<view style="width: 80rpx;"></view>
|
|
</view>
|
|
|
|
<view class="meaning-content">
|
|
<image
|
|
v-if="currentWordMeaning.image"
|
|
class="meaning-image"
|
|
:src="currentWordMeaning.image"
|
|
mode="aspectFill"
|
|
/>
|
|
|
|
<view class="word-info">
|
|
<view class="word-main">
|
|
<text class="word-text">{{ currentWordMeaning.word }}</text>
|
|
</view>
|
|
<view class="phonetic-container">
|
|
<uv-icon
|
|
name="volume-fill"
|
|
size="16"
|
|
color="#007AFF"
|
|
class="speaker-icon"
|
|
@click="repeatWordAudio"
|
|
/>
|
|
<text class="phonetic-text">{{ currentWordMeaning.phonetic }}</text>
|
|
</view>
|
|
<view class="word-meaning">
|
|
<text class="part-of-speech">{{ currentWordMeaning.partOfSpeech }}</text>
|
|
<text class="meaning-text">{{ currentWordMeaning.meaning }}</text>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="knowledge-gain">
|
|
<view class="knowledge-header">
|
|
<image src="/static/knowledge-icon.png" class="knowledge-icon" mode="aspectFill" />
|
|
<text class="knowledge-title">知识收获</text>
|
|
</view>
|
|
<text class="knowledge-content">{{ currentWordMeaning.knowledgeGain }}</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</uv-popup>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
name: 'MeaningPopup',
|
|
props: {
|
|
currentWordMeaning: {
|
|
type: Object,
|
|
default: null
|
|
}
|
|
},
|
|
methods: {
|
|
open() {
|
|
if (this.$refs.meaningPopup) {
|
|
this.$refs.meaningPopup.open()
|
|
}
|
|
},
|
|
close() {
|
|
if (this.$refs.meaningPopup) {
|
|
this.$refs.meaningPopup.close()
|
|
}
|
|
},
|
|
closeMeaningPopup() {
|
|
this.$emit('close-meaning-popup')
|
|
this.close()
|
|
},
|
|
repeatWordAudio() {
|
|
this.$emit('repeat-word-audio')
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
/* 释义弹窗样式 */
|
|
.meaning-popup {
|
|
background-color: #FFFFFF;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.meaning-header {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
padding: 32rpx;
|
|
border-bottom: 2rpx solid #EEEEEE;
|
|
}
|
|
|
|
.close-btn {
|
|
width: 80rpx;
|
|
}
|
|
|
|
.close-text {
|
|
font-family: PingFang SC;
|
|
font-size: 32rpx;
|
|
color: #8b8b8b;
|
|
}
|
|
|
|
.meaning-title {
|
|
font-family: PingFang SC;
|
|
font-weight: 500;
|
|
font-size: 34rpx;
|
|
color: #181818;
|
|
}
|
|
|
|
.meaning-content {
|
|
padding: 32rpx;
|
|
}
|
|
|
|
.meaning-image {
|
|
width: 670rpx;
|
|
height: 268rpx;
|
|
border-radius: 24rpx;
|
|
margin-bottom: 32rpx;
|
|
}
|
|
|
|
.word-info {
|
|
margin-bottom: 32rpx;
|
|
}
|
|
|
|
.word-main {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 16rpx;
|
|
margin-bottom: 8rpx;
|
|
}
|
|
|
|
.word-text {
|
|
font-family: PingFang SC;
|
|
font-weight: 500;
|
|
font-size: 40rpx;
|
|
color: #181818;
|
|
}
|
|
|
|
.phonetic-container {
|
|
display: flex;
|
|
gap: 24rpx;
|
|
align-items: center;
|
|
|
|
.speaker-icon {
|
|
cursor: pointer;
|
|
transition: opacity 0.2s ease;
|
|
padding: 8rpx;
|
|
border-radius: 8rpx;
|
|
|
|
&:hover {
|
|
opacity: 0.7;
|
|
background-color: rgba(0, 122, 255, 0.1);
|
|
}
|
|
}
|
|
|
|
.phonetic-text {
|
|
font-family: PingFang SC;
|
|
font-size: 28rpx;
|
|
color: #262626;
|
|
margin-bottom: 16rpx;
|
|
}
|
|
}
|
|
|
|
.word-meaning {
|
|
display: flex;
|
|
gap: 16rpx;
|
|
}
|
|
|
|
.part-of-speech {
|
|
font-family: PingFang SC;
|
|
font-size: 28rpx;
|
|
color: #262626;
|
|
}
|
|
|
|
.meaning-text {
|
|
font-family: PingFang SC;
|
|
font-size: 28rpx;
|
|
color: #181818;
|
|
flex: 1;
|
|
}
|
|
|
|
.knowledge-gain {
|
|
background: linear-gradient(180deg, #DEFFFF 0%, #FBFEFF 22.65%, #F0FBFF 100%);
|
|
border-radius: 24rpx;
|
|
padding: 32rpx 40rpx;
|
|
}
|
|
|
|
.knowledge-header {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 16rpx;
|
|
margin-bottom: 20rpx;
|
|
}
|
|
|
|
.knowledge-icon {
|
|
width: 48rpx;
|
|
height: 48rpx;
|
|
}
|
|
|
|
.knowledge-title {
|
|
font-family: PingFang SC;
|
|
font-weight: 600;
|
|
font-size: 30rpx;
|
|
color: #3B3D3D;
|
|
}
|
|
|
|
.knowledge-content {
|
|
font-family: PingFang SC;
|
|
font-size: 28rpx;
|
|
color: #4f4f4f;
|
|
line-height: 48rpx;
|
|
}
|
|
</style>
|