Commit 3bd3782f authored by youjie's avatar youjie

Merge branch 'master' of http://gitlab.oytour.com/luochao/bigwood

parents eef91431 a788314c
......@@ -68,5 +68,13 @@ class HotelService {
static async sureBusPricelation(Id: number): Promise<HttpResponse> {
return request('tripbus_SureBusTripOffer', { Id })
}
/**
* 获取报价详情
* @param param
* @returns
*/
static async DetailsQuotation(Id: number): Promise<HttpResponse> {
return request('tripbus_GetTripBusInfo', { Id })
}
}
export default HotelService
\ No newline at end of file
<template>
<div class="rounded-borders bg-white row items-center q-pa-md">
<n-cascader v-if="$q.platform.is.desktop" class="col-2 no-border" @update:value="changearea" v-model:value="cascader.addressValue" size="large" :placeholder="$t('hotel.area')" clearable check-strategy="all" :options="provinces" value-field="ID" label-field="Name" remote :on-load="loadChilds" cascade />
<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>
<n-cascader v-if="$q.platform.is.desktop" class="col-2 no-border" @update:value="changearea"
v-model:value="cascader.addressValue" size="large" :placeholder="$t('hotel.area')" clearable check-strategy="all"
:options="provinces" value-field="ID" label-field="Name" remote :on-load="loadChilds" cascade />
<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-date v-model="dateRange" :options="optionsFn" range mask="YYYY/MM/DD" landscape
@range-end="dateRangeHandler"></q-date>
</q-popup-proxy>
</q-field>
<n-select v-if="$q.platform.is.desktop" filterable @update:value="changeHotel" class="q-ml-lg col-2" style="min-width: 190px" clearable v-model:value="search.HotelChooseArray" :placeholder="$t('hotel.searchName')" multiple :options="cacheHotels" max-tag-count="responsive" size="large" value-field="ID" label-field="Name" />
<n-select v-if="$q.platform.is.desktop" filterable @update:value="changeHotel" class="q-ml-lg col-2"
style="min-width: 190px" clearable v-model:value="search.HotelChooseArray" :placeholder="$t('hotel.searchName')"
multiple :options="cacheHotels" max-tag-count="responsive" size="large" value-field="ID" label-field="Name" />
<div class="col"></div>
<q-btn unelevated class="bg-grey-3 hover q-mr-md" icon="shopping_cart" :title="$t('hotel.car.shoppingTitle')" @click="rightCarOpen=true">
<q-badge color="red" rounded floating>{{HotelLength}}</q-badge>
<q-btn unelevated class="bg-grey-3 hover q-mr-md" icon="shopping_cart" :title="$t('hotel.car.shoppingTitle')"
@click="rightCarOpen = true">
<q-badge color="red" rounded floating>{{ HotelLength }}</q-badge>
</q-btn>
<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 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-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 v-if="$q.platform.is.mobile">
<n-cascader @update:value="changearea" v-model:value="cascader.addressValue" size="large" :placeholder="$t('hotel.area')" clearable check-strategy="all" :options="provinces" value-field="ID" label-field="Name" remote :on-load="loadChilds" cascade />
<n-cascader @update:value="changearea" v-model:value="cascader.addressValue" size="large"
:placeholder="$t('hotel.area')" clearable check-strategy="all" :options="provinces" value-field="ID"
label-field="Name" remote :on-load="loadChilds" cascade />
</div>
<div class="q-my-md" v-if="$q.platform.is.mobile">
<q-field stack-label :label="$t('daterange')" outlined 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-date v-model="dateRange" :options="optionsFn" range mask="YYYY/MM/DD" landscape
@range-end="dateRangeHandler"></q-date>
</q-popup-proxy>
</q-field>
</div>
<div v-if="$q.platform.is.mobile">
<n-select filterable style="min-width: 190px" clearable v-model:value="search.HotelChooseArray" :placeholder="$t('hotel.searchName')" multiple :options="cacheHotels" max-tag-count="responsive" size="large" value-field="ID" label-field="Name" />
<n-select filterable style="min-width: 190px" clearable v-model:value="search.HotelChooseArray"
:placeholder="$t('hotel.searchName')" multiple :options="cacheHotels" max-tag-count="responsive"
size="large" value-field="ID" label-field="Name" />
</div>
<div class="q-my-md">
<q-select v-model="search.Star" dense :options="hotelsRates" emit-value option-label="name" option-value="id" map-options clearable :label="$t('hotel.hotelRate')" standout />
<q-select v-model="search.Star" dense :options="hotelsRates" emit-value option-label="name"
option-value="id" map-options clearable :label="$t('hotel.hotelRate')" standout />
</div>
<div class="row items-center">
<q-input v-model="search.MinPrice" class="col q-mr-md" mask="#.##" reverse-fill-mask dense type="text" standout :label="$t('hotel.minPrice')" />
<q-input v-model="search.MaxPrice" class="col" dense mask="#.##" reverse-fill-mask ftype="text" standout :label="$t('hotel.maxPrice')" />
<q-input v-model="search.MinPrice" class="col q-mr-md" mask="#.##" reverse-fill-mask dense type="text"
standout :label="$t('hotel.minPrice')" />
<q-input v-model="search.MaxPrice" class="col" dense mask="#.##" reverse-fill-mask ftype="text" standout
:label="$t('hotel.maxPrice')" />
</div>
</q-card>
</q-popup-proxy>
......@@ -58,7 +75,7 @@ import { computed, inject, provide, reactive, ref, toRefs, defineComponent, onMo
import HotelService from '../../../api/hotel'
import message from '../../../utils/message'
import { ApiResult } from '../../../@types/enumHelper'
import { CascaderOption,NCascader,NSelect } from 'naive-ui'
import { CascaderOption, NCascader, NSelect } from 'naive-ui'
import { date } from 'quasar'
import { HotelRate, useHotel } from '../../../utils/hotelRate'
import { useQuasar } from 'quasar'
......@@ -174,7 +191,7 @@ export default defineComponent({
changearea(e: number, option: any, pathValues: Array<any>) {
search.Province = 0
search.City = 0
if(pathValues){
if (pathValues) {
if (pathValues.length > 0) {
search.Province = pathValues[0].ID
}
......@@ -188,10 +205,10 @@ export default defineComponent({
console.log(search.HotelChooseArray)
}, 1000)
},
close(){
close() {
data.rightCarOpen = false
},
setSuccess(){
setSuccess() {
data.rightCarOpen = false
},
}
......@@ -210,13 +227,13 @@ export default defineComponent({
methods.initAddress()
methods.initHotels()
watch(cars.value, (n, o) => {
localStorage.setItem(DirtionmaryHelper.HOTEL_HOTELCARS_CACHE,JSON.stringify(cars.value))
localStorage.setItem(DirtionmaryHelper.HOTEL_HOTELCARS_CACHE, JSON.stringify(cars.value))
})
watch(HotelLength, (n, o) => {
HotelLength.value = n
})
onMounted(()=>{
onMounted(() => {
HotelLength.value = cars.value.length
})
return {
......
......@@ -7,7 +7,7 @@
<q-icon class="text-grey-13 cursor-pointer text-right q-ml-sm" name="close" size="md" v-close-popup></q-icon>
</div>
<div class="text-weight-bold fz20 ellipsis desktop-only">{{ h.Name }}</div>
<div :class="{'q-ml-md':$q.platform.is.desktop}">
<div :class="{ 'q-ml-md': $q.platform.is.desktop }">
<q-rating v-model="h.Star" size="1.5em" color="orange" :max="h.Star" readonly />
</div>
</div>
......@@ -39,22 +39,33 @@
</div>
</div>
<div class="q-py-lg no-wrap col" :class="{ row: $q.platform.is.desktop, column: $q.platform.is.mobile }">
<div class="row rounded-borders relative-position" :class="{ 'col-6': $q.platform.is.desktop, 'height-320': $q.platform.is.mobile }" style="overflow: hidden" v-if="h.List">
<div v-if="h.ChainBrand" class="f12 absolute-left bg-white" style="padding: 5px; bottom: unset; z-index: 1; border-bottom-right-radius: 4px">
<div class="row rounded-borders relative-position"
:class="{ 'col-6': $q.platform.is.desktop, 'height-320': $q.platform.is.mobile }" style="overflow: hidden"
v-if="h.List">
<div v-if="h.ChainBrand" class="f12 absolute-left bg-white"
style="padding: 5px; bottom: unset; z-index: 1; border-bottom-right-radius: 4px">
<div class="row items-center rounded-borders" style="overflow: hidden">
<div class="bg-dark text-white" style="padding: 0 4px; font-size: 12px">品牌</div>
<div class="text-dark" style="padding: 0 4px; font-size: 12px; background: #f0bd86">{{ h.ChainBrand }}</div>
<div class="text-dark" style="padding: 0 4px; font-size: 12px; background: #f0bd86">{{ h.ChainBrand }}
</div>
</div>
</div>
<div class="col-7" :class="{ 'col-7': h.List.length >= 3, 'col-6': h.List.length == 2, 'col-12': h.List.length == 1 }">
<q-img @click="showImageHandler(`http://imgfile.oytour.com${h.List[0].Path}`)" :src="`http://imgfile.oytour.com${h.List[0].Path}`" spinner-color="drk" spinner-size="20px" height="100%" mode="cover" />
<div class="col-7"
:class="{ 'col-7': h.List.length >= 3, 'col-6': h.List.length == 2, 'col-12': h.List.length == 1 }">
<q-img @click="showImageHandler(`http://imgfile.oytour.com${h.List[0].Path}`)"
:src="`http://imgfile.oytour.com${h.List[0].Path}`" spinner-color="drk" spinner-size="20px" height="100%"
mode="cover" />
</div>
<div class="col q-pl-sm" v-if="h.List.length > 1">
<div :style="{ height: h.List.length > 2 ? '50%' : '100%' }">
<q-img @click="showImageHandler(`http://imgfile.oytour.com${h.List[1].Path}`)" :src="`http://imgfile.oytour.com${h.List[1].Path}`" spinner-color="drk" spinner-size="20px" height="100%" mode="cover" />
<q-img @click="showImageHandler(`http://imgfile.oytour.com${h.List[1].Path}`)"
:src="`http://imgfile.oytour.com${h.List[1].Path}`" spinner-color="drk" spinner-size="20px"
height="100%" mode="cover" />
</div>
<div class="row items-end q-pt-sm" style="height: 50%" v-if="h.List.length > 2">
<q-img @click="showImageHandler(`http://imgfile.oytour.com${h.List[2].Path}`)" :src="`http://imgfile.oytour.com${h.List[2].Path}`" spinner-color="drk" spinner-size="20px" height="100%" mode="cover">
<q-img @click="showImageHandler(`http://imgfile.oytour.com${h.List[2].Path}`)"
:src="`http://imgfile.oytour.com${h.List[2].Path}`" spinner-color="drk" spinner-size="20px"
height="100%" mode="cover">
<div class="absolute-full text-subtitle2 flex flex-center" v-if="h.List.length > 3">
<span class="fz20 text-weight-bold">+</span>
<span class="text-h5 text-weight-bold">{{ h.List.length - 3 }}</span>
......@@ -63,8 +74,11 @@
</div>
</div>
</div>
<div class="rounded-borders" :class="{ 'q-ml-sm col': $q.platform.is.desktop, 'q-mt-sm height-320': $q.platform.is.mobile }" style="overflow: hidden" id="baiduMap">
<GoogleMap api-key="AIzaSyCvRZN9lGl3y3EsM0A0sWPf1pZ2olGsyNg" style="width: 100%; height: 100%" :center="center" :zoom="15" v-if="center">
<div class="rounded-borders"
:class="{ 'q-ml-sm col': $q.platform.is.desktop, 'q-mt-sm height-320': $q.platform.is.mobile }"
style="overflow: hidden" id="baiduMap">
<GoogleMap api-key="AIzaSyCvRZN9lGl3y3EsM0A0sWPf1pZ2olGsyNg" style="width: 100%; height: 100%"
:center="center" :zoom="15" v-if="center">
<Marker :options="{ position: center }" />
</GoogleMap>
</div>
......@@ -90,7 +104,10 @@
<div class="col-3 f12 text-grey-500">{{ $t('hd.item.c') }}</div>
<div class="col text-subtitle2 text-weight-bolder">
{{ h.IsHavearking == 0 ? $t('none') : $t('have') }}
<span class="q-ml-md hotel-info-item" v-if="h.IsHavearking == 1">{{ h.ParkFee == 0 ? $t('free') : moneyFormat(h.ParkFee) + $t('unit.jp') }}</span>
<span class="q-ml-md hotel-info-item" v-if="h.IsHavearking == 1">{{
h.ParkFee == 0 ? $t('free') :
moneyFormat(h.ParkFee) + $t('unit.jp')
}}</span>
</div>
</div>
</div>
......@@ -187,10 +204,10 @@ export default defineComponent({
const methods = {
initMap(lat: any, lng: any) {
let country=localStorage.getItem(DirtionmaryHelper.USER_IN_COUNTRY) ?? 'GW'
if(country!='CN'){
let country = localStorage.getItem(DirtionmaryHelper.USER_IN_COUNTRY) ?? 'GW'
if (country != 'CN') {
data.center = { lat: parseFloat(lng), lng: parseFloat(lat) }
}else{
} else {
let Bmap = window.BMapGL // 注意要带window,不然会报错(注意官方api,会有改动,之前是Bmap,后面3.0版本改为了BMap,最好查文档或者打印一下window)
var b = new Bmap.Map('baiduMap')
b.centerAndZoom(new Bmap.Point(lat, lng), 15)
......@@ -250,18 +267,21 @@ export default defineComponent({
height: 162px;
overflow: hidden;
}
.hotelCard-title {
width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.hotel-info-item::before {
display: inline;
content: '·';
font-weight: bolder;
margin-right: 4px;
}
.height-320 {
height: 250px;
}
......
<template>
<div class="rounded-borders bg-white row items-center q-pa-md">
<n-cascader v-if="$q.platform.is.desktop" class="col-2 no-border" @update:value="changearea" v-model:value="cascader.addressValue" size="large" :placeholder="$t('hotel.area')" clearable check-strategy="all" :options="provinces" value-field="ID" label-field="Name" remote :on-load="loadChilds" cascade />
<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>
<n-cascader v-if="$q.platform.is.desktop" class="col-2 no-border" @update:value="changearea"
v-model:value="cascader.addressValue" size="large" :placeholder="$t('hotel.area')" clearable check-strategy="all"
:options="provinces" value-field="ID" label-field="Name" remote :on-load="loadChilds" cascade />
<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">{{ searchClone.OpenTime }}</div>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxy">
<q-date v-model="searchClone.OpenTime" :options="optionsFn" mask="YYYY/MM/DD" @update:model-value="dateRangeHandler"></q-date>
<q-date v-model="searchClone.OpenTime" :options="optionsFn" mask="YYYY/MM/DD"
@update:model-value="dateRangeHandler"></q-date>
</q-popup-proxy>
</q-field>
<q-input v-model="searchClone.Name" standout :class="{'q-ml-lg':$q.platform.is.desktop,'col':$q.platform.is.mobile}" style="min-width:150px;" dense :label="$t('v102.ticket.name')" />
<q-input v-model="searchClone.Name" standout
:class="{ 'q-ml-lg': $q.platform.is.desktop, 'col': $q.platform.is.mobile }" style="min-width:150px;" dense
:label="$t('v102.ticket.name')" />
<div class="col" v-if="$q.platform.is.desktop"></div>
<q-btn v-if="searchClone.ViewType==1" :round="$q.platform.is.mobile" :dense="$q.platform.is.mobile" flat :icon="$q.platform.is.desktop?'view_list':'view_stream'" class="bg-grey-3 hover q-mr-md q-ml-md" color="dark" @click="changeViewHandler(2)">
<q-btn v-if="searchClone.ViewType == 1" :round="$q.platform.is.mobile" :dense="$q.platform.is.mobile" flat
:icon="$q.platform.is.desktop ? 'view_list' : 'view_stream'" class="bg-grey-3 hover q-mr-md q-ml-md" color="dark"
@click="changeViewHandler(2)">
<q-tooltip class="bg-dark">{{ $t('v102.ticket.toggleListType1') }}</q-tooltip>
</q-btn>
<q-btn v-if="searchClone.ViewType==2" :round="$q.platform.is.mobile" :dense="$q.platform.is.mobile" flat icon="grid_view" class="bg-grey-3 hover q-mr-md q-ml-md" color="dark" @click="changeViewHandler(1)">
<q-btn v-if="searchClone.ViewType == 2" :round="$q.platform.is.mobile" :dense="$q.platform.is.mobile" flat
icon="grid_view" class="bg-grey-3 hover q-mr-md q-ml-md" color="dark" @click="changeViewHandler(1)">
<q-tooltip class="bg-dark">{{ $t('v102.ticket.toggleListType2') }}</q-tooltip>
</q-btn>
<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">
<n-cascader class="col-2 no-border" @update:value="changearea" v-model:value="cascader.addressValue" size="large" :placeholder="$t('hotel.area')" clearable check-strategy="all" :options="provinces" value-field="ID" label-field="Name" remote :on-load="loadChilds" cascade />
</div>
<div class="q-my-md" v-if="$q.platform.is.mobile">
<q-field stack-label :label="$t('daterange')" standout class="col-2" style="min-width: 190px" dense>
<div class="self-center full-width no-outline" tabindex="0">{{ searchClone.OpenTime }}</div>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxy">
<q-date v-model="searchClone.OpenTime" :options="optionsFn" mask="YYYY/MM/DD" @update:model-value="dateRangeHandler"></q-date>
</q-popup-proxy>
</q-field>
</div>
<div class="row items-center">
<q-input v-model="searchClone.StartPrice" class="col q-mr-md" mask="#.##" reverse-fill-mask dense type="text" standout :label="$t('hotel.minPrice')" />
<q-input v-model="searchClone.EndPrice" class="col" dense mask="#.##" reverse-fill-mask ftype="text" standout :label="$t('hotel.maxPrice')" />
</div>
</q-card>
</q-popup-proxy>
<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">
<n-cascader class="col-2 no-border" @update:value="changearea" v-model:value="cascader.addressValue"
size="large" :placeholder="$t('hotel.area')" clearable check-strategy="all" :options="provinces"
value-field="ID" label-field="Name" remote :on-load="loadChilds" cascade />
</div>
<div class="q-my-md" v-if="$q.platform.is.mobile">
<q-field stack-label :label="$t('daterange')" standout class="col-2" style="min-width: 190px" dense>
<div class="self-center full-width no-outline" tabindex="0">{{ searchClone.OpenTime }}</div>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxy">
<q-date v-model="searchClone.OpenTime" :options="optionsFn" mask="YYYY/MM/DD"
@update:model-value="dateRangeHandler"></q-date>
</q-popup-proxy>
</q-field>
</div>
<div class="row items-center">
<q-input v-model="searchClone.StartPrice" class="col q-mr-md" mask="#.##" reverse-fill-mask dense
type="text" standout :label="$t('hotel.minPrice')" />
<q-input v-model="searchClone.EndPrice" class="col" dense mask="#.##" reverse-fill-mask ftype="text"
standout :label="$t('hotel.maxPrice')" />
</div>
</q-card>
</q-popup-proxy>
</q-btn>
<q-btn v-if="$q.platform.is.desktop" color="primary" unelevated :label="$t('query')" @click="setSearchHandler"/>
<q-btn v-else color="primary" :round="$q.platform.is.mobile" :dense="$q.platform.is.mobile" :icon="$q.platform.is.mobile?'search':''" unelevated :label="$q.platform.is.mobile?'':$t('query')" @click="setSearchHandler"/>
<q-btn v-if="$q.platform.is.desktop" color="primary" unelevated :label="$t('query')" @click="setSearchHandler" />
<q-btn v-else color="primary" :round="$q.platform.is.mobile" :dense="$q.platform.is.mobile"
:icon="$q.platform.is.mobile ? 'search' : ''" unelevated :label="$q.platform.is.mobile ? '' : $t('query')"
@click="setSearchHandler" />
<!-- view_list grid_view -->
</div>
</template>
......@@ -71,7 +88,7 @@ export default {
cascader: {
addressValue: null
} as any,
searchClone:{} as any,
searchClone: {} as any,
canHide: false,
})
const search = inject(DirtionmaryHelper.TICKET_QUERY_PARAM) as any
......@@ -128,11 +145,11 @@ export default {
}
}
},
setSearchHandler(){
setSearchHandler() {
search.msg = JSON.parse(JSON.stringify(data.searchClone))
},
changeViewHandler(t:number){
data.searchClone.ViewType=t
changeViewHandler(t: number) {
data.searchClone.ViewType = t
methods.setSearchHandler()
},
dateRangeHandler(e: any) {
......@@ -148,8 +165,8 @@ export default {
if (data.searchClone.QProvince > 0) setCnt++
if (data.searchClone.OpenTime) setCnt++
}
if (data.searchClone.StartPrice>0) setCnt++
if (data.searchClone.EndPrice>0) setCnt++
if (data.searchClone.StartPrice > 0) setCnt++
if (data.searchClone.EndPrice > 0) setCnt++
return setCnt
})
methods.initAddress()
......@@ -163,4 +180,6 @@ export default {
}
</script>
<style></style>
<style>
</style>
......@@ -20,19 +20,17 @@
<q-input class="q-mr-md" style='' v-model="search.GoFlightInfo" dense standout
:label="$t('v102.vehicle.title4')" />
</div>
</div>
<div class="flex2" style="margin-top: 20px;">
<div class="flex2">
<q-input class="q-mr-md" style='' v-model="search.BackFlightInfo" dense standout
:label="$t('v102.vehicle.title5')" />
</div>
<div class="flex2">
 <q-input v-model="search.PeopleNum" class="q-mr-md" dense mask="#.##" reverse-fill-mask
ftype="text" standout :label="$t('v102.vehicle.title6')" />
<q-input v-model="search.PeopleNum" style="width: 172px" class="q-mr-md" dense mask="#.##"
reverse-fill-mask ftype="text" standout :label="$t('v102.vehicle.title6')" />
</div>
<div class="q-my-md" style="margin-right: 15px;">
<div class="q-my-md" style="margin-right: 10px;">
<q-field stack-label :label="$t('v102.vehicle.title7')" standout class="col-2"
style="min-width: 180px" dense>
style="min-width: 177px" dense>
<div class="self-center full-width no-outline" tabindex="0">{{ search.StartDate }}</div>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxy">
<q-date v-model="search.StartDate" :options="optionsFn" mask="YYYY-MM-DD"
......@@ -41,22 +39,20 @@
</q-popup-proxy>
</q-field>
</div>
 <q-input @blur="checkInteger()" v-model="search.UseDayNum" class="q-mr-md" dense mask="#.##"
<q-input @blur="checkInteger()" v-model="search.UseDayNum" class="q-mr-md" dense mask="#.##"
reverse-fill-mask ftype="text" standout :label="$t('v102.vehicle.title8')" />
</div>
<div class="flex2">
<q-input class="q-mr-md" style='' v-model="search.GuideInfo" dense standout
:label="$t('v102.vehicle.title10')" />
<q-input class="q-mr-md" style='' v-model="search.TeamName" dense standout
:label="$t('v102.vehicle.title11')" />
<div class="q-my-md">
<q-select style="width: 180px;" v-model="search.BusType" dense :options="vehicletop" emit-value
<q-select style="width: 170px;" v-model="search.BusType" dense :options="vehicletop" emit-value
option-label="Name" option-value="Id" map-options clearable :label="$t('v102.vehicle.title13')"
standout />
</div>
</div>
<!-- 表格 -->
<table width="100%" border="1" style="text-align:left;border-collapse:collapse;table-layout:fixed;word-break:break-all;max-width: 800px;border: 1px solid rgba(0, 0, 0, 0.12);
<table width="100%" border="1" style="text-align:left;border-collapse:collapse;table-layout:fixed;word-break:break-all;border: 1px solid rgba(0, 0, 0, 0.12);
margin: auto;">
<tr>
<th width="15%" align="center" class="td-title">{{ $t('v102.vehicle.tatle.th1') }}</th>
......@@ -71,7 +67,6 @@
</td>
<td>
DAY{{ item.DayNum }}
</td>
<td>
<div class="q-my-md">
......@@ -157,7 +152,7 @@ export default defineComponent({
// UseType: null,//用车类型(接口返下拉列表)
// TripInfo: "",//行程信息
// }
]
] as Array<any>
},
vehicletop: [],//上面车辆
listvehicle: [],//车辆类型
......@@ -276,7 +271,6 @@ export default defineComponent({
},
// 点击时间选项
dateRangeHandler(e: any) {
// data.search.StartDate = data.search.StartDate
if (qDateProxy.value) {
qDateProxy.value.hide()
methods.checkInteger()
......@@ -340,6 +334,7 @@ export default defineComponent({
.flex2 {
display: flex;
align-items: center;
flex-wrap: wrap;
}
......
......@@ -919,6 +919,39 @@ export default {
s8: '見積もりの申請',
s9: '見積もり詳細',
s10: '見積もりの確認',
},
list2: {
s1: '発注者:',
s2: '注文時間:',
s3: '車の予約会社:',
s4: '車の予約人:',
s5: 'コミュニティ名:',
s6: '人数:',
s7: '日付:',
s8: '日数:',
s9: '往路便:',
s10: '帰りのフライト:',
s11: '車タイプ:',
s12: 'ガイド情報:',
s13: 'ステータスの確認:',
s14: '受信情報:',
s15: 'ステータスの確認:',
s16: '確認:',
s17: '確認済み:',
s18: '確認者:',
s19: '確認時間:',
s20: 'トリップ情報',
s21: '価格:',
s22: '駐車料金:',
s23: '運転手の宿泊費:',
s24: '小計:',
s25: '合計#ゴウケイ#:',
s26: 'コメント:',
s27: '注意事項:',
s28: 'ステータス:',
s29: '手渡し料:',
s30: '運転手:',
s31: 'ナンバープレート:',
}
}
},
......
......@@ -919,6 +919,39 @@ export default {
s8: '신청 가격',
s9: '오퍼 상세정보',
s10: '오퍼를 확인하다',
},
list2: {
s1: '다음 사람:',
s2: '주문 발주 시간:',
s3: '차량 주문 회사:',
s4: '자동차 예약자:',
s5: '단체명:',
s6: '수가:',
s7: '날짜:',
s8: '일수:',
s9: '출발 항공편:',
s10: '돌아오는 항공편:',
s11: '차량 종류:',
s12: '가이드 정보:',
s13: '상태 확인:',
s14: '공항 정보:',
s15: '상태 확인:',
s16: '확인:',
s17: '확인됨:',
s18: '확인인:',
s19: '시간을 확인하다:',
s20: '스트로크 정보',
s21: '가격:',
s22: '주차료:',
s23: '운전기사숙비:',
s24: '소 계:',
s25: '합계:',
s26: '비고:',
s27: '주의 사항:',
s28: '상태:',
s29: '손수 배합비:',
s30: '기사:',
s31: '자동차 번호판:',
}
}
},
......
......@@ -5,97 +5,97 @@ export default {
failed: '执行失败',
success: '执行成功',
appsuffix: "PIC同业预定系统",
siteName:"同业预定系统",
lanuage:"系统语言",
loginout:'登录信息失效,请重新登录',
timeout:'当前网络环境异常,请求超时',
syslog:'系统升級告示',
sysmsg:'系统通知',
daterange:'请选择检索日期',
morequery:'更多筛选项',
query:'检索',
Notifications:{
title:'通知',
subtitle:'条新消息',
more:'更多',
time:'h'
siteName: "同业预定系统",
lanuage: "系统语言",
loginout: '登录信息失效,请重新登录',
timeout: '当前网络环境异常,请求超时',
syslog: '系统升級告示',
sysmsg: '系统通知',
daterange: '请选择检索日期',
morequery: '更多筛选项',
query: '检索',
Notifications: {
title: '通知',
subtitle: '条新消息',
more: '更多',
time: 'h'
},
hotel:{
pageTitle:"酒店检索",
area:"检索区域",
searchName:'酒店名称'
hotel: {
pageTitle: "酒店检索",
area: "检索区域",
searchName: '酒店名称'
},
userMenu:{
mypro:'个人档案',
myfinace:'请求书',
fapiao:'索取发票',
lang:'系统语言',
signOut:'登出'
userMenu: {
mypro: '个人档案',
myfinace: '请求书',
fapiao: '索取发票',
lang: '系统语言',
signOut: '登出'
},
menu:{
hotel:{
first:'酒店预定',
second:'酒店检索',
three:'酒店订单'
menu: {
hotel: {
first: '酒店预定',
second: '酒店检索',
three: '酒店订单'
},
car:{
first:'车辆预定',
second:'车辆预定',
three:'用车订单'
car: {
first: '车辆预定',
second: '车辆预定',
three: '用车订单'
},
ticket:{
first:'门票预定',
second:'门票检索',
three:'门票订单'
ticket: {
first: '门票预定',
second: '门票检索',
three: '门票订单'
},
finance:{
first:'账单',
second:'月度请求书',
three:'汇款说明'
finance: {
first: '账单',
second: '月度请求书',
three: '汇款说明'
}
},
login:{
notaccess:"沒有同业会员账户?",
registlink:"申请注册",
title:"登入",
subTitle:"欢迎您的到来,开放急速采购",
account:"账户(EMail)",
password:"密码",
forgot:"忘记密码?",
signin:"登入",
pageTitle:"登入",
ruleTipsAccount:"请填写正确的邮箱账号",
ruleTipsPwd:"请填写密码",
formTips:"请填写登录信息",
success:"登陆成功"
login: {
notaccess: "沒有同业会员账户?",
registlink: "申请注册",
title: "登入",
subTitle: "欢迎您的到来,开放急速采购",
account: "账户(EMail)",
password: "密码",
forgot: "忘记密码?",
signin: "登入",
pageTitle: "登入",
ruleTipsAccount: "请填写正确的邮箱账号",
ruleTipsPwd: "请填写密码",
formTips: "请填写登录信息",
success: "登陆成功"
},
forget:{
pageTitle:"忘记密码",
title:"忘记密码",
subtitle:"输入您的邮箱,以重置密码",
notaccess:"已经是会员了?",
registlink:"登录",
account:"账户(EMail)",
submit:"提交",
cancel:"取消",
goback:"返回",
mailResult:"邮件件已发送到您的邮箱,请根据邮件提示修改密码",
resultBtn:"我已知晓"
forget: {
pageTitle: "忘记密码",
title: "忘记密码",
subtitle: "输入您的邮箱,以重置密码",
notaccess: "已经是会员了?",
registlink: "登录",
account: "账户(EMail)",
submit: "提交",
cancel: "取消",
goback: "返回",
mailResult: "邮件件已发送到您的邮箱,请根据邮件提示修改密码",
resultBtn: "我已知晓"
},
newpwd:{
pageTitle:"设置新密码",
title:"设置新密码",
subtitle:"为了您的账户安全,建议您定期修改密码",
notaccess:"你已经重置密码了吗?",
registlink:"登入",
pass:"新密码",
passTips:"使用8个或8个以上的字母、数字和符号的組合",
passvalidate:"请按照提示要求设置密码",
repeatPassvalidate:"两次输入密码不一致",
repeatPass:"再次输入密码",
notEmptyPass:'新密码最少为8位',
maxLengthPass:'密码长度应为8-16位',
updateResult:'新密码已经设置成功,可以立即登入',
resultBtn:"立即登入"
newpwd: {
pageTitle: "设置新密码",
title: "设置新密码",
subtitle: "为了您的账户安全,建议您定期修改密码",
notaccess: "你已经重置密码了吗?",
registlink: "登入",
pass: "新密码",
passTips: "使用8个或8个以上的字母、数字和符号的組合",
passvalidate: "请按照提示要求设置密码",
repeatPassvalidate: "两次输入密码不一致",
repeatPass: "再次输入密码",
notEmptyPass: '新密码最少为8位',
maxLengthPass: '密码长度应为8-16位',
updateResult: '新密码已经设置成功,可以立即登入',
resultBtn: "立即登入"
}
}
......@@ -926,6 +926,39 @@ export default {
s8: '申請報價',
s9: '報價詳情',
s10: '確認報價',
},
list2: {
s1: '下單人:',
s2: '下單時間:',
s3: '訂車公司:',
s4: '訂車人:',
s5: '團體名稱:',
s6: '人數:',
s7: '日期:',
s8: '天數:',
s9: '去程航班:',
s10: '回程航班:',
s11: '用車類型:',
s12: '導遊信息:',
s13: '確認狀態:',
s14: '接機信息:',
s15: '確認狀態:',
s16: '確認',
s17: '已確認',
s18: '確認人:',
s19: '確認時間:',
s20: '行程信息',
s21: '價格:',
s22: '停車費:',
s23: '司機住宿費:',
s24: '小計:',
s25: '合計:',
s26: '備註:',
s27: '注意事項:',
s28: '狀態:',
s29: '手配費:',
s30: '司機:',
s31: '車牌號:',
}
},
CharteredBus:{
......
<template>
<div class="fix-height-subpage column no-wrap q-pa-md">
<list-header></list-header>
<div class="col q-mt-md" :class="{'light-shadow q-pa-md bg-white rounded-border':$q.platform.is.desktop}">
<div class="col q-mt-md" :class="{ 'light-shadow q-pa-md bg-white rounded-border': $q.platform.is.desktop }">
<list-table></list-table>
</div>
<hotel-tips></hotel-tips>
......@@ -38,28 +38,28 @@ export default defineComponent({
Star: 0,
PriceLevel: 0,
Supplier: 0,
MaxPrice:'',
MinPrice:''
MaxPrice: '',
MinPrice: ''
})
provide(DirtionmaryHelper.HOTEL_QUERY_PARAM, search)
const HotelCarList = ref<Array<any>>([])
const cacheCars = localStorage.getItem(DirtionmaryHelper.HOTEL_HOTELCARS_CACHE)
if(cacheCars){
let cacheCarArray = JSON.parse(cacheCars).filter((x:any)=>date.getDateDiff(new Date(x.Date),new Date(), 'days')>=20 )
if (cacheCars) {
let cacheCarArray = JSON.parse(cacheCars).filter((x: any) => date.getDateDiff(new Date(x.Date), new Date(), 'days') >= 20)
HotelCarList.value = cacheCarArray
}
provide(DirtionmaryHelper.HOTEL_CAR_LIST, HotelCarList)
const updateObj = ref<any>({})
provide(DirtionmaryHelper.HOTEL_UPDATEHOTEL_CAR,updateObj)
provide(DirtionmaryHelper.HOTEL_UPDATEHOTEL_CAR, updateObj)
const orderstatus = ref(false)
provide(DirtionmaryHelper.HOTEL_CAR_ORDER_STATUS,orderstatus)
provide(DirtionmaryHelper.HOTEL_CAR_ORDER_STATUS, orderstatus)
const HotelLengths = ref(0)
provide(DirtionmaryHelper.HOTEL_CAR_ORDER_LENGTH,HotelLengths)
provide(DirtionmaryHelper.HOTEL_CAR_ORDER_LENGTH, HotelLengths)
const menu=inject(DirtionmaryHelper.MENU_KEYS) as any
menu.value=2
const menu = inject(DirtionmaryHelper.MENU_KEYS) as any
menu.value = 2
const methods = {}
return {
...toRefs(data),
......@@ -69,4 +69,6 @@ export default defineComponent({
})
</script>
<style></style>
<style>
</style>
......@@ -28,7 +28,7 @@
<div class="">
<q-table v-if="$q.platform.is.desktop" separator="cell" :pagination="pages" dense :rows="hotels"
row-key="Id" bordered :columns="cols"
class="sticky-rightrowspan-column-table light-border col no-shadow">
class="sticky-rightrowspan-column-table light-border col no-shadow sticky-rightrowspan-column-table2">
<template v-slot:body-cell-Id="props">
<!--未提交报价,可以修改-->
<q-td :prop="props">
......@@ -46,7 +46,7 @@
:label="$t('v102.vehicle.list.s8')" />
</span>
<!--弹窗显示详细信息-->
<span @click="mask(props.row.Id)" v-if="props.row.OfferState == 3">
<span @click="details(props.row.Id)" v-if="props.row.OfferState == 3">
<q-btn class="col q-mr-md" color="primary" unelevated
:label="$t('v102.vehicle.list.s9')" />
</span>
......@@ -90,11 +90,16 @@
</q-table>
</div>
</q-card>
<!-- 详情 -->
<!-- 编辑 -->
<q-dialog v-model="showPriceList">
<vehicle-popover @close="close" :Id='Id' @refresh="refresh">
</vehicle-popover>
</q-dialog>
<!-- 详情 -->
<q-dialog v-model="showdetails">
<vehicle-details @close="close" :Id='Id' @refresh="refresh">
</vehicle-details>
</q-dialog>
<!-- 取消弹窗 -->
<q-dialog v-model="cancelshow">
<q-card flat class="" style="width: 40vw;">
......@@ -120,18 +125,20 @@ import { useI18n } from 'vue-i18n'
import { useQuasar } from 'quasar'
import { date } from 'quasar'
import vehiclePopover from '../../components/vehicle/vehiclePopover.vue'
import vehicleDetails from '../../components/vehicle/vehicleDetails.vue'//详情
// import { DirtionmaryHelper } from '../../../config/dictionary',
import useScrollModule from 'src/module/scrollbar/scrollModule'
import HotelService from '../../api/vehicle'
import message from 'src/utils/message'
import { ApiResult } from 'src/@types/enumHelper'
export default defineComponent({
components: { vehiclePopover },
components: { vehiclePopover, vehicleDetails },
setup() {
const qDateProxy = ref(null) as any
const { t } = useI18n()
const $q = useQuasar()
const data = reactive({
showdetails: false,
cancelshow: false,
CancelRemark: '',
Id: 0,
......@@ -180,6 +187,11 @@ export default defineComponent({
// data.pages.EndTime = data.dateRange.to
// data.pageTitle = inject(DirtionmaryHelper.PAGE_TITLE_KEY)
const methods = {
// 详情
details(val: any) {
data.Id = val
data.showdetails = true
},
//申请报价
ApplyTripBus(item: any) {
HotelService.applyBusPricelation(item.Id)
......@@ -251,6 +263,7 @@ export default defineComponent({
}
},
close() {
data.showdetails = false
data.showPriceList = false
},
// 刷新
......@@ -258,6 +271,7 @@ export default defineComponent({
// console.log('444')
data.pages.pageIndex = 1
methods.initHotel()
data.showdetails = false
data.showPriceList = false
},
// 翻页
......@@ -321,4 +335,12 @@ th {
.table-title {
font-size: 14px;
}
.sticky-rightrowspan-column-table2 th:last-child,
.sticky-rightrowspan-column-table2 tbody tr td {
position: sticky !important;
right: 0 !important;
z-index: 1 !important;
box-shadow: rgba(0, 0, 0, 0.05) -2px 0px 0px !important;
}
</style>
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