forgeplus-react/src/pages/Competitions/Entered/Enteredmodel/SetmembersModel.tsx

233 lines
9.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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,
identity:item.identity,
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={950}
>
<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