87fb7ca7 by 杨炀

no message

1 parent f48a867f
......@@ -34,3 +34,17 @@ export function newsSubmitOrderHotel(data) {
data: data
})
}
export function getRoomBilldetailbyId(params) {
return request({
url: `/ota/orderRoom/getRoomOrderInfoByOrderId`,
method: 'get',
params: params
})
}
export function getActivityCarList(params) {
return request({
url: `/ota/activityVehicle/wxList`,
method: 'get',
params: params
})
}
......
......@@ -362,6 +362,12 @@ export const constantRoutes = [
meta: { title: 'Hotel Reservation' }
},
{
path: 'car/:cptId/:id',
component: () => import('@/viewsPc/booking/carOrder'),
name: 'carOrder',
meta: { title: 'Car Reservation' }
},
{
path: 'hotel/:cptId/:hotelId/:roomId',
component: () => import('@/viewsPc/booking/hotelOrder'),
name: 'hotelOrder',
......
<template>
<div>
<div class="banner">
<img src="@/assets/booking/jd_text.png">
<img src="@/assets/booking/cl_text.png">
</div>
<div class="box">
<div class="searchBar">
......@@ -13,32 +13,64 @@
</div>
<div class="box" v-loading="loading">
<el-card v-for="(h,index) in list" class="mb20" @click="goDetail(h)">
<!-- che列表-->
<el-row class="hotel" align="middle" :gutter="20">
<el-col :span="6">
<img class="w100" :src="fillImgUrl(h.photos?.split(',')[0])"/>
</el-col>
<el-col :span="10">
<h3 class="esp">{{h.name}}</h3>
<div class="starBox">
<img v-for="i in Number(h.starLevel||0)" src="@/assets/booking/star.png">
</div>
<div class="tagbox">
<span v-for="(t,index) in h.label?.split(',')" v-show="index<4">{{t}}</span>
<a v-show="h.label?.split(',').length>4">{{ language==0?'更多':'MORE' }} ></a>
<el-collapse v-model="activeName" accordion style="--el-collapse-header-height:'auto'">
<el-collapse-item :name="index" v-for="(h,index) in list" class="hotel">
<template #title>
<el-row align="middle" :gutter="20" class="w100">
<el-col :span="4">
<div class="index">路线{{index+1}}
<img src="@/assets/booking/arrow.png"/>
</div>
</el-col>
<el-col :span="7">
<p class="esp">{{h.checkIn}}</p>
</el-col>
<el-col :span="4" class="text-center">
<img class="mauto w40px" src="@/assets/booking/wf.png"/>
</el-col>
<el-col :span="7">
<p class="esp ">{{h.checkOut}}</p>
</el-col>
</el-row>
</template>
<div class="plr20">
<div v-for="(r,index) in h.carVoList" :key="index" class="room">
<el-row :gutter="30" align="middle">
<el-col :span="4">
<div class="roomImg">
<img :src="fillImgUrl(r.photos?.split(',')[0])">
</div>
</el-col>
<el-col :span="14">
<h3 class="name">{{ r.carType }}
<div class="tagbox">
<span class="tag">{{r.carColor}}</span>
<span class="tag" v-show="r.checkOut==1">可送车</span>
<span class="tag" v-show="r.checkIn==1">可接车</span>
</div>
</h3>
<el-row :gutter="10">
<el-col :span="8">{{ language==0?'座位数':'Seats' }}: {{r.carSeat}}</el-col>
<el-col :span="8">{{ language==0?'运营时间':'Servers Time' }}: {{r.operStart}} ~ {{r.operEnd}}</el-col>
</el-row>
</el-col>
<el-col :span="3">
<div class="price">{{ language==0?'¥':'€' }}<span>{{language==0?r.inPrice:r.inPriceEn}}</span></div>
</el-col>
<el-col :span="3">
<el-button class="btn-lineG w100" round type="primary" @click="goOrder(h,r)">{{ language==0?'我要预定':'Select' }}</el-button>
</el-col>
</el-row>
</div>
<p class="esp addr">
<el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><LocationFilled /></el-icon>
{{h.address}}
</p>
</el-col>
<el-col :span="8" class="text-right">
<div class="price">¥<span>{{ h.price }}</span><i v-if="language==0"></i></div>
<el-button class="btn-lineG w200px" round type="primary" size="large">{{ language==0?'立即预约':'Select' }}</el-button>
</el-col>
</el-row>
</el-card>
<el-empty v-if="list.length == 0" :image="`/img/order_no.png`" :image-size="228" description=""/>
</div>
</el-collapse-item>
</el-collapse>
<el-empty v-show="!loading&&list.length==0" :image="`/img/order_no.png`" :image-size="228" description="" />
<div style="height: 50px"></div>
</div>
......@@ -51,12 +83,14 @@ import {onMounted} from "@vue/runtime-core"
import * as booking from "@/apiPc/booking"
import {useRouter,useRoute} from "vue-router";
import {useStorage} from "@vueuse/core/index";
import {getActivityCarList} from "@/apiPc/booking";
const router = useRouter()
const route = useRoute()
const language= useStorage('language',0)
const query = ref({
name:''
})
const activeName = ref(0)
const cptId = ref('')
const list = ref([])
const loading = ref(false)
......@@ -67,40 +101,50 @@ onMounted(()=>{
function getList() {
loading.value = true
booking.getHotelList(query.value).then(res=>{
booking.getActivityCarList(query.value).then(res=>{
list.value = res.rows
loading.value = false
}).catch(e=>{
loading.value = false
})
}
function goDetail(item) {
function goOrder(item,car) {
router.push({
name:'hotelDetail',
name:'carOrder',
params:{
hotelId:item.hotelId,
id:item.id,
},
query:{
id:item.id
item:encodeURIComponent(JSON.stringify(item)),
car:encodeURIComponent(JSON.stringify(car)),
}
})
}
</script>
<style scoped lang="scss">
.hotel{
h3{margin: 0 0 20px;}
img.w100{object-fit: cover;aspect-ratio: 16/9}
.addr{font-size: 16px;color: #929AA0;font-weight: 400;}
.price{margin: 0 0 25px;
color: #FF8124;font-size: 18px;
span{font-size: 24px;margin: 0 8px;font-family: 'DINAlternate-Bold';font-weight: 600;}
i{font-style: normal;color: #929AA0;}
.w40px{width: 40px}
.plr20{padding: 0 20px}
.hotel{margin-bottom: 20px;cursor: pointer;
.index{display: flex;font-weight: 500;padding-left: 20px;
font-size: 18px;align-items: center;
img{margin-left: 15px;}
}
p{font-weight: 500;
font-size: 24px;
color: #000000;}
&:hover .el-card{box-shadow: 0 0 10px #aaa;}
}
.hotel:nth-child(7n) .index{color: #009E96;}
.hotel:nth-child(7n+1) .index{color: #FF8124;}
.hotel:nth-child(7n+2) .index{color: #E4007F;}
.hotel:nth-child(7n+3) .index{color: #0068B7;}
.hotel:nth-child(7n+4) .index{color: #32B16C;}
.hotel:nth-child(7n+5) .index{color: #920783;}
.hotel:nth-child(7n+6) .index{color: #00B7EE;}
.banner{height: 140px;background-size: cover;text-align: center;
background: url("@/assets/booking/jd_bg.png") center;display: flex;align-items: center;
background: url("@/assets/booking/cl_bg.png") center;display: flex;align-items: center;
justify-content: center;
img{display: block;margin:-30px auto 0;width: auto;}
}
......@@ -121,4 +165,21 @@ function goDetail(item) {
span:nth-child(4n+2){background: rgba(0, 160, 233, 0.2);color: rgba(0, 160, 233, 1);}
span:nth-child(4n+3){background: rgba(247, 64, 166, 0.2);color:rgba(247, 64, 166, 1);}
}
.room {
background: #FAFBFD;margin: 20px 0 0;padding: 20px;
border: 1px solid #E5E5E5;
.name{font-size: 20px;margin: 0 0 10px;}
.roomImg{aspect-ratio: 16/9;border-radius: 10px;overflow: hidden;
img{width: 100%;object-fit: cover;object-position: center;height: 100%;}
}
.price{color: #FF8124;font-size: 24px;
span{font-size: 36px;font-family: "DIN Alternate"}
}
.bg-lineg{margin: auto;border-radius: 10px;text-align: center;padding: 7px 2px 2px;
font-size: 24px;width:66px;cursor: pointer;
div{background: #fff;font-size: 13px;border-radius: 20px;padding: 0 10px;
color: #453DEA;font-weight: 500;}
}
}
</style>
......
<template>
<div>
<div class="box">
<el-card class="mt30">
<div class="flex">
<p class="esp">{{car.checkIn}}</p>
<img src="@/assets/booking/wf.png"/>
<p class="esp text-right">{{car.checkOut}}</p>
</div>
</el-card>
<el-card class="mt30 mb60">
<div class="lineHead">
<ul>
<li>{{ language == 0 ? '车型选择' : 'Available Cars' }}</li>
</ul>
</div>
<div>
<div v-for="(r,index) in list" :key="index" class="room">
<el-row :gutter="30" align="middle">
<el-col :span="4">
<div class="roomImg">
<img :src="fillImgUrl(r.photo?.split(',')[0])">
</div>
</el-col>
<el-col :span="14">
<h3 class="name">{{ r.roomType }}</h3>
<el-row :gutter="10">
<el-col :span="8">{{ r.area }}</el-col>
<el-col :span="8" v-show="r.windowFlag==1"> {{ language==0?'有窗':'With windows' }}</el-col>
<el-col :span="8" v-show="r.windowFlag==0"> {{ language==0?'无窗':'Windowless' }}</el-col>
<el-col :span="8" v-show="r.bathroomFlag==1"> {{ language==0?'热水洗浴':'Shower' }}</el-col>
<!-- <text v-show="r.bathroomFlag==0"> </text> -->
<el-col :span="8" v-show="r.addBedFlag==1"> {{ language==0?'允许加床':'Extra bed' }} </el-col>
<el-col :span="8" v-if="r.breakfastNum&&r.breakfastNum > '0'">
{{ r.breakfastNum }}{{ language==0?'份早餐':' breakfasts' }}
</el-col>
<el-col :span="8" v-else>{{ language==0?'无早餐':'No breakfast' }}</el-col>
</el-row>
</el-col>
<el-col :span="3">
<div class="price">{{ language==0?'¥':'€' }}<span>{{language==0?r.roomPrice:r.roomPriceEn}}</span></div>
</el-col>
<el-col :span="3">
<div class="bg-lineg" v-if="language==0" @click="goOrder(r)">
<div>{{ language==0?'在线付':'Online' }}</div>
</div>
<el-button v-else class="btn-lineG w100" round type="primary" @click="goOrder(r)">Select</el-button>
<div class="text-center text-primary mt10 fontsize14 pointer" v-if="language == 0">
剩余 {{(r.roomCount - (r.useCount||0)).toFixed()}}
</div>
<div class="text-center text-primary mt10 fontsize14" v-else>
{{(r.roomCount - (r.useCount||0)).toFixed()}} Remaining rooms
</div>
</el-col>
</el-row>
</div>
<el-empty v-if="list.length == 0" :image="`/img/order_no.png`" :image-size="228" description=""/>
</div>
</el-card>
</div>
</div>
</template>
<script setup>
import {useRouter} from "vue-router";
import {ref, reactive, onMounted} from "vue";
import {useRoute} from "vue-router";
import {useStorage} from "@vueuse/core/index";
import useUserStore from "@/store/modules/user";
const user = useUserStore().user
const language = useStorage('language', 0)
const router = useRouter()
const route = useRoute()
const form = ref({})
const car = ref({})
const query = ref({
id: route.query.id
})
const loading = ref(false)
const list = ref([])
onMounted(()=>{
car.value = JSON.parse(decodeURIComponent(route.query.detail))
list.value = car.value.carVoList
})
</script>
<style scoped>
</style>
......@@ -112,7 +112,8 @@ import {useRoute} from "vue-router";
import {getHotelById, getHotelRooms} from "@/apiPc/booking"
import {useStorage} from "@vueuse/core/index";
import useUserStore from "@/store/modules/user";
const user = useUserStore().user
const language = useStorage('language', 0)
const router = useRouter()
const route = useRoute()
......@@ -185,6 +186,10 @@ function initMap() {
}
function goOrder(room) {
if(!user){
useUserStore().setReLogin()
return
}
router.push({
name:'hotelOrder',
params:{
......
......@@ -27,8 +27,8 @@
<div class="leftboderTT">{{ language == 0 ? '预约信息' : 'Reservation information' }}</div>
<div class="border-rr mt20 pd20">
<el-form :model="form" :label-width="language == 0 ?'100':'150'">
<el-form-item :label="language==0?'入住日期':'Check-in date'">
<el-form :model="form" :label-width="language == 0 ?'100':'150'" :rules="rules" ref="formRef">
<el-form-item :label="language==0?'入住日期':'Check-in date'" required>
<el-date-picker @change="getDaysBetween"
v-model="rzRange"
type="daterange"
......@@ -36,17 +36,17 @@
value-format="YYYY-MM-DD"/>
<!-- :picker-options="pickerOptions"-->
</el-form-item>
<el-form-item :label="language==0?'房间数':'Rooms'">
<el-form-item :label="language==0?'房间数':'Rooms'" required prop="roomNum">
<el-input-number v-model="form.roomNum" :min="0" :max="canOrderNum" @change="changeRoomNum"/>
<div class="red ml20" v-if="rzRange[1]">
<span v-if="language == 0">剩余房间数:{{ canOrderNum }}</span>
<span v-else>{{ canOrderNum }} Remaining rooms</span>
</div>
</el-form-item>
<el-form-item v-for="(n,index) in form.roomNum" :key="index" :label="`入住人${index+1}`">
<el-form-item v-for="(n,index) in form.roomNum" :key="index" :label="`入住人${index+1}`" required>
<el-input v-model="rzUserArr[index]" :placeholder="language==0?'每间填一位住客姓名':'Each room fill in one name of the guest'"/>
</el-form-item>
<el-form-item :label="language==0?'预计到店':'Expected check-in'">
<el-form-item :label="language==0?'预计到店':'Expected check-in'" required>
<el-select v-model="form.ddDate"
:placeholder="language==0?'请选择预计到店时间':'Please select the expected check-in time'">
<el-option
......@@ -57,24 +57,25 @@
/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'联系电话':'Contact phone'">
<el-form-item :label="language==0?'联系电话':'Contact phone'" required prop="phone">
<el-input v-model="form.phone"/>
</el-form-item>
<div v-if="room.addBedFlag=='1'">
<el-form-item :label="language==0?'是否加床':'Extra bed'">
<el-form-item :label="language==0?'是否加床':'Extra bed'" required>
<el-radio-group v-model="form.isAddbed">
<el-radio label="1">{{ language == 0 ? '是' : 'Yes' }}</el-radio>
<el-radio label="0">{{ language == 0 ? '否' : 'No' }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="language==0?'加床张数':'Extra bed num'">
<el-form-item :label="language==0?'加床张数':'Extra bed num'" required>
<el-input-number v-model="form.addNum" :min="0" :max="1" @change="changeBed"/>
</el-form-item>
<div class="tip" v-if="form.isAddbed=='1'">*
<span v-if="language == 0">一个房间最多加一张床</span>
<span v-else>A room can only add one bed</span>
</div>
</el-form-item>
</div>
</el-form>
</div>
......@@ -156,7 +157,9 @@ const canOrderNum = ref(0)
const form = ref({
isAddbed: '0',
roomNum: 0,
addNum: 0
addNum: 1,
ddDate:'14:00',
phone: user.phonenumber||'',
})
const rzRange = ref([])
const rzUserArr = ref([])
......@@ -232,6 +235,8 @@ const ddDateArr = ref([
label: '00:00'
}
])
const rules = ref({})
let usedays = 0
onMounted(() => {
console.log(route.query)
......@@ -327,6 +332,7 @@ function countMoney() {
function submit() {
if(!user){
useUserStore().setReLogin()
return
}
if (usedays == 0) {
......@@ -466,4 +472,5 @@ function submit() {
.red {
color: #FF8124;
}
.tip{font-size: 14px;color: #666;padding: 0 10px;}
</style>
......
<template>
<div>
<el-card :body-style="{'padding':'0'}">
<div class="indexTitle"><h3 class="leftboderTT">{{ language==0?'我的预订':'My reservation' }}</h3></div>
<div class="indexTitle">
<h3 class="leftboderTT">{{ language==0?'我的预订':'My reservation' }}
</h3>
<el-button class="fr" type="primary" plain @click="toInvoice">发票开具</el-button>
</div>
<el-empty :image="`/img/order_no.png`" :image-size="228" v-if="list?.length == 0"/>
<div class="pd20">
<div v-for="b in list" class="item">
......@@ -33,9 +38,9 @@
<el-col :lg="8">
<div class="text-right">
<el-button class="mb10" plain round type="primary" @click="goDetail(n)">
<el-button class="mb10" plain round type="primary" @click="goDetail(b)">
{{ language==0?'详情':'Detail' }}</el-button>
<el-button v-if="b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')" @click="goPay(b)"
<el-button v-if="b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')" @click="goDetail(b)"
class="mb10" plain round type="primary" >
{{ language==0?'支付':'Pay' }}</el-button>
</div>
......@@ -55,6 +60,7 @@
import {onMounted} from "@vue/runtime-core";
import {useStorage} from "@vueuse/core/index";
import {newbilllist} from "@/apiPc/common";
const router = useRouter()
const language= useStorage('language',0)
const list = ref([])
......@@ -69,6 +75,18 @@ function getList() {
}
})
}
function goDetail(b) {
router.push({
name: 'bookingPay',
query: {
orderId: b.id
}
})
}
function toInvoice(){
}
</script>
<style scoped lang="scss">
......@@ -84,11 +102,11 @@ function getList() {
.bg-blue{background: #00a0e9}
}
.indexTitle {
margin: 20px 0 12px;
margin: 20px 0 12px; overflow: visible;
padding: 0 20px 15px;
border-bottom: 1px solid #e5e5e5;
h3 {
.fr{margin: -8px 0 0}
h3 {display: inline-block;
font-size: 16px;
color: var(--el-color-primary);
}
......
......@@ -225,7 +225,7 @@
</div>
</div>
<div>
<div hidden>
<div class="box">
<div class="indexTitle">
<h3 class="leftboderTT">评委介绍</h3>
......
......@@ -220,7 +220,7 @@
</div>
</div>
<div>
<div hidden>
<div class="box">
<div class="indexTitle">
<h3 class="leftboderTT">INTRODUCTION OF ADJUDICATORS</h3>
......@@ -710,7 +710,7 @@ const goGuide = () => {
p{margin: 13px 0 0;}
}
.logobox{background: #fff;height: 180px;border-radius: 10px;margin: 0 0 30px;
img{width: 100%}
img{width: 100%;height: 100%;object-fit: contain;}
}
.swiperPic{background: #F3F1FE;position: relative; height: 100%;
padding: 20px 45px;
......
......@@ -82,7 +82,7 @@ export default defineConfig(({ mode, command }) => {
rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '')
},
'/dev-api': {
target: 'http://192.168.1.27:8081/',
target: 'http://192.168.1.118:8081/',
// target: 'https://dance.itechtop.cn/stage-api',
// target: 'https://wdsfwuxicenter.com/stage-api',
changeOrigin: true,
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!