Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
P
project-online-old
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
project-online-old
Commits
a1b41e2a
提交
a1b41e2a
authored
1月 26, 2025
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: update
上级
bd1671bc
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
20 个修改的文件
包含
275 行增加
和
1441 行删除
+275
-1441
article.js
src/api/article.js
+19
-22
countdown.vue
src/components/countdown.vue
+61
-0
header.vue
src/components/layout/header.vue
+2
-1
register.vue
src/pages/account/register.vue
+0
-152
queryCard.vue
src/pages/home/queryCard.vue
+3
-3
presence.vue
src/pages/product/components/presence.vue
+2
-2
buy.vue
src/pages/service/components/buy.vue
+0
-344
index.vue
src/pages/service/index.vue
+0
-194
data.js
src/pages/teachers/data.js
+0
-0
index.vue
src/pages/teachers/index.vue
+0
-333
listItem.vue
src/pages/train/components/listItem.vue
+1
-53
pay.vue
src/pages/train/components/pay.vue
+37
-45
search.vue
src/pages/train/components/search.vue
+0
-43
data.js
src/pages/train/data.js
+0
-0
detail.vue
src/pages/train/detail.vue
+6
-31
form.vue
src/pages/train/form.vue
+0
-0
form2.vue
src/pages/train/form2.vue
+0
-210
index.vue
src/pages/train/index.vue
+0
-0
list.vue
src/pages/train/list.vue
+142
-0
index.js
src/router/index.js
+2
-8
没有找到文件。
src/api/article.js
浏览文件 @
a1b41e2a
...
...
@@ -12,37 +12,37 @@ export function getArticle(params) {
export
function
getArticleDetail
(
id
)
{
return
httpRequest
.
get
(
`/api/microservices/api/article/
${
id
}
/info`
)
}
export
function
formCommit
(
data
)
{
return
httpRequest
.
post
(
'/api/microservices/api/v3/apply/teacher-form'
,
data
)
}
// 获取轮播
export
function
getBanner
(
params
)
{
return
httpRequest
.
get
(
'/api/microservices/api/carousel/list'
,
{
params
})
}
// 发送验证码
export
function
sendC
heckedC
ode
(
data
)
{
export
function
sendCode
(
data
)
{
return
httpRequest
.
post
(
'/api/usercenter/user/send-code'
,
data
)
}
// 注册
export
function
register
(
data
)
{
return
httpRequest
.
post
(
'/api/usercenter/user/register'
,
data
)
}
// 注册
export
function
register
2
(
data
)
{
// 注册
并登录
export
function
register
AndLogin
(
data
)
{
return
httpRequest
.
post
(
'/api/usercenter/user/register-and-login-by-mobile'
,
data
)
}
// 获取用户信息
export
function
getUser
Info
()
{
export
function
getUser
()
{
return
httpRequest
.
get
(
'/api/passport/account/get-user-info'
)
}
//
表单回显
export
const
getFormDetail
=
(
params
)
=>
{
return
httpRequest
.
get
(
'/api/microservices/api/v3/apply/teacher-form-detail'
,
{
params
}
)
//
提交报名信息
export
function
submitForm
(
data
)
{
return
httpRequest
.
post
(
'/api/microservices/api/v3/apply/student-form'
,
data
)
}
// 下单
export
function
getOrder
(
data
)
{
return
httpRequest
.
post
(
'/api/microservices/api/v3/apply/unified-order'
,
data
)
// 获取报名信息
export
function
getFormDetail
(
params
)
{
return
httpRequest
.
get
(
'/api/microservices/api/v3/apply/student-form-detail'
,
{
params
})
}
// 创建订单
export
function
createOrder
(
data
)
{
return
httpRequest
.
post
(
'/api/microservices/api/v3/apply/student-unified-order'
,
data
)
}
// 查看订单状态
export
function
checkPay
(
id
)
{
...
...
@@ -50,20 +50,17 @@ export function checkPay(id) {
}
// 支付完成通知
export
function
payEnd
(
data
)
{
return
httpRequest
.
post
(
'/api/microservices/api/v3/apply/pay-end'
,
data
)
return
httpRequest
.
post
(
'/api/microservices/api/v3/apply/
student-
pay-end'
,
data
)
}
// 更新用户信息
export
function
updateUser
Info
(
data
)
{
export
function
updateUser
(
data
)
{
return
httpRequest
.
post
(
'/api/usercenter/user/update-user'
,
data
)
}
// 获取证书
export
function
getCard
(
params
)
{
export
function
getC
ertC
ard
(
params
)
{
return
httpRequest
.
get
(
'/api/cert/api/v1/cert/detail'
,
{
params
})
}
/**
* 提交留咨信息
*/
export
function
postNes
(
data
)
{
// 提交留咨信息
export
function
submitApplicationForm
(
data
)
{
return
httpRequest
.
post
(
'/api/enrollment/v1.0/applications'
,
data
)
}
src/components/countdown.vue
0 → 100644
浏览文件 @
a1b41e2a
<
template
>
<el-button
v-bind=
"$attrs"
:disabled=
"currentDisabled"
@
click=
"start"
>
{{
currentValue
}}
</el-button>
</
template
>
<
script
>
export
default
{
name
:
'Countdown'
,
props
:
{
step
:
{
type
:
Number
,
default
:
1000
},
disabled
:
{
type
:
Boolean
,
default
:
false
},
seconds
:
{
type
:
Number
,
default
:
60
},
defaultValue
:
{
type
:
String
,
default
:
'获取验证码'
},
},
data
()
{
return
{
currentDisabled
:
false
,
currentSeconds
:
0
,
timer
:
null
,
}
},
watch
:
{
disabled
:
{
immediate
:
true
,
handler
(
value
)
{
this
.
currentDisabled
=
value
},
},
},
computed
:
{
currentValue
()
{
const
longTime
=
this
.
seconds
-
this
.
currentSeconds
return
longTime
<
this
.
seconds
?
`
${
longTime
}
秒后重发`
:
this
.
defaultValue
},
},
methods
:
{
genTimer
()
{
this
.
clearTimer
()
this
.
timer
=
setInterval
(()
=>
{
this
.
currentSeconds
++
if
(
this
.
currentSeconds
===
this
.
seconds
)
{
this
.
stop
()
}
},
this
.
step
)
},
clearTimer
()
{
this
.
timer
&&
clearInterval
(
this
.
timer
)
},
start
()
{
this
.
currentDisabled
=
true
this
.
genTimer
()
this
.
$emit
(
'start'
)
},
stop
()
{
this
.
clearTimer
()
this
.
currentSeconds
=
0
this
.
currentDisabled
=
false
this
.
$emit
(
'stop'
)
},
},
}
</
script
>
src/components/layout/header.vue
浏览文件 @
a1b41e2a
...
...
@@ -13,6 +13,7 @@
<template
v-if=
"Object.values(user).length"
>
<div
class=
"login-name"
>
<span
class=
"name"
>
{{
user
.
realname
||
user
.
username
}}
</span>
<span
@
click=
"handleLogout"
>
退出
</span>
</div>
</
template
>
...
...
@@ -45,7 +46,7 @@ export default {
{
name
:
'首页'
,
path
:
'/index'
},
{
name
:
'通知公告'
,
path
:
'/news'
},
{
name
:
'商务数据分析技术-智能数据分析与实战应用'
,
path
:
'/product'
},
{
name
:
'技能培训'
,
path
:
'/t
eacher
'
},
{
name
:
'技能培训'
,
path
:
'/t
rain
'
},
// { name: '教科研服务', path: '/service' },
{
name
:
'认证中心'
,
path
:
'/attestation'
},
],
...
...
src/pages/account/register.vue
deleted
100644 → 0
浏览文件 @
bd1671bc
<
template
>
<div
class=
"reg-form-box"
>
<el-form
:model=
"ruleForm"
:rules=
"rules"
ref=
"ruleForm"
label-width=
"100px"
class=
"demo-ruleForm forms"
>
<el-form-item
label=
"学校"
prop=
"region"
>
<el-select
v-model=
"ruleForm.region"
placeholder=
"请选择学校"
class=
"width100"
>
<el-option
label=
"学校一"
value=
"shanghai"
></el-option>
<el-option
label=
"学校二"
value=
"beijing"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"姓名"
prop=
"name"
>
<el-input
v-model=
"ruleForm.name"
placeholder=
"请输入您的姓名"
></el-input>
</el-form-item>
<el-form-item
label=
"手机号"
prop=
"phone"
>
<el-input
v-model=
"ruleForm.phone"
placeholder=
"请输入您的手机号"
></el-input>
</el-form-item>
<el-form-item
label=
"验证码"
prop=
"code"
>
<el-input
v-model=
"ruleForm.phone"
placeholder=
"请输入您的手机号"
></el-input>
</el-form-item>
<el-form-item
label=
"身份证号"
prop=
"codeId"
>
<el-input
v-model=
"ruleForm.codeId"
placeholder=
"请输入您的身份证号"
></el-input>
</el-form-item>
<el-form-item
label=
"密码"
prop=
"pass"
>
<el-input
type=
"password"
v-model=
"ruleForm.pass"
placeholder=
"请输入您的密码"
></el-input>
</el-form-item>
<el-form-item
label=
"确认密码"
prop=
"checkPass"
>
<el-input
type=
"password"
v-model=
"ruleForm.checkPass"
placeholder=
"请输入您的密码"
></el-input>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"submitForm('ruleForm')"
class=
"sub-btn"
>
立即注册
</el-button>
<!--
<el-button
@
click=
"resetForm('ruleForm')"
>
重置
</el-button>
-->
</el-form-item>
</el-form>
</div>
</
template
>
<
script
>
export
default
{
data
()
{
const
checkPhone
=
(
rule
,
value
,
callback
)
=>
{
const
reg
=
/^
(
13
[
0-9
]
|14
[
01456879
]
|15
[
0-3,5-9
]
|16
[
2567
]
|17
[
0-8
]
|18
[
0-9
]
|19
[
0-3,5-9
])\d{8}
$/
if
(
!
reg
.
test
(
value
))
{
return
callback
(
new
Error
())
}
}
const
checkCodeId
=
(
rule
,
value
,
callback
)
=>
{
const
reg
=
/
(
^
\d{15}
$
)
|
(
^
\d{18}
$
)
|
(
^
\d{17}(\d
|X|x
)
$
)
/
if
(
!
reg
.
test
(
value
))
{
return
callback
(
new
Error
())
}
}
const
validatePass
=
(
rule
,
value
,
callback
)
=>
{
if
(
value
===
''
)
{
callback
(
new
Error
(
'请输入密码!'
))
}
else
{
if
(
this
.
ruleForm
.
checkPass
!==
''
)
{
this
.
$refs
.
ruleForm
.
validateField
(
'checkPass'
)
}
callback
()
}
}
const
validatePass2
=
(
rule
,
value
,
callback
)
=>
{
if
(
value
===
''
)
{
callback
(
new
Error
(
'请再次输入密码'
))
}
else
if
(
value
!==
this
.
ruleForm
.
pass
)
{
callback
(
new
Error
(
'两次输入密码不一致!'
))
}
else
{
callback
()
}
}
return
{
ruleForm
:
{
name
:
''
,
region
:
''
,
phone
:
''
,
codeId
:
''
,
delivery
:
false
,
type
:
[],
checkPass
:
''
,
pass
:
''
,
code
:
''
},
rules
:
{
name
:
[{
required
:
true
,
message
:
'请输入姓名'
,
trigger
:
'blur'
}],
region
:
[{
required
:
true
,
message
:
'请选择学校'
,
trigger
:
'change'
}],
phone
:
[
{
required
:
true
,
message
:
'请输入手机号'
,
trigger
:
'blur'
},
{
required
:
true
,
message
:
'手机号不正确'
,
validator
:
checkPhone
,
trigger
:
'blur'
}
],
code
:
[
{
required
:
true
,
message
:
'请输入验证码'
,
trigger
:
'blur'
},
{
validator
:
validatePass
,
trigger
:
'blur'
}
],
codeId
:
[
{
required
:
true
,
message
:
'请输入身份证号'
,
trigger
:
'blur'
},
{
required
:
true
,
message
:
'身份证号不正确'
,
validator
:
checkCodeId
,
trigger
:
'blur'
}
],
pass
:
[
{
required
:
true
,
message
:
'请输入密码'
,
trigger
:
'blur'
},
{
validator
:
validatePass
,
trigger
:
'blur'
}
],
checkPass
:
[
{
required
:
true
,
message
:
'请输入密码'
,
trigger
:
'blur'
},
{
validator
:
validatePass2
,
trigger
:
'blur'
}
]
}
}
},
methods
:
{
isRules
(
n
)
{
console
.
log
(
n
)
},
submitForm
(
formName
)
{
this
.
$refs
[
formName
].
validate
(
valid
=>
{
if
(
valid
)
{
alert
(
'submit!'
)
}
else
{
console
.
log
(
'error submit!!'
)
return
false
}
})
},
resetForm
(
formName
)
{
this
.
$refs
[
formName
].
resetFields
()
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.reg-form-box
{
width
:
380px
;
margin
:
0
auto
;
padding
:
24px
0
;
.width100
{
width
:
100%
;
}
}
::v-deep
{
.forms
{
i
{
font-size
:
20px
;
}
input
{
border-radius
:
4px
;
}
}
}
.sub-btn
{
width
:
270px
;
height
:
40px
;
background
:
linear-gradient
(
315deg
,
rgba
(
225
,
47
,
116
,
0
.83
)
0%
,
#c01540
100%
);
border-radius
:
4px
;
}
</
style
>
src/pages/home/queryCard.vue
浏览文件 @
a1b41e2a
...
...
@@ -42,9 +42,9 @@ export default {
},
methods
:
{
// 获取证书列表
handle
Ge
tCard
()
{
handle
getCer
tCard
()
{
const
params
=
{
project_prefix
:
'x1'
}
api
.
getCard
(
params
).
then
((
res
)
=>
{
api
.
getC
ertC
ard
(
params
).
then
((
res
)
=>
{
this
.
cardList
=
res
.
data
?.
list
})
},
...
...
@@ -59,7 +59,7 @@ export default {
},
mounted
()
{
// 获取证书
this
.
handle
Ge
tCard
()
this
.
handle
getCer
tCard
()
},
}
</
script
>
...
...
src/pages/product/components/presence.vue
浏览文件 @
a1b41e2a
...
...
@@ -33,7 +33,7 @@
</
template
>
<
script
>
import
{
postNes
}
from
'@/api/article'
import
{
submitApplicationForm
}
from
'@/api/article'
export
default
{
components
:
{},
data
()
{
...
...
@@ -66,7 +66,7 @@ export default {
}
}
this
.
form
=
Object
.
assign
(
this
.
form
,
{
comment
:
`#咨询产品:
${
this
.
f1
}
;#院校名称:
${
this
.
f2
}
;#院系:
${
this
.
f3
}
`
})
postNes
(
this
.
form
)
submitApplicationForm
(
this
.
form
)
.
then
((
res
)
=>
{
if
(
res
&&
res
.
status
===
200
)
{
this
.
$message
({
...
...
src/pages/service/components/buy.vue
deleted
100644 → 0
浏览文件 @
bd1671bc
<
template
>
<div
class=
"book-detail-box content-max-width"
>
<!--
<breadcrumb
class=
"content-max-width crumb"
:data=
"crumbData"
/>
-->
<div
class=
"bool-det-top"
>
<div
class=
"item-box"
>
<img
src=
"https://zws-imgs-pub.ezijing.com/static/public/7c63bd40600a040f867fe4db9014fb7c.png"
/>
<div
class=
"right-content"
>
<div
class=
"title"
>
《金融产品数字化营销职业技能等级认证教材》(初级)
</div>
<div
class=
"des-box"
>
<p>
<span>
教材简介:
</span
><i
>
本系列教材紧跟金融各行业数字化转型和职业教育的人才培养发展的需求,随行业的数字化转型、数字化营销工具和专业升级等情况及时动态更新。教材设置了思维导图、学习目标、案例实践、问题思考等板块,以职业技能等级标准为依据,结合行业企业用人技能要求的紧迫程度,设计教材内容和框架体系。确定教材各案例实践涵盖的职业技能等级工作任务与就业面向相匹配,以真实案例实践为驱动,促进学生深刻掌握先进技术能力。
</i
>
</p>
<p
class=
"align-r"
><span>
定价:
</span><i>
¥39
</i></p>
<p
class=
"align-r cen"
><span>
数量:
</span><input
type=
"text"
/></p>
<div
class=
"buy-btn"
>
购买
</div>
</div>
</div>
</div>
<div
class=
"v-code-box"
v-if=
"false"
>
<div
class=
"block"
></div>
<div
class=
"text"
>
手机扫码浏览
</div>
</div>
</div>
<div
class=
"book-det-bottom"
>
<div
class=
"fix-left"
>
<div
class=
"material"
>
<div
class=
"title"
>
教材介绍
</div>
<div
class=
"content"
>
本系列教材紧跟金融各行业数字化转型和职业教育的人才培养发展的需求,随行业的数字化转型、数字化营销工具和专业升级等情况及时动态更新。教材设置了思维导图、学习目标、案例实践、问题思考等板块,以职业技能等级标准为依据,结合行业企业用人技能要求的紧迫程度,设计教材内容和框架体系。确定教材各案例实践涵盖的职业技能等级工作任务与就业面向相匹配,以真实案例实践为驱动,促进学生深刻掌握先进技术能力。
</div>
<div
class=
"info"
>
<p><span>
作者:
</span>
赵瑾龙
</p>
<p><span>
出版时间:
</span>
2020.10.10
</p>
<p><span>
ISBN:
</span>
2020.10.19—2020.11.20
</p>
<p><span>
发行日期:
</span>
2020.20.20
</p>
</div>
</div>
<div
class=
"catalog"
>
<div
class=
"title"
>
目录
</div>
<ul>
<li>
<div
class=
"chapter"
>
第一章
</div>
<!-- @click="goChapter" -->
<div
class=
"node"
>
第一节
</div>
</li>
<li>
<div
class=
"chapter"
>
第一章
</div>
<div
class=
"node"
>
第一节
</div>
</li>
<li>
<div
class=
"chapter"
>
第一章
</div>
<div
class=
"node"
>
第一节
</div>
</li>
</ul>
</div>
</div>
<div
class=
"author"
>
<div
class=
"title"
>
作者
</div>
<div
class=
"item"
>
<div
class=
"info-box"
>
<img
src=
"https://zws-imgs-pub.ezijing.com/static/public/f064b2cb83039e1d4754993167d73864.png"
/>
<div
class=
"info"
>
<div
class=
"name"
>
赵瑾龙
</div>
<div
class=
"xx"
>
研究院
</div>
</div>
</div>
<div
class=
"intr"
>
<div
class=
"name"
>
简介:
</div>
<div
class=
"text"
>
赵瑾龙先生是中国人民银行研究生部经济学博士,现任香港致富证券有限公司首席经济学家,兼任研究院院长、清华大学五道口金融学院硕士生导师、紫荆-印第安纳大学kelley商学院金融学硕士项目责任教授,他主要研究方向是宏观经济、货币政策和投资策略。
</div>
</div>
</div>
</div>
</div>
</div>
</
template
>
<
script
>
import
breadcrumb
from
'@/components/breadcrumb.vue'
export
default
{
components
:
{
breadcrumb
,
},
data
()
{
return
{
crumbData
:
[
{
path
:
'/'
,
name
:
'首页'
,
},
{
path
:
'/textBook'
,
name
:
'教材中心'
,
},
{
name
:
'金融数字化营销'
,
},
],
}
},
methods
:
{
goChapter
()
{
this
.
$router
.
push
({
path
:
'/textBook/chapter'
,
})
},
},
}
</
script
>
<
style
lang=
"scss"
scoped
>
.content-max-width
{
width
:
1200px
;
margin
:
0
auto
;
}
.buy-btn
{
width
:
150px
;
height
:
36px
;
background
:
linear-gradient
(
315deg
,
rgba
(
225
,
47
,
116
,
0
.83
)
0%
,
#c01540
100%
);
border-radius
:
4px
;
text-align
:
center
;
font-size
:
14px
;
color
:
#ffffff
;
line-height
:
36px
;
margin-top
:
16px
;
cursor
:
pointer
;
}
.book-det-bottom
{
display
:
flex
;
.catalog
{
.title
{
font-size
:
18px
;
font-weight
:
bold
;
color
:
#c80046
;
line-height
:
25px
;
margin-bottom
:
24px
;
}
ul
{
li
{
width
:
729px
;
padding
:
16px
0
;
border-top
:
1px
solid
#eee
;
.chapter
{
font-size
:
18px
;
font-weight
:
bofld
;
color
:
#262626
;
line-height
:
25px
;
}
.node
{
font-size
:
14px
;
color
:
#7d7d7d
;
line-height
:
20px
;
margin-top
:
12px
;
cursor
:
pointer
;
}
}
}
}
.author
{
margin-left
:
auto
;
.title
{
font-size
:
18px
;
font-weight
:
bold
;
color
:
#c80046
;
line-height
:
25px
;
margin-bottom
:
24px
;
}
.item
{
width
:
280px
;
border-top
:
1px
solid
#eee
;
margin-top
:
24px
;
.info-box
{
padding-top
:
16px
;
display
:
flex
;
align-items
:
center
;
img
{
width
:
80px
;
height
:
80px
;
}
.info
{
margin-left
:
16px
;
.name
{
font-size
:
18px
;
font-weight
:
bold
;
color
:
#2b2b2b
;
line-height
:
25px
;
}
.xx
{
font-size
:
14px
;
color
:
#888888
;
line-height
:
20px
;
margin-top
:
12px
;
}
}
}
.intr
{
margin-top
:
16px
;
display
:
flex
;
.name
{
font-size
:
14px
;
font-weight
:
bold
;
color
:
#262626
;
line-height
:
20px
;
white-space
:
nowrap
;
}
.text
{
font-size
:
14px
;
color
:
#7d7d7d
;
line-height
:
20px
;
}
}
}
}
}
.bool-det-top
{
display
:
flex
;
padding-top
:
24px
;
}
.book-detail-box
{
.v-code-box
{
width
:
136px
;
margin-left
:
24px
;
// margin-top: 24px;
.block
{
width
:
136px
;
height
:
136px
;
background
:
#d8d8d8
;
border
:
1px
solid
#979797
;
}
.text
{
font-size
:
14px
;
color
:
#222222
;
line-height
:
20px
;
margin-top
:
8px
;
text-align
:
center
;
}
}
.item-box
{
// padding: 24px 0;
// border-bottom: 1px solid #eee;
display
:
flex
;
img
{
width
:
258px
;
height
:
143px
;
display
:
block
;
}
.right-content
{
margin-left
:
24px
;
.title
{
font-size
:
18px
;
font-weight
:
bold
;
color
:
#c01540
;
line-height
:
25px
;
}
.des-box
{
// width: 523px;
margin-top
:
24px
;
p
{
input
{
width
:
70px
;
height
:
40px
;
border
:
1px
solid
#ccc
;
border-radius
:
4px
;
outline
:
none
;
padding-left
:
10px
;
}
// text-align: right;
font-size
:
14px
;
color
:
#666666
;
line-height
:
20px
;
margin-bottom
:
8px
;
display
:
flex
;
&
.cen
{
align-items
:
center
;
}
&
.align-r
{
text-align
:
right
;
}
span
{
width
:
70px
;
font-size
:
14px
;
font-weight
:
bold
;
color
:
#222222
;
line-height
:
20px
;
white-space
:
nowrap
;
}
i
{
width
:
523px
;
font-style
:
normal
;
font-size
:
14px
;
color
:
#717171
;
line-height
:
20px
;
text-align
:
left
;
}
}
}
.detail-btn
{
color
:
#fff
;
text-align
:
center
;
line-height
:
36px
;
width
:
96px
;
height
:
36px
;
background
:
linear-gradient
(
315deg
,
rgba
(
225
,
47
,
116
,
0
.83
)
0%
,
#c01540
100%
);
border-radius
:
4px
;
margin-top
:
16px
;
}
}
}
}
.crumb
{
padding-top
:
24px
;
}
.material
{
width
:
729px
;
margin
:
56px
0
30px
;
.title
{
line-height
:
57px
;
border-bottom
:
1px
solid
#ddd
;
font-size
:
18px
;
font-weight
:
bold
;
color
:
#c80046
;
}
.content
{
font-size
:
14px
;
color
:
#717171
;
line-height
:
20px
;
margin-top
:
16px
;
}
.info
{
margin-top
:
16px
;
font-size
:
14px
;
color
:
#262626
;
line-height
:
20px
;
p
{
margin-bottom
:
14px
;
}
span
{
font-weight
:
bold
;
}
}
}
</
style
>
src/pages/service/index.vue
deleted
100644 → 0
浏览文件 @
bd1671bc
<
template
>
<div>
<img
src=
"https://webapp-pub.ezijing.com/project/x-new/ser-banner.png"
class=
"banner"
/>
<section
class=
"section"
>
<h1
class=
"pt-100"
>
教材中心
</h1>
<p
class=
"describe"
>
“金融产品数字化营销职业技能等级证书”的系列教材,由紫荆教育组织国内数字化营销理论研究的顶级院校学者教授,以及金融行业龙头机构的资深专家和一线实践精英携手编著,具有理论扎实、观点前沿、讲解详实、案例丰富、流程科学、实操精准的特点,在国内金融产品数字化营销领域,尚属首创。
<br
/>
项目导学:以思维导图的形式勾勒出本项目的核心知识点,便于学生整体把握项目的主要知识内容和学习要求。
<br
/>
学习目标:明确给出任务的知识目标和能力目标,便于学生对照检查学习效果。
<br
/>
任务导入:基于工作领域职业能力分析,精心设计典型工作任务,明确提出任务要求,引导学生开展典型、真实的职业实践。
<br
/>
任务实施:以任务为导向,以工作过程为主线,设计完成典型工作任务的业务“流程图”。
<br
/>
知识链接:围绕学习目标,针对“任务实施”所需知识,以“必需、够用”为原则,选取核心知识点。
<br
/>
项目测评:依据金融产品数字化营销职业技能等级标准实务考核要求,设计重要知识点测评试题,方便学生及时检验项目实务知识学习效果。
</p>
<img
src=
"https://webapp-pub.ezijing.com/project/x-new/ser-img1.png"
style=
"display: block; width: 908px; margin: 0 auto 80px"
/>
<img
src=
"https://webapp-pub.ezijing.com/project/x-new/ser-img2.png"
/>
<h1
class=
"pt-80"
>
课程中心
</h1>
<p
class=
"describe"
>
信息化、数字化教学资源是促进书证融通的重要因素之一,紫荆教育信息化、数字化资源立足“辅教辅学”的功能定位,遵循“一体化设计、结构化课程、颗粒化资源”的建构逻辑完成资源整合,通过提供教学视频、PPT、课程大纲、题库、试卷、实践案例等,使教师教学准备工作更加便利化,帮助教师“好上课”;
通过符合学生年龄特点、兴趣爱好的图文、音频等资源,引发学生学习兴趣,帮助老师将重难点课程内容化抽象为形象,通过项目、任务激发学生学习动机,使得被动接受的学生主动获取知识,从而引发学生自主学习能力、自主探索能力,提升课堂实施的有效性,帮助教师“上好课”。
</p>
<div
class=
"card-list"
>
<div
class=
"card-list_item"
>
<div
class=
"item-title"
>
线上课程研发
</div>
<div
class=
"item-con1"
>
课程内容设置
<br
/>
课程师资匹配
<br
/>
课程制作方案
</div>
</div>
<div
class=
"card-list_item"
>
<div
class=
"item-title"
>
课程制作
</div>
<div
class=
"item-con2"
>
<p>
课程录制
课程剪辑
<br
/>
课程编辑
课程成片
</p>
<div
class=
"tips"
>
(课程录制,满足各种需求。不同形式拥有专属的场地)
</div>
</div>
</div>
<div
class=
"card-list_item"
>
<div
class=
"item-title"
>
线下课程开发
</div>
<div
class=
"item-con2"
>
<p>
教学设计
教务计划
<br
/>
实施执行方案
</p>
<div
class=
"tips"
>
(全国三大教学基地,10多间不同需求的教室与会议室)
</div>
</div>
</div>
</div>
<h1
class=
"pt-100"
>
双创中心
</h1>
<p
class=
"describe"
>
紫荆教育融合校企资源,打造与传统教学模式不同的创新能力培养体系,从而促进教育体系的改革创新,并联合院校申报双创项目。
双创项目建设包括创新训练项目、创业训练项目和创业实践项目三类。
</p>
<div
class=
"card-center"
>
<div
class=
"card-center_item"
>
<img
src=
"https://webapp-pub.ezijing.com/project/x-new/ser-img3.png"
/>
<div
class=
"item-con"
>
<h2>
创新训练项目
</h2>
<p>
在校生个人或团队在导师指导下,自主完成创新性研究项目设计、研究项目实施、研究报告撰写、成果(学术)交流等工作。
</p>
</div>
</div>
<div
class=
"card-center_item"
>
<div
class=
"item-con"
>
<h2>
创业训练项目
</h2>
<p>
在校生团队在导师指导下,完成商业计划书编制、可行性研究、企业模拟运行、创业报告撰写等工作。
</p>
</div>
<img
style=
"margin-top: 53px"
src=
"https://webapp-pub.ezijing.com/project/x-new/ser-img4.png"
/>
</div>
<div
class=
"card-center_item"
>
<img
src=
"https://webapp-pub.ezijing.com/project/x-new/ser-img5.png"
/>
<div
class=
"item-con"
>
<h2>
创业实践项目
</h2>
<p>
学生团队在学校导师和企业导师共同指导下,基于前期创新创业训练项目的成果,开发具有市场前景的创新性产品或者服务,开展创业实践活动。
</p>
</div>
</div>
</div>
<h1
class=
"pt-100"
>
科研中心
</h1>
<p
class=
"describe"
>
在科研创新方面紫荆教育和学校共同成立“科研创新”专家组,由教科研专家、行业/企业资深人士、学校骨干教师等组成,专门承接教育科研项目的选题、申报,研究与实施等。
</p>
<img
style=
"margin-bottom: 100px"
src=
"https://webapp-pub.ezijing.com/project/x-new/ser-foot.png"
/>
</section>
</div>
</
template
>
<
script
>
export
default
{
components
:
{},
data
()
{
return
{}
},
methods
:
{},
}
</
script
>
<
style
lang=
"scss"
scoped
>
.section
{
width
:
1200px
;
margin
:
0
auto
;
}
.banner
{
width
:
100%
;
display
:
block
;
}
.pt-80
{
padding-top
:
80px
;
}
.pt-100
{
padding-top
:
100px
;
}
h1
{
font-size
:
32px
;
font-weight
:
bold
;
color
:
#333333
;
line-height
:
34px
;
text-align
:
center
;
margin-bottom
:
50px
;
}
.describe
{
font-size
:
18px
;
color
:
#666666
;
line-height
:
36px
;
margin-bottom
:
50px
;
}
.describe-img
{
width
:
100%
;
display
:
block
;
}
.card-list
{
display
:
flex
;
justify-content
:
space-between
;
.card-list_item
{
width
:
380px
;
height
:
220px
;
background-color
:
#fff
;
}
.item-title
{
line-height
:
50px
;
background
:
#aa1941
;
text-align
:
center
;
font-size
:
20px
;
font-weight
:
bold
;
color
:
#ffffff
;
}
.item-con1
{
font-size
:
18px
;
color
:
#424242
;
line-height
:
36px
;
text-align
:
center
;
margin-top
:
37px
;
}
.item-con2
{
p
{
font-size
:
18px
;
color
:
#424242
;
line-height
:
36px
;
text-align
:
center
;
margin-top
:
37px
;
}
.tips
{
font-size
:
14px
;
color
:
#666666
;
margin-top
:
25px
;
text-align
:
center
;
}
}
}
.card-center
{
display
:
flex
;
justify-content
:
space-between
;
.card-center_item
{
background-color
:
#fff
;
width
:
380px
;
height
:
420px
;
}
.item-con
{
padding
:
25px
22px
0
;
h2
{
font-weight
:
bold
;
font-size
:
18px
;
color
:
#424242
;
line-height
:
30px
;
}
p
{
font-size
:
18px
;
color
:
#666
;
line-height
:
30px
;
}
}
}
</
style
>
src/pages/teachers/data.js
deleted
100644 → 0
浏览文件 @
bd1671bc
差异被折叠。
点击展开。
src/pages/teachers/index.vue
deleted
100644 → 0
浏览文件 @
bd1671bc
<
template
>
<div>
<img
class=
"banner"
src=
"/images/banner2.png"
/>
<section
class=
"section"
>
<h1
class=
"pt-80"
>
技能培训公告
</h1>
<notice></notice>
<div
class=
"nav-list"
>
<div
class=
"nav-list_item"
v-for=
"(item, index) in navList"
:key=
"index"
@
click=
"register(item)"
>
<div
class=
"item-icon"
>
<img
class=
"n-active"
:src=
"item.icon"
/>
<img
class=
"active"
:src=
"item.aIcon"
/>
</div>
<div
class=
"item-txt"
>
{{
item
.
text
}}
</div>
</div>
</div>
<h2
class=
"pt-80"
id=
"md1"
style=
"text-align: center"
>
技能培训报名
</h2>
<h3
style=
"margin-top: 50px"
>
一、培训目标
</h3>
<p
class=
"des"
>
培训目标:培养初级商务数据分析师。
<br
/>
学员通过本阶段课程学习,了解商务数据分析师相关岗位要求和岗位基础知识,学会数据采集、清洗、处理、可视化和基础分析技能,使学员能够胜任商务数据分析师基础岗位工作。在工作中为企业决策提供基础数据与依据。
</p>
<h3>
二、培训对象
</h3>
<p
class=
"des"
>
企业职工、职业院校学生、退伍军人
</p>
<h3>
三、培训方式
</h3>
<p
class=
"des"
>
根据“金融产品数字化营销职业技能等级证书”试点工作需求,分批次(分区域)开展师资培训。培训采取结构化、多元化的培训方式设计,包含在线视频、专题授课、案例研讨、实践演练、互动讨论、汇报展示、整体考核等。
</p>
<h3>
四、培训内容
</h3>
<p
class=
"des"
>
1.1+X证书制度的意义与政策解读
<br
/>
2.金融产品数字化营销发展现状与前景展望
<br
/>
3.职业技能等级标准解读
<br
/>
4.核心知识串讲与互动交流
<br
/>
5.实训案例剖析与互动交流
<br
/>
6.课程考试
</p>
<h3>
五、培训费用
</h3>
<p
class=
"des"
>
详见每期技能培训通知。
</p>
<div
class=
"t-btn"
>
<div
class=
"name"
>
通知关注:
</div>
<router-link
to=
"/news"
>
<div
class=
"btn"
>
通知
</div>
</router-link>
</div>
<div
class=
"t-btn"
>
<div
class=
"name"
>
报名入口:
</div>
<router-link
to=
"/train"
>
<div
class=
"btn"
>
报名
</div>
</router-link>
</div>
<div
class=
"pt-box"
>
<h1
id=
"md2"
>
学习平台
</h1>
<div
class=
"flex"
>
<img
src=
"https://webapp-pub.ezijing.com/project/x-new/train-dn.png"
/>
<div
class=
"pt-right"
>
<div
class=
"txt"
>
紫荆教育为师生精心打造综合一体化学习平台,可实现考核体系的标准化,数据资源的统一化,师资学习的多元化,以及学习管理的系统化,最终形成学、练、训、考、评、管一体的数字化营销学习平台。
</div>
<a
target=
"_blank"
href=
"https://x-learning.ezijing.com/course/learn"
>
<div
class=
"btn"
>
进入系统
</div>
</a>
</div>
</div>
</div>
</section>
<vue-passport
ref=
"passport"
@
ready=
"onReady"
:options=
"options"
></vue-passport>
</div>
</
template
>
<
script
>
import
notice
from
'@/components/notice.vue'
export
default
{
components
:
{
notice
,
},
data
()
{
return
{
navList
:
[
{
icon
:
'https://webapp-pub.ezijing.com/project/x-new/train-icon1.png'
,
aIcon
:
'https://webapp-pub.ezijing.com/project/x-new/train-icon-a1.png'
,
text
:
'注册账号'
,
isRegister
:
true
,
},
{
icon
:
'https://webapp-pub.ezijing.com/project/x-new/train-icon2.png'
,
aIcon
:
'https://webapp-pub.ezijing.com/project/x-new/train-icon-a2.png'
,
text
:
'技能培训报名'
,
id
:
'md1'
,
},
{
icon
:
'https://webapp-pub.ezijing.com/project/x-new/train-icon3.png'
,
aIcon
:
'https://webapp-pub.ezijing.com/project/x-new/train-icon-a3.png'
,
text
:
'学习平台'
,
id
:
'md2'
,
},
{
icon
:
'https://webapp-pub.ezijing.com/project/x-new/train-icon4.png'
,
aIcon
:
'https://webapp-pub.ezijing.com/project/x-new/train-icon-a4.png'
,
text
:
'证书查询'
,
path
:
'/queryCard'
,
},
],
isLogin
:
false
,
options
:
{
baseUrl
:
import
.
meta
.
env
.
VITE_API_BASE_URL
,
register
:
{
data
:
{
username
:
`ezijing-
${
new
Date
().
getTime
()}
`
,
},
fields
:
[
'account'
,
'code'
,
'password'
],
},
login
:
{
account
:
{
onSuccess
:
this
.
loginSuccess
,
},
phone
:
{
onSuccess
:
this
.
loginSuccess
,
},
},
},
}
},
mounted
()
{},
methods
:
{
register
(
n
)
{
if
(
n
.
isRegister
)
{
this
.
passport
.
register
()
return
false
}
if
(
n
.
id
)
{
const
element
=
document
.
getElementById
(
n
.
id
)
if
(
element
)
{
const
offsetTop
=
element
.
getBoundingClientRect
().
top
+
window
.
scrollY
window
.
scrollTo
({
top
:
offsetTop
,
behavior
:
'smooth'
,
})
}
return
false
}
if
(
n
.
path
)
{
this
.
$router
.
push
(
n
)
}
},
onReady
(
isLogin
,
user
=
{})
{
this
.
user
=
user
window
.
sessionStorage
.
userInfo
=
JSON
.
stringify
(
user
)
},
loginSuccess
(
data
)
{
this
.
passport
.
checkLoginStatus
((
isLogin
,
user
=
{})
=>
{
window
.
sessionStorage
.
userInfo
=
JSON
.
stringify
(
user
)
this
.
isLogin
=
isLogin
this
.
user
=
user
this
.
$router
.
push
(
'/my'
)
})
window
.
location
.
reload
()
},
},
computed
:
{
passport
()
{
return
this
.
$refs
.
passport
},
},
}
</
script
>
<
style
lang=
"scss"
scoped
>
.section
{
width
:
1200px
;
margin
:
0
auto
;
}
.banner
{
width
:
100%
;
display
:
block
;
}
h1
{
font-size
:
32px
;
font-weight
:
bold
;
color
:
#333333
;
line-height
:
34px
;
text-align
:
center
;
margin-bottom
:
50px
;
}
.pt-80
{
padding-top
:
80px
;
}
.pt-100
{
padding-top
:
100px
;
}
.nav-list
{
display
:
flex
;
justify-content
:
space-between
;
padding-top
:
60px
;
.nav-list_item
{
width
:
264px
;
height
:
264px
;
background
:
#ffffff
;
box-shadow
:
0px
2px
12px
1px
rgba
(
0
,
0
,
0
,
0
.1
);
cursor
:
pointer
;
&
:hover
{
background-color
:
#aa1941
;
.item-icon
{
.n-active
{
display
:
none
;
}
.active
{
display
:
block
;
}
}
.item-txt
{
color
:
#fff
;
}
}
.item-icon
{
height
:
150px
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
margin-top
:
20px
;
.active
{
display
:
none
;
}
}
.item-txt
{
font-size
:
22px
;
color
:
#333333
;
text-align
:
center
;
}
}
}
h2
{
font-size
:
24px
;
color
:
#333333
;
}
h3
{
color
:
#333333
;
font-size
:
20px
;
margin-bottom
:
5px
;
}
.des
{
font-size
:
18px
;
margin-bottom
:
40px
;
line-height
:
30px
;
color
:
#333333
;
}
.t-btn
{
display
:
flex
;
align-items
:
center
;
margin-bottom
:
20px
;
.name
{
font-size
:
18px
;
color
:
#333333
;
}
.btn
{
width
:
150px
;
background
:
#aa1941
;
border-radius
:
6px
6px
6px
6px
;
color
:
#fff
;
text-align
:
center
;
line-height
:
40px
;
}
}
.pt-box
{
padding-top
:
40px
;
padding-bottom
:
40px
;
.flex
{
display
:
flex
;
margin-top
:
35px
;
img
{
min-width
:
293px
;
display
:
block
;
}
.pt-right
{
margin-left
:
70px
;
.txt
{
font-size
:
18px
;
color
:
#333333
;
line-height
:
30px
;
}
.btn
{
width
:
150px
;
line-height
:
40px
;
background
:
#aa1941
;
border-radius
:
6px
6px
6px
6px
;
text-align
:
center
;
color
:
#fff
;
cursor
:
pointer
;
margin-top
:
60px
;
}
}
}
}
.new-list
{
display
:
flex
;
justify-content
:
space-between
;
margin-bottom
:
100px
;
.new-list_item
{
box-shadow
:
0px
2px
12px
1px
rgba
(
0
,
0
,
0
,
0
.1
);
background-color
:
#fff
;
width
:
380px
;
height
:
560px
;
box-sizing
:
border-box
;
padding
:
60px
30px
30px
;
.new-item_title
{
font-size
:
20px
;
font-weight
:
bold
;
color
:
#333333
;
line-height
:
100%
;
margin-bottom
:
30px
;
overflow
:
hidden
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
}
.new-item_con
{
font-size
:
16px
;
color
:
#333333
;
line-height
:
26px
;
height
:
234px
;
display
:
-
webkit-box
!
important
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
word-break
:
break-all
;
-webkit-box-orient
:
vertical
;
-webkit-line-clamp
:
9
;
}
.new-item_btn
{
font-size
:
16px
;
color
:
#aa1941
;
line-height
:
100%
;
margin
:
20px
0
;
}
}
}
</
style
>
src/pages/train/components/
i
tem.vue
→
src/pages/train/components/
listI
tem.vue
浏览文件 @
a1b41e2a
...
...
@@ -3,11 +3,8 @@
<img
:src=
"data.imgUri"
/>
<div
class=
"right-content"
>
<div
class=
"title"
>
{{
data
.
title
}}
</div>
<!-- v-html="data.additional" -->
<div
class=
"des-box"
>
<!--
<p
class=
"ind"
>
计划时间:3.24-3.26
</p>
-->
<p>
计划时间:
{{
data
.
time
}}
</p>
<!--
<p
class=
"ind"
>
ISBN:基础数据维护及档案管理
</p>
-->
<p>
计划人数:
{{
data
.
count
}}
</p>
</div>
<router-link
:to=
"`/train/detail?id=$
{data.id}`" v-if="data.activeIndex === 1">
...
...
@@ -16,38 +13,12 @@
<div
class=
"detail-btn"
v-if=
"data.activeIndex === 2"
>
敬请期待
</div>
<div
class=
"detail-btn finished"
v-if=
"data.activeIndex === 3"
>
圆满结束
</div>
</div>
<!--
<div
class=
"right-time"
>
<div
class=
"week"
>
{{
setDate
(
'w'
)
}}
</div>
<div
class=
"time"
>
{{
setDate
(
'm'
)
}}
</div>
</div>
-->
</div>
</
template
>
<
script
>
export
default
{
props
:
{
data
:
{
type
:
Object
,
default
:
{},
},
},
data
()
{
return
{
input
:
''
,
}
},
computed
:
{
setDate
()
{
return
(
type
)
=>
{
const
date
=
new
Date
(
this
.
data
.
published_time
)
let
reData
=
''
if
(
type
===
'w'
)
{
reData
=
new
Array
(
'星期日'
,
'星期一'
,
'星期二'
,
'星期三'
,
'星期四'
,
'星期五'
,
'星期六'
)[
date
.
getDay
()]
}
else
{
reData
=
date
.
getMonth
()
+
1
+
'月'
+
date
.
getDate
()
+
'日'
}
return
reData
}
},
data
:
{
type
:
Object
,
default
:
()
=>
({})
},
},
}
</
script
>
...
...
@@ -98,27 +69,4 @@ export default {
}
}
}
.right-time
{
margin-left
:
auto
;
width
:
77px
;
height
:
59px
;
background
:
url(https://zws-imgs-pub.ezijing.com/static/public/30ec4d9c7c282da2e3dae066b00b180b.png)
;
background-size
:
100%
100%
;
position
:
relative
;
.week
{
text-align
:
center
;
font-size
:
12px
;
color
:
#ffffff
;
line-height
:
12px
;
margin-top
:
6px
;
}
.time
{
margin-top
:
8px
;
text-align
:
center
;
font-size
:
16px
;
font-weight
:
bold
;
color
:
#666666
;
line-height
:
22px
;
}
}
</
style
>
src/pages/train/components/pay
Pop
.vue
→
src/pages/train/components/pay.vue
浏览文件 @
a1b41e2a
...
...
@@ -4,28 +4,28 @@
<i
class=
"el-icon-close"
@
click=
"$emit('closePayPop')"
></i>
<div
class=
"tips-cen"
>
<div
class=
"name"
>
活动名称:
</div>
<div
class=
"js"
>
2024年第一期“1+X金融产品数字化营销职业技能等级证书(高级)”技能培训班
</div>
<div
class=
"js"
>
{{
train
.
title
}}
</div>
</div>
<div
class=
"tips-cen mar-t-20"
>
<div
class=
"name"
>
费
用:
</div>
<div
class=
"money"
>
3800
<span>
元
</span></div>
<div
class=
"money"
>
{{
train
.
price
}}
<span>
元
</span></div>
</div>
<div
class=
"tips-top"
>
<div
class=
"name"
>
支付方式:
</div>
<div
class=
"pay-method"
>
<div
:class=
"payMethod == 2 ? 'li active' : 'li'"
@
click=
"
tab
PayMethod(2)"
>
<div
:class=
"payMethod == 2 ? 'li active' : 'li'"
@
click=
"
change
PayMethod(2)"
>
<div
class=
"select-icon"
></div>
<div
class=
"icon"
></div>
<div
class=
"pay-text"
>
支付宝支付
</div>
</div>
<div
:class=
"payMethod == 1 ? 'li active' : 'li'"
@
click=
"
tab
PayMethod(1)"
>
<div
:class=
"payMethod == 1 ? 'li active' : 'li'"
@
click=
"
change
PayMethod(1)"
>
<div
class=
"select-icon"
></div>
<div
class=
"icon"
></div>
<div
class=
"pay-text"
>
微信支付
</div>
</div>
</div>
</div>
<div
class=
"pay-btn"
@
click=
"
get
Order"
>
去支付
</div>
<div
class=
"pay-btn"
@
click=
"
create
Order"
>
去支付
</div>
<div
class=
"tips-text"
>
注:请核对报名表信息,支付后将不能修改报名信息。
</div>
</div>
<div
class=
"content-box ewm-code"
v-if=
"isCodeShow"
>
...
...
@@ -44,58 +44,52 @@
import
*
as
api
from
'@/api/article'
import
QrcodeVue
from
'qrcode.vue'
export
default
{
components
:
{
QrcodeVue
,
},
components
:
{
QrcodeVue
},
props
:
{
formData
:
{
type
:
Object
,
},
periods
:
{
type
:
Number
,
default
:
'1'
,
},
form
:
{
type
:
Object
},
train
:
{
type
:
Object
},
},
data
()
{
return
{
payMethod
:
2
,
isCodeShow
:
false
,
product_id
:
'6787934443077107712'
,
payInfo
:
{},
time
:
null
,
time
r
:
null
,
}
},
methods
:
{
tab
PayMethod
(
n
)
{
change
PayMethod
(
n
)
{
this
.
payMethod
=
n
},
getOrder
()
{
const
param
=
{
pay_type
:
this
.
payMethod
,
product_id
:
this
.
product_id
,
form_id
:
this
.
formData
.
id
&&
this
.
formData
.
id
.
toString
(),
}
async
createOrder
()
{
const
loading
=
this
.
$loading
({
lock
:
true
,
text
:
'Loading'
,
spinner
:
'el-icon-loading'
,
background
:
'rgba(0, 0, 0, 0.7)'
,
})
api
.
getOrder
(
param
).
then
((
res
)
=>
{
if
(
res
.
code
===
200
)
{
this
.
payInfo
=
res
.
data
this
.
isCodeShow
=
true
clearInterval
(
this
.
time
)
this
.
time
=
setInterval
(()
=>
{
this
.
checkPay
(
res
.
data
.
pay_order_id
,
res
.
data
.
order_no
)
},
2000
)
loading
.
close
()
}
else
{
this
.
$message
.
error
(
res
.
msg
)
loading
.
close
()
}
// isCodeShow = true
})
await
api
.
createOrder
({
pay_type
:
this
.
payMethod
,
shop_id
:
this
.
train
.
shop_id
,
spu_id
:
this
.
train
.
shop_id
,
sku_id
:
this
.
train
.
sku_id
,
form_id
:
this
.
form
.
id
,
})
.
then
((
res
)
=>
{
if
(
res
.
code
===
200
)
{
this
.
payInfo
=
res
.
data
this
.
isCodeShow
=
true
clearInterval
(
this
.
timer
)
this
.
timer
=
setInterval
(()
=>
{
this
.
checkPay
(
res
.
data
.
pay_order_id
,
res
.
data
.
order_no
)
},
2000
)
loading
.
close
()
}
else
{
this
.
$message
.
error
(
res
.
msg
)
loading
.
close
()
}
})
},
checkPay
(
id
,
order_no
)
{
api
.
checkPay
(
id
).
then
((
res
)
=>
{
...
...
@@ -108,29 +102,27 @@ export default {
})
this
.
payEnd
(
order_no
)
this
.
$emit
(
'payStatus'
)
clearInterval
(
this
.
time
)
clearInterval
(
this
.
time
r
)
}
else
if
(
order
.
status
!==
0
)
{
clearInterval
(
this
.
time
)
clearInterval
(
this
.
time
r
)
}
}
// isCodeShow = true
})
},
closeClear
()
{
this
.
isCodeShow
=
false
this
.
$emit
(
'closePayPop'
)
// clearInterval()
},
payEnd
(
orderOn
)
{
const
param
=
{
order_no
:
orderOn
,
form_id
:
this
.
form
Data
.
id
.
toString
(),
form_id
:
this
.
form
.
id
.
toString
(),
}
api
.
payEnd
(
param
).
then
((
res
)
=>
{})
},
},
beforeDestroy
()
{
// clearInterval(this.time
)
clearInterval
(
this
.
timer
)
},
}
</
script
>
...
...
src/pages/train/components/search.vue
deleted
100644 → 0
浏览文件 @
bd1671bc
<
template
>
<div
class=
"search-box"
>
<el-input
class=
"input"
placeholder=
"请输入内容"
v-model=
"input"
>
<i
slot=
"prefix"
class=
"el-input__icon el-icon-search"
></i>
</el-input>
<div
class=
"search-btn"
>
查询
</div>
</div>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
input
:
''
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.search-box
{
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
.input
{
width
:
328px
;
border-radius
:
4px
;
margin
:
0
12px
0
0
;
}
.search-btn
{
text-align
:
center
;
line-height
:
32px
;
width
:
60px
;
height
:
32px
;
background
:
linear-gradient
(
312deg
,
rgba
(
192
,
21
,
64
,
0
.67
)
0%
,
#C01540
100%
);
border-radius
:
4px
;
font-size
:
14px
;
color
:
#FFFFFF
;
cursor
:
pointer
;
}
}
</
style
>
src/pages/train/data.js
浏览文件 @
a1b41e2a
差异被折叠。
点击展开。
src/pages/train/detail.vue
浏览文件 @
a1b41e2a
...
...
@@ -7,7 +7,6 @@
<div
class=
"item-box"
>
<img
:src=
"detail.imgUri"
/>
<div
class=
"right-content"
>
<!--
<div
class=
"title"
>
《金融产品数字化营销职业技能等级认证教材》(初级)
</div>
-->
<div
class=
"des-box"
>
<p>
活动类型:技能培训
</p>
<p>
培训形式:
{{
detail
.
form
||
'线上直播'
}}
</p>
...
...
@@ -22,12 +21,7 @@
</div>
<div
class=
"content-card"
v-if=
"detail.excerpt != null"
>
<div
class=
"tit"
>
最新会议
</div>
<div
class=
"text"
v-html=
"detail.excerpt"
>
生实解着利土具度海张际取得时美议九报当社并因或争拉青再大精周不院指权展理会后市中议候只土写海院油称县白力反油子特军再六红省采大队清
</div>
<!--
<div
class=
"btn-boxs"
>
<div
class=
"btns"
>
确定
</div>
</div>
-->
<div
class=
"text"
v-html=
"detail.excerpt"
></div>
</div>
</div>
<div
class=
"new-contents content-max-width"
>
...
...
@@ -51,8 +45,6 @@
<div
class=
"p"
>
<div
class=
"name"
>
日程安排:
</div>
<div
class=
"cont"
v-html=
"detail.content"
></div>
<!-- <div class="cont">
</div> -->
</div>
<div
class=
"p"
>
<div
class=
"name"
>
培训QQ群:
</div>
...
...
@@ -72,15 +64,12 @@
</div>
</template>
<
script
>
import
item
from
'./components/item.vue'
import
*
as
api
from
'@/api/article'
import
item
from
'./components/listItem.vue'
import
breadcrumb
from
'@/components/breadcrumb.vue'
import
datalist
from
'./data.js'
export
default
{
components
:
{
item
,
breadcrumb
,
},
components
:
{
item
,
breadcrumb
},
data
()
{
return
{
datalist
,
...
...
@@ -93,16 +82,6 @@ export default {
return
this
.
datalist
.
find
((
item
)
=>
item
.
id
===
id
)
||
{}
},
},
mounted
()
{
// this.getData()
},
methods
:
{
getData
()
{
api
.
getArticleDetail
(
this
.
$route
.
query
.
id
).
then
((
res
)
=>
{
this
.
data
=
res
.
data
})
},
},
}
</
script
>
<
style
lang=
"scss"
scoped
>
...
...
@@ -111,10 +90,8 @@ export default {
margin
:
0
auto
;
}
.train-detail-box
{
display
:
flex
;
padding-top
:
12px
;
.title
{
width
:
753px
;
line-height
:
50px
;
border-bottom
:
1px
solid
#eee
;
font-size
:
18px
;
...
...
@@ -122,9 +99,7 @@ export default {
color
:
#c01540
;
}
}
.content-left
{
width
:
753px
;
}
.item-box
{
padding
:
24px
0
0
;
// border-bottom: 1px solid #eee;
...
...
@@ -226,7 +201,7 @@ export default {
text-align
:
right
;
}
.cont
{
width
:
357px
;
flex
:
1
;
font-size
:
14px
;
color
:
#7d7d7d
;
line-height
:
20px
;
...
...
src/pages/train/form.vue
浏览文件 @
a1b41e2a
差异被折叠。
点击展开。
src/pages/train/form2.vue
deleted
100644 → 0
浏览文件 @
bd1671bc
<
template
>
<div>
<!--
<breadcrumb
class=
"content-max-width crumb"
:data=
"crumbData"
/>
-->
<div
class=
"form-box"
>
<el-form
ref=
"form"
:model=
"form"
label-width=
"80px"
class=
"forms"
>
<el-form-item
label=
"姓名"
label-width=
"100px"
>
<el-input
v-model=
"form.i1"
></el-input>
</el-form-item>
<el-form-item
label=
"性别"
label-width=
"100px"
>
<el-select
v-model=
"form.i2"
placeholder=
"请选择"
class=
"width100"
>
<el-option
label=
"男"
value=
"shanghai"
></el-option>
<el-option
label=
"女"
value=
"beijing"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"名族"
label-width=
"100px"
>
<el-input
v-model=
"form.i3"
></el-input>
</el-form-item>
<el-form-item
label=
"职务"
label-width=
"100px"
>
<el-input
v-model=
"form.i4"
></el-input>
</el-form-item>
<el-form-item
label=
"手机号码"
label-width=
"100px"
>
<el-input
v-model=
"form.i5"
></el-input>
</el-form-item>
<el-form-item
label=
"身份证号"
label-width=
"100px"
>
<el-input
v-model=
"form.i6"
></el-input>
</el-form-item>
<el-form-item
label=
"邮箱"
label-width=
"100px"
>
<el-input
v-model=
"form.i7"
></el-input>
</el-form-item>
<el-form-item
label=
"单/合住"
label-width=
"100px"
>
<el-select
v-model=
"form.i8"
placeholder=
"请选择"
class=
"width100"
>
<el-option
label=
"单住"
value=
"shanghai"
></el-option>
<el-option
label=
"合住"
value=
"beijing"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"抬头"
label-width=
"100px"
>
<el-input
v-model=
"form.i9"
></el-input>
</el-form-item>
<el-form-item
label=
"税号"
label-width=
"100px"
>
<el-input
v-model=
"form.i10"
></el-input>
</el-form-item>
<el-form-item
label=
"地址"
label-width=
"100px"
>
<el-input
v-model=
"form.i11"
></el-input>
</el-form-item>
<el-form-item
label=
"开户行、账号"
label-width=
"100px"
>
<el-input
v-model=
"form.i12"
></el-input>
</el-form-item>
<!--
<el-form-item
label=
"付款方式"
label-width=
"100px"
>
<el-select
v-model=
"form.i9"
placeholder=
"请选择"
class=
"width100"
>
<el-option
label=
"微信"
value=
"shanghai"
></el-option>
<el-option
label=
"支付宝"
value=
"beijing"
></el-option>
</el-select>
</el-form-item>
-->
<!--
<el-form-item
label=
"身份证号"
label-width=
"100px"
>
<el-input
v-model=
"form.i10"
></el-input>
</el-form-item>
<el-form-item
label=
"地址"
label-width=
"100px"
>
<el-input
type=
"textarea"
v-model=
"form.i11"
></el-input>
</el-form-item>
<el-form-item
label=
"培训需求"
label-width=
"100px"
>
<el-input
type=
"textarea"
v-model=
"form.i12"
></el-input>
</el-form-item>
-->
<!--
<el-form-item
label-width=
"100px"
>
<el-upload
class=
"upload-demo"
drag
action=
"https://jsonplaceholder.typicode.com/posts/"
multiple
>
<i
class=
"el-icon-upload"
></i>
<div
class=
"el-upload__text"
>
将文件拖到此处,或
<em>
点击上传
</em></div>
<div
class=
"el-upload__tip"
slot=
"tip"
>
只能上传jpg/png文件,且不超过500kb
</div>
</el-upload>
</el-form-item>
-->
<el-form-item
label=
"填写模板"
label-width=
"100px"
>
<span
style=
"color: #0053c6; cursor: pointer"
>
下载Excel模板
</span>
<el-upload
style=
"margin-left: auto"
class=
"upload-demo"
action=
"/api/microservices/admin_api/file/upload"
:on-success=
"handleChange"
>
<el-button
size=
"small"
type=
"primary"
>
点击上传
</el-button>
<div
slot=
"tip"
class=
"el-upload__tip"
>
请下载模板后,按照模板格式填写完整资料后,上传报名表。
</div>
</el-upload>
</el-form-item>
<el-form-item
label-width=
"100px"
>
<el-button
type=
"primary"
@
click=
"onSubmit"
>
提交
</el-button>
<el-button
@
click=
"back"
>
返回
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</
template
>
<
script
>
import
*
as
api
from
'@/api/article'
import
breadcrumb
from
'@/components/breadcrumb.vue'
export
default
{
components
:
{
breadcrumb
,
},
data
()
{
return
{
file
:
''
,
fileList
:
[],
crumbData
:
[
{
path
:
'/'
,
name
:
'首页'
,
},
{
name
:
'技能培训'
,
},
],
form
:
{
i1
:
''
,
i2
:
''
,
i3
:
''
,
i4
:
''
,
i5
:
''
,
i6
:
''
,
i7
:
''
,
i8
:
''
,
i9
:
''
,
i10
:
''
,
i11
:
''
,
i12
:
''
,
},
formName
:
{
i1
:
'姓名'
,
i2
:
'性别'
,
i3
:
'名族'
,
i4
:
'职务'
,
i5
:
'手机号码'
,
i6
:
'身份证号'
,
i7
:
'邮箱'
,
i8
:
'单/合住'
,
i9
:
'抬头'
,
i10
:
'税号'
,
i11
:
'地址'
,
i12
:
'开户行、账号'
,
},
}
},
methods
:
{
onSubmit
()
{
let
flag
=
true
Object
.
keys
(
this
.
form
).
map
((
item
)
=>
{
if
(
item
===
'i11'
||
item
===
'i12'
)
{
}
else
{
if
(
this
.
form
[
item
]
===
''
)
{
flag
=
false
}
}
})
if
(
!
flag
)
{
this
.
$message
(
'请完善信息'
)
}
else
{
const
param
=
{}
param
.
tag
=
2
param
.
url
=
this
.
file
const
formData
=
{}
Object
.
keys
(
this
.
form
).
map
((
name
)
=>
{
formData
[
this
.
formName
[
name
]]
=
this
.
form
[
name
]
})
param
.
table_content
=
JSON
.
stringify
(
formData
)
api
.
formCommit
(
param
).
then
((
res
)
=>
{
this
.
$message
({
message
:
'提交成功'
,
type
:
'success'
,
})
})
}
},
handleChange
(
data
)
{
this
.
file
=
data
.
data
[
0
].
full_path
},
back
()
{
this
.
$router
.
go
(
-
1
)
},
},
}
</
script
>
<
style
lang=
"scss"
scoped
>
.content-max-width
{
width
:
1112px
;
margin
:
24px
auto
0
auto
;
}
.form-box
{
padding
:
30px
0
;
width
:
430px
;
margin
:
0
auto
;
.width100
{
width
:
100%
;
}
}
.reg-form-box
{
width
:
380px
;
margin
:
0
auto
;
padding
:
24px
0
;
}
::v-deep
{
.forms
{
i
{
font-size
:
20px
;
}
input
{
border-radius
:
4px
;
}
}
}
</
style
>
src/pages/train/index.vue
浏览文件 @
a1b41e2a
差异被折叠。
点击展开。
src/pages/train/list.vue
0 → 100644
浏览文件 @
a1b41e2a
<
template
>
<div
class=
"content-max-width"
>
<div
class=
"new-tits"
>
技能培训报名
</div>
<screen-tabs
class=
"screen-tabs-box"
:activeIndex
.
sync=
"tabsIndex"
:data=
"screenTabsData"
@
tabChange=
"HandleTabChange"
></screen-tabs>
<div
class=
"train-mian"
>
<ul>
<template
v-for=
"(item, index) in tabsContentList"
>
<li
:key=
"index"
v-if=
"tabsIndex === 0 || tabsIndex === item.activeIndex"
>
<listItem
:data=
"item"
/>
</li>
</
template
>
</ul>
<div
class=
"calendar"
>
<inlineCalendar
mode=
"during"
></inlineCalendar>
<div
class=
"btn-box"
>
<div
class=
"btn"
>
确定
</div>
</div>
</div>
</div>
</div>
</template>
<
script
>
import
screenTabs
from
'@/components/tabs/screenTabs.vue'
import
noData
from
'@/components/noData.vue'
import
listItem
from
'./components/listItem.vue'
import
datalist
from
'./data.js'
export
default
{
components
:
{
screenTabs
,
listItem
,
noData
},
data
()
{
return
{
tabsIndex
:
1
,
tabsContentList
:
datalist
,
screenTabsData
:
{
name
:
'筛选:'
,
options
:
[
'全部'
,
'正在进行'
,
'未开始'
,
'已结束'
],
},
}
},
methods
:
{
HandleTabChange
(
index
)
{
this
.
tabsIndex
=
index
},
},
}
</
script
>
<
style
lang=
"scss"
scoped
>
.crumb
{
padding-top
:
24px
;
}
.pagination
{
padding
:
24px
0
;
display
:
flex
;
justify-content
:
center
;
}
.content-max-width
{
width
:
1112px
;
margin
:
0
auto
;
}
.btn-tabs-box
{
padding
:
24px
0
;
justify-content
:
left
;
}
.train-mian
{
display
:
flex
;
ul
{
width
:
700px
;
}
.calendar
{
width
:
336px
;
height
:
385px
;
background
:
#ffffff
;
box-shadow
:
0px
0px
10px
0px
rgba
(
0
,
0
,
0
,
0
.06
);
margin-left
:
auto
;
.btn-box
{
width
:
100%
;
border-top
:
1px
solid
#eee
;
overflow
:
hidden
;
.btn
{
margin-top
:
10px
;
width
:
62px
;
height
:
36px
;
background
:
linear-gradient
(
315deg
,
rgba
(
225
,
47
,
116
,
0
.83
)
0%
,
#c01540
100%
);
border-radius
:
4px
;
text-align
:
center
;
line-height
:
36px
;
color
:
#fff
;
font-size
:
14px
;
float
:
right
;
margin-right
:
24px
;
cursor
:
pointer
;
}
}
}
}
::v-deep
{
.m-row
{
&
:
:
before
{
background-color
:
#fff
!
important
;
}
}
.m-week-header
{
background
:
#fff
;
}
.m-calendar
{
.m-toolbar
{
height
:
58px
;
background
:
#fff
;
border-bottom
:
1px
solid
#eee
;
margin-bottom
:
10px
;
}
}
.m-during
{
background
:
#c01540
!
important
;
}
.m-prev-btn
{
width
:
11px
!
important
;
height
:
18px
!
important
;
background-image
:
url(https://zws-imgs-pub.ezijing.com/static/public/8cc2155bd9f98ae7e50d64bf4bad9e6a.png)
!
important
;
background-size
:
100%
100%
!
important
;
}
.m-next-btn
{
width
:
11px
!
important
;
height
:
18px
!
important
;
background-image
:
url(https://zws-imgs-pub.ezijing.com/static/public/ef4abd96b29419b0eb182c291f802488.png)
!
important
;
background-size
:
100%
100%
!
important
;
}
}
.new-tits
{
text-align
:
center
;
font-size
:
20px
;
font-weight
:
bold
;
color
:
#444444
;
line-height
:
33px
;
margin-bottom
:
16px
;
margin-top
:
36px
;
}
</
style
>
src/router/index.js
浏览文件 @
a1b41e2a
...
...
@@ -13,23 +13,17 @@ const routes = [
{
path
:
''
,
component
:
()
=>
import
(
'@/pages/home/index.vue'
)
},
// 工作动态
{
path
:
'/news'
,
component
:
()
=>
import
(
'@/pages/news/index.vue'
)
},
// 工作动态详情
{
path
:
'/news/detail'
,
component
:
()
=>
import
(
'@/pages/news/detail.vue'
)
},
// 1+x产品
{
path
:
'/product'
,
component
:
()
=>
import
(
'@/pages/product/index.vue'
)
},
// 技能培训
{
path
:
'/teacher'
,
component
:
()
=>
import
(
'@/pages/teachers/index.vue'
)
},
// 证书成绩查询
{
path
:
'/attestation'
,
component
:
()
=>
import
(
'@/pages/attestation/index.vue'
)
},
// // 教学服务
{
path
:
'/service'
,
component
:
()
=>
import
(
'@/pages/service/index.vue'
)
},
// 技能培训
{
path
:
'/train'
,
component
:
()
=>
import
(
'@/pages/train/index.vue'
)
},
// 技能培训详情
{
path
:
'/train/list'
,
component
:
()
=>
import
(
'@/pages/train/list.vue'
)
},
{
path
:
'/train/detail'
,
component
:
()
=>
import
(
'@/pages/train/detail.vue'
)
},
// 技能培训详情->报名
{
path
:
'/train/form'
,
component
:
()
=>
import
(
'@/pages/train/form.vue'
)
},
{
path
:
'/school/form'
,
component
:
()
=>
import
(
'@/pages/train/form2.vue'
)
},
{
path
:
'/register'
,
component
:
()
=>
import
(
'@/pages/account/register.vue'
)
},
// 证书成绩查询
{
path
:
'/queryCard'
,
component
:
()
=>
import
(
'@/pages/home/queryCard.vue'
)
},
],
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论