<template>
	<view class="safe-page">
		<up-sticky>
			<view class="bg-fff u-p-l-30  u-p-r-30 u-p-b-30">
				<!-- <view class="myTabs ">
				<myTabs :list="tabsList" @change="tabsChange"></myTabs>
			</view> -->
				<view class="input-wrapper">
					<view class="input-main">
						<view class="u-flex u-p-r-30 u-font-28" @click="onCategoryShowChange(true)">
							<text class="u-m-r-10 u-line-1" style="max-width: 100rpx;">{{pageData.categoryName||'分类' }}</text>
							<up-icon name="arrow-down" size="16"></up-icon>
						</view>
						<uni-easyinput clearable class='jeepay-search' :inputBorder="false"
							:placeholder="pageData.search.placeholder" v-model="pageData.query.name"
							@confirm="searchFunc">
							<template #prefixIcon>
								<image src="@/static/iconImg/icon-search.svg" class="input-icon" />
							</template>
						</uni-easyinput>
						<button type="text" @click="searchFunc()">搜索</button>
					</view>
				</view>
				<view class="u-flex  states1 u-row-between  u-font-28">
					<view class="u-flex">
						<view class="u-p-l-16 item u-p-r-16 u-p-t-6 u-p-b-6 tranistion u-text-center color-333"
							:class="{'active':pageData.stateCurrent==index}" @tap="statesTableClick(index)"
							v-for="(item,index) in statesTabsList" :key="index">
							{{item}}
						</view>
					</view>
					<view class="u-flex u-col-center" @click="go.to('PAGES_PRODUCT_SPECIF_TEMPLATE')">
						<image src="/pageProduct/static/images/icon-guige.svg" class="icon-guige" />
						<text class="color-666 u-m-l-12 u-font-24">规格模版</text>
					</view>
				</view>

			</view>
		</up-sticky>
		<view class="goods-list u-p-30">
			<template v-if="pageData.goodsList.length">
				<view class="u-m-b-32" v-for="(item,index) in pageData.goodsList" :key="index">
					<my-goods @changeClick="goodsChangeClick" @radioClick="goodsRadioClick" :index="index" :data="item"
						@del="goodsDel" :showChecked="showChecked" :showDetail="pageData.showGoodsDetail"></my-goods>
				</view>
			</template>
			<template v-if="pageData.hasAjax&&!pageData.goodsList.length">
				<my-img-empty tips="未找到相关商品"></my-img-empty>
			</template>
			<my-pagination :totalElements="pageData.totalElements" :size="pageData.query.size"
				@change="pageChange"></my-pagination>
			<view style="height: 100rpx;"></view>
		</view>

		<my-control ref="control" :categoryShow="pageData.categoryShow" :categoryName="pageData.categoryName"
			@categoryChange="categoryIdChange" @offShelf="offShelf" @allCheckedChange="allCheckedChange"
			@controlChange="controlChange" @toggleCategory="toggleCategory"
			:bottom="pageData.componentBottom"></my-control>
		<!-- <my-category ref="category" @change="onCategoryShowChange" @cateClick="cateClick"
			:bottom="pageData.componentBottom+100"></my-category> -->
		<!-- 下架弹窗 -->
		<my-model :desc="pageData.modelDesc" ref="model" @confirm="modelConfirm"></my-model>
		<!-- 商品库存修改弹窗 -->
		<my-model ref="goodsStockModel" title="商品修改" @close="goodsStockModelClose">
			<template #desc>
				<view class="u-p-40 u-text-left">
					<view>
						<view class="">排序:</view>
						<view class="u-m-t-24">
							<uni-easyinput v-model="goodsStockData.sort" placeholder="请输入排序"></uni-easyinput>
						</view>
					</view>
					<view class="u-flex u-m-t-32">
						<view class="">库存开关:</view>
						<view class="u-m-l-46 ">
							<my-switch v-model="goodsStockData.isStock"></my-switch>
						</view>
					</view>
					<!-- <view class="u-flex u-m-t-32">
						<view class="">共享库存:</view>
						<view class="u-m-l-46 ">
							<my-switch v-model="goodsStockData.isDistribute"></my-switch>
						</view>
					</view>
					<view class="u-flex u-m-t-32">
						<view class="">售罄:</view>
						<view class="u-m-l-46 ">
							<my-switch v-model="goodsStockData.isPauseSale"></my-switch>
						</view>
					</view>
					<view class="u-flex u-m-t-32">
						<view class="">上架:</view>
						<view class="u-m-l-46 ">
							<my-switch v-model="goodsStockData.isGrounding"></my-switch>
						</view>
					</view> -->

					<!-- <view class="u-m-t-24 u-m-t-32" v-if="goodsStockData.isStock">
						<view class="">数量:</view>
						<view class="u-m-t-24">
							<uni-easyinput v-model="goodsStockData.stockNumber" placeholder="请输入库存数量"></uni-easyinput>
						</view>
					</view> -->
				</view>

			</template>
			<template #btn>
				<view class="stock-btns u-p-b-40">
					<my-button shape="circle" @tap="goodsStockModelSave">保存</my-button>
					<my-button shape="circle" type="default" @tap="goodsStockModelCancel">取消</my-button>
				</view>
			</template>
		</my-model>

		<!-- 分类 -->
		<my-category  v-model:isShow="pageData.categoryShow" @confirm="setCategory"></my-category>
	</view>

