From 98f4b7ec4164ec1c6798c8c4188b93f4ce48ec46 Mon Sep 17 00:00:00 2001
From: xuxy <1059738716@qq.com>
Date: 星期三, 10 七月 2024 23:39:57 +0800
Subject: [PATCH] update收获地址

---
 sub_pages/customer/trade/trade.vue |  603 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 597 insertions(+), 6 deletions(-)

diff --git a/sub_pages/customer/trade/trade.vue b/sub_pages/customer/trade/trade.vue
index 8183fd0..523f096 100644
--- a/sub_pages/customer/trade/trade.vue
+++ b/sub_pages/customer/trade/trade.vue
@@ -1,22 +1,613 @@
 <template>
-	<view>
-		
+	<view class="container-canteen" style="min-height: calc(100vh - 20rpx );">
+
+		<view class="canteen-items" style="min-height: calc(100vh - 360rpx);">
+			<view v-if="(!list||list.length==0)&&true" style="width: 100%;min-height: 200rpx;">
+				&nbsp;
+			</view>
+			<no-data v-if="(!list||list.length==0)&&true" style="width: 100%;margin-top: 220rpx;"></no-data>
+			<view class="" style="display: flex;flex-wrap: inherit;" v-else>
+				<view class="type-list">
+					<view v-for="(item,index) of types" @click="changeType(item)"
+						:class="[query.typeId==item.id?'current':'']" :key="index" class="p10 flex type-item">
+						{{item.name || '-'}}
+					</view>
+				</view>
+				<view class="canteen-item-container">
+					<view v-for="(item,index) of listFilter" :key="item.id" class="p10 canteen-item list"
+						style="display: flex;flex-wrap: inherit;">
+						<view class="m-r-10">
+							<image :src="item.cover" mode="scaleToFill" class="cover" @click="previewImg(item.cover)">
+							</image>
+						</view>
+						<view class="cateen_infos list">
+							<view class="title">{{item.name}}</view>
+							<view class="desc">月售:{{item.monthSale || '0'}}</view>
+							<view class="flex bottom-buttons flex">
+								<view class="price flex">
+									<view class="icon">¥</view>
+									<view class='num'>{{item.price || '-'}}</view>
+								</view>
+								<view class="icons flex">
+									<uni-icons v-if="item.shopnum&&item.shopnum>=1" type="minus" size="32"
+										@click="mulnum(item)"></uni-icons>
+									<view class="curnums" v-if="item.shopnum&&item.shopnum>=1">{{item.shopnum}}</view>
+									<uni-icons type="plus-filled" size="32" @click="addnum(item)"></uni-icons>
+								</view>
+							</view>
+						</view>
+						<view style="padding-bottom:100rpx">
+						</view>
+					</view>
+
+					<footer-msg v-if="query.block&&query.schoolArea"
+						:more="page.total>0&&page.total>page.current*page.size"></footer-msg>
+
+				</view>
+			</view>
+
+		</view>
+
+
+
+		<view style="min-height:200rpx">
+		</view>
+		<common-footer flg="1"></common-footer>
+
 	</view>
 </template>
 
 <script>
