6 changed files with 492 additions and 49 deletions
@ -0,0 +1,228 @@ |
|||
<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> |
|||
@ -0,0 +1,222 @@ |
|||
<template> |
|||
<view class="atlasList"> |
|||
<!-- <uni-search-bar class="uni-mt-10" placeholder="请输入喜欢的艺术家代号吧~" clearButton="auto" cancelButton="none" |
|||
@confirm="search" /> --> |
|||
<view class="atlasList-list"> |
|||
<!-- <view class="first-box" :style="'width:'+imgWidth" > |
|||
热门作品 |
|||
</view> --> |
|||
<!-- <view class="ad-view"> |
|||
<ad adpid="1111111111" type="banner" @load="onload" @close="onclose" @error="onerror"></ad> |
|||
</view> --> |
|||
<image v-for="(item,index) in imgList" :key='index' class="img-box" |
|||
:style="'width:'+imgWidth+';height:'+imgHeight" :src="item.imgUrl" @click="targetDetail(item)" mode=""> |
|||
</image> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { |
|||
imgLists, |
|||
creatorDetails, |
|||
} from '@/api/index.js' |
|||
import { |
|||
querySignImg, |
|||
querySignImgBySignName |
|||
} from '@/api/atlas.js' |
|||
export default { |
|||
data() { |
|||
return { |
|||
imgList: [], //图片列表 |
|||
imgWidth: 0, // 图片宽 |
|||
imgHeight: 0, // 图片高 |
|||
checkId: {}, |
|||
pageNum: 1, |
|||
pageSize: 10, |
|||
} |
|||
}, |
|||
created() { |
|||
uni.getSystemInfo({ |
|||
success: res => { |
|||
console.log(res) |
|||
this.imgWidth = res.windowWidth - 60 + 'rpx' |
|||
this.imgHeight = (res.windowWidth - 60) * 2 - 30 + 'rpx' |
|||
} |
|||
}) |
|||
if (uni.getStorageSync('atlas_detailId')) { |
|||
this.checkId = uni.getStorageSync('atlas_detailId') |
|||
console.log(this.checkId) |
|||
uni.setNavigationBarTitle({ |
|||
title: this.checkId.signName |
|||
}); |
|||
this.getImgList() |
|||
} |
|||
}, |
|||
// 下拉刷新 |
|||
onPullDownRefresh() { |
|||
console.log(1111) |
|||
this.pageNum = 1 |
|||
this.imgList = [] |
|||
this.getImgList() |
|||
uni.stopPullDownRefresh() |
|||
}, |
|||
// 上划加载更多 |
|||
onReachBottom() { |
|||
console.log(2222) |
|||
if (this.imgList.length > 9) { |
|||
this.pageNum += 1 |
|||
this.getImgList() |
|||
} |
|||
}, |
|||
methods: { |
|||
// 搜索 |
|||
search(res) { |
|||
if (res.value) { |
|||
console.log('search', res.value) |
|||
this.goCreatorDetail(res.value) |
|||
} else { |
|||
uni.showToast({ |
|||
title: '请输入艺术家代号', |
|||
icon: 'none', |
|||
}) |
|||
} |
|||
}, |
|||
// 前往艺术家空间 |
|||
async goCreatorDetail(scanCode) { |
|||
if (scanCode) { |
|||
const res = await creatorDetails({ |
|||
scanCode |
|||
}) |
|||
console.log('creatorDetails', res) |
|||
if (res.data.code === 200) { |
|||
uni.setStorage({ |
|||
key: 'creatorDetail', |
|||
data: res.data.data, |
|||
success() { |
|||
uni.navigateTo({ |
|||
url: '../creator/creatorDetail' |
|||
}) |
|||
} |
|||
}) |
|||
|
|||
} else { |
|||
uni.showToast({ |
|||
title: res.data.msg, |
|||
icon: 'none' |
|||
}) |
|||
} |
|||
|
|||
} else { |
|||
uni.showToast({ |
|||
title: '搜索码不能为空', |
|||
icon: 'none' |
|||
}) |
|||
} |
|||
}, |
|||
// 图片列表 |
|||
async getImgList() { |
|||
if (this.checkId.type === 'click') { |
|||
const res = await querySignImg({ |
|||
pageNum: this.pageNum, |
|||
pageSize: this.pageSize, |
|||
signId: this.checkId.signId, |
|||
typeId: this.checkId.typeId |
|||
}) |
|||
if (res.data.code === 200) { |
|||
this.imgList.push(...res.data.rows) |
|||
} else { |
|||
uni.showToast({ |
|||
title: res.data.msg, |
|||
icon: 'none' |
|||
}) |
|||
} |
|||
} else if (this.checkId.type === 'search') { |
|||
const params = { |
|||
pageNum: this.pageNum, |
|||
pageSize: this.pageSize, |
|||
signName: this.checkId.signName |
|||
} |
|||
const res = await querySignImgBySignName(params) |
|||
if (res.data.code === 200) { |
|||
this.imgList.push(...res.data.rows) |
|||
} else { |
|||
uni.showModal({ |
|||
content: res.data.msg, |
|||
showCancel: false |
|||
}); |
|||
} |
|||
} |
|||
}, |
|||
// 前往详情页 |
|||
targetDetail(item) { |
|||
console.log('跳转', item) |
|||
if (item.id) { |
|||
uni.setStorage({ |
|||
key: 'detailId', |
|||
data: item.id, |
|||
success() { |
|||
console.log(111111) |
|||
uni.navigateTo({ |
|||
url: '../creator/imgDetail' |
|||
}) |
|||
} |
|||
}) |
|||
} |
|||
}, |
|||
onload(e) { |
|||
console.log("加载了广告"); |
|||
}, |
|||
onclose(e) { |
|||
console.log("关闭了广告: " + e.detail); |
|||
}, |
|||
onerror(e) { |
|||
console.log("广告错误了: " + e.detail.errCode + " message:: " + e.detail.errMsg); |
|||
} |
|||
}, |
|||
} |
|||
</script> |
|||
|
|||
<style lang="less"> |
|||
.atlasList { |
|||
.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; |
|||
} |
|||
} |
|||
|
|||
.atlasList-list { |
|||
display: flex; |
|||
flex-wrap: wrap; |
|||
align-items: flex-start; |
|||
justify-content: space-between; |
|||
padding: 0 20px 20px 20px; |
|||
|
|||
.first-box { |
|||
border-radius: 16rpx; |
|||
font-size: 16px; |
|||
margin-top: 40rpx; |
|||
margin-left: 30rpx; |
|||
color: #fff; |
|||
line-height: 60rpx; |
|||
text-align: center; |
|||
height: 60rpx; |
|||
background-color: #11A8FD; |
|||
display: inline-block; |
|||
vertical-align: top; |
|||
} |
|||
|
|||
image { |
|||
margin-top: 40rpx; |
|||
border-radius: 16rpx; |
|||
} |
|||
} |
|||
} |
|||
</style> |
|||
@ -1,26 +0,0 @@ |
|||
<template> |
|||
<view> |
|||
|
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { |
|||
signImgList, |
|||
querySignImg |
|||
} from '@/api/img.js' |
|||
export default { |
|||
data() { |
|||
return { |
|||
|
|||
} |
|||
}, |
|||
methods: { |
|||
|
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style> |
|||
|
|||
</style> |
|||
Loading…
Reference in new issue