提交 a70255dd authored 作者: 王鹏飞's avatar 王鹏飞

chore(报名申请): 新增综合评审

上级 9f4f4562
...@@ -12,11 +12,12 @@ ...@@ -12,11 +12,12 @@
<ul class="nav"> <ul class="nav">
<li class="nav-application" @click="toApplication"></li> <li class="nav-application" @click="toApplication"></li>
<li class="nav-interview" @click="toInterview"></li> <li class="nav-interview" @click="toInterview"></li>
<li class="nav-review" @click="toReview"></li>
<li class="nav-admission" @click="toAdmission"></li> <li class="nav-admission" @click="toAdmission"></li>
</ul> </ul>
<div class="progress"> <div class="progress">
<el-steps :active="activeProgress" finish-status="success" align-center> <el-steps :active="activeProgress" finish-status="success" align-center>
<el-step v-for="(item, index) in 3" :key="index"> <el-step v-for="(item, index) in 4" :key="index">
<template #title>{{ getProgressStatusText(index) }}</template> <template #title>{{ getProgressStatusText(index) }}</template>
</el-step> </el-step>
</el-steps> </el-steps>
...@@ -51,8 +52,9 @@ export default { ...@@ -51,8 +52,9 @@ export default {
submissionStage: { submissionStage: {
0: ['FILLING', 'PREPAYMENT'], 0: ['FILLING', 'PREPAYMENT'],
1: ['INTERVIEW_APPLICATION', 'AUDITION', 'INTERVIEW'], 1: ['INTERVIEW_APPLICATION', 'AUDITION', 'INTERVIEW'],
2: ['REGISTRATION', 'PAYMENT'], 2: ['REGISTRATION'],
3: ['CLOSED'] 3: ['PAYMENT'],
4: ['CLOSED']
}, },
result: {}, result: {},
welcomeShow: false welcomeShow: false
...@@ -117,12 +119,19 @@ export default { ...@@ -117,12 +119,19 @@ export default {
} }
this.$router.push('/my/interview') this.$router.push('/my/interview')
}, },
// 办理入学 toReview() {
toAdmission() {
if (this.activeProgress < 2) { if (this.activeProgress < 2) {
this.$message.warning('请等待面试结果') this.$message.warning('请等待面试结果')
return return
} }
this.$router.push('/my/review')
},
// 办理入学
toAdmission() {
if (this.activeProgress < 3) {
this.$message.warning('请完成综合评审')
return
}
this.$router.push('/my/admission') this.$router.push('/my/admission')
}, },
handleStart() { handleStart() {
...@@ -165,9 +174,17 @@ export default { ...@@ -165,9 +174,17 @@ export default {
} }
}, },
{ {
element: '.nav-admission', element: '.nav-review',
popover: { popover: {
title: '第三步:', title: '第三步:',
description: '点击<span style="color:#af1b40">综合评审</span>,进入综合评审材料的上传。',
position: 'bottom-right'
}
},
{
element: '.nav-admission',
popover: {
title: '第四步:',
description: '点击<span style="color:#af1b40">办理入学</span>,进入办理入学材料的上传。', description: '点击<span style="color:#af1b40">办理入学</span>,进入办理入学材料的上传。',
position: 'bottom-right' position: 'bottom-right'
} }
...@@ -218,6 +235,13 @@ export default { ...@@ -218,6 +235,13 @@ export default {
background-image: url('https://webapp-pub.ezijing.com/project/application/images/my_02_hover.png'); background-image: url('https://webapp-pub.ezijing.com/project/application/images/my_02_hover.png');
} }
} }
.nav-review {
background-image: url('https://webapp-pub.ezijing.com/project/application/images/my_review.png');
&:hover {
background-image: url('https://webapp-pub.ezijing.com/project/application/images/my_review_hover.png');
}
}
.nav-admission { .nav-admission {
background-image: url('https://webapp-pub.ezijing.com/project/application/images/my_03.png'); background-image: url('https://webapp-pub.ezijing.com/project/application/images/my_03.png');
&:hover { &:hover {
......
import cjd from './cjd' // import cjd from './cjd'
import byzs from './byzs' // import byzs from './byzs'
// import ywjl from './ywjl' // import ywjl from './ywjl'
// import xy from './xy' import xy from './xy'
import xfjn from './xfjn' import xfjn from './xfjn'
import tjx from './tjx' // import tjx from './tjx'
import grcs from './grcs' // import grcs from './grcs'
// import yynl from './yynl' // import yynl from './yynl'
export default function(_this) { export default function(_this) {
return { return {
id: 'admission', id: 'admission',
title: '入学办理', title: '入学办理',
children: [cjd(_this), tjx(_this), grcs(_this), byzs(_this), xfjn(_this)] children: [xfjn(_this), xy(_this)]
} }
} }
...@@ -3,9 +3,9 @@ export default function(_this) { ...@@ -3,9 +3,9 @@ export default function(_this) {
required: true, required: true,
id: 'admission_xfjn', id: 'admission_xfjn',
title: '缴费凭证', title: '缴费凭证',
visible() { // visible() {
return _this.hasPay // return _this.hasPay
}, // },
get: { get: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`, action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`,
callback(data) { callback(data) {
...@@ -28,7 +28,7 @@ export default function(_this) { ...@@ -28,7 +28,7 @@ export default function(_this) {
} }
}, },
form: { form: {
prev: { to: { query: { active: 'admission_byzs' } } }, next: { to: { query: { active: 'admission_xy' } } },
hasButton: false, hasButton: false,
options: { 'label-position': 'top' }, options: { 'label-position': 'top' },
hint: ` hint: `
......
...@@ -2,11 +2,21 @@ export default function(_this) { ...@@ -2,11 +2,21 @@ export default function(_this) {
return { return {
id: 'admission_xy', id: 'admission_xy',
title: '入学协议', title: '入学协议',
required: true,
get: { get: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`, action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`,
callback(data) { callback(data) {
const { attachments = [], submission_stage: submissionStage = 'FILLING' } = data.data.material const { attachments = [], submission_stage: submissionStage = 'FILLING' } = data.data.material
const stageList = ['FILLING', 'PREPAYMENT', 'INTERVIEW_APPLICATION', 'AUDITION', 'INTERVIEW', 'PAYMENT', 'REGISTRATION', 'CLOSED'] const stageList = [
'FILLING',
'PREPAYMENT',
'INTERVIEW_APPLICATION',
'AUDITION',
'INTERVIEW',
'PAYMENT',
'REGISTRATION',
'CLOSED'
]
this.form.options.disabled = stageList.findIndex(item => item === submissionStage) > 6 this.form.options.disabled = stageList.findIndex(item => item === submissionStage) > 6
const ADMISSION_AGREEMENT = attachments.filter(item => { const ADMISSION_AGREEMENT = attachments.filter(item => {
return item.file_type_id === 'ADMISSION_AGREEMENT' return item.file_type_id === 'ADMISSION_AGREEMENT'
...@@ -15,8 +25,7 @@ export default function(_this) { ...@@ -15,8 +25,7 @@ export default function(_this) {
} }
}, },
form: { form: {
prev: { to: { query: { active: 'admission_cjd' } } }, prev: { to: { query: { active: 'admission_xfjn' } } },
next: { to: { query: { active: 'admission_xfjn' } } },
hasButton: false, hasButton: false,
options: { 'label-position': 'top' }, options: { 'label-position': 'top' },
items: [ items: [
......
...@@ -54,7 +54,7 @@ export default { ...@@ -54,7 +54,7 @@ export default {
const menus = getMenu(this) const menus = getMenu(this)
return { return {
menus: [menus], menus: [menus],
currentActive: 'admission_cjd', currentActive: 'admission_xfjn',
dialogVisible: false, dialogVisible: false,
detail: null, detail: null,
completeVisible: false completeVisible: false
...@@ -65,7 +65,7 @@ export default { ...@@ -65,7 +65,7 @@ export default {
immediate: true, immediate: true,
handler(route) { handler(route) {
const { query = {} } = route const { query = {} } = route
this.currentActive = query.active || 'admission_cjd' this.currentActive = query.active || 'admission_xfjn'
} }
}, },
showSubmitedDialog(value) { showSubmitedDialog(value) {
......
...@@ -40,11 +40,10 @@ export default function(_this) { ...@@ -40,11 +40,10 @@ export default function(_this) {
update: { update: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}/put`, action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}/put`,
beforeRequest(data) { beforeRequest(data) {
const basicInfo = ['gpa_score'].reduce((result, key) => { const basicInfo = ['gpa_score', 'average_score'].reduce((result, key) => {
result[key] = data[key] result[key] = data[key]
return result return result
}, {}) }, {})
// const basicInfo = { gpa_score: data.gpa_score }
return { basic_info: basicInfo } return { basic_info: basicInfo }
} }
}, },
...@@ -61,6 +60,13 @@ export default function(_this) { ...@@ -61,6 +60,13 @@ export default function(_this) {
attrs: { placeholder: '请填写您的GPA成绩' }, attrs: { placeholder: '请填写您的GPA成绩' },
rules: [{ required: true, message: '请填写您的GPA成绩', trigger: 'blur' }] rules: [{ required: true, message: '请填写您的GPA成绩', trigger: 'blur' }]
}, },
{
type: 'v-input',
label: '百分制平均成绩',
model: 'average_score',
attrs: { placeholder: '请填写百分制平均成绩' },
rules: [{ required: true, message: '请填写百分制平均成绩', trigger: 'blur' }]
},
{ {
required: true, required: true,
type: 'v-upload', type: 'v-upload',
......
<template>
<div class="collapse" :class="classes">
<div class="collapse-hd">
<div class="collapse-icon" @click="toggle">
<i class="el-icon-remove-outline" v-if="isActive"></i>
<i class="el-icon-circle-plus-outline" v-else></i>
</div>
<div class="collapse-title">
<slot name="title">{{ title }}</slot>
</div>
</div>
<div class="collapse-bd" v-show="isActive">
<slot>{{ content }}</slot>
</div>
</div>
</template>
<script>
export default {
props: {
value: { type: Boolean, default: false },
title: { type: String },
content: { type: String }
},
data() {
return {
isActive: false
}
},
computed: {
classes() {
return { 'is-active': this.isActive }
}
},
methods: {
toggle() {
this.isActive = !this.isActive
this.$emit('input', this.isActive)
}
}
}
</script>
<style lang="scss" scoped>
.collapse {
margin-top: 10px;
}
.collapse-hd {
display: flex;
font-size: 14px;
line-height: 20px;
color: #222;
}
.collapse-icon {
margin-right: 6px;
font-size: 14px;
cursor: pointer;
color: #999;
}
.collapse-bd {
padding-left: 20px;
color: #666;
p {
color: #666 !important;
}
}
</style>
export default function(_this) {
return {
required: true,
id: 'admission_byzs',
title: '毕业证书或在读证明',
get: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`,
callback(data) {
const {
basic_info: basicInfo = {},
attachments = [],
submission_stage: submissionStage = 'FILLING'
} = data.data.material
const stageList = [
'FILLING',
'PREPAYMENT',
'INTERVIEW_APPLICATION',
'AUDITION',
'INTERVIEW',
'REGISTRATION',
'PAYMENT',
'CLOSED'
]
this.form.options.disabled = stageList.findIndex(item => item === submissionStage) >= 6
const attachment = attachments.reduce(
(result, item) => {
if (item.file_type_id === 'DIPLOMA_CN') {
result.DIPLOMA_CN.push(item)
}
if (item.file_type_id === 'DEGREE_CERT_CN') {
result.DEGREE_CERT_CN.push(item)
}
if (item.file_type_id === 'PROOF_READING') {
result.PROOF_READING.push(item)
}
return result
},
{ DIPLOMA_CN: [], DEGREE_CERT_CN: [], PROOF_READING: [] }
)
return Object.assign({ learn_status: basicInfo.learn_status }, attachment)
}
},
update: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}/put`,
beforeRequest(data) {
const basicInfo = ['learn_status'].reduce((result, key) => {
result[key] = data[key]
return result
}, {})
return { basic_info: basicInfo }
},
callback() {
_this.changeSubmissionStage(() => {
this.form.options.disabled = true
_this.$router.push('/my/admission')
})
}
},
form: {
prev: { to: { query: { active: 'admission_grcs' } } },
submitText: '提交申请',
options: { 'label-position': 'top' },
items: [
{
type: 'v-select',
values: [{ value: '已毕业' }, { value: '未毕业' }],
label: '您当前的学习状态',
model: 'learn_status',
rules: [{ required: true, message: '请选择', trigger: 'change' }],
append: `
提示:<br />
1、请同时上传毕业证书及学位证书(中英文)<br />
2、如尚未毕业,请上传在读证明(中英文)`
},
{
required: true,
label: '毕业证书',
type: 'v-upload',
model: 'DIPLOMA_CN',
attrs: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/put`,
deleteAction: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/delete`,
data: { file_type: 'DIPLOMA_CN' }
},
rules: { required: true, message: '请上传毕业证书' },
append:
'申请者需要将本科或以上毕业证书原件扫描或者拍照后提交。<br> 可上传多个文件,请确保证书号码清晰可辨。<br> 上传文件仅限“jpg,jpeg,png”格式,文件小于10MB。',
isShow(ruleForm) {
return ruleForm.learn_status === '已毕业'
}
},
{
required: true,
label: '学位证书',
type: 'v-upload',
model: 'DEGREE_CERT_CN',
attrs: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/put`,
deleteAction: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/delete`,
data: { file_type: 'DEGREE_CERT_CN' }
},
rules: { required: true, message: '请上传学位证书' },
append:
'已毕业学员请提交学位证书<br />申请者需要将本科或以上的学位证书原件扫描或拍照后提交<br />可上传多个文件,请确保公章清晰可辨。',
isShow(ruleForm) {
return ruleForm.learn_status === '已毕业'
}
},
{
required: true,
label: '在读证明',
type: 'v-upload',
model: 'PROOF_READING',
attrs: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/put`,
deleteAction: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/delete`,
data: { file_type: 'PROOF_READING' }
},
rules: { required: true, message: '请上传在读证明' },
append:
'未毕业学员提交加盖公章的在读证明<br/>申请者需要将本科或以上在读证明原件扫描或拍照后提交。<br> 可上传多个文件,请确保公章清晰可辨。',
isShow(ruleForm) {
return ruleForm.learn_status === '未毕业'
}
}
]
}
}
}
export default function(_this) {
return {
required: true,
id: 'admission_cjd',
title: '成绩单',
get: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`,
callback(data) {
const { attachments = [], submission_stage: submissionStage = 'FILLING' } = data.data.material
const stageList = [
'FILLING',
'PREPAYMENT',
'INTERVIEW_APPLICATION',
'AUDITION',
'INTERVIEW',
'REGISTRATION',
'PAYMENT',
'CLOSED'
]
this.form.options.disabled = stageList.findIndex(item => item === submissionStage) >= 6
return attachments.reduce(
(result, item) => {
if (item.file_type_id === 'REPORT_CARD_CN') {
result.REPORT_CARD_CN.push(item)
}
if (item.file_type_id === 'REPORT_CARD_EN') {
result.REPORT_CARD_EN.push(item)
}
return result
},
{ REPORT_CARD_CN: [], REPORT_CARD_EN: [] }
)
}
},
form: {
next: { to: { query: { active: 'admission_tjx' } } },
hasButton: false,
options: { 'label-position': 'top' },
hint: `
<p>已毕业学生需提交完整成绩单,未毕业学生提交现有成绩单,成绩单需要加盖学校公章</p>
<p>请将中英文成绩单原件扫描或者拍照后提交。</p>
<p>获取途径:联系大学时就读学校相关部门(档案馆/教务处)获取成绩单。</p>
`,
items: [
{
required: true,
type: 'v-upload',
label: '中文成绩单',
model: 'REPORT_CARD_CN',
attrs: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/put`,
deleteAction: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/delete`,
data: { file_type: 'REPORT_CARD_CN' }
}
},
{
required: true,
type: 'v-upload',
label: '英文成绩单',
model: 'REPORT_CARD_EN',
attrs: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/put`,
deleteAction: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/delete`,
data: { file_type: 'REPORT_CARD_EN' }
}
}
]
}
}
}
export default function(_this) {
return {
required: true,
id: 'admission_grcs',
title: '个人陈述',
get: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`,
callback(data) {
const { attachments = [], submission_stage: submissionStage = 'FILLING' } = data.data.material
const stageList = [
'FILLING',
'PREPAYMENT',
'INTERVIEW_APPLICATION',
'AUDITION',
'INTERVIEW',
'REGISTRATION',
'PAYMENT',
'CLOSED'
]
this.form.options.disabled = stageList.findIndex(item => item === submissionStage) >= 6
const PERSONAL_STATEMENT = attachments.filter(item => {
return item.file_type_id === 'PERSONAL_STATEMENT'
})
return { PERSONAL_STATEMENT }
}
},
form: {
prev: { to: { query: { active: 'admission_tjx' } } },
next: { to: { query: { active: 'admission_byzs' } } },
hasButton: false,
options: { 'label-position': 'top' },
items: [
{
type: 'v-upload',
required: true,
model: 'PERSONAL_STATEMENT',
attrs: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/put`,
deleteAction: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/delete`,
data: { file_type: 'PERSONAL_STATEMENT' },
limit: 1
},
append: '请上传您的个人陈述(英文)'
}
]
}
}
}
import cjd from './cjd'
import byzs from './byzs'
// import ywjl from './ywjl'
// import xy from './xy'
import xfjn from './xfjn'
import tjx from './tjx'
import grcs from './grcs'
// import yynl from './yynl'
export default function(_this) {
return {
id: 'admission',
title: '综合评审',
children: [cjd(_this), tjx(_this), grcs(_this), byzs(_this), xfjn(_this)]
}
}
export default function(_this) {
return {
required: true,
id: 'admission_tjx',
title: '推荐信',
get: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`,
callback(data) {
const { attachments = [], submission_stage: submissionStage = 'FILLING' } = data.data.material
const stageList = [
'FILLING',
'PREPAYMENT',
'INTERVIEW_APPLICATION',
'AUDITION',
'INTERVIEW',
'REGISTRATION',
'PAYMENT',
'CLOSED'
]
this.form.options.disabled = stageList.findIndex(item => item === submissionStage) >= 6
return attachments.reduce(
(result, item) => {
item.disabled = item.upload_operator_user_id !== _this.user?.id
if (item.file_type_id === 'RECOMMENDATION_LETTER') {
result.RECOMMENDATION_LETTER.push(item)
}
if (item.file_type_id === 'RECOMMENDATION_LETTER_2') {
result.RECOMMENDATION_LETTER_2.push(item)
}
return result
},
{ RECOMMENDATION_LETTER: [], RECOMMENDATION_LETTER_2: [] }
)
}
},
// update: {
// action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/submit/${process.env.projectId}`,
// beforeRequest(data) {
// return { submission_stage: 'INTERVIEW_APPLICATION' }
// },
// callback() {
// this.form.options.disabled = true
// _this.dialogVisible = true
// _this.getApplication()
// },
// errorCallback() {
// _this.completeVisible = true
// }
// },
form: {
prev: { to: { query: { active: 'admission_cjd' } } },
next: { to: { query: { active: 'admission_grcs' } } },
hasButton: false,
// submitText: '申请面试',
// model: { submission_stage: 'INTERVIEW_APPLICATION' },
options: {},
hint: '请上传两封推荐人署名的推荐信原件照片或扫描件(英文)',
items: [
{
type: 'v-upload',
model: 'RECOMMENDATION_LETTER',
attrs: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/put`,
deleteAction: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/delete`,
data: { file_type: 'RECOMMENDATION_LETTER' },
accept: 'image/*',
limit: 1
}
},
{
type: 'v-upload',
model: 'RECOMMENDATION_LETTER_2',
attrs: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/put`,
deleteAction: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/delete`,
data: { file_type: 'RECOMMENDATION_LETTER_2' },
accept: 'image/*',
limit: 1
}
}
]
}
}
}
export default function(_this) {
return {
required: true,
id: 'admission_xfjn',
title: '缴费凭证',
visible() {
return _this.hasPay
},
get: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`,
callback(data) {
const { attachments = [], submission_stage: submissionStage = 'FILLING' } = data.data.material
const stageList = [
'FILLING',
'PREPAYMENT',
'INTERVIEW_APPLICATION',
'AUDITION',
'INTERVIEW',
'REGISTRATION',
'PAYMENT',
'CLOSED'
]
// this.form.options.disabled = stageList.findIndex(item => item === submissionStage) > 6
const PAYMENT_VOUCHER = attachments.filter(item => {
return item.file_type_id === 'PAYMENT_VOUCHER'
})
return { PAYMENT_VOUCHER }
}
},
form: {
prev: { to: { query: { active: 'admission_byzs' } } },
hasButton: false,
options: { 'label-position': 'top' },
hint: `
<p><strong>一、对公收款银行信息:</strong></p>
<p>户名:清控紫荆( 北京)教育科技股份有限公司</p>
<p>帐号:694485289</p>
<p>开户行:中国民生银行股份有限公司北京魏公村支行</p>
<p style="margin-top:30px;"><strong>二、支付宝收款账户信息:</strong></p>
<p>支付宝账号:service@ezijing.com</p>
<p>支付宝户名:清控紫荆(北京)教育科技股份有限公司</p>`,
items: [
{
required: true,
type: 'v-upload',
model: 'PAYMENT_VOUCHER',
label: '上传缴费凭证',
attrs: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/put`,
deleteAction: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/delete`,
data: { file_type: 'PAYMENT_VOUCHER' }
},
append: `申请者可将转账/支付缴费凭证截图或拍照后提交。<br>
上传多个文件,请打印出来检查无误后再上传。用A4纸打印后内容需显示完整、格式整齐、字迹清晰可辨。上传文件仅限“jpg,jpeg,pdf,png”格式,文件小于10Mb。`
}
]
}
}
}
export default function(_this) {
return {
id: 'admission_xy',
title: '入学协议',
get: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`,
callback(data) {
const { attachments = [], submission_stage: submissionStage = 'FILLING' } = data.data.material
const stageList = ['FILLING', 'PREPAYMENT', 'INTERVIEW_APPLICATION', 'AUDITION', 'INTERVIEW', 'PAYMENT', 'REGISTRATION', 'CLOSED']
this.form.options.disabled = stageList.findIndex(item => item === submissionStage) > 6
const ADMISSION_AGREEMENT = attachments.filter(item => {
return item.file_type_id === 'ADMISSION_AGREEMENT'
})
return { ADMISSION_AGREEMENT }
}
},
form: {
prev: { to: { query: { active: 'admission_cjd' } } },
next: { to: { query: { active: 'admission_xfjn' } } },
hasButton: false,
options: { 'label-position': 'top' },
items: [
{
type: 'v-upload',
required: true,
label: '入学协议',
model: 'ADMISSION_AGREEMENT',
attrs: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/put`,
deleteAction: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/delete`,
data: { file_type: 'ADMISSION_AGREEMENT' }
},
prepend: `
<p><a href="https://webapp-pub.ezijing.com/project/sbu-plus/%E5%85%A5%E5%AD%A6%E5%8D%8F%E8%AE%AE.pdf" target="_blank" download="入学协议">下载入学协议</a></p>
<p>申请者可将签字后的入学协议原件扫描或拍照后提交。</p>
<p>学员应仔细阅读《入学协议》以及课程介绍,如对入学协议或课程有异议,请第一时间与课程顾问咨询确认。请用A4纸打印后,在入学协议上签上姓名和日期,内容需显示完整、格式整齐、字迹清晰可辨。上传文件仅限“jpg,jpeg,pdf,png”格式,文件小于10Mb。</p>
`
}
]
}
}
}
export default {
id: 'admission_ywjl',
title: '英文简历',
get: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`,
callback(data) {
const { attachments = [], submission_stage: submissionStage = 'FILLING' } = data.data.material
const stageList = [
'FILLING',
'PREPAYMENT',
'INTERVIEW_APPLICATION',
'AUDITION',
'INTERVIEW',
'PAYMENT',
'REGISTRATION',
'CLOSED'
]
this.form.options.disabled = stageList.findIndex(item => item === submissionStage) > 6
const RESUME_EN = attachments.filter(item => {
return item.file_type_id === 'RESUME_EN'
})
return { RESUME_EN }
}
},
form: {
prev: { to: { query: { active: 'admission_byzs' } } },
next: { to: { query: { active: 'admission_xy' } } },
hasButton: false,
options: {},
items: [
{
type: 'v-upload',
required: true,
model: 'RESUME_EN',
attrs: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/put`,
deleteAction: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/delete`,
data: { file_type: 'RESUME_EN' }
},
append: `
<p>请下载填写英文简历模板后上传 [<a href="https://webapp-pub.ezijing.com/project/sit-plus/%E8%8B%B1%E6%96%87%E7%AE%80%E5%8E%86%E6%A8%A1%E6%9D%BF--SIT.doc" target="_blank" download="英文简历模板">下载模板</a>]</p>
<p>请将英文简历填写完存为"pdf"格式上传,文件小于10MB。</p>`
}
]
}
}
export default function(_this) {
return {
id: 'admission_yynl',
title: '语言能力证明',
get: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`,
callback(data) {
const { attachments = [], submission_stage: submissionStage = 'FILLING' } = data.data.material
const stageList = [
'FILLING',
'PREPAYMENT',
'INTERVIEW_APPLICATION',
'AUDITION',
'INTERVIEW',
'PAYMENT',
'REGISTRATION',
'CLOSED'
]
this.form.options.disabled = stageList.findIndex(item => item === submissionStage) > 6
return attachments.reduce(
(result, item) => {
if (item.file_type_id === 'DOMESTIC_LANGUAGE_SCORE') {
result.DOMESTIC_LANGUAGE_SCORE.push(item)
}
if (item.file_type_id === 'INTERNATIONAL_LANGUAGE_SCORE') {
result.INTERNATIONAL_LANGUAGE_SCORE.push(item)
}
return result
},
{ DOMESTIC_LANGUAGE_SCORE: [], INTERNATIONAL_LANGUAGE_SCORE: [] }
)
}
},
form: {
prev: { to: { query: { active: 'admission_cjd' } } },
next: { to: { query: { active: 'admission_tjx' } } },
hasButton: false,
options: { 'label-position': 'top' },
items: [
{
type: 'v-upload',
label: '国内语言成绩',
model: 'DOMESTIC_LANGUAGE_SCORE',
attrs: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/put`,
deleteAction: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/delete`,
data: { file_type: 'DOMESTIC_LANGUAGE_SCORE' }
},
append: `<p>有大学英语四级或六级成绩,请上传凭证</p>`
},
{
type: 'v-upload',
label: '国际语言成绩',
model: 'INTERNATIONAL_LANGUAGE_SCORE',
attrs: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/put`,
deleteAction: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/delete`,
data: { file_type: 'INTERNATIONAL_LANGUAGE_SCORE' }
},
append: `<p>有托福,雅思,GMAT,GRE或其他考试成绩,请上传凭证</p>`
}
]
}
}
}
<template>
<app-layout>
<vue-form
:menus="menus"
:default-active="currentActive"
@page-change="handlePageChange"
@success="handleSuccess"
@error="handleError"
@back="$router.push('/my/account')"
@prev="handlePrev"
@next="handleNext"
@uploaded="getApplication"
v-if="detail"
>
<template #aside-append>
<div class="aside-payment"><a href="https://accounts.ezijing.com/payment" target="_blank">查看缴费记录</a></div>
<div class="aside-logout" @click="$store.dispatch('logout')"><span>退出登录</span></div>
</template>
<!-- 入学协议 -->
<!-- <template #content v-if="currentActive === 'admission_xy'">
<app-xy />
</template> -->
</vue-form>
<el-dialog
title="综合评审资料提交成功"
:visible.sync="dialogVisible"
:center="true"
:close-on-click-modal="false"
width="348px"
>
<div class="dialog-tips">
<!-- <p>请确认是否已缴费,如未缴费点击下方缴费按钮 <br />(已缴费,请忽略)</p> -->
<div class="icon"><img src="https://webapp-pub.ezijing.com/project/application/images/icon_success.png" /></div>
</div>
<template #footer>
<!-- <el-button type="primary" @click="toPay">立即缴费</el-button> -->
<el-button type="primary" @click="dialogVisible = false">忽略</el-button>
</template>
</el-dialog>
<app-complete :type="2" v-model="completeVisible"></app-complete>
</app-layout>
</template>
<script>
import AppLayout from '../layout.vue'
import getMenu from './form'
import * as api from '@/api/my'
import AppXy from './xy'
import AppComplete from '../application/complete.vue'
export default {
components: { AppLayout, AppXy, AppComplete },
data() {
const menus = getMenu(this)
return {
menus: [menus],
currentActive: 'admission_cjd',
dialogVisible: false,
detail: null,
completeVisible: false
}
},
watch: {
$route: {
immediate: true,
handler(route) {
const { query = {} } = route
this.currentActive = query.active || 'admission_cjd'
}
},
showSubmitedDialog(value) {
this.dialogVisible = value
}
},
computed: {
isSubmited() {
if (this.detail) {
return this.detail.material.submission_stage === 'PAYMENT'
}
return false
},
showSubmitedDialog() {
return this.isSubmited && this.currentActive === 'admission_byzs'
},
user() {
return this.$store.state.user
},
hasPay() {
if (this.detail) {
return this.detail.material.submission_stage === 'CLOSED'
}
return false
}
},
methods: {
// 获取报名信息
getApplication() {
api.getApplication().then(response => {
const { data, error, message } = response
if (error.toString() === '0') {
this.detail = data
} else {
this.$message.error(message)
}
})
},
changeSubmissionStage(callback) {
api
.changeSubmissionStage({ submission_stage: 'REGISTRATION' })
.then(() => {
this.getApplication()
callback && callback()
})
.catch(() => {
this.completeVisible = true
})
},
handlePageChange(value) {
this.currentActive = value
this.$router.push({ path: this.$route.path, query: { active: value } })
console.log('页面切换了', value)
},
handleSuccess(data) {
console.log('提交成功了', data)
this.$message({ type: 'success', message: data.message })
},
handleError(data) {
console.log('提交失败了', data)
this.$message({ type: 'error', message: data.message })
},
handlePrev(to) {
this.$router.push(to)
},
handleNext(to) {
this.$router.push(to)
},
toPay() {
this.dialogVisible = false
this.$router.push({ path: '/my/admission', query: { active: 'admission_xfjn' } })
},
// 更换推荐人
changeProvider(data) {
api.updateProvider(data.id, data).then(response => {
const { error, message } = response
if (error.toString() === '0') {
this.sendToProvider(data)
// this.$message({ type: 'success', message })
} else {
this.$message.error(message)
}
})
},
// 再次邀请推荐
sendToProvider(data) {
api.sendToProvider(data.id).then(response => {
const { error, message } = response
if (error.toString() === '0') {
this.$message({ type: 'success', message })
} else {
this.$message.error(message)
}
})
},
// 发送推荐信
sendToProviders() {
api.sendToProviders().then(response => {
const { error, message } = response
if (error.toString() === '0') {
this.$message({ type: 'success', message })
} else {
this.$message.error(message)
}
})
}
},
beforeMount() {
this.getApplication()
}
}
</script>
<style lang="scss" scoped>
.dialog-tips {
text-align: center;
p {
color: #262626;
line-height: 20px;
}
.icon {
margin-top: 20px;
text-align: center;
}
}
</style>
<template>
<div class="xy">
<div class="content">
<h1>入学协议</h1>
<p>
本入学协议(以下简称“本协议”)由清控紫荆(北京)教育科技股份有限公司(以下简称“紫荆教育”或“我们”)和学员(以下简称“学员”或“您”)签订。
</p>
<p>
1.
<b>请先仔细阅读本协议内容,尤其是字体加粗部分。</b>如您对本协议内容或页面提示信息有疑问,请勿进行下一步操作。<b
>您通过页面点击或其他方式确认,即表示您已同意并签署了入学协议。本协议自您成功缴纳学费之日起生效。</b
>
</p>
<p>
2.
请悉知本协议相关的课程介绍、入学相关规章制度等资料、注册协议、所报考项目院校的规章制度、本协议明确援引的其他协议及紫荆教育已经发布的或将来可能发布的各类协议和规则,系本协议的重要组成部分,与本协议具有同等法律效力。
</p>
<p>
3. 我们有权根据需要不时地制定、修改本协议或各类规则,如本协议有任何变更,<b
>我们将通过www.ezijing.com网站公告的方式提前予以公布,变更后的协议在公告届满30日起生效。</b
>
</p>
<br />
<p><b>入学须知</b></p>
<app-collapse>
<template #title>1.本协议可能涉及以下专用词语:</template>
<p><b>项目院校</b>(是指学员通过紫荆教育所报名的学位项目的合作大学);</p>
<p>
<b>学分</b
>(学员学习完每一门课程后所获得的分数。不同的课程有不同的分数值。学分是判断学员是否完成课程的标准。根据您所选择的项目课程具体情况予以具体要求,每门课程的考核会因为课程内容和教授的教学要求而不同,具体考核将会结合作业、作业、考试或报告、课程讨论等多部分综合评判,课程任课老师、紫荆教育与学位项目合作大学有是否通过考核的最终评判权);
</p>
<p>
<b>学制</b
>(是指项目院校对学习年限的规定。根据您所选择的项目课程具体情况予以具体要求;学员应保证充足的学习时间,在规定年限内完成项目课程。);
</p>
<p>
<b>学位证书</b
>(学员获取项目院校的学位证书,需满足以下条件:符合项目院校学位证书规定的学分数量、通过项目院校学位授予标准及紫荆教育有关考核、不存在违反项目院校的规章制度的行为。另,项目院校不同及学位证书不同,则最低学分要求可能也不同。项目院校及所在的国家地区可能会有附加要求。项目院校对获取学位证书的要求具有最终解释权。);
</p>
<p><b>校友会</b>(是紫荆教育官方发起的“紫荆校友会”,学员自愿参加。);</p>
<p>
<b>知识产权</b
>(本协议项下的知识产权包括但不限于商标、专利、著作权。我们对紫荆教育的商号、商标、logo等享有知识产权。为履行本协议,我们在线上平台及线下课程中向您提供的各种形式,包括但不限于文字、软件、声音、图片、录像、表格等的作品,我们都拥有前述作品完整的知识产权;未经我们许可,您不得擅自使用、修改、复制、录像、传播、改变、散布、发行或发表上述内容,无论是否以营利为目的;您的线上课程的账号,只供您本人使用。)。
</p>
</app-collapse>
<p>2.<b>入学项目:</b></p>
<p>
<b
>项目课程为【紫荆教育-索菲亚金融方向工商管理硕士(FMBA)2021年春季班】。该项目学制为【2】年,自当期项目课程开课之日起计算。</b
>如学员因个人原因需要延长学习期限的,须至少提前<b>【3】</b>个月申请延期,批准后方可延期毕业。最长可延期<b>【12】</b>个月,自所报名的项目课程原定毕业之日起算。
</p>
<p>
<b>课程的总学分为【48】学分,其中必修课【48】学分。先修课3门,不计入学分。</b
>课程成绩未通过需要重修或选修其它课程。重修或选修超规定的学分的,需按学分单价缴纳相关费用。
</p>
<app-collapse>
<template #title>3.<b>教学说明:</b></template>
<p>
(1)课程安排及调整。以我们和项目院校的具体安排为准。为了确保学员获得更好的课程,我们将在认为必要时,可能更新课程安排。
</p>
<p>(2)授课教师安排及调整。我们可能会调整相关课程的任课教师,该教师如与宣传材料不符以实际任课教师为准。</p>
</app-collapse>
<app-collapse>
<template #title>4.<b>费用。</b>本项目学费共计人民币【71000】元整,包含授课费用、证书费用,不包含:</template>
<p>学习期间的交通费、食宿费、邮寄费、书本费等费用;</p>
<p>海外学习、海外毕业典礼等费用;</p>
<p>毕业服装、纪念品、校友会活动等相关费用;</p>
<p>其他本协议未明示包括在学费内的费用。</p>
<p>
贷款。如您需贷款参加学习的,请自行向第三方银行或金融机构申请。请悉知,无论何种情形,我们不会为您与第三方的借贷关系承担连带或担保责任。
</p>
<p>
退费。自缴纳学费成功之日起10个自然日内,因个人原因申请退学的,我们将退还学费的80%。若超过10个自然日再提出退费申请的,将不予退费。
</p>
</app-collapse>
<app-collapse>
<template #title>5.<b>校友会及社群管理(以下将校友会及社群统称为“校友平台”)</b></template>
<p>
<b>自愿参与官方活动。</b
>为了促进学员之间的交流,我们可能分班、分期、分项目组建官方联络组,并组织各种校友线上、线下活动,您可视情况自愿选择参加。
</p>
<p>
<b>活动许可。</b
>为避免涉嫌未经审批的非法聚会的法律风险,未经我们许可,您不得以紫荆教育校友会或社群的官方名义开展各类活动。我们不干预学员之间的非官方交流。但学员不得在类似交流活动中使用紫荆教育的商号、商标、未经注册的标识等能与紫荆教育建立直接关联的素材。学员不得自行申请紫荆教育、项目院校相关的公众号、视频号、头条号等自媒体。
</p>
<p>
<b>禁止事项。</b
>您不得利用校友平台发布任何非法的或违反社会风序良俗的信息及资料,不发布损害紫荆教育声誉及商业利益的信息;不利用校友平台恶意透露其他学员他人隐私、个人信息或资料的;不误导、欺骗其他学员;不从事违反法律法规规定或干扰校友平台正常运营的行为等。
</p>
</app-collapse>
<p>6.<b>双方的权利义务</b></p>
<p>
<b>您需保证:</b
>自愿报名本项目并攻读该项目的学位;所提供的证件及填写的相关信息真实有效;严格遵守项目学校及紫荆教育的各项规章制度;按照紫荆教育专业培养方案的要求积极完成课程学习,并通过考核;不得做出有损项目学校及紫荆教育形象的行为和言论。
</p>
<p>
<b>我们将为您提供以下服务:</b
>就读期间,提供学习指导、学位授予及其他与学习相关的支持与协调工作;负责与项目院校协调、沟通学习情况;在现有技术基础上保障线上课程得以顺利进行。
</p>
<app-collapse>
<template #title>
7.<b>协议的解除与终止。</b>在下列情形下,我们有权终止本协议,已缴纳的学费不予退还。学员因下列行为给我们造成损失的,还应赔偿损失。
</template>
<p>(1)学员报名时伪造身份、学历证件的;</p>
<p>(2)学员违反学术纪律及规章制度的;</p>
<p>(3)学员违反本协议知识产权条款的,包括但不限于违规倒卖课程、违规使用听课账号等;</p>
<p>(4)学员违反校友会、社群规则给紫荆教育或其他学员造成损失或不良声誉的;</p>
<p>(5)其他严重影响紫荆教育或项目院校的声誉或利益的行为。</p>
</app-collapse>
<p>
8.
<b>不可抗力。</b
>因台风、地震、洪水、雷电、恐怖袭击、疫情防控、政治因素、院校调整等不可抗力原因导致线下课程、海外学习等活动无法正常开展的,我们将免于承担一切责任:
</p>
<p>
9.
<b>适用法律与管辖。</b>本协议的订立、效力、解释、履行和争议的解决均受中华人民共和国法律的管辖。<b
>因本协议的解释和履行产生争议的,均应提交北京市海淀区人民法院审理。</b
>
</p>
<p>
10.<b>通知。</b>所有发给学员的通知都可通过电子邮件、常规的信件或在紫荆教育平台网站显著位置公告的方式进行传送。
</p>
</div>
<div class="footer">
<el-checkbox size="medium" v-model="checked" :disabled="!!documentUrl">已阅读并同意上述合同</el-checkbox>
<el-button type="primary" :disabled="disabled" size="medium" @click="handlePrimary">{{ buttonText }}</el-button>
</div>
</div>
</template>
<script>
import AppCollapse from './components/collapse'
import * as api from '@/api/my'
export default {
components: { AppCollapse },
data() {
return {
checked: false,
sign: {},
documentUrl: '',
timer: null
}
},
watch: {
documentUrl: {
immediate: true,
handler(value) {
this.checked = !!value
}
}
},
computed: {
buttonText() {
return this.documentUrl ? '签署完成' : '立即签署'
},
disabled() {
return !this.checked || !!this.documentUrl
}
},
methods: {
createSign() {
api.createSign({ type: 'marywood-agreement' }).then(response => {
const { code, data } = response
if (code === 1) {
this.sign = data
data.flowid && this.getSignDocument(data.flowid)
} else {
this.$message.error('处理签名失败')
}
})
},
getSignDocument(flowid) {
return api.getSignDocument({ flowid, type: 'marywood-agreement' }).then(response => {
const { code, data } = response
if (code === 1) {
this.documentUrl = data.url
}
return response
})
},
setTimer() {
this.timer = setInterval(() => {
this.getSignDocument(this.sign.flowid).then(response => {
if (response.code === 1) {
this.$message({ type: 'success', message: '入学协议已签署完成' })
this.clearTimer()
}
})
}, 5000)
},
clearTimer() {
this.timer && clearInterval(this.timer)
},
handlePrimary() {
if (!this.sign.shortUrl) {
this.$message({ type: 'error', message: '缺少签名地址,请联系管理员' })
return
}
this.setTimer()
this.newWindowPreview(this.sign.shortUrl)
},
// 新窗口预览
newWindowPreview(url) {
const a = document.createElement('a')
a.href = url
a.target = '_blank'
document.body.appendChild(a)
a.click()
a.remove()
}
},
beforeMount() {
this.createSign()
},
destroyed() {
this.clearTimer()
}
}
</script>
<style lang="scss" scoped>
.xy {
h1 {
font-size: 18px;
font-weight: 600;
color: #222;
line-height: 25px;
text-align: center;
padding: 0 0 10px;
}
p {
margin-top: 10px;
font-size: 14px;
line-height: 20px;
color: #222;
}
.content {
height: 248px;
overflow-x: hidden;
overflow-y: auto;
& > p {
padding-left: 20px;
}
}
.footer {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 20px;
padding-top: 20px;
border-top: 1px solid #f1f1f1;
}
}
</style>
...@@ -31,6 +31,11 @@ export default (routes, resolve) => { ...@@ -31,6 +31,11 @@ export default (routes, resolve) => {
component: resolve(__dirname, '../modules/my/interview/index.vue'), component: resolve(__dirname, '../modules/my/interview/index.vue'),
meta: { requiredLogin: true } meta: { requiredLogin: true }
}, },
{
path: 'review',
component: resolve(__dirname, '../modules/my/review/index.vue'),
meta: { requiredLogin: true }
},
{ {
path: 'admission', path: 'admission',
component: resolve(__dirname, '../modules/my/admission/index.vue'), component: resolve(__dirname, '../modules/my/admission/index.vue'),
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论