Commit 37fd9618 authored by youjie's avatar youjie

no message

parent 23086fb6
......@@ -2,6 +2,22 @@ import { HttpResponse } from '../@types'
import request from './request'
class scheduledTripService {
// 一日游订单列表
static async GetTravelOneDayOrderList(param:any):Promise<HttpResponse>{
return request('sellorder_post_GetTravelOneDayOrderList',param)
}
// 一日游订单提交
static async SetOrderInfoForB2B(param:any):Promise<HttpResponse>{
return request('sellorder_post_SetOrderInfoForB2B',param)
}
// 获取销售信息
static async GetB2BSellByCustomerId(param:any):Promise<HttpResponse>{
return request('app_customer_GetB2BSellByCustomerId',param)
}
// 获取客户信息
static async GetCustomerSummary(param:any):Promise<HttpResponse>{
return request('b2b_get_GetCustomerSummary',param)
}
// 行程详情
static async GetB2BTravelInfoV1(param:any):Promise<HttpResponse>{
return request('b2b_get_GetB2BTravelInfoV1',param)
......
......@@ -34,7 +34,7 @@
</template>
</div>
</div>
<div class="q-ml-md">
<div class="q-ml-md" v-if="$q.platform.is.desktop">
<q-btn style="width: 60px;" color="primary" unelevated size="sm" :label="$t('query')" @click="setSearchHandler"/>
</div>
</div>
......@@ -269,6 +269,7 @@
data.chosenAddress = JSON.parse(JSON.stringify(n.chosenAddress))
data.qMsg = JSON.parse(JSON.stringify(n.msg))
data.msg = JSON.parse(JSON.stringify(n.msg))
if(n.RetrievalState) methods.setSearchHandler()
},{deep:true})
const methods = {
changeOrderType(i){
......@@ -388,6 +389,7 @@
setSearchHandler(){
data.msg.pageIndex = 1
methods.goSearchHandler()
search.RetrievalState=false
},
GotoDetails(item) {
$router.push({
......
......@@ -12,37 +12,20 @@
<q-card class="q-pa-md rounded-borders" style="width: 300px">
<div class="q-mb-md text-subtitle2">{{ $t('morequery') }}</div>
<div class="rounded-borders q-my-md q-px-xs q-py-xs bg-grey-3">
<div v-if="chosenAddress.length==0" class="q-px-sm q-py-xs">{{$t('v103.scheduledTrip.screeningtitle')}}</div>
<template v-else>
<q-chip
v-for="(x, i) in chosenAddress"
size="12px"
:key="i"
removable
outline
color="grey"
:label="x.Name"
@remove="removeChosen(x,i,1)"
/>
</template>
<div class="q-px-sm q-py-xs row justify-between">
<span>公司所在地</span>
<span class="text-primary" v-if="chosenAddress.length>0">{{chosenAddress[0].Name}}</span>
</div>
<q-popup-proxy :offset="[0, 10]">
<div class="bg-white q-pb-lg" style="width: 300px;">
<div class="q-px-lg q-py-md fz18">{{$t('v103.scheduledTrip.screeningtitle')}}</div>
<div v-for="(x, i) in areaList" :key="i">
<div class="q-px-lg q-py-md fz18">公司所在地</div>
<div v-for="(x, i) in sites" :key="i">
<div class="addr">
<div
<!-- <div
class="addr-list q-px-md q-py-sm cursor-pointer row items-center"
v-if="x.isShow"
>
<q-checkbox
indeterminate-value="half"
@update:model-value="changeCheckHandler(x)"
v-model="x.checked"
size="xs"
/>
<span class="col" @click="changeExplesdHandler(x)">{{
x.Name
}}</span>
<span class="col" @click="changeExplesdHandler(x)">公司所在地</span>
<q-icon
@click="changeExplesdHandler(x)"
v-if="
......@@ -52,28 +35,19 @@
:name="!x.explsed ? 'keyboard_arrow_down' : 'keyboard_arrow_up'"
size="20px"
/>
</div>
<div
class="q-mx-md"
v-if="
</div> -->
<!-- v-if="
x.explsed ||
(x.SubList && x.isShowChild && searchClone.searchKey.length > 0)
"
" -->
<div
class="q-mx-md"
>
<template v-for="(y, yi) in x.SubList">
<div
<q-radio
class="addr-list q-px-md q-py-sm row items-center"
:key="yi"
v-if="y.isShow"
>
<q-checkbox
@update:model-value="changeCheckHandler(y, x)"
v-model="y.checked"
size="xs"
/>
<span class="col">{{ y.Name }}</span>
</div>
v-if="y.isShow" v-model="searchClone.cityId" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" :val="y.cityId" :label="y.siteName" size="sm" @update:model-value="changeCheckHandler(y, x,0)"/>
</template>
</div>
</div>
......@@ -199,21 +173,20 @@
</q-card>
</q-popup-proxy>
</q-btn>
<q-btn color="primary" unelevated :label="$t('query')" />
<q-btn color="primary" unelevated :label="$t('query')" @click="search.RetrievalState=true"/>
</div>
<template v-if="$q.platform.is.desktop">
<q-card flat class="rounded-borders q-py-md">
<div class="row justify-between q-mx-md">
<span class="text-subtitle1 text-weight-bold ">{{$t('v103.scheduledTrip.screeningtitle')}}</span>
</div>
<!-- @update:model-value="changeAddrSearchHandler" -->
<q-input
v-model="searchClone.searchKey"
type="text"
standout
:placeholder="$t('v103.scheduledTrip.searchinput')"
class="q-ma-md"
@update:model-value="changeAddrSearchHandler"
/>
<div v-for="(x, i) in sites" :key="i">
<div class="addr">
......@@ -940,20 +913,9 @@
],
});
},
// 搜寻目的地
// 搜寻关键词
changeAddrSearchHandler(v) {
search.chosenAddress = []
data.areaList.forEach((x) => {
x.isShow = x.Name.indexOf(v) != -1;
x.isShowChild = false;
x.SubList.forEach((y) => {
y.isShow = y.Name.indexOf(v) != -1;
if (y.isShow) {
x.isShow = true;
x.isShowChild = true;
}
});
});
search.RetrievalState = true
},
}
watch(data.searchClone, (n, o) => {
......@@ -1000,6 +962,7 @@
return {
...toRefs(data),
...methods,
search,
searchCnt,
qDateProxy,
qNameProxy,
......
<template>
<q-card class="bg-white q-pa-md" style="max-width: 500px; min-width: 375px; ">
<div class="text-h6 q-mb-lg">
{{ $t('v102.to.m.t') }}
</div>
<div class="row items-center">
<span class="f12 text-grey-900 text-subtitle2 text-weight-bold" :class="{ 'col-2': $q.platform.is.desktop, 'col-3': $q.platform.is.mobile }">{{ $t('v102.ticket.gi') }}</span>
<span class="col f12">
<q-radio v-model="m.MailingState" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" :val="1" :label="$t('v102.ticket.zq')" />
<q-radio v-model="m.MailingState" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" :val="2" :label="$t('v102.ticket.yj')" />
</span>
</div>
<div v-if="m.MailingState == 1" class="bg-light-blue-1 q-pa-md fz14 rounded-borders q-mt-md">
<div class="text-weight-bold">{{ $t('v102.ticket.zqs') }}</div>
<div class="text-grey-900 q-mt-sm f12">{{ $t('v102.ticket.zqd') }}</div>
</div>
<div>
<div class="q-mt-md">
<span class="f12 text-grey-900 text-subtitle2 text-weight-bold">{{ $t('v102.ticket.sj') }}</span>
</div>
<div class="row items-center q-mt-md text-grey-600 q-mb-md" v-if="$q.platform.is.desktop">
<div class="col q-mr-md">{{ $t('v102.ticket.sjc.c1') }}</div>
<div class="col q-mr-md">{{ $t('v102.ticket.sjc.c2') }}</div>
<div class="col-2 q-mr-md">{{ $t('v102.ticket.sjc.c3') }}</div>
<div class="col q-mr-md">{{ $t('v102.ticket.sjc.c4') }}</div>
<div class="col-4" v-if="m.MailingState == 2">{{ $t('v102.ticket.sjc.c5') }}</div>
</div>
<div style="border-top: 1px dashed #eee" :class="{ 'row items-center': $q.platform.is.desktop, column: $q.platform.is.mobile }">
<q-input dense standout v-model="m.Name" class="col q-mt-md" :class="{ 'q-mr-md': $q.platform.is.desktop }" :placeholder="$t('v102.ticket.sjcp.c1')" :rules="[ val => val && val.length > 0 || ' ']" ref="guestName"/>
<q-input dense standout v-model="m.EName" class="col q-mt-md" :class="{ 'q-mr-md': $q.platform.is.desktop }" :placeholder="$t('v102.ticket.sjcp.c2')" :rules="[ val => val && val.length > 0 || ' ']" ref="guestEName"/>
<div class="col q-mt-md" :class="{ 'q-mr-md': $q.platform.is.desktop }">
<q-radio v-model="m.Sex" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" :val="Number(1)" :label="$t('v102.ticket.sex.man')" />
<q-radio v-model="m.Sex" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" :val="Number(2)" :label="$t('v102.ticket.sex.women')" />
</div>
<q-input dense standout v-model="m.Mobile" class="col q-mt-md" :class="{ 'q-mr-md': $q.platform.is.desktop }" :placeholder="$t('v102.ticket.sjcp.c4')" :rules="[ val => val && val.length == 11 || ' ']" ref="guestMobile"/>
<q-input v-if="m.MailingState == 2" dense standout v-model="m.MailingAddress" class="col-4 q-mt-md" :placeholder="$t('v102.ticket.sjcp.c5')" :rules="[ val => val && val.length > 0 || ' ']" ref="guestAddress"/>
</div>
</div>
<div class="q-mt-md">
<q-input v-model="m.Remark" standout autogrow :label="$t('v102.ticket.or')" />
</div>
<div class="q-mt-lg text-right">
<!-- v-close-popup flat dense -->
<q-btn color="negative" class="q-px-lg" :label="$t('v102.to.m.c')" v-close-popup flat dense @click="close" />
<q-btn color="primary" class="q-ml-md q-px-lg" :label="$t('v102.to.m.s')" flat dense @click="submit"/>
</div>
</q-card>
</template>
<script lang="ts">
import { ref, defineComponent, reactive, toRefs, watch} from 'vue'
import { ApiResult } from 'src/@types/enumHelper'
import TicketService from '../../../api/ticket'
import message from '../../../utils/message'
import { useI18n } from 'vue-i18n'
export default defineComponent({
props: ['order'],
setup(props, context) {
watch(
() => props.order,
(n, o) => {
// data.m = JSON.parse(JSON.stringify(n))
}
)
const { t } = useI18n()
const guestName = ref(null) as any
const guestEName = ref(null) as any
const guestMobile = ref(null) as any
const guestAddress = ref(null) as any
const data = reactive({
m: {} as any,
loading: false
})
data.m=JSON.parse(JSON.stringify(props.order))
const methods = {
close(){
context.emit('close')
},
submit(){
if(data.loading) return
data.loading = true
let flag = false
guestName.value.validate()
guestEName.value.validate()
guestMobile.value.validate()
if(data.m.MailingState=='2'){
guestAddress.value.validate()
flag = !guestName.value.hasError && !guestEName.value.hasError && !guestMobile.value.hasError && !guestAddress.value.hasError
}else{
flag = !guestName.value.hasError && !guestEName.value.hasError && !guestMobile.value.hasError
data.m.MailingAddress = ''
}
if(!flag) return
let m = {
IsUpdateMailing: 1,
OrderId: data.m.OrderId,
CouponsId: data.m.CouponsId,
Money: data.m.Money,
UseDate: data.m.UseDate,
Birthday: data.m.Birthday,
DetailList: data.m.DetailList,
MailingState: data.m.MailingState,//邮寄状态 1自取 2邮寄
MailingAddress: data.m.MailingAddress,//MailingState =2 填写邮寄
Name: data.m.Name,
EName: data.m.EName,
Sex: data.m.Sex,//1男2女
Mobile: data.m.Mobile,
Remark: data.m.Remark,
}
let param = Object.assign(m)
TicketService.setTicketOrder(param)
.then(r => {
if (r.data.resultCode == ApiResult.SUCCESS) {
context.emit('success')
message.successMsg(`${t('success')}`)
} else {
message.errorMsg(r.data.message)
}
data.loading = false
}).catch(e => {
data.loading = false
message.errorMsg(e.message)
})
}
}
return {
...toRefs(data),
...methods,
guestName,
guestEName,
guestMobile,
guestAddress
}
}
})
</script>
<style></style>
<template>
<div class="rounded-borders bg-white row items-center q-pa-md">
<q-select v-if="$q.platform.is.desktop" class="q-mr-md" style="min-width: 150px" 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-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 @clear="getDateRange">
<div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormat }}</div>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxy">
<q-date v-model="dateRange" :options="optionsFn" range mask="YYYY/MM/DD" landscape @range-end="dateRangeHandler"></q-date>
</q-popup-proxy>
</q-field>
<div class="col"></div>
<q-btn unelevated class="bg-grey-3 hover q-mr-md" :title="$t('morequery')">
<q-badge rounded class="din bg-red-2 text-red-14 text-weight-bold" floating :label="searchCnt" v-if="searchCnt > 0" />
<svg-icon color="dark" icon="Text/Filter.svg" :tips="$t('morequery')" :size="20"></svg-icon>
<q-tooltip>{{ $t('morequery') }}</q-tooltip>
<q-popup-proxy class="no-shadow" style="box-shadow: 0 0 50px #ddd !important" :offset="[0, 20]" :model-value="canHide">
<q-card class="q-pa-md rounded-borders" style="width: 300px">
<div class="q-mb-md text-subtitle2">{{ $t('morequery') }}</div>
<div class="q-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.OrderId" dense standout :label="$t('hotelorder.search.orderId')" class="col" />
</div>
<div class="mobile-only q-mt-md">
<q-field clearable v-model="dateRangeFormat" :label="$t('hotelorder.search.daterange')" standout style="min-width: 190px" dense @clear="getDateRange">
<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" @range-end="dateRangeHandler" ></q-date>
</q-popup-proxy>
</q-field>
</div>
<div class="q-mt-md">
<q-field clearable v-model="dateRangeFormatUse" :label="$t('v102.ticket.starttime')" standout style="min-width: 190px" dense @clear="getDateRangeUse">
<div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormatUse }}</div>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxyUse">
<q-date v-model="dateRangeUse" :options="optionsFnUse" range mask="YYYY/MM/DD" @range-end="dateRangeHandlerUse" ></q-date>
</q-popup-proxy>
</q-field>
</div>
<!-- <div class="q-mt-md">
<q-field clearable v-model="dateRangeFormatUse" :label="$t('v102.ticket.starttime')" standout class="col" style="min-width: 190px" dense @clear="getDateRangeUse">
<div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormatUse }}</div>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxyUse">
<q-date v-model="dateRangeUse" :options="optionsFnUse" range mask="YYYY/MM/DD" @range-end="dateRangeHandlerUse" ></q-date>
</q-popup-proxy>
</q-field>
</div> -->
<div class="q-mt-md">
<q-input v-model="search.Name" dense standout :label="$t('v102.to.qjc')" />
</div>
<q-select class="q-mt-md" v-model="search.MailingState" dense :options="orderTypes" emit-value option-label="TypeName" option-value="TypeId" map-options :label="$t('v102.to.qj')" standout />
<q-input v-model="search.CouponsName" dense standout :label="$t('v102.to.ticketName')" class="q-mt-md" />
<q-input v-model="search.ContactNumber" dense standout :label="$t('v102.to.qjp')" class="q-mt-md"/>
</q-card>
</q-popup-proxy>
</q-btn>
<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" />
</div>
<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-tab :name="x.StatusId" :label="x.StatusName" v-for="x in status" @click="setOrderStatus(x.StatusId)" />
</q-tabs>
</div>
</template>
<script lang="ts">
import { DirtionmaryHelper } from '../../../config/dictionary'
import { computed, defineComponent, inject, reactive, ref, toRefs } from 'vue'
import { OrderType, RoomType, StandardStatus } from '../../../@types'
import { getHotelOrderStatus, getHotelOrderType, getHotelRoomType, getTicketOrderType } from '../../../utils/tools'
import { date, useQuasar } from 'quasar'
import svgIcon from '../../global/svg-icon.vue'
export default defineComponent({
components: { svgIcon },
setup(props) {
const qDateProxy = ref(null) as any
const qDateProxyUse = ref(null) as any
const $q = useQuasar()
const data = reactive({
status: [] as Array<StandardStatus>,
cancelStatus: {} as StandardStatus | undefined,
dateRangeFormat: '',
dateRangeFormatUse: '',
dateRange: {} as any,
dateRangeUse: {} as any,
orderTypes: [] as Array<OrderType>,
canHide: false
})
const realSearch = inject(DirtionmaryHelper.TICKET_ORDER_SEARCH) as any
const search = reactive(JSON.parse(JSON.stringify(realSearch))) as any
const methods = {
initStatus() {
//通用的訂單類型
let allStatus = getHotelOrderStatus()
data.status = allStatus.filter((x: StandardStatus) => {
return x.StatusId != 3
})
data.cancelStatus = allStatus.find((x: StandardStatus) => {
return x.StatusId == 3
})
data.orderTypes = getTicketOrderType(true)
},
optionsFnUse(cd: any) {
return true
},
optionsFn(cd: any) {
return cd < date.formatDate(date.addToDate(new Date(), { days: 1 }), 'YYYY/MM/DD')
},
getDateRangeUse(value){
search.UseSTime = ''
search.UseETime = ''
data.dateRangeFormatUse = ''
},
getDateRange(value){
search.StartTime = ''
search.EndTime = ''
data.dateRangeFormat = ''
},
dateRangeHandlerUse(e: any) {
search.UseSTime = `${e.from.year}/${e.from.month}/${e.from.day}`
search.UseETime = `${e.to.year}/${e.to.month}/${e.to.day} `
data.dateRangeFormatUse = `${search.UseSTime} - ${search.UseETime} `
if (qDateProxyUse.value) qDateProxyUse.value.hide()
},
dateRangeHandler(e: any) {
search.StartTime = `${e.from.year}/${e.from.month}/${e.from.day}`
search.EndTime = `${e.to.year}/${e.to.month}/${e.to.day} `
data.dateRangeFormat = `${search.StartTime} - ${search.EndTime} `
if (qDateProxy.value) qDateProxy.value.hide()
},
setQueryHandler() {
realSearch.OrderId = search.OrderId
realSearch.RoomType = search.RoomType
realSearch.StartTime = search.StartTime
realSearch.EndTime = search.EndTime
realSearch.UseSTime = search.UseSTime
realSearch.UseETime = search.UseETime
realSearch.OrderStatus = search.OrderStatus
realSearch.OrderNo = search.OrderNo
realSearch.MailingState = search.MailingState
realSearch.Name = search.Name
realSearch.CouponsName = search.CouponsName
realSearch.ContactNumber = search.ContactNumber
console.log(realSearch)
},
setOrderStatus(statusId: number) {
realSearch.OrderStatus = statusId
}
}
const searchCnt = computed(() => {
let setCnt = 0
if ($q.platform.is.mobile) {
if (search.OrderStatus > 0) setCnt++
if (search.StartTime.length > 0) setCnt++
if (search.OrderNo > 0) setCnt++
}
if (search.OrderId>0) setCnt++
if (search.UseSTime.length > 0) setCnt++
if (search.MailingState > 0) setCnt++
if (search.Name) setCnt++
if (search.CouponsName) setCnt++
if (search.ContactNumber) setCnt++
return setCnt
})
methods.initStatus()
return {
...toRefs(data),
...methods,
search,
searchCnt
}
}
})
</script>
<style></style>
<template>
<div>
<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="q-mr-md">
<q-btn :color="x.MailingState == 1 ? 'cyan' : x.MailingState == 2?'negative':'positive'" unelevated disable size="sm" :label="`${x.MailingState == 1 ? $t('v102.ticket.zq') : x.MailingState == 2 ?$t('v102.ticket.yj'):$t('v102.ticket.dzp')}`"></q-btn>
</div>
<div class="f12 text-grey-6">{{ $t('hotelorder.search.orderNum') }}{{ x.OrderNo }}</div>
<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="cyan" icon="check" outline size="sm" :label="$t('hotelorder.copyed')" v-else></q-btn>
</div>
<div class="col text-center f12 text-grey-6">
<span v-if="x.MailingState">{{ $t('v102.ticket.sj') }}{{ x.Name }}({{ x.EName }})/{{ x.Mobile }}</span>
</div>
<div class="f12 text-grey-6">{{ $t('hotelorder.createTime') }}{{ x.CreateTime }}</div>
<div class="q-ml-md f12" :class="[x.typeInfo.Color]">
<q-icon :name="x.typeInfo.Icon" />
<span class="q-ml-sm">{{ x.typeInfo.StatusName }}</span>
</div>
</div>
<div class="mobile-only">
<div class="row justify-between">
<div class="q-mr-md">
<q-btn :color="x.MailingState == 1 ? 'cyan' : 'negative'" unelevated disable size="sm" :label="`${x.MailingState == 1 ? $t('hotelorder.orderType.guest') : $t('hotelorder.orderType.tour')}`"></q-btn>
</div>
<div class="q-ml-md f12" :class="[x.typeInfo.Color]">
<q-icon :name="x.typeInfo.Icon" />
<span class="q-ml-sm">{{ x.typeInfo.StatusName }}</span>
</div>
</div>
<div class="bg-grey-2 rounded-borders q-pa-sm q-mt-md">
<div class="row items-center justify-between">
<div class="f12 text-grey-6">{{ $t('hotelorder.search.orderNum') }}{{ x.OrderNo }}</div>
<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="cyan" outline size="sm" :label="$t('hotelorder.copyed')" v-else></q-btn>
</div>
</div>
<div class="f12 text-grey-6">
<span v-if="x.MailingState">{{ $t('hotelorder.search.contactInfo') }}{{ x.Name }}({{ x.EName }})/{{ x.ContactPhone }}</span>
</div>
<div class="f12 text-grey-6">{{ $t('hotelorder.createTime') }}{{ x.CreateTime }}</div>
</div>
</div>
<!-- <div v-if="x.MailingState == 4">
<div class="f12">
{{ $t('v102.ticket.dzp') }}
<span class="text-negative">{{ x.UseDate }}</span>
{{ $t('hotelorder.pay.t21') }}
</div>
<div class="row items-center f12 q-mt-sm">
<div class="text-accent q-mr-md" v-if="x.TicketCodeFile">
{{ x.TicketCodeFile.split('/').at(-1) }}</div>
<q-btn dense unelevated color="primary" size="sm" class="q-mr-sm" v-if="x.TicketCodeFile">
<a class="text-white" style="text-decoration:none"
:href="x.TicketCodeFile">{{ $t('upload.down') }}</a>
</q-btn>
</div>
</div> -->
<div class="q-mt-md row">
<q-table separator="cell" :hide-bottom="!x.Remark" :pagination="{ rowsPerPage: 100 }" :rows="x.DetailList" bordered :columns="cols" class="sticky-rightrowspan-column-table light-border col no-shadow">
<template v-slot:body-cell-Date="props">
<q-td :props="props" :rowspan="x.DetailList.length" v-if="props.rowIndex == 0">
<div>
{{x.CouponsName
}}
</div>
<span class="text-grey-6 q-pt-xs">{{x.UseDate}}</span>
</q-td>
</template>
<template v-slot:body-cell-TicketName="props">
<q-td :props="props">
<div class="max-hotelname ellipsis">{{ props.value }}</div>
<q-tooltip>{{ props.value }}</q-tooltip>
</q-td>
</template>
<!-- <template v-slot:body-cell-MailingMoney="props">
<q-td :props="props">
<span>{{moneyFormat(x.MailingMoney)}}</span>
</q-td>
</template> -->
<template v-slot:body-cell-Money="props">
<q-td :props="props" >
{{props.row.Money}}
</q-td>
</template>
<template v-slot:bottom>
<div class="msl text-negative">{{ $t('v101.hotelRemark') }}{{ x.Remark }}</div>
</template>
</q-table>
</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="pay row text-grey rounded-borders" :class="{ 'bg-grey-2 q-mt-md': $q.platform.is.mobile, col: $q.platform.is.desktop }">
<div class="bg-orange-1 col-12 rounded-borders q-pa-md">
<div v-if="x.MailingState==2||x.MailingState==3">
<div class="text-subtitle2 text-dark text-weight-bolder row items-center">
<span class="col">{{ $t('v102.ticket.sjc.c5') }}:</span>
<span class="f12" :class="[x.SendType.Color]">{{ x.SendType.Name }}</span>
</div>
<div class="f12 text-dark q-mt-sm">{{ x.MailingAddress }}</div>
</div>
<div v-else>
<div class="text-subtitle2 text-dark text-weight-bolder">{{ x.MailingState==1?$t('v102.ticket.zqa'):$t('v102.ticket.dzp') }}:</div>
<div class="f12 text-dark q-mt-sm">
<template v-if="x.MailingState==1">
{{ x.SelffetchAddress?x.SelffetchAddress:$t('v102.ticket.nzqa') }}
</template>
<template v-else>
{{ x.TicketCodeFile?'':$t('v102.ticket.nzqa1') }}
<div class="row items-center f12 q-mt-sm">
<div class="text-accent q-mr-md" v-if="x.TicketCodeFile">
{{ x.TicketCodeFile.split('/').at(-1) }}</div>
<q-btn dense unelevated color="primary" size="sm" class="q-mr-sm" v-if="x.TicketCodeFile">
<a class="text-white" style="text-decoration:none"
:href="x.TicketCodeFile">{{ $t('upload.down') }}</a>
</q-btn>
</div>
</template>
</div>
</div>
</div>
</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="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="dark q-ml-xl">
<span class="din text-subtitle1">{{ moneyFormat(x.Money) }}</span>
<span class="f12">{{ x.CurrencyCode }}</span>
</div>
</div>
<div class="row items-center justify-between q-mb-sm q-pb-sm" style="border-bottom: 1px dashed #ddd"
v-if="x.MailingMoney>0">
<div class="f12 text-grey">{{ $t('v102.ticket.sjc.c6') }}</div>
<div class="dark">
<span class="f12">{{ moneyFormat(x.MailingMoney) }}</span>
<span class="f12">{{ x.CurrencyCode }}</span>
</div>
</div>
<div class="text-right">
<q-btn dense outline color="accent" size="sm" class="q-mt-sm" :label="$t('hotelorder.payinfo')" @click="ViewPayment"></q-btn>
</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 }">
<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-section>
<q-item-label>{{ $t('hotelorder.opera.cancel') }}</q-item-label>
</q-item-section>
</q-item>
<q-item class="text-primary" clickable v-close-popup @click="modify(x)">
<q-item-section>
<q-item-label>{{ $t('hotelorder.opera.edit') }}</q-item-label>
</q-item-section>
</q-item>
<q-item class="text-positive" clickable v-close-popup>
<q-item-section>
<q-item-label>{{ $t('v101.Listofquotation.baojiadan') }}</q-item-label>
</q-item-section>
</q-item>
<!-- <q-item class="text-dark" clickable v-close-popup>
<q-item-section>
<q-item-label>{{ $t('hotelorder.opera.view') }}</q-item-label>
</q-item-section>
</q-item> -->
</q-list>
<div v-else>
<div class="f12 text-green-4">{{ $t('hotelorder.payed') }}</div>
<div class="text-subtitle1 din text-green-14">
{{ x.Money.toFixed(2) }}
<span class="text-green-4 f12">{{ $t('unit.jp') }}</span>
</div>
</div>
</div>
</div>
<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="text-subtitle2 text-weight-bolder text-grey-900">{{ $t('v101.cancelRemark') }}:</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>
</q-card>
<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-card>
<q-inner-loading :showing="loading" :label="$t('loading')" label-class="text-grey-6 f12" />
</div>
<div class="text-center q-mt-xl" v-if="(!orders || orders.length == 0) && !loading">
<svg-icon :size="50" color="nav" icon="General/Clipboard.svg"></svg-icon>
<div class="q-mt-md f12 text-grey-6">{{ $t('noneData') }}</div>
</div>
<q-dialog v-model="showBankAccount">
<BankAccount @change="showBankAccount=false"></BankAccount>
</q-dialog>
<q-dialog v-model="showModify" persistent>
<modify-order-address :order="modifyOrder" @close="showModify=false" @success="showModify=false,initOrders()"></modify-order-address>
</q-dialog>
</template>
<script lang="ts">
import scheduledTripService from '../../../api/scheduledTrip'
import { DirtionmaryHelper } from '../../../config/dictionary'
import { defineComponent, inject, reactive, toRefs, watch } from 'vue'
import { ApiResult } from '../../../@types/enumHelper'
import message from '../../../utils/message'
import { SendType, StandardStatus } from '../../../@types'
import { useI18n } from 'vue-i18n'
import svgIcon from '../../global/svg-icon.vue'
import { copyToClipboard, useQuasar } from 'quasar'
import { getHotelOrderStatus, getSendType, moneyFormat } from '../../../utils/tools'
import ModifyOrderAddress from './ModifyOrderAddress.vue'
import BankAccount from '../../BankAccount.vue'
export default defineComponent({
components: { svgIcon, ModifyOrderAddress,BankAccount },
setup(props) {
const search = inject(DirtionmaryHelper.TICKET_ORDER_SEARCH) as any
const { t } = useI18n()
const $q = useQuasar()
watch(search, (n, o) => {
if (data.loading) return
data.loading = true
data.pages.pageIndex = 1
data.orders = []
methods.initOrders()
})
const data = reactive({
PaymentDialog: false,
orders: [] as Array<any>,
status: [] as Array<StandardStatus>,
sends: [] as Array<SendType>,
showBankAccount: false,
pages: {
pageIndex: 1,
pageSize: 10,
pageCount: 0
},
loading: false,
copyId: 0,
expendsOrderId: 0,
cols: [
{ name: 'Date', label: t('v102.ticket.jq')+'('+t('v102.ticket.d')+')', field: (row: any) => row.Date, align: 'left' },
{ name: 'TicketName', label: t('v102.ticket.hn'), field: (row: any) => row.TicketName, align: 'left' },
{ name: 'Num', label: t('v102.ticket.sl'), field: (row: any) => row.Num, align: 'left' },
{ name: 'Money', label: t('hotelorder.col.m'), field: (row: any) => row.Money, align: 'left' }
] as any[],
modifyOrder:{} as any,
showModify:false,
})
const methods = {
ViewPayment() {
data.showBankAccount = true
},
initOrders() {
data.loading = true
let param = Object.assign(data.pages, search)
scheduledTripService.GetTravelOneDayOrderList(param)
.then(r => {
data.loading = false
if (r.data.resultCode == ApiResult.SUCCESS) {
r.data.data.pageData.forEach((x: any) => {
x.typeInfo = data.status.find(y => y.StatusId == x.OrderStatus) ?? data.status[1]
x.SendType = data.sends.find(y => y.Id == x.MailingState) ?? data.sends[0]
x.Money = 0
let Money = 0
x.DetailList.forEach((y:any)=>{
Money+=y.Money
})
x.Money= Number(Money+x.MailingMoney)
})
data.orders = r.data.data.pageData
data.pages.pageCount = r.data.data.pageCount
} else {
message.errorMsg(r.data.message)
}
}).catch(e => {
message.errorMsg(e.message)
data.loading = false
})
},
cancelConfirmHandler(orderId: number) {
$q.dialog({
title: t('dialog.titles.horder'),
message: t('dialog.contents.horder'),
cancel: true,
persistent: true
}).onOk(() => {
methods.cancelOrderHandler(orderId)
})
},
cancelOrderHandler(orderId: number) {
if (data.loading) return
data.loading = true
scheduledTripService.GetTravelOneDayOrderList(orderId)
.then(r => {
data.loading = false
if (r.data.resultCode == ApiResult.SUCCESS) {
methods.init()
message.successMsg(`${t('success')}`)
} else {
message.errorMsg(r.data.message)
}
}).catch(e => {
message.errorMsg(e.message)
data.loading = false
})
},
setShowWarnHander(id: number) {
data.expendsOrderId = id == data.expendsOrderId ? 0 : id
},
changePageHandler(n: any) {
data.pages.pageIndex = n
methods.initOrders()
},
init() {
data.status = getHotelOrderStatus()
data.sends = getSendType()
methods.initOrders()
},
modify(order:any) {
// order.Sex = JSON.stringify(order.Sex)
data.modifyOrder=order
data.showModify =true
},
setCopyHandler(order: any, ctx?: string) {
if (ctx) {
data.copyId = -1
copyToClipboard(ctx)
} else {
data.copyId = order.OrderId
copyToClipboard(order.OrderNo)
}
setTimeout(() => {
data.copyId = 0
}, 2000)
}
}
methods.init()
return {
...toRefs(data),
...methods,
moneyFormat
}
}
})
</script>
<style scoped>
.light-border table td:first-child{
border-left: 1px solid #eee
}
.light-border table tr td:last-child{
position: sticky;
right: 0;
z-index: 1;
box-shadow: rgb(0 0 0 / 5%) -2px 0px 0px;
}
.light-border table,
.light-border table td,
.light-border .q-table__middle,
.light-border.borders,
.light-border table th {
border-color: #eee !important;
}
.light-border .room-item {
height: 28px;
line-height: 28px;
border-bottom: 1px solid #eee;
}
.light-border .room-item:last-child {
border-bottom: none;
}
.light-border .max-hotelname {
width: 140px;
height: 28px;
line-height: 28px;
}
.orderListDialog-title {
position: relative;
}
.orderListDialog-title span {
font-size: 20px;
}
.orderListDialog-close {
position: absolute;
right: 0;
top: -10px;
font-size: 26px;
}
.orderListDialog-bg {
background: #5098ff;
border-radius: 10px;
}
.orderListDialog-img {
background: url('../../../../assets/images/wallet.png') no-repeat right #5098ff;
background-size: 97px 100%;
}
</style>
......@@ -19,13 +19,13 @@
</div>
<div v-if="$q.platform.is.mobile">
<span class="text-grey-7 product-price" style="font-size: 13px">
CNY {{ moneyFormat(p.originalB2CPrice, 0) }} /每人
CNY {{ p.originalB2CPrice }} /每人
</span>
</div>
</div>
<div class="row items-end">
<span v-if="$q.platform.is.desktop" class="text-grey-7 product-price" style="font-size: 13px">
CNY {{ moneyFormat(p.originalB2CPrice, 0) }} /每人
CNY {{ p.originalB2CPrice }} /每人
</span>
<q-input
style="width: 150px"
......@@ -65,6 +65,7 @@
</q-input>
</div>
</div>
<div class="row items-end q-mt-md" v-if="p.isSupportChildren == 1">
<div class="col" :class="{'column':$q.platform.is.mobile}">
<div>
......@@ -74,19 +75,80 @@
<div v-if="$q.platform.is.mobile">
<span class="text-grey-7 product-price" style="font-size: 13px">
CNY
{{ moneyFormat(p.originalB2CPrice - p.childNoNeedPrice, 0) }} /每人
{{ p.originalB2CPrice - p.childNoNeedPrice }} /每人
</span>
</div>
</div>
<div class="row items-end">
<span v-if="$q.platform.is.desktop" class="text-grey-7 product-price" style="font-size: 13px">
CNY
{{ moneyFormat(p.originalB2CPrice - p.childNoNeedPrice, 0) }} /每人
{{ p.originalB2CPrice - p.childNoNeedPrice }} /每人
</span>
<q-input
style="width: 150px"
@input="changePeople"
v-model="chosenObj.etbzcCount"
class="col"
:class="{
'q-ml-sm q-px-none q-pl-none': $q.platform.is.desktop,
}"
mask="#"
reverse-fill-mask
dense
standout
readonly
:disable="!p.remainNum"
>
<template v-slot:prepend>
<q-btn
color="primary"
size="sm"
class="q-px-none"
flat
icon="remove"
@click="addPeople('etbzcCount', -1)"
/>
</template>
<template v-slot:append>
<q-btn
color="primary"
size="sm"
class="q-px-none"
flat
icon="add"
@click="addPeople('etbzcCount', 1)"
/>
</template>
</q-input>
</div>
</div>
<div class="row items-end q-mt-md" v-if="p.isSupportChildren == 1">
<div class="col" :class="{ column: $q.platform.is.mobile }">
<div>
<span class="text-subtitle2 text-weight-bold">儿童</span>
<span class="text-grey-6 f12 q-ml-sm">(2-11歲,占床)</span>
</div>
<div v-if="$q.platform.is.mobile">
<span class="text-grey-7 product-price" style="font-size: 13px">
CNY
{{ p.childNeedPrice + p.originalB2CPrice }} /每人
</span>
</div>
</div>
<div class="row items-end">
<span
v-if="$q.platform.is.desktop"
class="text-grey-7 product-price"
style="font-size: 13px"
>
CNY
{{ p.childNeedPrice + p.originalB2CPrice }} /每人
</span>
<q-input
style="width: 150px"
@input="changePeople"
v-model="chosenObj.etCount"
v-model="chosenObj.etzcCount"
class="col"
:class="{
'q-ml-sm q-px-none q-pl-none': $q.platform.is.desktop,
......@@ -105,7 +167,7 @@
class="q-px-none"
flat
icon="remove"
@click="addPeople('etCount', -1)"
@click="addPeople('etzcCount', -1)"
/>
</template>
<template v-slot:append>
......@@ -115,7 +177,7 @@
class="q-px-none"
flat
icon="add"
@click="addPeople('etCount', 1)"
@click="addPeople('etzcCount', 1)"
/>
</template>
</q-input>
......@@ -130,13 +192,13 @@
</div>
<div v-if="$q.platform.is.mobile">
<span v-if="$q.platform.is.desktop" class="text-grey-7 product-price" style="font-size: 13px">
CNY {{ moneyFormat(p.babyPrice, 0) }} /每人
CNY {{ p.babyPrice }} /每人
</span>
</div>
</div>
<div class="row items-end">
<span v-if="$q.platform.is.desktop" class="text-grey-7 product-price" style="font-size: 13px">
CNY {{ moneyFormat(p.babyPrice, 0) }} /每人
CNY {{ p.babyPrice }} /每人
</span>
<q-input
style="width: 150px"
......@@ -176,6 +238,7 @@
</q-input>
</div>
</div>
<div class="text-grey-6 f12 q-mt-mb" v-if="p.isSupportChildren == 2">
本團只支持成人出遊
</div>
......@@ -193,13 +256,13 @@
</div>
<div v-if="$q.platform.is.mobile">
<span class="text-grey-7 product-price" style="font-size: 13px">
CNY {{ moneyFormat(p.singleRoomPrice, 0) }} /每人
CNY {{ p.singleRoomPrice }} /每人
</span>
</div>
</div>
<div class="row items-end">
<span v-if="$q.platform.is.desktop" class="text-grey-7 product-price" style="font-size: 13px">
CNY {{ moneyFormat(p.singleRoomPrice, 0) }} /每人
CNY {{ p.singleRoomPrice }} /每人
</span>
<q-input
style="width: 150px"
......@@ -252,11 +315,11 @@
<div class="q-mt-md q-pt-md" style="border-top: 1px dashed #eee">
<div class="row items-center">
<span class="text-subtitle2 text-grey-6 col">總金額</span>
<span class="text-h6 text-primary product-price">CNY {{ moneyFormat(sumPrice,0) }}</span>
<span class="text-h6 text-primary product-price">CNY {{ sumPrice }}</span>
</div>
<div class="q-mt-md text-right">
<span class="q-mr-lg f12 text-negative" v-if="!p.startDate" >{{$q.platform.is.mobile?'請選擇上面的出行日期':'請選擇左側的出行日期'}} </span>
<q-btn color="primary" label="立即訂購" unelevated class="q-px-lg" :disable="sumPrice==0"/>
<q-btn color="primary" label="立即訂購" unelevated class="q-px-lg" :disable="sumPrice==0" @click="goOrderHandler"/>
</div>
</div>
</div>
......@@ -272,9 +335,10 @@ import scheduledTripService from 'src/api/scheduledTrip'
import { ApiResult } from 'src/@types/enumHelper'
import message from 'src/utils/message'
import { moneyFormat } from 'src/utils/tools'
import md5 from "md5-ts";
export default defineComponent({
components: { },
props: ['price'],
props: ['msg','price'],
setup(props, context) {
const $router = useRouter()
const { t } = useI18n()
......@@ -293,6 +357,23 @@ export default defineComponent({
},{deep: true}
)
const methods = {
goOrderHandler(){
let order = {
configId: props.msg.configId,
tcid: props.msg.tcid,
startCityId: 0,
orderInfo: data.chosenObj
}
let key = md5(JSON.stringify(order))
let lineTrip = localStorage.getItem('lineTrip')
lineTrip = lineTrip?JSON.parse(lineTrip):[]
lineTrip.push({
key,
order
})
localStorage.setItem("lineTrip",JSON.stringify(lineTrip))
$router.push({ path:`/scheduledTrip/preview/${key}`})
},
initModel() {
data.sumPrice=0
data.chosenObj = {
......@@ -301,6 +382,7 @@ export default defineComponent({
etCount: 0,
yeCount: 0,
lrCount: 0,
etzcCount: 0,
etbzcCount: 0,
etzc: 0,
df: 0,
......@@ -329,23 +411,44 @@ export default defineComponent({
},
changePeople(val) {},
addPeople(m, i, isDf = false) {
// data.chosenObj[m] = parseInt(data.chosenObj[m]) + i;
// if(m!='crCount'){
// data.chosenObj[m] = data.chosenObj[m] < 0 ? 0 : data.chosenObj[m];
// }else{
// data.chosenObj[m] = data.chosenObj[m] < 1 ? 1 : data.chosenObj[m];
// }
// if (!isDf) {
// if (
// data.chosenObj.crCount + data.chosenObj.etCount >
// data.p.remainNum
// ) {
// data.chosenObj[m] = data.chosenObj[m] - 1;
// }
// } else {
// if (
// data.chosenObj.crCount + data.chosenObj.etCount <
// data.chosenObj.df
// ) {
// data.chosenObj[m] = data.chosenObj[m] - 1;
// }
// }
data.chosenObj[m] = parseInt(data.chosenObj[m]) + i;
if(m!='crCount'){
if (m != "crCount") {
data.chosenObj[m] = data.chosenObj[m] < 0 ? 0 : data.chosenObj[m];
}else{
} else {
data.chosenObj[m] = data.chosenObj[m] < 1 ? 1 : data.chosenObj[m];
}
if (!isDf) {
if (
data.chosenObj.crCount + data.chosenObj.etCount >
data.chosenObj.crCount + data.chosenObj.etzcCount >
data.p.remainNum
) {
data.chosenObj[m] = data.chosenObj[m] - 1;
}
} else {
if (
data.chosenObj.crCount + data.chosenObj.etCount <
data.chosenObj.df
data.chosenObj.crCount + data.chosenObj.etzcCount <
data.chosenObj.df
) {
data.chosenObj[m] = data.chosenObj[m] - 1;
}
......@@ -353,14 +456,15 @@ export default defineComponent({
methods.calcMoney()
},
calcMoney() {
if (!data.p) return;
if (!data.p || !data.p.originalB2CPrice) return data.sumPrice=0;
data.chosenObj.etCount = data.chosenObj.etbzcCount + data.chosenObj.etzcCount
let money =
data.p.originalB2CPrice * data.chosenObj.crCount;
money +=
(data.p.originalB2CPrice-data.p.childNoNeedPrice+data.p.babyChargePrice) * data.chosenObj.etCount;
money += data.p.babyPrice * data.chosenObj.yeCount;
money += data.p.singleRoomPrice * data.chosenObj.df;
let sumCount =
data.chosenObj.crCount +
data.chosenObj.etCount +
......
......@@ -1131,7 +1131,7 @@ export default {
since: '起',
selectionscheme: '選擇方案',
headerlabel:{
d1: '印象自組團',
d1: '直營產品',
d2: '行程時間',
d21: '天',
d3: '日本語/中文 導覽',
......
<template>
<div class="fix-height-subpage column no-wrap q-pa-md">
<trip-order-header></trip-order-header>
<trip-order-list></trip-order-list>
</div>
</template>
<script lang="ts">
import { defineComponent, inject, provide, reactive, toRefs, onMounted } from 'vue'
import { currentRouter } from 'src/router'
import useMetaModule from '../../module/meta/metaModule'
import { useI18n } from 'vue-i18n'
import TripOrderHeader from 'src/components/trip/order/TripOrderHeader.vue'
import { DirtionmaryHelper } from 'src/config/dictionary'
import TripOrderList from 'src/components/trip/order/TripOrderList.vue'
export default defineComponent({
components: {TripOrderHeader, TripOrderList},
setup(props) {
let { setTitle } = useMetaModule()
const { t } = useI18n()
const pageTitle = inject(DirtionmaryHelper.PAGE_TITLE_KEY) as any
pageTitle.value = t('v102.to.pageTitle')
setTitle(pageTitle.value)
const search = reactive({
OrderId: '',
OrderNo: '',
OrderStatus: 0,
StartTime: '',
EndTime: '',
// TicketName:'',//景区名称
CouponsName: '',//景区名称
ContactNumber: '',//电话
Name: '',//顾客名称
UseSTime: '',//门票开始时间
UseETime: '',//门票结束时间
MailingState: -1
})
search.OrderId = currentRouter.currentRoute.value.params.orderId
provide(DirtionmaryHelper.TICKET_ORDER_SEARCH, search)
const menu = inject(DirtionmaryHelper.MENU_KEYS) as any
menu.value = 18
const data = reactive({})
const methods = {}
onMounted(() => {})
return { ...toRefs(data), ...methods, search }
}
})
</script>
<style></style>
<template>
<div class="fix-height-subpage column no-wrap" v-if="detailsObj">
<div class="row q-pa-md" style="min-width: 375px; margin: 0 auto" :style="{ width: $q.screen.lt.xl ? '100%' : '1320px' }" :class="{'row':$q.screen.width>=1200 && $q.platform.is.desktop,'column':$q.screen.width<1200 || $q.platform.is.mobile}">
<div class="col">
<q-card class="q-pa-md" flat>
<div>
<div class="text-h6 q-mb-md">訂購人資訊</div>
<div class="bg-light-blue-1 q-pa-md fz14 rounded-borders q-mt-md">
<div class="text-weight-bold">团期</div>
<div class="text-grey-900 q-mt-sm f12">
<div class="row wrap">
<div class="col-6 q-py-xs" v-if="detailsObj.startCityName">集合出发城市: {{detailsObj.startCityName}}</div>
<div class="col-6 q-py-xs" v-if="priceFlight.gatherAddres">集合详细地址: {{priceFlight.gatherAddress}}</div>
<div class="col-6 q-py-xs" v-if="priceFlight.startDate||priceFlight.gatherTime">集合时间: {{priceFlight.startDate}} {{priceFlight.gatherTime}}</div>
<div class="col-6 q-py-xs" v-if="detailsObj.returnArriveCityName">返回抵达城市: {{detailsObj.returnArriveCityName}}</div>
<div class="col-6 q-py-xs text-red">暂不支持候补</div>
</div>
</div>
</div>
<div>
<div class="row items-center q-mt-md text-grey-600 q-mb-md" v-if="$q.platform.is.desktop">
<div class="col q-mr-md">姓名:<span class="text-dark q-pl-md">{{parameters.ContactName}}</span></div>
<div class="col q-mr-md">{{ $t('v102.ticket.sjc.c4') }}:<span class="text-dark q-pl-md">{{parameters.ContactMobile}}</span></div>
</div>
<!-- <div style="border-top: 1px dashed #eee" :class="{'row items-center':$q.platform.is.desktop,'column':$q.platform.is.mobile}">
<q-input dense standout v-model="parameters.ContactName" class="col q-mt-md" :class="{'q-mr-md':$q.platform.is.desktop}" :placeholder="$t('v102.ticket.sjcp.c1')" :rules="[ val => val && val.length > 0 || ' ']" ref="guestName" readonly/>
<q-input dense standout v-model="parameters.ContactMobile" class="col q-mt-md" :class="{'q-mr-md':$q.platform.is.desktop}" :placeholder="$t('v102.ticket.sjcp.c4')" :rules="[ val => val && val.length == 11 || ' ']" ref="guestMobile" readonly/>
</div> -->
</div>
</div>
</q-card>
<q-card class="q-pa-md q-mt-lg" flat>
<div>
<div class="text-h6 q-mb-md">旅客資料</div>
<div class="row">
<q-img
:src="detailsObj&&detailsObj.imgCover&&detailsObj.imgCover[0].Url"
class="rounded-borders"
spinner-color="grey-3"
style="width: 80px"
/>
<div class="q-ml-md col">
<div class="text-subtitle1 ellipsis">
{{ detailsObj.title }}
</div>
<div class="text-caption text-grey-6 ellipsis q-mt-sm">
{{ detailsObj.ltName }}
</div>
</div>
</div>
<div class="q-mt-md row">
<div class="text-grey-9">
<q-icon name="iconfont iconrili" size="20px" class="q-mr-sm" />
<span>{{ chosenObj.startDate }}</span>
</div>
<div class="text-grey-9 q-ml-md">
<q-icon name="person" size="20px" class="q-mr-sm" />
<span class="q-mr-sm" v-if="chosenObj.crCount > 0"
>成人 x {{ chosenObj.crCount }}</span
>
<span class="q-mr-sm" v-if="chosenObj.etzcCount"
>兒童占床 x {{ chosenObj.etzcCount }}</span
>
<span class="q-mr-sm" v-if="chosenObj.etbzcCount"
>兒童不占床 x {{ chosenObj.etbzcCount }}</span
>
<span class="q-mr-sm" v-if="chosenObj.yeCount"
>婴儿 x {{ chosenObj.yeCount }}</span
>
<span class="q-mr-sm" v-if="chosenObj.df"
>单房间 x {{ chosenObj.df }}</span
>
</div>
</div>
<div class="q-mt-md">
<q-input v-model="parameters.Remarks" standout autogrow :label="$t('v102.ticket.or') " />
</div>
</div>
</q-card>
<div class="q-mt-lg" v-if="!($q.screen.width<1200 || $q.platform.is.mobile)">
<div class="bg-orange-1 q-pa-md rounded-borders fz14" style="border: 1px dashed orange">
<div class="text-weight-bold">{{ $t('v102.ticket.d5') }}</div>
<div class="text-grey-700 q-mt-sm">
{{detailsObj.BookingInfo}}
</div>
</div>
</div>
</div>
<div class="" :class="{'q-ml-lg':!($q.screen.width<1200 || $q.platform.is.mobile),'q-mt-lg':($q.screen.width<1200 || $q.platform.is.mobile)}">
<div class="rounded-borders bg-white q-pa-md" style="width: 300px" :style="{'width':($q.screen.width<1200 || $q.platform.is.mobile)?'100%':'300px'}">
<div class="text-h6 text-grey-900">{{ $t('v102.ticket.st') }}</div>
<div class="q-mt-md q-mb-lg">
<div class="row q-mt-md">
<q-img
:src="detailsObj&&detailsObj.imgCover&&detailsObj.imgCover[0].Url"
class="rounded-borders"
spinner-color="grey-3"
style="width: 80px"
/>
<div class="q-ml-md col">
<div class="text-subtitle1 ellipsis">
{{ detailsObj.title }}
</div>
<div class="text-caption text-grey-6 ellipsis q-mt-sm">
{{ detailsObj.ltName }}
</div>
</div>
</div>
<div class="q-pt-md text-grey-6">出發日期: {{chosenObj.startDate}}</div>
</div>
<div class="q-pt-md q-mb-lg" style="border-top: 1px dashed #eee">
<div class="text-grey-900 text-subtitle2 text-weight-bold">{{ $t('v102.ticket.ms') }}</div>
<div class="row q-my-sm" v-if="chosenObj.crCount > 0">
<div class="col"><q-badge color="grey-3" style="padding: 5px 8px" text-color="info" label="成人佔床" /> x {{ chosenObj.crCount }}</div>
<div>CNY {{ price.originalB2CPrice }}</div>
</div>
<div class="row q-my-sm" v-if="chosenObj.etzcCount > 0">
<div class="col"><q-badge color="grey-3" style="padding: 5px 8px" text-color="info" label="兒童佔床" /> x {{ chosenObj.etzcCount }}</div>
<div>
CNY
{{
price.originalB2CPrice + price.childNeedPrice
}}
</div>
</div>
<div class="row q-my-sm" v-if="chosenObj.etbzcCount > 0">
<div class="col"><q-badge color="grey-3" style="padding: 5px 8px" text-color="info" label="兒童不佔床" /> x {{ chosenObj.etbzcCount }}</div>
<div>
CNY
{{
price.originalB2CPrice - price.childNoNeedPrice
}}
</div>
</div>
<div class="row q-my-sm" v-if="chosenObj.yeCount > 0">
<div class="col"><q-badge color="grey-3" style="padding: 5px 8px" text-color="info" label="嬰兒不佔床" /> x {{ chosenObj.yeCount }}</div>
<div>CNY {{ price.babyPrice }}</div>
</div>
<div v-if="price.safeMoney > 0">
<hr
style="border: none; border-top: 1px dashed #eee !important"
class="bg-transparent q-mb-sm"
/>
<div class="row q-mb-sm" v-if="price.safeMoney > 0">
<div class="col">保險費 x {{ price.safeMoney }}/人</div>
<div>
CNY
{{
moneyFormat(
price.safeMoney *
(chosenObj.crCount +
chosenObj.etCount +
chosenObj.yeCount),
2
)
}}
</div>
</div>
</div>
<div v-if="price.visaPrice > 0 || price.otherPrice > 0">
<hr
style="border: none; border-top: 1px dashed #eee !important"
class="bg-transparent q-mb-sm"
/>
<div class="row q-mb-sm" v-if="price.visaPrice > 0">
<div class="col">簽證費 x {{ price.visaPrice }}/人</div>
<div>
CNY
{{
moneyFormat(
price.visaPrice *
(chosenObj.crCount +
chosenObj.etCount +
chosenObj.yeCount),
2
)
}}
</div>
</div>
<div class="row q-mb-sm" v-if="price.otherPrice > 0">
<div class="col">雜費 x {{ price.otherPrice }}/人</div>
<div>
CNY
{{
price.otherPrice *
(chosenObj.crCount +
chosenObj.etCount +
chosenObj.yeCount)
}}
</div>
</div>
</div>
<hr v-if="chosenObj.etCount > 0 || chosenObj.df > 0"
style="border: none; border-top: 1px dashed #eee !important"
class="bg-transparent q-mb-sm"
/>
<div class="row q-mb-sm" v-if="chosenObj.etCount > 0">
<div class="col">兒童附加費 x {{ chosenObj.etCount }}</div>
<div>CNY {{ price.babyChargePrice }}</div>
</div>
<div class="row q-mb-sm" v-if="chosenObj.df > 0">
<div class="col">單房差價 x {{ chosenObj.df }}</div>
<div>CNY {{ price.singleRoomPrice }}</div>
</div>
</div>
<div class="q-pt-md q-mb-lg text-right" style="border-top: 1px dashed #eee">
<span class="f12 text-dark q-mr-md">
{{ $t('v102.ticket.ds') }}
</span>
<span class="text-h6 text-negative">
{{ sumPrice }}
<span class="fz14" v-if="types&&types.length>0">{{types[0].CurrencyName}}</span>
</span>
</div>
<div class="text-right">
<q-btn color="primary" unelevated class="q-px-lg"
:loading="loading" :disable="!isCheck" :label="$t('v102.ticket.sb')" @click="submit"/>
</div>
</div>
</div>
<div class="q-mt-lg" v-if="($q.screen.width<1200 || $q.platform.is.mobile)">
<div class="bg-orange-1 q-pa-md rounded-borders fz14" style="border: 1px dashed orange">
<div class="text-weight-bold">{{ $t('v102.ticket.d5') }}</div>
<div class="text-grey-700 q-mt-sm">
{{detailsObj.BookingInfo}}
</div>
</div>
</div>
</div>
</div>
<q-dialog v-model="showDetails">
<ticket-card :ticket="detailsObj"></ticket-card>
</q-dialog>
</template>
<script lang="ts">
import { useRouter } from 'vue-router'
import { ApiResult } from 'src/@types/enumHelper'
import scheduledTripService from '../../api/scheduledTrip'
import message from '../../utils/message'
import { currentRouter } from 'src/router'
import { ref, inject, provide, reactive, toRefs, defineComponent, watch } from 'vue'
import useMetaModule from '../../module/meta/metaModule'
import { useI18n } from 'vue-i18n'
import { DirtionmaryHelper } from '../../config/dictionary'
import TicketCard from '../../components/ticket/TicketCard.vue'
import { date } from 'quasar'
export default defineComponent({
components: { TicketCard },
setup(props) {
const $router = useRouter()
let { setTitle } = useMetaModule()
const { t } = useI18n()
const pageTitle = inject(DirtionmaryHelper.PAGE_TITLE_KEY) as any
pageTitle.value = t('v102.ticket.preview.pageTitle')
setTitle(pageTitle.value)
const data = reactive({
loading: false,
SelffetchAddress: '',
msg: {
configId: '',
cityId: 0,
preview: 0,
tcid: 0,
teamType: 0,
isGetPriceFlight: true
},
customer: {} as any,
parameters:{
OrderId:0,
TCID:null,//产品tcid
CustomerType:null,//客户等级
GroupType:1,
ContactName:null,//客户昵称
ContactMobile:null,//客户电话
CustomerId:null,//客户id
DepartureCityId:null,//出发城市
IsIntermodal:null,
Unit_Price:null,//单价
TC_Price:null,//价格、单价
ManNum:null,//成人数
ChirdNum:null,//儿童数不占床
ChirdNeedBedNum:null,//儿童数占床
BabyNum:null,//婴儿数
OldPeopleNum:null,//老人数
SingleRoomNum:null,//单人房数
PreferPrice:null,//实付价格
DiscountMoney:0,//优惠价格
CouponAllotIds: '',//优惠券id
YSeatNum:null,//盈收
ESeatNum:null,
FSeatNum:null,
Commission: 0,//todo 提成
ClientSource:2,
BrandId:0,
TradeWay:0,
PlatformOrder:'',
GuestNum: 0,//客人总数
IsChildrenTour: null,//是否儿童
IsBirdDiscount: 2,//是否早鸟折扣
PredictRoomNum:null,//预计房间数
BigRoomNum:null,//大床房数
TripleRoomNum:null,//三床房数
TradeDate: null,//交易日期
CostType:0,//成本类型
MinOrderPrice:0,//最低订单价格
Remarks: '',//备注
VisaNum: '',//签证数
SafeNum: '',//保险数
AirticketNum:0,
ReturnArriveCityId: '',//回程城市id
IsReturnIntermodal: '',//回程联运
GoCityTime: '',//去程时间
BackCityTime: '',//返程时间
ScenicRefundArr:[],//景点退款办事处
CommissionSharePeople:0,
CommissionShareMoney:0,
OrderSource:2,
RedEnvelopeMoney: 0,//使用红包
},
types: [],
isCheck: false,
OpenTime: '',
detailsObj: {} as any,
order: null,
orderKey: null,
chosenObj: null,
price: {},
sumPrice:0,
priceFlight:{},
})
const guestName = ref(null) as any
const guestEName = ref(null) as any
const guestMobile = ref(null) as any
const guestAddress = ref(null) as any
// let time = currentRouter.currentRoute.value.params.Time
// data.OpenTime = time.substring(0,4)+'-'+time.substring(4,6)+'-'+time.substring(6,8)
// data.msg.tcid = currentRouter.currentRoute.value.params.tripId
// date.formatDate(date.addToDate(new Date(), { days: 1 }), 'MM月DD日 ddd')
data.msg.UseDate = date.formatDate(date.addToDate(new Date(), { days: 0 }), 'YYYY/MM/DD')
const menu = inject(DirtionmaryHelper.MENU_KEYS) as any
menu.value = 8
const methods = {
// 获取团期信息
changeStartDate(){
if(data.chosenObj.startDate&&data.chosenObj.startDate!=''){
data.detailsObj.priceList.forEach((x, i)=>{
if(x.startDate==data.chosenObj.startDate){
data.priceFlight=x
}
})
}
},
// 获取用户信息
getB2BSellByCustomerId(){
scheduledTripService.GetCustomerSummary({})
.then(r => {
if (r.data.resultCode == ApiResult.SUCCESS) {
data.customer = r.data.data
} else {
message.errorMsg(r.data.message)
}
}).catch(e => {
message.errorMsg(e.message)
})
},
checkParamsHandler() {
try {
if (currentRouter.currentRoute.value.params && currentRouter.currentRoute.value.params.tripId) {
let key = currentRouter.currentRoute.value.params.tripId;
let lineTrip = localStorage.getItem("lineTrip");
lineTrip = lineTrip ? JSON.parse(lineTrip) : [];
if (lineTrip.length > 0) {
data.order = lineTrip.find((x) => x.key == key);
if (data.order) {
data.chosenObj = data.order.order.orderInfo;
data.orderKey = key;
data.msg.configId = data.order.order.configId
data.msg.tcid = data.order.order.tcid
}
}
}
} catch (error) {
}
if (data.orderKey == "") {
setTimeout(() => {
location.href = location.origin;
}, 3000);
}
return data.orderKey != "";
},
// 计算总金额
calcMoney() {
let money = data.price.originalB2CPrice * data.chosenObj.crCount;
data.price.discountPrice = data.price.discountPrice
? data.price.discountPrice
: 0;
money +=
(data.price.originalB2CPrice -
data.price.childNoNeedPrice +
data.price.babyChargePrice) *
data.chosenObj.etbzcCount;
money +=
(data.price.originalB2CPrice +
data.price.childNeedPrice +
data.price.babyChargePrice) *
data.chosenObj.etzcCount;
money += data.price.babyPrice * data.chosenObj.yeCount;
money += data.price.singleRoomPrice * data.chosenObj.df;
let sumCount = data.chosenObj.crCount + data.chosenObj.etCount;
money += data.price.visaPrice * sumCount;
money += data.price.safeMoney * sumCount;
money += data.price.otherPrice * sumCount;
data.sumPrice = money;
if(data.sumPrice>0){
data.isCheck = true
}
},
initia(){
let sumSeat=data.chosenObj.crCount+data.chosenObj.etCount+data.chosenObj.lrCount
let youhuiMoney=0
data.detailsObj.lineTeamDiscountList.forEach(x=>{
if(x.startNum<=sumSeat&&sumSeat<=x.endNum){
youhuiMoney=x.discountAmount
return false
}
})
let y=0,f=0,c=0,fcnt=0
if(sumSeat>data.detailsObj.currentPriceInfo.surplusYSeat){
y=data.detailsObj.currentPriceInfo.surplusYSeat
// sumSeat=this.prictrip.currentPriceInfoeFlight.surplusYSeat-sumSeat
sumSeat=data.detailsObj.currentPriceInfo.surplusYSeat-sumSeat
}else{
y=sumSeat
sumSeat=0
}
if(sumSeat>0){
if(sumSeat>data.detailsObj.currentPriceInfo.surplusFSeat){
f=data.detailsObj.currentPriceInfo.surplusFSeat
sumSeat=data.detailsObj.currentPriceInfo.surplusFSeat-sumSeat
}else{
f=sumSeat
sumSeat=0
}
}
if(sumSeat>0){
if(sumSeat>data.detailsObj.currentPriceInfo.surplusYSeat){
c=data.detailsObj.currentPriceInfo.surplusYSeat
sumSeat=data.detailsObj.currentPriceInfo.surplusYSeat-sumSeat
}else{
c=sumSeat
sumSeat=0
}
}
let sumFang=data.chosenObj.crCount+data.chosenObj.etzc+data.chosenObj.lrCount
sumFang=sumFang-data.chosenObj.df-(data.chosenObj.dcf*2)-(data.chosenObj.srf*3)
if(sumFang>0){
fcnt=parseFloat(sumFang)/2.0+data.chosenObj.dcf+data.chosenObj.df+data.chosenObj.srf
}
fcnt+=data.chosenObj.dcf+data.chosenObj.df+data.chosenObj.srf
data.parameters ={
OrderId:0,
TCID: data.msg.tcid,//产品tcid
CustomerType: data.customer.gradeLevel,//客户等级
GroupType:1,
ContactName: data.customer.customerName,//客户昵称
ContactMobile: data.customer.contactNumber,//客户电话
CustomerId: data.customer.customerId,//客户id
DepartureCityId: data.chosenObj.unicoDep.city&&data.chosenObj.unicoDep.city.length>0?data.chosenObj.unicoDep.city[data.chosenObj.unicoDep.city.length-1]:data.detailsObj.startCityId,//出发城市
IsIntermodal: (data.chosenObj.unicoDep.city&&data.chosenObj.unicoDep.city.length>0&&data.chosenObj.unicoDep.date)?1:2,
Unit_Price: data.detailsObj.currentPriceInfo.b2BMemberPrice,//单价
TC_Price: data.detailsObj.currentPriceInfo.b2BMemberPrice,//价格、单价
ManNum: data.chosenObj.crCount,//成人数
ChirdNum: data.chosenObj.etCount,//儿童数不占床
ChirdNeedBedNum: data.chosenObj.etzc,//儿童数占床
BabyNum: data.chosenObj.yeCount,//婴儿数
OldPeopleNum: data.chosenObj.lrCount,//老人数
SingleRoomNum: data.chosenObj.df,//单人房数
PreferPrice: data.sumPrice,//实付价格
DiscountMoney:0,//优惠价格
CouponAllotIds: '',//优惠券id
YSeatNum: y,//盈收
ESeatNum: f,
FSeatNum: c,
Commission: ((parseFloat(youhuiMoney)/2.0)+(parseFloat(data.sumPrice)*0.01)).toFixed(2),//todo 提成
ClientSource:2,
BrandId:0,
TradeWay:0,
PlatformOrder:'',
GuestNum: data.chosenObj.crCount+data.chosenObj.etCount+data.chosenObj.yeCount+data.chosenObj.lrCount,//客人总数
IsChildrenTour: data.detailsObj.currentPriceInfo.isSupportChildren,//是否儿童
IsBirdDiscount: 2,//是否早鸟折扣
PredictRoomNum: fcnt,//预计房间数
BigRoomNum: data.chosenObj.dcf,//大床房数
TripleRoomNum: data.chosenObj.srf,//三床房数
TradeDate: date.formatDate(new Date(), 'YYYY/MM/DD'),//交易日期
CostType: 0,//成本类型
MinOrderPrice: 0,//最低订单价格
Remarks: data.parameters.Remarks,//备注
VisaNum: data.chosenObj.crCount+data.chosenObj.etCount+data.chosenObj.lrCount,//签证数
SafeNum: data.chosenObj.crCount+data.chosenObj.etCount+data.chosenObj.lrCount,//保险数
AirticketNum:0,
ReturnArriveCityId: data.chosenObj.unicoArr.city&&data.chosenObj.unicoArr.city.length>0?data.chosenObj.unicoArr.city[data.chosenObj.unicoArr.city.length-1]:data.detailsObj.returnArriveCityId,//回程城市id
IsReturnIntermodal: (data.chosenObj.unicoArr.city&&data.chosenObj.unicoArr.city.length>0&&data.chosenObj.unicoArr.date)?1:2,//回程联运
GoCityTime: data.chosenObj.unicoDep.city&&data.chosenObj.unicoDep.city.length>0&&data.chosenObj.unicoDep.date?data.chosenObj.unicoDep.date:'',//去程时间
BackCityTime: data.chosenObj.unicoArr.city&&data.chosenObj.unicoArr.city.length>0&&data.chosenObj.unicoArr.date?data.chosenObj.unicoArr.date:'',//返程时间
ScenicRefundArr:[],//景点退款办事处
CommissionSharePeople:0,
CommissionShareMoney:0,
OrderSource:2,
RedEnvelopeMoney: 0,//使用红包
}
},
getInfo(){
let param = Object.assign(data.msg)
scheduledTripService.GetB2BTravelInfoV1(param)
.then(r => {
if (r.data.resultCode == ApiResult.SUCCESS) {
data.detailsObj = r.data.data
data.detailsObj.imgCover = JSON.parse(data.detailsObj.imgCover);
data.price = data.detailsObj.currentPriceInfo;
methods.calcMoney()
methods.changeStartDate()
methods.getB2BSellByCustomerId()
} else {
message.errorMsg(r.data.message)
}
}).catch(e => {
message.errorMsg(e.message)
data.isCheck = false
})
},
submit(){
methods.initia()
if(!data.isCheck) return
// let flag = false
if(data.loading) return
data.loading = true
let param = Object.assign(data.parameters)
scheduledTripService.SetOrderInfoForB2B(param)
.then(r => {
if (r.data.resultCode == ApiResult.SUCCESS) {
data.loading = false
message.successMsg(`${t('success')}`)
$router.push({ path:'/scheduledTrip/order' })
} else {
data.loading = false
message.errorMsg(r.data.message)
}
}).catch(e => {
data.loading = false
message.errorMsg(e.message)
})
},
}
if(methods.checkParamsHandler()){
methods.getInfo()
}
return {
...toRefs(data),
...methods,
guestName,
guestEName,
guestMobile,
guestAddress
}
}
})
</script>
<style></style>
......@@ -64,7 +64,7 @@
class="q-mr-sm"
/>
<span
>日本 -
>{{dataList.aimPlaceName}} -
<span v-for="(x, i) in citys" :key="i">
<span class="cursor-pointer">{{ x }} </span>
......@@ -83,14 +83,14 @@
class="transparent q-mr-xl no-padding"
square
icon="iconfont icontime"
:label="` ${$t('v103.details.headerlabel.d2')} ${dataList.dayList.length} ${$t('v103.details.headerlabel.d21')}`"
:label="` ${$t('v103.details.headerlabel.d2')} ${dataList.dayNum} ${$t('v103.details.headerlabel.d21')}`"
/>
<q-chip
<!-- <q-chip
class="transparent q-mr-xl no-padding"
square
icon="iconfont iconnetwork-fill"
:label="$t('v103.details.headerlabel.d3')"
/>
/> -->
<q-chip
class="transparent q-mr-xl no-padding"
square
......@@ -145,6 +145,7 @@
</q-field>
<template v-if="currentPrice&&currentPrice.startDate">
<order-preview class="q-pa-md"
:msg="msg"
:price="currentPrice"
@reset="resetHandler"
></order-preview>
......@@ -185,7 +186,10 @@
<calendar :priceList="dataList.priceList" @change="changeChosenDateHandler" ref="calendarRef"></calendar>
</div>
<div class="col q-ml-xl">
<order-preview :price="currentPrice" @reset="resetHandler"></order-preview>
<order-preview
:msg="msg"
:price="currentPrice"
@reset="resetHandler"></order-preview>
</div>
</div>
</div>
......@@ -434,13 +438,7 @@ export default defineComponent({
})
},
handleScroll(e) {
// console.log(document.querySelector('#scrollId .q-scrollarea__container').scrollTop, '...............')
let temp = document.querySelector('#scrollId .q-scrollarea__container').scrollTop
// if(temp-data.currentHeight>0){
// data.scrollDirection='down'
// }else{
// data.scrollDirection='up'
// }
data.stickyHeight = document.querySelector('.q-header--hidden') ? 'translateY(0px)' : 'translateY(0px)'
data.currentHeight = temp
if (data.videoPosition > 0 && data.videoPosition < data.currentHeight && data.options.currentPage == 0 && !data.isPictureInPicture) {
......
......@@ -717,6 +717,7 @@ export default defineComponent({
})
const search = reactive({
RetrievalState: false,
datesId: 0,
DayId: 0,
chosenAddress: [] as Array<any>,//右边目的地
......
......@@ -34,6 +34,8 @@ const routes: RouteRecordRaw[] = [
{ path: '/scheduledTrip/index', component: () => import('pages/scheduledTrip/scheduledTripList.vue') },//预定行程
{ path: '/scheduledTrip/details/:id/:tcid', component: () => import('pages/scheduledTrip/detailsNew.vue') },
{ path: '/scheduledTrip/preview/:tripId', component: () => import('pages/scheduledTrip/TripOrderPreview.vue') },
{ path: '/scheduledTrip/order/:orderId?', component: () => import('pages/scheduledTrip/TripOrder.vue') },
]
},
......
......@@ -108,6 +108,12 @@ const useMenus = {
id: 17,
parentId: 16,
},
{
name: t('menu.stroke.three'),
url: '/scheduledTrip/order',
id: 18,
parentId: 16,
},
]
})
menus.push({
......
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