| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 | <template>  <view class="container">    <!-- 搜索框 -->    <view class="search-wrap">      <u-search placeholder="搜索" disabled height="32" bgColor="#f2f2f2" margin="0 20rpx" :show-action="false"        @click="handleSearchClick"></u-search>    </view>    <!-- 分类内容 -->    <view class="category-box">      <!-- 左侧导航栏 -->      <scroll-view scroll-y="true" class='box-left'>        <view class="category-item" v-for="(item, index) in categoryList" :key="item.id">          <view class="item-title" :class="{ active: currentIndex === index }" @click="handleCategoryClick(index)">            <text>{{ item.name }}</text>          </view>        </view>      </scroll-view>      <!-- 右侧分类内容 -->      <scroll-view scroll-y="true" class="box-right">        <view class="category-image">          <image :showLoading="true" :src="categoryList[currentIndex].picUrl" mode='widthFix' @click="click"></image>        </view>        <view class="sub-category-box" v-for="(item, index) in categoryList[currentIndex].children" :key="item.id">          <view class="sub-category-header">            <view class="title">{{ item.name }}</view>            <view class="more" @click="handleCategory(item, 0)">查看更多</view>          </view>          <view class="sub-category-grid">            <u-grid col="3">              <u-grid-item v-for="(subItem, subIndex) in item.children" :key="subItem.id">                <view class="sub-category-item" @click="handleCategory(item, subIndex)">                  <u-icon name="photo" :size="80" v-if="subItem.picUrl === null"></u-icon>                  <image :src="subItem.picUrl" v-if="subItem.picUrl != null" mode='widthFix' />                  <text class="sub-category-title">{{ subItem.name }}</text>                </view>              </u-grid-item>            </u-grid>          </view>        </view>      </scroll-view>    </view>  </view></template><script>  import { categoryListData } from '../../api/category';  import { handleTree, convertTree } from '../../utils/tree.js';  export default {    data() {      return {        currentIndex: 0,        categoryList: []      }    },    onLoad() {      this.handleCategoryList();    },    methods: {      // 点击搜索框      handleSearchClick(e) {        uni.$u.route('/pages/search/search')      },      // 点击左侧导航栏      handleCategoryClick(index) {        if (this.currentIndex !== index) {          this.currentIndex = index        }      },      // 获取分类列表并构建树形结构      handleCategoryList() {        categoryListData().then(res => {          this.categoryList = handleTree(res.data, "id", "parentId");        })      },      handleCategory(item, index){        // console.log(item)        // console.log(index)        uni.navigateTo({          url:"./product-list?item="+encodeURIComponent(JSON.stringify(item))+"&index="+index        })      }    }  }</script><style lang="scss" scoped>  .search-wrap {    background: #ffffff;    position: fixed;    top: 0;    left: 0;    box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.07);    padding: 20rpx 0;    width: 100%;    z-index: 3;  }  .category-box {    position: fixed;    display: flex;    overflow: hidden;    margin-top: 100rpx;    height: calc(100% - 100rpx);    .box-left {      width: 200rpx;      padding-top: 5rpx;      overflow: scroll;      z-index: 2;      background-color: #f2f2f2;      .category-item {        line-height: 80rpx;        height: 80rpx;        text-align: center;        color: #777;        .item-title {          font-size: 28rpx;          &.active {            font-size: 28rpx;            font-weight: bold;            position: relative;            background: #fff;            color: $u-primary;          }          &.active::before {            position: absolute;            left: 0;            content: "";            width: 8rpx;            height: 32rpx;            top: 25rpx;            background: $u-primary;          }        }      }    }    .box-right {      width: 550rpx;      height: 100%;      box-sizing: border-box;      z-index: 1;      .category-image {        width: 510rpx;        box-sizing: border-box;        overflow: hidden;        position: relative;        margin: 30rpx 20rpx 0;        image {          width: 100%;        }      }      .sub-category-box {        .sub-category-header {          @include flex-space-between;          padding: 20rpx 20rpx;          .title {            font-size: 28rpx;            font-weight: bolder;          }          .more {            font-size: 22rpx;            color: #939393;          }        }        .sub-category-grid {          padding: 0 15rpx;          .sub-category-item {            @include flex-center(column);            background: #fff;            image {              text-align: center;              width: 150rpx;              height: 150rpx;              line-height: 150rpx;              font-size: 0;            }            .sub-category-title {              margin: 15rpx 0;              font-size: 22rpx;            }          }        }      }    }  }</style>
 |