Commit f37f6c2b authored by 沈良进's avatar 沈良进

新增页面

parent 597da35f
<template>
<div class="rounded-borders bg-white row items-center q-pb-md">
<q-field stack-label :label="$t('v101.scatteredDetails.ruzhuTime')+'/'+$t('v101.scatteredDetails.tuifangTime')" standout class="col-2" style="min-width: 200px" dense>
<div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormat }}</div>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxy">
<q-date v-model="dateRange" :options="optionsFn" range mask="YYYY/MM/DD" landscape @range-end="dateRangeHandler"></q-date>
</q-popup-proxy>
</q-field>
<div class="row" :class="{'q-mt-sm':$q.platform.is.mobile}">
<q-select :class="{'q-ml-lg':$q.platform.is.desktop}" style="min-width: 90px;z-index: 99999;" unelevated v-model="room" dense :options="theRooms" emit-value option-label="name" option-value="id" map-options :label="$t('v101.scattered.kefang')" standout @update:model-value="getRoomList">
</q-select>
<q-btn unelevated class="bg-white hover q-px-xs q-py-sm q-ml-xs text-grey-6" icon="person">
<div class="text-dark q-ml-xs">
{{auditNum}}{{$t('v101.scattered.chengren')}}
<span class="q-px-sm">.</span>
<template v-if="childNum>0">{{childNum}}</template>
{{$t('v101.scattered.ertong')}}
</div>
<q-popup-proxy class="no-shadow absolute" style="z-index: 0;box-shadow: 0 0 50px #ddd !important" :offset="[0, 20]" :model-value="isShowPop">
<q-card class="row wrap q-pa-md rounded-borders" style="max-width:697px;">
<div class="q-mr-md" v-for="(item,index) in search.searchroomGroup" :key="index" style="min-width: 150px;">
<div class="q-mb-md text-subtitle2">{{ $t('v101.scattered.kefang') }}{{index+1}}</div>
<div class="q-my-md">
<q-select v-model="item.numberOfAdults" dense :options="adultList" emit-value map-options :label="$t('v101.scattered.chengren')" standout @update:model-value="setPeopleNum"/>
</div>
<div class="q-my-md">
<q-select v-model="item.numberOfChildren" dense :options="childrenList" emit-value map-options :label="$t('v101.scattered.ertong')" standout @update:model-value="setPeopleNum"/>
</div>
</div>
</q-card>
</q-popup-proxy>
</q-btn>
</div>
<div class="q-pl-lg text-red-6 row items-center" style="position: relative;" v-if="$q.platform.is.desktop">
<q-icon class="absolute" style="left: 85px;top: 0;" name="information" size="18px"></q-icon>
<span class="q-pl-lg">{{ $t('v101.scatteredDetails.prompt') }}</span>
</div>
<div class="col"></div>
<q-btn color="primary" unelevated :label="$t('query')" :loading="loading" @click="initHotel"/>
</div>
<div class="q-pl-lg q-pb-lg text-red-6 row items-center" style="position: relative;" v-if="$q.platform.is.mobile">
<q-icon class="absolute" style="left: 65px;top: 0;" name="information" size="18px"></q-icon>
<span class="q-pl-sm">{{ $t('v101.scatteredDetails.prompt') }}</span>
</div>
<div class="bg-light-blue-1 q-pa-md fz14 rounded-borders row items-center">
<div class="text-weight-bold">{{ $t('v101.scatteredDetails.fuheTJroom') }}</div>
</div>
<div class="q-my-md">
<template v-if="SimilarList&&SimilarList.length>0">
<q-card class="row q-mb-md" v-for="(item,index) in SimilarList" :key="index" v-loading="loading">
<div class="col q-pa-sm q-pr-lg" :class="{'col-3 row no-wrap justify-between': $q.platform.is.desktop,'col-4 column': $q.platform.is.mobile}" :style="{'border-right': $q.platform.is.desktop?'1px solid #eeeeee':''}">
<div v-if="$q.platform.is.desktop" :class="{'col-6':$q.platform.is.desktop,'col-12':$q.platform.is.mobile}" :style="{'height':$q.platform.is.desktop?'100px':'50px'}">
<q-img :src="item.roomImageURL" :style="{'height':$q.platform.is.desktop?'100%':'50px'}" spinner-color="drk" spinner-size="20px" mode="cover"/>
</div>
<div class="col column" :class="{'q-pl-xs':$q.platform.is.desktop}">
<div class="text-right text-green q-pt-md">
{{getGradeType(item.gradeType)}}{{getRoomType(item.roomType)}}
</div>
<div class="row no-wrap justify-end q-pt-md text-right">
<span class="text-blue bg-blue-1 q-px-sm q-mr-sm" style="white-space: nowrap;">
<template v-if="item.smoking==0">{{$t('v101.scatteredDetails.jinyan')}}</template>
<template v-if="item.smoking==1">{{$t('v101.scatteredDetails.kexiyan')}}</template>
</span>
<span class="text-blue bg-blue-1 q-px-sm" style="white-space: nowrap;">
<template v-if="item.withBath==0">{{$t('v101.scatteredDetails.wuyushi')}}</template>
<template v-if="item.withBath==1">{{$t('v101.scatteredDetails.youyushi')}}</template>
</span>
</div>
</div>
</div>
<div class="col" :style="{'border-left': $q.platform.is.mobile?'1px solid #eeeeee':''}">
<div class="relative-position" v-for="(subItem,subIndex) in item.roomOptions" :key="subIndex">
<q-separator v-if="subIndex!=0"/>
<div class="col q-ml-lg q-pt-lg q-pb-md q-pr-md" >
<div class="col q-pt-sm" :class="{'row items-center no-wrap': $q.platform.is.desktop,'common': $q.platform.is.mobile}">
<div class="absolute text-white q-px-lg" style="left: 0;top: 0;border-bottom-right-radius: 10px;"
:class="getMealType(subItem.meals)==ScatMeaList[0].name?'HD_Black':'HD_Green'">{{getMealType(subItem.meals)}}</div>
<div class="col-2 text-grey-6" v-if="$q.platform.is.desktop">{{subItem.bookingDeadline}}</div>
<div class="col-3" :class="{'q-pl-lg':$q.platform.is.desktop}" v-if="$q.platform.is.desktop">{{subItem.minNights}}</div>
<div class="row text-red" :class="{'col q-pl-lg':$q.platform.is.desktop}" v-if="$q.platform.is.desktop">
<div class="column">
<span class="wrap-title">{{$t('v101.scatteredDetails.Time1')}}</span>
<span>{{subItem['check-inStartTime']}}</span>
</div>
<div class="column q-pl-md q-pr-md">
<span class="wrap-title">{{$t('v101.scatteredDetails.Time2')}}</span>
<span>{{subItem['finalCheck-inTime']}}</span>
</div>
<div class="column">
<span class="wrap-title">{{$t('v101.scatteredDetails.Time3')}}</span>
<span>{{subItem['finalCheck-outTime']}}</span>
</div>
</div>
<div class="row no-wrap justify-end items-center" :class="{'q-pl-lg':$q.platform.is.desktop}">
<div class="row no-wrap items-center q-pr-lg">
<span class="text-grey-6"></span>
<span class="fz20 text-red q-px-sm">{{getPrice(subItem.chargeableRateInfoPerPersonForANightBySetCurrency)}}</span>
<span class="text-grey-6">/{{$t('v101.scatteredDetails.renju')}}</span>
</div>
<div class="q-pt-xs">
<q-btn class="bg-green-6 hover q-px-md q-py-xs q-ml-xs text-white" @click="goUrl('/scattered/HotelSure',subItem)" :label="$t('v101.scatteredDetails.yuyue')"/>
</div>
</div>
</div>
<div class="q-pt-sm">
<span class="text-green fz12 q-px-sm" style="border:1px solid green">{{subItem.minNights}}</span>
</div>
</div>
</div>
</div>
</q-card>
</template>
<div v-else class="col q-pa-lg text-center">
{{$t('noneData')}}
</div>
</div>
</template>
<script lang="ts">
import { useRouter } from 'vue-router'
import { useI18n } from 'vue-i18n'
import svgIcon from '../../global/svg-icon.vue'
import { computed, inject, provide, reactive, ref, toRefs, defineComponent, onMounted, watch } from 'vue'
import HotelService from '../../../api/scattered'
import message from '../../../utils/message'
import { ApiResult } from '../../../@types/enumHelper'
import { date } from 'quasar'
import { HotelRate,HotelArea, useHotel } from '../../../utils/hotelRate'
import { useQuasar } from 'quasar'
import useScrollModule from '../../../module/scrollbar/scrollModule'
import { DirtionmaryHelper } from '../../../config/dictionary'
import { moneyFormat } from '../../../utils/tools'
export default defineComponent({
components: { svgIcon },
props:[''],
setup(props,context) {
const $router = useRouter()
const $q = useQuasar()
const qDateProxy = ref(null) as any
const qNameProxy = ref(null) as any
const { locale, t } = useI18n()
const data = reactive({
scrollStyle: {} as any,
Areas: [] as Array<HotelArea>,//区域
cascader: {
addressValue: null
} as any,
dateRange: {} as any,//当前日期
dateRangeFormat: '',//可选日期
loading: false,
canHide: false,//更多筛选
theRooms: [] as Array<Number>,//客房下拉
room: 1,//客房数
auditNum: 1,
childNum: null as any,
adultList: [] as Array<Number>,//成人下拉
childrenList: [] as Array<Number>,//儿童下拉
isShowPop: false,//房间
SimilarList: [] as Array<any>,
JapanIncrease: 0,//除以
RoomTypeList: [] as Array<HotelArea>,//房间等级
scatteredRoomTypeList: [] as Array<HotelArea>,//散客房间类型
ScatMeaList: [] as Array<HotelArea>//散客房间餐型
})
for(let i=1;i<11;i++){
data.theRooms.push(i)
}
for(let i=1;i<10;i++){
data.adultList.push(i)
}
for(let i=0;i<6;i++){
data.childrenList.push(i)
}
data.scrollStyle = useScrollModule().scrollStyle
const search = inject(DirtionmaryHelper.HOTEL_QUERY_PARAM) as any
if(search.searchroomGroup&&search.searchroomGroup.length==0){
search.searchroomGroup.push({
roomNum: 1,
numberOfAdults: 1,
numberOfChildren: 0
})
}
let getParamsMsg = JSON.parse(localStorage.getItem(DirtionmaryHelper.SCATTERED_HOTEL_DATE))
data.auditNum = getParamsMsg.auditNum
data.childNum = getParamsMsg.childNum?getParamsMsg.childNum:''
data.room = data.theRooms[search.searchroomGroup.length-1]
// data.dateRange.to = date.formatDate(date.addToDate(new Date(), { days: 9 }), 'YYYY/MM/DD')
// data.dateRange.from = date.formatDate(date.addToDate(new Date(), { days: 8 }), 'YYYY/MM/DD')
// data.dateRangeFormat = `${data.dateRange.from} - ${data.dateRange.to}`
// search.arrivalDate = data.dateRange.from
// search.departureDate = data.dateRange.to
data.dateRange.to = search.arrivalDate
data.dateRange.from = search.departureDate
data.dateRangeFormat = `${search.arrivalDate} - ${search.departureDate}`
data.RoomTypeList = useHotel.getHotelRoomType()
data.scatteredRoomTypeList = useHotel.getHotelScatRoom()
data.ScatMeaList = useHotel.getHotelScatMeal()
const methods = {
goUrl(url:stringify,row: {}){
url = `${url}/${search.hotelId}/${row.roomOptionCd}`
let d = {
room: data.room,
auditNum: data.auditNum,
childNum: data.childNum,
}
context.emit('goUrl',url,d)
// window.open(url, '_blank')
// $router.push({ path:url })
},
getPrice(price){
return Math.ceil(price / data.JapanIncrease)
},
//获取餐
getMealType(meals) {
if (meals != "") {
let mealType = meals.split(",");
if (mealType[0] == 0 && mealType[2] == 0) {
return data.ScatMeaList[0].name;
}
if (mealType[0] == 1 && mealType[2] == 1) {
return data.ScatMeaList[1].name;
}
if (mealType[0] == 1 && mealType[2] == 0) {
return data.ScatMeaList[2].name;
}
if (mealType[0] == 0 && mealType[2] == 1) {
return data.ScatMeaList[30].name;
}
}
},
//获取房间等级
getRoomType(type) {
let gradeType = "";
switch (parseInt(type)) {
case 1:
gradeType = data.scatteredRoomTypeList[0].name;
break;
case 2:
gradeType = data.scatteredRoomTypeList[1].name;
break;
case 3:
gradeType = data.scatteredRoomTypeList[2].name;
break;
case 4:
gradeType = data.scatteredRoomTypeList[3].name;
break;
case 5:
gradeType = data.scatteredRoomTypeList[4].name;
break;
case 6:
gradeType = data.scatteredRoomTypeList[5].name;
break;
case 7:
gradeType = data.scatteredRoomTypeList[6].name;
break;
case 8:
gradeType = data.scatteredRoomTypeList[7].name;
break;
case 9:
gradeType = data.scatteredRoomTypeList[8].name;
break;
}
return gradeType;
},
//获取房型
getGradeType(type) {
let gradeType = "";
switch (parseInt(type)) {
case 1:
gradeType = data.RoomTypeList[0].name;
break;
case 2:
gradeType = data.RoomTypeList[1].name;
break;
case 3:
gradeType = data.RoomTypeList[2].name;
break;
case 4:
gradeType = data.RoomTypeList[3].name;
break;
case 5:
gradeType = data.RoomTypeList[4].name;
break;
case 6:
gradeType = data.RoomTypeList[5].name;
break;
}
return gradeType;
},
initHotel() {
data.loading = true
let param = Object.assign(search)
HotelService.GetHotelRoomsList(param)
.then(r => {
data.SimilarList = [] as Array<any>
if (r.data.resultCode == ApiResult.SUCCESS) {
if (
Object.prototype.toString.call(r.data.data.roomRateDetails) ==
"[object Object]"
) {
data.SimilarList.push(r.data.data.roomRateDetails);
} else {
data.SimilarList = r.data.data.roomRateDetails;
}
data.SimilarList.forEach(x => {
if (
Object.prototype.toString.call(x.roomOptions) ==
"[object Object]"
) {
let arr = [];
arr.push(x.roomOptions);
x.roomOptions = arr;
}
});
data.JapanIncrease = r.data.data.JapanIncrease;
}
data.loading = false
}).catch(e => {
data.loading = false
message.errorMsg(e.message)
})
},
//设置房间里面成人数改变总成人数和儿童数
setPeopleNum() {
data.auditNum = 0;
data.childNum = 0;
search.searchroomGroup.forEach(x => {
data.auditNum += x.numberOfAdults;
data.childNum += x.numberOfChildren;
})
if (data.auditNum == null || data.auditNum == undefined) {
data.auditNum = 1
}
if (data.childNum == null || data.childNum == undefined) {
data.childNum = 1
}
},
//房间数改变
getRoomList(roomNum) {
let length = search.searchroomGroup.length
if(roomNum>length){
for (let i = 1; i <= roomNum-length; i++) {
let obj = {
roomNum: i,
numberOfAdults: 1,
numberOfChildren: 0
}
search.searchroomGroup.push(obj);
}
}else{
search.searchroomGroup = search.searchroomGroup.filter((x:any,i:Number)=>{
if(roomNum>i)return x
})
}
data.auditNum = 0;
data.childNum = 0;
search.searchroomGroup.forEach(x => {
data.auditNum += x.numberOfAdults;
data.childNum += x.numberOfChildren;
})
data.isShowPop = true
search.auditNum = data.auditNum;
search.childNum = data.childNum;
},
dateRangeHandler(e: any) {
search.arrivalDate = `${e.from.year}/${e.from.month}/${e.from.day}`
if(search.arrivalDate!=`${e.to.year}/${e.to.month}/${e.to.day}`){
search.departureDate = `${e.to.year}/${e.to.month}/${e.to.day}`
data.dateRangeFormat = `${search.arrivalDate} - ${search.departureDate} `
if (qDateProxy.value) qDateProxy.value.hide()
}else{
// message.errorMsg(`${t('v101.scatteredDetails.timeTis')}`)
}
},
optionsFn(cd: any) {
return cd >= date.formatDate(date.addToDate(new Date(), { days: 8 }), 'YYYY/MM/DD')
},
}
watch(search.searchroomGroup, (n, o) => {
})
onMounted(()=>{
methods.initHotel()
})
return {
...toRefs(data),
...methods,
qDateProxy,
qNameProxy,
search,
}
}
})
</script>
<style>
.wrap-title {
/* width: 33.33%; */
overflow: hidden;
white-space: wrap;
}
.HD_Black{
background-color: black;
}
.HD_Green{
background-color: green;
}
</style>
\ No newline at end of file
<template>
<div class="rounded-borders bg-white row items-center q-pa-md">
<q-select v-if="$q.platform.is.desktop" style="min-width: 190px;" unelevated v-model="placeKeyWords" dense :options="Areas" emit-value option-label="name" option-value="name" map-options :label="$t('hotel.area')" standout />
<q-field v-if="$q.platform.is.desktop" stack-label :label="$t('daterange')" standout class="q-ml-lg col-2" style="min-width: 190px" dense>
<div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormat }}</div>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxy">
<q-date v-model="dateRange" :options="optionsFn" range mask="YYYY/MM/DD" landscape @range-end="dateRangeHandler"></q-date>
</q-popup-proxy>
</q-field>
<div class="row" v-if="$q.platform.is.desktop">
<q-select class="q-ml-lg" style="min-width: 90px;z-index: 99999;" unelevated v-model="room" dense :options="theRooms" emit-value option-label="name" option-value="id" map-options :label="$t('v101.scattered.kefang')" standout @update:model-value="getRoomList">
</q-select>
<q-btn unelevated class="bg-white hover q-px-xs q-py-sm q-ml-xs text-grey-6" icon="person">
<div class="text-dark q-ml-xs">
{{auditNum}}{{$t('v101.scattered.chengren')}}
<span class="q-px-sm">.</span>
<template v-if="childNum>0">{{childNum}}</template>
{{$t('v101.scattered.ertong')}}
</div>
<q-popup-proxy class="no-shadow absolute" style="z-index: 0;box-shadow: 0 0 50px #ddd !important" :offset="[0, 20]" :model-value="isShowPop">
<q-card class="row wrap q-pa-md rounded-borders" style="max-width:697px;">
<div class="q-mr-md" v-for="(item,index) in search.searchroomGroup" :key="index" style="min-width: 150px;">
<div class="q-mb-md text-subtitle2">{{ $t('v101.scattered.kefang') }}{{index+1}}</div>
<div class="q-my-md">
<q-select v-model="item.numberOfAdults" dense :options="adultList" emit-value map-options :label="$t('v101.scattered.chengren')" standout @update:model-value="setPeopleNum"/>
</div>
<div class="q-my-md">
<q-select v-model="item.numberOfChildren" dense :options="childrenList" emit-value map-options :label="$t('v101.scattered.ertong')" standout @update:model-value="setPeopleNum"/>
</div>
</div>
</q-card>
</q-popup-proxy>
</q-btn>
</div>
<div class="col"></div>
<q-btn unelevated class="bg-grey-3 hover q-mr-md" :title="$t('morequery')">
<q-badge rounded class="din bg-red-2 text-red-14 text-weight-bold" floating :label="searchCnt" v-if="searchCnt > 0" />
<svg-icon color="dark" icon="Text/Filter.svg" :tips="$t('morequery')" :size="20"></svg-icon>
<q-tooltip>{{ $t('morequery') }}</q-tooltip>
<q-popup-proxy class="no-shadow" style="box-shadow: 0 0 50px #ddd !important" :offset="[0, 20]" :model-value="canHide">
<q-card class="q-pa-md rounded-borders" style="width: 300px">
<div class="q-mb-md text-subtitle2">{{ $t('morequery') }}</div>
<div class="q-my-md" v-if="$q.platform.is.mobile">
<q-select unelevated v-model="placeKeyWords" dense :options="Areas" emit-value option-label="name" option-value="name" map-options :label="$t('hotel.area')" standout />
</div>
<div class="q-my-md" v-if="$q.platform.is.mobile">
<q-field stack-label :label="$t('daterange')" standout style="min-width: 190px" dense>
<div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormat }}</div>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxy">
<q-date v-model="dateRange" :options="optionsFn" range mask="YYYY/MM/DD" landscape @range-end="dateRangeHandler"></q-date>
</q-popup-proxy>
</q-field>
</div>
<div class="q-my-md row justify-between" v-if="$q.platform.is.mobile">
<q-select style="min-width: 90px;z-index: 99999;" unelevated v-model="room" dense :options="theRooms" emit-value option-label="name" option-value="id" map-options :label="$t('v101.scattered.kefang')" standout @update:model-value="getRoomList">
</q-select>
<q-btn unelevated class="bg-white hover q-px-xs q-py-sm q-ml-xs text-grey-6" icon="person">
<div class="text-dark q-ml-xs">
{{auditNum}}{{$t('v101.scattered.chengren')}}
<span class="q-px-sm">.</span>
<template v-if="childNum>0">{{childNum}}</template>
{{$t('v101.scattered.ertong')}}
</div>
<q-popup-proxy class="no-shadow absolute" style="z-index: 0;box-shadow: 0 0 50px #ddd !important" :offset="[0, 20]" :model-value="isShowPop">
<q-card class="row wrap q-pa-md rounded-borders" style="max-width:697px;">
<div class="q-mr-md" v-for="(item,index) in search.searchroomGroup" :key="index" style="min-width: 150px;">
<div class="q-mb-md text-subtitle2">{{ $t('v101.scattered.kefang') }}{{index+1}}</div>
<div class="q-my-md">
<q-select v-model="item.numberOfAdults" dense :options="adultList" emit-value map-options :label="$t('v101.scattered.chengren')" standout @update:model-value="setPeopleNum"/>
</div>
<div class="q-my-md">
<q-select v-model="item.numberOfChildren" dense :options="childrenList" emit-value map-options :label="$t('v101.scattered.ertong')" standout @update:model-value="setPeopleNum"/>
</div>
</div>
</q-card>
</q-popup-proxy>
</q-btn>
</div>
<div class="q-my-md">
<q-select v-model="search.searchHotelCategory" dense :options="HotelLiveRates" emit-value option-label="name" option-value="id" clearable multiple map-options :label="$t('v101.scattered.zhusutype')" standout />
</div>
<div class="q-my-md row items-center">
<q-input v-model="search.searchMinRate" class="col q-mr-md" mask="#.##" reverse-fill-mask dense type="text" standout :label="$t('hotel.minPrice')" />
<q-input v-model="search.searchMaxRate" class="col" dense mask="#.##" reverse-fill-mask ftype="text" standout :label="$t('hotel.maxPrice')" />
</div>
<div class="q-my-md">
<q-select v-model="search.searchRoomType" dense :options="HotelRoomTypes" emit-value option-label="name" option-value="id" clearable multiple map-options :label="$t('v101.scattered.fangxingtype')" standout />
</div>
<div class="q-my-md">
<q-select v-model="search.searchMealType" dense :options="HotelMealTypes" emit-value option-label="name" option-value="id" clearable multiple map-options :label="$t('v101.scattered.canxingtype')" standout />
</div>
<div class="q-my-md">
<q-select v-model="search.searchHotelFeatures" dense :options="HotelConceptTypes" emit-value option-label="name" option-value="id" clearable multiple map-options :label="$t('v101.scattered.liniantype')" standout />
</div>
<div class="q-my-md row items-center">
<q-input v-model="search.reviewRatingLowerLimits" class="col q-mr-md" mask="#.##" reverse-fill-mask dense type="text" standout :label="$t('v101.scattered.minpingfen')" />
<q-input v-model="search.reviewRatingUpperLimits" class="col" dense mask="#.##" reverse-fill-mask ftype="text" standout :label="$t('v101.scattered.maxpingfen')" />
</div>
<div class="q-my-md">
<q-input v-model="keyWords" class="col" reverse-fill-mask dense type="text" standout :label="$t('v101.scattered.jiudianName')" />
</div>
</q-card>
</q-popup-proxy>
</q-btn>
<q-btn color="primary" unelevated :label="$t('query')" />
</div>
</template>
<script lang="ts">
import { useI18n } from 'vue-i18n'
import svgIcon from '../../global/svg-icon.vue'
import { computed, inject, provide, reactive, ref, toRefs, defineComponent, onMounted, watch } from 'vue'
import HotelService from '../../../api/hotel'
import message from '../../../utils/message'
import { ApiResult } from '../../../@types/enumHelper'
import { CascaderOption,NCascader,NSelect } from 'naive-ui'
import { date } from 'quasar'
import { HotelRate,HotelArea, useHotel } from '../../../utils/hotelRate'
import { useQuasar } from 'quasar'
import useScrollModule from '../../../module/scrollbar/scrollModule'
// import { dateDiffer } from '../../../utils/tools'
import { DirtionmaryHelper } from '../../../config/dictionary'
export default defineComponent({
components: { svgIcon, NCascader, NSelect },
setup() {
const $q = useQuasar()
const qDateProxy = ref(null) as any
const qNameProxy = ref(null) as any
const { locale, t } = useI18n()
const data = reactive({
scrollStyle: {} as any,
Areas: [] as Array<HotelArea>,//区域
cascader: {
addressValue: null
} as any,
dateRange: {} as any,//当前日期
dateRangeFormat: '',//可选日期
loading: false,
hotelsRates: [] as Array<HotelRate>,
canHide: false,//更多筛选
theRooms: [] as Array<Number>,//客房下拉
room: 1,//客房数
auditNum: 1,
childNum: null as any,
adultList: [] as Array<Number>,//成人下拉
childrenList: [] as Array<Number>,//儿童下拉
isShowPop: false,//房间
HotelLiveRates: [] as Array<HotelRate>,//住宿类型
HotelRoomTypes: [] as Array<HotelRate>,//房类型
HotelMealTypes: [] as Array<HotelRate>,//餐型
HotelConceptTypes: [] as Array<HotelRate>,//理念
keyWords: '' as stringify,
placeKeyWords: t('v101.scattered.HotelArea1'),
})
for(let i=1;i<11;i++){
data.theRooms.push(i)
}
for(let i=1;i<10;i++){
data.adultList.push(i)
}
for(let i=0;i<6;i++){
data.childrenList.push(i)
}
data.scrollStyle = useScrollModule().scrollStyle
const search = inject(DirtionmaryHelper.HOTEL_QUERY_PARAM) as any
if(search.searchroomGroup&&search.searchroomGroup.length==0){
search.searchroomGroup.push({
roomNum: 1,
numberOfAdults: 1,
numberOfChildren: 0
})
}
data.dateRange.to = date.formatDate(date.addToDate(new Date(), { days: 9 }), 'YYYY/MM/DD')
data.dateRange.from = date.formatDate(date.addToDate(new Date(), { days: 8 }), 'YYYY/MM/DD')
data.dateRangeFormat = `${data.dateRange.from} - ${data.dateRange.to}`
search.arrivalDate = data.dateRange.from
search.departureDate = data.dateRange.to
data.hotelsRates = useHotel.getHotelRate()
data.HotelLiveRates = useHotel.getAccommodationType()
data.Areas = useHotel.getHotelArea()
data.HotelRoomTypes = useHotel.getHotelRoom()
data.HotelMealTypes = useHotel.getHotelMeal()
data.HotelConceptTypes = useHotel.getHotelConcept()
if (data.keyWords == '') {
search.freewordType = 1;
search.freeword = data.placeKeyWords;
} else {
search.freewordType = 2;
search.freeword = data.keyWords;
}
const methods = {
//设置房间里面成人数改变总成人数和儿童数
setPeopleNum() {
data.auditNum = 0;
data.childNum = 0;
search.searchroomGroup.forEach(x => {
data.auditNum += x.numberOfAdults;
data.childNum += x.numberOfChildren;
})
if (data.auditNum == null || data.auditNum == undefined) {
data.auditNum = 1
}
if (data.childNum == null || data.childNum == undefined) {
data.childNum = 1
}
},
//房间数改变
getRoomList(roomNum) {
let length = search.searchroomGroup.length
if(roomNum>length){
for (let i = 1; i <= roomNum-length; i++) {
let obj = {
roomNum: i,
numberOfAdults: 1,
numberOfChildren: 0
}
search.searchroomGroup.push(obj);
}
}else{
search.searchroomGroup = search.searchroomGroup.filter((x:any,i:Number)=>{
if(roomNum>i)return x
})
}
data.auditNum = 0;
data.childNum = 0;
search.searchroomGroup.forEach(x => {
data.auditNum += x.numberOfAdults;
data.childNum += x.numberOfChildren;
})
data.isShowPop = true
search.auditNum = data.auditNum;
search.childNum = data.childNum;
},
dateRangeHandler(e: any) {
search.arrivalDate = `${e.from.year}/${e.from.month}/${e.from.day}`
search.departureDate = `${e.to.year}/${e.to.month}/${e.to.day} `
data.dateRangeFormat = `${search.arrivalDate} - ${search.departureDate} `
if (qDateProxy.value) qDateProxy.value.hide()
},
optionsFn(cd: any) {
return cd >= date.formatDate(date.addToDate(new Date(), { days: 8 }), 'YYYY/MM/DD')
},
setData(){
localStorage.removeItem(DirtionmaryHelper.SCATTERED_HOTEL_DATE)
let d = {
searchroomGroup: search.searchroomGroup,
room: data.room,
auditNum: data.auditNum,
childNum: data.childNum,
arrivalDate: search.arrivalDate,
departureDate: search.departureDate,
}
localStorage.setItem(DirtionmaryHelper.SCATTERED_HOTEL_DATE,JSON.stringify(d))
}
}
const searchCnt = computed(() => {
let setCnt = 0
if ($q.platform.is.mobile) {
if (data.placeKeyWords&&!data.keyWords) setCnt++
if (data.dateRange) setCnt++
if (search.searchroomGroup.length > 0) setCnt++
}
if (data.keyWords) setCnt++
if (search.reviewRatingUpperLimits) setCnt++
if (search.reviewRatingLowerLimits) setCnt++
if (search.searchHotelCategory&&search.searchHotelCategory.length>0) setCnt++
if (search.searchHotelFeatures&&search.searchHotelFeatures.length>0) setCnt++
if (search.searchRoomType&&search.searchRoomType.length>0) setCnt++
if (search.searchMealType&&search.searchMealType.length>0) setCnt++
if (search.searchMinRate) setCnt++
if (search.searchMaxRate) setCnt++
if (data.keyWords == '') {
search.freewordType = 1;
search.freeword = data.placeKeyWords;
} else {
search.freewordType = 2;
search.freeword = data.keyWords;
}
return setCnt
})
watch(search, (n, o) => {
methods.setData()
})
watch(data.room, (n, o) => {
methods.setData()
})
watch(data.auditNum, (n, o) => {
methods.setData()
})
watch(data.childNum, (n, o) => {
methods.setData()
})
onMounted(()=>{
methods.setData()
})
return {
...toRefs(data),
...methods,
qDateProxy,
qNameProxy,
searchCnt,
search,
}
}
})
</script>
<style>
</style>
<template>
<div class="full-height column hotel-list">
<q-table v-if="$q.platform.is.desktop" :loading="loading" :rows="hotels" :loading-label="$t('loading')" class="col sticky-header-column-table" flat :pagination="pages" :no-data-label="$t('noneData')" :columns="cols">
<template v-slot:top>
<div class="row full-width">
<div class="col"></div>
<q-btn class="hover q-mr-md" v-for="(item,index) in 2"
:class="{'bg-blue text-white':pages.sort==index+1,'bg-grey-3':pages.sort!=index+1}" @click="pages.sort=index+1,initHotels()">
{{index+1==1?$t('v101.scattered.anrenqi'):$t('v101.scattered.anjiage')}}
</q-btn>
</div>
</template>
<template v-slot:body-cell-hotelName="props">
<q-td class="cursor-pointer" :props="props" @click="goUrl('/scattered/HotelDetails',props.row)">
<span>{{props.row.hotelName}}</span>
</q-td>
</template>
<template v-slot:body-cell-reviewRating="props">
<q-td :props="props">
<div class="row no-wrap items-center">
<q-rating v-model="props.row.reviewRating" size="1.5em" color="orange" :max="5"
icon="star_border"
icon-selected="star"
icon-half="star_half" no-dimming readonly />
<span class="q-ml-xs" v-if="props.row.reviewRating>0">{{props.row.reviewRating}}</span>
</div>
</q-td>
</template>
<template v-slot:body-cell-lowrateBySetCurrency="props">
<q-td :props="props">
<span class="q-ml-xs text-orange text-weight-bold fz18" >
<template v-if="props.row.type==1">
{{getPrice(props.row.lowrateBySetCurrency)}}
</template>
<template v-else>
{{props.row.lowrateBySetCurrency}}
</template>
</span>
<span class="text-grey-8 q-pl-xs">{{$t('v101.scattered.qi')}}</span>
</q-td>
</template>
<!-- <template v-slot:body-cell-type="props">
<q-td :props="props">
<span class="q-ml-xs text-green-4 fz14" >
{{props.row.type==2?$t('v101.scattered.ziying'):$t('v101.scattered.jalan')}}
</span>
</q-td>
</template> -->
<template v-slot:body-cell-hotelFeaturesMask="props">
<q-td :props="props">
<span v-for="(subItem,index) in props.row.hotelFeaturesMask" :key="index">
<span class="rounded-borders bg-blue-1 text-blue q-mr-xs q-px-sm q-py-xs" v-if="subItem">
{{subItem==1?themeList[index].name:''}}
</span>
</span>
</q-td>
</template>
<template v-slot:bottom>
<q-pagination class="full-width justify-end" v-model="pages.displayFrom" color="primary" :max="pageCount" :input="true" @update:model-value="changePageHandler" />
</template>
</q-table>
<q-table
hide-header
v-else
:title="pageTitle"
:rows="hotels"
grid
:columns="mobileCols"
row-key="name"
card-class="no-shadow bg-primary text-white"
:pagination="pages"
:loading="loading"
>
<template v-slot:top>
<div class="row full-width">
<div class="col"></div>
<q-btn dense unelevated class="hover q-px-sm q-mr-md" v-for="(item,index) in 2"
:class="{'bg-blue text-white':pages.sort==index+1,'bg-grey-3':pages.sort!=index+1}" @click="pages.sort=index+1,initHotels()">
{{index+1==1?$t('v101.scattered.anrenqi'):$t('v101.scattered.anjiage')}}
</q-btn>
</div>
</template>
<template v-slot:item="props">
<div @click="goUrl('/scattered/HotelDetails',props.row)" class="rounded-borders bg-primary text-white col-12 q-mb-sm" style="padding: 12px;margin-left: 12px;margin-right: 12px; width: calc(100% - 24px);">
<div>
<div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{$t('v101.scattered.titleHeard1')}}</div>
<div style="font-size: 13px;">{{props.row.hotelName}}</div>
</div>
<div class="q-my-md">
<div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{$t('v101.scattered.titleHeard2')}}</div>
<div style="font-size: 13px;">
<q-rating v-model="props.row.reviewRating" size="1.5em" color="orange" :max="5"
icon="star_border"
icon-selected="star"
icon-half="star_half" no-dimming readonly />
<span class="q-ml-xs" v-if="props.row.reviewRating>0">{{props.row.reviewRating}}</span>
</div>
</div>
<div>
<div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{$t('v101.scattered.titleHeard3')}}</div>
<div class="">
<span>
<template v-if="props.row.type==1">
{{getPrice(props.row.lowrateBySetCurrency)}}
</template>
<template v-else>
{{props.row.lowrateBySetCurrency}}
</template>
</span>
<span class="q-pl-xs">{{$t('v101.scattered.qi')}}</span>
</div>
</div>
</div>
</template>
<template v-slot:bottom>
<q-pagination class="full-width justify-end" v-model="pages.displayFrom" color="primary" :max="pageCount" :input="true" @update:model-value="changePageHandler" />
</template>
</q-table>
</div>
</template>
<script lang="ts">
import { useRouter } from 'vue-router'
import HotelService from '../../../api/scattered'
import { DirtionmaryHelper } from '../../../config/dictionary'
import message from '../../../utils/message'
import { defineComponent, inject, reactive, toRefs, watch } from 'vue'
import { date,useQuasar } from 'quasar'
import { useI18n } from 'vue-i18n'
import { HotelArea, useHotel } from '../../../utils/hotelRate'
export default defineComponent({
components: { },
name: 'list-table',
setup() {
const $q=useQuasar()
const { t } = useI18n()
const search = inject(DirtionmaryHelper.HOTEL_QUERY_PARAM) as any
const $router = useRouter()
watch(search, (n, o) => {
if (data.loading) return
console.log('search change')
data.pages.displayFrom = 1
methods.initHotels()
})
const data = reactive({
groupBookingFlg: '' as any,
JapanIncrease: '' as any,
travelLngLat: [] as Array<any>,//地图坐标
themeList: [] as Array<HotelArea>,
hotels: [] as Array<any>,
loading: false,
cols: [
{ name: 'hotelName', label: t('v101.scattered.titleHeard1'), align: 'left' },
{ name: 'reviewRating', label: t('v101.scattered.titleHeard2'), field: (row: any) => (row.reviewRating), align: 'left' },
{ name: 'lowrateBySetCurrency', label: t('v101.scattered.titleHeard3'), align: 'left' },
// { name: 'type', label: t('v101.scattered.titleHeard4'), field: (row: any) => row.type==2?t('v101.scattered.ziying'):t('v101.scattered.jalan'), align: 'left' },
{ name: 'hotelFeaturesMask', label: t('v101.scattered.titleHeard5'), align: 'left' },
{ name: 'address', label: t('v101.scattered.titleHeard6'), field: (row: any) => (row.address), align: 'left' },
] as any,
pages: {
displayFrom: 1,//页数
numberOfResults: 12,
rowsPerPage: 15,
sort: 1
},
pageCount: 0,
pageTitle: '' as (string | undefined),
mobileCols:[
{name:'hotelName',label:t('hotel.col.first'),field:(row:any)=>row.hotelName},
{name:'TotalInventory',label:t('hotel.col.three'),field:(row:any)=>row.TotalInventory},
{name:'LowerPrice',label:t('hotel.col.four'),field:(row:any)=>${row.LowerPrice.toFixed(2)}${t('unit.jp')} {t('hotel.col.low')}`}
],
showPriceList:false,
queryHotelObj:{},
orderSubmitObj:{} as any,
orderSubmitItemObj:{} as any,
showOrderPreview: false,
showHotelDetailId: 0,
})
data.themeList = useHotel.getHotelTheme()
data.pageTitle = inject(DirtionmaryHelper.PAGE_TITLE_KEY)
const methods = {
initHotels() {
data.loading = true
data.hotels = []
let dataList = [] as any[];
data.travelLngLat = [];
let param = Object.assign(data.pages, search)
HotelService.GetJAPANHotelList(param)
.then(r => {
if (r.data.data.parmResult && r.data.data.parmResult.hotelSummary) {
dataList = r.data.data.parmResult.hotelSummary;
}
var ourHotelList = r.data.data.ourHotelList;
if (ourHotelList && ourHotelList.length > 0) {
ourHotelList.forEach(x => {
x.type = 2
})
}
if (dataList && dataList.length > 0) {
//获取酒店坐标
dataList.forEach(x => {
x.reviewRating = parseFloat(x.reviewRating);
x.lowrateBySetCurrency = parseFloat(x.lowrateBySetCurrency);
let obj = {
lat: x.latitudeW,
lng: x.longitudeW,
name: x.hotelName
}
data.travelLngLat.push(obj);
x.type = 1
})
}
data.hotels = ourHotelList.concat(dataList);
data.hotels.forEach(x=>{
if(isNaN(x.reviewRating)){
x.reviewRating=0
}
x.hotelFeaturesMask = x.hotelFeaturesMask.split(',')
})
//按价格升序
if(data.pages.sort==2){
data.hotels.sort(methods.getSortFun('asc', 'lowrateBySetCurrency'));
}
//按照星级降序
if(data.pages.sort==1){
data.hotels.sort(methods.getSortFun('desc', 'reviewRating'));
}
let jalanTotalCount = 0
if (r.data.data.parmResult && r.data.data.parmResult.numberOfResultMatched) {
jalanTotalCount = r.data.data.parmResult.numberOfResultMatched;
}
let ourHotelTotalCount = 0;
if (ourHotelList && ourHotelList.length > 0) {
ourHotelTotalCount = ourHotelList[0].totalHotelCount;
}
let totalCount = Number(jalanTotalCount) + Number(ourHotelTotalCount);
data.pageCount = Math.ceil(parseFloat(r.data.data.parmResult.numberOfResultMatched)/data.pages.numberOfResults)
data.groupBookingFlg = r.data.data.parmResult.groupBookingFlg;
data.JapanIncrease = r.data.data.parmResult.JapanIncrease;
data.loading = false
})
.catch(e => {
data.loading = false
})
},
//数组排序
getSortFun(order, sortBy) {
var ordAlpah = (order == 'asc') ? '>' : '<';
var sortFun = new Function('a', 'b', 'return a.' + sortBy + ordAlpah + 'b.' + sortBy + '?1:-1');
return sortFun;
},
//获取价格
getPrice(price) {
return Math.ceil(price / data.JapanIncrease);
},
changePageHandler(n: any) {
data.pages.displayFrom = n
console.log(n)
methods.initHotels()
},
showHotelDetailHandler(hotelId:number){
data.showHotelDetailId=hotelId
},
goUrl(url:string,row: {}){
url = `${url}/${row.hotelId}/${data.groupBookingFlg}/${row.type==1?methods.getPrice(row.lowrateBySetCurrency):row.lowrateBySetCurrency}`
window.open(url, '_blank')
// $router.push({ path:url })
},
}
methods.initHotels()
return { ...toRefs(data), ...methods }
}
})
</script>
<style>
</style>
......@@ -333,7 +333,8 @@ export default {
scattered: {
first: '個人客の予定です',
second: 'ホテル検索',
three: 'ホテル注文'
three: 'ホテル注文',
didaName:'道旅酒店',
},
car: {
first: '車両予約',
......
......@@ -333,7 +333,8 @@ export default {
scattered: {
first: '산행객 예약',
second: '호텔 검색',
three: '호텔 주문서'
three: '호텔 주문서',
didaName:'道旅酒店',
},
car: {
first: '차량 예약',
......
......@@ -333,7 +333,8 @@ export default {
scattered: {
first: '散客预定',
second: '酒店检索',
three: '酒店订单'
three: '酒店订单',
didaName:'道旅酒店',
},
car: {
first: '车辆预定',
......
......@@ -333,7 +333,8 @@ export default {
scattered: {
first: '散客預定',
second: '酒店檢索',
three: '酒店訂單'
three: '酒店訂單',
didaName:'道旅酒店',
},
car: {
first: '車輛預定',
......
<template>
<div class="fix-height-subpage column no-wrap q-pa-md">
<dida-header></dida-header>
<div class="col q-mt-md" :class="{'light-shadow q-pa-md bg-white rounded-border':$q.platform.is.desktop}">
<dida-list-table></dida-list-table>
</div>
</div>
</template>
<script lang="ts">
import useMetaModule from '../../module/meta/metaModule'
import {
useI18n
} from 'vue-i18n'
import svgIcon from '../../components/global/svg-icon.vue'
import {
defineComponent,
inject,
provide,
reactive,
ref,
toRefs
} from 'vue'
import {
DirtionmaryHelper
} from '../../config/dictionary'
import DidaHeader from '../../components/scattered/dida/DidaHeader.vue'
import DidaListTable from '../../components/scattered/dida/DidaListTable.vue'
import {
date
} from 'quasar'
export default defineComponent({
components: {
svgIcon,
DidaHeader,
DidaListTable
},
setup() {
const data = reactive({})
let {
setTitle
} = useMetaModule()
const {
locale,
t
} = useI18n()
const pageTitle = inject(DirtionmaryHelper.PAGE_TITLE_KEY) as any
pageTitle.value = t('hotel.pageTitle')
setTitle(pageTitle.value)
const search = reactive({
arrivalDate: '', //开始日期
departureDate: '', //结束日期
searchroomGroup: [] as Array < ang > , //客房数
searchHotelIdList: [],
freeword: '', //地区名字 酒店名字
freewordType: 1, //类型 1,地区,2-酒店名称
reviewRatingUpperLimits: '', //最大评分数
reviewRatingLowerLimits: '', //最小评分数
searchHotelCategory: [], //酒店分类
searchHotelFeatures: [], //酒店特征
searchRoomType: [], //类型的房间
searchMealType: [], //饮食条件搜索
searchMinRate: '', //最小金额
searchMaxRate: '', //最大金额
})
provide(DirtionmaryHelper.HOTEL_QUERY_PARAM, search)
const menu = inject(DirtionmaryHelper.MENU_KEYS) as any
menu.value = 23
const methods = {}
return {
...toRefs(data),
...methods
}
}
})
</script>
<style></style>
import { RouteRecordRaw } from 'vue-router'
import {
RouteRecordRaw
} from 'vue-router'
const routes: RouteRecordRaw[] = [
{
const routes: RouteRecordRaw[] = [{
path: '/index',
component: () => import('layouts/MainLayout.vue'),
children: [
{ path: '', component: () => import('pages/Index.vue') },
{ path: '/hotel', component: () => import('pages/hotel/HotelList.vue') },//酒店
{ path: '/hotel/order/:orderId?', component: () => import('pages/hotel/HotelOrder.vue') },
{ path: '/hotel/modify/:orderId', component: () => import('pages/hotel/ModifyHotelOrder.vue') },
{ path: '/hotel/offer/:orderId', component: () => import('pages/hotel/ListOfQuotation.vue') },
children: [{
path: '',
component: () => import('pages/Index.vue')
},
{
path: '/hotel',
component: () => import('pages/hotel/HotelList.vue')
}, //酒店
{
path: '/hotel/order/:orderId?',
component: () => import('pages/hotel/HotelOrder.vue')
},
{
path: '/hotel/modify/:orderId',
component: () => import('pages/hotel/ModifyHotelOrder.vue')
},
{
path: '/hotel/offer/:orderId',
component: () => import('pages/hotel/ListOfQuotation.vue')
},
{ path: '/personal', component: () => import('pages/personal/personal.vue') },//个人中心
{ path: '/passbook', component: () => import('pages/passbook/passbook.vue') },//幸福存折
{
path: '/personal',
component: () => import('pages/personal/personal.vue')
}, //个人中心
{
path: '/passbook',
component: () => import('pages/passbook/passbook.vue')
}, //幸福存折
{ path: '/scattered', component: () => import('pages/scattered/HotelList.vue') },//散客
{ path: '/scattered/HotelDetails/:hotelId/:groupBookingFlg/:lowrateBySetCurrency', component: () => import('pages/scattered/hotelDetails.vue') },
{ path: '/scattered/HotelSure/:hotelId/:roomOptionCd', component: () => import('pages/scattered/HotelSure.vue') },
{ path: '/scattered/HotelOrder', component: () => import('pages/scattered/HotelOrder.vue') },
{
path: '/scattered',
component: () => import('pages/scattered/HotelList.vue')
}, //散客
{
path: '/didahotel', //道旅酒店
component: () => import('pages/scattered/didaHotel.vue')
},
{
path: '/scattered/HotelDetails/:hotelId/:groupBookingFlg/:lowrateBySetCurrency',
component: () =>
import('pages/scattered/hotelDetails.vue')
},
{
path: '/scattered/HotelSure/:hotelId/:roomOptionCd',
component: () => import('pages/scattered/HotelSure.vue')
},
{
path: '/scattered/HotelOrder',
component: () => import('pages/scattered/HotelOrder.vue')
},
{ path: '/comingsoon', component: () => import('pages/ComingSoon.vue') },
{
path: '/comingsoon',
component: () => import('pages/ComingSoon.vue')
},
{ path: '/ticket/list', component: () => import('pages/ticket/TicketList.vue') },//门票
{ path: '/ticket/preview/:ticketId/:Time', component: () => import('pages/ticket/TicketOrderPreview.vue') },
{ path: '/ticket/order', component: () => import('pages/ticket/TicketOrder.vue') },
{ path: '/ticket/preview/:ticketId/:Time', component: () => import('pages/ticket/TicketOrderPreview.vue') },
{ path: '/ticket/order/:orderId?', component: () => import('pages/ticket/TicketOrder.vue') },
{
path: '/ticket/list',
component: () => import('pages/ticket/TicketList.vue')
}, //门票
{
path: '/ticket/preview/:ticketId/:Time',
component: () => import('pages/ticket/TicketOrderPreview.vue')
},
{
path: '/ticket/order',
component: () => import('pages/ticket/TicketOrder.vue')
},
{
path: '/ticket/preview/:ticketId/:Time',
component: () => import('pages/ticket/TicketOrderPreview.vue')
},
{
path: '/ticket/order/:orderId?',
component: () => import('pages/ticket/TicketOrder.vue')
},
{ path: '/vehicle/index', component: () => import('pages/CharteredBus/CharteredBusList.vue') },//车辆
{ path: '/vehicle/Preview/:ProductId/:Time/:orderId?', component: () => import('pages/CharteredBus/CharteredBusPreview.vue') },
{ path: '/vehicle/addEditVehicle/:Id?', component: () => import('pages/vehicle/addEditVehicle.vue') },
{ path: '/vehicle/order/:OrderId?/:pages?', component: () => import('pages/vehicle/vehicleOrder.vue') },
{
path: '/vehicle/index',
component: () => import('pages/CharteredBus/CharteredBusList.vue')
}, //车辆
{
path: '/vehicle/Preview/:ProductId/:Time/:orderId?',
component: () =>
import('pages/CharteredBus/CharteredBusPreview.vue')
},
{
path: '/vehicle/addEditVehicle/:Id?',
component: () => import('pages/vehicle/addEditVehicle.vue')
},
{
path: '/vehicle/order/:OrderId?/:pages?',
component: () => import('pages/vehicle/vehicleOrder.vue')
},
{ path: '/scheduledTrip/index', component: () => import('pages/scheduledTrip/scheduledTripList.vue') },//预定行程
{ path: '/scheduledTrip/details/:id/:tcid', component: () => import('pages/scheduledTrip/detailsNew.vue') },
{ path: '/scheduledTrip/preview/:tripId', component: () => import('pages/scheduledTrip/TripOrderPreview.vue') },
{ path: '/scheduledTrip/order/:orderId?', component: () => import('pages/scheduledTrip/TripOrder.vue') },
{ path: '/travel/order', component: () => import('pages/travel/order.vue') },
{ path: '/travel/payList', component: () => import('pages/travel/OrderPayList.vue') },
{ path: '/travel/orderList', component: () => import('pages/travel/orderList.vue') },
{
path: '/scheduledTrip/index',
component: () => import('pages/scheduledTrip/scheduledTripList.vue')
}, //预定行程
{
path: '/scheduledTrip/details/:id/:tcid',
component: () => import('pages/scheduledTrip/detailsNew.vue')
},
{
path: '/scheduledTrip/preview/:tripId',
component: () => import('pages/scheduledTrip/TripOrderPreview.vue')
},
{
path: '/scheduledTrip/order/:orderId?',
component: () => import('pages/scheduledTrip/TripOrder.vue')
},
{
path: '/travel/order',
component: () => import('pages/travel/order.vue')
},
{
path: '/travel/payList',
component: () => import('pages/travel/OrderPayList.vue')
},
{
path: '/travel/orderList',
component: () => import('pages/travel/orderList.vue')
},
]
},
{
......
......@@ -45,6 +45,12 @@ const useMenus = {
id: 14,
parentId: 13,
},
// {
// name: t('menu.scattered.didaName'),
// url: '/didahotel',
// id: 23,
// parentId: 13,
// },
{
name: t('menu.scattered.three'),
url: '/scattered/HotelOrder',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment