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
35ac083d
Commit
35ac083d
authored
Jan 18, 2023
by
youjie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
4f000595
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
1392 additions
and
366 deletions
+1392
-366
CharteredBus.ts
src/api/CharteredBus.ts
+12
-8
ListHeader.vue
src/components/CharteredBus/list/ListHeader.vue
+1
-1
ListTable.vue
src/components/CharteredBus/list/ListTable.vue
+1
-1
CharteredBusOrderHeader.vue
...components/CharteredBus/order/CharteredBusOrderHeader.vue
+172
-0
CharteredBusOrderList.vue
src/components/CharteredBus/order/CharteredBusOrderList.vue
+519
-0
ModifyOrderAddress.vue
src/components/CharteredBus/order/ModifyOrderAddress.vue
+142
-0
index.ts
src/i18n/zh-TW/index.ts
+22
-1
CharteredBusOrder.vue
src/pages/CharteredBus/CharteredBusOrder.vue
+27
-23
CharteredBusPreview.vue
src/pages/CharteredBus/CharteredBusPreview.vue
+114
-49
addEditVehicle.vue
src/pages/vehicle/addEditVehicle.vue
+2
-3
teamOrder.vue
src/pages/vehicle/teamOrder.vue
+351
-0
vehicleOrder.vue
src/pages/vehicle/vehicleOrder.vue
+27
-278
routes.ts
src/router/routes.ts
+2
-2
No files found.
src/api/CharteredBus.ts
View file @
35ac083d
...
...
@@ -2,15 +2,19 @@ import { HttpResponse } from '../@types'
import
request
from
'./request'
class
CharteredBusService
{
//
取消门票訂單
static
async
setTicketOrderCancel
(
OrderId
:
number
):
Promise
<
HttpResponse
>
{
return
request
(
'
ticket_post_CancelTicketOrder
'
,{
OrderId
})
//
包车訂單详情
static
async
GetTYMyCarOrderInfo
(
OrderId
:
number
):
Promise
<
HttpResponse
>
{
return
request
(
'
CarSingle_post_GetTYMyCarOrderInfo
'
,{
OrderId
})
}
//
门票訂單列表
static
async
getTicketOrderList
(
param
:
any
):
Promise
<
HttpResponse
>
{
return
request
(
'
ticket_post_GetMyTicketOrderPageList'
,
param
)
//
取消包车訂單
static
async
CancelTYCarOrder
(
OrderId
:
number
):
Promise
<
HttpResponse
>
{
return
request
(
'
CarSingle_post_CancelTYCarOrder'
,{
OrderId
}
)
}
// 提交包车訂單
// 包车訂單列表
static
async
GetTYMyCarOrderPageList
(
param
:
any
):
Promise
<
HttpResponse
>
{
return
request
(
'CarSingle_post_GetTYMyCarOrderPageList'
,
param
)
}
// 新增编辑 提交包车訂單
static
async
SetTYCarOrder
(
param
:
any
):
Promise
<
HttpResponse
>
{
return
request
(
'CarSingle_post_SetTYCarOrder'
,
param
)
}
...
...
@@ -18,7 +22,7 @@ class CharteredBusService {
static
async
GetTYCarSingleProductMonthPrice
(
param
:
any
):
Promise
<
HttpResponse
>
{
return
request
(
'CarSingle_post_GetTYCarSingleProductMonthPrice'
,
param
)
}
// 包车详情
// 包车
产品
详情
static
async
GetTYCarSingleProductInfo
(
param
:
any
):
Promise
<
HttpResponse
>
{
return
request
(
'CarSingle_post_GetTYCarSingleProductInfo'
,
param
)
}
...
...
src/components/CharteredBus/list/ListHeader.vue
View file @
35ac083d
...
...
@@ -84,7 +84,7 @@ export default {
data
.
searchClone
=
JSON
.
parse
(
JSON
.
stringify
(
search
.
msg
))
const
methods
=
{
goUrl
(){
$router
.
push
({
path
:
`/vehicle/addEditVehicle/
2
`
})
$router
.
push
({
path
:
`/vehicle/addEditVehicle/
4
`
})
},
getCarType
(
e
:
any
){
if
(
e
){
...
...
src/components/CharteredBus/list/ListTable.vue
View file @
35ac083d
...
...
@@ -24,7 +24,7 @@
</div>
-->
<div
v-if=
"search.msg.ViewType == 2"
class=
"row wrap justify-center"
>
<div
class=
"q-py-md"
style=
"width:
70%;min-width: 1000px
;"
>
<div
class=
"q-py-md"
style=
"width:
100%;overflow: auto
;"
>
<div
class=
"row q-pa-md q-mb-md bg-white rounded-borders"
>
<div
class=
"col"
></div>
<q-btn
dense
unelevated
class=
"hover q-px-sm q-mr-md"
v-for=
"(item,index) in 2"
...
...
src/components/CharteredBus/order/CharteredBusOrderHeader.vue
0 → 100644
View file @
35ac083d
<
template
>
<div
class=
"rounded-borders bg-white row items-center q-pa-md q-mb-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
@
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.CharteredBus.sjc.c8')"
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 row"
>
<q-input
class=
"col"
v-model=
"search.SurName"
dense
standout
:label=
"$t('v102.CharteredBus.sjc.c1x')"
/>
<q-input
class=
"col q-ml-sm"
v-model=
"search.Name"
dense
standout
:label=
"$t('v102.CharteredBus.sjc.c1m')"
/>
</div>
<q-input
v-model=
"search.ProductName"
dense
standout
:label=
"$t('v102.CharteredBus.sjc.c19')"
class=
"q-mt-md"
/>
<q-input
v-model=
"search.Mobile"
dense
standout
:label=
"$t('v102.CharteredBus.sjc.c2')"
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
}
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
,
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
})
},
optionsFnUse
(
cd
:
any
)
{
return
true
},
optionsFn
(
cd
:
any
)
{
return
cd
<
date
.
formatDate
(
date
.
addToDate
(
new
Date
(),
{
days
:
1
}),
'YYYY/MM/DD'
)
},
getDateRangeUse
(
value
){
search
.
OrderSTime
=
''
search
.
OrderETime
=
''
data
.
dateRangeFormatUse
=
''
},
getDateRange
(
value
){
search
.
StartTime
=
''
search
.
EndTime
=
''
data
.
dateRangeFormat
=
''
},
dateRangeHandlerUse
(
e
:
any
)
{
search
.
OrderSTime
=
`
${
e
.
from
.
year
}
/
${
e
.
from
.
month
}
/
${
e
.
from
.
day
}
`
search
.
OrderETime
=
`
${
e
.
to
.
year
}
/
${
e
.
to
.
month
}
/
${
e
.
to
.
day
}
`
data
.
dateRangeFormatUse
=
`
${
search
.
OrderSTime
}
-
${
search
.
OrderETime
}
`
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
.
OrderType
=
search
.
OrderType
realSearch
.
StartTime
=
search
.
StartTime
realSearch
.
EndTime
=
search
.
EndTime
realSearch
.
OrderSTime
=
search
.
OrderSTime
realSearch
.
OrderETime
=
search
.
OrderETime
realSearch
.
OrderStatus
=
search
.
OrderStatus
realSearch
.
OrderNo
=
search
.
OrderNo
realSearch
.
SurName
=
search
.
SurName
realSearch
.
Name
=
search
.
Name
realSearch
.
ProductName
=
search
.
ProductName
realSearch
.
Mobile
=
search
.
Mobile
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
.
length
>
0
)
setCnt
++
if
(
search
.
OrderSTime
.
length
>
0
)
setCnt
++
if
(
search
.
MailingState
>
0
)
setCnt
++
if
(
search
.
Name
)
setCnt
++
if
(
search
.
ProductName
)
setCnt
++
if
(
search
.
Mobile
)
setCnt
++
return
setCnt
})
methods
.
initStatus
()
return
{
...
toRefs
(
data
),
...
methods
,
search
,
searchCnt
}
}
})
</
script
>
<
style
></
style
>
src/components/CharteredBus/order/CharteredBusOrderList.vue
0 → 100644
View file @
35ac083d
<
template
>
<div>
<q-card
class=
"light-shadow q-pa-md bg-white rounded-borders q-mb-md"
flat
v-for=
"(x,index) in orders"
>
<div
class=
"row items-center desktop-only"
>
<div
class=
"q-mr-md"
>
<q-btn
:color=
"search.OrderType == 1 ?'cyan' : (search.OrderType == 2 ?'negative':'positive')"
unelevated
disable
size=
"sm"
>
<template
v-if=
"search.OrderType == 1"
>
{{
$t
(
'v102.CharteredBus.baochetype1'
)
}}
</
template
>
<
template
v-if=
"search.OrderType == 2"
>
{{
$t
(
'v102.CharteredBus.baochetype2'
)
}}
</
template
>
<
template
v-if=
"search.OrderType == 3"
>
{{
$t
(
'v102.CharteredBus.baochetype3'
)
}}
</
template
>
</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>
{{ $t('v102.ticket.sj') }}:{{ x.SurName }}{{ x.Name }}/{{ 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
class=
"q-mt-md row"
>
<q-table
separator=
"cell"
:hide-bottom=
"!x.Remark"
:pagination=
"{ rowsPerPage: 100 }"
:rows=
"[x]"
bordered
:columns=
"cols"
class=
"sticky-rightrowspan-column-table light-border col no-shadow"
>
<
template
v-slot:header
>
<q-tr>
<q-th
v-for=
"(item, i) in cols"
>
{{
item
.
label
}}
</q-th>
</q-tr>
</
template
>
<
template
v-slot:body-cell-OrderDate=
"props"
>
<q-td
:props=
"props"
>
<div
class=
"max-hotelname ellipsis"
>
{{
props
.
row
.
ProductName
}}
</div>
<div
class=
"text-grey-6 q-pt-xs"
>
{{
props
.
row
.
CreateTime
}}
</div>
<q-tooltip>
{{
props
.
row
.
ProductName
}}
</q-tooltip>
</q-td>
</
template
>
<
template
v-slot:body-cell-AirportName=
"props"
>
<q-td
:props=
"props"
>
<div>
{{
props
.
row
.
AirLine
}}
</div>
<div>
{{
props
.
row
.
AirportName
}}
</div>
<div
class=
"text-grey-9 q-pt-xs"
>
{{
props
.
row
.
FlightNumber
}}
</div>
<div
class=
"text-grey-6 q-pt-xs"
>
{{
props
.
row
.
FlightTime
}}
{{
search
.
OrderType
==
1
?
$t
(
'v102.CharteredBus.dida'
):
$t
(
'v102.CharteredBus.chufa'
)
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-HandLuggageNum=
"props"
>
<q-td
:props=
"props"
>
<div
v-if=
"props.row.HandLuggageNum>0"
>
<span
class=
"text-grey-6 q-pt-xs q-pr-sm"
>
{{
$t
(
'v102.CharteredBus.sjc.c27'
)
}}
:
</span>
{{
props
.
row
.
HandLuggageNum
}}
</div>
<div
v-if=
"props.row.RegisteredLuggageNum>0"
>
<span
class=
"text-grey-6 q-pt-xs q-pr-sm"
>
{{
$t
(
'v102.CharteredBus.sjc.c28'
)
}}
:
</span>
{{
props
.
row
.
RegisteredLuggageNum
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-GetonAddress=
"props"
>
<q-td
:props=
"props"
>
<div
v-if=
"props.row.GetonAddress"
>
<span
class=
"text-grey-6 q-pt-xs q-pr-sm"
>
{{
$t
(
'v102.CharteredBus.sjc.c25'
)
}}
:
</span>
{{
props
.
row
.
GetonAddress
}}
</div>
<div
class=
"q-pt-xs"
v-if=
"props.row.GetoffAddress"
>
<span
class=
"text-grey-6 q-pt-xs q-pr-sm"
>
{{
$t
(
'v102.CharteredBus.sjc.c26'
)
}}
:
</span>
{{
props
.
row
.
GetoffAddress
}}
</div>
<div
class=
"q-pt-xs"
><span
class=
"text-grey-6 q-pt-xs q-pr-sm fz12"
>
{{
$t
(
'v102.CharteredBus.sjc.c8'
)
}}
:
</span>
{{
props
.
row
.
OrderDate
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-Numr=
"props"
>
<q-td
:props=
"props"
>
<div
v-if=
"props.row.ManNum>0"
>
<span
class=
"text-grey-6 q-pt-xs q-pr-sm"
>
{{
$t
(
'v102.CharteredBus.sjc.c21'
)
}}
:
</span>
{{
props
.
row
.
ManNum
}}{{
$t
(
'v102.CharteredBus.sjc.c30'
)
}}
</div>
<div
class=
"q-pt-xs"
v-if=
"props.row.ChildNum>0"
>
<span
class=
"text-grey-6 q-pt-xs q-pr-sm"
>
{{
$t
(
'v102.CharteredBus.sjc.c22'
)
}}
:
</span>
{{
props
.
row
.
ChildNum
}}{{
$t
(
'v102.CharteredBus.sjc.c30'
)
}}
</div>
<div
class=
"q-pt-xs"
v-if=
"props.row.BabyNum>0"
>
<span
class=
"text-grey-6 q-pt-xs q-pr-sm"
>
{{
$t
(
'v102.CharteredBus.sjc.c23'
)
}}
:
</span>
{{
props
.
row
.
BabyNum
}}{{
$t
(
'v102.CharteredBus.sjc.c30'
)
}}
</div>
</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">{{ $t('v102.ticket.zqa') }}:</div>
<div class="f12 text-dark q-mt-sm">
{{ x.SelffetchAddress?x.SelffetchAddress:$t('v102.ticket.nzqa') }}
</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="f12">{{ $t('unit.jpc') }}</span> -->
<span
class=
"din text-subtitle1"
>
{{ moneyFormat(x.Money) }}
</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=
"editOrder(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-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"
>
<q-card
flat
class=
"q-pa-md"
style=
"background: #080655; width: 30vw; min-width: 375px"
>
<div
class=
"row items-end"
>
<img
src=
"../../../assets/images/green_pic.jpg"
style=
"width: 100px"
/>
<div
class=
"q-ml-md f12 text-grey-4 col text-right"
>
水口支店 店番593
</div>
</div>
<div
class=
"q-mt-md"
>
<div
class=
"f12 text-grey-1"
style=
"opacity: 0.3"
>
帳戶名:
</div>
<div
class=
"pf text-grey-4 text-weight-bolder text-subtitle1"
>
株式会社ピースインターナショナル
</div>
</div>
<div
class=
"q-mt-md"
>
<div
class=
"f12 text-grey-1"
style=
"opacity: 0.3"
>
口座番號:
</div>
<div
class=
"pf text-grey-4 text-weight-bolder text-subtitle1"
>
593-1070078
<span
class=
"f12 text-grey-1 text-weight-400"
style=
"opacity: 0.5"
>
(レギュラー口座)
</span>
</div>
</div>
<div
class=
"q-mt-md"
>
<div
class=
"f12 text-grey-1"
style=
"opacity: 0.3"
>
銀行住所
</div>
<div
class=
"pf text-grey-1 text-weight-bolder f12"
style=
"opacity: 0.5"
>
滋賀県甲賀市水口町本綾野5-21 (0748-65-1011)
</div>
</div>
<div
class=
"q-mt-md text-right"
>
<q-btn
color=
"white"
outline
class=
"q-px-lg"
style=
"opacity: 0.6"
dense
:label=
"$t('hotelorder.copy')"
@
click=
"setCopyHandler(null, '行名:京都銀行\n支店名:水口支店 店番593\n口座種別:レギュラー口座\n口座番号: 593-1070078\n账户名:株式会社ピースインターナショナル\n银行住所:滋賀県甲賀市水口町本綾野5-21\n银行邮变:〒528-0037\n電話番号:0748-65-1011\n')"
/>
</div>
</q-card>
</q-dialog>
</template>
<
script
lang=
"ts"
>
import
CharteredBusService
from
'../../../api/CharteredBus'
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
{
useRouter
}
from
'vue-router'
export
default
defineComponent
({
components
:
{
svgIcon
},
props
:[
'OrderType'
],
setup
(
props
)
{
const
$router
=
useRouter
()
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
()
})
watch
(
props
,
(
n
,
o
)
=>
{
search
.
OrderType
=
props
.
OrderType
})
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
:
'OrderDate'
,
label
:
t
(
'v102.CharteredBus.sjc.c19'
)
+
'('
+
t
(
'v102.CharteredBus.pt'
)
+
')'
,
field
:
(
row
:
any
)
=>
row
,
align
:
'left'
},
{
name
:
'AirportName'
,
label
:
t
(
'v102.CharteredBus.hangban'
),
field
:
(
row
:
any
)
=>
row
,
align
:
'left'
},
{
name
:
'HandLuggageNum'
,
label
:
t
(
'v102.CharteredBus.sjc.c31'
),
field
:
(
row
:
any
)
=>
row
,
align
:
'left'
},
{
name
:
'GetonAddress'
,
label
:
t
(
'v102.CharteredBus.sjc.c24'
),
field
:
(
row
:
any
)
=>
row
,
align
:
'left'
},
{
name
:
'Numr'
,
label
:
t
(
'v102.CharteredBus.sjc.c29'
),
field
:
(
row
:
any
)
=>
row
.
Num
,
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
[],
})
const
methods
=
{
ViewPayment
()
{
data
.
showBankAccount
=
true
},
initOrders
()
{
data
.
loading
=
true
let
param
=
Object
.
assign
(
data
.
pages
,
search
)
CharteredBusService
.
GetTYMyCarOrderPageList
(
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
]
})
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
CharteredBusService
.
CancelTYCarOrder
(
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
()
},
editOrder
(
order
:
any
)
{
let
onldOpen
=
`
${
order
.
OrderDate
.
split
(
'-'
)}
`
let
newOpen
=
onldOpen
.
substring
(
0
,
4
)
+
onldOpen
.
substring
(
5
,
7
)
+
onldOpen
.
substring
(
8
,
10
)
$router
.
push
({
path
:
`/vehicle/Preview/
${
order
.
ProductId
}
/
${
newOpen
}
/
${
order
.
OrderId
}
`
})
},
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
()
// 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
,
search
,
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/CharteredBus/order/ModifyOrderAddress.vue
0 → 100644
View file @
35ac083d
<
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/i18n/zh-TW/index.ts
View file @
35ac083d
...
...
@@ -962,10 +962,15 @@ export default {
s29
:
'手配費:'
,
s30
:
'司機:'
,
s31
:
'車牌號:'
,
}
},
tabtitle0
:
'團隊訂單'
,
tabtitle1
:
'接機訂單'
,
tabtitle2
:
'送機訂單'
,
tabtitle3
:
'包車訂單'
,
},
CharteredBus
:{
pageTitle
:
'車輛檢索'
,
pageTitle2
:
'包車訂單'
,
baochetype
:
'包車類型'
,
baochetype0
:
'不限'
,
baochetype1
:
'接機'
,
...
...
@@ -1006,8 +1011,11 @@ export default {
nt
:
'沒有選擇車型'
,
rtt
:
'取消限製'
,
td
:
'团订'
,
bianji
:
'確定編輯訂單'
,
sjc
:{
c1
:
'姓名'
,
c1x
:
'姓'
,
c1m
:
'名'
,
c2
:
'電話'
,
c3
:
'性別'
,
c4
:
'聯絡方式'
,
...
...
@@ -1025,6 +1033,19 @@ export default {
c16
:
'婴儿数'
,
c17
:
'手提行李数'
,
c18
:
'托运行李数'
,
c19
:
'產品名稱'
,
c20
:
'機場'
,
c21
:
'成人'
,
c22
:
'儿童'
,
c23
:
'婴儿'
,
c24
:
'上下车地点'
,
c25
:
'上车'
,
c26
:
'下车'
,
c27
:
'手提行李'
,
c28
:
'托运行李'
,
c29
:
'人员'
,
c30
:
'人'
,
c31
:
'行李'
,
},
sjcp
:{
c1
:
'請輸入姓'
,
...
...
src/pages/CharteredBus/CharteredBusOrder.vue
View file @
35ac083d
<
template
>
<div
class=
"
fix-height-subpage column no-wrap q-pa
-md"
>
<
ticket-order-header></ticket-order-h
eader>
<
ticket-order-list></ticket-order-l
ist>
<div
class=
"
q-py
-md"
>
<
CharteredBusOrderHeader></CharteredBusOrderH
eader>
<
CharteredBusOrderList
:OrderType=
"OrderType"
></CharteredBusOrderL
ist>
</div>
</
template
>
<
script
lang=
"ts"
>
import
{
defineComponent
,
inject
,
provide
,
reactive
,
toRefs
,
onMounted
}
from
'vue'
import
{
defineComponent
,
inject
,
provide
,
reactive
,
toRefs
,
onMounted
,
watch
}
from
'vue'
import
{
currentRouter
}
from
'src/router'
import
useMetaModule
from
'../../module/meta/metaModule'
import
{
useI18n
}
from
'vue-i18n'
import
TicketOrderHeader
from
'src/components/CharteredBus/order/Ticket
OrderHeader.vue'
import
CharteredBusOrderHeader
from
'../../components/CharteredBus/order/CharteredBus
OrderHeader.vue'
import
{
DirtionmaryHelper
}
from
'src/config/dictionary'
import
TicketOrderList
from
'src/components/CharteredBus/order/Ticket
OrderList.vue'
import
CharteredBusOrderList
from
'../../components/CharteredBus/order/CharteredBus
OrderList.vue'
export
default
defineComponent
({
components
:
{
TicketOrderHeader
,
TicketOrderList
},
props
:[
'type'
],
components
:
{
CharteredBusOrderHeader
,
CharteredBusOrderList
},
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 pageTitle = inject(DirtionmaryHelper.PAGE_TITLE_KEY) as any
// pageTitle.value = t('v102.CharteredBus.pageTitle2')
// setTitle(pageTitle.value)
const
search
=
reactive
({
OrderType
:
props
.
type
,
OrderId
:
''
,
OrderNo
:
''
,
SurName
:
''
,
Name
:
''
,
Mobile
:
''
,
OrderStatus
:
0
,
StartTime
:
''
,
EndTime
:
''
,
OrderSTime
:
''
,
OrderETime
:
''
,
ProductName
:
''
,
// TicketName:'',//景区名称
CouponsName
:
''
,
//景区名称
ContactNumber
:
''
,
//电话
Name
:
''
,
//顾客名称
UseSTime
:
''
,
//门票开始时间
UseETime
:
''
,
//门票结束时间
MailingState
:
-
1
Mobile
:
''
,
//电话
})
search
.
OrderId
=
currentRouter
.
currentRoute
.
value
.
params
.
orderId
//
search.OrderId = currentRouter.currentRoute.value.params.orderId
provide
(
DirtionmaryHelper
.
TICKET_ORDER_SEARCH
,
search
)
const
menu
=
inject
(
DirtionmaryHelper
.
MENU_KEYS
)
as
any
menu
.
value
=
9
const
data
=
reactive
({})
const
data
=
reactive
({
OrderType
:
''
})
watch
(
props
,
(
n
,
o
)
=>
{
data
.
OrderType
=
props
.
type
})
const
methods
=
{}
onMounted
(()
=>
{})
return
{
...
toRefs
(
data
),
...
methods
,
search
}
...
...
src/pages/CharteredBus/CharteredBusPreview.vue
View file @
35ac083d
...
...
@@ -50,7 +50,7 @@
<div
:class=
"{'column':($q.screen.width<1200 || $q.platform.is.mobile),'row items-center':!($q.screen.width<1200 || $q.platform.is.mobile)}"
>
<div
class=
"f12 text-dark"
:class=
"{ 'col-2': $q.platform.is.desktop, 'col-3': $q.platform.is.mobile }"
>
{{ $t('v102.CharteredBus.jc') }}:
</div>
<div
class=
"row items-center col wrap q-mt-md"
>
<div
class=
"q-pa-sm rounded-borders q-mr-md cursor-pointer row items-center"
:class=
"{ 'bg-grey-2': !x.checked, 'bg-primary text-white': x.checked }"
@
click=
"changeDetailListHandler(x,1)"
v-for=
"x in AirportTypes"
>
<div
class=
"q-pa-sm rounded-borders q-mr-md cursor-pointer row items-center"
:class=
"{ 'bg-grey-2': !x.checked, 'bg-primary text-white': x.checked }"
@
click=
"changeDetailListHandler(x,1
,msg.OrderId
)"
v-for=
"x in AirportTypes"
>
<span>
{{ x.AirportName }}
</span>
</div>
</div>
...
...
@@ -168,12 +168,12 @@
</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.CharteredBus.sjc.c5') }}
</div>
<div
class=
"col q-mr-md"
>
{{ $t('v102.CharteredBus.sjc.c6') }}
</div>
<div
class=
"col q-mr-md"
v-if=
"msg.OrderType!=2"
>
{{ $t('v102.CharteredBus.sjc.c6') }}
</div>
<div
class=
"col"
>
{{ $t('v102.CharteredBus.sjc.c8') }}
</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.GetonAddress"
class=
"col q-mt-md col"
:class=
"{'q-mr-md':$q.platform.is.desktop}"
:placeholder=
"$t('v102.CharteredBus.sjcp.c5')"
:rules=
"[ val => val && val.length > 0 || ' ']"
ref=
"guestGetonAddress"
/>
<q-input
dense
standout
v-model=
"msg.GetoffAddress"
class=
"col q-mt-md"
:class=
"{'q-mr-md':$q.platform.is.desktop}"
:placeholder=
"$t('v102.CharteredBus.sjcp.c6')"
:rules=
"[ val => val && val.length > 0 || ' ']"
ref=
"guestGetoffAddress"
/>
<q-input
v-if=
"msg.OrderType!=2"
dense
standout
v-model=
"msg.GetoffAddress"
class=
"col q-mt-md"
:class=
"{'q-mr-md':$q.platform.is.desktop}"
:placeholder=
"$t('v102.CharteredBus.sjcp.c6')"
:rules=
"[ val => val && val.length > 0 || ' ']"
ref=
"guestGetoffAddress"
/>
<q-field
standout
:model-value=
"msg.OrderDate"
class=
"col text-dark cursor-pointer height"
ref=
"guestTimeData"
>
<
template
v-slot:control
>
<div
class=
"self-center full-width no-outline"
tabindex=
"0"
>
...
...
@@ -198,15 +198,15 @@
<div
class=
"col q-mr-md"
>
{{ $t('v102.CharteredBus.sjc.c14') }}
</div>
<div
class=
"col q-mr-md"
>
{{ $t('v102.CharteredBus.sjc.c15') }}
</div>
<div
class=
"col q-mr-md"
>
{{ $t('v102.CharteredBus.sjc.c16') }}
</div>
<div
class=
"col q-mr-md"
>
{{ $t('v102.CharteredBus.sjc.c17') }}
</div>
<div
class=
"col"
>
{{ $t('v102.CharteredBus.sjc.c18') }}
</div>
<div
class=
"col q-mr-md"
v-if=
"msg.OrderType!=3"
>
{{ $t('v102.CharteredBus.sjc.c17') }}
</div>
<div
class=
"col"
v-if=
"msg.OrderType!=3"
>
{{ $t('v102.CharteredBus.sjc.c18') }}
</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.ManNum"
mask=
"#"
class=
"col q-mt-md col"
:class=
"{'q-mr-md':$q.platform.is.desktop}"
:placeholder=
"$t('v102.CharteredBus.sjcp.c11')"
:rules=
"[ val => val && val.length > 0 || ' ']"
ref=
"guestManNum"
/>
<q-input
dense
standout
v-model=
"msg.ChildNum"
mask=
"#"
class=
"col q-mt-md"
:class=
"{'q-mr-md':$q.platform.is.desktop}"
:placeholder=
"$t('v102.CharteredBus.sjcp.c12')"
:rules=
"[ val => val && val.length > 0 || ' ']"
ref=
"guestChildNum"
/>
<q-input
dense
standout
v-model=
"msg.BabyNum"
mask=
"#"
class=
"col q-mt-md"
:class=
"{'q-mr-md':$q.platform.is.desktop}"
:placeholder=
"$t('v102.CharteredBus.sjcp.c13')"
:rules=
"[ val => val && val.length > 0 || ' ']"
ref=
"guestBabyNum"
/>
<q-input
dense
standout
v-model=
"msg.HandLuggageNum"
mask=
"#"
class=
"col q-mt-md"
:class=
"{'q-mr-md':$q.platform.is.desktop}"
:placeholder=
"$t('v102.CharteredBus.sjcp.c14')"
:rules=
"[ val => val && val.length > 0 || ' ']"
ref=
"guestHandLuggageNum"
/>
<q-input
dense
standout
v-model=
"msg.RegisteredLuggageNum"
mask=
"#"
class=
"col q-mt-md"
:class=
"{'q-mr-md':$q.platform.is.desktop}"
:placeholder=
"$t('v102.CharteredBus.sjcp.c15')"
:rules=
"[ val => val && val.length > 0 || ' ']"
ref=
"guestRegisteredLuggageNum"
/>
<q-input
v-if=
"msg.OrderType!=3"
dense
standout
v-model=
"msg.HandLuggageNum"
mask=
"#"
class=
"col q-mt-md"
:class=
"{'q-mr-md':$q.platform.is.desktop}"
:placeholder=
"$t('v102.CharteredBus.sjcp.c14')"
:rules=
"[ val => val && val.length > 0 || ' ']"
ref=
"guestHandLuggageNum"
/>
<q-input
v-if=
"msg.OrderType!=3"
dense
standout
v-model=
"msg.RegisteredLuggageNum"
mask=
"#"
class=
"col q-mt-md"
:class=
"{'q-mr-md':$q.platform.is.desktop}"
:placeholder=
"$t('v102.CharteredBus.sjcp.c15')"
:rules=
"[ val => val && val.length > 0 || ' ']"
ref=
"guestRegisteredLuggageNum"
/>
</div>
</div>
...
...
@@ -237,7 +237,7 @@
<q-input
dense
standout
v-model=
"msg.SurName"
class=
"col q-mt-md col"
:class=
"{'q-mr-md':$q.platform.is.desktop}"
:placeholder=
"$t('v102.CharteredBus.sjcp.c1')"
:rules=
"[ val => val && val.length > 0 || ' ']"
ref=
"guestSurName"
/>
<q-input
dense
standout
v-model=
"msg.Name"
class=
"col q-mt-md col"
:class=
"{'q-mr-md':$q.platform.is.desktop}"
:placeholder=
"$t('v102.CharteredBus.sjcp.c1m')"
:rules=
"[ val => val && val.length > 0 || ' ']"
ref=
"guestName"
/>
</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.CharteredBus.sjcp.c2')"
:rules=
"[ val => val && val.length
== 11
|| ' ']"
ref=
"guestMobile"
/>
<q-input
dense
standout
v-model=
"msg.Mobile"
class=
"col q-mt-md"
:class=
"{'q-mr-md':$q.platform.is.desktop}"
:placeholder=
"$t('v102.CharteredBus.sjcp.c2')"
:rules=
"[ val => val && val.length
> 0
|| ' ']"
ref=
"guestMobile"
/>
<!-- <q-input dense standout v-model="msg.ContactWay" class="col q-mt-md" :class="{'q-mr-md':$q.platform.is.desktop}" :placeholder="$t('v102.CharteredBus.sjcp.c4')" :rules="[ val => val && val.length >0 || ' ']" ref="guestContactWay"/> -->
<div
class=
"col-2 q-mr-md"
>
<q-radio
v-model=
"msg.Sex"
checked-icon=
"task_alt"
unchecked-icon=
"panorama_fish_eye"
val=
"1"
:label=
"$t('v102.ticket.sex.man')"
/>
...
...
@@ -295,7 +295,7 @@
</span>
</div>
<div
class=
"text-right"
>
<q-btn
color=
"primary"
unelevated
class=
"q-px-lg"
:disable=
"!isCheck"
:label=
"
$t('v102.ticket.sb')
"
@
click=
"submit"
/>
<q-btn
color=
"primary"
unelevated
class=
"q-px-lg"
:disable=
"!isCheck"
:label=
"
`${!msg.OrderId?$t('v102.ticket.sb'):$t('v102.CharteredBus.bianji')}`
"
@
click=
"submit"
/>
</div>
</div>
</div>
...
...
@@ -362,31 +362,19 @@ export default defineComponent({
FlightTime
:
''
,
//航班时间
GetonAddress
:
''
,
//上车点
GetoffAddress
:
''
,
//下车点
ManNum
:
''
,
//成人数
ChildNum
:
''
,
//儿童数
BabyNum
:
''
,
//婴儿数
HandLuggageNum
:
''
,
//手提行李数量
RegisteredLuggageNum
:
''
,
//托运行李数量
ManNum
:
null
,
//成人数
ChildNum
:
null
,
//儿童数
BabyNum
:
null
,
//婴儿数
HandLuggageNum
:
null
,
//手提行李数量
RegisteredLuggageNum
:
null
,
//托运行李数量
ContactWay
:
''
,
//联络方式 WeChat
Mobile
:
''
,
//电话
ProductId
:
''
,
CarId
:
''
,
//产品类型ID
MailingState
:
'1'
,
//邮寄状态 1自取 2邮寄
MailingAddress
:
''
,
//MailingState =2 填写邮寄
Name
:
''
,
EName
:
''
,
Birthday
:
''
,
CouponsId
:
''
,
//景点id
},
types
:
[],
AirportTypes
:
[],
PlaceTypes
:
[],
types
:
[]
as
any
,
AirportTypes
:
[]
as
any
,
PlaceTypes
:
[]
as
any
,
isCheck
:
false
,
SetOutTime
:
''
,
detailsObj
:
{}
as
any
,
...
...
@@ -416,14 +404,73 @@ export default defineComponent({
const
guestName
=
ref
(
null
)
as
any
const
guestMobile
=
ref
(
null
)
as
any
const
guestContactWay
=
ref
(
null
)
as
any
if
(
currentRouter
.
currentRoute
){
if
(
currentRouter
.
currentRoute
.
value
.
params
.
Time
){
let
time
=
currentRouter
.
currentRoute
.
value
.
params
.
Time
data
.
SetOutTime
=
time
.
substring
(
0
,
4
)
+
'-'
+
time
.
substring
(
4
,
6
)
+
'-'
+
time
.
substring
(
6
,
8
)
}
data
.
msg
.
ProductId
=
currentRouter
.
currentRoute
.
value
.
params
.
ProductId
data
.
ProductId
=
data
.
msg
.
ProductId
if
(
currentRouter
.
currentRoute
.
value
.
params
.
orderId
){
data
.
msg
.
OrderId
=
currentRouter
.
currentRoute
.
value
.
params
.
orderId
}
}
const
menu
=
inject
(
DirtionmaryHelper
.
MENU_KEYS
)
as
any
menu
.
value
=
5
const
methods
=
{
// 获取订单详情
getOrderInfo
(){
CharteredBusService
.
GetTYMyCarOrderInfo
(
data
.
msg
.
OrderId
)
.
then
(
r
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
data
.
msg
=
{
OrderId
:
r
.
data
.
data
.
OrderId
,
OrderType
:
String
(
r
.
data
.
data
.
OrderType
),
OrderDate
:
r
.
data
.
data
.
OrderDate
,
//预定日期
Unit_Price
:
r
.
data
.
data
.
Unit_Price
,
//单价
Num
:
r
.
data
.
data
.
Num
,
//数量
Money
:
r
.
data
.
data
.
Money
,
Sex
:
String
(
r
.
data
.
data
.
Sex
),
//1男2女
SurName
:
r
.
data
.
data
.
SurName
,
//姓
Name
:
r
.
data
.
data
.
Name
,
//名
Remark
:
r
.
data
.
data
.
Remark
,
AirportId
:
r
.
data
.
data
.
AirportId
,
AirportTerminal
:
r
.
data
.
data
.
AirportTerminal
,
//航厦
AirLine
:
r
.
data
.
data
.
AirLine
,
//航空公司名称
FlightNumber
:
r
.
data
.
data
.
FlightNumber
,
//航班号
FlightTime
:
r
.
data
.
data
.
FlightTime
,
//航班时间
GetonAddress
:
r
.
data
.
data
.
GetonAddress
,
//上车点
GetoffAddress
:
r
.
data
.
data
.
GetoffAddress
,
//下车点
ManNum
:
String
(
r
.
data
.
data
.
ManNum
),
//成人数
ChildNum
:
String
(
r
.
data
.
data
.
ChildNum
),
//儿童数
BabyNum
:
String
(
r
.
data
.
data
.
BabyNum
),
//婴儿数
HandLuggageNum
:
String
(
r
.
data
.
data
.
HandLuggageNum
),
//手提行李数量
RegisteredLuggageNum
:
String
(
r
.
data
.
data
.
RegisteredLuggageNum
),
//托运行李数量
ContactWay
:
r
.
data
.
data
.
ContactWay
,
//联络方式 WeChat
Mobile
:
r
.
data
.
data
.
Mobile
,
//电话
ProductId
:
r
.
data
.
data
.
ProductId
,
CarId
:
r
.
data
.
data
.
CarId
,
//产品类型ID
}
data
.
AirportTypes
.
forEach
(
x
=>
{
if
(
x
.
AirportId
==
r
.
data
.
data
.
AirportId
){
methods
.
changeDetailListHandler
(
x
,
1
)
}
})
data
.
types
.
forEach
(
x
=>
{
if
(
x
.
Id
==
r
.
data
.
data
.
CarId
){
methods
.
changeDetailListHandler
(
x
,
3
)
}
})
}
else
{
message
.
errorMsg
(
r
.
data
.
message
)
}
}).
catch
(
e
=>
{
message
.
errorMsg
(
e
.
message
)
data
.
isCheck
=
false
})
},
dateRangeHandler
(
e
:
any
){
data
.
msg
.
OrderDate
=
data
.
SetOutTime
+
' '
+
data
.
timeData
if
(
qTimeProxy
.
value
)
qTimeProxy
.
value
.
hide
()
...
...
@@ -493,6 +540,9 @@ export default defineComponent({
if
(
data
.
types
&&
data
.
types
.
length
==
0
){
message
.
errorMsg
(
`
${
t
(
'v102.ticket.nobj'
)}
`
)
}
if
(
data
.
msg
.
OrderId
){
methods
.
getOrderInfo
()
}
}
else
{
message
.
errorMsg
(
r
.
data
.
message
)
}
...
...
@@ -512,7 +562,10 @@ export default defineComponent({
}
guestGetonAddress
.
value
.
validate
()
if
(
data
.
detailsObj
.
CarType
!=
2
){
guestGetoffAddress
.
value
.
validate
()
}
guestTimeData
.
value
.
validate
()
guestManNum
.
value
.
validate
()
...
...
@@ -521,11 +574,15 @@ export default defineComponent({
guestMobile
.
value
.
validate
()
if
(
data
.
detailsObj
.
CarType
!=
3
){
if
(
!
data
.
msg
.
AirportId
){
message
.
errorMsg
(
`
${
t
(
'v102.CharteredBus.
sjc.
jc'
)}
`
)
message
.
errorMsg
(
`
${
t
(
'v102.CharteredBus.jc'
)}
`
)
return
}
if
(
data
.
detailsObj
.
CarType
==
1
){
flag
=
!
guestAirportTerminal
.
value
.
hasError
&&
!
guestAirLine
.
value
.
hasError
&&
!
guestFlightNumber
.
value
.
hasError
&&
!
guestFlightTime
.
value
.
hasError
&&
!
guestGetonAddress
.
value
.
hasError
&&
!
guestGetoffAddress
.
value
.
hasError
&&
!
guestTimeData
.
value
.
hasError
&&
!
guestManNum
.
value
.
hasError
&&
!
guestSurName
.
value
.
hasError
&&
!
guestName
.
value
.
hasError
&&
!
guestMobile
.
value
.
hasError
// && !guestContactWay.value.hasError
}
else
{
flag
=
!
guestAirportTerminal
.
value
.
hasError
&&
!
guestAirLine
.
value
.
hasError
&&
!
guestFlightNumber
.
value
.
hasError
&&
!
guestFlightTime
.
value
.
hasError
&&
!
guestGetonAddress
.
value
.
hasError
&&
!
guestTimeData
.
value
.
hasError
&&
!
guestManNum
.
value
.
hasError
&&
!
guestSurName
.
value
.
hasError
&&
!
guestName
.
value
.
hasError
&&
!
guestMobile
.
value
.
hasError
}
}
else
{
flag
=
!
guestGetonAddress
.
value
.
hasError
&&
!
guestGetoffAddress
.
value
.
hasError
&&
!
guestTimeData
.
value
.
hasError
&&
!
guestManNum
.
value
.
hasError
&&
!
guestSurName
.
value
.
hasError
&&
!
guestName
.
value
.
hasError
&&
!
guestMobile
.
value
.
hasError
...
...
@@ -544,6 +601,10 @@ export default defineComponent({
message
.
errorMsg
(
`
${
data
.
detailsObj
.
CarType
==
1
?
t
(
'v102.CharteredBus.sjc.c12'
):
t
(
'v102.CharteredBus.sjc.c13'
)}
`
)
return
}
if
(
!
data
.
msg
.
AirportId
){
message
.
errorMsg
(
`
${
t
(
'v102.CharteredBus.jc'
)}
`
)
return
}
}
if
(
!
data
.
isCheck
)
return
if
(
data
.
loading
)
return
...
...
@@ -559,7 +620,7 @@ export default defineComponent({
.
then
(
r
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
message
.
successMsg
(
`
${
t
(
'success'
)}
`
)
$router
.
push
({
path
:
'/vehicle/order'
})
$router
.
push
({
path
:
`/vehicle/order/
${
data
.
detailsObj
.
CarType
}
`
})
}
else
{
message
.
errorMsg
(
r
.
data
.
message
)
}
...
...
@@ -576,8 +637,9 @@ export default defineComponent({
optionsFn
(
cd
:
any
)
{
return
cd
>=
date
.
formatDate
(
date
.
addToDate
(
new
Date
(),
{
days
:
1
}),
'YYYY/MM/DD'
)
},
changeDetailListHandler
(
e
:
any
,
i
:
Number
)
{
changeDetailListHandler
(
e
:
any
,
i
:
Number
,
OrderId
:
Number
)
{
if
(
i
==
1
){
if
(
!
OrderId
){
data
.
AirportTypes
.
forEach
(
x
=>
{
x
.
checked
=
false
})
...
...
@@ -588,6 +650,7 @@ export default defineComponent({
}
if
(
data
.
types
.
findIndex
(
x
=>
x
.
checked
)
>
-
1
)
methods
.
getQuotation
()
}
}
if
(
i
==
2
){
data
.
PlaceTypes
.
forEach
(
x
=>
{
x
.
checked
=
false
...
...
@@ -641,7 +704,9 @@ export default defineComponent({
})
}
}
if
(
data
.
msg
.
ProductId
){
methods
.
getInfo
()
}
return
{
...
toRefs
(
data
),
...
...
src/pages/vehicle/addEditVehicle.vue
View file @
35ac083d
...
...
@@ -168,7 +168,7 @@ export default defineComponent({
scrollStyle
:
{}
as
any
,
pages
:
''
})
if
(
currentRouter
.
currentRoute
.
value
.
params
.
Id
){
if
(
currentRouter
.
currentRoute
&&
currentRouter
.
currentRoute
.
value
.
params
.
Id
){
data
.
search
.
Id
=
currentRouter
.
currentRoute
.
value
.
params
.
Id
}
...
...
@@ -211,7 +211,6 @@ export default defineComponent({
HotelService
.
TypeVehicle
({})
.
then
(
r
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
data
.
vehicletop
=
r
.
data
.
data
}
else
{
message
.
errorMsg
(
r
.
data
.
message
)
...
...
@@ -315,7 +314,7 @@ export default defineComponent({
},
// 关闭
down
()
{
$router
.
push
({
path
:
data
.
pages
==
1
?
`/vehicle/order`
:
`/vehicle/index
`
})
$router
.
push
({
path
:
`/vehicle/order/0
`
})
},
// 确定
join
()
{
...
...
src/pages/vehicle/teamOrder.vue
0 → 100644
View file @
35ac083d
<
template
>
<div
class=
"q-py-md"
>
<!-- 表格 -->
<q-card
class=
"light-shadow q-pa-md"
flat
>
<div
class=
"add q-mb-md"
>
<div
class=
"flex"
>
<q-input
v-model=
"pages.UseCompName"
@
blur=
"refresh"
class=
"col q-mr-md"
reverse-fill-mask
dense
standout
:label=
"$t('v102.vehicle.list.s1')"
/>
<q-input
v-model=
"pages.UseName"
@
blur=
"refresh"
class=
"col q-mr-md"
dense
reverse-fill-mask
standout
:label=
"$t('v102.vehicle.list.s2')"
/>
<q-input
v-model=
"pages.TeamName"
@
blur=
"refresh"
class=
"col q-mr-md"
dense
reverse-fill-mask
standout
:label=
"$t('v102.vehicle.list.s3')"
/>
<q-field
v-if=
"$q.platform.is.desktop"
clearable
v-model=
"dateRangeFormat"
:label=
"$t('v102.vehicle.list.s4')"
standout
class=
"col-2"
style=
"min-width: 190px"
dense
>
<div
class=
"self-center full-width no-outline"
tabindex=
"0"
>
{{
dateRangeFormat
}}
</div>
<q-popup-proxy
:offset=
"[0, 10]"
ref=
"qDateProxy"
>
<q-date
v-model=
"dateRange"
:options=
"optionsFn"
range
mask=
"YYYY/MM/DD"
landscape
@
range-end=
"dateRangeHandler"
></q-date>
</q-popup-proxy>
</q-field>
</div>
<div>
<q-btn
class=
"col q-mr-md"
color=
"primary"
unelevated
:label=
"$t('v102.vehicle.add')"
@
click=
"mask(0)"
/>
<q-btn
class=
"col q-mr-md"
color=
"primary"
unelevated
:label=
"$t('query')"
@
click=
"refresh"
/>
</div>
</div>
<div
class=
"bg-white rounded-borders"
>
<q-table
v-if=
"$q.platform.is.desktop"
separator=
"cell"
:pagination=
"pages"
dense
:rows=
"hotels"
row-key=
"Id"
bordered
:columns=
"cols"
class=
"sticky-rightrowspan-column-table light-border col no-shadow sticky-rightrowspan-column-table2"
>
<template
v-slot:body-cell-Id=
"props"
>
<!--未提交报价,可以修改-->
<q-td
:prop=
"props"
>
<span
@
click=
"mask(props.row.Id)"
v-if=
"props.row.Status == 0 && props.row.OfferState == 1"
>
<q-btn
class=
"col q-mr-md fz12"
color=
"primary"
unelevated
:label=
"$t('v102.vehicle.list.s5')"
/>
</span>
<span
@
click=
"cancel(props.row.Id)"
>
<q-btn
class=
"col q-mr-md fz12"
color=
"grey-6"
unelevated
:label=
"$t('v102.vehicle.add3')"
/>
</span>
<!--申请报价-->
<span
v-if=
"props.row.OfferState == 1 && props.row.Status == 0"
@
click=
"ApplyTripBus(props.row)"
>
<q-btn
class=
"col q-mr-md fz12"
unelevated
color=
"primary"
:label=
"$t('v102.vehicle.list.s8')"
/>
</span>
<!--弹窗显示详细信息-->
<span
@
click=
"details(props.row.Id)"
v-if=
"props.row.OfferState == 3"
>
<q-btn
class=
"col q-mr-md fz12"
color=
"primary"
unelevated
:label=
"$t('v102.vehicle.list.s9')"
/>
</span>
<!--确认报价-->
<span
v-if=
"props.row.OfferState == 3 && props.row.Status == 0"
@
click=
"sureBusPrice(props.row)"
>
<q-btn
class=
"col q-mr-md fz12"
color=
"primary"
unelevated
:label=
"$t('v102.vehicle.list.s10')"
/>
</span>
</q-td>
</
template
>
<
template
v-slot:bottom
>
<q-pagination
class=
"full-width justify-end"
v-model=
"pages.pageIndex"
color=
"primary"
:max=
"pageCount"
:input=
"true"
@
update:model-value=
"changePageHandler"
/>
</
template
>
</q-table>
<!-- 移动 -->
<q-table
hide-header
v-else
:rows=
"hotels"
grid
:columns=
"cols"
row-key=
"Id"
card-class=
"no-shadow bg-primary text-white col"
:pagination=
"pages"
:loading=
"loading"
>
<
template
v-slot:body-cell-Id=
"props"
>
<q-td
:prop=
"props"
>
<span
@
click=
"mask(props.row.Id)"
v-if=
"props.row.Status == 0"
>
<q-btn
class=
"col q-mr-md"
color=
"primary"
unelevated
:label=
"$t('v102.vehicle.list.s5')"
/>
</span>
<span
@
click=
"cancel(props.row.Id)"
>
<q-btn
color=
"red"
unelevated
:label=
"$t('v102.vehicle.add3')"
/>
</span>
<!--申请报价-->
<span
v-if=
"props.row.OfferState == 1 && props.row.Status == 0"
@
click=
"ApplyTripBus(props.row)"
>
<q-btn
class=
"col q-mr-md"
color=
"primary"
unelevated
:label=
"$t('v102.vehicle.list.s8')"
/>
</span>
</q-td>
</
template
>
<
template
v-slot:bottom
>
<q-pagination
class=
"full-width justify-end"
v-model=
"pages.pageIndex"
color=
"primary"
:max=
"pageCount"
:input=
"true"
@
update:model-value=
"changePageHandler"
/>
</
template
>
</q-table>
</div>
</q-card>
<!-- 编辑 -->
<q-dialog
v-model=
"showPriceList"
>
<vehicle-popover
@
close=
"close"
:Id=
'Id'
@
refresh=
"refresh"
>
</vehicle-popover>
</q-dialog>
<!-- 详情 -->
<q-dialog
v-model=
"showdetails"
>
<vehicle-details
@
close=
"close"
:Id=
'Id'
@
refresh=
"refresh"
>
</vehicle-details>
</q-dialog>
<!-- 取消弹窗 -->
<q-dialog
v-model=
"cancelshow"
>
<q-card
flat
class=
""
style=
"width: 40vw;"
>
<q-card-section
class=
"q-pa-sm"
>
<div
class=
"text-h6"
>
{{ $t('v102.vehicle.add3') }}
</div>
</q-card-section>
<q-card-section>
<q-input
v-model=
"CancelRemark"
:label=
"$t('v102.vehicle.add4')"
:rows=
"3"
filled
type=
"textarea"
/>
</q-card-section>
<q-card-actions
align=
"right"
class=
"bg-white"
>
<q-btn
flat
dense
color=
"dark"
:label=
"$t('close')"
class=
"q-mr-sm"
@
click=
"cancelshow = true"
v-close-popup
/>
<q-btn
unelevated
dense
color=
"accent q-px-md"
:label=
"$t('v102.vehicle.add5')"
@
click=
"cancellations"
/>
</q-card-actions>
</q-card>
</q-dialog>
</div>
</template>
<
script
lang=
"ts"
>
import
{
defineComponent
,
ref
,
reactive
,
toRefs
,
provide
,
onMounted
,
inject
,
watch
,
onBeforeUnmount
,
computed
}
from
'vue'
import
useMetaModule
from
'../../module/meta/metaModule'
import
{
useI18n
}
from
'vue-i18n'
import
{
useQuasar
}
from
'quasar'
import
{
date
}
from
'quasar'
import
vehiclePopover
from
'../../components/vehicle/vehiclePopover.vue'
import
vehicleDetails
from
'../../components/vehicle/vehicleDetails.vue'
//详情
import
{
DirtionmaryHelper
}
from
'../../config/dictionary'
import
useScrollModule
from
'src/module/scrollbar/scrollModule'
import
HotelService
from
'../../api/vehicle'
import
message
from
'src/utils/message'
import
{
ApiResult
}
from
'src/@types/enumHelper'
import
{
useRouter
}
from
'vue-router'
export
default
defineComponent
({
components
:
{
vehiclePopover
,
vehicleDetails
},
setup
()
{
const
qDateProxy
=
ref
(
null
)
as
any
const
{
t
}
=
useI18n
()
const
$q
=
useQuasar
()
const
$router
=
useRouter
()
const
data
=
reactive
({
showdetails
:
false
,
cancelshow
:
false
,
CancelRemark
:
''
,
Id
:
0
,
loading
:
false
,
showPriceList
:
false
,
pageTitle
:
'44'
as
(
string
|
undefined
),
pages
:
{
pageIndex
:
1
,
pageSize
:
12
,
rowsPerPage
:
12
,
UseCompName
:
''
,
UseName
:
''
,
TeamName
:
''
,
StartTime
:
""
,
EndTime
:
''
,
},
dateRangeFormat
:
''
,
dateRange
:
{}
as
any
,
pageCount
:
0
,
hotels
:
[
]
as
Array
<
any
>
,
cols
:
[
{
name
:
'UseCompName'
,
label
:
t
(
'v102.vehicle.title1'
),
field
:
(
row
:
any
)
=>
row
.
UseCompName
,
align
:
'left'
},
{
name
:
'UseName'
,
label
:
t
(
'v102.vehicle.title2'
),
field
:
(
row
:
any
)
=>
row
.
UseName
,
align
:
'left'
},
{
name
:
'PickUpInfo'
,
label
:
t
(
'v102.vehicle.title3'
),
field
:
(
row
:
any
)
=>
row
.
PickUpInfo
,
align
:
'left'
},
{
name
:
'GoFlightInfo'
,
label
:
t
(
'v102.vehicle.title4'
),
field
:
(
row
:
any
)
=>
row
.
GoFlightInfo
,
align
:
'left'
},
{
name
:
'BackFlightInfo'
,
label
:
t
(
'v102.vehicle.title5'
),
field
:
(
row
:
any
)
=>
row
.
BackFlightInfo
,
align
:
'left'
},
{
name
:
'PeopleNum'
,
label
:
t
(
'v102.vehicle.title6'
),
field
:
(
row
:
any
)
=>
row
.
PeopleNum
,
align
:
'left'
},
{
name
:
'StartDate'
,
label
:
t
(
'v102.vehicle.title7'
),
field
:
(
row
:
any
)
=>
row
.
StartDate
,
align
:
'left'
},
{
name
:
'UseDayNum'
,
label
:
t
(
'v102.vehicle.title8'
),
field
:
(
row
:
any
)
=>
row
.
UseDayNum
,
align
:
'left'
},
{
name
:
'BusTypeName'
,
label
:
t
(
'v102.vehicle.title9'
),
field
:
(
row
:
any
)
=>
row
.
GuideInfo
,
align
:
'left'
},
{
name
:
'UseName'
,
label
:
t
(
'v102.vehicle.title10'
),
field
:
(
row
:
any
)
=>
row
.
GuideInfo
,
align
:
'left'
},
{
name
:
'TeamName'
,
label
:
t
(
'v102.vehicle.title11'
),
field
:
(
row
:
any
)
=>
row
.
TeamName
,
align
:
'left'
},
{
name
:
'CreateDate'
,
label
:
t
(
'v102.vehicle.title12'
),
field
:
(
row
:
any
)
=>
row
.
CreateDate
,
align
:
'left'
},
{
name
:
'OfferStateName'
,
label
:
t
(
'v102.vehicle.list.s6'
),
field
:
(
row
:
any
)
=>
row
.
OfferStateName
,
align
:
'left'
},
{
name
:
'IsSure'
,
label
:
t
(
'v102.vehicle.list.s10'
),
field
:
(
row
:
any
)
=>
row
.
IsSure
,
align
:
'left'
},
{
name
:
'Id'
,
label
:
t
(
'hotel.addRoomBtn'
),
field
:
(
row
:
any
)
=>
row
.
Id
,
align
:
'left'
},
]
as
any
,
})
// data.dateRange.to = date.formatDate(date.addToDate(new Date(), { days: 9 }), 'YYYY/MM/DD')
// data.dateRange.from = date.formatDate(date.addToDate(new Date(), { days: 8 }), 'YYYY/MM/DD')
// data.dateRangeFormat = `${data.dateRange.from} - ${data.dateRange.to}`
// data.pages.StartTime = data.dateRange.from
// data.pages.EndTime = data.dateRange.to
// data.pageTitle = inject(DirtionmaryHelper.PAGE_TITLE_KEY)
const
methods
=
{
// 详情
details
(
val
:
any
)
{
data
.
Id
=
val
data
.
showdetails
=
true
},
//申请报价
ApplyTripBus
(
item
:
any
)
{
HotelService
.
applyBusPricelation
(
item
.
Id
)
.
then
(
r
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
methods
.
refresh
()
}
else
{
message
.
errorMsg
(
r
.
data
.
message
)
}
})
.
catch
(
e
=>
{
message
.
errorMsg
(
e
.
message
)
})
},
//确认报价
sureBusPrice
(
item
:
any
)
{
HotelService
.
sureBusPricelation
(
item
.
Id
).
then
(
r
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
methods
.
refresh
()
}
else
{
message
.
errorMsg
(
r
.
data
.
message
)
}
}).
catch
(
e
=>
{
message
.
errorMsg
(
e
.
message
)
})
},
cancel
(
item
:
any
)
{
data
.
cancelshow
=
true
data
.
Id
=
item
},
// 取消用车
cancellations
()
{
HotelService
.
cancellation
(
data
.
Id
,
data
.
CancelRemark
)
.
then
(
r
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
data
.
cancelshow
=
false
methods
.
refresh
()
}
else
{
message
.
errorMsg
(
r
.
data
.
message
)
}
})
.
catch
(
e
=>
{
message
.
errorMsg
(
e
.
message
)
})
},
// 获取列表数据
initHotel
()
{
HotelService
.
vehicleList
(
data
.
pages
)
.
then
(
r
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
data
.
hotels
=
r
.
data
.
data
.
pageData
data
.
pageCount
=
r
.
data
.
data
.
pageCount
}
else
{
message
.
errorMsg
(
r
.
data
.
message
)
}
})
.
catch
(
e
=>
{
message
.
errorMsg
(
e
.
message
)
})
},
// 获取时间选择
dateRangeHandler
(
e
:
any
)
{
data
.
pages
.
StartTime
=
`
${
e
.
from
.
year
}
-
${
e
.
from
.
month
}
-
${
e
.
from
.
day
}
`
data
.
pages
.
EndTime
=
`
${
e
.
to
.
year
}
-
${
e
.
to
.
month
}
-
${
e
.
to
.
day
}
`
data
.
dateRangeFormat
=
`
${
data
.
pages
.
StartTime
}
-
${
data
.
pages
.
EndTime
}
`
if
(
qDateProxy
.
value
)
{
qDateProxy
.
value
.
hide
()
// methods.refresh()
}
},
close
()
{
data
.
showdetails
=
false
data
.
showPriceList
=
false
},
// 刷新
refresh
()
{
// console.log('444')
data
.
pages
.
pageIndex
=
1
methods
.
initHotel
()
data
.
showdetails
=
false
data
.
showPriceList
=
false
},
// 翻页
changePageHandler
(
n
:
any
)
{
console
.
log
(
n
)
data
.
pages
.
pageIndex
=
n
methods
.
initHotel
()
},
mask
(
val
:
any
)
{
data
.
Id
=
val
$router
.
push
({
path
:
`/vehicle/addEditVehicle/0
${
data
.
Id
?
'/'
+
data
.
Id
:
''
}
`
})
// data.showPriceList = true
}
}
onMounted
(()
=>
{
methods
.
initHotel
()
})
return
{
...
toRefs
(
data
),
...
methods
,
qDateProxy
}
},
})
</
script
>
<
style
scoped
>
.date-box
:deep
(
.q-field__control
)
{
height
:
20px
;
}
.add
{
margin-bottom
:
20px
;
display
:
flex
;
justify-content
:
space-between
;
flex-wrap
:
wrap
;
}
.shou
{
cursor
:
pointer
;
}
.driver
{
font-size
:
14px
;
font-weight
:
400
;
border-bottom
:
1px
solid
;
margin-left
:
50px
;
}
.title
{
display
:
flex
;
justify-content
:
center
;
font-size
:
22px
;
margin-bottom
:
10px
;
}
.flex
{
display
:
flex
;
align-items
:
center
;
}
th
{
padding
:
10px
10px
;
font-size
:
14px
;
}
.table-title
{
font-size
:
14px
;
}
.sticky-rightrowspan-column-table2
th
:last-child
,
.sticky-rightrowspan-column-table2
tbody
tr
td
{
position
:
sticky
!important
;
right
:
0
!important
;
z-index
:
1
!important
;
box-shadow
:
rgba
(
0
,
0
,
0
,
0.05
)
-2px
0px
0px
!important
;
}
</
style
>
src/pages/vehicle/vehicleOrder.vue
View file @
35ac083d
<
template
>
<div
class=
"fix-height-subpage column no-wrap q-pa-md"
>
<!-- 表格 -->
<q-card
class=
"light-shadow q-pa-md bg-white rounded-borders q-mb-md"
flat
>
<div
class=
"add"
>
<div
class=
"flex"
>
<q-input
v-model=
"pages.UseCompName"
@
blur=
"refresh"
class=
"col q-mr-md"
reverse-fill-mask
dense
standout
:label=
"$t('v102.vehicle.list.s1')"
/>
<q-input
v-model=
"pages.UseName"
@
blur=
"refresh"
class=
"col q-mr-md"
dense
reverse-fill-mask
standout
:label=
"$t('v102.vehicle.list.s2')"
/>
<q-input
v-model=
"pages.TeamName"
@
blur=
"refresh"
class=
"col q-mr-md"
dense
reverse-fill-mask
standout
:label=
"$t('v102.vehicle.list.s3')"
/>
<q-field
v-if=
"$q.platform.is.desktop"
clearable
v-model=
"dateRangeFormat"
:label=
"$t('v102.vehicle.list.s4')"
standout
class=
"col-2"
style=
"min-width: 190px"
dense
>
<div
class=
"self-center full-width no-outline"
tabindex=
"0"
>
{{
dateRangeFormat
}}
</div>
<q-popup-proxy
:offset=
"[0, 10]"
ref=
"qDateProxy"
>
<q-date
v-model=
"dateRange"
:options=
"optionsFn"
range
mask=
"YYYY/MM/DD"
landscape
@
range-end=
"dateRangeHandler"
></q-date>
</q-popup-proxy>
</q-field>
</div>
<div>
<q-btn
class=
"col q-mr-md"
color=
"primary"
unelevated
:label=
"$t('v102.vehicle.add')"
@
click=
"mask(0)"
/>
<q-btn
class=
"col q-mr-md"
color=
"primary"
unelevated
:label=
"$t('query')"
@
click=
"refresh"
/>
</div>
</div>
<div
class=
""
>
<q-table
v-if=
"$q.platform.is.desktop"
separator=
"cell"
:pagination=
"pages"
dense
:rows=
"hotels"
row-key=
"Id"
bordered
:columns=
"cols"
class=
"sticky-rightrowspan-column-table light-border col no-shadow sticky-rightrowspan-column-table2"
>
<template
v-slot:body-cell-Id=
"props"
>
<!--未提交报价,可以修改-->
<q-td
:prop=
"props"
>
<span
@
click=
"mask(props.row.Id)"
v-if=
"props.row.Status == 0 && props.row.OfferState == 1"
>
<q-btn
class=
"col q-mr-md"
color=
"primary"
unelevated
:label=
"$t('v102.vehicle.list.s5')"
/>
</span>
<span
@
click=
"cancel(props.row.Id)"
>
<q-btn
class=
"col q-mr-md"
color=
"grey-6"
unelevated
:label=
"$t('v102.vehicle.add3')"
/>
</span>
<!--申请报价-->
<span
v-if=
"props.row.OfferState == 1 && props.row.Status == 0"
@
click=
"ApplyTripBus(props.row)"
>
<q-btn
class=
"col q-mr-md"
unelevated
color=
"primary"
:label=
"$t('v102.vehicle.list.s8')"
/>
</span>
<!--弹窗显示详细信息-->
<span
@
click=
"details(props.row.Id)"
v-if=
"props.row.OfferState == 3"
>
<q-btn
class=
"col q-mr-md"
color=
"primary"
unelevated
:label=
"$t('v102.vehicle.list.s9')"
/>
</span>
<!--确认报价-->
<span
v-if=
"props.row.OfferState == 3 && props.row.Status == 0"
@
click=
"sureBusPrice(props.row)"
>
<q-btn
class=
"col q-mr-md"
color=
"primary"
unelevated
:label=
"$t('v102.vehicle.list.s10')"
/>
</span>
</q-td>
</
template
>
<
template
v-slot:bottom
>
<q-pagination
class=
"full-width justify-end"
v-model=
"pages.pageIndex"
color=
"primary"
:max=
"pageCount"
:input=
"true"
@
update:model-value=
"changePageHandler"
/>
</
template
>
</q-table>
<!-- 移动 -->
<q-table
hide-header
v-else
:rows=
"hotels"
grid
:columns=
"cols"
row-key=
"Id"
card-class=
"no-shadow bg-primary text-white col"
:pagination=
"pages"
:loading=
"loading"
>
<
template
v-slot:body-cell-Id=
"props"
>
<q-td
:prop=
"props"
>
<span
@
click=
"mask(props.row.Id)"
v-if=
"props.row.Status == 0"
>
<q-btn
class=
"col q-mr-md"
color=
"primary"
unelevated
:label=
"$t('v102.vehicle.list.s5')"
/>
</span>
<span
@
click=
"cancel(props.row.Id)"
>
<q-btn
color=
"red"
unelevated
:label=
"$t('v102.vehicle.add3')"
/>
</span>
<!--申请报价-->
<span
v-if=
"props.row.OfferState == 1 && props.row.Status == 0"
@
click=
"ApplyTripBus(props.row)"
>
<q-btn
class=
"col q-mr-md"
color=
"primary"
unelevated
:label=
"$t('v102.vehicle.list.s8')"
/>
</span>
</q-td>
</
template
>
<
template
v-slot:bottom
>
<q-pagination
class=
"full-width justify-end"
v-model=
"pages.pageIndex"
color=
"primary"
:max=
"pageCount"
:input=
"true"
@
update:model-value=
"changePageHandler"
/>
</
template
>
</q-table>
</div>
</q-card>
<!-- 编辑 -->
<q-dialog
v-model=
"showPriceList"
>
<vehicle-popover
@
close=
"close"
:Id=
'Id'
@
refresh=
"refresh"
>
</vehicle-popover>
</q-dialog>
<!-- 详情 -->
<q-dialog
v-model=
"showdetails"
>
<vehicle-details
@
close=
"close"
:Id=
'Id'
@
refresh=
"refresh"
>
</vehicle-details>
</q-dialog>
<!-- 取消弹窗 -->
<q-dialog
v-model=
"cancelshow"
>
<q-card
flat
class=
""
style=
"width: 40vw;"
>
<q-card-section
class=
"q-pa-sm"
>
<div
class=
"text-h6"
>
{{ $t('v102.vehicle.add3') }}
</div>
</q-card-section>
<q-card-section>
<q-input
v-model=
"CancelRemark"
:label=
"$t('v102.vehicle.add4')"
:rows=
"3"
filled
type=
"textarea"
/>
</q-card-section>
<q-card-actions
align=
"right"
class=
"bg-white"
>
<q-btn
flat
dense
color=
"dark"
:label=
"$t('close')"
class=
"q-mr-sm"
@
click=
"cancelshow = true"
v-close-popup
/>
<q-btn
unelevated
dense
color=
"accent q-px-md"
:label=
"$t('v102.vehicle.add5')"
@
click=
"cancellations"
/>
</q-card-actions>
</q-card>
</q-dialog>
<q-tabs
v-model=
"tab"
dense
align=
"left"
class=
"bg-primary text-white shadow-2 rounded-borders"
:breakpoint=
"0"
>
<q-tab
:name=
"0"
:label=
"$t('v102.vehicle.tabtitle0')"
></q-tab>
<q-tab
:name=
"1"
:label=
"$t('v102.vehicle.tabtitle1')"
></q-tab>
<q-tab
:name=
"2"
:label=
"$t('v102.vehicle.tabtitle2')"
></q-tab>
<q-tab
:name=
"3"
:label=
"$t('v102.vehicle.tabtitle3')"
></q-tab>
</q-tabs>
<teamOrder
v-if=
"tab==0"
></teamOrder>
<CharteredBusOrder
:type=
"tab"
v-if=
"tab!=0"
></CharteredBusOrder>
</div>
</
template
>
<
script
lang=
"ts"
>
import
{
defineComponent
,
ref
,
reactive
,
toRefs
,
provide
,
onMounted
,
inject
,
watch
,
onBeforeUnmount
,
computed
}
from
'vue'
import
{
defineComponent
,
ref
,
reactive
,
toRefs
,
provide
,
onMounted
,
inject
}
from
'vue'
import
useMetaModule
from
'../../module/meta/metaModule'
import
{
useI18n
}
from
'vue-i18n'
import
{
useQuasar
}
from
'quasar'
import
{
date
}
from
'quasar'
import
vehiclePopover
from
'../../components/vehicle/vehiclePopover.vue'
import
vehicleDetails
from
'../../components/vehicle/vehicleDetails.vue'
//详情
import
teamOrder
from
'./teamOrder.vue'
import
CharteredBusOrder
from
'../CharteredBus//CharteredBusOrder.vue'
import
{
DirtionmaryHelper
}
from
'../../config/dictionary'
import
useScrollModule
from
'src/module/scrollbar/scrollModule'
import
HotelService
from
'../../api/vehicle'
import
message
from
'src/utils/message'
import
{
ApiResult
}
from
'src/@types/enumHelper'
import
{
useRouter
}
from
'vue-router'
import
{
currentRouter
}
from
'src/router'
export
default
defineComponent
({
components
:
{
vehiclePopover
,
vehicleDetails
},
components
:
{
teamOrder
,
CharteredBusOrder
},
setup
()
{
const
qDateProxy
=
ref
(
null
)
as
any
const
{
t
}
=
useI18n
()
const
$q
=
useQuasar
()
const
$router
=
useRouter
()
let
{
setTitle
}
=
useMetaModule
()
const
pageTitle
=
inject
(
DirtionmaryHelper
.
PAGE_TITLE_KEY
)
as
any
pageTitle
.
value
=
t
(
'v102.vehicle.pageTitle'
)
setTitle
(
pageTitle
.
value
)
const
data
=
reactive
({
showdetails
:
false
,
cancelshow
:
false
,
CancelRemark
:
''
,
Id
:
0
,
loading
:
false
,
showPriceList
:
false
,
pageTitle
:
'44'
as
(
string
|
undefined
),
pages
:
{
pageIndex
:
1
,
pageSize
:
12
,
rowsPerPage
:
12
,
UseCompName
:
''
,
UseName
:
''
,
TeamName
:
''
,
StartTime
:
""
,
EndTime
:
''
,
},
dateRangeFormat
:
''
,
dateRange
:
{}
as
any
,
pageCount
:
0
,
hotels
:
[
]
as
Array
<
any
>
,
cols
:
[
{
name
:
'UseCompName'
,
label
:
t
(
'v102.vehicle.title1'
),
field
:
(
row
:
any
)
=>
row
.
UseCompName
,
align
:
'left'
},
{
name
:
'UseName'
,
label
:
t
(
'v102.vehicle.title2'
),
field
:
(
row
:
any
)
=>
row
.
UseName
,
align
:
'left'
},
{
name
:
'PickUpInfo'
,
label
:
t
(
'v102.vehicle.title3'
),
field
:
(
row
:
any
)
=>
row
.
PickUpInfo
,
align
:
'left'
},
{
name
:
'GoFlightInfo'
,
label
:
t
(
'v102.vehicle.title4'
),
field
:
(
row
:
any
)
=>
row
.
GoFlightInfo
,
align
:
'left'
},
{
name
:
'BackFlightInfo'
,
label
:
t
(
'v102.vehicle.title5'
),
field
:
(
row
:
any
)
=>
row
.
BackFlightInfo
,
align
:
'left'
},
{
name
:
'PeopleNum'
,
label
:
t
(
'v102.vehicle.title6'
),
field
:
(
row
:
any
)
=>
row
.
PeopleNum
,
align
:
'left'
},
{
name
:
'StartDate'
,
label
:
t
(
'v102.vehicle.title7'
),
field
:
(
row
:
any
)
=>
row
.
StartDate
,
align
:
'left'
},
{
name
:
'UseDayNum'
,
label
:
t
(
'v102.vehicle.title8'
),
field
:
(
row
:
any
)
=>
row
.
UseDayNum
,
align
:
'left'
},
{
name
:
'BusTypeName'
,
label
:
t
(
'v102.vehicle.title9'
),
field
:
(
row
:
any
)
=>
row
.
GuideInfo
,
align
:
'left'
},
{
name
:
'UseName'
,
label
:
t
(
'v102.vehicle.title10'
),
field
:
(
row
:
any
)
=>
row
.
GuideInfo
,
align
:
'left'
},
{
name
:
'TeamName'
,
label
:
t
(
'v102.vehicle.title11'
),
field
:
(
row
:
any
)
=>
row
.
TeamName
,
align
:
'left'
},
{
name
:
'CreateDate'
,
label
:
t
(
'v102.vehicle.title12'
),
field
:
(
row
:
any
)
=>
row
.
CreateDate
,
align
:
'left'
},
{
name
:
'OfferStateName'
,
label
:
t
(
'v102.vehicle.list.s6'
),
field
:
(
row
:
any
)
=>
row
.
OfferStateName
,
align
:
'left'
},
{
name
:
'IsSure'
,
label
:
t
(
'v102.vehicle.list.s10'
),
field
:
(
row
:
any
)
=>
row
.
IsSure
,
align
:
'left'
},
{
name
:
'Id'
,
label
:
t
(
'hotel.addRoomBtn'
),
field
:
(
row
:
any
)
=>
row
.
Id
,
align
:
'left'
},
]
as
any
,
tab
:
0
,
})
// data.dateRange.to = date.formatDate(date.addToDate(new Date(), { days: 9 }), 'YYYY/MM/DD')
// data.dateRange.from = date.formatDate(date.addToDate(new Date(), { days: 8 }), 'YYYY/MM/DD')
// data.dateRangeFormat = `${data.dateRange.from} - ${data.dateRange.to}`
// data.pages.StartTime = data.dateRange.from
// data.pages.EndTime = data.dateRange.to
// data.pageTitle = inject(DirtionmaryHelper.PAGE_TITLE_KEY)
const
methods
=
{
// 详情
details
(
val
:
any
)
{
data
.
Id
=
val
data
.
showdetails
=
true
},
//申请报价
ApplyTripBus
(
item
:
any
)
{
HotelService
.
applyBusPricelation
(
item
.
Id
)
.
then
(
r
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
methods
.
refresh
()
}
else
{
message
.
errorMsg
(
r
.
data
.
message
)
}
})
.
catch
(
e
=>
{
message
.
errorMsg
(
e
.
message
)
})
},
//确认报价
sureBusPrice
(
item
:
any
)
{
HotelService
.
sureBusPricelation
(
item
.
Id
).
then
(
r
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
methods
.
refresh
()
}
else
{
message
.
errorMsg
(
r
.
data
.
message
)
}
}).
catch
(
e
=>
{
message
.
errorMsg
(
e
.
message
)
})
},
cancel
(
item
:
any
)
{
data
.
cancelshow
=
true
data
.
Id
=
item
},
// 取消用车
cancellations
()
{
HotelService
.
cancellation
(
data
.
Id
,
data
.
CancelRemark
)
.
then
(
r
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
data
.
cancelshow
=
false
methods
.
refresh
()
}
else
{
message
.
errorMsg
(
r
.
data
.
message
)
}
})
.
catch
(
e
=>
{
message
.
errorMsg
(
e
.
message
)
})
},
// 获取列表数据
initHotel
()
{
HotelService
.
vehicleList
(
data
.
pages
)
.
then
(
r
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
data
.
hotels
=
r
.
data
.
data
.
pageData
data
.
pageCount
=
r
.
data
.
data
.
pageCount
}
else
{
message
.
errorMsg
(
r
.
data
.
message
)
}
})
.
catch
(
e
=>
{
message
.
errorMsg
(
e
.
message
)
})
},
// 获取时间选择
dateRangeHandler
(
e
:
any
)
{
data
.
pages
.
StartTime
=
`
${
e
.
from
.
year
}
-
${
e
.
from
.
month
}
-
${
e
.
from
.
day
}
`
data
.
pages
.
EndTime
=
`
${
e
.
to
.
year
}
-
${
e
.
to
.
month
}
-
${
e
.
to
.
day
}
`
data
.
dateRangeFormat
=
`
${
data
.
pages
.
StartTime
}
-
${
data
.
pages
.
EndTime
}
`
if
(
qDateProxy
.
value
)
{
qDateProxy
.
value
.
hide
()
// methods.refresh()
}
},
close
()
{
data
.
showdetails
=
false
data
.
showPriceList
=
false
},
// 刷新
refresh
()
{
// console.log('444')
data
.
pages
.
pageIndex
=
1
methods
.
initHotel
()
data
.
showdetails
=
false
data
.
showPriceList
=
false
},
// 翻页
changePageHandler
(
n
:
any
)
{
console
.
log
(
n
)
data
.
pages
.
pageIndex
=
n
methods
.
initHotel
()
},
mask
(
val
:
any
)
{
data
.
Id
=
val
$router
.
push
({
path
:
`/vehicle/addEditVehicle/1
${
data
.
Id
?
'/'
+
data
.
Id
:
''
}
`
})
// data.showPriceList = true
if
(
currentRouter
.
currentRoute
&&
currentRouter
.
currentRoute
.
value
.
params
.
pages
){
data
.
tab
=
currentRouter
.
currentRoute
.
value
.
params
.
pages
}
const
menu
=
inject
(
DirtionmaryHelper
.
MENU_KEYS
)
as
any
menu
.
value
=
6
const
methods
=
{
}
onMounted
(()
=>
{
methods
.
initHotel
()
})
return
{
...
toRefs
(
data
),
...
methods
,
qDateProxy
}
return
{
...
toRefs
(
data
),
...
methods
}
},
})
</
script
>
...
...
src/router/routes.ts
View file @
35ac083d
...
...
@@ -21,8 +21,8 @@ const routes: RouteRecordRaw[] = [
{
path
:
'/ticket/preview/:ticketId/:Time'
,
component
:
()
=>
import
(
'pages/ticket/TicketOrderPreview.vue'
)
},
{
path
:
'/ticket/order'
,
component
:
()
=>
import
(
'pages/ticket/TicketOrder.vue'
)
},
{
path
:
'/vehicle/index'
,
component
:
()
=>
import
(
'pages/CharteredBus/CharteredBusList.vue'
)
},
//车辆
{
path
:
'/vehicle/Preview/:ProductId/:Time'
,
component
:
()
=>
import
(
'pages/CharteredBus/CharteredBusPreview.vue'
)
},
{
path
:
'/vehicle/order'
,
component
:
()
=>
import
(
'pages/vehicle/vehicleOrder.vue'
)
},
{
path
:
'/vehicle/Preview/:ProductId/:Time
/:orderId?
'
,
component
:
()
=>
import
(
'pages/CharteredBus/CharteredBusPreview.vue'
)
},
{
path
:
'/vehicle/order
/:pages?
'
,
component
:
()
=>
import
(
'pages/vehicle/vehicleOrder.vue'
)
},
{
path
:
'/vehicle/addEditVehicle/:pages/:Id?'
,
component
:
()
=>
import
(
'pages/vehicle/addEditVehicle.vue'
)
},
{
path
:
'/ticket/preview/:ticketId/:Time'
,
component
:
()
=>
import
(
'pages/ticket/TicketOrderPreview.vue'
)
},
{
path
:
'/ticket/order/:orderId?'
,
component
:
()
=>
import
(
'pages/ticket/TicketOrder.vue'
)
}
...
...
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