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
d30354f5
Commit
d30354f5
authored
Mar 30, 2023
by
youjie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
50c3e056
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
134 additions
and
333 deletions
+134
-333
quasar.conf.js
quasar.conf.js
+2
-2
axiosJava.ts
src/api/axiosJava.ts
+1
-1
requestJava.ts
src/api/requestJava.ts
+3
-3
scheduledTrip.ts
src/api/scheduledTrip.ts
+13
-5
TripOrderHeader.vue
src/components/trip/order/TripOrderHeader.vue
+17
-126
TripOrderList.vue
src/components/trip/order/TripOrderList.vue
+49
-178
loginModule.ts
src/module/user/loginModule.ts
+1
-1
forget.vue
src/pages/auth/forget.vue
+1
-1
TripOrder.vue
src/pages/scheduledTrip/TripOrder.vue
+10
-16
tools.ts
src/utils/tools.ts
+37
-0
No files found.
quasar.conf.js
View file @
d30354f5
...
...
@@ -64,13 +64,13 @@ module.exports = configure(function (ctx) {
publicPath
:
ctx
.
dev
?
'/'
:
'./'
,
env
:
ctx
.
dev
?
{
BASE_APP_API
:
'http://192.168.10.
11:8083/api/common/post'
,
BASE_APP_API
:
'http://192.168.10.
9:8083/api/common/post'
,
//http://192.168.10.9:8083/api/common/post http://192.168.10.206:8015/api/common/post
JAVA_URL_API
:
'http://efficient.oytour.com'
,
VERSION
:
require
(
'./package.json'
).
version
,
}
:
{
BASE_APP_API
:
'https://reborn.oytour.com/api/common/post'
,
BASE_APP_API
:
'https://reborn.oytour.com/api/common/post'
,
//https://reborn.oytour.com/api/common/post
JAVA_URL_API
:
'http://efficient.oytour.com'
,
VERSION
:
require
(
'./package.json'
).
version
},
...
...
src/api/axiosJava.ts
View file @
d30354f5
...
...
@@ -77,7 +77,7 @@ const service = Axios.create({
timeout
:
20000
,
headers
:
{
'Content-Type'
:
'application/json'
,
'Referer-Viitto'
:
currentRouter
.
path
'Referer-Viitto'
:
window
.
history
.
state
.
current
}
})
...
...
src/api/requestJava.ts
View file @
d30354f5
...
...
@@ -33,18 +33,18 @@ const request = (cmd:string,msg:any): Promise<HttpResponse>=>{
let
timestamp
=
(
new
Date
()).
valueOf
();
if
(
Store
.
state
.
user
?.
token
)
{
token
=
Store
.
state
.
user
?.
token
?.
access_token
key
=
Store
.
state
.
user
?.
secretKey
//
key = Store.state.user?.secretKey
}
if
(
Store
.
state
.
user
?.
userDetail
)
{
groupId
=
Store
.
state
.
user
?.
userDetail
?.
groupId
}
var
encodeMsg
=
encodeURIComponent
(
JSON
.
stringify
(
msg
)).
toLowerCase
();
var
md5Str
=
md5
(
`
cmd=
${
cmd
}
&
msg=
${
encodeMsg
}
×tamp=
${
timestamp
}
&token=
${
token
}
&key=
${
key
}
`
);
var
md5Str
=
md5
(
`msg=
${
encodeMsg
}
×tamp=
${
timestamp
}
&token=
${
token
}
&key=
${
key
}
`
);
var
postData
=
{
"groupId"
:
groupId
,
"msg"
:
msg
,
// "cmd": cmd,
//
"timestamp": timestamp,
"timestamp"
:
timestamp
,
"token"
:
token
,
"sign"
:
md5Str
,
// "locale": language,
...
...
src/api/scheduledTrip.ts
View file @
d30354f5
import
{
HttpResponse
}
from
'../@types'
import
request
from
'./request'
import
requestJava
from
'./requestJava'
class
scheduledTripService
{
// 一日游订单列表
static
async
GetTravelOneDayOrderList
(
param
:
any
):
Promise
<
HttpResponse
>
{
return
request
(
'sellorder_post_GetTravelOneDayOrderList'
,
param
)
}
// 一日游订单提交
// 跟团订单列表
static
async
Getrecentorder
(
param
:
any
):
Promise
<
HttpResponse
>
{
return
requestJava
(
'/api/b2b/user/getrecentorder'
,
param
)
}
// 待处理跟团订单列表
static
async
GetWaitDealOrderPageList
(
param
:
any
):
Promise
<
HttpResponse
>
{
return
request
(
'b2b_get_GetWaitDealOrderPageList'
,
param
)
}
// static async GetTravelOneDayOrderList(param:any):Promise<HttpResponse>{
// return request('sellorder_post_GetTravelOneDayOrderList',param)
// }
// 跟团订单提交
static
async
SetOrderInfoForB2B
(
param
:
any
):
Promise
<
HttpResponse
>
{
return
request
(
'sellorder_post_SetOrderInfoForB2B'
,
param
)
}
...
...
src/components/trip/order/TripOrderHeader.vue
View file @
d30354f5
<
template
>
<div
class=
"rounded-borders bg-white row items-center q-pa-md"
>
<q-select
v-if=
"$q.platform.is.desktop"
class=
"q-mr-md"
style=
"min-width: 150px"
v-model=
"search.OrderStatus"
@
update:model-value=
"setOrderStatus"
dense
:options=
"status"
emit-value
option-label=
"StatusName"
option-value=
"StatusId"
map-options
:label=
"$t('hotelorder.search.status')"
standout
/>
<q-input
v-if=
"$q.platform.is.desktop"
class=
"q-mr-md"
v-model=
"search.OrderNo"
dense
standout
:label=
"$t('hotelorder.search.orderNum')"
/>
<q-field
v-if=
"$q.platform.is.desktop"
clearable
v-model=
"dateRangeFormat"
:label=
"$t('hotelorder.search.daterange')"
standout
class=
"col-2"
style=
"min-width: 190px"
dense
@
clear=
"getDateRange"
>
<div
class=
"self-center full-width no-outline"
tabindex=
"0"
>
{{
dateRangeFormat
}}
</div>
<q-popup-proxy
:offset=
"[0, 10]"
ref=
"qDateProxy"
>
<q-date
v-model=
"dateRange"
:options=
"optionsFn"
range
mask=
"YYYY/MM/DD"
landscape
@
range-end=
"dateRangeHandler"
></q-date>
</q-popup-proxy>
</q-field>
<q-select
v-if=
"$q.platform.is.desktop"
class=
"q-mr-md"
style=
"min-width: 150px"
v-model=
"search.orderState"
@
update:model-value=
"setorderState"
dense
:options=
"status"
emit-value
option-label=
"StatusName"
option-value=
"StatusId"
map-options
:label=
"$t('hotelorder.search.status')"
standout
/>
<q-select
class=
"q-mr-md"
style=
"min-width: 150px"
v-model=
"search.queryDays"
@
update:model-value=
"setorderDay"
dense
:options=
"Days"
emit-value
option-label=
"StatusName"
option-value=
"StatusId"
map-options
label=
"时间范围"
standout
/>
<div
class=
"col"
></div>
<q-btn
unelevated
class=
"bg-grey-3 hover q-mr-md"
:title=
"$t('morequery')"
>
<q-badge
rounded
class=
"din bg-red-2 text-red-14 text-weight-bold"
floating
:label=
"searchCnt"
v-if=
"searchCnt > 0"
/>
<svg-icon
color=
"dark"
icon=
"Text/Filter.svg"
:tips=
"$t('morequery')"
:size=
"20"
></svg-icon>
<q-tooltip>
{{
$t
(
'morequery'
)
}}
</q-tooltip>
<q-popup-proxy
class=
"no-shadow"
style=
"box-shadow: 0 0 50px #ddd !important"
:offset=
"[0, 20]"
:model-value=
"canHide"
>
<q-card
class=
"q-pa-md rounded-borders"
style=
"width: 300px"
>
<div
class=
"q-mb-md text-subtitle2"
>
{{
$t
(
'morequery'
)
}}
</div>
<div
class=
"q-mt-md row"
>
<q-input
v-model=
"search.OrderNo"
dense
standout
:label=
"$t('hotelorder.search.orderNum')"
class=
"mobile-only col q-mr-md"
/>
<q-input
v-model=
"search.OrderId"
dense
standout
:label=
"$t('hotelorder.search.orderId')"
class=
"col"
/>
</div>
<div
class=
"mobile-only q-mt-md"
>
<q-field
clearable
v-model=
"dateRangeFormat"
:label=
"$t('hotelorder.search.daterange')"
standout
style=
"min-width: 190px"
dense
@
clear=
"getDateRange"
>
<div
class=
"self-center full-width no-outline"
tabindex=
"0"
>
{{
dateRangeFormat
}}
</div>
<q-popup-proxy
:offset=
"[0, 10]"
ref=
"qDateProxy"
>
<q-date
v-model=
"dateRange"
:options=
"optionsFn"
range
mask=
"YYYY/MM/DD"
@
range-end=
"dateRangeHandler"
></q-date>
</q-popup-proxy>
</q-field>
</div>
<div
class=
"q-mt-md"
>
<q-field
clearable
v-model=
"dateRangeFormatUse"
:label=
"$t('v102.ticket.starttime')"
standout
style=
"min-width: 190px"
dense
@
clear=
"getDateRangeUse"
>
<div
class=
"self-center full-width no-outline"
tabindex=
"0"
>
{{
dateRangeFormatUse
}}
</div>
<q-popup-proxy
:offset=
"[0, 10]"
ref=
"qDateProxyUse"
>
<q-date
v-model=
"dateRangeUse"
:options=
"optionsFnUse"
range
mask=
"YYYY/MM/DD"
@
range-end=
"dateRangeHandlerUse"
></q-date>
</q-popup-proxy>
</q-field>
</div>
<!--
<div
class=
"q-mt-md"
>
<q-field
clearable
v-model=
"dateRangeFormatUse"
:label=
"$t('v102.ticket.starttime')"
standout
class=
"col"
style=
"min-width: 190px"
dense
@
clear=
"getDateRangeUse"
>
<div
class=
"self-center full-width no-outline"
tabindex=
"0"
>
{{
dateRangeFormatUse
}}
</div>
<q-popup-proxy
:offset=
"[0, 10]"
ref=
"qDateProxyUse"
>
<q-date
v-model=
"dateRangeUse"
:options=
"optionsFnUse"
range
mask=
"YYYY/MM/DD"
@
range-end=
"dateRangeHandlerUse"
></q-date>
</q-popup-proxy>
</q-field>
</div>
-->
<div
class=
"q-mt-md"
>
<q-input
v-model=
"search.Name"
dense
standout
:label=
"$t('v102.to.qjc')"
/>
</div>
<q-select
class=
"q-mt-md"
v-model=
"search.MailingState"
dense
:options=
"orderTypes"
emit-value
option-label=
"TypeName"
option-value=
"TypeId"
map-options
:label=
"$t('v102.to.qj')"
standout
/>
<q-input
v-model=
"search.CouponsName"
dense
standout
:label=
"$t('v102.to.ticketName')"
class=
"q-mt-md"
/>
<q-input
v-model=
"search.ContactNumber"
dense
standout
:label=
"$t('v102.to.qjp')"
class=
"q-mt-md"
/>
</q-card>
</q-popup-proxy>
</q-btn>
<q-btn
unelevated
class=
"bg-blue-1 text-primary hover q-mr-md"
:label=
"$t('hotelorder.recovery')"
/>
<q-btn
color=
"primary"
unelevated
:label=
"$t('query')"
@
click=
"setQueryHandler"
/>
</div>
<div
class=
"rounded-borders bg-white q-pa-sm q-mt-md mobile-only"
>
<q-tabs
v-model=
"search.
OrderStatus
"
class=
"text-cyan"
dense
>
<q-tab
:name=
"x.StatusId"
:label=
"x.StatusName"
v-for=
"x in status"
@
click=
"set
OrderStatus
(x.StatusId)"
/>
<q-tabs
v-model=
"search.
orderState
"
class=
"text-cyan"
dense
>
<q-tab
:name=
"x.StatusId"
:label=
"x.StatusName"
v-for=
"x in status"
@
click=
"set
orderState
(x.StatusId)"
/>
</q-tabs>
</div>
</
template
>
...
...
@@ -69,7 +16,7 @@
import
{
DirtionmaryHelper
}
from
'../../../config/dictionary'
import
{
computed
,
defineComponent
,
inject
,
reactive
,
ref
,
toRefs
}
from
'vue'
import
{
OrderType
,
RoomType
,
StandardStatus
}
from
'../../../@types'
import
{
get
HotelOrderStatus
,
getHotel
OrderType
,
getHotelRoomType
,
getTicketOrderType
}
from
'../../../utils/tools'
import
{
get
TripOrderStatus
,
getTrip
OrderType
,
getHotelRoomType
,
getTicketOrderType
}
from
'../../../utils/tools'
import
{
date
,
useQuasar
}
from
'quasar'
import
svgIcon
from
'../../global/svg-icon.vue'
...
...
@@ -81,90 +28,34 @@ export default defineComponent({
const
$q
=
useQuasar
()
const
data
=
reactive
({
Days
:[]
as
Array
<
StandardStatus
>
,
status
:
[]
as
Array
<
StandardStatus
>
,
cancelStatus
:
{}
as
StandardStatus
|
undefined
,
dateRangeFormat
:
''
,
dateRangeFormatUse
:
''
,
dateRange
:
{}
as
any
,
dateRangeUse
:
{}
as
any
,
orderTypes
:
[]
as
Array
<
OrderType
>
,
canHide
:
false
})
const
realSearch
=
inject
(
DirtionmaryHelper
.
TICKET_ORDER_SEARCH
)
as
any
const
search
=
reactive
(
JSON
.
parse
(
JSON
.
stringify
(
realSearch
)))
as
any
const
methods
=
{
initStatus
()
{
//通用的訂單類型
let
allStatus
=
getHotelOrderStatus
()
data
.
status
=
allStatus
.
filter
((
x
:
StandardStatus
)
=>
{
return
x
.
StatusId
!=
3
})
data
.
cancelStatus
=
allStatus
.
find
((
x
:
StandardStatus
)
=>
{
return
x
.
StatusId
==
3
})
data
.
orderTypes
=
getTicketOrderType
(
true
)
},
optionsFnUse
(
cd
:
any
)
{
return
true
},
optionsFn
(
cd
:
any
)
{
return
cd
<
date
.
formatDate
(
date
.
addToDate
(
new
Date
(),
{
days
:
1
}),
'YYYY/MM/DD'
)
},
getDateRangeUse
(
value
){
search
.
UseSTime
=
''
search
.
UseETime
=
''
data
.
dateRangeFormatUse
=
''
},
getDateRange
(
value
){
search
.
StartTime
=
''
search
.
EndTime
=
''
data
.
dateRangeFormat
=
''
},
dateRangeHandlerUse
(
e
:
any
)
{
search
.
UseSTime
=
`
${
e
.
from
.
year
}
/
${
e
.
from
.
month
}
/
${
e
.
from
.
day
}
`
search
.
UseETime
=
`
${
e
.
to
.
year
}
/
${
e
.
to
.
month
}
/
${
e
.
to
.
day
}
`
data
.
dateRangeFormatUse
=
`
${
search
.
UseSTime
}
-
${
search
.
UseETime
}
`
if
(
qDateProxyUse
.
value
)
qDateProxyUse
.
value
.
hide
()
},
dateRangeHandler
(
e
:
any
)
{
search
.
StartTime
=
`
${
e
.
from
.
year
}
/
${
e
.
from
.
month
}
/
${
e
.
from
.
day
}
`
search
.
EndTime
=
`
${
e
.
to
.
year
}
/
${
e
.
to
.
month
}
/
${
e
.
to
.
day
}
`
data
.
dateRangeFormat
=
`
${
search
.
StartTime
}
-
${
search
.
EndTime
}
`
if
(
qDateProxy
.
value
)
qDateProxy
.
value
.
hide
()
//跟团订单通用的訂單類型
let
allStatus
=
getTripOrderStatus
()
data
.
status
=
allStatus
data
.
Days
=
getTripOrderType
(
true
)
},
setQueryHandler
()
{
realSearch
.
OrderId
=
search
.
OrderId
realSearch
.
RoomType
=
search
.
RoomType
realSearch
.
StartTime
=
search
.
StartTime
realSearch
.
EndTime
=
search
.
EndTime
realSearch
.
UseSTime
=
search
.
UseSTime
realSearch
.
UseETime
=
search
.
UseETime
realSearch
.
OrderStatus
=
search
.
OrderStatus
realSearch
.
OrderNo
=
search
.
OrderNo
realSearch
.
MailingState
=
search
.
MailingState
realSearch
.
Name
=
search
.
Name
realSearch
.
CouponsName
=
search
.
CouponsName
realSearch
.
ContactNumber
=
search
.
ContactNumber
console
.
log
(
realSearch
)
realSearch
.
queryDays
=
search
.
queryDays
realSearch
.
orderState
=
search
.
orderState
},
setOrderStatus
(
statusId
:
number
)
{
realSearch
.
OrderStatus
=
statusId
setorderState
(
statusId
:
number
)
{
realSearch
.
orderState
=
statusId
},
setorderDay
(
statusId
:
number
)
{
search
.
queryDays
=
statusId
}
}
const
searchCnt
=
computed
(()
=>
{
let
setCnt
=
0
if
(
$q
.
platform
.
is
.
mobile
)
{
if
(
search
.
OrderStatus
>
0
)
setCnt
++
if
(
search
.
StartTime
.
length
>
0
)
setCnt
++
if
(
search
.
OrderNo
>
0
)
setCnt
++
}
if
(
search
.
OrderId
>
0
)
setCnt
++
if
(
search
.
UseSTime
.
length
>
0
)
setCnt
++
if
(
search
.
MailingState
>
0
)
setCnt
++
if
(
search
.
Name
)
setCnt
++
if
(
search
.
CouponsName
)
setCnt
++
if
(
search
.
ContactNumber
)
setCnt
++
return
setCnt
})
...
...
src/components/trip/order/TripOrderList.vue
View file @
d30354f5
<
template
>
<div>
<q-card
class=
"light-shadow q-pa-md bg-white rounded-borders q-mb-md"
flat
v-for=
"x in orders"
>
<div
class=
"row items-center desktop-only"
>
<div
class=
"q-mr-md"
>
<q-btn
:color=
"x.MailingState == 1 ? 'cyan' : x.MailingState == 2?'negative':'positive'"
unelevated
disable
size=
"sm"
:label=
"`$
{x.MailingState == 1 ? $t('v102.ticket.zq') : x.MailingState == 2 ?$t('v102.ticket.yj'):$t('v102.ticket.dzp')}`">
</q-btn>
<div
class=
"q-py-sm"
></div>
<q-card
class=
"light-shadow q-pa-md bg-white rounded-borders q-mb-md"
flat
>
<!-- desktop-only -->
<div
class=
""
>
<div
class=
"row wrap justify-between"
>
<span
class=
"f12 text-grey-6"
>
<template
v-if=
"$q.platform.is.desktop"
>
{{
$t
(
'hotelorder.search.orderNum'
)
}}
:
</
template
>
44089
</span>
<span
class=
"text-center f12 text-grey-6"
>
<
template
v-if=
"$q.platform.is.desktop"
>
{{
$t
(
'v102.ticket.sj'
)
}}
:
</
template
>
李建波(武) 18224442258
</span>
<span
class=
"f12 text-grey-6"
>
<
template
v-if=
"$q.platform.is.desktop"
>
{{
$t
(
'hotelorder.createTime'
)
}}
:
</
template
>
2023-03-06 14:20:56
</span>
</div>
<div
class=
""
:class=
"{'q-py-md row justify-between':$q.platform.is.desktop,'column q-py-sm':$q.platform.is.mobile}"
>
<div
:class=
"{'row col':$q.platform.is.desktop}"
>
<div
:style=
"{'width':$q.platform.is.desktop?'150px':'100%'}"
>
<q-img
class=
"rounded-borders"
:style=
"{'width':$q.platform.is.desktop?'150px':'100%'}"
:ratio=
"16 / 9"
src=
"http://imgfile.oytour.com/Upload/DMC/yEiRE8pRWE5ZF8cPNRnAiQST8WbyaGQc.jpg"
spinner-color=
"grey"
spinner-size=
"50px"
fit=
"cover"
/>
</div>
<div
class=
"column"
:class=
"{'q-pl-lg':$q.platform.is.desktop,'q-pt-sm':$q.platform.is.mobile}"
>
<span
class=
"text-subtitle1 text-weight-bolder ellipsis cursor-pointer"
>
“绿野仙踪”斯里兰卡8天7日游(昆明)
</span>
<span
class=
"f12 text-grey-700 ellipsis q-py-sm"
>
绿野仙踪系列
</span>
<span
class=
"f13 text-grey-700"
>
团号:13313 (
<span
class=
"text-red"
>
3
</span>
旅客 )
</span>
</div>
</div>
<div
:class=
"{'row items-end':$q.platform.is.desktop}"
style=
"flex-shrink: 0;"
>
<div
class=
"column text-right"
>
<div
:class=
"{'row justify-between q-pt-lg q-pb-xs':$q.platform.is.mobile}"
>
<span
class=
"fz13"
>
总金额:
<span
class=
"fz16"
>
¥45200
</span>
</span>
<div
class=
"fz13"
:class=
"{'q-py-xs':$q.platform.is.desktop}"
><span
class=
"text-orange-7"
>
已付总额:
<span
class=
"fz16"
>
¥0.00
</span>
</span>
</div>
<div
class=
"f12 text-grey-6"
>
{{
$t
(
'hotelorder.search.orderNum'
)
}}
:
{{
x
.
OrderNo
}}
</div>
<div
class=
"q-ml-md"
>
<q-btn
color=
"dark"
flat
size=
"sm"
:label=
"$t('hotelorder.copy')"
v-if=
"copyId != x.OrderId"
@
click=
"setCopyHandler(x)"
/>
<q-btn
color=
"cyan"
icon=
"check"
outline
size=
"sm"
:label=
"$t('hotelorder.copyed')"
v-else
></q-btn>
</div>
<div
class=
"col text-center f12 text-grey-6"
>
<span
v-if=
"x.MailingState"
>
{{
$t
(
'v102.ticket.sj'
)
}}
:
{{
x
.
Name
}}
(
{{
x
.
EName
}}
)/
{{
x
.
Mobile
}}
</span>
</div>
<div
class=
"f12 text-grey-6"
>
{{
$t
(
'hotelorder.createTime'
)
}}
:
{{
x
.
CreateTime
}}
</div>
<div
class=
"q-ml-md f12"
:class=
"[x.typeInfo.Color]"
>
<q-icon
:name=
"x.typeInfo.Icon"
/>
<span
class=
"q-ml-sm"
>
{{
x
.
typeInfo
.
StatusName
}}
</span>
</div>
</div>
<div
class=
"mobile-only"
>
<div
class=
"row justify-between"
>
<div
class=
"q-mr-md"
>
<q-btn
:color=
"x.MailingState == 1 ? 'cyan' : 'negative'"
unelevated
disable
size=
"sm"
:label=
"`$
{x.MailingState == 1 ? $t('hotelorder.orderType.guest') : $t('hotelorder.orderType.tour')}`">
</q-btn>
</div>
<div
class=
"q-ml-md f12"
:class=
"[x.typeInfo.Color]"
>
<q-icon
:name=
"x.typeInfo.Icon"
/>
<span
class=
"q-ml-sm"
>
{{
x
.
typeInfo
.
StatusName
}}
</span>
</div>
</div>
<div
class=
"bg-grey-2 rounded-borders q-pa-sm q-mt-md"
>
<div
class=
"row items-center justify-between"
>
<div
class=
"f12 text-grey-6"
>
{{
$t
(
'hotelorder.search.orderNum'
)
}}
:
{{
x
.
OrderNo
}}
</div>
<div
class=
"q-ml-md"
>
<q-btn
color=
"dark"
flat
size=
"sm"
:label=
"$t('hotelorder.copy')"
v-if=
"copyId != x.OrderId"
@
click=
"setCopyHandler(x)"
/>
<q-btn
color=
"cyan"
outline
size=
"sm"
:label=
"$t('hotelorder.copyed')"
v-else
></q-btn>
</div>
</div>
<div
class=
"f12 text-grey-6"
>
<span
v-if=
"x.MailingState"
>
{{
$t
(
'hotelorder.search.contactInfo'
)
}}
:
{{
x
.
Name
}}
(
{{
x
.
EName
}}
)/
{{
x
.
ContactPhone
}}
</span>
</div>
<div
class=
"f12 text-grey-6"
>
{{
$t
(
'hotelorder.createTime'
)
}}
:
{{
x
.
CreateTime
}}
</div>
<span
class=
"fz13 text-red"
>
优惠金额:
<span
class=
"fz16"
>
¥202855
</span></span>
</div>
</div>
<!--
<div
v-if=
"x.MailingState == 4"
>
<div
class=
"f12"
>
{{
$t
(
'v102.ticket.dzp'
)
}}
<span
class=
"text-negative"
>
{{
x
.
UseDate
}}
</span>
{{
$t
(
'hotelorder.pay.t21'
)
}}
</div>
<div
class=
"row items-center f12 q-mt-sm"
>
<div
class=
"text-accent q-mr-md"
v-if=
"x.TicketCodeFile"
>
{{
x
.
TicketCodeFile
.
split
(
'/'
).
at
(
-
1
)
}}
</div>
<q-btn
dense
unelevated
color=
"primary"
size=
"sm"
class=
"q-mr-sm"
v-if=
"x.TicketCodeFile"
>
<a
class=
"text-white"
style=
"text-decoration:none"
:href=
"x.TicketCodeFile"
>
{{
$t
(
'upload.down'
)
}}
</a>
</q-btn>
</div>
</div>
-->
<div
class=
"q-mt-md row"
>
<q-table
separator=
"cell"
:hide-bottom=
"!x.Remark"
:pagination=
"
{ rowsPerPage: 100 }" :rows="x.DetailList" bordered :columns="cols" class="sticky-rightrowspan-column-table light-border col no-shadow">
<template
v-slot:body-cell-Date=
"props"
>
<q-td
:props=
"props"
:rowspan=
"x.DetailList.length"
v-if=
"props.rowIndex == 0"
>
<div>
{{
x
.
CouponsName
}}
</div>
<span
class=
"text-grey-6 q-pt-xs"
>
{{
x
.
UseDate
}}
</span>
</q-td>
</
template
>
<
template
v-slot:body-cell-TicketName=
"props"
>
<q-td
:props=
"props"
>
<div
class=
"max-hotelname ellipsis"
>
{{
props
.
value
}}
</div>
<q-tooltip>
{{
props
.
value
}}
</q-tooltip>
</q-td>
</
template
>
<!-- <template v-slot:body-cell-MailingMoney="props">
<q-td :props="props">
<span>{{moneyFormat(x.MailingMoney)}}</span>
</q-td>
</template> -->
<
template
v-slot:body-cell-Money=
"props"
>
<q-td
:props=
"props"
>
{{
props
.
row
.
Money
}}
</q-td>
</
template
>
<
template
v-slot:bottom
>
<div
class=
"msl text-negative"
>
{{
$t
(
'v101.hotelRemark'
)
}}
:
{{
x
.
Remark
}}
</div>
</
template
>
</q-table>
</div>
<div
class=
"q-mt-md"
v-if=
"x.OrderStatus != 3"
:class=
"{ row: $q.platform.is.desktop, 'column reverse': $q.platform.is.mobile }"
>
<div
class=
"pay row text-grey rounded-borders"
:class=
"{ 'bg-grey-2 q-mt-md': $q.platform.is.mobile, col: $q.platform.is.desktop }"
>
<div
class=
"bg-orange-1 col-12 rounded-borders q-pa-md"
>
<div
v-if=
"x.MailingState==2||x.MailingState==3"
>
<div
class=
"text-subtitle2 text-dark text-weight-bolder row items-center"
>
<span
class=
"col"
>
{{ $t('v102.ticket.sjc.c5') }}:
</span>
<span
class=
"f12"
:class=
"[x.SendType.Color]"
>
{{ x.SendType.Name }}
</span>
</div>
<div
class=
"f12 text-dark q-mt-sm"
>
{{ x.MailingAddress }}
</div>
</div>
<div
v-else
>
<div
class=
"text-subtitle2 text-dark text-weight-bolder"
>
{{ x.MailingState==1?$t('v102.ticket.zqa'):$t('v102.ticket.dzp') }}:
</div>
<div
class=
"f12 text-dark q-mt-sm"
>
<
template
v-if=
"x.MailingState==1"
>
{{
x
.
SelffetchAddress
?
x
.
SelffetchAddress
:
$t
(
'v102.ticket.nzqa'
)
}}
</
template
>
<
template
v-else
>
{{
x
.
TicketCodeFile
?
''
:
$t
(
'v102.ticket.nzqa1'
)
}}
<div
class=
"row items-center f12 q-mt-sm"
>
<div
class=
"text-accent q-mr-md"
v-if=
"x.TicketCodeFile"
>
{{
x
.
TicketCodeFile
.
split
(
'/'
).
at
(
-
1
)
}}
</div>
<q-btn
dense
unelevated
color=
"primary"
size=
"sm"
class=
"q-mr-sm"
v-if=
"x.TicketCodeFile"
>
<a
class=
"text-white"
style=
"text-decoration:none"
:href=
"x.TicketCodeFile"
>
{{
$t
(
'upload.down'
)
}}
</a>
</q-btn>
</div>
</
template
>
</div>
</div>
</div>
</div>
<div
class=
"col desktop-only"
></div>
<div
class=
"rounded-borders bg-grey-2 q-pa-md"
:class=
"{ 'q-mx-md': $q.platform.is.desktop, 'q-mt-md': $q.platform.is.mobile }"
>
<div
class=
"row items-center justify-between q-mb-sm q-pb-sm"
style=
"border-bottom: 1px dashed #ddd"
>
<div
class=
"f12 text-grey"
>
{{ $t('hotelorder.orderMoney') }}
</div>
<div
class=
"dark q-ml-xl"
>
<span
class=
"din text-subtitle1"
>
{{ moneyFormat(x.Money) }}
</span>
<span
class=
"f12"
>
{{ x.CurrencyCode }}
</span>
</div>
</div>
<div
class=
"row items-center justify-between q-mb-sm q-pb-sm"
style=
"border-bottom: 1px dashed #ddd"
v-if=
"x.MailingMoney>0"
>
<div
class=
"f12 text-grey"
>
{{ $t('v102.ticket.sjc.c6') }}
</div>
<div
class=
"dark"
>
<span
class=
"f12"
>
{{ moneyFormat(x.MailingMoney) }}
</span>
<span
class=
"f12"
>
{{ x.CurrencyCode }}
</span>
</div>
</div>
<div
class=
"text-right"
>
<q-btn
dense
outline
color=
"accent"
size=
"sm"
class=
"q-mt-sm"
:label=
"$t('hotelorder.payinfo')"
@
click=
"ViewPayment"
></q-btn>
</div>
</div>
<div
class=
"rounded-borders q-pa-sm justify-between"
:class=
"{ column: $q.platform.is.desktop, 'row items-center': $q.platform.is.mobile, 'bg-green-1': x.OrderStatus != 1, 'bg-grey-2': x.OrderStatus == 1 }"
>
<q-list
dense
v-if=
"x.OrderStatus == 1"
:class=
"{ 'row items-center justify-between full-width': $q.platform.is.mobile }"
>
<q-item
class=
"text-negative"
clickable
v-close-popup
@
click=
"cancelConfirmHandler(x.OrderId)"
>
<q-item-section>
<q-item-label>
{{ $t('hotelorder.opera.cancel') }}
</q-item-label>
</q-item-section>
</q-item>
<q-item
class=
"text-primary"
clickable
v-close-popup
@
click=
"modify(x)"
>
<q-item-section>
<q-item-label>
{{ $t('hotelorder.opera.edit') }}
</q-item-label>
</q-item-section>
</q-item>
<q-item
class=
"text-positive"
clickable
v-close-popup
>
<q-item-section>
<q-item-label>
{{ $t('v101.Listofquotation.baojiadan') }}
</q-item-label>
</q-item-section>
</q-item>
<!-- <q-item class="text-dark" clickable v-close-popup>
<q-item-section>
<q-item-label>{{ $t('hotelorder.opera.view') }}</q-item-label>
</q-item-section>
</q-item> -->
</q-list>
<div
v-else
>
<div
class=
"f12 text-green-4"
>
{{ $t('hotelorder.payed') }}
</div>
<div
class=
"text-subtitle1 din text-green-14"
>
{{ x.Money.toFixed(2) }}
<span
class=
"text-green-4 f12"
>
{{ $t('unit.jp') }}
</span>
</div>
</div>
</div>
</div>
<div
v-if=
"x.OrderStatus == 3"
>
<div
class=
"q-mt-md q-pa-sm row items-center rounded-borders bg-orange-1"
style=
"border-width: 0 5px; border-style: solid; border-color: #ffb74d"
>
<div
class=
"text-subtitle2 text-weight-bolder text-grey-900"
>
{{ $t('v101.cancelRemark') }}:
</div>
<div
class=
"f12 text-grey-600 q-ml-sm col"
>
{{ x.CancelRemark ? x.CancelRemark : $t('v101.selfCancle') }}
</div>
<div
class=
"f12 text-grey-900"
>
{{ x.CancelEmpName }} {{ x.CancelTime }}
</div>
</div>
<div
class=
"mobile-only"
>
</div>
</q-card>
<q-card
class=
"light-shadow q-pa-md bg-white rounded-borders q-mb-md"
v-if=
"pages.pageCount > 0"
flat
>
...
...
@@ -211,7 +71,7 @@ import { SendType, StandardStatus } from '../../../@types'
import
{
useI18n
}
from
'vue-i18n'
import
svgIcon
from
'../../global/svg-icon.vue'
import
{
copyToClipboard
,
useQuasar
}
from
'quasar'
import
{
get
Hotel
OrderStatus
,
getSendType
,
moneyFormat
}
from
'../../../utils/tools'
import
{
get
Trip
OrderStatus
,
getSendType
,
moneyFormat
}
from
'../../../utils/tools'
import
ModifyOrderAddress
from
'./ModifyOrderAddress.vue'
import
BankAccount
from
'../../BankAccount.vue'
export
default
defineComponent
({
...
...
@@ -260,10 +120,12 @@ export default defineComponent({
initOrders
()
{
data
.
loading
=
true
let
param
=
Object
.
assign
(
data
.
pages
,
search
)
scheduledTripService
.
Get
TravelOneDayOrderList
(
param
)
scheduledTripService
.
Get
recentorder
(
param
)
.
then
(
r
=>
{
data
.
loading
=
false
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
console
.
log
(
r
.
data
.
data
,
'===='
)
return
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
]
...
...
@@ -283,6 +145,14 @@ export default defineComponent({
message
.
errorMsg
(
e
.
message
)
data
.
loading
=
false
})
let
param2
=
Object
.
assign
(
data
.
pages
,
search
)
scheduledTripService
.
GetWaitDealOrderPageList
(
param
)
.
then
(
r
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
console
.
log
(
r
.
data
.
data
,
'---'
)
}
}
)
},
cancelConfirmHandler
(
orderId
:
number
)
{
$q
.
dialog
({
...
...
@@ -294,10 +164,11 @@ export default defineComponent({
methods
.
cancelOrderHandler
(
orderId
)
})
},
// 取消订单
cancelOrderHandler
(
orderId
:
number
)
{
if
(
data
.
loading
)
return
data
.
loading
=
true
scheduledTripService
.
Get
TravelOneDayOrder
List
(
orderId
)
scheduledTripService
.
Get
WaitDealOrderPage
List
(
orderId
)
.
then
(
r
=>
{
data
.
loading
=
false
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
...
...
@@ -320,7 +191,7 @@ export default defineComponent({
methods
.
initOrders
()
},
init
()
{
data
.
status
=
get
Hotel
OrderStatus
()
data
.
status
=
get
Trip
OrderStatus
()
data
.
sends
=
getSendType
()
methods
.
initOrders
()
},
...
...
src/module/user/loginModule.ts
View file @
d30354f5
...
...
@@ -44,7 +44,7 @@ const userUserLoginModule = () => {
const
param
=
{
account
:
userModel
.
username
,
password
:
userModel
.
password
,
platform
:
0
platform
:
3
}
let
r
=
await
dispatchAction
<
UserActionsType
>
(
'user'
,
'userLogin'
,
param
)
as
[
boolean
,
string
]
if
(
!
r
[
0
]){
...
...
src/pages/auth/forget.vue
View file @
d30354f5
...
...
@@ -114,7 +114,7 @@ export default defineComponent({
if
(
!
accountRefVal
.
value
.
hasError
){
data
.
loading
=
true
//hasError
UserService
.
sendVerify
({
account
:
data
.
account
,
platform
:
0
}).
then
(
r
=>
{
UserService
.
sendVerify
({
account
:
data
.
account
,
platform
:
3
}).
then
(
r
=>
{
console
.
log
(
r
)
data
.
loading
=
false
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
){
...
...
src/pages/scheduledTrip/TripOrder.vue
View file @
d30354f5
...
...
@@ -6,6 +6,7 @@
</
template
>
<
script
lang=
"ts"
>
import
Store
from
'../../store'
import
{
defineComponent
,
inject
,
provide
,
reactive
,
toRefs
,
onMounted
}
from
'vue'
import
{
currentRouter
}
from
'src/router'
import
useMetaModule
from
'../../module/meta/metaModule'
...
...
@@ -22,24 +23,17 @@ export default defineComponent({
const
pageTitle
=
inject
(
DirtionmaryHelper
.
PAGE_TITLE_KEY
)
as
any
pageTitle
.
value
=
t
(
'v102.to.pageTitle'
)
setTitle
(
pageTitle
.
value
)
let
CustomerId
if
(
Store
.
state
&&
Store
.
state
.
user
?.
userDetail
)
{
CustomerId
=
Store
.
state
.
user
?.
userDetail
?.
customerId
}
const
search
=
reactive
({
OrderId
:
''
,
OrderNo
:
''
,
OrderStatus
:
0
,
StartTime
:
''
,
EndTime
:
''
,
// TicketName:'',//景区名称
CouponsName
:
''
,
//景区名称
ContactNumber
:
''
,
//电话
Name
:
''
,
//顾客名称
UseSTime
:
''
,
//门票开始时间
UseETime
:
''
,
//门票结束时间
MailingState
:
-
1
orderType
:
7
,
//7跟团订单
queryDays
:
0
,
//10天内
orderState
:
-
1
,
//订单状态
CustomerId
:
CustomerId
,
//用户id
})
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
...
...
src/utils/tools.ts
View file @
d30354f5
...
...
@@ -193,6 +193,43 @@ export function getHotelOrderStatus():Array<StandardStatus>{
return
status
}
// 行程订单状态
export
function
getTripOrderStatus
():
Array
<
StandardStatus
>
{
let
status
=
[]
as
Array
<
StandardStatus
>
let
text
=
[
'全部'
,
'待付定金'
,
'待付尾款'
,
'待发团'
,
'交易完成'
,
'取消'
]
let
color
=
[
''
,
'positive'
,
'dark'
,
'orange'
,
'negative'
,
'orange'
,
'negative'
]
let
icons
=
[
''
,
'update'
,
'done'
,
'offline_bolt'
,
'cached'
,
'offline_bolt'
,
'cached'
]
text
.
forEach
((
x
,
i
:
number
)
=>
{
status
.
push
({
StatusId
:
i
-
1
,
StatusName
:
x
,
Icon
:
icons
[
i
],
Color
:
`text-
${
color
[
i
]}
`
})
})
return
status
}
// 行程订单天数
export
function
getTripOrderType
():
Array
<
StandardStatus
>
{
let
status
=
[]
as
Array
<
StandardStatus
>
let
text
=
[
'全部'
,
'10天内'
,
'30天内'
,
'60天内'
]
let
days
=
[
0
,
10
,
30
,
60
]
let
color
=
[
''
,
'positive'
,
'dark'
,
'orange'
]
let
icons
=
[
''
,
'update'
,
'done'
,
'offline_bolt'
]
text
.
forEach
((
x
,
i
:
number
)
=>
{
status
.
push
({
StatusId
:
days
[
i
],
StatusName
:
x
,
Icon
:
icons
[
i
],
Color
:
`text-
${
color
[
i
]}
`
})
})
return
status
}
export
function
getStrokeStatus
():
Array
<
StandardStatus
>
{
let
status
=
[]
as
Array
<
StandardStatus
>
let
text
=
[
t
(
'hotelorder.orderStatus.normal'
),
t
(
'v102.vehicle.strokestatus.d1'
),
t
(
'v102.vehicle.strokestatus.d2'
),
t
(
'v102.vehicle.strokestatus.d3'
)]
...
...
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