Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
U
uni-pdtravel
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
Merge Requests
0
Merge Requests
0
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
panyongping
uni-pdtravel
Commits
6269ea24
Commit
6269ea24
authored
Jul 13, 2023
by
潘永坪
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
页面新增
parent
145d0540
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
962 additions
and
36 deletions
+962
-36
App.vue
App.vue
+1
-1
pages.json
pages.json
+10
-1
hghgIndex.vue
pages/indexs/hghgIndex/hghgIndex.vue
+1
-1
merchantListIndex.vue
pages/indexs/merchantListIndex/merchantListIndex.vue
+248
-33
scenicChooseProduct.vue
pages/scenic/scenicChooseProduct/scenicChooseProduct.vue
+702
-0
No files found.
App.vue
View file @
6269ea24
...
...
@@ -93,7 +93,7 @@ export default {
font-size
:
28rpx
;
color
:
#333333
;
background
:
#F7F7F7
;
height
:
100%
;
height
:
100vh
;
}
view
,
...
...
pages.json
View file @
6269ea24
...
...
@@ -182,7 +182,16 @@
"path"
:
"pages/indexs/merchantListIndex/merchantListIndex"
,
"style"
:
{
"navigationBarTitleText"
:
""
,
"navigationBarTitleText"
:
"商品列表"
,
"enablePullDownRefresh"
:
false
}
}
,{
"path"
:
"pages/scenic/scenicChooseProduct/scenicChooseProduct"
,
"style"
:
{
"navigationBarTitleText"
:
"产品选择"
,
"enablePullDownRefresh"
:
false
}
...
...
pages/indexs/hghgIndex/hghgIndex.vue
View file @
6269ea24
...
...
@@ -21,7 +21,7 @@
<text>
开放时间:
</text>
09:00 - 18:
00,闭馆前1小时(17:0
0)停止售票
09:00 - 18:
30,闭馆前1小时(17:3
0)停止售票
</view>
<view
style=
"color: #D9A874;"
>
每周一“湖广填四川”移民博物馆、临展馆闭馆维护。
...
...
pages/indexs/merchantListIndex/merchantListIndex.vue
View file @
6269ea24
<
template
>
<!-- 商户列表首页 -->
<view>
<view
class=
"wrap"
>
<view
class=
"banner"
>
<u-swiper
:list=
"list"
mode=
'number'
height=
"350
"
></u-swiper>
<u-swiper
:list=
"list"
mode=
"number"
height=
"350"
indicator-pos=
"topRight
"
></u-swiper>
</view>
<view
class=
"search"
>
<view
class=
"search-wrap"
>
<view
class=
"search-left"
>
重庆
<view
class=
"line"
></view>
</view>
<view
class=
"search-right"
>
<input
class=
"search-input"
placeholder=
"景区/商品/关键词搜索"
/>
<text
class=
"search-btn"
>
搜索
</text>
<input
class=
"search-input"
placeholder=
"景区/商品/关键词搜索"
v-model=
"searchData"
/>
<text
class=
"search-btn"
@
click=
"initList(true)"
>
搜索
</text>
</view>
</view>
</view>
<view
class=
"merchant-list"
>
<view
class=
"merchant-wrap"
>
<view>
<u-tabs-swiper
ref=
"uTabs"
:list=
"tabList"
:current=
"current"
@
change=
"tabsChange"
:is-scroll=
"false"
swiperWidth=
"750"
></u-tabs-swiper>
</view>
<swiper
:current=
"swiperCurrent"
@
transition=
"transition"
@
animationfinish=
"animationfinish"
class=
"swiper-box"
>
<swiper-item
class=
"swiper-item"
>
<scroll-view
scroll-y
style=
"height:100%;width: 100%;"
>
<view
class=
"merchant-list"
v-for=
"(item,index) in scenicList"
:key=
'index'
>
<view
class=
"list-left"
>
<image
:src=
"item.imgUrl"
></image>
</view>
<view
class=
"list-right"
>
<view
class=
"right1"
>
{{
item
.
name
}}
</view>
<view
class=
"right2"
>
<view
class=
"right2-left"
>
<text
v-for=
"(items, index) of item.tag.slice(0, 3)"
:key=
"index"
v-if=
"items"
>
{{
items
}}
</text>
</view>
<view
class=
"right2-right"
>
距您8km
</view>
</view>
<view
class=
"right3"
>
<text
class=
"right3-text"
v-for=
"(items, index) of item.tag.slice(0, 3)"
:key=
"index"
v-if=
"items"
>
{{
items
}}
</text>
<text>
购买须知
<u-icon
name=
"arrow-right"
></u-icon>
</text>
</view>
<view
class=
"right4"
>
<view
class=
"right4-left"
>
已售10W+
</view>
<view
class=
"right4-right"
>
<text
class=
"right4-price1"
>
¥
{{
parseFloat
(
item
.
originalPrice
)
}}
</text>
<text
class=
"right4-price2"
>
¥
<text
style=
"font-size: 40rpx;font-weight: bold;"
>
{{
parseFloat
(
item
.
sellingPrice
)
}}
</text>
</text>
<text
style=
"color: #ccc;"
>
起
</text>
</view>
</view>
</view>
</view>
<u-empty
text=
"空空如也..."
mode=
"list"
v-if=
"scenicList.length==0"
></u-empty>
</scroll-view>
</swiper-item>
<swiper-item
class=
"swiper-item"
>
<u-empty
text=
"空空如也..."
mode=
"list"
></u-empty>
</swiper-item>
<swiper-item
class=
"swiper-item"
>
<u-empty
text=
"空空如也..."
mode=
"list"
></u-empty>
</swiper-item>
</swiper>
</view>
</view>
</
template
>
...
...
@@ -30,58 +92,211 @@
export
default
{
data
()
{
return
{
list
:
[{
image
:
'http://wx.pangdly.com/static/img/test7.6d14c2d.jpg'
,
title
:
'昨夜星辰昨夜风,画楼西畔桂堂东'
},
{
image
:
'http://wx.pangdly.com/static/img/test8.1cf812b.jpg'
,
title
:
'身无彩凤双飞翼,心有灵犀一点通'
},
{
image
:
'http://wx.pangdly.com/static/img/test9.b3dd44c.jpg'
,
title
:
'谁念西风独自凉,萧萧黄叶闭疏窗,沉思往事立残阳'
}
],
scenicList
:[],
//景区数据
list
:
[
{
image
:
'http://wx.pangdly.com/static/img/test7.6d14c2d.jpg'
,
title
:
'昨夜星辰昨夜风,画楼西畔桂堂东'
},
{
image
:
'http://wx.pangdly.com/static/img/test8.1cf812b.jpg'
,
title
:
'身无彩凤双飞翼,心有灵犀一点通'
},
{
image
:
'http://wx.pangdly.com/static/img/test9.b3dd44c.jpg'
,
title
:
'谁念西风独自凉,萧萧黄叶闭疏窗,沉思往事立残阳'
}
],
tabList
:
[{
name
:
'热门景点'
},
{
name
:
'本地必吃'
},
{
name
:
'特价酒店'
}],
// 因为内部的滑动机制限制,请将tabs组件和swiper组件的current用不同变量赋值
current
:
0
,
// tabs组件的current值,表示当前活动的tab选项
swiperCurrent
:
0
,
// swiper组件的current值,表示当前那个swiper-item是活动的
searchData
:
''
,
//搜索框的值
}
},
onLoad
(
option
)
{
this
.
initList
()
},
methods
:
{
//---tabs通知swiper切换
tabsChange
(
index
)
{
this
.
swiperCurrent
=
index
},
//---swiper-item左右移动,通知tabs的滑块跟随移动
transition
(
e
)
{
let
dx
=
e
.
detail
.
dx
this
.
$refs
.
uTabs
.
setDx
(
dx
)
},
//---由于swiper的内部机制问题,快速切换swiper不会触发dx的连续变化,需要在结束时重置状态
// swiper滑动结束,分别设置tabs和swiper的状态
animationfinish
(
e
)
{
let
current
=
e
.
detail
.
current
this
.
$refs
.
uTabs
.
setFinishCurrent
(
current
)
this
.
swiperCurrent
=
current
this
.
current
=
current
},
//---加载数据
initList
(
click
){
let
data
=
{
type
:
1
,
//类型:1景区、2酒店、餐饮
pageIndex
:
1
,
//第几页
pageSize
:
20
,
//每页有多少条
}
if
(
click
){
//如果是点击进行搜索
data
.
search
=
this
.
searchData
}
this
.
$request
(
'scenic/user/merchant/findMerchantList'
,
data
).
then
(
res
=>
{
if
(
res
.
code
==
'00'
)
{
this
.
scenicList
=
res
.
data
.
list
||
[]
this
.
scenicList
.
forEach
((
item
,
index
)
=>
{
item
.
tag
=
item
.
tag
.
split
(
','
)
})
}
else
{
uni
.
showToast
({
title
:
res
.
message
,
icon
:
'none'
})
}
})
}
}
}
</
script
>
<
style
scoped
lang=
"scss"
>
.search
{
.wrap
{
height
:
100%
;
display
:
flex
;
flex-direction
:
column
;
background
:
#fff
;
}
.search
{
padding
:
0
24rpx
;
position
:
relative
;
top
:
-40rpx
;
}
.search-wrap
{
.search-wrap
{
background
:
#fff
;
border-radius
:
44rpx
;
box-shadow
:
0px
0px
8px
2px
rgba
(
0
,
0
,
0
,
0
.08
);
box-shadow
:
0px
0px
8px
2px
rgba
(
0
,
0
,
0
,
0
.08
);
display
:
flex
;
align-items
:
center
;
height
:
80rpx
;
padding
:
0
20rpx
;
}
.search-left
{
.search-left
{
display
:
flex
;
}
.line
{
.line
{
width
:
2rpx
;
background
:
#ccc
;
margin
:
0
20rpx
;
}
.search-right
{
.search-right
{
display
:
flex
;
flex
:
1
;
align-items
:
center
;
}
.search-input
{
flex
:
1
;
padding-right
:
40rpx
;
}
.search-btn
{
background
:
$blue
;
color
:
#fff
;
border-radius
:
32rpx
;
padding
:
12rpx
24rpx
;
}
.merchant-wrap
{
display
:
flex
;
flex
:
1
;
flex-direction
:
column
;
}
.s
earch-input
{
.s
wiper-box
{
flex
:
1
;
}
.search-btn
{
background
:
$blue
;
.merchant-list
{
padding
:
0
24rpx
;
margin-top
:
32rpx
;
display
:
flex
;
font-size
:
24rpx
;
}
.list-left
image
{
width
:
200rpx
;
height
:
200rpx
;
border-radius
:
16rpx
;
margin-right
:
20rpx
;
}
.list-right
{
flex
:
1
;
width
:
0
;
}
.right1
{
width
:
100%
;
color
:
#191919
;
font-weight
:
bold
;
font-size
:
32rpx
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
}
.right2
{
margin-top
:
20rpx
;
display
:
flex
;
justify-content
:
space-between
;
}
.right2-left
text
{
color
:
$blue
;
border
:
1px
solid
$blue
;
font-size
:
20rpx
;
padding
:
2rpx
4rpx
;
border-radius
:
2rpx
;
width
:
110rpx
;
display
:
inline-block
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
}
.right2
text
:not
(
:last-child
)
{
margin-right
:
10rpx
;
}
.right2-right
{
color
:
#999999
;
}
.right3
{
margin-top
:
16rpx
;
}
.
right3-text
:
:
after
{
display
:
inline-block
;
content
:
""
;
height
:
20rpx
;
width
:
2rpx
;
background
:
#ccc
;
margin
:
0
10rpx
;
}
.right4
{
display
:
flex
;
margin-top
:
10rpx
;
justify-content
:
space-between
;
align-items
:
center
;
}
.right4-left
{
color
:
$red
;
}
.right4-price1
{
color
:
#999
;
text-decoration
:line-through
;
font-size
:
28rpx
;
}
.right4-price2
{
color
:
$red
;
margin
:
0
10rpx
;
}
</
style
>
pages/scenic/scenicChooseProduct/scenicChooseProduct.vue
0 → 100644
View file @
6269ea24
<
template
>
<div
class=
"wrap"
>
<div
class=
"top"
>
<van-swipe
class=
"my-swipe"
:autoplay=
"3000"
@
change=
"swiperChange"
>
<van-swipe-item
v-for=
"(item, index) of detailData.imgList"
:key=
"index"
>
<van-image
fit=
"cover"
:src=
"item.url"
></van-image>
</van-swipe-item>
<template
#
indicator
>
<div
class=
"custom-indicator"
v-if=
"detailData.imgList"
>
{{
current
+
1
}}
/
{{
detailData
.
imgList
.
length
}}
</div>
</
template
>
</van-swipe>
</div>
<div
class=
"middle"
>
<div
class=
"middle-top"
>
<div
class=
"middle-top-top"
>
<p>
{{ detailData.name }}
</p>
<div
class=
"middle-top-time"
>
<span>
<i>
{{ openStatus }}
</i>
<i>
{{ detailData.businessStart ? detailData.businessStart.substr(0, 5) : '' }} ~{{ detailData.businessStart ? detailData.businessEnd.substr(0, 5) : '' }}
</i>
</span>
<span
@
click=
"goIntroduce(merchantId)"
>
详情
<van-icon
name=
"arrow"
/>
</span>
</div>
</div>
<div
class=
"middle-top-middle"
>
<span>
{{ detailData.score || 5 }}分
</span>
<span></span>
<span>
{{ detailData.comments ? detailData.comments.length : 0 }}条好评
</span>
</div>
<div
class=
"middle-top-bottom"
>
<div>
<p>
{{ detailData.address }}
</p>
<!-- <p>
距您{{$commonjs.computeDistance(detailData.longitude,detailData.latitude)||1}}km
</p> -->
</div>
<div
style=
"flex-shrink: 0;padding-left: 0.1rem;"
>
<a
@
click=
"openLocation(detailData)"
>
<van-icon
name=
"location"
/>
</a>
<a>
</a>
<a
:href=
"'tel:' + detailData.phone"
>
<van-icon
name=
"phone"
/>
</a>
</div>
</div>
</div>
<!--单票部分-->
<div
class=
"middle-single"
>
<p
class=
"middle-single-title"
>
预订门票
</p>
<div
class=
"middle-sinle-know"
>
<span>
<!-- <i>无需换票</i>
<i>无需取号</i>
<i>不可退</i> -->
</span>
<span>
<!-- 购票须知
<van-icon name="arrow" /> -->
</span>
</div>
<div
class=
"middle-single-list"
>
<div
v-for=
"(item, index) of singleProduct"
:key=
"index"
>
<label
class=
"single-ticket"
>
<div>
<input
type=
"checkbox"
v-model=
"chooseProducts[combiProduct.length]"
:true-value=
"item"
@
change=
"inputChange(combiProduct.length, item, index, $event)"
/>
<i
:class=
"{ on: chooseProducts.indexOf(item) != -1 }"
>
{{ item.name }}
</i>
</div>
<div
class=
"single-ticket-price"
>
<span>
¥{{ item.originalPrice | parseMoney }}
</span>
<span>
<i>
¥
</i>
{{ item.sellingPrice | parseMoney }}
</span>
</div>
</label>
</div>
</div>
<van-empty
description=
"空空如也..."
v-if=
"singleProduct.length == 0"
/>
</div>
<!--组合票部分-->
<div
class=
"middle-double"
v-if=
"combiProduct.length > 0"
>
<p
class=
"middle-double-title"
>
组合票(周边)
</p>
<div
class=
"double-list"
v-for=
"(item, index) of combiProduct"
:key=
"index"
>
<div
class=
"double-list-ticket"
>
<p
class=
"list-titcket-title"
>
{{ item.name }}
</p>
<div
class=
"middle-sinle-know"
@
click=
"goIntroduce(item.id)"
>
<span>
<i
v-for=
"(item2, index) of item.tag.slice(0, 3)"
:key=
"index"
>
{{ item2 }}
</i>
</span>
<span>
详情
<van-icon
name=
"arrow"
/>
</span>
</div>
<div
class=
"middle-single-list"
style=
"padding: 0"
>
<div
v-for=
"(item2, a) of item.productList"
:key=
"a"
>
<label
class=
"single-ticket"
>
<div>
<input
type=
"checkbox"
v-model=
"chooseProducts[index]"
:true-value=
"item2"
@
change=
"inputChange(index, item2, a, $event)"
/>
<i
:class=
"{ on: chooseProducts.indexOf(item2) != -1 }"
>
{{ item2.name }}
</i>
</div>
<div
class=
"single-ticket-price"
>
<span>
{{ item2.originalPrice | parseMoney }}
</span>
<span>
<i>
¥
</i>
{{ item2.sellingPrice | parseMoney }}
</span>
</div>
</label>
</div>
</div>
</div>
</div>
</div>
<div
class=
"middle-nearby"
></div>
</div>
<div
class=
"bottom"
>
<div
class=
"bottom-left"
>
<span>
¥{{ originalTotal }}
</span>
<span>
<i>
¥
</i>
{{ sellTotal }}
</span>
</div>
<div
class=
"bottom-right"
>
<!-- <van-icon name="chat-o" size="18" style="margin-right: 0.3rem;" /> -->
<a
class=
"btn225"
@
click=
"next()"
>
去预定
</a>
</div>
</div>
</div>
</template>
<
script
>
export
default
{
data
()
{
return
{
current
:
0
,
//轮播图下标
merchantId
:
''
,
//商户Id
companyId
:
''
,
//公司Id
detailData
:
''
,
//详情数据
openStatus
:
''
,
//开园状态
singleProduct
:
[],
//单产品列表
combiProduct
:
[],
//组合产品列表
chooseProducts
:
[],
//选择过的产品
chooseProduct
:
[],
//选中的产品
originalTotal
:
0
,
//原价总价
sellTotal
:
0
,
//卖价总价
groupId
:
''
,
//组合Id
groupChannelId
:
''
,
//组合渠道Id
appId
:
'wxe678d5240e98a7b8'
,
//小程序Id
originalId
:
'gh_c206efc7dc24'
,
//微信小程序原始Id
environment
:
1
,
//环境,1微信和渝快办,2支付宝,默认为微信
yukuai
:
false
,
//渝快办环境
cqQRCode
:
''
//是否是从胖丁小程序返回到渝快码小程序
}
},
created
()
{
let
returnObj
=
this
.
$cqQRCode
.
getReferrerInfo
()
if
(
returnObj
.
extraData
)
{
this
.
cqQRCode
=
returnObj
.
extraData
.
cqQRCode
||
''
}
if
(
this
.
cqQRCode
)
{
//如果是从胖丁小程序返回,直接返回首页
this
.
$cqQRCode
.
toHome
()
}
let
env
=
this
.
$cqQRCode
.
getEnv
()
if
(
env
.
isAlipayWebView
)
{
//支付宝
this
.
environment
=
2
this
.
appId
=
'2021001194629244'
}
else
if
(
env
.
isWechatWebView
)
{
//微信
this
.
environment
=
1
}
else
if
(
env
.
isYKBWebView
)
{
//渝快办app
this
.
environment
=
1
this
.
yukuai
=
true
}
},
mounted
()
{
this
.
merchantId
=
this
.
$route
.
query
.
merchantId
this
.
companyId
=
this
.
$route
.
query
.
companyId
this
.
initDetails
()
this
.
loadSingleProduct
()
this
.
loadCombiProduct
()
},
methods
:
{
//---轮播图变化
swiperChange
(
index
)
{
this
.
current
=
index
},
//---跳转景区介绍页面
goIntroduce
(
merchantId
)
{
this
.
$router
.
push
({
path
:
'/scenicIntroduce'
,
query
:
{
merchantId
}
})
},
//---打开微信内置地图
openLocation
(
item
)
{
let
longitude
=
String
(
item
.
longitude
)
let
latitude
=
String
(
item
.
latitude
)
this
.
$cqQRCode
.
openLocation
({
lon
:
longitude
,
lat
:
latitude
,
name
:
item
.
areaName
,
address
:
item
.
address
})
},
//---多选框变化时的事件
inputChange
(
index
,
items
,
a
,
event
)
{
let
el
=
event
.
currentTarget
this
.
chooseProduct
=
[]
this
.
originalTotal
=
0
this
.
sellTotal
=
0
if
(
this
.
chooseProducts
[
index
])
{
//选中产品时
if
(
items
.
productIds
)
{
//联票有重复产品时不能再选择
for
(
let
b
=
0
;
b
<
this
.
chooseProducts
.
length
;
b
++
)
{
if
(
this
.
chooseProducts
[
b
]
&&
items
.
productIds
==
this
.
chooseProducts
[
b
].
productIds
&&
items
.
id
!=
this
.
chooseProducts
[
b
].
id
)
{
//当前productIds与之前选中的有重复时,清空当前产品,productIds相同,并且id不同,除去当前产品
if
(
this
.
chooseProducts
[
b
].
ticketType
==
2
||
items
.
ticketType
==
2
)
{
//产品productIds相同时,并且里面有联票时,无法选中
this
.
chooseProducts
[
index
]
=
''
el
.
checked
=
false
this
.
$toast
.
fail
(
'有重复产品'
)
}
}
}
}
}
this
.
chooseProducts
.
forEach
(
item
=>
{
//获取选中的产品
if
(
item
)
{
this
.
chooseProduct
.
push
(
item
)
}
})
this
.
chooseProduct
.
forEach
(
item
=>
{
//通过选中的产品计算价格
this
.
originalTotal
+=
item
.
originalPrice
this
.
sellTotal
+=
item
.
sellingPrice
})
},
//---初始化详情
initDetails
()
{
let
data
=
{
id
:
this
.
merchantId
,
//商户id
isDetail
:
1
//商户详情
}
this
.
$request
(
'scenic/user/merchant/findDetailInfo'
,
data
).
then
(
res
=>
{
if
(
res
.
code
==
'00'
)
{
this
.
detailData
=
res
.
data
document
.
querySelector
(
'.detailBottomRight div:first-child a'
)
.
setAttribute
(
'href'
,
'http://api.map.baidu.com/marker?location='
+
this
.
detailData
.
latitude
+
','
+
this
.
detailData
.
longitude
+
'&title='
+
this
.
detailData
.
address
+
'&content=所在位置的简介(可选)&output=html'
)
if
(
this
.
detailData
.
imgList
.
length
>
5
)
{
this
.
detailData
.
imgList
=
this
.
detailData
.
imgList
.
slice
(
0
,
5
)
}
let
start
=
''
let
end
=
''
if
(
this
.
detailData
.
businessStart
)
{
start
=
parseInt
(
this
.
$commonjs
.
changeTime
(
this
.
detailData
.
businessStart
.
substr
(
0
,
5
)))
}
if
(
this
.
detailData
.
businessEnd
)
{
end
=
parseInt
(
this
.
$commonjs
.
changeTime
(
this
.
detailData
.
businessEnd
.
substr
(
0
,
5
)))
}
if
(
start
<
this
.
nowTime
<
end
)
{
this
.
openStatus
=
'开园中'
}
else
{
this
.
openStatus
=
'闭园中'
}
}
else
{
this
.
$toast
.
fail
(
res
.
message
)
}
})
},
//---单产品加载
loadSingleProduct
()
{
this
.
singleProduct
=
[]
let
data
=
{
merchantId
:
this
.
merchantId
,
//商户id
type
:
1
//类型:1景区、2酒店、3餐饮
}
this
.
$store
.
commit
(
'showLoading'
)
this
.
$request
(
'scenic/user/product/findProductList'
,
data
).
then
(
res
=>
{
this
.
$store
.
commit
(
'hideLoading'
)
if
(
res
.
code
==
'00'
)
{
let
list
=
res
.
data
.
list
if
(
list
.
length
>
0
)
{
list
.
forEach
(
item
=>
{
if
(
item
.
channelType
==
0
)
{
this
.
singleProduct
.
push
(
item
)
}
})
}
else
{
// this.showProductList = true;
}
}
else
{
this
.
$toast
.
fail
(
res
.
message
)
}
})
},
//---加载组合产品
loadCombiProduct
()
{
let
data
=
{
merchantId
:
this
.
merchantId
//商户id
}
this
.
$request
(
'scenic/groupGood/getGroupProducts'
,
data
).
then
(
res
=>
{
if
(
res
.
code
==
'00'
)
{
this
.
combiProduct
=
res
.
data
.
merchantList
||
[]
this
.
groupId
=
res
.
data
.
groupId
this
.
groupChannelId
=
res
.
data
.
groupChannelId
if
(
this
.
combiProduct
.
length
>
0
)
{
this
.
combiProduct
.
forEach
(
item
=>
{
item
.
tag
=
item
.
tag
.
split
(
','
)
})
}
}
else
{
this
.
$toast
.
fail
(
res
.
message
)
}
})
},
//---跳转app
goApp
(
path
,
params
)
{
let
data
=
{}
if
(
this
.
yukuai
)
{
//渝快办环境
data
=
{
originalId
:
this
.
originalId
,
path
,
env
:
this
.
environment
,
//1-微信,2-支付宝
params
}
}
else
{
data
=
{
appId
:
this
.
appId
,
path
,
env
:
this
.
environment
,
//1-微信,2-支付宝
params
}
}
this
.
$cqQRCode
.
toMiniProgram
(
data
)
.
then
(
res
=>
{})
.
catch
(
err
=>
{
this
.
$toast
.
fail
(
err
.
msg
)
})
},
goSingleOrder
()
{
//选择的是一个产品时
let
chooseGroupGoodList
=
this
.
chooseProduct
.
map
(
item
=>
{
return
{
productId
:
item
.
id
,
merchantCode
:
item
.
merchantCode
,
extendContent
:
'{"openid":'
+
'"'
+
this
.
$store
.
state
.
openId
+
'"'
+
'}'
}
})
let
data
=
{
chooseGroupGoodList
,
companyId
:
this
.
companyId
}
this
.
$request
(
'scenic/groupGood/checkProductChangeList'
,
data
).
then
(
res
=>
{
if
(
res
.
code
==
'00'
)
{
let
jumpType
=
999
if
(
res
.
data
.
length
>
0
)
{
jumpType
=
res
.
data
[
0
].
jumpType
}
if
(
this
.
chooseProduct
[
0
].
ticketType
==
2
)
{
//景区联票
if
(
jumpType
==
0
)
{
var
afterProductId
=
res
.
data
[
0
].
afterProductId
}
let
params
=
{
ifyukuaiCode
:
1
,
//是否是渝快码
orderSource
:
0
,
merchantId
:
this
.
chooseProduct
[
0
].
merchantId
,
productId
:
afterProductId
||
this
.
chooseProduct
[
0
].
id
,
companyId
:
this
.
companyId
||
''
}
this
.
goApp
(
'pages/scenic/scenicJointOrder/scenicJointOrder'
,
params
)
}
if
(
this
.
chooseProduct
[
0
].
ticketType
!=
2
)
{
//景区单票
if
(
jumpType
==
0
)
{
//变产品id
var
afterProductId
=
res
.
data
[
0
].
afterProductId
let
params
=
{
ifyukuaiCode
:
1
,
//是否是渝快码
orderSource
:
0
,
merchantId
:
this
.
chooseProduct
[
0
].
merchantId
,
productId
:
afterProductId
||
this
.
chooseProduct
[
0
].
id
,
companyId
:
this
.
companyId
||
''
}
this
.
goApp
(
'pages/scenic/scenicSingleOrder/scenicSingleOrder'
,
params
)
}
else
if
(
jumpType
==
1
)
{
//跳H5
// window.location.href=res.data[0].jumpUrl
}
else
{
//不变
let
params
=
{
ifyukuaiCode
:
1
,
//是否是渝快码
orderSource
:
0
,
merchantId
:
this
.
chooseProduct
[
0
].
merchantId
,
productId
:
this
.
chooseProduct
[
0
].
id
,
companyId
:
this
.
companyId
||
''
}
this
.
goApp
(
'pages/scenic/scenicSingleOrder/scenicSingleOrder'
,
params
)
}
}
}
else
{
return
this
.
$toast
.
fail
(
res
.
message
)
}
})
},
//---下一步
next
()
{
if
(
this
.
chooseProduct
.
length
==
0
)
{
this
.
$toast
.
fail
(
'请选择至少一个产品'
)
return
}
else
if
(
this
.
chooseProduct
.
length
==
1
)
{
this
.
goSingleOrder
()
}
else
{
let
chooseGroupGoodList
=
this
.
chooseProduct
.
map
(
item
=>
{
return
{
ifyukuaiCode
:
1
,
//是否是渝快码
productId
:
item
.
id
,
merchantCode
:
item
.
merchantCode
,
extendContent
:
'{"openid":'
+
'"'
+
this
.
$store
.
state
.
openId
+
'"'
+
'}'
}
})
let
data
=
{
chooseGroupGoodList
,
companyId
:
this
.
companyId
}
this
.
$request
(
'scenic/groupGood/checkProductChangeList'
,
data
).
then
(
res
=>
{
if
(
res
.
code
==
'00'
)
{
var
productIdList
=
[]
if
(
res
.
data
.
length
>
0
)
{
res
.
data
.
forEach
(
item
=>
{
if
(
item
.
buyProductType
==
1
)
{
//buyProductType==1是产品id变
productIdList
.
push
(
item
.
afterProductId
)
}
else
{
productIdList
.
push
(
item
.
beforeProductId
)
}
})
}
else
{
productIdList
=
this
.
chooseProduct
.
map
(
item
=>
{
return
item
.
id
})
}
let
params
=
{
orderSource
:
0
,
productIdList
:
JSON
.
stringify
(
productIdList
),
groupId
:
this
.
groupId
,
groupChannelId
:
this
.
groupChannelId
,
companyId
:
this
.
companyId
||
''
}
this
.
goApp
(
'pages/combination/combiOrder/combiOrder'
,
params
)
}
else
{
return
this
.
$toast
.
fail
(
res
.
message
)
}
})
}
}
}
}
</
script
>
<
style
scoped=
"scoped"
>
.top
>>>
.van-nav-bar
{
background
:
none
;
position
:
fixed
;
top
:
0
;
z-index
:
10
;
width
:
100%
;
}
.top
>>>
.van-nav-bar
.van-icon
{
color
:
#ffffff
;
font-size
:
0.4rem
;
}
.top
>>>
.van-hairline--bottom
::after
{
border-bottom
:
none
;
}
.middle
{
position
:
relative
;
padding-bottom
:
0.8rem
;
top
:
-0.6rem
;
}
/*中间上部分*/
.middle-top
{
border-radius
:
0.24rem
0.24rem
0
0
;
background
:
#ffffff
;
padding
:
0.16rem
0.32rem
;
}
.middle-top-top
p
:first-child
{
font-size
:
0.32rem
;
font-weight
:
bold
;
color
:
#191919
;
}
.middle-top-time
{
padding
:
0.16rem
0
;
border-bottom
:
1px
solid
#e6e6e6
;
display
:
flex
;
justify-content
:
space-between
;
}
.middle-top-time
span
:first-child
i
:first-child
{
color
:
#3688ff
;
margin-right
:
0.2rem
;
}
.middle-top-time
span
:last-child
{
color
:
#999999
;
}
.middle-top-middle
{
padding
:
0.16rem
0
;
border-bottom
:
1px
solid
#e6e6e6
;
color
:
#999999
;
}
.middle-top-middle
span
:first-child
{
color
:
#fc6703
;
font-weight
:
bold
;
}
.middle-top-middle
span
:nth-child
(
2
)
{
width
:
1px
;
background
:
#999999
;
display
:
inline-block
;
margin
:
0
0.1rem
0
0.14rem
;
height
:
0.24rem
;
position
:
relative
;
top
:
0.02rem
;
}
.middle-top-bottom
{
display
:
flex
;
justify-content
:
space-between
;
padding
:
0.18rem
0
;
align-items
:
center
;
}
.middle-top-bottom
div
:first-child
p
:first-child
{
color
:
#666666
;
}
.middle-top-bottom
div
:first-child
p
:nth-child
(
2
)
{
color
:
#999999
;
font-size
:
0.2rem
;
margin-top
:
0.1rem
;
}
.middle-top-bottom
a
:first-child
,
.middle-top-bottom
a
:last-child
{
width
:
0.4rem
;
height
:
0.4rem
;
border-radius
:
50%
;
background
:
#3688ff
;
display
:
inline-block
;
text-align
:
center
;
line-height
:
0.4rem
;
color
:
#ffffff
;
}
.middle-top-bottom
a
:nth-child
(
2
)
{
display
:
inline-block
;
height
:
0.32rem
;
width
:
1px
;
background
:
#cccccc
;
margin
:
0
0.14rem
;
position
:
relative
;
top
:
0.06rem
;
}
/*中间单票部分*/
.middle-single
{
padding
:
0.24rem
0.32rem
;
background
:
#ffffff
;
margin-top
:
0.16rem
;
}
.middle-single-title
{
font-size
:
0.32rem
;
color
:
#191919
;
font-weight
:
bold
;
}
.middle-sinle-know
{
display
:
flex
;
justify-content
:
space-between
;
margin-top
:
0.1rem
;
}
.middle-sinle-know
span
:first-child
{
font-size
:
0.2rem
;
color
:
#fc6703
;
}
.middle-sinle-know
span
:first-child
i
:not
(
:last-child
)
{
padding-right
:
0.1rem
;
border-right
:
1px
solid
#cccccc
;
height
:
0.28rem
;
display
:
inline-block
;
line-height
:
0.28rem
;
}
.middle-sinle-know
span
:first-child
i
:not
(
:first-child
)
{
padding-left
:
0.1rem
;
}
.middle-sinle-know
span
:last-child
{
color
:
#999999
;
}
.middle-single-list
{
background
:
rgba
(
245
,
247
,
249
,
0.39
);
border-radius
:
0.08rem
;
padding
:
0.32rem
0.24rem
;
margin-top
:
0.16rem
;
}
.middle-single-list
>
div
:not
(
:first-child
)
{
margin-top
:
0.25rem
;
}
.single-ticket
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
}
.single-ticket
div
:first-child
{
font-size
:
0.28rem
;
color
:
#666666
;
}
.single-ticket
div
:first-child
input
{
margin-right
:
0.1rem
;
width
:
14px
;
height
:
14px
;
position
:
relative
;
top
:
-1px
;
}
.single-ticket
div
:first-child
i
.on
{
color
:
#3688ff
;
font-weight
:
bold
;
}
.single-ticket-price
{
flex-shrink
:
0
;
padding-left
:
0.2rem
;
}
.single-ticket-price
span
:first-child
{
color
:
#cccccc
;
font-size
:
0.2rem
;
text-decoration
:
line-through
;
margin-right
:
0.1rem
;
}
.single-ticket-price
span
:last-child
{
font-weight
:
bold
;
color
:
#fc6703
;
font-size
:
0.28rem
;
}
.single-ticket-price
span
:last-child
i
{
font-size
:
0.2rem
;
}
/*中间组合票部分*/
.middle-double
{
padding
:
0.24rem
0.32rem
;
background
:
#ffffff
;
margin-top
:
0.16rem
;
}
.middle-double-title
{
font-size
:
0.32rem
;
color
:
#191919
;
font-weight
:
bold
;
margin-bottom
:
0.16rem
;
}
.double-list
{
background
:
rgba
(
245
,
247
,
249
,
0.39
);
padding
:
0
0.32rem
;
}
.double-list-ticket
{
padding
:
0.24rem
0
;
}
.list-titcket-title
{
font-size
:
0.32rem
;
color
:
#191919
;
}
.bottom
{
position
:
fixed
;
bottom
:
0
;
width
:
100%
;
height
:
0.98rem
;
background
:
#e6e6e6
;
box-shadow
:
0px
4px
12px
rgba
(
0
,
0
,
0
,
0.16
);
z-index
:
10
;
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
padding
:
0
0.32rem
;
}
.bottom-left
span
:first-child
{
font-size
:
0.2rem
;
color
:
#999999
;
text-decoration
:
line-through
;
margin-right
:
0.3rem
;
}
.bottom-left
span
:nth-child
(
2
)
{
color
:
#fc6703
;
font-weight
:
bold
;
font-size
:
0.36rem
;
}
.bottom-left
span
:nth-child
(
2
)
i
{
font-size
:
0.24rem
;
}
@media
only
screen
and
(
max-width
:
380px
)
{
.middle
{
top
:
-1rem
;
}
}
</
style
>
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