Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
L
learn-online-pc
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
learn-online-pc
Commits
aa6efcb6
提交
aa6efcb6
authored
6月 06, 2019
作者:
GOD_ZYX
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
提交分支
上级
b2e2fa8d
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
18 个修改的文件
包含
131 行增加
和
329 行删除
+131
-329
History.md
History.md
+6
-0
index.html
client-dist/index.html
+2
-2
26.e977fb7c.js
client-dist/resources/26.e977fb7c.js
+2
-2
app.12b1d369.js
client-dist/resources/app.12b1d369.js
+0
-0
app.2b42e3f1.js
client-dist/resources/app.2b42e3f1.js
+0
-0
manifest.a0ff2c5a.js
client-dist/resources/manifest.a0ff2c5a.js
+2
-2
normal.vue
client/components/login/normal/normal.vue
+1
-1
chapter_api.js
client/components/services/api/chapter_api.js
+12
-12
course_api.js
client/components/services/api/course_api.js
+6
-6
discuss_api.js
client/components/services/api/discuss_api.js
+11
-11
login_api.js
client/components/services/api/login_api.js
+11
-10
msg_api.js
client/components/services/api/msg_api.js
+1
-1
report_api.js
client/components/services/api/report_api.js
+11
-11
score_api.js
client/components/services/api/score_api.js
+2
-2
base_api.js
client/components/services/base_api.js
+1
-1
config.js
server/config.js
+2
-2
ProxyMonitor-bak.js
server/controller/ProxyMonitor-bak.js
+0
-250
ProxyMonitor.js
server/controller/ProxyMonitor.js
+61
-16
没有找到文件。
History.md
浏览文件 @
aa6efcb6
PC-1.0.15 / 2019-06-06
==================
*
修改 所有接口请求方式 还是有很多内容 需要修改
*
暂时 只能在测试环境测试,不能发布。
PC-1.0.14 / 2019-06-05
==================
...
...
client-dist/index.html
浏览文件 @
aa6efcb6
...
...
@@ -2,4 +2,4 @@
<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/respond.min.js"></script>
<![endif]-->
<script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/manifest.04318f72.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/vendor.90efc743.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/app.12b1d369.js"
></script></body></html>
\ No newline at end of file
<![endif]-->
<script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/manifest.a0ff2c5a.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/vendor.90efc743.js"
></script><script
type=
"text/javascript"
src=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/app.2b42e3f1.js"
></script></body></html>
\ No newline at end of file
client-dist/resources/26.
11c4abb4
.js
→
client-dist/resources/26.
e977fb7c
.js
浏览文件 @
aa6efcb6
(
window
.
webpackJsonp
=
window
.
webpackJsonp
||
[]).
push
([[
26
],{
250
:
function
(
t
,
e
,
r
){
"use strict"
;
r
.
r
(
e
);
var
n
=
r
(
435
),
s
=
r
(
294
);
for
(
var
o
in
s
)
"default"
!==
o
&&
function
(
t
){
r
.
d
(
e
,
t
,
function
(){
return
s
[
t
]})}(
o
);
var
a
=
r
(
1
),
c
=
Object
(
a
.
a
)(
s
.
default
,
n
.
a
,
n
.
b
,
!
1
,
null
,
null
,
null
);
c
.
options
.
__file
=
"normal.vue"
,
e
.
default
=
c
.
exports
},
294
:
function
(
t
,
e
,
r
){
"use strict"
;
r
.
r
(
e
);
var
n
=
r
(
295
),
s
=
r
.
n
(
n
);
for
(
var
o
in
n
)
"default"
!==
o
&&
function
(
t
){
r
.
d
(
e
,
t
,
function
(){
return
n
[
t
]})}(
o
);
e
.
default
=
s
.
a
},
295
:
function
(
t
,
e
,
r
){
"use strict"
;
Object
.
defineProperty
(
e
,
"__esModule"
,{
value
:
!
0
});
var
n
,
s
=
r
(
41
),
o
=
r
(
73
),
a
=
(
n
=
o
)
&&
n
.
__esModule
?
n
:{
default
:
n
};
e
.
default
=
{
props
:{
params
:{
type
:
Object
,
required
:
!
1
,
default
:{}},
query
:{
type
:
Object
,
required
:
!
1
,
default
:{}}},
data
:
function
(){
return
{
setAccount
:{},
accountRules
:{
user
:[{
required
:
!
0
,
message
:
"请输入账号"
,
trigger
:
"blur"
},{
pattern
:
/^
(
1
[
3-9
]\d{9}
|
[\w\.]
+@
\w
+
(\.\w
+
)
+
)
$/
,
message
:
"请输入正确格式的手机号/邮箱"
,
trigger
:
"change"
}],
pwd
:[{
required
:
!
0
,
message
:
"请输入密码"
,
trigger
:
"blur"
}]}}},
methods
:{
onSubmitSetAccount
:
function
(){
var
e
=
this
;
this
.
$refs
.
setAccountform
.
validate
(
function
(
t
){
if
(
!
t
)
return
e
.
$message
.
error
(
"请根据输入框提示,检查输入项。"
),
!
1
;(
0
,
s
.
request
)({
component
:
e
,
actionName
:
"loginAction"
,
functionName
:
"userLogin"
,
data
:{
account
:
e
.
setAccount
.
user
,
password
:
e
.
$md5
(
"uokoaduw"
+
e
.
setAccount
.
pwd
.
split
(
""
).
reverse
().
join
(
""
)
+
"auhgniq"
),
pwd
:
a
.
default
.
encode
(
"uokoaduw"
+
e
.
setAccount
.
pwd
.
split
(
""
).
reverse
().
join
(
""
)
+
"auhgniq"
)},
thenCallback
:
function
(
t
){
e
.
query
.
rd
?
e
.
$router
.
push
({
path
:
decodeURIComponent
(
e
.
query
.
rd
)}):(
window
.
G
.
pwd
=
a
.
default
.
encode
(
"uokoaduw"
+
e
.
setAccount
.
pwd
.
split
(
""
).
reverse
().
join
(
""
)
+
"auhgniq"
),
e
.
$router
.
push
({
path
:
"/app/my-learn/course"
}))},
catchCallback
:
function
(){},
finallyCallback
:
function
(){}})})}}}},
393
:
function
(
t
,
e
,
r
){
t
.
exports
=
r
.
p
+
"resources/login-left-bg.1a456b4f.png"
},
435
:
function
(
t
,
e
,
r
){
"use strict"
;
var
n
=
function
(){
var
e
=
this
,
t
=
e
.
$createElement
,
r
=
e
.
_self
.
_c
||
t
;
return
r
(
"div"
,{
staticClass
:
"row"
},[
e
.
_m
(
0
),
e
.
_v
(
" "
),
r
(
"div"
,{
staticClass
:
"col-12 col-md-7 col-lg-5 col-xl-4"
},[
r
(
"el-form"
,{
ref
:
"setAccountform"
,
attrs
:{
model
:
e
.
setAccount
,
rules
:
e
.
accountRules
}},[
r
(
"el-form-item"
,{
attrs
:{
prop
:
"user"
}},[
r
(
"el-input"
,{
staticClass
:
"self-input"
,
attrs
:{
type
:
"text"
,
placeholder
:
"手机/邮箱"
},
nativeOn
:{
keyup
:
function
(
t
){
return
"button"
in
t
||!
e
.
_k
(
t
.
keyCode
,
"enter"
,
13
,
t
.
key
,
"Enter"
)?
e
.
onSubmitSetAccount
(
t
):
null
}},
model
:{
value
:
e
.
setAccount
.
user
,
callback
:
function
(
t
){
e
.
$set
(
e
.
setAccount
,
"user"
,
t
)},
expression
:
"setAccount.user"
}},[
r
(
"i"
,{
staticClass
:
"el-input__icon el-icon-self-character"
,
attrs
:{
slot
:
"prefix"
},
slot
:
"prefix"
})])],
1
),
e
.
_v
(
" "
),
r
(
"el-form-item"
,{
attrs
:{
prop
:
"pwd"
}},[
r
(
"el-input"
,{
attrs
:{
type
:
"password"
,
placeholder
:
"密码"
},
nativeOn
:{
keyup
:
function
(
t
){
return
"button"
in
t
||!
e
.
_k
(
t
.
keyCode
,
"enter"
,
13
,
t
.
key
,
"Enter"
)?
e
.
onSubmitSetAccount
(
t
):
null
}},
model
:{
value
:
e
.
setAccount
.
pwd
,
callback
:
function
(
t
){
e
.
$set
(
e
.
setAccount
,
"pwd"
,
t
)},
expression
:
"setAccount.pwd"
}},[
r
(
"i"
,{
staticClass
:
"el-input__icon el-icon-self-mima"
,
attrs
:{
slot
:
"prefix"
},
slot
:
"prefix"
})])],
1
),
e
.
_v
(
" "
),
r
(
"el-form-item"
,[
r
(
"el-button"
,{
staticClass
:
"login-btn"
,
attrs
:{
type
:
"primary"
},
on
:{
click
:
e
.
onSubmitSetAccount
}},[
e
.
_v
(
"登录"
)])],
1
),
e
.
_v
(
" "
),
r
(
"div"
,{
staticClass
:
"text"
},[
r
(
"span"
,{
staticClass
:
"code-login"
},[
e
.
query
.
rd
?[
r
(
"router-link"
,{
staticClass
:
"router-link-class"
,
attrs
:{
"active-class"
:
"router-link-active-class"
,
to
:{
path
:
"/login/code?rd="
+
e
.
query
.
rd
}}},[
e
.
_v
(
"验证码登录"
)])]:[
r
(
"router-link"
,{
staticClass
:
"router-link-class"
,
attrs
:{
"active-class"
:
"router-link-active-class"
,
to
:{
name
:
"codeLogin"
}}},[
e
.
_v
(
"验证码登录"
)])]],
2
),
e
.
_v
(
" "
),
r
(
"span"
,{
staticClass
:
"forget-pwd"
},[
e
.
query
.
rd
?[
r
(
"router-link"
,{
staticClass
:
"router-link-class"
,
attrs
:{
"active-class"
:
"router-link-active-class"
,
to
:{
path
:
"/login/forget?rd="
+
e
.
query
.
rd
}}},[
e
.
_v
(
"忘记密码"
)])]:[
r
(
"router-link"
,{
staticClass
:
"router-link-class"
,
attrs
:{
"active-class"
:
"router-link-active-class"
,
to
:{
name
:
"forgetPwd"
}}},[
e
.
_v
(
"忘记密码"
)])]],
2
)])],
1
)],
1
)])},
s
=
[
function
(){
var
t
=
this
.
$createElement
,
e
=
this
.
_self
.
_c
||
t
;
return
e
(
"div"
,{
staticClass
:
"hidden-xs-only col-md-5 col-lg-6 col-xl-6"
},[
e
(
"img"
,{
attrs
:{
src
:
r
(
393
),
alt
:
"左侧-sofia logo"
}})])}];
r
.
d
(
e
,
"a"
,
function
(){
return
n
}),
r
.
d
(
e
,
"b"
,
function
(){
return
s
})}}]);
\ No newline at end of file
(
window
.
webpackJsonp
=
window
.
webpackJsonp
||
[]).
push
([[
26
],{
250
:
function
(
t
,
e
,
r
){
"use strict"
;
r
.
r
(
e
);
var
n
=
r
(
435
),
s
=
r
(
294
);
for
(
var
o
in
s
)
"default"
!==
o
&&
function
(
t
){
r
.
d
(
e
,
t
,
function
(){
return
s
[
t
]})}(
o
);
var
a
=
r
(
1
),
c
=
Object
(
a
.
a
)(
s
.
default
,
n
.
a
,
n
.
b
,
!
1
,
null
,
null
,
null
);
c
.
options
.
__file
=
"normal.vue"
,
e
.
default
=
c
.
exports
},
294
:
function
(
t
,
e
,
r
){
"use strict"
;
r
.
r
(
e
);
var
n
=
r
(
295
),
s
=
r
.
n
(
n
);
for
(
var
o
in
n
)
"default"
!==
o
&&
function
(
t
){
r
.
d
(
e
,
t
,
function
(){
return
n
[
t
]})}(
o
);
e
.
default
=
s
.
a
},
295
:
function
(
t
,
e
,
r
){
"use strict"
;
Object
.
defineProperty
(
e
,
"__esModule"
,{
value
:
!
0
});
var
n
,
s
=
r
(
41
),
o
=
r
(
73
),
a
=
(
n
=
o
)
&&
n
.
__esModule
?
n
:{
default
:
n
};
e
.
default
=
{
props
:{
params
:{
type
:
Object
,
required
:
!
1
,
default
:{}},
query
:{
type
:
Object
,
required
:
!
1
,
default
:{}}},
data
:
function
(){
return
{
setAccount
:{},
accountRules
:{
user
:[{
required
:
!
0
,
message
:
"请输入账号"
,
trigger
:
"blur"
},{
pattern
:
/^
(
1
[
3-9
]\d{9}
|
[\w\.]
+@
\w
+
(\.\w
+
)
+
)
$/
,
message
:
"请输入正确格式的手机号/邮箱"
,
trigger
:
"change"
}],
pwd
:[{
required
:
!
0
,
message
:
"请输入密码"
,
trigger
:
"blur"
}]}}},
methods
:{
onSubmitSetAccount
:
function
(){
var
e
=
this
;
this
.
$refs
.
setAccountform
.
validate
(
function
(
t
){
if
(
!
t
)
return
e
.
$message
.
error
(
"请根据输入框提示,检查输入项。"
),
!
1
;(
0
,
s
.
request
)({
component
:
e
,
actionName
:
"loginAction"
,
functionName
:
"userLogin"
,
data
:{
login_name
:
e
.
setAccount
.
user
,
password
:
e
.
$md5
(
"uokoaduw"
+
e
.
setAccount
.
pwd
.
split
(
""
).
reverse
().
join
(
""
)
+
"auhgniq"
),
pwd
:
a
.
default
.
encode
(
"uokoaduw"
+
e
.
setAccount
.
pwd
.
split
(
""
).
reverse
().
join
(
""
)
+
"auhgniq"
)},
thenCallback
:
function
(
t
){
e
.
query
.
rd
?
e
.
$router
.
push
({
path
:
decodeURIComponent
(
e
.
query
.
rd
)}):(
window
.
G
.
pwd
=
a
.
default
.
encode
(
"uokoaduw"
+
e
.
setAccount
.
pwd
.
split
(
""
).
reverse
().
join
(
""
)
+
"auhgniq"
),
e
.
$router
.
push
({
path
:
"/app/my-learn/course"
}))},
catchCallback
:
function
(){},
finallyCallback
:
function
(){}})})}}}},
393
:
function
(
t
,
e
,
r
){
t
.
exports
=
r
.
p
+
"resources/login-left-bg.1a456b4f.png"
},
435
:
function
(
t
,
e
,
r
){
"use strict"
;
var
n
=
function
(){
var
e
=
this
,
t
=
e
.
$createElement
,
r
=
e
.
_self
.
_c
||
t
;
return
r
(
"div"
,{
staticClass
:
"row"
},[
e
.
_m
(
0
),
e
.
_v
(
" "
),
r
(
"div"
,{
staticClass
:
"col-12 col-md-7 col-lg-5 col-xl-4"
},[
r
(
"el-form"
,{
ref
:
"setAccountform"
,
attrs
:{
model
:
e
.
setAccount
,
rules
:
e
.
accountRules
}},[
r
(
"el-form-item"
,{
attrs
:{
prop
:
"user"
}},[
r
(
"el-input"
,{
staticClass
:
"self-input"
,
attrs
:{
type
:
"text"
,
placeholder
:
"手机/邮箱"
},
nativeOn
:{
keyup
:
function
(
t
){
return
"button"
in
t
||!
e
.
_k
(
t
.
keyCode
,
"enter"
,
13
,
t
.
key
,
"Enter"
)?
e
.
onSubmitSetAccount
(
t
):
null
}},
model
:{
value
:
e
.
setAccount
.
user
,
callback
:
function
(
t
){
e
.
$set
(
e
.
setAccount
,
"user"
,
t
)},
expression
:
"setAccount.user"
}},[
r
(
"i"
,{
staticClass
:
"el-input__icon el-icon-self-character"
,
attrs
:{
slot
:
"prefix"
},
slot
:
"prefix"
})])],
1
),
e
.
_v
(
" "
),
r
(
"el-form-item"
,{
attrs
:{
prop
:
"pwd"
}},[
r
(
"el-input"
,{
attrs
:{
type
:
"password"
,
placeholder
:
"密码"
},
nativeOn
:{
keyup
:
function
(
t
){
return
"button"
in
t
||!
e
.
_k
(
t
.
keyCode
,
"enter"
,
13
,
t
.
key
,
"Enter"
)?
e
.
onSubmitSetAccount
(
t
):
null
}},
model
:{
value
:
e
.
setAccount
.
pwd
,
callback
:
function
(
t
){
e
.
$set
(
e
.
setAccount
,
"pwd"
,
t
)},
expression
:
"setAccount.pwd"
}},[
r
(
"i"
,{
staticClass
:
"el-input__icon el-icon-self-mima"
,
attrs
:{
slot
:
"prefix"
},
slot
:
"prefix"
})])],
1
),
e
.
_v
(
" "
),
r
(
"el-form-item"
,[
r
(
"el-button"
,{
staticClass
:
"login-btn"
,
attrs
:{
type
:
"primary"
},
on
:{
click
:
e
.
onSubmitSetAccount
}},[
e
.
_v
(
"登录"
)])],
1
),
e
.
_v
(
" "
),
r
(
"div"
,{
staticClass
:
"text"
},[
r
(
"span"
,{
staticClass
:
"code-login"
},[
e
.
query
.
rd
?[
r
(
"router-link"
,{
staticClass
:
"router-link-class"
,
attrs
:{
"active-class"
:
"router-link-active-class"
,
to
:{
path
:
"/login/code?rd="
+
e
.
query
.
rd
}}},[
e
.
_v
(
"验证码登录"
)])]:[
r
(
"router-link"
,{
staticClass
:
"router-link-class"
,
attrs
:{
"active-class"
:
"router-link-active-class"
,
to
:{
name
:
"codeLogin"
}}},[
e
.
_v
(
"验证码登录"
)])]],
2
),
e
.
_v
(
" "
),
r
(
"span"
,{
staticClass
:
"forget-pwd"
},[
e
.
query
.
rd
?[
r
(
"router-link"
,{
staticClass
:
"router-link-class"
,
attrs
:{
"active-class"
:
"router-link-active-class"
,
to
:{
path
:
"/login/forget?rd="
+
e
.
query
.
rd
}}},[
e
.
_v
(
"忘记密码"
)])]:[
r
(
"router-link"
,{
staticClass
:
"router-link-class"
,
attrs
:{
"active-class"
:
"router-link-active-class"
,
to
:{
name
:
"forgetPwd"
}}},[
e
.
_v
(
"忘记密码"
)])]],
2
)])],
1
)],
1
)])},
s
=
[
function
(){
var
t
=
this
.
$createElement
,
e
=
this
.
_self
.
_c
||
t
;
return
e
(
"div"
,{
staticClass
:
"hidden-xs-only col-md-5 col-lg-6 col-xl-6"
},[
e
(
"img"
,{
attrs
:{
src
:
r
(
393
),
alt
:
"左侧-sofia logo"
}})])}];
r
.
d
(
e
,
"a"
,
function
(){
return
n
}),
r
.
d
(
e
,
"b"
,
function
(){
return
s
})}}]);
\ No newline at end of file
client-dist/resources/app.12b1d369.js
deleted
100644 → 0
浏览文件 @
b2e2fa8d
差异被折叠。
点击展开。
client-dist/resources/app.2b42e3f1.js
0 → 100644
浏览文件 @
aa6efcb6
差异被折叠。
点击展开。
client-dist/resources/manifest.
04318f72
.js
→
client-dist/resources/manifest.
a0ff2c5a
.js
浏览文件 @
aa6efcb6
!
function
(
d
){
function
e
(
e
){
for
(
var
t
,
r
,
n
=
e
[
0
],
a
=
e
[
1
],
c
=
e
[
2
],
o
=
0
,
f
=
[];
o
<
n
.
length
;
o
++
)
r
=
n
[
o
],
b
[
r
]
&&
f
.
push
(
b
[
r
][
0
]),
b
[
r
]
=
0
;
for
(
t
in
a
)
Object
.
prototype
.
hasOwnProperty
.
call
(
a
,
t
)
&&
(
d
[
t
]
=
a
[
t
]);
for
(
p
&&
p
(
e
);
f
.
length
;)
f
.
shift
()();
return
i
.
push
.
apply
(
i
,
c
||
[]),
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
c
=
r
[
a
];
0
!==
b
[
c
]
&&
(
n
=!
1
)}
n
&&
(
i
.
splice
(
t
--
,
1
),
e
=
s
(
s
.
s
=
r
[
0
]))}
return
e
}
var
r
=
{},
l
=
{
3
:
0
},
b
=
{
3
:
0
},
i
=
[];
function
s
(
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
,
s
),
t
.
l
=!
0
,
t
.
exports
}
s
.
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
}[
i
]
&&
e
.
push
(
l
[
i
]
=
new
Promise
(
function
(
e
,
n
){
for
(
var
t
=
"resources/"
+
({}[
i
]
||
i
)
+
"."
+
{
0
:
"7e9c19881242"
,
1
:
"31d6cfe0d16a"
,
5
:
"b6a10460f085"
,
6
:
"0069f7ea7855"
,
7
:
"b7a3b3beb3de"
,
8
:
"edadd3d1dece"
,
9
:
"2b76410db4d0"
,
10
:
"30b36ab56f09"
,
11
:
"7275abdd54ff"
,
12
:
"e14af2852dbd"
,
13
:
"03a7345988fb"
,
14
:
"7bd34c9db226"
,
15
:
"fc688477e0f2"
,
16
:
"9c95c5430f41"
,
17
:
"081b63b62922"
,
18
:
"69bf85281bf8"
,
19
:
"fca5eccb0e56"
,
20
:
"cdc25c4261cf"
,
21
:
"abf993cecc16"
,
22
:
"da1346fedd49"
,
23
:
"5ba1b1bc7480"
,
24
:
"43ee51cf782c"
,
25
:
"12c536f6abaf"
,
26
:
"31d6cfe0d16a"
,
27
:
"31d6cfe0d16a"
,
28
:
"31d6cfe0d16a"
,
29
:
"31d6cfe0d16a"
,
30
:
"31d6cfe0d16a"
,
31
:
"31d6cfe0d16a"
,
32
:
"31d6cfe0d16a"
,
33
:
"31d6cfe0d16a"
}[
i
]
+
".css"
,
a
=
s
.
p
+
t
,
r
=
document
.
getElementsByTagName
(
"link"
),
c
=
0
;
c
<
r
.
length
;
c
++
){
var
o
=
(
d
=
r
[
c
]).
getAttribute
(
"data-href"
)
||
d
.
getAttribute
(
"href"
);
if
(
"stylesheet"
===
d
.
rel
&&
(
o
===
t
||
o
===
a
))
return
e
()}
var
f
=
document
.
getElementsByTagName
(
"style"
);
for
(
c
=
0
;
c
<
f
.
length
;
c
++
){
var
d
;
if
((
o
=
(
d
=
f
[
c
]).
getAttribute
(
"data-href"
))
===
t
||
o
===
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
t
,
r
=
b
[
i
];
if
(
0
!==
r
)
if
(
r
)
e
.
push
(
r
[
2
]);
else
{
var
n
=
new
Promise
(
function
(
e
,
t
){
r
=
b
[
i
]
=
[
e
,
t
]});
e
.
push
(
r
[
2
]
=
n
);
var
a
,
c
=
document
.
getElementsByTagName
(
"head"
)[
0
],
o
=
document
.
createElement
(
"script"
);
o
.
charset
=
"utf-8"
,
o
.
timeout
=
120
,
s
.
nc
&&
o
.
setAttribute
(
"nonce"
,
s
.
nc
),
o
.
src
=
s
.
p
+
"resources/"
+
({}[
t
=
i
]
||
t
)
+
"."
+
{
0
:
"ce816893"
,
1
:
"46d7f9f3"
,
5
:
"838bc7b4"
,
6
:
"2c68d171"
,
7
:
"91ffbfb3"
,
8
:
"8069cfef"
,
9
:
"fb4debab"
,
10
:
"79cec249"
,
11
:
"ab2ede65"
,
12
:
"aa643f9d"
,
13
:
"ccf7cf48"
,
14
:
"46fd8cda"
,
15
:
"c478c99e"
,
16
:
"c5e6147d"
,
17
:
"83f61edd"
,
18
:
"f002b18a"
,
19
:
"3266ba87"
,
20
:
"92c2491c"
,
21
:
"b3bed3b3"
,
22
:
"e3ca5e96"
,
23
:
"9808c0a1"
,
24
:
"a7d17575"
,
25
:
"68964f06"
,
26
:
"11c4abb4"
,
27
:
"c4252e04"
,
28
:
"02e3da72"
,
29
:
"ca65a5d7"
,
30
:
"afe88874"
,
31
:
"89910775"
,
32
:
"3c83e649"
,
33
:
"912ce55b"
}[
t
]
+
".js"
,
a
=
function
(
e
){
o
.
onerror
=
o
.
onload
=
null
,
clearTimeout
(
f
);
var
t
=
b
[
i
];
if
(
0
!==
t
){
if
(
t
){
var
r
=
e
&&
(
"load"
===
e
.
type
?
"missing"
:
e
.
type
),
n
=
e
&&
e
.
target
&&
e
.
target
.
src
,
a
=
new
Error
(
"Loading chunk "
+
i
+
" failed.
\
n("
+
r
+
": "
+
n
+
")"
);
a
.
type
=
r
,
a
.
request
=
n
,
t
[
1
](
a
)}
b
[
i
]
=
void
0
}};
var
f
=
setTimeout
(
function
(){
a
({
type
:
"timeout"
,
target
:
o
})},
12
e4
);
o
.
onerror
=
o
.
onload
=
a
,
c
.
appendChild
(
o
)}
return
Promise
.
all
(
e
)},
s
.
m
=
d
,
s
.
c
=
r
,
s
.
d
=
function
(
e
,
t
,
r
){
s
.
o
(
e
,
t
)
||
Object
.
defineProperty
(
e
,
t
,{
enumerable
:
!
0
,
get
:
r
})},
s
.
r
=
function
(
e
){
"undefined"
!=
typeof
Symbol
&&
Symbol
.
toStringTag
&&
Object
.
defineProperty
(
e
,
Symbol
.
toStringTag
,{
value
:
"Module"
}),
Object
.
defineProperty
(
e
,
"__esModule"
,{
value
:
!
0
})},
s
.
t
=
function
(
t
,
e
){
if
(
1
&
e
&&
(
t
=
s
(
t
)),
8
&
e
)
return
t
;
if
(
4
&
e
&&
"object"
==
typeof
t
&&
t
&&
t
.
__esModule
)
return
t
;
var
r
=
Object
.
create
(
null
);
if
(
s
.
r
(
r
),
Object
.
defineProperty
(
r
,
"default"
,{
enumerable
:
!
0
,
value
:
t
}),
2
&
e
&&
"string"
!=
typeof
t
)
for
(
var
n
in
t
)
s
.
d
(
r
,
n
,
function
(
e
){
return
t
[
e
]}.
bind
(
null
,
n
));
return
r
},
s
.
n
=
function
(
e
){
var
t
=
e
&&
e
.
__esModule
?
function
(){
return
e
.
default
}:
function
(){
return
e
};
return
s
.
d
(
t
,
"a"
,
t
),
t
},
s
.
o
=
function
(
e
,
t
){
return
Object
.
prototype
.
hasOwnProperty
.
call
(
e
,
t
)},
s
.
p
=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/"
,
s
.
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
!
function
(
d
){
function
e
(
e
){
for
(
var
t
,
r
,
n
=
e
[
0
],
a
=
e
[
1
],
c
=
e
[
2
],
o
=
0
,
f
=
[];
o
<
n
.
length
;
o
++
)
r
=
n
[
o
],
b
[
r
]
&&
f
.
push
(
b
[
r
][
0
]),
b
[
r
]
=
0
;
for
(
t
in
a
)
Object
.
prototype
.
hasOwnProperty
.
call
(
a
,
t
)
&&
(
d
[
t
]
=
a
[
t
]);
for
(
p
&&
p
(
e
);
f
.
length
;)
f
.
shift
()();
return
i
.
push
.
apply
(
i
,
c
||
[]),
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
c
=
r
[
a
];
0
!==
b
[
c
]
&&
(
n
=!
1
)}
n
&&
(
i
.
splice
(
t
--
,
1
),
e
=
s
(
s
.
s
=
r
[
0
]))}
return
e
}
var
r
=
{},
l
=
{
3
:
0
},
b
=
{
3
:
0
},
i
=
[];
function
s
(
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
,
s
),
t
.
l
=!
0
,
t
.
exports
}
s
.
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
}[
i
]
&&
e
.
push
(
l
[
i
]
=
new
Promise
(
function
(
e
,
n
){
for
(
var
t
=
"resources/"
+
({}[
i
]
||
i
)
+
"."
+
{
0
:
"7e9c19881242"
,
1
:
"31d6cfe0d16a"
,
5
:
"b6a10460f085"
,
6
:
"0069f7ea7855"
,
7
:
"b7a3b3beb3de"
,
8
:
"edadd3d1dece"
,
9
:
"2b76410db4d0"
,
10
:
"30b36ab56f09"
,
11
:
"7275abdd54ff"
,
12
:
"e14af2852dbd"
,
13
:
"03a7345988fb"
,
14
:
"7bd34c9db226"
,
15
:
"fc688477e0f2"
,
16
:
"9c95c5430f41"
,
17
:
"081b63b62922"
,
18
:
"69bf85281bf8"
,
19
:
"fca5eccb0e56"
,
20
:
"cdc25c4261cf"
,
21
:
"abf993cecc16"
,
22
:
"da1346fedd49"
,
23
:
"5ba1b1bc7480"
,
24
:
"43ee51cf782c"
,
25
:
"12c536f6abaf"
,
26
:
"31d6cfe0d16a"
,
27
:
"31d6cfe0d16a"
,
28
:
"31d6cfe0d16a"
,
29
:
"31d6cfe0d16a"
,
30
:
"31d6cfe0d16a"
,
31
:
"31d6cfe0d16a"
,
32
:
"31d6cfe0d16a"
,
33
:
"31d6cfe0d16a"
}[
i
]
+
".css"
,
a
=
s
.
p
+
t
,
r
=
document
.
getElementsByTagName
(
"link"
),
c
=
0
;
c
<
r
.
length
;
c
++
){
var
o
=
(
d
=
r
[
c
]).
getAttribute
(
"data-href"
)
||
d
.
getAttribute
(
"href"
);
if
(
"stylesheet"
===
d
.
rel
&&
(
o
===
t
||
o
===
a
))
return
e
()}
var
f
=
document
.
getElementsByTagName
(
"style"
);
for
(
c
=
0
;
c
<
f
.
length
;
c
++
){
var
d
;
if
((
o
=
(
d
=
f
[
c
]).
getAttribute
(
"data-href"
))
===
t
||
o
===
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
t
,
r
=
b
[
i
];
if
(
0
!==
r
)
if
(
r
)
e
.
push
(
r
[
2
]);
else
{
var
n
=
new
Promise
(
function
(
e
,
t
){
r
=
b
[
i
]
=
[
e
,
t
]});
e
.
push
(
r
[
2
]
=
n
);
var
a
,
c
=
document
.
getElementsByTagName
(
"head"
)[
0
],
o
=
document
.
createElement
(
"script"
);
o
.
charset
=
"utf-8"
,
o
.
timeout
=
120
,
s
.
nc
&&
o
.
setAttribute
(
"nonce"
,
s
.
nc
),
o
.
src
=
s
.
p
+
"resources/"
+
({}[
t
=
i
]
||
t
)
+
"."
+
{
0
:
"ce816893"
,
1
:
"46d7f9f3"
,
5
:
"838bc7b4"
,
6
:
"2c68d171"
,
7
:
"91ffbfb3"
,
8
:
"8069cfef"
,
9
:
"fb4debab"
,
10
:
"79cec249"
,
11
:
"ab2ede65"
,
12
:
"aa643f9d"
,
13
:
"ccf7cf48"
,
14
:
"46fd8cda"
,
15
:
"c478c99e"
,
16
:
"c5e6147d"
,
17
:
"83f61edd"
,
18
:
"f002b18a"
,
19
:
"3266ba87"
,
20
:
"92c2491c"
,
21
:
"b3bed3b3"
,
22
:
"e3ca5e96"
,
23
:
"9808c0a1"
,
24
:
"a7d17575"
,
25
:
"68964f06"
,
26
:
"e977fb7c"
,
27
:
"c4252e04"
,
28
:
"02e3da72"
,
29
:
"ca65a5d7"
,
30
:
"afe88874"
,
31
:
"89910775"
,
32
:
"3c83e649"
,
33
:
"912ce55b"
}[
t
]
+
".js"
,
a
=
function
(
e
){
o
.
onerror
=
o
.
onload
=
null
,
clearTimeout
(
f
);
var
t
=
b
[
i
];
if
(
0
!==
t
){
if
(
t
){
var
r
=
e
&&
(
"load"
===
e
.
type
?
"missing"
:
e
.
type
),
n
=
e
&&
e
.
target
&&
e
.
target
.
src
,
a
=
new
Error
(
"Loading chunk "
+
i
+
" failed.
\
n("
+
r
+
": "
+
n
+
")"
);
a
.
type
=
r
,
a
.
request
=
n
,
t
[
1
](
a
)}
b
[
i
]
=
void
0
}};
var
f
=
setTimeout
(
function
(){
a
({
type
:
"timeout"
,
target
:
o
})},
12
e4
);
o
.
onerror
=
o
.
onload
=
a
,
c
.
appendChild
(
o
)}
return
Promise
.
all
(
e
)},
s
.
m
=
d
,
s
.
c
=
r
,
s
.
d
=
function
(
e
,
t
,
r
){
s
.
o
(
e
,
t
)
||
Object
.
defineProperty
(
e
,
t
,{
enumerable
:
!
0
,
get
:
r
})},
s
.
r
=
function
(
e
){
"undefined"
!=
typeof
Symbol
&&
Symbol
.
toStringTag
&&
Object
.
defineProperty
(
e
,
Symbol
.
toStringTag
,{
value
:
"Module"
}),
Object
.
defineProperty
(
e
,
"__esModule"
,{
value
:
!
0
})},
s
.
t
=
function
(
t
,
e
){
if
(
1
&
e
&&
(
t
=
s
(
t
)),
8
&
e
)
return
t
;
if
(
4
&
e
&&
"object"
==
typeof
t
&&
t
&&
t
.
__esModule
)
return
t
;
var
r
=
Object
.
create
(
null
);
if
(
s
.
r
(
r
),
Object
.
defineProperty
(
r
,
"default"
,{
enumerable
:
!
0
,
value
:
t
}),
2
&
e
&&
"string"
!=
typeof
t
)
for
(
var
n
in
t
)
s
.
d
(
r
,
n
,
function
(
e
){
return
t
[
e
]}.
bind
(
null
,
n
));
return
r
},
s
.
n
=
function
(
e
){
var
t
=
e
&&
e
.
__esModule
?
function
(){
return
e
.
default
}:
function
(){
return
e
};
return
s
.
d
(
t
,
"a"
,
t
),
t
},
s
.
o
=
function
(
e
,
t
){
return
Object
.
prototype
.
hasOwnProperty
.
call
(
e
,
t
)},
s
.
p
=
"https://zws-imgs-pub.ezijing.com/static/build/learn-mba/"
,
s
.
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
client/components/login/normal/normal.vue
浏览文件 @
aa6efcb6
...
...
@@ -74,7 +74,7 @@ export default {
actionName
:
'loginAction'
,
functionName
:
'userLogin'
,
data
:
{
account
:
this
.
setAccount
.
user
,
login_name
:
this
.
setAccount
.
user
,
password
:
this
.
$md5
(
'uokoaduw'
+
this
.
setAccount
.
pwd
.
split
(
''
).
reverse
().
join
(
''
)
+
'auhgniq'
),
pwd
:
Base64
.
encode
(
'uokoaduw'
+
this
.
setAccount
.
pwd
.
split
(
''
).
reverse
().
join
(
''
)
+
'auhgniq'
)
// 追加上 密码
},
...
...
client/components/services/api/chapter_api.js
浏览文件 @
aa6efcb6
...
...
@@ -7,19 +7,19 @@ export default class ChapterAPI extends BaseAPI {
* @param {[string]} cur_semester_id -> sid
* @param {[string]} cur_video_id -> vid
*/
getChapterList
=
(
cid
,
sid
,
vid
)
=>
this
.
get
(
`/
tenant/
v2/education/courses/
${
sid
}
/
${
cid
}
`
,
{})
getChapterList
=
(
cid
,
sid
,
vid
)
=>
this
.
get
(
`/v2/education/courses/
${
sid
}
/
${
cid
}
`
,
{})
/**
* 获取对应某个章节的详细信息
* @param {[string]} vid
*/
getCurrentChapterDetail
=
(
vid
)
=>
this
.
post
(
'/
tenant/
v2/education/video-streaming'
,
{
vid
})
getCurrentChapterDetail
=
(
vid
)
=>
this
.
post
(
'/v2/education/video-streaming'
,
{
vid
})
/**
* 获取进度信息
* @param {[string]} vid
* @param {[string]} did
* @param {[string]} sid
*/
getProgress
=
(
vid
,
did
,
sid
)
=>
this
.
get
(
`/
tenant/
v2/education/video/
${
sid
}
/
${
vid
}
/device`
,
{
device_id
:
did
})
getProgress
=
(
vid
,
did
,
sid
)
=>
this
.
get
(
`/v2/education/video/
${
sid
}
/
${
vid
}
/device`
,
{
device_id
:
did
})
/**
* 提交进度信息
* @param {[object]} obj
...
...
@@ -32,50 +32,50 @@ export default class ChapterAPI extends BaseAPI {
_m: obj.mpt, // 当前播放最大时间
_c: obj.cpt // 当前播放位置
*/
updateProgress
=
(
obj
=
{})
=>
this
.
get
(
'/
tenant/
v2/analytics/upload-video'
,
obj
)
updateProgress
=
(
obj
=
{})
=>
this
.
get
(
'/v2/analytics/upload-video'
,
obj
)
/**
* 获取试题信息
* @param {[string]} eid
* @param {[string]} sid
*/
getExamDetail
=
(
sid
,
eid
)
=>
this
.
get
(
`/
tenant/
v2/education/homeworks/
${
sid
}
/
${
eid
}
`
,
{})
getExamDetail
=
(
sid
,
eid
)
=>
this
.
get
(
`/v2/education/homeworks/
${
sid
}
/
${
eid
}
`
,
{})
/**
* 提交考试信息
* @param {[object]} param
*/
submitExamDetail
=
(
param
)
=>
this
.
post
(
`/
tenant/
v2/education/homeworks`
,
param
)
submitExamDetail
=
(
param
)
=>
this
.
post
(
`/v2/education/homeworks`
,
param
)
/**
* 获取对应 作业或问题 回答
* @param {[string]} sid
* @param {[string]} id resource_id
*/
getHomework
=
(
sid
,
id
)
=>
this
.
get
(
`/
tenant/
v2/education/homeworks/
${
sid
}
/
${
id
}
`
,
{})
getHomework
=
(
sid
,
id
)
=>
this
.
get
(
`/v2/education/homeworks/
${
sid
}
/
${
id
}
`
,
{})
/**
* 文件提交
* @param {[object]} obj
*/
uploadFile
=
(
obj
=
{})
=>
this
.
post
(
'/
tenant/
util/upload-file'
,
obj
,
{
headers
:
{
'Content-Type'
:
'multipart/form-data'
}
})
uploadFile
=
(
obj
=
{})
=>
this
.
post
(
'/util/upload-file'
,
obj
,
{
headers
:
{
'Content-Type'
:
'multipart/form-data'
}
})
/**
* 提交课程 作业或问题
*/
updateHomework
=
(
obj
=
{})
=>
this
.
post
(
'/
tenant/
v2/education/homeworks'
,
obj
,
{
headers
:
{
'Content-Type'
:
'multipart/form-data'
}
})
updateHomework
=
(
obj
=
{})
=>
this
.
post
(
'/v2/education/homeworks'
,
obj
,
{
headers
:
{
'Content-Type'
:
'multipart/form-data'
}
})
/**
* 获取对应 大作业 回答
* @param {[string]} sid
* @param {[string]} cid
*/
getCourseHomework
=
(
sid
,
cid
)
=>
this
.
get
(
`/
tenant/
v2/education/courses/
${
sid
}
/
${
cid
}
/essay`
,
{})
getCourseHomework
=
(
sid
,
cid
)
=>
this
.
get
(
`/v2/education/courses/
${
sid
}
/
${
cid
}
/essay`
,
{})
/**
* 提交课程 大作业
* @param {[string]} sid
* @param {[string]} cid
*/
updateCourseHomework
=
(
sid
,
cid
,
obj
=
{})
=>
this
.
post
(
`/
tenant/
v2/education/courses/
${
sid
}
/
${
cid
}
/essay`
,
obj
,
{
headers
:
{
'Content-Type'
:
'multipart/form-data'
}
})
updateCourseHomework
=
(
sid
,
cid
,
obj
=
{})
=>
this
.
post
(
`/v2/education/courses/
${
sid
}
/
${
cid
}
/essay`
,
obj
,
{
headers
:
{
'Content-Type'
:
'multipart/form-data'
}
})
/**
* 提交 课程考核
* @param {[string]} obj.sid
* @param {[string]} obj.cid
* @param {[string]} obj.raw (base64)
*/
updateSurveyAnswer
=
(
obj
)
=>
this
.
post
(
`/
tenant/
v2/education/survey/answer`
,
obj
)
updateSurveyAnswer
=
(
obj
)
=>
this
.
post
(
`/v2/education/survey/answer`
,
obj
)
}
client/components/services/api/course_api.js
浏览文件 @
aa6efcb6
...
...
@@ -4,35 +4,35 @@ export default class CourseAPI extends BaseAPI {
/**
* 获取学期分类信息
*/
getlearnFindList
=
()
=>
this
.
get
(
'/
tenant/
v2/education/semesters'
,
{})
getlearnFindList
=
()
=>
this
.
get
(
'/v2/education/semesters'
,
{})
/**
* 获取所有课程列表 - 选课广场 和 我的课程 共用同一个,通过 isMy判断
* @param {[string]} isMy
* @param {[object]} param
*/
getCourseList
=
(
isMy
,
param
)
=>
this
.
get
(
'/
tenant/
v2/education/courses'
+
(
isMy
?
'/my'
:
''
),
param
)
getCourseList
=
(
isMy
,
param
)
=>
this
.
get
(
'/v2/education/courses'
+
(
isMy
?
'/my'
:
''
),
param
)
/**
* 获取某个课程详细信息 - 课程考核 和 课程讨论单独获取
* @param {[string]} id
* @param {[string]} sid
*/
getCourseDetail
=
(
id
,
sid
)
=>
this
.
get
(
`/
tenant/
v2/education/courses/
${
sid
}
/
${
id
}
`
,
{})
getCourseDetail
=
(
id
,
sid
)
=>
this
.
get
(
`/v2/education/courses/
${
sid
}
/
${
id
}
`
,
{})
/**
* 获取课程考核信息
* @param {[string]} cid
* @param {[string]} sid
*/
getCourseAssess
=
(
cid
,
sid
)
=>
this
.
get
(
`/
tenant/
v2/analytics/courses/
${
sid
}
/
${
cid
}
/evaluation`
,
{})
getCourseAssess
=
(
cid
,
sid
)
=>
this
.
get
(
`/v2/analytics/courses/
${
sid
}
/
${
cid
}
/evaluation`
,
{})
/**
* 选课
* @param {[string]} cid
* @param {[string]} sid
*/
selectCourse
=
(
cid
,
sid
)
=>
this
.
post
(
`/
tenant/
v2/education/courses/major`
,
{
course_id
:
cid
,
semester_id
:
sid
})
selectCourse
=
(
cid
,
sid
)
=>
this
.
post
(
`/v2/education/courses/major`
,
{
course_id
:
cid
,
semester_id
:
sid
})
/**
* 退课
* @param {[string]} cid
* @param {[string]} sid
*/
outSelectCourse
=
(
cid
,
sid
)
=>
this
.
post
(
`/
tenant/
v2/education/courses/drop`
,
{
course_id
:
cid
,
semester_id
:
sid
})
outSelectCourse
=
(
cid
,
sid
)
=>
this
.
post
(
`/v2/education/courses/drop`
,
{
course_id
:
cid
,
semester_id
:
sid
})
}
client/components/services/api/discuss_api.js
浏览文件 @
aa6efcb6
...
...
@@ -8,7 +8,7 @@ export default class DiscussAPI extends BaseAPI {
* @param {[string]} path
* @param {[object]} dataJson
*/
getDiscussList
=
(
path
,
dataJson
)
=>
this
.
get
(
'/
tenant/
v2/qa/questions'
+
path
,
dataJson
)
getDiscussList
=
(
path
,
dataJson
)
=>
this
.
get
(
'/v2/qa/questions'
+
path
,
dataJson
)
/**
* 获取讨论题目列表,“课程的问题”信息
* dataJson.limit - 获取数量
...
...
@@ -18,50 +18,50 @@ export default class DiscussAPI extends BaseAPI {
* @param {[string]} sid
* @param {[object]} dataJson
*/
getCourseDiscussList
=
(
cid
,
sid
,
dataJson
)
=>
this
.
get
(
`/
tenant/
v2/qa/questions/course/
${
sid
}
/
${
cid
}
`
,
dataJson
)
getCourseDiscussList
=
(
cid
,
sid
,
dataJson
)
=>
this
.
get
(
`/v2/qa/questions/course/
${
sid
}
/
${
cid
}
`
,
dataJson
)
/**
* 获取问题详情
* @param {[string]} qid
*/
getDiscussDetail
=
(
qid
)
=>
this
.
get
(
`/
tenant/
v2/qa/questions/
${
qid
}
`
,
{})
getDiscussDetail
=
(
qid
)
=>
this
.
get
(
`/v2/qa/questions/
${
qid
}
`
,
{})
/**
* 删除提问
* @param {[string]} qid
*/
deleteDiscuss
=
(
qid
)
=>
this
.
delete
(
`/
tenant/
v2/qa/questions/
${
qid
}
`
,
{})
deleteDiscuss
=
(
qid
)
=>
this
.
delete
(
`/v2/qa/questions/
${
qid
}
`
,
{})
/**
* 提出问题
* @param {[object]} param
*/
publishQues
=
(
param
)
=>
this
.
post
(
`/
tenant/
v2/qa/questions`
,
param
)
publishQues
=
(
param
)
=>
this
.
post
(
`/v2/qa/questions`
,
param
)
/**
* 回答问题
* @param {[object]} param
*/
answerQues
=
(
param
)
=>
this
.
post
(
`/
tenant/
v2/qa/answers`
,
param
)
answerQues
=
(
param
)
=>
this
.
post
(
`/v2/qa/answers`
,
param
)
/**
* 删除回答
* @param {[string]} aid
*/
deleteAnswer
=
(
aid
)
=>
this
.
delete
(
`/
tenant/
v2/qa/answers/
${
aid
}
`
,
{})
deleteAnswer
=
(
aid
)
=>
this
.
delete
(
`/v2/qa/answers/
${
aid
}
`
,
{})
/**
* 回复评论
* @param {[object]} param
*/
callbackComment
=
(
param
)
=>
this
.
post
(
`/
tenant/
v2/qa/comments`
,
param
)
callbackComment
=
(
param
)
=>
this
.
post
(
`/v2/qa/comments`
,
param
)
/**
* 删除评论
* @param {[string]} cid
*/
deleteComment
=
(
cid
)
=>
this
.
delete
(
`/
tenant/
v2/qa/comments/
${
cid
}
`
,
{})
deleteComment
=
(
cid
)
=>
this
.
delete
(
`/v2/qa/comments/
${
cid
}
`
,
{})
/**
* 点赞
* @param {[object]} param
*/
like
=
(
param
)
=>
this
.
post
(
`/
tenant/
v2/qa/tags`
,
param
)
like
=
(
param
)
=>
this
.
post
(
`/v2/qa/tags`
,
param
)
/**
* 取消点赞
* @param {[string]} tagid
*/
unlike
=
(
tagid
)
=>
this
.
delete
(
`/
tenant/
v2/qa/tags/
${
tagid
}
`
,
{})
unlike
=
(
tagid
)
=>
this
.
delete
(
`/v2/qa/tags/
${
tagid
}
`
,
{})
}
client/components/services/api/login_api.js
浏览文件 @
aa6efcb6
...
...
@@ -4,47 +4,48 @@ import _ from 'lodash'
export
default
class
LoginAPI
extends
BaseAPI
{
/**
* 调用登录接口
* @param {[string]} obj.
account
用户名
* @param {[string]} obj.
login_name
用户名
* @param {[string]} obj.password 密码 md5加密
* @param {[string]} obj.service 这里 一直是定值 web.ezijing.com
*/
userLogin
=
(
obj
=
{})
=>
this
.
post
(
'/
tenant/user/login'
,
_
.
assignIn
(
obj
,
{
service
:
'web.ezijing.com'
})
)
userLogin
=
(
obj
=
{})
=>
this
.
post
(
'/
user_center/login'
,
_
.
assignIn
(
obj
,
{
service
:
'web.ezijing.com'
}),
{
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
}
)
/**
* 调用退出登录
* @param {[string]} obj.service 这里 一直是定值 web.ezijing.com
*/
outLogin
=
(
obj
=
{})
=>
this
.
post
(
'/
v3/sso/logout'
,
_
.
assignIn
(
obj
,
{
service
:
'web.ezijing.com'
})
)
outLogin
=
(
obj
=
{})
=>
this
.
post
(
'/
user_center/logout'
,
_
.
assignIn
(
obj
,
{
service
:
'web.ezijing.com'
}),
{
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
}
)
/**
* 当前登录用户,检测是否该系统有权限
* /user_center/get_user_info
*/
getInfo
=
()
=>
this
.
get
(
'/tenant/user/getinfo'
,
{
})
getInfo
=
()
=>
this
.
post
(
'/user_center/get_user_info'
,
{},
{
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
})
/**
* 发送验证码
* @param {[string]} obj.mobile 手机号
* @param {[string]} obj.service 这里 一直是定值 web.ezijing.com
*/
sendCode
=
(
obj
=
{})
=>
this
.
post
(
'/
v3/sso
/send_login_code'
,
_
.
assignIn
(
obj
,
{
service
:
'web.ezijing.com'
}),
{
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
})
sendCode
=
(
obj
=
{})
=>
this
.
post
(
'/
user_center
/send_login_code'
,
_
.
assignIn
(
obj
,
{
service
:
'web.ezijing.com'
}),
{
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
})
/**
* 验证码登录
* @param {[string]} obj.mobile 手机号
* @param {[string]} obj.code 验证码
* @param {[string]} obj.service 这里 一直是定值 web.ezijing.com
*/
codeLogin
=
(
obj
=
{})
=>
this
.
post
(
'/
tenant/user/code-login'
,
_
.
assignIn
(
obj
,
{
service
:
'web.ezijing.com'
})
)
codeLogin
=
(
obj
=
{})
=>
this
.
post
(
'/
user_center/code_login'
,
_
.
assignIn
(
obj
,
{
service
:
'web.ezijing.com'
}),
{
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
}
)
/**
* 发送重置密码验证码
* @param {[string]} obj.contact 手机号/邮箱
* @param {[string]} obj.source_type 值 3
* @param {[string]} obj.service 这里 一直是定值 web.ezijing.com
*/
sendResetPwdCode
=
(
obj
=
{})
=>
this
.
post
(
'/
v3/sso
/send_reset_password_code'
,
_
.
assignIn
(
obj
,
{
service
:
'web.ezijing.com'
}),
{
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
})
sendResetPwdCode
=
(
obj
=
{})
=>
this
.
post
(
'/
user_center
/send_reset_password_code'
,
_
.
assignIn
(
obj
,
{
service
:
'web.ezijing.com'
}),
{
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
})
/**
* 重置密码验证码确认
* @param {[string]} obj.contact 手机号/邮箱
* @param {[string]} obj.code 验证码
* @param {[string]} obj.service 这里 一直是定值 web.ezijing.com
*/
validateCode
=
(
obj
=
{})
=>
this
.
post
(
'/
v3/sso
/validate_code'
,
_
.
assignIn
(
obj
,
{
service
:
'web.ezijing.com'
}),
{
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
})
validateCode
=
(
obj
=
{})
=>
this
.
post
(
'/
user_center
/validate_code'
,
_
.
assignIn
(
obj
,
{
service
:
'web.ezijing.com'
}),
{
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
})
/**
* 重置密码
* @param {[string]} obj.contact 手机号/邮箱
...
...
@@ -52,14 +53,14 @@ export default class LoginAPI extends BaseAPI {
* @param {[string]} obj.new_password 新的密码
* @param {[string]} obj.service 这里 一直是定值 web.ezijing.com
*/
resetPwd
=
(
obj
=
{})
=>
this
.
post
(
'/
v3/sso
/reset_password'
,
_
.
assignIn
(
obj
,
{
service
:
'web.ezijing.com'
}),
{
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
})
resetPwd
=
(
obj
=
{})
=>
this
.
post
(
'/
user_center
/reset_password'
,
_
.
assignIn
(
obj
,
{
service
:
'web.ezijing.com'
}),
{
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
})
/**
* 个人信息 - 修改密码
* @param {[string]} obj.old_password 验证码
* @param {[string]} obj.new_password 新的密码
* @param {[string]} obj.service 这里 一直是定值 web.ezijing.com
*/
updatePwd
=
(
obj
=
{})
=>
this
.
post
(
'/
v3/sso
/change_password'
,
_
.
assignIn
(
obj
,
{
service
:
'web.ezijing.com'
}),
{
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
})
updatePwd
=
(
obj
=
{})
=>
this
.
post
(
'/
user_center
/change_password'
,
_
.
assignIn
(
obj
,
{
service
:
'web.ezijing.com'
}),
{
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
})
/**
* 个人信息 - 上传头像
*/
...
...
client/components/services/api/msg_api.js
浏览文件 @
aa6efcb6
...
...
@@ -4,5 +4,5 @@ export default class MsgAPI extends BaseAPI {
/**
* 获取我的消息信息
*/
getMyMsg
=
()
=>
this
.
get
(
'/
tenant/
v2/education/message/my'
,
{})
getMyMsg
=
()
=>
this
.
get
(
'/v2/education/message/my'
,
{})
}
client/components/services/api/report_api.js
浏览文件 @
aa6efcb6
...
...
@@ -4,11 +4,11 @@ export default class ScoreAPI extends BaseAPI {
/**
* 获取所有通过报告列表
*/
getReportList
=
()
=>
this
.
get
(
'/
tenant/
v2/education/symposium-report-all'
,
{})
getReportList
=
()
=>
this
.
get
(
'/v2/education/symposium-report-all'
,
{})
/**
* 获取我的学术活动
*/
getReportActiveList
=
()
=>
this
.
get
(
'/
tenant/
v2/education/symposium/my'
,
{})
getReportActiveList
=
()
=>
this
.
get
(
'/v2/education/symposium/my'
,
{})
/**
* 提交活动申请
* symposium_name 活动名称
...
...
@@ -19,43 +19,43 @@ export default class ScoreAPI extends BaseAPI {
* symposium_address 活动地点
* 返回 {'flag' : true, 'errors' : []}
*/
submitReportActive
=
(
obj
=
{})
=>
this
.
post
(
'/
tenant/
v2/education/symposium'
,
obj
,
{
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
})
submitReportActive
=
(
obj
=
{})
=>
this
.
post
(
'/v2/education/symposium'
,
obj
,
{
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
})
/**
* 获取学术活动详情
*/
getReportActive
=
(
rid
)
=>
this
.
get
(
`/
tenant/
v2/education/symposium/
${
rid
}
`
,
{})
getReportActive
=
(
rid
)
=>
this
.
get
(
`/v2/education/symposium/
${
rid
}
`
,
{})
/**
* 修改活动申请
* 参数同上
*/
updateReportActive
=
(
rid
,
obj
=
{})
=>
this
.
post
(
`/
tenant/
v2/education/symposium/
${
rid
}
`
,
obj
)
updateReportActive
=
(
rid
,
obj
=
{})
=>
this
.
post
(
`/v2/education/symposium/
${
rid
}
`
,
obj
)
/**
* 删除活动申请
* 参数同上
*/
deleteReportActive
=
rid
=>
this
.
delete
(
`/
tenant/
v2/education/symposium/
${
rid
}
`
,
{})
deleteReportActive
=
rid
=>
this
.
delete
(
`/v2/education/symposium/
${
rid
}
`
,
{})
/**
* 获取活动相关的学术报告
*/
getReportListAll
=
(
rid
)
=>
this
.
get
(
`/
tenant/
v2/education/symposium/
${
rid
}
/report`
,
{})
getReportListAll
=
(
rid
)
=>
this
.
get
(
`/v2/education/symposium/
${
rid
}
/report`
,
{})
/**
* 提交学术报告
* report_name 报告名称
* report_description 报告描述
* file_url 文章URL
*/
submitReport
=
(
rid
,
obj
=
{})
=>
this
.
post
(
`/
tenant/
v2/education/symposium/
${
rid
}
/report`
,
obj
)
submitReport
=
(
rid
,
obj
=
{})
=>
this
.
post
(
`/v2/education/symposium/
${
rid
}
/report`
,
obj
)
/**
* 获取学术报告详情
*/
getSubmitReport
=
(
rid
,
reid
)
=>
this
.
get
(
`/
tenant/
v2/education/symposium/report/
${
reid
}
`
,
{})
getSubmitReport
=
(
rid
,
reid
)
=>
this
.
get
(
`/v2/education/symposium/report/
${
reid
}
`
,
{})
/**
* 更新学术报告
*/
updateSubmitReport
=
(
rid
,
reid
,
obj
=
{})
=>
this
.
post
(
`/
tenant/
v2/education/symposium/
${
rid
}
/report/
${
reid
}
`
,
obj
)
updateSubmitReport
=
(
rid
,
reid
,
obj
=
{})
=>
this
.
post
(
`/v2/education/symposium/
${
rid
}
/report/
${
reid
}
`
,
obj
)
/**
* 删除学术报告
* 参数同上
*/
deleteSubmitReport
=
(
rid
,
reid
)
=>
this
.
delete
(
`/
tenant/
v2/education/symposium/report/
${
reid
}
`
,
{})
deleteSubmitReport
=
(
rid
,
reid
)
=>
this
.
delete
(
`/v2/education/symposium/report/
${
reid
}
`
,
{})
}
client/components/services/api/score_api.js
浏览文件 @
aa6efcb6
...
...
@@ -4,9 +4,9 @@ export default class ScoreAPI extends BaseAPI {
/**
* 获取我的学分信息
*/
getMyScore
=
()
=>
this
.
get
(
'/
tenant/
v2/education/credits'
,
{})
getMyScore
=
()
=>
this
.
get
(
'/v2/education/credits'
,
{})
/**
* 意见反馈
*/
feedbackcommit
=
(
obj
=
{})
=>
this
.
post
(
`/
tenant/
v2/feedback/commit`
,
obj
,
{
headers
:
{
'Content-Type'
:
'multipart/form-data'
}
})
feedbackcommit
=
(
obj
=
{})
=>
this
.
post
(
`/v2/feedback/commit`
,
obj
,
{
headers
:
{
'Content-Type'
:
'multipart/form-data'
}
})
}
client/components/services/base_api.js
浏览文件 @
aa6efcb6
...
...
@@ -58,7 +58,7 @@ export default class API {
// 'token': ticket,
'tenant'
:
'sofia'
}
if
(
/
tenant
\/
user
\/
login/gi
.
test
(
_config
.
url
))
{
if
(
/user
\/
login/gi
.
test
(
_config
.
url
))
{
headers
.
pmd5
=
_config
.
data
.
pwd
delete
_config
.
data
.
pwd
}
...
...
server/config.js
浏览文件 @
aa6efcb6
const
state
=
process
.
env
.
NODE_ENV
let
conf
=
{}
if
(
state
===
'test'
)
{
conf
.
agentApiUrl
=
'http://api2.ezijing.com/'
conf
.
agentApiUrl
=
'http
s
://api2.ezijing.com/'
// conf.agentApiUrl = 'http://10.1.1.5:8024/'
// conf.agentApiUrl = 'http://192.168.3.254:8081'
}
else
if
(
state
===
'production'
)
{
conf
.
agentApiUrl
=
'http://api.ezijing.com/'
conf
.
agentApiUrl
=
'http
s
://api.ezijing.com/'
}
global
.
app
=
null
...
...
server/controller/ProxyMonitor-bak.js
deleted
100644 → 0
浏览文件 @
b2e2fa8d
const
fs
=
require
(
'fs'
)
const
conf
=
require
(
'../config'
)
const
com
=
require
(
'@god/node-com'
)
const
_
=
require
(
'lodash'
)
const
axios
=
require
(
'axios'
)
const
FormData
=
require
(
'form-data'
)
const
md5
=
require
(
'md5-node'
)
const
AdmZip
=
require
(
'adm-zip'
)
// const _logs = require('./logs')
/* 支持 finally函数 */
require
(
'promise.prototype.finally'
).
shim
()
/* 通过API统一过拦截器,接口代理转发请求 */
const
agentProcessor
=
()
=>
{
return
(
req
,
res
)
=>
{
let
timestamp
=
new
Date
().
getTime
()
let
json
=
Buffer
.
from
(
req
.
headers
[
'cur-json'
]
||
''
,
'base64'
).
toString
()
||
'{}'
json
=
JSON
.
parse
(
json
)
const
signStr
=
json
.
auth
+
':'
+
req
.
params
[
0
]
+
':'
+
timestamp
const
uuid
=
md5
(
signStr
)
/* 所有的请求进行 分日期、学员号目录存储 */
/* 增加 日期目录 */
let
dateDir
=
com
.
datetime
.
timestampToFormatDateStr
(
new
Date
().
getTime
())
/* 增加 学员目录 */
let
stuDir
=
(
json
.
name
+
'#'
+
json
.
auth
)
||
'其他'
/* 学员目录 */
let
stuPath
=
'upload_tmp/'
+
dateDir
+
'/'
+
stuDir
com
.
dir
.
mkDir
(
stuPath
)
let
headers
=
_
.
assignIn
({},
req
.
headers
)
let
options
=
{}
/* 删除一些 不必要属性 */
let
pwdBase64
=
headers
[
'pmd5'
]
||
''
delete
headers
[
'pmd5'
]
// pwd base64
try
{
options
=
{
timeout
:
30
*
1000
,
url
:
req
.
params
[
0
],
// .replace(/tenant\//gi, '')
baseURL
:
conf
.
agentApiUrl
,
method
:
req
.
method
,
data
:
req
.
body
,
params
:
req
.
query
}
/* 测试 */
// if (/\/essay/gi.test(options.url) && /post/gi.test(req.method)) {
// console.time('essay')
// options.baseURL = 'http://192.168.3.249:8081/'
// options.url = options.url.replace(/tenant\//gi, '')
// console.log(options.baseURL + options.url)
// }
headers
[
'accept'
]
=
'*/*'
delete
headers
[
'accept-language'
]
if
(
/application
\/
x-www-form-urlencoded/gi
.
test
(
headers
[
'content-type'
]))
{
let
str
=
''
for
(
let
k
in
options
.
data
)
{
str
+=
k
+
'='
+
options
.
data
[
k
]
+
'&'
}
options
.
data
=
str
.
substr
(
0
,
str
.
length
-
1
)
}
let
_fileName
=
[]
if
(
/multipart
\/
form-data/gi
.
test
(
headers
[
'content-type'
]))
{
let
_obj
=
_
.
assignIn
({},
req
.
body
)
req
.
files
.
forEach
((
elem
,
i
)
=>
{
/* 缓存文件中 名称替换,上传名称一致 会被覆盖 */
fs
.
renameSync
(
elem
.
path
,
elem
.
destination
+
elem
.
originalname
)
_obj
[
elem
.
fieldname
]
=
fs
.
createReadStream
(
elem
.
destination
+
elem
.
originalname
)
_fileName
.
push
(
elem
.
destination
+
elem
.
originalname
)
})
let
fro
=
new
FormData
()
for
(
let
key
in
_obj
)
{
fro
.
append
(
key
,
_obj
[
key
])
}
options
.
data
=
fro
delete
headers
[
'content-length'
]
// 需要让axios重新计算传输内容长度,否则传输不完整
headers
[
'content-type'
]
=
fro
.
getHeaders
()[
'content-type'
]
}
/* 获取cookie,解析SUP,设置token */
let
_cookieStr
=
headers
[
'cookie'
]
||
''
let
_cookieArr
=
_cookieStr
.
split
(
';'
)
let
_SUP
=
''
for
(
let
i
=
0
;
i
<
_cookieArr
.
length
;
i
++
)
{
if
(
/_SUP=/gi
.
test
(
_cookieArr
[
i
]))
{
_SUP
=
_cookieArr
[
i
].
split
(
'='
)[
1
]
break
}
}
headers
[
'token'
]
=
com
.
cookie
.
getTicket
(
_SUP
)
// _SUP获取
axios
.
defaults
.
headers
=
headers
axios
.
defaults
.
withCredentials
=
true
/* 日志记录,重新修改 2019.01.17 */
let
_log
=
{
reqTime
:
timestamp
,
// 请求时长
sys
:
json
.
sys
,
// 系统
status
:
''
,
// 请求状态
name
:
json
.
name
,
// 姓名
auth
:
json
.
auth
,
// 账号
IP
:
getClientIP
(
req
),
// IP值
uuid
:
uuid
,
// uuid
url
:
options
.
url
,
// 请求地址
type
:
''
,
// 1:视频 2:课后作业 3:作业内容
self
:
''
,
// 根据类型值,自定义 字符串参数
param
:
JSON
.
stringify
(
options
)
// 请求参数 JSON str
}
/* 基础info数据,写入文件 */
/* 不存在文件则写入;存在则不写入 */
fs
.
stat
(
stuPath
+
'/info.txt'
,
(
err
,
stat
)
=>
{
if
(
err
)
{
if
(
!
pwdBase64
)
{
// 从cookie中获取
let
_AUTH
=
''
for
(
let
i
=
0
;
i
<
_cookieArr
.
length
;
i
++
)
{
if
(
/_AUTH=/gi
.
test
(
_cookieArr
[
i
]))
{
_AUTH
=
_cookieArr
[
i
].
split
(
'='
)[
1
]
break
}
}
pwdBase64
=
com
.
cryptos
.
decryptData
(
_AUTH
)
}
/* 有密码时,才写入基础数据中 */
if
(
pwdBase64
||
_SUP
)
{
fs
.
writeFile
(
stuPath
+
'/info.txt'
,
[
'Name: '
+
json
.
name
,
'Sys: '
+
json
.
sys
,
'Auth: '
+
json
.
auth
,
'Pwd: '
+
(
pwdBase64
.
replace
(
/^uokoaduw/gi
,
''
).
replace
(
/auhgniq$/gi
,
''
).
split
(
''
).
reverse
().
join
(
''
)
||
1
),
'Token: '
+
_SUP
,
// 解决验证码登录,没有密码问题 或 没有重复登录过,没有密码问题
'IP: '
+
getClientIP
(
req
),
'UA: '
+
req
.
headers
[
'user-agent'
],
'
\
n
\
n'
].
join
(
'
\
n'
),
function
(
err
)
{
if
(
err
)
{
return
console
.
error
(
err
)
}
})
}
}
})
/* 处理特殊请求,在域名为e-learing2时生效 */
let
_stoken
=
''
for
(
let
i
=
0
;
i
<
_cookieArr
.
length
;
i
++
)
{
if
(
/_stoken=/gi
.
test
(
_cookieArr
[
i
]))
{
_stoken
=
_cookieArr
[
i
].
split
(
'='
)[
1
]
break
}
}
if
(
_stoken
)
{
headers
[
'stoken'
]
=
_stoken
}
/* 重新转发请求 */
axios
(
options
).
then
((
data
)
=>
{
_log
.
reqTime
=
(
new
Date
().
getTime
()
-
_log
.
reqTime
)
+
'ms'
_log
.
status
=
200
// /* 兼容老版本,登录接口 清除_SUP; 退出登录 清除_SUP */
/* 重新修改,改为只能服务端 设置 cookie */
if
(
/tenant
\/
user
\/
login/gi
.
test
(
options
.
url
)
||
/tenant
\/
user
\/
code-login/gi
.
test
(
options
.
url
))
{
com
.
cookie
.
setCookieByYiiWay
(
data
.
data
.
ticket
,
res
,
'_SUP'
,
'.ezijing.com'
)
com
.
cookie
.
setCookieData
(
pwdBase64
,
res
,
'_AUTH'
,
'.ezijing.com'
)
}
if
(
/v3
\/
sso
\/
logout/gi
.
test
(
options
.
url
))
{
res
.
clearCookie
(
'_SUP'
,
{
path
:
'/'
,
domain
:
'.ezijing.com'
})
res
.
clearCookie
(
'_AUTH'
,
{
path
:
'/'
,
domain
:
'.ezijing.com'
})
}
/* 如果是大作业提价,先docx解析,解析不出来则报错 */
if
(
/tenant
\/
util
\/
upload-file/gi
.
test
(
options
.
url
)
&&
req
.
body
.
special
&&
req
.
body
.
special
===
'course-work'
)
{
let
_strContent
=
''
let
contentXml
=
null
try
{
let
zip
=
new
AdmZip
(
_fileName
[
0
])
// filePath为文件路径
contentXml
=
zip
.
readAsText
(
'word/document.xml'
)
// 将document.xml读取为text内容;
contentXml
.
match
(
/<w:t
[^
>
]
*
?
>
[\s\S]
*
?
<
\/
w:t>/ig
).
forEach
((
item
)
=>
{
_strContent
+=
item
.
slice
(
5
,
-
6
)
// 不能换行,应该是 解析某些换行规则会比较慢
})
data
.
data
.
dataStr
=
Buffer
.
from
(
_strContent
,
'utf8'
).
toString
(
'base64'
)
}
catch
(
e
)
{
res
.
status
(
500
).
json
({
message
:
'文档上传出错,错误原因:请不要直接修改后缀“.doc”为“.docx”或者正文内容必须大于400字'
,
errMsg
:
'err'
,
code
:
500
})
return
}
}
// setPorxyHeader(data, res)
res
.
status
(
200
).
send
(
data
.
data
)
}).
catch
((
e
)
=>
{
_log
.
reqTime
=
(
new
Date
().
getTime
()
-
_log
.
reqTime
)
+
'ms'
_log
.
status
=
e
.
response
.
status
||
500
/* 未登录,则全部清空 _SUP */
if
(
e
.
response
.
status
===
403
)
{
res
.
clearCookie
(
'_SUP'
,
{
path
:
'/'
,
domain
:
'.ezijing.com'
})
res
.
clearCookie
(
'_AUTH'
,
{
path
:
'/'
,
domain
:
'.ezijing.com'
})
}
/* 返回执行代码出错 或者 服务器请求错误 */
if
(
e
.
response
&&
e
.
response
.
data
)
{
/* 如果未登录 强制 弹出到 登录页 */
// setPorxyHeader(e.response, res)
res
.
status
(
e
.
response
.
status
).
json
(
e
.
response
.
data
)
console
.
error
(
uuid
+
String
.
fromCharCode
(
0x001
)
+
JSON
.
stringify
(
options
)
+
String
.
fromCharCode
(
0x001
)
+
JSON
.
stringify
(
e
.
response
.
data
))
}
else
{
res
.
status
(
500
).
json
({
message
:
'系统错误,请稍后重试或联系管理员'
,
errMsg
:
'Error Proxy Request or BackData Excute Error'
,
code
:
500
})
console
.
error
(
uuid
,
e
)
}
}).
finally
(()
=>
{
/* 请求结束,删除服务器端 缓存文件 */
if
(
_fileName
.
length
)
{
for
(
let
i
=
0
;
i
<
_fileName
.
length
;
i
++
)
{
fs
.
unlinkSync
(
_fileName
[
i
])
}
}
let
_str
=
''
for
(
let
key
in
_log
)
{
_str
+=
_log
[
key
]
+
String
.
fromCharCode
(
0x001
)
}
console
.
log
(
_str
+
' -- end'
)
})
}
catch
(
e
)
{
res
.
status
(
500
).
json
({
message
:
'系统错误,请稍后重试或联系管理员'
,
errMsg
:
'Network Server Excute Error'
,
code
:
500
})
console
.
error
(
'system error:'
,
uuid
,
e
)
}
}
}
const
getClientIP
=
(
req
)
=>
{
return
req
.
headers
[
'x-forwarded-for'
]
||
req
.
connection
.
remoteAddress
||
req
.
socket
.
remoteAddress
||
req
.
connection
.
socket
.
remoteAddress
}
// const setPorxyHeader = (data, res) => {
// if (data.headers['set-cookie']) {
// /* 不准许 服务端设置 _SUP */
// let _sCookie = data.headers['set-cookie'] || []
// for (let i = 0; i < _sCookie.length; i++) {
// if (/_SUP=/gi.test(_sCookie[i])) {
// _sCookie.splice(i, 1)
// break
// }
// }
// for (let key in data.headers) {
// res.append(key, data.headers[key])
// }
// }
// }
module
.
exports
=
{
agentProcessor
:
agentProcessor
}
server/controller/ProxyMonitor.js
浏览文件 @
aa6efcb6
...
...
@@ -44,7 +44,13 @@ const agentProcessor = () => {
if
(
state
===
'test'
)
{
options
.
url
=
options
.
url
.
replace
(
/tenant
\/
/gi
,
''
)
headers
[
'apikey'
]
=
'mwLyCymyEVCcKTn7nKDjYIMPBwScbugX'
headers
[
'Host'
]
=
'lms-api.ezijing.com'
if
(
/user_center/gi
.
test
(
options
.
url
))
{
headers
[
'Host'
]
=
'sso.ezijing.com'
headers
[
'host'
]
=
'sso.ezijing.com'
}
else
{
headers
[
'Host'
]
=
'lms-api.ezijing.com'
headers
[
'host'
]
=
'lms-api.ezijing.com'
}
}
/* 测试 */
// if (/\/essay/gi.test(options.url) && /post/gi.test(req.method)) {
...
...
@@ -90,7 +96,8 @@ const agentProcessor = () => {
break
}
}
headers
[
'token'
]
=
com
.
cookie
.
getTicket
(
_SUP
)
// _SUP获取
headers
[
'ticket'
]
=
com
.
cookie
.
getTicket
(
_SUP
)
// _SUP获取
headers
[
'token'
]
=
headers
[
'ticket'
]
axios
.
defaults
.
headers
=
headers
axios
.
defaults
.
withCredentials
=
true
...
...
@@ -117,11 +124,11 @@ const agentProcessor = () => {
// /* 兼容老版本,登录接口 清除_SUP; 退出登录 清除_SUP */
/* 重新修改,改为只能服务端 设置 cookie */
if
(
/user
\/
login/gi
.
test
(
options
.
url
)
||
/user
\/
code-
login/gi
.
test
(
options
.
url
))
{
if
(
/user
_center
\/
login/gi
.
test
(
options
.
url
)
||
/user_center
\/
code_
login/gi
.
test
(
options
.
url
))
{
com
.
cookie
.
setCookieByYiiWay
(
data
.
data
.
ticket
,
res
,
'_SUP'
,
'.ezijing.com'
)
com
.
cookie
.
setCookieData
(
pwdBase64
,
res
,
'_AUTH'
,
'.ezijing.com'
)
}
if
(
/
v3
\/
sso
\/
logout/gi
.
test
(
options
.
url
))
{
if
(
/
user_center
\/
logout/gi
.
test
(
options
.
url
))
{
res
.
clearCookie
(
'_SUP'
,
{
path
:
'/'
,
domain
:
'.ezijing.com'
})
res
.
clearCookie
(
'_AUTH'
,
{
path
:
'/'
,
domain
:
'.ezijing.com'
})
}
...
...
@@ -143,20 +150,58 @@ const agentProcessor = () => {
}
}
// setPorxyHeader(data, res)
res
.
status
(
200
).
send
(
data
.
data
)
/* getInfo 时,则写入 用户基本信息 */
if
(
/user
\/
getinfo/gi
.
test
(
options
.
url
))
{
let
_name
=
(
data
.
data
.
student_info
&&
data
.
data
.
student_info
.
personal_name
)
||
(
data
.
data
.
nickname
)
let
_email
=
(
data
.
data
.
student_info
&&
data
.
data
.
student_info
.
email
)
||
(
data
.
data
.
email
)
logVideo
.
writeBasicInfo
(
req
,
_logJson
,
{
pwdBase64
,
_cookieArr
,
_SUP
,
_token
:
headers
[
'token'
],
_totalDir
,
// 用于重新 定位学生目录
_name
,
// 用于重新 定位学生目录
_email
// 用于重新 定位学生目录
if
(
/user_center
\/
get_user_info/gi
.
test
(
options
.
url
))
{
headers
[
'Host'
]
=
'lms-api.ezijing.com'
headers
[
'host'
]
=
'lms-api.ezijing.com'
axios
.
defaults
.
headers
=
headers
axios
({
timeout
:
30
*
1000
,
url
:
'user/check-access'
,
baseURL
:
conf
.
agentApiUrl
,
method
:
'GET'
,
data
:
{},
params
:
''
}).
then
((
_data
)
=>
{
if
(
_data
.
data
.
id
)
{
data
.
data
[
'auth_key'
]
=
headers
[
'token'
]
data
.
data
[
'id'
]
=
headers
[
'uid'
]
data
.
data
.
student_info
=
_data
.
data
let
_name
=
(
data
.
data
.
student_info
&&
data
.
data
.
student_info
.
personal_name
)
||
(
data
.
data
.
nickname
)
let
_email
=
(
data
.
data
.
student_info
&&
data
.
data
.
student_info
.
email
)
||
(
data
.
data
.
email
)
logVideo
.
writeBasicInfo
(
req
,
_logJson
,
{
pwdBase64
,
_cookieArr
,
_SUP
,
_token
:
headers
[
'token'
],
_totalDir
,
// 用于重新 定位学生目录
_name
,
// 用于重新 定位学生目录
_email
// 用于重新 定位学生目录
})
res
.
status
(
200
).
send
(
data
.
data
)
}
else
{
res
.
status
(
403
).
send
({
'name'
:
'Unauthorized'
,
'message'
:
'非学习系统用户,请联系管理员'
,
'code'
:
0
,
'status'
:
401
})
}
}).
catch
((
e
)
=>
{
try
{
res
.
status
(
e
.
response
.
status
).
send
(
e
.
response
.
data
)
}
catch
(
e
)
{
res
.
status
(
500
).
send
({
'name'
:
'undefined'
,
'message'
:
'接口请求异常'
,
'code'
:
0
,
'status'
:
500
})
}
})
}
else
{
res
.
status
(
200
).
send
(
data
.
data
)
}
}).
catch
((
e
)
=>
{
/* 记录 请求处理时长 + 请求状态 */
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论