<template>
	<view class="collection-item">
		<u-empty mode="list" v-if="!list.length" color="#000" img-width="200" font-size="30" margin-top="300"></u-empty>
		<u-swipe-action
			v-for="(item, index) in list" :key="index" 
			:index='index'
			:show="item.show"
			:options="options"
			@click="removeFavorite"
			@open="open"
		>
			<view class="item u-border-bottom" @click="viewGoodsDetails(item)">
				<image :src="item.goods_image"></image>
				<!-- 此层wrap在此为必写的，否则可能会出现标题定位错误 -->
				<view class="title-wrap">
					<view class="item-top u-line-2">{{ item.goods_name }}</view>
					<view class="item-bottom">
						<view class="item-price">￥{{ item.favlog_price }}</view>
						<view class="item-date">
							<image src="@/pageE/static/mine/26.png"></image>
							<view>{{ item.fav_time | date }}</view>
						</view>
					</view>
				</view>
			</view>
		</u-swipe-action>
	</view>
</template>
<script>
export default {
	data() {
		return {
			list: [],
			options: [
				{
					text: '删除',
					style: {
						backgroundColor: '#FF3131'
					}
				}
			]
		}
	},
	mounted() {
		this.getGoodsFavoritesList();
	},
	methods: {
		viewGoodsDetails(item) {
			const list = this.list.filter(item => {
				return item.show;
			})
			if(list.length) return false;
			this.$u.route({
				url: 'pageB/sdetails/index',
				params: {
					id: item.fav_id,
				}
			})
		},
		getGoodsFavoritesList() {
			this.$u.api.getFavoritesList().then(res => {
				if(res.errCode == 0) {
					this.list = res.data;
					this.list.forEach(item => {
						Object.assign(item, { show: false });
					})
				}
			})
		},
		removeFavorite(index) {
			const id = this.list[index].fav_id;
			this.$u.api.removeFavorite({
				fid: id,
				type: 'goods'
			}).then(res => {
				if(res.errCode == 0) {
					this.getGoodsFavoritesList();
				} else {
					this.$u.toast(res.message);
				}
			})
		},
		open(index) {
			// 先将正在被操作的swipeAction标记为打开状态，否则由于props的特性限制，
			// 原本为'false'，再次设置为'false'会无效
			this.list[index].show = true;
			this.list.map((val, idx) => {
				if(index != idx) this.list[idx].show = false;
			})
			this.$forceUpdate();
		}
	},
};
</script>
<style lang="scss" scoped>
.collection-item {
	.item {
		padding: 30rpx;
		display: flex;
		> image {
			width: 180rpx;
			height: 160rpx;
			border-radius: 10rpx;
			margin-right: 30rpx;
			flex-shrink: 0;
		}
		.title-wrap {
			flex: 1;
			.item-top {
				font-size: 30rpx;
				color: rgba(51,51,51,1);
				line-height: 44rpx;
				margin-bottom: 54rpx;
			}
			.item-bottom {
				display: flex;
				align-items: center;
				justify-content: space-between;
				.item-price {
					font-size: 30rpx;
					color: rgba(51,51,51,1);
				}
				.item-date {
					display: flex;
					align-items: center;
					> image {
						margin-right: 25rpx;
						width: 24rpx;
						height: 24rpx;
					}
				}
			}
		}
	}
}
</style>