<template>
	<view class="wrap">
		<up-navbar placeholder :autoBack="true">
			<template #center>
				<view
					style="display: flex;align-items: center;width: 100%;justify-content: flex-start;margin-left: 100rpx;">
					<view class="tabs" :class="{'tabs-active': tabsActive==index}" v-for="(item, index) in list"
						:key="index" @click="changeTab(index)">
						{{item}}
					</view>
				</view>
			</template>
		</up-navbar>

		<swiper class="swiper-box" :current="swiperCurrent" @animationfinish="animationfinish">
			<swiper-item class="swiper-item">
				<scroll-view scroll-y @refresherrefresh="refresherrefresh(1)" :refresher-triggered="triggered"
					refresher-enabled refresher-background="#F6F6F6" style="height: 100%;width: 100%;">
					<view class="page-box1" style="padding-top: 60rpx;">
						<view class="total">
							<view>共计<text style="color: #20B128;">{{cartList.length}}</text>件</view>
							<view v-if="!isAdmin" @click="isAdmin=true;">管理</view>
							<view v-else @click="isAdmin=false;">完成</view>
						</view>
						<view v-if="cartList.length>0" class="list">
							<view class="shop-item" v-for="(item, index) in cartList" :key="index"
								@click="openGoodPopup(item)">
								<view class="shop-check" @click.stop="checkItem(item, !item.check)">
									<image v-if="!item.check" src="@/static/icon/n-check.png"></image>
									<image v-else src="@/static/icon/check.png"></image>
								</view>
								<image class="shop-img" :src="item.imgs"></image>
								<view class="shop-content">
									<view class="title">
										<view class="name u-line-2">{{item.goods_name}}</view>
										<view class="tip u-line-1">{{item.unit_name}}</view>
									</view>
									<view class="price-btn">
										<view class="price">¥{{item.sell}}</view>
										<view class="btn">
											<view class="num">{{item.cart_num}}</view>
											<u--icon name="plus-circle-fill" size="20" color="#20b128"></u--icon>
										</view>
									</view>
								</view>
							</view>
						</view>
						<view v-else style="margin-top: 100rpx;">
							<up-empty text="购物车空空如也"
								icon="https://lihai001.oss-cn-chengdu.aliyuncs.com/def/29955202404260944367594.png">
							</up-empty>
						</view>
						<view style="width: 100%;height: 200rpx;"></view>
					</view>
				</scroll-view>
			</swiper-item>
			<swiper-item class="swiper-item">
				<scroll-view scroll-y @refresherrefresh="refresherrefresh(2)" :refresher-triggered="triggered"
					refresher-enabled refresher-background="#F6F6F6" style="height: 100%;width: 100%;">
					<view class="page-box1">
						<view v-if="frequentlyList.length>0" class="list">
							<view class="shop-item" v-for="(item, index) in frequentlyList" :key="index"
								@click="openGoodPopup(item)">
								<image class="shop-img" :src="item.imgs"></image>
								<view class="shop-content" style="width: 490rpx;">
									<view class="title">
										<view class="name u-line-2">{{item.name}}</view>
										<!-- <view class="tip u-line-1">{{item.spec}}</view> -->
										<view class="tip u-line-1">{{item.unit_name}}</view>
									</view>
									<view class="price-btn">
										<view class="price">¥{{item.sell}}</view>
										<view class="btn">
											<up-button size="small" plain color="#20b128"
												shape="circle">加入购物车</up-button>
										</view>
									</view>
								</view>
							</view>
						</view>
						<view v-else style="margin-top: 100rpx;">
							<up-empty text="没有常买的商品"
								icon="https://lihai001.oss-cn-chengdu.aliyuncs.com/def/29955202404260944367594.png">
							</up-empty>
						</view>
						<view style="width: 100%;height: 200rpx;"></view>
					</view>
				</scroll-view>
			</swiper-item>
		</swiper>


	</view>
	<up-transition :show="tabsActive==0">
		<view class="fiexd-btn-box cart-btn">
			<view class="cart-check" @click="changeAll(checkAll===cartInfo.count)">
				<image v-if="checkAll!=cartInfo.count" src="@/static/icon/n-check.png"></image>
				<image v-else src="@/static/icon/check.png"></image>
				<text style="font-size: 24rpx;">全选</text>
				<text style="font-size: 24rpx;" v-if="checkAll">({{checkAll}})</text>
			</view>
			<view v-if="!isAdmin" class="btn-boxs">
				<view class="all-price">
					<view style="width: 80rpx;">合计:</view>
					<view class="price">
						<text style="font-size: 24rpx;">¥</text>
						<text style="font-size: 34rpx;">{{c_price0}}</text>
						<text style="font-size: 24rpx;">.{{c_price1}}</text>
					</view>
				</view>
				<view style="width: 200rpx;">
					<up-button color="#20b128" shape="circle" :disabled="!checkAll" @click="settleAccounts">去结算<text
							v-if="checkAll">({{checkAll}})</text></up-button>
				</view>
			</view>
			<view v-else class="btn-boxs">
				<!-- <view style="width: 100px;margin-right: 20rpx;"><up-button size="small" plain color="#989898" shape="circle">移入收藏夹</up-button></view> -->
				<view style="width: 100px;"><up-button @click="deleteCartList()" size="small" plain color="#989898"
						shape="circle">删除</up-button></view>
			</view>
		</view>
	</up-transition>
	<goodPopup ref="goodRef" :show="showGoodPopup" @close="showGoodPopup=false" @change="changeGood" />
