Commit ce5e3efc authored by 黄奎's avatar 黄奎

新增页面

parent f37f6c2b
import { HttpResponse } from '../@types'
import request from './request'
//道旅酒店API
class DidaService {
//获取道旅酒店类型
static async GetDidaPropertyCategory(param: any): Promise<HttpResponse> {
return request('dmc_post_Get_GetJAPAN_HotelList', param, false)
}
//获取道旅餐食类型
static async GetDidaMealType(param: any): Promise<HttpResponse> {
return request('dmc_post_Get_GetJAPAN_HotelList', param, false)
}
//道旅城市
static async GetDidaCity(param: any): Promise<HttpResponse> {
return request('dmc_post_Get_GetJAPAN_HotelList', param, false)
}
//道旅床型
static async GetDidaBedType(param: any): Promise<HttpResponse> {
return request('dmc_post_Get_GetJAPAN_HotelList', param, false)
}
// 道旅酒店列表
static async GetDidaHotelList(param: any): Promise<HttpResponse> {
param.reviewRatingUpperLimits = param.reviewRatingUpperLimits && param.reviewRatingUpperLimits != '' ? param.reviewRatingUpperLimits : 0
param.reviewRatingLowerLimits = param.reviewRatingLowerLimits && param.reviewRatingLowerLimits != '' ? param.reviewRatingLowerLimits : 0
param.searchMaxRate = param.searchMaxRate && param.searchMaxRate != '' ? param.searchMaxRate : 0
param.searchMinRate = param.searchMinRate && param.searchMinRate != '' ? param.searchMinRate : 0
return request('dmc_post_Get_GetJAPAN_HotelList', param, false)
}
}
export default DidaService
<template> <template>
<div class="rounded-borders bg-white row items-center q-pa-md"> <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-select
<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> v-if="$q.platform.is.desktop"
<div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormat }}</div> 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-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-date
v-model="dateRange"
:options="optionsFn"
range
mask="YYYY/MM/DD"
landscape
@range-end="dateRangeHandler"
></q-date>
</q-popup-proxy> </q-popup-proxy>
</q-field> </q-field>
<div class="row" v-if="$q.platform.is.desktop"> <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
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-select>
<q-btn unelevated class="bg-white hover q-px-xs q-py-sm q-ml-xs text-grey-6" icon="person"> <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"> <div class="text-dark q-ml-xs">
{{auditNum}}{{$t('v101.scattered.chengren')}} {{ auditNum }}{{ $t("v101.scattered.chengren") }}
<span class="q-px-sm">.</span> <span class="q-px-sm">.</span>
<template v-if="childNum>0">{{childNum}}</template> <template v-if="childNum > 0">{{ childNum }}</template>
{{$t('v101.scattered.ertong')}} {{ $t("v101.scattered.ertong") }}
</div> </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-popup-proxy
<q-card class="row wrap q-pa-md rounded-borders" style="max-width:697px;"> class="no-shadow absolute"
<div class="q-mr-md" v-for="(item,index) in search.searchroomGroup" :key="index" style="min-width: 150px;"> style="z-index: 0; box-shadow: 0 0 50px #ddd !important"
<div class="q-mb-md text-subtitle2">{{ $t('v101.scattered.kefang') }}{{index+1}}</div> :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"> <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"/> <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>
<div class="q-my-md"> <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"/> <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>
</div> </div>
</q-card> </q-card>
...@@ -34,42 +112,131 @@ ...@@ -34,42 +112,131 @@
</div> </div>
<div class="col"></div> <div class="col"></div>
<q-btn unelevated class="bg-grey-3 hover q-mr-md" :title="$t('morequery')"> <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" /> <q-badge
<svg-icon color="dark" icon="Text/Filter.svg" :tips="$t('morequery')" :size="20"></svg-icon> rounded
<q-tooltip>{{ $t('morequery') }}</q-tooltip> class="din bg-red-2 text-red-14 text-weight-bold"
<q-popup-proxy class="no-shadow" style="box-shadow: 0 0 50px #ddd !important" :offset="[0, 20]" :model-value="canHide"> 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"> <q-card class="q-pa-md rounded-borders" style="width: 300px">
<div class="q-mb-md text-subtitle2">{{ $t('morequery') }}</div> <div class="q-mb-md text-subtitle2">{{ $t("morequery") }}</div>
<div class="q-my-md" v-if="$q.platform.is.mobile"> <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 /> <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>
<div class="q-my-md" v-if="$q.platform.is.mobile"> <div class="q-my-md" v-if="$q.platform.is.mobile">
<q-field stack-label :label="$t('daterange')" standout style="min-width: 190px" dense> <q-field
<div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormat }}</div> 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-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-date
v-model="dateRange"
:options="optionsFn"
range
mask="YYYY/MM/DD"
landscape
@range-end="dateRangeHandler"
></q-date>
</q-popup-proxy> </q-popup-proxy>
</q-field> </q-field>
</div> </div>
<div class="q-my-md row justify-between" v-if="$q.platform.is.mobile"> <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
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-select>
<q-btn unelevated class="bg-white hover q-px-xs q-py-sm q-ml-xs text-grey-6" icon="person"> <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"> <div class="text-dark q-ml-xs">
{{auditNum}}{{$t('v101.scattered.chengren')}} {{ auditNum }}{{ $t("v101.scattered.chengren") }}
<span class="q-px-sm">.</span> <span class="q-px-sm">.</span>
<template v-if="childNum>0">{{childNum}}</template> <template v-if="childNum > 0">{{ childNum }}</template>
{{$t('v101.scattered.ertong')}} {{ $t("v101.scattered.ertong") }}
</div> </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-popup-proxy
<q-card class="row wrap q-pa-md rounded-borders" style="max-width:697px;"> class="no-shadow absolute"
<div class="q-mr-md" v-for="(item,index) in search.searchroomGroup" :key="index" style="min-width: 150px;"> style="z-index: 0; box-shadow: 0 0 50px #ddd !important"
<div class="q-mb-md text-subtitle2">{{ $t('v101.scattered.kefang') }}{{index+1}}</div> :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"> <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"/> <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>
<div class="q-my-md"> <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"/> <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>
</div> </div>
</q-card> </q-card>
...@@ -77,113 +244,216 @@ ...@@ -77,113 +244,216 @@
</q-btn> </q-btn>
</div> </div>
<div class="q-my-md"> <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 /> <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>
<div class="q-my-md row items-center"> <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
<q-input v-model="search.searchMaxRate" class="col" dense mask="#.##" reverse-fill-mask ftype="text" standout :label="$t('hotel.maxPrice')" /> 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>
<div class="q-my-md"> <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 /> <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>
<div class="q-my-md"> <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 /> <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>
<div class="q-my-md"> <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 /> <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>
<div class="q-my-md row items-center"> <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
<q-input v-model="search.reviewRatingUpperLimits" class="col" dense mask="#.##" reverse-fill-mask ftype="text" standout :label="$t('v101.scattered.maxpingfen')" /> 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>
<div class="q-my-md"> <div class="q-my-md">
<q-input v-model="keyWords" class="col" reverse-fill-mask dense type="text" standout :label="$t('v101.scattered.jiudianName')" /> <q-input
v-model="keyWords"
class="col"
reverse-fill-mask
dense
type="text"
standout
:label="$t('v101.scattered.jiudianName')"
/>
</div> </div>
</q-card> </q-card>
</q-popup-proxy> </q-popup-proxy>
</q-btn> </q-btn>
<q-btn color="primary" unelevated :label="$t('query')" /> <q-btn color="primary" unelevated :label="$t('query')" />
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { useI18n } from 'vue-i18n' import { useI18n } from "vue-i18n";
import svgIcon from '../../global/svg-icon.vue' import svgIcon from "../../global/svg-icon.vue";
import { computed, inject, provide, reactive, ref, toRefs, defineComponent, onMounted, watch } from 'vue' import DidaService from "../../../api/didahotel";
import HotelService from '../../../api/hotel' import {
import message from '../../../utils/message' computed,
import { ApiResult } from '../../../@types/enumHelper' inject,
import { CascaderOption,NCascader,NSelect } from 'naive-ui' reactive,
import { date } from 'quasar' ref,
import { HotelRate,HotelArea, useHotel } from '../../../utils/hotelRate' toRefs,
import { useQuasar } from 'quasar' defineComponent,
import useScrollModule from '../../../module/scrollbar/scrollModule' onMounted,
// import { dateDiffer } from '../../../utils/tools' watch,
import { DirtionmaryHelper } from '../../../config/dictionary' } from "vue";
import { 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 { DirtionmaryHelper } from "../../../config/dictionary";
export default defineComponent({ export default defineComponent({
components: { svgIcon, NCascader, NSelect }, components: { svgIcon, NCascader, NSelect },
setup() { setup() {
const $q = useQuasar() const $q = useQuasar();
const qDateProxy = ref(null) as any const qDateProxy = ref(null) as any;
const qNameProxy = ref(null) as any const qNameProxy = ref(null) as any;
const { locale, t } = useI18n() const { t } = useI18n();
const data = reactive({ const data = reactive({
scrollStyle: {} as any, scrollStyle: {} as any,
Areas: [] as Array<HotelArea>,//区域 Areas: [] as Array<HotelArea>, //区域
cascader: { cascader: {
addressValue: null addressValue: null,
} as any, } as any,
dateRange: {} as any,//当前日期 dateRange: {} as any, //当前日期
dateRangeFormat: '',//可选日期 dateRangeFormat: "", //可选日期
loading: false, loading: false,
hotelsRates: [] as Array<HotelRate>, hotelsRates: [] as Array<HotelRate>,
canHide: false,//更多筛选 canHide: false, //更多筛选
theRooms: [] as Array<Number>,//客房下拉 theRooms: [] as Array<Number>, //客房下拉
room: 1,//客房数 room: 1, //客房数
auditNum: 1, auditNum: 1,
childNum: null as any, childNum: null as any,
adultList: [] as Array<Number>,//成人下拉 adultList: [] as Array<Number>, //成人下拉
childrenList: [] as Array<Number>,//儿童下拉 childrenList: [] as Array<Number>, //儿童下拉
isShowPop: false,//房间 isShowPop: false, //房间
HotelLiveRates: [] as Array<HotelRate>,//住宿类型 HotelLiveRates: [] as Array<HotelRate>, //住宿类型
HotelRoomTypes: [] as Array<HotelRate>,//房类型 HotelRoomTypes: [] as Array<HotelRate>, //房类型
HotelMealTypes: [] as Array<HotelRate>,//餐型 HotelMealTypes: [] as Array<HotelRate>, //餐型
HotelConceptTypes: [] as Array<HotelRate>,//理念 HotelConceptTypes: [] as Array<HotelRate>, //理念
keyWords: '' as stringify, keyWords: "" as stringify,
placeKeyWords: t('v101.scattered.HotelArea1'), placeKeyWords: t("v101.scattered.HotelArea1"),
}) });
for(let i=1;i<11;i++){ for (let i = 1; i < 11; i++) {
data.theRooms.push(i) data.theRooms.push(i);
} }
for(let i=1;i<10;i++){ for (let i = 1; i < 10; i++) {
data.adultList.push(i) data.adultList.push(i);
} }
for(let i=0;i<6;i++){ for (let i = 0; i < 6; i++) {
data.childrenList.push(i) data.childrenList.push(i);
} }
data.scrollStyle = useScrollModule().scrollStyle data.scrollStyle = useScrollModule().scrollStyle;
const search = inject(DirtionmaryHelper.HOTEL_QUERY_PARAM) as any const search = inject(DirtionmaryHelper.HOTEL_QUERY_PARAM) as any;
if(search.searchroomGroup&&search.searchroomGroup.length==0){ if (search.searchroomGroup && search.searchroomGroup.length == 0) {
search.searchroomGroup.push({ search.searchroomGroup.push({
roomNum: 1, roomNum: 1,
numberOfAdults: 1, numberOfAdults: 1,
numberOfChildren: 0 numberOfChildren: 0,
}) });
} }
data.dateRange.to = date.formatDate(date.addToDate(new Date(), { days: 9 }), 'YYYY/MM/DD') data.dateRange.to = date.formatDate(
data.dateRange.from = date.formatDate(date.addToDate(new Date(), { days: 8 }), 'YYYY/MM/DD') date.addToDate(new Date(), { days: 9 }),
data.dateRangeFormat = `${data.dateRange.from} - ${data.dateRange.to}` "YYYY/MM/DD"
search.arrivalDate = data.dateRange.from );
search.departureDate = data.dateRange.to data.dateRange.from = date.formatDate(
data.hotelsRates = useHotel.getHotelRate() date.addToDate(new Date(), { days: 8 }),
data.HotelLiveRates = useHotel.getAccommodationType() "YYYY/MM/DD"
data.Areas = useHotel.getHotelArea() );
data.HotelRoomTypes = useHotel.getHotelRoom() data.dateRangeFormat = `${data.dateRange.from} - ${data.dateRange.to}`;
data.HotelMealTypes = useHotel.getHotelMeal() search.arrivalDate = data.dateRange.from;
data.HotelConceptTypes = useHotel.getHotelConcept() search.departureDate = data.dateRange.to;
if (data.keyWords == '') { data.hotelsRates = useHotel.getHotelRate();
data.HotelLiveRates = useHotel.getAccommodationType();
data.Areas = useHotel.getHotelArea();
data.HotelMealTypes = useHotel.getHotelMeal();
data.HotelConceptTypes = useHotel.getHotelConcept();
if (data.keyWords == "") {
search.freewordType = 1; search.freewordType = 1;
search.freeword = data.placeKeyWords; search.freeword = data.placeKeyWords;
} else { } else {
...@@ -193,57 +463,59 @@ export default defineComponent({ ...@@ -193,57 +463,59 @@ export default defineComponent({
const methods = { const methods = {
//设置房间里面成人数改变总成人数和儿童数 //设置房间里面成人数改变总成人数和儿童数
setPeopleNum() { setPeopleNum() {
data.auditNum = 0; data.auditNum = 0;
data.childNum = 0; data.childNum = 0;
search.searchroomGroup.forEach(x => { search.searchroomGroup.forEach((x) => {
data.auditNum += x.numberOfAdults; data.auditNum += x.numberOfAdults;
data.childNum += x.numberOfChildren; data.childNum += x.numberOfChildren;
}) });
if (data.auditNum == null || data.auditNum == undefined) { if (data.auditNum == null || data.auditNum == undefined) {
data.auditNum = 1 data.auditNum = 1;
} }
if (data.childNum == null || data.childNum == undefined) { if (data.childNum == null || data.childNum == undefined) {
data.childNum = 1 data.childNum = 1;
} }
}, },
//房间数改变 //房间数改变
getRoomList(roomNum) { getRoomList(roomNum) {
let length = search.searchroomGroup.length let length = search.searchroomGroup.length;
if(roomNum>length){ if (roomNum > length) {
for (let i = 1; i <= roomNum-length; i++) { for (let i = 1; i <= roomNum - length; i++) {
let obj = { let obj = {
roomNum: i, roomNum: i,
numberOfAdults: 1, numberOfAdults: 1,
numberOfChildren: 0 numberOfChildren: 0,
} };
search.searchroomGroup.push(obj); search.searchroomGroup.push(obj);
}
}else{
search.searchroomGroup = search.searchroomGroup.filter((x:any,i:Number)=>{
if(roomNum>i)return x
})
} }
data.auditNum = 0; } else {
data.childNum = 0; search.searchroomGroup = search.searchroomGroup.filter((x: any, i: Number) => {
search.searchroomGroup.forEach(x => { if (roomNum > i) return x;
data.auditNum += x.numberOfAdults; });
data.childNum += x.numberOfChildren; }
}) data.auditNum = 0;
data.isShowPop = true data.childNum = 0;
search.auditNum = data.auditNum; search.searchroomGroup.forEach((x) => {
search.childNum = data.childNum; data.auditNum += x.numberOfAdults;
data.childNum += x.numberOfChildren;
});
data.isShowPop = true;
search.auditNum = data.auditNum;
search.childNum = data.childNum;
}, },
dateRangeHandler(e: any) { dateRangeHandler(e: any) {
search.arrivalDate = `${e.from.year}/${e.from.month}/${e.from.day}` search.arrivalDate = `${e.from.year}/${e.from.month}/${e.from.day}`;
search.departureDate = `${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} ` data.dateRangeFormat = `${search.arrivalDate} - ${search.departureDate} `;
if (qDateProxy.value) qDateProxy.value.hide() if (qDateProxy.value) qDateProxy.value.hide();
}, },
optionsFn(cd: any) { optionsFn(cd: any) {
return cd >= date.formatDate(date.addToDate(new Date(), { days: 8 }), 'YYYY/MM/DD') return (
cd >= date.formatDate(date.addToDate(new Date(), { days: 8 }), "YYYY/MM/DD")
);
}, },
setData(){ setData() {
localStorage.removeItem(DirtionmaryHelper.SCATTERED_HOTEL_DATE) localStorage.removeItem(DirtionmaryHelper.SCATTERED_HOTEL_DATE);
let d = { let d = {
searchroomGroup: search.searchroomGroup, searchroomGroup: search.searchroomGroup,
room: data.room, room: data.room,
...@@ -251,51 +523,69 @@ export default defineComponent({ ...@@ -251,51 +523,69 @@ export default defineComponent({
childNum: data.childNum, childNum: data.childNum,
arrivalDate: search.arrivalDate, arrivalDate: search.arrivalDate,
departureDate: search.departureDate, departureDate: search.departureDate,
} };
localStorage.setItem(DirtionmaryHelper.SCATTERED_HOTEL_DATE,JSON.stringify(d)) localStorage.setItem(DirtionmaryHelper.SCATTERED_HOTEL_DATE, JSON.stringify(d));
} },
} //获取道旅房型
getdidaPropertyCategory() {
DidaService.GetDidaPropertyCategory({}).then((res) => {
console.log("GetDidaPropertyCategory", res);
if ((res.data.resultCode = 1)) {
data.HotelRoomTypes = res.data.data;
}
});
},
//获取道旅餐食类型
getdidaMealType() {
DidaService.GetDidaMealType({}).then((res) => {
console.log("getdidaMealType", res);
if (res.data.resultCode == 1) {
data.HotelMealTypes=res.data.data;
}
});
},
};
const searchCnt = computed(() => { const searchCnt = computed(() => {
let setCnt = 0 let setCnt = 0;
if ($q.platform.is.mobile) { if ($q.platform.is.mobile) {
if (data.placeKeyWords&&!data.keyWords) setCnt++ if (data.placeKeyWords && !data.keyWords) setCnt++;
if (data.dateRange) setCnt++ if (data.dateRange) setCnt++;
if (search.searchroomGroup.length > 0) setCnt++ if (search.searchroomGroup.length > 0) setCnt++;
} }
if (data.keyWords) setCnt++ if (data.keyWords) setCnt++;
if (search.reviewRatingUpperLimits) setCnt++ if (search.reviewRatingUpperLimits) setCnt++;
if (search.reviewRatingLowerLimits) setCnt++ if (search.reviewRatingLowerLimits) setCnt++;
if (search.searchHotelCategory&&search.searchHotelCategory.length>0) setCnt++ if (search.searchHotelCategory && search.searchHotelCategory.length > 0) setCnt++;
if (search.searchHotelFeatures&&search.searchHotelFeatures.length>0) setCnt++ if (search.searchHotelFeatures && search.searchHotelFeatures.length > 0) setCnt++;
if (search.searchRoomType&&search.searchRoomType.length>0) setCnt++ if (search.searchRoomType && search.searchRoomType.length > 0) setCnt++;
if (search.searchMealType&&search.searchMealType.length>0) setCnt++ if (search.searchMealType && search.searchMealType.length > 0) setCnt++;
if (search.searchMinRate) setCnt++ if (search.searchMinRate) setCnt++;
if (search.searchMaxRate) setCnt++ if (search.searchMaxRate) setCnt++;
if (data.keyWords == '') { if (data.keyWords == "") {
search.freewordType = 1; search.freewordType = 1;
search.freeword = data.placeKeyWords; search.freeword = data.placeKeyWords;
} else { } else {
search.freewordType = 2; search.freewordType = 2;
search.freeword = data.keyWords; search.freeword = data.keyWords;
} }
return setCnt return setCnt;
}) });
watch(search, (n, o) => { watch(search, (n, o) => {
methods.setData() methods.setData();
}) });
watch(data.room, (n, o) => { watch(data.room, (n, o) => {
methods.setData() methods.setData();
}) });
watch(data.auditNum, (n, o) => { watch(data.auditNum, (n, o) => {
methods.setData() methods.setData();
}) });
watch(data.childNum, (n, o) => { watch(data.childNum, (n, o) => {
methods.setData() methods.setData();
}) });
onMounted(()=>{ onMounted(() => {
methods.setData() methods.setData();
}) });
return { return {
...toRefs(data), ...toRefs(data),
...methods, ...methods,
...@@ -303,11 +593,9 @@ export default defineComponent({ ...@@ -303,11 +593,9 @@ export default defineComponent({
qNameProxy, qNameProxy,
searchCnt, searchCnt,
search, search,
} };
} },
}) });
</script> </script>
<style> <style></style>
</style>
<template> <template>
<div class="full-height column hotel-list"> <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"> <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> <template v-slot:top>
<div class="row full-width"> <div class="row full-width">
<div class="col"></div> <div class="col"></div>
<q-btn class="hover q-mr-md" v-for="(item,index) in 2" <q-btn
:class="{'bg-blue text-white':pages.sort==index+1,'bg-grey-3':pages.sort!=index+1}" @click="pages.sort=index+1,initHotels()"> class="hover q-mr-md"
{{index+1==1?$t('v101.scattered.anrenqi'):$t('v101.scattered.anjiage')}} 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> </q-btn>
</div> </div>
</template> </template>
<template v-slot:body-cell-hotelName="props"> <template v-slot:body-cell-hotelName="props">
<q-td class="cursor-pointer" :props="props" @click="goUrl('/scattered/HotelDetails',props.row)"> <q-td
<span>{{props.row.hotelName}}</span> class="cursor-pointer"
:props="props"
@click="goUrl('/scattered/HotelDetails', props.row)"
>
<span>{{ props.row.hotelName }}</span>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-reviewRating="props"> <template v-slot:body-cell-reviewRating="props">
<q-td :props="props"> <q-td :props="props">
<div class="row no-wrap items-center"> <div class="row no-wrap items-center">
<q-rating v-model="props.row.reviewRating" size="1.5em" color="orange" :max="5" <q-rating
v-model="props.row.reviewRating"
size="1.5em"
color="orange"
:max="5"
icon="star_border" icon="star_border"
icon-selected="star" icon-selected="star"
icon-half="star_half" no-dimming readonly /> icon-half="star_half"
<span class="q-ml-xs" v-if="props.row.reviewRating>0">{{props.row.reviewRating}}</span> no-dimming
readonly
/>
<span class="q-ml-xs" v-if="props.row.reviewRating > 0">{{
props.row.reviewRating
}}</span>
</div> </div>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-lowrateBySetCurrency="props"> <template v-slot:body-cell-lowrateBySetCurrency="props">
<q-td :props="props"> <q-td :props="props">
<span class="q-ml-xs text-orange text-weight-bold fz18" > <span class="q-ml-xs text-orange text-weight-bold fz18">
<template v-if="props.row.type==1"> <template v-if="props.row.type == 1">
{{getPrice(props.row.lowrateBySetCurrency)}} {{ getPrice(props.row.lowrateBySetCurrency) }}
</template> </template>
<template v-else> <template v-else>
{{props.row.lowrateBySetCurrency}} {{ props.row.lowrateBySetCurrency }}
</template> </template>
</span> </span>
<span class="text-grey-8 q-pl-xs">{{$t('v101.scattered.qi')}}</span> <span class="text-grey-8 q-pl-xs">{{ $t("v101.scattered.qi") }}</span>
</q-td> </q-td>
</template> </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"> <template v-slot:body-cell-hotelFeaturesMask="props">
<q-td :props="props"> <q-td :props="props">
<span v-for="(subItem,index) in props.row.hotelFeaturesMask" :key="index"> <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"> <span
{{subItem==1?themeList[index].name:''}} class="rounded-borders bg-blue-1 text-blue q-mr-xs q-px-sm q-py-xs"
</span> v-if="subItem"
>
{{ subItem == 1 ? themeList[index].name : "" }}
</span>
</span> </span>
</q-td> </q-td>
</template> </template>
<template v-slot:bottom> <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" /> <q-pagination
class="full-width justify-end"
v-model="pages.displayFrom"
color="primary"
:max="pageCount"
:input="true"
@update:model-value="changePageHandler"
/>
</template> </template>
</q-table> </q-table>
<q-table <q-table
...@@ -72,188 +108,272 @@ ...@@ -72,188 +108,272 @@
:pagination="pages" :pagination="pages"
:loading="loading" :loading="loading"
> >
<template v-slot:top> <template v-slot:top>
<div class="row full-width"> <div class="row full-width">
<div class="col"></div> <div class="col"></div>
<q-btn dense unelevated class="hover q-px-sm q-mr-md" v-for="(item,index) in 2" <q-btn
:class="{'bg-blue text-white':pages.sort==index+1,'bg-grey-3':pages.sort!=index+1}" @click="pages.sort=index+1,initHotels()"> dense
{{index+1==1?$t('v101.scattered.anrenqi'):$t('v101.scattered.anjiage')}} 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> </q-btn>
</div> </div>
</template> </template>
<template v-slot:item="props"> <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> @click="goUrl('/scattered/HotelDetails', props.row)"
<div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{$t('v101.scattered.titleHeard1')}}</div> class="rounded-borders bg-primary text-white col-12 q-mb-sm"
<div style="font-size: 13px;">{{props.row.hotelName}}</div> style="
</div> padding: 12px;
<div class="q-my-md"> margin-left: 12px;
<div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{$t('v101.scattered.titleHeard2')}}</div> margin-right: 12px;
<div style="font-size: 13px;"> width: calc(100% - 24px);
<q-rating v-model="props.row.reviewRating" size="1.5em" color="orange" :max="5" "
icon="star_border" >
icon-selected="star" <div>
icon-half="star_half" no-dimming readonly /> <div
<span class="q-ml-xs" v-if="props.row.reviewRating>0">{{props.row.reviewRating}}</span> 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>
</div> <div class="q-my-md">
<div> <div
<div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{$t('v101.scattered.titleHeard3')}}</div> style="opacity: 0.54; font-weight: 500; font-size: 12px; margin-bottom: 4px"
<div class=""> >
<span> {{ $t("v101.scattered.titleHeard2") }}
<template v-if="props.row.type==1"> </div>
{{getPrice(props.row.lowrateBySetCurrency)}} <div style="font-size: 13px">
</template> <q-rating
<template v-else> v-model="props.row.reviewRating"
{{props.row.lowrateBySetCurrency}} size="1.5em"
</template> color="orange"
</span> :max="5"
<span class="q-pl-xs">{{$t('v101.scattered.qi')}}</span> 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>
</div> </div>
</div> </template>
</template> <template v-slot:bottom>
<template v-slot:bottom> <q-pagination
<q-pagination class="full-width justify-end" v-model="pages.displayFrom" color="primary" :max="pageCount" :input="true" @update:model-value="changePageHandler" /> class="full-width justify-end"
v-model="pages.displayFrom"
color="primary"
:max="pageCount"
:input="true"
@update:model-value="changePageHandler"
/>
</template> </template>
</q-table> </q-table>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { useRouter } from 'vue-router' import { useRouter } from "vue-router";
import HotelService from '../../../api/scattered' import HotelService from "../../../api/scattered";
import { DirtionmaryHelper } from '../../../config/dictionary' import { DirtionmaryHelper } from "../../../config/dictionary";
import message from '../../../utils/message' import message from "../../../utils/message";
import { defineComponent, inject, reactive, toRefs, watch } from 'vue' import { defineComponent, inject, reactive, toRefs, watch } from "vue";
import { date,useQuasar } from 'quasar' import { date, useQuasar } from "quasar";
import { useI18n } from 'vue-i18n' import { useI18n } from "vue-i18n";
import { HotelArea, useHotel } from '../../../utils/hotelRate' import { HotelArea, useHotel } from "../../../utils/hotelRate";
export default defineComponent({ export default defineComponent({
components: { }, components: {},
name: 'list-table', name: "list-table",
setup() { setup() {
const $q=useQuasar() const $q = useQuasar();
const { t } = useI18n() const { t } = useI18n();
const search = inject(DirtionmaryHelper.HOTEL_QUERY_PARAM) as any const search = inject(DirtionmaryHelper.HOTEL_QUERY_PARAM) as any;
const $router = useRouter() const $router = useRouter();
watch(search, (n, o) => { watch(search, (n, o) => {
if (data.loading) return if (data.loading) return;
console.log('search change') console.log("search change");
data.pages.displayFrom = 1 data.pages.displayFrom = 1;
methods.initHotels() methods.initHotels();
}) });
const data = reactive({ const data = reactive({
groupBookingFlg: '' as any, groupBookingFlg: "" as any,
JapanIncrease: '' as any, JapanIncrease: "" as any,
travelLngLat: [] as Array<any>,//地图坐标 travelLngLat: [] as Array<any>, //地图坐标
themeList: [] as Array<HotelArea>, themeList: [] as Array<HotelArea>,
hotels: [] as Array<any>, hotels: [] as Array<any>,
loading: false, loading: false,
cols: [ cols: [
{ name: 'hotelName', label: t('v101.scattered.titleHeard1'), align: 'left' }, { 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: "reviewRating",
// { name: 'type', label: t('v101.scattered.titleHeard4'), field: (row: any) => row.type==2?t('v101.scattered.ziying'):t('v101.scattered.jalan'), align: 'left' }, label: t("v101.scattered.titleHeard2"),
{ name: 'hotelFeaturesMask', label: t('v101.scattered.titleHeard5'), align: 'left' }, field: (row: any) => row.reviewRating,
{ name: 'address', label: t('v101.scattered.titleHeard6'), field: (row: any) => (row.address), align: 'left' }, align: "left",
},
{
name: "lowrateBySetCurrency",
label: t("v101.scattered.titleHeard3"),
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, ] as any,
pages: { pages: {
displayFrom: 1,//页数 displayFrom: 1, //页数
numberOfResults: 12, numberOfResults: 12,
rowsPerPage: 15, rowsPerPage: 15,
sort: 1 sort: 1,
}, },
pageCount: 0, pageCount: 0,
pageTitle: '' as (string | undefined), pageTitle: "" as string | undefined,
mobileCols:[ 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: "hotelName",
{name:'LowerPrice',label:t('hotel.col.four'),field:(row:any)=>${row.LowerPrice.toFixed(2)}${t('unit.jp')} {t('hotel.col.low')}`} 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, showPriceList: false,
queryHotelObj:{}, queryHotelObj: {},
orderSubmitObj:{} as any, orderSubmitObj: {} as any,
orderSubmitItemObj:{} as any, orderSubmitItemObj: {} as any,
showOrderPreview: false, showOrderPreview: false,
showHotelDetailId: 0, showHotelDetailId: 0,
});
}) data.themeList = useHotel.getHotelTheme();
data.themeList = useHotel.getHotelTheme() data.pageTitle = inject(DirtionmaryHelper.PAGE_TITLE_KEY);
data.pageTitle = inject(DirtionmaryHelper.PAGE_TITLE_KEY)
const methods = { const methods = {
initHotels() { initHotels() {
data.loading = true data.loading = true;
data.hotels = [] data.hotels = [];
let dataList = [] as any[]; let dataList = [] as any[];
data.travelLngLat = []; data.travelLngLat = [];
let param = Object.assign(data.pages, search) let param = Object.assign(data.pages, search);
HotelService.GetJAPANHotelList(param) HotelService.GetJAPANHotelList(param)
.then(r => { .then((r) => {
if (r.data.data.parmResult && r.data.data.parmResult.hotelSummary) { if (r.data.data.parmResult && r.data.data.parmResult.hotelSummary) {
dataList = r.data.data.parmResult.hotelSummary; dataList = r.data.data.parmResult.hotelSummary;
} }
var ourHotelList = r.data.data.ourHotelList; var ourHotelList = r.data.data.ourHotelList;
if (ourHotelList && ourHotelList.length > 0) { if (ourHotelList && ourHotelList.length > 0) {
ourHotelList.forEach(x => { ourHotelList.forEach((x) => {
x.type = 2 x.type = 2;
}) });
} }
if (dataList && dataList.length > 0) { if (dataList && dataList.length > 0) {
//获取酒店坐标 //获取酒店坐标
dataList.forEach(x => { dataList.forEach((x) => {
x.reviewRating = parseFloat(x.reviewRating); x.reviewRating = parseFloat(x.reviewRating);
x.lowrateBySetCurrency = parseFloat(x.lowrateBySetCurrency); x.lowrateBySetCurrency = parseFloat(x.lowrateBySetCurrency);
let obj = { let obj = {
lat: x.latitudeW, lat: x.latitudeW,
lng: x.longitudeW, lng: x.longitudeW,
name: x.hotelName name: x.hotelName,
} };
data.travelLngLat.push(obj); data.travelLngLat.push(obj);
x.type = 1 x.type = 1;
}) });
} }
data.hotels = ourHotelList.concat(dataList); data.hotels = ourHotelList.concat(dataList);
data.hotels.forEach(x=>{ data.hotels.forEach((x) => {
if(isNaN(x.reviewRating)){ if (isNaN(x.reviewRating)) {
x.reviewRating=0 x.reviewRating = 0;
} }
x.hotelFeaturesMask = x.hotelFeaturesMask.split(',') x.hotelFeaturesMask = x.hotelFeaturesMask.split(",");
}) });
//按价格升序 //按价格升序
if(data.pages.sort==2){ if (data.pages.sort == 2) {
data.hotels.sort(methods.getSortFun('asc', 'lowrateBySetCurrency')); data.hotels.sort(methods.getSortFun("asc", "lowrateBySetCurrency"));
} }
//按照星级降序 //按照星级降序
if(data.pages.sort==1){ if (data.pages.sort == 1) {
data.hotels.sort(methods.getSortFun('desc', 'reviewRating')); data.hotels.sort(methods.getSortFun("desc", "reviewRating"));
} }
let jalanTotalCount = 0 let jalanTotalCount = 0;
if (r.data.data.parmResult && r.data.data.parmResult.numberOfResultMatched) { if (r.data.data.parmResult && r.data.data.parmResult.numberOfResultMatched) {
jalanTotalCount = r.data.data.parmResult.numberOfResultMatched; jalanTotalCount = r.data.data.parmResult.numberOfResultMatched;
} }
let ourHotelTotalCount = 0; let ourHotelTotalCount = 0;
if (ourHotelList && ourHotelList.length > 0) { if (ourHotelList && ourHotelList.length > 0) {
ourHotelTotalCount = ourHotelList[0].totalHotelCount; ourHotelTotalCount = ourHotelList[0].totalHotelCount;
} }
let totalCount = Number(jalanTotalCount) + Number(ourHotelTotalCount); let totalCount = Number(jalanTotalCount) + Number(ourHotelTotalCount);
data.pageCount = Math.ceil(parseFloat(r.data.data.parmResult.numberOfResultMatched)/data.pages.numberOfResults) data.pageCount = Math.ceil(
parseFloat(r.data.data.parmResult.numberOfResultMatched) /
data.pages.numberOfResults
);
data.groupBookingFlg = r.data.data.parmResult.groupBookingFlg; data.groupBookingFlg = r.data.data.parmResult.groupBookingFlg;
data.JapanIncrease = r.data.data.parmResult.JapanIncrease; data.JapanIncrease = r.data.data.parmResult.JapanIncrease;
data.loading = false data.loading = false;
})
.catch(e => {
data.loading = false
}) })
.catch((e) => {
data.loading = false;
});
}, },
//数组排序 //数组排序
getSortFun(order, sortBy) { getSortFun(order, sortBy) {
var ordAlpah = (order == 'asc') ? '>' : '<'; var ordAlpah = order == "asc" ? ">" : "<";
var sortFun = new Function('a', 'b', 'return a.' + sortBy + ordAlpah + 'b.' + sortBy + '?1:-1'); var sortFun = new Function(
"a",
"b",
"return a." + sortBy + ordAlpah + "b." + sortBy + "?1:-1"
);
return sortFun; return sortFun;
}, },
//获取价格 //获取价格
...@@ -261,25 +381,27 @@ export default defineComponent({ ...@@ -261,25 +381,27 @@ export default defineComponent({
return Math.ceil(price / data.JapanIncrease); return Math.ceil(price / data.JapanIncrease);
}, },
changePageHandler(n: any) { changePageHandler(n: any) {
data.pages.displayFrom = n data.pages.displayFrom = n;
console.log(n) console.log(n);
methods.initHotels() methods.initHotels();
}, },
showHotelDetailHandler(hotelId:number){ showHotelDetailHandler(hotelId: number) {
data.showHotelDetailId=hotelId data.showHotelDetailId = hotelId;
}, },
goUrl(url:string,row: {}){ goUrl(url: string, row: {}) {
url = `${url}/${row.hotelId}/${data.groupBookingFlg}/${row.type==1?methods.getPrice(row.lowrateBySetCurrency):row.lowrateBySetCurrency}` url = `${url}/${row.hotelId}/${data.groupBookingFlg}/${
window.open(url, '_blank') row.type == 1
? methods.getPrice(row.lowrateBySetCurrency)
: row.lowrateBySetCurrency
}`;
window.open(url, "_blank");
// $router.push({ path:url }) // $router.push({ path:url })
}, },
} };
methods.initHotels() methods.initHotels();
return { ...toRefs(data), ...methods } return { ...toRefs(data), ...methods };
} },
}) });
</script> </script>
<style> <style></style>
</style>
...@@ -334,7 +334,7 @@ export default { ...@@ -334,7 +334,7 @@ export default {
first: '個人客の予定です', first: '個人客の予定です',
second: 'ホテル検索', second: 'ホテル検索',
three: 'ホテル注文', three: 'ホテル注文',
didaName:'道旅酒店', didaName:'道旅ホテル',
}, },
car: { car: {
first: '車両予約', first: '車両予約',
......
...@@ -334,7 +334,7 @@ export default { ...@@ -334,7 +334,7 @@ export default {
first: '산행객 예약', first: '산행객 예약',
second: '호텔 검색', second: '호텔 검색',
three: '호텔 주문서', three: '호텔 주문서',
didaName:'道旅酒店', didaName:'다오뤼호텔',
}, },
car: { car: {
first: '차량 예약', first: '차량 예약',
......
...@@ -531,6 +531,7 @@ export default { ...@@ -531,6 +531,7 @@ export default {
} }
}, },
scattered: { scattered: {
kefang: '客房', kefang: '客房',
chengren: '成人', chengren: '成人',
ertong: '兒童', ertong: '兒童',
......
...@@ -45,7 +45,8 @@ ...@@ -45,7 +45,8 @@
t t
} = useI18n() } = useI18n()
const pageTitle = inject(DirtionmaryHelper.PAGE_TITLE_KEY) as any const pageTitle = inject(DirtionmaryHelper.PAGE_TITLE_KEY) as any
pageTitle.value = t('hotel.pageTitle') pageTitle.value = t('menu.scattered.didaName')
setTitle(pageTitle.value) setTitle(pageTitle.value)
const search = reactive({ const search = reactive({
arrivalDate: '', //开始日期 arrivalDate: '', //开始日期
......
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