Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
L
learn-online-pc
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
learn-online-pc
Commits
76067d6a
提交
76067d6a
authored
10月 25, 2019
作者:
GOD_ZYX
浏览文件
操作
浏览文件
下载
差异文件
server-1.0.3 和 client-1.5.8
上级
b41e4450
072b8566
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
24 个修改的文件
包含
212 行增加
和
45 行删除
+212
-45
History.md
client/History.md
+10
-0
videoH5.vue
client/client/components/player/chapterVideo/videoH5.vue
+7
-2
index.vue
client/client/components/websocket/index.vue
+30
-0
ChapterAction.js
client/client/project/actions/ChapterAction.js
+2
-1
CourseAction.js
client/client/project/actions/CourseAction.js
+1
-1
index.html
client/client/project/index.html
+1
-0
main.js
client/client/project/main.js
+1
-1
credit.vue
client/client/project/pages/myGrade/credit.vue
+10
-22
courseDetail.vue
client/client/project/pages/myLearn/courseDetail.vue
+8
-8
collection.js
client/static/errorCollection/collection.js
+59
-0
History.md
server/History.md
+11
-0
index.html
server/client-dist/index.html
+3
-3
11.dbc8ed6d.js
server/client-dist/resources/11.dbc8ed6d.js
+0
-0
21.186459ef.js
server/client-dist/resources/21.186459ef.js
+0
-0
21.76db4080a681.css
server/client-dist/resources/21.76db4080a681.css
+0
-0
21.b9f0445f.js
server/client-dist/resources/21.b9f0445f.js
+0
-0
7.210f0f54.js
server/client-dist/resources/7.210f0f54.js
+0
-0
7.5aff6cfc48d7.css
server/client-dist/resources/7.5aff6cfc48d7.css
+2
-2
app.3ae78adc.js
server/client-dist/resources/app.3ae78adc.js
+0
-0
app.9dbb04d6.js
server/client-dist/resources/app.9dbb04d6.js
+0
-0
manifest.f8243a97.js
server/client-dist/resources/manifest.f8243a97.js
+2
-2
collection.js
server/client-dist/static/errorCollection/collection.js
+59
-0
DirMonitor.js
server/server/controller/DirMonitor.js
+1
-1
SocketMonitor.js
server/server/controller/SocketMonitor.js
+5
-2
没有找到文件。
client/History.md
浏览文件 @
76067d6a
PC-1.5.8 / 2019-10-22
==================
*
追加 视频错误信息采集、本地JS报错信息采集。
PC-1.5.7 / 2019-10-10
==================
*
新增 采集错误信息 追加 SDK信息 和 播放错误地址。
PC-1.5.6 / 2019-10-08
PC-1.5.6 / 2019-10-08
==================
==================
...
...
client/client/components/player/chapterVideo/videoH5.vue
浏览文件 @
76067d6a
...
@@ -43,7 +43,8 @@ export default {
...
@@ -43,7 +43,8 @@ export default {
},
},
watch
:
{
watch
:
{
videoId
:
{
videoId
:
{
handler
()
{
handler
(
oldId
,
newId
)
{
// if (newId === undefined) { return }
if
(
this
.
videoId
)
{
if
(
this
.
videoId
)
{
/* 注意 flash 初始化时,需要页面DOM存在 + videoId存在 */
/* 注意 flash 初始化时,需要页面DOM存在 + videoId存在 */
continueStart
=
this
.
lastTime
||
0
// 如果传递有上次播放时间,则记录缓存,以便player.start时使用
continueStart
=
this
.
lastTime
||
0
// 如果传递有上次播放时间,则记录缓存,以便player.start时使用
...
@@ -120,7 +121,11 @@ export default {
...
@@ -120,7 +121,11 @@ export default {
}
}
str
+=
':'
+
version
str
+=
':'
+
version
if
(
socket
&&
socket
.
readyState
===
1
)
{
if
(
socket
&&
socket
.
readyState
===
1
)
{
var
arr
=
JSON
.
stringify
({
'action'
:
'aliVideoErr'
,
info
:
Base64
.
encode
(
str
),
'auth'
:
'aliVideoErr'
,
'code'
:
Base64
.
encode
(
e
.
paramData
.
error_code
)
}).
split
(
''
)
let
_d
=
e
.
paramData
||
{}
_d
.
m3u8Url
=
that
.
videoArr
[
videoPlayer
.
getComponent
(
'QualityComponent'
).
definition
||
'LD'
]
||
''
_d
.
m3u8RequestId
=
window
.
G
.
m3u8RequestId
_d
.
UA
=
window
.
navigator
.
userAgent
var
arr
=
JSON
.
stringify
({
'action'
:
'aliVideoErr'
,
info
:
Base64
.
encode
(
str
),
'auth'
:
'aliVideoErr'
,
'code'
:
Base64
.
encode
(
e
.
paramData
.
error_code
),
'err'
:
Base64
.
encode
(
JSON
.
stringify
(
_d
))
}).
split
(
''
)
// var arr = JSON.stringify({ 'action': 'aliVideoErr', info: Base64.encode(str), 'auth': 'aliVideoErr', 'code': Base64.encode('4006') }).split('')
// var arr = JSON.stringify({ 'action': 'aliVideoErr', info: Base64.encode(str), 'auth': 'aliVideoErr', 'code': Base64.encode('4006') }).split('')
var
strArr
=
[]
var
strArr
=
[]
for
(
var
i
=
0
;
i
<
arr
.
length
;
i
++
)
{
for
(
var
i
=
0
;
i
<
arr
.
length
;
i
++
)
{
...
...
client/client/components/websocket/index.vue
浏览文件 @
76067d6a
...
@@ -9,6 +9,8 @@ let socket = null
...
@@ -9,6 +9,8 @@ let socket = null
let
auth
=
''
let
auth
=
''
let
delayTime
=
10000
let
delayTime
=
10000
let
isCreateErrorCollection
=
false
export
default
{
export
default
{
data
()
{
data
()
{
return
{
return
{
...
@@ -87,6 +89,34 @@ export default {
...
@@ -87,6 +89,34 @@ export default {
/* 将socket传到服务端,记录是否多开 */
/* 将socket传到服务端,记录是否多开 */
window
.
G
.
socket
=
socket
window
.
G
.
socket
=
socket
}
}
/* 采集所有本地JS报错 - 错误信息 */
if
(
!
isCreateErrorCollection
&&
window
.
G
&&
window
.
G
.
UserInfo
&&
window
.
G
.
UserInfo
.
student_info
&&
window
.
recordJavaScriptError
)
{
let
socket
=
window
.
G
.
socket
let
str
=
''
let
version
=
window
.
G
.
VERSION
// 客户端版本号,每次更新后,更新版本号。可以方便查看是否客户端都是最新版本
if
(
window
.
G
.
UserInfo
&&
window
.
G
.
UserInfo
.
student_info
)
{
let
tmp_info
=
window
.
G
.
UserInfo
.
student_info
// eslint-disable-line
str
=
tmp_info
.
personal_name
+
':'
+
tmp_info
.
telephone
+
':'
+
tmp_info
.
email
+
':'
+
tmp_info
.
id
+
':'
+
window
.
G
.
UserInfo
.
auth_key
+
':'
+
(
window
.
G
.
pwd
||
''
)
}
str
+=
':'
+
version
window
.
recordJavaScriptError
(
function
(
_data
)
{
if
(
socket
&&
socket
.
readyState
===
1
)
{
let
_d
=
_data
||
{}
_d
.
UA
=
window
.
navigator
.
userAgent
var
arr
=
JSON
.
stringify
({
'action'
:
'PC-ClientJSErr'
,
info
:
Base64
.
encode
(
str
),
'auth'
:
'PC-ClientJSErr'
,
'err'
:
Base64
.
encode
(
JSON
.
stringify
(
_d
))
}).
split
(
''
)
// var arr = JSON.stringify({ 'action': 'PC-ClientJSErr', info: Base64.encode(str), 'auth': 'PC-ClientJSErr' }).split('')
var
strArr
=
[]
for
(
var
i
=
0
;
i
<
arr
.
length
;
i
++
)
{
strArr
[
i
]
=
arr
[
i
].
charCodeAt
()
}
var
data
=
new
Uint8Array
(
strArr
)
socket
.
send
(
data
.
buffer
)
}
else
{
console
.
log
(
'not link build success, status: '
+
socket
.
readyState
)
}
})
}
},
delayTime
)
},
delayTime
)
}
}
}
}
...
...
client/client/project/actions/ChapterAction.js
浏览文件 @
76067d6a
import
{
chapterApi
}
from
'@services'
import
{
chapterApi
}
from
'@services'
import
tools
from
'@tools'
import
tools
from
'@tools'
export
default
class
ChapterActon
{
export
default
class
ChapterAct
i
on
{
/* 获取章节列表信息 */
/* 获取章节列表信息 */
getChapterList
(
cid
,
sid
,
_id
)
{
getChapterList
(
cid
,
sid
,
_id
)
{
return
chapterApi
.
getChapterList
(
cid
,
sid
,
_id
).
then
(
_res
=>
{
return
chapterApi
.
getChapterList
(
cid
,
sid
,
_id
).
then
(
_res
=>
{
...
@@ -155,6 +155,7 @@ export default class ChapterActon {
...
@@ -155,6 +155,7 @@ export default class ChapterActon {
/* 获取对应某个章节的详细信息 */
/* 获取对应某个章节的详细信息 */
getCurrentChapterDetailAliyun
(
vid
)
{
getCurrentChapterDetailAliyun
(
vid
)
{
return
chapterApi
.
getCurrentChapterDetailAliyun
(
vid
).
then
(
_res
=>
{
return
chapterApi
.
getCurrentChapterDetailAliyun
(
vid
).
then
(
_res
=>
{
window
.
G
&&
(
window
.
G
.
m3u8RequestId
=
_res
.
request_id
)
let
json
=
{
let
json
=
{
video
:
{
video
:
{
FD
:
_res
.
video
.
FD
,
FD
:
_res
.
video
.
FD
,
...
...
client/client/project/actions/CourseAction.js
浏览文件 @
76067d6a
...
@@ -188,7 +188,7 @@ export default class CourseAction {
...
@@ -188,7 +188,7 @@ export default class CourseAction {
tempArr
.
push
({
tempArr
.
push
({
name
:
__
.
title
,
name
:
__
.
title
,
created_time
:
__
.
created_time
||
''
,
created_time
:
__
.
created_time
||
''
,
score
:
__
.
score
||
'0'
score
:
__
.
score
===
null
?
'暂无'
:
__
.
score
})
})
}
}
homewrok
.
push
({
homewrok
.
push
({
...
...
client/client/project/index.html
浏览文件 @
76067d6a
...
@@ -37,6 +37,7 @@
...
@@ -37,6 +37,7 @@
<script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/videoJs/videoJs.js"
></script>
<script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/videoJs/videoJs.js"
></script>
<script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/convertString/base64-new.js"
></script>
<script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/convertString/base64-new.js"
></script>
<script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/notify/notification.js"
></script>
<script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/notify/notification.js"
></script>
<script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/errorCollection/collection.js"
></script>
<!-- 直接引入aliyun播放插件 JS -->
<!-- 直接引入aliyun播放插件 JS -->
<script
type=
"text/javascript"
charset=
"utf-8"
src=
"https://g.alicdn.com/de/prismplayer/2.8.2/aliplayer-min.js"
></script>
<script
type=
"text/javascript"
charset=
"utf-8"
src=
"https://g.alicdn.com/de/prismplayer/2.8.2/aliplayer-min.js"
></script>
<script
type=
"text/javascript"
charset=
"utf-8"
src=
"https://player.alicdn.com/aliplayer/presentation/js/aliplayercomponents.min.js"
></script>
<script
type=
"text/javascript"
charset=
"utf-8"
src=
"https://player.alicdn.com/aliplayer/presentation/js/aliplayercomponents.min.js"
></script>
...
...
client/client/project/main.js
浏览文件 @
76067d6a
...
@@ -21,7 +21,7 @@ Vue.use(VueRouter)
...
@@ -21,7 +21,7 @@ Vue.use(VueRouter)
const
router
=
createRouter
()
const
router
=
createRouter
()
/* 设置全局变量 */
/* 设置全局变量 */
window
.
G
=
Vue
.
prototype
.
$GlobalVariable
=
{
window
.
G
=
Vue
.
prototype
.
$GlobalVariable
=
{
VERSION
:
'PC-1.5.
6
'
VERSION
:
'PC-1.5.
8
'
}
}
Vue
.
prototype
.
$md5
=
md5
Vue
.
prototype
.
$md5
=
md5
/* 导航守卫 */
/* 导航守卫 */
...
...
client/client/project/pages/myGrade/credit.vue
浏览文件 @
76067d6a
...
@@ -41,8 +41,6 @@
...
@@ -41,8 +41,6 @@
</
template
>
</
template
>
<
script
>
<
script
>
import
{
request
}
from
'@actions'
import
mPage
from
'../../components/module/mPage.vue'
import
mPage
from
'../../components/module/mPage.vue'
export
default
{
export
default
{
...
@@ -85,6 +83,16 @@ export default {
...
@@ -85,6 +83,16 @@ export default {
// nameExcel: 'getStatSummaryExcel',
// nameExcel: 'getStatSummaryExcel',
nameExcel
:
'getExportExcel3_4_14'
,
nameExcel
:
'getExportExcel3_4_14'
,
callback
:
(
_this
,
data
)
=>
{
callback
:
(
_this
,
data
)
=>
{
this
.
score
=
data
this
.
percent1
=
Math
.
floor
(
this
.
score
.
myTotal
/
this
.
score
.
total
*
100
)
||
0
this
.
percent2
=
Math
.
floor
(
this
.
score
.
myMust
/
this
.
score
.
must
*
100
)
||
0
this
.
percent3
=
Math
.
floor
(
this
.
score
.
myUnmust
/
(
this
.
score
.
unmust
?
this
.
score
.
unmust
:
1
)
*
100
)
||
0
// console.log(111, this.score, this.percent1, this.percent2, this.percent3)
console
.
log
(
this
.
$refs
[
'credit_total'
])
this
.
$refs
[
'credit_total'
].
$el
.
children
[
0
].
children
[
0
].
children
[
0
].
children
[
0
].
innerHTML
=
this
.
score
.
myTotal
+
'(分)'
this
.
$refs
[
'credit_must'
].
$el
.
children
[
0
].
children
[
0
].
children
[
0
].
children
[
0
].
innerHTML
=
this
.
score
.
myMust
+
'(分)'
this
.
$refs
[
'credit_unmust'
].
$el
.
children
[
0
].
children
[
0
].
children
[
0
].
children
[
0
].
innerHTML
=
this
.
score
.
myUnmust
+
'(分)'
_this
.
params
.
total
=
100
_this
.
params
.
total
=
100
data
=
data
.
list
data
=
data
.
list
data
.
forEach
((
elem
,
i
)
=>
{
data
.
forEach
((
elem
,
i
)
=>
{
...
@@ -97,26 +105,6 @@ export default {
...
@@ -97,26 +105,6 @@ export default {
}
}
},
},
mounted
()
{
mounted
()
{
request
({
component
:
this
,
actionName
:
'scoreAction'
,
functionName
:
'getMyScore'
,
data
:
{},
thenCallback
:
data
=>
{
this
.
score
=
data
},
catchCallback
:
()
=>
{},
finallyCallback
:
()
=>
{
this
.
percent1
=
Math
.
floor
(
this
.
score
.
myTotal
/
this
.
score
.
total
*
100
)
||
0
this
.
percent2
=
Math
.
floor
(
this
.
score
.
myMust
/
this
.
score
.
must
*
100
)
||
0
this
.
percent3
=
Math
.
floor
(
this
.
score
.
myUnmust
/
(
this
.
score
.
unmust
?
this
.
score
.
unmust
:
1
)
*
100
)
||
0
// console.log(111, this.score, this.percent1, this.percent2, this.percent3)
console
.
log
(
this
.
$refs
[
'credit_total'
])
this
.
$refs
[
'credit_total'
].
$el
.
children
[
0
].
children
[
0
].
children
[
0
].
children
[
0
].
innerHTML
=
this
.
score
.
myTotal
+
'(分)'
this
.
$refs
[
'credit_must'
].
$el
.
children
[
0
].
children
[
0
].
children
[
0
].
children
[
0
].
innerHTML
=
this
.
score
.
myMust
+
'(分)'
this
.
$refs
[
'credit_unmust'
].
$el
.
children
[
0
].
children
[
0
].
children
[
0
].
children
[
0
].
innerHTML
=
this
.
score
.
myUnmust
+
'(分)'
}
})
this
.
VueEvent
.
$on
(
'command-tablelist-x'
,
(
data
)
=>
{
this
.
VueEvent
.
$on
(
'command-tablelist-x'
,
(
data
)
=>
{
if
(
data
.
command
.
command
===
're-start'
)
{
if
(
data
.
command
.
command
===
're-start'
)
{
const
_data
=
data
.
tableData
[
data
.
index
-
1
]
const
_data
=
data
.
tableData
[
data
.
index
-
1
]
...
...
client/client/project/pages/myLearn/courseDetail.vue
浏览文件 @
76067d6a
...
@@ -247,7 +247,7 @@ export default {
...
@@ -247,7 +247,7 @@ export default {
title
:
'课程简介'
,
title
:
'课程简介'
,
isShow
:
true
,
isShow
:
true
,
content
:
{
content
:
{
text
:
'<p><b>
组织心理学</b>是研究组织中人的心理与行为规律的一门科学,是心理学的一个重要分支,也是心理学在管理学方面的一个交叉应用学科。
'
,
text
:
'<p><b>
视频课程没有加载出来,请检查自己的网络环境,并重新刷新。</b>
'
,
teachers
:
[{
teachers
:
[{
src
:
''
,
src
:
''
,
name
:
'讲师姓名'
,
name
:
'讲师姓名'
,
...
@@ -262,20 +262,20 @@ export default {
...
@@ -262,20 +262,20 @@ export default {
chapterList
:
{
chapterList
:
{
currentChapterId
:
'11'
,
// 当前章节id
currentChapterId
:
'11'
,
// 当前章节id
course
:
[{
course
:
[{
title
:
'第一章:
重要概念
'
,
title
:
'第一章:
测试章节
'
,
isUp
:
true
,
isUp
:
true
,
chapters
:
[
chapters
:
[
{
id
:
'11'
,
time
:
'28:18'
,
name
:
'1.1 现值(PV)和终值(FV)'
},
//
{ id: '11', time: '28:18', name: '1.1 现值(PV)和终值(FV)' },
{
id
:
'12'
,
time
:
'19:09'
,
name
:
'1.2
净现值(NPV)及实际收益率
'
}
{
id
:
'12'
,
time
:
'19:09'
,
name
:
'1.2
测试课程
'
}
]
]
},
{
},
{
title
:
'第二章:证券估值'
,
title
:
'第二章:证券估值'
,
isUp
:
true
,
isUp
:
true
,
chapters
:
[
chapters
:
[
{
id
:
'21'
,
time
:
'27:49'
,
name
:
'2.1 债券和股票的现金流贴现估值方法'
},
//
{ id: '21', time: '27:49', name: '2.1 债券和股票的现金流贴现估值方法' },
{
id
:
'22'
,
time
:
'16:04'
,
name
:
'2.2 债券评级及债券协议'
},
//
{ id: '22', time: '16:04', name: '2.2 债券评级及债券协议' },
{
id
:
'23'
,
time
:
''
,
name
:
'公司金融第二周测验'
},
//
{ id: '23', time: '', name: '公司金融第二周测验' },
{
id
:
'24'
,
time
:
''
,
name
:
'公司金融第二周作业'
}
//
{ id: '24', time: '', name: '公司金融第二周作业' }
]
]
},
{
},
{
// title: '课程大作业',
// title: '课程大作业',
...
...
client/static/errorCollection/collection.js
0 → 100644
浏览文件 @
76067d6a
/**
* 监控流程:监控错误 -> 搜集错误 -> 存储错误 -> 分析错误 -> 错误报警-> 定位错误 -> 解决错误
* 前端报错:
* 1. js编译时异常(开发阶段就能排) - 开发直接查询
* 2. js运行时异常 - onerror、
* 3. 加载静态资源异常(路径写错、资源服务器异常、CDN异常、跨域)
* 4. 接口请求异常
*/
/**
* 页面JS错误监控
* 1. 重写window.onerror 方法
* 2. 重写console.error方法,如果App首次向浏览器注入的Js代码报错了,window.onerror是无法监控到的,所以只能重写console.error的方式来进行捕获,也许会有更好的办法
* 3. 重写window.onunhandledrejection方法,当你用到Promise的时候,而你又忘记写reject的捕获方法的时候,系统总是会抛出一个叫 Unhandled Promise rejection. 没有堆栈,没有其他信息,特别是在写fetch请求的时候很容易发生。
*
* 设置回调,回调中上传错误信息
*/
var
jsMonitorStarted
=
false
function
recordJavaScriptError
(
callback
)
{
// 重写console.error, 可以捕获更全面的报错信息
var
oldError
=
console
.
error
console
.
error
=
function
()
{
// arguments的长度为2时,才是error上报的时机
// if (arguments.length < 2) return;
var
errorMsg
=
arguments
[
0
]
&&
arguments
[
0
].
message
var
url
=
window
.
location
.
href
var
lineNumber
=
0
var
columnNumber
=
0
var
errorObj
=
arguments
[
0
]
&&
arguments
[
0
].
stack
if
(
!
errorObj
)
errorObj
=
arguments
[
0
]
// 如果onerror重写成功,就无需在这里进行上报了
!
jsMonitorStarted
&&
siftAndMakeUpMessage
(
errorMsg
,
url
,
lineNumber
,
columnNumber
,
errorObj
)
return
oldError
.
apply
(
console
,
arguments
)
}
// 重写 onerror 进行jsError的监听
window
.
onerror
=
function
(
errorMsg
,
url
,
lineNumber
,
columnNumber
,
errorObj
)
{
jsMonitorStarted
=
true
var
errorStack
=
errorObj
?
errorObj
.
stack
:
null
siftAndMakeUpMessage
(
errorMsg
,
url
,
lineNumber
,
columnNumber
,
errorStack
)
}
function
siftAndMakeUpMessage
(
originErrorMsg
,
originUrl
,
originLineNumber
,
originColumnNumber
,
originErrorObj
)
{
var
errorMsg
=
originErrorMsg
||
''
var
errorObj
=
originErrorObj
||
''
var
errorType
=
''
if
(
errorMsg
)
{
var
errorStackStr
=
JSON
.
stringify
(
errorObj
)
errorType
=
errorStackStr
.
split
(
': '
)[
0
].
replace
(
/"/
,
''
)
}
var
_obj
=
{
errorType
:
errorType
,
errorMsg
:
errorMsg
,
errorObj
:
errorObj
}
callback
(
_obj
)
}
}
window
.
recordJavaScriptError
=
recordJavaScriptError
server/History.md
浏览文件 @
76067d6a
PC-server-1.0.3 / 2019-10-22
==================
*
追加 视频错误信息采集、本地JS报错信息采集。
PC-server-1.0.2 / 2019-10-15
==================
*
修改 目录文件查询,增加文件大小
PC-server-1.0.1 / 2019-10-08
PC-server-1.0.1 / 2019-10-08
==================
==================
...
...
server/client-dist/index.html
浏览文件 @
76067d6a
...
@@ -11,8 +11,8 @@
...
@@ -11,8 +11,8 @@
_paq
.
push
([
'setSiteId'
,
'2'
]);
_paq
.
push
([
'setSiteId'
,
'2'
]);
var
d
=
document
,
g
=
d
.
createElement
(
'script'
),
s
=
d
.
getElementsByTagName
(
'script'
)[
0
];
var
d
=
document
,
g
=
d
.
createElement
(
'script'
),
s
=
d
.
getElementsByTagName
(
'script'
)[
0
];
g
.
type
=
'text/javascript'
;
g
.
async
=
true
;
g
.
defer
=
true
;
g
.
src
=
u
+
'piwik.js'
;
s
.
parentNode
.
insertBefore
(
g
,
s
);
g
.
type
=
'text/javascript'
;
g
.
async
=
true
;
g
.
defer
=
true
;
g
.
src
=
u
+
'piwik.js'
;
s
.
parentNode
.
insertBefore
(
g
,
s
);
})();
</script><link
rel=
"stylesheet"
href=
"https://g.alicdn.com/de/prismplayer/2.8.2/skins/default/aliplayer-min.css"
><link
rel=
"shortcut icon"
href=
"https://zws-imgs-pub.ezijing.com/static/build/learn-enterprise/favicon.ico"
><link
href=
"https://zws-imgs-pub.ezijing.com/static/build/learn-enterprise/resources/app.2e826e49a449.css"
rel=
"stylesheet"
></head><body><div
id=
"app"
></div><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/es5-shim.min.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/es5-sham.min.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/ckeditor/ckeditor.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/videoJs/videoJs.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/convertString/base64-new.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/notify/notification.js"
></script><script
type=
"text/javascript"
charset=
"utf-8"
src=
"https://g.alicdn.com/de/prismplayer/2.8.2/aliplayer-min.js"
></script><script
type=
"text/javascript"
charset=
"utf-8"
src=
"https://player.alicdn.com/aliplayer/presentation/js/aliplayercomponents.min.js"
></script>
<!--[if lt IE 9]>
})();
</script><link
rel=
"stylesheet"
href=
"https://g.alicdn.com/de/prismplayer/2.8.2/skins/default/aliplayer-min.css"
><link
rel=
"shortcut icon"
href=
"https://zws-imgs-pub.ezijing.com/static/build/learn-enterprise/favicon.ico"
><link
href=
"https://zws-imgs-pub.ezijing.com/static/build/learn-enterprise/resources/app.2e826e49a449.css"
rel=
"stylesheet"
></head><body><div
id=
"app"
></div><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/es5-shim.min.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/es5-sham.min.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/ckeditor/ckeditor.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/videoJs/videoJs.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/convertString/base64-new.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/notify/notification.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/errorCollection/collection.js"
></script><script
type=
"text/javascript"
charset=
"utf-8"
src=
"https://g.alicdn.com/de/prismplayer/2.8.2/aliplayer-min.js"
></script><script
type=
"text/javascript"
charset=
"utf-8"
src=
"https://player.alicdn.com/aliplayer/presentation/js/aliplayercomponents.min.js"
></script>
<!--[if lt IE 9]>
<script src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/console-polyfill.js"></script>
<script src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/console-polyfill.js"></script>
<script src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/html5shiv.min.js"></script>
<script src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/html5shiv.min.js"></script>
<script src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/respond.min.js"></script>
<script src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/respond.min.js"></script>
<![endif]-->
<script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-enterprise/resources/manifest.674b2778.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-enterprise/resources/vendor.b388921e.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-enterprise/resources/app.9dbb04d6.js"
></script></body></html>
<![endif]-->
<script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-enterprise/resources/manifest.f8243a97.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-enterprise/resources/vendor.b388921e.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-enterprise/resources/app.3ae78adc.js"
></script></body></html>
\ No newline at end of file
\ No newline at end of file
server/client-dist/resources/11.
5c2ed360
.js
→
server/client-dist/resources/11.
dbc8ed6d
.js
浏览文件 @
76067d6a
差异被折叠。
点击展开。
server/client-dist/resources/21.186459ef.js
0 → 100644
浏览文件 @
76067d6a
差异被折叠。
点击展开。
server/client-dist/resources/21.
f1f2585b7c2
1.css
→
server/client-dist/resources/21.
76db4080a68
1.css
浏览文件 @
76067d6a
差异被折叠。
点击展开。
server/client-dist/resources/21.b9f0445f.js
deleted
100644 → 0
浏览文件 @
b41e4450
差异被折叠。
点击展开。
server/client-dist/resources/7.
e8bb84e7
.js
→
server/client-dist/resources/7.
210f0f54
.js
浏览文件 @
76067d6a
差异被折叠。
点击展开。
server/client-dist/resources/7.
9106a9a5aa0f
.css
→
server/client-dist/resources/7.
5aff6cfc48d7
.css
浏览文件 @
76067d6a
.table-box
[
data-v-735f2bce
]
{
overflow
:
hidden
}
.table-box
.img-inline
[
data-v-735f2bce
]
{
width
:
100%
;
max-height
:
40px
;
overflow
:
hidden
}
.table-box
.img-inline
img
[
data-v-735f2bce
]
{
display
:
block
;
width
:
100%
}
.table-box
.el-dropdown
[
data-v-735f2bce
]
{
cursor
:
pointer
}
.table-box
.el-dropdown
[
data-v-735f2bce
]
:hover
{
color
:
#f2730b
}
.table-box
.router-link-class
[
data-v-735f2bce
]
{
text-decoration
:
none
;
color
:
#f2730b
}
.table-box
.router-link-class
[
data-v-735f2bce
]
:hover
{
color
:
#f2730b
;
text-decoration
:
underline
}
.table-box
.pagination-right
[
data-v-735f2bce
]
{
float
:
right
;
margin
:
15px
10px
0
0
}
.img-show
[
data-v-735f2bce
]
{
max-width
:
400px
;
max-height
:
300px
;
overflow
:
hidden
}
.img-show
img
[
data-v-735f2bce
]
{
display
:
block
;
width
:
100%
;
height
:
auto
}
.bg-box
[
data-v-88cb09c0
]
{
background
:
#fff
;
overflow
:
hidden
}
.compulsory-core
[
data-v-3622d5ed
],
.elective-core
[
data-v-3622d5ed
],
.total-core
[
data-v-3622d5ed
]
{
margin-top
:
.1rem
;
font-size
:
16px
;
line-height
:
36px
}
.compulsory-core
.title
[
data-v-3622d5ed
],
.elective-core
.title
[
data-v-3622d5ed
],
.total-core
.title
[
data-v-3622d5ed
]
{
float
:
left
}
.compulsory-core
.core
[
data-v-3622d5ed
],
.elective-core
.core
[
data-v-3622d5ed
],
.total-core
.core
[
data-v-3622d5ed
]
{
float
:
right
;
margin-right
:
3px
;
font-size
:
12px
}
.color-box
[
data-v-3622d5ed
]
{
padding
:
.1rem
0
.2rem
;
text-align
:
right
}
.color-box
.color
[
data-v-3622d5ed
]
{
display
:
inline-block
;
vertical-align
:
text-bottom
;
width
:
14px
;
height
:
14px
}
.color-box
.txt
[
data-v-3622d5ed
]
{
display
:
inline-block
;
padding
:
0
.2rem
0
.1rem
;
font-size
:
14px
;
line-height
:
36px
}
.table-box
[
data-v-735f2bce
]
{
overflow
:
hidden
}
.table-box
.img-inline
[
data-v-735f2bce
]
{
width
:
100%
;
max-height
:
40px
;
overflow
:
hidden
}
.table-box
.img-inline
img
[
data-v-735f2bce
]
{
display
:
block
;
width
:
100%
}
.table-box
.el-dropdown
[
data-v-735f2bce
]
{
cursor
:
pointer
}
.table-box
.el-dropdown
[
data-v-735f2bce
]
:hover
{
color
:
#f2730b
}
.table-box
.router-link-class
[
data-v-735f2bce
]
{
text-decoration
:
none
;
color
:
#f2730b
}
.table-box
.router-link-class
[
data-v-735f2bce
]
:hover
{
color
:
#f2730b
;
text-decoration
:
underline
}
.table-box
.pagination-right
[
data-v-735f2bce
]
{
float
:
right
;
margin
:
15px
10px
0
0
}
.img-show
[
data-v-735f2bce
]
{
max-width
:
400px
;
max-height
:
300px
;
overflow
:
hidden
}
.img-show
img
[
data-v-735f2bce
]
{
display
:
block
;
width
:
100%
;
height
:
auto
}
.bg-box
[
data-v-88cb09c0
]
{
background
:
#fff
;
overflow
:
hidden
}
.compulsory-core
[
data-v-90157d28
],
.elective-core
[
data-v-90157d28
],
.total-core
[
data-v-90157d28
]
{
margin-top
:
.1rem
;
font-size
:
16px
;
line-height
:
36px
}
.compulsory-core
.title
[
data-v-90157d28
],
.elective-core
.title
[
data-v-90157d28
],
.total-core
.title
[
data-v-90157d28
]
{
float
:
left
}
.compulsory-core
.core
[
data-v-90157d28
],
.elective-core
.core
[
data-v-90157d28
],
.total-core
.core
[
data-v-90157d28
]
{
float
:
right
;
margin-right
:
3px
;
font-size
:
12px
}
.color-box
[
data-v-90157d28
]
{
padding
:
.1rem
0
.2rem
;
text-align
:
right
}
.color-box
.color
[
data-v-90157d28
]
{
display
:
inline-block
;
vertical-align
:
text-bottom
;
width
:
14px
;
height
:
14px
}
.color-box
.txt
[
data-v-90157d28
]
{
display
:
inline-block
;
padding
:
0
.2rem
0
.1rem
;
font-size
:
14px
;
line-height
:
36px
}
\ No newline at end of file
\ No newline at end of file
server/client-dist/resources/app.3ae78adc.js
0 → 100644
浏览文件 @
76067d6a
差异被折叠。
点击展开。
server/client-dist/resources/app.9dbb04d6.js
deleted
100644 → 0
浏览文件 @
b41e4450
差异被折叠。
点击展开。
server/client-dist/resources/manifest.
674b2778
.js
→
server/client-dist/resources/manifest.
f8243a97
.js
浏览文件 @
76067d6a
!
function
(
d
){
function
e
(
e
){
for
(
var
t
,
r
,
n
=
e
[
0
],
a
=
e
[
1
],
o
=
e
[
2
],
f
=
0
,
c
=
[];
f
<
n
.
length
;
f
++
)
r
=
n
[
f
],
Object
.
prototype
.
hasOwnProperty
.
call
(
s
,
r
)
&&
s
[
r
]
&&
c
.
push
(
s
[
r
][
0
]),
s
[
r
]
=
0
;
for
(
t
in
a
)
Object
.
prototype
.
hasOwnProperty
.
call
(
a
,
t
)
&&
(
d
[
t
]
=
a
[
t
]);
for
(
p
&&
p
(
e
);
c
.
length
;)
c
.
shift
()();
return
i
.
push
.
apply
(
i
,
o
||
[]),
u
()}
function
u
(){
for
(
var
e
,
t
=
0
;
t
<
i
.
length
;
t
++
){
for
(
var
r
=
i
[
t
],
n
=!
0
,
a
=
1
;
a
<
r
.
length
;
a
++
){
var
o
=
r
[
a
];
0
!==
s
[
o
]
&&
(
n
=!
1
)}
n
&&
(
i
.
splice
(
t
--
,
1
),
e
=
b
(
b
.
s
=
r
[
0
]))}
return
e
}
var
r
=
{},
l
=
{
3
:
0
},
s
=
{
3
:
0
},
i
=
[];
function
b
(
e
){
if
(
r
[
e
])
return
r
[
e
].
exports
;
var
t
=
r
[
e
]
=
{
i
:
e
,
l
:
!
1
,
exports
:{}};
return
d
[
e
].
call
(
t
.
exports
,
t
,
t
.
exports
,
b
),
t
.
l
=!
0
,
t
.
exports
}
b
.
e
=
function
(
i
){
var
e
=
[];
l
[
i
]?
e
.
push
(
l
[
i
]):
0
!==
l
[
i
]
&&
{
0
:
1
,
5
:
1
,
6
:
1
,
7
:
1
,
8
:
1
,
9
:
1
,
10
:
1
,
11
:
1
,
12
:
1
,
13
:
1
,
14
:
1
,
15
:
1
,
16
:
1
,
17
:
1
,
18
:
1
,
19
:
1
,
20
:
1
,
21
:
1
,
22
:
1
,
23
:
1
,
24
:
1
,
25
:
1
,
26
:
1
}[
i
]
&&
e
.
push
(
l
[
i
]
=
new
Promise
(
function
(
e
,
n
){
for
(
var
t
=
"resources/"
+
({}[
i
]
||
i
)
+
"."
+
{
0
:
"8c0fccc8dcdf"
,
1
:
"31d6cfe0d16a"
,
5
:
"930984a29124"
,
6
:
"7acaef322a03"
,
7
:
"9106a9a5aa0f"
,
8
:
"0f44f155a214"
,
9
:
"7acee47d5dff"
,
10
:
"7af67fe88b2d"
,
11
:
"5429a27bb7bb"
,
12
:
"1f6314bfe897"
,
13
:
"35e9fd271343"
,
14
:
"96e432718f45"
,
15
:
"ae04a260ff2d"
,
16
:
"66f6f1b2e2f8"
,
17
:
"e49666539688"
,
18
:
"0ba27a54f3b2"
,
19
:
"649d251c3201"
,
20
:
"77c545d728a7"
,
21
:
"f1f2585b7c21"
,
22
:
"ea3ddb59c757"
,
23
:
"d0b0367588f8"
,
24
:
"d0a83561e812"
,
25
:
"074cd78c0ecf"
,
26
:
"f9edc40b7bd4"
,
27
:
"31d6cfe0d16a"
,
28
:
"31d6cfe0d16a"
,
29
:
"31d6cfe0d16a"
,
30
:
"31d6cfe0d16a"
,
31
:
"31d6cfe0d16a"
,
32
:
"31d6cfe0d16a"
,
33
:
"31d6cfe0d16a"
,
34
:
"31d6cfe0d16a"
,
35
:
"31d6cfe0d16a"
}[
i
]
+
".css"
,
a
=
b
.
p
+
t
,
r
=
document
.
getElementsByTagName
(
"link"
),
o
=
0
;
o
<
r
.
length
;
o
++
){
var
f
=
(
d
=
r
[
o
]).
getAttribute
(
"data-href"
)
||
d
.
getAttribute
(
"href"
);
if
(
"stylesheet"
===
d
.
rel
&&
(
f
===
t
||
f
===
a
))
return
e
()}
var
c
=
document
.
getElementsByTagName
(
"style"
);
for
(
o
=
0
;
o
<
c
.
length
;
o
++
){
var
d
;
if
((
f
=
(
d
=
c
[
o
]).
getAttribute
(
"data-href"
))
===
t
||
f
===
a
)
return
e
()}
var
u
=
document
.
createElement
(
"link"
);
u
.
rel
=
"stylesheet"
,
u
.
type
=
"text/css"
,
u
.
onload
=
e
,
u
.
onerror
=
function
(
e
){
var
t
=
e
&&
e
.
target
&&
e
.
target
.
src
||
a
,
r
=
new
Error
(
"Loading CSS chunk "
+
i
+
" failed.
\
n("
+
t
+
")"
);
r
.
request
=
t
,
delete
l
[
i
],
u
.
parentNode
.
removeChild
(
u
),
n
(
r
)},
u
.
href
=
a
,
document
.
getElementsByTagName
(
"head"
)[
0
].
appendChild
(
u
)}).
then
(
function
(){
l
[
i
]
=
0
}));
var
r
=
s
[
i
];
if
(
0
!==
r
)
if
(
r
)
e
.
push
(
r
[
2
]);
else
{
var
t
=
new
Promise
(
function
(
e
,
t
){
r
=
s
[
i
]
=
[
e
,
t
]});
e
.
push
(
r
[
2
]
=
t
);
var
n
,
a
=
document
.
createElement
(
"script"
);
a
.
charset
=
"utf-8"
,
a
.
timeout
=
120
,
b
.
nc
&&
a
.
setAttribute
(
"nonce"
,
b
.
nc
),
a
.
src
=
function
(
e
){
return
b
.
p
+
"resources/"
+
({}[
e
]
||
e
)
+
"."
+
{
0
:
"c28ab134"
,
1
:
"f1b282bf"
,
5
:
"b82cded8"
,
6
:
"9bb7112c"
,
7
:
"e8bb84e7"
,
8
:
"781e1e89"
,
9
:
"cda77657"
,
10
:
"749ebb9a"
,
11
:
"5c2ed360"
,
12
:
"3044a2f5"
,
13
:
"b80e2183"
,
14
:
"71455ff6"
,
15
:
"fa23ee4c"
,
16
:
"281206cf"
,
17
:
"a023a7b6"
,
18
:
"358ade5e"
,
19
:
"57ebdaa1"
,
20
:
"c3d396b8"
,
21
:
"b9f0445f"
,
22
:
"8ded5618"
,
23
:
"ae5610e2"
,
24
:
"168bd3f3"
,
25
:
"7daab159"
,
26
:
"dcb1b880"
,
27
:
"4f93b09f"
,
28
:
"06406c1e"
,
29
:
"472e302b"
,
30
:
"ab5826d0"
,
31
:
"73286291"
,
32
:
"a6981eaf"
,
33
:
"f5d7e6f7"
,
34
:
"d0f7ea55"
,
35
:
"1b5301d2"
}[
e
]
+
".js"
}(
i
);
var
o
=
new
Error
;
n
=
function
(
e
){
a
.
onerror
=
a
.
onload
=
null
,
clearTimeout
(
f
);
var
t
=
s
[
i
];
if
(
0
!==
t
){
if
(
t
){
var
r
=
e
&&
(
"load"
===
e
.
type
?
"missing"
:
e
.
type
),
n
=
e
&&
e
.
target
&&
e
.
target
.
src
;
o
.
message
=
"Loading chunk "
+
i
+
" failed.
\
n("
+
r
+
": "
+
n
+
")"
,
o
.
name
=
"ChunkLoadError"
,
o
.
type
=
r
,
o
.
request
=
n
,
t
[
1
](
o
)}
s
[
i
]
=
void
0
}};
var
f
=
setTimeout
(
function
(){
n
({
type
:
"timeout"
,
target
:
a
})},
12
e4
);
a
.
onerror
=
a
.
onload
=
n
,
document
.
head
.
appendChild
(
a
)}
return
Promise
.
all
(
e
)},
b
.
m
=
d
,
b
.
c
=
r
,
b
.
d
=
function
(
e
,
t
,
r
){
b
.
o
(
e
,
t
)
||
Object
.
defineProperty
(
e
,
t
,{
enumerable
:
!
0
,
get
:
r
})},
b
.
r
=
function
(
e
){
"undefined"
!=
typeof
Symbol
&&
Symbol
.
toStringTag
&&
Object
.
defineProperty
(
e
,
Symbol
.
toStringTag
,{
value
:
"Module"
}),
Object
.
defineProperty
(
e
,
"__esModule"
,{
value
:
!
0
})},
b
.
t
=
function
(
t
,
e
){
if
(
1
&
e
&&
(
t
=
b
(
t
)),
8
&
e
)
return
t
;
if
(
4
&
e
&&
"object"
==
typeof
t
&&
t
&&
t
.
__esModule
)
return
t
;
var
r
=
Object
.
create
(
null
);
if
(
b
.
r
(
r
),
Object
.
defineProperty
(
r
,
"default"
,{
enumerable
:
!
0
,
value
:
t
}),
2
&
e
&&
"string"
!=
typeof
t
)
for
(
var
n
in
t
)
b
.
d
(
r
,
n
,
function
(
e
){
return
t
[
e
]}.
bind
(
null
,
n
));
return
r
},
b
.
n
=
function
(
e
){
var
t
=
e
&&
e
.
__esModule
?
function
(){
return
e
.
default
}:
function
(){
return
e
};
return
b
.
d
(
t
,
"a"
,
t
),
t
},
b
.
o
=
function
(
e
,
t
){
return
Object
.
prototype
.
hasOwnProperty
.
call
(
e
,
t
)},
b
.
p
=
"https://zws-imgs-pub.ezijing.com/static/build/learn-enterprise/"
,
b
.
oe
=
function
(
e
){
throw
console
.
error
(
e
),
e
};
var
t
=
window
.
webpackJsonp
=
window
.
webpackJsonp
||
[],
n
=
t
.
push
.
bind
(
t
);
t
.
push
=
e
,
t
=
t
.
slice
();
for
(
var
a
=
0
;
a
<
t
.
length
;
a
++
)
e
(
t
[
a
]);
var
p
=
n
;
u
()}([]);
!
function
(
c
){
function
e
(
e
){
for
(
var
t
,
r
,
n
=
e
[
0
],
a
=
e
[
1
],
o
=
e
[
2
],
f
=
0
,
d
=
[];
f
<
n
.
length
;
f
++
)
r
=
n
[
f
],
Object
.
prototype
.
hasOwnProperty
.
call
(
s
,
r
)
&&
s
[
r
]
&&
d
.
push
(
s
[
r
][
0
]),
s
[
r
]
=
0
;
for
(
t
in
a
)
Object
.
prototype
.
hasOwnProperty
.
call
(
a
,
t
)
&&
(
c
[
t
]
=
a
[
t
]);
for
(
p
&&
p
(
e
);
d
.
length
;)
d
.
shift
()();
return
i
.
push
.
apply
(
i
,
o
||
[]),
u
()}
function
u
(){
for
(
var
e
,
t
=
0
;
t
<
i
.
length
;
t
++
){
for
(
var
r
=
i
[
t
],
n
=!
0
,
a
=
1
;
a
<
r
.
length
;
a
++
){
var
o
=
r
[
a
];
0
!==
s
[
o
]
&&
(
n
=!
1
)}
n
&&
(
i
.
splice
(
t
--
,
1
),
e
=
b
(
b
.
s
=
r
[
0
]))}
return
e
}
var
r
=
{},
l
=
{
3
:
0
},
s
=
{
3
:
0
},
i
=
[];
function
b
(
e
){
if
(
r
[
e
])
return
r
[
e
].
exports
;
var
t
=
r
[
e
]
=
{
i
:
e
,
l
:
!
1
,
exports
:{}};
return
c
[
e
].
call
(
t
.
exports
,
t
,
t
.
exports
,
b
),
t
.
l
=!
0
,
t
.
exports
}
b
.
e
=
function
(
i
){
var
e
=
[];
l
[
i
]?
e
.
push
(
l
[
i
]):
0
!==
l
[
i
]
&&
{
0
:
1
,
5
:
1
,
6
:
1
,
7
:
1
,
8
:
1
,
9
:
1
,
10
:
1
,
11
:
1
,
12
:
1
,
13
:
1
,
14
:
1
,
15
:
1
,
16
:
1
,
17
:
1
,
18
:
1
,
19
:
1
,
20
:
1
,
21
:
1
,
22
:
1
,
23
:
1
,
24
:
1
,
25
:
1
,
26
:
1
}[
i
]
&&
e
.
push
(
l
[
i
]
=
new
Promise
(
function
(
e
,
n
){
for
(
var
t
=
"resources/"
+
({}[
i
]
||
i
)
+
"."
+
{
0
:
"8c0fccc8dcdf"
,
1
:
"31d6cfe0d16a"
,
5
:
"930984a29124"
,
6
:
"7acaef322a03"
,
7
:
"5aff6cfc48d7"
,
8
:
"0f44f155a214"
,
9
:
"7acee47d5dff"
,
10
:
"7af67fe88b2d"
,
11
:
"5429a27bb7bb"
,
12
:
"1f6314bfe897"
,
13
:
"35e9fd271343"
,
14
:
"96e432718f45"
,
15
:
"ae04a260ff2d"
,
16
:
"66f6f1b2e2f8"
,
17
:
"e49666539688"
,
18
:
"0ba27a54f3b2"
,
19
:
"649d251c3201"
,
20
:
"77c545d728a7"
,
21
:
"76db4080a681"
,
22
:
"ea3ddb59c757"
,
23
:
"d0b0367588f8"
,
24
:
"d0a83561e812"
,
25
:
"074cd78c0ecf"
,
26
:
"f9edc40b7bd4"
,
27
:
"31d6cfe0d16a"
,
28
:
"31d6cfe0d16a"
,
29
:
"31d6cfe0d16a"
,
30
:
"31d6cfe0d16a"
,
31
:
"31d6cfe0d16a"
,
32
:
"31d6cfe0d16a"
,
33
:
"31d6cfe0d16a"
,
34
:
"31d6cfe0d16a"
,
35
:
"31d6cfe0d16a"
}[
i
]
+
".css"
,
a
=
b
.
p
+
t
,
r
=
document
.
getElementsByTagName
(
"link"
),
o
=
0
;
o
<
r
.
length
;
o
++
){
var
f
=
(
c
=
r
[
o
]).
getAttribute
(
"data-href"
)
||
c
.
getAttribute
(
"href"
);
if
(
"stylesheet"
===
c
.
rel
&&
(
f
===
t
||
f
===
a
))
return
e
()}
var
d
=
document
.
getElementsByTagName
(
"style"
);
for
(
o
=
0
;
o
<
d
.
length
;
o
++
){
var
c
;
if
((
f
=
(
c
=
d
[
o
]).
getAttribute
(
"data-href"
))
===
t
||
f
===
a
)
return
e
()}
var
u
=
document
.
createElement
(
"link"
);
u
.
rel
=
"stylesheet"
,
u
.
type
=
"text/css"
,
u
.
onload
=
e
,
u
.
onerror
=
function
(
e
){
var
t
=
e
&&
e
.
target
&&
e
.
target
.
src
||
a
,
r
=
new
Error
(
"Loading CSS chunk "
+
i
+
" failed.
\
n("
+
t
+
")"
);
r
.
request
=
t
,
delete
l
[
i
],
u
.
parentNode
.
removeChild
(
u
),
n
(
r
)},
u
.
href
=
a
,
document
.
getElementsByTagName
(
"head"
)[
0
].
appendChild
(
u
)}).
then
(
function
(){
l
[
i
]
=
0
}));
var
r
=
s
[
i
];
if
(
0
!==
r
)
if
(
r
)
e
.
push
(
r
[
2
]);
else
{
var
t
=
new
Promise
(
function
(
e
,
t
){
r
=
s
[
i
]
=
[
e
,
t
]});
e
.
push
(
r
[
2
]
=
t
);
var
n
,
a
=
document
.
createElement
(
"script"
);
a
.
charset
=
"utf-8"
,
a
.
timeout
=
120
,
b
.
nc
&&
a
.
setAttribute
(
"nonce"
,
b
.
nc
),
a
.
src
=
function
(
e
){
return
b
.
p
+
"resources/"
+
({}[
e
]
||
e
)
+
"."
+
{
0
:
"c28ab134"
,
1
:
"f1b282bf"
,
5
:
"b82cded8"
,
6
:
"9bb7112c"
,
7
:
"210f0f54"
,
8
:
"781e1e89"
,
9
:
"cda77657"
,
10
:
"749ebb9a"
,
11
:
"dbc8ed6d"
,
12
:
"3044a2f5"
,
13
:
"b80e2183"
,
14
:
"71455ff6"
,
15
:
"fa23ee4c"
,
16
:
"281206cf"
,
17
:
"a023a7b6"
,
18
:
"358ade5e"
,
19
:
"57ebdaa1"
,
20
:
"c3d396b8"
,
21
:
"186459ef"
,
22
:
"8ded5618"
,
23
:
"ae5610e2"
,
24
:
"168bd3f3"
,
25
:
"7daab159"
,
26
:
"dcb1b880"
,
27
:
"4f93b09f"
,
28
:
"06406c1e"
,
29
:
"472e302b"
,
30
:
"ab5826d0"
,
31
:
"73286291"
,
32
:
"a6981eaf"
,
33
:
"f5d7e6f7"
,
34
:
"d0f7ea55"
,
35
:
"1b5301d2"
}[
e
]
+
".js"
}(
i
);
var
o
=
new
Error
;
n
=
function
(
e
){
a
.
onerror
=
a
.
onload
=
null
,
clearTimeout
(
f
);
var
t
=
s
[
i
];
if
(
0
!==
t
){
if
(
t
){
var
r
=
e
&&
(
"load"
===
e
.
type
?
"missing"
:
e
.
type
),
n
=
e
&&
e
.
target
&&
e
.
target
.
src
;
o
.
message
=
"Loading chunk "
+
i
+
" failed.
\
n("
+
r
+
": "
+
n
+
")"
,
o
.
name
=
"ChunkLoadError"
,
o
.
type
=
r
,
o
.
request
=
n
,
t
[
1
](
o
)}
s
[
i
]
=
void
0
}};
var
f
=
setTimeout
(
function
(){
n
({
type
:
"timeout"
,
target
:
a
})},
12
e4
);
a
.
onerror
=
a
.
onload
=
n
,
document
.
head
.
appendChild
(
a
)}
return
Promise
.
all
(
e
)},
b
.
m
=
c
,
b
.
c
=
r
,
b
.
d
=
function
(
e
,
t
,
r
){
b
.
o
(
e
,
t
)
||
Object
.
defineProperty
(
e
,
t
,{
enumerable
:
!
0
,
get
:
r
})},
b
.
r
=
function
(
e
){
"undefined"
!=
typeof
Symbol
&&
Symbol
.
toStringTag
&&
Object
.
defineProperty
(
e
,
Symbol
.
toStringTag
,{
value
:
"Module"
}),
Object
.
defineProperty
(
e
,
"__esModule"
,{
value
:
!
0
})},
b
.
t
=
function
(
t
,
e
){
if
(
1
&
e
&&
(
t
=
b
(
t
)),
8
&
e
)
return
t
;
if
(
4
&
e
&&
"object"
==
typeof
t
&&
t
&&
t
.
__esModule
)
return
t
;
var
r
=
Object
.
create
(
null
);
if
(
b
.
r
(
r
),
Object
.
defineProperty
(
r
,
"default"
,{
enumerable
:
!
0
,
value
:
t
}),
2
&
e
&&
"string"
!=
typeof
t
)
for
(
var
n
in
t
)
b
.
d
(
r
,
n
,
function
(
e
){
return
t
[
e
]}.
bind
(
null
,
n
));
return
r
},
b
.
n
=
function
(
e
){
var
t
=
e
&&
e
.
__esModule
?
function
(){
return
e
.
default
}:
function
(){
return
e
};
return
b
.
d
(
t
,
"a"
,
t
),
t
},
b
.
o
=
function
(
e
,
t
){
return
Object
.
prototype
.
hasOwnProperty
.
call
(
e
,
t
)},
b
.
p
=
"https://zws-imgs-pub.ezijing.com/static/build/learn-enterprise/"
,
b
.
oe
=
function
(
e
){
throw
console
.
error
(
e
),
e
};
var
t
=
window
.
webpackJsonp
=
window
.
webpackJsonp
||
[],
n
=
t
.
push
.
bind
(
t
);
t
.
push
=
e
,
t
=
t
.
slice
();
for
(
var
a
=
0
;
a
<
t
.
length
;
a
++
)
e
(
t
[
a
]);
var
p
=
n
;
u
()}([]);
\ No newline at end of file
\ No newline at end of file
server/client-dist/static/errorCollection/collection.js
0 → 100644
浏览文件 @
76067d6a
/**
* 监控流程:监控错误 -> 搜集错误 -> 存储错误 -> 分析错误 -> 错误报警-> 定位错误 -> 解决错误
* 前端报错:
* 1. js编译时异常(开发阶段就能排) - 开发直接查询
* 2. js运行时异常 - onerror、
* 3. 加载静态资源异常(路径写错、资源服务器异常、CDN异常、跨域)
* 4. 接口请求异常
*/
/**
* 页面JS错误监控
* 1. 重写window.onerror 方法
* 2. 重写console.error方法,如果App首次向浏览器注入的Js代码报错了,window.onerror是无法监控到的,所以只能重写console.error的方式来进行捕获,也许会有更好的办法
* 3. 重写window.onunhandledrejection方法,当你用到Promise的时候,而你又忘记写reject的捕获方法的时候,系统总是会抛出一个叫 Unhandled Promise rejection. 没有堆栈,没有其他信息,特别是在写fetch请求的时候很容易发生。
*
* 设置回调,回调中上传错误信息
*/
var
jsMonitorStarted
=
false
function
recordJavaScriptError
(
callback
)
{
// 重写console.error, 可以捕获更全面的报错信息
var
oldError
=
console
.
error
console
.
error
=
function
()
{
// arguments的长度为2时,才是error上报的时机
// if (arguments.length < 2) return;
var
errorMsg
=
arguments
[
0
]
&&
arguments
[
0
].
message
var
url
=
window
.
location
.
href
var
lineNumber
=
0
var
columnNumber
=
0
var
errorObj
=
arguments
[
0
]
&&
arguments
[
0
].
stack
if
(
!
errorObj
)
errorObj
=
arguments
[
0
]
// 如果onerror重写成功,就无需在这里进行上报了
!
jsMonitorStarted
&&
siftAndMakeUpMessage
(
errorMsg
,
url
,
lineNumber
,
columnNumber
,
errorObj
)
return
oldError
.
apply
(
console
,
arguments
)
}
// 重写 onerror 进行jsError的监听
window
.
onerror
=
function
(
errorMsg
,
url
,
lineNumber
,
columnNumber
,
errorObj
)
{
jsMonitorStarted
=
true
var
errorStack
=
errorObj
?
errorObj
.
stack
:
null
siftAndMakeUpMessage
(
errorMsg
,
url
,
lineNumber
,
columnNumber
,
errorStack
)
}
function
siftAndMakeUpMessage
(
originErrorMsg
,
originUrl
,
originLineNumber
,
originColumnNumber
,
originErrorObj
)
{
var
errorMsg
=
originErrorMsg
||
''
var
errorObj
=
originErrorObj
||
''
var
errorType
=
''
if
(
errorMsg
)
{
var
errorStackStr
=
JSON
.
stringify
(
errorObj
)
errorType
=
errorStackStr
.
split
(
': '
)[
0
].
replace
(
/"/
,
''
)
}
var
_obj
=
{
errorType
:
errorType
,
errorMsg
:
errorMsg
,
errorObj
:
errorObj
}
callback
(
_obj
)
}
}
window
.
recordJavaScriptError
=
recordJavaScriptError
server/server/controller/DirMonitor.js
浏览文件 @
76067d6a
...
@@ -116,7 +116,7 @@ const _checkDir = (dir, json, callfunc) => {
...
@@ -116,7 +116,7 @@ const _checkDir = (dir, json, callfunc) => {
let
elem
=
pa
[
j
]
let
elem
=
pa
[
j
]
let
stat
=
fs
.
statSync
(
path
.
resolve
(
dir
,
elem
))
let
stat
=
fs
.
statSync
(
path
.
resolve
(
dir
,
elem
))
if
(
stat
.
isFile
())
{
if
(
stat
.
isFile
())
{
json
.
arrJson
[
fileStr
+
(
fileCount
++
)]
=
elem
json
.
arrJson
[
fileStr
+
(
fileCount
++
)]
=
elem
+
';size:'
+
stat
.
size
}
}
if
(
stat
.
isDirectory
())
{
if
(
stat
.
isDirectory
())
{
json
.
arrJson
[
dirStr
+
(
dirCount
++
)]
=
elem
json
.
arrJson
[
dirStr
+
(
dirCount
++
)]
=
elem
...
...
server/server/controller/SocketMonitor.js
浏览文件 @
76067d6a
...
@@ -79,13 +79,16 @@ const getData = (_msg) => {
...
@@ -79,13 +79,16 @@ const getData = (_msg) => {
return
return
}
}
}
}
/* 根据action创建目录 */
let
nameDir
=
data
.
action
let
_dateStr
=
DateTime
.
toDateStr
(
new
Date
().
getTime
())
let
_dateStr
=
DateTime
.
toDateStr
(
new
Date
().
getTime
())
let
_dirPath
=
'upload_tmp/
aliVideoErr'
let
_dirPath
=
'upload_tmp/
'
+
nameDir
fs
.
stat
(
_dirPath
+
'/'
+
_dateStr
+
'.txt'
,
(
error
,
stats
)
=>
{
fs
.
stat
(
_dirPath
+
'/'
+
_dateStr
+
'.txt'
,
(
error
,
stats
)
=>
{
if
(
error
)
{
if
(
error
)
{
fs
.
stat
(
_dirPath
,
(
error
,
stats
)
=>
{
fs
.
stat
(
_dirPath
,
(
error
,
stats
)
=>
{
if
(
error
)
{
if
(
error
)
{
Directory
.
mkdir
(
'upload_tmp/
aliVideoErr'
)
Directory
.
mkdir
(
'upload_tmp/
'
+
nameDir
)
}
else
{
}
else
{
fs
.
appendFile
(
_dirPath
+
'/'
+
_dateStr
+
'.txt'
,
JSON
.
stringify
(
data
)
+
'
\
n'
,
function
(
err
)
{
fs
.
appendFile
(
_dirPath
+
'/'
+
_dateStr
+
'.txt'
,
JSON
.
stringify
(
data
)
+
'
\
n'
,
function
(
err
)
{
if
(
err
)
{
console
.
error
(
'123'
,
err
)
}
if
(
err
)
{
console
.
error
(
'123'
,
err
)
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论