</template>

<script setup>
	import {
		onShow
	} from "@dcloudio/uni-app"
	import {
		computed,
		ref,
		watch
	} from 'vue';
	import {
		cartListApi,
		cartChangeApi,
		cartCreateApi,
		cartDeleteApi,
		frequentlyPurchaseApi
	} from "@/api/cart.js"
	import goodPopup from "@/components/goodPopup.vue"
	import useCartStore from "@/store/cart.js"

	const cartStore = useCartStore();

	// 创建响应式数据  
	const list = ref(['购物车', '常买']);
	const tabsActive = ref(0)
	// 定义方法  
	const changeTab = (e) => {
		tabsActive.value = e;
		swiperCurrent.value = e;
	}

	const swiperCurrent = ref(0);
	const animationfinish = ({
		detail: {
			current
		}
	}) => {
		swiperCurrent.value = current;
		tabsActive.value = current;
		if (swiperCurrent.value == 1) getFrequentlyPurchase();
	}

	// 结算
	const settleAccounts = () => {
		let list = [];
		cartList.value.forEach(item => {
			if (item.check) list.push(item.id);
		})
		cartStore.setCartList(list);
		uni.navigateTo({
			url: '/pagesOrder/settle/settle'
		})
	}
	// 删除
	const deleteCartList = () => {
		let list = [];
		if (!cartList.value.length) return uni.showToast({
			title: '请选择商品',
			icon: 'none'
		});
		console.log(cartList.value)
		cartList.value.forEach(item => {
			if (item.check) list.push(item.id);
		})
		cartDeleteApi({
			id: list
		}).then(() => {
			getcartList(false);
		})
	}

	// 购物车相关
	const addCart = (id, cart_num) => { //加入购物车
		cartCreateApi({
			cart_num: +cart_num,
			goods_id: id
		}).then(res => {
			getcartList();
		})
	}
	const isAdmin = ref(false); //是否管理


	// 选择商品相关
	const showGoodPopup = ref(false);
	const goodRef = ref(null);
	const goodData = ref({});
	const openGoodPopup = (item) => { // 打开数量/重量弹窗
		goodData.value = JSON.parse(JSON.stringify(item));
		goodRef.value.setData(goodData.value);
		showGoodPopup.value = true;
	};
	const changeGood = (data) => { // 确定选择商品重量
		showGoodPopup.value = false;
		addCart(data.goods_id || data.id, data.cart_num);
	}

	const cartList = ref([]);
	const cartInfo = ref({});
	const getcartList = (check = true) => {
		cartListApi().then(res => {
			if (check) {
				res.data.lists = res.data.lists.map(item => {
					item.check = true;
					return item;
				})
				checkAll.value = res.data?.count || 0
			} else {
				checkAll.value = 0
			}
			cartList.value = res.data.lists;
			cartInfo.value = {
				total_price: res.data?.extend.total_price || '0.00',
				count: res.data?.count || 0
			}
			setTimeout(() => {
				triggered.value = false;
			}, 300)
		})
	}

	const c_price0 = computed(() => {
		let price = cartInfo.value.total_price + '';
		return price.split('.')[0] || '0';
	})
	const c_price1 = computed(() => {
		let price = cartInfo.value.total_price + '';
		return price.split('.')[1] || '00';
	})

	// 选中
	let checkAll = ref(0)
	const checkItem = (item, type) => {
		item.check = type;
		let price = Number(cartInfo.value.total_price);
		if (type) {
			price += item.sell * item.cart_num;
			checkAll.value++;
		} else {
			price -= item.sell * item.cart_num;
			checkAll.value--;
		}
		cartInfo.value.total_price = price.toFixed(2);
	}
	const changeAll = (flag = false) => {
		let count = 0;
		cartList.value.forEach(item => {
			item.check = !flag;
			if (!flag) count += item.sell * item.cart_num;
		})
		if (!flag) {
			checkAll.value = cartInfo.value.count;
		} else {
			checkAll.value = 0;
		}
		cartInfo.value.total_price = count.toFixed(2);
	}

	// 常买记录
	const frequentlyList = ref([]);
	const where = ref({
		page_no: 1,
		page_size: 25
	})
	const getFrequentlyPurchase = () => {
		frequentlyPurchaseApi({
			...where.value
		}).then(res => {
			frequentlyList.value = res.data;
			setTimeout(() => {
				triggered.value = false;
			}, 300)
		})
	}

	const triggered = ref(false);
	const refresherrefresh = (type = 1) => {
		triggered.value = true;
		if (type == 1) getcartList();
		if (type == 2) getFrequentlyPurchase();
	}

	onShow(() => {
		getcartList();
	})
