product-link.vue 1.99 KB
<template>
    <a-link :href="href" :yas="yas" :yas-f="yasF" :yas-i="yasI">
        <slot></slot>
    </a-link>
</template>

<script>
import {mapState} from 'vuex';
export default {
    name: 'ProductLink',
    data() {
        return {
            href: ''
        };
    },
    props: {
        value: [Object],
        yas: Object,
        yasF: Number,
        yasI: Number
    },
    computed: {
        ...mapState(['yoho'])
    },
    created() {
        if (this.value) {
            this.getLink(this.value);
        }
    },
    methods: {
        getLink(product) {
            let {product_skn} = product;
            let href = `/product/pro_${product_skn}.html`;

            const pageNameMap = {
                'channel.home': 'FP_BLK_Home_h5',
                'channel.channelHome.channelMen': 'FP_BLK_MenHome_h5',
                'channel.channelHome.channelWomen': 'FP_BLK_WomenHome_h5'
            };

            let from_page_name = this.$route.name;

            if (this.yoho) {
                const prefix = this.yoho.env.isiOS ? 'i' : (this.yoho.env.isAndroid ? 'a' : '');
                from_page_name = pageNameMap[this.$route.name] ? `${prefix}${pageNameMap[this.$route.name]}` :
                    this.$route.name;
            }

            let from_page_param = Object.keys(this.$route.query).length ? this.$route.query : void 0;
            if ((this.$yoho && this.$yoho.isYohoBuy) || this.yoho.env.isYohoBuy) {
                let goParams = {
                    action: 'go.productDetail',
                    params: {
                        product_skn: product_skn,
                        from_page_name: from_page_name,
                        from_page_param
                    }
                };

                href += `?openby:yohobuy=${JSON.stringify(goParams)}`;
            }

            this.href = href;
        }
    },
    watch: {
        value(val) {
            if (val) {
                this.getLink(val);
            }
        }
    }
};
</script>

<style>

</style>