|
|
@@ -279,7 +279,7 @@
|
|
|
display: none;
|
|
|
}
|
|
|
|
|
|
- .menu-btn-add {
|
|
|
+ .remove-Contestant {
|
|
|
padding: 7px 15px;
|
|
|
font-size: 14px;
|
|
|
background-color: #db3434;
|
|
|
@@ -289,10 +289,20 @@
|
|
|
cursor: pointer;
|
|
|
transition: all 0.3s;
|
|
|
text-align: center;
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ left: 80px;
|
|
|
}
|
|
|
|
|
|
.menu-btn-add:nth-last-child(1) {
|
|
|
- margin-left: 10px;
|
|
|
+ padding: 7px 15px;
|
|
|
+ font-size: 14px;
|
|
|
+ color: white;
|
|
|
+ border: none;
|
|
|
+ border-radius: 5px;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.3s;
|
|
|
+ text-align: center;
|
|
|
background-color: #3498db;
|
|
|
}
|
|
|
|
|
|
@@ -401,14 +411,16 @@
|
|
|
border-bottom: 1px solid #e0e0e0;
|
|
|
}
|
|
|
|
|
|
- .button-Contestant{
|
|
|
+ .button-Contestant {
|
|
|
display: none;
|
|
|
margin-right: 20px;
|
|
|
}
|
|
|
- .button-Contestant.active{
|
|
|
+
|
|
|
+ .button-Contestant.active {
|
|
|
display: block;
|
|
|
}
|
|
|
- #registerBtn1{
|
|
|
+
|
|
|
+ #registerBtn1 {
|
|
|
display: none;
|
|
|
}
|
|
|
</style>
|
|
|
@@ -492,7 +504,6 @@
|
|
|
<div class="content-header" style="display: flex;justify-content: space-between;">
|
|
|
<h2 style="display: inline-block;font-size: 24px;">参赛信息登记</h2>
|
|
|
<div class="button-Contestant">
|
|
|
- <button class="menu-btn-add" onclick="removeContestant()">删除选手</button>
|
|
|
<button class="menu-btn-add" onclick="addContestant()">添加选手</button>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -520,7 +531,12 @@
|
|
|
<!-- 步骤2:填写报名信息 -->
|
|
|
<div id="step2" class="step-container">
|
|
|
<div class="step-title">第二步:填写报名信息</div>
|
|
|
-
|
|
|
+
|
|
|
+ <div class="form-group" style="display: flex;align-items: center;">
|
|
|
+ <label class="form-label required" for="name">指导教师</label>
|
|
|
+ <input style="width: 200px;margin-left: 20px;margin-right: 15px;" type="text" id="teacher" class="form-input" required>
|
|
|
+ <div class="error" id="name-error1">请输入指导教师</div>
|
|
|
+ </div>
|
|
|
<div class="form-container" id="formContainer">
|
|
|
<input type="hidden" id="competitionType" value="">
|
|
|
<h3>选手1:</h3>
|
|
|
@@ -673,9 +689,9 @@
|
|
|
|
|
|
const nowTime = new Date();
|
|
|
const givenTime = new Date("2025-10-13")
|
|
|
- if(givenTime - nowTime > 0){
|
|
|
+ if (givenTime - nowTime > 0) {
|
|
|
document.getElementById('registerBtn1').style.display = "none";
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
document.getElementById('registerBtn1').style.display = "block";
|
|
|
}
|
|
|
// 切换下载和报名区域
|
|
|
@@ -706,9 +722,9 @@
|
|
|
document.getElementById('downloadSection').classList.remove('active');
|
|
|
document.getElementById('uploadSection').classList.remove('active');
|
|
|
console.log("selectedCompetitionId:", selectedCompetitionId);
|
|
|
- if(buttonContestant){
|
|
|
+ if (buttonContestant) {
|
|
|
document.getElementsByClassName("button-Contestant")[0].classList.add('active');
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
document.getElementsByClassName("button-Contestant")[0].classList.remove('active');
|
|
|
}
|
|
|
});
|
|
|
@@ -754,14 +770,29 @@
|
|
|
});
|
|
|
|
|
|
let num = 1;
|
|
|
+ let addList = []
|
|
|
function addContestant() {
|
|
|
num = num + 1;
|
|
|
+ addList.push(num)
|
|
|
+ const ifFirst = addList.find(item => item === 1);
|
|
|
+ let addListLength = addList.length+1;
|
|
|
+ if (ifFirst) {
|
|
|
+ addListLength = addList.length
|
|
|
+ }
|
|
|
const html = document.getElementById('formContainer');
|
|
|
+ const createDiv = document.createElement('div');
|
|
|
+ createDiv.id = `addformContainer${num}`;
|
|
|
+ createDiv.style.position = 'relative';
|
|
|
const h3Create = document.createElement('h3');
|
|
|
- h3Create.innerText = `选手${num}:`;
|
|
|
- html.appendChild(h3Create);
|
|
|
+ h3Create.innerText = `选手${addListLength}:`;
|
|
|
+ createDiv.appendChild(h3Create);
|
|
|
+ const delButton = document.createElement('button');
|
|
|
+ delButton.innerText = `删除选手${addListLength}`;
|
|
|
+ delButton.className = 'menu-btn-add remove-Contestant';
|
|
|
+ delButton.onclick = removeContestant;
|
|
|
+ createDiv.appendChild(delButton);
|
|
|
const brCreate = document.createElement('br');
|
|
|
- html.appendChild(brCreate);
|
|
|
+ createDiv.appendChild(brCreate);
|
|
|
const formCrate = document.createElement('form');
|
|
|
formCrate.id = `registrationForm${num}`;
|
|
|
formCrate.innerHTML = `<div class="form-row">
|
|
|
@@ -870,26 +901,26 @@
|
|
|
<input type="tel" id="phone${num}" class="form-input" required pattern="[0-9]{11}">
|
|
|
<div class="error" id="phone-error${num}">请输入11位手机号码</div>
|
|
|
</div>`;
|
|
|
- html.appendChild(formCrate);
|
|
|
+ createDiv.appendChild(formCrate);
|
|
|
+ html.appendChild(createDiv);
|
|
|
}
|
|
|
+
|
|
|
|
|
|
- function removeContestant() {
|
|
|
- if (num <= 1) {
|
|
|
- alert("至少需要保留一名选手");
|
|
|
- return;
|
|
|
- }
|
|
|
+ function removeContestant(e) {
|
|
|
+ const parentElement = Number(e.target.parentElement.id && e.target.parentElement.id.slice(16));
|
|
|
+ addList = addList.filter(item => item !== parentElement);
|
|
|
const html = document.getElementById('formContainer');
|
|
|
- // 移除最后一个选手的 h3、br 和 form
|
|
|
- // h3
|
|
|
- let lastH3 = html.querySelector(`h3:last-of-type`);
|
|
|
- if (lastH3) html.removeChild(lastH3);
|
|
|
- // br
|
|
|
- let lastBr = html.querySelector(`br:last-of-type`);
|
|
|
- if (lastBr) html.removeChild(lastBr);
|
|
|
- // form
|
|
|
- let lastForm = html.querySelector(`form#registrationForm${num}`);
|
|
|
- if (lastForm) html.removeChild(lastForm);
|
|
|
- num = num - 1;
|
|
|
+ let selectForm = html.querySelector(`div#addformContainer${parentElement}`);
|
|
|
+ if (selectForm) html.removeChild(selectForm);
|
|
|
+ // 依次递增更新剩余选手的序号
|
|
|
+ addList.forEach((item, idx) => {
|
|
|
+ let formDiv = html.querySelector(`div#addformContainer${item}`);
|
|
|
+ if (formDiv) {
|
|
|
+ formDiv.querySelector('h3').innerText = `选手${idx + 2}:`;
|
|
|
+ formDiv.querySelector('button').innerText = `删除选手${idx + 2}`;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // num = num - 1;
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -901,10 +932,15 @@
|
|
|
let idError = '';
|
|
|
let phone = '';
|
|
|
let phoneError = '';
|
|
|
- for (let i = 1; i <= num; i++) {
|
|
|
+ let i = 0
|
|
|
+ let isFirst = addList.find(item => item === 1);
|
|
|
+ if(!isFirst) addList.unshift(1);
|
|
|
+
|
|
|
+ for (let j = 0; j <= addList.length-1; j++) {
|
|
|
let element = null;
|
|
|
let errorElement = null;
|
|
|
let isValid = true;
|
|
|
+ i = addList[j]
|
|
|
requiredFields.forEach(field => {
|
|
|
element = document.getElementById(field + i);
|
|
|
errorElement = document.getElementById(`${field}-error` + i);
|
|
|
@@ -937,7 +973,7 @@
|
|
|
}
|
|
|
|
|
|
if (!isValid) {
|
|
|
- alert(`选手${num}填写信息有误,请重新填写`);
|
|
|
+ alert(`选手${j+1}填写信息有误,请重新填写`);
|
|
|
return;
|
|
|
};
|
|
|
|
|
|
@@ -956,11 +992,16 @@
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+ const teacher = document.getElementById('teacher').value;
|
|
|
+ if(!teacher) {
|
|
|
+ alert('请填写指导老师');
|
|
|
+ return;
|
|
|
+ }
|
|
|
try {
|
|
|
// 收集表单数据
|
|
|
const formDataObj = {
|
|
|
type: selectedCompetitionId, // 报名类型,1桌游,2智能体
|
|
|
- uploadUrl: uploadFileUrl, // 上传文件的URL
|
|
|
+ uploadUrl: teacher, // 上传文件的URL
|
|
|
idCard: formData.map(item => item.id_number).join(","), // 选手身份证号拼接
|
|
|
registrationFormUrl: "", // 报名表上传URL
|
|
|
user: JSON.stringify(formData),
|