</script>

<style lang="scss">
	.tabs {
		color: #444444;
		font-size: 32rpx;
		margin-right: 30rpx;
	}

	.tabs-active {
		color: #20B128;
		// font-size: 34rpx;
		transition: 300ms;
	}

	.wrap {
		display: flex;
		flex-direction: column;
		height: calc(100vh - var(--window-top));
		width: 100%;
		background-color: #f6f6f6;
	}

	.swiper-box {
		flex: 1;
	}

	.swiper-item {
		height: 100%;
	}

	.page-box1 {
		position: relative;

		.total {
			padding: 0 20rpx;
			display: flex;
			justify-content: space-between;
			position: fixed;
			top: var(--window-top);
			left: 0;
			right: 0;
			z-index: 100;
			height: 60rpx;
			line-height: 60rpx;
			font-size: 26rpx;
			color: #444;
		}

		.list {
			margin: 20rpx;
			border-radius: 20rpx;
			overflow: hidden;

			.shop-item {
				padding: 20rpx;
				border-bottom: 1rpx solid #f6f6f6;
				background-color: #fff;
				display: flex;

				.shop-check {
					width: 60rpx;
					height: 120rpx;
					display: flex;
					align-items: center;

					image {
						width: 40rpx;
						height: 40rpx;
					}
				}

				.shop-img {
					height: 120rpx;
					width: 120rpx;
					margin-right: 20rpx;
					border-radius: 14rpx;
				}

				.shop-content {
					width: 430rpx;
					display: flex;
					flex-direction: column;
					justify-content: space-between;

					.title {
						.name {
							font-size: 28rpx;
						}

						.tip {
							color: #999;
							font-size: 24rpx;
							margin: 12rpx 0;
						}
					}

					.price {
						font-size: 30rpx;
						font-weight: bold;
						color: #F55726;
					}

					.price-btn {
						display: flex;
						justify-content: space-between;

						.btn {
							display: flex;
							align-items: center;

							.num {
								margin: 0 20rpx;
								text-align: center;
							}
						}
					}
				}
			}
		}
	}

	.cart-btn {

		.cart-check {
			display: flex;
			align-items: center;

			image {
				width: 40rpx;
				height: 40rpx;
				margin: 0 10rpx;
			}
		}

		.btn-boxs {
			display: flex;

			.all-price {
				display: flex;
				align-items: center;
				margin-right: 20rpx;

				.price {
					color: #20B128;
					display: table-cell;
					vertical-align: bottom;
					font-weight: bold;
				}
			}

		}
	}
</style>