shop-top.vue 2.9 KB
<template>
    <div v-if="shopInfo.isBlkShop" class="brand-top-box" :style="{ 'background-image': 'url(' + shopInfo.shopBg + ')' }">
        <div class="brand-bottom">
            <img v-if="shopInfo.shopLogo" 
                v-img-src="{src: shopInfo.shopLogo.split('?')[0] + '?imageMogr2/thumbnail/{width}x{height}', width: 120, height: 80}" :alt="shopInfo.shopName">
            <div v-else class="brand-title">{{ shopInfo.shopName }}</div>
            <hr>
            <div class="brand-intro" :class="{ 'brand-short': !showMore }">{{ shopInfo.shopIntro }}</div>
        </div>
        <div v-if="!showMore" class="showmore expand" @click="introTrans()"><span class="icon">&#xe602;</span></div>
        <div v-else class="showmore collapse" @click="introTrans()"><span class="icon">&#xe617;</span></div>
    </div>
</template>
<style>
    .brand-top-box {
        width: 100%;
        height: 468px;
        color: #fff;
        background-color: #ccc;
        position: relative;
        background-size: cover;

        .brand-bottom {
            width: 100%;
            position: absolute;
            bottom: 28px;
            padding: 0 30px;

            .brand-title {
                font-weight: 700;
                font-size: 32px;
                margin: 5px 0;
                overflow: hidden;
                white-space: nowrap;
                text-overflow: ellipsis;
                width: 100%;
            }

            img {
                width: 120px;
                height: 80px;
            }

            hr {
                width: 100%;
                border: #fff solid 1px;
                border-top: none;
                margin: 5px 0;
                margin-bottom: 28px;
            }

            .brand-intro {
                transition: height 0.6s;
                font-size: 20px;
                line-height: 32px;
                width: 90%;
                height: 220px;
                overflow-y: auto;
                display: flex;
                text-shadow: 2px 2px 4px #666;
            }

            .brand-short {
                height: 60px;
                font-size: 20px;
                line-height: 32px;
                width: 90%;
                text-overflow: ellipsis;
                overflow-y: hidden;
                -webkit-line-clamp: 2;
                -webkit-box-orient: vertical;
            }
        }

        .showmore {
            width: 60px;
            height: 60px;
            position: absolute;
            bottom: 10px;
            right: 30px;
            font-size: 32px;
        }
    }
</style>
<script>
    export default {
        props: {
            shopInfo: {
                type: Object
            }
        },
        data() {
            return {
                showMore: false
            };
        },
        methods: {
            introTrans() {
                this.showMore = this.showMore !== true;
            }
        }
    };
</script>