forked from Gitlink/forgeplus-react
231 lines
9.0 KiB
TypeScript
231 lines
9.0 KiB
TypeScript
import React, { useEffect, useState, FC } from 'react';
|
||
import { Modal, Input, Dropdown, message } from 'antd'
|
||
import { CloseOutlined } from '@ant-design/icons';
|
||
import styles from '../index.less'
|
||
const Search = Input.Search;
|
||
import TeammemberTItle from './TeammemberTItle'
|
||
import Teammember from './Teammembers'
|
||
|
||
import TeacherList from './DownTeacher'
|
||
import StudentList from './DownStudents'
|
||
import { Base64 } from 'js-base64';
|
||
//设置战队成员
|
||
interface Setmember {
|
||
Membersshow: any
|
||
setMembers: any
|
||
dispatch: any
|
||
identifier: any
|
||
mydatas: any
|
||
selectlist: any
|
||
StaffDetail:any
|
||
setClose:any
|
||
HeaderDetail:any
|
||
}
|
||
function Setmembers({ Membersshow,setClose,HeaderDetail, StaffDetail,setMembers, dispatch, identifier, mydatas, selectlist }: Setmember) {
|
||
const [teachname, setTeachname] = useState<any>('');
|
||
const [studentname, setStudentname] = useState<any>('');
|
||
//搜索老师数据
|
||
const [teachers, setTeachers] = useState<any>([]);
|
||
const [downteacher, setDownteacher] = useState<any>(false);
|
||
//搜索学生数据
|
||
const [students, setStudents] = useState<any>([]);
|
||
const [downstudents, setDownstudents] = useState<any>(false);
|
||
|
||
//战队成员
|
||
const [Teams, setTeams] = useState<any>([]);
|
||
//队长id
|
||
const [loaderid, setLoaderid] = useState<any>([]);
|
||
//提交时学生数量 与老师数量
|
||
const [TeacherNumber,setTeacherNumber]=useState<any>([]);
|
||
const [StudentNumber,setStudentNumber]=useState<any>([]);
|
||
//判断是否需要弹出警告
|
||
const[isTwarning,setIsTwarning]=useState<any>(false);
|
||
const[isSwarning,setIsSwarning]=useState<any>(false);
|
||
useEffect(() => {
|
||
//排序 规则为 队长永远只第一位 创建者只第二位
|
||
let datas = mydatas && mydatas.team_members.sort((item: any, item1: any) => {
|
||
return item.creator ? -1 : 1
|
||
}).sort((item: any, item1: any) => {
|
||
return item.role === 'leader' ? -1 : 1
|
||
})
|
||
setTeams(datas)
|
||
}, [])
|
||
|
||
//查找学生
|
||
async function getStudents() {
|
||
|
||
let data = await dispatch({
|
||
type: 'competitions/getStudents',
|
||
payload: {
|
||
identifier: identifier,
|
||
keyword: studentname,
|
||
team_id: mydatas && mydatas.id,
|
||
openkey: Base64.encode("05e9081ede2e7425db064df44b5fb1897234f44f922443b89597d17b60dc8f3e"),
|
||
sign:"cdf0f69b4d5b4293f7914cc1f1f31742",
|
||
}
|
||
})
|
||
if (data) {
|
||
setStudents(data.teachers)
|
||
}
|
||
}
|
||
//查找老师
|
||
async function getteacher() {
|
||
|
||
let data = await dispatch({
|
||
type: 'competitions/getTeacher',
|
||
payload: {
|
||
openkey: Base64.encode("05e9081ede2e7425db064df44b5fb1897234f44f922443b89597d17b60dc8f3e"),
|
||
sign:"cdf0f69b4d5b4293f7914cc1f1f31742",
|
||
identifier: identifier,
|
||
keyword: teachname,
|
||
team_id: mydatas && mydatas.id
|
||
}
|
||
})
|
||
if (data) {
|
||
// console.log(data.teachers);
|
||
setTeachers(data.teachers)
|
||
}
|
||
}
|
||
//提交数据
|
||
async function submitTeam() {
|
||
let member_ids: any = [];
|
||
let teacher_ids: any = [];
|
||
let gitlink_users:any=[];
|
||
|
||
Teams && Teams.map((item: any, index: any) => {
|
||
if (item.is_teacher) {
|
||
teacher_ids.push(item.id)
|
||
} else {
|
||
member_ids.push(item.id)
|
||
}
|
||
gitlink_users.push({
|
||
login: item.login,
|
||
lastname:item.lastname,
|
||
nickname:item.nickname,
|
||
mail:item.mail,
|
||
school_name:item.school_name
|
||
})
|
||
})
|
||
console.log("addTeam:",gitlink_users);
|
||
|
||
setTeacherNumber(teacher_ids.length);
|
||
setStudentNumber(member_ids.length);
|
||
if(StaffDetail?.teacher_staff?.maximum<teacher_ids.length){
|
||
setIsTwarning(true);
|
||
return
|
||
}
|
||
setIsTwarning(false);
|
||
if(StaffDetail?.member_staff?.maximum<member_ids.length){
|
||
setIsSwarning(true);
|
||
return
|
||
}
|
||
setIsSwarning(false);
|
||
|
||
|
||
let data = await dispatch({
|
||
type: 'competitions/SubmitTeam',
|
||
payload: {
|
||
openkey: Base64.encode("05e9081ede2e7425db064df44b5fb1897234f44f922443b89597d17b60dc8f3e"),
|
||
sign:"cdf0f69b4d5b4293f7914cc1f1f31742",
|
||
identifier: identifier,
|
||
teamid: mydatas && mydatas.id,
|
||
member_ids: member_ids,
|
||
teacher_ids: teacher_ids,
|
||
leader: loaderid,
|
||
gitlink_users:gitlink_users
|
||
}
|
||
})
|
||
if (data && data.status === 0) {
|
||
// console.log(data.teachers);
|
||
message.info('修改成功');
|
||
setMembers(false);
|
||
selectlist('');
|
||
}
|
||
|
||
}
|
||
return (
|
||
<Modal
|
||
centered
|
||
title={<div style={{ alignItems: 'center', display: 'flex' }}><div style={{ textAlign: 'left', flex: '1' }}>设置战队成员</div><CloseOutlined onClick={() => setMembers(false)} style={{ cursor: 'porint' }} /></div>}
|
||
visible={Membersshow}
|
||
closable={false}
|
||
destroyOnClose={true}
|
||
onOk={() => {
|
||
submitTeam();
|
||
}}
|
||
onCancel={() => {
|
||
setMembers(false);
|
||
setClose()
|
||
//selectlist('');
|
||
}}
|
||
width={900}
|
||
>
|
||
<div className={styles.setmembers}>
|
||
<p>添加教师</p>
|
||
<Dropdown overlay={<TeacherList HeaderDetail={HeaderDetail} teachers={teachers} setTeams={setTeams} Teams={Teams} />} getPopupContainer={(trigger): any => trigger.parentNode} visible={downteacher}>
|
||
<Search value={teachname} placeholder="请搜索教师姓名/手机号并添加" allowClear
|
||
onChange={(e) => {
|
||
setTeachname(e.target.value)
|
||
}}
|
||
onSearch={(value) => {
|
||
setDownteacher(true)
|
||
getteacher()
|
||
}}
|
||
onBlur={() => {
|
||
setDownteacher(false)
|
||
}}
|
||
/>
|
||
</Dropdown>
|
||
|
||
<p>添加学生/专业人士</p>
|
||
<Dropdown overlay={<StudentList HeaderDetail={HeaderDetail} students={students} setTeams={setTeams} Teams={Teams} />} getPopupContainer={(trigger): any => trigger.parentNode} visible={downstudents}>
|
||
<Search value={studentname} placeholder="请搜索队员姓名/手机号并添加" allowClear
|
||
onChange={(e) => {
|
||
setStudentname(e.target.value)
|
||
}}
|
||
onSearch={(value) => {
|
||
setDownstudents(true)
|
||
getStudents()
|
||
}}
|
||
onBlur={() => {
|
||
setDownstudents(false)
|
||
}}
|
||
/>
|
||
</Dropdown>
|
||
<div style={{ display: 'flex', marginBottom: '12px', marginTop: '15px' }}>
|
||
<p style={{ flex: '1' }}>
|
||
请添加战队成员:
|
||
{StaffDetail&&StaffDetail.teacher_staff?
|
||
<span>{StaffDetail&&StaffDetail.teacher_staff.minimum}-{StaffDetail&&StaffDetail.teacher_staff.maximum}名教师</span>:''}
|
||
{StaffDetail&&StaffDetail.teacher_staff&&StaffDetail.member_staff?'/':''}
|
||
{StaffDetail&&StaffDetail.member_staff?
|
||
<span>{StaffDetail&&StaffDetail.member_staff.minimum}-{StaffDetail&&StaffDetail.member_staff.maximum}名学生</span>:''}
|
||
</p>
|
||
|
||
<span style={{ color: '#F3730C' }}>建议优先将教师设置为队长</span>
|
||
|
||
</div>
|
||
<TeammemberTItle />
|
||
<div style={{ height: '240px',overflow:'auto' }}>
|
||
{Teams && Teams.map((item: any, index: any) => {
|
||
return (
|
||
<Teammember key={index} teamitem={item} index={index} setTeams={setTeams} Teams={Teams} setLoaderid={setLoaderid} />
|
||
)
|
||
})}
|
||
</div>
|
||
{isTwarning&&<p style={{
|
||
marginLeft: "53px",
|
||
color: "#D0021B",
|
||
fontSize: "12px",
|
||
marginTop: "9px"
|
||
}}>导师需为{StaffDetail?.teacher_staff?.minimum}-{StaffDetail?.teacher_staff?.maximum}人,现为{TeacherNumber}人</p>}
|
||
{isSwarning&&<p style={{
|
||
marginLeft: "53px",
|
||
color: "#D0021B",
|
||
fontSize: "12px",
|
||
marginTop: "9px"
|
||
}}>战队成员(职业为学生)需为{StaffDetail?.member_staff?.minimum}-{StaffDetail?.member_staff?.maximum}人,现为{StudentNumber}人</p>}
|
||
</div>
|
||
</Modal>
|
||
)
|
||
} export default Setmembers |