brand-cate.vue 7.76 KB
<template>
    <div class="cate-page" id='cate-page'>
        <div class="cate-container clearfix">
            <div class="content" style="height: 522px;">
                <ul class="primary-level">
                    <li v-for="(index, ca) in cateNavLeftData" v-bind:class="{focus: index === leftcurrent}" class="p-level-item" v-on:click='cateNavLeftFun(index, ca.relationParameter.sort, ca.categoryName)'>
                        {{ca.categoryName}}
                    </li>
                </ul>
                <div class="sub-level-container">
                    <ul class="sub-level">
                        <li >
                            <a v-if="jump" href="/list?sort={{rightAll.sortId}}&sort_name=全部{{rightAll.categoryName}}&gender={{gender}}">全部{{rightAll.categoryName}}</a>
                            <a v-else @click="noJumpReturn(rightAll.sortId, '全部' + rightAll.categoryName)">全部{{rightAll.categoryName}}</a>
                        </li>
                    </ul>
                    <ul class="sub-level">
                        <li v-for="sub in cateNavRightData">
                            <a v-if="jump" href="/list?sort={{sub.relationParameter.sort}}&sort_name={{sub.categoryName}}&gender={{gender}}">{{sub.categoryName}}</a>
                            <a v-else @click="noJumpReturn(sub.relationParameter.sort, sub.categoryName)">{{sub.categoryName}}</a>
                        </li>
                    </ul>
                </div>
            </div>
        </div><!--/end cate-container-->
    </div>
</template>
<style>
.cate-page {
    font-size: 36px;
    font-family: helvetica, Arial, "黑体";

    .cate-container {
        margin-top: 80px;
    }

    ul,
    li {
        margin: 0;
        padding: 0;
        list-style: none;
    }

    .search-input {
        position: relative;
        background-color: #f8f8f8;
        padding: 13px 20px;

        p {
            box-sizing: border-box;
            width: 100%;
            height: 60px;
            line-height: 60px;
            border: none;
            padding-left: 66px;
            border-radius: 60px;
            font-size: 26px;
            background: #fff;
            color: #999;
        }
    }

    .search-icon {
        position: absolute;
        top: 0;
        bottom: 0;
        left: 43px;
        line-height: 86px;
        color: #999;
    }

    .cate-nav {
        height: 120px;
        border-bottom: 1px solid #e6e6e6;
        font-size: 24px;

        li {
            display: block;
            box-sizing: border-box;
            float: left;
            height: 100%;
            padding: 20px 0;
            width: 25%;
            text-align: center;
            color: #999;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;

            &:last-child {
                border-right: none;
            }

            &.focus {
                color: #000;

                span {
                    border-bottom: 4px solid #000;
                    font-weight: bold;
                }
            }

            &.bytouch {
                background: #eee;
            }
        }

        span {
            line-height: 80px;
            padding-bottom: 10px;
        }

        li:last-child span {
            border-right: 0;
        }
    }

    .content {
        &.hide {
            display: none;
        }
    }

    .primary-level {
        float: left;
        box-sizing: border-box;
        width: 45%;

        > li {
            height: 120px;
            line-height: 120px;
            padding: 0 32px;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
            border-bottom: 1px solid #e6e6e6;
            user-select: none;

            &.focus {
                background-color: #fff;

                &:after {
                    content: "";
                    width: 0;
                    height: 0;
                    border-top: 20px solid transparent;
                    border-bottom: 20px solid transparent;
                    border-right: 20px solid #efefef;
                    position: absolute;
                    margin-top: 32px;
                    right: 55%;
                }
            }

            &.highlight {
                background-color: #eee;
            }
        }
    }

    .sub-level-container {
        float: left;
        box-sizing: border-box;
        background: #f6f6f6;
        width: 55%;
        height: 100%;
    }

    .sub-level {
        width: 100%;
        background-color: #f6f6f6;
        position: relative;

        &.hide {
            display: none;
        }

        > li {
            box-sizing: border-box;
            height: 110px;
            line-height: 110px;
            border-bottom: 1px solid #e6e6e6;
            padding-left: 20px;
            user-select: none;

            &.highlight {
                background: #eee;
            }

            &:hover {
                background-color: #efefef;
            }
        }

        a {
            display: block;
            height: 100%;
            width: 100%;
            color: #000;
        }
    }
}
</style>
<script>
    const bus = require('common/vue-bus');

    const channelTrans = {
        men: {
            key: 'MEN男士',
            code: '1,3'
        },
        women: {
            key: 'WOMEN女士',
            code: '2,3'
        },
        lifestyle: {
            key: 'LIFESTYLE生活',
            code: '1,2,3'
        }
    };

    module.exports = {
        props: {
            category: {
                type: Object
            },
            jump: {
                type: Boolean
            }
        },
        data() {
            return {
                brandCate: [], // 频道切换时取数据使用
                cateNavLeftData: [], // 左侧分类数据
                cateNavRightData: [], // 右侧分类数据
                leftcurrent: 0, // 标记当前左侧选中条目
                gender: '1,2,3', // 跳转到商品列表页的参数
                rightAll: {} // 全部XX
            };
        },
        watch: {
            category() {
                this.$set('brandCate', this.category);
                this.$set('cateNavLeftData', this.category['MEN男士']);
                this.$set('cateNavRightData', this.category['MEN男士'] ? this.category['MEN男士'][0].sub : []);

                this.$set('rightAll', this.category['MEN男士'] ? {
                    sortId: this.category['MEN男士'][0].relationParameter.sort,
                    categoryName: this.category['MEN男士'][0].categoryName
                } : {});
            }
        },
        methods: {
            cateNavLeftFun(index, categoryId, categoryName) {
                this.leftcurrent = index;
                this.cateNavRightData = this.cateNavLeftData[index].sub;
                this.rightAll = {
                    sortId: categoryId,
                    categoryName: categoryName
                };
            },

            /* 筛选列表使用返回值 */
            noJumpReturn(categoryId, categoryName) {
                bus.$emit('category.result', {
                    id: categoryId,
                    name: categoryName
                });
            }
        },
        created() {
            bus.$on('channel.change', (page, channel) => {
                this.gender = channelTrans[channel].code;
                this.cateNavLeftData = this.brandCate[channelTrans[channel].key];
                this.cateNavRightData = this.cateNavLeftData ? this.cateNavLeftData[0].sub : [];
                this.rightAll = {
                    sortId: this.cateNavLeftData[0].relationParameter.sort,
                    categoryName: this.cateNavLeftData[0].categoryName
                };
            });
        }
    };
</script>