| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- <template>
- <mescroll-uni ref="mescrollRef" top="80rpx" @init="mescrollInit" @down="downCallback" @up="upCallback"
- :down="downOption" :up="upOption">
- <view class="collection-list">
- <view class="goods-list p-t-20" v-show="type == 1">
- <view v-for="(item, index) in collectionList" :key="item.id">
- <u-swipe-action :show="selectIndex == item.id" :index="item.id" bg-color="transparent"
- :btn-width="130" @click="clickBtn" @open="open" :options="options">
- <view class="collection-item flex bg-white" @tap="toGoods(item)">
- <u-image width="160rpx" height="160rpx" border-radius="6rpx" lazy-load class="m-r-20"
- :src="item.image" />
- <view class="info flex-1">
- <view class="flex row-between">
- <view class="name line-2">{{item.name}}</view>
- </view>
- <view class="flex row-between m-t-20">
- <price-format :first-size="30" :second-size="26" :price="item.min_price"
- :weight="400" :subscript-size="30" :color="colorConfig.primary" />
- <view class="btn primary flex row-center br60 sm"
- :class="{'valid muted': item.is_valid == 0}">
- {{ item.is_valid == 0 ? '已失效' : '去购买'}}
- </view>
- </view>
- </view>
- </view>
- </u-swipe-action>
- </view>
- </view>
- <view class="store-list" v-show="type == 2">
- <view class="m-t-20" v-for="(item, index) in collectionList" :key="item.id">
- <u-swipe-action :show="selectIndex == item.id" :index="item.id" bg-color="transparent"
- :btn-width="130" @click="clickBtn" @open="open" :options="options">
- <view class="store-item bg-white flex" @tap="toShop(item)">
- <u-image width="80rpx" height="80rpx" border-radius="60rpx" :src="item.logo" />
- <view class="flex-1 m-l-10">
- <view class="store-name lg">
- {{item.name}}<text class="xxs tag white m-l-10 line-1"
- v-if="item.type == 1">自营</text>
- </view>
- <view class="m-t-12 xs muted flex row-between">
- 主营行业:{{item.cid_desc}}
- <view class="xs" v-if="item.score!=0">
- 评分:
- <text style="color: #ffa200">
- {{item.score}}
- </text>
- </view>
- </view>
- </view>
- <!-- <view class="flex muted xs">
- 评分:<view style="color: #FFA200;">{{item.score}}</view>
- </view> -->
- </view>
- </u-swipe-action>
- </view>
- </view>
- </view>
- </mescroll-uni>
- </template>
- <script>
- import {
- getCollectGoods,
- getCollectShop,
- collectGoods
- } from '@/api/user'
- import {
- changeShopFollow
- } from '@/api/shop'
- import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
- import MescrollMoreItemMixin from "@/components/mescroll-uni/mixins/mescroll-more-item.js";
- export default {
- mixins: [MescrollMixin, MescrollMoreItemMixin],
- name: "collection-list",
- props: {
- type: {
- type: [String, Number]
- }
- },
- data() {
- return {
- collectionList: [],
- downOption: {
- auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
- },
- upOption: {
- auto: false, // 不自动加载
- noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
- empty: {
- icon: '/static/images/goods_null.png',
- tip: '暂无收藏~', // 提示
- fixed: true
- }
- },
- options: [{
- text: '取消收藏',
- style: {
- backgroundColor: '#FF2C3C'
- }
- }],
- selectIndex: -1
- };
- },
- methods: {
- async upCallback(page) {
- let pageNum = page.num; // 页码, 默认从1开始
- let pageSize = page.size; // 页长, 默认每页10条
- let {
- type,
- } = this;
- const {
- data,
- code
- } = type == 1 ? await getCollectGoods({
- page_size: pageSize,
- page_no: pageNum
- }) : await getCollectShop({
- page_size: pageSize,
- page_no: pageNum
- })
- if (code == 1) {
- let curPageData = data.lists;
- let curPageLen = curPageData.length;
- let hasNext = !!data.more;
- if (page.num == 1) this.collectionList = [];
- this.collectionList = this.collectionList.concat(curPageData);
- this.mescroll.endSuccess(curPageLen, hasNext);
- }
- },
- toGoods(item) {
- if (item.is_valid) {
- this.$Router.push({
- path: '/pages/goods_details/goods_details',
- query: {
- id: item.id
- }
- })
- }
- },
- toShop(item) {
- this.$Router.push({
- path: '/pages/store_index/store_index',
- query: {
- id: item.id
- }
- })
- },
- open(index) {
- // 先将正在被操作的swipeAction标记为打开状态,否则由于props的特性限制,
- // 原本为'false',再次设置为'false'会无效
- this.selectIndex = index;
- // }
- },
- async clickBtn(index) {
- const {
- code,
- data,
- msg
- } = this.type == 1 ? await collectGoods({
- goods_id: index
- }) : await changeShopFollow({
- shop_id: index
- })
- if (code == 1) {
- this.$toast({
- title: msg
- })
- this.downCallback()
- }
- }
- },
- }
- </script>
- <style lang="scss">
- .collection-list {
- width: 100%;
- .goods-list {
- .collection-item {
- padding: 20rpx;
- &:not(:last-of-type) {
- border-bottom: $-solid-border;
- }
- .btn {
- width: 148rpx;
- height: 52rpx;
- border: 1px solid $-color-primary;
- &.valid {
- background-color: #f2f2f2;
- border-color: transparent;
- }
- }
- }
- }
- .store-list {
- margin: 0 20rpx;
- .store-item {
- padding: 15rpx 20rpx;
- border-radius: 16rpx;
- .store-name {}
- .tag {
- background: linear-gradient(267deg, #FF2C3C 0%, #F52E99 100%);
- border-radius: 6rpx;
- padding: 0 9rpx;
- vertical-align: 5rpx;
- }
- }
- }
- }
- </style>
|