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
4846e72d
Commit
4846e72d
authored
Jan 10, 2023
by
youjie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
1a00973d
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
411 additions
and
214 deletions
+411
-214
request.ts
src/api/request.ts
+5
-3
scattered.ts
src/api/scattered.ts
+1
-1
ticket.ts
src/api/ticket.ts
+9
-1
OrderList.vue
src/components/hotel/order/list/OrderList.vue
+2
-2
ModifyOrderAddress.vue
src/components/ticket/order/ModifyOrderAddress.vue
+94
-18
TicketOrderHeader.vue
src/components/ticket/order/TicketOrderHeader.vue
+50
-16
TicketOrderList.vue
src/components/ticket/order/TicketOrderList.vue
+154
-108
index.ts
src/i18n/ko-HG/index.ts
+1
-1
index.ts
src/i18n/zh-TW/index.ts
+7
-6
TicketOrder.vue
src/pages/ticket/TicketOrder.vue
+9
-3
TicketOrderPreview.vue
src/pages/ticket/TicketOrderPreview.vue
+78
-54
tools.ts
src/utils/tools.ts
+1
-1
No files found.
src/api/request.ts
View file @
4846e72d
...
...
@@ -10,11 +10,13 @@ let converterSW = OpenCC.Converter({ from: 'tw', to: 'cn' }) //转简
let
datas
:
any
// 接收需要转简数据
let
language
=
''
as
any
//语言
let
currencyCode
=
'JPY'
//币种
const
request
=
(
cmd
:
string
,
msg
:
any
):
Promise
<
HttpResponse
>=>
{
const
request
=
(
cmd
:
string
,
msg
:
any
,
isTrans
:
boolean
=
true
):
Promise
<
HttpResponse
>=>
{
datas
=
msg
if
(
locale
.
value
==
'zhTW'
){
// let stringifyData = converterSW(JSON.stringify(msg))
// datas = JSON.parse(stringifyData)
if
(
isTrans
){
let
stringifyData
=
converterSW
(
JSON
.
stringify
(
msg
))
datas
=
JSON
.
parse
(
stringifyData
)
}
language
=
'zh_TW'
// currencyCode = 'TWD'
}
else
if
(
locale
.
value
==
'zhSW'
){
...
...
src/api/scattered.ts
View file @
4846e72d
...
...
@@ -45,7 +45,7 @@ class HotelService {
param
.
reviewRatingLowerLimits
=
param
.
reviewRatingLowerLimits
&&
param
.
reviewRatingLowerLimits
!=
''
?
param
.
reviewRatingLowerLimits
:
0
param
.
searchMaxRate
=
param
.
searchMaxRate
&&
param
.
searchMaxRate
!=
''
?
param
.
searchMaxRate
:
0
param
.
searchMinRate
=
param
.
searchMinRate
&&
param
.
searchMinRate
!=
''
?
param
.
searchMinRate
:
0
return
request
(
'dmc_post_Get_GetJAPAN_HotelList'
,
param
)
return
request
(
'dmc_post_Get_GetJAPAN_HotelList'
,
param
,
false
)
}
}
...
...
src/api/ticket.ts
View file @
4846e72d
...
...
@@ -2,9 +2,17 @@ import { HttpResponse } from '../@types'
import
request
from
'./request'
class
TicketService
{
// 取消门票訂單
static
async
setTicketOrderCancel
(
OrderId
:
number
):
Promise
<
HttpResponse
>
{
return
request
(
'ticket_post_CancelTicketOrder'
,{
OrderId
})
}
// 门票訂單
static
async
getTicketOrderList
(
param
:
any
):
Promise
<
HttpResponse
>
{
return
request
(
'ticket_post_GetMyTicketOrderPageList'
,
param
)
}
// 提交訂單
static
async
setTicketOrder
(
param
:
any
):
Promise
<
HttpResponse
>
{
return
request
(
'ticket_post_Set
Sale
TicketOrder'
,
param
)
return
request
(
'ticket_post_SetTicketOrder'
,
param
)
}
// 门票详情
static
async
getTicketInfo
(
param
:
any
):
Promise
<
HttpResponse
>
{
...
...
src/components/hotel/order/list/OrderList.vue
View file @
4846e72d
...
...
@@ -79,7 +79,7 @@
</q-td>
</
template
>
<
template
v-slot:body-cell-HandFittingFee=
"props"
>
<q-td
:props=
"props"
:
row
span=
"x.DetailList.length"
v-if=
"props.rowIndex == 0"
>
<q-td
:props=
"props"
:
col
span=
"x.DetailList.length"
v-if=
"props.rowIndex == 0"
>
{{
moneyFormat
(
x
.
HandFittingFee
)
}}
<div
class=
"q-mt-sm"
v-if=
"x.OrderStatus==2"
>
<q-btn
size=
"sm"
dense
outline
color=
"primary"
v-if=
"x.ContractUrl"
>
...
...
@@ -145,7 +145,7 @@
<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=
"f12"
>
{{ $t('unit.jpc') }}
</span
>
<
!-- <span class="f12">{{ $t('unit.jpc') }}</span> --
>
<span
class=
"din text-subtitle1"
>
{{ moneyFormat(x.Money) }}
</span>
<span
class=
"f12"
>
{{ $t('unit.jp') }}
</span>
</div>
...
...
src/components/ticket/order/ModifyOrderAddress.vue
View file @
4846e72d
...
...
@@ -6,59 +6,135 @@
<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.
OrderType"
checked-icon=
"task_alt"
unchecked-icon=
"panorama_fish_eye"
:val=
"0
"
:label=
"$t('v102.ticket.zq')"
/>
<q-radio
v-model=
"m.
OrderType"
checked-icon=
"task_alt"
unchecked-icon=
"panorama_fish_eye"
:val=
"1
"
:label=
"$t('v102.ticket.yj')"
/>
<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.
OrderType == 0
"
class=
"bg-light-blue-1 q-pa-md fz14 rounded-borders q-mt-md"
>
<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
v-else
>
<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-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"
>
{{
$t
(
'v102.ticket.sjc.c5'
)
}}
</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.ContactName"
class=
"col q-mt-md"
:class=
"
{ 'q-mr-md': $q.platform.is.desktop }" :placeholder="$t('v102.ticket.sjcp.c1')" />
<q-input
dense
standout
v-model=
"m.ContactEnName"
class=
"col q-mt-md"
:class=
"
{ 'q-mr-md': $q.platform.is.desktop }" :placeholder="$t('v102.ticket.sjcp.c2')" />
<q-input
dense
standout
v-model=
"m.ContactPhone"
class=
"col q-mt-md"
:class=
"
{ 'q-mr-md': $q.platform.is.desktop }" :placeholder="$t('v102.ticket.sjcp.c4')" />
<q-input
dense
standout
v-model=
"m.Address"
class=
"col-4 q-mt-md"
:placeholder=
"$t('v102.ticket.sjcp.c5')"
/>
<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"
>
<q-btn
color=
"negative"
class=
"q-px-lg"
:label=
"$t('v102.to.m.c')"
v-close-popup
flat
dense
/>
<q-btn
color=
"primary"
class=
"q-ml-md q-px-lg"
:label=
"$t('v102.to.m.c')"
v-close-popup
unelevated
dense
/>
<!-- v-close-popup flat dense -->
<q-btn
color=
"negative"
class=
"q-px-lg"
:label=
"$t('v102.to.m.c')"
@
click=
"close"
/>
<q-btn
color=
"primary"
class=
"q-ml-md q-px-lg"
:label=
"$t('v102.to.m.s')"
@
click=
"submit"
/>
</div>
</q-card>
</
template
>
<
script
lang=
"ts"
>
import
{
defineComponent
,
reactive
,
toRefs
,
watch
}
from
'vue'
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
)
{
setup
(
props
,
context
)
{
watch
(
()
=>
props
.
order
,
(
n
,
o
)
=>
{
data
.
m
=
JSON
.
parse
(
JSON
.
stringify
(
n
))
//
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
m
:
{}
as
any
,
loading
:
false
})
const
methods
=
{}
data
.
m
=
JSON
.
parse
(
JSON
.
stringify
(
props
.
order
))
return
{
...
toRefs
(
data
),
...
methods
}
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
>
...
...
src/components/ticket/order/TicketOrderHeader.vue
View file @
4846e72d
...
...
@@ -2,7 +2,7 @@
<div
class=
"rounded-borders bg-white row items-center q-pa-md"
>
<q-select
v-if=
"$q.platform.is.desktop"
class=
"q-mr-md"
v-model=
"search.OrderStatus"
@
update:model-value=
"setOrderStatus"
dense
:options=
"status"
emit-value
option-label=
"StatusName"
option-value=
"StatusId"
map-options
:label=
"$t('hotelorder.search.status')"
standout
/>
<q-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
>
<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>
...
...
@@ -21,20 +21,33 @@
<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
>
<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-date
v-model=
"dateRange"
:options=
"optionsFn"
range
mask=
"YYYY/MM/DD"
@
range-end=
"dateRangeHandler"
></q-date>
</q-popup-proxy>
</q-field>
</div>
<div
class=
"mobile-only q-mt-md"
>
<q-field
clearable
v-model=
"dateRangeFormatUse"
:label=
"$t('hotelorder.search.daterange')"
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.
TicketName"
dense
standout
:label=
"$t('v102.to.ticket
Name')"
/>
<q-input
v-model=
"search.
Name"
dense
standout
:label=
"$t('v102.to.
Name')"
/>
</div>
<q-select
class=
"q-mt-md"
v-model=
"search.OrderType"
dense
:options=
"orderTypes"
emit-value
option-label=
"TypeName"
option-value=
"TypeId"
map-options
:label=
"$t('v102.to.qj')"
standout
/>
<q-input
v-model=
"search.ContactName"
dense
standout
:label=
"$t('v102.to.qjc')"
class=
"q-mt-md"
v-if=
"search.OrderType == 1"
/>
<q-input
v-model=
"search.ContactNumber"
dense
standout
:label=
"$t('v102.to.qjp')"
class=
"q-mt-md"
v-if=
"search.OrderType == 1"
/>
<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-card>
</q-popup-proxy>
...
...
@@ -61,13 +74,16 @@ 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
})
...
...
@@ -85,9 +101,28 @@ export default defineComponent({
})
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
}
`
...
...
@@ -99,12 +134,12 @@ export default defineComponent({
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
.
OrderType
=
search
.
OrderType
realSearch
.
TCNum
=
search
.
TCNum
realSearch
.
ContactName
=
search
.
ContactName
realSearch
.
ContactNumber
=
search
.
ContactNumber
realSearch
.
MailingState
=
search
.
MailingState
realSearch
.
Name
=
search
.
Name
console
.
log
(
realSearch
)
},
setOrderStatus
(
statusId
:
number
)
{
...
...
@@ -120,10 +155,9 @@ export default defineComponent({
if
(
search
.
OrderNo
>
0
)
setCnt
++
}
if
(
search
.
OrderId
.
length
>
0
)
setCnt
++
if
(
search
.
RoomType
>
0
)
setCnt
++
if
(
search
.
OrderType
>
0
)
setCnt
++
if
(
search
.
OrderType
==
1
&&
search
.
ContactName
.
length
>
0
)
setCnt
++
if
(
search
.
OrderType
==
2
&&
search
.
ContactNumber
.
length
>
0
)
setCnt
++
if
(
search
.
UseSTime
.
length
>
0
)
setCnt
++
if
(
search
.
MailingState
>
0
)
setCnt
++
if
(
search
.
Name
)
setCnt
++
return
setCnt
})
...
...
src/components/ticket/order/TicketOrderList.vue
View file @
4846e72d
...
...
@@ -3,7 +3,7 @@
<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.
OrderType == 0 ? 'cyan' : 'negative'"
unelevated
disable
size=
"sm"
:label=
"`$
{x.OrderType == 0
? $t('v102.ticket.zq') : $t('v102.ticket.yj')}`">
</q-btn>
<q-btn
:color=
"x.
MailingState == 1 ? 'cyan' : 'negative'"
unelevated
disable
size=
"sm"
:label=
"`$
{x.MailingState == 1
? $t('v102.ticket.zq') : $t('v102.ticket.yj')}`">
</q-btn>
</div>
<div
class=
"f12 text-grey-6"
>
{{
$t
(
'hotelorder.search.orderNum'
)
}}
:
{{
x
.
OrderNo
}}
</div>
<div
class=
"q-ml-md"
>
...
...
@@ -11,7 +11,7 @@
<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.
OrderType == 1"
>
{{
$t
(
'v102.ticket.sj'
)
}}
:
{{
x
.
ContactName
}}
(
{{
x
.
ContactEnName
}}
)/
{{
x
.
ContactPhon
e
}}
</span>
<span
v-if=
"x.
MailingState"
>
{{
$t
(
'v102.ticket.sj'
)
}}
:
{{
x
.
Name
}}
(
{{
x
.
EName
}}
)/
{{
x
.
Mobil
e
}}
</span>
</div>
<div
class=
"f12 text-grey-6"
>
{{
$t
(
'hotelorder.createTime'
)
}}
:
{{
x
.
CreateTime
}}
</div>
<div
class=
"q-ml-md f12"
:class=
"[x.typeInfo.Color]"
>
...
...
@@ -22,7 +22,7 @@
<div
class=
"mobile-only"
>
<div
class=
"row justify-between"
>
<div
class=
"q-mr-md"
>
<q-btn
:color=
"x.
OrderType == 1 ? 'cyan' : 'negative'"
unelevated
disable
size=
"sm"
:label=
"`$
{x.OrderTyp
e == 1 ? $t('hotelorder.orderType.guest') : $t('hotelorder.orderType.tour')}`">
</q-btn>
<q-btn
:color=
"x.
MailingState == 1 ? 'cyan' : 'negative'"
unelevated
disable
size=
"sm"
:label=
"`$
{x.MailingStat
e == 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"
/>
...
...
@@ -38,21 +38,17 @@
</div>
</div>
<div
class=
"f12 text-grey-6"
>
<span
v-if=
"x.
OrderType == 1"
>
{{
$t
(
'hotelorder.search.contactInfo'
)
}}
:
{{
x
.
ContactName
}}
(
{{
x
.
ContactEn
Name
}}
)/
{{
x
.
ContactPhone
}}
</span>
<span
v-if=
"x.
MailingState"
>
{{
$t
(
'hotelorder.search.contactInfo'
)
}}
:
{{
x
.
Name
}}
(
{{
x
.
E
Name
}}
)/
{{
x
.
ContactPhone
}}
</span>
</div>
<div
class=
"f12 text-grey-6"
>
{{
$t
(
'hotelorder.createTime'
)
}}
:
{{
x
.
CreateTime
}}
</div>
</div>
</div>
<div
class=
"q-mt-md row"
>
<q-table
separator=
"cell"
:hide-bottom=
"!x.Remark"
:pagination=
"
{ rowsPerPage: 100 }" dense :rows="x.DetailList" bordered :columns="cols" class="sticky-rightrowspan-column-table light-border col no-shadow">
<template
v-slot:body-cell-TicketInfo=
"props"
>
<q-td
:props=
"props"
>
<div
class=
"room-item f12 text-grey-6"
v-for=
"x in props.row.TicketList"
>
<span
class=
"q-mr-md"
>
{{
x
.
TypeName
}}
:
{{
x
.
Num
}}
{{
$t
(
'v102.ticket.unit'
)
}}
</span>
<span
class=
"q-mr-md"
>
{{
$t
(
'hotelorder.unitPrice'
)
}}
:
{{
x
.
Price
??
1
}}
</span>
<span
class=
"q-mr-md"
>
{{
$t
(
'hotelorder.xj'
)
}}
:
{{
x
.
Money
??
1
}}
</span>
</div>
<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"
>
{{
x
.
UseDate
}}
</q-td>
</
template
>
<
template
v-slot:body-cell-TicketName=
"props"
>
...
...
@@ -61,6 +57,11 @@
<q-tooltip>
{{
props
.
value
}}
</q-tooltip>
</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
>
...
...
@@ -70,16 +71,18 @@
<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.
OrderType == 1
"
>
<div
v-if=
"x.
MailingState==1||x.MailingState==2
"
>
<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.Address }}
</div>
<div
class=
"f12 text-dark q-mt-sm"
>
{{ x.
Mailing
Address }}
</div>
</div>
<div
v-else
>
<div
class=
"text-subtitle2 text-dark text-weight-bolder"
>
{{ $t('v102.ticket.zqa') }}:
</div>
<div
class=
"f12 text-dark q-mt-sm"
>
{{ x.ReviceAddress?x.ReviceAddress:$t('v102.ticket.nzqa') }}
</div>
<div
class=
"f12 text-dark q-mt-sm"
>
{{ x.SelffetchAddress?x.SelffetchAddress:$t('v102.ticket.nzqa') }}
</div>
</div>
</div>
</div>
...
...
@@ -88,7 +91,7 @@
<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=
"f12"
>
{{ $t('unit.jpc') }}
</span
>
<
!-- <span class="f12">{{ $t('unit.jpc') }}</span> --
>
<span
class=
"din text-subtitle1"
>
{{ moneyFormat(x.Money) }}
</span>
<span
class=
"f12"
>
{{ $t('unit.jp') }}
</span>
</div>
...
...
@@ -123,7 +126,7 @@
<div
v-else
>
<div
class=
"f12 text-green-4"
>
{{ $t('hotelorder.payed') }}
</div>
<div
class=
"text-subtitle1 din text-green-14"
>
{{ x.
OrderIncome
.toFixed(2) }}
{{ x.
Money
.toFixed(2) }}
<span
class=
"text-green-4 f12"
>
{{ $t('unit.jp') }}
</span>
</div>
</div>
...
...
@@ -173,11 +176,12 @@
</q-card>
</q-dialog>
<q-dialog
v-model=
"showModify"
persistent
>
<modify-order-address
:order=
"modifyOrder"
></modify-order-address>
<modify-order-address
:order=
"modifyOrder"
@
close=
"showModify=false"
@
success=
"showModify=false,initOrders()"
></modify-order-address>
</q-dialog>
</template>
<
script
lang=
"ts"
>
import
TicketService
from
'../../../api/ticket'
import
{
DirtionmaryHelper
}
from
'../../../config/dictionary'
import
{
defineComponent
,
inject
,
reactive
,
toRefs
,
watch
}
from
'vue'
import
{
ApiResult
}
from
'../../../@types/enumHelper'
...
...
@@ -218,22 +222,47 @@ export default defineComponent({
copyId
:
0
,
expendsOrderId
:
0
,
cols
:
[
{
name
:
'Date'
,
label
:
t
(
'
hotelorder.col
.d'
),
field
:
(
row
:
any
)
=>
row
.
Date
,
align
:
'left'
},
{
name
:
'TicketName'
,
label
:
t
(
'
hotelorder.col
.hn'
),
field
:
(
row
:
any
)
=>
row
.
TicketName
,
align
:
'left'
},
{
name
:
'
TicketInfo'
,
label
:
t
(
'hotelorder.col.r'
)
,
align
:
'left'
},
{
name
:
'Money'
,
label
:
t
(
'hotelorder.col.m'
),
field
:
(
row
:
any
)
=>
row
.
TicketMoney
.
toFixed
(
2
)
,
align
:
'left'
}
{
name
:
'Date'
,
label
:
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
=
{
setSuccess
(){
console
.
log
(
'---==='
)
methods
.
init
()
},
ViewPayment
()
{
data
.
showBankAccount
=
true
},
initOrders
()
{
data
.
loading
=
true
let
param
=
Object
.
assign
(
data
.
pages
,
search
)
//@TODO:
TicketService
.
getTicketOrderList
(
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
x
.
DetailList
.
forEach
((
y
:
any
)
=>
{
x
.
Money
+=
y
.
Money
})
})
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
({
...
...
@@ -248,7 +277,20 @@ export default defineComponent({
cancelOrderHandler
(
orderId
:
number
)
{
if
(
data
.
loading
)
return
data
.
loading
=
true
//@TODO:
TicketService
.
setTicketOrderCancel
(
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
...
...
@@ -263,6 +305,7 @@ export default defineComponent({
methods
.
initOrders
()
},
modify
(
order
:
any
)
{
// order.Sex = JSON.stringify(order.Sex)
data
.
modifyOrder
=
order
data
.
showModify
=
true
},
...
...
@@ -282,89 +325,89 @@ export default defineComponent({
}
methods
.
init
()
data
.
orders
.
push
(
{
OrderType
:
0
,
typeInfo
:
data
.
status
[
1
],
OrderIncome
:
0.0
,
OrderNo
:
'20230106214591'
,
OrderId
:
89123
,
CreateTime
:
'2023/01/06 14:34:56'
,
DetailList
:
[
{
TicketName
:
'大阪環球影城'
,
TicketMoney
:
4200.0
,
Date
:
'2023/09/10'
,
TicketList
:
[
{
TypeName
:
'兒童票'
,
Num
:
5
,
Price
:
400.0
,
Money
:
2000.0
},
{
TypeName
:
'成人票'
,
Num
:
2
,
Price
:
800.0
,
Money
:
1600.0
},
{
TypeName
:
'學生票'
,
Num
:
1
,
Price
:
600.0
,
Money
:
600.0
}
]
}
],
Remark
:
'迪士尼陆地乐园 客人姓名:Liu Chang+Hu Yuwei~~~~注意!!! 人数:2大 日期:1月3号 价格:大人490元/张 共收980元,全款已收!'
,
Money
:
4200.0
,
OrderStatus
:
1
},
{
OrderType
:
1
,
typeInfo
:
data
.
status
[
2
],
OrderIncome
:
0.0
,
OrderNo
:
'2023010621459800'
,
OrderId
:
891452
,
ContactName
:
'罗超'
,
ContactEnName
:
'LUOCHAO'
,
ContactPhone
:
'892788812'
,
Address
:
'318国道2913公桩左边的祝桑乡境内'
,
CreateTime
:
'2023/01/06 14:34:56'
,
DetailList
:
[
{
TicketName
:
'大阪環球影城'
,
TicketMoney
:
4200.0
,
Date
:
'2023/09/10'
,
TicketList
:
[
{
TypeName
:
'兒童票'
,
Num
:
5
,
Price
:
400.0
,
Money
:
2000.0
},
{
TypeName
:
'成人票'
,
Num
:
2
,
Price
:
800.0
,
Money
:
1600.0
},
{
TypeName
:
'學生票'
,
Num
:
1
,
Price
:
600.0
,
Money
:
600.0
}
]
}
],
Remark
:
'迪士尼陆地乐园 客人姓名:Liu Chang+Hu Yuwei~~~~注意!!! 人数:2大 日期:1月3号 价格:大人490元/张 共收980元,全款已收!'
,
Money
:
4200.0
,
OrderStatus
:
2
,
SendType
:
data
.
sends
[
0
]
}
)
//
data.orders.push(
//
{
//
OrderType: 0,
//
typeInfo: data.status[1],
//
OrderIncome: 0.0,
//
OrderNo: '20230106214591',
//
OrderId: 89123,
//
CreateTime: '2023/01/06 14:34:56',
//
DetailList: [
//
{
//
TicketName: '大阪環球影城',
//
TicketMoney: 4200.0,
//
Date: '2023/09/10',
//
TicketList: [
//
{
//
TypeName: '兒童票',
//
Num: 5,
//
Price: 400.0,
//
Money: 2000.0
//
},
//
{
//
TypeName: '成人票',
//
Num: 2,
//
Price: 800.0,
//
Money: 1600.0
//
},
//
{
//
TypeName: '學生票',
//
Num: 1,
//
Price: 600.0,
//
Money: 600.0
//
}
//
]
//
}
//
],
//
Remark: '迪士尼陆地乐园 客人姓名:Liu Chang+Hu Yuwei~~~~注意!!! 人数:2大 日期:1月3号 价格:大人490元/张 共收980元,全款已收!',
//
Money:4200.0,
//
OrderStatus:1
//
},
//
{
//
OrderType: 1,
//
typeInfo: data.status[2],
//
OrderIncome: 0.0,
//
OrderNo: '2023010621459800',
//
OrderId: 891452,
//
ContactName: '罗超',
//
ContactEnName: 'LUOCHAO',
//
ContactPhone: '892788812',
//
Address: '318国道2913公桩左边的祝桑乡境内',
//
CreateTime: '2023/01/06 14:34:56',
//
DetailList: [
//
{
//
TicketName: '大阪環球影城',
//
TicketMoney: 4200.0,
//
Date: '2023/09/10',
//
TicketList: [
//
{
//
TypeName: '兒童票',
//
Num: 5,
//
Price: 400.0,
//
Money: 2000.0
//
},
//
{
//
TypeName: '成人票',
//
Num: 2,
//
Price: 800.0,
//
Money: 1600.0
//
},
//
{
//
TypeName: '學生票',
//
Num: 1,
//
Price: 600.0,
//
Money: 600.0
//
}
//
]
//
}
//
],
//
Remark: '迪士尼陆地乐园 客人姓名:Liu Chang+Hu Yuwei~~~~注意!!! 人数:2大 日期:1月3号 价格:大人490元/张 共收980元,全款已收!',
//
Money:4200.0,
//
OrderStatus:2,
//
SendType: data.sends[0]
//
}
//
)
return
{
...
toRefs
(
data
),
...
methods
,
...
...
@@ -374,7 +417,10 @@ export default defineComponent({
})
</
script
>
<
style
>
<
style
scoped
>
.light-border
table
td
:first-child
{
border-left
:
1px
solid
#eee
}
.light-border
table
,
.light-border
table
td
,
.light-border
.q-table__middle
,
...
...
src/i18n/ko-HG/index.ts
View file @
4846e72d
...
...
@@ -96,7 +96,7 @@ export default {
jian
:
'간'
,
ren
:
'사람이'
,
jp
:
'엔화'
,
jpc
:
'
¥
'
,
jpc
:
'
円
'
,
night
:
'밤'
,
jf
:
'칸'
,
day
:
'일'
...
...
src/i18n/zh-TW/index.ts
View file @
4846e72d
...
...
@@ -96,7 +96,7 @@ export default {
jian
:
'間'
,
ren
:
'人'
,
jp
:
'日圓'
,
jpc
:
'
¥
'
,
jpc
:
'
円
'
,
night
:
'晚'
,
jf
:
'間房'
,
day
:
'天'
...
...
@@ -788,6 +788,10 @@ export default {
//#region v1.0.2
v102
:{
ticket
:{
d
:
'门票日期'
,
hn
:
'门票名称'
,
sl
:
'数量'
,
starttime
:
'门票時間'
,
pageTitle
:
"票券檢索"
,
name
:
'請輸入景點名稱'
,
toggleListType1
:
"列表模式"
,
...
...
@@ -797,10 +801,6 @@ export default {
recommendTime
:
'推薦遊玩'
,
hour
:
'小時'
,
minutes
:
'分鐘'
,
ticketet
:
'兒童票'
,
ticketcr
:
'成人票'
,
ticketxs
:
'學生票'
,
ticketjt
:
'家庭套票(2大1小)'
,
load
:
'圖片加載失敗'
,
showtt
:{
t1
:
'共'
,
...
...
@@ -830,7 +830,7 @@ export default {
yj
:
'郵寄票券'
,
zqs
:
'自行取票說明'
,
zqd
:
'自行前往指定位置取票,當您完成付款後我們將通過郵件通知您取票的門票訊息'
,
sj
:
'
收件
人訊息'
,
sj
:
'
客
人訊息'
,
unit
:
'張'
,
sex
:{
man
:
'男'
,
...
...
@@ -863,6 +863,7 @@ export default {
to
:{
pageTitle
:
'票券訂單列表'
,
ticketName
:
'票券名稱'
,
Name
:
'客人名稱'
,
qj
:
'取券方式'
,
qjc
:
'取件人姓名(中/英)'
,
qjp
:
'取件人電話'
,
...
...
src/pages/ticket/TicketOrder.vue
View file @
4846e72d
...
...
@@ -29,9 +29,15 @@ export default defineComponent({
OrderStatus
:
0
,
StartTime
:
''
,
EndTime
:
''
,
TicketName
:
''
,
ContactName
:
''
,
ContactNumber
:
''
// TicketName:'',//景区名称
// ContactName: '',//收件名称
// ContactNumber: '',//电话
Name
:
''
,
//顾客名称
UseSTime
:
''
,
//门票开始时间
UseETime
:
''
,
//门票结束时间
MailingState
:
-
1
})
//search.OrderId = currentRouter.currentRoute.value.params.orderId
...
...
src/pages/ticket/TicketOrderPreview.vue
View file @
4846e72d
...
...
@@ -8,8 +8,8 @@
<div
class=
"q-mr-md"
>
<q-img
v-if=
"detailsObj.PicPathList&&detailsObj.PicPathList.length>0"
:src=
"detailsObj.PicPathList[0]"
:ratio=
"16 / 9"
spinner-color=
"grey"
spinner-size=
"50px"
width=
"100px"
fit=
"cover"
class=
"rounded-borders"
>
<template
v-slot:error
>
<div
class=
"absolute-full flex flex-center bg-
negative text-white
"
>
Cannot load image
<div
class=
"absolute-full flex flex-center bg-
blue-1 text-dark
"
>
{{
$t
(
'v102.ticket.load'
)
}}
</div>
</
template
>
</q-img>
...
...
@@ -31,7 +31,7 @@
<div
class=
"self-center full-width no-outline"
tabindex=
"0"
>
{{
msg
.
UseDate
}}
</div>
</
template
>
<q-popup-proxy
:offset=
"[0, 10]"
ref=
"qDateProxy"
>
<q-date
v-model=
"msg.UseDate"
:options=
"optionsFn"
mask=
"YYYY/MM/DD"
></q-date>
<q-date
v-model=
"msg.UseDate"
:options=
"optionsFn"
mask=
"YYYY/MM/DD"
@
update:model-value=
"getInfo"
></q-date>
</q-popup-proxy>
</q-field>
</div>
...
...
@@ -42,8 +42,10 @@
<div
class=
"f12 text-dark"
:class=
"{ 'col-2': $q.platform.is.desktop, 'col-3': $q.platform.is.mobile }"
>
{{ $t('v102.ticket.tt') }}:
</div>
<div
class=
"row items-center col wrap q-mt-md"
>
<div
class=
"q-pa-sm rounded-borders q-mr-md q-mb-md cursor-pointer row items-center"
:class=
"{ 'bg-grey-2': !x.checked, 'bg-primary text-white': x.checked }"
@
click=
"changeDetailListHandler(x)"
v-for=
"x in types"
>
<span
style=
"border-right: 1px solid #eee"
class=
"q-mr-sm q-pr-sm"
>
{{ x.name }}
</span>
<span>
{{ x.price.toFixed(2) }}
</span>
<
template
v-if=
"x.RemainingInventory>0"
>
<span
style=
"border-right: 1px solid #eee"
class=
"q-mr-sm q-pr-sm"
>
{{
x
.
TicketName
}}
</span>
<span>
{{
x
.
B2BPrice
.
toFixed
(
2
)
}}
</span>
</
template
>
</div>
</div>
</div>
...
...
@@ -83,26 +85,26 @@
<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
v-else
>
<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-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"
>
{{ $t('v102.ticket.sjc.c5') }}
</div>
<div
class=
"col-4"
v-if=
"msg.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=
"msg.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=
"guest
E
Name"
/>
<q-input
dense
standout
v-model=
"msg.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=
"guestName"
/>
<
!-- <
div class="col-2 q-mr-md q-mt-md">
<q-input
dense
standout
v-model=
"msg.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=
"msg.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=
"guest
E
Name"
/>
<div
class=
"col-2 q-mr-md q-mt-md"
>
<q-radio
v-model=
"msg.Sex"
checked-icon=
"task_alt"
unchecked-icon=
"panorama_fish_eye"
val=
"1"
:label=
"$t('v102.ticket.sex.man')"
/>
<q-radio v-model="msg.Sex" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" val="
0
" :label="$t('v102.ticket.sex.women')" />
</div>
-->
<q-radio
v-model=
"msg.Sex"
checked-icon=
"task_alt"
unchecked-icon=
"panorama_fish_eye"
val=
"
2
"
:label=
"$t('v102.ticket.sex.women')"
/>
</div>
<q-input
dense
standout
v-model=
"msg.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
dense
standout
v-model=
"msg.MailingAddress"
class=
"col-4 q-mt-md"
:placeholder=
"$t('v102.ticket.sjcp.c5')"
:rules=
"[(val:any, rules:any) => rules.email(val) || ' ']"
ref=
"guestEmail
"
/>
<q-input
v-if=
"msg.MailingState == '2'"
dense
standout
v-model=
"msg.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"
>
...
...
@@ -115,8 +117,7 @@
<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"
>
景区营业时间:7:00-15:30 可提前 7天 网上预订, 亦可于当日15:30 前预订景区门票。 (景区严禁携带宠物 景区单日 游客限量18000/日) 1、本景区限网上及手机客户端预订,不接受电话预订,且实行实名制预定,所有游客订票须录入身份证信息方可预定。 2、每个身份证,每日限购一张门票。每个用户每单限购八张门票,超过八张须分别下单。 3、儿童免票也需购票,方可入园。儿童免票对象(实行门票免票优惠的范围和群体):6周岁(含6周岁)以下的儿童享受门票和观光车票全免。 4、优惠对象:在校学生(全日制教育含本科以下)、青少年(7周岁-18周岁)、省级宗教部门颁发证书的宗教界人士、60周岁-64周岁老年人(国家法定节假日)。 5、免票对象:对符合政策条件的现役军人、伤残军人、在职、退休、残疾消防员人员和消防救援院校学员、残疾人、离休干部、抗美援朝军人、6周岁(含6周岁)以下儿童、65周岁以上老年人(自2018年10月1日起执行)、60周岁以上老年人(非国家法定节假日)(自2018年10月1日起执行)。 联票预订规则: ①、景区联票限连续三天进入同一景区游览的游客预订;
②、联票分次预订分次使用,即在使用一次入园联票进入景区后,再预订二次入园联票;使用二次入园联票进入景区后,再预订三次入园联票。 ③、景区接待量到达单日限量时,联票停止预订。 ④、其余预订规则按照预订须知执行,退改签、取票规则按照退订须知、取票须知执行。 以上信息仅供参考,具体信息请以景区当天披露为准。
{{detailsObj.BookingInfo}}
</div>
</div>
</div>
...
...
@@ -136,8 +137,8 @@
<div
v-if=
"isCheck"
>
<
template
v-for=
"x in types"
>
<div
class=
"row items-center q-mt-md"
v-if=
"x.checked"
>
<q-badge
color=
"grey-3"
style=
"padding: 5px 8px"
text-color=
"info"
:label=
"x.
n
ame"
/>
<div
class=
"col f12 text-right"
>
{{
x
.
p
rice
.
toFixed
(
2
)
}}
x
{{
x
.
num
}}{{
$t
(
'v102.ticket.unit'
)
}}
</div>
<q-badge
color=
"grey-3"
style=
"padding: 5px 8px"
text-color=
"info"
:label=
"x.
TicketN
ame"
/>
<div
class=
"col f12 text-right"
>
{{
x
.
B2BP
rice
.
toFixed
(
2
)
}}
x
{{
x
.
num
}}{{
$t
(
'v102.ticket.unit'
)
}}
</div>
</div>
</
template
>
</div>
...
...
@@ -161,8 +162,7 @@
<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"
>
景区营业时间:7:00-15:30 可提前 7天 网上预订, 亦可于当日15:30 前预订景区门票。 (景区严禁携带宠物 景区单日 游客限量18000/日) 1、本景区限网上及手机客户端预订,不接受电话预订,且实行实名制预定,所有游客订票须录入身份证信息方可预定。 2、每个身份证,每日限购一张门票。每个用户每单限购八张门票,超过八张须分别下单。 3、儿童免票也需购票,方可入园。儿童免票对象(实行门票免票优惠的范围和群体):6周岁(含6周岁)以下的儿童享受门票和观光车票全免。 4、优惠对象:在校学生(全日制教育含本科以下)、青少年(7周岁-18周岁)、省级宗教部门颁发证书的宗教界人士、60周岁-64周岁老年人(国家法定节假日)。 5、免票对象:对符合政策条件的现役军人、伤残军人、在职、退休、残疾消防员人员和消防救援院校学员、残疾人、离休干部、抗美援朝军人、6周岁(含6周岁)以下儿童、65周岁以上老年人(自2018年10月1日起执行)、60周岁以上老年人(非国家法定节假日)(自2018年10月1日起执行)。 联票预订规则: ①、景区联票限连续三天进入同一景区游览的游客预订;
②、联票分次预订分次使用,即在使用一次入园联票进入景区后,再预订二次入园联票;使用二次入园联票进入景区后,再预订三次入园联票。 ③、景区接待量到达单日限量时,联票停止预订。 ④、其余预订规则按照预订须知执行,退改签、取票规则按照退订须知、取票须知执行。 以上信息仅供参考,具体信息请以景区当天披露为准。
{{detailsObj.BookingInfo}}
</div>
</div>
</div>
...
...
@@ -210,14 +210,8 @@ export default defineComponent({
Mobile
:
''
,
CouponsId
:
''
,
//景点id
DetailList
:[]
as
any
,
Address
:
''
,
},
types
:
[
{
id
:
1
,
name
:
`
${
t
(
'v102.ticket.ticketet'
)}
`
,
price
:
900.0
,
checked
:
false
,
num
:
1
},
{
id
:
2
,
name
:
`
${
t
(
'v102.ticket.ticketcr'
)}
`
,
price
:
1800.0
,
checked
:
false
,
num
:
1
},
{
id
:
13
,
name
:
`
${
t
(
'v102.ticket.ticketxs'
)}
`
,
price
:
1200.0
,
checked
:
false
,
num
:
1
},
{
id
:
23
,
name
:
`
${
t
(
'v102.ticket.ticketjt'
)}
`
,
price
:
4000.0
,
checked
:
false
,
num
:
1
}
],
types
:
[],
isCheck
:
false
,
OpenTime
:
''
,
detailsObj
:
{}
as
any
,
...
...
@@ -225,26 +219,35 @@ export default defineComponent({
const
guestName
=
ref
(
null
)
as
any
const
guestEName
=
ref
(
null
)
as
any
const
guestMobile
=
ref
(
null
)
as
any
const
guest
Email
=
ref
(
null
)
as
any
const
guest
Address
=
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
.
CouponsId
=
currentRouter
.
currentRoute
.
value
.
params
.
ticketId
data
.
msg
.
UseDate
=
date
.
formatDate
(
date
.
addToDate
(
new
Date
(),
{
days
:
1
}),
'MM月DD日 ddd'
)
// date.formatDate(date.addToDate(new Date(), { days: 1 }), 'MM月DD日 ddd')
data
.
msg
.
UseDate
=
date
.
formatDate
(
date
.
addToDate
(
new
Date
(),
{
days
:
1
}),
'YYYY/MM/DD'
)
const
menu
=
inject
(
DirtionmaryHelper
.
MENU_KEYS
)
as
any
menu
.
value
=
8
const
methods
=
{
getInfo
(){
if
(
data
.
OpenTime
){
getInfo
(
value
:
String
,
reason
:
any
,
details
:
any
){
if
(
data
.
OpenTime
||
value
){
let
param
=
{
CouponsId
:
data
.
msg
.
CouponsId
,
OpenTime
:
data
.
OpenTime
OpenTime
:
value
?
value
:
data
.
OpenTime
}
TicketService
.
getTicketInfo
(
param
)
.
then
(
r
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
data
.
detailsObj
=
r
.
data
.
data
console
.
log
(
data
.
detailsObj
,
'----'
)
let
addList
=
function
(
arr
)
{
arr
.
forEach
(
item
=>
{
item
.
checked
=
false
item
.
num
=
1
});
};
addList
(
r
.
data
.
data
.
TicketPriceList
);
data
.
types
=
r
.
data
.
data
.
TicketPriceList
}
else
{
message
.
errorMsg
(
r
.
data
.
message
)
}
...
...
@@ -255,36 +258,49 @@ export default defineComponent({
}
},
submit
(){
console
.
log
(
data
.
isCheck
,
'0099'
)
methods
.
getNum
(
)
if
(
!
data
.
isCheck
)
return
if
(
data
.
msg
.
MailingState
==
'2'
){
if
(
data
.
loading
)
return
data
.
loading
=
true
let
flag
=
false
guestName
.
value
.
validate
()
guestEName
.
value
.
validate
()
guestMobile
.
value
.
validate
()
guestEmail
.
value
.
validate
()
flag
=
!
guestName
.
value
.
hasError
&&
!
guestEName
.
value
.
hasError
&&
!
guestMobile
.
value
.
hasError
&&
!
guestEmail
.
value
.
hasError
if
(
!
flag
)
return
if
(
data
.
msg
.
MailingState
==
'2'
){
guestAddress
.
value
.
validate
()
flag
=
!
guestName
.
value
.
hasError
&&
!
guestEName
.
value
.
hasError
&&
!
guestMobile
.
value
.
hasError
&&
!
guestAddress
.
value
.
hasError
}
else
{
data
.
msg
.
Name
=
''
data
.
msg
.
EName
=
''
data
.
msg
.
Mobile
=
''
flag
=
!
guestName
.
value
.
hasError
&&
!
guestEName
.
value
.
hasError
&&
!
guestMobile
.
value
.
hasError
data
.
msg
.
MailingAddress
=
''
}
if
(
!
flag
)
return
data
.
msg
.
DetailList
=
[]
as
any
data
.
types
.
forEach
(
x
=>
{
if
(
x
.
checked
){
let
y
=
{
TicketType
:
x
.
TicketCouponsType
,
TicketName
:
x
.
TicketName
,
Unit_Price
:
x
.
B2BPrice
,
Num
:
x
.
num
,
Money
:
x
.
B2BPrice
*
x
.
num
,
TicketId
:
x
.
TicketID
}
data
.
msg
.
DetailList
.
push
(
y
)
}
})
let
param
=
Object
.
assign
(
data
.
msg
)
return
TicketService
.
setTicketOrder
(
param
)
.
then
(
r
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
data
.
isCheck
=
false
data
.
pages
.
PageCount
=
r
.
data
.
data
.
pageCount
message
.
successMsg
(
`
${
t
(
'success'
)}
`
)
}
else
{
message
.
errorMsg
(
r
.
data
.
message
)
}
methods
.
getInfo
()
data
.
loading
=
false
}).
catch
(
e
=>
{
data
.
loading
=
false
message
.
errorMsg
(
e
.
message
)
data
.
isCheck
=
false
})
},
showCardHandler
()
{
...
...
@@ -315,15 +331,23 @@ export default defineComponent({
methods
.
calcMoneyHandler
()
},
changePeople
(
val
:
string
)
{
// setTimeout(()=>{
// methods.calculateNum()
// },50)
methods
.
getNum
()
},
getNum
(){
data
.
types
.
forEach
(
x
=>
{
if
(
x
.
num
>
x
.
RemainingInventory
){
x
.
num
=
x
.
RemainingInventory
}
})
setTimeout
(()
=>
{
methods
.
calcMoneyHandler
()
},
50
)
},
calcMoneyHandler
(){
data
.
msg
.
Money
=
0.0
data
.
types
.
forEach
(
x
=>
{
if
(
x
.
checked
){
data
.
msg
.
Money
+=
x
.
p
rice
*
x
.
num
data
.
msg
.
Money
+=
x
.
B2BP
rice
*
x
.
num
}
})
}
...
...
@@ -336,7 +360,7 @@ export default defineComponent({
guestName
,
guestEName
,
guestMobile
,
guest
Email
guest
Address
}
}
})
...
...
src/utils/tools.ts
View file @
4846e72d
...
...
@@ -227,7 +227,7 @@ export function getTicketOrderType(getNormal:boolean = false):Array<OrderType>{
let
typeLangs
=
[
t
(
'v102.ticket.zq'
),
t
(
'v102.ticket.yj'
)]
typeLangs
.
forEach
((
x
:
string
,
i
:
number
)
=>
{
types
.
push
({
TypeId
:
i
,
TypeId
:
i
+
1
,
TypeName
:
x
})
})
...
...
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