自研uni-app+vue3+uv-ui跨三端仿同程/攜程酒店預訂系統Uni-Vue3-WeTrip。
uniapp-vue3-wetrip原創基於vite5+uniapp+pinia2+uni-ui等技術開發的仿去哪兒/攜程預約酒店客房app系統。實現首頁酒店展示、預訂搜尋、列表/詳情、訂單、聊天訊息、我的等模組。支援編譯H5+小程式+App端。
三端預覽
執行到app端+小程式端+h5端效果。
技術棧
- 開發工具:HbuilderX 4.36
- 技術框架:Uniapp+Vue3+Vite5+Pinia2
- UI元件庫:uni-ui+uv-ui(uniapp+vue3元件庫)
- 彈框元件:uv3-popup(自定義uniapp+vue3多端彈框元件)
- 自定義元件:uv3-navbar標題欄+uv3-tabbar選單欄
- 快取技術:pinia-plugin-unistorage
- 支援編譯:H5+小程式+APP端
目前uniapp結合vue3開發跨端專案受到很多開發者青睞,之前也有分享三款uniapp+vue3實戰專案案例。
uniapp-vue3-os手機os後臺例項|vite5.x+uniapp多端仿ios管理系統
uniapp+vue3聊天室|uni-app+vite4+uv-ui跨端仿微信app聊天語音/朋友圈
uniapp-welive仿微信/抖音直播帶貨|uni-app+vue3+pinia短影片直播商城
uniapp-vue3trip基於最新版跨平臺框架開發,親測在h5+小程式+app端執行效果基本保持一致。
專案框架目錄
另外還內建了訊息聊天功能模組。
uniapp-vue3-wetrip酒店預訂app系統已經發布到我的原創作品集,歡迎下載使用,感謝大家的支援。
https://gf.bilibili.com/item/detail/1107519011
公共模板結構
<script setup> // #ifdef MP-WEIXIN defineOptions({ /** * 解決小程式class、id穿透問題 * manifest.json中配置mergeVirtualHostAttributes: true, 在微信小程式平臺不生效,元件外部傳入的class沒有掛到元件根節點上,在元件中增加options: { virtualHost: true } * https://github.com/dcloudio/uni-ui/issues/753 */ options: { virtualHost: true } }) // #endif const props = defineProps({ // 是否顯示自定義tabbar showTabBar: { type: [Boolean, String], default: false }, }) </script> <template> <view class="uv3__container flexbox flex-col flex1"> <!-- 頂部插槽 --> <slot name="header" /> <!-- 內容區 --> <view class="uv3__scrollview flex1"> <slot /> </view> <!-- 底部插槽 --> <slot name="footer" /> <!-- tabbar欄 --> <uv3-tabbar :show="showTabBar" transparent zIndex="99" /> </view> </template>
uniapp+vue3自定義標題欄+底部選單欄
在components目錄下自定義導航條/選單欄元件。
底部tabbar選單欄支援高斯模糊虛化背景效果。
頂部Navbar支援如下引數
const props = defineProps({ // 是否是自定義導航 custom: { type: [Boolean, String], default: false }, // 是否顯示返回 back: { type: [Boolean, String], default: true }, // 標題 title: { type: [String, Number], default: '' }, // 標題顏色 color: { type: String, default: '#fff' }, // 背景色 bgcolor: { type: String, default: '#07c160' }, // 標題字型大小 size: { type: String, default: null }, // 標題是否居中 center: { type: [Boolean, String], default: false }, // 是否搜尋 search: { type: [Boolean, String], default: false }, // 是否固定 fixed: { type: [Boolean, String], default: false }, // 是否背景透明 transparent: { type: [Boolean, String], default: false }, // 設定層級 zIndex: { type: [Number, String], default: '2023' }, // 自定義iconfont字型圖示庫字首 customPrefix: { type: String, default: 'uv3trip-icon' }, // 自定義樣式 customStyle: String, })
底部Tabbar支援如下引數
const props = defineProps({ // 當前選中項 current: { type: [Number, String] }, // 背景色 bgcolor: { type: String, default: '#fff' }, // 顏色 color: { type: String, default: '#333' }, // 啟用顏色 activeColor: { type: String, default: '#f90' }, // 是否固定 fixed: { type: [Boolean, String], default: false }, // 是否背景透明 transparent: { type: [Boolean, String], default: false }, // 是否中間凸起按鈕 dock: { type: [Boolean, String], default: true }, // 設定層級 zIndex: { type: [Number, String], default: '2024' }, // 自定義iconfont字型圖示庫字首 customPrefix: { type: String, default: 'uv3trip-icon' }, // 自定義樣式 customStyle: String, // 是否顯示 show: { type: Boolean, default: true }, // tab選項 tabs: { type: Array, default: () => [] } })
uniapp+vue3酒店預訂模組
預訂模組涉及功能點多,為了維護方便,單獨抽離了一個公共元件。
日期選擇則是使用自定義彈窗+uv-ui日曆元件實現功能。支援自定義開始/結束日期、日期區間、日期自定義打點資訊。
<!-- 日曆 --> <uv3-popup v-model="isVisibleCalendar" title="選擇日期" position="bottom" round xclose xposition="left" :customStyle="{'overflow': 'hidden'}" @open="showCalendar=true" @close="showCalendar=false" > <uv-calendars v-if="showCalendar" ref="calendarRef" mode="range" insert color="#ffaa00" :startDate="startDate" :endDate="endDate" :date="rangeDate" :selected="dingDate" title="選擇日期" start-text="入住" end-text="離店" @change="handleCalendarChange" /> </uv3-popup>
/** * 日期引數 */ const isVisibleCalendar = ref(false) const showCalendar = ref(false) const calendarRef = ref(null) const nightNum = ref(1) // 限制日期選擇範圍-開始日期 const startDate = ref(getDate(new Date()).fullDate) // 限制日期選擇範圍-結束日期 const endDate = ref(getDate(new Date(), 90).fullDate) // 自定義預設選中日期,不傳預設為今天。mode="multiple"或mode="range"時,該值為陣列 const rangeDate = ref([getDate(new Date()).fullDate, getDate(new Date(), 1).fullDate]) // 打點,期待格式[{date: '2019-06-27', info: '簽到', disable: false}] const dingDate = ref([ { date: getDate(new Date(), 3).fullDate, info: '已預訂', infoColor: '#ffaa00', badge: true }, { date: getDate(new Date(), 4).fullDate, info: '已滿', disable: true, }, { date: getDate(new Date(), 5).fullDate, info: '優惠', infoColor: '#19be6b', topinfo: '¥99', topinfoColor: '#19be6b' }, { date: getDate(new Date(), 7).fullDate, info: '有空房', infoColor: '#09f', }, ])
uniapp+vue3訊息聊天模組
專案中新增了訊息聊天模組。這塊功能是之前開發的一款uniapp+vue3仿微信app聊天功能的精簡版。
https://www.cnblogs.com/xiaoyan2017/p/18165578
聊天編輯框支援h5/小程式端/app端,已經免費釋出到外掛市場,歡迎下載使用。
https://ext.dcloud.net.cn/plugin?id=13275
綜上就是uniapp+vue3實戰開發酒店預訂app應用的一些知識分享,希望對大家有所幫助!
最後附上幾個跨平臺專案例項
HarmonyOS-Chat聊天室|純血鴻蒙Next5 api12聊天app|ArkUI仿微信
tauri2.0-admin桌面端後臺系統|Tauri2+Vite5+ElementPlus管理後臺EXE程式
Electron32-ViteOS桌面版os系統|vue3+electron+arco客戶端OS管理模板
Vite5+Electron聊天室|electron31跨平臺仿微信EXE客戶端|vue3聊天程式
flutter3-dylive仿抖音App例項|Flutter3+Getx實戰短影片直播應用