optimizationList.vue 8.14 KB
<template>
    <div class="optimization-list-page">

        <!-- H5唤起App组件 -->
        <call-app-box class="call-app-box" ref="callApp" v-if="!isCNLive.value && $parent.isOpenApp.value"
            :callApps="$parent.callApps">
        </call-app-box>

        <!-- 后退导航 -->
        <back-box class="back-box" :class="{'hide': $route.query.hideBack == true}" :style="'padding-top: ' + $parent.top.value + 'px'" v-if="isCNLive.value" @back="back"
            :backs="backs">
        </back-box>

        <!-- pl -->
        <div class="pl" :class="{'is-cnlive': isCNLive.value, 'is-open-app': $parent.isOpenApp.value, 'hide': $route.query.hideBack == true}" :style="'padding-top: ' + $parent.top.value + 'px'"></div>

        <!-- 主区域 -->
        <div class="main-box">

            <!-- 判断变量是否存在 -->
            <template v-if="datas">

                <!-- 区块 -->
                <div class="section" :style="{backgroundImage: 'url(' + item.img || '' + ')', backgroundColor: item.color || '#FFFFFF'}" v-for="(item, index) in datas" :key="index">

                    <!-- 主区域 -->
                    <div class="content-box">

                        <!-- 视频区块 -->
                        <div class="video-box" v-if="item.video">
                            <video class="video" controls :poster="item.video_img + SIGN.BIG">
                                <source :src="item.video" type="video/mp4" />
                            </video>
                        </div>

                        <!-- 列表区块 -->
                        <div class="list-box" v-if="item.ads">
                            <div class="item" v-for="(subItem, subIndex) in item.ads" :key="subIndex" @click="toDetail(subItem)">
                                <img :src="subItem.img + SIGN.BIG" class="list-img" />
                            </div>
                        </div>
                    </div>
                </div>
            </template>
        </div>

        <!-- 回到顶部按钮 -->
        <goto-top
            :top="parseInt(150)">
        </goto-top>
    </div>
</template>

<script>

    // 引入组件
    import { Toast, Indicator } from "mint-ui";
    import callAppBox from "@/components/callAppBox/callAppBox";
    import backBox from "@/components/backBox/backBox";
    import gotoTop from "@/components/gotoTop/gotoTop";

    export default {
        name: 'optimizationListPage',
        data () {
            return {
                title: "",          // 标题
                backs: null,        // 后退按钮组
                datas: null         // 列表数据
            }
        },
        components: {
            callAppBox,
            backBox,
            gotoTop
        },
        created() {

            // 设置标题
            this.$set(this, "title", "品质优选");

            // 判断是否在App内
            if (this.isCNLive.value) {

                // 添加后退按钮组“后退”和“分享”按钮
                this.$set(this, 'backs', {
                    title: this.title,
                    funcs: {
                        back: {
                            icon: "static/img/icon_back.png"
                        },
                        funcArray: [
                            {
                                icon: "static/img/icon_share.png",
                                func: this.toShare
                            }
                        ]
                    }
                });
            }

            // 品质优选
            this.goodQuality();
        },
        methods: {

            /**
             * 品质优选
             */
            goodQuality() {

                // 加载中提示
                Indicator.open("加载中...");

                // 获取证书请求接口
                this.http("/Api/" + this.getApiVersion().good + "/goodQuality", {
                    id: this.getStore('uid') || 0
                }, this.goodQualityCallback, {
                    method: "POST"
                });
            },

            /**
             * 品质优选回调
             * @param {Object} res [服务器返回数据]
             * @param {Object} ext [扩展参数]
             */
            goodQualityCallback(res, ext) {

                // 加载完成
                Indicator.close();

                // 返回处理
                if (res.code == 200) {

                    // 解构数据
                    let { data: datas } = res;

                    /* 获取品质优选数据 开始 */

                    this.$set(this, 'datas', datas.list);

                    /* 获取品质优选数据 结束 */

                } else if (res.code == 400) {

                    // 获取初始数据失败
                    Toast(res.message);
                } else {

                    // 获取初始数据失败
                    Toast("获取数据失败");
                }
            },

            /**
             * 跳转商品详情
             * @param {Object} item [数据对象]
             */
            toDetail(item) {

                // 判断App内
                if (this.isCNLive.value) {

                    // 判断通用跳转函数是否存在
                    if (typeof this.$parent.gotoDetail === 'function') {

                        // 通用跳转
                        this.$parent.gotoDetail(item.location);
                    }
                } else {

                    this.$nextTick(() => {

                        // 唤起App
                        if (typeof this.$parent.callAppModal === 'function' && typeof this.$refs.callApp === 'object') {

                            // 设置唤起参数
                            let options = {
                                success: this.$refs.callApp.callApp
                            }

                            // 唤起App
                            this.$parent.callAppModal(options);
                        }
                    });
                }
            },
            
            /**
             * 分享
             */
            toShare() {

                // 判断分享
                if (typeof this.$parent.toShare === 'function') {
                    this.$parent.toShare(47, this.$route.query.id || 1);
                }
            },

            /**
             * 后退
             */
            back() {
                
                // 判断是否有处理函数
                if (typeof this.$parent.back === 'function') {

                    // 后退
                    this.$parent.back();
                } else {

                    // 后退
                    window.history.go(-1);
                }
            }
        },
        head: {
            title () {
                return {
                    inner: this.title
                }
            }
        },
        watch: {

            // 设置页面标题
            title(newVal) {
                if (this.$store.state.browser.toLowerCase() == "qq" && this.$store.state.deviceType.toLowerCase() == "iphone") {
                    this.$iFrame.insertIFrame(newVal);
                } else {
                    this.$emit("updateHead");
                }
            }
        },
        mounted() {
            
            // 如果是App外,设置唤起App和微信内分享参数
            if (!this.isCNLive.value) {

                // 唤起详情页
                if (typeof this.$parent.getOpenApp === "function") {
                    this.$parent.getOpenApp({
                        type: 47,
                        id: this.$route.query.id || 1,
                        url: ""
                    });
                }
    
                // 分享详情页
                if (typeof this.$parent.getShareData === "function") {
                    this.$parent.getShareData({
                        type: 47,
                        id: this.$route.query.id || 1,
                        url: ""
                    });
                }
            }
        }
    }
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style rel="stylesheet/less" lang='less' scoped>
    @import "optimizationList";
</style>