wangzhibo
2025-10-23 cad64c1de2c45856b0774933c5801b05b64984e8
1
{"version":3,"file":"booking.js","sources":["pages/index/booking.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvaW5kZXgvYm9va2luZy52dWU"],"sourcesContent":["<template>\r\n\t<view class=\"page-wrapper\">\r\n\t\t<div class=\"bg-top\"></div>\r\n\r\n\t\t<div class=\"content-wrapper\">\r\n\r\n\t\t\t<view class=\"text-2xl font-bold text-center mb-4\">场馆预约参观</view>\r\n\r\n\t\t\t<!-- 预约场馆 -->\r\n\t\t\t<view class=\"flex items-center h-11 mb-4\">\r\n\t\t\t\t<label class=\"w-24 text-sm font-medium\">预约场馆:</label>\r\n\t\t\t\t<picker mode=\"selector\" :range=\"booking_sites\" :value=\"form.selectedSiteIndex\" @change=\"onVenueChange\">\r\n\t\t\t\t\t<view\r\n\t\t\t\t\t\tclass=\"flex flex-1 items-center justify-between h-35px px-3 rounded border border-gray-300 bg-gray-50 active-bg-gray-100 transition-all duration-150\">\r\n\t\t\t\t\t\t<text class=\"truncate text-gray-800 text-sm\">\r\n\t\t\t\t\t\t\t{{ booking_sites[form.selectedSiteIndex] || '请选择场馆' }}\r\n\t\t\t\t\t\t</text>\r\n\t\t\t\t\t\t<text class=\"text-gray-400 text-xs\">▼</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</picker>\r\n\t\t\t</view>\r\n\r\n\t\t\t<!-- 预约日期 -->\r\n\t\t\t<view class=\"flex items-center h-11 mb-4\">\r\n\t\t\t\t<label class=\"w-24 text-sm font-medium\">预约日期:</label>\r\n\t\t\t\t<picker mode=\"date\" :value=\"form.visitdate\" @change=\"onDateChange\" :start=\"today\">\r\n\t\t\t\t\t<view\r\n\t\t\t\t\t\tclass=\"flex flex-1 items-center justify-between h-35px px-3 rounded border border-gray-300 bg-gray-50 active-bg-gray-100 transition-all duration-150\">\r\n\t\t\t\t\t\t<text class=\"truncate text-gray-800 text-sm\">\r\n\t\t\t\t\t\t\t{{ form.visitdate || '请选择日期' }}\r\n\t\t\t\t\t\t</text>\r\n\t\t\t\t\t\t<text class=\"text-gray-400 text-xs\">▼</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</picker>\r\n\t\t\t</view>\r\n\r\n\t\t\t<!-- 预约时段 -->\r\n\t\t\t<view class=\"flex items-center space-x-2 h-15 mb-4\">\r\n\t\t\t\t<label class=\"w-24 text-sm font-medium\">预约时段:</label>\r\n\t\t\t\t<picker mode=\"selector\" :range=\"timeSlots\" :value=\"form.selectedTimeSlotIndex\"\r\n\t\t\t\t\t@change=\"onTimeSlotChange\">\r\n\t\t\t\t\t<view\r\n\t\t\t\t\t\tclass=\"flex flex-1 items-center justify-between h-35px px-3 rounded border border-gray-300 bg-gray-50 active-bg-gray-100 transition-all duration-150\">\r\n\t\t\t\t\t\t<text class=\"truncate text-gray-800 text-sm\">\r\n\t\t\t\t\t\t\t{{ form.selectedTimeSlotIndex !== null ? timeSlots[form.selectedTimeSlotIndex] : '请选择时段' }}\r\n\t\t\t\t\t\t</text>\r\n\t\t\t\t\t\t<text class=\"text-gray-400 text-xs\">▼</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</picker>\r\n\t\t\t</view>\r\n\r\n\t\t\t<!-- 预约人 -->\r\n\t\t\t<view class=\"flex items-center space-x-2 h-11 mb-4\">\r\n\t\t\t\t<label class=\"w-24 text-sm font-medium\">预约人员:</label>\r\n\t\t\t\t<input v-model=\"form.contactperson\" type=\"text\" placeholder=\"请输入姓名(最多10个字)\"\r\n\t\t\t\t\tclass=\"flex-1 border border-gray-300 rounded p-2 h-12\" />\r\n\t\t\t</view>\r\n\t\t\t<view class=\"h-5\"></view>\r\n\r\n\t\t\t<!-- 预约电话 -->\r\n\t\t\t<view class=\"flex items-center space-x-2 h-11 mb-4 mt-2\">\r\n\t\t\t\t<label class=\"w-24 text-sm font-medium\">预约电话:</label>\r\n\t\t\t\t<input v-model=\"form.contactphone\" type=\"text\" placeholder=\"请输入联系电话\"\r\n\t\t\t\t\tclass=\"flex-1 border border-gray-300 rounded p-2 h-12\" />\r\n\t\t\t</view>\r\n\t\t\t<view class=\"h-5\"></view>\r\n\r\n\t\t\t<!-- 同行人数 -->\r\n\t\t\t<view class=\"flex items-center space-x-2 h-11 mb-4\">\r\n\t\t\t\t<label class=\"w-24 text-sm font-medium\">同行人数:</label>\r\n\t\t\t\t<view class=\"flex items-center space-x-2 h-11\">\r\n\t\t\t\t\t<view\r\n\t\t\t\t\t\tclass=\"w-8 h-8 border border-dashed border-gray-300 bg-blue-500 rounded text-white flex justify-center items-center cursor-pointer\"\r\n\t\t\t\t\t\t@click=\"decrementCompanions\">\r\n\t\t\t\t\t\t-\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t<view class=\"mx-8 text-center w-8\">{{ form.personcount }}</view>\r\n\t\t\t\t\t<!--<button @click=\"incrementCompanions\" class=\"w-8 h-8 bg-gray-300 rounded\">+</button> -->\r\n\t\t\t\t\t<view\r\n\t\t\t\t\t\tclass=\"w-8 h-8 border border-dashed border-gray-300 bg-blue-500 rounded text-white flex justify-center items-center cursor-pointer\"\r\n\t\t\t\t\t\t@click=\"incrementCompanions\">\r\n\t\t\t\t\t\t+\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t<view class=\"text-xs text-gray-500 ml-5\">(1-5人)</view>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\r\n\t\t\t<!-- 提交按钮 -->\r\n\t\t\t<button @click=\"submitForm\" class=\"w-full bg-blue-500 text-white py-3 rounded-lg mt-4\">提交预约</button>\r\n\r\n\t\t</div>\r\n\t\t<div class=\"bg-bottom\"></div>\r\n\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\n\timport {\r\n\t\tuseUserStore\r\n\t} from '@/stores/user'\r\n\tconst userStore = useUserStore()\r\n\timport {\r\n\t\tASSETS\r\n\t} from './assets'\r\n\timport {\r\n\t\tapiService\r\n\t} from '../../apiservice/apiService'\r\n\r\n\tfunction getTodayISO() {\r\n\t\tconst now = new Date();\r\n\t\tconst tzOffset = now.getTimezoneOffset() * 60000;\r\n\t\treturn new Date(now - tzOffset).toISOString().split('T')[0];\r\n\t}\r\n\r\n\texport default {\r\n\t\tdata() {\r\n\t\t\treturn {\r\n\t\t\t\ttoday: getTodayISO(),\r\n\t\t\t\t//today: new Date().toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' }).replace(/\\//g, '-'),\r\n\t\t\t\tbooking_sites: ASSETS.booking_sites,\r\n\t\t\t\ttimeSlots: [],\r\n\t\t\t\tform: {\r\n\t\t\t\t\tselectedSiteIndex: 0,\r\n\t\t\t\t\tvisitdate: '',\r\n\t\t\t\t\tselectedTimeSlotIndex: null,\r\n\t\t\t\t\tcontactperson: userStore.username,\r\n\t\t\t\t\tcontactphone: userStore.phone,\r\n\t\t\t\t\tpersoncount: 1\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonShareAppMessage() {\r\n\t\t\treturn {\r\n\t\t\t\ttitle: '欢迎来荆门市园博园游玩!',\r\n\t\t\t\tpath: '/pages/index/index'\r\n\t\t\t}\r\n\t\t},\r\n\t\tonShareTimeline() {\r\n\t\t\treturn {\r\n\t\t\t\ttitle: '欢迎来荆门市园博园游玩!'\r\n\t\t\t}\r\n\t\t},\r\n\t\twatch: {\r\n\t\t\t'form.selectedSiteIndex': 'fetchTimeSlots',\r\n\t\t\t'form.visitdate': 'fetchTimeSlots'\r\n\t\t},\r\n\t\tmethods: {\r\n\t\t\tonVenueChange(e) {\r\n\t\t\t\tthis.form.selectedSiteIndex = e.detail.value;\r\n\t\t\t\tthis.form.visitdate = '';\r\n\t\t\t},\r\n\t\t\tonDateChange(e) {\r\n\t\t\t\tthis.form.visitdate = e.detail.value;\r\n\t\t\t},\r\n\t\t\tonTimeSlotChange(e) {\r\n\t\t\t\tthis.form.selectedTimeSlotIndex = e.detail.value;\r\n\t\t\t},\r\n\t\t\tasync fetchTimeSlots() {\r\n\t\t\t\tif (!this.form.visitdate) return;\r\n\t\t\t\tconst sitename = this.booking_sites[this.form.selectedSiteIndex];\r\n\t\t\t\tconst visitdate = this.form.visitdate;\r\n\r\n\t\t\t\tapiService.bookingAvailableCount()\r\n\t\t\t\ttry {\r\n\t\t\t\t\tuni.showLoading({\r\n\t\t\t\t\t\ttitle: '查询中...'\r\n\t\t\t\t\t});\r\n\t\t\t\t\tconst payload = {\r\n\t\t\t\t\t\tsitename: sitename,\r\n\t\t\t\t\t\tvisitdate: visitdate\r\n\t\t\t\t\t}\r\n\t\t\t\t\tapiService.bookingAvailableCount(payload).then((res) => {\r\n\t\t\t\t\t\tif (res.code === 1000) {\r\n\t\t\t\t\t\t\tthis.timeSlots = [\r\n\t\t\t\t\t\t\t\t`上午(09:00-12:00 余${res.data.am.remain}/共${res.data.am.total}人)`,\r\n\t\t\t\t\t\t\t\t`下午(13:00-17:00 余${res.data.pm.remain}/共${res.data.pm.total}人)`\r\n\t\t\t\t\t\t\t];\r\n\t\t\t\t\t\t\tthis.selectedTimeSlotIndex = 0;\r\n\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tconsole.warn('查询失败:', res.message)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\ttitle: '发生错误,请联系管理员',\r\n\t\t\t\t\t\t\ticon: 'none'\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t})\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\tconsole.error(\"查询错误:\", err);\r\n\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\ttitle: \"网络错误\",\r\n\t\t\t\t\t\ticon: \"none\"\r\n\t\t\t\t\t});\r\n\t\t\t\t} finally {\r\n\t\t\t\t\tuni.hideLoading();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.form.selectedTimeSlotIndex = null;\r\n\t\t\t},\r\n\t\t\tincrementCompanions() {\r\n\t\t\t\tif (this.form.personcount < 5) this.form.personcount++;\r\n\t\t\t},\r\n\t\t\tdecrementCompanions() {\r\n\t\t\t\tif (this.form.personcount > 1) this.form.personcount--;\r\n\t\t\t},\r\n\t\t\tasync submitForm() {\r\n\t\t\t\tif (!this.form.contactperson || this.form.contactperson.length > 10) {\r\n\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\ttitle: '姓名不能为空,且最多10个字',\r\n\t\t\t\t\t\ticon: 'none'\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconst phonePattern = /^(\\d{11}|(\\d{3,4}-?\\d{7,8}))$/;\r\n\t\t\t\tif (!phonePattern.test(this.form.contactphone)) {\r\n\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\ttitle: '联系电话格式不正确',\r\n\t\t\t\t\t\ticon: 'none'\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (!this.form.visitdate) {\r\n\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\ttitle: '请选择预约日期',\r\n\t\t\t\t\t\ticon: 'none'\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (this.form.selectedTimeSlotIndex === null) {\r\n\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\ttitle: '请选择预约时段',\r\n\t\t\t\t\t\ticon: 'none'\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst now = new Date();\r\n\t\t\t\t\tconst currentHour = now.getHours();\r\n\r\n\t\t\t\t\tif (this.form.visitdate == this.today && currentHour > 17) {\r\n\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\ttitle: '预约时段已过,请重新选择',\r\n\t\t\t\t\t\t\ticon: 'none',\r\n\t\t\t\t\t\t\tduration: 2000\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if (this.form.visitdate == this.today && currentHour > 12 && this.form\r\n\t\t\t\t\t\t.selectedTimeSlotIndex == 0) {\r\n\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\ttitle: '预约时段已过,请重新选择',\r\n\t\t\t\t\t\t\ticon: 'none',\r\n\t\t\t\t\t\t\tduration: 2000\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t/* 开始保存*/\r\n\t\t\t\ttry {\r\n\t\t\t\t\tuni.showLoading({\r\n\t\t\t\t\t\ttitle: '保存中...'\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tconst checkingPayload = {\r\n\t\t\t\t\t\tuuid: userStore.uuid,\r\n\t\t\t\t\t\tsitename: this.booking_sites[this.form.selectedSiteIndex],\r\n\t\t\t\t\t\tvisitdate: this.form.visitdate,\r\n\t\t\t\t\t\tvisittimefield: Number(this.form.selectedTimeSlotIndex) === 0 ? 'visittimeam' :\r\n\t\t\t\t\t\t\t'visittimepm'\r\n\t\t\t\t\t};\r\n\t\t\t\t\tconsole.log(checkingPayload)\r\n\t\t\t\t\tconst res = await apiService.bookingCheck(checkingPayload);\r\n\t\t\t\t\tif (res.code === 1000) {\r\n\t\t\t\t\t\tconsole.log(res.data)\r\n\t\t\t\t\t\t// real save booking\r\n\t\t\t\t\t\tif (res.data.exist === 0) {\r\n\t\t\t\t\t\t\tconsole.log(\"start saving\")\r\n\r\n\t\t\t\t\t\t\tconst payload = {\r\n\t\t\t\t\t\t\t\tuuid: userStore.uuid,\r\n\t\t\t\t\t\t\t\tsitename: this.booking_sites[this.form.selectedSiteIndex],\r\n\t\t\t\t\t\t\t\tvisitdate: this.form.visitdate,\r\n\t\t\t\t\t\t\t\tvisittimeam: Number(this.form.selectedTimeSlotIndex) === 0 ? '09:00-12:00' : '',\r\n\t\t\t\t\t\t\t\tvisittimepm: Number(this.form.selectedTimeSlotIndex) === 1 ? '13:00-17:00' : '',\r\n\t\t\t\t\t\t\t\tcontactperson: this.form.contactperson,\r\n\t\t\t\t\t\t\t\tcontactphone: this.form.contactphone,\r\n\t\t\t\t\t\t\t\tpersoncount: this.form.personcount,\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\tconsole.log(payload)\r\n\t\t\t\t\t\t\tconst saveres = await apiService.bookingAdd(payload);\r\n\r\n\t\t\t\t\t\t\tconsole.log(saveres.code)\r\n\r\n\t\t\t\t\t\t\tif (saveres.code === 1000) {\r\n\r\n\t\t\t\t\t\t\t\tuni.showModal({\r\n\t\t\t\t\t\t\t\t\ttitle: '预约成功',\r\n\t\t\t\t\t\t\t\t\tcontent: '请按时前往场馆,并扫码核销以便入场。',\r\n\t\t\t\t\t\t\t\t\tshowCancel: false,\r\n\t\t\t\t\t\t\t\t\tconfirmText: '我知道了'\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\tthis.form.visitdate = '';\r\n\t\t\t\t\t\t\t\tthis.form.selectedTimeSlotIndex = null;\r\n\t\t\t\t\t\t\t\tuni.navigateTo({\r\n\t\t\t\t\t\t\t\t\turl: '/pages/ucenter/my-booking'\r\n\t\t\t\t\t\t\t\t})\r\n\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tconsole.warn('预约失败:', saveres.message)\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\t\ttitle: '您已有预约相同日期和时段的该场馆信息,请更改信息。',\r\n\t\t\t\t\t\t\t\ticon: 'none',\r\n\t\t\t\t\t\t\t\tduration: 3000 // 显示 3 秒\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconsole.warn('查询失败:', res.message)\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\tconsole.error(\"查询错误:\", err);\r\n\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\ttitle: \"网络错误\",\r\n\t\t\t\t\t\ticon: \"none\"\r\n\t\t\t\t\t});\r\n\t\t\t\t} finally {\r\n\t\t\t\t\tuni.hideLoading();\r\n\t\t\t\t}\r\n\r\n\r\n\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n</script>\r\n<style>\r\n\t/* 主容器样式 */\r\n\t.flex {\r\n\t\tdisplay: flex;\r\n\t}\r\n\r\n\t.flex-1 {\r\n\t\tflex: 1 1 0%;\r\n\t}\r\n\r\n\t.items-center {\r\n\t\talign-items: center;\r\n\t}\r\n\r\n\t.cursor-pointer {\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t.justify-center {\r\n\t\tjustify-content: center;\r\n\t}\r\n\r\n\t.justify-between {\r\n\t\tjustify-content: space-between;\r\n\t}\r\n\r\n\t.h-35px {\r\n\t\theight: 35px;\r\n\t\tline-height: 35px;\r\n\t}\r\n\r\n\t.px-3 {\r\n\t\tpadding-left: 0.75rem;\r\n\t\tpadding-right: 0.75rem;\r\n\t}\r\n\r\n\t.rounded {\r\n\t\tborder-radius: 0.25rem;\r\n\t}\r\n\r\n\t.border {\r\n\t\tborder-width: 1px;\r\n\t}\r\n\r\n\t.border-gray-300 {\r\n\t\tborder-color: rgb(209 213 219);\r\n\t}\r\n\r\n\t.bg-gray-50 {\r\n\t\tbackground-color: rgb(249 250 251);\r\n\t}\r\n\r\n\t.active-bg-gray-100:active {\r\n\t\tbackground-color: rgb(243 244 246);\r\n\t}\r\n\r\n\t.transition-all {\r\n\t\ttransition-property: all;\r\n\t}\r\n\r\n\t.duration-150 {\r\n\t\ttransition-duration: 150ms;\r\n\t}\r\n\r\n\t.truncate {\r\n\t\toverflow: hidden;\r\n\t\ttext-overflow: ellipsis;\r\n\t\twhite-space: nowrap;\r\n\t}\r\n\r\n\t.text-gray-800 {\r\n\t\tcolor: rgb(31 41 55);\r\n\t}\r\n\r\n\t.text-sm {\r\n\t\tfont-size: 0.875rem;\r\n\t\tline-height: 1.25rem;\r\n\t}\r\n\r\n\t.text-gray-400 {\r\n\t\tcolor: rgb(156 163 175);\r\n\t}\r\n\r\n\t.text-xs {\r\n\t\tfont-size: 0.75rem;\r\n\t\tline-height: 1rem;\r\n\t}\r\n\r\n\t/* ------- 布局与容器 ------- */\r\n\t.p-4 {\r\n\t\tpadding: 1rem;\r\n\t}\r\n\r\n\t.space-y-4 {\r\n\t\tmargin-top: 1rem;\r\n\t}\r\n\r\n\t.mb-4 {\r\n\t\tmargin-bottom: 1rem;\r\n\t}\r\n\r\n\t.mt-4 {\r\n\t\tmargin-top: 1rem;\r\n\t}\r\n\r\n\t/* ------- 字体与文字 ------- */\r\n\t.text-2xl {\r\n\t\tfont-size: 1.5rem;\r\n\t\tline-height: 2rem;\r\n\t}\r\n\r\n\t.text-sm {\r\n\t\tfont-size: 0.875rem;\r\n\t\tline-height: 1.25rem;\r\n\t}\r\n\r\n\t.text-xs {\r\n\t\tfont-size: 0.75rem;\r\n\t\tline-height: 1rem;\r\n\t}\r\n\r\n\t.text-center {\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.text-gray-500 {\r\n\t\tcolor: #6b7280;\r\n\t}\r\n\r\n\t.font-bold {\r\n\t\tfont-weight: 700;\r\n\t}\r\n\r\n\t.font-medium {\r\n\t\tfont-weight: 500;\r\n\t}\r\n\r\n\t/* ------- 尺寸与布局 ------- */\r\n\t.w-full {\r\n\t\twidth: 100%;\r\n\t}\r\n\r\n\t.flex {\r\n\t\tdisplay: flex;\r\n\t}\r\n\r\n\t.flex-1 {\r\n\t\tflex: 1 1 0%;\r\n\t}\r\n\r\n\t.items-center {\r\n\t\talign-items: center;\r\n\t}\r\n\r\n\t.h-full {\r\n\t\theight: 100%;\r\n\t}\r\n\r\n\t.h-5 {\r\n\t\theight: 1rem;\r\n\t}\r\n\r\n\t.h-11 {\r\n\t\theight: 2rem;\r\n\t}\r\n\r\n\t.h-15 {\r\n\t\theight: 3rem;\r\n\t}\r\n\r\n\t.h-12 {\r\n\t\theight: 2rem;\r\n\t}\r\n\r\n\t.w-8 {\r\n\t\twidth: 2rem;\r\n\t}\r\n\r\n\t.ml-5 {\r\n\t\tmargin-left: 20rpx;\r\n\t}\r\n\r\n\t.h-8 {\r\n\t\theight: 2rem;\r\n\t}\r\n\r\n\t.w-24 {\r\n\t\twidth: 5rem;\r\n\t}\r\n\r\n\t.w-28 {\r\n\t\twidth: 7rem;\r\n\t}\r\n\r\n\t/* ------- 边距与填充 ------- */\r\n\t.p-2 {\r\n\t\tpadding: 0.5rem;\r\n\t}\r\n\r\n\t.px-3 {\r\n\t\tpadding-left: 0.75rem;\r\n\t\tpadding-right: 0.75rem;\r\n\t}\r\n\r\n\t.py-3 {\r\n\t\tpadding-top: 0.75rem;\r\n\t\tpadding-bottom: 0.75rem;\r\n\t}\r\n\r\n\t/* ------- 边框与圆角 ------- */\r\n\t.border {\r\n\t\tborder-width: 1px;\r\n\t\tborder-style: solid;\r\n\t\tborder-color: #d1d5db;\r\n\t}\r\n\r\n\t.border-gray-300 {\r\n\t\tborder-color: #d1d5db;\r\n\t}\r\n\r\n\t.rounded {\r\n\t\tborder-radius: 0.25rem;\r\n\t}\r\n\r\n\t.rounded-lg {\r\n\t\tborder-radius: 0.5rem;\r\n\t}\r\n\r\n\t/* ------- 背景色与颜色 ------- */\r\n\t.bg-blue-500 {\r\n\t\tbackground-color: #3b82f6;\r\n\t}\r\n\r\n\t.bg-gray-300 {\r\n\t\tbackground-color: #d1d5db;\r\n\t}\r\n\r\n\t.text-white {\r\n\t\tcolor: #fff;\r\n\t}\r\n\r\n\t.mx-8 {\r\n\t\tmargin-left: 1rem;\r\n\t\tmargin-right: 1rem;\r\n\t}\r\n\r\n\t.text-center {\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.w-8 {\r\n\t\twidth: 2rem;\r\n\t\t/* Tailwind w-8 默认 2rem */\r\n\t}\r\n\r\n\t/* ------- 按钮样式 ------- */\r\n\tbutton {\r\n\t\tborder: none;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t/* 轻微交互效果 */\r\n\tbutton:hover {\r\n\t\topacity: 0.9;\r\n\t}\r\n\r\n\t.page-wrapper {\r\n\t\tposition: relative;\r\n\t\tmin-height: 100vh;\r\n\t\t/* 确保小内容时填满视口 */\r\n\t\toverflow: hidden;\r\n\t}\r\n\r\n\t/* 顶部背景 */\r\n\t.bg-top {\r\n\t\tposition: absolute;\r\n\t\ttop: 0;\r\n\t\tleft: 0;\r\n\t\twidth: 100%;\r\n\t\theight: 500rpx;\r\n\t\t/* 可用固定像素或图片高度 */\r\n\t\tbackground: url('https://farm.evcc.top/Uploads/yuanboyuan/background/bg_top.jpg') no-repeat top center;\r\n\t\tbackground-size: cover;\r\n\t\tz-index: 0;\r\n\t}\r\n\r\n\t/* 底部背景 */\r\n\t.bg-bottom {\r\n\t\tposition: absolute;\r\n\t\tbottom: 0;\r\n\t\tleft: 0;\r\n\t\twidth: 100%;\r\n\t\theight: 500rpx;\r\n\t\t/* 可用固定像素或图片高度 */\r\n\t\tbackground: url('https://farm.evcc.top/Uploads/yuanboyuan/background/bg_bottom.jpg') no-repeat bottom center;\r\n\t\tbackground-size: cover;\r\n\t\tz-index: 0;\r\n\t}\r\n\r\n\t/* 内容层 */\r\n\t.content-wrapper {\r\n\t\tposition: relative;\r\n\t\tz-index: 1;\r\n\t\tpadding: 2rem 1rem;\r\n\t}\r\n</style>","import MiniProgramPage from 'D:/HBuilderProjects/园博园/pages/index/booking.vue'\nwx.createPage(MiniProgramPage)"],"names":["ASSETS","apiService","uni"],"mappings":"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"}