Commit 488bbe9a authored by 黄奎's avatar 黄奎

车辆

parent 41ccdbfe
import { HttpResponse } from '../@types'
import request from './request'
class HotelService {
/**
* 查詢當前登入用戶的酒店訂單信息
* @param param
* @returns
*/
static async vehicletripbus(param: any): Promise<HttpResponse> {
return request('tripbus_SetTripBus', param)
}
/**
* 查詢用车类型上面
* @param param
* @returns
*/
static async TypeVehicle(param: any): Promise<HttpResponse> {
return request('tripbus_GetBusTypeList', param)
}
/**
* 查詢用车类型列表下面
* @param param
* @returns
*/
static async listTypeVehicle(param: any): Promise<HttpResponse> {
return request('tripbus_GetTripBusUseType', param)
}
/**
* 查詢用车类预定列表
* @param param
* @returns
*/
static async vehicleList(param: any): Promise<HttpResponse> {
return request('tripbus_GetTripBusPage', param)
}
/**
* 修改查詢用车类详情
* @param param
* @returns
*/
static async VehicleDetails(Id: number): Promise<HttpResponse> {
return request('tripbus_GetTripBusInfo', { Id })
}
/**
* 取消用车
* @param param
* @returns
*/
static async cancellation(Id: number, CancelRemark: any): Promise<HttpResponse> {
return request('tripbus_CancelBusTrip', { Id, CancelRemark })
}
}
export default HotelService
\ No newline at end of file
<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="sticky-column-table col sticky-header-column-table hotel-table" flat :pagination="pages" :no-data-label="$t('noneData')"> <q-table v-if="$q.platform.is.desktop" :loading="loading" :rows="hotels" :loading-label="$t('loading')"
class="sticky-column-table col sticky-header-column-table hotel-table" flat :pagination="pages"
:no-data-label="$t('noneData')">
<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>
...@@ -17,13 +19,15 @@ ...@@ -17,13 +19,15 @@
<q-th v-for="(x, i) in cols"> <q-th v-for="(x, i) in cols">
{{ x }} {{ x }}
</q-th> </q-th>
<q-th>{{$t('hotel.addRoomBtn')}}</q-th> <q-th>{{ $t('hotel.addRoomBtn') }}</q-th>
</q-tr> </q-tr>
</template> </template>
<template v-slot:body="props"> <template v-slot:body="props">
<q-tr :props="props"> <q-tr :props="props">
<q-td style="width:200px"> <q-td style="width:200px">
<div class="ellipsis-3-lines" style="padding: 7px 16px;width: 200px;white-space: break-spaces;">{{ props.row.HotelName }}</div> <div class="ellipsis-3-lines" style="padding: 7px 16px;width: 200px;white-space: break-spaces;">{{
props.row.HotelName
}}</div>
</q-td> </q-td>
<q-td> <q-td>
<div class="td-item">{{ $t('hotel.table.price') }}</div> <div class="td-item">{{ $t('hotel.table.price') }}</div>
...@@ -50,47 +54,44 @@ ...@@ -50,47 +54,44 @@
</div> </div>
</q-td> </q-td>
<q-td class="text-center" style="border-left:1px solid #eee;"> <q-td class="text-center" style="border-left:1px solid #eee;">
<q-btn color="primary" :label="$t('hotel.addRoom')" size="sm" outline @click="finishHanler(props.row)"/> <q-btn color="primary" :label="$t('hotel.addRoom')" size="sm" outline @click="finishHanler(props.row)" />
</q-td> </q-td>
</q-tr> </q-tr>
</template> </template>
<template v-slot:bottom> <template v-slot:bottom>
<q-pagination class="full-width justify-end" v-model="pages.pageIndex" color="primary" :max="pages.pageCount" :input="true" @update:model-value="changePageHandler" /> <q-pagination class="full-width justify-end" v-model="pages.pageIndex" color="primary" :max="pages.pageCount"
:input="true" @update:model-value="changePageHandler" />
</template> </template>
</q-table> </q-table>
<q-table <q-table hide-header v-else :rows="hotels" grid :columns="mobileCols" row-key="name"
hide-header card-class="no-shadow bg-primary text-white col" :pagination="pages" :loading="loading">
v-else <template v-slot:item="props">
:rows="hotels" <div @click="viewHotelPriceListHandler(props.row)" class="rounded-borders bg-primary text-white col-12 q-mb-sm"
grid style="padding: 12px;margin-left: 12px;margin-right: 12px; width: calc(100% - 24px);">
:columns="mobileCols" <div>
row-key="name" <div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{ $t('hotel.col.first') }}
card-class="no-shadow bg-primary text-white col" </div>
:pagination="pages" <div style="font-size: 13px;">{{ props.row.HotelName }}</div>
:loading="loading" </div>
> <div class="q-my-md">
<template v-slot:item="props"> <div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{ $t('hotel.col.three') }}
<div @click="viewHotelPriceListHandler(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> <div style="font-size: 13px;">{{ props.row.TotalInventory }}</div>
<div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{$t('hotel.col.first')}}</div> </div>
<div style="font-size: 13px;">{{props.row.HotelName}}</div> <div>
</div> <div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{ $t('hotel.col.four') }}
<div class="q-my-md"> </div>
<div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{$t('hotel.col.three')}}</div> <div class="row items-center justify-between">
<div style="font-size: 13px;">{{props.row.TotalInventory}}</div> <span>{{ props.row.LowerPrice.toFixed(2) }}{{ $t('unit.jp') }} {{ $t('hotel.col.low') }}</span>
</div> <q-btn color="grey-3" :label="$t('hotel.addRoom')" size="sm" outline @click="finishHanler(props.row)" />
<div> </div>
<div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{$t('hotel.col.four')}}</div>
<div class="row items-center justify-between">
<span>{{props.row.LowerPrice.toFixed(2)}}{{$t('unit.jp')}} {{$t('hotel.col.low')}}</span>
<q-btn color="grey-3" :label="$t('hotel.addRoom')" size="sm" outline @click="finishHanler(props.row)"/>
</div> </div>
</div> </div>
</div> </template>
</template> <template v-slot:bottom>
<template v-slot:bottom> <q-pagination class="full-width justify-end" v-model="pages.pageIndex" color="primary" :max="pages.pageCount"
<q-pagination class="full-width justify-end" v-model="pages.pageIndex" color="primary" :max="pages.pageCount" :input="true" @update:model-value="changePageHandler" /> :input="true" @update:model-value="changePageHandler" />
</template> </template>
</q-table> </q-table>
<q-dialog v-model="showPriceList"> <q-dialog v-model="showPriceList">
...@@ -105,7 +106,7 @@ import HotelService from '../../../api/hotel' ...@@ -105,7 +106,7 @@ import HotelService from '../../../api/hotel'
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 { DateType, getDateType, getDayOfWeek } from '../../../utils/tools' import { DateType, getDateType, getDayOfWeek } from '../../../utils/tools'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import HotelPriceList from '../list/HotelPriceList.vue' import HotelPriceList from '../list/HotelPriceList.vue'
...@@ -113,9 +114,9 @@ import SamplePriceList from '../list/SamplePriceList.vue' ...@@ -113,9 +114,9 @@ import SamplePriceList from '../list/SamplePriceList.vue'
export default defineComponent({ export default defineComponent({
components: { HotelPriceList, SamplePriceList }, components: { HotelPriceList, SamplePriceList },
name: 'list-table', name: 'list-table',
emits:['finish'], emits: ['finish'],
setup(props,context) { setup(props, context) {
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
watch(search, (n, o) => { watch(search, (n, o) => {
...@@ -137,13 +138,13 @@ export default defineComponent({ ...@@ -137,13 +138,13 @@ export default defineComponent({
}, },
pageTitle: '' as (string | undefined), pageTitle: '' as (string | undefined),
dateTypes: [] as Array<DateType>, dateTypes: [] as Array<DateType>,
mobileCols:[ mobileCols: [
{name:'HotelName',label:t('hotel.col.first'),field:(row:any)=>row.HotelName}, { 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: 'TotalInventory', label: t('hotel.col.three'), field: (row: any) => row.TotalInventory },
{name:'LowerPrice',label:t('hotel.col.four'),field:(row:any)=>row.LowerPrice} { name: 'LowerPrice', label: t('hotel.col.four'), field: (row: any) => row.LowerPrice }
], ],
showPriceList:false, showPriceList: false,
queryHotelObj:{} queryHotelObj: {}
}) })
...@@ -164,11 +165,11 @@ export default defineComponent({ ...@@ -164,11 +165,11 @@ export default defineComponent({
y.PriceList.forEach((z: any) => { y.PriceList.forEach((z: any) => {
z.ins = methods.getDateTypeById(z.InventoryType) z.ins = methods.getDateTypeById(z.InventoryType)
}) })
let cd=new Date(y.DateStr) let cd = new Date(y.DateStr)
y.FormatDate=`${date.formatDate(cd, 'MM/DD')} (${getDayOfWeek(date.getDayOfWeek(cd))})` y.FormatDate = `${date.formatDate(cd, 'MM/DD')} (${getDayOfWeek(date.getDayOfWeek(cd))})`
}) })
if($q.platform.is.mobile){ if ($q.platform.is.mobile) {
x.LowerPrice=methods.calcLowerPrice(x) x.LowerPrice = methods.calcLowerPrice(x)
} }
}) })
...@@ -202,28 +203,28 @@ export default defineComponent({ ...@@ -202,28 +203,28 @@ export default defineComponent({
getDateTypeById(id: number) { getDateTypeById(id: number) {
return data.dateTypes.find(x => x.id == id) return data.dateTypes.find(x => x.id == id)
}, },
calcLowerPrice(hotel:any){ calcLowerPrice(hotel: any) {
let lower=0 let lower = 0
hotel.subList.forEach((x:any)=>{ hotel.subList.forEach((x: any) => {
if(x.PriceList &&x.PriceList.length>0){ if (x.PriceList && x.PriceList.length > 0) {
x.PriceList.forEach((y:any)=>{ x.PriceList.forEach((y: any) => {
if(y.CostPrice>lower) lower= y.CostPrice if (y.CostPrice > lower) lower = y.CostPrice
}) })
} }
}) })
return lower return lower
}, },
viewHotelPriceListHandler(row:any){ viewHotelPriceListHandler(row: any) {
data.queryHotelObj = row data.queryHotelObj = row
data.showPriceList = true data.showPriceList = true
}, },
finishHanler(hotel:any){ finishHanler(hotel: any) {
context.emit('finish',hotel) context.emit('finish', hotel)
} }
} }
methods.calcDateRangeCols() methods.calcDateRangeCols()
methods.initHotels() methods.initHotels()
return { ...toRefs(data), ...methods,search } return { ...toRefs(data), ...methods, search }
} }
}) })
</script> </script>
...@@ -234,6 +235,7 @@ export default defineComponent({ ...@@ -234,6 +235,7 @@ export default defineComponent({
height: 14px; height: 14px;
border-radius: 4px; border-radius: 4px;
} }
.td-item { .td-item {
width: 100%; width: 100%;
height: 35px; height: 35px;
...@@ -244,12 +246,15 @@ export default defineComponent({ ...@@ -244,12 +246,15 @@ export default defineComponent({
text-align: center; text-align: center;
border-bottom: 1px solid rgba(0, 0, 0, 0.12); border-bottom: 1px solid rgba(0, 0, 0, 0.12);
} }
.td-item:last-child { .td-item:last-child {
border-bottom: none; border-bottom: none;
} }
.hotel-table .q-table td { .hotel-table .q-table td {
padding: 0 !important; padding: 0 !important;
} }
/* .td-item.cursor-pointer:hover{ /* .td-item.cursor-pointer:hover{
color: var(--q-primary) !important; color: var(--q-primary) !important;
} */ } */
......
...@@ -2,16 +2,20 @@ ...@@ -2,16 +2,20 @@
<q-card flat class="light-shadow rounded-border window-width q-pa-none"> <q-card flat class="light-shadow rounded-border window-width q-pa-none">
<q-card-section class="q-pa-sm"> <q-card-section class="q-pa-sm">
<div class="text-h6">{{ h.HotelName }}</div> <div class="text-h6">{{ h.HotelName }}</div>
<div class="f12 text-grey-5">{{ `${search.StartDate} ${$t('hotel.col.zhi')} ${search.EndDate}` }} {{ $t('hotel.pricetips') }}</div> <div class="f12 text-grey-5">{{ `${search.StartDate} ${$t('hotel.col.zhi')} ${search.EndDate}` }} {{
$t('hotel.pricetips')
}}</div>
</q-card-section> </q-card-section>
<div style="max-height: 60vh; overflow-y: auto" class="q-pa-sm"> <div style="max-height: 60vh; overflow-y: auto" class="q-pa-sm">
<template v-for="x in h.subList"> <template v-for="x in h.subList">
<div class="rounded-borders q-pa-sm q-mt-md" v-if="x.PriceList && x.PriceList.length > 0" :class="[x.PriceList[0].ins.bg, x.PriceList[0].ins.color]"> <div class="rounded-borders q-pa-sm q-mt-md" v-if="x.PriceList && x.PriceList.length > 0"
:class="[x.PriceList[0].ins.bg, x.PriceList[0].ins.color]">
<div class="row items-center"> <div class="row items-center">
<div class="text-subtitle2 col"> <div class="text-subtitle2 col">
{{ x.FormatDate }} {{ x.FormatDate }}
</div> </div>
<div class="f12" style="opacity: 0.5" :class="[x.PriceList[0].ins.color]">{{ x.PriceList[0].ins.text }}</div> <div class="f12" style="opacity: 0.5" :class="[x.PriceList[0].ins.color]">{{ x.PriceList[0].ins.text }}
</div>
</div> </div>
<!-- <q-separator color="white" style="opacity: .3;"/> --> <!-- <q-separator color="white" style="opacity: .3;"/> -->
<div class="row justify-between q-pb-sm" style="border-bottom: 1px dashed rgba(255, 255, 255, 0.2)"> <div class="row justify-between q-pb-sm" style="border-bottom: 1px dashed rgba(255, 255, 255, 0.2)">
...@@ -36,13 +40,15 @@ ...@@ -36,13 +40,15 @@
<div class="price-item"> <div class="price-item">
<div class="label">{{ $t('hotel.col.five') }}</div> <div class="label">{{ $t('hotel.col.five') }}</div>
<div class="row items-center"> <div class="row items-center">
<div class="din">{{ x.PriceList[0].CostPrice.toFixed(2) }}{{$t('unit.jp')}}</div> <div class="din">{{ x.PriceList[0].CostPrice.toFixed(2) }}{{ $t('unit.jp') }}</div>
<!-- <div class="q-ml-md" style="font-size: 12px; opacity: 0.5">{{ $t('hotel.col.more') }}</div> --> <!-- <div class="q-ml-md" style="font-size: 12px; opacity: 0.5">{{ $t('hotel.col.more') }}</div> -->
</div> </div>
</div> </div>
<q-btn color="color" v-if="!search.SearchByUpdate" :label="$t('hotel.buy')" class="q-pa-none q-px-md" dense outline style="opacity: 0.5" @click="showOrderSubmitHandler(h,x)"/> <q-btn color="color" v-if="!search.SearchByUpdate" :label="$t('hotel.buy')" class="q-pa-none q-px-md" dense
outline style="opacity: 0.5" @click="showOrderSubmitHandler(h, x)" />
</div> </div>
<div class="row justify-between q-mt-md q-pa-sm rounded-borders" style="background:rgba(255,255,255,.3)" v-if="x.PriceList[0].room.length>0"> <div class="row justify-between q-mt-md q-pa-sm rounded-borders" style="background:rgba(255,255,255,.3)"
v-if="x.PriceList[0].room.length > 0">
<div class="price-item q-ma-none" v-for="y in x.PriceList[0].room"> <div class="price-item q-ma-none" v-for="y in x.PriceList[0].room">
<div class="label">{{ y.name }}</div> <div class="label">{{ y.name }}</div>
<div class="f12">{{ y.price.toFixed(2) }}</div> <div class="f12">{{ y.price.toFixed(2) }}</div>
...@@ -85,10 +91,10 @@ export default defineComponent({ ...@@ -85,10 +91,10 @@ export default defineComponent({
const search = inject(DirtionmaryHelper.HOTEL_QUERY_PARAM) as any const search = inject(DirtionmaryHelper.HOTEL_QUERY_PARAM) as any
const methods = { const methods = {
showOrderSubmitHandler(row:any,col:any){ showOrderSubmitHandler(row: any, col: any) {
context.emit('update:modelValue',row,col) context.emit('update:modelValue', row, col)
}, },
setCurrentHotel(hotel:any) { setCurrentHotel(hotel: any) {
hotel.subList.forEach((x: any) => { hotel.subList.forEach((x: any) => {
x.ShowMorePrice = false x.ShowMorePrice = false
if (x.PriceList && x.PriceList.length > 0) { if (x.PriceList && x.PriceList.length > 0) {
...@@ -136,6 +142,7 @@ export default defineComponent({ ...@@ -136,6 +142,7 @@ export default defineComponent({
.price-item { .price-item {
margin-top: 8px; margin-top: 8px;
} }
.price-item .label { .price-item .label {
opacity: 0.5; opacity: 0.5;
font-size: 12px; font-size: 12px;
......
<template> <template>
<div class="full-height column hotel-list"> <div class="full-height column hotel-list">
<!-- <hotelCard></hotelCard> --> <!-- <hotelCard></hotelCard> -->
<q-table v-if="$q.platform.is.desktop" :loading="loading" :rows="hotels" :loading-label="$t('loading')" class="sticky-column-table col sticky-header-column-table hotel-table" flat :pagination="pages" :no-data-label="$t('noneData')"> <q-table v-if="$q.platform.is.desktop" :loading="loading" :rows="hotels" :loading-label="$t('loading')"
class="sticky-column-table col sticky-header-column-table hotel-table" flat :pagination="pages"
:no-data-label="$t('noneData')">
<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>
...@@ -22,7 +24,8 @@ ...@@ -22,7 +24,8 @@
</template> </template>
<template v-slot:body="props"> <template v-slot:body="props">
<q-tr :props="props"> <q-tr :props="props">
<q-td style="width:200px;" class="cursor-pointer ListTable-title" @click="showHotelDetailHandler(props.row.HotelId)"> <q-td style="width:200px;" class="cursor-pointer ListTable-title"
@click="showHotelDetailHandler(props.row.HotelId)">
<div class="ellipsis-3-lines" style="padding: 7px 16px;width: 200px;white-space: break-spaces;"> <div class="ellipsis-3-lines" style="padding: 7px 16px;width: 200px;white-space: break-spaces;">
{{ props.row.HotelName }} {{ props.row.HotelName }}
<!-- <q-tooltip style="padding:none;"> <!-- <q-tooltip style="padding:none;">
...@@ -36,7 +39,8 @@ ...@@ -36,7 +39,8 @@
<div class="td-item">{{ $t('hotel.table.confirm') }}</div> <div class="td-item">{{ $t('hotel.table.confirm') }}</div>
<div class="td-item">{{ $t('hotel.table.limit') }}</div> <div class="td-item">{{ $t('hotel.table.limit') }}</div>
</q-td> </q-td>
<q-td v-for="x in props.row.subList" @click="x.PriceList[0].CostPrice>0?showOrderSubmitHandler(props.row,x):''"> <q-td v-for="x in props.row.subList"
@click="x.PriceList[0].CostPrice > 0 ? showOrderSubmitHandler(props.row, x) : ''">
<template v-if="x.PriceList && x.PriceList.length > 0"> <template v-if="x.PriceList && x.PriceList.length > 0">
<div class="td-item cursor-pointer" :class="[x.PriceList[0].ins.bg, x.PriceList[0].ins.color]"> <div class="td-item cursor-pointer" :class="[x.PriceList[0].ins.bg, x.PriceList[0].ins.color]">
{{ x.PriceList[0].CostPrice }} {{ x.PriceList[0].CostPrice }}
...@@ -61,49 +65,46 @@ ...@@ -61,49 +65,46 @@
</q-tr> </q-tr>
</template> </template>
<template v-slot:bottom> <template v-slot:bottom>
<q-pagination class="full-width justify-end" v-model="pages.pageIndex" color="primary" :max="pages.pageCount" :input="true" @update:model-value="changePageHandler" /> <q-pagination class="full-width justify-end" v-model="pages.pageIndex" color="primary" :max="pages.pageCount"
:input="true" @update:model-value="changePageHandler" />
</template> </template>
</q-table> </q-table>
<q-table <q-table hide-header v-else :title="pageTitle" :rows="hotels" grid :columns="mobileCols" row-key="name"
hide-header card-class="no-shadow bg-primary text-white" :pagination="pages" :loading="loading">
v-else <template v-slot:item="props">
:title="pageTitle" <div @click="viewHotelPriceListHandler(props.row)" class="rounded-borders bg-primary text-white col-12 q-mb-sm"
:rows="hotels" style="padding: 12px;margin-left: 12px;margin-right: 12px; width: calc(100% - 24px);">
grid <div @click.stop="showHotelDetailHandler(props.row.HotelId)">
:columns="mobileCols" <div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{ $t('hotel.col.first') }}
row-key="name" </div>
card-class="no-shadow bg-primary text-white" <div style="font-size: 13px;">{{ props.row.HotelName }}</div>
:pagination="pages" </div>
:loading="loading" <div class="q-my-md">
> <div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{ $t('hotel.col.three') }}
<template v-slot:item="props"> </div>
<div @click="viewHotelPriceListHandler(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 style="font-size: 13px;">{{ props.row.TotalInventory }}</div>
<div @click.stop="showHotelDetailHandler(props.row.HotelId)"> </div>
<div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{$t('hotel.col.first')}}</div> <div>
<div style="font-size: 13px;">{{props.row.HotelName}}</div> <div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{ $t('hotel.col.four') }}
</div> </div>
<div class="q-my-md"> <div class="">
<div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{$t('hotel.col.three')}}</div> <span>{{ props.row.LowerPrice.toFixed(2) }}{{ $t('unit.jp') }} {{ $t('hotel.col.low') }}</span>
<div style="font-size: 13px;">{{props.row.TotalInventory}}</div> </div>
</div>
<div>
<div style="opacity: 0.54;font-weight: 500;font-size: 12px;margin-bottom: 4px;">{{$t('hotel.col.four')}}</div>
<div class="">
<span>{{props.row.LowerPrice.toFixed(2)}}{{$t('unit.jp')}} {{$t('hotel.col.low')}}</span>
</div> </div>
</div> </div>
</div> </template>
</template> <template v-slot:bottom>
<template v-slot:bottom> <q-pagination class="full-width justify-end" v-model="pages.pageIndex" color="primary" :max="pages.pageCount"
<q-pagination class="full-width justify-end" v-model="pages.pageIndex" color="primary" :max="pages.pageCount" :input="true" @update:model-value="changePageHandler" /> :input="true" @update:model-value="changePageHandler" />
</template> </template>
</q-table> </q-table>
<q-dialog v-model="showPriceList"> <q-dialog v-model="showPriceList">
<hotel-price-list :hotel="queryHotelObj" @update:model-value="showOrderSubmitHandler"></hotel-price-list> <hotel-price-list :hotel="queryHotelObj" @update:model-value="showOrderSubmitHandler"></hotel-price-list>
</q-dialog> </q-dialog>
<q-dialog v-model="showOrderPreview" persistent> <q-dialog v-model="showOrderPreview" persistent>
<table-operation :HotelRow="orderSubmitObj" :hotelInfor="orderSubmitItemObj" @close="showOrderPreview = false"></table-operation> <table-operation :HotelRow="orderSubmitObj" :hotelInfor="orderSubmitItemObj"
@close="showOrderPreview = false"></table-operation>
</q-dialog> </q-dialog>
<q-dialog v-model="showHotelDetails" persistent> <q-dialog v-model="showHotelDetails" persistent>
<hotel-details :hotelId="showHotelDetailId"></hotel-details> <hotel-details :hotelId="showHotelDetailId"></hotel-details>
...@@ -117,7 +118,7 @@ import HotelService from '../../../api/hotel' ...@@ -117,7 +118,7 @@ import HotelService from '../../../api/hotel'
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 { DateType, getDateType, getDayOfWeek } from '../../../utils/tools' import { DateType, getDateType, getDayOfWeek } from '../../../utils/tools'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import HotelPriceList from './HotelPriceList.vue' import HotelPriceList from './HotelPriceList.vue'
...@@ -126,10 +127,10 @@ import SamplePriceList from './SamplePriceList.vue' ...@@ -126,10 +127,10 @@ import SamplePriceList from './SamplePriceList.vue'
import hotelCard from './hotelCard.vue' import hotelCard from './hotelCard.vue'
import hotelDetails from './hotelDetails.vue' import hotelDetails from './hotelDetails.vue'
export default defineComponent({ export default defineComponent({
components: { HotelPriceList, TableOperation,SamplePriceList,hotelCard,hotelDetails }, components: { HotelPriceList, TableOperation, SamplePriceList, hotelCard, hotelDetails },
name: 'list-table', name: 'list-table',
setup() { setup() {
const $q=useQuasar() const $q = useQuasar()
const { t } = useI18n() const { t } = useI18n()
const orderstatus = inject(DirtionmaryHelper.HOTEL_CAR_ORDER_STATUS) as any const orderstatus = inject(DirtionmaryHelper.HOTEL_CAR_ORDER_STATUS) as any
const search = inject(DirtionmaryHelper.HOTEL_QUERY_PARAM) as any const search = inject(DirtionmaryHelper.HOTEL_QUERY_PARAM) as any
...@@ -140,16 +141,16 @@ export default defineComponent({ ...@@ -140,16 +141,16 @@ export default defineComponent({
methods.calcDateRangeCols() methods.calcDateRangeCols()
methods.initHotels() methods.initHotels()
}) })
watch(updateHotel,(n,o)=>{ watch(updateHotel, (n, o) => {
if(updateHotel.value.HotelId){ if (updateHotel.value.HotelId) {
data.showOrderPreview=true data.showOrderPreview = true
data.orderSubmitItemObj=null data.orderSubmitItemObj = null
data.orderSubmitObj=null data.orderSubmitObj = null
} }
//methods.initHotels() //methods.initHotels()
}) })
watch(orderstatus,(n,o)=>{ watch(orderstatus, (n, o) => {
if(orderstatus.value==true){ if (orderstatus.value == true) {
methods.initHotels() methods.initHotels()
orderstatus.value = false orderstatus.value = false
} }
...@@ -167,15 +168,15 @@ export default defineComponent({ ...@@ -167,15 +168,15 @@ export default defineComponent({
}, },
pageTitle: '' as (string | undefined), pageTitle: '' as (string | undefined),
dateTypes: [] as Array<DateType>, dateTypes: [] as Array<DateType>,
mobileCols:[ mobileCols: [
{name:'HotelName',label:t('hotel.col.first'),field:(row:any)=>row.HotelName}, { 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: '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')}`} { 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,
showHotelDetails: false, showHotelDetails: false,
showHotelDetailId: 0 showHotelDetailId: 0
...@@ -199,11 +200,11 @@ export default defineComponent({ ...@@ -199,11 +200,11 @@ export default defineComponent({
y.PriceList.forEach((z: any) => { y.PriceList.forEach((z: any) => {
z.ins = methods.getDateTypeById(z.InventoryType) z.ins = methods.getDateTypeById(z.InventoryType)
}) })
let cd=new Date(y.DateStr) let cd = new Date(y.DateStr)
y.FormatDate=`${date.formatDate(cd, 'MM/DD')} (${getDayOfWeek(date.getDayOfWeek(cd))})` y.FormatDate = `${date.formatDate(cd, 'MM/DD')} (${getDayOfWeek(date.getDayOfWeek(cd))})`
}) })
if($q.platform.is.mobile){ if ($q.platform.is.mobile) {
x.LowerPrice=methods.calcLowerPrice(x) x.LowerPrice = methods.calcLowerPrice(x)
} }
}) })
...@@ -237,28 +238,28 @@ export default defineComponent({ ...@@ -237,28 +238,28 @@ export default defineComponent({
getDateTypeById(id: number) { getDateTypeById(id: number) {
return data.dateTypes.find(x => x.id == id) return data.dateTypes.find(x => x.id == id)
}, },
calcLowerPrice(hotel:any){ calcLowerPrice(hotel: any) {
let lower=0 let lower = 0
hotel.subList.forEach((x:any)=>{ hotel.subList.forEach((x: any) => {
if(x.PriceList &&x.PriceList.length>0){ if (x.PriceList && x.PriceList.length > 0) {
x.PriceList.forEach((y:any)=>{ x.PriceList.forEach((y: any) => {
if(y.CostPrice>lower) lower= y.CostPrice if (y.CostPrice > lower) lower = y.CostPrice
}) })
} }
}) })
return lower return lower
}, },
viewHotelPriceListHandler(row:any){ viewHotelPriceListHandler(row: any) {
data.queryHotelObj = row data.queryHotelObj = row
data.showPriceList = true data.showPriceList = true
}, },
showOrderSubmitHandler(row:any,col:any){ showOrderSubmitHandler(row: any, col: any) {
data.orderSubmitObj = row data.orderSubmitObj = row
data.orderSubmitItemObj = col data.orderSubmitItemObj = col
data.showOrderPreview = true data.showOrderPreview = true
}, },
showHotelDetailHandler(hotelId:number){ showHotelDetailHandler(hotelId: number) {
data.showHotelDetailId=hotelId data.showHotelDetailId = hotelId
data.showHotelDetails = true data.showHotelDetails = true
} }
} }
...@@ -270,24 +271,28 @@ export default defineComponent({ ...@@ -270,24 +271,28 @@ export default defineComponent({
</script> </script>
<style> <style>
.ListTable-title{ .ListTable-title {
position: relative !important; position: relative !important;
} }
.ListTable-title:hover .ListTable-show{
.ListTable-title:hover .ListTable-show {
display: block; display: block;
} }
.ListTable-show{
.ListTable-show {
/* position: absolute; /* position: absolute;
left: 0; left: 0;
top:80px; top:80px;
z-index: 9999; */ z-index: 9999; */
/* display: none; */ /* display: none; */
} }
.cos-item-icon { .cos-item-icon {
width: 14px; width: 14px;
height: 14px; height: 14px;
border-radius: 4px; border-radius: 4px;
} }
.td-item { .td-item {
width: 100%; width: 100%;
height: 35px; height: 35px;
...@@ -298,12 +303,15 @@ export default defineComponent({ ...@@ -298,12 +303,15 @@ export default defineComponent({
text-align: center; text-align: center;
border-bottom: 1px solid rgba(0, 0, 0, 0.12); border-bottom: 1px solid rgba(0, 0, 0, 0.12);
} }
.td-item:last-child { .td-item:last-child {
border-bottom: none; border-bottom: none;
} }
.hotel-table .q-table td { .hotel-table .q-table td {
padding: 0 !important; padding: 0 !important;
} }
/* .td-item.cursor-pointer:hover{ /* .td-item.cursor-pointer:hover{
color: var(--q-primary) !important; color: var(--q-primary) !important;
} */ } */
......
<template> <template>
<q-card flat class="q-pa-lg" style="shadow: 0px 0px 50px 0px rgba(82, 63, 105, 0.15);" :style="{'width':$q.platform.is.desktop?'50vw':'100vw'}"> <q-card flat class="q-pa-lg" style="shadow: 0px 0px 50px 0px rgba(82, 63, 105, 0.15);"
:style="{ 'width': $q.platform.is.desktop ? '50vw' : '100vw' }">
<div class="q-mb-xs"> <div class="q-mb-xs">
<div class="" :class="{'row items':$q.platform.is.desktop}"> <div class="" :class="{ 'row items': $q.platform.is.desktop }">
<span class="text-primary text-h6 col">{{ parameters.HotelName }}</span> <span class="text-primary text-h6 col">{{ parameters.HotelName }}</span>
<div class="f12" :class="{'q-mt-sm':$q.platform.is.mobile}"> <div class="f12" :class="{ 'q-mt-sm': $q.platform.is.mobile }">
<span class="q-mr-md"> <span class="q-mr-md">
<q-icon name="check" size="18px" color="primary" v-if="parameters.PriceIsBreakfast==1" /> <q-icon name="check" size="18px" color="primary" v-if="parameters.PriceIsBreakfast == 1" />
<q-icon name="close" size="18px" color="negative" v-else /> <q-icon name="close" size="18px" color="negative" v-else />
{{$t('dinner.a')}} {{ $t('dinner.a') }}
</span> </span>
<span class=""> <span class="">
<q-icon name="check" size="18px" color="primary" v-if="parameters.PriceIsDinner==1" /> <q-icon name="check" size="18px" color="primary" v-if="parameters.PriceIsDinner == 1" />
<q-icon name="close" size="18px" color="negative" v-else /> <q-icon name="close" size="18px" color="negative" v-else />
{{$t('dinner.c')}} {{ $t('dinner.c') }}
</span> </span>
</div> </div>
</div> </div>
...@@ -26,30 +27,36 @@ ...@@ -26,30 +27,36 @@
</q-popup-proxy> --> </q-popup-proxy> -->
</q-field> </q-field>
<span class="text-grey-6 f12"> <span class="text-grey-6 f12">
{{$t('hotel.inhouseDays')}} {{ $t('hotel.inhouseDays') }}
<span class="din text-yellow-10">{{joinHouse.days}}</span> <span class="din text-yellow-10">{{ joinHouse.days }}</span>
{{$t('unit.night')}} {{ $t('unit.night') }}
</span> </span>
</div> </div>
</div> </div>
<div class="f12 text-negative q-mb-md">{{ $t('hotel.waringTips') }}</div> <div class="f12 text-negative q-mb-md">{{ $t('hotel.waringTips') }}</div>
<div class="rounded-borders" style="max-height: 35vh; overflow-y: auto" :class="{'bg-grey-1':$q.platform.is.desktop,'q-px-md':$q.platform.is.desktop,'q-py-sm':$q.platform.is.desktop,}"> <div class="rounded-borders" style="max-height: 35vh; overflow-y: auto"
:class="{ 'bg-grey-1': $q.platform.is.desktop, 'q-px-md': $q.platform.is.desktop, 'q-py-sm': $q.platform.is.desktop, }">
<template v-for="(item, index) in parameters.DetailList"> <template v-for="(item, index) in parameters.DetailList">
<div class="row no-wrap items-center q-py-sm" :style="{ 'border-top': index > 0 && !item.Tips && $q.platform.is.desktop ? '1px dashed #ddd' : '' }" <div class="row no-wrap items-center q-py-sm"
:class="{'HotelTableOperation':$q.platform.is.mobile,'q-px-md':$q.platform.is.mobile,'q-mb-md':$q.platform.is.mobile}"> :style="{ 'border-top': index > 0 && !item.Tips && $q.platform.is.desktop ? '1px dashed #ddd' : '' }"
<div :class="{'row':$q.platform.is.desktop,'col-5':$q.platform.is.desktop,'q-pr-md':$q.platform.is.mobile,'col-6':$q.platform.is.mobile,'column':$q.platform.is.mobile}"> :class="{ 'HotelTableOperation': $q.platform.is.mobile, 'q-px-md': $q.platform.is.mobile, 'q-mb-md': $q.platform.is.mobile }">
<div :class="{'q-pr-md':$q.platform.is.desktop,'col-4':$q.platform.is.desktop,}"> <div
:class="{ 'row': $q.platform.is.desktop, 'col-5': $q.platform.is.desktop, 'q-pr-md': $q.platform.is.mobile, 'col-6': $q.platform.is.mobile, 'column': $q.platform.is.mobile }">
<div :class="{ 'q-pr-md': $q.platform.is.desktop, 'col-4': $q.platform.is.desktop, }">
<div class="f12">{{ item.RoomName }}</div> <div class="f12">{{ item.RoomName }}</div>
</div> </div>
<div class="text-negative f12" :class="{'col-6':$q.platform.is.desktop,'q-pt-sm':$q.platform.is.mobile}"> <div class="text-negative f12" :class="{ 'col-6': $q.platform.is.desktop, 'q-pt-sm': $q.platform.is.mobile }">
<span class="fz10"></span> <span class="fz10"></span>
<span class="din">{{ item.UPriceFormat }}</span> <span class="din">{{ item.UPriceFormat }}</span>
<span class="text-dark" style="font-size: 12px">/{{ $t('unit.ren') }}</span> <span class="text-dark" style="font-size: 12px">/{{ $t('unit.ren') }}</span>
</div> </div>
</div> </div>
<div :class="{'row':$q.platform.is.desktop,'col':$q.platform.is.desktop,'q-pl-md':$q.platform.is.desktop,'column':$q.platform.is.mobile}"> <div
<div :class="{'col-7':$q.platform.is.desktop}"> :class="{ 'row': $q.platform.is.desktop, 'col': $q.platform.is.desktop, 'q-pl-md': $q.platform.is.desktop, 'column': $q.platform.is.mobile }">
<q-input style="width: 100%" @update:model-value="changePeople" v-model="item.PeopleNumber" class="col" :class="{'q-mr-md':$q.platform.is.desktop,'q-px-sm':$q.platform.is.desktop,'q-pl-sm':$q.platform.is.desktop,}" mask="#" reverse-fill-mask dense standout :label="$t('hotel.shopping.peopleNum')"> <div :class="{ 'col-7': $q.platform.is.desktop }">
<q-input style="width: 100%" @update:model-value="changePeople" v-model="item.PeopleNumber" class="col"
:class="{ 'q-mr-md': $q.platform.is.desktop, 'q-px-sm': $q.platform.is.desktop, 'q-pl-sm': $q.platform.is.desktop, }"
mask="#" reverse-fill-mask dense standout :label="$t('hotel.shopping.peopleNum')">
<template v-slot:prepend> <template v-slot:prepend>
<q-btn color="primary" size="sm" class="q-px-none" flat icon="remove" @click="addPeople(item, 0)" /> <q-btn color="primary" size="sm" class="q-px-none" flat icon="remove" @click="addPeople(item, 0)" />
</template> </template>
...@@ -58,16 +65,17 @@ ...@@ -58,16 +65,17 @@
</template> </template>
</q-input> </q-input>
</div> </div>
<div :class="{'col':$q.platform.is.desktop,'text-center':$q.platform.is.desktop,'text-right':$q.platform.is.mobile,}"> <div
:class="{ 'col': $q.platform.is.desktop, 'text-center': $q.platform.is.desktop, 'text-right': $q.platform.is.mobile, }">
<span class="f12 text-grey-6"> <span class="f12 text-grey-6">
{{$t('hotel.yg')}}<span class="din text-yellow-10">{{item.Number}}</span> {{$t('unit.jf')}} {{ $t('hotel.yg') }}<span class="din text-yellow-10">{{ item.Number }}</span> {{ $t('unit.jf') }}
</span> </span>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
</div> </div>
<div class="q-pt-md" :class="{'row':$q.platform.is.desktop,'items-center':$q.platform.is.desktop,'justify-between':$q.platform.is.desktop,'column':$q.platform.is.mobile} <div class="q-pt-md" :class="{ 'row': $q.platform.is.desktop, 'items-center': $q.platform.is.desktop, 'justify-between': $q.platform.is.desktop, 'column': $q.platform.is.mobile }
"> ">
<div> <div>
<div class="text-grey-6 fz12 row items-center"> <div class="text-grey-6 fz12 row items-center">
...@@ -84,14 +92,16 @@ ...@@ -84,14 +92,16 @@
<span>{{ $t('hotel.shopping.between') }}</span> <span>{{ $t('hotel.shopping.between') }}</span>
</div> </div>
</div> </div>
<div class="q-mt-sm rounded-borders bg-orange-1 text-orange-10 f12 q-pa-sm" v-if="(total-onlyNum)>0"> <div class="q-mt-sm rounded-borders bg-orange-1 text-orange-10 f12 q-pa-sm" v-if="(total - onlyNum) > 0">
{{$t('hotel.outbind')}} {{ $t('hotel.outbind') }}
</div> </div>
</div> </div>
<div class="row" :class="{'items-center':$q.platform.is.desktop,'q-pl-md':$q.platform.is.desktop,'justify-end':$q.platform.is.mobile,'q-pt-md':$q.platform.is.mobile}"> <div class="row"
:class="{ 'items-center': $q.platform.is.desktop, 'q-pl-md': $q.platform.is.desktop, 'justify-end': $q.platform.is.mobile, 'q-pt-md': $q.platform.is.mobile }">
<div> <div>
<q-btn flat dense color="dark" :label="$t('close')" class="q-mr-sm" @click="editor={}" v-close-popup/> <q-btn flat dense color="dark" :label="$t('close')" class="q-mr-sm" @click="editor = {}" v-close-popup />
<q-btn unelevated dense color="negative" :disable="total==0" icon="shopping_cart" :label="$t('hotel.car.addShopping')" @click="join" /> <q-btn unelevated dense color="negative" :disable="total == 0" icon="shopping_cart"
:label="$t('hotel.car.addShopping')" @click="join" />
</div> </div>
</div> </div>
</div> </div>
...@@ -116,7 +126,7 @@ export default defineComponent({ ...@@ -116,7 +126,7 @@ export default defineComponent({
require: false require: false
} }
}, },
emits:['close'], emits: ['close'],
setup(props, context) { setup(props, context) {
const { t } = useI18n() const { t } = useI18n()
const qDateProxyOpera = ref<any>(null) const qDateProxyOpera = ref<any>(null)
...@@ -142,10 +152,10 @@ export default defineComponent({ ...@@ -142,10 +152,10 @@ export default defineComponent({
Money: 0, Money: 0,
DetailList: [] as Array<any>, DetailList: [] as Array<any>,
Remark: '', Remark: '',
TaxesPrice:0, TaxesPrice: 0,
PriceInTangTax:0, PriceInTangTax: 0,
PriceIsBreakfast:0, PriceIsBreakfast: 0,
PriceIsDinner:0 PriceIsDinner: 0
}, },
total: 0, total: 0,
joinHouse: { joinHouse: {
...@@ -180,53 +190,53 @@ export default defineComponent({ ...@@ -180,53 +190,53 @@ export default defineComponent({
} else if (type == 0 && item.PeopleNumber > 1) { } else if (type == 0 && item.PeopleNumber > 1) {
item.PeopleNumber-- item.PeopleNumber--
} }
item.PeopleNumber=item.PeopleNumber!=''?item.PeopleNumber:'0' item.PeopleNumber = item.PeopleNumber != '' ? item.PeopleNumber : '0'
methods.calculateNum() methods.calculateNum()
}, },
changePeople(val:string){ changePeople(val: string) {
setTimeout(()=>{ setTimeout(() => {
methods.calculateNum() methods.calculateNum()
},50) }, 50)
}, },
// 计算房间数量 // 计算房间数量
calculateNum() { calculateNum() {
data.total = 0 data.total = 0
data.sumPeople = 0 data.sumPeople = 0
data.parameters.DetailList.forEach(item => { data.parameters.DetailList.forEach(item => {
item.Number = Math.ceil(parseFloat(item.PeopleNumber) / parseFloat(item.LimitGuestNum)) item.Number = Math.ceil(parseFloat(item.PeopleNumber) / parseFloat(item.LimitGuestNum))
data.total += item.Number data.total += item.Number
data.sumPeople += parseInt(item.PeopleNumber) data.sumPeople += parseInt(item.PeopleNumber)
}) })
}, },
join(){ join() {
const temp= JSON.parse(JSON.stringify(data.parameters)) const temp = JSON.parse(JSON.stringify(data.parameters))
temp.Money=0 temp.Money = 0
temp.Total=data.total temp.Total = data.total
temp.SumPeople = data.sumPeople temp.SumPeople = data.sumPeople
temp.DetailList = temp.DetailList.filter(((x:any)=>x.PeopleNumber>0)) temp.DetailList = temp.DetailList.filter(((x: any) => x.PeopleNumber > 0))
temp.DetailList.forEach((x:any) => { temp.DetailList.forEach((x: any) => {
temp.Money+=(x.PeopleNumber*(x.Unit_Price+x.TaxesPrice+x.PriceInTangTax)) temp.Money += (x.PeopleNumber * (x.Unit_Price + x.TaxesPrice + x.PriceInTangTax))
}); });
let existsIndex = cars.value.findIndex((x:any)=>x.Date == temp.Date) let existsIndex = cars.value.findIndex((x: any) => x.Date == temp.Date)
let exists = existsIndex==-1?null:cars.value[existsIndex] let exists = existsIndex == -1 ? null : cars.value[existsIndex]
if(exists){ if (exists) {
let existsHotel = exists.Hotels.findIndex((h:any)=>h.HotelId==temp.HotelId) let existsHotel = exists.Hotels.findIndex((h: any) => h.HotelId == temp.HotelId)
if(existsHotel!=-1) exists.Hotels.splice(existsHotel,1) if (existsHotel != -1) exists.Hotels.splice(existsHotel, 1)
}else{ } else {
exists = { exists = {
Date:temp.Date, Date: temp.Date,
Hotels:[] as Array<any> Hotels: [] as Array<any>
} }
cars.value.push(exists) cars.value.push(exists)
} }
exists.Hotels.push(temp) exists.Hotels.push(temp)
cars.value.sort((x:any,y:any)=>{ cars.value.sort((x: any, y: any) => {
return new Date(x.Date).getTime()-new Date(y.Date).getTime() return new Date(x.Date).getTime() - new Date(y.Date).getTime()
}) })
HotelLength.value = cars.value.length HotelLength.value = cars.value.length
message.successMsg(t('success')) message.successMsg(t('success'))
editor.value={} editor.value = {}
context.emit('close') context.emit('close')
}, },
// 组装可选房间 // 组装可选房间
...@@ -244,7 +254,7 @@ export default defineComponent({ ...@@ -244,7 +254,7 @@ export default defineComponent({
data.parameters.Date = hotel.DateStr data.parameters.Date = hotel.DateStr
data.parameters.RemainingInventory = hotel.RemainingInventory data.parameters.RemainingInventory = hotel.RemainingInventory
data.parameters.TaxesPrice = tempPrice.TaxesPrice data.parameters.TaxesPrice = tempPrice.TaxesPrice
data.parameters.PriceInTangTax= tempPrice.PriceInTangTax data.parameters.PriceInTangTax = tempPrice.PriceInTangTax
data.parameters.PriceIsBreakfast = tempPrice.PriceIsBreakfast data.parameters.PriceIsBreakfast = tempPrice.PriceIsBreakfast
data.parameters.PriceIsDinner = tempPrice.PriceIsDinner data.parameters.PriceIsDinner = tempPrice.PriceIsDinner
...@@ -288,38 +298,38 @@ export default defineComponent({ ...@@ -288,38 +298,38 @@ export default defineComponent({
optionsFn(cd: any) { optionsFn(cd: any) {
return cd >= date.formatDate(date.addToDate(new Date(), { days: 7 }), 'YYYY/MM/DD') return cd >= date.formatDate(date.addToDate(new Date(), { days: 7 }), 'YYYY/MM/DD')
}, },
setInjectHandler(){ setInjectHandler() {
data.parameters = editor.value data.parameters = editor.value
methods.calculateNum() methods.calculateNum()
methods.setDateRange() methods.setDateRange()
} }
} }
if(props.HotelRow && props.hotelInfor){ if (props.HotelRow && props.hotelInfor) {
data.HotelRow = props.HotelRow data.HotelRow = props.HotelRow
data.hotelInfor = props.hotelInfor data.hotelInfor = props.hotelInfor
methods.setList() methods.setList()
}else{ } else {
methods.setInjectHandler() methods.setInjectHandler()
} }
onMounted(()=>{ onMounted(() => {
if(data.hotelInfor.RemainingInventory){ if (data.hotelInfor.RemainingInventory) {
data.onlyNum = data.hotelInfor.RemainingInventory data.onlyNum = data.hotelInfor.RemainingInventory
}else{ } else {
data.onlyNum = editor.value.RemainingInventory data.onlyNum = editor.value.RemainingInventory
} }
}) })
return { ...toRefs(data),editor,HotelLength, ...methods } return { ...toRefs(data), editor, HotelLength, ...methods }
} }
}) })
</script> </script>
<style> <style>
.HotelTableOperation{ .HotelTableOperation {
/* box-shadow: 0 1px 3px #0003, 0 1px 1px #00000024, 0 2px 1px -1px #0000001f; */ /* box-shadow: 0 1px 3px #0003, 0 1px 1px #00000024, 0 2px 1px -1px #0000001f; */
border-radius: 10px; border-radius: 10px;
vertical-align: top; vertical-align: top;
background: rgba(225,245,254,.7); background: rgba(225, 245, 254, .7);
position: relative; position: relative;
} }
</style> </style>
<template> <template>
<div> <div>
<q-card class="light-shadow q-pa-md bg-white rounded-borders q-mb-md" flat v-for="x in orders"> <q-card class="light-shadow q-pa-md bg-white rounded-borders q-mb-md" flat v-for="x in orders">
<div class="row items-center desktop-only"> <div class="row items-center desktop-only">
<div class="q-mr-md"> <div class="q-mr-md">
<q-btn :color="x.OrderType == 1 ? 'cyan' : 'negative'" unelevated disable size="sm" :label="`${x.OrderType == 1 ? $t('hotelorder.orderType.guest') : $t('hotelorder.orderType.tour')}`"></q-btn> <q-btn :color="x.OrderType == 1 ? 'cyan' : 'negative'" unelevated disable size="sm"
:label="`${x.OrderType == 1 ? $t('hotelorder.orderType.guest') : $t('hotelorder.orderType.tour')}`"></q-btn>
</div> </div>
<div class="f12 text-grey-6">{{ $t('hotelorder.search.orderNum') }}{{ x.OrderNo }}</div> <div class="f12 text-grey-6">{{ $t('hotelorder.search.orderNum') }}{{ x.OrderNo }}</div>
<div class="q-ml-md"> <div class="q-ml-md">
<q-btn color="dark" flat size="sm" :label="$t('hotelorder.copy')" v-if="copyId != x.OrderId" @click="setCopyHandler(x)" /> <q-btn color="dark" flat size="sm" :label="$t('hotelorder.copy')" v-if="copyId != x.OrderId"
@click="setCopyHandler(x)" />
<q-btn color="cyan" icon="check" outline size="sm" :label="$t('hotelorder.copyed')" v-else></q-btn> <q-btn color="cyan" icon="check" outline size="sm" :label="$t('hotelorder.copyed')" v-else></q-btn>
</div> </div>
<div class="col text-center f12 text-grey-6"> <div class="col text-center f12 text-grey-6">
<span v-if="x.OrderType == 1">{{ $t('hotelorder.search.contactInfo') }}{{ x.ContactName }}/{{ x.ContactNumber }}</span> <span v-if="x.OrderType == 1">{{ $t('hotelorder.search.contactInfo') }}{{ x.ContactName }}/{{
x.ContactNumber
}}</span>
<span v-else>{{ $t('hotelorder.search.tcNum') }}{{ x.TCNum }}</span> <span v-else>{{ $t('hotelorder.search.tcNum') }}{{ x.TCNum }}</span>
</div> </div>
<div class="f12 text-grey-6">{{ $t('hotelorder.createTime') }}{{ x.CreateTime }}</div> <div class="f12 text-grey-6">{{ $t('hotelorder.createTime') }}{{ x.CreateTime }}</div>
...@@ -23,7 +27,8 @@ ...@@ -23,7 +27,8 @@
<div class="mobile-only"> <div class="mobile-only">
<div class="row justify-between"> <div class="row justify-between">
<div class="q-mr-md"> <div class="q-mr-md">
<q-btn :color="x.OrderType == 1 ? 'cyan' : 'negative'" unelevated disable size="sm" :label="`${x.OrderType == 1 ? $t('hotelorder.orderType.guest') : $t('hotelorder.orderType.tour')}`"></q-btn> <q-btn :color="x.OrderType == 1 ? 'cyan' : 'negative'" unelevated disable size="sm"
:label="`${x.OrderType == 1 ? $t('hotelorder.orderType.guest') : $t('hotelorder.orderType.tour')}`"></q-btn>
</div> </div>
<div class="q-ml-md f12" :class="[x.typeInfo.Color]"> <div class="q-ml-md f12" :class="[x.typeInfo.Color]">
<q-icon :name="x.typeInfo.Icon" /> <q-icon :name="x.typeInfo.Icon" />
...@@ -40,7 +45,9 @@ ...@@ -40,7 +45,9 @@
</div> </div>
</div> </div>
<div class="f12 text-grey-6"> <div class="f12 text-grey-6">
<span v-if="x.OrderType == 1">{{ $t('hotelorder.search.contactInfo') }}{{ x.ContactName }}/{{ x.ContactNumber }}</span> <span v-if="x.OrderType == 1">{{ $t('hotelorder.search.contactInfo') }}{{ x.ContactName }}/{{
x.ContactNumber
}}</span>
<span v-else>{{ $t('hotelorder.search.tcNum') }}{{ x.TCNum }}</span> <span v-else>{{ $t('hotelorder.search.tcNum') }}{{ x.TCNum }}</span>
</div> </div>
<div class="f12 text-grey-6">{{ $t('hotelorder.createTime') }}{{ x.CreateTime }}</div> <div class="f12 text-grey-6">{{ $t('hotelorder.createTime') }}{{ x.CreateTime }}</div>
...@@ -48,7 +55,8 @@ ...@@ -48,7 +55,8 @@
</div> </div>
<div class="q-mt-md row"> <div class="q-mt-md row">
<q-table separator="cell" :hide-bottom="!x.Remark" :pagination="{rowsPerPage:100}" dense :rows="x.DetailList" bordered :columns="cols" class="sticky-rightrowspan-column-table light-border col no-shadow"> <q-table separator="cell" :hide-bottom="!x.Remark" :pagination="{ rowsPerPage: 100 }" dense :rows="x.DetailList"
bordered :columns="cols" class="sticky-rightrowspan-column-table light-border col no-shadow">
<template v-slot:header-cell-Room="props"> <template v-slot:header-cell-Room="props">
<q-th :props="props"> <q-th :props="props">
<div class="row items-center"> <div class="row items-center">
...@@ -62,7 +70,8 @@ ...@@ -62,7 +70,8 @@
<q-td :props="props"> <q-td :props="props">
<div class="room-item f12 text-grey-6" v-for="x in props.row.RoomList"> <div class="room-item f12 text-grey-6" v-for="x in props.row.RoomList">
<span class="q-mr-md"> {{ x.RoomInfo.TypeName }}: {{ x.Number }} {{ $t('unit.jian') }} </span> <span class="q-mr-md"> {{ x.RoomInfo.TypeName }}: {{ x.Number }} {{ $t('unit.jian') }} </span>
<span class="q-mr-md"> {{ $t('hotelorder.people') }}: {{ x.PeopleNumber ?? 1 }} {{ $t('unit.ren') }} </span> <span class="q-mr-md"> {{ $t('hotelorder.people') }}: {{ x.PeopleNumber ?? 1 }} {{ $t('unit.ren') }}
</span>
<span class="q-mr-md"> {{ $t('hotelorder.unitPrice') }}: {{ x.Unit_Price ?? 1 }} </span> <span class="q-mr-md"> {{ $t('hotelorder.unitPrice') }}: {{ x.Unit_Price ?? 1 }} </span>
<span class="q-mr-md"> {{ $t('hotelorder.xj') }}: {{ x.Money ?? 1 }} </span> <span class="q-mr-md"> {{ $t('hotelorder.xj') }}: {{ x.Money ?? 1 }} </span>
</div> </div>
...@@ -81,11 +90,12 @@ ...@@ -81,11 +90,12 @@
<template v-slot:body-cell-HandFittingFee="props"> <template v-slot:body-cell-HandFittingFee="props">
<q-td :props="props" :colspan="x.DetailList.length" v-if="props.rowIndex == 0"> <q-td :props="props" :colspan="x.DetailList.length" v-if="props.rowIndex == 0">
{{ moneyFormat(x.HandFittingFee) }} {{ moneyFormat(x.HandFittingFee) }}
<div class="q-mt-sm" v-if="x.OrderStatus==2"> <div class="q-mt-sm" v-if="x.OrderStatus == 2">
<q-btn size="sm" dense outline color="primary" v-if="x.ContractUrl"> <q-btn size="sm" dense outline color="primary" v-if="x.ContractUrl">
<a class="text-primary" style="text-decoration:none" :href="x.ContractUrl">{{$t('v101.downloadHands')}}</a> <a class="text-primary" style="text-decoration:none"
:href="x.ContractUrl">{{ $t('v101.downloadHands') }}</a>
</q-btn> </q-btn>
<span class="text-grey-500 f12">{{$t('v101.noneHands')}}</span> <span class="text-grey-500 f12">{{ $t('v101.noneHands') }}</span>
</div> </div>
</q-td> </q-td>
</template> </template>
...@@ -96,38 +106,47 @@ ...@@ -96,38 +106,47 @@
</q-td> </q-td>
</template> </template>
<template v-slot:bottom> <template v-slot:bottom>
<div class="msl text-negative">{{$t('v101.hotelRemark')}}{{x.Remark}}</div> <div class="msl text-negative">{{ $t('v101.hotelRemark') }}{{ x.Remark }}</div>
</template> </template>
</q-table> </q-table>
</div> </div>
<div class="q-mt-md" v-if="x.OrderStatus != 3" :class="{ row: $q.platform.is.desktop, 'column reverse': $q.platform.is.mobile }"> <div class="q-mt-md" v-if="x.OrderStatus != 3"
<div class="pay row text-grey rounded-borders q-pa-md" v-if="$q.platform.is.desktop || ($q.platform.is.mobile && expendsOrderId == x.OrderId)" :class="{ 'bg-grey-2': $q.platform.is.mobile }"> :class="{ row: $q.platform.is.desktop, 'column reverse': $q.platform.is.mobile }">
<svg-icon color=" svg-red" icon="Code/Warning-1-circle.svg" :size="16" v-if="$q.platform.is.desktop"></svg-icon> <div class="pay row text-grey rounded-borders q-pa-md"
v-if="$q.platform.is.desktop || ($q.platform.is.mobile && expendsOrderId == x.OrderId)"
:class="{ 'bg-grey-2': $q.platform.is.mobile }">
<svg-icon color=" svg-red" icon="Code/Warning-1-circle.svg" :size="16"
v-if="$q.platform.is.desktop"></svg-icon>
<div class="q-ml-sm"> <div class="q-ml-sm">
<div class="q-mb-sm" v-if="x.CustomerPayType == 2 || x.CustomerPayType == 3"> <div class="q-mb-sm" v-if="x.CustomerPayType == 2 || x.CustomerPayType == 3">
<div class="f12"> <div class="f12">
{{$t('hotelorder.pay.t1')}} {{ $t('hotelorder.pay.t1') }}
<span class="text-orange">{{x.PaymentDate}}</span> <span class="text-orange">{{ x.PaymentDate }}</span>
{{$t('hotelorder.pay.t11')}} {{ $t('hotelorder.pay.t11') }}
<span class="text-orange">{{x.FinalPaymentDate}}</span> <span class="text-orange">{{ x.FinalPaymentDate }}</span>
{{$t('hotelorder.pay.t12')}} {{ $t('hotelorder.pay.t12') }}
</div> </div>
<q-btn dense outline color="accent" size="sm" class="q-mt-sm" :label="$t('hotelorder.payinfo')" @click="ViewPayment"></q-btn> <q-btn dense outline color="accent" size="sm" class="q-mt-sm" :label="$t('hotelorder.payinfo')"
@click="ViewPayment"></q-btn>
<!-- <q-btn dense unelevated color="accent" size="sm" class="q-mt-sm q-ml-sm" :label="$t('hotelorder.sendpay')"></q-btn> --> <!-- <q-btn dense unelevated color="accent" size="sm" class="q-mt-sm q-ml-sm" :label="$t('hotelorder.sendpay')"></q-btn> -->
</div> </div>
<div v-if="x.CustomerPayType == 1 || x.CustomerPayType == 3"> <div v-if="x.CustomerPayType == 1 || x.CustomerPayType == 3">
<div class="f12"> <div class="f12">
{{$t('hotelorder.pay.t2')}} {{ $t('hotelorder.pay.t2') }}
<span class="text-negative">{{x.UploadGuestDate }}</span> <span class="text-negative">{{ x.UploadGuestDate }}</span>
{{$t('hotelorder.pay.t21')}} {{ $t('hotelorder.pay.t21') }}
</div> </div>
<div class="row items-center f12 q-mt-sm"> <div class="row items-center f12 q-mt-sm">
<div class="text-accent q-mr-md" v-if="x.GuestFileList.length>0">{{x.GuestFileList[0].split('/').at(-1)}}</div> <div class="text-accent q-mr-md" v-if="x.GuestFileList.length > 0">
<q-btn dense unelevated color="primary" size="sm" class="q-mr-sm" v-if="x.GuestFileList.length>0"> {{ x.GuestFileList[0].split('/').at(-1) }}</div>
<a class="text-white" style="text-decoration:none" :href="x.GuestFileList[0]">{{$t('upload.down')}}</a> <q-btn dense unelevated color="primary" size="sm" class="q-mr-sm" v-if="x.GuestFileList.length > 0">
<a class="text-white" style="text-decoration:none"
:href="x.GuestFileList[0]">{{ $t('upload.down') }}</a>
</q-btn> </q-btn>
<n-upload class="col" :action="importFileUrl" @finish="handleFinish" @change="uploadHandleChange(x.OrderId)" file-list-style="display:none"> <n-upload class="col" :action="importFileUrl" @finish="handleFinish"
<q-btn dense outline color="primary" size="sm" :label="x.GuestFileList.length==0?$t('hotelorder.uploadGuest'):$t('upload.reload')"></q-btn> @change="uploadHandleChange(x.OrderId)" file-list-style="display:none">
<q-btn dense outline color="primary" size="sm"
:label="x.GuestFileList.length == 0 ? $t('hotelorder.uploadGuest') : $t('upload.reload')"></q-btn>
</n-upload> </n-upload>
</div> </div>
</div> </div>
...@@ -138,10 +157,12 @@ ...@@ -138,10 +157,12 @@
<svg-icon color=" svg-red" icon="Code/Warning-1-circle.svg" :size="16"></svg-icon> <svg-icon color=" svg-red" icon="Code/Warning-1-circle.svg" :size="16"></svg-icon>
<span class="q-ml-sm">{{ $t('hotelorder.warn') }}</span> <span class="q-ml-sm">{{ $t('hotelorder.warn') }}</span>
</div> </div>
<q-btn color="grey" @click="setShowWarnHander(x.OrderId)" dense size="sm" flat :label="expendsOrderId == x.OrderId ? $t('expends.off') : $t('expends.on')" /> <q-btn color="grey" @click="setShowWarnHander(x.OrderId)" dense size="sm" flat
:label="expendsOrderId == x.OrderId ? $t('expends.off') : $t('expends.on')" />
</div> </div>
<div class="col desktop-only"></div> <div class="col desktop-only"></div>
<div class="rounded-borders bg-grey-2 q-pa-md" :class="{ 'q-mx-md': $q.platform.is.desktop, 'q-mt-md': $q.platform.is.mobile }"> <div class="rounded-borders bg-grey-2 q-pa-md"
:class="{ 'q-mx-md': $q.platform.is.desktop, 'q-mt-md': $q.platform.is.mobile }">
<div class="row items-center justify-between q-mb-sm q-pb-sm" style="border-bottom: 1px dashed #ddd"> <div class="row items-center justify-between q-mb-sm q-pb-sm" style="border-bottom: 1px dashed #ddd">
<div class="f12 text-grey">{{ $t('hotelorder.orderMoney') }}</div> <div class="f12 text-grey">{{ $t('hotelorder.orderMoney') }}</div>
<div class="dark q-ml-xl"> <div class="dark q-ml-xl">
...@@ -150,7 +171,8 @@ ...@@ -150,7 +171,8 @@
<span class="f12">{{ $t('unit.jp') }}</span> <span class="f12">{{ $t('unit.jp') }}</span>
</div> </div>
</div> </div>
<div class="row items-center justify-between q-mb-sm q-pb-sm" style="border-bottom: 1px dashed #ddd" v-if="x.CustomerPayType == 1 || x.CustomerPayType == 3"> <div class="row items-center justify-between q-mb-sm q-pb-sm" style="border-bottom: 1px dashed #ddd"
v-if="x.CustomerPayType == 1 || x.CustomerPayType == 3">
<div class="f12 text-grey">{{ $t('hotelorder.payType.t1') }}</div> <div class="f12 text-grey">{{ $t('hotelorder.payType.t1') }}</div>
<div class="dark"> <div class="dark">
<span class="f12">{{ moneyFormat(x.SelfPayMoney) }}</span> <span class="f12">{{ moneyFormat(x.SelfPayMoney) }}</span>
...@@ -165,8 +187,10 @@ ...@@ -165,8 +187,10 @@
</div> </div>
</div> </div>
</div> </div>
<div class="rounded-borders q-pa-sm justify-between" :class="{ column: $q.platform.is.desktop, 'row items-center': $q.platform.is.mobile, 'bg-green-1': x.OrderStatus != 1, 'bg-grey-2': x.OrderStatus == 1 }"> <div class="rounded-borders q-pa-sm justify-between"
<q-list dense v-if="x.OrderStatus == 1" :class="{ 'row items-center justify-between full-width': $q.platform.is.mobile }"> :class="{ column: $q.platform.is.desktop, 'row items-center': $q.platform.is.mobile, 'bg-green-1': x.OrderStatus != 1, 'bg-grey-2': x.OrderStatus == 1 }">
<q-list dense v-if="x.OrderStatus == 1"
:class="{ 'row items-center justify-between full-width': $q.platform.is.mobile }">
<q-item class="text-negative" clickable v-close-popup @click="cancelConfirmHandler(x.OrderId)"> <q-item class="text-negative" clickable v-close-popup @click="cancelConfirmHandler(x.OrderId)">
<q-item-section> <q-item-section>
<q-item-label>{{ $t('hotelorder.opera.cancel') }}</q-item-label> <q-item-label>{{ $t('hotelorder.opera.cancel') }}</q-item-label>
...@@ -191,22 +215,24 @@ ...@@ -191,22 +215,24 @@
<div v-else> <div v-else>
<div class="f12 text-green-4">{{ $t('hotelorder.payed') }}</div> <div class="f12 text-green-4">{{ $t('hotelorder.payed') }}</div>
<div class="text-subtitle1 din text-green-14"> <div class="text-subtitle1 din text-green-14">
{{x.OrderIncome.toFixed(2)}} {{ x.OrderIncome.toFixed(2) }}
<span class="text-green-4 f12">{{ $t('unit.jp') }}</span> <span class="text-green-4 f12">{{ $t('unit.jp') }}</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div v-if="x.OrderStatus == 3"> <div v-if="x.OrderStatus == 3">
<div class="q-mt-md q-pa-sm row items-center rounded-borders bg-orange-1" style="border-width: 0 5px; border-style: solid; border-color:#ffb74d;"> <div class="q-mt-md q-pa-sm row items-center rounded-borders bg-orange-1"
<div class="text-subtitle2 text-weight-bolder text-grey-900">{{$t('v101.cancelRemark')}}:</div> style="border-width: 0 5px; border-style: solid; border-color:#ffb74d;">
<div class="f12 text-grey-600 q-ml-sm col">{{x.CancelRemark?x.CancelRemark:$t('v101.selfCancle')}}</div> <div class="text-subtitle2 text-weight-bolder text-grey-900">{{ $t('v101.cancelRemark') }}:</div>
<div class="f12 text-grey-900">{{x.CancelEmpName}} {{x.CancelTime}}</div> <div class="f12 text-grey-600 q-ml-sm col">{{ x.CancelRemark ? x.CancelRemark : $t('v101.selfCancle') }}</div>
<div class="f12 text-grey-900">{{ x.CancelEmpName }} {{ x.CancelTime }}</div>
</div> </div>
</div> </div>
</q-card> </q-card>
<q-card class="light-shadow q-pa-md bg-white rounded-borders q-mb-md" v-if="pages.pageCount > 0" flat> <q-card class="light-shadow q-pa-md bg-white rounded-borders q-mb-md" v-if="pages.pageCount > 0" flat>
<q-pagination class="full-width justify-end" v-model="pages.pageIndex" color="primary" :max="pages.pageCount" :input="true" @update:model-value="changePageHandler" /> <q-pagination class="full-width justify-end" v-model="pages.pageIndex" color="primary" :max="pages.pageCount"
:input="true" @update:model-value="changePageHandler" />
</q-card> </q-card>
<q-inner-loading :showing="loading" :label="$t('loading')" label-class="text-grey-6 f12" /> <q-inner-loading :showing="loading" :label="$t('loading')" label-class="text-grey-6 f12" />
</div> </div>
...@@ -242,7 +268,7 @@ ...@@ -242,7 +268,7 @@
</div> </div>
</q-dialog> --> </q-dialog> -->
<q-dialog v-model="showBankAccount"> <q-dialog v-model="showBankAccount">
<q-card flat class="q-pa-md" style="background:#080655;width:30vw;min-width: 375px;" > <q-card flat class="q-pa-md" style="background:#080655;width:30vw;min-width: 375px;">
<div class="row items-end"> <div class="row items-end">
<img src="../../../../assets/images/green_pic.jpg" style="width:100px;" /> <img src="../../../../assets/images/green_pic.jpg" style="width:100px;" />
<div class="q-ml-md f12 text-grey-4 col text-right">水口支店 店番593</div> <div class="q-ml-md f12 text-grey-4 col text-right">水口支店 店番593</div>
...@@ -263,7 +289,8 @@ ...@@ -263,7 +289,8 @@
<div class="pf text-grey-1 text-weight-bolder f12" style="opacity:.5">滋賀県甲賀市水口町本綾野5-21 (0748-65-1011)</div> <div class="pf text-grey-1 text-weight-bolder f12" style="opacity:.5">滋賀県甲賀市水口町本綾野5-21 (0748-65-1011)</div>
</div> </div>
<div class="q-mt-md text-right"> <div class="q-mt-md text-right">
<q-btn color="white" outline class="q-px-lg" style="opacity:.6" dense :label="$t('hotelorder.copy')" @click="setCopyHandler(null,'行名:京都銀行\n支店名:水口支店 店番593\n口座種別:レギュラー口座\n口座番号: 593-1070078\n账户名:株式会社ピースインターナショナル\n银行住所:滋賀県甲賀市水口町本綾野5-21\n银行邮变:〒528-0037\n電話番号:0748-65-1011\n')"/> <q-btn color="white" outline class="q-px-lg" style="opacity:.6" dense :label="$t('hotelorder.copy')"
@click="setCopyHandler(null, '行名:京都銀行\n支店名:水口支店 店番593\n口座種別:レギュラー口座\n口座番号: 593-1070078\n账户名:株式会社ピースインターナショナル\n银行住所:滋賀県甲賀市水口町本綾野5-21\n银行邮变:〒528-0037\n電話番号:0748-65-1011\n')" />
</div> </div>
</q-card> </q-card>
</q-dialog> </q-dialog>
...@@ -281,7 +308,7 @@ import { useI18n } from 'vue-i18n' ...@@ -281,7 +308,7 @@ import { useI18n } from 'vue-i18n'
import svgIcon from '../../../global/svg-icon.vue' import svgIcon from '../../../global/svg-icon.vue'
import { copyToClipboard, useQuasar } from 'quasar' import { copyToClipboard, useQuasar } from 'quasar'
import { currentRouter } from '../../../../router' import { currentRouter } from '../../../../router'
import { UploadFileInfo,NTag,NUpload } from 'naive-ui' import { UploadFileInfo, NTag, NUpload } from 'naive-ui'
import { slice } from 'lodash' import { slice } from 'lodash'
export default defineComponent({ export default defineComponent({
...@@ -305,7 +332,7 @@ export default defineComponent({ ...@@ -305,7 +332,7 @@ export default defineComponent({
status: [] as Array<StandardStatus>, status: [] as Array<StandardStatus>,
rooms: [] as Array<RoomType>, rooms: [] as Array<RoomType>,
uploadOrderId: 0, uploadOrderId: 0,
showBankAccount:false, showBankAccount: false,
pages: { pages: {
pageIndex: 1, pageIndex: 1,
pageSize: 10, pageSize: 10,
...@@ -329,10 +356,10 @@ export default defineComponent({ ...@@ -329,10 +356,10 @@ export default defineComponent({
}) })
const methods = { const methods = {
goUrl(id: number){ goUrl(id: number) {
currentRouter.push('/hotel/offer/' + id) currentRouter.push('/hotel/offer/' + id)
}, },
ViewPayment(){ ViewPayment() {
data.showBankAccount = true data.showBankAccount = true
}, },
initOrders() { initOrders() {
...@@ -399,7 +426,7 @@ export default defineComponent({ ...@@ -399,7 +426,7 @@ export default defineComponent({
data.pages.pageIndex = n data.pages.pageIndex = n
methods.initOrders() methods.initOrders()
}, },
uploadHandleChange(orderId:number) { uploadHandleChange(orderId: number) {
data.uploadOrderId = orderId data.uploadOrderId = orderId
data.loading = true data.loading = true
}, },
...@@ -444,11 +471,11 @@ export default defineComponent({ ...@@ -444,11 +471,11 @@ export default defineComponent({
message.errorMsg(r.message) message.errorMsg(r.message)
}) })
}, },
setCopyHandler(order: any,ctx?:string) { setCopyHandler(order: any, ctx?: string) {
if(ctx){ if (ctx) {
data.copyId = -1 data.copyId = -1
copyToClipboard(ctx) copyToClipboard(ctx)
}else{ } else {
data.copyId = order.OrderId data.copyId = order.OrderId
copyToClipboard(order.OrderNo) copyToClipboard(order.OrderNo)
} }
...@@ -477,36 +504,44 @@ export default defineComponent({ ...@@ -477,36 +504,44 @@ export default defineComponent({
.light-border table th { .light-border table th {
border-color: #eee !important; border-color: #eee !important;
} }
.light-border .room-item { .light-border .room-item {
height: 28px; height: 28px;
line-height: 28px; line-height: 28px;
border-bottom: 1px solid #eee; border-bottom: 1px solid #eee;
} }
.light-border .room-item:last-child { .light-border .room-item:last-child {
border-bottom: none; border-bottom: none;
} }
.light-border .max-hotelname { .light-border .max-hotelname {
width: 140px; width: 140px;
height: 28px; height: 28px;
line-height: 28px; line-height: 28px;
} }
.orderListDialog-title{
.orderListDialog-title {
position: relative; position: relative;
} }
.orderListDialog-title span{
.orderListDialog-title span {
font-size: 20px; font-size: 20px;
} }
.orderListDialog-close{
.orderListDialog-close {
position: absolute; position: absolute;
right: 0; right: 0;
top: -10px; top: -10px;
font-size: 26px; font-size: 26px;
} }
.orderListDialog-bg{
.orderListDialog-bg {
background: #5098FF; background: #5098FF;
border-radius: 10px; border-radius: 10px;
} }
.orderListDialog-img{
.orderListDialog-img {
background: url('../../../../assets/images/wallet.png')no-repeat right #5098FF; background: url('../../../../assets/images/wallet.png')no-repeat right #5098FF;
background-size: 97px 100%; background-size: 97px 100%;
} }
......
<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" class="q-mr-md" v-model="search.OrderStatus" @update:model-value="setOrderStatus" dense :options="status" emit-value option-label="StatusName" option-value="StatusId" map-options :label="$t('hotelorder.search.status')" standout /> <q-select v-if="$q.platform.is.desktop" class="q-mr-md" v-model="search.OrderStatus"
<q-input v-if="$q.platform.is.desktop" class="q-mr-md" v-model="search.OrderNo" dense standout :label="$t('hotelorder.search.orderNum')" /> @update:model-value="setOrderStatus" dense :options="status" emit-value option-label="StatusName"
<q-field v-if="$q.platform.is.desktop" clearable v-model="dateRangeFormat" :label="$t('hotelorder.search.daterange')" standout class="col-2" style="min-width: 190px" dense> option-value="StatusId" map-options :label="$t('hotelorder.search.status')" standout />
<q-input v-if="$q.platform.is.desktop" class="q-mr-md" v-model="search.OrderNo" dense standout
:label="$t('hotelorder.search.orderNum')" />
<q-field v-if="$q.platform.is.desktop" clearable v-model="dateRangeFormat"
:label="$t('hotelorder.search.daterange')" standout class="col-2" style="min-width: 190px" dense>
<div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormat }}</div> <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="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 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> <svg-icon color="dark" icon="Text/Filter.svg" :tips="$t('morequery')" :size="20"></svg-icon>
<q-tooltip>{{ $t('morequery') }}</q-tooltip> <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"> <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-mt-md row"> <div class="q-mt-md row">
<q-input v-model="search.OrderNo" dense standout :label="$t('hotelorder.search.orderNum')" class="mobile-only col q-mr-md" /> <q-input v-model="search.OrderNo" dense standout :label="$t('hotelorder.search.orderNum')"
class="mobile-only col q-mr-md" />
<q-input v-model="search.OrderId" dense standout :label="$t('hotelorder.search.orderId')" class="col" /> <q-input v-model="search.OrderId" dense standout :label="$t('hotelorder.search.orderId')" class="col" />
</div> </div>
<div class="mobile-only q-mt-md"> <div class="mobile-only q-mt-md">
<q-field clearable v-model="dateRangeFormat" :label="$t('hotelorder.search.daterange')" standout style="min-width: 190px" dense> <q-field clearable v-model="dateRangeFormat" :label="$t('hotelorder.search.daterange')" standout
style="min-width: 190px" dense>
<div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormat }}</div> <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" @range-end="dateRangeHandler"></q-date> <q-date v-model="dateRange" :options="optionsFn" range mask="YYYY/MM/DD"
@range-end="dateRangeHandler"></q-date>
</q-popup-proxy> </q-popup-proxy>
</q-field> </q-field>
</div> </div>
<q-select class="q-mt-md" v-model="search.RoomType" dense :options="rooms" emit-value option-label="TypeName" option-value="TypeId" map-options :label="$t('hotelorder.search.roomType')" standout /> <q-select class="q-mt-md" v-model="search.RoomType" dense :options="rooms" emit-value option-label="TypeName"
<q-select class="q-mt-md" v-model="search.OrderType" dense :options="orderTypes" emit-value option-label="TypeName" option-value="TypeId" map-options :label="$t('hotelorder.search.orderType')" standout /> option-value="TypeId" map-options :label="$t('hotelorder.search.roomType')" standout />
<q-input v-model="search.TCNum" dense standout :label="$t('hotelorder.search.tcNum')" class="q-mt-md" v-if="search.OrderType==2"/> <q-select class="q-mt-md" v-model="search.OrderType" dense :options="orderTypes" emit-value
<q-input v-model="search.ContactName" :placeholder="$t('hotelorder.search.contactInfoHolder')" dense standout :label="$t('hotelorder.search.contactInfo')" class="q-mt-md" v-if="search.OrderType==1"/> option-label="TypeName" option-value="TypeId" map-options :label="$t('hotelorder.search.orderType')"
standout />
<q-input v-model="search.TCNum" dense standout :label="$t('hotelorder.search.tcNum')" class="q-mt-md"
v-if="search.OrderType == 2" />
<q-input v-model="search.ContactName" :placeholder="$t('hotelorder.search.contactInfoHolder')" dense standout
:label="$t('hotelorder.search.contactInfo')" class="q-mt-md" v-if="search.OrderType == 1" />
</q-card> </q-card>
</q-popup-proxy> </q-popup-proxy>
</q-btn> </q-btn>
<q-btn unelevated class="bg-blue-1 text-primary hover q-mr-md" :label="$t('hotelorder.recovery')" /> <q-btn unelevated class="bg-blue-1 text-primary hover q-mr-md" :label="$t('hotelorder.recovery')" />
<q-btn color="primary" unelevated :label="$t('query')" @click="setQueryHandler"/> <q-btn color="primary" unelevated :label="$t('query')" @click="setQueryHandler" />
</div> </div>
<div class="rounded-borders bg-white q-pa-sm q-mt-md mobile-only"> <div class="rounded-borders bg-white q-pa-sm q-mt-md mobile-only">
<q-tabs v-model="search.OrderStatus" class="text-cyan" dense> <q-tabs v-model="search.OrderStatus" class="text-cyan" dense>
<q-tab :name="x.StatusId" :label="x.StatusName" v-for="x in status" @click="setOrderStatus(x.StatusId)"/> <q-tab :name="x.StatusId" :label="x.StatusName" v-for="x in status" @click="setOrderStatus(x.StatusId)" />
</q-tabs> </q-tabs>
</div> </div>
</template> </template>
...@@ -50,7 +65,7 @@ import { DirtionmaryHelper } from '../../../../config/dictionary' ...@@ -50,7 +65,7 @@ import { DirtionmaryHelper } from '../../../../config/dictionary'
import { computed, defineComponent, inject, reactive, ref, toRefs } from 'vue' import { computed, defineComponent, inject, reactive, ref, toRefs } from 'vue'
import { OrderType, RoomType, StandardStatus } from '../../../../@types' import { OrderType, RoomType, StandardStatus } from '../../../../@types'
import { getHotelOrderStatus, getHotelOrderType, getHotelRoomType } from '../../../../utils/tools' import { getHotelOrderStatus, getHotelOrderType, getHotelRoomType } from '../../../../utils/tools'
import { date,useQuasar } from 'quasar' import { date, useQuasar } from 'quasar'
import svgIcon from '../../../global/svg-icon.vue' import svgIcon from '../../../global/svg-icon.vue'
export default defineComponent({ export default defineComponent({
...@@ -91,21 +106,21 @@ export default defineComponent({ ...@@ -91,21 +106,21 @@ export default defineComponent({
data.dateRangeFormat = `${search.StartTime} - ${search.EndTime} ` data.dateRangeFormat = `${search.StartTime} - ${search.EndTime} `
if (qDateProxy.value) qDateProxy.value.hide() if (qDateProxy.value) qDateProxy.value.hide()
}, },
setQueryHandler(){ setQueryHandler() {
realSearch.OrderId=search.OrderId realSearch.OrderId = search.OrderId
realSearch.RoomType=search.RoomType realSearch.RoomType = search.RoomType
realSearch.StartTime=search.StartTime realSearch.StartTime = search.StartTime
realSearch.EndTime=search.EndTime realSearch.EndTime = search.EndTime
realSearch.OrderStatus=search.OrderStatus realSearch.OrderStatus = search.OrderStatus
realSearch.OrderNo=search.OrderNo realSearch.OrderNo = search.OrderNo
realSearch.OrderType=search.OrderType realSearch.OrderType = search.OrderType
realSearch.TCNum=search.TCNum realSearch.TCNum = search.TCNum
realSearch.ContactName=search.ContactName realSearch.ContactName = search.ContactName
realSearch.ContactNumber=search.ContactName realSearch.ContactNumber = search.ContactName
console.log(realSearch) console.log(realSearch)
}, },
setOrderStatus(statusId:number){ setOrderStatus(statusId: number) {
realSearch.OrderStatus=statusId realSearch.OrderStatus = statusId
} }
} }
...@@ -116,11 +131,11 @@ export default defineComponent({ ...@@ -116,11 +131,11 @@ export default defineComponent({
if (search.StartTime.length > 0) setCnt++ if (search.StartTime.length > 0) setCnt++
if (search.OrderNo > 0) setCnt++ if (search.OrderNo > 0) setCnt++
} }
if (search.OrderId.length>0) setCnt++ if (search.OrderId.length > 0) setCnt++
if (search.RoomType > 0) setCnt++ if (search.RoomType > 0) setCnt++
if (search.OrderType > 0) setCnt++ if (search.OrderType > 0) setCnt++
if (search.OrderType == 1 && search.ContactName.length>0) setCnt++ if (search.OrderType == 1 && search.ContactName.length > 0) setCnt++
if (search.OrderType == 2 && search.TCNum.length>0) setCnt++ if (search.OrderType == 2 && search.TCNum.length > 0) setCnt++
return setCnt return setCnt
}) })
...@@ -135,4 +150,6 @@ export default defineComponent({ ...@@ -135,4 +150,6 @@ export default defineComponent({
}) })
</script> </script>
<style></style> <style>
</style>
<template>
<q-card flat class="" style="width: 60vw;">
<q-card-section class="q-pa-sm">
<div class="text-h6" v-if='search.Id == 0'>{{ $t('v102.vehicle.add') }}</div>
<div class="text-h6" v-if='search.Id != 0'>{{ $t('v102.vehicle.add2') }}</div>
</q-card-section>
<q-card-section>
<div class="flex2">
<q-input style="" v-if="$q.platform.is.desktop" class="q-mr-md" v-model="search.UseCompName" dense
standout :label="$t('v102.vehicle.title1')" />
<div class="flex2">
<q-input class="q-mr-md" v-model="search.UseName" dense standout
:label="$t('v102.vehicle.title2')" />
</div>
<div class="flex2" style="">
<q-input class="q-mr-md" v-model="search.PickUpInfo" dense standout
:label="$t('v102.vehicle.title3')" />
</div>
<div class="flex2">
<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')" />
</div>
<div class="q-my-md" style="margin-right: 15px;">
<q-field stack-label :label="$t('v102.vehicle.title7')" standout class="col-2"
style="min-width: 180px" 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"
@update:model-value="dateRangeHandler">
</q-date>
</q-popup-proxy>
</q-field>
</div>
 <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
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);
margin: auto;">
<tr>
<th width="15%" align="center" class="td-title">{{ $t('v102.vehicle.tatle.th1') }}</th>
<th width="10%" align="center" class="td-title">{{ $t('v102.vehicle.tatle.th2') }}</th>
<th width="30%" align="center" class="td-title">{{ $t('v102.vehicle.tatle.th3') }}</th>
<th width="45%" align="center" class="td-title">{{ $t('v102.vehicle.tatle.th4') }}</th>
</tr>
<template v-for="(item, i) in search.details" :key="i">
<tr>
<td>
{{ item.UseDate }}
</td>
<td>
DAY{{ item.DayNum }}
</td>
<td>
<div class="q-my-md">
<q-select style="width: 180px;" v-model="item.UseType" dense :options="listvehicle"
emit-value option-label="Name" option-value="Id" map-options clearable
:label="$t('v102.vehicle.tatle.th3')" standout />
</div>
<!-- 用车时间 -->
<div v-if="item.UseType == 3 || item.UseType == 4">
<q-input dense standout v-model="item.UseTime" mask="time"
:label="$t('v102.vehicle.title14')" style="width:180px;">
<template v-slot:append>
<q-icon name="access_time" class="cursor-pointer">
<q-popup-proxy transition-show="scale" transition-hide="scale">
<q-time v-model="item.UseTime">
<div class="row items-center justify-end">
<q-btn v-close-popup label="确定" color="primary" flat />
</div>
</q-time>
</q-popup-proxy>
</q-icon>
</template>
</q-input>
</div>
</td>
<td>
<div>
<q-input class="q-mr-md" style='' v-model="item.TripInfo" dense standout
:label="$t('v102.vehicle.tatle.th4')" />
</div>
</td>
</tr>
</template>
</table>
<!-- 表格 -->
</q-card-section>
<q-card-actions align="right" class="bg-white">
<q-btn flat dense color="dark" :label="$t('close')" class="q-mr-sm" @click="down()" v-close-popup />
<q-btn unelevated dense color="accent q-px-md" :label="$t('v102.to.m.s')" @click="join" />
</q-card-actions>
</q-card>
</template>
<script lang="ts">
import HotelService from '../../api/vehicle'
import { DirtionmaryHelper } from '../../config/dictionary'
import { defineComponent, toRefs, watch, reactive, inject, ref, onMounted } from 'vue'
import { ApiResult } from '../../@types/enumHelper'
import useScrollModule from '../../module/scrollbar/scrollModule'
import { date } from 'quasar'
import { useI18n } from 'vue-i18n'
import message from '../../utils/message'
export default defineComponent({
props: {
Id: {
type: Number,
default: 0,
require: true
}
},
setup(props, context) {
const qDateProxy = ref(null) as any
const { t } = useI18n()
const data = reactive({
loading: false,
search: {
Id: props.Id,
UseCompName: "",//订车单位
UseName: "",//订车人
PickUpInfo: "",//接机信息
GoFlightInfo: "",//去程航班
BackFlightInfo: "",//回程航班
PeopleNum: '',//用车人数
UseDayNum: null,//行程天数
StartDate: "",//开始日期
BusType: null,//用车类型(接口返下拉列表)
GuideInfo: "",//导游信息
TeamName: "",//团队信息
details: [
// {
// DayNum: null,//第几天
// UseDate: "",//日期
// UseType: null,//用车类型(接口返下拉列表)
// TripInfo: "",//行程信息
// }
]
},
vehicletop: [],//上面车辆
listvehicle: [],//车辆类型
OpenTime: '',
dateRangeFormat: '',
h: {} as any,
scrollStyle: {} as any
})
// 获取车型下拉
onMounted(() => {
methods.vehicleinit()
methods.vehicleList()
if (props.Id && props.Id > 0) {
methods.details()
}
})
const methods = {
// 获取修改详情
details() {
HotelService.VehicleDetails(props.Id)
.then(r => {
if (r.data.resultCode == ApiResult.SUCCESS) {
data.search.UseCompName = r.data.data.UseCompName
data.search.UseName = r.data.data.UseName
data.search.PickUpInfo = r.data.data.PickUpInfo
data.search.GoFlightInfo = r.data.data.GoFlightInfo
data.search.BackFlightInfo = r.data.data.BackFlightInfo
data.search.PeopleNum = r.data.data.PeopleNum
data.search.UseDayNum = r.data.data.UseDayNum
data.search.StartDate = r.data.data.StartDate.slice(0, 10)
data.search.BusType = r.data.data.BusType
data.search.GuideInfo = r.data.data.GuideInfo
data.search.TeamName = r.data.data.TeamName
data.search.details = r.data.data.BusDetailsList
message.errorMsg(r.data.message)
}
})
.catch(e => {
message.errorMsg(e.message)
})
},
// 获取车型下拉
vehicleinit() {
HotelService.TypeVehicle({})
.then(r => {
if (r.data.resultCode == ApiResult.SUCCESS) {
data.vehicletop = r.data.data
} else {
message.errorMsg(r.data.message)
}
})
.catch(e => {
message.errorMsg(e.message)
})
},
// 获取列表用车类型
vehicleList() {
HotelService.listTypeVehicle({})
.then(r => {
if (r.data.resultCode == ApiResult.SUCCESS) {
data.listvehicle = r.data.data
} else {
message.errorMsg(r.data.message)
}
})
.catch(e => {
message.errorMsg(e.message)
})
},
// 获取时间
getDay(set: any, day: any) {
var today = new Date(set);
var targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day;
today.setTime(targetday_milliseconds); //注意,这行是关键代码
var tYear = today.getFullYear();
var tMonth = today.getMonth();
var tDate = today.getDate();
tMonth = methods.doHandleMonth(tMonth + 1);
tDate = methods.doHandleMonth(tDate);
return tYear + "-" + tMonth + "-" + tDate;
},
doHandleMonth(month: any) {
var m = month;
if (month.toString().length == 1) {
m = "0" + month;
}
return m;
},
// 时间计算
getDiffDate(start: any, end: any) {
const startTime = methods.getDate(start);
const endTime = methods.getDate(end);
const dateArr = [];
while ((endTime.getTime() - startTime.getTime()) > 0) {
const year = startTime.getFullYear();
const month = startTime.getMonth().toString().length === 1 ? '0' + (parseInt(startTime.getMonth().toString(), 10) + 1) : (startTime.getMonth() + 1);
const day = startTime.getDate().toString().length === 1 ? '0' + startTime.getDate() : startTime.getDate();
dateArr.push(year + '-' + month + '-' + day);
startTime.setDate(startTime.getDate() + 1);
}
return dateArr;
},
getDate(datestr: any) {
const temp = datestr.split('-');
if (temp[1] === '01') {
temp[0] = parseInt(temp[0], 10) - 1;
temp[1] = '12';
} else {
temp[1] = parseInt(temp[1], 10) - 1;
}
const date = new Date(temp[0], temp[1], temp[2]);
return date;
},
// 点击时间选项
dateRangeHandler(e: any) {
// data.search.StartDate = data.search.StartDate
if (qDateProxy.value) {
qDateProxy.value.hide()
methods.checkInteger()
}
},
// 测试
// 天数失去焦点时间
checkInteger() {
let details2 = [] as any
let timelist = [] as any
if (data.search.UseDayNum && data.search.UseDayNum > 0) {
let list = methods.getDay(data.search.StartDate, data.search.UseDayNum)
if (list) {
timelist = methods.getDiffDate(data.search.StartDate, list)
if (timelist && timelist.length > 0) {
timelist.forEach((item: any, i: any) => {
details2.push({
DayNum: i + 1,
UseDate: item,//日期
UseType: null as any,//用车类型(接口返下拉列表)
UseTime: '',//接送机时间
TripInfo: "",//行程信息
})
})
data.search.details = details2
}
}
}
// console.log('时间差2', details2)
},
// 关闭
down() {
context.emit('close')
},
// 确定
join() {
HotelService.vehicletripbus(data.search)
.then(r => {
if (r.data.resultCode == ApiResult.SUCCESS) {
context.emit('refresh')
} else {
message.errorMsg(r.data.message)
}
})
.catch(e => {
message.errorMsg(e.message)
data.loading = false
})
},
optionsFn(cd: any) {
return cd >= date.formatDate(date.addToDate(new Date(), { days: 0 }), 'YYYY/MM/DD')
},
}
return { ...toRefs(data), ...methods, qDateProxy }
}
})
</script>
<style scoped>
.flex2 {
display: flex;
align-items: center;
}
.td-title {
font-size: 12px;
font-weight: 400;
color: #a8a8b3;
}
</style>
\ No newline at end of file
...@@ -414,7 +414,7 @@ export default { ...@@ -414,7 +414,7 @@ export default {
date: '2022/11/29', date: '2022/11/29',
content: '' content: ''
}, },
Listofquotation:{ Listofquotation: {
pageTitle: '見積書です', pageTitle: '見積書です',
baojiadan: '見積書です', baojiadan: '見積書です',
dindanbaojia: 'ホテルを註文します', dindanbaojia: 'ホテルを註文します',
...@@ -439,14 +439,14 @@ export default { ...@@ -439,14 +439,14 @@ export default {
t8: '番号を変えます', t8: '番号を変えます',
t9: '日本の口座を送金した後に直ちに情報を知らせてください、日本の旅行社の問い合わせを便利にしてくださいありがとうございます思いやり', t9: '日本の口座を送金した後に直ちに情報を知らせてください、日本の旅行社の問い合わせを便利にしてくださいありがとうございます思いやり',
}, },
btn:{ btn: {
dayin: '印刷 です', dayin: '印刷 です',
xiaza: '下載 です', xiaza: '下載 です',
cjfaipiao: 'インボイスを作成します', cjfaipiao: 'インボイスを作成します',
bjd: '見積書です' bjd: '見積書です'
} }
}, },
scattered:{ scattered: {
kefang: '客室です', kefang: '客室です',
chengren: '大人です', chengren: '大人です',
ertong: '子供です', ertong: '子供です',
...@@ -556,13 +556,13 @@ export default { ...@@ -556,13 +556,13 @@ export default {
qi: 'からです', qi: 'からです',
ziying: '自営業です', ziying: '自営業です',
jalan: 'jalan', jalan: 'jalan',
zhutifea1:'駅から歩いて5分です', zhutifea1: '駅から歩いて5分です',
zhutifea2: '温泉があります', zhutifea2: '温泉があります',
zhutifea3: 'ビーチまで5分です', zhutifea3: 'ビーチまで5分です',
zhutifea4: 'チェックアウト11時以降です', zhutifea4: 'チェックアウト11時以降です',
xiangqing: '詳細を見ます' xiangqing: '詳細を見ます'
}, },
scatteredDetails:{ scatteredDetails: {
xiangqing: 'ホテルの詳細です', xiangqing: 'ホテルの詳細です',
jiudianxinxi: 'ホテル情報です', jiudianxinxi: 'ホテル情報です',
miaoshu: 'です', miaoshu: 'です',
...@@ -686,7 +686,7 @@ export default { ...@@ -686,7 +686,7 @@ export default {
renju: '一人当たりです', renju: '一人当たりです',
yuyue: '予约', yuyue: '予约',
}, },
scatteredOrder:{ scatteredOrder: {
prompt1: '13歳以上は成人扱いです', prompt1: '13歳以上は成人扱いです',
prompt2: '成功を予約した後に部屋はあなたのために一晩中保留します', prompt2: '成功を予約した後に部屋はあなたのために一晩中保留します',
fangxing: '部屋型です', fangxing: '部屋型です',
...@@ -766,7 +766,7 @@ export default { ...@@ -766,7 +766,7 @@ export default {
notiaojian: 'このクーポンは利用条件を満たしていません!', notiaojian: 'このクーポンは利用条件を満たしていません!',
dindanhao: '註文番号です', dindanhao: '註文番号です',
}, },
scatteredOrderList:{ scatteredOrderList: {
state1: '待ちます', state1: '待ちます',
state2: '取引成立です', state2: '取引成立です',
state3: 'キャンセルしました', state3: 'キャンセルしました',
...@@ -786,102 +786,136 @@ export default { ...@@ -786,102 +786,136 @@ export default {
}, },
//#endregion //#endregion
//#region v1.0.2 //#region v1.0.2
v102:{ v102: {
ticket:{ ticket: {
nobj: '見積もりがまだないので註文できません', nobj: '見積もりがまだないので註文できません',
d:'入場券期日です', d: '入場券期日です',
jq: '景観区の名称です', jq: '景観区の名称です',
hn:'チケットの名前です', hn: 'チケットの名前です',
sl:'数', sl: '数',
starttime:'入場券の時間です', starttime: '入場券の時間です',
pageTitle:'チケット検索', pageTitle: 'チケット検索',
name:'名前を入力してくださいです', name: '名前を入力してくださいです',
toggleListType1:'リストモードです', toggleListType1: 'リストモードです',
toggleListType2:'カードモードです', toggleListType2: 'カードモードです',
Japan:'日本です', Japan: '日本です',
stoppage:'場のように停止します', stoppage: '場のように停止します',
recommendTime:'お勧めします', recommendTime: 'お勧めします',
hour: '時間です', hour: '時間です',
minutes:'分です', minutes: '分です',
load:'画像の読み込みに失敗しました', load: '画像の読み込みに失敗しました',
showtt:{ showtt: {
t1:'計', t1: '計',
t2:'種票型です' t2: '種票型です'
}, },
buy:'今すぐチケットを予約します', buy: '今すぐチケットを予約します',
shortBuy:'予約です', shortBuy: '予約です',
addr:'アドレスです', addr: 'アドレスです',
map:'地図です', map: '地図です',
jing:'スポットです', jing: 'スポットです',
detail:'景区詳細です', detail: '景区詳細です',
d1:'オープン時間です', d1: 'オープン時間です',
d2:'景勝地の特色', d2: '景勝地の特色',
d3:'交通の説明です', d3: '交通の説明です',
d4:'暖かい注意です', d4: '暖かい注意です',
d5:'予約事項です', d5: '予約事項です',
preview:{ preview: {
pageTitle:'註文プレビューです' pageTitle: '註文プレビューです'
}, },
ordertip:'前日の23:00までに予約をお願いします', ordertip: '前日の23:00までに予約をお願いします',
pt:'遊びの日です', pt: '遊びの日です',
tt:'選択票型です', tt: '選択票型です',
ti:'チケット情報です', ti: 'チケット情報です',
bc:'購入枚数ですが', bc: '購入枚数ですが',
gi:'チケットを取ります', gi: 'チケットを取ります',
zq:'切符は自分で受け取ります', zq: '切符は自分で受け取ります',
yj:'チケットを送ります', yj: 'チケットを送ります',
zqs:'自己取票説明します', zqs: '自己取票説明します',
zqd:'自分で指定の位置に行ってチケットを取ります、あなたが支払いを完了した後に私達はメールを通じてチケットの情報を取ることをお知らせします', zqd: '自分で指定の位置に行ってチケットを取ります、あなたが支払いを完了した後に私達はメールを通じてチケットの情報を取ることをお知らせします',
sj:'ゲストメッセージです', sj: 'ゲストメッセージです',
youji:'メッセージを送ります', youji: 'メッセージを送ります',
unit:'枚', unit: '枚',
sex:{ sex: {
man:'男', man: '男',
women:'女' women: '女'
}, },
sjc:{ sjc: {
c1:'中国語の名前です', c1: '中国語の名前です',
c2:'英語の名前です', c2: '英語の名前です',
c3:'性別です', c3: '性別です',
c4:'連絡します', c4: '連絡します',
c5:'宛先です' c5: '宛先です'
}, },
sjcp:{ sjcp: {
c1:'中国語の名前を入力してくださいです', c1: '中国語の名前を入力してくださいです',
c2:'英語の名前を入力してくださいです', c2: '英語の名前を入力してくださいです',
c4:'連絡先を入力します', c4: '連絡先を入力します',
c5:'宛先を入力します' c5: '宛先を入力します'
}, },
st:'勘定書を決済します', st: '勘定書を決済します',
rtt:'チケットの払い戻し制限です', rtt: 'チケットの払い戻し制限です',
rtc:'未消費はいつでも払い戻し可能で、復数のチケットの註文は一部払い戻しをサポートしません', rtc: '未消費はいつでも払い戻し可能で、復数のチケットの註文は一部払い戻しをサポートしません',
ms:'チケット予約です', ms: 'チケット予約です',
nt:'選択券はありません', nt: '選択券はありません',
ds:'総受注額です', ds: '総受注額です',
sb:'注文書を提出します', sb: '注文書を提出します',
or:'注文書です', or: '注文書です',
zqa:'自分でアドレスを取ります', zqa: '自分でアドレスを取ります',
nzqa:'お客様サービスのご確認後、ご住所が分かりますので、至急メールにてお知らせいたします' nzqa: 'お客様サービスのご確認後、ご住所が分かりますので、至急メールにてお知らせいたします'
}, },
to:{ to: {
pageTitle:'チケット註文リストです', pageTitle: 'チケット註文リストです',
ticketName:'チケットネームです', ticketName: 'チケットネームです',
Name: 'お客様の名前です', Name: 'お客様の名前です',
qj:'チケットを取ります', qj: 'チケットを取ります',
qjc:'依頼人の名前(日/英)です', qjc: '依頼人の名前(日/英)です',
qjp:'受取人電話です', qjp: '受取人電話です',
ps:{ ps: {
p1:'配送待ちです', p1: '配送待ちです',
p2:'配達しました' p2: '配達しました'
}, },
m:{ m: {
t:'受け取り方を修正します', t: '受け取り方を修正します',
c:'修正を取り消します', c: '修正を取り消します',
s:'修正を保存します' s: '修正を保存します'
}, },
}, },
vehicle: {
title: '顧客予約確認書(乗用車)',
title1: "車の予約単位",
title2: "車の予約人",
title3: "受信情報",
title4: "往路便",
title5: "帰りのフライト",
title6: "車の人数",
title7: "開始日",
title8: "トリップ日数",
title9: "車タイプ",
title10: "ガイド情報",
title11: "チーム情報",
title12: "作成時間",
title13: "車種選択",
title14: "送迎時間",
tatle: {
th1: '日付',
th2: '何日目',
th3: '車タイプ',
th4: 'トリップ情報',
},
add: '追加',
add2: '修正',
add3: '車のキャンセル',
add4: '理由',
add5: 'を選択して、',
list: {
s1: '自動車会社',
s2: '車掌',
s3: 'チーム名',
s4: '予定日を選択してください',
s5: '編集',
}
}
}, },
//#endregion //#endregion
} }
...@@ -22,18 +22,18 @@ export default { ...@@ -22,18 +22,18 @@ export default {
have: '있다', have: '있다',
free: '무료', free: '무료',
before: '미리', before: '미리',
dinner:{ dinner: {
a: '아침식사', a: '아침식사',
b: '점심 식사', b: '점심 식사',
c: '저녁식사' c: '저녁식사'
}, },
hotelType:{ hotelType: {
a: '비즈니스 호텔', a: '비즈니스 호텔',
b: '고급 호텔', b: '고급 호텔',
c: '온천 호텔', c: '온천 호텔',
d: '해변 리조트', d: '해변 리조트',
}, },
personal:{ personal: {
pageTitle: '개인 파일', pageTitle: '개인 파일',
trading: '누적 거래', trading: '누적 거래',
order: '주문 수량', order: '주문 수량',
...@@ -60,14 +60,14 @@ export default { ...@@ -60,14 +60,14 @@ export default {
updateSuccess: '비밀번호가 성공적으로 변경되었습니다. 다시 로그인하십시오', updateSuccess: '비밀번호가 성공적으로 변경되었습니다. 다시 로그인하십시오',
photoSuccess: '프로필 설정 성공' photoSuccess: '프로필 설정 성공'
}, },
upload:{ upload: {
'success': '업로드에 성공했습니다', 'success': '업로드에 성공했습니다',
'failed': '업로드 실패', 'failed': '업로드 실패',
'down': '다운로드', 'down': '다운로드',
'reload': '새로 고침' 'reload': '새로 고침'
}, },
hd:{ hd: {
item:{ item: {
a: '탕세', a: '탕세',
b: '도시 세금', b: '도시 세금',
c: '주차장', c: '주차장',
...@@ -78,13 +78,13 @@ export default { ...@@ -78,13 +78,13 @@ export default {
h: '따뜻한 알림' h: '따뜻한 알림'
} }
}, },
dialog:{ dialog: {
titles:{ titles: {
hotel: '호텔 경고 제거', hotel: '호텔 경고 제거',
horder: '주문취소 경고' horder: '주문취소 경고'
}, },
contents:{ contents: {
hotel:{ hotel: {
t1: '확실히 제거하셔야 합니다', t1: '확실히 제거하셔야 합니다',
t2: '호텔' t2: '호텔'
}, },
...@@ -101,11 +101,11 @@ export default { ...@@ -101,11 +101,11 @@ export default {
jf: '칸', jf: '칸',
day: '일' day: '일'
}, },
expends:{ expends: {
on: '벌', on: '벌',
off: '접' off: '접'
}, },
hotelm:{ hotelm: {
pageTitle: '호텔 주문변경', pageTitle: '호텔 주문변경',
otherRoom: '다른 방을 사용한다', otherRoom: '다른 방을 사용한다',
noneOther: '더 이상 쓸 수 있는 집이 없다', noneOther: '더 이상 쓸 수 있는 집이 없다',
...@@ -113,7 +113,7 @@ export default { ...@@ -113,7 +113,7 @@ export default {
cancel: '주문취소' cancel: '주문취소'
}, },
hotelorder: { hotelorder: {
dialog:{ dialog: {
title: '당신의 전속지불계좌는 아래와 같습니다', title: '당신의 전속지불계좌는 아래와 같습니다',
AccountName: '이름', AccountName: '이름',
account: '계정', account: '계정',
...@@ -258,7 +258,7 @@ export default { ...@@ -258,7 +258,7 @@ export default {
subtitle: '호텔 구매 리스트', subtitle: '호텔 구매 리스트',
sumPrice: '주문총금액' sumPrice: '주문총금액'
}, },
shopping:{ shopping: {
labelNum: '주택 수', labelNum: '주택 수',
peopleNum: '수가', peopleNum: '수가',
small: '수량이 작으면 안 된다', small: '수량이 작으면 안 된다',
...@@ -399,7 +399,7 @@ export default { ...@@ -399,7 +399,7 @@ export default {
//eg: //eg:
//#region v1.0.1 //#region v1.0.1
v101:{ v101: {
downloadHands: '핸드북 다운', downloadHands: '핸드북 다운',
noneHands: '손에 쥔 책은 태어나지 않았다', noneHands: '손에 쥔 책은 태어나지 않았다',
hotelTips: '호텔 아늑한 알람', hotelTips: '호텔 아늑한 알람',
...@@ -410,11 +410,11 @@ export default { ...@@ -410,11 +410,11 @@ export default {
hotelRemark: '설명', hotelRemark: '설명',
cancelRemark: '설명 취소', cancelRemark: '설명 취소',
selfCancle: '고객이 주문을 취소했습니다', selfCancle: '고객이 주문을 취소했습니다',
versonDetails:{ versonDetails: {
date: '2022/11/29', date: '2022/11/29',
content: '' content: ''
}, },
Listofquotation:{ Listofquotation: {
pageTitle: '견적서', pageTitle: '견적서',
baojiadan: '견적서', baojiadan: '견적서',
dindanbaojia: '호텔 주문 오퍼', dindanbaojia: '호텔 주문 오퍼',
...@@ -439,14 +439,14 @@ export default { ...@@ -439,14 +439,14 @@ export default {
t8: '다시 번호', t8: '다시 번호',
t9: '일본계좌를송금한후일본여행사가문의할수있도록정보를적시에 알려주십시오. 감사합니다. 양해 바랍니다' t9: '일본계좌를송금한후일본여행사가문의할수있도록정보를적시에 알려주십시오. 감사합니다. 양해 바랍니다'
}, },
btn:{ btn: {
dayin: '인쇄', dayin: '인쇄',
xiaza: '다운로드', xiaza: '다운로드',
cjfaipiao: '영수증 만들기', cjfaipiao: '영수증 만들기',
bjd: '견적서' bjd: '견적서'
} }
}, },
scattered:{ scattered: {
kefang: '객실이요', kefang: '객실이요',
chengren: '어른', chengren: '어른',
ertong: '어린이들입니다', ertong: '어린이들입니다',
...@@ -562,7 +562,7 @@ export default { ...@@ -562,7 +562,7 @@ export default {
zhutifea4: '11시 이후에 체크아웃합니다', zhutifea4: '11시 이후에 체크아웃합니다',
xiangqing: '자세히 보기' xiangqing: '자세히 보기'
}, },
scatteredDetails:{ scatteredDetails: {
xiangqing: '호텔 정보', xiangqing: '호텔 정보',
jiudianxinxi: '호텔 정보', jiudianxinxi: '호텔 정보',
miaoshu: '묘사합니다', miaoshu: '묘사합니다',
...@@ -686,7 +686,7 @@ export default { ...@@ -686,7 +686,7 @@ export default {
renju: '1인 당', renju: '1인 당',
yuyue: '예약', yuyue: '예약',
}, },
scatteredOrder:{ scatteredOrder: {
prompt1: '13세 이상은 성인으로 취급한다', prompt1: '13세 이상은 성인으로 취급한다',
prompt2: '예약이 완료되면 밤새 당신을 위해 방이 있습니다', prompt2: '예약이 완료되면 밤새 당신을 위해 방이 있습니다',
fangxing: '집 모양', fangxing: '집 모양',
...@@ -766,7 +766,7 @@ export default { ...@@ -766,7 +766,7 @@ export default {
notiaojian: '해당 쿠폰은 사용 조건에 미달!', notiaojian: '해당 쿠폰은 사용 조건에 미달!',
dindanhao: '주문번호입니다', dindanhao: '주문번호입니다',
}, },
scatteredOrderList:{ scatteredOrderList: {
state1: '지불대기', state1: '지불대기',
state2: '거래가 성공했습니다', state2: '거래가 성공했습니다',
state3: '취소됨', state3: '취소됨',
...@@ -786,102 +786,136 @@ export default { ...@@ -786,102 +786,136 @@ export default {
}, },
//#endregion //#endregion
//#region v1.0.2 //#region v1.0.2
v102:{ v102: {
ticket:{ ticket: {
nobj: '잠시 가격이 없어 주문을 할 수 없습니다', nobj: '잠시 가격이 없어 주문을 할 수 없습니다',
d:"입장권 날짜", d: "입장권 날짜",
jq: '관광지 명칭', jq: '관광지 명칭',
hn:"입장권 명칭", hn: "입장권 명칭",
sl:"수량", sl: "수량",
starttime:'티켓타임', starttime: '티켓타임',
pageTitle:"티켓 검색", pageTitle: "티켓 검색",
name:'명소 이름을 입력해주세요', name: '명소 이름을 입력해주세요',
toggleListType1:"목록 모드", toggleListType1: "목록 모드",
toggleListType2:"카드 모드", toggleListType2: "카드 모드",
Japan: '일본', Japan: '일본',
stoppage:'정지하다', stoppage: '정지하다',
recommendTime: '구경거리를 추천하다', recommendTime: '구경거리를 추천하다',
hour: '시간', hour: '시간',
minutes: '분', minutes: '분',
load:'이미지를 불러오는 데 실패했습니다', load: '이미지를 불러오는 데 실패했습니다',
showtt:{ showtt: {
t1:'모두', t1: '모두',
t2:'종류 유형' t2: '종류 유형'
}, },
buy:"바로 예약하세요", buy: "바로 예약하세요",
shortBuy:'예약', shortBuy: '예약',
addr:"주소", addr: "주소",
map:'지도입니다', map: '지도입니다',
jing:"명소", jing: "명소",
detail:'관광지 상세', detail: '관광지 상세',
d1:"오픈 타임", d1: "오픈 타임",
d2:"풍경 특징", d2: "풍경 특징",
d3:"교통 안내서", d3: "교통 안내서",
d4:'따뜻한 알림', d4: '따뜻한 알림',
d5:"예약 안내", d5: "예약 안내",
preview:{ preview: {
pageTitle:'주문서 미리보기' pageTitle: '주문서 미리보기'
}, },
ordertip:"하루 전날 밤 23시까지 예약을 마치세요", ordertip: "하루 전날 밤 23시까지 예약을 마치세요",
pt:"플레이 날짜", pt: "플레이 날짜",
tt:"선택 티켓", tt: "선택 티켓",
ti:"티켓 정보", ti: "티켓 정보",
bc:"구매 장수", bc: "구매 장수",
gi:'투표용지입니다', gi: '투표용지입니다',
zq:'무료티켓입니다', zq: '무료티켓입니다',
yj:"우편 티켓", yj: "우편 티켓",
zqs:"주문서", zqs: "주문서",
zqd:"직접 지정된 장소로 가서 표를 받으시면 돈을 지불하신 후에 우편으로 표를 받으라는 정보를 알려 드리겠습니다", zqd: "직접 지정된 장소로 가서 표를 받으시면 돈을 지불하신 후에 우편으로 표를 받으라는 정보를 알려 드리겠습니다",
sj:'고객 메시지', sj: '고객 메시지',
youji:'메시지 보내기', youji: '메시지 보내기',
unit:'장', unit: '장',
sex:{ sex: {
man:'男', man: '男',
women:'女' women: '女'
}, },
sjc:{ sjc: {
c1:'중국어 이름입니다', c1: '중국어 이름입니다',
c2:'영어 이름', c2: '영어 이름',
c3:"성별", c3: "성별",
c4:"연락 전화", c4: "연락 전화",
c5:"수신 주소" c5: "수신 주소"
}, },
sjcp:{ sjcp: {
c1:"중국어 이름을 입력해주세요", c1: "중국어 이름을 입력해주세요",
c2:"영어 이름을 입력해주세요", c2: "영어 이름을 입력해주세요",
c4:"연락처를 입력해주세요", c4: "연락처를 입력해주세요",
c5:"수신 주소를 입력하십시오" c5: "수신 주소를 입력하십시오"
}, },
st:"계산서를 정리합니다", st: "계산서를 정리합니다",
rtt:"환불 제한", rtt: "환불 제한",
rtc:"구매하지 않은 것은 언제든지 환불이 가능합니다. 여러 장의 주문서는 부분 환불이 불가능합니다", rtc: "구매하지 않은 것은 언제든지 환불이 가능합니다. 여러 장의 주문서는 부분 환불이 불가능합니다",
ms:'티켓 예약 명세', ms: '티켓 예약 명세',
nt:"티켓이 없어요", nt: "티켓이 없어요",
ds:'주문 총액입니다', ds: '주문 총액입니다',
sb:"주문서를 제출하세요", sb: "주문서를 제출하세요",
or:'주문서 설명', or: '주문서 설명',
zqa:'고유 주소', zqa: '고유 주소',
nzqa:'고객 서비스 확인 후 사용자 주소 확인, 제일 먼저 이메일로 알려 드리겠습니다' nzqa: '고객 서비스 확인 후 사용자 주소 확인, 제일 먼저 이메일로 알려 드리겠습니다'
}, },
to:{ to: {
pageTitle:'티켓 주문 목록', pageTitle: '티켓 주문 목록',
ticketName:'티켓 이름', ticketName: '티켓 이름',
Name: '손님 이름', Name: '손님 이름',
qj:'쿠폰으로', qj: '쿠폰으로',
qjc:"사람 이름 (중국어/영어)", qjc: "사람 이름 (중국어/영어)",
qjp:"수신자 전화", qjp: "수신자 전화",
ps:{ ps: {
p1:"배송을 기다립니다", p1: "배송을 기다립니다",
p2:"배송되었습니다" p2: "배송되었습니다"
}, },
m:{ m: {
t:"수신 방법 수정", t: "수신 방법 수정",
c:"수정 취소", c: "수정 취소",
s:"변경 사항 저장" s: "변경 사항 저장"
}, },
}, },
vehicle: {
title: '고객차 주문확인서',
title1: "자동차 예약 회사",
title2: "자동차 예약자",
title3: "공항 정보",
title4: "출발 항공편",
title5: "돌아오는 항공편",
title6: "차량 사용 인원",
title7: "시작 날짜",
title8: "여행 일수",
title9: "차량 종류",
title10: "가이드 정보",
title11: "팀 정보",
title12: "만든 시간",
title13: "차량 모델 선택",
title14: "공항 영송 시간",
tatle: {
th1: '날짜',
th2: '며칠째',
th3: '차량 종류',
th4: '스트로크 정보',
},
add: '추가',
add2: '수정',
add3: '차용을 폐지하다',
add4: '원인',
add5: '확정',
list: {
s1: '차량 회사',
s2: '차량 운반자',
s3: '팀 이름',
s4: '예정일을 선택해 주세요',
s5: '편집',
}
}
}, },
//#endregion //#endregion
} }
export default { export default {
//#region ending v1.0.0 //#region ending v1.0.0
failed: '執行失敗', failed: '執行失敗',
...@@ -399,7 +400,7 @@ export default { ...@@ -399,7 +400,7 @@ export default {
//eg: //eg:
//#region v1.0.1 //#region v1.0.1
v101:{ v101: {
downloadHands: '下載手佩書', downloadHands: '下載手佩書',
noneHands: '手佩書未生成', noneHands: '手佩書未生成',
hotelTips: '酒店溫馨提醒', hotelTips: '酒店溫馨提醒',
...@@ -410,11 +411,11 @@ export default { ...@@ -410,11 +411,11 @@ export default {
hotelRemark: '備註', hotelRemark: '備註',
cancelRemark: '取消備註', cancelRemark: '取消備註',
selfCancle: '客戶自己取消了訂單', selfCancle: '客戶自己取消了訂單',
versonDetails:{ versonDetails: {
date: '2022/11/29', date: '2022/11/29',
content: '' content: ''
}, },
Listofquotation:{ Listofquotation: {
pageTitle: '報價單', pageTitle: '報價單',
baojiadan: '報價單', baojiadan: '報價單',
dindanbaojia: '酒店訂單報價', dindanbaojia: '酒店訂單報價',
...@@ -439,14 +440,14 @@ export default { ...@@ -439,14 +440,14 @@ export default {
t8: '重新番号', t8: '重新番号',
t9: '汇款日本账户后请及时告知信息,方便日本旅行社查询谢谢体谅', t9: '汇款日本账户后请及时告知信息,方便日本旅行社查询谢谢体谅',
}, },
btn:{ btn: {
dayin: '打印', dayin: '打印',
xiaza: '下載', xiaza: '下載',
cjfaipiao: '創建發票', cjfaipiao: '創建發票',
bjd: '報價單' bjd: '報價單'
} }
}, },
scattered:{ scattered: {
kefang: '客房', kefang: '客房',
chengren: '成人', chengren: '成人',
ertong: '兒童', ertong: '兒童',
...@@ -562,7 +563,7 @@ export default { ...@@ -562,7 +563,7 @@ export default {
zhutifea4: '退房11點以後', zhutifea4: '退房11點以後',
xiangqing: '查看詳情' xiangqing: '查看詳情'
}, },
scatteredDetails:{ scatteredDetails: {
xiangqing: '酒店詳情', xiangqing: '酒店詳情',
jiudianxinxi: '酒店信息', jiudianxinxi: '酒店信息',
miaoshu: '描述', miaoshu: '描述',
...@@ -686,7 +687,7 @@ export default { ...@@ -686,7 +687,7 @@ export default {
renju: '人均', renju: '人均',
yuyue: '預約', yuyue: '預約',
}, },
scatteredOrder:{ scatteredOrder: {
prompt1: '超過13歲視為成人處理', prompt1: '超過13歲視為成人處理',
prompt2: '預定成功後房間將為您整晚保留', prompt2: '預定成功後房間將為您整晚保留',
fangxing: '房型', fangxing: '房型',
...@@ -766,7 +767,7 @@ export default { ...@@ -766,7 +767,7 @@ export default {
notiaojian: '該優惠券不滿足使用條件!', notiaojian: '該優惠券不滿足使用條件!',
dindanhao: '訂單號', dindanhao: '訂單號',
}, },
scatteredOrderList:{ scatteredOrderList: {
state1: '待付款', state1: '待付款',
state2: '交易成功', state2: '交易成功',
state3: '已取消', state3: '已取消',
...@@ -786,102 +787,136 @@ export default { ...@@ -786,102 +787,136 @@ export default {
}, },
//#endregion //#endregion
//#region v1.0.2 //#region v1.0.2
v102:{ v102: {
ticket:{ ticket: {
nobj: '暫無報價,不能下單', nobj: '暫無報價,不能下單',
d: '日期', d: '日期',
jq: '景區名稱', jq: '景區名稱',
hn: '票券名稱', hn: '票券名稱',
sl: '数量', sl: '数量',
starttime:'门票時間', starttime: '门票時間',
pageTitle:"票券檢索", pageTitle: "票券檢索",
name:'請輸入景點名稱', name: '請輸入景點名稱',
toggleListType1:"列表模式", toggleListType1: "列表模式",
toggleListType2:"卡片模式", toggleListType2: "卡片模式",
Japan: '日本', Japan: '日本',
stoppage:'停止如場', stoppage: '停止如場',
recommendTime: '推薦遊玩', recommendTime: '推薦遊玩',
hour: '小時', hour: '小時',
minutes: '分鐘', minutes: '分鐘',
load:'圖片加載失敗', load: '圖片加載失敗',
showtt:{ showtt: {
t1:'共', t1: '共',
t2:'種票型' t2: '種票型'
}, },
buy:'立即订票', buy: '立即订票',
shortBuy:'預訂', shortBuy: '預訂',
addr:'地址', addr: '地址',
map:'地圖', map: '地圖',
jing:'景點', jing: '景點',
detail:'景區詳情', detail: '景區詳情',
d1:'開放時間', d1: '開放時間',
d2:'景區特色', d2: '景區特色',
d3:'交通說明', d3: '交通說明',
d4:'溫馨提醒', d4: '溫馨提醒',
d5:'預訂須知', d5: '預訂須知',
preview:{ preview: {
pageTitle:'订单预览' pageTitle: '订单预览'
}, },
ordertip:'請在遊玩前一天的23:00前完成預訂', ordertip: '請在遊玩前一天的23:00前完成預訂',
pt:'遊玩日期', pt: '遊玩日期',
tt:'選擇票型', tt: '選擇票型',
ti:'票券信息', ti: '票券信息',
bc:'購買張數', bc: '購買張數',
gi:'取票方式', gi: '取票方式',
zq:'自行取票', zq: '自行取票',
yj:'郵寄票券', yj: '郵寄票券',
zqs:'自行取票說明', zqs: '自行取票說明',
zqd:'自行前往指定位置取票,當您完成付款後我們將通過郵件通知您取票的門票訊息', zqd: '自行前往指定位置取票,當您完成付款後我們將通過郵件通知您取票的門票訊息',
sj:'客人訊息', sj: '客人訊息',
youji:'郵寄訊息', youji: '郵寄訊息',
unit:'張', unit: '張',
sex:{ sex: {
man:'男', man: '男',
women:'女' women: '女'
}, },
sjc:{ sjc: {
c1:'中文姓名', c1: '中文姓名',
c2:'英文姓名', c2: '英文姓名',
c3:'性別', c3: '性別',
c4:'聯絡電話', c4: '聯絡電話',
c5:'收件地址' c5: '收件地址'
}, },
sjcp:{ sjcp: {
c1:'請輸入中文姓名', c1: '請輸入中文姓名',
c2:'請輸入英文姓名', c2: '請輸入英文姓名',
c4:'請輸入聯絡電話', c4: '請輸入聯絡電話',
c5:'請輸入收件地址' c5: '請輸入收件地址'
}, },
st:'結算帳單', st: '結算帳單',
rtt:'退票限制', rtt: '退票限制',
rtc:'未消費隨時可退,多張票訂單不支持部分退款', rtc: '未消費隨時可退,多張票訂單不支持部分退款',
ms:'訂票明細', ms: '訂票明細',
nt:'沒有選擇票券', nt: '沒有選擇票券',
ds:'訂單總額', ds: '訂單總額',
sb:'提交訂單', sb: '提交訂單',
or:'訂單備註', or: '訂單備註',
zqa:'自取地址', zqa: '自取地址',
nzqa:'等待客服確認後,才能看到自取地址,我們將會第一時間通過郵件告知您' nzqa: '等待客服確認後,才能看到自取地址,我們將會第一時間通過郵件告知您'
}, },
to:{ to: {
pageTitle:'票券訂單列表', pageTitle: '票券訂單列表',
ticketName:'景點名稱', ticketName: '景點名稱',
Name: '客人名稱', Name: '客人名稱',
qj:'取券方式', qj: '取券方式',
qjc:'取件人姓名(中/英)', qjc: '取件人姓名(中/英)',
qjp:'取件人電話', qjp: '取件人電話',
ps:{ ps: {
p1:'等待配送', p1: '等待配送',
p2:'已配送' p2: '已配送'
}, },
m:{ m: {
t:'修改取件方式', t: '修改取件方式',
c:'取消修改', c: '取消修改',
s:'保存修改' s: '保存修改'
}, },
}, },
vehicle: {
title: '客戶訂車確認單(小車)',
title1: "訂車單位",
title2: "訂車人",
title3: "接機信息",
title4: "去程航班",
title5: "回程航班",
title6: "用車人數",
title7: "開始日期",
title8: "行程天數",
title9: "用車類型",
title10: "導遊信息",
title11: "团队信息",
title12: "創建時間",
title13: "車型選擇",
title14: "接送機時間",
tatle: {
th1: '日期',
th2: '第幾天',
th3: '用車類型',
th4: '行程信息',
},
add: '添加',
add2: '修改',
add3: '取消用車',
add4: '原因',
add5: '確定',
list: {
s1: '用車公司',
s2: '用車人',
s3: '團隊名稱',
s4: '請選擇預定日期',
s5: '编辑',
}
}
}, },
//#endregion //#endregion
} }
<template>
<div class="fix-height-subpage column no-wrap q-pa-md">
<!-- 表格 -->
<q-card class="light-shadow q-pa-md bg-white rounded-borders q-mb-md" flat>
<div class="add">
<div class="flex">
<q-input v-model="pages.UseCompName" @blur="refresh" class="col q-mr-md" reverse-fill-mask dense
standout :label="$t('v102.vehicle.list.s1')" />
<q-input v-model="pages.UseName" @blur="refresh" class="col q-mr-md" dense reverse-fill-mask
standout :label="$t('v102.vehicle.list.s2')" />
<q-input v-model="pages.TeamName" @blur="refresh" class="col q-mr-md" dense reverse-fill-mask
standout :label="$t('v102.vehicle.list.s3')" />
<q-field v-if="$q.platform.is.desktop" clearable v-model="dateRangeFormat"
:label="$t('v102.vehicle.list.s4')" standout class="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>
<div>
<q-btn class="col q-mr-md" color="primary" unelevated :label="$t('v102.vehicle.add')"
@click="mask(0)" />
<q-btn class="col q-mr-md" color="primary" unelevated :label="$t('query')" @click="refresh" />
</div>
</div>
<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">
<template v-slot:body-cell-Id="props">
<q-td :prop="props" v-if="props.row.Status == 0">
<span @click="mask(props.row.Id)">
<q-btn class="col q-mr-md" color="primary" unelevated
:label="$t('v102.vehicle.list.s5')" />
</span>
<span @click="cancel(props.row.Id)">
<q-btn color="red" unelevated :label="$t('v102.vehicle.add3')" />
</span>
</q-td>
</template>
<template v-slot:bottom>
<q-pagination class="full-width justify-end" v-model="pages.pageIndex" color="primary"
:max="pageCount" :input="true" @update:model-value="changePageHandler" />
</template>
</q-table>
<!-- 移动 -->
<q-table hide-header v-else :rows="hotels" grid :columns="cols" row-key="Id"
card-class="no-shadow bg-primary text-white col" :pagination="pages" :loading="loading">
<template v-slot:body-cell-Id="props" v-if="props.row.Status == 0">
<q-td :prop="props">
<span @click="mask(props.row.Id)">
<q-btn class="col q-mr-md" color="primary" unelevated
:label="$t('v102.vehicle.list.s5')" />
</span>
<span @click="cancel(props.row.Id)">
<q-btn color="red" unelevated :label="$t('v102.vehicle.add3')" />
</span>
</q-td>
</template>
<template v-slot:bottom>
<q-pagination class="full-width justify-end" v-model="pages.pageIndex" color="primary"
:max="pageCount" :input="true" @update:model-value="changePageHandler" />
</template>
</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="cancelshow">
<q-card flat class="" style="width: 40vw;">
<q-card-section class="q-pa-sm">
<div class="text-h6">{{ $t('v102.vehicle.add3') }}</div>
</q-card-section>
<q-card-section>
<q-input v-model="CancelRemark" :label="$t('v102.vehicle.add4')" :rows="3" filled type="textarea" />
</q-card-section>
<q-card-actions align="right" class="bg-white">
<q-btn flat dense color="dark" :label="$t('close')" class="q-mr-sm" @click="cancelshow = true"
v-close-popup />
<q-btn unelevated dense color="accent q-px-md" :label="$t('v102.vehicle.add5')"
@click="cancellations" />
</q-card-actions>
</q-card>
</q-dialog>
</div>
</template>
<script lang="ts">
import { defineComponent, ref, reactive, toRefs, provide, onMounted, inject, watch, onBeforeUnmount, computed } from 'vue'
import { useI18n } from 'vue-i18n'
import { useQuasar } from 'quasar'
import { date } from 'quasar'
import vehiclePopover from '../../components/vehicle/vehiclePopover.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 },
setup() {
const qDateProxy = ref(null) as any
const { t } = useI18n()
const $q = useQuasar()
const data = reactive({
cancelshow: false,
CancelRemark: '',
Id: 0,
loading: false,
showPriceList: false,
pageTitle: '44' as (string | undefined),
pages: {
pageIndex: 1,
pageSize: 12,
rowsPerPage: 12,
UseCompName: '',
UseName: '',
TeamName: '',
StartTime: "",
EndTime: '',
},
dateRangeFormat: '',
dateRange: {} as any,
pageCount: 0,
hotels: [
] as Array<any>,
cols: [
{ name: 'UseCompName', label: t('v102.vehicle.title1'), field: (row: any) => row.UseCompName, align: 'left' },
{ name: 'UseName', label: t('v102.vehicle.title2'), field: (row: any) => row.UseName, align: 'left' },
{ name: 'PickUpInfo', label: t('v102.vehicle.title3'), field: (row: any) => row.PickUpInfo, align: 'left' },
{ name: 'GoFlightInfo', label: t('v102.vehicle.title4'), field: (row: any) => row.GoFlightInfo, align: 'left' },
{ name: 'BackFlightInfo', label: t('v102.vehicle.title5'), field: (row: any) => row.BackFlightInfo, align: 'left' },
{ name: 'PeopleNum', label: t('v102.vehicle.title6'), field: (row: any) => row.PeopleNum, align: 'left' },
{ name: 'StartDate', label: t('v102.vehicle.title7'), field: (row: any) => row.StartDate, align: 'left' },
{ name: 'UseDayNum', label: t('v102.vehicle.title8'), field: (row: any) => row.UseDayNum, align: 'left' },
{ name: 'BusTypeName', label: t('v102.vehicle.title9'), field: (row: any) => row.GuideInfo, align: 'left' },
{ name: 'UseName', label: t('v102.vehicle.title10'), field: (row: any) => row.GuideInfo, align: 'left' },
{ name: 'TeamName', label: t('v102.vehicle.title11'), field: (row: any) => row.TeamName, align: 'left' },
{ name: 'CreateDate', label: t('v102.vehicle.title12'), field: (row: any) => row.CreateDate, align: 'left' },
{ name: 'Id', label: t('hotel.addRoomBtn'), field: (row: any) => row.Id, align: 'left' },
] as any,
})
// 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}`
// data.pages.StartTime = data.dateRange.from
// data.pages.EndTime = data.dateRange.to
// data.pageTitle = inject(DirtionmaryHelper.PAGE_TITLE_KEY)
const methods = {
cancel(item: any) {
data.cancelshow = true
data.Id = item
},
// 取消用车
cancellations() {
HotelService.cancellation(data.Id, data.CancelRemark)
.then(r => {
if (r.data.resultCode == ApiResult.SUCCESS) {
data.cancelshow = false
methods.refresh()
} else {
message.errorMsg(r.data.message)
}
})
.catch(e => {
message.errorMsg(e.message)
})
},
// 获取列表数据
initHotel() {
HotelService.vehicleList(data.pages)
.then(r => {
if (r.data.resultCode == ApiResult.SUCCESS) {
data.hotels = r.data.data.pageData
data.pageCount = r.data.data.pageCount
} else {
message.errorMsg(r.data.message)
}
})
.catch(e => {
message.errorMsg(e.message)
})
},
// 获取时间选择
dateRangeHandler(e: any) {
data.pages.StartTime = `${e.from.year}-${e.from.month}-${e.from.day}`
data.pages.EndTime = `${e.to.year}-${e.to.month}-${e.to.day} `
data.dateRangeFormat = `${data.pages.StartTime} - ${data.pages.EndTime} `
if (qDateProxy.value) {
qDateProxy.value.hide()
// methods.refresh()
}
},
close() {
data.showPriceList = false
},
// 刷新
refresh() {
// console.log('444')
data.pages.pageIndex = 1
methods.initHotel()
data.showPriceList = false
},
// 翻页
changePageHandler(n: any) {
console.log(n)
data.pages.pageIndex = n
methods.initHotel()
},
mask(val: any) {
data.Id = val
data.showPriceList = true
}
}
onMounted(() => {
methods.initHotel()
})
return { ...toRefs(data), ...methods, qDateProxy }
},
})
</script>
<style scoped>
.date-box /deep/.q-field__control {
height: 20px;
}
.add {
margin-bottom: 20px;
display: flex;
justify-content: space-between;
flex-wrap: wrap;
}
.shou {
cursor: pointer;
}
.driver {
font-size: 14px;
font-weight: 400;
border-bottom: 1px solid;
margin-left: 50px;
}
.title {
display: flex;
justify-content: center;
font-size: 22px;
margin-bottom: 10px;
}
.flex {
display: flex;
align-items: center;
}
th {
padding: 10px 10px;
font-size: 14px;
}
.table-title {
font-size: 14px;
}
</style>
...@@ -17,8 +17,9 @@ const routes: RouteRecordRaw[] = [ ...@@ -17,8 +17,9 @@ const routes: RouteRecordRaw[] = [
{ path: '/scattered/HotelOrder', component: () => import('pages/scattered/HotelOrder.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/list', component: () => import('pages/ticket/TicketList.vue') },
{path: '/ticket/preview/:ticketId/:Time', component: () => import('pages/ticket/TicketOrderPreview.vue')}, { path: '/ticket/preview/:ticketId/:Time', component: () => import('pages/ticket/TicketOrderPreview.vue') },
{path: '/ticket/order', component: () => import('pages/ticket/TicketOrder.vue')} { path: '/ticket/order', component: () => import('pages/ticket/TicketOrder.vue') },
{ path: '/vehicle/index', component: () => import('pages/vehicle/index.vue') }//车辆
] ]
}, },
{ {
......
import { i18n } from '../boot/i18n' import { i18n } from '../boot/i18n'
interface Menu { interface Menu {
name:string, name: string,
url:string, url: string,
id:number, id: number,
parentId:number, parentId: number,
icon?:string, icon?: string,
childs?:Menu [] childs?: Menu[]
} }
const {t} =i18n.global const { t } = i18n.global
const useMenus={ const useMenus = {
getMenus():Menu[]{ getMenus(): Menu[] {
let menus=[] as Menu[] let menus = [] as Menu[]
menus.push({ menus.push({
name:t('menu.hotel.first'), name: t('menu.hotel.first'),
url:'', url: '',
id:1, id: 1,
parentId:0, parentId: 0,
icon:'Home/Building.svg', icon: 'Home/Building.svg',
childs:[ childs: [
{ {
name:t('menu.hotel.second'), name: t('menu.hotel.second'),
url:'/hotel', url: '/hotel',
id:2, id: 2,
parentId:1, parentId: 1,
}, },
{ {
name:t('menu.hotel.three'), name: t('menu.hotel.three'),
url:'/hotel/order', url: '/hotel/order',
id:3, id: 3,
parentId:1, parentId: 1,
} }
] ]
}) })
menus.push({ menus.push({
name:t('menu.scattered.first'), name: t('menu.scattered.first'),
url:'', url: '',
id:13, id: 13,
parentId:0, parentId: 0,
icon:'scattered/The.svg', icon: 'scattered/The.svg',
childs:[ childs: [
{ {
name:t('menu.scattered.second'), name: t('menu.scattered.second'),
url:'/scattered', url: '/scattered',
id:14, id: 14,
parentId:13, parentId: 13,
}, },
{ {
name:t('menu.scattered.three'), name: t('menu.scattered.three'),
url:'/scattered/HotelOrder', url: '/scattered/HotelOrder',
id:15, id: 15,
parentId:13, parentId: 13,
} }
] ]
}) })
menus.push({ menus.push({
name:t('menu.car.first'), name: t('menu.car.first'),
url:'', url: '',
id:4, id: 4,
parentId:0, parentId: 0,
icon:'Electric/Iron.svg', icon: 'Electric/Iron.svg',
childs:[ childs: [
{ {
name:t('menu.car.second'), name: t('menu.car.second'),
url:'/comingsoon', url: '/vehicle/index',
id:5, id: 5,
parentId:4, parentId: 4,
}, },
{ {
name:t('menu.car.three'), name: t('menu.car.three'),
url:'/comingsoon', url: '/comingsoon',
id:6, id: 6,
parentId:4, parentId: 4,
} }
] ]
}), }),
menus.push({
name: t('menu.ticket.first'),
url: '',
id: 7,
parentId: 0,
icon: 'Shopping/Ticket.svg',
childs: [
{
name: t('menu.ticket.second'),
url: '/ticket/list',
id: 8,
parentId: 7,
},
{
name: t('menu.ticket.three'),
url: '/ticket/order',
id: 9,
parentId: 7,
}
]
})
menus.push({ menus.push({
name:t('menu.ticket.first'), name: t('menu.finance.first'),
url:'', url: '',
id:7, id: 10,
parentId:0, parentId: 0,
icon:'Shopping/Ticket.svg', icon: 'Shopping/Money.svg',
childs:[ childs: [
{ {
name:t('menu.ticket.second'), name: t('menu.finance.second'),
url:'/ticket/list', url: '/comingsoon',
id:8, id: 11,
parentId:7, parentId: 10,
}, },
{ {
name:t('menu.ticket.three'), name: t('menu.finance.three'),
url:'/ticket/order', url: '/comingsoon',
id:9, id: 12,
parentId:7, parentId: 10,
}
]
})
menus.push({
name:t('menu.finance.first'),
url:'',
id:10,
parentId:0,
icon:'Shopping/Money.svg',
childs:[
{
name:t('menu.finance.second'),
url:'/comingsoon',
id:11,
parentId:10,
},
{
name:t('menu.finance.three'),
url:'/comingsoon',
id:12,
parentId:10,
} }
] ]
}) })
return menus return menus
} }
} }
export {useMenus, type Menu} export { useMenus, type Menu }
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