Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
x-learn
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
x-learn
Commits
6aa3e5f8
提交
6aa3e5f8
authored
11月 09, 2020
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加知识点详情页面
上级
f77a68fb
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
274 行增加
和
268 行删除
+274
-268
dev.ezijing.com.key
build/dev.ezijing.com.key
+25
-25
dev.ezijing.com.pem
build/dev.ezijing.com.pem
+22
-22
CourseTag.vue
src/components/CourseTag.vue
+42
-26
chapter.vue
src/modules/viewer/components/aside/chapter.vue
+1
-1
index.vue
src/modules/viewer/components/aside/index.vue
+1
-1
upload.vue
src/modules/viewer/components/common/upload.vue
+1
-1
fileList.vue
src/modules/viewer/components/read/fileList.vue
+1
-1
TagLayout.vue
src/pages/course/learn/components/TagLayout.vue
+141
-0
tag.vue
src/pages/course/learn/tag.vue
+21
-28
index.vue
src/pages/my/course/index.vue
+7
-3
routes.js
src/router/routes.js
+12
-160
没有找到文件。
build/dev.ezijing.com.key
浏览文件 @
6aa3e5f8
-----BEGIN RSA PRIVATE KEY-----
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA
gddAmdjWL+4JUXvmiR/lr9cbdoctEGLwdLpnIrRlL/oVKubZ
MIIEowIBAAKCAQEA
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
-----END RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
build/dev.ezijing.com.pem
浏览文件 @
6aa3e5f8
-----BEGIN CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIF
iDCCBHCgAwIBAgIQAepAKb4wAxmrtof7BwPQSD
ANBgkqhkiG9w0BAQsFADBu
MIIF
hzCCBG+gAwIBAgIQCzEi4VmynSzbyBV1UEXGoj
ANBgkqhkiG9w0BAQsFADBu
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg
d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg
RFYgVExTIENBIC0gRzEwHhcNM
TkxMTA4MDAwMDAwWhcNMjAxMTA3MTIwMDAw
WjAa
RFYgVExTIENBIC0gRzEwHhcNM
jAxMTA5MDAwMDAwWhcNMjExMTA5MjM1OTU5
WjAa
MRgwFgYDVQQDEw9kZXYuZXppamluZy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB
MRgwFgYDVQQDEw9kZXYuZXppamluZy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQ
CB10CZ2NYv7glRe+aJH+Wv1xt2hy0QYvB0umcitGUv+hUq5tlO
DwAwggEKAoIBAQ
D0yNQTHE6Pq18xRpT63+TT5WiRWSHUZVkAIs93FHZVyOM6Roiq
sBJ53mkDaQcpRttX2LriI0jOfrrzOLK2K+51GK4YvjAFM922WmRK3L2KPRkdld7b
WhjhMrj+7JudwuGiq72CDKIkU2ZdUvF7ZPFF4ZeFHy0BzRFMK5oW/SgcnsdcjjwJ
ehZDvd9XcU1E6nd6QuYhgeqjZ6nmGF+rUDhJ7LsgzVnQD04XoxXtOCqb7xroXLh4
n/NzyyCPJ3tey7JG6srCkdZd/L0UwcTuv/1H4hQcCQg+ZnXuqXCqmGV48rwjV+cN
1uDH31/Sfueq4aNhndFydTSPrHN9CE6o5iaGTh+VCpLHoxvqxKZYztXj+H/nngtD
T8s6+CVc8iVHnlNR7o0pWgI9ldAQcc9kKUfSp2dcWJSrkjV/oYxSgYJtXkMsQJs4
Ik1XeeA19PdkWYCaEhm3uf6jey/MirCCGJlKPQr2PITvNtJmNVQERDO0VRx9iA9l
Cd0I/+yepqTDyh4uagEZKKD8Uatz/jWXYMnHIjGb8J9oSF+dI3iG85MAVdyuj1yD
B9kUWx2AiQVK9HdxcikiI3yg9/zErqdoCk5fAgMBAAGjggJ0MIICcD
AfBgNVHSME
LLzwfUF9P9sSEzs475FFopStXkKJ54g4Sa8ZAgMBAAGjggJzMIICbz
AfBgNVHSME
GDAWgBRVdE+yck/1YLpQ0dfmUVyaAYca1zAdBgNVHQ4EFgQU
28ndXe6qIDlhPWX5
GDAWgBRVdE+yck/1YLpQ0dfmUVyaAYca1zAdBgNVHQ4EFgQU
kRHkmubxZAvEWtCY
+gzJoRhaQQo
wGgYDVR0RBBMwEYIPZGV2LmV6aWppbmcuY29tMA4GA1UdDwEB/wQE
IBT9sw/3Yb8
wGgYDVR0RBBMwEYIPZGV2LmV6aWppbmcuY29tMA4GA1UdDwEB/wQE
AwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwTAYDVR0gBEUwQzA3
AwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwTAYDVR0gBEUwQzA3
BglghkgBhv1sAQIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQu
BglghkgBhv1sAQIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQu
Y29tL0NQUzAIBgZngQwBAgEwgYAGCCsGAQUFBwEBBHQwcjAkBggrBgEFBQcwAYYY
Y29tL0NQUzAIBgZngQwBAgEwgYAGCCsGAQUFBwEBBHQwcjAkBggrBgEFBQcwAYYY
aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEoGCCsGAQUFBzAChj5odHRwOi8vY2Fj
aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEoGCCsGAQUFBzAChj5odHRwOi8vY2Fj
ZXJ0cy5kaWdpY2VydC5jb20vRW5jcnlwdGlvbkV2ZXJ5d2hlcmVEVlRMU0NBLUcx
ZXJ0cy5kaWdpY2VydC5jb20vRW5jcnlwdGlvbkV2ZXJ5d2hlcmVEVlRMU0NBLUcx
LmNydDAJBgNVHRMEAjAAMIIBB
QYKKwYBBAHWeQIEAgSB9gSB8wDxAHYApLkJkLQY
LmNydDAJBgNVHRMEAjAAMIIBB
AYKKwYBBAHWeQIEAgSB9QSB8gDwAHYA9lyUL9F3
WBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BAAAAFuSnTaJgAABAMARzBFAiEAtYCW
MCIUVBgIMJRWjuNNExkzv98MLyALzE7xZOMAAAF1qpa6jQAABAMARzBFAiAwHOcp
PLYE6pylBOsB1MmETgxGpYrG64Osn/XXyJlh+/UCIEnttMCBvNif4hpJfAQibP/Q
Ua1H0WK4OZUHiQ1rndqnYxPHhP9XWunwpRMoagIhAOB2MPSW9M4qj6Yih7eQkydl
bJ9w0VYC59hi8Tmcf/mfAHcAXqdz+d9WwOe1Nkh90EngMnqRmgyEoRIShBh1loFx
lgawpoBZzRzhisU+TN67AHYAXNxDkv7mq0VEsV6a1FbmEDf71fpH3KFzlLJe5vbH
RVgAAAFuSnTZSQAABAMASDBGAiEAsMgDWdSJ5d2jiXoNyxJ5FY7+3PET59vgvxi9
DsoAAAF1qpa63gAABAMARzBFAiEA92ZeW0PgyWW3j+3wypLS0O/wI63C+x0WTvMZ
Eev9MwECIQC3sfR8sRWxJg82xH7lIA9sN87p7fLmr+KyhnuAK+2bcjANBgkqhkiG
Vngp6AMCIBoThjaKif+XY11YbaV89ndqs1nDlzbEfBrFftoB9fchMA0GCSqGSIb3
9w0BAQsFAAOCAQEAOXMhz5dapVgYoLe23i+rEbBeO648c3cAO11qubqE0b5ie2bY
DQEBCwUAA4IBAQA2geo9wQAd+vx+lwAafVRxCBQyBiS0qT413ewYpZYDnSkLX0l1
4DuatptwiLA47xfSVbFF0Y44cPL1b0zHe+Ki9TpcFP+TQ/+cPD2bPrqovI2uh8Qi
5kRdxDGWQhPzOio0ckj/jOtOlbbSsiovBBVTyYPB8WfkNjMd0psMNx2e6Wy/WKkQ
1RU7baLoYO9t7NxaPXh9RtRLUufJHas7HcWtLw/nPvVi+SuhgiiPytWdVM64dIPz
X3DqEOB4XGg0RwpebiAmz6lWxyFwIAbCrwCntkkaIF4LnIvczn6pvPFBtK2nXJJC
+nP9YY6wZhp4S/vNw5T7LARaw28xrEPzgCzWoXBUDyLB1slU3A2Uu+vl4lilcVeF
HL0Igbxo+xJLt3Hql7TcwkFDXz/LIB8AwhhkkhhwW45r3Eyjw8eOyzvflDPwSNH+
B
/hl/75PWIdlxeRsD2V4TGCg796eL1BTVYEh7+mjvvaft+1/jwofKtGxg34YZHfl
B
yadQ+AH4H4vYYVo0ILNIPCdaokLQ+u4FttB9VQ+iGmpJ56Yg2muxWh8Qckca+vH
6M22MuuP1pLviPZEE4ZlPXvltUV/Qq47LvZkTg==
40RbC5aK1RSy2RIRpC5fwvq2JuV/CksP5G5Q
-----END CERTIFICATE-----
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEqjCCA5KgAwIBAgIQAnmsRYvBskWr+YBTzSybsTANBgkqhkiG9w0BAQsFADBh
MIIEqjCCA5KgAwIBAgIQAnmsRYvBskWr+YBTzSybsTANBgkqhkiG9w0BAQsFADBh
...
...
src/components/CourseTag.vue
浏览文件 @
6aa3e5f8
<
template
>
<
template
>
<div
element-loading-text=
"加载中..."
v-loading=
"!loaded"
>
<el-collapse
v-model=
"activeNames"
v-if=
"list.length"
>
<el-collapse
v-model=
"activeNames"
v-if=
"detail.chapters.length"
>
<el-collapse-item
:title=
"item.name"
:name=
"item.id"
v-for=
"item in list"
:key=
"item.id"
>
<el-collapse-item
:title=
"item.name"
:name=
"item.id"
v-for=
"item in detail.chapters"
:key=
"item.id"
>
<ul>
<ul>
<li
<li
v-for=
"subItem in item.tag"
:key=
"subItem.id"
@
click=
"$emit('on-click', subItem)"
>
:class=
"
{ 'is-active': subItem.id === activeId }"
<div
class=
"name"
>
{{
subItem
.
title
}}
</div>
v-for="subItem in item.tag"
</li>
:key="subItem.id"
</ul>
@click="$emit('on-click', subItem)"
</el-collapse-item>
>
</el-collapse>
<div
class=
"name"
>
{{
subItem
.
title
}}
</div>
<div
class=
"empty"
v-else
>
暂无相关内容
</div>
</li>
</div>
</ul>
</el-collapse-item>
</el-collapse>
</
template
>
</
template
>
<
script
>
<
script
>
import
*
as
api
from
'@/api/course.js'
import
*
as
api
from
'@/api/course.js'
export
default
{
export
default
{
props
:
{
props
:
{
activeId
:
{
type
:
String
},
courseId
:
{
courseId
:
{
type
:
String
,
type
:
String
,
default
()
{
default
()
{
return
this
.
$route
.
params
.
id
return
this
.
$route
.
params
.
id
}
}
},
}
isTest
:
{
type
:
Boolean
,
default
:
false
}
},
},
data
()
{
data
()
{
return
{
return
{
loaded
:
false
,
list
:
[],
detail
:
{
chapters
:
[]
},
activeNames
:
[]
activeNames
:
[]
}
}
},
},
watch
:
{
parentId
(
value
)
{
this
.
activeNames
=
[
value
]
}
},
computed
:
{
parentId
()
{
for
(
const
item
of
this
.
list
)
{
if
(
item
.
tag
&&
item
.
tag
.
length
)
{
for
(
const
subitem
of
item
.
tag
)
{
if
(
subitem
.
id
===
this
.
activeId
)
{
return
item
.
id
}
}
}
}
return
''
}
},
methods
:
{
methods
:
{
// 获取知识点列表
// 获取知识点列表
getCourseTagList
()
{
getCourseTagList
()
{
this
.
loaded
=
false
api
.
getCourseTagList
(
this
.
courseId
).
then
(
response
=>
{
api
const
{
chapters
=
[]
}
=
response
.
getCourseTagList
(
this
.
courseId
)
this
.
list
=
chapters
.
then
(
response
=>
{
})
this
.
detail
=
response
})
.
finally
(()
=>
{
this
.
loaded
=
true
})
}
}
},
},
beforeMount
()
{
beforeMount
()
{
...
@@ -69,7 +84,8 @@ li {
...
@@ -69,7 +84,8 @@ li {
padding
:
5px
0
;
padding
:
5px
0
;
cursor
:
pointer
;
cursor
:
pointer
;
color
:
#666
;
color
:
#666
;
&
:hover
{
&
:hover
,
&
.is-active
{
color
:
#c01540
;
color
:
#c01540
;
}
}
.name
{
.name
{
...
...
src/modules/viewer/components/aside/chapter.vue
浏览文件 @
6aa3e5f8
...
@@ -114,7 +114,7 @@ export default {
...
@@ -114,7 +114,7 @@ export default {
&
.is-active
{
&
.is-active
{
background
:
#3c3c3c
;
background
:
#3c3c3c
;
.chapter-item-list__name
{
.chapter-item-list__name
{
color
:
#
b49441
;
color
:
#
c01540
;
}
}
}
}
&
:hover
{
&
:hover
{
...
...
src/modules/viewer/components/aside/index.vue
浏览文件 @
6aa3e5f8
...
@@ -76,7 +76,7 @@ export default {
...
@@ -76,7 +76,7 @@ export default {
color
:
#909090
;
color
:
#909090
;
text-align
:
center
;
text-align
:
center
;
&
.is-active
{
&
.is-active
{
color
:
#
b49441
;
color
:
#
c01540
;
}
}
}
}
::v-deep
.el-tabs__active-bar
,
::v-deep
.el-tabs__active-bar
,
...
...
src/modules/viewer/components/common/upload.vue
浏览文件 @
6aa3e5f8
...
@@ -106,7 +106,7 @@ export default {
...
@@ -106,7 +106,7 @@ export default {
text-decoration
:
none
;
text-decoration
:
none
;
color
:
#333
;
color
:
#333
;
&
:hover
{
&
:hover
{
color
:
#
b49441
;
color
:
#
c01540
;
}
}
}
}
}
}
...
...
src/modules/viewer/components/read/fileList.vue
浏览文件 @
6aa3e5f8
...
@@ -51,7 +51,7 @@ export default {
...
@@ -51,7 +51,7 @@ export default {
text-decoration
:
none
;
text-decoration
:
none
;
color
:
#333
;
color
:
#333
;
&
:hover
{
&
:hover
{
color
:
#
b49441
;
color
:
#
c01540
;
}
}
::v-deep
*
{
::v-deep
*
{
margin
:
0
;
margin
:
0
;
...
...
src/pages/course/learn/components/TagLayout.vue
0 → 100644
浏览文件 @
6aa3e5f8
<
template
>
<div
class=
"app-tag"
element-loading-text=
"加载中..."
v-loading=
"!loaded"
>
<div
class=
"app-tag-main"
>
<!-- 顶部区域 -->
<div
class=
"app-tag-main-hd"
>
<router-link
:to=
"`/course/learn/$
{courseId}`">
<i
class=
"el-icon-arrow-left"
></i>
</router-link>
<h1
class=
"app-tag-main-hd__title"
>
{{
detail
.
title
}}
</h1>
<div
class=
"menu"
@
click=
"menuVisible = !menuVisible"
>
<i
class=
"el-icon-s-unfold"
v-if=
"menuVisible"
></i>
<i
class=
"el-icon-s-fold"
v-else
></i>
</div>
</div>
<!-- 主体区域 -->
<div
class=
"app-tag-main-bd"
>
<router-view
:key=
"$route.fullPath"
@
ready=
"onReady"
/>
</div>
</div>
<div
class=
"app-tag-aside"
v-show=
"menuVisible"
>
<div
class=
"app-tag-aside-hd"
>
考点列表
</div>
<div
class=
"app-tag-aside-bd"
>
<course-tag
:activeId=
"$route.params.id"
:courseId=
"courseId"
@
on-click=
"onTagClick"
></course-tag>
</div>
</div>
</div>
</
template
>
<
script
>
import
CourseTag
from
'@/components/CourseTag'
export
default
{
components
:
{
CourseTag
},
data
()
{
return
{
menuVisible
:
true
,
loaded
:
true
,
detail
:
{}
}
},
computed
:
{
courseId
()
{
return
this
.
$route
.
params
.
courseId
}
},
methods
:
{
onReady
(
response
)
{
this
.
detail
=
response
},
onTagClick
(
data
)
{
this
.
$router
.
push
({
name
:
'courseTagItem'
,
params
:
{
courseId
:
this
.
courseId
,
id
:
data
.
id
}
})
}
}
}
</
script
>
<
style
lang=
"scss"
>
.app-tag
{
display
:
flex
;
height
:
100vh
;
overflow
:
hidden
;
}
.app-tag-main
{
flex
:
1
;
display
:
flex
;
flex-direction
:
column
;
}
.app-tag-main-hd
{
display
:
flex
;
align-items
:
center
;
background-color
:
#3f3f3f
;
height
:
56px
;
a
{
color
:
#fff
;
padding
:
10px
;
}
i
{
font-size
:
24px
;
color
:
#fff
;
}
}
.app-tag-main-hd__title
{
flex
:
1
;
font-size
:
1
.5em
;
// text-align: center;
color
:
#a0a0a0
;
}
.app-tag-main-bd
{
flex
:
1
;
height
:
calc
(
100vh
-
56px
);
overflow-y
:
auto
;
}
.app-tag
.menu
{
width
:
24px
;
height
:
24px
;
padding
:
12px
;
margin-right
:
10px
;
color
:
#fff
;
text-align
:
center
;
border-radius
:
50%
;
cursor
:
pointer
;
&
:hover
{
background-color
:
rgba
(
255
,
255
,
255
,
0
.08
);
}
}
.app-tag-aside
{
display
:
flex
;
flex-direction
:
column
;
width
:
350px
;
min-height
:
100vh
;
background-color
:
#232323
;
}
.app-tag-aside-hd
{
height
:
56px
;
font-size
:
16px
;
font-weight
:
600
;
line-height
:
56px
;
color
:
#909090
;
text-align
:
center
;
}
.app-tag-aside-bd
{
flex
:
1
;
overflow-x
:
hidden
;
overflow-y
:
auto
;
padding
:
0
10px
0
20px
;
color
:
#b0b0b0
;
.el-collapse-item__header
{
font-size
:
15px
;
color
:
#b0b0b0
;
background-color
:
transparent
;
border
:
0
;
}
.el-collapse-item__wrap
{
background-color
:
transparent
;
border
:
0
;
}
.el-collapse-item__content
{
font-size
:
14px
;
}
}
</
style
>
src/pages/course/learn/tag.vue
浏览文件 @
6aa3e5f8
<
template
>
<
template
>
<div
class=
"course-tag-wrapper"
element-loading-text=
"加载中..."
v-loading=
"!loaded"
>
<div
class=
"course-tag"
element-loading-text=
"加载中..."
v-loading=
"!loaded"
>
<div
class=
"course-tag-bd"
>
<div
class=
"course-tag-main"
>
<div
class=
"course-tag-main"
>
<div
class=
"tag-content"
v-html=
"html"
></div>
<div
class=
"tag-content"
v-html=
"html"
></div>
</div>
<div
class=
"tools"
>
<div>
<el-button
type=
"primary"
size=
"medium"
@
click=
"toExamPage"
v-if=
"detail.has_kaoshi"
>
去测试
</el-button>
<el-button
type=
"primary"
size=
"medium"
@
click=
"toCourseVideo"
v-if=
"detail.has_video"
>
相关视频
</el-button>
</div>
</div>
<div
class=
"tools"
>
<div>
<div>
<el-button
type=
"primary"
size=
"medium"
@
click=
"getCourseTag(detail.last)"
v-if=
"detail.last"
>
上一点
</el-button>
<el-button
type=
"primary"
size=
"medium"
@
click=
"toExamPage"
v-if=
"detail.has_kaoshi"
>
去测试
</el-button>
<el-button
type=
"primary"
size=
"medium"
@
click=
"getCourseTag(detail.next)"
v-if=
"detail.next"
>
下一点
</el-button>
<el-button
type=
"primary"
size=
"medium"
@
click=
"toCourseVideo"
v-if=
"detail.has_video"
>
相关视频
</el-button>
</div>
<div>
<el-button
type=
"primary"
size=
"medium"
@
click=
"getCourseTag(detail.last)"
v-if=
"detail.last"
>
上一点
</el-button
>
<el-button
type=
"primary"
size=
"medium"
@
click=
"getCourseTag(detail.next)"
v-if=
"detail.next"
>
下一点
</el-button
>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -57,6 +51,7 @@ export default {
...
@@ -57,6 +51,7 @@ export default {
api
.
getCourseTag
(
tagId
||
this
.
tagId
).
then
(
response
=>
{
api
.
getCourseTag
(
tagId
||
this
.
tagId
).
then
(
response
=>
{
this
.
loaded
=
true
this
.
loaded
=
true
this
.
detail
=
response
this
.
detail
=
response
this
.
$emit
(
'ready'
,
response
)
})
})
},
},
// 去知识点考试页面
// 去知识点考试页面
...
@@ -79,20 +74,20 @@ export default {
...
@@ -79,20 +74,20 @@ export default {
</
script
>
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
scoped
>
.course-tag
{
height
:
100%
;
display
:
flex
;
flex-direction
:
column
;
}
.course-tag-main
{
.course-tag-main
{
flex
:
1
;
padding
:
30px
;
padding
:
30px
;
background-color
:
#fff
;
background-color
:
#fff
;
border-radius
:
8px
;
border-radius
:
8px
;
}
}
.tag-title
{
font-size
:
15px
;
font-weight
:
bold
;
color
:
#222
;
line-height
:
24px
;
}
.tag-content
{
.tag-content
{
font-size
:
1
3
px
;
font-size
:
1
4
px
;
line-height
:
22
px
;
line-height
:
30
px
;
::v-deep
img
{
::v-deep
img
{
max-width
:
100%
;
max-width
:
100%
;
}
}
...
@@ -101,14 +96,12 @@ export default {
...
@@ -101,14 +96,12 @@ export default {
}
}
}
}
.tools
{
.tools
{
height
:
50px
;
position
:
sticky
;
position
:
sticky
;
bottom
:
0
;
bottom
:
0
;
display
:
flex
;
display
:
flex
;
justify-content
:
space-between
;
justify-content
:
space-between
;
align-items
:
center
;
align-items
:
center
;
height
:
50px
;
padding
:
20px
;
padding
:
0
30px
;
background-color
:
#fff
;
background-color
:
#fff
;
box-shadow
:
0px
0px
6px
0px
rgba
(
0
,
0
,
0
,
0
.05
);
box-shadow
:
0px
0px
6px
0px
rgba
(
0
,
0
,
0
,
0
.05
);
}
}
...
...
src/pages/my/course/index.vue
浏览文件 @
6aa3e5f8
<
template
>
<
template
>
<course-list
:showProgress=
"true"
/>
<course-list
:showProgress=
"true"
@
on-click=
"handleClick"
/>
</
template
>
</
template
>
<
script
>
<
script
>
import
CourseList
from
'@/components/CourseList.vue'
import
CourseList
from
'@/components/CourseList.vue'
export
default
{
export
default
{
name
:
'CourseLearn'
,
components
:
{
CourseList
},
components
:
{
CourseList
}
methods
:
{
handleClick
(
data
)
{
this
.
$router
.
push
({
name
:
'courseLearnItem'
,
params
:
{
id
:
data
.
id
}
})
}
}
}
}
</
script
>
</
script
>
src/router/routes.js
浏览文件 @
6aa3e5f8
...
@@ -17,12 +17,6 @@ const courseRoutes = [
...
@@ -17,12 +17,6 @@ const courseRoutes = [
name
:
'courseLearnChapter'
,
name
:
'courseLearnChapter'
,
component
:
()
=>
import
(
/* webpackChunkName: "course-learn" */
'@/pages/course/learn/item'
)
component
:
()
=>
import
(
/* webpackChunkName: "course-learn" */
'@/pages/course/learn/item'
)
},
},
// 课程知识点详情
{
path
:
'/course/learn/:courseId/tag/:id'
,
name
:
'courseTagItem'
,
component
:
()
=>
import
(
/* webpackChunkName: "course-learn" */
'@/pages/course/learn/tag'
)
},
// 课程练习列表
// 课程练习列表
{
path
:
'/course/test'
,
component
:
()
=>
import
(
/* webpackChunkName: "course-test" */
'@/pages/course/test'
)
},
{
path
:
'/course/test'
,
component
:
()
=>
import
(
/* webpackChunkName: "course-test" */
'@/pages/course/test'
)
},
// 课程练习详情
// 课程练习详情
...
@@ -48,160 +42,6 @@ const examAnswer = [
...
@@ -48,160 +42,6 @@ const examAnswer = [
export
default
[
export
default
[
{
path
:
'*'
,
redirect
:
'/index'
},
{
path
:
'*'
,
redirect
:
'/index'
},
{
path
:
'/'
,
redirect
:
'/index'
},
{
path
:
'/'
,
redirect
:
'/index'
},
// /* 课程检测 */
// {
// path: '/exam/abilityAnswer',
// name: 'abilityAnswer',
// component: () => import('../pages/courseExam/abilityAnswer.vue')
// },
// /* 能力自测首页 */
// {
// path: '/exam/index',
// name: 'examIndex',
// component: () => import('../pages/courseExam/index.vue')
// },
// /* 能力自测答题页面 */
// {
// path: '/exam/answer',
// name: 'examAnswer',
// component: () => import('../pages/courseExam/answer.vue')
// },
// /* 能力自测答题结果 */
// {
// path: '/exam/result',
// name: 'examResult',
// component: () => import('../pages/courseExam/answerResult.vue')
// },
// /* 知识点详情 */
// {
// path: '/exam/courseNode',
// name: 'courseNode',
// component: () => import('../pages/courseExam/courseNode.vue')
// },
// /* 知识点考试 */
// {
// path: '/exam/courseNodeExam',
// name: 'courseNodeExam',
// component: () => import('../pages/courseExam/courseNodeExam.vue')
// },
// /* 模拟考试 */
// {
// path: '/mock/index',
// name: 'mockIndex',
// component: () => import('../pages/mockExam/index.vue')
// // meta: { requiredLogin: true }
// },
// /* 模拟考试答题页面 */
// {
// path: '/mock/answer',
// name: 'mockAnswer',
// component: () => import('../pages/mockExam/answer.vue')
// },
// /* 模拟考试答题页面 */
// {
// path: '/mock/result',
// name: 'mockResult',
// component: () => import('../pages/mockExam/answerResult.vue')
// },
// // 听课列表
// {
// path: '/course/player',
// name: 'coursePlayer',
// component: () => import('../pages/course/player/index.vue')
// },
// // 听课详情
// {
// path: '/course/player/:id',
// name: 'coursePlayerItem',
// component: () => import('../pages/course/player/item.vue')
// },
// // 课程知识点
// {
// path: '/course/learn/:courseId/tag/:chapterId',
// name: 'courseTag',
// component: () => import('../pages/course/tag/list.vue')
// },
// // 课程知识点详情
// {
// path: '/course/tag/:id',
// name: 'courseTagItem',
// component: () => import('../pages/course/tag/item.vue')
// },
// // 我的-已购课程
// {
// path: '/my/buyCourses',
// name: 'buyCourses',
// component: () => import('../pages/my/buyCourses.vue'),
// meta: { requiredLogin: true }
// },
// // 我的-已做试题
// {
// path: '/my/questionsList',
// name: 'questionsList',
// component: () => import('../pages/my/questionsList.vue')
// },
// // 错题列表
// {
// path: '/errorQuestionList',
// name: 'errorQuestionList',
// component: () => import('../pages/my/errorQuestionList.vue')
// },
// // 我的-已做试题详情
// {
// path: '/my/questionsDetails',
// name: 'questionsDetails',
// component: () => import('../pages/my/questionsDetails.vue')
// },
// // 我的-试题详情-答题卡
// {
// path: '/my/answerCard',
// name: 'answerCard',
// component: () => import('../pages/my/answerCard.vue')
// },
// // 我的-收藏试题
// {
// path: '/my/collectQuestions',
// name: 'collectQuestions',
// component: () => import('../pages/my/collectQuestions.vue')
// },
// // 我的-发票页面
// {
// path: '/my/invoice',
// name: 'myInvoice',
// component: () => import('../pages/my/invoice.vue'),
// meta: { requiredLogin: true }
// },
// // 我的-联系客服
// {
// path: '/my/service',
// name: 'myService',
// component: () => import('../pages/my/service.vue')
// },
// // 我的-意见反馈
// {
// path: '/my/feedback',
// name: 'myFeedback',
// component: () => import('../pages/my/feedback.vue')
// },
// {
// path: '/buy',
// name: 'buy',
// component: () => import('../pages/buy/index.vue')
// // meta: { requiredLogin: true }
// },
// // 已学课程
// {
// path: '/my/learn',
// name: 'MyLearn',
// component: () => import('../pages/my/learn/index.vue')
// },
// // 课程学习详情
// {
// path: '/my/learn/:id',
// name: 'myLearnItem',
// component: () => import('../pages/my/learn/item.vue')
// },
{
{
path
:
'/'
,
path
:
'/'
,
component
:
Layout
,
component
:
Layout
,
...
@@ -232,6 +72,18 @@ export default [
...
@@ -232,6 +72,18 @@ export default [
...
examAnswer
...
examAnswer
]
]
},
},
// 课程知识点详情
{
path
:
'/course/learn/:courseId/tag/:id'
,
component
:
()
=>
import
(
/* webpackChunkName: "course-lear-tag" */
'@/pages/course/learn/components/TagLayout'
),
children
:
[
{
path
:
''
,
name
:
'courseTagItem'
,
component
:
()
=>
import
(
/* webpackChunkName: "course-lear-tag" */
'@/pages/course/learn/tag'
)
}
]
},
/* 搜索 */
/* 搜索 */
{
{
path
:
'/search'
,
path
:
'/search'
,
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论