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
187da1ee
Commit
187da1ee
authored
Apr 07, 2023
by
youjie
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://gitlab.oytour.com/luochao/bigwood
parents
54c6dbc0
6064814c
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
1620 additions
and
1170 deletions
+1620
-1170
travel.ts
src/api/travel.ts
+8
-0
index.ts
src/i18n/zh-TW/index.ts
+1
-1
login.vue
src/pages/auth/login.vue
+0
-55
OrderPayList.vue
src/pages/travel/OrderPayList.vue
+118
-0
OrderList.vue
src/pages/travel/components/OrderList.vue
+15
-17
OrderListHeader.vue
src/pages/travel/components/OrderListHeader.vue
+33
-2
productHeader.vue
src/pages/travel/components/productHeader.vue
+59
-0
productList.vue
src/pages/travel/components/productList.vue
+333
-0
order.vue
src/pages/travel/order.vue
+2
-2
orderList.vue
src/pages/travel/orderList.vue
+73
-0
routes.ts
src/router/routes.ts
+2
-0
menus.ts
src/utils/menus.ts
+9
-9
yarn.lock
yarn.lock
+967
-1084
No files found.
src/api/travel.ts
View file @
187da1ee
...
@@ -11,6 +11,14 @@ class travelService {
...
@@ -11,6 +11,14 @@ class travelService {
static
async
newOrder
(
params
:
any
):
Promise
<
HttpResponse
>
{
static
async
newOrder
(
params
:
any
):
Promise
<
HttpResponse
>
{
return
request
(
'sellorder_post_SetTravelTeamOrderForB2B'
,
params
)
return
request
(
'sellorder_post_SetTravelTeamOrderForB2B'
,
params
)
}
}
// 获取包机结算列表
static
async
payList
(
params
:
any
):
Promise
<
HttpResponse
>
{
return
request
(
'travelteam_GetTravelTeamPartnerPage'
,
params
)
}
// 获取包机订单分页列表
static
async
getOrderList
(
params
:
any
):
Promise
<
HttpResponse
>
{
return
request
(
'sellorder_post_GetTravelTeamOrderPicList'
,
params
)
}
}
}
export
default
travelService
export
default
travelService
src/i18n/zh-TW/index.ts
View file @
187da1ee
...
@@ -358,7 +358,7 @@ export default {
...
@@ -358,7 +358,7 @@ export default {
travel
:
{
travel
:
{
first
:
'包机'
,
first
:
'包机'
,
second
:
'包机服务'
,
second
:
'包机服务'
,
three
:
'
'
three
:
'
包机结算
'
}
}
},
},
login
:
{
login
:
{
...
...
src/pages/auth/login.vue
View file @
187da1ee
<
template
>
<
template
>
<div
class=
"row full-height"
>
<div
class=
"row full-height"
>
<!--
<div
class=
"col window-height column"
>
<div
class=
"col q-pa-lg flex justify-center items-center"
>
<div
class=
"relative-position"
>
<img
src=
"../../assets/images/big-logo.png"
style=
"height: 60px"
class=
"q-mb-lg"
alt=
""
/>
<div
class=
"text-h5 pfb q-mb-md"
>
欢迎回来,亲爱的用户
</div>
<div
class=
"pfb text-grey-5 text-subtitle"
>
通过配置您的推广渠道,实现对线索和客户的快速获取
<br
/>
并且及时的跟进
</div>
<div
class=
"absolute q-mt-md"
style=
"top: 0; left: 180px"
>
<q-badge
style=
"background: #cbcfe0"
floating
transparent
>
Alpha
</q-badge>
</div>
</div>
</div>
<div
class=
"col q-mb-lg login-bg"
></div>
</div>
<div
class=
"col q-pa-xl column"
>
<div
class=
"col"
>
<q-card
class=
"w-450 q-ma-xl q-pa-xl"
>
<div
class=
"text-h5 pfb q-mb-md text-center"
>
登录大水豚
</div>
<div
class=
"text-center q-mb-lg"
>
<span
class=
"text-grey-5 pfb text-subtitle"
>
新用户?
</span>
<router-link
:to=
"
{ path: '/auth/regist' }" class="text-primary pfb text-subtitle">1分钟创建新账户
</router-link>
</div>
<div
class=
"text-body pfb"
>
账户:
</div>
<div
class=
"q-mt-xs"
>
<q-input
standout
v-model=
"userModel.username"
dense
ref=
"usernameRef"
:rules=
"userValidateRule.usernameRule"
/>
</div>
<div
class=
"row q-mt-lg"
>
<div
class=
"col text-body pfb"
>
密码:
</div>
<div
class=
"col text-right"
>
<router-link
:to=
"
{ path: '/auth/forget' }" class="text-primary pfb text-body no-underline">忘记密码
</router-link>
</div>
</div>
<div
class=
"q-mt-xs"
>
<q-input
standout
v-model=
"userModel.password"
type=
"password"
dense
ref=
"passwordRef"
:rules=
"userValidateRule.userpasswordRule"
/>
</div>
<div
class=
"q-mt-md"
>
<q-checkbox
dense
v-model=
"userModel.remeber"
label=
"30天免登录"
color=
"accent"
/>
</div>
<div
class=
"q-mt-lg text-center"
>
<q-btn
class=
"pfb"
color=
"primary"
:loading=
"stateManager.subLogin"
unelevated
label=
"登 录"
style=
"width: 10rem"
@
click=
"loginSubmit"
></q-btn>
</div>
</q-card>
</div>
<div
class=
"q-my-lg q-mx-xl text-center row w-450-only"
>
<div
class=
"f12 text-dark"
>
© 2021-
{{
dtNow
}}
微途科技 版权所有
</div>
<div
class=
"text-center col text-right"
>
<router-link
:to=
"
{ path: '/auth/forget' }" class="f12 no-underline change-a-primary q-mr-md">关于大水豚
</router-link>
<router-link
:to=
"
{ path: '/auth/forget' }" class="f12 no-underline change-a-primary q-mr-md">联系我们
</router-link>
<router-link
:to=
"
{ path: '/auth/forget' }" class="f12 no-underline change-a-primary q-mr-md">技术支持
</router-link>
</div>
</div>
</div>
-->
<div
class=
"col q-pa-xl fit row justify-center height"
>
<div
class=
"col q-pa-xl fit row justify-center height"
>
<div
style=
"width:450px;"
class=
"column justify-between content-between"
>
<div
style=
"width:450px;"
class=
"column justify-between content-between"
>
<div
:class=
"
{'row':$q.platform.is.desktop,'column':$q.platform.is.mobile}">
<div
:class=
"
{'row':$q.platform.is.desktop,'column':$q.platform.is.mobile}">
<div
class=
"col"
:class=
"
{'text-center q-mb-md':$q.platform.is.mobile}">
<div
class=
"col"
:class=
"
{'text-center q-mb-md':$q.platform.is.mobile}">
<img
src=
"../../assets/images/jvs-log.png"
style=
"width:80%;"
/>
<img
src=
"../../assets/images/jvs-log.png"
style=
"width:80%;"
/>
</div>
</div>
<!--
<div
class=
"text-grey-6 text-weight-bold col"
:class=
"
{'text-right':$q.platform.is.desktop,'text-center':$q.platform.is.mobile}">
<span>
{{
$t
(
"login.notaccess"
)
}}
</span>
<router-link
:to=
"
{ path: '/auth/regist' }" class="text-primary pfb text-subtitle">
{{
$t
(
"login.registlink"
)
}}
</router-link>
</div>
-->
</div>
</div>
<div
class=
"q-py-xxl full-width"
>
<div
class=
"q-py-xxl full-width"
>
<div
class=
"text-h3 text-weight-bold"
>
{{
$t
(
"login.title"
)
}}
</div>
<div
class=
"text-h3 text-weight-bold"
>
{{
$t
(
"login.title"
)
}}
</div>
...
...
src/pages/travel/OrderPayList.vue
0 → 100644
View file @
187da1ee
<
style
>
</
style
>
<
template
>
<div>
<div
class=
"rounded-borders bg-white row items-center q-pa-md"
>
<q-field
:class=
"$q.platform.is.desktop ? '' : 'q-mb-md'"
stack-label
:label=
"$t('daterange')"
standout
class=
"q-ml-lg 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>
<q-input
class=
"q-mr-md q-ml-md"
v-model=
"search.GTeamName"
dense
standout
label=
"团号"
/>
<div
class=
"col"
></div>
<q-btn
color=
"primary"
unelevated
:label=
"$t('query')"
@
click=
"setQueryHandler"
/>
</div>
<div
v-for=
"item in orders"
:key=
"item.id"
>
<div>
合作伙伴:
<span>
{{
item
.
ContactName
}}
</span></div>
<div>
已入名单人数:
<span>
{{
item
.
EntGuestNum
}}
</span></div>
<div>
已入名单人数:
<span>
{{
item
.
IsHaveFinance
}}
</span></div>
<div>
报名总人数:
<span>
{{
item
.
GuestNum
}}
</span></div>
<div>
应收总金额:
<span>
{{
item
.
PreferPrice
}}
</span></div>
<div>
退款金额:
<span>
{{
item
.
Refund
}}
</span></div>
<div>
平台税金:
<span>
{{
item
.
PlatformTax
}}
</span></div>
<div>
实收:
<span>
{{
item
.
Income
}}
</span></div>
<div>
在途金额:
<span>
{{
item
.
ZaiTuMoney
}}
</span></div>
<div>
折扣金额:
<span>
{{
item
.
DiscountMoney
}}
</span></div>
<div>
大红包抵扣金额:
<span>
{{
item
.
RedEnvelopeMoney
}}
</span></div>
<div>
代收总金额:
<span>
{{
item
.
DueInMoney
}}
</span></div>
<div>
利润(先给这个字段,规则还没有):
<span>
{{
item
.
CommissionRate
}}
</span></div></div>
</div>
</
template
>
<
script
lang=
"ts"
>
import
{
inject
,
provide
,
reactive
,
toRefs
,
defineComponent
,
onMounted
,
ref
}
from
'vue'
;
import
travelService
from
"../../api/travel"
;
import
{
ApiResult
}
from
"../../@types/enumHelper"
;
import
message
from
"../../utils/message"
;
import
{
useRoute
}
from
'vue-router'
import
{
date
}
from
'quasar'
export
default
defineComponent
({
setup
(
props
)
{
const
qDateProxy
=
ref
(
null
)
as
any
const
dateRange
=
reactive
({
from
:
''
,
to
:
''
})
dateRange
.
to
=
date
.
formatDate
(
date
.
addToDate
(
new
Date
(),
{
days
:
50
}),
'YYYY/MM/DD'
)
dateRange
.
from
=
date
.
formatDate
(
date
.
addToDate
(
new
Date
(),
{
days
:
20
}),
'YYYY/MM/DD'
)
const
dateRangeFormat
=
ref
(
`
${
dateRange
.
from
}
-
${
dateRange
.
to
}
`
)
const
{
query
,
params
}
=
useRoute
()
const
search
=
{
GTeamName
:
''
,
SelectEndDate
:
''
,
SelectStartDate
:
''
,
}
const
data
=
reactive
({
info
:
{},
copyId
:
0
,
showAddOrder
:
false
,
OrderID
:
""
,
showOrderdDetail
:
false
,
orders
:
[]
as
Array
<
any
>
,
pages
:
{
pageIndex
:
1
,
pageSize
:
10
,
pageCount
:
0
,
},
loadingCel
:
false
,
loading
:
false
,
});
search
.
SelectStartDate
=
dateRange
.
from
search
.
SelectEndDate
=
dateRange
.
to
const
methods
=
{
setQueryHandler
()
{
data
.
pages
.
pageIndex
=
1
this
.
initOrders
()
},
dateRangeHandler
(
e
:
any
)
{
search
.
SelectStartDate
=
`
${
e
.
from
.
year
}
/
${
e
.
from
.
month
}
/
${
e
.
from
.
day
}
`
search
.
SelectEndDate
=
`
${
e
.
to
.
year
}
/
${
e
.
to
.
month
}
/
${
e
.
to
.
day
}
`
dateRangeFormat
.
value
=
`
${
search
.
SelectStartDate
}
-
${
search
.
SelectEndDate
}
`
if
(
qDateProxy
.
value
)
qDateProxy
.
value
.
hide
()
},
optionsFn
(
cd
:
any
)
{
return
cd
>=
date
.
formatDate
(
date
.
addToDate
(
new
Date
(),
{
days
:
20
}),
'YYYY/MM/DD'
)
},
initOrders
()
{
data
.
loading
=
true
;
let
param
=
Object
.
assign
(
data
.
pages
,
search
);
travelService
.
payList
(
param
)
.
then
((
r
)
=>
{
data
.
loading
=
false
;
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
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
;
});
},
}
methods
.
initOrders
()
return
{
...
toRefs
(
data
),
...
methods
,
search
,
dateRangeFormat
,
dateRange
};
}
})
</
script
>
\ No newline at end of file
src/pages/travel/components/OrderList.vue
View file @
187da1ee
...
@@ -11,30 +11,21 @@
...
@@ -11,30 +11,21 @@
<div
class=
"mb-title"
>
<div
class=
"mb-title"
>
<i
class=
"iconfont icon-biaoti1"
></i><span>
包机信息
</span>
<i
class=
"iconfont icon-biaoti1"
></i><span>
包机信息
</span>
</div>
</div>
{{
x
.
GTeamName
}}
<div
class=
"mb"
>
<span>
{{
x
.
Title
}}
</span>
</div>
<div>
<div>
出发日期:
<span>
{{
x
.
StartDate
}}
</span>
:
<span>
{{
x
.
orderId
}}
</span>
</div>
</div>
<div>
<div>
团队信息:
<span>
{{
x
.
TCNUM
}}
(
{{
x
.
TCID
}}
)
</span>
:
<span>
{{
x
.
orderId
}}
</span>
</div>
</div>
<div>
:
<span>
{{
x
.
orderId
}}
</span>
</div>
</div>
<div
class=
"col-4"
>
<div
class=
"mb-title"
><i
class=
"iconfont icon-hangban1"
></i><span>
航班信息
</span></div>
<div
class=
"mb"
v-for=
"(subItem, subIndex) in x.TravelTeamFlightList"
:key=
"subIndex + 1000"
>
<div>
<div>
{{
subItem
.
Flight_number
}}
{{
subItem
.
DepartureAirPortName
}}
:
<span>
{{
x
.
orderId
}}
</span>
{{
subItem
.
Departure_time
}}
{{
subItem
.
ArrivalAirPortName
}}
{{
subItem
.
Arrival_time
}}
</div>
</div>
</div>
</div>
<div
class=
"col-4"
>
<div
class=
"mb-title"
><i
class=
"iconfont icon-hangban1"
></i><span>
航班信息
</span></div>
</div>
</div>
<div
class=
"col-2"
>
<div
class=
"col-2"
>
<div>
<div>
...
@@ -79,6 +70,7 @@
...
@@ -79,6 +70,7 @@
</div>
</div>
<div
class=
"col-1"
>
<div
class=
"col-1"
>
<q-btn
color=
"primary"
unelevated
@
click=
"ViewPayment(x)"
>
下单
</q-btn>
<q-btn
color=
"primary"
unelevated
@
click=
"ViewPayment(x)"
>
下单
</q-btn>
<q-btn
color=
"primary"
unelevated
@
click=
"gotoUrl(x)"
>
包机结算
</q-btn>
</div>
</div>
</q-card>
</q-card>
<q-card
<q-card
...
@@ -129,10 +121,12 @@ import { currentRouter } from "../../../router";
...
@@ -129,10 +121,12 @@ import { currentRouter } from "../../../router";
// import OrderdDetail from './OrderdDetail.vue'
// import OrderdDetail from './OrderdDetail.vue'
// import BankAccount from '../../BankAccount.vue'
// import BankAccount from '../../BankAccount.vue'
import
AddOrder
from
"./addOrder.vue"
;
import
AddOrder
from
"./addOrder.vue"
;
import
{
useRouter
}
from
'vue-router'
export
default
defineComponent
({
export
default
defineComponent
({
components
:
{
AddOrder
},
components
:
{
AddOrder
},
setup
(
props
)
{
setup
(
props
)
{
const
$router
=
useRouter
()
const
search
=
inject
(
DirtionmaryHelper
.
TRAVEL_ORDER_OBJ
)
as
any
;
const
search
=
inject
(
DirtionmaryHelper
.
TRAVEL_ORDER_OBJ
)
as
any
;
const
{
t
}
=
useI18n
();
const
{
t
}
=
useI18n
();
const
$q
=
useQuasar
();
const
$q
=
useQuasar
();
...
@@ -173,6 +167,10 @@ export default defineComponent({
...
@@ -173,6 +167,10 @@ export default defineComponent({
console
.
log
(
"ViewPayment"
,
toRaw
(
info
));
console
.
log
(
"ViewPayment"
,
toRaw
(
info
));
data
.
showAddOrder
=
true
;
data
.
showAddOrder
=
true
;
},
},
gotoUrl
(
x
)
{
console
.
log
(
'`/travel/payList?id=${x.TCID}`'
)
$router
.
push
({
path
:
`/travel/payList`
,
query
:
{
id
:
x
.
TCID
}})
},
canCelHotel
(
ThirdOrderNo
)
{
canCelHotel
(
ThirdOrderNo
)
{
$q
.
dialog
({
$q
.
dialog
({
title
:
t
(
"dialog.titles.horder"
),
title
:
t
(
"dialog.titles.horder"
),
...
@@ -217,7 +215,7 @@ export default defineComponent({
...
@@ -217,7 +215,7 @@ export default defineComponent({
data
.
loading
=
true
;
data
.
loading
=
true
;
let
param
=
Object
.
assign
(
data
.
pages
,
search
);
let
param
=
Object
.
assign
(
data
.
pages
,
search
);
travelService
travelService
.
get
Travel
List
(
param
)
.
get
Order
List
(
param
)
.
then
((
r
)
=>
{
.
then
((
r
)
=>
{
data
.
loading
=
false
;
data
.
loading
=
false
;
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
...
...
src/pages/travel/components/OrderListHeader.vue
View file @
187da1ee
<
template
>
<
template
>
<!--
接口文档地址
http://dev.api.oytour.com/#/home/project/inside/api/detail?groupID=20&childGroupID=730&apiID=4386&projectName=REBORN&projectID=2
参考
http://dev.api.oytour.com/#/home/project/inside/api/detail?groupID=157&childGroupID=170&apiID=1010&projectName=REBORN&projectID=2
-->
<div
class=
"rounded-borders bg-white row items-center q-pa-md"
>
<div
class=
"rounded-borders bg-white row items-center q-pa-md"
>
<div>
<span>
订单状态
</span>
<q-select
v-model=
"search.OrderState"
></q-select>
</div>
<div>
<span>
参团类型
</span>
<q-select
v-model=
"search.GroupType"
></q-select>
</div>
<div>
<span>
订单来源
</span>
<q-select
v-model=
"search.OrderSource"
></q-select>
</div>
<div>
<span>
支付状态
</span>
<q-select
v-model=
"search.PayStatus"
></q-select>
</div>
<q-field
:class=
"$q.platform.is.desktop ? '' : 'q-mb-md'"
stack-label
:label=
"$t('daterange')"
standout
class=
"q-ml-lg 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>
<q-field
:class=
"$q.platform.is.desktop ? '' : 'q-mb-md'"
stack-label
:label=
"$t('daterange')"
standout
class=
"q-ml-lg col-2"
style=
"min-width: 190px"
dense
>
<q-field
:class=
"$q.platform.is.desktop ? '' : 'q-mb-md'"
stack-label
:label=
"$t('daterange')"
standout
class=
"q-ml-lg col-2"
style=
"min-width: 190px"
dense
>
<div
class=
"self-center full-width no-outline"
tabindex=
"0"
>
{{
dateRangeFormat
}}
</div>
<div
class=
"self-center full-width no-outline"
tabindex=
"0"
>
{{
dateRangeFormat
}}
</div>
<q-popup-proxy
:offset=
"[0, 10]"
ref=
"qDateProxy"
>
<q-popup-proxy
:offset=
"[0, 10]"
ref=
"qDateProxy"
>
...
@@ -7,7 +38,7 @@
...
@@ -7,7 +38,7 @@
@
range-end=
"dateRangeHandler"
></q-date>
@
range-end=
"dateRangeHandler"
></q-date>
</q-popup-proxy>
</q-popup-proxy>
</q-field>
</q-field>
<q-input
class=
"q-mr-md q-ml-md"
v-model=
"search.TC
ID
"
dense
standout
label=
"团号"
/>
<q-input
class=
"q-mr-md q-ml-md"
v-model=
"search.TC
NUM
"
dense
standout
label=
"团号"
/>
<div
class=
"col"
></div>
<div
class=
"col"
></div>
<q-btn
color=
"primary"
unelevated
:label=
"$t('query')"
@
click=
"setQueryHandler"
/>
<q-btn
color=
"primary"
unelevated
:label=
"$t('query')"
@
click=
"setQueryHandler"
/>
</div>
</div>
...
@@ -33,7 +64,7 @@ export default defineComponent({
...
@@ -33,7 +64,7 @@ export default defineComponent({
setQueryHandler
(){
setQueryHandler
(){
realSearch
.
StartTime
=
search
.
StartTime
realSearch
.
StartTime
=
search
.
StartTime
realSearch
.
EndTime
=
search
.
EndTime
realSearch
.
EndTime
=
search
.
EndTime
realSearch
.
TC
ID
=
search
.
TCID
realSearch
.
TC
NUM
=
search
.
TCNUM
},
},
dateRangeHandler
(
e
:
any
)
{
dateRangeHandler
(
e
:
any
)
{
search
.
StartTime
=
`
${
e
.
from
.
year
}
/
${
e
.
from
.
month
}
/
${
e
.
from
.
day
}
`
search
.
StartTime
=
`
${
e
.
from
.
year
}
/
${
e
.
from
.
month
}
/
${
e
.
from
.
day
}
`
...
...
src/pages/travel/components/productHeader.vue
0 → 100644
View file @
187da1ee
<
template
>
<div
class=
"rounded-borders bg-white row items-center q-pa-md"
>
<q-field
:class=
"$q.platform.is.desktop ? '' : 'q-mb-md'"
stack-label
:label=
"$t('daterange')"
standout
class=
"q-ml-lg 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>
<q-input
class=
"q-mr-md q-ml-md"
v-model=
"search.TCID"
dense
standout
label=
"团号"
/>
<div
class=
"col"
></div>
<q-btn
color=
"primary"
unelevated
:label=
"$t('query')"
@
click=
"setQueryHandler"
/>
</div>
</
template
>
<
script
lang=
"ts"
>
import
{
DirtionmaryHelper
}
from
'../../../config/dictionary'
import
{
defineComponent
,
inject
,
reactive
,
ref
}
from
'vue'
import
{
date
}
from
'quasar'
export
default
defineComponent
({
setup
(
props
)
{
const
qDateProxy
=
ref
(
null
)
as
any
const
realSearch
=
inject
(
DirtionmaryHelper
.
TRAVEL_ORDER_OBJ
)
as
any
const
search
=
reactive
(
JSON
.
parse
(
JSON
.
stringify
(
realSearch
)))
const
dateRange
=
reactive
({
from
:
''
,
to
:
''
})
dateRange
.
to
=
date
.
formatDate
(
date
.
addToDate
(
new
Date
(),
{
days
:
50
}),
'YYYY/MM/DD'
)
dateRange
.
from
=
date
.
formatDate
(
date
.
addToDate
(
new
Date
(),
{
days
:
20
}),
'YYYY/MM/DD'
)
const
dateRangeFormat
=
ref
(
`
${
dateRange
.
from
}
-
${
dateRange
.
to
}
`
)
search
.
StartTime
=
dateRange
.
from
search
.
EndTime
=
dateRange
.
to
const
methods
=
{
setQueryHandler
(){
realSearch
.
StartTime
=
search
.
StartTime
realSearch
.
EndTime
=
search
.
EndTime
realSearch
.
TCID
=
search
.
TCID
},
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
}
`
dateRangeFormat
.
value
=
`
${
search
.
StartTime
}
-
${
search
.
EndTime
}
`
if
(
qDateProxy
.
value
)
qDateProxy
.
value
.
hide
()
},
optionsFn
(
cd
:
any
)
{
return
cd
>=
date
.
formatDate
(
date
.
addToDate
(
new
Date
(),
{
days
:
20
}),
'YYYY/MM/DD'
)
},
}
return
{
...
methods
,
search
,
dateRange
,
dateRangeFormat
}
}
})
</
script
>
<
style
></
style
>
src/pages/travel/components/productList.vue
0 → 100644
View file @
187da1ee
<
template
>
<div>
<q-card
class=
"light-shadow q-pa-md bg-white rounded-borders q-mb-md"
flat
:class=
"$q.platform.is.desktop ? 'row' : ''"
v-for=
"(x, index) in orders"
>
<div
class=
"col-2"
>
<div
class=
"mb-title"
>
<i
class=
"iconfont icon-biaoti1"
></i><span>
包机信息
</span>
</div>
{{
x
.
GTeamName
}}
<div
class=
"mb"
>
<span>
{{
x
.
Title
}}
</span>
</div>
<div>
出发日期:
<span>
{{
x
.
StartDate
}}
</span>
</div>
<div>
团队信息:
<span>
{{
x
.
TCNUM
}}
(
{{
x
.
TCID
}}
)
</span>
</div>
</div>
<div
class=
"col-4"
>
<div
class=
"mb-title"
><i
class=
"iconfont icon-hangban1"
></i><span>
航班信息
</span></div>
<div
class=
"mb"
v-for=
"(subItem, subIndex) in x.TravelTeamFlightList"
:key=
"subIndex + 1000"
>
<div>
{{
subItem
.
Flight_number
}}
{{
subItem
.
DepartureAirPortName
}}
{{
subItem
.
Departure_time
}}
{{
subItem
.
ArrivalAirPortName
}}
{{
subItem
.
Arrival_time
}}
</div>
</div>
</div>
<div
class=
"col-2"
>
<div>
<div
class=
"mb-title"
>
<i
class=
"iconfont icon-jiage"
></i><span>
团位信息
</span>
</div>
<div
class=
"mb"
>
<span>
经济舱:
{{
x
.
YSeat
}}
</span>
</div>
<div
class=
"mb"
>
<span>
商务舱:
{{
x
.
CSeat
}}
</span>
</div>
<div
class=
"mb"
>
<span>
头等舱:
{{
x
.
FSeat
}}
</span>
</div>
</div>
</div>
<div
class=
"col-3"
>
<div
class=
"mb-title"
>
<i
class=
"iconfont icon-jiage"
></i><span>
价格信息
</span>
</div>
<div
class=
"mb"
>
<span>
中心价:
{{
x
.
B2BMemberPrice
}}
</span>
</div>
<div
class=
"mb"
>
<span
>
小孩占床:
{{
x
.
ChildNeedPrice
}}
不占床:
{{
x
.
ChildNoNeedPrice
}}
</span
>
</div>
<div
class=
"mb"
>
<span
>
婴儿:
{{
x
.
BabyPrice
}}
婴儿附加费:
{{
x
.
BabyChargePrice
}}
</span
>
</div>
<div
class=
"mb"
>
<span
>
老人附加费:
{{
x
.
OldManChargePrice
}}
签证:
{{
x
.
VisaPrice
}}
</span
>
</div>
</div>
<div
class=
"col-1"
>
<q-btn
color=
"primary"
unelevated
@
click=
"ViewPayment(x)"
>
下单
</q-btn>
<q-btn
color=
"primary"
unelevated
@
click=
"gotoUrl(x)"
>
包机结算
</q-btn>
</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=
"showOrderdDetail"
>
<!--
<OrderdDetail
:OrderID=
"OrderID"
></OrderdDetail>
-->
</q-dialog>
<q-dialog
v-model=
"showAddOrder"
>
<AddOrder
:info=
"info"
@
close=
"showAddOrder = false"
></AddOrder>
</q-dialog>
</
template
>
<
script
lang=
"ts"
>
import
{
DirtionmaryHelper
}
from
"../../../config/dictionary"
;
import
{
defineComponent
,
inject
,
reactive
,
toRefs
,
watch
,
toRaw
}
from
"vue"
;
import
travelService
from
"../../../api/travel"
;
import
{
ApiResult
}
from
"../../../@types/enumHelper"
;
import
message
from
"../../../utils/message"
;
import
{
RoomType
,
StandardStatus
}
from
"../../../@types"
;
import
{
getHotelOrderStatus
,
getHotelRoomType
,
moneyFormat
}
from
"../../../utils/tools"
;
import
{
useI18n
}
from
"vue-i18n"
;
import
svgIcon
from
"../../../global/svg-icon.vue"
;
import
{
copyToClipboard
,
useQuasar
}
from
"quasar"
;
import
{
currentRouter
}
from
"../../../router"
;
// import OrderdDetail from './OrderdDetail.vue'
// import BankAccount from '../../BankAccount.vue'
import
AddOrder
from
"./addOrder.vue"
;
import
{
useRouter
}
from
'vue-router'
export
default
defineComponent
({
components
:
{
AddOrder
},
setup
(
props
)
{
const
$router
=
useRouter
()
const
search
=
inject
(
DirtionmaryHelper
.
TRAVEL_ORDER_OBJ
)
as
any
;
const
{
t
}
=
useI18n
();
const
$q
=
useQuasar
();
watch
(
search
,
(
n
,
o
)
=>
{
if
(
data
.
loading
)
return
;
data
.
pages
.
pageIndex
=
1
;
data
.
orders
=
[];
methods
.
initOrders
();
});
const
data
=
reactive
({
info
:
{},
copyId
:
0
,
showAddOrder
:
false
,
OrderID
:
""
,
showOrderdDetail
:
false
,
orders
:
[]
as
Array
<
any
>
,
status
:
[]
as
Array
<
StandardStatus
>
,
rooms
:
[]
as
Array
<
RoomType
>
,
pages
:
{
pageIndex
:
1
,
pageSize
:
10
,
pageCount
:
0
,
},
loadingCel
:
false
,
loading
:
false
,
});
const
methods
=
{
changePageHandler
(
n
:
any
)
{
console
.
log
(
n
);
data
.
pages
.
pageIndex
=
n
;
methods
.
initOrders
();
},
ViewPayment
(
info
:
any
)
{
data
.
info
=
toRaw
(
info
);
console
.
log
(
"ViewPayment"
,
toRaw
(
info
));
data
.
showAddOrder
=
true
;
},
gotoUrl
(
x
)
{
console
.
log
(
'`/travel/payList?id=${x.TCID}`'
)
$router
.
push
({
path
:
`/travel/payList`
,
query
:
{
id
:
x
.
TCID
}})
},
canCelHotel
(
ThirdOrderNo
)
{
$q
.
dialog
({
title
:
t
(
"dialog.titles.horder"
),
message
:
t
(
"dialog.contents.horder"
),
cancel
:
true
,
persistent
:
true
,
}).
onOk
(()
=>
{
methods
.
cancellations
(
ThirdOrderNo
);
});
},
cancellations
(
ThirdOrderNo
)
{
if
(
data
.
loadingCel
)
return
;
let
msg
=
{
bookingNumber
:
ThirdOrderNo
,
CancelBy
:
search
.
CustomerId
,
CancelType
:
2
,
};
let
param
=
Object
.
assign
(
msg
);
data
.
loadingCel
=
true
;
travelService
.
getTravelList
(
param
)
.
then
((
r
)
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
message
.
successMsg
(
`
${
t
(
"success"
)}
`
);
methods
.
initOrders
();
}
else
{
message
.
errorMsg
(
r
.
data
.
message
);
}
data
.
loadingCel
=
false
;
})
.
catch
((
e
)
=>
{
message
.
errorMsg
(
e
.
message
);
data
.
loadingCel
=
false
;
});
},
getDetail
(
OrderID
)
{
data
.
showOrderdDetail
=
true
;
data
.
OrderID
=
OrderID
;
},
initOrders
()
{
data
.
loading
=
true
;
let
param
=
Object
.
assign
(
data
.
pages
,
search
);
travelService
.
getTravelList
(
param
)
.
then
((
r
)
=>
{
data
.
loading
=
false
;
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
// r.data.data.pageData.forEach((x: any) => {
// x.typeInfo = data.status.find(y => y.StatusId == x.OrderStatus) ?? data.status[1]
// x.SendType = data.sends.find(y => y.Id == x.MailingState) ?? data.sends[0]
// x.Money = 0
// let Money = 0
// x.DetailList.forEach((y:any)=>{
// Money+=y.Money
// })
// x.Money= Number(Money+x.MailingMoney)
// })
data
.
orders
=
r
.
data
.
data
.
pageData
;
data
.
pages
.
pageCount
=
r
.
data
.
data
.
pageCount
;
}
else
{
message
.
errorMsg
(
r
.
data
.
message
);
}
})
.
catch
((
e
)
=>
{
message
.
errorMsg
(
e
.
message
);
data
.
loading
=
false
;
});
},
init
()
{
data
.
status
=
getHotelOrderStatus
();
data
.
rooms
=
getHotelRoomType
();
methods
.
initOrders
();
},
setCopyHandler
(
order
:
any
,
ctx
?:
string
)
{
if
(
ctx
)
{
data
.
copyId
=
-
1
;
copyToClipboard
(
ctx
);
}
else
{
data
.
copyId
=
order
.
OrderID
;
copyToClipboard
(
order
.
ThirdOrderNo
);
}
setTimeout
(()
=>
{
data
.
copyId
=
0
;
},
2000
);
},
};
methods
.
init
();
return
{
...
toRefs
(
data
),
...
methods
,
moneyFormat
,
};
},
});
</
script
>
<
style
>
.light-border
table
,
.light-border
table
td
,
.light-border
.q-table__middle
,
.light-border.borders
,
.light-border
table
th
{
border-color
:
#eee
!important
;
white-space
:
wrap
;
}
.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
>
<
style
scoped
>
.mb-title
{
font-weight
:
bold
;
margin-bottom
:
10px
;
}
.mb
{
margin-bottom
:
10px
;
}
</
style
>
\ No newline at end of file
src/pages/travel/order.vue
View file @
187da1ee
...
@@ -14,8 +14,8 @@ import { SendType, StandardStatus } from '../../@types'
...
@@ -14,8 +14,8 @@ import { SendType, StandardStatus } from '../../@types'
import
{
ApiResult
}
from
'../../@types/enumHelper'
import
{
ApiResult
}
from
'../../@types/enumHelper'
import
message
from
'../../utils/message'
import
message
from
'../../utils/message'
import
{
useI18n
}
from
'vue-i18n'
import
{
useI18n
}
from
'vue-i18n'
import
OrderListHeader
from
'./components/
OrderLis
tHeader.vue'
;
import
OrderListHeader
from
'./components/
produc
tHeader.vue'
;
import
OrderList
from
'./components/
Order
List.vue'
;
import
OrderList
from
'./components/
product
List.vue'
;
import
{
DirtionmaryHelper
}
from
'../../config/dictionary'
;
import
{
DirtionmaryHelper
}
from
'../../config/dictionary'
;
export
default
defineComponent
({
export
default
defineComponent
({
components
:
{
OrderListHeader
,
OrderList
},
components
:
{
OrderListHeader
,
OrderList
},
...
...
src/pages/travel/orderList.vue
0 → 100644
View file @
187da1ee
<
template
>
<div
class=
"fix-height-subpage column no-wrap q-pa-md"
>
<order-list-header></order-list-header>
<div
class=
"col q-mt-md"
>
<order-list></order-list>
</div>
</div>
</
template
>
<
script
lang=
"ts"
>
import
{
inject
,
provide
,
reactive
,
toRefs
,
defineComponent
,
onMounted
}
from
'vue'
;
import
travelService
from
'../../api/travel'
import
{
SendType
,
StandardStatus
}
from
'../../@types'
import
{
ApiResult
}
from
'../../@types/enumHelper'
import
message
from
'../../utils/message'
import
{
useI18n
}
from
'vue-i18n'
import
OrderListHeader
from
'./components/OrderListHeader.vue'
;
import
OrderList
from
'./components/OrderList.vue'
;
import
{
DirtionmaryHelper
}
from
'../../config/dictionary'
;
export
default
defineComponent
({
components
:
{
OrderListHeader
,
OrderList
},
props
:
[
'OrderId'
],
setup
(
props
)
{
const
{
t
}
=
useI18n
()
const
data
=
reactive
({
PaymentDialog
:
false
,
orders
:
[]
as
Array
<
any
>
,
status
:
[]
as
Array
<
StandardStatus
>
,
sends
:
[]
as
Array
<
SendType
>
,
showBankAccount
:
false
,
pages
:
{
pageIndex
:
1
,
pageSize
:
10
,
pageCount
:
0
},
loading
:
false
,
copyId
:
0
,
expendsOrderId
:
0
,
cols
:
[
{
name
:
'Date'
,
label
:
t
(
'v102.ticket.jq'
)
+
'('
+
t
(
'v102.ticket.d'
)
+
')'
,
field
:
(
row
:
any
)
=>
row
.
Date
,
align
:
'left'
},
{
name
:
'TicketName'
,
label
:
t
(
'v102.ticket.hn'
),
field
:
(
row
:
any
)
=>
row
.
TicketName
,
align
:
'left'
},
{
name
:
'Num'
,
label
:
t
(
'v102.ticket.sl'
),
field
:
(
row
:
any
)
=>
row
.
Num
,
align
:
'left'
},
{
name
:
'Money'
,
label
:
t
(
'hotelorder.col.m'
),
field
:
(
row
:
any
)
=>
row
.
Money
,
align
:
'left'
}
]
as
any
[],
modifyOrder
:{}
as
any
,
showModify
:
false
,
})
const
search
=
reactive
({
GTeamName
:
""
,
// 包机名称
FlightCompany
:
""
,
// 航空公司
FlightNo
:
""
,
// 航班号
SelectEndDate
:
""
,
// 出发开始时间
SelectStartDate
:
""
,
// 出发结算时间
})
const
methods
=
{
}
provide
(
DirtionmaryHelper
.
TRAVEL_ORDER_OBJ
,
search
)
onMounted
(()
=>
{
})
return
{
// ...toRefs(data),
...
methods
}
}
})
</
script
>
<
style
>
</
style
>
\ No newline at end of file
src/router/routes.ts
View file @
187da1ee
...
@@ -37,6 +37,8 @@ const routes: RouteRecordRaw[] = [
...
@@ -37,6 +37,8 @@ const routes: RouteRecordRaw[] = [
{
path
:
'/scheduledTrip/preview/:tripId'
,
component
:
()
=>
import
(
'pages/scheduledTrip/TripOrderPreview.vue'
)
},
{
path
:
'/scheduledTrip/preview/:tripId'
,
component
:
()
=>
import
(
'pages/scheduledTrip/TripOrderPreview.vue'
)
},
{
path
:
'/scheduledTrip/order/:orderId?'
,
component
:
()
=>
import
(
'pages/scheduledTrip/TripOrder.vue'
)
},
{
path
:
'/scheduledTrip/order/:orderId?'
,
component
:
()
=>
import
(
'pages/scheduledTrip/TripOrder.vue'
)
},
{
path
:
'/travel/order'
,
component
:
()
=>
import
(
'pages/travel/order.vue'
)
},
{
path
:
'/travel/order'
,
component
:
()
=>
import
(
'pages/travel/order.vue'
)
},
{
path
:
'/travel/payList'
,
component
:
()
=>
import
(
'pages/travel/OrderPayList.vue'
)
},
{
path
:
'/travel/orderList'
,
component
:
()
=>
import
(
'pages/travel/orderList.vue'
)
},
]
]
},
},
{
{
...
...
src/utils/menus.ts
View file @
187da1ee
...
@@ -140,22 +140,22 @@ const useMenus = {
...
@@ -140,22 +140,22 @@ const useMenus = {
menus
.
push
({
menus
.
push
({
name
:
t
(
'menu.travel.first'
),
name
:
t
(
'menu.travel.first'
),
url
:
''
,
url
:
''
,
id
:
1
0
,
id
:
2
0
,
parentId
:
0
,
parentId
:
0
,
icon
:
'Shopping/Money.svg'
,
icon
:
'Shopping/Money.svg'
,
childs
:
[
childs
:
[
{
{
name
:
t
(
'menu.travel.second'
),
name
:
t
(
'menu.travel.second'
),
url
:
'/travel/order'
,
url
:
'/travel/order'
,
id
:
1
1
,
id
:
2
1
,
parentId
:
1
0
,
parentId
:
2
0
,
},
},
//
{
{
//
name: t('menu.travel.three'),
name
:
t
(
'menu.travel.three'
),
// url: '/comingsoon
',
url
:
'/travel/orderList
'
,
// id: 1
2,
id
:
2
2
,
// parentId: 1
0,
parentId
:
2
0
,
//
}
}
]
]
})
})
return
menus
return
menus
...
...
yarn.lock
View file @
187da1ee
This diff is collapsed.
Click to expand it.
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