shop-applet/pages/product/components/platform.vue

173 lines
3.7 KiB
Vue
Raw Normal View History

2024-05-14 17:25:13 +08:00
<template>
<view class="select_popup_container platform">
<!-- 头部内容 -->
<view class="popup_title">
<view class="popup_title_msn">请选择平台分类</view>
<view class="close" @click="close"><text class="iconfont">&#xe761;</text></view>
</view>
<!-- 头部内容结束 -->
<view class="tap_list">
<view class="tap_list_item" v-for="(item, index) in tapList" :key="index" @click="selectTap(item, index)" :class="{ 'border': selectIndex == index }">
{{item.label}}
</view>
<view class="tap_list_item" :class="{ 'border': selectIndex == -1 }" @click="pleaseSelect">请选择</view>
</view>
<view class="content_list">
<scroll-view scroll-y="true" class="popup_sroll">
<view class="content_list_item" @click="selectItem(item, index)" v-for="(item, index) in selectClassifiedData" :key="index">{{ item.label }}</view>
</scroll-view>
</view>
</view>
</template>
<script>
import { navigateTo, serialize, setStorage } from '../../../libs/uniApi.js';
export default {
props: {
// 从外部传入的分类数据(平台分类)
classifiedData: {
type: Array,
default: () => {
return [];
}
}
},
data() {
return {
selectIndex: -1,
tapList: [],
selectClassifiedData: []
};
},
watch: {
classifiedData: {
handler(val) {
this.selectClassifiedData = this.classifiedData
},
deep: true
}
},
created() {
this.selectClassifiedData = serialize(this.classifiedData);
},
methods: {
selectItem(item, index) {
if(!(item.children && item.children.length)) {
this.$emit('getPlatData', item, this.tapList);
return;
}
if(this.selectIndex > -1) {
this.tapList.splice(this.selectIndex + 1, 999);
this.tapList.push(item);
this.selectIndex = -1;
this.selectClassifiedData = serialize(item.children);
return;
}
if(item.children && item.children.length) {
this.tapList.push(item);
this.selectClassifiedData = serialize(item.children);
return;
}
},
// 选择标签
selectTap(item, index) {
// console.log(item);
if(index == 0){
this.tapList=[]
this.selectClassifiedData = serialize(this.classifiedData);
}
if(index == 1){
this.selectIndex = index;
this.tapList.splice(index,1)
this.selectClassifiedData = serialize(this.tapList[0].children);
}
},
// 点击请选择
pleaseSelect() {
this.selectIndex = -1;
this.selectClassifiedData = this.tapList[this.tapList.length - 1].children;
},
// 点击关闭按钮
close() {
this.$emit('close');
}
}
};
</script>
<style lang="scss" scoped>
.select_popup_container {
background: #fff;
border-radius: 16rpx 16rpx 0 0;
}
.popup_title {
display: flex;
justify-content: flex-end;
padding: 36rpx 30rpx;
position: relative;
&_msn {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: #282828;
font-size: 32rpx;
font-weight: bold;
}
.close {
position: relative;
z-index: 10;
font-size: 28rpx;
color: #8a8a8a;
}
}
.tap_list {
margin-top: 35rpx;
border-bottom: 1px solid #EEEEEE;
width: 710rpx;
margin: auto;
margin-bottom: 40rpx;
display: flex;
.border {
border-bottom: 2px solid #E93323 !important;
color: #E93323 !important;
}
&_item {
padding-bottom: 18rpx;
margin-right: 30rpx;
}
}
.content_list {
.popup_sroll {
height: 742rpx;
}
.content_list_item {
color: #333333;
margin-bottom: 50rpx;
margin-left: 30rpx;
margin-right: 30rpx;
display: flex;
align-items: center;
justify-content: space-between;
> view {
flex: 0.6;
}
> view:nth-child(2) {
flex: 0.4;
display: flex;
justify-content: flex-end;
}
.iconfont {
color: #e93323;
font-size: 36rpx !important;
}
}
}
</style>