Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
P
pica-annual-summary
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
Close sidebar
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
com.pica.cloud.education.frontend
pica-annual-summary
提交
5970a177
提交
5970a177
编写于
8月 25, 2020
作者:
guangjun.yang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
登陆、跳转、下载等
上级
ab1f5525
变更
9
隐藏空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
1519 行增加
和
48 行删除
+1519
-48
webpack.base.conf.js
build/webpack.base.conf.js
+7
-7
cell-list-detail-share-cmd.vue
src/components/business/cell-list-detail-share-cmd.vue
+589
-0
cell-list-detail-share.vue
src/components/business/cell-list-detail-share.vue
+648
-0
bind-card-button-share.vue
src/components/cme/bind-card-button-share.vue
+110
-0
common-advert-img.vue
src/components/common/common-advert-img.vue
+21
-15
pica-icon.png
src/images/course/pica-icon.png
+0
-0
user.js
src/store/modules/user.js
+3
-3
wxShare.js
src/utils/wxShare.js
+3
-1
share-merge-detail.vue
src/views/share-merge-detail.vue
+138
-22
未找到文件。
build/webpack.base.conf.js
浏览文件 @
5970a177
...
...
@@ -71,13 +71,13 @@ module.exports = {
browsers
:
[
'last 10 versions'
]
}),
require
(
'postcss-pxtorem'
)({
rootValue
:
37.5
,
unitPrecision
:
5
,
propWhiteList
:
[],
selectorBlackList
:
[
/^html$/
],
replace
:
true
,
mediaQuery
:
false
,
minPixelValue
:
2
rootValue
:
37.5
,
unitPrecision
:
5
,
propWhiteList
:
[],
selectorBlackList
:
[
/^html$/
],
replace
:
true
,
mediaQuery
:
false
,
minPixelValue
:
2
})
]
}
...
...
src/components/business/cell-list-detail-share-cmd.vue
0 → 100644
浏览文件 @
5970a177
<
template
>
<!-- 项目组件列表项 -->
<section>
<div
class=
"cell-detail"
v-for=
"(component , index) in projectComponent"
:key=
"index"
>
<van-collapse
v-model=
"activeNames"
@
change=
"changeCollapse"
>
<van-collapse-item
v-for=
"(portalModule, index) in component.portalModuleDTOS"
:key=
"index"
:title=
"(parseInt(index) + 1) + '.' + portalModule.moduleName | shortName(19)"
:name=
"portalModule.expandKey"
:value=
"portalModule.value"
:disabled=
"portalModule.disabled"
@
click
.
native=
"chooseItem(portalModule)"
>
<!-- @click.native="chooseItem(item)" -->
<article
@
click
.
stop=
"deleteFlow()"
class=
"cell-container"
>
<span
class=
""
v-for=
"(item, index) in portalModule.contentList"
:key=
"index"
>
<div
v-if=
"index > 0 && portalModule.contentList[index].templetId!= portalModule.contentList[index-1].templetId"
class=
"bottom-line"
></div>
<div
class=
"cell-container-item"
>
<div
class=
"name"
>
<div
class=
"name-img"
>
<img
v-if=
"item.type == 1 && item.useFlag == 1"
class=
"img-icon"
src=
"../../images/exam.png"
>
<img
v-if=
"item.type == 1 && item.useFlag == 2"
class=
"img-icon"
src=
"../../images/exam-dark.png"
>
<img
v-if=
"item.type == 2 && item.useFlag == 1"
class=
"img-icon"
src=
"../../images/learn.png"
>
<img
v-if=
"item.type == 2 && item.useFlag == 2"
class=
"img-icon"
src=
"../../images/learn-dark.png"
>
</div>
<p
class=
"name-title"
:class=
"
{'name-title-no': item.useFlag == 2}">
{{
item
.
name
|
shortName
(
30
)
}}
</p>
</div>
<span
v-if=
"!logged"
@
click=
"gotoExamOrCourse(item)"
class=
"text-action text-action-no"
>
<!-- :class="
{'text-action-no': item.useFlag == 2}" -->
{{
getActionText
(
item
.
status
,
item
.
type
)
}}
</span>
<span
v-else-if=
"!hasBindCard && item.type == 2 && cmeType == 2"
@
click=
"gotoExamOrCourse(item)"
class=
"text-action"
style=
"background: #f28662;border: none;color: #fff;"
>
<!-- :class="
{'text-action-no': item.useFlag == 2}" -->
去试看
</span>
<span
v-else
@
click=
"gotoExamOrCourse(item)"
class=
"text-action"
:class=
"
{'text-action-no': item.useFlag == 2}"
>
{{
getActionText
(
item
.
status
,
item
.
type
)
}}
</span>
<!--
<img
@
click=
"toastToBuy"
class=
"key"
v-show=
"!hasBindCard"
src=
"../../images/cme/phrase2/key.png"
alt=
""
>
-->
<div
class=
"foot-line"
v-if=
"index+1
<
portalModule
.
contentList
.
length
&&
portalModule
.
contentList
[
index
].
templetId =
=
portalModule
.
contentList
[
index
+
1
].
templetId
"
>
</div>
</div>
<span
v-if=
"item.certificateFlag == 2"
>
<img
class=
"cert-img"
:class=
"
{'space2': item.height == 2 }" src="../../images/has-cert-new.png">
</span>
</span>
</article>
</van-collapse-item>
</van-collapse>
</div>
<van-dialog
v-model=
"dialogState"
title=
"标题"
>
</van-dialog>
</section>
</
template
>
<
script
>
import
MergeTitle
from
"@/components/business/merge-title"
;
import
NoMoreContent
from
"@/components/business/no-more-content"
;
import
CertShow
from
"@/components/business/cert-show"
;
import
{
Collapse
,
CollapseItem
,
Dialog
,
Toast
}
from
'vant'
;
import
{
mapGetters
}
from
"vuex"
;
import
{
getAppVersion
,
getWebPageUrl
}
from
"@/utils"
;
import
vueFilters
from
'@/utils/filter'
;
const
actionMap
=
{
11
:
"去考试"
,
12
:
"再考一次"
,
13
:
"已通过"
,
14
:
"已完成"
,
15
:
"已通过"
,
16
:
"未通过"
,
21
:
"去学习"
,
22
:
"继续学习"
,
23
:
"去复习"
};
const
sendBuriedDataMap
=
{
// 11: "8824",
// 12: "211013",
21
:
"8821"
,
22
:
"8822"
,
23
:
"8823"
}
export
default
{
name
:
"cell-list-item"
,
data
()
{
return
{
appVersion
:
"200"
,
hocImg
:
require
(
"../../images/has-owner-cert.png"
),
activeNames
:
[
1
],
dialogState
:
false
,
projectId
:
1
};
},
props
:
{
hasBindCard
:
{
type
:
Boolean
,
default
:
false
},
projectComponent
:
{
type
:
Array
,
default
:
()
=>
[]
},
actionList
:
{
type
:
Array
,
default
:
()
=>
[]
},
detailNum
:
{
type
:
Number
|
String
,
default
:
0
},
courseRequire
:
{
type
:
Number
|
String
,
default
:
0
,
},
limitTimes
:
{
type
:
Number
|
String
,
default
:
0
,
},
cmeType
:
{
type
:
Number
|
String
,
default
:
0
,
},
logged
:
{
type
:
Boolean
,
default
:
false
}
},
computed
:
{
...
mapGetters
([
"userInfo"
])
},
components
:
{
MergeTitle
,
CertShow
,
NoMoreContent
,
Dialog
,
},
watch
:{
actionList
:
{
immediate
:
true
,
handler
(
val
)
{
this
.
activeNames
=
val
;
}
}
},
mounted
()
{
},
created
()
{
this
.
projectId
=
this
.
$route
.
query
.
id
;
},
methods
:
{
// 跳转到考试或课程 type 1: 考试; 2: 课程
// 如果是考试,将根据appVersion判断是新考试还是老考试,如果是301或之前的,都是老考试
gotoExamOrCourse
(
item
)
{
this
.
$parent
.
$refs
.
tcPlayerRef
&&
this
.
$parent
.
$refs
.
tcPlayerRef
.
pause
();
if
(
!
this
.
logged
)
{
Toast
(
'登陆后可学习课程'
);
return
;
}
// 埋点:去学习、继续学习、复习、去考试、重考
// let actionCode = sendBuriedDataMap[item.status];
// if(actionCode) {
// this.$sendBuriedData({
// component_tag: `882#${actionCode}#${this.projectId}`
// });
// }
if
(
item
.
useFlag
==
2
)
{
if
(
item
.
type
==
1
)
{
Toast
(
'尚未完成所有课程学习'
);
}
else
if
(
item
.
type
==
2
){
Toast
(
'尚未完成相关考试'
);
}
return
;
};
if
(
item
.
type
==
1
)
{
this
.
gotoExam
(
item
.
id
);
}
else
if
(
item
.
type
==
2
)
{
this
.
gotoCourse
(
item
.
id
);
}
},
// 跳转到课程
gotoCourse
:
function
(
courseId
)
{
let
token
=
localStorage
.
getItem
(
'token'
);
let
jumpUrl
=
getWebPageUrl
(
`profexam/#/course-detail?courseId=
${
courseId
}
&projectId=
${
this
.
projectId
}
&token=
${
token
}
`
);
window
.
location
.
href
=
jumpUrl
;
},
// 跳转到考试
gotoExam
:
function
(
examId
)
{
Toast
(
'请前往云鹊医APP参加考试'
);
},
getActionText
(
status
,
type
)
{
let
actionText
=
actionMap
[
status
];
if
(
!
actionText
)
{
actionText
=
type
==
1
?
'去考试'
:
'去学习'
;
}
if
(
!
this
.
hasBindCard
&&
type
==
2
)
{
actionText
=
'去试看'
}
return
actionText
;
},
changeCollapse
(
activeNames
)
{
console
.
log
(
'activeNames'
,
activeNames
);
let
param
=
{
expandKeys
:
activeNames
,
setEntry
:
true
,
token
:
this
.
userInfo
.
userToken
,
}
this
.
POST
(
"portal/portalApp/updateExpandStatus?projectId="
+
this
.
projectId
,
param
).
then
(
res
=>
{
});
},
deleteFlow
()
{
},
chooseItem
(
item
)
{
let
_this
=
this
;
if
(
item
.
disabled
===
true
)
{
console
.
log
(
'item'
,
item
);
Toast
(
'尚未开始,敬请期待'
);
}
},
// 弹框提示
toastToBuy
()
{
Toast
(
'购买后可学习课程'
);
}
}
};
</
script
>
<
style
lang=
"less"
>
.van-dialog {
transform: translate(-50%,-50%);
width: 300px;
border-radius: 3px;
.van-dialog__header {
padding-top: 30px;
font-size: 18px;
color: #333333;
}
.van-dialog__content {
.van-dialog__message--has-title {
padding-top: 14px;
text-align: left;
color: #676869;
font-weight:400;
}
}
.van-dialog__footer {
.van-button {
.van-button__text {
color: #449284;
font-size: 17px;
}
}
}
}
.van-toast {
// background: #000000;
div {
font-size:12px;
color: #FFFFFF;
}
}
.van-toast--text {
padding: 7px 8px;
}
.no-more-bottom {
position: relative;
width: 100%;
height: 40px;
}
.cell-detail {
.van-hairline--top::after , .van-hairline--top-bottom::after {
border-width: 0px;
}
.van-collapse-item {
.van-cell {
margin: 9px auto 0 auto;
width: 345px;
min-height: 48px;
border-radius: 6px;
}
.van-collapse-item__title {
background: #F8F9FA;
.van-cell__title {
max-width: 200px;
vertical-align: middle;
line-height: 30px;
flex: auto;
span {
color: #373839;
font-weight:500;
font-size: 15px;
height: 15px;
line-height: 15px;
}
}
.van-cell__value {
// max-width: 80px;
line-height: 30px;
span {
color: #979899;
font-weight:500;
font-size: 14px;
line-height: 14px;
}
}
.van-icon {
margin-top: 3px;
color: #999999;
}
}
.van-collapse-item__title--expanded {
background: #E3EFED;
.van-cell__title {
span {
color: #449284;
font-weight:500;
font-size: 15px;
line-height: 15px;
}
}
.van-cell__value {
span {
color: #449284;
font-weight:500;
font-size: 14px;
line-height: 14px;
}
}
.van-icon {
color: #449284;
}
}
.van-collapse-item__title--disabled {
.van-cell__right-icon {
display: none;
}
.van-cell__title , .van-cell__value{
span {
color: #979899;
}
}
}
.van-collapse-item__content {
padding: 0;
}
}
.line-component {
position: relative;
margin-top: 20px;
margin-left: 0;
width: 373px;
height: 6px;
background: #F8F9FA;
}
}
.cell-container {
display: flex;
flex-direction: column;
margin: 20px 0px -28px 0px;
&-item {
position: relative;
display: flex;
flex-direction: row;
margin-bottom: 39px;
line-height: 51px;
font-size: 15px;
justify-content: space-between;
align-items: center;
.name {
.name-img {
position: relative;
z-index: 9;
margin-right: 6px;
width: 20px;
height: 20px;
float: left;
.img-icon {
position: absolute;
top: 0;
left: 0;
width: 20px;
height: 20px;
}
}
&-logo {
position: relative;
z-index: 9;
margin-right: 6px;
width: 20px;
height: 20px;
text-align: center;
background:rgba(68,146,132,1);
font-size: 12px;
font-weight: 700;
color: #FFFFFF;
border-radius: 50%;
float: left;
line-height: 22px;
// display:table;
// overflow:hidden;
// span {
// color: #FFFFFF;
// font-size: 12px;
// font-weight: 700;
// display: table-cell;
// text-align: center;
// vertical-align: middle;
// line-height: 20px;
// }
// &::before {
// position: absolute;
// top: -6px;
// left: 8px;
// display: inline-block;
// height: 6px;
// width: 4px;
// background: #FFFFFF;
// content: "";
// }
// &::after {
// position: absolute;
// top: 20px;
// left: 8px;
// display: inline-block;
// height: 6px;
// width: 4px;
// background: #FFFFFF;
// content: "";
// }
}
&-learn {
background:rgba(246, 131, 103, 1);
}
&-logo-no {
background:rgba(231, 232, 233, 1);
}
&-title {
// font-family: "PingFangSC-Medium", "PingFangSC", "Microsoft Yahei";
width: 231px;
font-size: 15px;
font-weight: 700;
line-height: 22px;
color: #333333;
float: left;
}
&-title-no {
color: #979899;
}
// &::before {
// position: relative;
// top: 3px;
// display: inline-block;
// width: 4px;
// content: "";
// margin-right: 5px;
// height: 16px;
// background: #449284;
// border-radius: 3px;
// }
// span {
// img {
// margin-top: 4px;
// position: relative;
// top: 2px;
// width: 70px;
// height: 20px;
// }
// }
}
.text-action {
width: 68px;
height: 25px;
line-height: 25px;
text-align: center;
font-size: 12px;
font-weight: 700;
border-radius: 15px;
border: 1px solid rgba(68, 146, 132, 0.6);
color: rgba(68, 146, 132, 1);
img {
position: relative;
left: 2px;
top: 3px;
width: 8px;
height: 12px;
}
&-no {
border: 1px solid #c7c8c9;
color: #c7c8c9;
}
}
.key {
width: 15px;
height: 15px;
}
}
span {
.cert-img {
margin-left: 26px;
position: relative;
top: -34px;
width: 70px;
height: 20px;
}
.space2 {
top: -34px;
}
}
.connect-line {
position: absolute;
// top: 32px;
top: 3px;
left: 8.5px;
height: 42px;
width: 3px;
background: #F8F9FA;
// border: 0.5px dashed rgba(240, 241, 244, 1);
}
.line-complete {
background: #E3EFED;
}
.len4 {
// height: 100px;
height: 106px;
}
.len3 {
// height: 82px;
height: 88px;
}
.len2 {
// height: 82px;
height: 88px;
}
.len1 {
// height: 62px;
height: 68px;
}
.bottom-line {
position: relative;
margin: -19px 0 20px 0;
bottom: 0px;
width: 100%;
height: 6px;
background: #F8F9FA;
border-radius: 2px;
// border-bottom: 0.5px solid #F0F1F2;
}
.foot-line {
position: absolute;
width: 311px;
margin-left: 34.5px;
height: 1px;
background: #E7E8E9;
// border-bottom: 0.5px solid #E7E8E9;
transform: scaleY(0.5);
bottom: -20px;
}
}
.bg-13 {
background: #abcec7;
}
</
style
>
\ No newline at end of file
src/components/business/cell-list-detail-share.vue
0 → 100644
浏览文件 @
5970a177
<
template
>
<!-- 项目组件列表项 -->
<section>
<div
class=
"cell-detail"
v-for=
"(component , index) in projectComponent"
:key=
"index"
>
<van-collapse
v-model=
"activeNames"
@
change=
"changeCollapse"
>
<van-collapse-item
v-for=
"(portalModule, index) in component.portalModuleDTOS"
:key=
"index"
:title=
"(parseInt(index) + 1) + '.' + portalModule.moduleName | shortName(19)"
:name=
"portalModule.expandKey"
:value=
"portalModule.value"
@
click
.
native=
"chooseItem(portalModule)"
>
<!-- :disabled="portalModule.disabled" -->
<article
@
click
.
stop=
"deleteFlow()"
class=
"cell-container"
>
<span
class=
""
v-for=
"(item, index) in portalModule.contentList"
:key=
"index"
>
<div
v-if=
"index > 0 && portalModule.contentList[index].templetId!= portalModule.contentList[index-1].templetId"
class=
"bottom-line"
></div>
<div
class=
"cell-container-item"
>
<div
class=
"name"
>
<div
class=
"name-img"
>
<img
v-if=
"item.type == 1 && item.useFlag == 1"
class=
"img-icon"
src=
"../../images/exam.png"
>
<img
v-if=
"item.type == 1 && item.useFlag == 2"
class=
"img-icon"
src=
"../../images/exam-dark.png"
>
<img
v-if=
"item.type == 2 && item.useFlag == 1"
class=
"img-icon"
src=
"../../images/learn.png"
>
<img
v-if=
"item.type == 2 && item.useFlag == 2"
class=
"img-icon"
src=
"../../images/learn-dark.png"
>
</div>
<p
class=
"name-title"
:class=
"
{'name-title-no': item.useFlag == 2}">
{{
item
.
name
|
shortName
(
30
)
}}
</p>
</div>
<span
v-if=
"!logged"
@
click=
"gotoExamOrCourse(item, portalModule.contentList, index)"
class=
"text-action text-action-no"
>
{{
getActionText
(
item
.
status
,
item
.
type
)
}}
</span>
<span
v-else-if=
"!item.id"
class=
"text-action text-action-no"
@
click=
"toastToBuy('敬请期待')"
>
更新中
</span>
<img
class=
"key"
v-else-if=
"!hasBindCard && item.trySeeFlag == 1 && !item.trySeeTime"
@
click=
"toastToBuy('激活/购买后可学习课程')"
src=
"../../images/cme/phrase2/key.png"
alt=
""
>
<span
v-else-if=
"!hasBindCard && item.trySeeFlag == 1"
@
click=
"gotoExamOrCourse(item, portalModule.contentList, index, true)"
class=
"text-action"
>
去试看
</span>
<span
v-else
@
click=
"gotoExamOrCourse(item, portalModule.contentList, index)"
class=
"text-action"
:class=
"
{'text-action-no': item.useFlag == 2}"
>
{{
getActionText
(
item
.
status
,
item
.
type
)
}}
</span>
<div
class=
"foot-line"
v-if=
"index+1
<
portalModule
.
contentList
.
length
&&
portalModule
.
contentList
[
index
].
templetId =
=
portalModule
.
contentList
[
index
+
1
].
templetId
"
>
</div>
</div>
</span>
</article>
</van-collapse-item>
</van-collapse>
</div>
</section>
</
template
>
<
script
>
import
MergeTitle
from
"@/components/business/merge-title"
;
import
NoMoreContent
from
"@/components/business/no-more-content"
;
import
{
Collapse
,
CollapseItem
,
Dialog
,
Toast
}
from
'vant'
;
import
{
mapGetters
}
from
"vuex"
;
import
{
getAppVersion
}
from
"@/utils"
;
import
vueFilters
from
'@/utils/filter'
;
const
actionMap
=
{
11
:
"去考试"
,
12
:
"再考一次"
,
13
:
"已通过"
,
14
:
"已完成"
,
15
:
"已通过"
,
16
:
"未通过"
,
21
:
"去学习"
,
22
:
"继续学习"
,
23
:
"去复习"
};
const
sendBuriedDataMap
=
{
// 11: "8824",
// 12: "211013",
21
:
"8821"
,
22
:
"8822"
,
23
:
"8823"
}
export
default
{
name
:
"cell-list-item"
,
data
()
{
return
{
appVersion
:
"200"
,
hocImg
:
require
(
"../../images/has-owner-cert.png"
),
activeNames
:
[
1
],
// projectId: 1
};
},
props
:
{
hasBindCard
:
{
type
:
Boolean
,
default
:
false
},
projectComponent
:
{
type
:
Array
,
default
:
()
=>
[]
},
actionList
:
{
type
:
Array
,
default
:
()
=>
[]
},
detailNum
:
{
type
:
Number
|
String
,
default
:
0
},
courseRequire
:
{
type
:
Number
|
String
,
default
:
0
,
},
limitTimes
:
{
type
:
Number
|
String
,
default
:
0
,
},
logged
:
{
type
:
Boolean
,
default
:
false
},
projectId
:
{
type
:
Number
|
String
,
default
:
0
}
},
computed
:
{
...
mapGetters
([
"userInfo"
])
},
components
:
{
MergeTitle
,
NoMoreContent
,
Dialog
,
},
watch
:{
actionList
:
{
immediate
:
true
,
handler
(
val
)
{
this
.
activeNames
=
val
;
}
}
},
mounted
()
{
},
created
()
{
// this.projectId = this.$route.query.id;
},
methods
:
{
// 跳转到考试或课程 type 1: 考试; 2: 课程
// 如果是考试,将根据appVersion判断是新考试还是老考试,如果是301或之前的,都是老考试
gotoExamOrCourse
(
item
,
contentList
,
index
,
trySee
)
{
this
.
$parent
.
$refs
.
tcPlayerRef
&&
this
.
$parent
.
$refs
.
tcPlayerRef
.
pause
();
if
(
!
this
.
logged
)
{
if
(
item
.
type
==
1
)
{
Toast
(
'请前往云鹊医APP参加考试'
);
}
else
if
(
item
.
type
==
2
){
Toast
(
'登陆后可学习课程'
);
}
return
;
}
// 埋点:去学习、继续学习、复习、去考试、重考
// let actionCode = sendBuriedDataMap[item.status];
// if(actionCode) {
// this.$sendBuriedData({
// component_tag: `882#${actionCode}#${this.projectId}`
// });
// }
// this.gotoCourse(item, contentList, index, trySee);
let
logId
=
null
;
if
(
item
.
useFlag
==
2
)
{
if
(
item
.
type
==
1
)
{
Toast
(
'尚未完成所有课程学习'
);
}
else
if
(
item
.
type
==
2
){
Toast
(
'尚未完成相关考试'
);
}
return
;
};
if
(
item
.
type
==
1
)
{
this
.
gotoExam
(
item
.
id
);
logId
=
'882#88206'
;
}
else
if
(
item
.
type
==
2
)
{
this
.
gotoCourse
(
item
,
contentList
,
index
,
trySee
);
logId
=
'882#88205'
;
}
if
(
trySee
)
{
logId
=
'882#88204'
;
}
// logId && this.$sendBuriedData({
// component_tag: logId
// });
},
// 如果此模块中没有考试,则直接退出;否则
// 查看课程是否是最后一节课, 如果是,则要查找到相应的考试,并传递给原生端
beforeGotoCourse
(
item
,
contentList
,
index
)
{
let
extendsParam
=
[];
let
hasExam
=
false
;
let
currentExam
=
{};
// 查找当前课程后面的有没有考试
for
(
let
i
=
index
;
i
<
contentList
.
length
;
i
++
)
{
// if(contentList[i].type == 1 && contentList[i].status != 14) {
if
(
contentList
[
i
].
type
==
1
&&
contentList
[
i
].
id
)
{
hasExam
=
true
;
currentExam
=
contentList
[
i
];
break
;
}
}
// 如果后面没有考试,则直接退出
if
(
!
hasExam
)
return
extendsParam
;
let
hasNoLearningCourse
=
false
;
// 查找本模块中是否还有没有学习完的课程,排除当前这个
for
(
let
j
=
0
;
j
<
contentList
.
length
;
j
++
)
{
if
(
j
==
index
)
continue
;
if
(
contentList
[
j
].
type
==
2
&&
(
contentList
[
j
].
status
==
21
||
contentList
[
j
].
status
==
22
))
{
hasNoLearningCourse
=
true
;
break
;
}
}
// 如果还有课程没有学完,则直接退出
if
(
hasNoLearningCourse
)
return
extendsParam
;
// let urlType = currentExam.urlType;
// let jumpUrl = currentExam.url;
// let jumpContent = '';
// let examType = 0;
// // (已经与后台约定只判断链接)如果有链接,则要加入相应参数
// if(jumpUrl) {
// examType = urlType;
// jumpContent = jumpUrl;
// } else {
// examType = -1;
// jumpContent = currentExam.id;
// }
extendsParam
.
push
({
key
:
"examType"
,
value
:
-
1
,
type
:
4
,
seqNo
:
1
});
extendsParam
.
push
({
key
:
"jumpContent"
,
value
:
currentExam
.
id
,
type
:
4
,
seqNo
:
1
});
return
extendsParam
;
},
// 跳转到课程
gotoCourse
:
function
(
item
,
contentList
,
index
,
trySee
)
{
let
token
=
localStorage
.
getItem
(
'token'
);
let
jumpUrl
=
getWebPageUrl
(
`profexam/#/course-detail?courseId=
${
courseId
}
&projectId=
${
this
.
projectId
}
&token=
${
token
}
`
);
window
.
location
.
href
=
jumpUrl
;
},
// 跳转到考试
gotoExam
:
function
(
examId
)
{
Toast
(
'请前往云鹊医APP参加考试'
);
},
// 获取按钮文案
getActionText
(
status
,
type
)
{
let
actionText
=
actionMap
[
status
];
if
(
!
actionText
)
{
actionText
=
type
==
1
?
'去考试'
:
'去学习'
;
}
return
actionText
;
},
// 折叠与展开模块
changeCollapse
(
activeNames
)
{
console
.
log
(
'activeNames'
,
activeNames
);
let
param
=
{
expandKeys
:
activeNames
,
setEntry
:
true
,
token
:
this
.
userInfo
.
userToken
,
}
this
.
POST
(
"portal/portalApp/updateExpandStatus?projectId="
+
this
.
projectId
,
param
).
then
(
res
=>
{
});
},
deleteFlow
()
{
},
chooseItem
(
item
)
{
let
_this
=
this
;
// if(item.disabled === true) {
// console.log('item',item);
// Toast('尚未开始,敬请期待');
// }
},
// 弹框提示
toastToBuy
(
toastMsg
)
{
Toast
(
toastMsg
);
}
}
};
</
script
>
<
style
lang=
"less"
>
.van-dialog {
transform: translate(-50%,-50%);
width: 300px;
border-radius: 3px;
.van-dialog__header {
padding-top: 30px;
font-size: 18px;
color: #333333;
}
.van-dialog__content {
.van-dialog__message--has-title {
padding-top: 14px;
text-align: left;
color: #676869;
font-weight:400;
}
}
.van-dialog__footer {
.van-button {
.van-button__text {
color: #449284;
font-size: 17px;
}
}
}
}
.van-toast {
// background: #000000;
div {
font-size:12px;
color: #FFFFFF;
}
}
.van-toast--text {
padding: 7px 8px;
}
.no-more-bottom {
position: relative;
width: 100%;
height: 40px;
}
.cell-detail {
.van-hairline--top::after , .van-hairline--top-bottom::after {
border-width: 0px;
}
.van-collapse-item {
.van-cell {
margin: 9px auto 0 auto;
width: 345px;
min-height: 48px;
border-radius: 6px;
}
.van-collapse-item__title {
background: #F8F9FA;
.van-cell__title {
max-width: 200px;
vertical-align: middle;
line-height: 30px;
flex: auto;
span {
color: #373839;
font-weight:500;
font-size: 15px;
height: 15px;
line-height: 15px;
}
}
.van-cell__value {
// max-width: 80px;
line-height: 30px;
span {
color: #979899;
font-weight:500;
font-size: 14px;
line-height: 14px;
}
}
.van-icon {
margin-top: 3px;
color: #999999;
}
}
.van-collapse-item__title--expanded {
background: #E3EFED;
.van-cell__title {
span {
color: #449284;
font-weight:500;
font-size: 15px;
line-height: 15px;
}
}
.van-cell__value {
span {
color: #449284;
font-weight:500;
font-size: 14px;
line-height: 14px;
}
}
.van-icon {
color: #449284;
}
}
.van-collapse-item__title--disabled {
.van-cell__right-icon {
display: none;
}
.van-cell__title , .van-cell__value{
span {
color: #979899;
}
}
}
.van-collapse-item__content {
padding: 0;
}
}
.line-component {
position: relative;
margin-top: 20px;
margin-left: 0;
width: 373px;
height: 6px;
background: #F8F9FA;
}
}
.cell-container {
display: flex;
flex-direction: column;
margin: 20px 0px -28px 0px;
&-item {
position: relative;
display: flex;
flex-direction: row;
margin-bottom: 39px;
line-height: 51px;
font-size: 15px;
justify-content: space-between;
align-items: center;
.name {
.name-img {
position: relative;
z-index: 9;
margin-right: 6px;
width: 20px;
height: 20px;
float: left;
.img-icon {
position: absolute;
top: 0;
left: 0;
width: 20px;
height: 20px;
}
}
&-logo {
position: relative;
z-index: 9;
margin-right: 6px;
width: 20px;
height: 20px;
text-align: center;
background:rgba(68,146,132,1);
font-size: 12px;
font-weight: 700;
color: #FFFFFF;
border-radius: 50%;
float: left;
line-height: 22px;
// display:table;
// overflow:hidden;
// span {
// color: #FFFFFF;
// font-size: 12px;
// font-weight: 700;
// display: table-cell;
// text-align: center;
// vertical-align: middle;
// line-height: 20px;
// }
// &::before {
// position: absolute;
// top: -6px;
// left: 8px;
// display: inline-block;
// height: 6px;
// width: 4px;
// background: #FFFFFF;
// content: "";
// }
// &::after {
// position: absolute;
// top: 20px;
// left: 8px;
// display: inline-block;
// height: 6px;
// width: 4px;
// background: #FFFFFF;
// content: "";
// }
}
&-learn {
background:rgba(246, 131, 103, 1);
}
&-logo-no {
background:rgba(231, 232, 233, 1);
}
&-title {
// font-family: "PingFangSC-Medium", "PingFangSC", "Microsoft Yahei";
width: 231px;
font-size: 15px;
font-weight: 700;
line-height: 22px;
color: #333333;
float: left;
}
&-title-no {
color: #979899;
}
// &::before {
// position: relative;
// top: 3px;
// display: inline-block;
// width: 4px;
// content: "";
// margin-right: 5px;
// height: 16px;
// background: #449284;
// border-radius: 3px;
// }
// span {
// img {
// margin-top: 4px;
// position: relative;
// top: 2px;
// width: 70px;
// height: 20px;
// }
// }
}
.text-action {
width: 68px;
height: 25px;
line-height: 25px;
text-align: center;
font-size: 12px;
font-weight: 700;
border-radius: 15px;
border: 1px solid rgba(68, 146, 132, 0.6);
color: rgba(68, 146, 132, 1);
img {
position: relative;
left: 2px;
top: 3px;
width: 8px;
height: 12px;
}
&-no {
border: 1px solid #c7c8c9;
color: #c7c8c9;
}
}
.key {
width: 15px;
height: 15px;
margin-right: 20px;
}
}
span {
.cert-img {
margin-left: 26px;
position: relative;
top: -34px;
width: 70px;
height: 20px;
}
.space2 {
top: -34px;
}
}
.connect-line {
position: absolute;
// top: 32px;
top: 3px;
left: 8.5px;
height: 42px;
width: 3px;
background: #F8F9FA;
// border: 0.5px dashed rgba(240, 241, 244, 1);
}
.line-complete {
background: #E3EFED;
}
.len4 {
// height: 100px;
height: 106px;
}
.len3 {
// height: 82px;
height: 88px;
}
.len2 {
// height: 82px;
height: 88px;
}
.len1 {
// height: 62px;
height: 68px;
}
.bottom-line {
position: relative;
margin: -19px 0 20px 0;
bottom: 0px;
width: 100%;
height: 6px;
background: #F8F9FA;
border-radius: 2px;
// border-bottom: 0.5px solid #F0F1F2;
}
.foot-line {
position: absolute;
width: 311px;
margin-left: 34.5px;
height: 1px;
background: #E7E8E9;
// border-bottom: 0.5px solid #E7E8E9;
transform: scaleY(0.5);
bottom: -20px;
}
}
.bg-13 {
background: #abcec7;
}
</
style
>
src/components/cme/bind-card-button-share.vue
0 → 100644
浏览文件 @
5970a177
<
template
>
<section
class=
"bind-cart-wrapper"
>
<article
class=
"left"
>
<div
class=
"top"
>
<!--
<span
class=
"discount"
>
¥
{{
cardInfo
.
costPrice
|
formatMoney
}}
</span>
-->
<span
class=
"discount"
>
¥
{{
(
cardInfo
.
couponPrice
||
cardInfo
.
preferentialPrice
||
cardInfo
.
costPrice
)
|
formatMoney
}}
</span>
<span
v-show=
"cardInfo.couponPrice || cardInfo.preferentialPrice"
class=
"price"
>
<del>
原价¥
{{
cardInfo
.
costPrice
|
formatMoney
}}
</del>
</span>
</div>
<div
class=
"bottom"
>
<img
src=
"../../images/cme/phrase2/info.png"
/>
<span>
激活或购买后可学习课程
</span>
</div>
</article>
<article
class=
"right"
>
<span
class=
"left"
@
click=
"download"
>
APP购买更优惠
</span>
</article>
</section>
</
template
>
<
script
>
export
default
{
props
:
{
cardInfo
:
{
type
:
Object
,
default
:
()
=>
{}
}
},
data
()
{
return
{};
},
methods
:
{
download
()
{
window
.
location
.
href
=
"https://a.app.qq.com/o/simple.jsp?pkgname=com.picahealth.yunque"
;
},
}
};
</
script
>
<
style
lang=
"less"
scoped
>
.bind-cart-wrapper {
position: fixed;
left: 0;
bottom: 0;
z-index: 100;
width: 100%;
display: flex;
flex-direction: row;
height: 60px;
line-height: 1;
justify-content: space-between;
padding: 10px 15px;
font-size: 14px;
background: rgba(255, 255, 255, 1);
box-shadow: 0px -2px 10px 0px rgba(0, 0, 0, 0.1);
.left {
display: flex;
flex-direction: column;
height: 40px;
line-height: 1;
font-size: 12px;
// align-items: ;
.top {
margin-top: 3px;
height: 24px;
.discount {
color: #fb5b52;
font-size: 18px;
font-weight: 700;
margin-right: 4px;
}
.price {
color: #979899;
}
}
.bottom {
display: flex;
flex-direction: row;
img {
width: 12px;
height: 12px;
margin-left: 1px;
margin-right: 4px;
}
color: #979899;
}
}
.right {
display: flex;
flex-direction: row;
span {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
width: 138px;
font-size: 14px;
font-weight: 700;
text-align: center;
&.left {
border: 1px solid rgba(255, 122, 75, 1);
border-right-style: none;
color: #FFFFFF;
background:linear-gradient(137deg,rgba(255,166,95,1) 0%,rgba(255,122,75,1) 100%);
border-radius: 20px;
}
}
}
}
</
style
>
src/components/common/common-advert-img.vue
浏览文件 @
5970a177
<
template
>
<div
class=
"common-adert-wrapper"
>
<img
:class=
"
{'margin-top-20': needPadTop}" v-if="showInfo.imageUrl" @click="jumpPage" :src="showInfo.imageUrl" alt="">
<img
:class=
"
{'margin-top-20': needPadTop}"
v-if="showInfo.imageUrl"
@click="jumpPage"
:src="showInfo.imageUrl"
alt
/>
</div>
</
template
>
<
script
>
import
{
EMLINK
}
from
'constants'
;
import
{
EMLINK
}
from
"constants"
;
export
default
{
name
:
'common-title'
,
name
:
"common-title"
,
data
()
{
return
{
isWeb
:
window
.
__isWeb
,
showInfo
:
{
imageUrl
:
''
,
jumpUrl
:
''
imageUrl
:
""
,
jumpUrl
:
""
}
};
},
...
...
@@ -31,9 +38,9 @@ export default {
},
watch
:
{
advertInfoList
:
{
handler
(
list
)
{
handler
(
list
)
{
list
.
forEach
(
element
=>
{
if
(
element
.
position
==
this
.
position
)
{
if
(
element
.
position
==
this
.
position
)
{
this
.
showInfo
=
element
;
}
});
...
...
@@ -42,16 +49,15 @@ export default {
}
},
created
()
{},
mounted
()
{
},
computed
:
{
},
mounted
()
{},
computed
:
{},
methods
:
{
// 广告位跳转
jumpPage
()
{
if
(
this
.
isWeb
)
{
window
.
location
.
href
=
this
.
showInfo
.
jumpUrl
;
return
;
}
let
paramList
=
[
{
key
:
"pageUrl"
,
...
...
@@ -59,7 +65,7 @@ export default {
type
:
4
,
seqNo
:
1
}
]
]
;
rocNative
.
dispatchEventByModuleCode
({
modeCode
:
"M300"
,
jsonString
:
paramList
...
...
src/images/course/pica-icon.png
0 → 100755
浏览文件 @
5970a177
1.7 KB
src/store/modules/user.js
浏览文件 @
5970a177
...
...
@@ -44,8 +44,8 @@ const user = {
if
(
picapDoctor
.
id
)
{
let
avatar
=
picapDoctor
.
avatar_image_url
||
''
;
let
avatarUrl
=
''
;
const
img1
=
await
preLoadImg
(
`https://test-file.yunqueyi.com
${
avatar
}
`
).
catch
(
err
=>
console
.
log
(
err
));
const
img2
=
await
preLoadImg
(
`https://file.yunqueyi.com
${
avatar
}
`
).
catch
(
err
=>
console
.
log
(
err
));
const
img1
=
await
preLoadImg
(
`https://test-file.yunqueyi.com
${
avatar
}
`
).
catch
(
err
=>
console
.
error
(
err
));
const
img2
=
await
preLoadImg
(
`https://file.yunqueyi.com
${
avatar
}
`
).
catch
(
err
=>
console
.
error
(
err
));
if
(
img1
)
{
avatarUrl
=
img1
.
src
;
}
...
...
@@ -59,7 +59,7 @@ const user = {
errCallBack
()
}
}
catch
(
err
)
{
console
.
log
(
err
);
console
.
error
(
err
);
}
},
...
...
src/utils/wxShare.js
浏览文件 @
5970a177
...
...
@@ -106,6 +106,8 @@ export const wechatShare = async (option = {}, successCB = () => {}) => {
wxShare
(
shareOption
,
successCB
);
};
Vue
.
prototype
.
wechatShare
=
wechatShare
Vue
.
prototype
.
wechatShare
=
wechatShare
;
Vue
.
prototype
.
wxDisabledShare
=
wxDisabledShare
;
src/views/share-merge-detail.vue
浏览文件 @
5970a177
...
...
@@ -81,13 +81,15 @@
<span
class=
"c-title"
>
目录
</span>
<span
v-if=
"needShowUpdate"
class=
"c-sub"
>
每周更新课程
</span>
</div>
<CellListDetail
<CellListDetail
Share
:projectComponent=
"projectComponentDTOS"
:actionList=
"actionList"
:detailNum=
"detailNum"
:courseRequire=
"courseRequire"
:hasBindCard=
"hasBindCard"
:limitTimes=
"limitTimes"
:logged=
"logged"
:projectId=
"projectId"
/>
</div>
</div>
...
...
@@ -97,14 +99,22 @@
<div
v-if=
"detailNum
<
=
9
"
class=
"no-more-bottom"
></div>
</div>
<div
v-if=
"!hasBindCard && !isWeb"
style=
"padding-top: 30px"
></div>
<div
style=
"padding-top: 20px"
></div>
<!--
<div
v-if=
"!hasBindCard && !isWeb"
style=
"padding-top: 30px"
></div>
-->
<BindCardButton
<
!--
<
BindCardButton
v-if=
"!hasBindCard && !isWeb"
:cardInfo=
"cardInfo"
@
changeClick=
"changeClick"
@
gotoBuy=
"confirm"
></BindCardButton>
></BindCardButton>
-->
<BindCardButtonShare
v-if=
"!hasBindCard"
:cardInfo=
"cardInfo"
@
changeClick=
"changeClick"
@
gotoBuy=
"confirm"
></BindCardButtonShare>
<!--去激活-->
<ChangeCard
...
...
@@ -124,7 +134,7 @@
></span>
</div>
<ShiKanCommonDialog
<
!--
<
ShiKanCommonDialog
class=
"shikan"
needSubContent
content=
"试看结束"
...
...
@@ -132,7 +142,7 @@
confirmBtnText=
"去购买"
:isShowDialog=
"isShowSkDialog"
@
handlerAction=
"goBuyKc"
/>
/>
-->
<IOSDownloadDialog
class=
"shikan"
...
...
@@ -142,6 +152,46 @@
:isShowDialog=
"isShowIOSDownloadDialog"
@
handlerAction=
"goBack"
/>
<!-- 未登录提示 -->
<div
class=
"course-tips"
v-if=
"!logged"
>
<CourseCovers
isSingle
coverTips=
"登录后马上学习课程"
rightBtnText=
"去登录"
@
btnClick=
"btnClick"
></CourseCovers>
</div>
<!-- 试看结束 -->
<div
class=
"course-tips"
v-if=
"isShowSkDialog"
>
<CourseCovers
isSingle
coverTips=
"试看结束
<br>
学习完整版课程,请来云鹊医App购买"
rightBtnText="APP购买更优惠"
@btnClick="download(1)"
>
</CourseCovers>
</div>
<!-- 播放结束 -->
<div
class=
"course-tips"
v-if=
"isShowEndDialog"
>
<CourseCovers
isSingle
coverTips=
"播放结束
<br>
更多其他课程,请前往云鹊医APP学习"
rightBtnText="APP购买更优惠"
@btnClick="download(1)"
>
</CourseCovers>
</div>
<!-- 本课程为付费课程 -->
<div
class=
"course-tips"
v-if=
"isShowFFDialog"
>
<CourseCovers
isSingle
coverTips=
"本课程为付费课程
<br>
学习完整版课程,请来云鹊医App购买"
rightBtnText="APP购买更优惠"
@btnClick="download(1)"
>
</CourseCovers>
</div>
<div
class=
"download-abs"
@
click=
"download"
>
<img
src=
"../images/course/pica-icon.png"
alt
/>
<span
:class=
"
{'short': needShort}">
{{
downloadTips
}}
</span>
</div>
</div>
</
template
>
<
script
>
...
...
@@ -149,7 +199,7 @@ import CommonNavbar from "@/components/common/common-navbar";
import
CommonDescription
from
"@/components/common/common-description"
;
import
CommonSpliteLine
from
"@/components/common/common-splite-line"
;
import
CellListDetail
from
"@/components/business/cell-list-detail
"
;
import
CellListDetail
Share
from
"@/components/business/cell-list-detail-share
"
;
import
CommonTcPlayer
from
"@/components/common/common-tcplayer"
;
import
Loading
from
"@/components/common/common-loading"
;
...
...
@@ -169,8 +219,10 @@ import { getWebPageUrl, gotoPage, getAppVersion } from "@/utils/index";
import
{
mapGetters
,
mapActions
}
from
"vuex"
;
import
vueFilters
from
"@/utils/filter"
;
import
{
Toast
}
from
"vant"
;
import
BindCardButton
from
"@/components/cme/bind-card-button
"
;
import
BindCardButton
Share
from
"@/components/cme/bind-card-button-share
"
;
import
ChangeCard
from
"@/components/cme/change-card"
;
import
CourseCovers
from
"@/components/course/course-covers"
;
let
cataOffsetTop
=
0
;
let
intorOffsetTop
=
0
;
let
titleOffsetHeight
=
50
;
...
...
@@ -179,6 +231,7 @@ export default {
data
()
{
return
{
// token: "9B62E5874DA94979A54DB3E9DFC1443F",
downloadTips
:
"打开云鹊医APP"
,
isWeb
:
window
.
__isWeb
,
isAndroid
:
__isAndroid
,
textContent
:
""
,
...
...
@@ -228,7 +281,7 @@ export default {
bannerType
:
1
,
// 1 图片 2视频
videoOptions
:
{
mp4
:
""
,
autoplay
:
tru
e
,
//iOS下safari浏览器,以及大部分移动端浏览器是不开放视频自动播放这个能力的
autoplay
:
fals
e
,
//iOS下safari浏览器,以及大部分移动端浏览器是不开放视频自动播放这个能力的
coverpic
:
require
(
"../images/video-cover.png"
),
width
:
"415"
,
//视频的显示宽度,请尽量使用视频分辨率宽度
height
:
"210"
,
//视频的显示高度,请尽量使用视频分辨率高度
...
...
@@ -264,14 +317,17 @@ export default {
needShowUpdate
:
false
,
skCourseId
:
0
,
isShowSkDialog
:
false
,
isShowIOSDownloadDialog
:
false
isShowEndDialog
:
false
,
isShowFFDialog
:
false
,
isShowIOSDownloadDialog
:
false
,
needShort
:
false
};
},
components
:
{
CommonNavbar
,
CommonDescription
,
CommonSpliteLine
,
CellListDetail
,
CellListDetail
Share
,
Loading
,
CommonTcPlayer
,
BasicInfo
,
...
...
@@ -283,14 +339,15 @@ export default {
ExjumperButton
,
CommonAdertImg
,
NoMoreContent
,
BindCardButton
,
BindCardButton
Share
,
ChangeCard
,
ShiKanCommonDialog
,
IOSDownloadDialog
IOSDownloadDialog
,
CourseCovers
},
computed
:
{
...
mapGetters
([
"userInfo"
])
...
mapGetters
([
"userInfo"
,
"logged"
])
},
created
()
{
...
...
@@ -299,11 +356,14 @@ export default {
this
.
projectId
=
this
.
$route
.
query
.
id
||
1
;
console
.
log
(
"#######location"
,
location
);
// TODO TOKEN问题,登陆问题
// TODO 要先解码URL
// _this.checkToken();
// _this.setUserInfo(param);
const
{
token
,
info
}
=
this
.
$store
.
state
.
user
;
if
(
token
&&
!
info
.
id
)
{
this
.
$store
.
dispatch
(
'getUserInfo'
);
}
_this
.
getProjectInfoById
();
// 调用广告位接口
...
...
@@ -311,14 +371,26 @@ export default {
},
mounted
()
{
window
.
addEventListener
(
"scroll"
,
this
.
scrollFun
);
const
_this
=
this
;
setTimeout
(()
=>
{
this
.
downloadTips
=
''
;
this
.
needShort
=
true
;
},
5000
);
},
beforeDestroyed
()
{
this
.
$refs
.
tcPlayerRef
&&
this
.
$refs
.
tcPlayerRef
.
pause
();
window
.
removeEventListener
(
"scroll"
,
this
.
scrollFun
);
},
methods
:
{
...
mapActions
([
"setUserInfo"
]),
...
mapActions
([
"setUserInfo"
,
"goLogin"
]),
btnClick
()
{
this
.
goLogin
();
},
download
()
{
window
.
location
.
href
=
"https://a.app.qq.com/o/simple.jsp?pkgname=com.picahealth.yunque"
;
},
// 关闭激活弹框
cancleChangeCard
()
{
...
...
@@ -545,10 +617,11 @@ export default {
getProjectInfoById
()
{
let
_this
=
this
;
let
param
=
{
token
:
_this
.
userInfo
.
userToken
||
this
.
token
||
"47993ED00ECB46CE8D31ECF3AE34B4AA"
,
// token:
// _this.userInfo.userToken ||
// this.token ||
// "47993ED00ECB46CE8D31ECF3AE34B4AA",
token
:
this
.
$store
.
state
.
user
.
token
||
this
.
token
,
setEntry
:
true
};
let
videoUrl
=
this
.
$route
.
query
.
videoUrl
||
""
;
...
...
@@ -664,6 +737,7 @@ export default {
// });
// 二次分享
// let shareUrl = encodeURIComponent(location.href);
let
shareUrl
=
location
.
href
;
this
.
wechatShare
(
{
...
...
@@ -821,7 +895,7 @@ export default {
// 跳转到课程(H5)
gotoCourseNew
:
function
()
{
this
.
$refs
.
tcPlayerRef
&&
this
.
$refs
.
tcPlayerRef
.
pause
();
window
.
location
.
href
=
""
window
.
location
.
href
=
""
;
},
goBuyKc
(
type
)
{
...
...
@@ -971,6 +1045,48 @@ export default {
height: 50px;
}
}
.course-tips {
width: 100%;
position: absolute;
z-index: 100;
top: 0;
left: 0;
}
.download-abs {
display: flex;
// width: 100%;
position: absolute;
z-index: 101;
top: 15px;
right: 0;
height: 30px;
align-items: center;
img {
position: relative;
left: 15px;
width: 30px;
height: 30px;
}
span {
display: inline-block;
height: 30px;
line-height: 30px;
padding: 0 8px 0 23px;
font-size: 12px;
font-weight: 700;
color: #5ba99b;
background: #fff;
width: 120px;
&.short {
width: 10px;
transition: width 1s;
-moz-transition: width 1s; /* Firefox 4 */
-webkit-transition: width 1s; /* Safari 和 Chrome */
-o-transition: width 1s; /* Opera */
padding: 0 12px;
}
}
}
}
.no-more-bottom {
position: relative;
...
...
写
预览
Markdown
格式
0%
请重试
or
附加一个文件
附加文件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录