Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mayi-mp-shop
Overview
Overview
Details
Activity
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
程默
mayi-mp-shop
Commits
905a5786
Commit
905a5786
authored
Apr 22, 2020
by
程智春
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
直播2.0
parent
b909156b
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
316 additions
and
11 deletions
+316
-11
src/api/liveing.js
+13
-0
src/components/livedModel/liveReplay.vue
+16
-0
src/components/livedModel/livedControls.vue
+1
-0
src/components/livedModel/livedExplainingCommodities.vue
+3
-0
src/components/livedModel/livedGoodsDia.vue
+1
-1
src/pages/index/index.vue
+1
-1
src/pages/live/index.vue
+15
-4
src/pages/liveList/index.vue
+257
-5
src/pages/lived/index.vue
+9
-0
static/images/chuangjian.png
+0
-0
No files found.
src/api/liveing.js
View file @
905a5786
...
@@ -36,5 +36,17 @@ export default {
...
@@ -36,5 +36,17 @@ export default {
//获取服务器时间戳
//获取服务器时间戳
queryServerTimeNow
(){
queryServerTimeNow
(){
return
requestGET
(
`
${
process
.
env
.
OLSHOP_URL
}
/liveBroadcastInfo/getServerTimeNow`
)
return
requestGET
(
`
${
process
.
env
.
OLSHOP_URL
}
/liveBroadcastInfo/getServerTimeNow`
)
},
// 根据号码查询主播创建直播权限状态
queryLivePermissions
(
options
){
return
requestPOST
(
`
${
process
.
env
.
OLSHOP_URL
}
/liveAnchor/getAuthorityByPhone`
,
options
)
},
//申请直播权限
applyAuthority
(
options
){
return
requestPOST
(
`
${
process
.
env
.
OLSHOP_URL
}
/liveAnchor/applyAuthority`
,
options
)
},
// 添加申请主播结果通知订阅消息
addLiveResultMsg
(
options
){
return
requestPOST
(
`
${
process
.
env
.
OLSHOP_URL
}
/broadcastReminderRecord/addLiveAnchorByCustomer`
,
options
)
}
}
}
}
\ No newline at end of file
src/components/livedModel/liveReplay.vue
0 → 100644
View file @
905a5786
<
template
>
<div
class=
"replay"
>
</div>
</
template
>
<
script
>
export
default
{
}
</
script
>
<
style
lang=
"scss"
scoped
>
</
style
>
\ No newline at end of file
src/components/livedModel/livedControls.vue
View file @
905a5786
...
@@ -447,6 +447,7 @@ export default {
...
@@ -447,6 +447,7 @@ export default {
overflow
:
hidden
;
overflow
:
hidden
;
bottom
:
0
;
bottom
:
0
;
right
:
-30px
;
right
:
-30px
;
pointer-events
:
none
;
.img
{
.img
{
position
:
absolute
;
position
:
absolute
;
bottom
:
0
;
bottom
:
0
;
...
...
src/components/livedModel/livedExplainingCommodities.vue
View file @
905a5786
...
@@ -51,6 +51,9 @@ export default {
...
@@ -51,6 +51,9 @@ export default {
watch
:
{
watch
:
{
updateGoods
()
{
updateGoods
()
{
console
.
log
(
this
.
goodsList
,
'---------------------------------46goodsList'
)
console
.
log
(
this
.
goodsList
,
'---------------------------------46goodsList'
)
this
.
goodsList
.
forEach
((
item
,
index
)
=>
{
this
.
$set
(
this
.
goodsList
[
index
],
'minPrice'
,
Number
(
item
.
minPrice
).
toFixed
(
2
))
})
console
.
log
(
this
.
firstCom
,
'this.firstCom----------'
)
console
.
log
(
this
.
firstCom
,
'this.firstCom----------'
)
if
(
this
.
firstCom
==
true
)
{
if
(
this
.
firstCom
==
true
)
{
this
.
list
=
[];
this
.
list
=
[];
...
...
src/components/livedModel/livedGoodsDia.vue
View file @
905a5786
...
@@ -83,7 +83,7 @@ export default {
...
@@ -83,7 +83,7 @@ export default {
updateGoods
(){
updateGoods
(){
this
.
list
=
this
.
goodsList
;
this
.
list
=
this
.
goodsList
;
this
.
list
.
forEach
((
item
,
index
)
=>
{
this
.
list
.
forEach
((
item
,
index
)
=>
{
item
.
minPrice
=
Number
(
item
.
minPrice
);
item
.
minPrice
=
Number
(
item
.
minPrice
)
.
toFixed
(
2
)
;
});
});
},
},
},
},
...
...
src/pages/index/index.vue
View file @
905a5786
...
@@ -312,7 +312,7 @@ export default {
...
@@ -312,7 +312,7 @@ export default {
let
params
=
''
let
params
=
''
if
(
querys
.
length
>
midNum
){
if
(
querys
.
length
>
midNum
){
if
(
querys
[
midNum
+
2
]){
if
(
querys
[
midNum
+
2
]){
params
+=
`&spokesmanGroupId=
${
querys
[
midNum
-
1
]}
&spokesmanShopId=
${
midNum
}
&spokesmanRelId=
${
midNum
+
1
}
&userId=
${
querys
[
midNum
+
2
]}
`
params
+=
`&spokesmanGroupId=
${
querys
[
midNum
-
1
]}
&spokesmanShopId=
${
querys
[
midNum
]}
&spokesmanRelId=
${
query
[
midNum
+
1
]
}
&userId=
${
querys
[
midNum
+
2
]}
`
}
else
{
}
else
{
params
+=
`&spokesmanGroupId=
${
querys
[
midNum
-
1
]}
&spokesmanShopId=
${
querys
[
midNum
]}
&spokesmanRelId=
${
querys
[
midNum
+
1
]}
`
params
+=
`&spokesmanGroupId=
${
querys
[
midNum
-
1
]}
&spokesmanShopId=
${
querys
[
midNum
]}
&spokesmanRelId=
${
querys
[
midNum
+
1
]}
`
}
}
...
...
src/pages/live/index.vue
View file @
905a5786
...
@@ -19,6 +19,7 @@
...
@@ -19,6 +19,7 @@
@
statechange=
"statechange"
@
statechange=
"statechange"
@
error=
"binderror"
@
error=
"binderror"
@
netstatus=
"bindnetstatus"
@
netstatus=
"bindnetstatus"
v-if=
"refreshLive"
/>
/>
<image
class=
"bg-img"
v-if=
"isBgImg"
:src=
"liveInfo.coverUrl"
mode=
"aspectFill"
alt=
""
></image>
<image
class=
"bg-img"
v-if=
"isBgImg"
:src=
"liveInfo.coverUrl"
mode=
"aspectFill"
alt=
""
></image>
<div
class=
"content"
:style=
"
{'padding-top':navHeight +'px'}">
<div
class=
"content"
:style=
"
{'padding-top':navHeight +'px'}">
...
@@ -160,7 +161,7 @@ export default {
...
@@ -160,7 +161,7 @@ export default {
clear
:
'HD'
,
clear
:
'HD'
,
devicePosition
:
'front'
,
//前置或者后置 back => 后置
devicePosition
:
'front'
,
//前置或者后置 back => 后置
enableMic
:
true
,
//麦克风是否开启
enableMic
:
true
,
//麦克风是否开启
remoteMirror
:
'
dis
able'
,
//镜像
remoteMirror
:
'
en
able'
,
//镜像
userInfo
:
null
,
userInfo
:
null
,
...
@@ -219,7 +220,11 @@ export default {
...
@@ -219,7 +220,11 @@ export default {
isDetailControlLock
:
true
,
isDetailControlLock
:
true
,
mirror
:
false
,
mirror
:
true
,
refreshLive
:
true
}
}
},
},
filter
(){
filter
(){
...
@@ -282,6 +287,7 @@ export default {
...
@@ -282,6 +287,7 @@ export default {
this
.
isTimeFirstReq
=
true
;
this
.
isTimeFirstReq
=
true
;
this
.
overOrStop
=
1
;
this
.
overOrStop
=
1
;
this
.
isDetailLock
=
true
;
this
.
isDetailLock
=
true
;
this
.
refreshLive
=
true
;
this
.
online
=
0
//在线
this
.
online
=
0
//在线
this
.
look
=
0
//观看
this
.
look
=
0
//观看
...
@@ -350,7 +356,12 @@ export default {
...
@@ -350,7 +356,12 @@ export default {
if
(
type
==
'record'
){
if
(
type
==
'record'
){
if
(
!
res
.
authSetting
[
"scope.record"
])
{
if
(
!
res
.
authSetting
[
"scope.record"
])
{
this
.
refreshLive
=
false
;
this
.
openConfirm
(
type
);
this
.
openConfirm
(
type
);
}
else
{
this
.
refreshLive
=
true
;
this
.
pusher
=
wx
.
createLivePusherContext
(
'pusher'
);
this
.
pusher
.
startPreview
()
}
}
}
else
if
(
type
==
'camera'
){
}
else
if
(
type
==
'camera'
){
if
(
!
res
.
authSetting
[
"scope.camera"
])
{
if
(
!
res
.
authSetting
[
"scope.camera"
])
{
...
@@ -1076,13 +1087,13 @@ export default {
...
@@ -1076,13 +1087,13 @@ export default {
top
:
0
;
top
:
0
;
left
:
0
;
left
:
0
;
width
:
39px
;
width
:
39px
;
height
:
1
2
px
;
height
:
1
6
px
;
color
:
white
;
color
:
white
;
background-color
:
#FF4240
;
background-color
:
#FF4240
;
border-bottom-right-radius
:
2px
;
border-bottom-right-radius
:
2px
;
font-size
:
11px
;
font-size
:
11px
;
text-align
:
center
;
text-align
:
center
;
line-height
:
1
2
px
;
line-height
:
1
6
px
;
}
}
.item-top
{
.item-top
{
height
:
78px
;
height
:
78px
;
...
...
src/pages/liveList/index.vue
View file @
905a5786
...
@@ -48,6 +48,11 @@
...
@@ -48,6 +48,11 @@
</div>
</div>
<div
class=
"live-time"
>
开播时间:
{{
item
.
startTime
}}
</div>
<div
class=
"live-time"
>
开播时间:
{{
item
.
startTime
}}
</div>
</div>
</div>
<div
class=
"create-live"
v-if=
"liveList.length"
@
click=
"createLive"
>
<img
src=
"../../../static/images/chuangjian.png"
alt=
""
>
<span>
创建直播计划
</span>
</div>
</div>
</div>
<!-- 未登陆 -->
<!-- 未登陆 -->
...
@@ -63,6 +68,10 @@
...
@@ -63,6 +68,10 @@
暂无直播
暂无直播
</div>
</div>
<div
class=
"to-create-live"
v-if=
"!liveList.length && isLogin"
@
click=
"createLive"
>
创建直播计划
</div>
<!-- 绑定手机号 -->
<!-- 绑定手机号 -->
<div
class=
"toCLogin1"
v-if=
"isShowPhone"
>
<div
class=
"toCLogin1"
v-if=
"isShowPhone"
>
<div
class=
"btn_info1"
>
<div
class=
"btn_info1"
>
...
@@ -80,8 +89,9 @@
...
@@ -80,8 +89,9 @@
import
{
getNavbarInfo
,
DFSImg
}
from
'../../utils/common.js'
import
{
getNavbarInfo
,
DFSImg
}
from
'../../utils/common.js'
import
{
wx_decode
}
from
"@/utils/wxIndex.js"
;
import
{
wx_decode
}
from
"@/utils/wxIndex.js"
;
import
login
from
"@/api/login"
;
import
login
from
"@/api/login"
;
import
indexApi
from
'@/api/liveing'
import
liveApi
from
'@/api/liveing'
import
liveApi
from
'@/api/liveing'
import
livedApi
from
'@/api/live'
import
shop
from
"@/api/shop"
;
export
default
{
export
default
{
data
(){
data
(){
return
{
return
{
...
@@ -106,6 +116,8 @@ export default {
...
@@ -106,6 +116,8 @@ export default {
shopId
:
process
.
env
.
SHOP_MIXID
,
shopId
:
process
.
env
.
SHOP_MIXID
,
baseUrl
:
process
.
env
.
BASE_URL
,
baseUrl
:
process
.
env
.
BASE_URL
,
}
}
},
},
created
(){
created
(){
...
@@ -118,6 +130,9 @@ export default {
...
@@ -118,6 +130,9 @@ export default {
},
},
onShow
(){
onShow
(){
this
.
getMsgConfig
();
wx
.
setKeepScreenOn
({
wx
.
setKeepScreenOn
({
keepScreenOn
:
false
keepScreenOn
:
false
...
@@ -288,7 +303,9 @@ export default {
...
@@ -288,7 +303,9 @@ export default {
e
.
mp
.
detail
.
iv
e
.
mp
.
detail
.
iv
);
);
this
.
userInfo
=
JSON
.
parse
(
e
.
target
.
rawData
);
this
.
userInfo
=
JSON
.
parse
(
e
.
target
.
rawData
);
this
.
$store
.
commit
(
'setUserInfo'
,
this
.
userInfo
)
this
.
$store
.
commit
(
'setUserInfo'
,
this
.
userInfo
)
this
.
savePhone
();
console
.
log
(
this
.
userInfo
)
console
.
log
(
this
.
userInfo
)
//是会员 直接登录
//是会员 直接登录
...
@@ -307,6 +324,7 @@ export default {
...
@@ -307,6 +324,7 @@ export default {
this
.
userInfo
=
JSON
.
parse
(
e
.
target
.
rawData
);
this
.
userInfo
=
JSON
.
parse
(
e
.
target
.
rawData
);
this
.
$store
.
commit
(
'setUserInfo'
,
this
.
userInfo
)
this
.
$store
.
commit
(
'setUserInfo'
,
this
.
userInfo
)
this
.
savePhone
();
if
(
this
.
unionId
)
{
if
(
this
.
unionId
)
{
...
@@ -413,6 +431,7 @@ export default {
...
@@ -413,6 +431,7 @@ export default {
this
.
$store
.
commit
(
'setLoginStatus'
,
1
)
this
.
$store
.
commit
(
'setLoginStatus'
,
1
)
console
.
log
(
'getOpenid2'
,
getOpenid
)
console
.
log
(
'getOpenid2'
,
getOpenid
)
this
.
isLogin
=
true
this
.
isLogin
=
true
this
.
savePhone
();
this
.
getLiveList
();
//获取直播计划列表
this
.
getLiveList
();
//获取直播计划列表
}
}
},
},
...
@@ -421,7 +440,7 @@ export default {
...
@@ -421,7 +440,7 @@ export default {
wx
.
showLoading
({
wx
.
showLoading
({
title
:
'加载中'
title
:
'加载中'
})
})
index
Api
.
queryLiveList
().
then
(
res
=>
{
live
Api
.
queryLiveList
().
then
(
res
=>
{
if
(
res
.
data
.
code
==
"200"
){
if
(
res
.
data
.
code
==
"200"
){
wx
.
hideLoading
()
wx
.
hideLoading
()
...
@@ -446,7 +465,213 @@ export default {
...
@@ -446,7 +465,213 @@ export default {
wx
.
hideLoading
()
wx
.
hideLoading
()
})
})
},
},
},
createLive
(){
wx
.
showLoading
({
title
:
'加载中'
,
mask
:
true
})
liveApi
.
queryLivePermissions
({
anchorPhone
:
wx
.
getStorageSync
(
"phoneNumber"
)}).
then
(
res
=>
{
//0,null : 未提交申请 1.审核中 2.审核通过 3.审核失败
let
result
=
res
.
data
.
data
wx
.
hideLoading
()
if
(
res
.
data
.
code
==
'200'
){
if
(
result
==
0
||
result
==
null
){
wx
.
showModal
({
title
:
''
,
content
:
'您还没有直播权限'
,
confirmColor
:
'#07c160'
,
success
:
(
res
)
=>
{
if
(
res
.
confirm
)
{
this
.
applyLive
();
}
else
if
(
res
.
cancel
)
{
console
.
log
(
'用户点击取消'
)
}
}
})
}
else
if
(
result
==
1
){
wx
.
showModal
({
title
:
''
,
content
:
'权限审核中'
,
confirmColor
:
'#07c160'
,
success
:
(
res
)
=>
{
if
(
res
.
confirm
)
{
}
else
if
(
res
.
cancel
)
{
console
.
log
(
'用户点击取消'
)
}
}
})
}
else
if
(
result
==
2
){
let
backPath
=
`/createLive`
;
let
query
=
{
sessionid
:
wx
.
getStorageSync
(
'sessionid'
)
||
''
,
}
wx
.
reLaunch
({
url
:
`../index/main?from=liveList&backpath=
${
backPath
}
¶ms=
${
JSON
.
stringify
(
query
)}
`
});
}
else
if
(
result
==
3
){
wx
.
showModal
({
title
:
''
,
content
:
'抱歉,您的审核没有通过'
,
confirmColor
:
'#07c160'
,
success
(
res
)
{
if
(
res
.
confirm
)
{
console
.
log
(
'用户点击确定'
)
}
else
if
(
res
.
cancel
)
{
console
.
log
(
'用户点击取消'
)
}
}
})
}
}
})
},
savePhone
(){
livedApi
.
getUserInfo
().
then
(
res
=>
{
if
(
res
.
data
.
code
==
'200'
){
wx
.
setStorage
({
key
:
"phoneNumber"
,
data
:
res
.
data
.
data
.
mobilephone
});
}
})
},
applyLive
(){
wx
.
showLoading
({
title
:
'加载中'
,
mask
:
true
})
liveApi
.
applyAuthority
({
anchorPhone
:
wx
.
getStorageSync
(
"phoneNumber"
),
anchorName
:
JSON
.
parse
(
wx
.
getStorageSync
(
"userInfo"
)).
nickName
}).
then
(
res
=>
{
console
.
log
(
res
.
data
)
wx
.
hideLoading
()
if
(
res
.
data
.
code
==
'200'
){
if
(
res
.
data
.
data
==
'true'
){
//申请成功
this
.
subscribeMsg
();
}
else
{
//申请失败
wx
.
showToast
({
title
:
'申请失败'
,
icon
:
"none"
});
}
}
}).
catch
(
err
=>
{
wx
.
showToast
({
title
:
'申请失败'
,
icon
:
"none"
});
})
},
subscribeMsg
(){
let
_this
=
this
;
console
.
log
(
_this
.
$store
.
state
.
subscribeMessageObj
,
'subscribeMessageObj'
)
wx
.
getSetting
({
withSubscriptions
:
true
,
success
(
res
)
{
if
(
!
res
.
subscriptionsSetting
.
mainSwitch
){
wx
.
showModal
({
content
:
'检测到您没打开订阅消息的权限,是否去设置打开?'
,
confirmText
:
'确认'
,
confirmColor
:
'#07c160'
,
success
:
(
res2
)
=>
{
if
(
res2
.
confirm
)
{
wx
.
openSetting
({
withSubscriptions
:
true
,
success
(
res1
)
{
console
.
log
(
res1
.
authSetting
,
'authSetting'
)
}
})
}
}
})
}
else
{
try
{
const
subscribeMessageObj
=
_this
.
$store
.
state
.
subscribeMessageObj
;
console
.
log
(
subscribeMessageObj
,
'subscribeMessageObj'
)
if
(
subscribeMessageObj
&&
Object
.
keys
(
subscribeMessageObj
).
length
>
0
)
{
// TODO 开播订阅
const
tmplIds
=
[];
for
(
var
key
in
subscribeMessageObj
)
{
// 改成开播key
if
(
key
==
"anchor_result"
)
{
tmplIds
.
push
(
subscribeMessageObj
[
key
]);
}
}
console
.
log
(
tmplIds
,
'tmplIds'
)
if
(
tmplIds
.
length
>
0
)
{
wx
.
requestSubscribeMessage
({
tmplIds
:
tmplIds
,
success
:(
res
)
=>
{
if
(
res
[
tmplIds
[
0
]]
==
"accept"
){
wx
.
showToast
({
title
:
"您已成功订阅~"
,
icon
:
"success"
});
let
query
=
{
anchorPhone
:
wx
.
getStorageSync
(
"phoneNumber"
),
openId
:
wx
.
getStorageSync
(
"openid"
),
subMessageTemplateId
:
tmplIds
[
0
],
};
liveApi
.
addLiveResultMsg
(
query
).
then
(
res
=>
{});
}
},
fail
(
res
)
{
console
.
log
(
'订阅失败3'
)
wx
.
showToast
({
title
:
'订阅失败,是否授权或者网络错误'
,
icon
:
"none"
});
}
});
}
}
else
{
console
.
log
(
'订阅失败1'
)
wx
.
showToast
({
title
:
'订阅失败,是否授权或者网络错误'
,
icon
:
"none"
});
}
}
catch
(
err
)
{
console
.
log
(
'订阅失败2'
)
wx
.
showToast
({
title
:
'订阅失败,是否授权或者网络错误'
,
icon
:
"none"
});
}
}
}
})
},
getMsgConfig
()
{
if
(
!
this
.
$store
.
state
.
subscribeMessageObj
)
{
shop
.
getWxMiniSubscribeMessageConfig
().
then
(
res
=>
{
if
(
res
.
data
.
code
==
200
)
{
const
data
=
res
.
data
.
data
;
console
.
log
(
"wx mini subscribe message data: "
,
data
);
if
(
data
!=
null
)
{
const
subscribeMessageObj
=
{};
for
(
var
key
in
data
)
{
if
(
data
[
key
]
&&
data
[
key
].
template_id
)
{
subscribeMessageObj
[
key
]
=
data
[
key
].
template_id
;
}
}
this
.
$store
.
commit
(
"setSubscribeMessageObj"
,
subscribeMessageObj
);
}
}
});
}
},
},
onPullDownRefresh
(){
onPullDownRefresh
(){
// wx.showLoading({
// wx.showLoading({
// title : '加载中'
// title : '加载中'
...
@@ -476,8 +701,9 @@ export default {
...
@@ -476,8 +701,9 @@ export default {
}
}
.container1
{
.container1
{
min-height
:
100vh
;
min-height
:
100vh
;
height
:
50vh
;
//
height
:
50vh
;
padding-bottom
:
12px
;
//
margin-bottom
:
60px
;
padding-bottom
:
60px
;
background-color
:
#efefef
;
background-color
:
#efefef
;
}
}
.history-wrap
{
.history-wrap
{
...
@@ -633,6 +859,28 @@ export default {
...
@@ -633,6 +859,28 @@ export default {
color
:
#999999
;
color
:
#999999
;
}
}
}
}
.create-live
{
img{
width
:
20px
;
height
:
17px
;
margin-right
:
6px
;
}
position
:
fixed
;
bottom
:
0
;
left
:
0
;
width
:
100
%;
height
:
49px
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
font-size
:
19px
;
color
:
white
;
background-image
:-webkit-linear-gradient
(
to
right
,
#FF877D
,
#FB566D
);
background-image
:-moz-linear-gradient
(
to
right
,
#FF877D
,
#FB566D
);
background-image
:-o-linear-gradient
(
to
right
,
#FF877D
,
#FB566D
);
background-image
:
linear-gradient
(
to
right
,
#FF877D
,
#FB566D
);
z-index
:
100
;
}
}
}
.no-login-wrap
{
.no-login-wrap
{
text-align
:
center
;
text-align
:
center
;
...
@@ -660,6 +908,10 @@ export default {
...
@@ -660,6 +908,10 @@ export default {
font-size
:
30px
;
font-size
:
30px
;
color
:
#999999
;
color
:
#999999
;
}
}
.to-create-live
{
@include
btn;
margin
:
45px
auto
0
;
}
.toCLogin1
{
.toCLogin1
{
position
:
absolute
;
position
:
absolute
;
...
...
src/pages/lived/index.vue
View file @
905a5786
...
@@ -72,6 +72,15 @@
...
@@ -72,6 +72,15 @@
@
error=
"error"
@
error=
"error"
@
statechange=
"changes"
@
statechange=
"changes"
/>
/>
<!--
<video
style=
"width:100%;height:100vh;"
src=
"http://vjs.zencdn.net/v/oceans.mp4"
autoplay
:show-fullscreen-btn=
"false"
/>
-->
<!-- object-fit="fillCrop" -->
<!-- object-fit="fillCrop" -->
<!-- orientation="horizontal" -->
<!-- orientation="horizontal" -->
</div>
</div>
...
...
static/images/chuangjian.png
0 → 100644
View file @
905a5786
854 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