<template>
	<view class="mainBox">
		<view class="main">
			<uni-nav-bar fixed="true" statusBar="true" left-icon="back" :title="`选择${warehousingName}`"
				@clickLeft="backAdd">
				<!--右菜单-->
				<template slot="right">
					<u-button type="success" size="small" class="u-reset-button" @click="$refs.treePicker._show()"
						text="选择分类"></u-button>
				</template>
			</uni-nav-bar>
			<view class="top-wrapper">
				<uni-section>
					<uni-easyinput prefixIcon="search" style="width: 460rpx" v-model="searchVal" placeholder="请输入编码/名称">
					</uni-easyinput>
				</uni-section>
				<view style="display: flex;">
					<button class="search_btn" @click="doSearch">搜索</button>
					<view class="more_search">
						<image src="~@/static/moreSearch.svg" mode="" @click="searchVisible = true"></image>
					</view>
				</view>
			</view>
			<view class="wrapper">
				<u-list @scrolltolower="scrolltolower" class="listContent">
					<checkbox-group v-for="(item, index) in listData" :key="index"
						@change.stop="e => selectVal(e, item, index)">
						<label>
							<view class="listBox">
								<view class="listBox-sel">
									<checkbox :value="item.code" color="#fff" :disabled="item.disabled"
										:checked="item.checked" />
								</view>
								<view class="listBox-con">
									<view style="display: flex;">
										<view class="listBox-top" style="justify-content: left;">
											<view class="round">{{Number(index)+1}}</view>
											<view class="listBox-name">
												{{ item.categoryName }}
											</view>
										</view>
										<view class="listBox-top">
											<view class="listBox-code">
												{{ item.categoryCode }}
											</view>
										</view>
									</view>
									<view class="listBox-bottom">
										<!-- <view v-for="(itm, index) in tableHeader" :key="index">{{ itm.label }}：{{ item[itm.prop] }}</view> -->
										<view>牌号：{{ item.brandNum }}</view>
										<view>型号：{{ item.modelType }}</view>
										<view>规格：{{ item.specification }}</view>
										<view v-if="dimension != 1">批次号：{{ item.batchNo }}</view>
										<view class="input_view" v-else>
											数量：
											<u--input type="number" placeholder="请输入" border="surround"
												v-model="item.outboundNum"
												@change="filterOutboundNum($event, item, index)"></u--input>
										</view>
										<view>计量数量：{{ item.measureQuantity }}({{ item.measureUnit }})</view>
										<view class="w100" v-if="dimension == 3">包装编码：{{ item.packageNo }}</view>
										<view v-if="dimension == 3">
											包装数量：{{ item.packingQuantity }}({{ item.packingUnit }})</view>
										<view>重量：{{ item.weight }}({{ item.weightUnit }})</view>
										<view v-if="dimension == 3">发货条码：{{ item.barcodes }}</view>
										<view v-if="dimension == 3">物料代号：{{ item.materielDesignation }}</view>
										<view v-if="dimension == 3">客户代号：{{ item.clientCode }}</view>
										<view v-if="dimension == 3">刻码：{{ item.engrave }}</view>
										<view v-if="dimension == 3">仓库：{{ item.warehouseName }}</view>
									</view>
								</view>
							</view>
						</label>
					</checkbox-group>
					<u-empty class="noDate" style="margin-top: 20vh" v-if="!listData.length"></u-empty>
				</u-list>
			</view>

			<view class="footer">
				<view class="bottom">
					<checkbox v-if="!seletedAll" color="#fff" :checked="seletedAll" @tap="_seletedAll">全选</checkbox>
					<checkbox class="select-all" color="#fff" v-else :checked="seletedAll" @tap="_seletedAll">取消全选
					</checkbox>
				</view>
				<u-button type="success" size="small" class="u-reset-button" :disabled="!checkListLen" @click="jumpAdd">
					<view class="selBtn">选择( {{ checkListLen }} )</view>
				</u-button>
			</view>
		</view>
		<!-- 搜索组件 -->
		<u-popup :show="searchVisible" mode="top" @close="searchVisible = false" @open="openSearch">
			<!-- <view class="search-container">
				<view class="title">筛选</view>
				<uni-forms ref="customForm" :modelValue="popupInfo" label-position="top">
					<uni-forms-item label="列表维度" name="categoryCode">
						<uni-data-select v-model="popupInfo.dimension" :localdata="dimensionOptions"></uni-data-select>
					</uni-forms-item>
					<uni-forms-item label="仓库" name="sourceBizNo">
						<uni-data-select v-model="popupInfo.warehouseId"
							:localdata="warehouseListOption"></uni-data-select>
					</uni-forms-item>
				</uni-forms>
				<view class="footer">
					<view class="btn reset" @click="handleReset">重置</view>
					<view class="btn search" @click="handleSearch">搜索</view>
				</view>
			</view> -->
			<view class="search_list">
				<u-form labelPosition="left" :model="popupInfo" labelWidth="180" labelAlign="left" class="baseForm">
					<u-form-item label="列表维度:" class="required-form" borderBottom prop="assetType">
						<zxz-uni-data-select :localdata="dimensionOptions" v-model="popupInfo.dimension"
							dataValue='value' dataKey="text" filterable format='{text}'></zxz-uni-data-select>
					</u-form-item>
					<u-form-item label="仓库:" class="required-form" borderBottom prop="warehouseId">
						<zxz-uni-data-select :localdata="warehouseListOption" v-model="popupInfo.warehouseId"
							dataValue='value' dataKey="text" filterable format='{text}'></zxz-uni-data-select>
					</u-form-item>
				</u-form>
			</view>
			<view class="operate_box rx-bc">
				<u-button size="small" class="u-reset-button" @click="handleReset">
					重置
				</u-button>
				<u-button type="success" size="small" class="u-reset-button" @click="handleSearch">
					确定
				</u-button>
			</view>
		</u-popup>
		<ba-tree-picker ref="treePicker" key="verify" :multiple="false" @select-change="confirm" title="选择分类"
			:localdata="classificationList" valueKey="id" textKey="name" childrenKey="child" />
	</view>