+	import {
+		mapState
+	} from 'vuex'
 	export default {
 		data() {
 			return {
-				
+				list: [],
+				showpop: false,
+				query: {
+					name: '',
+					// status:'',
+					schoolArea: '',
+					schoolAreaStr: '',
+					block: '',
+					blockStr: '',
+					typeId: '',
+				},
+				types: [{
+					name: '全部',
+					id: ''
+				}],
+				schools: [],
+				schoolIndex: -1,
+				blockIndex: -1,
+				blocks: [],
+				shoptotal: 0,
+				cal: 0,
 			}
 		},
+		async onLoad() {
+			// this.list = [{
+			// 	'shopnum': 0
+			// }, {
+			// 	'shopnum': 1
+			// }]
+
+			//加载分类
+			this.$http.request('get', '/api/canteen/goods/type/list', {
+				params: {
+					size: 100
+				}
+			}).then(async res => {
+				if (res.code == 0) {
+					this.types = res.data && res.data.records || []
+					this.types.unshift({
+						name: '全部',
+						id: ''
+					});
+
+				}
+			})
+
+			this.listApi = '/api/canteen/customer/goods/list'
+
+			// this.getList()
+			//加载校区、楼栋
+			this.$http.request('get', '/api/school/area/list', {
+
+			}).then(async res => {
+				if (res.code == 0) {
+					this.schools = res.data || []
+					// this.schools = [{
+					// 	'name': '全部',
+					// 	'id': '',
+					// }]
+					// for (var item of arr) {
+					// 	this.schools.push(item)
+					// }
+				}
+				console.log('schools', this.schools)
+				var schoolIndex = uni.getStorageSync('schoolIndex')
+				if (!schoolIndex && schoolIndex !== 0) {
+					// await this.getList()
+					// this.list.forEach(item => {
+					// 	if (!item.shopnum) {
+					// 		item.shopnum = 0
+					// 	}
+					// })
+				} else {
+					this.schoolIndex = schoolIndex
+					if (this.schoolIndex >= 0) {
+						this.PickerChangeSchool({
+							detail: {
+								value: this.schoolIndex
+							}
+						})
+						// await this.getList()
+						// this.list.forEach(item => {
+						// 	if (!item.shopnum) {
+						// 		item.shopnum = 0
+						// 	}
+						// })
+					}
+				}
+
+			})
+
+
+		},
 		methods: {
-			
+			changeType(item) {
+				this.query.typeId = item.id || ''
+			},
+			async PickerChangeSchool(e) {
+				if (e.detail.value == '-1') {
+					this.$message.showToast('未选择校区')
+					return
+				}
+				this.schoolIndex = parseInt(e.detail.value)
+				this.query.schoolArea = this.schools[this.schoolIndex].id
+				this.blockIndex = -1
+
+				this.$message.showLoading()
+				var {
+					data
+				} = await this.$http.request('get', '/api/school/block/list', {
+					params: {
+						schoolArea: this.query.schoolArea,
+						size: 200
+					}
+				})
+
+				this.blocks = data && data.records || []
+				// var arr = data.records || []
+				// this.blocks = [{
+				// 	'name': '全部',
+				// 	'id': '',
+				// }]
+				// for (var item of arr) {
+				// 	this.blocks.push(item)
+				// }
+				this.$message.hideLoading()
+				if (this.blocks.length >= 1) {
+					this.query.block = this.blocks[0].id
+					this.query.blockStr = this.blocks[0].name
+					this.page.current = 1
+					this.blockIndex = 0
+					this.list = []
+					this.getList()
+				} else {
+					this.page.current = 1
+					this.list = []
+				}
+
+
+
+			},
+			async PickerChangeBlock(e) {
+				if (e.detail.value == '-1') {
+					this.$message.showToast('未选择楼栋')
+					return
+				}
+				this.blockIndex = parseInt(e.detail.value)
+				this.query.block = this.blocks[this.blockIndex].id
+				this.page.current = 1
+				// this.list = []
+				this.list = []
+				// this.getList()
+				await this.getList()
+				this.list.forEach(item => {
+					if (!item.shopnum) {
+						item.shopnum = 0
+					}
+				})
+
+			},
+			mulnum(item) {
+				if (item.shopnum > 0) {
+					item.shopnum -= 1
+				}
+				this.shoptotal -= 1
+				this.cal += 1
+				this.$forceUpdate()
+
+			},
+			addnum(item) {
+				// console.log('addnum', item)
+				if (item.shopnum) {
+					item.shopnum += 1
+				} else {
+					item.shopnum = 1
+				}
+				this.shoptotal += 1
+				this.cal += 1
+				this.$forceUpdate()
+			},
+			openShopDetail() {
+				// this.showpop = false
+				// this.$forceUpdate()
+				this.cal += 1
+				this.$refs.popup_shop_detail.open()
+				this.$nextTick(() => {
+					this.$refs.addressselect && this.$refs.addressselect.init()
+				})
+			},
+			closeShopDetail() {
+				// this.showpop = true
+				this.$refs.popup_shop_detail.close()
+			},
+			async submitGood() {
+				var values = []
+				for (var item of this.list) {
+					if (item.shopnum > 0) {
+						values.push({
+							id: item.id,
+							num: item.shopnum
+						})
+					}
+				}
+				//购买
+				if (!this.address.id) {
+					this.$message.showToast('请先选择收获地址')
+					return
+				}
+
+				await this.$message.confirm('确定购买吗?')
+				this.$message.showLoading()
+				const {
+					code,
+					data
+				} = await this.$http.request('post', '/api/canteen/customer/order', {
+					data: {
+						customerAddress: (this.address.schoolAreaStr || '') + (this.address.blockStr || '') + (
+							this
+							.address.room || '') + (this.address.address || ''),
+						customerTel: this.address.tel,
+						customer: this.address.name,
+						goodsList: values, //规格
+					}
+				})
+
+				this.$message.hideLoading()
+				if (code == 0) {
+
+					this.list.forEach(item => {
+						item.shopnum = 0
+					})
+					this.shoptotal = 0
+					this.cal += 1
+					this.$refs.popup_shop_detail.close()
+					this.$forceUpdate()
+
+					//todo,预支付
+					//深夜食堂的逻辑不太一样
+					if (true) {
+						const orderInfo = await this.$http.request('get', '/api/canteen/customer/payment/' + data
+							.orderId, {})
+						//支付准备
+						var info = orderInfo.data
+						let that = this
+						wx.requestPayment({
+							...info,
+							success(res) {
+								console.log('pay success', res)
+								uni.navigateTo({
+									url: '/pages/canteen/canteen-success/canteen-success'
+								})
+							},
+							fail(err) {
+								console.error('pay fail', err)
+								that.$message.showToast('支付失败')
+							}
+						})
+					} else {
+						uni.navigateTo({
+							url: '/pages/canteen/canteen-success/canteen-success'
+						})
+					}
+
+
+				}
+			}
+		},
+		computed: {
+			...mapState({
+				address: state => {
+					return state.defaultaddress || {}
+				},
+			}),
+			selectprices() {
+				var arr = 0
+				for (var item of this.list) {
+					if (item.shopnum > 0) {
+						// arr.push(item)
+						arr += (item.price >= 0 ? item.price : 0) * item.shopnum
+					}
+				}
+				if (this.cal > 0) {
+					return arr
+
+				}
+				return 0
+			},
+			selectgoods() {
+				var arr = []
+				for (var item of this.list) {
+					if (item.shopnum > 0) {
+						arr.push(item)
+					}
+				}
+				if (this.cal > 0) {
+					return arr
+
+				}
+				return arr
+
+			},
+			listFilter() {
+				if (this.query.typeId) {
+					var arr = []
+					if (this.list && this.list.length > 0) {
+						for (var item of this.list) {
+							if (item.typeId === this.query.typeId || item.type === this.query.typeId) {
+								arr.push(item)
+							}
+						}
+					}
+					return arr
+				} else {
+					return this.list
+				}
+
+			},
+			// shoptotal() {
+			// 	var a = 0
+			// 	for (var item of this.list) {
+			// 		a += item.shopnum || 0
+			// 	}
+			// 	console.log('shoptotal',a,this.list)
+			// 	return a
+			// }
 		}
 	}
 </script>
 
