抖音小程序端
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.
 
 
 
 

236 lines
5.2 KiB

<template>
<view class="atlas">
<uni-search-bar class="uni-mt-10" @focus="jumpToHot" clearButton='none' cancelButton='none'/>
<view class="title">
<uni-segmented-control :current="current" :values="arrList" @clickItem="onClickItem" styleType="text"
:activeColor="primaryColor"></uni-segmented-control>
</view>
<swiper class="swiper" :circular="false" :current="current" :indicator-dots="false" :autoplay="false"
@change="changeItem" :duration="500"
:style="'height:'+ imgBoxHeight + 'px'">
<!-- imgBoxHeight * Math.ceil(imgList.length / 2) -->
<swiper-item class="swiper-item" v-for="(item,index) in arrList" :key="index">
<view class="imgBox" v-for="(val,i) in imgList" :key="i" @click="targetImgList(val)"
:style="'height:' + imgHeight + 'px;width:'+ imgWidth + 'px'">
<image :src="val.img" mode="aspectFill"
:style="'height:' + imgHeight + 'px;width:'+ imgWidth + 'px'"
></image>
<view class="target-name">{{val.signName}}</view>
</view>
</swiper-item>
</swiper>
</view>
</template>
<script>
import {
listType,
signImgList,
querySignImg,
} from '@/api/atlas.js'
export default {
data() {
return {
primaryColor: "#1a94bc",
imgWidth: 0,
imgHeight: 0,
imgBoxHeight: 0,
current: 0,
pageNum: 1,
pageSize: 16,
arrList: [],
arrListId: [],
imgList: []
}
},
async created() {
await uni.getSystemInfo({
success: res => {
this.imgWidth = (res.screenWidth - 64) / 2
this.imgHeight = ((res.screenWidth - 64) / 2 - (res.screenWidth - 64) / 4)
this.imgBoxHeight = res.screenHeight - 152
}
})
if (uni.getStorageSync('atlas_current')) {
this.current = await uni.getStorageSync('atlas_current')
}
await this.getListType()
await this.getSignImgList(this.current)
},
watch: {
current(n, o) {
this.imgList = []
this.getSignImgList(this.current)
immediate: true
}
},
// 上划加载更多
onReachBottom() {
if (this.imgList.length > 1) {
this.pageNum += 1
this.getSignImgList(this.current)
}
},
onShareAppMessage(res) {
if (res.from === 'button') { // 来自页面内分享按钮
// console.log(res)
}
return {
title: '来[次元意境]获取好看的图纸头像吧!',
path: `/pages/atlas/atlas`
}
},
methods: {
//跳转热门搜索页面
jumpToHot(){
uni.navigateTo({
url: './hotSearch'
});
},
// 获取分类
async getListType() {
this.arrList = []
this.arrListId = []
const res = await listType()
if (res && res.data.code === 200) {
res.data.data.forEach(item => {
this.arrList.push(item.typeName)
this.arrListId.push(item.id)
})
}
// else {
// uni.showModal({
// content: res.data.msg,
// showCancel: false
// });
// }
},
// 获取分类下标签
async getSignImgList(val) {
uni.showLoading({
title: '加载中'
});
const params = {
pageNum: this.pageNum,
pageSize: this.pageSize,
typeId: this.arrListId[val]
}
const res = await signImgList(params)
if (res && res.data.code === 200) {
this.$nextTick(() => {
this.imgList.push(...res.data.rows)
})
this.$forceUpdate()
} else {
uni.showModal({
content: res.data.msg,
showCancel: false
});
}
uni.hideLoading()
},
onClickItem(val) {
this.imgList = []
this.pageNum = 1
this.pageSize = 10
this.current = val.currentIndex
},
changeItem(val) {
//console.log(val)
this.pageNum = 1
this.pageSize = 10
this.imgList = []
this.current = val.detail.current
},
// 前往标签详情页
targetImgList(val) {
uni.setStorage({
key: 'atlas_current',
data: this.current,
})
uni.setStorage({
key: 'atlas_detailId',
data: {
signId: val.signId,
typeId: val.typeId,
signName: val.signName,
type:'click'
},
success() {
uni.navigateTo({
url: './atlasList'
})
}
})
}
},
}
</script>
<style lang="scss">
.atlas {
.uni-searchbar {
border: 1px solid $uni-primary;
border-radius: 16rpx;
padding: 0;
margin-left: 40rpx;
margin-right: 40rpx;
.uni-searchbar__box {
padding: 0;
border-radius: 16rpx !important;
}
}
.title {
margin: 10px 0;
::v-deep .segmented-control {
border-radius: 8rpx 8rpx 0 0;
background-color: rgba(17, 168, 253, 0.1);
}
::v-deep .segmented-control__item {
view {
display: flex;
align-items: center;
}
}
}
.swiper {
overflow-y: auto;
.swiper-item {
display: flex;
justify-content: space-between;
width: calc(100% - 44px) !important;
flex-wrap: wrap;
padding: 0 22px;
align-content: flex-start;
.imgBox {
text-align: center;
margin-bottom: 20px;
position: relative;
image {
border-radius: 10px;
}
.target-name {
font-size: 12px;
position: absolute;
left: 10px;
bottom: 10px;
color: $uni-white;
}
}
}
}
}
</style>