|
|
- <template>
- <view>
- <view class="tabs">
- <uv-tabs
- :list="tabs"
- :activeStyle="{
- 'font-family': 'PingFang SC',
- 'font-weight': 600,
- 'font-size': '28rpx',
- 'line-height': 1.5,
- 'color': '#FFFFFF',
- 'background-color': '#252545',
- 'border-radius': '32rpx',
- 'padding': '9rpx 40rpx',
- }"
- :inactiveStyle="{
- 'font-family': 'PingFang SC',
- 'font-weight': 400,
- 'font-size': '28rpx',
- 'line-height': 1.5,
- 'color': '#252545',
- 'background-color': '#E5E4EB',
- 'border-radius': '32rpx',
- 'padding': '9rpx 40rpx',
- }"
- lineWidth="0"
- lineHeight="0"
- :current="level1"
- @change="onLevel1TabChange"
- ></uv-tabs>
- <view v-if="tabs[level1] && tabs[level1].children && tabs[level1].children.length"
- class="tabs-second"
- >
- <uv-tabs
- :list="tabs[level1].children"
- :activeStyle="{
- 'font-family': 'PingFang SC',
- 'font-weight': 600,
- 'font-size': '28rpx',
- 'line-height': 1.5,
- 'color': '#7451DE',
- }"
- :inactiveStyle="{
- 'font-family': 'PingFang SC',
- 'font-weight': 400,
- 'font-size': '28rpx',
- 'line-height': 1.5,
- 'color': '#252545',
- }"
- lineWidth="0"
- lineHeight="0"
- :current="level2"
- @change="onLevel2TabChange"
- ></uv-tabs>
- </view>
- </view>
- <view v-if="list.length" class="content">
- <view v-for="item in list" :key="item.id" style="min-width: 0;">
- <productCard
- :data="item"
- cardStyle="width: 100%; height: 210px;"
- imgStyle="width: 100%; height: 110px;"
- ></productCard>
- </view>
- </view>
- <template v-else>
- <uv-empty mode="list"></uv-empty>
- </template>
- </view>
- </template>
-
- <script>
- import productCard from '@/pages_order/product/productCard.vue'
-
- export default {
- components: {
- productCard,
- },
- props: {
- type: {
- type: Number,
- default: 0,
- },
- list: {
- type: Array,
- default() {
- return []
- }
- },
- },
- data() {
- return {
- tabs: [],
- level1: 0,
- level2: null,
- }
- },
- mounted() {
-
- this.fetchCategory()
- },
- methods: {
- async fetchCategory() {
- try {
- let result = await this.$fetch('getProductCategory', { type: this.type }) // type: 产品类型(0营养剂,1预约,2课程)
-
- this.tabs = result.reduce((arr, item) => {
- const { id, name, child } = item
-
- let obj = { id, name, children: child }
-
- arr.push(obj)
-
- return arr
- }, [{ name: '全部' }])
- } catch (err) {
-
- }
- },
- onLevel1TabChange(e) {
- console.log('level1', e.index)
- this.level1 = e.index
- if (this.tabs[this.level1].children?.length) {
- this.level2 = 0
- this.$emit('categoryChange', { classId: this.tabs[this.level1].children[this.level2].id })
- } else {
- this.level2 = null
- this.$emit('categoryChange', { classId: this.tabs[this.level1].id })
- }
- },
- onLevel2TabChange(e) {
- console.log('level2', e.index)
- this.level2 = e.index
- this.$emit('categoryChange', { classId: this.tabs[this.level1].children[this.level2].id })
- },
- },
- }
- </script>
-
- <style scoped lang="scss">
- .tabs {
- margin: 0 5px;
-
- &-second {
- margin: 0 11px;
- padding-left: 9px;
- background: #E5E4EB;
- border-radius: 16rpx;
- }
- }
-
- .content {
- padding: 24rpx 32rpx;
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- gap: 32rpx;
- }
- </style>
|