-<style>
+<style lang="scss" scoped>
+	.container-canteen {
+		background-color: #FFFFFF;
 
-</style>
+		.type-list {
+			max-width: 178rpx;
+			width: 178rpx;
+			min-width: 178rpx;
+			background: #EEF7F5;
+			border-radius: 8rpx;
+			min-height: calc(100vh - 300rpx);
+			max-height: calc(100vh - 300rpx);
+			overflow-y: scroll;
+			margin-left: 30rpx;
+
+			.type-item {
+				text-align: center;
+				font-weight: 400;
+				font-size: 28rpx;
+				color: #000000;
+				line-height: 88rpx;
+				// padding-left: 30rpx;
+				// padding-right: 30rpx;
+			}
+
+			.type-item.current {
+				font-weight: 600;
+				font-size: 28rpx;
+				color: #04BA97;
+			}
+		}
+
+		.title-before-blue.green {
+			padding-left: 30rpx;
+			padding-bottom: 0rpx;
+		}
+
+		.title-before-blue:before {
+			color: #04BA97;
+			font-weight: 600;
+			min-width: 14rpx;
+			background: #04BA97;
+			border-radius: 8rpx;
+			display: inline-block;
+		}
+
+		.popup_shop_detail {
+			background: #FFFFFF;
+			// padding: 30rpx 0rpx;
+			padding-bottom: 30rpx;
+
+			.footer-shop {
+				margin: 0 auto;
+				margin-top: 46rpx;
+			}
+
+			.common-address-select {
+				margin-left: 20rpx;
+				margin-right: 20rpx;
+			}
+
+			.close-parent {
+				margin-right: 20rpx;
+			}
+
+			.canteen-items {
+				.canteen-item {
+					margin-left: 20rpx;
+					margin-right: 0rpx;
+
+					.cateen_infos {
+						width: 440rpx;
+
+					}
+
+					.cateen_infos.list {
+						max-width: 30 0rpx;
+						min-width: 200rpx;
+					}
+				}
+			}
+		}
+
+		.canteen-items {
+			// margin-left: 30rpx;
+
+			.canteen-item {
+				margin-left: 30rpx;
+				margin-right: 30rpx;
+				// width: 690rpx;
+				// max-width: 690rpx;
+				height: 206rpx;
+				background: #FFFFFF;
+				border-radius: 16rpx;
+				display: flex;
+				margin-bottom: 24rpx;
+
+				.cover {
+					width: 202rpx;
+					height: 202rpx;
+				}
+
+				.title {
+					font-weight: 600;
+					font-size: 32rpx;
+					color: #000000;
+					line-height: 44rpx;
+				}
+
+				.desc {
+					font-weight: 400;
+					font-size: 24rpx;
+					color: #666666;
+					line-height: 34rpx;
+				}
+
+				.price {
+
+					font-size: 24rpx;
+
+					.icon {
+						line-height: 60rpx;
+					}
+
+					.num {
+						font-weight: 600;
+						font-size: 36rpx;
+						color: #000000;
+						// line-height: 50rpx;
+					}
+				}
+
+				.cateen_infos {
+					width: 400rpx;
+					position: relative;
+				}
+
+				.cateen_infos.list {
+					max-width: 300rpx;
+					min-width: 200rpx;
+
+				}
+
+				.bottom-buttons {
+					// width: 400rpx;
+					position: absolute;
+					bottom: 0rpx;
+
+					left: 0;
+					right: 0;
+
+					.icons {
+						margin-left: auto;
+						margin-right: 0;
+
+						.curnums {
+							line-height: 60rpx;
+						}
+					}
+				}
+			}
+
+			.canteen-item-container {
+				width: 100%;
+				min-height: 300rpx;
+				max-height: calc(100vh - 300rpx);
+				overflow-y: scroll;
+			}
+
+			.canteen-item.list {
+				margin-right: 0rpx;
+				flex: 1;
+				margin-bottom: 0rpx;
+
+				.cover {
+					width: 158rpx;
+					height: 158rpx;
+				}
+			}
+		}
+
+		.canteen-footer-shop {
+			position: absolute;
+			position: fixed;
+			left: 30rpx;
+			bottom: 30rpx;
+		}
+
+		.area-select {
+			.area {
+
+				margin-right: 0rpx;
+
+				.t {
+					font-weight: 400;
+					font-size: 32rpx;
+					color: #000000;
+					line-height: 44rpx;
+				}
+
+				.i {}
+			}
+
+			.area-1 {
+				margin-left: auto;
+			}
+
+			.area-2 {
+				margin-left: 84rpx;
+			}
+		}
+
+		.canteen-banner {
+			width: 750rpx;
+			min-height: 360rpx;
+		}
+	}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3