chao 1 month ago
parent
commit
1bc2ff667c
3 changed files with 77 additions and 36 deletions
  1. 1 1
      model/mysql.js
  2. 75 34
      public/index.html
  3. 1 1
      routes/router.js

+ 1 - 1
model/mysql.js

@@ -15,7 +15,7 @@ us.mysqlconnection = function (host, database) {
             user: "root", //用户名
             password: "cocorobo", //密码
             database: database, //数据库名称
-            port: 3306 //端口
+            port: 3306 //端口 11111
         }); //连接超时和错误从连
     }
     //connectionLimit: 1000, 

+ 75 - 34
public/index.html

@@ -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),

+ 1 - 1
routes/router.js

@@ -3,7 +3,7 @@ var router = express.Router();
 var mysql = require('../model/mysql');
 const _mysqluser = ["172.16.12.5", "registration"]; //用戶數據庫信息
 
-//const _mysqluser = ["183.36.25.93", "registration"]; //用戶數據庫信息
+// const _mysqluser = ["183.36.25.93", "registration"]; //用戶數據庫信息
 const crypto = require('crypto');
 
 router.route('/user').post(async function (req, res) {