</template>

<script setup>
	import {
		onLoad,
		onReady,
		onShow,
		onPageScroll,
		onPullDownRefresh
	} from '@dcloudio/uni-app';
	import {
		reactive,
		ref,
		watch
	} from 'vue';
	import go from '@/commons/utils/go.js';
	import myGoods from './components/goods.vue'
	import myControl from './components/control.vue'
	import myCategory from './components/category.vue'
	import infoBox from "@/commons/utils/infoBox.js"
	import {
		$tbProduct,
		$upProSort,
		$updateProduct,
		$getProductDetail,
		$delProduct,
		$updateProductStatus
	} from "@/http/yskApi/goods.js"
	const pageData = reactive({
		modelDesc: '是否下架',
		stateCurrent: 0,
		componentBottom: 45,
		search: {
			value: '',
			placeholder: '输入搜索的商品'
		},
		showGoodsDetail: false,
		selGoodsIndex: '',
		totalElements: 0,
		totalPage: 0,
		goodsList: [],
		query: {
			page: 0,
			size: 10,
			categoryId: '',
			name: ''
		},
		category: '',
		categoryShow: false,
		categoryName: '',
		hasAjax: false
	})
	watch(()=>pageData.query.categoryId,(newval)=>{
		getGoodsList()
	})
	function onCategoryShowChange(show) {
		console.log(show);
		pageData.categoryShow = show
	}
	function setCategory(category){
		pageData.query.categoryId = category.id
		pageData.categoryName = category.name
	}

	function getGoodsList() {
		$tbProduct(pageData.query).then(res => {
			pageData.hasAjax = true
			console.log(res);
			pageData.goodsList = res.content.map(v => {
				return {
					...v,
					isSellNone: false,
					checked: false,
					showDetail: false
				}
			})
			pageData.totalElements = res.totalElements
		})
	}
	onShow(() => {
		getGoodsList()
	})

	const tabsList = ['简洁', '详情']
	const statesTabsList = ['全部', '已售罄','在售中', '已下架']
	const control = ref(null)
	const model = ref(null)
	const goodsStockModel = ref(null)

	function returnGoodsStockData() {
		return reactive({
			sort: 0,
			isStock: false,
			isDistribute: false,
			isPauseSale: false,
			isGrounding: false,
			stockNumber: 0,
		})
	}
	let goodsStockData = returnGoodsStockData()

	function goodsStockModelClose() {
		console.log('goodsStockModelClose');
		goodsStockData = returnGoodsStockData()
	}

	function goodsStockModelCancel() {
		console.log('goodsStockModelCancel');
		goodsStockModel.value.close()
		goodsStockData = returnGoodsStockData()
	}

	async function goodsStockModelSave() {
		const item = pageData.goodsList[pageData.selGoodsIndex]
		const goods = await $getProductDetail(item.id, false)
		$updateProduct({
			...goods,
			sort: goodsStockData.sort,
			isStock: goodsStockData.isStock
		}).then(res => {
			item.sort = goodsStockData.sort
			item.isStock = goodsStockData.isStock
			item.stockNumber = goodsStockData.stockNumber
			goodsStockModelCancel()
		})
	}



	//点击修改按钮弹出修改商品弹窗
	function goodsChangeClick(index) {
		pageData.selGoodsIndex = index
		const goods = pageData.goodsList[index]
		Object.assign(goodsStockData, goods)
		goodsStockModel.value.open()
	}
	//删除商品
	function goodsDel(index) {
		const goods = pageData.goodsList[index]
		uni.showModal({
			title: '提示',
			content: '确认删除该商品',
			success: function(res) {
				if (res.confirm) {
					$delProduct([goods.id]).then(res => {
						uni.showToast({
							title: '删除成功',
							icon: 'none'
						})
						pageData.goodsList.splice(index, 1)
					})
				} else if (res.cancel) {}
			}
		});
	}


	function statesTableClick(index) {
		pageData.stateCurrent = index
	}

	let test = ref(false)

	function tabsChange(i) {
		console.log(i);
		pageData.showGoodsDetail = i ? true : false
	}


	//改变商品的选中状态
	function changeGoodsChecked(checked, index) {
		if (index !== undefined) {
			pageData.goodsList[index].checked = checked
		} else {
			pageData.goodsList.map(v => {
				v.checked = checked
			})
		}
		control.value.setisSelectAll(isAllChecked() ? true : false)
	}


	// 获取已经选中的商品
	function getChechkedGoodsList() {
		return pageData.goodsList.filter(v => v.checked)
	}
	//是否全部选中
	function isAllChecked() {
		return getChechkedGoodsList().length === pageData.goodsList.length
	}
	// 是否有商品选中
	function isHasChekdGoods() {
		return getChechkedGoodsList().length ? true : false
	}

	function searchFunc() {
		console.log('searchFunc');
		getGoodsList()
	}

	let showChecked = ref(false)

	//商品start

	function goodsRadioClick(index) {
		var checked = !pageData.goodsList[index].checked
		changeGoodsChecked(checked, index)
	}


	//下架
	function offShelf() {
		const hasCheckedArr = getChechkedGoodsList()
		const hasChecked = isHasChekdGoods()
		if (!hasChecked) {
			return infoBox.showToast('您还没有选中商品！')
		}
		model.value.open()
	}
	//下架确认
	function modelConfirm() {
		console.log('confirm');
		model.value.close()
	}

	//商品end

	//控制条
	function controlChange(bol) {
		showChecked.value = bol
	}



	// 全选
	function allCheckedChange(checked) {
		changeGoodsChecked(checked)
	}

	// 页数改变事件
	function pageChange(page) {
		console.log(page);
		pageData.query.page = page - 1
		getGoodsList()
	}

	//分类
	const category = ref(null)

	function toggleCategory() {
		category.value.toggle()
	}

	function cateClick(cate) {
		console.log(cate);
		pageData.query.categoryId = cate.id
		pageData.categoryName = cate.name
		pageData.category = cate
		getGoodsList()
	}
