chao 1 month ago
parent
commit
40e27602ac
2 changed files with 65 additions and 27 deletions
  1. 12 1
      public/index.html
  2. 53 26
      routes/router.js

+ 12 - 1
public/index.html

@@ -1147,6 +1147,7 @@
                 alert('请正确填写指导老师手机号');
                 return;
             }
+            let phoneSet = new Set();
             for (let j = 0; j <= addList.length - 1; j++) {
                 let element = null;
                 let errorElement = null;
@@ -1183,6 +1184,14 @@
                     phoneError.style.display = 'none';
                 }
 
+                // 检查手机号是否重复
+                if (phoneSet.has(phone.value)) {
+                    alert(`选手${j + 1}的手机号与其他选手重复,请修改`);
+                    return;
+                } else {
+                    phoneSet.add(phone.value);
+                }
+
                 if (!isValid) {
                     alert(`选手${j + 1}填写信息有误,请重新填写`);
                     return;
@@ -1203,6 +1212,7 @@
                 })
             }
             try {
+
                 // 收集表单数据
                 const formDataObj = {
                     type: selectedCompetitionId, // 报名类型,1桌游,2智能体
@@ -1211,7 +1221,8 @@
                     registrationFormUrl: "", // 报名表上传URL
                     user: JSON.stringify(formData),
                 };
-                if (!confirm('提交之后无法再修改信息,是否确认提交?')) {
+                let aa = selectedCompetitionId == 2 ? "智能体应用类比赛" : "桌游设计挑战类比赛"
+                if (!confirm(`您参加的是${aa},提交之后无法再修改信息,是否确认提交?`)) {
                     return;
                 }
                 // 发送报名信息请求

+ 53 - 26
routes/router.js

@@ -8,46 +8,73 @@ const crypto = require('crypto');
 const XLSX = require('xlsx');
 
 router.route('/user').post(async function (req, res) {
-    const signUpData = [];
     const reqData = req.body;
     const uuid = crypto.randomUUID();
 
     let userData = JSON.parse(reqData.user);
-    await mysql.usselect([_mysqluser[0], _mysqluser[1], "select_registration_user", reqData.idCard], function (r) {
-        console.log(r[0] && r[0] ,r[0].some(item => item['type'] == Number(reqData.type)));
+    await mysql.usselect([_mysqluser[0], _mysqluser[1], "select_registration_user", reqData.idCard], async function (r) {
+        console.log(r[0] && r[0], r[0].some(item => item['type'] == Number(reqData.type)));
         if (r[0] && r[0].some(item => item['type'] == Number(reqData.type))) {
             res.send({ status: 'error', message: '选手报名失败,选手身份证号已存在' });
         } else {
-            const insertUserPromises = userData.map(item => {
-                return new Promise((resolve, reject) => {
-                    const userList = [];
-                    userList.unshift(_mysqluser[0], _mysqluser[1], "insert_registration_users", item.name, item.gender, item.ethnicity, item.birthdate, item.email, item.id_number, item.group, item.grade, item.school, item.schoolRegion, item.phone, uuid);
+            // const insertUserPromises = userData.map(item => {
+            //     return new Promise((resolve, reject) => {
+            //         const userList = [];
+            //         userList.unshift(_mysqluser[0], _mysqluser[1], "insert_registration_users", item.name, item.gender, item.ethnicity, item.birthdate, item.email, item.id_number, item.group, item.grade, item.school, item.schoolRegion, item.phone, uuid);
+            //         mysql.usselect(userList, function (data) {
+            //             // 可以根据 data 判断是否插入成功
+            //             console.log("insert_registration_users", data);
+            //             if (data != 0) {
+            //                 resolve(data);
+            //             } else {
+            //                 reject(data);
+            //             }
+            //         });
+            //     });
+            // });
+            // signUpData.unshift(_mysqluser[0], _mysqluser[1], "insert_registrations", reqData.uploadUrl, "", reqData.type, reqData.idCard);
+            // Promise.all(insertUserPromises).then(() => {
+            //     // 所有用户插入完成后再插入报名数据
+            //     mysql.usselect(signUpData, function (data) {
+            //         if (data != 0) {
+            //             res.send({ status: 'ok', message: '选手报名成功' });
+            //         } else {
+            //             res.send({ status: 'error', message: '选手报名失败' });
+            //         }
+            //     });
+            // }).catch(error => {
+            //     console.error("error", error);
+            //     res.send({ status: 'error', message: '选手报名失败,选手身份证号已存在' });
+            // });
+
+
+            for (const item of userData) {
+                const userList = [_mysqluser[0], _mysqluser[1], "insert_registration_users", item.name, item.gender, item.ethnicity, item.birthdate, item.email, item.id_number, item.group, item.grade, item.school, item.schoolRegion, item.phone, uuid]
+                await new Promise((resolve, reject) => {
                     mysql.usselect(userList, function (data) {
                         // 可以根据 data 判断是否插入成功
-                        console.log("insert_registration_users",data);
+                        console.log("insert_registration_users", data);
                         if (data != 0) {
                             resolve(data);
                         } else {
+                            res.send({ status: 'error', message: '选手报名失败' });
                             reject(data);
                         }
                     });
                 });
-            });
 
-            signUpData.unshift(_mysqluser[0], _mysqluser[1], "insert_registrations", reqData.uploadUrl, "", reqData.type, reqData.idCard);
-            Promise.all(insertUserPromises).then(() => {
-                // 所有用户插入完成后再插入报名数据
-                mysql.usselect(signUpData, function (data) {
-                    if (data != 0) {
-                        res.send({ status: 'ok', message: '选手报名成功' });
-                    } else {
-                        res.send({ status: 'error', message: '选手报名失败' });
-                    }
-                });
-            }).catch(error => {
-                console.error("error", error);
-                res.send({ status: 'error', message: '选手报名失败,选手身份证号已存在' });
+            }
+
+            const signUpData = [_mysqluser[0], _mysqluser[1], "insert_registrations", reqData.uploadUrl, "", reqData.type, reqData.idCard]
+            mysql.usselect(signUpData, function (data) {
+                if (data != 0) {
+                    res.send({ status: 'ok', message: '选手报名成功' });
+                } else {
+                    res.send({ status: 'error', message: '选手报名失败' });
+                }
             });
+
+            
         }
     })
 
@@ -77,10 +104,10 @@ router.route('/exportData').get(async function (req, res) {
             dataList = data[0];
             dataList = dataList.map(item => {
                 let user_group = ""
-                if(item.type == 1){
-                    user_group = item.user_group == 1?"小学低龄":item.user_group == 2?"小学高龄":item.user_group == 3?"中学":"高校"
-                }else{
-                    user_group = item.user_group == 1?"小学组(4-6年级)":item.user_group == 2?"初中组(7-9年级)":item.user_group == 3?"高中组(10-12年级,含中职)":"高校组(含高职)"
+                if (item.type == 1) {
+                    user_group = item.user_group == 1 ? "小学低龄" : item.user_group == 2 ? "小学高龄" : item.user_group == 3 ? "中学" : "高校"
+                } else {
+                    user_group = item.user_group == 1 ? "小学组(4-6年级)" : item.user_group == 2 ? "初中组(7-9年级)" : item.user_group == 3 ? "高中组(10-12年级,含中职)" : "高校组(含高职)"
                 }
                 return {
                     小组id: item.user_groupid,