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

refactor: 重构

上级 d6302abe
......@@ -36,7 +36,7 @@ export function getApplication(params) {
return httpRequest.get(`/api/enrollment/v1.0/application-materials/${projectId}`, { params })
}
/**
* 获取报名信息
* 更新报名信息
*/
export function updateApplication(data) {
return httpRequest.post(`/api/enrollment/v1.0/application-materials/${projectId}/put`, data, {
......
......@@ -116,7 +116,7 @@ export default {
},
// 报名申请
toApplication() {
this.$router.push('/my/application?active=application_info')
this.$router.push('/my/application')
},
// 申请面试
toInterview() {
......@@ -212,6 +212,7 @@ export default {
.card {
background: #fff;
border-radius: 5px;
margin: 0;
}
.card + .card {
margin-top: 10px;
......
import { STAGE_LIST } from '../../index'
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
this.form.options.disabled = STAGE_LIST.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
})
}
},
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 === '未毕业'
}
}
]
}
}
}
import { STAGE_LIST } from '../../index'
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
this.form.options.disabled = STAGE_LIST.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' }
}
}
]
}
}
}
import { STAGE_LIST } from '../../index'
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
this.form.options.disabled = STAGE_LIST.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) {
export default function (_this) {
return {
id: 'admission',
title: '入学办理',
......
import { STAGE_LIST } from '../../index'
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
this.form.options.disabled = STAGE_LIST.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
}
}
]
}
}
}
import { STAGE_LIST } from '../../index'
export default function(_this) {
export default function (_this) {
return {
required: true,
id: 'admission_xfjn',
......@@ -8,11 +7,9 @@ export default function(_this) {
// 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 { attachments = [] } = _this.detail.material
this.form.options.disabled = STAGE_LIST.findIndex(item => item === submissionStage) > 7
const PAYMENT_VOUCHER = attachments.filter(item => {
return item.file_type_id === 'PAYMENT_VOUCHER'
})
......@@ -37,7 +34,7 @@ export default function(_this) {
// next: { to: { query: { active: 'admission_xy' } } },
submitText: '提交',
options: { 'label-position': 'top' },
// hint: `
// prepend: `
// <p><strong>一、对公收款银行信息:</strong></p>
// <p>户名:清控紫荆( 北京)教育科技股份有限公司</p>
// <p>帐号:694485289</p>
......
import { STAGE_LIST } from '../../index'
export default function(_this) {
export default function (_this) {
return {
id: 'admission_xy',
title: '入学协议',
required: true,
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
this.form.options.disabled = STAGE_LIST.findIndex(item => item === submissionStage) > 7
const { attachments = [] } = _this.detail.material
const ADMISSION_AGREEMENT = attachments.filter(item => {
return item.file_type_id === 'ADMISSION_AGREEMENT'
})
......@@ -31,7 +27,6 @@ export default function(_this) {
}
},
form: {
prev: { to: { query: { active: 'admission_xfjn' } } },
submitText: '提交',
options: { 'label-position': 'top' },
items: [
......
import { STAGE_LIST } from '../../index'
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
this.form.options.disabled = STAGE_LIST.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>`
}
]
}
}
import { STAGE_LIST } from '../../index'
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
this.form.options.disabled = STAGE_LIST.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>`
}
]
}
}
}
......@@ -2,16 +2,14 @@
<app-layout>
<vue-form
:menus="menus"
:disabled="isSubmitted"
:default-active="currentActive"
@page-change="handlePageChange"
@success="handleSuccess"
@error="handleError"
@back="$router.push('/my/account')"
@prev="handlePrev"
@next="handleNext"
@uploaded="getApplication"
v-if="detail"
>
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>
......@@ -41,6 +39,7 @@ import getMenu from './form'
import * as api from '@/api/my'
import AppXy from './xy'
import AppComplete from '../application/complete.vue'
import { STAGE_LIST } from '../index'
export default {
components: { AppLayout, AppXy, AppComplete },
......@@ -69,7 +68,7 @@ export default {
computed: {
isSubmitted() {
if (this.detail) {
return this.detail.material.submission_stage === 'PAYMENT'
return STAGE_LIST.findIndex(item => item === this.detail.material.submission_stage) > 7
}
return false
},
......@@ -89,13 +88,8 @@ export default {
methods: {
// 获取报名信息
getApplication() {
api.getApplication().then(response => {
const { data, error, message } = response
if (error.toString() === '0') {
this.detail = data
} else {
this.$message.error(message)
}
api.getApplication().then(res => {
this.detail = res.data
})
},
changeSubmissionStage(callback) {
......@@ -122,12 +116,7 @@ export default {
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' } })
......
......@@ -161,7 +161,7 @@ export default {
methods: {
// 获取报名信息
getApplication() {
api.getApplication(this.$route.query).then(response => {
api.getApplication().then(response => {
const { data, error, message } = response
if (error.toString() === '0') {
this.detail = data
......
......@@ -2,7 +2,7 @@
* 申请声明
*/
export default function(_this) {
export default function (_this) {
return {
id: 'application_declare',
title: '申请声明',
......@@ -10,39 +10,17 @@ export default function(_this) {
return _this.visible
},
get: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`,
callback(data) {
const { submission_stage: submissionStage = 'FILLING' } = data.data.material
const isSubmitted = submissionStage !== 'FILLING'
this.form.options.disabled = isSubmitted
if (isSubmitted) {
return { isAgree: [1] }
}
return { isAgree: [] }
}
},
update: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/submit/${process.env.projectId}`,
callback() {
_this.getApplication()
this.form.options.disabled = true
// _this.$router.push({ path: this.$route.path, query: { active: 'application_pay' } })
// _this.$router.push({ path: '/my/interview' })
if (_this.hasPay) {
_this.$router.push({ path: this.$route.path, query: { active: 'application_pay' } })
} else {
_this.$router.push({ path: '/my/interview' })
}
},
errorCallback() {
_this.completeVisible = true
return _this.isSubmitted ? { isAgree: [1] } : { isAgree: [] }
}
},
onUpdate() {
_this.handleSubmit()
},
form: {
prev: { to: { query: { active: 'application_info', tab: 'application_info_honor' } } },
submitText: '提交报名申请',
model: { isAgree: [] },
options: {},
items: [
{
type: 'v-checkbox',
......
......@@ -3,7 +3,7 @@ import info from './info'
// import wfzsm from './wfzzm'
import declare from './declare'
export default function(_this) {
export default function (_this) {
return {
id: 'application',
title: '报名申请',
......@@ -15,7 +15,6 @@ export default function(_this) {
{
id: 'application_pay',
title: '缴报名费',
show: false,
visible() {
return _this.visible && _this.hasPay
}
......
......@@ -2,7 +2,7 @@
* 学习目的
*/
export default function(_this) {
export default function (_this) {
return {
id: 'application_info_answer',
title: '学习目的',
......@@ -11,10 +11,8 @@ export default function(_this) {
return _this.visible
},
get: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`,
callback(data) {
const { answers = [], submission_stage: submissionStage = 'FILLING' } = data.data.material
this.form.options.disabled = submissionStage !== 'FILLING'
const { answers = [], submission_stage: submissionStage = 'FILLING' } = _this.detail.material
const [first = {}, second = {}] = answers
return {
......@@ -28,7 +26,6 @@ export default function(_this) {
}
},
update: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}/put`,
beforeRequest(data) {
return {
answers: [
......@@ -39,9 +36,6 @@ export default function(_this) {
}
},
form: {
prev: { to: { query: { active: 'application_info', tab: 'application_info_career' } }, isSubmit: true },
next: { to: { query: { active: 'application_info', tab: 'application_info_training' } }, isSubmit: true },
options: {},
items: [
{
type: 'v-input',
......
......@@ -2,7 +2,7 @@
* 工作经验
*/
export default function(_this) {
export default function (_this) {
return {
id: 'application_info_career',
title: '工作经验',
......@@ -11,26 +11,15 @@ export default function(_this) {
return _this.visible
},
get: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`,
callback(data) {
const { careers: list = [], submission_stage: submissionStage = 'FILLING' } = data.data.material
this.form.options.disabled = submissionStage !== 'FILLING'
const { careers: list = [] } = _this.detail.material
return list.length ? list : [{}]
}
},
update: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}/put`,
beforeRequest(data) {
const careers = data.map(item => {
return [
'start_date',
'end_date',
'company_name_cn',
'industry',
'dept_cn',
'position_cn',
'job_desc_cn'
].reduce((result, key) => {
return ['start_date', 'end_date', 'company_name_cn', 'industry', 'dept_cn', 'position_cn', 'job_desc_cn'].reduce((result, key) => {
result[key] = item[key]
return result
}, {})
......@@ -39,11 +28,9 @@ export default function(_this) {
}
},
form: {
prev: { to: { query: { active: 'application_info', tab: 'application_info_education' } }, isSubmit: true },
next: { to: { query: { active: 'application_info', tab: 'application_info_answer' } }, isSubmit: true },
hasAdd: true,
options: { labelWidth: '140px' },
hint: '<p style="color:#606266;padding-left:70px">无工作经验学生可不填写</p>',
prepend: '<p style="color:#606266;padding-left:70px">无工作经验学生可不填写</p>',
items: [
{
type: 'v-datepicker',
......
......@@ -2,7 +2,7 @@
* 教育背景
*/
export default function(_this) {
export default function (_this) {
return {
id: 'application_info_education',
title: '教育背景',
......@@ -11,14 +11,8 @@ export default function(_this) {
return _this.visible
},
get: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`,
callback(data) {
const {
basic_info: basicInfo = {},
educations: list = [],
submission_stage: submissionStage = 'FILLING'
} = data.data.material
this.form.options.disabled = submissionStage !== 'FILLING'
const { basic_info: basicInfo = {}, educations: list = [] } = _this.detail.material
if (list.length > 0) {
list[0].education_status = basicInfo.education_status
}
......@@ -26,16 +20,12 @@ export default function(_this) {
}
},
update: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}/put`,
beforeRequest(data) {
const educations = data.map(item => {
return ['start_date', 'end_date', 'school_type', 'school_name_cn', 'major_cn', 'degree'].reduce(
(result, key) => {
result[key] = item[key]
return result
},
{}
)
return ['start_date', 'end_date', 'school_type', 'school_name_cn', 'major_cn', 'degree'].reduce((result, key) => {
result[key] = item[key]
return result
}, {})
})
const basicInfo = { education_status: data[0].education_status }
return { basic_info: basicInfo, educations }
......@@ -45,8 +35,6 @@ export default function(_this) {
}
},
form: {
prev: { to: { query: { active: 'application_info', tab: 'application_info_profile' } } },
next: { to: { query: { active: 'application_info', tab: 'application_info_career' } }, isSubmit: true },
hasAdd: true,
options: { labelWidth: '140px' },
appendItems: [
......@@ -85,13 +73,7 @@ export default function(_this) {
},
{
type: 'v-select',
values: [
{ value: '985院校' },
{ value: '211院校' },
{ value: '省重点' },
{ value: '普通本科' },
{ value: '专科院校' }
],
values: [{ value: '985院校' }, { value: '211院校' }, { value: '省重点' }, { value: '普通本科' }, { value: '专科院校' }],
label: '学校类型',
model: 'school_type',
rules: [{ required: true, message: '请选择学校类型', trigger: 'change' }]
......
......@@ -2,7 +2,7 @@
* 个人信息
*/
export default function(_this) {
export default function (_this) {
return {
id: 'application_info_first',
title: '个人信息',
......@@ -11,14 +11,8 @@ export default function(_this) {
return this.tabActive === 'application_info_first'
},
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
this.form.options.disabled = submissionStage !== 'FILLING'
const { basic_info: basicInfo = {}, attachments = [] } = _this.detail.material
const attachment = attachments.reduce(
(result, item) => {
......@@ -37,7 +31,6 @@ export default function(_this) {
}
},
update: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}/put`,
beforeRequest(data) {
const basicInfo = ['phone_number', 'email', 'id_type'].reduce((result, key) => {
result[key] = data[key]
......@@ -47,8 +40,7 @@ export default function(_this) {
}
},
form: {
hasButton: false,
next: { to: { query: { active: 'application_info', tab: 'application_info_profile' } }, isSubmit: true },
triggerSubmitOnChangeStep: true,
options: { labelWidth: '140px' },
items: [
{
......
......@@ -2,7 +2,7 @@
* 荣誉奖励
*/
export default function(_this) {
export default function (_this) {
return {
id: 'application_info_honor',
title: '荣誉奖励',
......@@ -10,24 +10,15 @@ export default function(_this) {
return _this.visible
},
get: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`,
callback(data) {
const {
attachments = [],
honors: list = [],
submission_stage: submissionStage = 'FILLING'
} = data.data.material
this.form.options.disabled = submissionStage !== 'FILLING'
const { attachments = [], honors: list = [] } = _this.detail.material
const CERTIFICATE_OF_HONOR = attachments.filter(item => {
return item.file_type_id === 'CERTIFICATE_OF_HONOR'
})
return list.length
? list.map(item => Object.assign({}, item, { CERTIFICATE_OF_HONOR }))
: [{ CERTIFICATE_OF_HONOR }]
return list.length ? list.map(item => Object.assign({}, item, { CERTIFICATE_OF_HONOR })) : [{ CERTIFICATE_OF_HONOR }]
}
},
update: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}/put`,
beforeRequest(data) {
const honors = data.map(item => {
return ['time', 'title', 'institution_cn'].reduce((result, key) => {
......@@ -39,8 +30,6 @@ export default function(_this) {
}
},
form: {
prev: { to: { query: { active: 'application_info', tab: 'application_info_training' } }, isSubmit: true },
next: { to: { query: { active: 'application_declare' } }, isSubmit: true },
hasAdd: true,
options: { labelWidth: '140px' },
items: [
......
......@@ -4,7 +4,7 @@
import country from './country'
export default function(_this) {
export default function (_this) {
return {
id: 'application_info_profile',
title: '个人信息',
......@@ -13,15 +13,8 @@ export default function(_this) {
return _this.visible
},
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
this.form.options.disabled = submissionStage !== 'FILLING'
const { basic_info: basicInfo = {}, attachments = [] } = _this.detail.material
const attachment = attachments.reduce(
(result, item) => {
const types = ['ID_CARD_FRONT', 'ID_CARD_BACK', 'HK_ID_CARD', 'PASSPORT', 'OTHER_ID_CARD_PHOTO']
......@@ -39,11 +32,7 @@ export default function(_this) {
}
},
update: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}/put`,
beforeRequest(data) {
// let [province, city] = data.city.split('-')
// data.address_province = province
// data.address_city = city
const basicInfo = [
'phone_number',
'email',
......@@ -68,8 +57,6 @@ export default function(_this) {
}
},
form: {
prev: { to: { query: { active: 'application_info', tab: 'application_info_first' } } },
next: { to: { query: { active: 'application_info', tab: 'application_info_education' } }, isSubmit: true },
options: { labelWidth: '140px' },
items: [
{
......@@ -85,7 +72,7 @@ export default function(_this) {
model: 'email',
attrs: { placeholder: '请输入邮箱' },
rules: [{ type: 'email', required: true, message: '请输入邮箱', trigger: 'blur' }],
hint: '(后续报名信息将发送至此邮箱,请认真填写)'
append: '(后续报名信息将发送至此邮箱,请认真填写)'
},
{
type: 'v-select',
......
......@@ -2,7 +2,7 @@
* 所受培训
*/
export default function(_this) {
export default function (_this) {
return {
id: 'application_info_training',
title: '所受培训',
......@@ -10,15 +10,12 @@ export default function(_this) {
return _this.visible
},
get: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`,
callback(data) {
const { trainings: list = [], submission_stage: submissionStage = 'FILLING' } = data.data.material
this.form.options.disabled = submissionStage !== 'FILLING'
const { trainings: list = [] } = _this.detail.material
return list.length ? list : [{}]
}
},
update: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}/put`,
beforeRequest(data) {
const trainings = data.map(item => {
return ['start_date', 'end_date', 'institution_cn', 'course_cn'].reduce((result, key) => {
......@@ -30,8 +27,6 @@ export default function(_this) {
}
},
form: {
prev: { to: { query: { active: 'application_info', tab: 'application_info_answer' } }, isSubmit: true },
next: { to: { query: { active: 'application_info', tab: 'application_info_honor' } }, isSubmit: true },
hasAdd: true,
options: { labelWidth: '140px' },
items: [
......
......@@ -4,7 +4,7 @@ import { STAGE_LIST } from '../../index'
* 推荐信
*/
export default function(_this) {
export default function (_this) {
return {
id: 'application_tjx',
title: '推荐信',
......@@ -12,28 +12,20 @@ export default function(_this) {
return _this.visible
},
get: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}`,
callback(data) {
const { submission_stage: submissionStage = 'FILLING' } = data.data.material
this.form.options.disabled = STAGE_LIST.findIndex(item => item === submissionStage) > 3
const list = data.data.material.reco_letters || []
const list = _this.detail.material.reco_letters || []
return list.length ? list : [{}, {}]
}
},
update: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}/put`,
beforeRequest(data) {
return { reco_letters: data }
}
},
form: {
minlength: 2,
prev: { to: { query: { active: 'application_info', tab: 'application_info_honor' } }, isSubmit: true },
next: { to: { query: { active: 'application_wfzzm' } }, isSubmit: true },
hasAdd: true,
disabled(data) {
return !!data.letter_content
},
aside: {
prepend: {
html: '<p style="color:#33C011;">推荐人已完成</p>',
......@@ -45,9 +37,7 @@ export default function(_this) {
{
text: '再次邀请',
visible(data) {
const editable = ['PREPAYMENT', 'INTERVIEW_APPLICATION', 'AUDITION'].includes(
_this.detail.material.submission_stage
)
const editable = ['PREPAYMENT', 'INTERVIEW_APPLICATION', 'AUDITION'].includes(_this.detail.material.submission_stage)
return data.id && !data.letter_content && editable
},
onClick(data) {
......@@ -57,9 +47,7 @@ export default function(_this) {
{
text: '更换推荐人',
visible(data) {
const editable = ['PREPAYMENT', 'INTERVIEW_APPLICATION', 'AUDITION'].includes(
_this.detail.material.submission_stage
)
const editable = ['PREPAYMENT', 'INTERVIEW_APPLICATION', 'AUDITION'].includes(_this.detail.material.submission_stage)
return data.id && !data.letter_content && editable
},
onClick(data, $form) {
......@@ -96,15 +84,7 @@ export default function(_this) {
},
{
type: 'v-select',
values: [
{ value: '老师/导师' },
{ value: '领导' },
{ value: '同学' },
{ value: '同事' },
{ value: '亲属' },
{ value: '朋友' },
{ value: '其他' }
],
values: [{ value: '老师/导师' }, { value: '领导' }, { value: '同学' }, { value: '同事' }, { value: '亲属' }, { value: '朋友' }, { value: '其他' }],
label: '与推荐人关系',
model: 'provider_relationship',
rules: [{ required: true, message: '请选择与推荐人关系', trigger: 'change' }]
......
export default function(_this) {
export default function (_this) {
return {
id: 'application_wfzzm',
title: '无犯罪证明',
......@@ -6,10 +6,8 @@ export default function(_this) {
return _this.visible
},
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
this.form.options.disabled = submissionStage !== 'FILLING'
const { attachments = [] } = _this.detail.material
const NO_CRIMINAL_CERT = attachments.filter(item => {
return item.file_type_id === 'NO_CRIMINAL_CERT'
......@@ -18,9 +16,6 @@ export default function(_this) {
}
},
form: {
prev: { to: { query: { active: 'application_tjx' } } },
next: { to: { query: { active: 'application_declare' } } },
hasButton: false,
options: {},
items: [
{
......
......@@ -2,17 +2,16 @@
<app-layout>
<vue-form
:menus="menus"
:disabled="isSubmitted"
:default-active="currentActive"
:tab-active="tabActive"
@page-change="handlePageChange"
@tab-change="handleTabChange"
@update="handleUpdate"
@success="handleSuccess"
@error="handleError"
@back="$router.push('/my/account')"
@prev="handlePrev"
@next="handleNext"
v-if="detail"
>
v-if="detail">
<template #aside-append>
<div class="aside-preview" @click="dialogVisible = true" v-if="visible">预览全部</div>
<div class="aside-payment"><a href="https://accounts.ezijing.com/payment" target="_blank">查看缴费记录</a></div>
......@@ -66,42 +65,55 @@ export default {
computed: {
visible() {
return this.currentActive !== 'application_info' || this.tabActive !== 'application_info_first'
},
isSubmitted() {
const { submission_stage: submissionStage = 'FILLING' } = this.detail?.material
return submissionStage !== 'FILLING'
}
},
methods: {
// 获取报名信息
getApplication() {
api.getApplication().then(response => {
const { data, error, message } = response
if (error.toString() === '0') {
this.detail = data
if (
!data.progress.FILLING.attachments ||
data.progress.FILLING.attachments.missed_required_list.ID_CARD_PHOTO
) {
this.tabActive = 'application_info_first'
}
const { submission_stage: submissionStage = 'FILLING' } = data.material
if (submissionStage !== 'FILLING') {
this.menus[0].children.forEach(item => {
if (item.id === 'application_pay') {
item.show = true
}
})
}
} else {
this.$message.error(message)
api.getApplication().then(res => {
const { data } = res
this.detail = data
if (!data.progress.FILLING.attachments || data.progress.FILLING.attachments.missed_required_list.ID_CARD_PHOTO) {
this.tabActive = 'application_info_first'
}
})
},
// 更新报名信息
handleUpdate(data) {
api.updateApplication(data).then(res => {
this.detail = res.data
this.$message.success('保存成功')
})
},
handleSubmit(callback, params) {
api
.changeSubmissionStage(params)
.then(() => {
callback && callback()
this.getApplication()
if (this.hasPay) {
this.$router.push({ path: this.$route.path, query: { active: 'application_pay' } })
} else {
this.$router.push({ path: '/my/interview' })
}
})
.catch(() => {
this.completeVisible = true
})
},
handlePageChange(value) {
this.currentActive = value
this.$router.push({ path: this.$route.path, query: { active: value } })
console.log('页面切换了', value)
},
handleTabChange(value) {
this.tabActive = value
const query = Object.assign({}, this.$route.query, { tab: value })
this.$router.push({ query })
this.$router.push({ path: this.$route.path, query })
},
handleSuccess(data) {
console.log('提交成功了', data)
......@@ -111,12 +123,6 @@ export default {
console.log('提交失败了', data)
this.$message({ type: 'error', message: data.message })
},
handlePrev(to) {
this.$router.push(to)
},
handleNext(to) {
this.$router.push(to)
},
handlePreviewEdit(to) {
this.$router.push(to)
this.dialogVisible = false
......
import { STAGE_LIST } from '../../index'
export default function(_this) {
export default function (_this) {
return {
required: true,
id: 'interview_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
this.form.options.disabled = STAGE_LIST.findIndex(item => item === submissionStage) > 2
const { basic_info: basicInfo = {}, attachments = [] } = _this.detail.material
const attachment = attachments.reduce(
(result, item) => {
if (item.file_type_id === 'DIPLOMA_CN') {
......@@ -29,7 +25,6 @@ export default function(_this) {
}
},
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]
......@@ -37,18 +32,8 @@ export default function(_this) {
}, {})
return { basic_info: basicInfo }
}
// callback() {
// _this.changeSubmissionStage(() => {
// this.form.options.disabled = true
// // _this.$router.push('/my/interview')
// })
// }
},
form: {
prev: { to: { query: { active: 'interview_grcs' } }, isSubmit: true },
next: { to: { query: { active: 'interview_form' } }, isSubmit: true },
submitText: '提交申请',
hasButton: false,
options: { 'label-position': 'top' },
items: [
{
......@@ -73,7 +58,8 @@ export default function(_this) {
data: { file_type: 'DIPLOMA_CN' }
},
rules: { required: true, message: '请上传毕业证书' },
append: '申请者需要将本科或以上毕业证书原件扫描或者拍照后提交。<br> 可上传多个文件,请确保证书号码清晰可辨。<br> 上传文件仅限“jpg,jpeg,png”格式,文件小于10MB。',
append:
'申请者需要将本科或以上毕业证书原件扫描或者拍照后提交。<br> 可上传多个文件,请确保证书号码清晰可辨。<br> 上传文件仅限“jpg,jpeg,png”格式,文件小于10MB。',
isShow(ruleForm) {
return ruleForm.learn_status === '已毕业'
}
......
import { STAGE_LIST } from '../../index'
export default function(_this) {
export default function (_this) {
return {
required: true,
id: 'interview_cjd',
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
this.form.options.disabled = STAGE_LIST.findIndex(item => item === submissionStage) > 2
const { basic_info: basicInfo = {}, attachments = [] } = _this.detail.material
const attachment = attachments.reduce(
(result, item) => {
if (item.file_type_id === 'REPORT_CARD_CN') {
......@@ -26,7 +22,6 @@ export default function(_this) {
}
},
update: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}/put`,
beforeRequest(data) {
const basicInfo = ['gpa_score', 'average_score'].reduce((result, key) => {
result[key] = data[key]
......@@ -36,9 +31,6 @@ export default function(_this) {
}
},
form: {
prev: { to: { query: { active: 'interview_ywjl' } }, isSubmit: true },
next: { to: { query: { active: 'interview_yynl' } }, isSubmit: true },
hasButton: false,
options: { 'label-position': 'top' },
items: [
{
......
import { STAGE_LIST } from '../../index'
export default function(_this) {
export default function (_this) {
return {
required: true,
id: 'interview_form',
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
this.form.options.disabled = STAGE_LIST.findIndex(item => item === submissionStage) > 2
const { basic_info: basicInfo = {}, attachments = [] } = _this.detail.material
const attachment = attachments.reduce(
(result, item) => {
if (item.file_type_id === 'APPLICATION_FORM') {
......@@ -21,27 +18,8 @@ export default function(_this) {
return Object.assign({}, basicInfo, attachment)
}
},
// update: {
// action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/submit/${process.env.projectId}`,
// beforeRequest(data) {
// return { submission_stage: 'INTERVIEW_APPLICATION' }
// },
// // callback() {
// // _this.changeSubmissionStage(() => {
// // this.form.options.disabled = true
// // })
// // },
// errorCallback() {
// _this.completeVisible = true
// }
// },
form: {
prev: { to: { query: { active: 'interview_byzs' } } },
next: { to: { query: { active: 'application_pay' } } },
submitText: '申请面试',
hasButton: false,
model: { submission_stage: 'INTERVIEW_APPLICATION' },
options: { 'label-position': 'top' },
hasSubmit: false,
items: [
{
required: true,
......
import { STAGE_LIST } from '../../index'
export default function(_this) {
export default function (_this) {
return {
required: true,
id: 'interview_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
this.form.options.disabled = STAGE_LIST.findIndex(item => item === submissionStage) > 2
const { attachments = [] } = _this.detail.material
const PERSONAL_STATEMENT = attachments.filter(item => {
return item.file_type_id === 'PERSONAL_STATEMENT'
})
......@@ -17,10 +13,7 @@ export default function(_this) {
}
},
form: {
prev: { to: { query: { active: 'interview_tjx' } } },
next: { to: { query: { active: 'interview_byzs' } } },
hasButton: false,
options: { 'label-position': 'top' },
hasSubmit: false,
items: [
{
type: 'v-upload',
......
import { STAGE_LIST } from '../../index'
export default function(_this) {
export default function (_this) {
return {
required: true,
id: 'interview_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 { attachments = [] } = _this.detail.material
this.form.options.disabled = STAGE_LIST.findIndex(item => item === submissionStage) > 2
return attachments.reduce(
(result, item) => {
item.disabled = item.upload_operator_user_id !== _this.user?.id
......@@ -25,28 +22,10 @@ export default function(_this) {
)
}
},
// 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: 'interview_yynl' } } },
next: { to: { query: { active: 'interview_grcs' } } },
hasButton: false,
// submitText: '申请面试',
// model: { submission_stage: 'INTERVIEW_APPLICATION' },
options: {},
hint: '请上传两封推荐人署名的推荐信原件照片或扫描件(英文)',
hasSubmit: false,
prepend: '请上传两封推荐人署名的推荐信原件照片或扫描件(英文)',
items: [
{
type: 'v-upload',
......
import { STAGE_LIST } from '../../index'
export default {
id: 'interview_xwzs',
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 { attachments = [] } = _this.detail.material
this.form.options.disabled = STAGE_LIST.findIndex(item => item === submissionStage) > 2
const DEGREE_CERT_CN = attachments.filter(item => {
return item.file_type_id === 'DEGREE_CERT_CN'
})
......@@ -16,10 +12,7 @@ export default {
}
},
form: {
prev: { to: { query: { active: 'interview_byzs' } } },
next: { to: { query: { active: 'interview_ywjl' } } },
hasButton: false,
options: {},
hasSubmit: false,
items: [
{
type: 'v-upload',
......@@ -30,8 +23,7 @@ export default {
deleteAction: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/attachments/${process.env.projectId}/delete`,
data: { file_type: 'DEGREE_CERT_CN' }
},
append:
'申请者需要将学位证书原件扫描或者拍照后提交。<br>可上传多个文件,请确保证书号码清晰可辨。<br>上传文件仅限“jpg,jpeg,png”格式,文件小于10MB。'
append: '申请者需要将学位证书原件扫描或者拍照后提交。<br>可上传多个文件,请确保证书号码清晰可辨。<br>上传文件仅限“jpg,jpeg,png”格式,文件小于10MB。'
}
]
}
......
import { STAGE_LIST } from '../../index'
export default {
id: 'interview_xwzsywzm',
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 { attachments = [] } = _this.detail.material
this.form.options.disabled = STAGE_LIST.findIndex(item => item === submissionStage) > 2
const DEGREE_CERT_EN = attachments.filter(item => {
return item.file_type_id === 'DEGREE_CERT_EN'
})
......@@ -16,10 +12,7 @@ export default {
}
},
form: {
prev: { to: { query: { active: 'interview_xwzs' } } },
next: { to: { query: { active: 'interview_ywjl' } } },
hasButton: false,
options: {},
hasSubmit: false,
items: [
{
type: 'v-upload',
......
import { STAGE_LIST } from '../../index'
export default function(_this) {
export default function (_this) {
return {
id: 'interview_ywcjd',
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 { attachments = [] } = _this.detail.material
this.form.options.disabled = STAGE_LIST.findIndex(item => item === submissionStage) > 2
return attachments.reduce(
(result, item) => {
if (item.file_type_id === 'REPORT_CARD_CN') {
......@@ -24,10 +21,9 @@ export default function(_this) {
}
},
form: {
next: { to: { query: { active: 'interview_tjx' } } },
hasButton: false,
hasSubmit: false,
options: { 'label-position': 'top' },
hint: `
prepend: `
<p>已毕业学生需提交完整成绩单,未毕业学生提交现有成绩单,成绩单需要加盖学校公章</p>
<p>请将英文成绩单原件扫描或者拍照后提交。</p>
<p>获取途径:联系大学时就读学校相关部门(档案馆/教务处)获取成绩单。</p>
......
import { STAGE_LIST } from '../../index'
export default function(_this) {
export default function (_this) {
return {
required: true,
id: 'interview_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
this.form.options.disabled = STAGE_LIST.findIndex(item => item === submissionStage) > 2
const RESUME_EN = attachments.filter(item => {
return item.file_type_id === 'RESUME_EN'
})
const { attachments = [] } = _this.detail.material
const RESUME_EN = attachments.filter(item => item.file_type_id === 'RESUME_EN')
return { RESUME_EN }
}
},
form: {
// prev: { to: { query: { active: 'interview_byzs' } } },
next: { to: { query: { active: 'interview_cjd' } } },
hasButton: false,
options: { 'label-position': 'top' },
hasSubmit: false,
items: [
{
required: true,
......
import { STAGE_LIST } from '../../index'
export default function(_this) {
export default function (_this) {
return {
required: true,
id: 'interview_yynl',
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 { basic_info: basicInfo = {}, attachments = [] } = _this.detail.material
this.form.options.disabled = STAGE_LIST.findIndex(item => item === submissionStage) > 2
const attachment = attachments.reduce(
(result, item) => {
if (item.file_type_id === 'INTERNATIONAL_LANGUAGE_SCORE') {
......@@ -23,7 +20,6 @@ export default function(_this) {
}
},
update: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/${process.env.projectId}/put`,
beforeRequest(data) {
const basicInfo = ['language_score'].reduce((result, key) => {
result[key] = data[key]
......@@ -31,18 +27,8 @@ export default function(_this) {
}, {})
return { basic_info: basicInfo }
}
// callback() {
// _this.changeSubmissionStage(() => {
// this.form.options.disabled = true
// })
// }
},
form: {
prev: { to: { query: { active: 'interview_cjd' } }, isSubmit: true },
next: { to: { query: { active: 'interview_tjx' } }, isSubmit: true },
submitText: '申请面试',
hasButton: false,
model: { submission_stage: 'INTERVIEW_APPLICATION' },
options: { 'label-position': 'top' },
items: [
{
......
import { STAGE_LIST } from '../../index'
export default function(_this) {
export default function (_this) {
return {
id: 'interview_zp',
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 { attachments = [] } = _this.detail.material
this.form.options.disabled = STAGE_LIST.findIndex(item => item === submissionStage) > 2
const PERSONAL_PHOTO_FOR_ID = attachments.filter(item => {
return item.file_type_id === 'PERSONAL_PHOTO_FOR_ID'
})
return { PERSONAL_PHOTO_FOR_ID }
}
},
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: 'interview_yynl' } } },
submitText: '申请面试',
model: { submission_stage: 'INTERVIEW_APPLICATION' },
options: { 'label-position': 'top' },
items: [
{
type: 'v-upload',
......
......@@ -2,21 +2,21 @@
<app-layout>
<vue-form
:menus="menus"
:disabled="isSubmitted"
:default-active="currentActive"
@page-change="handlePageChange"
@update="handleUpdate"
@success="handleSuccess"
@error="handleError"
@back="$router.push('/my/account')"
@prev="handlePrev"
@next="handleNext"
>
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 === 'application_pay'">
<app-pay :disabled="isSubmitted" @submit="changeSubmissionStage" />
<app-pay :disabled="isSubmitted" @submit="handleSubmit" />
</template>
</vue-form>
<app-complete :type="1" v-model="completeVisible"></app-complete>
......@@ -80,18 +80,20 @@ export default {
methods: {
// 获取报名信息
getApplication() {
api.getApplication().then(response => {
const { data, error, message } = response
if (error.toString() === '0') {
this.detail = data
} else {
this.$message.error(message)
}
api.getApplication().then(res => {
this.detail = res.data
})
},
changeSubmissionStage(callback) {
// 更新报名信息
handleUpdate(data) {
api.updateApplication(data).then(res => {
this.detail = res.data
this.$message.success('保存成功')
})
},
handleSubmit(callback, params = { submission_stage: 'INTERVIEW_APPLICATION' }) {
api
.changeSubmissionStage({ submission_stage: 'INTERVIEW_APPLICATION' })
.changeSubmissionStage(params)
.then(response => {
this.dialogVisible = true
this.getApplication()
......@@ -114,12 +116,6 @@ export default {
handleError(data) {
console.log('提交失败了', data)
this.$message({ type: 'error', message: data.message })
},
handlePrev(to) {
this.$router.push(to)
},
handleNext(to) {
this.$router.push(to)
}
},
beforeMount() {
......
import { STAGE_LIST } from '../../index'
export default function(_this) {
return {
required: true,
id: 'admission_byzs',
title: '毕业证书或在读证明',
visible() {
return _this.isPay
},
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
this.form.options.disabled = STAGE_LIST.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' } }, isSubmit: true },
next: { to: { query: { active: 'admission_form' } }, isSubmit: true },
submitText: '提交申请',
hasButton: false,
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 === '未毕业'
}
}
]
}
}
}
import { STAGE_LIST } from '../../index'
export default function(_this) {
return {
required: true,
id: 'admission_cjd',
title: '成绩单',
visible() {
return _this.isPay
},
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
this.form.options.disabled = STAGE_LIST.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' }
}
}
]
}
}
}
import { STAGE_LIST } from '../../index'
export default function(_this) {
return {
required: true,
id: 'admission_form',
title: '申请表格',
visible() {
return _this.isPay
},
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
this.form.options.disabled = STAGE_LIST.findIndex(item => item === submissionStage) >= 6
const attachment = attachments.reduce(
(result, item) => {
if (item.file_type_id === 'APPLICATION_FORM') {
result.APPLICATION_FORM.push(item)
}
return result
},
{ APPLICATION_FORM: [] }
)
return Object.assign({}, basicInfo, attachment)
}
},
update: {
action: `${process.env.baseURL}/api/enrollment/v1.0/application-materials/submit/${process.env.projectId}`,
beforeRequest(data) {
return { submission_stage: 'REGISTRATION' }
},
callback() {
this.form.options.disabled = true
_this.dialogVisible = true
_this.getApplication()
},
errorCallback() {
_this.completeVisible = true
}
},
form: {
prev: { to: { query: { active: 'admission_byzs' } } },
submitText: '提交申请',
model: { submission_stage: 'REGISTRATION' },
options: { 'label-position': 'top' },
items: [
{
required: true,
type: 'v-upload',
model: 'APPLICATION_FORM',
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: 'APPLICATION_FORM' },
limit: 1
},
rules: [{ required: true, message: '请上传', trigger: 'change' }],
prepend: `<p>请下载填写申请表格(First Year Application Form)模板后上传 <a href="https://webapp-pub.ezijing.com/project/sit-plus/First%20Year%20Application.docx" target="_blank" download="申请表格" style="color:#aa1941;">[下载模板]</a></p>`
}
]
}
}
}
import { STAGE_LIST } from '../../index'
export default function(_this) {
return {
required: true,
id: 'admission_grcs',
title: '个人陈述',
visible() {
return _this.isPay
},
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
this.form.options.disabled = STAGE_LIST.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'
import form from './form'
export default function(_this) {
export default function (_this) {
return {
id: 'admission',
title: '综合评审',
children: [
// cjd(_this),
// tjx(_this),
// grcs(_this),
// byzs(_this),
// form(_this),
{
required: true,
id: 'application_pay',
title: '缴纳留位费',
title: '缴纳留位费'
// visible() {
// return _this.hasPay
// }
......
import { STAGE_LIST } from '../../index'
export default function(_this) {
return {
required: true,
id: 'admission_tjx',
title: '推荐信',
visible() {
return _this.isPay
},
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
this.form.options.disabled = STAGE_LIST.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
}
}
]
}
}
}
import { STAGE_LIST } from '../../index'
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
// this.form.options.disabled = STAGE_LIST.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。`
}
]
}
}
}
import { STAGE_LIST } from '../../index'
export default function(_this) {
export default function (_this) {
return {
required: true,
id: 'admission_xy',
......@@ -9,11 +7,9 @@ export default function(_this) {
// 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 { attachments = [] } = _this.detail.material
this.form.options.disabled = STAGE_LIST.findIndex(item => item === submissionStage) > 6
const ADMISSION_AGREEMENT = attachments.filter(item => {
return item.file_type_id === 'ADMISSION_AGREEMENT'
})
......@@ -21,8 +17,6 @@ export default function(_this) {
}
},
form: {
// prev: { to: { query: { active: 'admission_cjd' } } },
// next: { to: { query: { active: 'admission_xfjn' } } },
hasButton: false,
options: { 'label-position': 'top' },
items: [
......
import { STAGE_LIST } from '../../index'
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
this.form.options.disabled = STAGE_LIST.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>`
}
]
}
}
import { STAGE_LIST } from '../../index'
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
this.form.options.disabled = STAGE_LIST.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>`
}
]
}
}
}
......@@ -2,16 +2,15 @@
<app-layout>
<vue-form
:menus="menus"
:disabled="isSubmitted"
:default-active="currentActive"
@page-change="handlePageChange"
@update="handleUpdate"
@success="handleSuccess"
@error="handleError"
@back="$router.push('/my/account')"
@prev="handlePrev"
@next="handleNext"
@uploaded="getApplication"
v-if="detail"
>
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>
......@@ -46,6 +45,7 @@ import * as api from '@/api/my'
import AppXy from './xy'
import AppComplete from '../application/complete.vue'
import AppPay from './pay.vue'
import { STAGE_LIST } from '../index'
export default {
components: { AppLayout, AppXy, AppComplete, AppPay },
......@@ -75,7 +75,7 @@ export default {
computed: {
isSubmitted() {
if (this.detail) {
return this.detail.material.submission_stage === 'PAYMENT'
return STAGE_LIST.findIndex(item => item === this.detail.material.submission_stage) > 6
}
return false
},
......@@ -95,16 +95,18 @@ export default {
methods: {
// 获取报名信息
getApplication() {
api.getApplication().then(response => {
const { data, error, message } = response
if (error.toString() === '0') {
this.detail = data
} else {
this.$message.error(message)
}
api.getApplication().then(res => {
this.detail = res.data
})
},
changeSubmissionStage(callback) {
// 更新报名信息
handleUpdate(data) {
api.updateApplication(data).then(res => {
this.detail = res.data
this.$message.success('保存成功')
})
},
changeSubmissionStage(callback, params = { submission_stage: 'REGISTRATION' }) {
api
.changeSubmissionStage({ submission_stage: 'REGISTRATION' })
.then(() => {
......@@ -128,12 +130,6 @@ export default {
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/review', query: { active: 'application_pay' } })
......
......@@ -43,7 +43,7 @@ export default {
]
},
// Global CSS: https://go.nuxtjs.dev/config-css
css: ['vant/lib/index.css', '@ezijing/vue-form/dist/vue-form.css', 'assets/theme/index.css', 'assets/css/base.css'],
css: ['vant/lib/index.css', '@ezijing/vue-form/style.css', 'assets/theme/index.css', 'assets/css/base.css'],
// Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
plugins: [
......
......@@ -8,12 +8,12 @@
"name": "project-pc",
"version": "1.0.0",
"dependencies": {
"@ezijing/vue-form": "^2.3.15",
"@ezijing/vue-form": "^2.5.16",
"axios": "^0.21.1",
"cookie-universal-nuxt": "^2.1.4",
"core-js": "^3.9.1",
"core-js": "^3.36.0",
"driver.js": "^0.9.8",
"element-ui": "^2.15.1",
"element-ui": "^2.15.14",
"file-saver": "^2.0.5",
"lodash": "^4.17.21",
"nuxt": "^2.17.3",
......@@ -2611,26 +2611,23 @@
}
},
"node_modules/@ezijing/vue-form": {
"version": "2.3.15",
"resolved": "https://registry.npmjs.org/@ezijing/vue-form/-/vue-form-2.3.15.tgz",
"integrity": "sha512-SI3WPWxZbzVkYhOaiiIGjxlRf9Ii9VqPfzqHuzHoCigz3vC4x/BXkZS0dUTyK9F3jvWpU1AQxCBxsAvsiEbSGg==",
"version": "2.5.16",
"resolved": "https://registry.npmjs.org/@ezijing/vue-form/-/vue-form-2.5.16.tgz",
"integrity": "sha512-do+2SXczOXSX0nkzv12M0G7C/rpZclkTDDvz+mAPgTGNZxwavx8bedOGEep1+wLJg/9zXk4Q2en/TpgJkWe/kA==",
"dependencies": {
"@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
"@vue/babel-preset-jsx": "^1.1.2",
"axios": "^0.20.0",
"core-js": "^3.6.5",
"element-ui": "^2.14.1",
"qs": "^6.9.4",
"vue": "^2.6.12"
"axios": "^1.6.7",
"element-ui": "^2.15.14",
"vue": "^2.7.16"
}
},
"node_modules/@ezijing/vue-form/node_modules/axios": {
"version": "0.20.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.20.0.tgz",
"integrity": "sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==",
"deprecated": "Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410",
"version": "1.6.7",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz",
"integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==",
"dependencies": {
"follow-redirects": "^1.10.0"
"follow-redirects": "^1.15.4",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
},
"node_modules/@gar/promisify": {
......@@ -4643,6 +4640,11 @@
"babel-runtime": "6.x"
}
},
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
......@@ -5624,6 +5626,17 @@
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
......@@ -6400,6 +6413,14 @@
"resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz",
"integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="
},
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
......@@ -6620,9 +6641,9 @@
"integrity": "sha512-zjqzx4N7xGdl5468G+vcgzDhaHkaYgVcf9MqgexcTqsl2UHSCmOj/Bi3HAprg4BZCpC7HyD8a6nZl6QAZf72gw=="
},
"node_modules/element-ui": {
"version": "2.15.1",
"resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.15.1.tgz",
"integrity": "sha512-TqlScAKGH97XndSScUDeEHIzL1x7yg7DvQdKPEOUdiDcyIz3y3FJJBlpHYaJT96FOn1xpIcUZb+I2FJeU9EcrQ==",
"version": "2.15.14",
"resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.15.14.tgz",
"integrity": "sha512-2v9fHL0ZGINotOlRIAJD5YuVB8V7WKxrE9Qy7dXhRipa035+kF7WuU/z+tEmLVPBcJ0zt8mOu1DKpWcVzBK8IA==",
"dependencies": {
"async-validator": "~1.8.1",
"babel-helper-vue-jsx-merge-props": "^2.0.0",
......@@ -6630,6 +6651,9 @@
"normalize-wheel": "^1.0.1",
"resize-observer-polyfill": "^1.5.0",
"throttle-debounce": "^1.0.1"
},
"peerDependencies": {
"vue": "^2.5.17"
}
},
"node_modules/elliptic": {
......@@ -7333,11 +7357,22 @@
}
},
"node_modules/follow-redirects": {
"version": "1.13.3",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz",
"integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==",
"version": "1.15.5",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
"integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
"engines": {
"node": ">=4.0"
},
"peerDependenciesMeta": {
"debug": {
"optional": true
}
}
},
"node_modules/for-each": {
......@@ -7356,6 +7391,19 @@
"node": ">=0.10.0"
}
},
"node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/fraction.js": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
......@@ -12144,6 +12192,11 @@
"resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz",
"integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q=="
},
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
"node_modules/prr": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
......@@ -17505,25 +17558,23 @@
"integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw=="
},
"@ezijing/vue-form": {
"version": "2.3.15",
"resolved": "https://registry.npmjs.org/@ezijing/vue-form/-/vue-form-2.3.15.tgz",
"integrity": "sha512-SI3WPWxZbzVkYhOaiiIGjxlRf9Ii9VqPfzqHuzHoCigz3vC4x/BXkZS0dUTyK9F3jvWpU1AQxCBxsAvsiEbSGg==",
"version": "2.5.16",
"resolved": "https://registry.npmjs.org/@ezijing/vue-form/-/vue-form-2.5.16.tgz",
"integrity": "sha512-do+2SXczOXSX0nkzv12M0G7C/rpZclkTDDvz+mAPgTGNZxwavx8bedOGEep1+wLJg/9zXk4Q2en/TpgJkWe/kA==",
"requires": {
"@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
"@vue/babel-preset-jsx": "^1.1.2",
"axios": "^0.20.0",
"core-js": "^3.6.5",
"element-ui": "^2.14.1",
"qs": "^6.9.4",
"vue": "^2.6.12"
"axios": "^1.6.7",
"element-ui": "^2.15.14",
"vue": "^2.7.16"
},
"dependencies": {
"axios": {
"version": "0.20.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.20.0.tgz",
"integrity": "sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==",
"version": "1.6.7",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz",
"integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==",
"requires": {
"follow-redirects": "^1.10.0"
"follow-redirects": "^1.15.4",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
}
}
......@@ -19137,6 +19188,11 @@
"babel-runtime": "6.x"
}
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
......@@ -19838,6 +19894,14 @@
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
......@@ -20399,6 +20463,11 @@
"resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz",
"integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
"depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
......@@ -20582,9 +20651,9 @@
"integrity": "sha512-zjqzx4N7xGdl5468G+vcgzDhaHkaYgVcf9MqgexcTqsl2UHSCmOj/Bi3HAprg4BZCpC7HyD8a6nZl6QAZf72gw=="
},
"element-ui": {
"version": "2.15.1",
"resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.15.1.tgz",
"integrity": "sha512-TqlScAKGH97XndSScUDeEHIzL1x7yg7DvQdKPEOUdiDcyIz3y3FJJBlpHYaJT96FOn1xpIcUZb+I2FJeU9EcrQ==",
"version": "2.15.14",
"resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.15.14.tgz",
"integrity": "sha512-2v9fHL0ZGINotOlRIAJD5YuVB8V7WKxrE9Qy7dXhRipa035+kF7WuU/z+tEmLVPBcJ0zt8mOu1DKpWcVzBK8IA==",
"requires": {
"async-validator": "~1.8.1",
"babel-helper-vue-jsx-merge-props": "^2.0.0",
......@@ -21149,9 +21218,9 @@
}
},
"follow-redirects": {
"version": "1.13.3",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz",
"integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA=="
"version": "1.15.5",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
"integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw=="
},
"for-each": {
"version": "0.3.3",
......@@ -21166,6 +21235,16 @@
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
"integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ=="
},
"form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
}
},
"fraction.js": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
......@@ -24384,6 +24463,11 @@
"resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz",
"integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q=="
},
"proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
"prr": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
......@@ -10,12 +10,12 @@
"generate": "nuxt generate"
},
"dependencies": {
"@ezijing/vue-form": "^2.3.15",
"@ezijing/vue-form": "^2.5.16",
"axios": "^0.21.1",
"cookie-universal-nuxt": "^2.1.4",
"core-js": "^3.9.1",
"core-js": "^3.36.0",
"driver.js": "^0.9.8",
"element-ui": "^2.15.1",
"element-ui": "^2.15.14",
"file-saver": "^2.0.5",
"lodash": "^4.17.21",
"nuxt": "^2.17.3",
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论