2025-03-20 13:59:39 +08:00
|
|
|
|
<template>
|
|
|
|
|
<z-paging
|
|
|
|
|
ref="pagingRef"
|
|
|
|
|
v-model="prodOrShopList"
|
|
|
|
|
:paging-style="{'top': '0','background-color': '#f2f3f7'}"
|
|
|
|
|
:empty-view-text="`您还没有收藏过${ navStatus === 1 ? '店铺' : '商品' }`"
|
|
|
|
|
loading-more-no-more-text="没有更多了,看看别的吧"
|
|
|
|
|
empty-view-img="/static/empty-img/collect-empty.png"
|
|
|
|
|
@query="onQueryCollectData"
|
|
|
|
|
>
|
|
|
|
|
<view class="Mall4j page-my-collection">
|
|
|
|
|
<!-- tab -->
|
|
|
|
|
<view class="tab">
|
|
|
|
|
<view
|
|
|
|
|
:class="['item', navStatus === 0 ? 'active' : '']"
|
|
|
|
|
@tap="onSwitchNav(0)"
|
|
|
|
|
>
|
|
|
|
|
商品({{ prodCollectedNum }})
|
|
|
|
|
</view>
|
|
|
|
|
<view
|
|
|
|
|
:class="['item', navStatus === 1 ? 'active' : '']"
|
|
|
|
|
@tap="onSwitchNav(1)"
|
|
|
|
|
>
|
|
|
|
|
店铺({{ shopCollectedNum }})
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
<!-- 产品列表 -->
|
|
|
|
|
<view
|
|
|
|
|
v-if="navStatus === 0 && prodOrShopList.length > 0"
|
|
|
|
|
class="line-prods"
|
|
|
|
|
>
|
|
|
|
|
<view
|
|
|
|
|
v-for="(item,index) in prodOrShopList"
|
|
|
|
|
:key="index"
|
|
|
|
|
class="item"
|
|
|
|
|
>
|
|
|
|
|
<view
|
|
|
|
|
class="img"
|
|
|
|
|
@tap="onToProdDetail(item.spuId, item.status)"
|
|
|
|
|
>
|
|
|
|
|
<img-show
|
|
|
|
|
:src="item.mainImgUrl"
|
|
|
|
|
img-mode="aspectFit"
|
|
|
|
|
/>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="text-box">
|
|
|
|
|
<view
|
|
|
|
|
class="prod-info"
|
|
|
|
|
@tap="onToProdDetail(item.spuId, item.status)"
|
|
|
|
|
>
|
|
|
|
|
<view class="name">
|
|
|
|
|
{{ item.spuName }}
|
|
|
|
|
</view>
|
|
|
|
|
<view class="sku">
|
|
|
|
|
{{ item.sellingPoint }}
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="price-box">
|
|
|
|
|
<view
|
|
|
|
|
class="price"
|
|
|
|
|
@tap="onToProdDetail(item.spuId, item.status)"
|
|
|
|
|
>
|
|
|
|
|
<view class="symbol">
|
|
|
|
|
¥
|
|
|
|
|
</view>
|
|
|
|
|
<view class="big">
|
|
|
|
|
{{ wxs.parsePrice(item.priceFee)[0] }}
|
|
|
|
|
</view>
|
|
|
|
|
<view class="symbol">
|
|
|
|
|
.{{ wxs.parsePrice(item.priceFee)[1] }}
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view
|
|
|
|
|
class="btn"
|
|
|
|
|
@tap="showDelPopup(item.spuId,'prod')"
|
|
|
|
|
>
|
|
|
|
|
取消收藏
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
<!-- 店铺列表 -->
|
|
|
|
|
<view
|
|
|
|
|
v-if="navStatus === 1 && prodOrShopList.length > 0"
|
|
|
|
|
class="shop-list"
|
|
|
|
|
>
|
|
|
|
|
<view
|
|
|
|
|
v-for="(item,index) in prodOrShopList"
|
|
|
|
|
:key="index"
|
|
|
|
|
class="item"
|
|
|
|
|
>
|
|
|
|
|
<view
|
|
|
|
|
class="logo"
|
|
|
|
|
@tap="onToShopIndex(item)"
|
|
|
|
|
>
|
|
|
|
|
<image
|
|
|
|
|
v-if="item.shopLogo"
|
|
|
|
|
:src="util.addDomain(item.shopLogo)"
|
|
|
|
|
@error="prodOrShopList[index].shopLogo = ''"
|
|
|
|
|
/>
|
|
|
|
|
<image
|
|
|
|
|
v-else
|
|
|
|
|
src="@/package-activities/static/images/default-shop-logo.png"
|
|
|
|
|
/>
|
|
|
|
|
</view>
|
|
|
|
|
<view
|
|
|
|
|
class="text-box"
|
|
|
|
|
@tap="onToShopIndex(item)"
|
|
|
|
|
>
|
|
|
|
|
<view class="shop-name">
|
|
|
|
|
{{ item.shopName }}
|
|
|
|
|
</view>
|
|
|
|
|
<view class="focus">
|
|
|
|
|
<view
|
|
|
|
|
v-if="item.type === 1"
|
|
|
|
|
class="self"
|
|
|
|
|
>
|
|
|
|
|
自营
|
|
|
|
|
</view>
|
|
|
|
|
<view class="number">
|
|
|
|
|
关注人数:{{ wxs.parseCollectionNumber(item.collectionNum) }}
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view
|
|
|
|
|
class="del"
|
|
|
|
|
@tap="showDelPopup(item.shopId, 'shop')"
|
|
|
|
|
>
|
|
|
|
|
取消收藏
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
<!-- 取消收藏确认弹窗 -->
|
|
|
|
|
<confirm-pop
|
|
|
|
|
:show-pop="showPop"
|
|
|
|
|
:pop-content="popContent"
|
|
|
|
|
@handle-pop-cancel="onPopCancel"
|
|
|
|
|
@handle-pop-confirm="onPopConfirm"
|
|
|
|
|
/>
|
|
|
|
|
</view>
|
|
|
|
|
</z-paging>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script setup>
|
|
|
|
|
import util from '@/utils/util.js'
|
|
|
|
|
|
|
|
|
|
const wxs = number()
|
|
|
|
|
|
|
|
|
|
const showPop = ref(false) // 弹窗显隐
|
|
|
|
|
const navStatus = ref(0) // 0商品 1店铺
|
|
|
|
|
let selectItemId = null // 选中的item id
|
|
|
|
|
const popContent = reactive({
|
|
|
|
|
title: '是否确认取消收藏',
|
|
|
|
|
content: '商品取消收藏后将不容易被找到哦~'
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
onLoad(() => {
|
|
|
|
|
onGetNumberOfProdCollected()
|
|
|
|
|
onGetNumberOfShopCollected()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 切换nav
|
|
|
|
|
*/
|
|
|
|
|
const onSwitchNav = (nav) => {
|
|
|
|
|
navStatus.value = nav
|
|
|
|
|
popContent.content = nav === 0 ? '商品取消收藏后将不容易被找到哦~' : '店铺取消收藏后将不容易被找到哦~'
|
|
|
|
|
pagingRef.value.reload()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取商品收藏数量
|
|
|
|
|
*/
|
|
|
|
|
const prodCollectedNum = ref(0)
|
|
|
|
|
const onGetNumberOfProdCollected = () => {
|
|
|
|
|
http.request({
|
2025-03-25 23:27:44 +08:00
|
|
|
|
url: '/tmerclub_product/spu_collection/count',
|
2025-03-20 13:59:39 +08:00
|
|
|
|
method: 'GET'
|
|
|
|
|
}).then(res => {
|
|
|
|
|
prodCollectedNum.value = res
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取店铺收藏数量
|
|
|
|
|
*/
|
|
|
|
|
const shopCollectedNum = ref(0)
|
|
|
|
|
const onGetNumberOfShopCollected = () => {
|
|
|
|
|
http.request({
|
2025-04-13 23:40:58 +08:00
|
|
|
|
url: '/tmerclub_admin/user_collection_shop/count',
|
2025-03-20 13:59:39 +08:00
|
|
|
|
method: 'GET'
|
|
|
|
|
}).then(res => {
|
|
|
|
|
shopCollectedNum.value = res
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 请求 商品/店铺 收藏列表
|
|
|
|
|
*/
|
|
|
|
|
const pagingRef = ref(null)
|
|
|
|
|
const prodOrShopList = ref([])
|
|
|
|
|
const onQueryCollectData = (pageNum, pageSize) => {
|
|
|
|
|
let url = ''
|
|
|
|
|
if (navStatus.value === 0) {
|
2025-03-25 23:27:44 +08:00
|
|
|
|
url = '/tmerclub_product/spu_collection/page'
|
2025-03-20 13:59:39 +08:00
|
|
|
|
} else if (navStatus.value === 1) {
|
2025-04-13 23:40:58 +08:00
|
|
|
|
url = '/tmerclub_admin/user_collection_shop/page'
|
2025-03-20 13:59:39 +08:00
|
|
|
|
}
|
|
|
|
|
http.request({
|
|
|
|
|
url,
|
|
|
|
|
method: 'GET',
|
|
|
|
|
data: {
|
|
|
|
|
pageNum,
|
|
|
|
|
pageSize,
|
|
|
|
|
needActivity: 1 // 是否需要活动信息 1:需要 0:不需要
|
|
|
|
|
}
|
|
|
|
|
}).then(res => {
|
|
|
|
|
// 将请求结果通过complete传给z-paging处理,同时也代表请求结束,这一行必须调用
|
|
|
|
|
pagingRef.value.complete(res.list)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 取消收藏
|
|
|
|
|
*/
|
|
|
|
|
const onCancelCollect = () => {
|
|
|
|
|
let url = ''
|
|
|
|
|
selectItemId = String(selectItemId)
|
|
|
|
|
if (navStatus.value === 0) {
|
2025-03-25 23:27:44 +08:00
|
|
|
|
url = '/tmerclub_product/spu_collection/add_or_cancel'
|
2025-03-20 13:59:39 +08:00
|
|
|
|
} else if (navStatus.value === 1) {
|
2025-04-13 23:40:58 +08:00
|
|
|
|
url = '/tmerclub_admin/user_collection_shop/add_or_cancel'
|
2025-03-20 13:59:39 +08:00
|
|
|
|
}
|
|
|
|
|
http.request({
|
|
|
|
|
url,
|
|
|
|
|
method: 'POST',
|
|
|
|
|
data: selectItemId
|
|
|
|
|
}).then(() => {
|
|
|
|
|
showPop.value = false
|
|
|
|
|
pagingRef.value.reload()
|
|
|
|
|
onGetNumberOfProdCollected()
|
|
|
|
|
onGetNumberOfShopCollected()
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 显示删除弹窗
|
|
|
|
|
const showDelPopup = (id) => {
|
|
|
|
|
selectItemId = id
|
|
|
|
|
showPop.value = true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 弹窗确认
|
|
|
|
|
*/
|
|
|
|
|
const onPopConfirm = () => {
|
|
|
|
|
onCancelCollect()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 弹窗取消事件
|
|
|
|
|
*/
|
|
|
|
|
const onPopCancel = () => {
|
|
|
|
|
showPop.value = false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 跳转到店铺首页
|
|
|
|
|
*/
|
|
|
|
|
const onToShopIndex = (shopInfo) => {
|
|
|
|
|
// shopStatus 店铺状态(-1:未开通 0: 停业中 1:营业中 2:平台下线 3:平台下线待审核)
|
|
|
|
|
if (shopInfo.shopStatus !== 1) {
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: '该店铺暂时无法访问',
|
|
|
|
|
icon: 'none'
|
|
|
|
|
})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
let url
|
|
|
|
|
if (shopInfo.renovationId) {
|
|
|
|
|
url = '/package-shop/shop-page/feature-index/feature-index?shopId=' + shopInfo.shopId + '&renovationId=' + shopInfo.renovationId
|
|
|
|
|
} else {
|
|
|
|
|
url = '/package-shop/shop-page/shop-index/shop-index?shopId=' + shopInfo.shopId
|
|
|
|
|
}
|
|
|
|
|
uni.navigateTo({
|
|
|
|
|
url
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 跳转到商品详情页
|
|
|
|
|
*/
|
|
|
|
|
const onToProdDetail = (spuId, status) => {
|
|
|
|
|
// status 商品状态 1:enable, 0:disable, -1:deleted
|
|
|
|
|
if (status === -1) {
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: '商品不存在',
|
|
|
|
|
icon: 'none'
|
|
|
|
|
})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if (status === 0) {
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: '商品已被下架',
|
|
|
|
|
icon: 'none'
|
|
|
|
|
})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
uni.navigateTo({
|
|
|
|
|
url: '/pages/detail/detail?spuId=' + spuId
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
@use "./my-collection.scss";
|
|
|
|
|
</style>
|