PageSourceSearch

https://proobruch.ru/assets/OlympiadParticipantsPage-Ijeo7qP2.js

js proobruch.ru collected 2026-10-09 22:39:15 UTC 32,645 bytes, 1 lines download raw bytes

1import{aT as kt,l as Pt,u as Mt,ab as Je,r as w,F as l,j as e,B as u,bw as Lt,q as p,T as Ft,U as $t,b3 as O,aJ as Te,I as h,bI as Bt,M as be,ai as ke,aj as E,ak as A,C as Rt,bq as Ot,a2 as z,at as We,$ as zt,S as Ee,aL as C,aI as ve,aP as we,aQ as ne,bn as Dt}from"./vendor-0v--kTIY.js";import{a as _t,h as Gt,n as He,c as qt}from"./olympiadTours-RStjGuDj.js";import{m as Pe}from"./dateTime-BzdwezlB.js";import{S as Ut}from"./StatusTag-Bi0jHo4c.js";import{u as Yt}from"./useProfile-Cs-GdnZn.js";import{a as Wt}from"./useOlympiads-DtsBdqFz.js";import{u as Ht,p as Vt}from"./usePayment-TNBQElln.js";import{D as Kt}from"./DisabledReasonButton-DL8NmCgv.js";import{u as Qt,a as Jt,b as Zt,c as Xt,d as es,e as ts,f as ss,g as as,h as ns,i as rs}from"./useParticipants-B6_lcrn7.js";import{P as ls,a as os,D as is,L as cs,k as ds}from"./index-D44GA20K.js";import"./payments-Cy_OS6u9.js";const ms=a=>(a==null?void 0:a.replace(/^\s*\d{1,2}\s*/u,"").trim().toLocaleUpperCase("ru-RU"))??"",us=(a,n)=>`${a}${(n==null?void 0:n.trim().toLocaleUpperCase("ru-RU"))??""}`,{Title:Y,Text:T}=Ft,{Option:j}=A,Ve={MALE:"М",FEMALE:"Ж"},xs={CLASS:"Класс",TEAM:"Команда",PROGRAM:"Программа",NOMINATION:"Номинация"},Ae=112,hs=" ",W=a=>`${new Intl.NumberFormat("ru-RU",{maximumFractionDigits:0}).format(a)}${hs}₽`,Ke=a=>{const n=Je(a);return n.year()===Pe().year()?n.format("D MMMM"):n.format("D MMMM YYYY")},Ce=({children:a})=>{const{token:n}=z.useToken();return e.jsx("div",{style:{background:n.colorBgContainer,border:`1px solid ${n.colorBorderSecondary}`,borderRadius:n.borderRadiusLG,overflow:"hidden"},children:a})},re=({text:a,actionLabel:n,actionIcon:f,onAction:g})=>{const{token:D}=z.useToken();return e.jsxs("div",{style:{padding:"16px 0",textAlign:"center"},children:[e.jsx(T,{style:{display:"block",fontSize:15,color:D.colorTextSecondary},children:a}),n&&g&&e.jsx(u,{type:"link",icon:f,onClick:g,style:{marginTop:4},children:n})]})},Ne=({title:a,intro:n})=>{const{token:f}=z.useToken();return e.jsxs("div",{children:[e.jsx("div",{children:a}),e.jsx("div",{style:{marginTop:4,fontFamily:"var(--font-ui)",fontSize:15,fontWeight:400,lineHeight:1.5,letterSpacing:0,color:f.colorTextSecondary},children:n})]})},Me=({title:a})=>{const{token:n}=z.useToken();return e.jsx(C,{title:a,trigger:["hover","focus"],children:e.jsx(Dt,{tabIndex:0,"aria-label":"Подсказка",style:{marginInlineStart:8,color:n.colorTextTertiary,cursor:"help"}})})},le=({label:a,hint:n,children:f})=>{const{token:g}=z.useToken();return e.jsxs("div",{children:[e.jsxs(T,{style:{display:"block",minHeight:24,fontSize:15,color:g.colorTextSecondary,marginBottom:2},children:[a,n&&e.jsx(Me,{title:n})]}),f]})},Qe=({email:a})=>e.jsx(T,{copyable:{text:a,tooltips:["Скопировать почту","Почта скопирована"]},children:e.jsx("a",{href:`mailto:${a}`,children:a})}),gs=({payment:a,paymentLoading:n,paymentError:f,paymentFetching:g,onRetryPayment:D,fallbackPricingMode:v,localParticipantCount:r,localTeamCount:o,payIsPrimary:_,onGoToPayment:oe})=>{const{token:L}=z.useToken(),F={fontSize:26,lineHeight:1.2,display:"block"},H=((a==null?void 0:a.pricingMode)??v)==="PER_TEAM",V=(a==null?void 0:a.participantCount)??r,G=(a==null?void 0:a.teamCount)??o,$=(a==null?void 0:a.status)==="PAID";let i,N;return n?(i=e.jsx(We.Input,{active:!0,style:{height:36,width:140}}),N=e.jsx(We.Input,{active:!0,style:{height:36,width:140}})):f||!a?(i=e.jsxs(e.Fragment,{children:[e.jsx(T,{style:{display:"block",fontSize:16,color:L.colorTextSecondary},children:"Не получилось загрузить оплату."}),e.jsx(u,{onClick:D,loading:g,style:{marginTop:8},children:"Попробовать снова"})]}),N=e.jsx(T,{style:{fontSize:24,color:L.colorTextSecondary},children:"—"})):(i=e.jsx("span",{className:"olimp-money",style:{...F,color:L.colorSuccess},children:W(a.approvedAmount)}),N=e.jsx("span",{className:"olimp-money",style:{...F,color:L.colorError},children:W(a.remainingAmount)})),e.jsx(zt,{style:{marginBottom:24},children:e.jsxs(ke,{gutter:[24,20],align:"top",children:[e.jsx(E,{flex:"1 1 160px",children:e.jsx(le,{label:"Всего участников",children:e.jsx("span",{className:"olimp-money",style:F,children:V})})}),H&&e.jsx(E,{flex:"1 1 160px",children:e.jsx(le,{label:"Команд",hint:"Взнос платится за каждую команду целиком — сколько бы участников в ней ни было.",children:e.jsx("span",{className:"olimp-money",style:F,children:G})})}),e.jsx(E,{flex:"1 1 160px",children:e.jsx(le,{label:"Оплачено",children:i})}),e.jsx(E,{flex:"1 1 160px",children:e.jsx(le,{label:"Остаток",children:N})}),!n&&e.jsx(E,{flex:"0 1 280px",style:{alignSelf:"center"},children:e.jsx(u,{type:_&&!$?"primary":"default",size:"large",block:!0,onClick:oe,children:"Оплата"})})]})})},As=()=>{const{id:a}=kt(),n=Number(a),f=Pt(),{data:g,isLoading:D}=Yt(),v=(g==null?void 0:g.institutionType)??"GENERAL_EDUCATION",{data:r}=Wt(n),{data:o,isLoading:_,isError:oe,isFetching:L,refetch:F}=Qt(n),H=r==null?void 0:r.pricingMode,V=H==="PER_TEAM",G=o==null?void 0:o.approvalStatus,$=G==="APPROVED",i=((o==null?void 0:o.canManage)??!1)&&$,N=(o==null?void 0:o.pedagogs)??[],y=(o==null?void 0:o.students)??[],Ze=Mt(),{data:x,isLoading:Xe,isError:et,isFetching:tt,refetch:st}=Ht(n,$),K=()=>{Ze.invalidateQueries({queryKey:Vt(n)})},Q=t=>!x||x.approvedAmount<=0||V!==t?0:Math.max(0,x.approvedAmount-Math.max(0,x.totalAmount-x.unitPrice)),ie=(r==null?void 0:r.windows.registration.source)??"BY_DATES",ce=(r==null?void 0:r.registrationStart)??(x==null?void 0:x.registrationStart)??null,Le=(r==null?void 0:r.registrationEnd)??(x==null?void 0:x.registrationEnd)??null,k=ie==="BY_DATES"&&Le?Ke(Le):null,at=ie==="MANUAL_CLOSED"?"Приём участников закрыт организаторами олимпиады, поэтому список сейчас доступен только для просмотра. ":ie==="BY_DATES"&&ce&&Pe().isBefore(Je(ce),"day")?`Приём участников откроется ${Ke(ce)} — тогда список можно будет заполнить. `:k?`Регистрация закончилась ${k}, поэтому список зафиксирован и доступен только для просмотра. `:"Регистрация закончилась, поэтому список зафиксирован и доступен только для просмотра. ",J=r==null?void 0:r.secretaryEmail,Z=(o==null?void 0:o.groups)??[],nt=_t(r),rt=Gt(r),de=nt&&!rt,X=(r==null?void 0:r.type)==="HYBRID",Fe=X?He(r):void 0,B=Fe&&qt(Fe,Pe())?"Групповой тур уже начался, поэтому добавить нового участника нельзя. В команду можно включить только участников, уже зарегистрированных в личном туре.":void 0,$e=t=>{var s;return((s=Z.find(d=>d.id===t))==null?void 0:s.name)??"—"},Be=t=>Z.find(s=>s.id===t.groupId&&s.type==="TEAM"),[me,Re]=w.useState(""),ue=me.trim().toLowerCase(),lt=ue?y.filter(t=>
1[t.lastName,t.firstName].filter(Boolean).join(" ").toLowerCase().includes(ue)):y,[ot,xe]=w.useState(!1),[he,it]=w.useState(null),[q]=l.useForm(),[ct,ge]=w.useState(!1),[pe,dt]=w.useState(null),[b]=l.useForm(),mt=l.useWatch("pedagogIsOrganizer",b),ut=l.useWatch("parallel",b),xt=Array.from({length:Math.max(0,Math.min(11,(r==null?void 0:r.gradeTo)??11)-Math.max(1,(r==null?void 0:r.gradeFrom)??1)+1)},(t,s)=>Math.max(1,(r==null?void 0:r.gradeFrom)??1)+s),[ht,je]=w.useState(!1),[c,gt]=w.useState(null),[ee,te]=w.useState([]),[R]=l.useForm(),P=(c==null?void 0:c.type)??"TEAM",Oe=X&&P==="TEAM",se=y.filter(t=>!Be(t)||c!=null&&t.groupId===c.id),ae=Oe?se.filter(t=>t.personalTourEligible||c!=null&&t.groupId===c.id):se,ze=se.length-ae.length,S=(()=>{var I,U;const t=((I=He(r))==null?void 0:I.divisions)??[],s=y.filter(m=>ee.includes(m.id));return((U=t.map(m=>({division:m,count:s.filter(M=>v==="PROFESSIONAL"?m.includesSpo:M.parallel!=null&&M.parallel>=m.gradeFrom&&M.parallel<=m.gradeTo).length})).filter(m=>m.count>0).sort((m,M)=>M.count-m.count||M.division.gradeTo-m.division.gradeTo||M.division.orderIndex-m.division.orderIndex)[0])==null?void 0:U.division)??(t.length===1?t[0]:void 0)})(),De=Jt(n),_e=Zt(n),pt=Xt(n),Ge=es(n),qe=ts(n),jt=ss(n),Ue=as(n),Ye=ns(n),ft=rs(n),fe=t=>{it(t??null),q.setFieldsValue(t??{lastName:"",firstName:"",patronymic:"",gender:void 0}),xe(!0)},yt=async()=>{const t=await q.validateFields();try{he?await _e.mutateAsync({id:he.id,data:t}):await De.mutateAsync(t)}catch{return}xe(!1),q.resetFields()},ye=t=>{if(dt(t??null),t){const{classLabel:s,...d}=t;b.setFieldsValue({...d,classLetter:ms(s)})}else b.resetFields();ge(!0)},St=async()=>{const t=await b.validateFields(),{classLetter:s,...d}=t,I=v==="GENERAL_EDUCATION"?{...d,classLabel:us(d.parallel,s)}:d;try{pe?await qe.mutateAsync({id:pe.id,data:I}):await Ge.mutateAsync(I)}catch{return}K(),ge(!1),b.resetFields()},Se=t=>{gt(t??null),te(t?y.filter(s=>s.groupId===t.id).map(s=>s.id):[]),t?R.setFieldsValue({name:t.name,curatorLastName:t.curatorLastName,curatorFirstName:t.curatorFirstName,curatorPatronymic:t.curatorPatronymic,curatorGender:t.curatorGender}):R.resetFields(),je(!0)},It=async()=>{const s={...await R.validateFields(),type:(c==null?void 0:c.type)??"TEAM",participantIds:ee};try{c?await Ye.mutateAsync({id:c.id,data:s}):await Ue.mutateAsync(s)}catch{return}K(),je(!1),te([]),R.resetFields()},Tt=[...N].sort((t,s)=>`${t.lastName} ${t.firstName} ${t.patronymic}`.localeCompare(`${s.lastName} ${s.firstName} ${s.patronymic}`,"ru")),bt=[{title:"Фамилия",dataIndex:"lastName"},{title:"Имя",dataIndex:"firstName"},{title:"Отчество",dataIndex:"patronymic"},{title:e.jsx("span",{style:{whiteSpace:"nowrap"},children:"Пол"}),dataIndex:"gender",render:t=>Ve[t]??t,width:80,align:"center"},...i?[{title:"",key:"actions",width:Ae,align:"center",render:(t,s)=>e.jsxs(Ee,{children:[e.jsx(C,{title:"Изменить данные педагога",children:e.jsx(u,{size:"small",icon:e.jsx(ve,{}),onClick:()=>fe(s)})}),e.jsx(we,{title:"Удалить педагога из списка?",description:"Запись будет удалена из списка. Это действие нельзя отменить.",onConfirm:()=>pt.mutate(s.id),okText:"Да, удалить",cancelText:"Нет, оставить",okButtonProps:{danger:!0},children:e.jsx(C,{title:"Удалить педагога из списка",children:e.jsx(u,{size:"small",danger:!0,icon:e.jsx(ne,{})})})})]})}]:[]],Ie=[{title:"Фамилия",dataIndex:"lastName"},{title:"Имя",dataIndex:"firstName"},{title:"Пол",dataIndex:"gender",render:t=>Ve[t]??t,width:60}],Et=[...Ie,{title:"Класс",dataIndex:"classLabel",width:80},{title:"Параллель",dataIndex:"parallel",width:90}],vt=[...Ie,{title:"Группа",dataIndex:"groupName",width:100},{title:"База",dataIndex:"baseEducation",width:60},{title:"Курс",dataIndex:"courseYear",width:60}],wt=[{title:"Группа",dataIndex:"groupId",render:t=>$e(t),width:140},{title:"Педагог",key:"educator",dataIndex:"pedagogName",render:t=>t??"—"}],At=[...g?v==="PROFESSIONAL"?vt:Et:Ie,...wt,...i?[{title:"",key:"actions",width:Ae,align:"center",render:(t,s)=>{const d=X?Be(s):void 0;return e.jsxs(Ee,{children:[e.jsx(C,{title:"Изменить данные участника",children:e.jsx(u,{size:"small",icon:e.jsx(ve,{}),onClick:()=>ye(s)})}),d?e.jsx(C,{title:`Участник входит в команду «${d.name}». Сначала уберите его из состава команды, затем удалите.`,children:e.jsx("span",{children:e.jsx(u,{size:"small",danger:!0,icon:e.jsx(ne,{}),disabled:!0})})}):e.jsx(we,{title:`Удалить ${[s.lastName,s.firstName].filter(
1Boolean).join(" ")} из списка?`,description:Q(!1)>0?`Оплата уже подтверждена. После удаления переплата составит ${W(Q(!1))}. Вернуть её можно по письму.`:k?`Ученик перестанет быть участником олимпиады. При необходимости его можно будет добавить заново до ${k}.`:"Ученик перестанет быть участником олимпиады. При необходимости его можно будет добавить заново, пока открыт приём участников.",onConfirm:()=>jt.mutate(s.id,{onSuccess:K}),okText:"Да, удалить",cancelText:"Нет, оставить",okButtonProps:{danger:!0},children:e.jsx(C,{title:"Удалить участника из списка",children:e.jsx(u,{size:"small",danger:!0,icon:e.jsx(ne,{})})})})]})}}]:[]],Ct=t=>{const s=[t.curatorLastName,t.curatorFirstName,t.curatorPatronymic].filter(Boolean);return s.length?s.join(" "):"—"},Nt=[{title:"Тип",dataIndex:"type",width:120,render:t=>e.jsx(Ut,{tone:"neutral",dot:!1,children:xs[t]})},{title:"Название",dataIndex:"name",width:220},{title:"Куратор",key:"curator",width:250,render:(t,s)=>Ct(s)},{title:"Участников",dataIndex:"participantCount",width:110},V?{title:e.jsxs("span",{children:["Сумма",e.jsx(Me,{title:"Взнос платится за каждую команду целиком. Классы, программы и номинации отдельно не оплачиваются."})]}),key:"amount",width:170,render:(t,s)=>s.type==="TEAM"?`${W(s.amount)} за команду`:"—"}:{title:e.jsxs("span",{children:["Платных участников",e.jsx(Me,{title:"Сколько участников группы оплачиваются."})]}),key:"payable",width:130,render:(t,s)=>`${s.payableCount} чел.`},...i?[{title:"",key:"actions",width:Ae,align:"center",fixed:"right",render:(t,s)=>e.jsxs(Ee,{children:[e.jsx(C,{title:"Изменить группу",children:e.jsx(u,{size:"small",icon:e.jsx(ve,{}),onClick:()=>Se(s)})}),e.jsx(we,{title:"Удалить группу?",description:[s.participantCount>0?`Участники этой группы (${s.participantCount}) останутся в заявке без группы.`:null,s.type==="TEAM"&&Q(!0)>0?`Оплата уже подтверждена. После удаления переплата составит ${W(Q(!0))}. Вернуть её можно по письму.`:null,"Группа, её командные работы и результаты будут удалены. Это действие нельзя отменить."].filter(Boolean).join(" "),onConfirm:()=>ft.mutate(s.id,{onSuccess:K}),okText:"Да, удалить",cancelText:"Нет, оставить",okButtonProps:{danger:!0},children:e.jsx(C,{title:"Удалить группу",children:e.jsx(u,{size:"small",danger:!0,icon:e.jsx(ne,{})})})})]})}]:[]];return e.jsxs(ls,{children:[e.jsx(os,{title:`Участники${r?` — ${r.title}`:""}`,breadcrumb:e.jsx(u,{icon:e.jsx(Lt,{}),onClick:()=>f(`/olympiads/${n}`),children:"Назад к олимпиаде"})}),oe&&e.jsx(p,{type:"error",showIcon:!0,message:"Не получилось загрузить список участников",description:"Проверьте подключение к интернету и нажмите «Попробовать снова». Если не поможет — обновите страницу через пару минут.",action:e.jsx(u,{onClick:()=>F(),loading:L,children:"Попробовать снова"}),style:{marginBottom:24}}),G==="PENDING_APPROVAL"&&e.jsx(p,{type:"info",showIcon:!0,message:"Заявка на рассмотрении",description:"Организатор олимпиады ещё не одобрил вашу заявку на участие. Добавление участников станет доступно после одобрения.",style:{marginBottom:24}}),G==="REJECTED"&&e.jsx(p,{type:"error",showIcon:!0,message:"Заявка отклонена",description:o!=null&&o.approvalRejectionReason?`Причина: ${o.approvalRejectionReason}. Свяжитесь с оргкомитетом олимпиады, если считаете это ошибкой.`:"Свяжитесь с оргкомитетом олимпиады, если считаете это ошибкой.",style:{marginBottom:24}}),$&&e.jsx(gs,{payment:x,paymentLoading:Xe,paymentError:et,paymentFetching:tt,onRetryPayment:()=>st(),fallbackPricingMode:H,localParticipantCount:y.length,localTeamCount:Z.filter(t=>t.type==="TEAM").length,payIsPrimary:!i,onGoToPayment:()=>f(`/olympiads/${n}?tab=payment`)}),i&&e.jsx(p,{type:"warning",showIcon:!0,message:k?`Список можно менять до ${k} включительно`:"Список можно менять, пока организаторы олимпиады принимают участников",description:e.jsxs(e.Fragment,{children:[k?"После этой даты добавить, изменить или удалить участников уже не получится — по этому списку считается оплата и готовятся дипломы. ":"Когда приём участников закроют, добавить, изменить или удалить участников уже не получится — по этому списку считается оплата и готовятся дипломы. ","Если вы добавили участников после оплаты — не забудьте доплатить за них."," ",J?e.jsxs(e.Fragment,{children:["Если что-то изменится позже — напишите секретарю олимпиады: ",e.jsx(Qe,{email:J}),"."]}):"Если что-то изменится позже — свяжитесь с оргкомитетом олимпиады."]}),style:{marginBottom:24}}),$&&!i&&e.jsx(p,{type:"info",showIcon:!0,message:"Изменение списка закрыто",description:e.jsxs(e.Fragment,{children:[at,J?e.jsxs(e.Fragment,{children:["Если нужно что-то исправить — напишите секретарю олимпиады: ",e.jsx(Qe,{email:J}),"."]}):"Если нужно что-то исправить — свяжитесь с оргкомитетом олимпиады."]}),style:{marginBottom:24}}),i&&e.jsxs(T,{type:"secondary",style:{display:"block",marginBottom:24,fontSize:15,overflowWrap:"break-word"},children:[e.jsx($t,{style:{marginRight:8}}),"Добавляя участников и педагогов, вы подтверждаете, что получили согласия родителей (законных представителей) учеников и самих педагогов на обработку их данных — см."," ",e.jsx(is,{to:`${cs.terms.path}#${ds}`,children:"Пользовательское соглашение"}),"."]}),e.jsxs("div",{style:{marginBottom:32},children:[e.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:12,alignItems:"center",justifyContent:"space-between",marginBottom:4},children:[e.jsx(Y,{level:4,style:{margin:0},children:"Педагоги"}),i&&e.jsx(u,{type:"primary",icon:e.jsx(O,{}),onClick:()=>fe(),children:"Добавить педагога"})]}),e.jsx(T,{type:"secondary",style:{display:"block",marginBottom:12,fontSize:14},children:"Педагоги и другие специалисты, которые готовили или сопровождали участников олимпиады."}),e.jsx(Ce,{children:e.jsx(Te,{dataSource:Tt,columns:bt,rowKey:"id",loading:_,pagination:!1,tableLayout:"fixed",locale:{emptyText:e.jsx(re,{text:"Педагоги пока не добавлены.",actionLabel:i?"Добавить педагога":void 0,actionIcon:e.jsx(O,{}),onAction:()=>fe()})}})})]}),e.jsxs("div",{style:{marginBottom:32},children:[e.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:12,alignItems:"center",justifyContent:"space-between",marginBottom:12},children:[e.jsx(Y,{level:4,style:{margin:0},children:"Участники"}),e.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:12,alignItems:"center",justifyContent:"flex-end",flex:"1 1 auto"},children:[e.jsx(h,{allowClear:!0,prefix:e.jsx(Bt,{}),placeholder:"Поиск по фамилии","aria-label":"Поиск участника по фамилии",value:me,onChange:t=>Re(t.target.value),style:{flex:"0 1 320px",minWidth:260}}),i&&e.jsx(Kt,{type:"primary",icon:e.jsx(O,{}),disabled:B!=null,disabledReason:B,onClick:()=>ye(),children:"Добавить участника"})]})]}),e.jsx(Ce,{children:e.jsx(Te,{dataSource:lt,columns:At,rowKey:"id",loading:_||D,pagination:!1,scroll:{x:"max-content"},locale:{emptyText:ue?e.jsx(re,{text:`По запросу «${me.trim()}» никого не нашли. Проверьте написание фамилии.`,actionLabel:"Показать всех участников",onAction:()=>Re("")}):e.jsx(re,{text:i&&!B?"В списке пока никого нет. Добавьте учеников, которые будут участвовать, — на одного уходит меньше минуты.":i&&B?`В списке нет ни одного участника. ${B}`:"В списке нет ни одного участника.",actionLabel:i&&!B?"Добавить первого участника":void 0,actionIcon:e.jsx(O,{}),onAction:()=>ye()})}})})]}),e.jsxs("div",{children:[e.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:12,alignItems:"center",justifyContent:"space-between",marginBottom:12},children:[e.jsx(Y,{level:4,style:{margin:0},children:"Группы"}),i&&e.jsx(u,{type:"primary",icon:e.jsx(O,{}),onClick:()=>Se(),disabled:y.length===0,children:"Добавить группу"})]}),de&&e.jsx(p,{type:"info",showIcon:!0,message:"Сначала добавьте участников, затем создайте команды и выберите их состав переключателями.",style:{marginBottom:12}}),e.jsx(Ce,{children:e.jsx(Te,{dataSource:Z,columns:Nt,rowKey:"id",loading:_,pagination:!1,tableLayout:"fixed",scroll:{x:980},locale:{emptyText:e.jsx(re,{text:y.length===0?"Сначала добавьте участников — после этого можно будет создать группу.":"Групп пока нет. Создайте группу и выберите её участников.",actionLabel:i&&y.length>0?"Добавить группу":void 0,actionIcon:e.jsx(O,{}),onAction:()=>Se()})}})})]}),e.jsx(be,{title:e.jsx(Ne,{title:he?"Редактировать педагога":"Добавить педагога",intro:"Учитель, который подготовил участников. Заполните все поля — он получит благодарность на награждении, поэтому проверьте написание ФИО."}),open:ot,maskClosable:!1,keyboard:!1,onOk:yt,onCancel:()=>{xe(!1),q.resetFields()},confirmLoading:De.isPending||_e.isPending,okText:"Сохранить",cancelText:"Отмена",children:e.jsxs(l,{form:q,layout:"vertical",children:[e.jsxs(ke,{gutter:16,children:[e.jsx(E,{xs:24,sm:12,children:e.jsx(l.Item,{name:"lastName",label:"Фамилия",rules:[{required:!0,message:"Введите фамилию"}],children:e.jsx(h,{placeholder:"Например: Иванова"})})}),e.jsx(E,{xs:24,sm:12,children:e.jsx(l.Item,{name:"firstName",label:"Имя",rules:[{required:!0,message:"Введите имя"}],children:e.jsx(h,{placeholder:"Например: Мария"})})})]}),e.jsx(l.Item,{name:"patronymic",label:"Отчество",rules:[{required:!0,message:"Введите отчество"}],children:e.jsx(h,{placeholder:"Например: Сергеевна"})}),e.jsx(l.Item,{name:"gender",label:"Пол",rules:[{required:!0,message:"Выберите пол — М или Ж"}],children:e.jsxs(A,{placeholder:"Выберите пол",children:[e.jsx(j,{value:"MALE",children:"М"}),e.jsx(j,{value:"FEMALE",children:"Ж"})]})})]})}),e.jsx(be,{title:e.jsx(Ne,{title:pe?"Редактировать участника":"Добавить участника",intro:"Заполните поля со звёздочкой — остальное по желанию. Данные попадут в диплом, поэтому проверьте написание."}),open:ct,maskClosable:!1,keyboard:!1,onOk:St,onCancel:()=>{ge(!1),b.resetFields()},confirmLoading:Ge.isPending||qe.isPending,okText:"Сохранить",cancelText:"Отмена",width:520,children:e.jsxs(l,{form:b,layout:"vertical",children:[e.jsxs(ke,{gutter:16,children:[e.jsx(E,{xs:24,sm:12,children:e.jsx(l.Item,{name:"lastName",label:"Фамилия",rules:[{required:!0,message:"Введите фамилию участника"}],children:e.jsx(h,{placeholder:"Например: Иванов"})})}),e.jsx(E,{xs:24,sm:12,children:e.jsx(l.Item,{name:"firstName",label:"Имя",rules:[{required:!0,message:"Введите имя участника"}],children:e.jsx(h,{placeholder:"Например: Пётр"})})})]}),e.jsx(l.Item,{name:"gender",label:"Пол",rules:[{required:!0,message:"Выберите пол — М или Ж"}],children:e.jsxs(A,{placeholder:"Выберите пол",children:[e.jsx(j,{value:"MALE",children:"М"}),e.jsx(j,{value:"FEMALE",children:"Ж"})]})}),v==="GENERAL_EDUCATION"&&e.jsxs(e.Fragment,{children:[e.jsx(l.Item,{name:"parallel",label:"Класс",rules:[{required:!0,message:"Выберите класс"}],children:e.jsx(A,{placeholder:"Выберите класс",children:xt.map(t=>e.jsx(j,{value:t,children:t},t))})}),e.jsx(l.Item,{name:"classLetter",label:"Литера",rules:[{pattern:/^[А-ЯЁA-Z]{1,3}$/iu,message:"Укажите только буквы литеры, без номера класса"}],children:e.jsx(h,{addonBefore:ut??"Класс",placeholder:"Например: А",maxLength:3})})]}),v==="PROFESSIONAL"&&e.jsxs(e.Fragment,{children:[e.jsx(l.Item,{name:"groupName",label:"Название группы",rules:[{required:!0,message:"Введите название группы"}],children:e.jsx(h,{placeholder:"Например: 121АК"})}),e.jsx(l.Item,{name:"baseEducation",label:"База образования",rules:[{required:!0,message:"Выберите базу образования"}],extra:"На базе скольких классов поступил студент.",children:e.jsxs(A,{placeholder:"На базе",children:[e.jsx(j,{value:9,children:"9 классов"}),e.jsx(j,{value:11,children:"11 классов"})]})}),e.jsx(l.Item,{name:"courseYear",label:"Курс (год обучения)",rules:[{required:!0,message:"Выберите курс"}],children:e.jsx(A,{placeholder:"Курс",children:[1,2,3,4,5].map(t=>e.jsx(j,{value:t,children:t},t))})})]}),e.jsxs(l.Item,{label:"Педагог",tooltip:"Педагог или другой специалист, подготовивший участника.",children:[e.jsx(l.Item,{name:"pedagogId",noStyle:!0,children:e.jsx(A,{placeholder:"Не выбран",allowClear:!0,disabled:mt,children:N.map(t=>e.jsxs(j,{value:t.id,children:[t.lastName," ",t.firstName," ",t.patronymic]},t.id))})}),e.jsx(l.Item,{name:"pedagogIsOrganizer",valuePropName:"checked",initialValue:!1,noStyle:!0,children:e.jsx(Rt,{style:{marginTop:8},onChange:t=>{t.target.checked&&b.setFieldValue("pedagogId",void 0)},children:"Педагог — это я (организатор)"})})]})]})}),e.jsx(be,{title:e.jsx(Ne,{title:c?"Редактировать группу":"Добавить группу",intro:P==="TEAM"?"Укажите название команды и выберите участников её состава.":"Укажите название группы и выберите участников её состава."}),open:ht,maskClosable:!1,keyboard:!1,onOk:It,onCancel:()=>{je(!1),te([]),R.resetFields()},confirmLoading:Ue.isPending||Ye.isPending,okText:"Сохранить",cancelText:"Отмена",width:680,children:e.jsxs(l,{form:R,layout:"vertical",children:[e.jsx(l.Item,{name:"name",label:"Наз
1вание",rules:[{required:!0,message:"Введите название"}],children:e.jsx(h,{placeholder:"Например: Команда №1"})}),e.jsxs(Y,{level:5,style:{marginTop:8,marginBottom:4},children:["Состав ",P==="TEAM"?"команды":"группы"]}),e.jsx(T,{type:"secondary",style:{display:"block",marginBottom:12,fontSize:14},children:"Выберите состав группы. Участники других команд здесь не показываются. Участник другой группы будет перенесён сюда после сохранения."}),P==="TEAM"&&S&&(S.minTeamSize!=null||S.maxTeamSize!=null)&&e.jsx(p,{type:"info",showIcon:!0,message:`Категория «${S.name}»: ${S.minTeamSize!=null?`от ${S.minTeamSize}`:""}${S.minTeamSize!=null&&S.maxTeamSize!=null?" ":""}${S.maxTeamSize!=null?`до ${S.maxTeamSize}`:""} участников в команде. Сейчас выбрано: ${ee.length}.`,style:{marginBottom:12}}),de&&P!=="TEAM"&&e.jsx(p,{type:"info",showIcon:!0,message:"При чисто командном зачёте участников можно включать только в группу типа «Команда».",style:{marginBottom:12}}),X&&P==="TEAM"&&e.jsx(p,{type:"info",showIcon:!0,message:"В команду можно включить только участников, зарегистрированных в личном туре.",description:ze>0&&ae.length>0?`Здесь не показаны участники (${ze}), для класса или курса которых в личном туре нет возрастной категории.`:void 0,style:{marginBottom:12}}),y.length===0?e.jsx(p,{type:"info",showIcon:!0,message:"Сначала добавьте участников, затем создайте группу и выберите её состав.",style:{marginBottom:16}}):ae.length===0?e.jsx(p,{type:"warning",showIcon:!0,message:se.length===0?"Все участники уже состоят в других командах. Добавьте новых учеников или освободите участников другой команды.":"Нет участников, подходящих для команды: в команду включаются только участники личного тура.",style:{marginBottom:16}}):e.jsx("div",{className:"group-member-picker",children:ae.map(t=>{const s=ee.includes(t.id),d=t.groupId?$e(t.groupId):null;return e.jsxs("div",{className:"group-member-picker-row",children:[e.jsxs("span",{className:"group-member-picker-name",children:[e.jsxs("strong",{children:[t.lastName," ",t.firstName]}),e.jsxs(T,{type:"secondary",style:{fontSize:13},children:[v==="PROFESSIONAL"?[t.groupName,t.courseYear?`${t.courseYear} курс`:null].filter(Boolean).join(" · "):[t.classLabel,t.parallel?`${t.parallel} класс`:null].filter(Boolean).join(" · "),d&&t.groupId!==(c==null?void 0:c.id)?` · сейчас: ${d}`:""]}),Oe&&!t.personalTourEligible&&e.jsx(T,{type:"warning",style:{fontSize:13},children:"Не участвует в личном туре — уберите из команды"})]}),e.jsx(Ot,{checked:s,disabled:de&&P!=="TEAM","aria-label":`${s?"Исключить":"Включить"} участника ${t.lastName} ${t.firstName}`,onChange:I=>te(U=>I?[...U,t.id]:U.filter(m=>m!==t.id))})]},t.id)})}),e.jsx(Y,{level:5,style:{marginTop:8},children:"Куратор (необязательно)"}),e.jsx(l.Item,{name:"curatorLastName",label:"Фамилия",children:e.jsx(h,{placeholder:"Фамилия"})}),e.jsx(l.Item,{name:"curatorFirstName",label:"Имя",children:e.jsx(h,{placeholder:"Имя"})}),e.jsx(l.Item,{name:"curatorPatronymic",label:"Отчество",children:e.jsx(h,{placeholder:"Отчество"})}),e.jsx(l.Item,{name:"curatorGender",label:"Пол куратора",dependencies:["curatorLastName"],rules:[({getFieldValue:t})=>({validator(s,d){const I=t("curatorLastName");return I&&String(I).trim()&&!d?Promise.reject(new Error("Укажите пол куратора")):Promise.resolve()}})],children:e.jsxs(A,{placeholder:"Выберите пол",allowClear:!0,children:[e.jsx(j,{value:"MALE",children:"М"}),e.jsx(j,{value:"FEMALE",children:"Ж"})]})})]})})]})};export{As as OlympiadParticipantsPage,As as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.