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.
228 lines
4.8 KiB
228 lines
4.8 KiB
<template>
|
|
<view class="atlas">
|
|
<uni-search-bar class="uni-mt-10" placeholder="请输入标签名" clearButton="auto" cancelButton="none"
|
|
@confirm="search" />
|
|
<view class="title">
|
|
<uni-segmented-control :current="current" :values="arrList" @clickItem="onClickItem" styleType="text"
|
|
activeColor="#11A8FD"></uni-segmented-control>
|
|
</view>
|
|
<swiper class="swiper" :circular="false" :current="current" :indicator-dots="false" :autoplay="false"
|
|
@change="changeItem" :duration="500"
|
|
:style="'height:'+ imgBoxHeight * Math.ceil(imgList.length / 3) + 'rpx'">
|
|
<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)">
|
|
<image :src="val.img" mode="" :style="'height:' + imgHeight + 'rpx;width:'+imgWidth+'rpx'"></image>
|
|
<view>{{val.signName}}</view>
|
|
</view>
|
|
</swiper-item>
|
|
</swiper>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import {
|
|
listType,
|
|
signImgList,
|
|
querySignImg
|
|
} from '@/api/atlas.js'
|
|
export default {
|
|
data() {
|
|
return {
|
|
imgWidth: 0,
|
|
imgHeight: 0,
|
|
imgBoxHeight: 0,
|
|
current: 0,
|
|
pageNum: 1,
|
|
pageSize: 10,
|
|
arrList: [],
|
|
arrListId: [],
|
|
imgList: []
|
|
}
|
|
},
|
|
async created() {
|
|
await uni.getSystemInfo({
|
|
success: res => {
|
|
this.imgWidth = (res.windowWidth - 60) / 3 * 2
|
|
this.imgHeight = (res.windowWidth - 60) / 3 * 2 + 16
|
|
this.imgBoxHeight = (res.windowWidth - 60) / 3 * 2 + 108
|
|
console.log('this.imgHeight', this.imgHeight)
|
|
}
|
|
})
|
|
if (uni.getStorageSync('atlas_current')) {
|
|
this.current = await uni.getStorageSync('atlas_current')
|
|
}
|
|
await this.getListType()
|
|
await this.getSignImgList(this.current)
|
|
},
|
|
watch: {
|
|
current(n, o) {
|
|
console.log('current', this.current, n, o)
|
|
this.imgList = []
|
|
this.getSignImgList(this.current)
|
|
immediate: true
|
|
}
|
|
},
|
|
// 上划加载更多
|
|
onReachBottom() {
|
|
console.log(111)
|
|
if (this.imgList.length > 1) {
|
|
this.pageNum += 1
|
|
this.getSignImgList(this.current)
|
|
}
|
|
},
|
|
methods: {
|
|
search(res) {
|
|
if (res.value) {
|
|
uni.setStorage({
|
|
key: 'atlas_detailId',
|
|
data: {
|
|
signName: res.value,
|
|
type:'search'
|
|
},
|
|
success() {
|
|
uni.navigateTo({
|
|
url: './atlasList'
|
|
})
|
|
}
|
|
})
|
|
} else {
|
|
uni.showToast({
|
|
title: '请输入要搜索的标签名',
|
|
icon: 'none',
|
|
})
|
|
}
|
|
},
|
|
// 获取分类
|
|
async getListType() {
|
|
this.arrList = []
|
|
this.arrListId = []
|
|
const res = await listType()
|
|
if (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.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="less">
|
|
.atlas {
|
|
.uni-searchbar {
|
|
border: 1px solid #11A8FD;
|
|
border-radius: 16rpx;
|
|
padding: 0;
|
|
margin-left: 40rpx;
|
|
margin-right: 40rpx;
|
|
|
|
.uni-searchbar__box {
|
|
padding: 0;
|
|
border-radius: 16rpx !important;
|
|
}
|
|
}
|
|
|
|
.segmented-control {
|
|
overflow-x: auto;
|
|
|
|
.segmented-control__item {
|
|
flex: none;
|
|
width: 20vw;
|
|
|
|
.segmented-control__text {
|
|
font-size: 12px;
|
|
}
|
|
}
|
|
}
|
|
|
|
.swiper {
|
|
margin: 30rpx 0;
|
|
overflow-y: auto;
|
|
|
|
.swiper-item {
|
|
display: flex;
|
|
justify-content: flex-start;
|
|
align-items: baseline;
|
|
height: calc(100vh - 90px) ! important;
|
|
flex-wrap: wrap;
|
|
|
|
.imgBox {
|
|
text-align: center;
|
|
margin: 18rpx;
|
|
|
|
image {
|
|
border-radius: 10px;
|
|
}
|
|
|
|
text {
|
|
font-size: 12px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|
|
|