Browse Source

学校场地预约修复

学习?学个屁 1 week ago
parent
commit
cf0592aad1
1 changed files with 40 additions and 14 deletions
  1. 40 14
      src/pages/index/submitOrder/index.vue

+ 40 - 14
src/pages/index/submitOrder/index.vue

@@ -135,7 +135,7 @@
 
 <script lang="ts" setup>
 import { ref, onMounted } from 'vue';
-import { RouterUtils, TipsUtils, idCardHide,debounce } from '@/utils/util';
+import { RouterUtils, TipsUtils, idCardHide, debounce } from '@/utils/util';
 import { onLoad, onShareAppMessage } from '@dcloudio/uni-app';
 import { http } from '@/utils/http'
 import { useCacheStore } from '@/stores/cache'
@@ -177,11 +177,12 @@ const open_calendar = (e, i) => {
 // 日历回调确认
 const confirm = (e) => {
 	get_previewOrderPlaceSchool(e.fulldate)
-	 selIndex.value = -1
+	selIndex.value = -1
 }
 
 // 置灰处理
 const shouldGrayOut = (endTime: string) => {
+	if (!endTime) return true; // 如果没有结束时间,默认为不可用
 	// 只有当选中的日期是今天时才检查时间是否过期
 	if (dateList.value && dateList.value[selIndex.value] && dateList.value[selIndex.value].namedDay === '今天') {
 		return isTimeExpired(endTime);
@@ -199,6 +200,9 @@ const isTimeExpired = (endTime: string) => {
 
 const rulesId = ref()
 const check_item = (e, i) => {
+	if (e.inventory < 1) return TipsUtils.tips_toast('余量不足,请选择其他时段')
+	if (shouldGrayOut(e.endTime)) return TipsUtils.tips_toast('该时段已过期,请选择其他时段')
+	console.log(e);
 	check_index.value = i
 	rulesId.value = e.id
 	orderFormData.value.productIds = e.id
@@ -218,22 +222,36 @@ const placeId = ref()
 const timeList = ref()
 const insureIdList = ref([])  // 保险列表
 const insurePrice = ref() // 保险价格
-const get_previewOrderPlaceSchool = (startTime) => {
+const inventory = ref() // 余量
+const get_previewOrderPlaceSchool = (startTime: string) => {
 	http.get('/order/previewOrderPlaceSchool', { data: { placeId: placeId.value, startTime: startTime }, loading: true }).then((res) => {
 		timeList.value = res.result
-		let defaultIndex = 0
+		// 重置选中索引
+		check_index.value = -1
 		if (res.result.timeSlot && res.result.timeSlot.length > 0) {
+			// 找到第一个可用的时段(有库存且未过期)
+			let defaultIndex = -1
 			for (let i = 0; i < res.result.timeSlot.length; i++) {
-				if (!isTimeExpired(res.result.timeSlot[i].endTime)) {
+				// 检查时段是否可用(有库存且未过期)
+				if (res.result.timeSlot[i].inventory > 0 && !shouldGrayOut(res.result.timeSlot[i].endTime)) {
 					defaultIndex = i
 					break
 				}
 			}
-			check_index.value = defaultIndex
-			rulesId.value = res.result.timeSlot[defaultIndex].id
-			orderFormData.value.productIds = res.result.timeSlot[defaultIndex].id
+			// 只有找到可用时段才设置选中状态
+			if (defaultIndex !== -1) {
+				check_index.value = defaultIndex
+				rulesId.value = res.result.timeSlot[defaultIndex].id
+				inventory.value = res.result.timeSlot[defaultIndex].inventory
+				orderFormData.value.productIds = res.result.timeSlot[defaultIndex].id
+			} else {
+				// 如果没有可用时段,清空选中状态
+				rulesId.value = null
+				inventory.value = 0
+				orderFormData.value.productIds = null
+				TipsUtils.tips_toast('暂无可选时段')
+			}
 		}
-
 		// 处理保险相关数据
 		res.result.insureIdList.map((item: any) => {
 			item.insuranceObvious = JSON.parse(item.insuranceObvious)
@@ -341,6 +359,14 @@ let orderFormData = ref({
 })
 const submitOrderImpl = () => {
 	if (userData.value.length === 0) return TipsUtils.tips_toast('请添加成员')
+	if (!rulesId.value) {
+		return TipsUtils.tips_toast('请选择可用时段')
+	}
+	if (inventory.value === 0) return TipsUtils.tips_toast('余量不足,请选择其他时段')
+	const selectedTimeSlot = timeList.value.timeSlot.find(item => item.id === rulesId.value)
+	if (selectedTimeSlot && shouldGrayOut(selectedTimeSlot.endTime)) {
+		return TipsUtils.tips_toast('所选时段已过期,请重新选择')
+	}
 	let data = { ...orderFormData.value };
 	if (!insureData.value || insureData.value.length === 0) {
 		delete data.insureOrderInfoForm;
@@ -350,10 +376,10 @@ const submitOrderImpl = () => {
 			tmplIds: ['WSJjc9I24ijtr3EyNVXjEvTQm0gIECW9ABYVFcegOwM'],
 			success(su) {
 				TipsUtils.tips_toast('订阅成功')
-				getOrderQuery(res.result.orderCode,res.result.orderId)
+				getOrderQuery(res.result.orderCode, res.result.orderId)
 			},
 			fail(err) {
-				getOrderQuery(res.result.orderCode,res.result.orderId)
+				getOrderQuery(res.result.orderCode, res.result.orderId)
 				console.log(err, '订阅消息失败')
 			}
 		})
@@ -363,13 +389,13 @@ const submitOrderImpl = () => {
 const submitBooking = debounce(submitOrderImpl, 500)  //防抖
 
 // code编码 "100001支付成功";"100002查询失败"; "100003查询中 "; "100004支付失败"
-const getOrderQuery = (orderCode: string,orderId: string, retryCount = 0) => {
+const getOrderQuery = (orderCode: string, orderId: string, retryCount = 0) => {
 	http.get('/order/orderQuery', { data: { orderCode: orderCode }, loading: true }).then((res) => {
 		if (res.result == '100001') {
 			RouterUtils.to_page(`/pages/index/toBeUsed/index?orderId=${orderId}&orderType=${orderFormData.value.orderType}`)
 		} else if (retryCount <= 3) {
 			setTimeout(() => {
-				getOrderQuery(orderCode,orderId, retryCount + 1)
+				getOrderQuery(orderCode, orderId, retryCount + 1)
 			}, 1000)
 		} else {
 			if (res.result == '100003') {
@@ -385,7 +411,7 @@ const getOrderQuery = (orderCode: string,orderId: string, retryCount = 0) => {
 		console.error('查询订单失败:', error)
 		if (retryCount < 2) {
 			setTimeout(() => {
-				getOrderQuery(orderCode,orderId, retryCount + 1)
+				getOrderQuery(orderCode, orderId, retryCount + 1)
 			}, 1000)
 		}
 	})