Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
mallapp
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
viitto
mallapp
Commits
37edee7d
Commit
37edee7d
authored
Nov 03, 2020
by
Mac
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
b2887f7f
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
513 additions
and
26 deletions
+513
-26
pages.json
pages.json
+4
-0
index.vue
pages/index/index.vue
+1
-1
designerDetail.vue
pages/reserve/designerDetail.vue
+121
-0
couponDetail.vue
pages/reserve/personal/couponDetail.vue
+313
-0
storeDetails.vue
pages/reserve/storeDetails.vue
+33
-10
subscribe.vue
pages/reserve/subscribe.vue
+41
-15
Icon.png
static/images/Icon.png
+0
-0
No files found.
pages.json
View file @
37edee7d
...
...
@@ -424,6 +424,10 @@
"path"
:
"personalList"
},{
"path"
:
"subscribe"
},{
"path"
:
"personal/couponDetail"
},{
"path"
:
"designerDetail"
}
]
},
...
...
pages/index/index.vue
View file @
37edee7d
...
...
@@ -75,7 +75,7 @@
<view
class=
"tips_t"
v-if=
"add_show==1&& JSON.stringify(setting) != '{}' "
v-if=
"add_show==1&& JSON.stringify(setting) != '{}'
&& setting.add_app_text!=null
"
:style=
"{
'border-radius':setting.add_app_bg_radius+'rpx',
'opacity':setting.add_app_bg_transparency/100,
...
...
pages/reserve/designerDetail.vue
0 → 100644
View file @
37edee7d
<
style
scoped
>
.designerDetail
{
width
:
100%
;
height
:
100vh
;
background
:
#FFFFFF
;
font-family
:
aa
;
}
.designerDetail
.d-t-box
{
width
:
100%
;
display
:
flex
;
flex-direction
:
row
;
align-items
:
flex-start
;
border-top-left-radius
:
15px
;
border-top-right-radius
:
15px
;
background-repeat
:
no-repeat
;
background-size
:
cover
;
padding
:
15px
;
position
:
relative
;
}
.designerDetail
.tx
{
position
:
relative
;
}
</
style
>
<
template
>
<view
class=
"designerDetail"
v-if=
"loading"
>
<view
class=
"d-t-box"
:style=
"
{'background-image': 'url(' + (personal.ServiceLogo ? personal.ServiceLogo : '') + ')',}">
<view
style=
"width: 100%;height: 100%;position: absolute;left: 0;top: 0;background: RGBA(114, 113, 120, 0.4);"
></view>
<view
class=
"tx"
>
<u-avatar
:src=
"personal.ServiceLogo"
size=
"150"
></u-avatar>
<view>
</view>
</view>
</view>
</view>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
pageTitle
:
"服务人员详情"
,
mc
:
""
,
loading
:
false
,
ID
:
0
,
personal
:{},
current
:
0
,
submitOrder
:
false
,
list
:[
{
name
:
'服务项目'
},
{
name
:
'评价'
},
],
};
},
onLoad
(
option
)
{
this
.
mc
=
this
.
$uiConfig
.
mainColor
;
if
(
option
&&
option
.
ID
){
this
.
ID
=
option
.
ID
}
this
.
getDetail
()
//服务人员详情
},
mounted
()
{
uni
.
setNavigationBarTitle
({
title
:
this
.
pageTitle
,
});
},
methods
:
{
getDetail
(){
uni
.
showLoading
({
title
:
'加载中'
});
this
.
request2
({
url
:
'/api/AppletStores/GetServicePersonalModel'
,
data
:
{
ID
:
this
.
ID
}
},
res
=>
{
if
(
res
.
resultCode
==
1
)
{
this
.
loading
=
true
this
.
personal
=
res
.
data
}
uni
.
hideLoading
();
}
);
},
change
(
e
){
this
.
current
=
e
;
switch
(
e
)
{
case
0
:
uni
.
createSelectorQuery
().
in
(
this
).
select
(
".c-d-box"
).
boundingClientRect
(
data
=>
{
//目标节点
uni
.
pageScrollTo
({
scrollTop
:
data
.
top
-
40
})
}).
exec
();
break
;
case
1
:
uni
.
createSelectorQuery
().
in
(
this
).
select
(
".c-d-store"
).
boundingClientRect
(
data
=>
{
//目标节点
uni
.
pageScrollTo
({
scrollTop
:
data
.
top
-
40
})
}).
exec
();
break
;
}
},
},
};
</
script
>
pages/reserve/personal/couponDetail.vue
0 → 100644
View file @
37edee7d
<
style
scoped
>
.couponDetail
{
width
:
100%
;
height
:
100vh
;
background
:
#FFFFFF
;
font-family
:
aa
;
}
.couponDetail
.cd-t
{
width
:
100%
;
padding
:
15px
;
}
.couponDetail
.cd-t-box
{
width
:
100%
;
height
:
115px
;
background-image
:
url('https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Static/cpoun.png')
;
background-repeat
:
no-repeat
;
background-size
:
cover
;
padding
:
15px
20px
;
color
:
#EFDCCB
;
display
:
flex
;
flex-direction
:
column
;
justify-content
:
space-between
;
border-radius
:
6px
;
position
:
relative
;
}
.couponDetail
.cd-tt
{
width
:
100%
;
display
:
inline-block
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
display
:
-webkit-box
;
-webkit-line-clamp
:
2
;
line-clamp
:
2
;
-webkit-box-orient
:
vertical
;
font-size
:
15px
;
}
.couponDetail
.setmeal-pl
{
position
:
absolute
;
top
:
45.5px
;
width
:
24px
;
height
:
24px
;
border-radius
:
12px
;
background
:
#FFF
;
}
.couponDetail
.c-d-box
{
width
:
100%
;
padding
:
15px
;
}
.couponDetail
.c-d-store
{
width
:
100%
;
padding
:
0
15px
80px
;
}
.couponDetail
.title
{
width
:
100%
;
height
:
45px
;
font-size
:
16px
;
color
:
#1B1D1E
;
font-weight
:
bold
;
line-height
:
45px
;
}
.couponDetail
.min-title
{
width
:
100%
;
height
:
30px
;
font-size
:
13px
;
color
:
#1B1D1E
;
font-weight
:
bold
;
line-height
:
30px
;
}
.couponDetail
.useRange
{
padding
:
10px
0
;
font-size
:
12px
;
color
:
#999999
;
}
.couponDetail
.storebox
{
width
:
100%
;
}
.couponDetail
.storeitem
{
display
:
flex
;
flex-direction
:
row
;
align-items
:
center
;
margin-top
:
15px
;
}
.couponDetail
.storeitem-r
{
width
:
1
;
flex
:
1
;
height
:
72px
;
margin-left
:
10px
;
display
:
flex
;
flex-direction
:
column
;
justify-content
:
space-between
;
}
.couponDetail
.s-r-l
{
width
:
1
;
flex
:
1
;
overflow
:
hidden
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
}
.couponDetail
.storeitem-f
{
display
:
flex
;
flex-direction
:
row
;
align-items
:
center
;
}
.couponDetail
.good-rb-text
{
font-size
:
13px
;
color
:
#FEC471
;
margin-left
:
2px
;
}
.couponDetail
.submit
{
width
:
100%
;
height
:
60px
;
background
:
#FFF
;
position
:
fixed
;
left
:
0
;
bottom
:
0
;
padding
:
0
15px
;
display
:
flex
;
flex-direction
:
row
;
align-items
:
center
;
justify-content
:
space-between
;
z-index
:
99
;
}
</
style
>
<
template
>
<view
class=
"couponDetail"
v-if=
"loading"
>
<view
class=
"cd-t"
>
<view
class=
"cd-t-box"
>
<text
style=
"font-size: 12px;color: rgba(239, 220, 203, 0.6);"
>
{{
cdetail
.
Name
}}
</text>
<text
class=
"cd-tt"
>
{{
cdetail
.
Describe
}}
</text>
<text
style=
"font-size: 13px;"
>
核销次数:
{{
cdetail
.
TotalNum
}}
次
</text>
<view
class=
"setmeal-pl"
style=
"left: -12px;"
></view>
<view
class=
"setmeal-pl"
style=
"right: -12px;"
>
</view>
</view>
</view>
<view
style=
"width: 100%;height: 15px;background: #FAF8F9;"
></view>
<view
class=
"sticky"
>
<u-sticky>
<view
class=
"store-tabs"
>
<u-tabs
:list=
"list"
:is-scroll=
"false"
:current=
"current"
@
change=
"change"
:active-color=
"mc"
></u-tabs>
</view>
</u-sticky>
</view>
<view
class=
"c-d-box"
>
<view
class=
"title"
>
套餐详情
</view>
<view
class=
"min-title"
>
使用范围
</view>
<view
class=
"useRange"
>
<text
v-if=
"cdetail.UseType==1"
><text
v-for=
"(x, j) in cdetail.ProductList"
:key=
"x"
>
{{
x
.
Relevance
+
'、'
}}
</text></text>
<text
v-if=
"cdetail.UseType==2"
><text
v-for=
"(x, j) in cdetail.ProductList"
:key=
"x"
>
{{
x
.
Relevance
+
'、'
}}
</text></text>
<text
v-if=
"cdetail.UseType==3"
>
全场通用
</text>
</view>
<view
class=
"min-title"
>
使用时间
</view>
<view
style=
"font-size: 12px;color: #999999;"
>
有效期:
{{
cdetail
.
IndateType
==
1
?
'领取后'
+
cdetail
.
IndateDay
+
'天内有效'
:
cdetail
.
StartDate
+
'-'
+
cdetail
.
EndDate
}}
</view>
</view>
<view
style=
"width: 100%;height: 15px;background: #FAF8F9;"
></view>
<view
class=
"c-d-store"
>
<view
class=
"title"
>
适用门店
</view>
<view
class=
"storebox"
>
<view
class=
"storeitem"
v-for=
"(x, j) in cdetail.StoresList"
:key=
"x"
>
<image
mode=
"aspectFill"
:src=
"x.CoverImg"
style=
"width: 75px;height: 75px;border-radius: 6px;"
></image>
<view
class=
"storeitem-r"
>
<view
class=
"storeitem-f"
>
<view
class=
"s-r-l"
style=
"width:calc(100vw - 165px); 15px;color: #000000;font-weight: bold;"
>
{{
x
.
Name
}}
</view>
<view
style=
"width: 50px;text-align: right;font-size: 12px;color: #111111;"
>
{{
x
.
KM
>=
1000
?(
x
.
KM
/
1000
).
toFixed
(
2
)
+
'km'
:
x
.
KM
+
'm'
}}
</view>
</view>
<view
class=
"storeitem-f"
>
<u-rate
:current=
"x.Score!=null &&x.Score>0?x.Score:'5'"
active-color=
"#FEC471"
inactive-color=
"#DDDDDD"
active-icon=
"star"
inactive-icon=
"star-o"
size=
"26"
:disabled=
"true"
></u-rate>
<text
class=
"good-rb-text"
>
{{
x
.
Score
?
x
.
Score
.
toFixed
(
1
):
'5.0'
}}
分
</text>
</view>
<view
class=
"storeitem-f"
>
<image
mode=
"aspectFill"
src=
"../../../static/images/Icon.png"
style=
"width: 9px;height: 12px;"
></image>
<text
class=
"s-r-l"
style=
"width: calc(100vw - 133px);margin-left: 3px;"
>
{{
x
.
Address
}}
</text>
</view>
</view>
</view>
</view>
</view>
<view
class=
"submit"
>
<text>
{{
cdetail
.
Name
}}
</text>
<u-button
size=
"80"
:ripple=
"true"
shape=
"circle"
@
click=
"cdetail.MemberNum>0?'':submitreceive()"
:custom-style=
"
{
backgroundColor:cdetail.MemberNum>0? '#D4D4D4':mc,
height: '80rpx',
color: '#FFF',
fontSize: '14px',
}"
>
{{
cdetail
.
MemberNum
>
0
?
'已领取'
:
'立即领取'
}}
</u-button>
</view>
</view>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
pageTitle
:
"套餐卡详情"
,
mc
:
""
,
loading
:
false
,
ID
:
0
,
cdetail
:{},
current
:
0
,
submitOrder
:
false
,
list
:[
{
name
:
'套餐详情'
},
{
name
:
'适用门店'
},
],
cstore
:
0
,
};
},
onLoad
(
option
)
{
this
.
mc
=
this
.
$uiConfig
.
mainColor
;
if
(
option
&&
option
.
ID
){
this
.
ID
=
option
.
ID
}
this
.
getDetail
()
//获取套餐卡详情
},
mounted
()
{
uni
.
setNavigationBarTitle
({
title
:
this
.
pageTitle
,
});
},
methods
:
{
getDetail
(){
uni
.
showLoading
({
title
:
'加载中'
});
this
.
request2
({
url
:
'/api/AppletStores/GetReserveCouponDetail'
,
data
:
{
ID
:
this
.
ID
}
},
res
=>
{
if
(
res
.
resultCode
==
1
)
{
this
.
loading
=
true
this
.
cdetail
=
res
.
data
}
uni
.
hideLoading
();
}
);
},
submitreceive
(){
this
.
request2
({
url
:
'/api/AppletStores/GrantCoupon'
,
data
:
{
ID
:
this
.
ID
}
},
res
=>
{
if
(
res
.
resultCode
==
1
)
{
uni
.
showToast
({
title
:
res
.
message
,
icon
:
"none"
,
});
this
.
cdetail
.
MemberNum
=
1
}
}
);
},
change
(
e
){
this
.
current
=
e
;
switch
(
e
)
{
case
0
:
uni
.
createSelectorQuery
().
in
(
this
).
select
(
".c-d-box"
).
boundingClientRect
(
data
=>
{
//目标节点
uni
.
pageScrollTo
({
scrollTop
:
data
.
top
-
40
})
}).
exec
();
break
;
case
1
:
uni
.
createSelectorQuery
().
in
(
this
).
select
(
".c-d-store"
).
boundingClientRect
(
data
=>
{
//目标节点
uni
.
pageScrollTo
({
scrollTop
:
data
.
top
-
40
})
}).
exec
();
break
;
}
},
},
};
</
script
>
pages/reserve/storeDetails.vue
View file @
37edee7d
...
...
@@ -91,6 +91,7 @@
height
:
100%
;
font-size
:
12px
;
color
:
#333
;
position
:
relative
;
}
.storeDetails
.store-news
.right
.share-icon
{
width
:
22px
;
...
...
@@ -246,6 +247,18 @@
</view>
<view
style=
"width: 100%;height: 210px;position: relative;"
class=
"u-skeleton-rect"
>
<image
style=
"width: 100%;height: 210px;position: relative;"
mode=
"aspectFill"
:src=
"g.storeCoverImg?g.storeCoverImg:''"
/>
<!--
<swiper
indicator-dots
:autoplay=
"false"
:interval=
"1000"
style=
"height:210px;"
>
<block
v-for=
"(item, index) in g.storeNavImg"
:key=
"index"
>
<swiper-item>
<image
@
click=
"previewImage(index)"
style=
"width:100%;height:100%;"
:src=
"item.pic_url"
mode=
""
></image>
</swiper-item>
</block>
</swiper>
-->
<view
class=
"headStatus"
:style=
"[
...
...
@@ -326,21 +339,20 @@
商家套餐卡
</view>
<view
class=
"setmeal-box"
>
<view
v-for=
"(cl, ci) in
list"
:key=
"ci
"
>
<view
v-for=
"(cl, ci) in
allCoupon"
:key=
"ci"
@
click=
"gocoupon(cl)
"
>
<view
class=
"setmeal-item u-skeleton-rect"
:style=
"
{'margin-left':ci==0?'15px':'0','margin-right': ci+1==list.length?'15px':'5px'}">
<view
class=
"setmeal-item-top"
>
<view
style=
"font-size: 14px;margin-bottom: 3px;"
class=
"setmeal-name"
>
剪发卡
</view>
<view
style=
"font-size: 11px;color: rgba(239, 220, 203, 0.6);"
class=
"setmeal-name"
>
总监精剪+造型+洗吹
</view>
<view
style=
"font-size: 14px;margin-bottom: 3px;"
class=
"setmeal-name"
>
{{
cl
.
Name
}}
</view>
<view
style=
"font-size: 11px;color: rgba(239, 220, 203, 0.6);"
class=
"setmeal-name"
>
{{
cl
.
Describe
}}
</view>
<view
class=
"setmeal-price"
>
<text
style=
"font-size: 13px;"
>
¥
</text>
<text
style=
"font-size: 20px;font-weight: bold;"
>
78.4
</text>
<text
style=
"font-size: 13px;"
>
/次 3次¥235.2
</text>
<text
style=
"font-size: 13px;"
>
核销次数:
{{
cl
.
TotalNum
}}
次
</text>
</view>
<view
class=
"setmeal-pl"
style=
"left: -9px;"
></view>
<view
class=
"setmeal-pl"
style=
"right: -9px;"
>
</view>
</view>
<view
class=
"setmeal-item-bottom"
>
有效期:
2020.10.05 18:00
有效期:
{{
cl
.
IndateType
==
1
?
'领取后'
+
cl
.
IndateDay
+
'天内有效'
:
cl
.
StartDate
.
split
(
' '
)[
0
]
+
'至'
+
cl
.
EndDate
.
split
(
' '
)[
0
]
}}
</view>
</view>
</view>
...
...
@@ -352,7 +364,7 @@
</view>
<view
class=
"designer u-skeleton-rect"
>
<view
class=
"designer-item"
v-for=
"(x, ci2) in personalList"
:key=
"ci2"
v-if=
"personalList.length>0"
>
<view
class=
"designer-item"
v-for=
"(x, ci2) in personalList"
:key=
"ci2"
v-if=
"personalList.length>0"
@
click=
"godesigner(x)"
>
<view
class=
"designer-flex"
style=
"width: calc(100vw - 100px);"
>
<u-avatar
:src=
"x.ServiceLogo"
size=
"110"
></u-avatar>
<view
class=
"designer-name"
>
...
...
@@ -378,7 +390,7 @@
预约
</view>
</view>
<view
v-if=
"personalList.length==0"
style=
"width: 100%;height: 50px;line-height: 50px;text-align: center;"
>
<view
v-if=
"personalList.length==0"
style=
"width: 100%;height: 50px;line-height: 50px;text-align: center;"
>
暂无设计师数据~
</view>
</view>
...
...
@@ -457,6 +469,7 @@
comments
:[],
detailContent
:
""
,
personalList
:[],
allCoupon
:[],
}
},
onLoad
(
option
){
...
...
@@ -573,7 +586,7 @@
this
.
designerH
=
data
.
top
}
}).
exec
();
uni
.
createSelectorQuery
().
select
(
".
wxParse
"
).
boundingClientRect
(
data
=>
{
uni
.
createSelectorQuery
().
select
(
".
richtext
"
).
boundingClientRect
(
data
=>
{
if
(
data
&&
data
.
top
){
this
.
richtextH
=
data
.
top
}
...
...
@@ -749,6 +762,16 @@
gbAuth
()
{
this
.
showAuth
=
false
;
},
gocoupon
(
item
){
//优惠券详情
uni
.
navigateTo
({
url
:
"/pages/reserve/personal/couponDetail?ID="
+
item
.
CouponId
,
})
},
godesigner
(
item
){
//设计师详情
uni
.
navigateTo
({
url
:
"/pages/reserve/designerDetail?ID="
+
item
.
ID
,
})
}
}
}
</
script
>
...
...
pages/reserve/subscribe.vue
View file @
37edee7d
...
...
@@ -37,17 +37,45 @@
.subscribe
.classify-t
{
width
:
100%
;
background
:
#FFF
;
padding
:
15px
;
}
.subscribe
.c-t-box
{
width
:
100%
;
height
:
1
43
px
;
height
:
1
10
px
;
border-radius
:
6px
;
background
:
#FAF8F9
;
padding
:
15px
0
;
display
:
flex
;
width
:
100%
;
flex-direction
:
row
;
overflow-x
:
auto
;
}
.subscribe
.c-tw-item
{
width
:
80px
;
height
:
90px
;
border-radius
:
6px
;
color
:
#888888
;
margin-right
:
5px
;
display
:
flex
;
flex-direction
:
column
;
align-items
:
center
;
justify-content
:
space-between
;
font-size
:
12px
;
box-shadow
:
0
6px
10px
1px
#F2F2F2
;
}
.goodsimg
{
width
:
100%
;
height
:
60px
;
border-top-left-radius
:
6px
;
border-top-right-radius
:
6px
;
}
.subscribe
.persionName-t
{
width
:
100%
;
height
:
30px
;
line-height
:
30px
;
overflow
:
hidden
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
padding
:
0
4px
;
}
.subscribe
.c-t-item
{
width
:
80px
;
height
:
113px
;
...
...
@@ -123,6 +151,7 @@
flex
:
1
;
padding-left
:
20px
;
text-align
:
right
;
font-size
:
12px
}
.subscribe
.persionName
{
width
:
80px
;
display
:
inline-block
;
...
...
@@ -179,17 +208,14 @@
<view
class=
"classify-t"
v-if=
"OfflineGoods.length>0"
>
<view
class=
"c-t-box"
>
<view
v-for=
"(c, i) in OfflineGoods"
:key=
"i"
>
<view
class=
"c-t-item"
@
click=
"getgoodsList(c)"
<view
class=
"c-t
w
-item"
@
click=
"getgoodsList(c)"
:style=
"
{
'margin-left':i==0?'15px':'0',
'margin-right': i+1==OfflineGoods.length?'15px':'5px',
'border-color':c.id== GoodsId?'#FF4048':'#D8D8D8',
'color':c.id== GoodsId?'#FF4048':'#888888',
'background':c.id== GoodsId?'#FBE5E7':'#FFF',
'font-weight':c.id== GoodsId?'Bold':'100',
'margin-left':'15px',
'margin-right': i+1==OfflineGoods.length?'15px':'0px',
'transform':c.id== GoodsId?'scale(1.12)':'none'
}">
<image
mode=
"aspectFill"
:src=
"c.cover_pic"
style=
"width: 30px;height: 30px;"
></image>
<text
class=
"persionName
"
>
{{
c
.
name
}}
</text>
<image
mode=
"aspectFill"
class=
"goodsimg"
:src=
"c.cover_pic"
></image>
<text
class=
"persionName
-t"
>
{{
c
.
name
}}
</text>
</view>
</view>
...
...
@@ -226,8 +252,8 @@
</view>
<view
style=
"width: 100%;height: 15px;background: #FAF8F9;"
v-if=
"designerList.length>0"
></view>
<view
class=
"title"
v-if=
"designerList.length>0"
>
设计师
</view>
<view
class=
"classify-t"
style=
"padding: 0;"
v-if=
"designerList.length>0"
>
<view
class=
"c-t-box"
style=
"padding: 0 0 15px;background: #FFF;"
>
<view
class=
"classify-t"
v-if=
"designerList.length>0"
>
<view
class=
"c-t-box"
>
<view
v-for=
"(c, i) in designerList"
:key=
"i"
>
<view
class=
"c-t-item"
@
click=
"getdesigner(c)"
:style=
"
{
...
...
static/images/Icon.png
0 → 100644
View file @
37edee7d
758 Bytes
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