Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
U
uniapp_vedio
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
android
uniapp_vedio
Commits
f2913405
Commit
f2913405
authored
May 30, 2024
by
jyx
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
代码优化
parent
8543445a
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
1141 additions
and
1566 deletions
+1141
-1566
follow.vue
vedio/components/home/follow.vue
+59
-32
index.vue
vedio/components/home/index.vue
+34
-1
my.vue
vedio/components/home/my.vue
+2
-1
recommendVideo.vue
vedio/components/home/recommendVideo.vue
+7
-0
pages.json
vedio/pages.json
+15
-45
home.vue
vedio/pages/home.vue
+42
-45
index.vue
vedio/pages/index/index.vue
+0
-388
my.vue
vedio/pages/my/my.vue
+0
-266
follow.vue
vedio/pages/recommend/follow.vue
+0
-173
recommend.vue
vedio/pages/recommend/recommend.vue
+0
-168
recommendVideo.vue
vedio/pages/recommend/recommendVideo.vue
+0
-446
search.vue
vedio/pagesA/search/search.vue
+436
-0
task.vue
vedio/pagesA/task/task.vue
+546
-0
MP_verify_TGYoypuXSpCliIAj.txt
vedio/public/MP_verify_TGYoypuXSpCliIAj.txt
+0
-1
search.png
vedio/static/search.png
+0
-0
ic_delete.png
vedio/static/video/ic_delete.png
+0
-0
No files found.
vedio/components/home/follow.vue
View file @
f2913405
<
template
>
<view
style=
"background: white;"
>
<
scroll-view
scroll-y=
"true"
:style=
"'height: '+(windowHeight -120)+'px;margin-top:'+(titleBarHeight +statusBarHeight
)+'px;'"
>
<view
class=
"flex space"
style=
"display:flex; flex-wrap:wrap;"
>
<block
v-for=
"(value,key) in dataList"
:key=
"key"
>
<view
class=
"mt-10"
style=
"width:31%; position: relative; border-radius:20rpx;margin-bottom: 10rpx;margin-left: 14rpx;"
@
click
.
stop=
"click(value)"
@
longpress
.
stop=
"longClick(key)"
>
<image
class=
"integral-mall-goods"
mode=
"aspectFill"
:src=
"value.coverImage"
></image>
<view
class=
"text"
style=
"font-size: 26rpx;color: black;height: 36rpx;margin-left: 5rpx;"
>
{{
value
.
title
}}
</view>
<view
class=
"text"
style=
"font-size: 22rpx;color: gray;height: 30rpx;margin-left: 5rpx;"
>
{{
value
.
vedioDesc
}}
</view>
<view
v-if=
"isEditStyle"
@
click
.
stop=
"cbClick(key)"
style=
"position: absolute;background: #000000; opacity: 0.6;width: 92%;height: 96%;top: 0;border-radius:20rpx;
<view
style=
"background: white;
height: 100%;
"
>
<
z-paging
class=
"flex-1"
>
<scroll-view
scroll-y=
"true"
v-if=
"dataList.length>0"
:style=
"'height: '+(windowHeight -120
)+'px;'"
>
<view
class=
"flex space"
style=
"display:flex; flex-wrap:wrap;"
>
<block
v-for=
"(value,key) in dataList"
:key=
"key"
>
<view
class=
"mt-10"
style=
"width:31%; position: relative; border-radius:20rpx;margin-bottom: 10rpx;margin-left: 14rpx;"
@
click
.
stop=
"click(value)"
@
longpress
.
stop=
"longClick(key)"
>
<image
class=
"integral-mall-goods"
mode=
"aspectFill"
:src=
"value.coverImage"
></image>
<view
class=
"text"
style=
"font-size: 26rpx;color: black;height: 36rpx;margin-left: 5rpx;"
>
{{
value
.
title
}}
</view>
<view
class=
"text"
style=
"font-size: 22rpx;color: gray;height: 30rpx;margin-left: 5rpx;"
>
{{
value
.
vedioDesc
}}
</view>
<view
v-if=
"isEditStyle"
@
click
.
stop=
"cbClick(key)"
style=
"position: absolute;background: #000000; opacity: 0.6;width: 92%;height: 96%;top: 0;border-radius:20rpx;
padding-left: 20rpx;padding-top: 20rpx;"
>
<image
v-if=
"value.isChecked"
src=
"@/static/ic_selected.png"
style=
"width: 50rpx;height: 50rpx;"
/>
<image
v-if=
"!value.isChecked"
src=
"@/static/ic_unselected.png"
style=
"width: 50rpx;height: 50rpx;"
/>
<image
v-if=
"value.isChecked"
src=
"@/static/ic_selected.png"
style=
"width: 50rpx;height: 50rpx;"
/>
<image
v-if=
"!value.isChecked"
src=
"@/static/ic_unselected.png"
style=
"width: 50rpx;height: 50rpx;"
/>
</view>
</view>
</view>
</block>
</block>
</view>
</scroll-view>
<view
v-if=
"dataList.length
<
=
0
"
style=
"position: absolute;left: 50%;width: 240rpx;margin-left: -120rpx;top: 600rpx;text-align: center;"
>
<text
style=
"color: gray;"
>
暂无在追剧
</text>
<view
@
click=
"goRecommend"
class=
"button"
style=
"margin-top: 20rpx;color: white;"
>
去剧场
</view>
</view>
</scroll-view>
<view
v-if=
"dataList.length
<
=
0
"
style=
"position: absolute;left: 50%;width: 240rpx;margin-left: -120rpx;top: 600rpx;text-align: center;"
>
<text
style=
"color: gray;"
>
暂无在追剧
</text
>
<
view
@
click=
"goRecommend"
class=
"button"
style=
"margin-top: 20rpx;color: white;"
>
去剧场
<
/view>
</
view
>
<view
v-if=
"dataList.length>=0"
@
click=
"clickEdit"
class=
"editBar"
>
<image
style=
"width: 50rpx;height: 50rpx;"
:src=
"!isEditStyle?'../../static/video/edit.png':'../../static/video/close.png'"
></image
>
</view>
</
z-paging
>
</view>
</
template
>
<
script
>
...
...
@@ -58,7 +65,7 @@
watch
:
{
isEditStyle
:
{
handler
(
newValue
,
oldValue
)
{
this
.
$emit
(
"showEditBar
R
"
,
newValue
)
this
.
$emit
(
"showEditBar
H
"
,
newValue
)
}
},
},
...
...
@@ -68,6 +75,12 @@
this
.
windowHeight
=
uni
.
getSystemInfoSync
().
windowHeight
this
.
loadData
()
},
hide
()
{
},
clickEdit
()
{
this
.
isEditStyle
=
!
this
.
isEditStyle
},
loadData
()
{
// 收藏记录
this
.
post
({
...
...
@@ -78,9 +91,9 @@
})
=>
{
this
.
dataList
=
data
.
list
;
if
(
this
.
dataList
.
length
>
0
)
{
this
.
$emit
(
"showEdit
R
"
,
true
)
this
.
$emit
(
"showEdit"
,
true
)
}
else
{
this
.
$emit
(
"showEdit
R
"
,
false
)
this
.
$emit
(
"showEdit"
,
false
)
}
}
});
...
...
@@ -95,7 +108,7 @@
this
.
$emit
(
"goRecommend"
)
},
click
(
detail
)
{
navigateTo
(
`/pagesC/ttvideo/ttVideoDetail?data=`
+
encodeURIComponent
(
JSON
.
stringify
(
detail
))
+
navigateTo
(
`/pagesC/ttvideo/ttVideoDetail?data=`
+
encodeURIComponent
(
JSON
.
stringify
(
detail
))
+
'&tt_album_id='
+
detail
.
douyinAlbumId
+
'&tt_episode_id='
+
detail
.
douyinEpisodeId
);
},
longClick
(
key
)
{
...
...
@@ -171,4 +184,18 @@
margin-left
:
10rpx
;
// position: absolute;
}
.editBar
{
position
:
absolute
;
bottom
:
80rpx
;
right
:
60rpx
;
width
:
80rpx
;
height
:
80rpx
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
border-radius
:
80rpx
;
background-color
:
aqua
;
box-shadow
:
0
0
2px
0px
rgba
(
0
,
0
,
0
,
0
.1
);
}
</
style
>
\ No newline at end of file
vedio/components/home/index.vue
View file @
f2913405
...
...
@@ -13,6 +13,17 @@
</view>
<z-paging
class=
"flex-1"
ref=
"paging"
v-model=
"dataList"
@
query=
"queryList"
>
<view
class=
"search-wrap"
>
<!--
<image
style=
"width: 80rpx; height: 80rpx"
src=
"@/static/index/ic_quit_white.png"
></image>
-->
<view
class=
"search-bar"
@
click=
"goSearchPage"
>
<image
style=
"width: 40rpx; height: 40rpx"
src=
"@/static/search.png"
></image>
<text
style=
"margin-left: 30rpx"
>
{{
bannerList
.
length
>
0
?
bannerList
[
0
].
title
:
''
}}
</text>
</view>
</view>
<view
class=
"content"
>
<swiper
class=
"banner"
:style=
"'margin-top:'+statusBarHeight+'px;'"
:indicator-dots=
"true"
:autoplay=
"true"
:interval=
"2000"
:duration=
"500"
>
...
...
@@ -370,6 +381,9 @@
})
=>
{}
});
},
goSearchPage
()
{
navigateTo
(
`/pagesA/search/search`
)
},
showFirstDialog
()
{
let
that
=
this
;
let
loadEpisode_id
=
uni
.
getStorageSync
(
'tt_episode_id'
)
||
''
;
...
...
@@ -415,10 +429,29 @@
position
:
relative
;
}
.search-wrap
{
height
:
80rpx
;
margin
:
10rpx
15rpx
;
display
:
flex
;
flex-direction
:
row
;
}
.search-bar
{
width
:
100%
;
margin-left
:
20rpx
;
margin-right
:
20rpx
;
border-radius
:
10rpx
;
background-color
:
lightgray
;
display
:
flex
;
flex-direction
:
row
;
align-items
:
center
;
padding
:
0
20rpx
;
}
.show-mask
{
width
:
100%
;
height
:
100%
;
background
:
rgba
(
0
,
0
,
0
,
0
.6
);
background
:
rgba
(
0
,
0
,
0
,
0
.6
);
position
:
absolute
;
z-index
:
999
;
color
:
white
;
...
...
vedio/components/home/my.vue
View file @
f2913405
...
...
@@ -171,7 +171,8 @@
},
handleDotRecord
()
{
// 看点记录
navigateTo
(
`/pagesD/dotRecord/dotRecord`
)
// navigateTo(`/pagesD/dotRecord/dotRecord`)
navigateTo
(
`/pagesA/task/task`
)
},
handleUseDotRecord
()
{
// 看点消费记录
...
...
vedio/components/home/recommendVideo.vue
View file @
f2913405
...
...
@@ -85,6 +85,13 @@
this
.
windowHeight
=
uni
.
getSystemInfoSync
().
windowHeight
},
methods
:
{
hide
()
{
try
{
this
.
$refs
.
recommendVideo
.
stop
();
}
catch
{
}
},
reShare
()
{
var
href
=
''
// #ifdef H5
...
...
vedio/pages.json
View file @
f2913405
...
...
@@ -25,21 +25,6 @@
"navigationBarBackgroundColor"
:
"#ffffff"
,
"navigationBarTextStyle"
:
"#000000"
}
},
{
"path"
:
"pages/index/index"
,
"style"
:
{
"navigationStyle"
:
"default"
,
"navigationBarBackgroundColor"
:
"#ffffff"
,
"navigationBarTextStyle"
:
"#000000"
}
},
{
"path"
:
"pages/my/my"
,
"style"
:
{
"navigationStyle"
:
"default"
,
"navigationBarBackgroundColor"
:
"#ffffff"
,
"navigationBarTextStyle"
:
"#000000"
}
},
{
"path"
:
"pages/brower/brower"
,
"style"
:
{
...
...
@@ -47,27 +32,6 @@
"navigationBarBackgroundColor"
:
"#ffffff"
,
"navigationBarTextStyle"
:
"black"
}
},
{
"path"
:
"pages/recommend/recommend"
,
"style"
:
{
"navigationStyle"
:
"default"
,
"navigationBarBackgroundColor"
:
"#000000"
,
"navigationBarTextStyle"
:
"#ffffff"
}
},
{
"path"
:
"pages/recommend/follow"
,
"style"
:
{
"navigationStyle"
:
"default"
,
"navigationBarBackgroundColor"
:
"#ffffff"
,
"navigationBarTextStyle"
:
"#000000"
}
},
{
"path"
:
"pages/recommend/recommendVideo"
,
"style"
:
{
"navigationStyle"
:
"default"
,
"navigationBarBackgroundColor"
:
"#000000"
,
"navigationBarTextStyle"
:
"#ffffff"
}
}
],
//
分包配置
...
...
@@ -80,12 +44,26 @@
"navigationBarBackgroundColor"
:
"#ffffff"
,
"navigationBarTextStyle"
:
"black"
}
},
{
"path"
:
"search/search"
,
"style"
:
{
"navigationStyle"
:
"default"
,
"navigationBarBackgroundColor"
:
"#ffffff"
,
"navigationBarTextStyle"
:
"black"
}
},
{
"path"
:
"task/task"
,
"style"
:
{
"navigationStyle"
:
"default"
,
"navigationBarBackgroundColor"
:
"#ffffff"
,
"navigationBarTextStyle"
:
"black"
}
}]
},
{
"root"
:
"pagesC"
,
"pages"
:
[{
"path"
:
"ttvideo/ttVideoDetail"
,
"style"
:
{
"style"
:
{
"backgroundColor"
:
"#000000"
,
"navigationStyle"
:
"default"
,
"navigationBarBackgroundColor"
:
"#000000"
,
...
...
@@ -139,14 +117,6 @@
"pages/home"
:
{
"network"
:
"all"
,
//在指定网络下预下载,可选值为:all(不限网络)、wifi(仅wifi下预下载)
"packages"
:
[
"pagesA"
,
"pagesC"
,
"pagesD"
]
//进入页面后预下载分包
},
"pages/recommend/recommend"
:
{
"network"
:
"all"
,
//在指定网络下预下载,可选值为:all(不限网络)、wifi(仅wifi下预下载)
"packages"
:
[
"pagesC"
]
//进入页面后预下载分包
},
"pages/my/my"
:
{
"network"
:
"all"
,
//在指定网络下预下载,可选值为:all(不限网络)、wifi(仅wifi下预下载)
"packages"
:
[
"pagesD"
]
//进入页面后预下载分包
}
},
"globalStyle"
:
{
...
...
vedio/pages/home.vue
View file @
f2913405
...
...
@@ -2,9 +2,10 @@
<view
class=
"body"
>
<view
style=
"height: 92%;"
>
<indexPage
v-show=
"currentPage==0"
ref=
"index"
/>
<recommendPage
v-on:showEditBarH=
"showEditBarH"
v-on:changeBottomBarColor=
"changeBottomBarColor"
v-show=
"currentPage==1"
ref=
"recommend"
/>
<userPage
v-show=
"currentPage==2"
ref=
"user"
/>
<recommendPage
v-show=
"currentPage==1"
ref=
"recommend"
/>
<followPage
v-on:showEditBarH=
"showEditBarH"
v-on:goRecommend=
"goRecommend"
v-show=
"currentPage==2"
ref=
"follow"
/>
<userPage
v-show=
"currentPage==3"
ref=
"user"
/>
</view>
<view
v-if=
"!isShowBlackBar"
class=
"tabs-bar"
>
<view
:class=
"currentPage==0?'tab active': 'tab'"
:style=
"'padding-bottom:' + bottomSafePadding + 'px;'"
...
...
@@ -29,7 +30,16 @@
<view
:class=
"currentPage == 2?'tab active': 'tab'"
:style=
"'padding-bottom:' + bottomSafePadding + 'px;'"
@
click=
"tabChange(2)"
>
<view
style=
"margin: 16rpx 0 11rpx;"
>
<image
v-if=
"currentPage==2"
class=
"tabs-image"
src=
"/static/tab/my_selected.png"
mode=
"heightFix"
>
<image
v-if=
"currentPage==2"
class=
"tabs-image"
src=
"/static/tab/promote_selected.png"
mode=
"heightFix"
></image>
<image
v-else
class=
"tabs-image"
src=
"/static/tab/promote_unselected.png"
mode=
"heightFix"
></image>
</view>
看过
</view>
<view
:class=
"currentPage == 3?'tab active': 'tab'"
:style=
"'padding-bottom:' + bottomSafePadding + 'px;'"
@
click=
"tabChange(3)"
>
<view
style=
"margin: 16rpx 0 11rpx;"
>
<image
v-if=
"currentPage==3"
class=
"tabs-image"
src=
"/static/tab/my_selected.png"
mode=
"heightFix"
>
</image>
<image
v-else
class=
"tabs-image"
src=
"/static/tab/my_unselected.png"
mode=
"heightFix"
></image>
</view>
...
...
@@ -86,14 +96,9 @@
}
from
'@/utils/fun.js'
;
import
common
from
'@/mixins/common'
;
const
app
=
getApp
();
// 首页
// import indexPage from "@/pages/index/index.vue";
// import recommendPage from "@/pages/recommend/recommend.vue";
// import userPage from "@/pages/my/my.vue";
import
indexPage
from
"@/components/home/index.vue"
;
import
recommendPage
from
"@/components/home/recommend.vue"
;
import
recommendPage
from
"@/components/home/recommendVideo.vue"
;
import
followPage
from
"@/components/home/follow.vue"
;
import
userPage
from
"@/components/home/my.vue"
;
export
default
{
...
...
@@ -102,6 +107,7 @@
components
:
{
indexPage
,
recommendPage
,
followPage
,
userPage
},
data
()
{
...
...
@@ -117,13 +123,13 @@
let
index
=
options
.
index
??
''
if
(
index
!=
''
&&
index
!=
undefined
)
{
this
.
currentPage
=
index
}
// #ifdef MP-TOUTIAO
tt
.
setNavigationBarColor
({
frontColor
:
'#000000'
,
backgroundColor
:
'#ffffff'
})
}
// #ifdef MP-TOUTIAO
tt
.
setNavigationBarColor
({
frontColor
:
'#000000'
,
backgroundColor
:
'#ffffff'
})
// #endif
if
(
wx
.
setVisualEffectOnCapture
)
{
...
...
@@ -133,15 +139,15 @@
},
})
}
}
},
onShow
()
{
try
{
// 在子组件重写show()代替onShow()
if
(
this
.
currentPage
==
0
)
{
this
.
$refs
.
index
.
show
();
this
.
$refs
.
index
.
show
();
}
else
if
(
this
.
currentPage
==
1
)
{
// this.$refs.recommend.show();
}
else
if
(
this
.
currentPage
==
2
)
{
...
...
@@ -164,38 +170,29 @@
},
loadComponentData
()
{
if
(
this
.
currentPage
==
0
)
{
this
.
changeBottomBarColor
(
false
)
this
.
$refs
.
index
.
show
();
this
.
$refs
.
recommend
.
hide
();
this
.
$refs
.
follow
.
hide
();
this
.
$refs
.
user
.
hide
();
}
else
if
(
this
.
currentPage
==
1
)
{
this
.
$refs
.
recommend
.
show
();
this
.
$refs
.
follow
.
hide
();
this
.
$refs
.
index
.
hide
();
this
.
$refs
.
user
.
hide
();
}
else
if
(
this
.
currentPage
==
2
)
{
this
.
changeBottomBarColor
(
false
)
this
.
$refs
.
follow
.
show
();
this
.
$refs
.
index
.
hide
();
this
.
$refs
.
recommend
.
hide
();
this
.
$refs
.
user
.
hide
();
}
else
if
(
this
.
currentPage
==
2
)
{
this
.
$refs
.
user
.
show
();
this
.
$refs
.
index
.
hide
();
this
.
$refs
.
recommend
.
hide
();
this
.
$refs
.
follow
.
hide
();
}
},
changeBottomBarColor
(
b
)
{
this
.
isShowBlackBar
=
b
// #ifdef MP-TOUTIAO
if
(
b
){
tt
.
setNavigationBarColor
({
frontColor
:
'#ffffff'
,
backgroundColor
:
'#000000'
})
}
else
{
tt
.
setNavigationBarColor
({
frontColor
:
'#000000'
,
backgroundColor
:
'#ffffff'
})
}
// #endif
goRecommend
()
{
this
.
currentPage
=
1
},
showEditBarH
(
b
)
{
this
.
showEditBar
=
b
...
...
@@ -203,14 +200,14 @@
},
fullChoice
()
{
this
.
isFullChoice
=
!
this
.
isFullChoice
this
.
$refs
.
recommend
.
fullChoice
();
this
.
$refs
.
follow
.
fullChoice
();
},
noChoice
()
{
this
.
isFullChoice
=
!
this
.
isFullChoice
this
.
$refs
.
recommend
.
noChoice
();
this
.
$refs
.
follow
.
noChoice
();
},
deleteCollect
()
{
this
.
$refs
.
recommend
.
deleteCollect
();
this
.
$refs
.
follow
.
deleteCollect
();
}
}
}
...
...
@@ -218,7 +215,7 @@
<
style
lang=
"scss"
>
.body
{
height
:
100%
;
height
:
100%
;
background-color
:
white
;
}
...
...
vedio/pages/index/index.vue
deleted
100644 → 0
View file @
8543445a
<
template
>
<view
class=
"body"
>
<z-paging
class=
"flex-1"
ref=
"paging"
v-model=
"dataList"
@
query=
"queryList"
>
<view
class=
"content"
>
<swiper
class=
"banner"
:style=
"'margin-top:'+statusBarHeight+'px;'"
:indicator-dots=
"true"
:autoplay=
"true"
:interval=
"2000"
:duration=
"500"
>
<swiper-item
v-for=
"banner in bannerList"
:key=
"banner.vedioId"
@
click=
"handleBanner(banner)"
>
<image
class=
"banner-img"
:src=
"banner.tabImage"
mode=
"aspectFill"
></image>
</swiper-item>
</swiper>
<view
style=
"display: flex;flex-direction: column;background-color:white;border-radius:10rpx;margin-top: 20rpx;"
>
<view
style=
"font-size: 30rpx;font-weight: 777;margin-left: 12rpx;margin-top: 18rpx;"
>
排行榜
</view>
<scroll-view
scroll-x=
"true"
style=
"white-space: nowrap; margin-top: 18rpx;"
>
<block
v-for=
"(item, index) in topList"
:key=
"item.vedioId"
>
<view
@
click=
"handleTop(item)"
style=
"display:inline-block;background-color:white;border-radius:10rpx;width: 200rpx;margin: 5rpx 10rpx 15rpx 10rpx;"
>
<view
style=
"position: relative;"
>
<view
style=
"position: relative;"
>
<view
style=
"position: absolute;z-index: 10;margin-left: 20rpx;"
>
<view
style=
"position: relative;"
>
<view
style=
"
position: absolute;
z-index: 10;
width: 50rpx;
text-align: center;
margin-top: 8rpx;
font-size: 24rpx;
color: white;"
>
{{
index
+
1
}}
</view>
<image
v-if=
"index==0"
style=
"width: 50rpx;height: 50rpx;display: flex;align-items: right;margin-right: 10rpx;"
src=
"../../static/index/y43.png"
></image>
<image
v-else-if=
"index==1"
style=
"width: 50rpx;height: 50rpx;display: flex;align-items: right;margin-right: 10rpx;"
src=
"../../static/index/y42.png"
></image>
<image
v-else-if=
"index==2"
style=
"width: 50rpx;height: 50rpx;display: flex;align-items: right;margin-right: 10rpx;"
src=
"../../static/index/y41.png"
></image>
<image
v-else
style=
"width: 50rpx;height: 50rpx;display: flex;align-items: right;margin-right: 10rpx;"
src=
"../../static/index/y4.png"
></image>
</view>
</view>
<image
style=
"border-radius:10rpx; width: 200rpx;height: 260rpx;"
:src=
"item.coverImage"
mode=
"aspectFill"
></image>
</view>
<view
style=
"
position: absolute;
bottom: 10rpx;
background-color: black;
width: 100%;
opacity: 0.5;
"
>
<view
style=
"display: flex;align-items: center;margin-left: 10rpx;"
>
<image
style=
"width: 20rpx;height: 20rpx;display: flex;align-items: right;margin-right: 10rpx;"
src=
"../../static/index/ic_index_play.png"
></image>
<view
style=
"font-size: 22rpx;color: white;"
>
{{
item
.
showNum
}}
</view>
</view>
</view>
</view>
<view
style=
"font-size: 26rpx;margin-top: 10rpx;"
>
{{
item
.
title
}}
</view>
<view
style=
"font-size: 22rpx;margin-top: 10rpx;"
v-if=
"item.orderTags!=null&&item.orderTags.length>0"
>
<scroll-view
scroll-x=
"true"
>
<block
v-for=
"t in item.orderTags"
:key=
"item.orderTags"
>
<view
style=
"display:inline-block;margin-right: 4rpx;"
>
{{
t
}}
</view>
</block>
</scroll-view>
</view>
</view>
</block>
</scroll-view>
</view>
<view
style=
"font-size: 30rpx;font-weight: 777;margin-top: 20rpx;margin-bottom: 10rpx;margin-left: 4rpx;"
>
推荐
</view>
<view
style=
"column-count: 2;column-gap: 20rpx;margin-top: 20rpx;"
>
<view
class=
"item-wrap"
v-for=
"(item, i) in dataList"
:key=
"i"
v-if=
"i % 2 == 0"
@
click=
"handleInfo(item)"
>
<view
style=
"position: relative;"
>
<image
class=
"img"
:src=
"item.coverImage"
mode=
"aspectFill"
></image>
<view
style=
"
position: absolute;
bottom: 10rpx;
width: 95%;
padding: 10rpx;
background-color: black;
opacity: 0.5;
"
>
<view
style=
"display: flex;flex-direction: row;justify-content:space-between;"
>
<view
style=
"display: flex;align-items: center;"
>
<image
style=
"width: 20rpx;height: 20rpx;display: flex;align-items: right;margin-right: 10rpx;"
src=
"../../static/index/ic_index_play.png"
></image>
<view
style=
"font-size: 22rpx;color: white;"
>
{{
item
.
showNum
}}
</view>
</view>
<view
style=
"font-size: 22rpx;color: white;font-weight: 777;"
>
全
{{
item
.
vedioTotal
}}
集
</view>
</view>
</view>
</view>
<view
style=
"font-size: 30rpx;margin-top: 10rpx;margin-left: 12rpx;"
>
{{
item
.
title
}}
</view>
<!--
<view
style=
"font-size: 22rpx;margin-top: 10rpx;margin-left: 12rpx;"
>
{{
item
.
vedioDesc
}}
</view>
-->
</view>
<view
class=
"item-wrap"
v-for=
"(item, i) in dataList"
:key=
"i"
v-if=
"i % 2 == 1"
@
click=
"handleInfo(item)"
>
<view
style=
"position: relative;"
>
<image
class=
"img"
:src=
"item.coverImage"
mode=
"aspectFill"
></image>
<view
style=
"
position: absolute;
bottom: 10rpx;
width: 95%;
padding: 10rpx;
background-color: black;
opacity: 0.5;
"
>
<view
style=
"display: flex;flex-direction: row;justify-content:space-between;"
>
<view
style=
"display: flex;align-items: center;"
>
<image
style=
"width: 20rpx;height: 20rpx;display: flex;align-items: right;margin-right: 10rpx;"
src=
"../../static/index/ic_index_play.png"
></image>
<view
style=
"font-size: 22rpx;color: white;"
>
{{
item
.
showNum
}}
</view>
</view>
<view
style=
"font-size: 22rpx;color: white;font-weight: 777;"
>
全
{{
item
.
vedioTotal
}}
集
</view>
</view>
</view>
</view>
<view
style=
"font-size: 30rpx;margin-top: 10rpx;margin-left: 12rpx;"
>
{{
item
.
title
}}
</view>
<!--
<view
style=
"font-size: 22rpx;margin-top: 10rpx;margin-left: 12rpx;"
>
{{
item
.
vedioDesc
}}
</view>
-->
</view>
</view>
</view>
</z-paging>
<view
v-if=
"newRecordBean!=null"
style=
"width: 97%;height: 150rpx;margin: 10rpx;opacity: 0.8;background-color: black;z-index: 20;position: absolute;bottom: 0;border-radius:10rpx;"
>
<view
style=
"display: flex;margin-left: 10rpx;"
>
<view
style=
"flex-grow: 2;display: flex;align-items: center;"
>
<image
style=
"border-radius:10rpx; width: 100rpx;height: 130rpx;margin-top: 10rpx;"
:src=
"newRecordBean.coverImage"
mode=
"aspectFill"
></image>
<view
style=
"margin: 20rpx;"
>
<view
style=
"font-size: 30rpx; color: white;"
>
{{
newRecordBean
.
title
}}
</view>
<view
style=
"font-size: 24rpx;margin-top: 6rpx;color: white;"
>
上次观看至第
{{
newRecordBean
.
seeIndex
}}
集
</view>
<view
style=
"font-size: 22rpx;"
v-if=
"newRecordBean.orderTags!=null&&newRecordBean.orderTags.length>0"
>
<scroll-view
scroll-x=
"true"
>
<block
v-for=
"t in newRecordBean.orderTags"
:key=
"newRecordBean.orderTags"
>
<view
style=
"display:inline-block;margin-right: 4rpx;"
>
{{
t
}}
</view>
</block>
</scroll-view>
</view>
</view>
</view>
<view
style=
"display: flex;flex-direction: column;align-items: flex-end;"
>
<image
@
click=
"handleBottomClose()"
style=
"width: 30rpx;height: 30rpx;display: flex;align-items: right;margin: 10rpx;"
src=
"../../static/index/ic_quit_white.png"
mode=
"aspectFill"
></image>
<view
@
click=
"handleBottomPlay(newRecordBean)"
style=
"
width: 160rpx;
height: 50rpx;
line-height: 50rpx;
text-align: center;
background-color: red;
border-radius:30rpx;
color: white;
font-size: 24rpx;
margin-right: 20rpx;"
>
继续观看
</view>
</view>
</view>
</view>
<!--
<uni-popup
type=
"center"
ref=
"select"
>
<view>
<view
style=
"font-size: 30rpx;font-weight: 777;color: white;"
>
刚刚看的
</view>
<view
style=
"text-align: center;"
>
<view>
<video
:id=
"recommendBean.vedioId"
:loop=
"true"
:enable-progress-gesture=
"false"
:show-loading=
"true"
:show-fullscreen-btn=
"false"
style=
"width:100%; height:100%;background: #f56c6c;"
:src=
"recommendBean.vedioUrl"
:poster=
"recommendBean.coverImage"
play-btn-position=
"center"
object-fit=
"contain"
/>
</view>
<view>
123
</view>
<view
@
click=
"handleVipPay"
style=
"width: 350rpx;height: 80rpx;background-color: #f2575b;border-radius:20rpx;color: white;font-size: 26rpx;justify-content: center;align-items: center;display: flex;"
>
立即试看
</view>
</view>
</view>
</uni-popup>
-->
</view>
</
template
>
<
script
>
import
common
from
'@/mixins/common'
;
import
{
getToLocal
}
from
"@/utils/utils.js"
import
{
navigateTo
,
message
,
alert
,
loading
}
from
'@/utils/fun.js'
;
import
{
openUrl
}
from
'@/utils/app+.js'
;
const
app
=
getApp
();
export
default
{
name
:
'index'
,
mixins
:
[
common
],
data
()
{
return
{
dataList
:
[],
bannerList
:
[],
newRecordBean
:
null
,
topList
:
[],
statusBarHeight
:
app
.
globalData
.
statusBarHeight
,
};
},
methods
:
{
show
()
{
// 匹配视频
this
.
showFirstDialog
();
// 轮播图
this
.
post
({
url
:
'/vedio/topTabs'
,
showLoading
:
false
,
success
:
({
data
})
=>
{
this
.
bannerList
=
data
.
list
;
}
});
// 排行榜
this
.
post
({
url
:
'/vedio/orders'
,
showLoading
:
false
,
success
:
({
data
})
=>
{
this
.
topList
=
data
.
list
;
}
});
// 最近观看剧
this
.
post
({
url
:
'/vedio/newest'
,
data
:
{},
showLoading
:
false
,
success
:
({
data
})
=>
{
if
(
data
.
vedio
!=
null
)
{
this
.
newRecordBean
=
data
.
vedio
;
}
}
});
if
(
this
.
$refs
.
paging
!=
null
)
{
this
.
$refs
.
paging
.
refresh
();
}
},
hide
()
{
},
queryList
(
page
,
size
)
{
// 推荐列表
this
.
post
({
url
:
'/vedio/list'
,
data
:
{
page
,
size
},
showLoading
:
false
,
success
:
({
data
})
=>
{
this
.
$refs
.
paging
.
complete
(
data
.
list
);
}
});
},
handleBanner
(
item
)
{
navigateTo
(
`/pagesC/video/newVideoDetail?data=`
+
encodeURIComponent
(
JSON
.
stringify
(
item
)));
},
handleInfo
(
item
)
{
navigateTo
(
`/pagesC/video/newVideoDetail?data=`
+
encodeURIComponent
(
JSON
.
stringify
(
item
)));
},
handleTop
(
item
)
{
navigateTo
(
`/pagesC/video/newVideoDetail?data=`
+
encodeURIComponent
(
JSON
.
stringify
(
item
)));
},
handleBottomPlay
(
item
)
{
navigateTo
(
`/pagesC/video/newVideoDetail?data=`
+
encodeURIComponent
(
JSON
.
stringify
(
item
)));
},
handleBottomClose
()
{
this
.
newRecordBean
=
null
;
this
.
post
({
url
:
'/vedio/colseNewest'
,
data
:
{},
showLoading
:
false
,
success
:
({
data
})
=>
{}
});
},
showFirstDialog
()
{
let
that
=
this
;
// 匹配用户展示视频
let
showFirstVedio
=
uni
.
getStorageSync
(
'showFirstVedio'
)
||
''
;
if
(
showFirstVedio
==
''
)
{
uni
.
setStorage
({
key
:
'showFirstVedio'
,
data
:
'true'
});
setTimeout
(()
=>
{
that
.
post
({
url
:
'/vedio/firstVedio'
,
data
:
{},
showLoading
:
false
,
success
:
({
data
})
=>
{
if
(
data
.
vedioMsg
!=
null
)
{
navigateTo
(
`/pagesC/video/newVideoDetail?data=`
+
encodeURIComponent
(
JSON
.
stringify
(
data
.
vedioMsg
)));
}
}
});
},
800
);
}
}
}
};
</
script
>
<
style
lang=
"scss"
>
.body
{
background-color
:
whitesmoke
;
position
:
relative
;
}
.item-wrap
{
width
:
100%
;
border-radius
:
10rpx
;
background-color
:
#fff
;
break-inside
:
avoid
;
margin-bottom
:
20rpx
;
height
:
470rpx
;
}
.img
{
position
:
relative
;
border-radius
:
10rpx
;
width
:
100%
;
height
:
390rpx
;
}
</
style
>
\ No newline at end of file
vedio/pages/my/my.vue
deleted
100644 → 0
View file @
8543445a
<
template
>
<view
class=
"body"
>
<!--
<scroll-view
:scroll-y=
"true"
>
-->
<z-paging
style=
"height: 100%;"
>
<view
:style=
"'display: flex;flex-direction: row;align-items: center;margin: 20rpx;padding-left: 10rpx;margin-top:'+statusBarHeight+'px;'"
>
<image
class=
"avatar"
src=
"@/static/logo-about.png"
></image>
<view>
<view
style=
"font-size: 32rpx;color: black;margin-left: 20rpx;"
>
用户ID:
{{
userBean
.
idcode
}}
</view>
</view>
<!--
<button
text=
"微信用户一键登录"
open-type=
"getPhoneNumber"
bindgetphonenumber=
"getPhoneNumber"
>
123123
</button>
-->
</view>
<view
v-if=
"userBean.showVipInner && os === 'android' "
style=
"display: flex;flex-direction: row;background: #f5ca86;margin: 20rpx;padding: 40rpx;border-radius:20rpx;align-items: center;justify-content:space-between;"
>
<view
style=
"display: flex;flex-direction: column;justify-content: center;"
>
<view
style=
"font-size: 36rpx;color: #5b1500;font-weight: 777;"
>
{{
userBean
.
expireTime
<=
0
?
'开通VIP会员'
:
'VIP会员'
}}
</view>
<view
v-if=
"userBean.expireTime
<
=
0
"
style=
"font-size: 30rpx;color: #5b1500;margin-top: 12rpx;"
>
解锁全部短剧
</view>
<view
v-else
style=
"font-size: 30rpx;color: #5b1500;margin-top: 12rpx;"
>
到期时间:
{{
userBean
.
expireTime
*
1000
|
formatDate
(
'yyyy-MM-dd'
)
}}
</view>
<view
v-if=
"userBean.expireTime
<
=
0
"
@
click=
"handleCoinPay"
style=
"width: 210rpx;height: 60rpx;background-color: #5b1500;border-radius:30rpx;color: white;font-size: 26rpx;justify-content: center;align-items: center;display: flex;padding-bottom: 4rpx;margin-top: 30rpx;"
>
立即开通
</view>
<view
v-else
style=
"width: 210rpx;height: 60rpx;padding-bottom: 4rpx;margin-top: 30rpx;"
>
</view>
</view>
<image
style=
"border-radius:10rpx; width: 130rpx;height: 100rpx;margin-right: 20rpx;"
src=
"https://mints-pkg.oss-cn-beijing.aliyuncs.com/pkg/bg_my_vip.png"
mode=
"scaleToFill"
></image>
</view>
<view
v-if=
"os === 'android' "
style=
"display: flex;height: 200rpx;margin: 20rpx;background: #f5ca86;border-radius: 20rpx;"
>
<view
style=
"flex-grow: 2; margin-left: 20rpx;"
>
<view
style=
"width: 100%;height: 100%;display: flex;flex-direction: column;justify-content: center;"
>
<view
style=
"display: flex;align-items: center;"
>
<image
style=
"width: 50rpx;height: 50rpx;display: flex;align-items: right;margin-right: 10rpx;"
src=
"https://mints-pkg.oss-cn-beijing.aliyuncs.com/pkg/img/ic_my_coin.png"
></image>
<view
style=
"font-size: 36rpx;font-weight: 777;"
>
看点充值
</view>
</view>
<view
style=
"font-size: 28rpx;color: #5b1500;margin-top: 20rpx;"
>
海量看点狂洒中,好剧等你来解锁
</view>
</view>
</view>
<view
style=
"width: 220rpx;"
>
<view
style=
"width: 100%;height: 100%;display: flex;flex-direction: column;align-items: center;justify-content: center;"
>
<view
style=
"font-size: 30rpx;color: #5b1500;margin-bottom: 20rpx;"
>
{{
userBean
.
point
}}
</view>
<view
@
click=
"handleCoinPay"
style=
"width: 160rpx;height: 60rpx;background-color: #5b1500;border-radius:30rpx;color: white;font-size: 26rpx;justify-content: center;align-items: center;display: flex;padding-bottom: 4rpx;"
>
去充值
</view>
</view>
</view>
</view>
<view
class=
"infobg"
style=
"margin: 20rpx;"
>
<view
v-if=
"userBean.showVipInner && os === 'android' "
class=
"item arrow"
@
click=
"handlePayRecord"
>
我的订单
<view
class=
"item_bd ellipsis"
style=
"margin-left: 58rpx;"
></view>
</view>
<view
v-if=
"os === 'android' "
class=
"item arrow"
@
click=
"handleDotRecord"
>
看点记录
<view
class=
"item_bd ellipsis"
style=
"margin-left: 58rpx;"
></view>
</view>
<view
v-if=
"os === 'android' "
class=
"item arrow"
@
click=
"handleUseDotRecord"
>
消费记录
<view
class=
"item_bd ellipsis"
style=
"margin-left: 58rpx;"
></view>
</view>
<view
class=
"item arrow"
@
click=
"handleWatchRecord"
>
观看记录
<view
class=
"item_bd ellipsis"
style=
"margin-left: 58rpx;"
></view>
</view>
<view
class=
"item arrow"
@
click=
"handlePhone"
>
联系客服
<view
class=
"item_bd ellipsis"
style=
"margin-left: 58rpx;"
></view>
</view>
</view>
<view
style=
"display: flex;justify-content: center;margin-top: 20rpx;font-size: 26rpx;color: gray;"
>
{{
versionName
}}
</view>
</z-paging>
<!--
</scroll-view>
-->
<coin-popup
:show=
"showAnimate"
@
close=
"showAnimate = false"
@
paySuccess=
"paySuccess"
>
</coin-popup>
</view>
</
template
>
<
script
>
import
common
from
'@/mixins/common'
;
import
{
getToLocal
}
from
"@/utils/utils.js"
import
{
navigateTo
,
message
,
alert
,
loading
}
from
'@/utils/fun.js'
;
import
{
openUrl
}
from
'@/utils/app+.js'
;
const
app
=
getApp
();
export
default
{
name
:
'index'
,
mixins
:
[
common
],
data
()
{
return
{
statusBarHeight
:
app
.
globalData
.
statusBarHeight
,
userBean
:
{},
showAnimate
:
false
,
windowHeight
:
0
,
os
:
'android'
,
versionName
:
app
.
globalData
.
versionName
,
corpid
:
''
,
// 企业ID
curl
:
''
,
// 客服链接
};
},
methods
:
{
show
()
{
this
.
os
=
wx
.
getSystemInfoSync
().
platform
;
this
.
windowHeight
=
uni
.
getSystemInfoSync
().
windowHeight
// loadData() {
this
.
post
({
url
:
'/user/baseMsg'
,
showLoading
:
false
,
success
:
({
data
})
=>
{
this
.
userBean
=
data
;
}
});
},
hide
()
{
},
handleDotRecord
()
{
// 看点记录
navigateTo
(
`/pagesD/dotRecord/dotRecord`
)
},
handleUseDotRecord
()
{
// 看点消费记录
navigateTo
(
`/pagesD/useDotRecord/useDotRecord`
)
},
handleWatchRecord
()
{
navigateTo
(
`/pagesD/watchRecord/watchRecord`
)
},
handleCoinPay
()
{
this
.
showAnimate
=
true
;
},
handlePayRecord
()
{
navigateTo
(
`/pagesD/payRecord/payRecord`
)
},
handleVipPay
()
{
navigateTo
(
`/pagesA/vipPay/vipPay`
)
},
handlePhone
()
{
// if (this.corpid != '' && this.curl != '') {
// wx.openCustomerServiceChat({
// extInfo: {
// url: this.curl
// },
// corpId: this.corpid,
// success(res) {},
// fail(e) {
// console.log(e)
// }
// })
// } else {
// let that = this
// // 联系我们
// this.post({
// url: '/vedio/customerServiceNumbers',
// showLoading: false,
// success: ({
// data
// }) => {
// let datas = data.customerServiceNumbers.split(',')
// that.corpid = datas[0]
// that.curl = datas[1]
// wx.openCustomerServiceChat({
// extInfo: {
// url: that.curl
// },
// corpId: that.corpid,
// success(res) {},
// fail(e) {
// console.log(e)
// }
// })
// }
// });
// }
wx
.
makePhoneCall
({
phoneNumber
:
'4000969950'
,
success
:
function
(
res
)
{
console
.
log
(
'拨打电话成功!'
);
},
fail
:
function
(
res
)
{
console
.
log
(
'拨打电话失败!'
);
}
})
},
paySuccess
(
largeType
)
{
// largeType=vip 开通vip
// largeType=point 购买看点
if
(
wx
.
getSystemInfoSync
().
platform
==
'ios'
){
message
.
notify
(
'支付成功'
);
}
this
.
post
({
url
:
'/user/baseMsg'
,
showLoading
:
false
,
success
:
({
data
})
=>
{
this
.
userBean
=
data
;
}
});
},
getPhoneNumber
(
e
)
{
console
.
log
(
e
.
detail
.
code
)
// 动态令牌
console
.
log
(
e
.
detail
.
errMsg
)
// 回调信息(成功失败都会返回)
console
.
log
(
e
.
detail
.
errno
)
// 错误码(失败时返回)
}
}
};
</
script
>
<
style
lang=
"scss"
>
@import
'@/scss/uni.scss'
;
.body
{
background-color
:
whitesmoke
;
}
.avatar
{
background-color
:
#d8d8d8
;
width
:
100rpx
;
height
:
100rpx
;
border-radius
:
50%
;
overflow
:
hidden
;
//box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1)
}
</
style
>
\ No newline at end of file
vedio/pages/recommend/follow.vue
deleted
100644 → 0
View file @
8543445a
<
template
>
<view
style=
"background: white;"
>
<scroll-view
scroll-y=
"true"
:style=
"'height: '+(windowHeight -120)+'px;margin-top:'+(titleBarHeight +statusBarHeight)+'px;'"
>
<view
class=
"flex space"
style=
"display:flex; flex-wrap:wrap;"
>
<block
v-for=
"(value,key) in dataList"
:key=
"key"
>
<view
class=
"mt-10"
style=
"width:31%; position: relative; border-radius:20rpx;margin-bottom: 10rpx;margin-left: 14rpx;"
@
click
.
stop=
"click(value)"
@
longpress
.
stop=
"longClick(key)"
>
<image
class=
"integral-mall-goods"
mode=
"aspectFill"
:src=
"value.coverImage"
></image>
<view
class=
"text"
style=
"font-size: 26rpx;color: black;height: 36rpx;margin-left: 5rpx;"
>
{{
value
.
title
}}
</view>
<view
class=
"text"
style=
"font-size: 22rpx;color: gray;height: 30rpx;margin-left: 5rpx;"
>
{{
value
.
vedioDesc
}}
</view>
<view
v-if=
"isEditStyle"
@
click
.
stop=
"cbClick(key)"
style=
"position: absolute;background: #000000; opacity: 0.6;width: 92%;height: 96%;top: 0;border-radius:20rpx;
padding-left: 20rpx;padding-top: 20rpx;"
>
<image
v-if=
"value.isChecked"
src=
"@/static/ic_selected.png"
style=
"width: 50rpx;height: 50rpx;"
/>
<image
v-if=
"!value.isChecked"
src=
"@/static/ic_unselected.png"
style=
"width: 50rpx;height: 50rpx;"
/>
</view>
</view>
</block>
</view>
</scroll-view>
<view
v-if=
"dataList.length
<
=
0
"
style=
"position: absolute;left: 50%;width: 240rpx;margin-left: -120rpx;top: 600rpx;text-align: center;"
>
<text
style=
"color: gray;"
>
暂无在追剧
</text>
<view
@
click=
"goRecommend"
class=
"button"
style=
"margin-top: 20rpx;color: white;"
>
去剧场
</view>
</view>
</view>
</
template
>
<
script
>
import
common
from
'@/mixins/common'
;
import
{
navigateTo
,
}
from
'@/utils/fun.js'
;
const
app
=
getApp
();
export
default
{
name
:
"follow"
,
mixins
:
[
common
],
data
()
{
return
{
titleBarHeight
:
app
.
globalData
.
titleBarHeight
,
statusBarHeight
:
app
.
globalData
.
statusBarHeight
,
windowHeight
:
0
,
dataList
:
[],
isEditStyle
:
false
}
},
watch
:
{
isEditStyle
:
{
handler
(
newValue
,
oldValue
)
{
this
.
$emit
(
"showEditBarR"
,
newValue
)
}
},
},
onLoad
(
e
)
{},
methods
:
{
show
()
{
this
.
windowHeight
=
uni
.
getSystemInfoSync
().
windowHeight
this
.
loadData
()
},
loadData
()
{
// 收藏记录
this
.
post
({
url
:
'/vedio/collectList'
,
showLoading
:
false
,
success
:
({
data
})
=>
{
this
.
dataList
=
data
.
list
;
if
(
this
.
dataList
.
length
>
0
)
{
this
.
$emit
(
"showEditR"
,
true
)
}
else
{
this
.
$emit
(
"showEditR"
,
false
)
}
}
});
},
changeEditStyle
(
b
)
{
this
.
isEditStyle
=
b
if
(
!
this
.
isEditStyle
)
{
this
.
noChoice
()
}
},
goRecommend
()
{
this
.
$emit
(
"goRecommend"
)
},
click
(
detail
)
{
navigateTo
(
`/pagesC/video/ttVideoDetail?data=`
+
encodeURIComponent
(
JSON
.
stringify
(
detail
)))
},
longClick
(
key
)
{
this
.
isEditStyle
=
true
this
.
dataList
[
key
].
isChecked
=
true
},
onChange
(
key
)
{
this
.
dataList
[
key
].
isChecked
=
!
this
.
dataList
[
key
].
isChecked
},
cbClick
(
key
)
{
let
newData
=
this
.
dataList
[
key
]
newData
.
isChecked
=
!
newData
.
isChecked
this
.
$set
(
this
.
dataList
,
key
,
newData
)
},
fullChoice
()
{
for
(
let
i
=
0
;
i
<
this
.
dataList
.
length
;
i
++
)
{
this
.
dataList
[
i
].
isChecked
=
true
}
this
.
$forceUpdate
()
},
noChoice
()
{
for
(
let
i
=
0
;
i
<
this
.
dataList
.
length
;
i
++
)
{
this
.
dataList
[
i
].
isChecked
=
false
}
this
.
$forceUpdate
()
},
deleteCollect
()
{
let
list
=
[]
for
(
let
i
=
0
;
i
<
this
.
dataList
.
length
;
i
++
)
{
if
(
this
.
dataList
[
i
].
isChecked
)
{
list
.
push
(
this
.
dataList
[
i
].
vedioId
)
}
}
// 取消收藏
this
.
post
({
url
:
'/vedio/cancelCollect'
,
data
:
{
list
},
showLoading
:
false
,
success
:
({
data
})
=>
{
this
.
isEditStyle
=
false
uni
.
showToast
({
title
:
"删除成功"
})
this
.
loadData
()
}
});
},
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.integral-mall-goods
{
width
:
100%
;
height
:
320rpx
;
background
:
#F2F2F2
;
border-radius
:
16upx
;
}
.text
{
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
}
.cb
{
margin-top
:
10rpx
;
margin-left
:
10rpx
;
// position: absolute;
}
</
style
>
\ No newline at end of file
vedio/pages/recommend/recommend.vue
deleted
100644 → 0
View file @
8543445a
<
template
>
<view
class=
"body"
>
<view
class=
"tabContainer"
:style=
"
'height:' +
titleBarHeight +
'px;line-height:' +
titleBarHeight +
'px;padding-top:' +
statusBarHeight +
'px;background-color:transparent'
"
>
<view
v-if=
"(current==0 && showEdit)"
:style=
"'position: absolute;left: 20rpx;top:'+ (statusBarHeight + 10) + 'px'"
@
click
.
stop=
"showEditBar = !showEditBar"
>
<image
style=
"width: 50rpx;height: 50rpx;"
mode=
"widthFix"
:src=
"showEditBar?'/static/video/close.png':'/static/video/edit.png'"
/>
</view>
<view
v-show=
"showEditBar"
style=
"width: 300rpx;background: white;z-index: 999;"
>
<view
style=
"font-size: 36rpx;text-align: center;align-items: center;height:100rpx;line-height: 100rpx;"
>
追剧
</view>
</view>
<view
v-if=
"(!showEditBar && showTap)"
>
<u-tabs
:list=
"tabs"
:current=
"current"
@
change=
"handleChange"
lineWidth=
"30"
:scrollable=
"false"
:lineColor=
"current==0?'#f56c6c':'#ffffff'"
:activeStyle=
"
{
color: current==0?'#000000':'#ffffff',
fontWeight: 'bold',
transform: 'scale(1.05)'
}" :inactiveStyle="{
color: '#606266',
transform: 'scale(1)'
}" />
</view>
</view>
<swiper
class=
"swiper"
@
change=
"swiperChange"
:current=
"current"
:disable-touch=
"showEditBar"
>
<swiper-item
class=
"swiper-item"
>
<followPage
v-on:showEditBarR=
"showEditBarR"
v-on:goRecommend=
"goRecommend"
v-on:showEditR=
"showEditR"
ref=
"follow"
/>
</swiper-item>
<swiper-item
class=
"swiper-item"
>
<recommendVideoPage
ref=
"recommendVideo"
/>
</swiper-item>
</swiper>
</view>
</
template
>
<
script
>
import
common
from
'@/mixins/common'
;
import
followPage
from
"@/pages/recommend/follow.vue"
import
recommendVideoPage
from
"@/pages/recommend/recommendVideo.vue"
;
import
{
navigateTo
,
}
from
'@/utils/fun.js'
;
const
app
=
getApp
();
export
default
{
name
:
"recommend"
,
mixins
:
[
common
],
components
:
{
followPage
,
recommendVideoPage
},
data
()
{
return
{
current
:
1
,
tabIndex
:
1
,
tabs
:
[{
name
:
'追剧'
},
{
name
:
'推荐'
}],
showEditBar
:
false
,
showEdit
:
false
,
showTap
:
false
,
titleBarHeight
:
app
.
globalData
.
titleBarHeight
,
titleButtonWidth
:
app
.
globalData
.
titleButtonWidth
,
statusBarHeight
:
app
.
globalData
.
statusBarHeight
,
}
},
onLoad
(
e
)
{},
watch
:
{
showEditBar
:
{
handler
(
newValue
,
oldValue
)
{
this
.
$refs
.
follow
.
changeEditStyle
(
newValue
);
}
},
},
methods
:
{
hide
()
{
this
.
$refs
.
recommendVideo
.
stop
();
},
show
()
{
this
.
$nextTick
(()
=>
{
// 延迟渲染,否则位置错乱
this
.
showTap
=
true
})
if
(
this
.
current
==
0
)
{
this
.
$refs
.
follow
.
show
();
this
.
$refs
.
recommendVideo
.
stop
();
this
.
$emit
(
"changeBottomBarColor"
,
false
);
}
else
if
(
this
.
current
==
1
)
{
this
.
$refs
.
recommendVideo
.
show
();
this
.
$emit
(
"changeBottomBarColor"
,
true
);
}
},
handleChange
(
event
)
{
this
.
current
=
event
.
index
;
this
.
show
()
},
swiperChange
(
event
)
{
this
.
current
=
event
.
detail
.
current
this
.
show
()
},
showEditBarR
(
b
)
{
this
.
showEditBar
=
b
this
.
$emit
(
"showEditBarH"
,
b
);
},
showEditR
(
b
)
{
this
.
showEdit
=
b
},
fullChoice
()
{
this
.
$refs
.
follow
.
fullChoice
()
},
noChoice
()
{
this
.
$refs
.
follow
.
noChoice
()
},
deleteCollect
()
{
this
.
$refs
.
follow
.
deleteCollect
()
},
goRecommend
()
{
this
.
current
=
1
},
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.body
{
background
:
white
;
width
:
100%
;
height
:
100%
;
}
.tabContainer
{
width
:
100%
;
position
:
absolute
;
z-index
:
100
;
display
:
flex
;
align-items
:
center
;
overflow
:
hidden
;
justify-content
:
center
;
}
.swiper
{
height
:
100%
;
}
.recommendTitle
{}
</
style
>
\ No newline at end of file
vedio/pages/recommend/recommendVideo.vue
deleted
100644 → 0
View file @
8543445a
<
template
>
<view
class=
"body"
>
<swiper
class=
"swiper"
circular
@
change=
"swiperChange"
:current=
"current"
:vertical=
"true"
duration=
"300"
>
<swiper-item
v-for=
"(list, index) in displaySwiperList"
:key=
"index"
>
<view
v-if=
"Math.abs(displayIndex-index)==0"
style=
"height: 100%;"
@
click=
"tapVideoHover()"
>
<!--
<video
v-if=
"Math.abs(displayIndex-index)==0"
:id=
"''+list.vedioId"
:controls=
"controls"
:autoplay=
"true"
:isplay=
"true"
play-btn-position=
"center"
:loop=
"!isplay"
@
ended=
"ended"
@
controlstoggle=
"controlstoggle"
:show-fullscreen-btn=
"false"
:poster=
"list.coverImage"
:show-loading=
"true"
@
click=
"tapVideoHover()"
:enable-progress-gesture=
"false"
class=
"tsvideo"
:src=
"list.recommendUrl"
object-fit=
"cover"
/>
-->
<tt-video-player
v-if=
"Math.abs(displayIndex-index)==0"
:id=
"list.vedioId"
:album-id=
"list.douyinAlbumId"
:episode-id=
"list.douyinEpisodeId"
:cloud-type=
"1"
version=
"1"
object-fit=
"contain"
:controls=
"controls"
:poster=
"data.coverImage"
:loop=
"!isplay"
:autoplay=
"true"
:enable-progress-gesture=
"false"
:show-loading=
"true"
@
play=
"startPlay"
:show-fullscreen-btn=
"false"
@
controlstoggle=
"controlstoggle"
@
ended=
"ended"
/>
</view>
<view
v-if=
"!isqp"
class=
"userInfo flex"
>
<!-- 点赞 -->
<view
class=
"flex"
style=
"opacity: 0.9; margin-top: 10rpx;"
>
<image
@
click
.
stop=
"collect(list.vedioId,index)"
v-if=
"list.collect==0"
src=
"@/static/home_collect_img_0.png"
/>
<image
@
click
.
stop=
"cancelCollect(list.vedioId,index)"
v-if=
"list.collect==1"
src=
"@/static/home_collect_img_1.png"
/>
<text
style=
"margin-top: 110rpx;color: #FFFFFF;font-size: 26rpx; text-align: center;font-weight: bold;"
:class=
"
{'likeNumActive':list.collect!=0}">
{{
list
.
hot
}}
</text>
</view>
<!-- 分享 -->
<view
v-show=
"false"
class=
"flex"
style=
"opacity: 0.9; margin-top: 10rpx;"
>
<image
src=
"@/static/video/share-fill.png"
/>
<text
style=
"margin-top: 110rpx; color: #FFFFFF;font-size: 26rpx; text-align: center; font-weight: bold;"
>
分享
</text>
<button
open-type=
"share"
style=
"position: absolute;;background: none; width: 80rpx; height: 80rpx; right: 10rpx;"
@
click
.
stop=
"reShare"
></button>
</view>
</view>
<!-- 最底下的文字部分 -->
<view
v-if=
"!isqp"
class=
"contentcd flex"
@
click
.
stop=
"detail(list)"
>
<text
class=
"userName"
>
{{
list
.
title
}}
</text>
<text
class=
"words"
>
{{
'第'
+
list
.
recommendIndex
+
'集'
}}
</text>
<view
class=
"wordss2"
>
<image
src=
"@/static/video/layers.png"
/>
<text
class=
"wordss"
>
{{
'共'
+
list
.
vedioTotal
+
'集'
+
((
list
.
completeStatus
==
0
)?
' 已完结'
:
' 更新中'
)
}}
</text>
<text
class=
"wordsss"
>
{{
(
list
.
completeStatus
==
0
)?
'下一集'
:
'看全部'
}}
</text>
</view>
</view>
</swiper-item>
</swiper>
</view>
</
template
>
<
script
>
import
common
from
'@/mixins/common'
;
import
{
navigateTo
,
}
from
'@/utils/fun.js'
;
let
audo
=
uni
.
createInnerAudioContext
()
export
default
{
name
:
"recommendVideo"
,
mixins
:
[
common
],
data
()
{
return
{
controls
:
false
,
// 控制按钮
originList
:
[],
// 源数据
displaySwiperList
:
[],
// swiper需要的数据
displayIndex
:
0
,
// 用于显示swiper的真正的下标数值只有:0,1,2。
originIndex
:
0
,
// 记录源数据的下标
windowWidth
:
0
,
windowHeight
:
0
,
current
:
0
,
oid
:
0
,
isplay
:
true
,
// 是否自动播放下一个视频
playCount
:
2
,
// 剩余多少视频加载视频列表
isqp
:
false
,
// 是否全屏
urls
:
"https://xjc.demo.hongcd.com/api/video/videoRecommend?page=1&uid=0"
,
isFirstLoad
:
true
,
videoContext
:
null
}
},
onLoad
(
e
)
{
this
.
windowWidth
=
uni
.
getSystemInfoSync
().
windowWidth
this
.
windowHeight
=
uni
.
getSystemInfoSync
().
windowHeight
},
methods
:
{
reShare
()
{
var
href
=
''
// #ifdef H5
uni
.
setClipboardData
({
data
:
href
,
complete
()
{
uni
.
showToast
({
title
:
"分享连接已复制到剪贴板"
})
}
})
// #endif
// #ifdef MP-WEIXIN
// #endif
// #ifdef APP-PLUS
uni
.
share
({
provider
:
"weixin"
,
scene
:
"WXSenceTimeline"
,
type
:
0
,
href
:
href
,
title
:
'分享标题'
,
summary
:
'分享总结'
,
imageUrl
:
''
,
success
:
function
(
res
)
{
console
.
log
(
"success:"
+
JSON
.
stringify
(
res
));
},
fail
:
function
(
err
)
{
console
.
log
(
"fail:"
+
JSON
.
stringify
(
err
));
},
})
// #endif
},
show
()
{
if
(
this
.
isFirstLoad
)
{
this
.
isFirstLoad
=
false
this
.
queryList
()
}
else
{
this
.
videoContext
?.
play
()
}
},
stop
()
{
// audo.pause()
this
.
videoContext
?.
pause
()
},
queryList
()
{
// 推荐
this
.
post
({
url
:
'/vedio/autoList'
,
showLoading
:
false
,
success
:
({
data
})
=>
{
var
msg
=
data
.
list
for
(
let
i
=
0
;
i
<
msg
.
length
;
i
++
)
{
this
.
originList
.
push
(
msg
[
i
])
}
this
.
initSwiperData
();
}
});
},
tapVideoHover
()
{
if
(
this
.
controls
)
return
this
.
isqp
=
true
this
.
controls
=
true
},
startPlay
()
{
if
(
tt
.
canIUse
(
'preloadResourceVideo'
))
{
this
.
preloadplaylet
()
}
},
preloadplaylet
()
{
var
preIndex
=
0
if
(
this
.
displayIndex
<
2
)
{
preIndex
=
this
.
displayIndex
+
1
}
else
{
preIndex
=
0
}
// 抖音预加载
tt
.
preloadResourceVideo
({
albumId
:
this
.
displaySwiperList
[
preIndex
].
douyinAlbumId
,
episodeId
:
this
.
displaySwiperList
[
preIndex
].
douyinEpisodeId
,
cloudType
:
1
,
version
:
1
,
success
:
()
=>
{
console
.
log
(
"短剧预加载成功"
+
this
.
displaySwiperList
[
preIndex
].
douyinEpisodeId
);
},
fail
:
(
error
)
=>
{
console
.
log
(
"短剧预加载失败"
,
error
);
},
});
},
ended
()
{
// 1.播放当前视频结束时触发,自动切换下一个视频
if
(
this
.
isplay
)
{
if
(
this
.
displayIndex
<
2
)
{
this
.
current
=
this
.
displayIndex
+
1
}
else
{
this
.
current
=
0
}
console
.
log
(
'显示swiper Index:'
,
this
.
displayIndex
)
}
},
/**
* 初始一个显示的swiper数据
* @originIndex 从源数据的哪个开始显示默认0,如从其他页面跳转进来,要显示第n个,这个参数就是他的下标
*/
initSwiperData
(
originIndex
=
this
.
originIndex
)
{
console
.
log
(
'--------当前数据 Index:'
,
originIndex
)
const
originListLength
=
this
.
originList
.
length
;
// 源数据长度
const
displayList
=
[];
displayList
[
this
.
displayIndex
]
=
this
.
originList
[
originIndex
];
displayList
[
this
.
displayIndex
-
1
==
-
1
?
2
:
this
.
displayIndex
-
1
]
=
this
.
originList
[
originIndex
-
1
==
-
1
?
originListLength
-
1
:
originIndex
-
1
];
displayList
[
this
.
displayIndex
+
1
==
3
?
0
:
this
.
displayIndex
+
1
]
=
this
.
originList
[
originIndex
+
1
==
originListLength
?
0
:
originIndex
+
1
];
this
.
displaySwiperList
=
displayList
;
if
(
this
.
oid
>=
this
.
originList
.
length
)
{
this
.
oid
=
0
}
if
(
this
.
oid
<
0
)
{
this
.
oid
=
this
.
originList
.
length
-
1
}
console
.
log
(
'++++++++++++上一条播放数据 Index:'
,
this
.
oid
)
// audo.pause()
this
.
videoContext
=
uni
.
createVideoContext
(
""
+
this
.
originList
[
this
.
oid
].
vedioId
,
this
)
this
.
videoContext
.
pause
()
this
.
videoContext
.
stop
()
setTimeout
(()
=>
{
console
.
log
(
'qqqqqq:'
,
this
.
originList
[
originIndex
].
vedioId
)
this
.
videoContext
=
uni
.
createVideoContext
(
""
+
this
.
originList
[
originIndex
].
vedioId
,
this
)
this
.
videoContext
.
play
()
},
500
)
var
pCount
=
this
.
originList
.
length
-
this
.
playCount
if
(
originIndex
==
pCount
)
{
this
.
queryList
()
}
},
/**
* swiper滑动时候
*/
swiperChange
(
event
)
{
const
{
current
}
=
event
.
detail
;
const
originListLength
=
this
.
originList
.
length
;
// 源数据长度
// =============向后==========
if
(
this
.
displayIndex
-
current
==
2
||
this
.
displayIndex
-
current
==
-
1
)
{
this
.
originIndex
=
this
.
originIndex
+
1
==
originListLength
?
0
:
this
.
originIndex
+
1
;
this
.
displayIndex
=
this
.
displayIndex
+
1
==
3
?
0
:
this
.
displayIndex
+
1
;
//console.log('+++',this.originIndex)
this
.
oid
=
this
.
originIndex
-
1
this
.
initSwiperData
(
this
.
originIndex
);
}
// ======如果两者的差为-2或者1则是向前滑动============
else
if
(
this
.
displayIndex
-
current
==
-
2
||
this
.
displayIndex
-
current
==
1
)
{
this
.
originIndex
=
this
.
originIndex
-
1
==
-
1
?
originListLength
-
1
:
this
.
originIndex
-
1
;
this
.
displayIndex
=
this
.
displayIndex
-
1
==
-
1
?
2
:
this
.
displayIndex
-
1
;
//console.log('---',this.originIndex)
this
.
oid
=
this
.
originIndex
+
1
this
.
initSwiperData
(
this
.
originIndex
);
}
this
.
controls
=
false
this
.
isqp
=
false
},
controlstoggle
(
e
)
{
if
(
!
this
.
controls
)
return
this
.
isqp
=
e
.
detail
.
show
},
detail
(
detail
)
{
navigateTo
(
`/pagesC/video/ttVideoDetail?data=`
+
encodeURIComponent
(
JSON
.
stringify
(
detail
))
+
`&playNext=1`
)
},
collect
(
vedioId
,
index
)
{
this
.
originList
[
index
].
collect
=
1
// 收藏
this
.
post
({
url
:
'/vedio/collect'
,
data
:
{
vedioId
},
showLoading
:
false
,
success
:
({
data
})
=>
{
uni
.
showToast
({
title
:
"收藏成功"
})
}
});
},
cancelCollect
(
vedioId
,
index
)
{
this
.
originList
[
index
].
collect
=
0
// 取消收藏
this
.
post
({
url
:
'/vedio/cancelCollect'
,
data
:
{
vedioId
},
showLoading
:
false
,
success
:
({
data
})
=>
{
uni
.
showToast
({
title
:
"取消收藏"
})
}
});
},
loginTips
()
{
uni
.
showModal
({
title
:
'温馨提示'
,
content
:
'请先登录'
,
showCancel
:
true
,
confirmText
:
"登录"
,
success
:
function
(
res
)
{
if
(
res
.
confirm
)
{
}
else
if
(
res
.
cancel
)
{
}
}
});
},
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.body
{
background
:
#000000
;
width
:
100%
;
height
:
100%
;
}
.swiper
{
height
:
100%
;
}
.userInfo
{
position
:
absolute
;
z-index
:
99
;
bottom
:
30%
;
right
:
10px
;
width
:
90rpx
;
flex-direction
:
column
;
image
{
width
:
70rpx
;
height
:
70rpx
;
position
:
absolute
;
right
:
10rpx
;
}
}
.likeIco
,
.shareIco
{
width
:
60rpx
;
height
:
60rpx
;
margin-top
:
15px
;
}
.likeNum
,
.shareTex
{
color
:
#ffffff
;
font-size
:
30rpx
;
text-align
:
center
;
margin
:
5px
;
}
.likeNumActive
{
color
:
red
;
}
.contentcd
{
z-index
:
99
;
width
:
100%
;
position
:
absolute
;
bottom
:
0
;
color
:
#ffffff
;
flex-direction
:
column
;
align-items
:
flex-start
;
}
.userName
{
font-size
:
36rpx
;
color
:
#ffffff
;
margin-left
:
10rpx
;
}
.wordss
{
font-size
:
30rpx
;
color
:
#ffffff
;
margin-left
:
10rpx
;
}
.wordss2
{
width
:
100%
;
height
:
80rpx
;
opacity
:
0
.6
;
background
:
black
;
display
:
flex
;
flex-direction
:
row
;
align-items
:
center
;
margin-top
:
20rpx
;
image
{
margin-left
:
10rpx
;
width
:
30rpx
;
height
:
30rpx
;
}
.wordsss
{
margin-right
:
10rpx
;
margin-left
:
auto
;
font-size
:
26rpx
;
color
:
#ffffff
;
padding
:
4rpx
12rpx
;
border-radius
:
30rpx
;
background
:
darkgrey
;
}
}
.words
{
margin-top
:
20rpx
;
margin-left
:
10rpx
;
font-size
:
30rpx
;
color
:
#ffffff
;
}
.tsvideo
{
width
:
100%
;
height
:
100%
;
animation
:
showDivAni
1s
1
;
}
@keyframes
showDivAni
{
0
%
{
opacity
:
0
;
}
100
%
{
opacity
:
1
;
}
}
</
style
>
\ No newline at end of file
vedio/pagesA/search/search.vue
0 → 100644
View file @
f2913405
<
template
>
<view
class=
"container"
>
<view
class=
"search-head"
>
<view
class=
"search-bar"
>
<image
style=
"width: 40rpx; height: 40rpx"
src=
"@/static/search.png"
></image>
<input
class=
"inputkeyword"
type=
"text"
placeholder=
"请输入搜索剧集"
onchange=
"showChangePrompt"
:value=
"keyword"
/>
<image
v-if=
"keyword!=''"
@
click=
"clearWord"
style=
"width: 36rpx; height: 36rpx"
src=
"@/static/search.png"
></image>
</view>
<text
class=
"searchbutton"
@
click=
"getsearch"
>
搜索
</text>
</view>
<z-paging
class=
"item-list"
>
<view>
<view
class=
"search-item-wrap"
v-if=
"searchList.length>0 && !showEmpty"
>
<view
class=
"search-item-top"
>
<text
class=
"item-title"
>
历史搜索
</text>
<image
@
click=
"clearHistory"
style=
"width: 40rpx; height: 40rpx"
src
"@/
static
/
video
/
ic_delete
.
png
"
></image>
</view>
<view
class=
"search-item-bottom"
>
<block
v-for=
"(item, index) in searchList"
:key=
"index"
>
<text
class=
"search-item"
@
click=
"clickHistory(item)"
>
{{
item
}}
</text>
</block>
</view>
</view>
</view>
<view>
<view
class=
"emptyView"
if=
"showEmpty"
>
<text
style=
"font-size: 30rpx;"
>
暂无搜索结果
</text>
</view>
</view>
<view
v-if=
"topList.length>0 && dataList.length==0"
class=
"flex"
>
<text
class=
"item-title"
>
{{
showEmpty
?
'猜你喜欢'
:
'今日热门'
}}
</text>
<view
class=
"item-list-column"
>
<block
v-for=
"(item, index) in topList"
:key=
"index"
>
<view
class=
"product-item-column"
@
click=
"handleListItem(item)"
>
<image
class=
"item-list-img3"
:src=
"item.coverImage"
></image>
<view
class=
"item-list-bottom"
>
<view>
<image
class=
"item-list-bottom-img"
src=
"../../assets/images/ic_index_play.png"
>
</image>
<text
style=
"margin-left: 4rpx; color: white; font-size: 24rpx"
>
{{
item
.
showNum
}}
</text>
</view>
<text
style=
"margin-left: 4rpx; color: white; font-size: 24rpx"
>
全
{{
item
.
vedioTotal
}}
集
</text>
</view>
<text
style=
"font-size: 24rpx; color: black"
>
{{
item
.
title
}}
</text>
</view>
</block>
</view>
</view>
<view
class=
"item-content"
>
<view
class=
"item-list-column"
>
<block
v-for=
"(item, index) in dataList"
:key=
"index"
>
<view
class=
"pack-item"
@
click=
"handleListItem(item)"
>
<image
class=
"images"
:src=
"item.coverImage"
/>
<view
class=
"pack-item-cloumn"
>
<text
class=
"text"
>
{{
item
.
title
}}
</text>
<text
class=
"text3"
>
{{
item
.
vedioDesc
==
''
?
'已看'
+
item
.
seeIndex
+
'集/共'
+
item
.
vedioTotal
+
'集'
:
item
.
vedioDesc
}}
</text>
<text
class=
"text4"
>
{{
item
.
orderTagsStr
}}
</text>
</view>
</view>
</block>
</view>
</view>
</z-paging>
</view>
</
template
>
<
script
>
import
common
from
'@/mixins/common'
;
import
{
navigateTo
,
message
,
alert
,
loading
}
from
'@/utils/fun.js'
;
export
default
{
name
:
'search'
,
mixins
:
[
common
],
data
()
{
return
{
dataList
:
[],
topList
:
[],
searchList
:
[],
keyword
:
''
,
showEmpty
:
false
,
searchKey
:
'SEARCH_HISTORY_WORDS'
}
},
mounted
()
{
this
.
getHistorySearchWords
()
this
.
getOrders
()
},
methods
:
{
toSearch
()
{
let
that
=
this
this
.
post
({
url
:
'/vedioV1/orders'
,
data
:
{
words
:
that
.
keyword
},
showLoading
:
false
,
success
:
({
data
})
=>
{
that
.
dataList
=
data
.
list
if
(
that
.
dataList
.
length
==
0
)
{
that
.
showEmpty
=
true
}
},
fail
:
()
=>
{
that
.
dataList
=
[]
}
});
},
getOrders
()
{
let
that
=
this
this
.
post
({
url
:
'/vedioV1/orders'
,
showLoading
:
false
,
success
:
({
data
})
=>
{
that
.
topList
=
data
.
list
},
fail
:
()
=>
{
that
.
topList
=
[]
}
});
},
showChangePrompt
(
e
)
{
this
.
keyword
=
e
.
value
},
clickHistory
(
word
)
{
this
.
keyword
=
word
this
.
getsearch
()
},
getsearch
()
{
if
(
this
.
keyword
==
''
)
{
message
({
fail
:
'请输入搜索内容'
})
return
}
this
.
toSearch
()
this
.
saveSearchWord
(
this
.
keyword
)
},
clearWord
()
{
this
.
keyword
=
''
this
.
dataList
=
[]
this
.
showEmpty
=
false
},
handleListItem
(
item
)
{
navigateTo
(
`/pagesC/ttvideo/ttVideoDetail?data=`
+
encodeURIComponent
(
JSON
.
stringify
(
item
))
+
'&tt_album_id='
+
item
.
douyinAlbumId
+
'&tt_episode_id='
+
item
.
douyinEpisodeId
);
},
saveSearchWord
(
word
)
{
// 校验是否保存过,保存过不保存
for
(
var
i
=
0
;
i
<
this
.
searchList
.
length
;
i
++
)
{
if
(
this
.
searchList
[
i
]
==
word
)
return
}
// 保存搜索数据
let
that
=
this
that
.
searchList
.
push
(
word
)
uni
.
setStorage
({
key
:
that
.
searchKey
,
data
:
that
.
setArrToClipStr
(
that
.
searchList
),
success
:
function
(
data
)
{
that
.
getHistorySearchWords
()
},
fail
:
function
()
{}
})
},
getHistorySearchWords
()
{
let
that
=
this
uni
.
getStorage
({
key
:
that
.
searchKey
,
success
:
function
(
data
)
{
if
(
data
==
''
||
data
==
undefined
)
{
that
.
searchList
=
[]
}
else
{
that
.
searchList
=
[]
that
.
searchList
=
that
.
getArrfromClipStr
(
data
)
}
},
fail
:
function
()
{
that
.
searchList
=
[]
}
})
},
clearHistory
()
{
let
that
=
this
uni
.
removeStorage
({
key
:
that
.
searchKey
,
success
:
function
(
data
)
{
that
.
searchList
=
[]
},
fail
:
function
(
data
,
code
)
{
that
.
searchList
=
[]
}
})
},
setArrToClipStr
(
strArr
)
{
let
clipStr
=
''
for
(
var
i
=
0
;
i
<
strArr
.
length
;
i
++
)
{
clipStr
+=
(
strArr
[
i
]
+
','
)
}
return
clipStr
},
getArrfromClipStr
(
clipStr
)
{
let
result
=
clipStr
.
split
(
','
)
let
resultArr
=
[]
for
(
var
i
=
0
;
i
<
result
.
length
;
i
++
)
{
if
(
result
[
i
]
==
''
)
continue
resultArr
.
push
(
result
[
i
])
}
return
resultArr
}
}
}
</
script
>
<
style
lang=
"less"
>
.container {
background-color: #ffffff;
display: flex;
height: 100%;
flex-direction: column;
}
.item-list {
display: flex;
flex-direction: column;
background-color: aqua;
height: 92%;
flex: 1;
}
.pack-item {
margin-top: 10rpx;
width: 100%;
height: 260rpx;
position: relative;
margin-bottom: 10rpx;
margin-left: 14rpx;
margin-right: 14rpx;
display: flex;
flex-direction: row;
.images {
width: 180rpx;
height: 260rpx;
border-radius: 16rpx;
}
.pack-item-cloumn {
margin-left: 20rpx;
flex-direction: column;
.text {
margin-top: 20rpx;
font-size: 34rpx;
color: black;
font-weight: bold;
}
.text2 {
margin-top: 16rpx;
font-size: 24rpx;
color: #000000;
}
.text3 {
margin-top: 16rpx;
font-size: 24rpx;
color: #000000;
}
.text4 {
margin-top: 16rpx;
font-size: 22rpx;
color: gray;
}
}
}
.search-head {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
height: 8%;
}
.search-bar {
border-radius: 60rpx;
margin: 10rpx 15rpx;
padding: 15rpx 30rpx;
width: 80%;
background-color: #f2f2f2;
display: flex;
flex-direction: row;
align-items: center;
}
.inputkeyword {
margin-left: 30rpx;
}
.searchbutton {
text-align: center;
color: #000000;
font-size: 30rpx;
width: 20%;
margin-right: 10rpx;
}
.emptyView {
width: 100%;
height: 200rpx;
display: flex;
justify-content: center;
align-items: center;
}
.item-list-column {
width: 100%;
margin: 10rpx;
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
.item-list-bottom {
background-color: #808080;
width: 100%;
display: flex;
justify-content: space-between;
margin-top: 280rpx;
height: 40rpx;
border-radius: 10rpx;
align-content: center;
opacity: 0.7;
}
.item-list-bottom-img {
object-fit: fill;
height: 30rpx;
width: 30rpx;
margin-left: 4rpx;
margin-top: 4rpx;
}
.product-item-column {
width: 31%;
margin-left: 8rpx;
height: 390rpx;
display: flex;
flex-direction: column;
margin-bottom: 10rpx;
}
.item-list-img3 {
position: absolute;
width: 100%;
object-fit: cover;
height: 320rpx;
border-radius: 10rpx;
}
.item-title {
margin-left: 20rpx;
margin-top: 20rpx;
margin-bottom: 20rpx;
color: #000000;
font-size: 36rpx;
font-weight: 400;
}
.search-item-wrap {
display: flex;
flex-direction: column;
}
.search-item-top {
width: 100%;
padding-right: 20rpx;
display: flex;
flex-direction: row;
align-items: center;
flex-wrap: wrap;
justify-content: space-between;
}
.search-item-bottom {
display: flex;
flex-wrap: wrap;
}
.search-item {
border: 4rpx;
height: 60rpx;
margin: 8rpx 15rpx;
border-radius: 60rpx;
border: 0rpx solid #f8f8ff;
background-color: #f8f8ff;
padding: 10rpx 20rpx;
}
</
style
>
\ No newline at end of file
vedio/pagesA/task/task.vue
0 → 100644
View file @
f2913405
<
template
>
<view
class=
"container"
>
<view
class=
"item-content"
>
<view
class=
"flex1 task-title-wrap"
>
<text
class=
"task-title"
>
签到任务
</text>
<text
class=
"task-label"
>
领取看点免费看
</text>
<text
class=
"sign-rule"
@
click=
"showRule"
>
规则
</text>
</view>
<view
class=
"task-line"
></view>
<view
class=
"task-wrap flex"
>
<view
class=
"flex1"
style=
"justify-content: space-between"
>
<block
v-for=
"(item,key) in signList"
:key=
"key"
>
<view
class=
"flex"
>
<view
class=
"item.compleled?'sign-item':'sign-item2'"
>
<image
:src=
"item.compleled?signOkImg:signNoneImg"
></image>
<text
class=
"text1"
>
{{
'+'
+
item
.
reward
}}
</text>
</view>
<text
:style=
"item.text == '今天'?'color:#ffa500;':''"
>
{{
item
.
text
}}
</text>
</view>
</block>
</view>
<text
:class=
"signBtnStyle"
@
click=
"sign"
>
{{
signData
.
buttonText
}}
</text>
</view>
</view>
<view
class=
"item-content"
>
<block
v-for=
"(item,key) in taskList"
:key=
"key"
>
<view
class=
"flex1 task-title-wrap"
>
<text
class=
"task-title"
>
{{
item
.
title
}}
</text>
<text
v-if=
"item.title == '日常任务'"
class=
"task-label"
>
每日0点重置
</text>
</view>
<view
class=
"task-line"
></view>
<view
class=
"flex task-wrap"
>
<block
v-for=
"(item2,key) in item.taskList"
:key=
"key"
>
<view
class=
"flex1"
style=
"width: 96%;justify-content: space-between;margin-top: 10rpx;margin-bottom: 20rpx;"
>
<view
class=
"flex"
style=
"width: 70%; align-items: flex-start"
>
<view
class=
"flex1"
>
<text
style=
"color: #000000;font-size: 30rpx;font-weight: bold;margin-right: 10rpx;"
>
{{
item2
.
title
}}
</text>
<image
style=
"width: 36rpx; height: 36rpx; margin: 0 10rpx"
:src=
"taskCoinImg"
>
</image>
<text
style=
" color: #f84a57;font-size: 30rpx;font-weight: bold;"
>
{{
'+'
+
item2
.
rewardPoint
}}
</text>
</view>
<view>
<text
style=
"font-size: 24rpx"
>
{{
item2
.
content
}}
</text>
</view>
<view
class=
"flex1"
v-if=
"item2.runingMax>0"
style=
"margin-top: 10rpx"
>
<view
style=
"width: 120rpx"
>
<progress
style=
"stroke-width: 8rpx; color: #ffa500"
type=
"horizontal"
:percent=
" item2.runing / item2.runingMax * 100 "
/>
</view>
<text
style=
"margin-left: 20rpx; font-size: 20rpx"
>
{{
item2
.
runing
+
'/'
+
item2
.
runingMax
+
' '
+
item2
.
runingMaxText
}}
</text>
</view>
</view>
<text
:class=
"(item2.status==0)?'task-btn':((item2.status==1)?'task-btn2':'task-btn3')"
@
click=
"doTask(item2)"
>
{{
item2
.
buttonText
}}
</text>
</view>
</block>
</view>
</block>
</view>
<!--
<reward-popup
v-if=
"showRewardPopup"
:dot=
"currentDot"
@
close=
"rewardClose"
></reward-popup>
<signsuc-popup
v-if=
"showSignPopup"
:dot=
"currentDot"
@
close=
"signClose"
></signsuc-popup>
-->
</view>
</
template
>
<
script
>
import
common
from
'@/mixins/common'
;
import
{
message
,
navigateBack
,
navigateTo
,
redirectTo
}
from
'@/utils/fun'
;
export
default
{
name
:
'task'
,
mixins
:
[
common
],
data
()
{
return
{
signData
:
''
,
signList
:
[],
taskList
:
[],
showRewardPopup
:
false
,
showSignPopup
:
false
,
currentDot
:
''
,
signBtnStyle
:
'sign-btn'
,
signOkImg
:
'https://mints-web.oss-cn-beijing.aliyuncs.com/images/ic_sign_receive.png'
,
signNoneImg
:
'https://mints-web.oss-cn-beijing.aliyuncs.com/images/ic_sign_unreceive.png'
,
taskCoinImg
:
'https://mints-web.oss-cn-beijing.aliyuncs.com/images/ic_sign_unreceive_little.png'
,
signRule
:
'1、每7天为一个签到周期,用户连续签满7天,完成一个签到周期,下次签到开始重新计算新的签到周期。
\
r
\
n2、用户每次签到均可获得相应的奖励连续签到7天可获得更高奖励。
\
r
\
n3、若途中漏签,则从第一天开始重新计算新的签到周期。
\
r
\
n4、签到及任务赠送看点的有效期均为5天,过期自动作废,请及时使用。'
}
},
mounted
()
{
// this.getSignList()
// this.getTaskList()
},
methods
:
{
getSignList
()
{
let
that
=
this
getSignPageMsg
()
.
then
((
data
)
=>
{
let
newData
=
JSON
.
parse
(
data
)
that
.
signData
=
newData
that
.
signList
=
[]
that
.
signList
=
newData
.
list
if
(
that
.
signData
.
buttonStatus
==
0
||
that
.
signData
.
buttonStatus
==
1
)
{
that
.
signBtnStyle
=
"sign-btn"
}
else
{
that
.
signBtnStyle
=
"sign-btn2"
}
})
.
catch
((
err
)
=>
{
$utils
.
showToast
(
'网络出小差了~'
)
})
},
getTaskList
()
{
// 任务信息
let
that
=
this
getTaskPageMsg
()
.
then
((
data
)
=>
{
let
newData
=
JSON
.
parse
(
data
)
that
.
taskList
=
newData
.
pageMsg
for
(
var
i
=
0
;
i
<
that
.
taskList
.
length
;
i
++
)
{
for
(
var
j
=
0
;
j
<
that
.
taskList
[
i
].
taskList
.
length
;
j
++
)
{
if
(
that
.
taskList
[
i
].
taskList
[
j
].
listCode
==
TaskConstant
.
openForHome
&&
that
.
taskList
[
i
].
taskList
[
j
].
status
==
0
)
{
that
.
isFromForHome
()
return
}
}
}
})
.
catch
((
err
)
=>
{
$utils
.
showToast
(
'网络出小差了~'
)
})
},
hasShortCut
(
taskId
)
{
let
that
=
this
shortcut
.
hasInstalled
({
success
:
function
()
{
$utils
.
showToast
(
'桌面图标已创建!'
)
that
.
reportCompleteTask
(
taskId
)
},
fail
:
function
()
{
that
.
createShortCut
(
taskId
)
}
})
},
createShortCut
(
taskId
)
{
let
that
=
this
// 创建桌面图标
shortcut
.
install
({
success
:
function
()
{
$utils
.
showToast
(
'创建桌面图标成功!'
)
that
.
reportCompleteTask
(
taskId
)
},
fail
:
function
(
data
,
code
)
{
$utils
.
showToast
(
'创建桌面图标失败!'
)
}
})
},
sign
()
{
let
buttonStatus
=
this
.
signData
.
buttonStatus
if
(
this
.
signData
==
''
||
this
.
signData
.
buttonStatus
==
2
)
{
return
}
if
(
this
.
signData
.
buttonStatus
==
0
)
{
let
item
=
this
.
signList
[
this
.
signData
.
todayMsgIndexInWeek
]
this
.
reportTaskPoint
(
item
,
true
)
return
}
let
rewardMoreType
=
this
.
signList
[
this
.
signData
.
todayMsgIndexInWeek
].
rewardMoreType
if
(
rewardMoreType
==
1
)
{
// TODO 看广告
$utils
.
showToast
(
'服务器繁忙,请稍后再试!'
)
}
else
if
(
ewardMoreType
==
2
)
{
// 分享
this
.
myShare
(
this
.
signList
[
this
.
signData
.
todayMsgIndexInWeek
])
}
},
reportTaskPoint
(
item
,
isSign
)
{
// 领取奖励
let
that
=
this
addTaskPoint
(
item
.
taskId
)
.
then
((
data
)
=>
{
if
(
isSign
)
{
that
.
currentDot
=
item
.
reward
that
.
getSignList
()
that
.
showSignPopup
=
true
}
else
{
that
.
currentDot
=
item
.
rewardPoint
that
.
getTaskList
()
that
.
showRewardPopup
=
true
}
})
.
catch
((
err
)
=>
{
console
.
log
(
err
)
$utils
.
showToast
(
'网络出小差了~'
)
})
},
reportCompleteTask
(
taskId
)
{
// 上报完成任务
let
that
=
this
reportCompleteMsg
(
taskId
)
.
then
((
data
)
=>
{
that
.
getSignList
()
that
.
getTaskList
()
})
.
catch
((
err
)
=>
{
$utils
.
showToast
(
'网络出小差了~'
)
})
},
showRule
()
{
uni
.
showModal
({
title
:
'签到规则'
,
content
:
this
.
signRule
,
showCancel
:
false
,
confirmColor
:
'#33dd44'
,
confirmText
:
'确定'
})
},
doTask
(
item
)
{
if
(
item
.
status
==
2
)
{
// 已领取金币
return
}
else
if
(
item
.
status
==
1
)
{
// 已完成任务,领取看点
this
.
reportTaskPoint
(
item
,
false
)
}
else
{
// 去完成任务
if
(
item
.
listCode
==
TaskConstant
.
seeVedioListPage
)
{
this
.
reportCompleteTask
(
item
.
taskId
)
router
.
push
({
uri
:
'/pages/Home'
})
}
else
if
(
item
.
listCode
==
TaskConstant
.
firstToHomePage
||
item
.
listCode
==
TaskConstant
.
seeVedio
||
item
.
listCode
==
TaskConstant
.
seeOneNewVedio
||
item
.
listCode
==
TaskConstant
.
compeleOneVedio
||
item
.
listCode
==
TaskConstant
.
compeleVedios
||
item
.
listCode
==
TaskConstant
.
completeSeeDays
)
{
router
.
push
({
uri
:
'/pages/Home'
})
}
else
if
(
item
.
listCode
==
TaskConstant
.
firstPay
||
item
.
listCode
==
TaskConstant
.
payBack
||
item
.
listCode
==
TaskConstant
.
completePay
)
{
router
.
push
({
uri
:
'/pages/Vip'
})
}
else
if
(
item
.
listCode
==
TaskConstant
.
saveToPhonePage
)
{
this
.
hasShortCut
(
item
.
taskId
)
}
else
if
(
item
.
listCode
==
TaskConstant
.
openForHome
)
{
router
.
push
({
uri
:
'/pages/Home'
})
}
else
if
(
item
.
listCode
==
TaskConstant
.
loginByMobie
)
{
router
.
push
({
uri
:
'/pages/Login'
})
}
else
if
(
item
.
listCode
==
TaskConstant
.
seeAd
)
{
// TODO 看广告
$utils
.
showToast
(
'服务器繁忙,请稍后再试!'
)
}
else
{
$utils
.
showToast
(
'服务器繁忙,请稍后再试!'
)
}
}
},
myShare
(
item
)
{
// TODO 分享
// let that = this
// share.share({
// type: 'text/html',
// data: '河狸刷剧',
// success: function(data) {
// that.signMoreReward(item)
// },
// fail: function(data, code) {
// console.log(`handling fail, code = ${code}`)
// }
// })
},
signMoreReward
(
item
)
{
// 签到-广告或者分享后领取更多
let
that
=
this
addTaskPointMore
(
item
.
taskId
)
.
then
((
data
)
=>
{
that
.
currentDot
=
item
.
reward
that
.
getSignList
()
that
.
showSignPopup
=
true
})
.
catch
((
err
)
=>
{
$utils
.
showToast
(
'网络出小差了~'
)
})
},
rewardClose
()
{
this
.
showRewardPopup
=
false
},
signClose
()
{
this
.
showSignPopup
=
false
},
isFromForHome
()
{
let
that
=
this
if
(
app
.
getInfo
().
source
.
type
==
'shortcut'
)
{
if
(
that
.
taskList
.
length
>
0
)
{
for
(
var
i
=
0
;
i
<
that
.
taskList
.
length
;
i
++
)
{
for
(
var
j
=
0
;
j
<
that
.
taskList
[
i
].
taskList
.
length
;
j
++
)
{
if
(
that
.
taskList
[
i
].
taskList
[
j
].
listCode
==
TaskConstant
.
openForHome
&&
that
.
taskList
[
i
].
taskList
[
j
].
status
==
0
)
{
that
.
reportCompleteTask
(
that
.
taskList
[
i
].
taskList
[
j
].
taskId
)
return
}
}
}
}
}
}
}
}
</
script
>
<
style
lang=
"less"
>
.container {
background: linear-gradient(#fcddba, #fff5ea);
flex: 1;
}
.item-content {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
margin-top: 30rpx;
}
.flex {
display: flex;
flex-direction: column;
align-items: center;
}
.flex1 {
display: flex;
flex-direction: row;
align-items: center;
}
.task-wrap {
width: 92%;
background-color: #ffffff;
border-radius: 12rpx;
margin-bottom: 30rpx;
}
.task-title-wrap {
width: 92%;
background-color: #ffffff;
border-radius: 12rpx;
height: 100rpx;
}
.task-line {
width: 85%;
height: 1rpx;
background: repeating-linear-gradient(to right,
transparent 15%,
#fcddba 20%,
transparent 25%);
/* background: linear-gradient(
to left,
transparent 0%,
transparent 50%,
#ffa500 50%,
#ffa500 100%
);
background-size: 10rpx 1rpx;
background-repeat: repeat-x; */
}
.task-title {
margin-left: 30rpx;
color: #fb4c39;
font-size: 32rpx;
font-weight: bold;
}
.task-label {
border-radius: 6rpx;
font-size: 20rpx;
height: 36rpx;
line-height: 36rpx;
background-color: #fef9ea;
border: 1rpx solid #fb3309;
color: #b67e17;
margin-left: 20rpx;
padding: 0 10rpx;
}
.sign-rule {
margin-left: auto;
background-color: #ffa500;
text-align: center;
font-size: 22rpx;
color: #ffffff;
padding-left: 26rpx;
padding-right: 20rpx;
height: 40rpx;
line-height: 40rpx;
border-top-left-radius: 40rpx;
border-bottom-left-radius: 40rpx;
}
.sign-btn {
color: #ffffff;
text-align: center;
border-radius: 80rpx;
font-size: 34rpx;
width: 90%;
height: 80rpx;
margin-top: 30rpx;
margin-bottom: 20rpx;
background: repeating-linear-gradient(to right, #fb6c3a, #fc473a);
}
.sign-btn2 {
color: #ffffff;
text-align: center;
border-radius: 80rpx;
font-size: 30rpx;
width: 90%;
height: 80rpx;
margin-top: 30rpx;
margin-bottom: 20rpx;
background-color: #dcdcdc;
}
.task-btn {
font-size: 26rpx;
color: #ffffff;
text-align: center;
border-radius: 70rpx;
background-color: #fb3309;
width: 180rpx;
height: 70rpx;
}
.task-btn2 {
color: #ffa500;
text-align: center;
font-size: 28rpx;
border: 1rpx solid #fb3309;
border-radius: 70rpx;
background-color: #ffffff;
width: 180rpx;
height: 70rpx;
}
.task-btn3 {
color: #808080;
text-align: center;
font-size: 28rpx;
border: 1rpx solid #808080;
border-radius: 70rpx;
background-color: #ffffff;
width: 180rpx;
height: 70rpx;
}
.sign-item {
padding: 10rpx 0;
width: 78rpx;
display: flex;
flex-direction: column;
align-items: center;
border-radius: 8rpx;
border: 1rpx solid #ffa500;
margin: 10rpx 0;
image {
width: 56rpx;
height: 56rpx;
}
.text1 {
margin-top: 4rpx;
color: #ffa500;
}
}
.sign-item2 {
padding: 10rpx 0;
width: 78rpx;
display: flex;
flex-direction: column;
align-items: center;
border-radius: 8rpx;
background-color: #fb3309;
border: 1rpx solid #fb3309;
margin: 10rpx 0;
image {
width: 56rpx;
height: 56rpx;
}
.text1 {
margin-top: 4rpx;
color: #ffa500;
}
}
</
style
>
\ No newline at end of file
vedio/public/MP_verify_TGYoypuXSpCliIAj.txt
deleted
100644 → 0
View file @
8543445a
TGYoypuXSpCliIAj
\ No newline at end of file
vedio/static/search.png
0 → 100644
View file @
f2913405
793 Bytes
vedio/static/video/ic_delete.png
0 → 100644
View file @
f2913405
508 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