2025最新款uni-app+vue3 setup+uv-ui跨三端酒店预订模板

174 阅读3分钟

经过两周爆肝更新研发,跨端uniapp+vue3+pinia2仿携程app旅行酒店预约系统完结了。

未标题-1-1.png

未标题-9.png

uniapp-vue3-hotel酒店预订系统支持编译运行到web+小程序+app端

p1.gif

项目知识点

  • 开发工具:HbuilderX 4.84
  • 技术框架:uni-app+vite5+vue3
  • 状态管理:pinia2
  • UI组件库:uni-ui+uv-ui(uniapp+vue3组件库)
  • 弹框插件:uv3-popup(基于uniapp+vue3多端弹窗组件)
  • 自定义组件:uv3-navbar导航条+uv3-tabbar菜单栏
  • 缓存技术:pinia-plugin-unistorage
  • 支持运行:web+小程序+app端

未标题0-0.png

p2.gif

p2-1.gif

项目结构目录

使用最新跨端框架uniapp+vite5+vue3搭建项目模板页面。

360截图20251106234757798.png

p3.gif

未标题0-1.png

项目入口配置

import { createSSRApp } from 'vue'
import App from './App'

// 引入pinia状态管理
import pinia from '@/pinia'

export function createApp() {
  const app = createSSRApp(App)
  app.use(pinia)
  return {
    app,
    pinia
  }
}

项目布局模板

fdf96f79ac44fb014561303560062cd3_1289798-20251107224450332-1926815156.png

<script setup>
  // #ifdef MP-WEIXIN
  defineOptions({
    options: { virtualHost: true }
  })
  // #endif
  const props = defineProps({
    // 是否显示自定义tabbar
    showTabBar: { type: [Boolean, String], default: false },
  })
  
  const handleChange = (index) => {
    if(index == 2) {
      uni.showToast({
        icon: 'none',
        title: '自定义功能'
      })
    }
  }
</script>

<template>
  <view class="uv3__container flexbox flex-col flex1">
    <!-- 顶部插槽 -->
    <slot name="header" />
    
    <!-- 内容区 -->
    <view class="uv3__scrollview flex1" :style="{'padding-bottom': showTabBar ? '50px' : 0}">
      <slot />
    </view>
    
    <!-- 底部插槽 -->
    <slot name="footer" />
    
    <!-- tabbar栏 -->
    <uv3-tabbar :show="showTabBar" transparent zIndex="99" @change="handleChange" />
  </view>
</template>

支持运行到pc端以750px宽度显示布局结构。

001360截图20251106152208167.png

001360截图20251106152646529.png

001360截图20251106153325642.png

001360截图20251106153406440.png

001360截图20251106161306413.png

001360截图20251106161817132.png

001360截图20251106161904532.png

uniapp+vue3自定义标题栏+菜单栏组件

image.png

f0243a6f6654725b40f5e9bf704f7be9_1289798-20251107231759259-328392536.png

标题栏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,
})

image.png

如上图:底部tabbar采用背景毛玻璃效果。

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,
})

001360截图20251106094257828.png

002360截图20251106094854292.png

002360截图20251106095237483.png

002360截图20251106095347067.png

003360截图20251106095807874.png

005360截图20251106100307873.png

005360截图20251106100415473.png

005360截图20251106100436738.png

006360截图20251106100708767.png

006360截图20251106100928280.png

007360截图20251106101145616.png

008360截图20251106101750903.png

009360截图20251106102112726.png

009360截图20251106102535245.png

009360截图20251106102850135.png

010360截图20251106103139876.png

011360截图20251106103517381.png

011360截图20251106103557115.png

012360截图20251106103635947.png

uniapp+vue3酒店预订模板

df8d7aa2d68a9b1a835a5bf87460ea06_1289798-20251107232800634-2015111682.png

306ae10e2719dd5062ca191bb670c67f_1289798-20251107233102420-339845490.png

8dc487e57c38028a604ae87ab60d50cb_1289798-20251107233327062-889095202.png

<!-- 日历 -->
<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>

002360截图20251106142943581.png

/**
 * 日期参数
 */
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聊天模块

image.png

项目中还新增了客服聊天功能模块。是之前uniapp+vue3仿微信聊天功能的简单版本。

最新版uni-app+vue3+uv-ui跨三端仿微信app聊天应用【h5+小程序+app端】

bf0effd5c61955ba913041ec293f8dbc_1289798-20251107234215982-698303763.gif

未标题-a.png

最新自创Tauri2.9+Vite7.1+Vue3+ElementPlus桌面端通用后台系统管理Exe模板

2025最新版Tauri2.8+Vite7.1+Vue3+ElementPlus客户端聊天软件Exe

2025最新款Electron38+Vite7+Vue3+ElementPlus电脑端后台admin系统

基于electron38+vite7+vue3 setup+elementPlus电脑端仿微信/QQ聊天软件

electron38.2-vue3os系统|Vite7+Electron38+Pinia3+ArcoDesign桌面版OS管理系统

最新版Vite7+Vue3+Pinia3+ArcoDesign网页版webos后台管理系统

基于uniapp+vue3+uvue仿抖音app短视频+聊天+直播app系统

Flutter3.x深度融合短视频+直播+聊天app实例

基于uniapp+vue3+deepseek+markdown搭建app版流式输出AI模板

vue3.5+deepseek+arco+markdown搭建web版流式输出AI模板

unios-admin手机版后台|uniapp+vue3全端admin管理系统

基于flutter3.32+window_manager仿macOS/Wins风格桌面os系统

flutter3.27+bitsdojo_window电脑端仿微信Exe应用

自研tauri2.0+vite6.x+vue3+rust+arco-design桌面版os管理系统Tauri2-ViteOS

基于uni-app+vue3+uvui跨三端仿微信app聊天模板