image-goods-main.vue 2.98 KB
<template>
    <div class="image-goods-main">
        <div class="skc-item"
            v-for="(good, goodIndex) in productGoods"
            :key="goodIndex">
            <div class="color-item-title">
                <span>{{good.goodsName}}({{good.factoryGoodsName}})</span>
            </div>
            <div class="upload-item" v-for="(image, imageIndex) in good.goodsImage" :key="imageIndex">
                <div class="upload-item-img">
                    <img v-if="imageIndex === 0 && image.imageUrl" :src="image.imageUrl"
                            alt=""
                            width="120px"
                            height="122px">
                    <drag-file-upload v-if="imageIndex > 0" 
                        :default-file="image.imageUrl"
                        :id="{goodIndex, imageIndex}"
                        :skn="good.productSkn"
                        @success="uploadImageSuccess"
                        @remove="uploadImageRemove">
                    </drag-file-upload>
                </div>
                <div class="upload-item-title">
                    {{imagesTitles[imageIndex]}}
                </div>
            </div>
        </div>
    </div>
</template>

<script>
export default {
    name: 'image-goods-main',
    props: {
        value: {
            type: Array,
            default() {
                return [];
            }
        }
    },
    data() {
        return {
            productGoods: this.value,
            imagesTitles: ['商品正面图*', '商品反面图', '模特图', '男生频道封面图', '女生频道封面图']
        };
    },
    methods: {
        uploadImageSuccess(data, file) {
            this.productGoods[data.goodIndex].goodsImage[data.imageIndex].imageUrl = file.url;
            this.$emit('input', this.productGoods);
        },
        uploadImageRemove(data) {
            this.productGoods[data.goodIndex].goodsImage[data.imageIndex].imageUrl = '';
            this.$emit('input', this.productGoods);
        }
    },
    watch: {
        value: {
            handler(val) {
                this.productGoods = val;
            },
            deep: true
        }
    }
};
</script>

<style lang="scss">
.image-goods-main {
    .skc-item {
        overflow: auto;
        margin-top: 20px;
    }

    .color-item-title {
        font-size: 14px;
        font-weight: bold;
        line-height: 30px;
    }

    .upload-item {
        width: 120px;
        text-align: center;
        float: left;
        margin-right: 30px;

        .upload-item-img {
            border-radius: 4px;
            overflow: hidden;
            height: 120px;
            width: 120px;
            box-sizing: border-box;

            img {
                width: 100%;
                height: 100%;
            }
        }

        .upload-item-title {
            font-size: 13px;
            line-height: 30px;
        }

        .upload-box,
        .image-purview {
            height: 120px;
            width: 120px;
        }
    }
}

</style>