</template>

<script>
	import {
		getTreeByIds,
		getPackingList,
		getWarehouseList,
		getProductList,
		getBatchList,
		getHierarchyList,
		getHierarchyFifo
	} from '@/api/warehouseManagement'
	import {
		warehousingType,
		tableContentData
	} from '../enum.js'
	import baTreePicker from '@/components/ba-tree-picker/ba-tree-picker.vue'
	import {
		tableHeader
	} from '../common'
	import UList from '../../../uni_modules/uview-ui/components/u-list/u-list.vue'
	export default {
		components: {
			baTreePicker
		},

		data() {
			return {
				popupInfo: {
					dimension: 3,
					warehouseId: ''
				},
				dimension: 3,
				warehouseId: '',
				searchVisible: false,
				warehouseListOption: [],
				dimensionOptions: [{
						value: 1,
						text: '物品维度'
					},
					{
						value: 2,
						text: '批次维度'
					},
					{
						value: 3,
						text: '包装维度'
					}
				],
				page: 1,
				size: 20,
				isEnd: true,
				searchVal: '',
				pickTabIndex: 1,
				popupShow: false, //右侧搜索窗
				typeIndex: 1,
				listData: [], //列表数据
				classificationList: [], //分类数据
				seletedAll: false, //全选状态
				bizScene: '',
				warehousingName: '',
				warehousingType: ''
			}
		},
		//选择的列表长度
		computed: {
			tableHeader() {
				return tableHeader(+this.warehousingType)
			},
			checkListLen() {
				console.log(
					'this.listData.filter(el => el.checked)---',
					this.listData.filter(el => el.checked)
				)
				return this.listData.filter(el => el.checked).length
			},
			curTab() {
				return warehousingType.find(i => i.id == this.warehousingType) || {}
			}
		},
		onLoad({
			assetType
		}) {
			this.assetType = assetType
		},
		//触底刷新
		// onReachBottom: function () {
		// 	if (this.isEnd) {
		// 		return
		// 	}
		// 	// 显示加载图标
		// 	uni.showLoading({
		// 		title: '数据加载中'
		// 	})
		// 	//获取更多数据
		// 	this.page++
		// 	this.getList()
		// },
		onShow() {
			this.getClassify()
			this.getwarehouseOptions()
		},
		methods: {
			openSearch() {
				this.popupInfo = {
					dimension: this.dimension,
					warehouseId: this.warehouseId
				}
			},
			filterOutboundNum(value, row, index) {
				if (value <= 0) {
					this.$set(this.listData[index], 'outboundNum', 1)
				}
				if (value > row.measureQuantity) {
					this.$set(this.listData[index], 'outboundNum', row.measureQuantity)
				}
			},
			//获取仓库
			getwarehouseOptions() {
				getWarehouseList().then(res => {
					this.warehouseListOption = res.data.map(item => {
						return {
							value: item.id,
							text: item.name
						}
					})
				})
			},
			handleReset() {
				this.popupInfo = {
					dimension: 3,
					warehouseId: ''
				}
				this.dimension = 3
				this.warehouseId = ''
				this.listData = []
				this.getList()
			},
			handleSearch() {
				this.dimension = this.popupInfo.dimension
				this.warehouseId = this.popupInfo.warehouseId
				this.getList()
			},
			scrolltolower() {
				if (this.isEnd) {
					return
				}
				// 显示加载图标
				uni.showLoading({
					title: '数据加载中'
				})
				//获取更多数据
				this.page++
				this.getList()
			},
			//列表数据
			async getList() {
				this.searchVisible = false
				this.isEnd = false
				this._getClassifyList()
			},
			async _getClassifyList() {
				uni.showLoading({
					title: '数据加载中'
				})
				let res = null
				const params = {
					pageNum: this.page,
					size: this.size,
					searchKey: this.searchVal,
					warehouseId: this.popupInfo.warehouseId,
					categoryLevelId: this.categoryLevelId
				}
				if (this.popupInfo.dimension == 1) {
					// 物品维度
					res = await getProductList(params)
				} else if (this.popupInfo.dimension == 2) {
					// 批次维度
					res = await getBatchList(params)
				} else {
					// 包装维度
					res = await getPackingList(params)
				}
				uni.hideLoading()
				if (this.page == 1) {
					this.listData = []
				}
				this.listData = this.listData.concat(res.list)
				this.isEnd = this.listData.length >= res.count
			},
			confirm([id]) {
				console.log('id----------', id)
				this.categoryLevelId = id
				this.page = 1
				this.getList()
			},
			async getClassify() {
				getTreeByIds({
					ids: this.assetType
				}).then(res => {
					console.log('res--------', res)
					this.classificationList = res
					this.page = 1
					this.getList()
				})
			},
			doSearch() {
				this.page = 1
				this.getList()
			},
			//勾选
			selectVal(e, val, index) {
				this.$set(this.listData[index], 'checked', !this.listData[index].checked)
				// this.listData[index].checked = !this.listData[index].checked
				this.seletedAll = !this.listData.some(item => !item.checked)
			},
			//全选按钮
			_seletedAll() {
				if (!this.seletedAll) {
					this.seletedAll = true
					this.listData.map(item => {
						this.$set(item, 'checked', true)
					})
				} else {
					this.seletedAll = false
					//this.checkListLen = 0;
					this.listData.map(item => {
						this.$set(item, 'checked', false)
					})
				}
			},
			//跳转回添加页面
			async jumpAdd() {
				let selectionList = this.listData.filter(item => item.checked)
				if (this.dimension == 1) {
					let boolen = selectionList.every(item => item.outboundNum > 0)
					if (!boolen) {
						uni.showToast({
							icon: 'none',
							title: '请输入出库数量',
							duration: 2000
						})
						return
					}
				}
				let data = null
				if (this.dimension != 1) {
					data = await getHierarchyList({
						ids: selectionList.map(item => item.id).join(','),
						type: this.dimension
					})
				} else {
					data = await getHierarchyFifo({
						type: this.dimension,
						builders: selectionList.map(item => {
							return {
								categoryId: item.categoryId,
								num: item.outboundNum
							}
						})
					})
				}
				console.log('data-------------------', data)
				uni.$emit('setSelectList', data)
				uni.navigateBack()
			},
			//返回添加页
			backAdd() {
				uni.navigateBack()
			}
		}
	}
