From b3398bf0d388db660957f5b1fc0e17ee9f3fe677 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E7=AB=A5=E5=B4=87?= Date: Tue, 17 May 2022 17:31:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AD=A6=E7=94=9F=E6=8A=A5?= =?UTF-8?q?=E5=90=8D=E9=9D=99=E6=80=81=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/glcc/api.js | 11 +- src/glcc/img/student.png | Bin 0 -> 1565 bytes src/glcc/index.jsx | 12 ++ src/glcc/student/index.jsx | 362 ++++++++++++++++++++++++++++++++++++ src/glcc/student/index.scss | 277 +++++++++++++++++++++++++++ 5 files changed, 661 insertions(+), 1 deletion(-) create mode 100644 src/glcc/img/student.png create mode 100644 src/glcc/student/index.jsx create mode 100644 src/glcc/student/index.scss diff --git a/src/glcc/api.js b/src/glcc/api.js index f0f99d61a..2ca79b72a 100644 --- a/src/glcc/api.js +++ b/src/glcc/api.js @@ -16,4 +16,13 @@ export function applyGlcc(data) { method: 'post', data: data }); -} \ No newline at end of file +} + +// 获取当前学生用户报名信息 +export function getStudentApplyInfo(params) { + return fetch({ + url: `/api/studentApply/getUserApplyInfo`, + method: 'get', + params + }); +} diff --git a/src/glcc/img/student.png b/src/glcc/img/student.png new file mode 100644 index 0000000000000000000000000000000000000000..ede714eab71b20562b784aa5c0199e4c89e99f05 GIT binary patch literal 1565 zcmV+&2IBdNP)6vxk<0SZe|8k(pWZR0~V=>v_4`qIY5)<;wH$<%6T z{{V|I`r?BSW7MZoAFMxOTr4&IcyKW$^+D*8XiW_UD2cIcqEIyrDQ$tauwi%R`aQ$U zcz1SYc4pZnOLUUW?%ug`@A;hXIp^Lxf+~C^pOxG7I@*t6yGT&d8eY>r^(9~;#V6SWSbQH#P!yBz}jFLq2=$|rk zbUgF9n2z(Tw{KZW?0rri0zP|vHC)zu+3FbeG?YmRhKqGYhFFW&qgrIElSb|wkCQtk zAu8_m=tL99o&G55_(CKP$X%Ll#d=rVSdVIB)P7OaaUqi3vQ^KaGz#j$XIIoo*0mo> zwVyhIjn@o1RtsK_>JUpEgqm50+(97_dk@O-n)Q4MDuxk~4l_gw5Qn0Aq1O5V&hH0B#<#>G#JaFy>%q;( zYXL?|nnaZJ!{~W@f9=>53gL9(^+MNBa#wex>l3)ZRHLh+PJq|_oK+EsN~(kEGK%q1Tw$WBTTuwFI+|vk zDR_Gxo;&b5j8B<)#CjR$h^j%TKwR0ZvxdZ3qY!8a#;4IuOFz80P6H%Gh)z&%<$?;vU4XKA0vAsVcZ? zINJ`tf%hGhNi2A0_+FGfeH`P$`UV{dhEEECeBiwM#C=}U!0@2pHvdb7PU$7l2!7T9;f){itDoCqLlhVxDQ#+$I`gR*Dn|+D9hJSsvGOPA zav=QfuMNT;(Fr#gla2yppWC^Lg}OdH>(Pf?6 z*A=3iu!{1`{}55Uv>tu_drC+t6Yy;78}HKY3p4ZuR!XuyC_(CPi8dTq2>X|R+xdT$ zWQnW<0Qk-JPJGN$-%!Vozt9Q8Pz;5Imf>D74@d#9;()dA#evw3iMBAr=~3F5IY;jl zDdADXxo?5l_xu!c!2*Cw0mgwiVi<<0>$>s7nEBx7&)RE_=N-e`Z;wJQtQvX|6|w;B z@e1a#$6~<95CC{Z({P$b)J*FHg8l%@sHF0@N!QBMcb#hTf+Zju5tu zKSGGSqh7(b13B@Q-O0T8JKcA7oVvZ93Ht9CR^j4hmfk(YIfveQG%2_Y@!&iy&bC2yVENUA{v1Uzw#H zxjfa!%?+<&R<6JqMddkQ9de$>X>RVZ4mz>t5t{NqoQ18|{FE58lZDqT3nrf@F*`@? zb2sSTyg_vZ%7iH77*Vc5F#g7lZS>uqN9iZF!-)_jq)r23HVmSuY{Mvhev#T1Zc$q{ zONo-9Q6lEmm0ne-IYEE6-$my;9>V)q+mSv1?BFi}@mDMem1+qPi#KK4(z0lUIt^BN z;80PkieI@6D5LQD?bgk7x&3asv~>$zRl_C#z{qB^A2&5M{ZTfA3Y5!H!|i2i0ayzI z import("./help"), loading: Loading, }); +// 任务管理审核 +const Student = Loadable({ + loader: () => import("./student"), + loading: Loading, +}); const Glcc = (propsF) => { @@ -37,6 +42,13 @@ const Glcc = (propsF) => { return (
+ {/* 学生报名 */} + ( + + )} + > {/* 开源夏令营报名页面 */} { + // 进入此页面置顶 + window.scrollTo(0, 0); + if (!isGlccApplyDate) { + // 不在开源夏令营报名时间之内 + window.location.href = "/glcc"; + } else if (current_user && current_user.login) { + + } else { + window.location.href = "/login?go_page=/glcc"; + } + }, []) + + useEffect(() => { + // 获取当前用户报名信息 + current_user && getStudentApplyInfo({ userId: current_user.user_id }).then(response => { + if (response && response.message === "success" && response.data) { + let data = response.data; + let applyInfo = { + grade: data.grade, + location: data.location && data.location.split(), + mail: data.mail, + phone: data.phone, + proveAttachmentId: data.proveAttachmentId, + school: data.school, + studentName: data.studentName, + userId: current_user.user_id, + profession:data.profession, + }; + if (Array.isArray(data.registrationStudentTaskList) && data.registrationStudentTaskList.length) { + setTaskList(data.registrationStudentTaskList); + for (const [i, item] of data.registrationStudentTaskList.entries()) { + applyInfo['memo' + i] = item.memo; + applyInfo['taskId' + i] = item.taskId; + applyInfo['taskName' + i] = item.taskName; + applyInfo['memoAttachmentId'+i] =item.memoAttachmentId; + } + } + + setFieldsValue(applyInfo); + setUserApplyInfo(response.data); + } else { + setTaskList([initTask]); + } + }) + }, [current_user]) + + // 当用户输入结束时 检验用户输入是否符合规范 + function verify(dataIndex) { + validateFields([dataIndex], (error, values) => { + if (error && error[dataIndex]) { + return; + } + }) + } + + // 学生报名夏令营 + function handleSubmit(e) { + e.preventDefault(); + validateFieldsAndScroll((err, values) => { + if (!err) { + // Modal.confirm({ + // title: "报名", + // content: "确定提交报名信息,提交后您仍可修改", + // onOk: () => { + const params = { + grade: values.grade, + location: values.location.join(), + mail: values.mail, + phone: values.phone, + proveAttachmentId: values.proveAttachmentId.file ? values.proveAttachmentId.file.response.id : userApplyInfo.proveAttachmentId, + school: values.school, + profession:data.profession, + studentName: values.studentName, + userId: current_user.user_id, + registrationStudentTaskList: taskList + } + + // applyGlcc(params).then(response => { + // if (response && response.message === "success") { + // showNotification("报名成功"); + // setReload(Math.random()); + // } + // }) + // } + // }) + + console.log(params); + + } + }); + }; + + const helper = useCallback( + (label, extra, name, rules, widget) => ( + + {getFieldDecorator(name, { rules, validateFirst: true })(widget)} + + ), + [] + ); + + + // 检查文件上传是否符合规定 + function beforeUpload(file) { + // const isSmall = file.size / 1024 / 1024 < 2; + // if (!isSmall) { + // showNotification(`文件大小必须小于${2}MB!`); + // } + const isType = file.type === "image/png" || file.type === "image/jpg" || file.type === "image/jpeg"; + if (!isType) { + showNotification("只能上传png、jpg、jpeg格式文件"); + } + return isType; + } + + function getBase64(img, callback) { + const reader = new FileReader(); + reader.addEventListener('load', () => callback(reader.result)); + reader.readAsDataURL(img); + reader.onload = function (e) { + setImageUrl(e.target.result); // 上传的图片的编码 + } + } + + // 上传完成后 + function handleChange(info) { + if (info && info.file && info.file.status === "done") { + getBase64(info.file.originFileObj, imageUrl => + setImageUrl(imageUrl) + ); + } + } + + // 自荐书上传 + function bookChange(info) { + if (info.file.status === 'uploading' || info.file.status === "done" || info.file.status === 'removed') { + setLoading(true); + console.log(info.fileList); + setFiles(appendFileSizeToUploadFileAll(info.fileList).slice(-1)); + } + if (info.file.status === "done" || info.file.status === 'removed') { + setLoading(false); + } + } + + // 支持文件下载 + function download(file) { + const fileId = file.id || file.response.id; + window.open(`${current_main_site_url}/api/attachments/${fileId}`); + } + + function addTask() { + let taskListNew = [...taskList]; + taskListNew.push(initTask); + setTaskList(taskListNew); + } + + function deleteTask(i) { + let taskListNew = [...taskList]; + taskListNew.splice(i, 1); + setTaskList(taskListNew); + } + + function changeTaskItem(field, val, i) { + let taskListNew = [...taskList]; + taskListNew[i][field] = val; + setTaskList(taskListNew); + } + + return ( +
+ +
+ + 开源夏令营 + 查看项目 + 学生报名 + + +
+

申请说明:

+
1、学生报名时间为2022年5月21日-6月19日,请在报名截止时间(北京时间2022年6月19日18点)前提交报名信息。
+
2、本次GLCC夏令营基于GitLink代码托管平台完成编程任务,若您没有平台账户,请先注册后完成课题申请
+
3、每位学员最多可申请2个课题,至多有且仅有1个课题可以入选
+
4、建议在提交课题申请,与课题导师邮件沟通,详细了解课题描述、编码任务、技能要求&编程语言、预期产出结果等信息,以便您能够选择最适合的课题
+
5、提交申请后,请耐心等待,我们会在2022年7月1日公布入围结果。如有任何问题,请添加开源夏令营微信群进行咨询
+
+
+ 学生报名 +
+
申请课题
+
+

基本信息

+ {helper('学生姓名', + '', + 'studentName', + [{ required: true, message: "请正确输入学生姓名" }, + { max: 32, message: '超出限制长度32位字符,请重新编辑' }], + { verify("studentName") }} className={editable ? "" : "disabledInput"} disabled={editable ? false : true} /> + )} + {helper('所在高校', + '', + 'school', + [{ required: true, message: "请正确输入所在高校" }, + { max: 32, message: '超出限制长度32位字符,请重新编辑' }], + { verify("school") }} className={editable ? "" : "disabledInput"} disabled={editable ? false : true} /> + )} + {helper('所学专业', + '', + 'profession', + [{ max: 32, message: '超出限制长度32位字符,请重新编辑' }], + { verify("profession") }} className={editable ? "" : "disabledInput"} disabled={editable ? false : true} /> + )} + + {getFieldDecorator("location", { + rules: [] + })( + + )} + + {helper('所在年级', + '', + 'grade', + [], + + )} + {helper('联系电话', + '', + 'phone', + [{ required: true, message: "请正确输入联系电话" }], + { verify("phone") }} className={editable ? "" : "disabledInput"} disabled={editable ? false : true} /> + )} + {helper('邮箱地址', + '', + 'mail', + [{ required: true, message: "请正确输入邮箱地址" }], + { verify("mail") }} className={editable ? "" : "disabledInput"} disabled={editable ? false : true} /> + )} + +
{helper('学生证明', + '请以图片的形式上传学生证明,格式为png、jpg、jpeg', + 'proveAttachmentId', + [{ required: true, message: "请正确上传学生证明" }], + userApplyInfo && userApplyInfo.proveAttachmentId ?
+ : + {imageUrl ? avatar :
+ +
请上传学生证明
+
} +
+ )}
+ + { + taskList.map((item, i) => { + return ( + +

课题信息({i + 1}/2) {taskList.length > 1 && { deleteTask(i) }}>}

+ {helper('课题名称', + '', + 'taskName' + i, + [{ required: true, message: "请正确输入课题名称" }], + { verify("taskName" + i); changeTaskItem("taskName", e.currentTarget.value, i) }} className={editable ? "" : "disabledInput"} disabled={editable ? false : true} /> + )} +
{helper('自荐书', + '', + 'memo' + i, + [{ required: true, message: "请正确输入自荐书" }, + { max: 500, message: '超出限制长度500位字符,请重新编辑' }], +