| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679 | <template>	<!-- 运单页面 -->	<view>		<u-navbar title="" autoBack placeholder>			<view class="u-nav-slot nav_center" slot="center" @click="openCenter">				<view style="width: calc(100% - 90rpx);">					<u-search shape="square" :disabled="false" :showAction="false" placeholder="请输入运单号搜索"></u-search>				</view>			</view>		</u-navbar>		<view class="tab_order">			<u-tabs :list="tableList" lineColor="#333333" lineWidth="60" :scrollable="false" :current="current"				@change="tabClick"></u-tabs>		</view>		<view class="card_order_mangement" v-if="orderList.length > 0">			<x-orderManagement ref="order" :orderList="orderList" @sendOrders="sendOrders"				@operateSuccessfully="operateSuccessfully" @proofRenewal="proofRenewal" :key="Math.random()"></x-orderManagement>			<view style="width: 50%;">				<u-loadmore :status="loadStatus" :key="Math.random()" />				<!-- <u-divider v-if="loadingMore" :text="loading"></u-divider> -->			</view>		</view>		<u-empty mode="order" marginTop="50" v-else></u-empty>		<u-popup :show="sendShow" closeable round="8" :closeOnClickOverlay="false" @close="close">			<view class="card_send">				<view class="send_title">派单</view>				<view class="card_input_send">					<view class="incubator_title"><span>*</span>保温箱</view>					<view class="card_search_gray frame" @click="focus(false)">						<span v-if="incubator.name">{{incubator.name}}</span>						<span class="title_gray" v-else>请选择保温箱</span>						<u-icon name="arrow-down" color="#c8c9cc" size="18"></u-icon>					</view>				</view>				<view class="card_input_send">					<view class="incubator_title"><span>*</span>冰排编号</view>					<u-input placeholder="请输入冰排编号" border="surround" v-model="iceNumber" @blur="iceRaftBlur">						<template slot="suffix">							<u-icon name="scan" size="24" @click="sweep"></u-icon>						</template>					</u-input>					<view class="add_card center_in" @click="addIce">						<u-icon name="plus" size="18"></u-icon>					</view>				</view>				<view class="card_frequency">					<view class="card_high space_between">						<view class="card_frequency_title">已扫冰排编号</view>						<view class="card_bottle">已扫<span>{{iceList.length}}</span></view>					</view>					<scroll-view :scroll-top="scrollTop" scroll-y="true" class="swept_card">						<view class="scrollView" style="width: 100%;" v-if="iceList.length > 0">							<view class="item_coding" v-for="(item,index) in iceList" :key="index">								<view style="display: flex;align-items: center;">									<view class="num_index">{{index + 1}}</view>									<view class="title_coding">{{item}}</view>								</view>								<u-icon name="close-circle-fill" color="#c0c4cc" size="20"									@click="removeWaybill(item)"></u-icon>							</view>						</view>					</scroll-view>				</view>				<view style="width: 100%;height: 120rpx;"></view>				<view class="card_btn">					<u-button type="primary" text="确定" @click="confirm"></u-button>				</view>			</view>		</u-popup>	</view></template><script>	const ENV = require('@/.env.js')	export default {		data() {			return {				tableList: [],				list: [{					name: '全部',				}, {					id: 3,					name: '待配送',				}, {					id: 4,					name: '配送中'				}, {					id: 5,					name: '已送达'				}, {					id: 6,					name: '已拒收'				}],				current: 0,				userInfo: {},				orderList: [],				pageSize: 10,				currentPage: 1,				loadingMore: true,				loading: '加载中',				status: null,				sendShow: false,				incubatorValue: '',				thermostatList: [],				incubatorMore: true,				Pagination: 1,				searchShow: false,				hintTitle: '请选择保温箱',				currentItem: '',				iceNumber: '',				iceList: [],				scrollTop: null,				incubator: {					id: null,					name: '',				},				imageData: '',				loadStatus: 'loadmore', //loading 、nomore				keyId: 0,				waybillId: null,			}		},		onUnload() {			// console.log('页面销毁')			this.getempty()		},		onShow() {			let incubator = uni.getStorageSync('incubatorValue')			if (incubator) {				this.incubator.id = incubator.id				this.incubator.name = incubator.name			}		},		onReachBottom() {			if (!this.loadingMore) {				this.getList()			}		},		async onLoad(value) {			//注册监听事件签字图片			uni.$on('sign', (data) => {				if (this.$refs.order) {					this.$refs.order.imageData = data.replace(/[\r\n]/g, "");				}				this.getUpload(data)			})			uni.$on('send', (data) => {				// try {				// } catch (error) {}				uni.$off('send')				this.currentPage = 1				this.orderList = []				this.getList()			})			if (value.current) {				this.current = Number(value.current)			}			var userInfo = this.$cache.getCache('userInfo')			// console.log(userInfo, 25)			this.userInfo = userInfo			this.tableList = this.list			let statusType = ''			if (this.current != 0 || this.current) {				statusType = this.tableList[this.current].id			}			this.status = statusType			this.getList()		},		methods: {			openCenter() {				uni.navigateTo({					url: '/pages/order/orderSearch'				});			},			getempty() {				this.iceList = []				this.incubator.id = ''				this.incubator.name = ''				this.iceNumber = ''				uni.removeStorageSync('incubatorValue');				this.Pagination = 1				this.currentItem = ''				this.incubatorValue = ''				this.hintTitle = '请选择保温箱'				this.sendShow = false				this.incubatorMore = true				this.thermostatList = []			},			// 获取司机和仓管运单列表			getList() {				this.loadStatus = 'loading'				this.loadingMore = true;				this.$api.get('/api/waybill', {					page: this.currentPage,					pageSize: this.pageSize,					status: this.status,				}).then(res => {					if (res.code == 200) {						const data = res.data.list						if (this.loadingMore == true && data) {							this.orderList = this.orderList.concat(data);						}						if (data.length < this.pageSize) {							this.loadingMore = true							this.loading = '没有更多了'							this.loadStatus = 'nomore'						} else {							this.loading = '加载中'							this.loadStatus = 'loading'							this.loadingMore = false							this.currentPage++						}					}					this.$forceUpdate()				}).catch(() => {					this.loadingMore = true					this.loadStatus = 'nomore'				})			},			// 防拆更新			proofRenewal() {				this.currentPage = 1				this.orderList = []				this.getList()			},			// 派单			sendOrders(value) {				// console.log(value, 3333)				this.waybillId = value.id				this.sendShow = true				// this.getIncubator()			},			// 重新获取列表			operateSuccessfully() {				console.log(111)				this.currentPage = 1				this.orderList = []				this.getList()			},			// 获取保温箱			getIncubator() {				this.$api.get('/api/cooler-box', {					page: this.Pagination,					pageSize: this.pageSize,					name: this.incubatorValue,					status: '2',				}).then(res => {					if (res.code == 200) {						const data = res.data.list						data.forEach(item => {							item.flag = false						})						if (this.incubatorMore == true) {							this.thermostatList = this.thermostatList.concat(data);						}						if (data.length < this.pageSize) {							this.incubatorMore = false						} else {							this.incubatorMore = true						}					}				})			},			// 确定派单			confirm() {				if (this.incubator.id) {					if (this.iceList.length > 0) {						const arr = []						arr.push(this.waybillId)						this.$api.post('/api/waybill/delivery', {							waybillIds: arr,							coolerBoxId: this.incubator.id,							iceRaftCode: this.iceList,						}).then(res => {							if (res.code == 200) {								this.currentPage = 1								uni.$u.toast(res.msg)								this.sendShow = false								this.tabClick()							} else if (res.code == 2000) {								let arrTitle = res.data								let title = ' ,请将冰排' + arrTitle.toString() + '重新入库'								uni.$u.toast(res.msg + title)								this.sendShow = false								this.tabClick()							} else {								uni.$u.toast(res.msg)							}						})					} else {						uni.$u.toast('请先扫描冰排')					}				} else {					uni.$u.toast('请先选择保温箱')				}			},			// 滚动加载更多			loadMore() {				if (this.incubatorMore) {					this.Pagination++					this.getIncubator()				}			},			// tab运单			tabClick(row) {				this.loadStatus = 'loading'				this.keyId = row.index				this.loadingMore = true				this.currentPage = 1				this.orderList = []				if (row) {					this.status = row.id				}				this.getList()				this.getempty()			},			close() {				this.getempty()			},			// 搜索保温箱			incubatorInput(value) {				if (this.searchShow) {					this.incubatorMore = true					this.Pagination = 1					this.thermostatList = []					// this.getIncubator()				}			},			// 鼠标聚焦			focus() {				uni.navigateTo({					url: '/pages/order/Incubator'				});				// this.searchShow = true				// if (this.currentItem) {				// 	this.incubatorValue = ''				// 	this.hintTitle = this.currentItem				// } else {				// 	this.hintTitle = '请选择保温箱'				// }			},			// 鼠标失去焦点			blur(value) {				setTimeout(() => {					this.searchShow = false					if (this.currentItem) {						this.incubatorValue = this.currentItem					}				})			},			// 冰排失去焦点			iceRaftBlur(value) {				if (value) {					this.iceList.push(value)					this.iceList = this.uniqueArray(this.iceList)				}			},			// 选择保温箱			selectIncubator(value) {				this.thermostatList.forEach(item => {					if (item.id == value.id) {						item.flag = true						this.incubatorValue = item.name						this.currentItem = item.name						this.searchShow = false						this.getCoolerBox(item.id)					} else {						item.flag = false					}				})			},			// 获取保温箱内冰排			getCoolerBox(id) {				this.$api.get('/api/ice-raft/cooler-box', {					coolerBoxId: id,				}).then(res => {					if (res.code == 200) {						this.iceList = res.data					}				})			},			// 移除错误运单号			removeWaybill(value) {				if (this.iceNumber == value) {					this.iceNumber = ''				}				const arr = deleteElementById(this.iceList, value)				this.iceList = arr				function deleteElementById(arr, key) {					return arr.filter((item) => item !== key);				}			},			// 扫一扫			sweep() {				// 允许从相机和相册扫码				uni.scanCode({					scanType: ['barCode'],					// scanType: ['qrCode'],					autoZoom: false,					success: (res) => {						console.log(res);						if (res.result) {							let url = res.result;							this.iceNumber = url							this.iceList.push(url)							function methods1(arr) {								return Array.from(new Set(arr));							}							this.iceList = methods1(this.iceList)						} else {							console.log('请重新扫描');							return false;						}					},					fail: (res) => {						console.log('未识别到二维码');					}				})			},			// 添加冰排 			addIce() {				if (this.iceNumber) {					this.iceList.push(this.iceNumber)					this.iceList = this.uniqueArray(this.iceList)					this.$nextTick(() => {						// 获取scroll-view的高度						const query = uni.createSelectorQuery().in(this);						query.select('.scrollView').boundingClientRect(data => {							this.scrollTop = data.height;						}).exec();					});					this.iceNumber = ''				}			},			// 签名板			async getUpload(file) {				const result = await this.uploadFilePromise(file)				if (this.$refs.order) {					this.$refs.order.imageData = result				}			},			uploadFilePromise(url) {				return new Promise((resolve, reject) => {					let a = uni.uploadFile({						url: ENV.APP_DEV_URL + '/api/upload', // 仅为示例,非真实的接口地址						filePath: url,						name: 'file',						header: {							'Authorization': 'Bearer ' + uni.getStorageSync('access_token'),						},						success: (res) => {							let state = JSON.parse(res.data)							setTimeout(() => {								if (state.code == 200) {									resolve(state.data)								}							}, 100)						}					});				})			},			// 去重			uniqueArray(arr) {				return [...new Set(arr)];			},		}	}</script><style lang="scss">	.nav_center {		display: flex;		align-items: center;		justify-content: flex-end;		padding-right: 30rpx;		width: 100%;	}	.tab_order {		background-color: #fff;	}	.card_order_mangement {		display: flex;		flex-direction: column;		align-items: center;	}	.card_send {		padding: 20rpx;		min-height: 600rpx;	}	.send_title {		text-align: center;		margin: 10px;	}	.card_input_send {		position: relative;		display: flex;		align-items: center;		margin-bottom: 20rpx;	}	.card_thermostat {		position: absolute;		bottom: 100rpx;		background-color: #fff;		width: 100%;		border-radius: 8rpx;		border: 2rpx solid #E4E7ED;		background-color: #FFF;		box-shadow: 0 4rpx 24rpx 0 rgba(0, 0, 0, .1);		z-index: 2024;	}	.popper_arrow {		position: absolute;		bottom: -6px;		left: 50%;		margin-right: 3px;		border-top-color: #ebeef5;		border-bottom-width: 0;		border-width: 6px;		filter: drop-shadow(0 2px 12px rgba(0, 0, 0, .03));	}	.popper_arrow::after {		position: absolute;		display: block;		width: 0;		height: 0;		border-color: transparent;		border-style: solid;		bottom: -6px;		margin-left: -6px;		border-top-color: #fff;		border-bottom-width: 0;		content: " ";		border-width: 6px;	}	.incubator_title {		width: 150rpx;		margin-right: 10rpx;		font-size: 30rpx;		span {			color: red;		}	}	.add_card {		margin-left: 10rpx;		width: 50rpx;		height: 46rpx;		border-radius: 8rpx;		padding: 6px 9px;		border: 1px solid #dadbde;	}	.card_btn {		position: absolute;		bottom: 20rpx;		left: 30rpx;		right: 30rpx;		padding: 20rpx 0rpx;	}	.scroll-view {		transition: max-height 1s ease-out;		max-height: 0;		overflow: hidden;	}	.is-fold {		max-height: 600rpx;	}	.card_item_option {		display: flex;		justify-content: space-between;		align-items: center;		padding: 20rpx;	}	.nomatchingData {		display: flex;		justify-content: center;		align-items: center;		padding: 20rpx;		color: #c8c9cc;	}	.card_frequency {		display: flex;		flex-wrap: wrap;	}	.swept_card {		padding: 0rpx 20rpx;		width: calc(100% - 40rpx);		max-height: 600rpx;		// overflow-y: auto;	}	.card_high {		margin-bottom: 20rpx;	}	.card_frequency_title {		font-size: 32rpx;	}	.card_bottle {		font-size: 30rpx;		span {			color: red;		}	}	.item_coding {		display: flex;		justify-content: space-between;		align-items: center;		width: 100%;		padding: 20rpx 0rpx;	}	.num_index {		font-size: 30rpx;		margin-right: 10rpx;	}	.title_coding {		font-size: 30rpx;	}	.card_search_gray {		display: flex;		flex-direction: row;		align-items: center;		justify-content: space-between;		flex: 1;		padding: 12rpx 18rpx;		border-radius: 8rpx;		line-height: 48rpx;	}	.title_gray {		font-size: 30rpx;		color: #c8c9cc;	}	// 伪元素1rpx边框	.frame {		position: relative; //重要	}	.frame::after {		position: absolute;		content: '';		border: 2rpx solid #e7e6e4;		border-radius: 16rpx;		width: 200%;		height: 200%;		top: 0;		left: 0;		transform: scale(0.5);		transform-origin: 0 0;		pointer-events: none;		/* 使伪元素不会阻止鼠标事件 */	}</style>
 |