</script>

<style lang="scss" scoped>
	.mainBox {
		height: 100vh;

		.main {
			height: 100%;
			display: flex;
			flex-direction: column;
		}

		.top-wrapper {
			display: flex;
			height: 88rpx;
			align-items: center;
			justify-content: space-between;
			padding: 20rpx;

			/deep/.uni-section {
				margin-top: 0px;
			}

			/deep/.uni-section-header {
				padding: 0px;

			}

			.search_btn {
				width: 120rpx;
				height: 70rpx;
				line-height: 70rpx;
				background: $theme-color;
				font-size: 28rpx;
				color: #fff;
			}

			.menu_icon {
				width: 44rpx;
				height: 44rpx;
				margin-left: 14rpx;
			}

			.more_search {
				display: flex;
				align-items: center;
				height: 70rpx;
				line-height: 70rpx;

			}

			/deep/.u-input {
				border: 1rpx solid #ccc;

				.u-input__content__field-wrapper__field {
					height: 40rpx !important;
				}
			}

			image {
				width: 52rpx;
				height: 52rpx;
				margin-left: 10rpx;
			}

		}

		.wrapper {
			flex: 1;
			overflow: hidden;
		}

		.listContent {
			height: 100% !important;

			.listBox {
				display: flex;
				// height: 180rpx;
				padding: 20rpx 0;
				border-bottom: 2rpx solid #e5e5e5;

				.listBox-sel {
					height: 90rpx;
					width: 80rpx;
					// line-height: 90rpx;
					text-align: center;

					checkbox {
						transform: scale(1.2);
					}
				}

				.listBox-con {
					width: 100%;
					// display: flex;
					// flex-wrap: wrap;
					// justify-content: space-between;
					align-items: center;
					padding: 0 18rpx 0 0;

					.round {
						width: 40rpx;
						height: 40rpx;
						line-height: 40rpx;
						border-radius: 50%;
						background: $theme-color;
						color: #fff;
						text-align: center;
						font-size: 20rpx;
					}

					.listBox-top {
						width: 100%;
						display: flex;
						justify-content: space-between;
						padding-bottom: 10rpx;

						.listBox-name,
						.listBox-code {
							display: inline-block;
							font-size: $uni-font-size-sm;
							font-weight: bold;
						}
					}

					.listBox-bottom {
						width: 100%;
						display: flex;
						justify-content: space-between;
						font-size: $uni-font-size-sm;
						flex-wrap: wrap;

						>view {
							width: 50%;
							overflow: hidden;
							white-space: nowrap;
							text-overflow: ellipsis;
						}

						.input_view {
							display: flex;
							align-items: center;
							justify-content: center;

							.u-input {
								height: 36rpx;
								padding: 0 !important;
								margin-right: 10rpx;
								border: 1px solid #ddd;
							}
						}

						.w100 {
							width: 100%;
						}
					}
				}
			}

			.noDate {
				height: 100%;
			}
		}

		//底部按钮
		.footer {
			height: 90rpx;
			position: relative;
			display: flex;
			justify-content: space-between;
			align-items: center;
			bottom: 0;
			width: 100%;
			height: 100rpx;
			border-top: 1rpx solid #eeecec;
			background-color: #ffffff;
			z-index: 999;

			.bottom {
				margin-left: 10rpx;
			}

			.u-reset-button {
				position: absolute;
				right: 10rpx;
				top: 20rpx;
				width: 150rpx;
			}
		}

		.search_list {
			min-height: 100rpx;

			/deep/ .baseForm {
				padding: 0 20rpx;
			}
		}

		.operate_box {
			padding: 10rpx 32rpx;

			/deep/ .u-button {
				width: 40%;
			}
		}
	}
</style>