</script>
<style scoped>
	page {
		background: #F9F9F9;
	}
</style>
<style lang="scss" scoped>
	.stock-btns {
		padding: 0 100rpx;
		display: flex;
		flex-direction: column;
		gap: 20rpx;
	}

	.safe-page {
		background: #F9F9F9;
	}

	.icon-guige {
		width: 42rpx;
		height: 42rpx;
	}

	.bg-fff {
		background-color: #fff;
	}

	.myTabs {
		margin: 0 auto;
		width: 434rpx;
		height: 64rpx;
	}

	.input-wrapper {
		display: flex;
		justify-content: space-between;
		align-items: center;
		padding-top: 26rpx;
		background-color: $J-bg-ff;

		.input-main {
			flex: 1;
			display: flex;
			align-items: center;
			height: 64rpx;

			image {
				padding: 22rpx;
				width: 26rpx;
				height: 26rpx;
			}

			input {
				flex: 1;
				font-size: 27rpx;
			}

			::v-deep uni-button {
				font-size: 28rpx;
				color: $my-main-color;
				background: rgba(255, 255, 255, 1);
			}

			::v-deep.uni-easyinput {
				.uni-easyinput__content {
					background-color: $J-bg-f5 !important;
					border-radius: $J-b-r12;

					.uni-easyinput__content-input {
						padding-left: 0 !important;

						.uni-input-input {
							border-radius: $J-b-r12 !important;
							overflow: hidden !important;
						}
					}

					.uni-input-placeholder {
						font-size: 27rpx;
					}

					.uni-icons {
						color: rgba(230, 230, 230, 1) !important;
					}
				}
			}
		}
	}

	.input-icon {
		position: relative;
		z-index: 10;
	}

	.search-button {
		position: absolute;
		right: 0;
		background-color: transparent !important;
		color: transparent !important;
	}

	.states1 {
		margin-top: 40rpx;

		.item {
			font-size: 24rpx;
			color: #666;
			margin-right: 30rpx;
			background: #F4F4F4;
			border-radius: 8rpx 8rpx 8rpx 8rpx;
		}

		.item.active {
			background: #E6F0FF;
			color: $my-main-color;
			border-radius: 8rpx 8rpx 8rpx 8rpx;
		}
	}
</style>