Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
B
bigwood
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
罗超
bigwood
Commits
37fd9618
Commit
37fd9618
authored
Mar 25, 2023
by
youjie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
23086fb6
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
1554 additions
and
91 deletions
+1554
-91
scheduledTrip.ts
src/api/scheduledTrip.ts
+16
-0
rightList.vue
src/components/searchdata/rightList.vue
+3
-1
search.vue
src/components/searchdata/search.vue
+20
-57
ModifyOrderAddress.vue
src/components/trip/order/ModifyOrderAddress.vue
+142
-0
TripOrderHeader.vue
src/components/trip/order/TripOrderHeader.vue
+182
-0
TripOrderList.vue
src/components/trip/order/TripOrderList.vue
+407
-0
orderPreview.vue
src/components/trip/orderPreview.vue
+125
-21
index.ts
src/i18n/zh-TW/index.ts
+1
-1
TripOrder.vue
src/pages/scheduledTrip/TripOrder.vue
+56
-0
TripOrderPreview.vue
src/pages/scheduledTrip/TripOrderPreview.vue
+584
-0
detailsNew.vue
src/pages/scheduledTrip/detailsNew.vue
+9
-11
scheduledTripList.vue
src/pages/scheduledTrip/scheduledTripList.vue
+1
-0
routes.ts
src/router/routes.ts
+2
-0
menus.ts
src/utils/menus.ts
+6
-0
No files found.
src/api/scheduledTrip.ts
View file @
37fd9618
...
...
@@ -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
)
...
...
src/components/searchdata/rightList.vue
View file @
37fd9618
...
...
@@ -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
({
...
...
src/components/searchdata/search.vue
View file @
37fd9618
...
...
@@ -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
,
...
...
src/components/trip/order/ModifyOrderAddress.vue
0 → 100644
View file @
37fd9618
<
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
>
src/components/trip/order/TripOrderHeader.vue
0 → 100644
View file @
37fd9618
<
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
>
src/components/trip/order/TripOrderList.vue
0 → 100644
View file @
37fd9618
<
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
>
src/components/trip/orderPreview.vue
View file @
37fd9618
...
...
@@ -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.et
zc
Count"
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('et
zc
Count', -1)"
/>
</
template
>
<
template
v-slot:append
>
...
...
@@ -115,7 +177,7 @@
class=
"q-px-none"
flat
icon=
"add"
@
click=
"addPeople('etCount', 1)"
@
click=
"addPeople('et
zc
Count', 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
.
et
zc
Count
>
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
.
et
zc
Count
<
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
+
...
...
src/i18n/zh-TW/index.ts
View file @
37fd9618
...
...
@@ -1131,7 +1131,7 @@ export default {
since
:
'起'
,
selectionscheme
:
'選擇方案'
,
headerlabel
:{
d1
:
'
印象自組團
'
,
d1
:
'
直營產品
'
,
d2
:
'行程時間'
,
d21
:
'天'
,
d3
:
'日本語/中文 導覽'
,
...
...
src/pages/scheduledTrip/TripOrder.vue
0 → 100644
View file @
37fd9618
<
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
>
src/pages/scheduledTrip/TripOrderPreview.vue
0 → 100644
View file @
37fd9618
<
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
>
src/pages/scheduledTrip/detailsNew.vue
View file @
37fd9618
...
...
@@ -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.day
List.length
} ${$t('v103.details.headerlabel.d21')}`"
:label=
"` $
{$t('v103.details.headerlabel.d2')} ${dataList.day
Num
} ${$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&¤tPrice.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
)
{
...
...
src/pages/scheduledTrip/scheduledTripList.vue
View file @
37fd9618
...
...
@@ -717,6 +717,7 @@ export default defineComponent({
})
const
search
=
reactive
({
RetrievalState
:
false
,
datesId
:
0
,
DayId
:
0
,
chosenAddress
:
[]
as
Array
<
any
>
,
//右边目的地
...
...
src/router/routes.ts
View file @
37fd9618
...
...
@@ -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'
)
},
]
},
...
...
src/utils/menus.ts
View file @
37fd9618
...
...
@@ -108,6 +108,12 @@ const useMenus = {
id
:
17
,
parentId
:
16
,
},
{
name
:
t
(
'menu.stroke.three'
),
url
:
'/scheduledTrip/order'
,
id
:
18
,
parentId
:
16
,
},
]
})
menus
.
push
({
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment