银耀uniapp
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

211 lines
4.9 KiB

<template>
<view class="productSort">
<div class="index">
<view class="header acea-row row-center-wrapper">
<u-search @search="onSearch" bgColor="#FFFFFF" borderColor="#eb3729" :showAction="false"></u-search>
<view class="select-type">
<u-button size="small" type="info" icon="arrow-down" hairline plain @click="showTypePicker = true" :text="currentType" color="#eb3729"></u-button>
<u-picker @confirm="onTypeConfirm" @close="showTypePicker = false" :show="showTypePicker" :columns="typeList" closeOnClickOverlay></u-picker>
</view>
</view>
</div>
<view class="aside">
<view class="item acea-row row-center-wrapper" :class="categoryDivindex === navActive ? 'on' : ''"
v-for="(item, categoryDivindex) in currentCategoryList" :key="categoryDivindex"
@click="asideTap(categoryDivindex)">
<text>{{ item.cateName }}</text>
</view>
</view>
<view class="conter">
<view style="height: 100rpx;"></view>
<u-subsection @change="onLevelChange" :list="levelList" :current="currLevelIndex" mode="button" active-color="#eb3729"></u-subsection>
<view @click="toDetail(item)" class="subject" v-for="(item, eq) in currentVolumeList" :key="eq">
<image class="poster" :src="item.poster" mode="aspectFill"></image>
<view class="volume">
<view class="volume-name u-line-2">{{ item.volumeName }}</view>
<view class="volume-desc u-line-1">{{ currentCategoryList[navActive].cateName}} | {{ item.sales + item.fakeSales }}人在学</view>
</view>
</view>
</view>
<view style="height:100rpx;"></view>
</view>
</template>
<script>
import {
getSubjectCategoryList,
getSubjectList,
getSubjectVolumeList,
getTypeList
} from "@/api/subject.js";
import {
trim
} from "@/utils";
export default {
name: "GoodsClass",
components: {},
props: {},
data: function() {
return {
currentType: '',
typeList: [],
categoryList: [],
currentCategoryList: [],
subjectList: [],
volumeList: [],
levelList: ["全部", "基础班", "提升班", "研修班"],
currLevelIndex: 0,
navActive: undefined,
search: "",
lock: false,
showTypePicker: false
};
},
watch: {
"$yroute.query.id": function(n) {
if (n) {
this.activeCateId(n);
}
}
},
computed: {
currentVolumeList() {
console.log('currentVolumeList: ' ,1);
let arr = [];
if(this.currLevelIndex > 0) {
arr = this.volumeList.filter(item => item.level == this.levelList[this.currLevelIndex])
}else {
arr = this.volumeList
}
return arr;
}
},
onLoad(options) {
if(options && options.type) {
this.currentType = options.type
}
this.loadCategoryData();
},
methods: {
onLevelChange(e) {
this.currLevelIndex = e
},
onTypeConfirm(e) {
this.currentType = e.value[0]
this.showTypePicker = false
this.onTypeChange()
},
onSearch() {
this.$yrouter.push("/pages/shop/GoodSearch/index");
},
toDetail(item) {
this.$yrouter.push({
path: "/pages/subject/detail/detail",
query: {
sid: item.subjectId,
vid: item.id
}
});
},
goGoodsList(categoryId) {
getSubjectVolumeList({
categoryId
}).then(res => {
this.volumeList = res.data
})
},
activeCateId(n) {
let index = 0;
n = parseInt(n);
if (!n) return;
if (index !== this.navActive) {
this.asideTap(index);
}
},
async loadCategoryData() {
const cRes = await getSubjectCategoryList()
this.categoryList = cRes.data;
const tRes = await getTypeList()
this.typeList = [tRes.data]
if(!this.currentType) {
this.currentType= tRes.data[0]
}
this.onTypeChange()
},
onTypeChange() {
this.volumeList = []
this.navActive = undefined
this.currentCategoryList = this.categoryList.filter(item => item.type == this.currentType)
if(this.currentCategoryList.length > 0) {
this.activeCateId(this.currentCategoryList[0].id)
}
},
submitForm: function() {
var val = trim(this.search);
if (val) {
this.$yrouter.push({
path: "/pages/shop/GoodsList/index",
query: {
s: val
}
});
setTimeout(() => (this.search = ""), 500);
}
},
asideTap(index) {
this.navActive = index
this.goGoodsList(this.currentCategoryList[index].id)
}
}
}
</script>
<style lang="scss">
.productSort {
height: 100%;
}
.header{
display: flex;
.search{
width: 50%;
}
.select-type{
padding: 0 0 0 20rpx;
}
}
.subject {
display: flex;
padding: 10rpx;
.volume{
position: relative;
height: 140rpx;
box-sizing: border-box;
padding: 10rpx 0;
}
.poster {
width: 250rpx;
height: 140rpx;
border-radius: 8rpx;
}
.volume-name{
width: 250rpx;
font-size: 28rpx;
padding: 4rpx 10rpx;
}
.volume-desc {
position: absolute;
bottom: 10rpx;
left: 10rpx;
font-size: 20rpx;
color: #666666;
}
}
</style>