| <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>
            <scroll-view class="meaning-scroll-container" scroll-y="true" :show-scrollbar="false" :enhanced="true">                <view class="meaning-content">                    <image v-if="currentWordMeaning.image" class="meaning-image" :src="currentWordMeaning.image"                        mode="widthFix" />
                    <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" v-if="currentWordMeaning.phonetic" />                            <text class="phonetic-text" v-if="currentWordMeaning.phonetic">{{ currentWordMeaning.phonetic }}</text>                        </view>                        <view class="word-meaning">                            <text class="part-of-speech" v-if="currentWordMeaning.partOfSpeech">{{ currentWordMeaning.partOfSpeech }}</text>                            <text class="meaning-text" v-if="currentWordMeaning.meaning">{{ currentWordMeaning.meaning }}</text>                        </view>                    </view>
                    <view class="knowledge-gain" v-if="currentWordMeaning.knowledgeGain">                        <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>            </scroll-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;    display: flex;    flex-direction: column;    max-height: 80vh;}
.meaning-scroll-container {    flex: 1;    height: 60vh;}
.meaning-header {    display: flex;    justify-content: space-between;    align-items: center;    padding: 32rpx;    border-bottom: 2rpx solid #EEEEEE;    flex-shrink: 0;}
.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>
 |