diff --git a/src/glcc/apply/taskApply.jsx b/src/glcc/apply/taskApply.jsx
index a263f9bd..86ed6c5f 100644
--- a/src/glcc/apply/taskApply.jsx
+++ b/src/glcc/apply/taskApply.jsx
@@ -4,7 +4,7 @@ import TextArea from 'antd/lib/input/TextArea';
const Option = Select.Option;
// 课题信息编辑
function TaskApply(props) {
- const {helper, disabled, taskKey, phonereg, emailreg} = props;
+ const {helper, disabled, taskKey, phonereg, emailreg, getFieldDecorator} = props;
// 低、中、高
const difficultyList = [
{id: 1, name: "低"},
@@ -26,6 +26,9 @@ function TaskApply(props) {
return(
+
+ {getFieldDecorator(`taskId${taskKey}`, {})()}
+
{helper('课题名称',
'',
`taskName${taskKey}`,
From 316663cd1210286e637cf813bc673f8e283ab71c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B0=A2=E6=80=9D?= <2897217417@qq.com>
Date: Wed, 21 Jun 2023 11:08:06 +0800
Subject: [PATCH 04/12] =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=AF=BE=E9=A2=98?=
=?UTF-8?q?=E5=85=88=E5=88=A4=E6=96=AD=E6=9C=89=E6=97=A0=E5=AD=A6=E7=94=9F?=
=?UTF-8?q?=E6=8A=A5=E5=90=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/glcc/api.js | 11 ++++++++++-
src/glcc/apply/editInfo.jsx | 19 ++++++++++++-------
2 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/src/glcc/api.js b/src/glcc/api.js
index f15c7a95..5d930499 100644
--- a/src/glcc/api.js
+++ b/src/glcc/api.js
@@ -222,4 +222,13 @@ export function deleteApplyInfo(data) {
method: 'post',
data
});
-}
\ No newline at end of file
+}
+
+// 判断课题是否有学生报名
+export async function findStudentTaskByTaskId(params) {
+ return await fetch({
+ url: '/api/applyInformation/findStudentTaskByTaskId',
+ method: 'get',
+ params: params,
+ });
+}
diff --git a/src/glcc/apply/editInfo.jsx b/src/glcc/apply/editInfo.jsx
index b9aed5f5..b9b836e4 100644
--- a/src/glcc/apply/editInfo.jsx
+++ b/src/glcc/apply/editInfo.jsx
@@ -1,7 +1,7 @@
import React , { useCallback, useEffect , useState } from 'react';
import { Button, Form, Input, Select, Upload, message, Popconfirm } from 'antd';
import {getUploadActionUrl} from 'educoder';
-import {applyGlcc, updateApplyGlcc} from '../api';
+import {applyGlcc, findStudentTaskByTaskId, updateApplyGlcc} from '../api';
import TextArea from 'antd/lib/input/TextArea';
import { main_site_url } from '../fetch';
import TaskApply from './taskApply';
@@ -13,7 +13,7 @@ function EditRepoApplyInfo(props) {
const {form, applyInfo, current_user, round, cateList, setReload, isAddRepo, setIsAddRepo, setIsEdit, setEditRepoCount} = props;
const phonereg = /(^|\s*\+?0?0?86|\D)(1\d{2})[-\s]{0,3}(\d{4})[-\s]{0,3}(\d{4})(?=\D|$)/
const emailreg = /^[a-zA-Z0-9]+([.\-_\\]*[a-zA-Z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/
- const {getFieldDecorator, validateFields, setFieldsValue, validateFieldsAndScroll } = form;
+ const {getFieldDecorator, validateFields, setFieldsValue, validateFieldsAndScroll, getFieldValue } = form;
const [imageUrl, setImageUrl] = useState(undefined);
// 提交按钮loading效果
const [loading, setLoading] = useState(false);
@@ -159,14 +159,19 @@ function EditRepoApplyInfo(props) {
// 添加课题输入框
function addTaskApplyForm(){
- setTaskCount(taskCount.concat([taskCount.length+1]));
+ setTaskCount(taskCount.concat([taskCount[taskCount.length-1]+1]));
}
// 删除课题报名
- function deleteTaskApply(index){
- const arr = [...taskCount];
- arr.splice(index-1, 1)
- setTaskCount(arr);
+ async function deleteTaskApply(index){
+ const delTaskId = getFieldValue(`taskId${index}`);
+ const res = delTaskId ? await findStudentTaskByTaskId({ taskId: delTaskId }) : "newTask";
+ if((res && res.data && res.data.length)){
+ message.error("已有学生报名,不允许删除");
+ }else{
+ const arr = taskCount.filter(item=>item!== index);
+ setTaskCount(arr);
+ }
}
// 取消编辑点击函数
From 9b3620ea7db38b455ee3ec2fff327a8576649c4b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B0=A2=E6=80=9D?= <2897217417@qq.com>
Date: Mon, 26 Jun 2023 10:23:15 +0800
Subject: [PATCH 05/12] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=AE=A1=E7=90=86?=
=?UTF-8?q?=E5=91=98=E6=9F=A5=E7=9C=8B=E8=AF=BE=E9=A2=98=E6=8A=A5=E5=90=8D?=
=?UTF-8?q?=E4=BF=A1=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/glcc/check/index.jsx | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/glcc/check/index.jsx b/src/glcc/check/index.jsx
index 74ab5162..76c10ff7 100644
--- a/src/glcc/check/index.jsx
+++ b/src/glcc/check/index.jsx
@@ -131,9 +131,9 @@ function Check({ current_user, showNotification, currentRound }) {
{record.locked && !record.used && }
{/* 学生已经被其他导师锁定 */}
{record.locked && record.used && }
- {/* 学生未被锁定 */}
- {!record.locked && !record.used && (text ? :
- )}
+ {/* 导师邮箱与系统绑定邮箱进行判断 + 学生未被锁定 */}
+ {record.tutorMail === current_user.email && (!record.locked && !record.used && (text ? :
+ ))}
)
})
From 5de1226ef79170b5b1aea8a22e1d20abf9b0161e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B0=A2=E6=80=9D?= <2897217417@qq.com>
Date: Tue, 27 Jun 2023 15:17:27 +0800
Subject: [PATCH 06/12] =?UTF-8?q?=E5=AD=A6=E7=94=9F-=E8=AF=BE=E9=A2=98?=
=?UTF-8?q?=E5=8C=B9=E9=85=8D+=E5=AD=A6=E7=94=9F=E8=A1=A5=E5=BD=95?=
=?UTF-8?q?=E6=8A=A5=E5=90=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/glcc/index.jsx | 14 +++-
src/glcc/project/taskList/index.jsx | 8 +-
src/glcc/student/index.jsx | 116 ++++++++--------------------
3 files changed, 48 insertions(+), 90 deletions(-)
diff --git a/src/glcc/index.jsx b/src/glcc/index.jsx
index eabbd26b..c34dfd08 100644
--- a/src/glcc/index.jsx
+++ b/src/glcc/index.jsx
@@ -133,6 +133,8 @@ const Glcc = (propsF) => {
// 用户已报名课题id数组
const [applyTaskId, setApplyTaskId] = useState({});
+ // 用户当前有效报名课题id数组(补录阶段subround: 1)
+ const [apply1TaskId, setApply1TaskId] = useState({});
// 刷新用户课题报名信息
const [studentInfoReset, setStudentInfoReset] = useState(undefined);
const [cancelCount,setCancelCount]=useState(0);
@@ -164,13 +166,19 @@ const Glcc = (propsF) => {
if(response && response.message === "success"){
// setData(response.data.rows);
const data = {};
+ const data1 = {};
response.data && response.data.registrationStudentTaskList.map(item=>{
data[item.taskId] = item.id;
item.locked && setLockedTaskName(item.taskName);
item.passStatus && item.mediumExaminationPass && setCheckedTaskId(item.taskId);
item.passStatus && item.mediumExaminationPass && setStudentRegId(item.studentRegId);
+ // 取当前报名的课题数()
+ if(item.subRound === 1){
+ data1[item.taskId] = item.id;
+ }
})
setApplyTaskId(data);
+ setApply1TaskId(data1);
response.data && setCancelCount(Number(response.data.cancelCount));
}
})
@@ -183,7 +191,7 @@ const Glcc = (propsF) => {
// 判断该学生是否已经被某位导师选中
if(lockedTaskName){
message.error(`由于你已入选 ${lockedTaskName} 课题,无法申请其他课题`);
- }else if(applyTaskId && Object.keys(applyTaskId).length >= 2){
+ }else if(apply1TaskId && Object.keys(apply1TaskId).length >= 2){
// 判断用户是否已经报名两个课题
message.error('最多只能同时报名两个课题');
}else{
@@ -199,7 +207,7 @@ const Glcc = (propsF) => {
{/* 学生报名 */}
- {period === "stuApply" && (
@@ -251,7 +259,7 @@ const Glcc = (propsF) => {
{!(round === 2 && !repoPublic) && (
-
+
)}
>}
diff --git a/src/glcc/project/taskList/index.jsx b/src/glcc/project/taskList/index.jsx
index 11cec9f9..4edaf83d 100644
--- a/src/glcc/project/taskList/index.jsx
+++ b/src/glcc/project/taskList/index.jsx
@@ -7,7 +7,7 @@ import bgPng from "../../img/bgPng.png";
const { Search } = Input;
// 课题列表
-function TaskList({applyTaskId, setStudentInfoReset, current_user, showLoginDialog,cancelCount,showNotification, applyTask, round, match:{params:{id}}, period, currentRound }) {
+function TaskList({applyTaskId, setStudentInfoReset, current_user, showLoginDialog,cancelCount,showNotification, applyTask, round, match:{params:{id}}, period, currentRound, lockedTaskName }) {
const [visible, setVisible] = useState(false);
const [deleteTaskId, setDeleteTaskId] = useState(undefined);
// 输入搜索框
@@ -35,13 +35,13 @@ function TaskList({applyTaskId, setStudentInfoReset, current_user, showLoginDial
{/* 报名详情按钮 */}
{round === currentRound && applyTaskId && Object.keys(applyTaskId).includes(item.id.toString()) && {window.location.href=`/glcc/student/apply/${item.id}`}}>报名详情}
- {/* 取消按钮5.26-6.25 */}
- {round === currentRound && (period === "stuApply" || period === "stuApply1") && applyTaskId && Object.keys(applyTaskId).includes(item.id.toString()) && {deleteItem(item.id)}}>}
+ {/* 取消按钮 */}
+ {round === currentRound && (period === "stuApply" || period === "stuApply1") && applyTaskId && Object.keys(applyTaskId).includes(item.id.toString()) && !lockedTaskName && {deleteItem(item.id)}}>}
{/* 课题申请时间范围内: 申请课题 */}
{/* 第一次报名 */}
{round === currentRound && period === "stuApply" && !(applyTaskId && Object.keys(applyTaskId).includes(item.id.toString())) && {applyTask(item.id)}}>申请课题}
- {/* 第二次报名 锁定状态 */}
+ {/* 补录阶段 锁定状态 */}
{round === currentRound && period === "stuApply1" && !(applyTaskId && Object.keys(applyTaskId).includes(item.id.toString())) && (item.locked ? 申请课题 : {applyTask(item.id, item.locked)}}>申请课题)}
)
diff --git a/src/glcc/student/index.jsx b/src/glcc/student/index.jsx
index f81c94cd..6bf21492 100644
--- a/src/glcc/student/index.jsx
+++ b/src/glcc/student/index.jsx
@@ -24,11 +24,8 @@ const gradeList = [
{ id: '博士及以上', name: '博士及以上' }
];
function Apply(props) {
- const { form, current_user, showNotification, match, history, setStudentInfoReset, period, round } = props;
+ const { form, current_user, showNotification, match, setStudentInfoReset, period, round } = props;
const taskId = Number(match.params.taskId);
- // 可用于开发时不同账号报名
- // current_user && (current_user.user_id = 6)
- // current_user && (current_user.userName = "创新使者")
const { getFieldDecorator, validateFields, setFieldsValue, validateFieldsAndScroll } = form;
const [imageUrl, setImageUrl] = useState(undefined);
const [loading, setLoading] = useState(false);
@@ -36,9 +33,9 @@ function Apply(props) {
const [locked, setLocked] = useState(true);
const [userApplyInfo, setUserApplyInfo] = useState(undefined);
const [editable, setEditable] = useState(false);
- const [files, setFiles] = useState([]);
- const [files1, setFiles1] = useState([]);
- const [files2, setFiles2] = useState([]);
+ const [fileList, setFileList] = useState([]);
+ // 当前有效课题数量
+ const [taskCount, setTaskCount] = useState(0);
const initTask = {
taskId,
memo: '',
@@ -96,32 +93,21 @@ function Apply(props) {
if (data.registrationStudentTaskList.length) {
let initTaskList = [];
let lockedCurrent = false;
+ const fileListInit = [];
for (const [i, item] of data.registrationStudentTaskList.entries()) {
applyInfo['memo' + i] = item.memo;
applyInfo['taskId' + i] = item.taskId;
applyInfo['memoAttachmentId' + i] = item.memoAttachmentId;
+ applyInfo['subRound' + i] = item.subRound;
if (item.locked && item.passStatus) {
lockedCurrent = item.locked;
}
- if (i == 0) {
- item.memoAttachment && setFiles([{
- name: item.memoAttachment && item.memoAttachment.fileName || '已上传文件',
- id: item.memoAttachmentId,
- uid: item.memoAttachmentId
- }]);
- } else if(i==1) {
- item.memoAttachment && setFiles1([{
- name: item.memoAttachment && item.memoAttachment.fileName || '已上传文件',
- id: item.memoAttachmentId,
- uid: item.memoAttachmentId,
- }]);
- } else {
- item.memoAttachment && setFiles2([{
- name: item.memoAttachment && item.memoAttachment.fileName || '已上传文件',
- id: item.memoAttachmentId,
- uid: item.memoAttachmentId,
- }]);
- }
+ fileListInit.push(item.memoAttachment ? [{
+ name: item.memoAttachment.fileName || '已上传文件',
+ id: item.memoAttachmentId,
+ uid: item.memoAttachmentId
+ }]: undefined)
+ setFileList(fileListInit);
if (item.enrollFirst) {
applyInfo.enrollFirst = i;
@@ -141,12 +127,12 @@ function Apply(props) {
}
setMyTaskList(initTaskList);
- // let idArr= data.registrationStudentTaskList.map(i=>{return i.id});
- // if(idArr.length===3){lockedCurrent=true;}
- // setLocked(lockedCurrent);
+ // subRound为0是已经匹配的数据,认为不是有效数据
+ const length = data.registrationStudentTaskList.filter(item=>item.subRound === 1).length
+ setTaskCount(length);
// 如果未被锁定,且小于3条报名数据,且课题id与当前id不一致,那么新增一条默认数据
let taskIdArr=data.registrationStudentTaskList.map(i=>{return i.taskId});
- if (!lockedCurrent && data.registrationStudentTaskList.length < 3 && !taskIdArr.includes(taskId)) {
+ if (!lockedCurrent && length < 3 && !taskIdArr.includes(taskId)) {
addTask(data.registrationStudentTaskList);
setLocked(false);
}
@@ -201,7 +187,8 @@ function Apply(props) {
// registrationStudentTaskList需要传round字段
item.round = round;
// 课题优先级
- item.enrollFirst = index === enrollFirst
+ item.enrollFirst = index === enrollFirst;
+ item.subRound= values.subRound || 1;
})
}
const params = {
@@ -308,18 +295,10 @@ function Apply(props) {
if (info.file.status === 'removed') {
changeTaskItem('memoAttachmentId', '', i);
}
- if (i==1) {
- setFiles1(appendFileSizeToUploadFileAll(info.fileList).slice(-1));
- }else if (i==2) {
- setFiles2(appendFileSizeToUploadFileAll(info.fileList).slice(-1));
- } else {
- setFiles(appendFileSizeToUploadFileAll(info.fileList).slice(-1));
- }
+ const fileListInit = [...fileList];
+ fileListInit[i] = appendFileSizeToUploadFileAll(info.fileList).slice(-1);
+ setFileList(fileListInit);
}
-
- // if (info.file.status === "done" || info.file.status === 'removed') {
- // setLoading(false);
- // }
}
// 支持文件下载
@@ -329,6 +308,7 @@ function Apply(props) {
}
function addTask(List) {
+ setTaskCount(taskCount+1);
let taskListNew = List ? [...List] : [...myTaskList];
if (taskId != taskListNew[0].taskId) {
taskListNew.push(initTask);
@@ -346,33 +326,6 @@ function Apply(props) {
}
}
- function deleteTask(i) {
- let taskListNew = myTaskList.slice();
- let reWriteInfo;
- if (i) {
- reWriteInfo = {
- taskId1: '',
- memo1: '',
- memoAttachmentId1: ''
- }
- setFiles1([]);
- } else {
- reWriteInfo = {
- taskId0: taskListNew[1].taskId,
- memo0: taskListNew[1].memo,
- memoAttachmentId0: taskListNew[1].memoAttachmentId,
- taskId1: '',
- memo1: '',
- memoAttachmentId1: ''
- }
- setFiles(files1);
- setFiles1([]);
- }
-
- taskListNew.splice(i, 1);
- setMyTaskList(taskListNew);
- setFieldsValue(reWriteInfo);
- }
function changeTaskItem(field, val, i) {
let taskListNew = [...myTaskList];
@@ -489,13 +442,15 @@ function Apply(props) {
return (
课题信息({i + 1})
- {/* {myTaskList.length > 1 && { deleteTask(i) }}>删除} */}
{item.status === 1 && item.auditRemark &&
欢迎您报名CCF GitLink开源编程夏令营,感谢您对GLCC项目及课题的关注和支持!本次您的报名信息未通过初审,原因如下:
希望您尽快修改并重新提交报名信息,我们将再次审核,万分感谢!
}
+
+ {getFieldDecorator(`subRound${i}`, {})()}
+
{helper('课题名称',
'',
'taskId' + i,
@@ -504,15 +459,13 @@ function Apply(props) {
placeholder="请选择课题名称"
dropdownClassName="glcc_select"
showSearch
- className={!editable || (item.id && item.status !== 1) ? "disabledInput" : ""}
- disabled={!editable || (item.id && item.status !== 1)}
- // disabled
- // className={"disabledInput"}
+ className={!editable || (item.id && item.status !== 1) || item.subRound === 0 ? "disabledInput" : ""}
+ disabled={!editable || (item.id && item.status !== 1) || item.subRound === 0}
filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) > -1}
onBlur={() => { verify("taskId" + i) }}
onChange={(val) => { changeTaskItem("taskId", val, i) }}
>
- {allTaskList.map(item => { return })}
+ {allTaskList.map(item => { return })}
)}
{item.locked && item.passStatus && 您已通过审核,成功入选该课题
}
@@ -540,9 +493,8 @@ function Apply(props) {
'memoAttachmentId' + i,
[],
{ bookChange(info, i) }}
onDownload={download}
beforeUpload={beforeUpload2}
@@ -561,9 +513,7 @@ function Apply(props) {
})
}
- {
- myTaskList.length < 2 &&
- }
+ {taskCount < 2 && }
{
myTaskList.length >= 2 &&
- 课题一
- 课题二
- {myTaskList.length === 3 && 课题三}
+ {myTaskList.map((item, index) =>{
+ return 课题{index+1}
+ })}
)}
From 2d0a93efb6962caf6d27c18a4fa3bde6ba007676 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B0=A2=E6=80=9D?= <2897217417@qq.com>
Date: Tue, 27 Jun 2023 17:18:04 +0800
Subject: [PATCH 07/12] =?UTF-8?q?=E6=9C=80=E5=A4=9A=E5=8F=AF=E7=94=B3?=
=?UTF-8?q?=E8=AF=B7=E8=AF=BE=E9=A2=98=E6=95=B0=E9=87=8F=E9=99=90=E5=88=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/glcc/index.jsx | 2 +-
src/glcc/project/taskList/index.jsx | 9 ++++++++-
src/glcc/student/index.jsx | 10 +++++-----
3 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/src/glcc/index.jsx b/src/glcc/index.jsx
index c34dfd08..6d680002 100644
--- a/src/glcc/index.jsx
+++ b/src/glcc/index.jsx
@@ -193,7 +193,7 @@ const Glcc = (propsF) => {
message.error(`由于你已入选 ${lockedTaskName} 课题,无法申请其他课题`);
}else if(apply1TaskId && Object.keys(apply1TaskId).length >= 2){
// 判断用户是否已经报名两个课题
- message.error('最多只能同时报名两个课题');
+ message.error('超出可报名课题数量上限');
}else{
// 跳转到学生报名页
window.location.href=`/glcc/student/apply/${id}`;
diff --git a/src/glcc/project/taskList/index.jsx b/src/glcc/project/taskList/index.jsx
index 4edaf83d..016e56f5 100644
--- a/src/glcc/project/taskList/index.jsx
+++ b/src/glcc/project/taskList/index.jsx
@@ -134,9 +134,16 @@ function TaskList({applyTaskId, setStudentInfoReset, current_user, showLoginDial
}
taskList(params).then(response => {
if (response && response.message === "success") {
+ const data = response.data.rows;
+ if(period === "stuApply1"){
+ // 将可再报名的课题置顶
+ const applyIds = data.filter(item=>!item.locked).map(item=>item.id);
+ data.map((item, index)=>{
+ applyIds.includes(item.id) && toFirst(data, index);
+ })
+ }
// 将已报名task任务置顶
const ids = Object.keys(applyTaskId);
- const data = response.data.rows;
data.map((item, index)=>{
ids.includes(item.id.toString()) && toFirst(data, index);
})
diff --git a/src/glcc/student/index.jsx b/src/glcc/student/index.jsx
index 6bf21492..6667463a 100644
--- a/src/glcc/student/index.jsx
+++ b/src/glcc/student/index.jsx
@@ -133,7 +133,7 @@ function Apply(props) {
// 如果未被锁定,且小于3条报名数据,且课题id与当前id不一致,那么新增一条默认数据
let taskIdArr=data.registrationStudentTaskList.map(i=>{return i.taskId});
if (!lockedCurrent && length < 3 && !taskIdArr.includes(taskId)) {
- addTask(data.registrationStudentTaskList);
+ addTask(length, data.registrationStudentTaskList);
setLocked(false);
}
} else {
@@ -188,7 +188,7 @@ function Apply(props) {
item.round = round;
// 课题优先级
item.enrollFirst = index === enrollFirst;
- item.subRound= values.subRound || 1;
+ item.subRound= values[`subRound${index}`] === 0 ? 0 : 1;
})
}
const params = {
@@ -307,8 +307,8 @@ function Apply(props) {
window.open(`${httpUrl}/busiAttachments/download/${fileId}`);
}
- function addTask(List) {
- setTaskCount(taskCount+1);
+ function addTask(count, List) {
+ setTaskCount(1 + count);
let taskListNew = List ? [...List] : [...myTaskList];
if (taskId != taskListNew[0].taskId) {
taskListNew.push(initTask);
@@ -513,7 +513,7 @@ function Apply(props) {
})
}
- {taskCount < 2 && }
+ {taskCount < 2 && }
{
myTaskList.length >= 2 &&
Date: Tue, 27 Jun 2023 18:47:40 +0800
Subject: [PATCH 08/12] =?UTF-8?q?=E8=AF=BE=E9=A2=98=E5=8F=AF=E6=8A=A5?=
=?UTF-8?q?=E5=90=8D=E4=B8=AA=E6=95=B0=E9=99=90=E5=88=B6=E6=9C=89=E8=AF=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/glcc/student/index.jsx | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/src/glcc/student/index.jsx b/src/glcc/student/index.jsx
index 6667463a..8eeaaf35 100644
--- a/src/glcc/student/index.jsx
+++ b/src/glcc/student/index.jsx
@@ -30,7 +30,7 @@ function Apply(props) {
const [imageUrl, setImageUrl] = useState(undefined);
const [loading, setLoading] = useState(false);
const [reload, setReload] = useState();
- const [locked, setLocked] = useState(true);
+ const [locked, setLocked] = useState(false);
const [userApplyInfo, setUserApplyInfo] = useState(undefined);
const [editable, setEditable] = useState(false);
const [fileList, setFileList] = useState([]);
@@ -99,7 +99,7 @@ function Apply(props) {
applyInfo['taskId' + i] = item.taskId;
applyInfo['memoAttachmentId' + i] = item.memoAttachmentId;
applyInfo['subRound' + i] = item.subRound;
- if (item.locked && item.passStatus) {
+ if (item.locked) {
lockedCurrent = item.locked;
}
fileListInit.push(item.memoAttachment ? [{
@@ -126,17 +126,18 @@ function Apply(props) {
// });
}
setMyTaskList(initTaskList);
-
+ setLocked(lockedCurrent);
// subRound为0是已经匹配的数据,认为不是有效数据
const length = data.registrationStudentTaskList.filter(item=>item.subRound === 1).length
setTaskCount(length);
- // 如果未被锁定,且小于3条报名数据,且课题id与当前id不一致,那么新增一条默认数据
+ // 如果未被锁定,且有效报名数据小于2,且课题id与当前id不一致,那么新增一条默认数据
let taskIdArr=data.registrationStudentTaskList.map(i=>{return i.taskId});
- if (!lockedCurrent && length < 3 && !taskIdArr.includes(taskId)) {
+ if (!lockedCurrent && length < 2 && !taskIdArr.includes(taskId)) {
addTask(length, data.registrationStudentTaskList);
- setLocked(false);
}
} else {
+ // 用户报名过glcc,但是没有填报课题信息
+ setTaskCount(1);
// 先增加数据再给选择框赋默认值,否则不生效
new Promise((resove) => {
setMyTaskList(() => {
@@ -150,6 +151,8 @@ function Apply(props) {
setFieldsValue(applyInfo);
setUserApplyInfo(response.data);
} else {
+ // 用户从未报名glcc
+ setTaskCount(1);
// 先增加数据再给选择框赋默认值,否则不生效
new Promise((resove) => {
setMyTaskList(() => {
@@ -468,7 +471,7 @@ function Apply(props) {
{allTaskList.map(item => { return })}
)}
- {item.locked && item.passStatus && 您已通过审核,成功入选该课题
}
+ {item.locked && 您已通过审核,成功入选该课题
}
{helper('自荐书',
,
'memo' + i,
@@ -513,7 +516,7 @@ function Apply(props) {
})
}
- {taskCount < 2 &&
}
+ {taskCount < 2 && !locked &&
}
{
myTaskList.length >= 2 &&
Date: Fri, 30 Jun 2023 09:57:01 +0800
Subject: [PATCH 09/12] =?UTF-8?q?glcc=E5=8C=B9=E9=85=8D=E7=BB=93=E6=9E=9C?=
=?UTF-8?q?=E5=85=AC=E7=A4=BA+0=E5=85=83=E8=AF=BE=E9=A2=98=E5=B1=95?=
=?UTF-8?q?=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/glcc/api.js | 21 +-
src/glcc/checkResult/index.jsx | 15 +-
.../freeProject/component/projectDetail.jsx | 50 ++++
src/glcc/freeProject/index.jsx | 66 +++++
src/glcc/freeProject/index.scss | 230 ++++++++++++++++++
src/glcc/freeProject/projectList/index.jsx | 75 ++++++
src/glcc/freeProject/projectList/index.scss | 85 +++++++
src/glcc/freeProject/taskList/index.jsx | 106 ++++++++
src/glcc/freeProject/taskList/index.scss | 117 +++++++++
src/glcc/home/index.jsx | 24 +-
src/glcc/img/studentProject2.png | Bin 0 -> 298380 bytes
src/glcc/index.jsx | 52 +++-
src/glcc/project/component/projectDetail.jsx | 2 +-
src/glcc/project/taskList/index.jsx | 13 +-
14 files changed, 820 insertions(+), 36 deletions(-)
create mode 100644 src/glcc/freeProject/component/projectDetail.jsx
create mode 100644 src/glcc/freeProject/index.jsx
create mode 100644 src/glcc/freeProject/index.scss
create mode 100644 src/glcc/freeProject/projectList/index.jsx
create mode 100644 src/glcc/freeProject/projectList/index.scss
create mode 100644 src/glcc/freeProject/taskList/index.jsx
create mode 100644 src/glcc/freeProject/taskList/index.scss
create mode 100644 src/glcc/img/studentProject2.png
diff --git a/src/glcc/api.js b/src/glcc/api.js
index 5d930499..e86f2a6f 100644
--- a/src/glcc/api.js
+++ b/src/glcc/api.js
@@ -45,8 +45,7 @@ export function studentApplyEdit(data) {
});
}
-// 获取当前学生用户报名信息
-// 课题列表
+// 项目列表
export function projectList(params) {
return fetch({
url: `/api/applyInformation/list`,
@@ -55,6 +54,15 @@ export function projectList(params) {
});
}
+// 0元项目列表
+export function freeProjectList(params) {
+ return fetch({
+ url: `/api/applyInformation/projectListFor0`,
+ method: 'get',
+ params
+ });
+}
+
// 课题列表
export function taskList(params) {
return fetch({
@@ -64,6 +72,15 @@ export function taskList(params) {
});
}
+// 0元课题列表
+export function freeTaskList(params) {
+ return fetch({
+ url: `/api/applyInformation/taskListFor0`,
+ method: 'get',
+ params
+ });
+}
+
// 项目id查询项目详情
export function getProjectById(id, params) {
return fetch({
diff --git a/src/glcc/checkResult/index.jsx b/src/glcc/checkResult/index.jsx
index 5b31d1a8..de5a9d2c 100644
--- a/src/glcc/checkResult/index.jsx
+++ b/src/glcc/checkResult/index.jsx
@@ -2,8 +2,6 @@ import React, { useEffect, useState } from 'react';
import { Input, Table, Tooltip } from 'antd';
import { getPassList, hasAuditRole } from '../api';
import ProjectDetail from '../project/component/projectDetail';
-// 预公示banner
-import resultBanner from "../img/resultBanner.png";
// 公示banner
import resultBanner2 from "../img/resultBanner2.png";
import bgPng from "../img/bgPng.png";
@@ -12,7 +10,7 @@ import '../project/index.scss';
const { Search } = Input;
// 课题列表
-function CheckResult({current_user, history}) {
+function CheckResult({current_user, history, round}) {
// 输入搜索框
const [keyword, setKeyword] = useState(undefined);
const [data, setData] = useState([]);
@@ -22,7 +20,6 @@ function CheckResult({current_user, history}) {
const [pageSize, setPageSize] = useState(20);
const [loading, setLoading] = useState(false);
const [expandedRowKeys, setExpandedRowKeys] = useState([]);
- const time = new Date().getTime() > new Date('2022/06/28 1:0').getTime() && new Date().getTime() < new Date('2022/07/01 0:0').getTime();
useEffect(()=>{
// 未到时间
@@ -44,6 +41,7 @@ function CheckResult({current_user, history}) {
curPage: current,
keyword,
pageSize,
+ round
}
getPassList(params).then(response => {
if (response && response.message === "success") {
@@ -58,9 +56,9 @@ function CheckResult({current_user, history}) {
{ title: '序号', dataIndex: 'index', align: 'center', className:"columnsResult", width: '6%', render: (text, item, index) => {(current-1)*pageSize+index + 1} },
{ title: '入选学生', dataIndex: 'studentName', className:"columnsResult taskName", width: '10%', ellipsis: true},
{ title: '学生院校', dataIndex: 'school', className:"columnsResult taskName", width: '12%', ellipsis: true,render: (text) => {text}},
- { title: '学生专业', dataIndex: 'profession', className:"columnsResult taskName", width: '12%', ellipsis: true, render: (text) => {text}},
+ { title: '学生专业', dataIndex: 'profession', className:"columnsResult taskName", width: '12%', ellipsis: true, render: (text) => {text || '-'}},
{ title: '课题导师', dataIndex: 'tutorName', className:"columnsResult", width: '10%', ellipsis: true},
- { title: '课题名称', dataIndex: 'taskName', className:"columnsResult", width: '20%', ellipsis: true, render: (text, item) => {window.open(`/glcc/subjects/detail/${item.taskId}`)}}>{text} },
+ { title: '课题名称', dataIndex: 'taskName', className:"columnsResult", width: '20%', ellipsis: true, render: (text, item) => {window.open(`/glcc/2023/subjects/detail/${item.taskId}`)}}>{text} },
{ title: '项目名称', dataIndex: 'projectName', className:"columnsResult", ellipsis: true, width: '14%', render: (text) => {text} },
{ title: '操作', dataIndex: 'action', align: 'center', className:"columnsResult actionBox"},
]
@@ -107,11 +105,10 @@ function CheckResult({current_user, history}) {
return (
- {time &&

}
- {new Date().getTime() > new Date('2022/07/01 12:0').getTime() &&

}
+
-
+
{ setCurrent(1); setKeyword(value) }} />
{
+ const [info, setInfo] = useState(detail);
+
+ useEffect(()=>{
+ if(!detail && projectId){
+ // 通过项目Id查询项目详情
+ getProjectById(projectId, {round: 2, isFree: true}).then(response=>{
+ if(response && response.message === 'success'){
+ setInfo(response.data)
+ }
+ })
+ }
+ },[detail])
+
+ return (
+ info ?
+
+
{info.projectName}
+ {info.projectType &&
{info.projectType}}
+
GitLink项目地址: {info.gitlinkUrl}
+
项目简介: {info.projectIntro}
+
+ {/* 课题列表 */}
+ {info.registrationTaskList && info.registrationTaskList.length ? info.registrationTaskList.map((item, index)=>{
+ return
+
+
{window.open(`/glcc/2023/subjects/detail/${item.id}`)}}>{item.taskName}
+
导师姓名: {item.tutorName}
+ {item.tutorMail &&
邮箱地址: {item.tutorMail}
}
+
+
+
{item.taskDesc}
+ {item.taskUrl &&
}
+ {/* 查看课题详情按钮 */}
+
+
+
+
+
¥{item.taskReward}
+
+ }) :
}
+ :
+ )
+}
\ No newline at end of file
diff --git a/src/glcc/freeProject/index.jsx b/src/glcc/freeProject/index.jsx
new file mode 100644
index 00000000..30a95c59
--- /dev/null
+++ b/src/glcc/freeProject/index.jsx
@@ -0,0 +1,66 @@
+import React from 'react';
+import { Spin } from 'antd';
+import { Route, Switch } from "react-router-dom";
+import banner from "../img/studentProject2.png";
+import './index.scss';
+import Loadable from "react-loadable";
+import Loading from "../../Loading";
+import { Link } from 'react-router-dom';
+import { useEffect } from 'react';
+
+// 项目列表页面
+const ProjectList = Loadable({
+ loader: () => import("./projectList"),
+ loading: Loading,
+});
+// 课题列表页面
+const TaskList = Loadable({
+ loader: () => import("./taskList"),
+ loading: Loading,
+});
+
+function FreeProject(propsF) {
+ const {location: {pathname}} = propsF;
+ useEffect(()=>{
+ window.scrollTo(0, 0);
+ },[])
+console.log('FreeProject');
+ return(
+
+
+

+
+
+ 课题列表
+ 项目列表
+
+
+
+
申请说明:
+
1、参与GitLink编程夏令营0资金项目的同学,请通过邮件或电话与课题导师直接沟通并根据导师课题要求完成课题,无需在GLCC平台报名课题。
+
2、参与GitLink编程夏令营0资金项目的同学,如完成课题并经导师评定通过,将获得GLCC证书(1份),但无课题资金。
+
3、活动最终解释权归GLCC所有。
+
+
+
+ (
+
+ )}
+ >
+ (
+
+ )}
+ >
+
+
+
+ )
+}
+export default FreeProject;
\ No newline at end of file
diff --git a/src/glcc/freeProject/index.scss b/src/glcc/freeProject/index.scss
new file mode 100644
index 00000000..fc503136
--- /dev/null
+++ b/src/glcc/freeProject/index.scss
@@ -0,0 +1,230 @@
+.glcc_project{
+ background-color: #ebf2ff;
+ .head{
+ background-color:rgba(188, 208, 255, 0.27);
+ border:1px solid #ffffff;
+ text-align: center;
+ a{
+ padding: 18px 20px 20px;
+ display: inline-block;
+ color: #273778;
+ font-size: 18px;
+ font-weight:700;
+ line-height: 30px;
+ &.active{
+ border-bottom: 1px solid #5474df;;
+ }
+ &:last-child{
+ margin-left: 40px;
+ }
+ }
+ }
+ .gobackBox{
+ width: 1200px;
+ margin: 0 auto;
+ padding: 25px 0 12px;
+ color: #202d40;
+ font-size: 16px;
+ border-bottom: 1px dashed #bec5d5;
+ a{
+ color:#a4aabb;
+ }
+ }
+ .listBox{
+ background-image:linear-gradient(180deg,#ebf2ff 0%,#ebf2ff 43.09%,#f3f4f8 100%);
+ position: relative;
+ .bgPng3, .bgPng4{
+ width: 146px;
+ position: absolute;
+ z-index: 0;
+ top: 162px;
+ left: 100px;
+ }
+ .bgPng4{
+ top: 450px;
+ left: auto;
+ right: 310px;
+ }
+ }
+}
+.glcc-banner {
+ width: 100%;
+}
+// 项目详情框
+.projectDetailBox{
+ &.byTask{
+ background-image:linear-gradient(180deg,#f1f5ff 0%,#ffffff 100%);
+ border:1px solid #ffffff;
+ border-radius:4px;
+ box-shadow:0px 0px 10px rgba(100, 141, 255, 0.2);
+ padding: 30px 30px 50px;
+ .taskItem{
+ .center{
+ width: 640px;
+ }
+ }
+ }
+ &.nodata{width: 200px;}
+ font-size:15px;
+ line-height:30px;
+ .projectDetailHead{
+ color:#465474;
+ padding-bottom: 12px;
+ border-bottom: 1px dashed #bec5d5;
+ line-height: 36px;
+ &.byResult{
+ margin: -15px -10px -40px;
+ border-bottom: none;
+ }
+ .name{
+ font-weight:700;
+ color:#3753c5;
+ font-size:20px;
+ }
+ .type{
+ display: inline-block;
+ border:1px solid #6680bb;
+ border-radius:4px;
+ margin-left: 12px;
+ padding: 4px 6px;
+ line-height: 26px;
+ }
+ .linkUrl{
+ color: #466aff;
+ }
+ }
+ .taskItem {
+ display: flex;
+ justify-content: space-between;
+ border:1px solid #ffffff;
+ &:hover{ box-shadow: 0px 0px 12px rgba(71, 105, 198, 0.4);}
+ .oneLine{
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ .left{
+ width: 316px;
+ background-image: url('../img/projectDetailTaskBg.png');
+ background-size: 100% 100%;
+ padding: 22px 20px;
+ color:#25304a;
+ .taskTitle{
+ cursor: pointer;
+ color:#1834a7;
+ font-size:18px;
+ display: -webkit-box;
+ overflow: hidden;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ text-overflow: ellipsis;
+ }
+ .email span{color:#466aff;}
+ .leftWidth{width: 270px;}
+ }
+ .center{
+ width: 665px;
+ text-align: left;
+ padding: 20px;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ .taskDesc{
+ color:#6b6b6b;
+ display: -webkit-box;
+ overflow: hidden;
+ -webkit-line-clamp: 3;
+ -webkit-box-orient: vertical;
+ text-overflow: ellipsis;
+ }
+ .taskUrl{
+ color:#465474;
+ font-size:16px;
+ line-height: 28px;
+ margin-bottom: 5px;
+ a{color:#466aff;}
+ }
+ .applyBut{
+ background-color:#466aff;
+ border-color: #466aff;
+ &:hover{background-color:#5d7cff;}
+ &:focus{background-color:#1140ff;}
+ }
+ .taskReward{color:#ff8800;}
+ }
+ .right{
+ margin-top: 35px;
+ padding-right: 10px;
+ width: 120px;
+ font-weight:700;
+ color:#ff8800;
+ font-size:24px;
+ }
+ }
+}
+.ant-popover.projectItemPopover{
+ width: 1200px;
+ z-index: 1000;
+ .ant-popover-content .ant-popover-arrow{
+ border-width: 12px;
+ }
+}
+.projectItemPopover .ant-popover-inner{
+ transform: translateY(8px);
+ background-image:linear-gradient(180deg,#f1f5ff 0%,#ffffff 100%);
+ border:1px solid #ffffff;
+ border-radius:4px;
+ box-shadow:0px 0px 10px rgba(100, 141, 255, 0.2);
+ .ant-popover-inner-content{
+ padding: 30px 30px 50px;
+ }
+}
+.lookDetail{
+ border-color: #466aff;
+ color: #466aff;
+ &:hover{
+ border-color: #5d7cff;
+ color: #5d7cff;
+ }
+ &:focus{
+ border-color: #1140ff;
+ color: #1140ff;
+ }
+}
+.projectBannerBox{
+ position: relative;
+ .stuApplytimeBox{
+ background-image: url('../img/studentProject1.png');
+ position: absolute;
+ color: #FFDC95;
+ font-size: 20px;
+ bottom: 28%;
+ left: 50%;
+ margin-left: -250px;
+ width: 500px;
+ height: 60px;
+ line-height: 60px;
+ text-align: center;
+ background-size: 100% 100%;
+ }
+}
+.head_introduce {
+ width: 1200px;
+ margin: 0 auto;
+ background: #e4edff;
+ padding: 20px;
+}
+.head_tit {
+ color: #000000;
+ font-size: 15px;
+ line-height: 2;
+}
+.head_content {
+ color: #6c7283;
+ font-size: 14px;
+ line-height: 38px;
+}
+.head_bold {
+ font-weight: 700;
+ color: #333;
+}
\ No newline at end of file
diff --git a/src/glcc/freeProject/projectList/index.jsx b/src/glcc/freeProject/projectList/index.jsx
new file mode 100644
index 00000000..a10f15f7
--- /dev/null
+++ b/src/glcc/freeProject/projectList/index.jsx
@@ -0,0 +1,75 @@
+import React, { useEffect, useState } from 'react';
+import { Input, Popover, Spin } from 'antd';
+import { main_site_url } from '../../fetch';
+import './index.scss';
+import { freeProjectList, projectList } from '../../api';
+import ProjectDetail from '../component/projectDetail';
+import bgPng from "../../img/bgPng.png";
+import logo from "../../img/logo.png";
+import star from "../../img/star.png";
+import Nodata from '../../../forge/Nodata';
+const { Search } = Input;
+
+// 项目列表
+function ProjectList() {
+ const [data, setData] = useState([]);
+ const [loading, setLoading] = useState(false);
+
+ useEffect(() => {
+ setLoading(true);
+ const params = {
+ curPage: 1,
+ pageSize: 10000,
+ round: 2
+ }
+ freeProjectList(params).then(response => {
+ if (response && response.message === "success") {
+ setData(response.data.rows);
+ }
+ setLoading(false);
+ })
+ }, [])
+
+ // 修改taskList盒子的高度,防止弹框过高影响整体页面
+ function changeVisible(visible, item) {
+ if (visible) {
+ let height = document.documentElement.clientWidth / 1920 * 500 + 70 + document.querySelector(`.${item.gitlinkLastUrl}`).offsetTop + item.registrationTaskList.length * 320;
+ document.querySelector('#taskList').style.height = height + 'px';
+ } else {
+ document.querySelector('#taskList').style.height = 'auto';
+ }
+ }
+
+ return (
+
+
+
+ {data && data.map((item, index) => {
+ return
{ changeVisible(visible, item) }}
+ key={index}
+ placement={(index + 1) % 3 === 0 ? 'bottomRight' : (index + 1) % 3 % 2 === 0 ? 'bottom' : 'bottomLeft'}
+ content={}
+ trigger='click'
+ overlayClassName='projectItemPopover'
+ autoAdjustOverflow={false}
+ >
+
+
+
+

+
+
{item.projectName}
+
{item.projectIntro}
+
+
+ })}
+
+ {data && !data.length &&
}
+
+

+

+
+ )
+}
+export default ProjectList;
\ No newline at end of file
diff --git a/src/glcc/freeProject/projectList/index.scss b/src/glcc/freeProject/projectList/index.scss
new file mode 100644
index 00000000..e2a12910
--- /dev/null
+++ b/src/glcc/freeProject/projectList/index.scss
@@ -0,0 +1,85 @@
+.projectListBox{
+ width: 1200px;
+ margin: 0 auto;
+ position: relative;
+ z-index: 1;
+ display: flex;
+ flex-wrap: wrap;
+ // justify-content: space-between;
+ .projectItem{
+ position: relative;
+ width: 30%;
+ background-image: linear-gradient(180deg,rgba(232, 237, 255, 0.85) 0%,rgba(255, 255, 255, 0.85) 100%);
+ border: 1px solid;
+ border-color: #ffffff;
+ border-radius: 4px;
+ box-shadow:0px 0px 8px rgba(93, 131, 255, 0.26);
+ text-align: center;
+ margin-bottom: 50px;
+ background-image: url('../../img/projectBg.png');
+ background-size: 100% 100%;
+ margin-left: 5%;
+ &.firstBox{
+ margin-left: 0;
+ }
+ &:hover{
+ cursor: pointer;
+ background-image: none;
+ // #E8EDFF—#FFFFFF(85%)
+ background-image: linear-gradient(180deg,rgba(232, 237, 255, 0.85) 0%,rgba(255, 255, 255, 0.85) 100%);
+ }
+ .border{
+ height: 5px;
+ background-color:#657edf;
+ border-radius:2px 2px 0px 0px;
+ }
+ .projectLogoStar{
+ position: absolute;
+ top:30px;
+ right: 130px;
+ width: 28px;
+ z-index: 10;
+ transform: rotate(46deg);
+ }
+ .projectLogo{
+ position: relative;
+ width: 100px;
+ height: 100px;
+ border: 1px solid #fff;
+ background-color: #fff;
+ border-radius: 50%;
+ text-align: center;
+ overflow: hidden;
+ margin: 25px auto 10px;
+ line-height: 95px;
+ .projectLogoImg{
+ width: 100%;
+ // height: 100%;
+ // display: block;
+ }
+
+ }
+ .title{
+ color:#2a51bf;
+ font-size:17px;
+ line-height:30px;
+ margin-bottom: 15px;
+ padding: 0 50px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ .intro{
+ color:#4f5d84;
+ font-size:15px;
+ margin-bottom: 15px;
+ display: -webkit-box;
+ overflow: hidden;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ text-overflow: ellipsis;
+ text-align: left;
+ padding: 0 14px;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/glcc/freeProject/taskList/index.jsx b/src/glcc/freeProject/taskList/index.jsx
new file mode 100644
index 00000000..5fa2103d
--- /dev/null
+++ b/src/glcc/freeProject/taskList/index.jsx
@@ -0,0 +1,106 @@
+import React, { useEffect, useState } from 'react';
+import { Table, Tooltip } from 'antd';
+import './index.scss';
+import { freeTaskList, taskList } from '../../api';
+import ProjectDetail from '../component/projectDetail';
+import bgPng from "../../img/bgPng.png";
+
+// 课题列表
+function TaskList() {
+ const [data, setData] = useState([]);
+ // table
+ const [current, setCurrent] = useState(1);
+ const [total, setTotal] = useState(0);
+ const [pageSize, setPageSize] = useState(20);
+ const [loading, setLoading] = useState(false);
+ const [expandedRowKeys, setExpandedRowKeys] = useState([]);
+
+ const columns = [
+ { title: '序号', dataIndex: 'index', align: 'center', className:"taskTableColumns", width: '6%', render: (text, item, index) => {(current-1)*pageSize+index + 1} },
+ { title: '课题名称', dataIndex: 'taskName', className:"taskTableColumns taskName", width: '28%', ellipsis: true, render: (text, item) => {window.open(`/glcc/2023/subjects/detail/${item.id}`)}}>{text} },
+ { title: '课题类型', dataIndex: 'projectType', className:"taskTableColumns", width: '12%', ellipsis: true, },
+ { title: '项目名称', dataIndex: 'projectName', className:"taskTableColumns", width: '24%', ellipsis: true, render: (text) => {text} },
+ { title: '课题奖金', dataIndex: 'taskReward', className:"taskTableColumns", ellipsis: true, width: '10%', render: (text) => {text} },
+ { title: '操作', dataIndex: 'action', align: 'center', className:"actionColumns taskTableColumns"},
+ ]
+
+ const customExpandIcon = (props) => {
+ if (props.expanded) {
+ return {
+ props.onExpand(props.record, e);
+ }}>项目详情
+ } else {
+ return {
+ props.onExpand(props.record, e);
+ }}>项目详情
+ }
+ }
+
+ const expandRow = (record) => {
+ return
+ }
+
+ // 展开收起行回调
+ function onExpand(expanded, record){
+ const keys = new Set(expandedRowKeys);
+ if(expanded){
+ keys.add(record.id);
+ }else{
+ keys.delete(record.id);
+ }
+ setExpandedRowKeys(Array.from(keys));
+ }
+
+ // 改变pagesize
+ function onShowSizeChange(current, pageSize){
+ window.scrollTo(0, 0);
+ setCurrent(1);
+ setPageSize(pageSize);
+ }
+
+ // 切换页数
+ function changePage(page, pageSize){
+ window.scrollTo(0, 0);
+ setCurrent(page);
+ }
+
+ useEffect(() => {
+ setExpandedRowKeys([]);
+ setLoading(true);
+ const params = {
+ curPage: current,
+ pageSize,
+ round: 2
+ }
+ freeTaskList(params).then(response => {
+ if (response && response.message === "success") {
+ setData(response.data.rows);
+ setTotal(response.data.total);
+ }
+ setLoading(false);
+ })
+ }, [current, pageSize])
+
+ return (
+
+
+

+

+
+ )
+}
+export default TaskList;
\ No newline at end of file
diff --git a/src/glcc/freeProject/taskList/index.scss b/src/glcc/freeProject/taskList/index.scss
new file mode 100644
index 00000000..328786cf
--- /dev/null
+++ b/src/glcc/freeProject/taskList/index.scss
@@ -0,0 +1,117 @@
+.taskList{
+ padding-bottom: 50px;
+ .ant-table{
+ border: 1px solid white;
+ }
+ .ant-pagination-item-active, .ant-pagination-item:hover, .ant-pagination-next:not(.ant-pagination-disabled) .ant-pagination-item-link:hover, .ant-select-selection:hover, .ant-pagination-options-quick-jumper:hover input{
+ border-color: #466aff;
+ a{color: #466aff;}
+ }
+ .ant-pagination-disabled .ant-pagination-item-link:hover .anticon{
+ color: rgba(0, 0, 0, 0.25);
+ }
+ .listTable{
+ width: 1200px;
+ margin: 0 auto;
+ position: relative;
+ z-index: 1;
+ }
+}
+.taskTableColumns span div span{
+ font-size: 16px;
+ font-weight:700;
+ color:#273778;
+}
+.taskTableColumns span{
+ font-size: 15px;
+ color: #353f5e;
+}
+.ant-table-tbody .taskTableColumns.taskName span{
+ color: #2545c9;
+ cursor: pointer;
+}
+.ant-table-thead > tr > .taskTableColumns, .ant-table-tbody > tr > .taskTableColumns{
+ background-color:#F1F6FF;
+ border-bottom: 1px dashed #bec5d5;
+}
+.ant-table-tbody > tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected) > .taskTableColumns{
+ background-color:#fbfbfc;
+}
+.actionColumns{
+ display: flex;
+ .actionBox, .actionBox span{
+ cursor: pointer;
+ color: #466aff;
+ &:hover{color:#5d7cff !important;}
+ &:active{color:#1140ff !important;}
+ &.disabled .disabled{
+ &:hover, &:active{color:#a4aabb !important;}
+ color:#a4aabb;
+ cursor: not-allowed;
+ }
+ }
+ .applyTask, span.applyTask{
+ color:#eb9350;
+ &:hover{color: #FFB074 !important;}
+ &:active{color:#D66A17 !important;}
+ }
+ .cancelApply{visibility: hidden;}
+}
+tr:hover .actionColumns .cancelApply{
+ visibility: visible;
+ color: #E31E1E;
+}
+.cancelApplyTask{
+ .ant-modal-close{top: 0px !important;}
+ .ant-modal-header{
+ padding: 8px 20px;
+ background-color: #e9edff;
+ .ant-modal-title{text-align: left;}
+ }
+ .carefulIcon{
+ width: 36px;
+ height: 36px;
+ background: #ca0002;
+ display: inline-block;
+ border-radius: 50%;
+ text-align: center;
+ line-height: 36px;
+ font-size: 18px;
+ color: white;
+ margin-right: 15px;
+ }
+ .tilTask{
+ color:#333333;
+ font-size:16px;
+ margin-left: 35px;
+ }
+ .tipTask{
+ color:#666666;
+ font-size:14px;
+ margin: 10px 0 10px 37px!important;
+ }
+ .tipTaskTime{
+ font-size: 36px;
+ color: #df0002;
+ }
+ .ant-modal-footer{
+ border-top: none;
+ text-align: center;
+ padding-bottom: 50px;
+ .ant-btn{
+ &.ant-btn-default{
+ color: #df0002;
+ }
+ &:hover{
+ border-color: #466aff;
+ color: #466aff;
+ &.ant-btn-default{
+ border-color: #df0002;
+ color: #df0002;}
+ }
+ }
+ .ant-btn-default{
+ margin-left:43px;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/glcc/home/index.jsx b/src/glcc/home/index.jsx
index 1e212ea7..38b2048b 100644
--- a/src/glcc/home/index.jsx
+++ b/src/glcc/home/index.jsx
@@ -22,7 +22,7 @@ import './index.scss';
// period: 项目报名阶段("repoApply")
// match:{params:{id=2023}} 注意默认值记得每届修改
export default (props) => {
- const { current_user, history, round, match:{params:{id=2023}}, period, showLoginDialog, glccSettings, repoPublic, showMatchingBut} = props;
+ const { current_user, history, round, match:{params:{id=2023}}, period, showLoginDialog, glccSettings, repoPublic, showMatchingBut, isResultPublic} = props;
useEffect(() => {
if (!current_user.user_id) {
@@ -30,10 +30,6 @@ export default (props) => {
}
}, [])
- function goToCheckResult(){
- history.push("/glcc/result");
- }
-
// 页面跳转,判断是否登录
function gotoCheckLogin(url){
if(current_user && current_user.login){
@@ -91,6 +87,15 @@ export default (props) => {
掌握项目课题详细信息
}
+ {/* 0元项目 */}
+
+
+

+
0元资金项目
+
+ 欢迎广大学生踊跃参与
+
+
{/* 学生报名6.24结束第一次报名,6.29 1:00 - 6.30 24:00第二次报名 */}
{(period === "stuApply" || period === "stuApply1") && {gotoCheckLogin(`/glcc/${id}/subjects`)}}>
@@ -108,14 +113,15 @@ export default (props) => {
以赛代筛,挖掘高潜力人才
}
- {/* 6.28.-7.1 审核结果仅对导师可见,7.1之后对所有用户可见*/}
- {/* {resultTime2 &&
+
+ {/* 学生-课题匹配结果公示 */}
+ {isResultPublic &&
{history.push("/glcc/result");}}>

-
名单{resultTime1 ? '预' : ''}公示
+
名单公示
查看各课题入选学生名单
-
} */}
+
}
{/* 学生结项考核 */}
{/* {!hasRole && checkedTaskId &&
diff --git a/src/glcc/img/studentProject2.png b/src/glcc/img/studentProject2.png
new file mode 100644
index 0000000000000000000000000000000000000000..5d8d2217c5047f8f38e73da815d8f2b37b145132
GIT binary patch
literal 298380
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 VeH#6qAF>5CFr0TXPo?sHJ}zY(qi
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