From 30a2382557628ee4b9a9f0f8f0db28f94fbef0fc Mon Sep 17 00:00:00 2001 From: Default User Date: Wed, 4 Feb 2026 15:50:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=81=8C=E4=BD=8D=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E5=AD=97=E6=AE=B5=EF=BC=8C=E5=AE=8C=E5=96=84=E9=82=80?= =?UTF-8?q?=E8=AF=B7=E8=80=85=E4=BF=A1=E6=81=AF=E4=BC=A0=E9=80=92=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- certificate.html | 4 ++++ invite.html | 4 +++- login.html | 12 +++++++++--- server.js | 21 ++++++++++++--------- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/certificate.html b/certificate.html index ec98c9f..7e74cf5 100644 --- a/certificate.html +++ b/certificate.html @@ -952,6 +952,7 @@ const urlParams = new URLSearchParams(window.location.search); const inviter = urlParams.get('inviter'); const inviterPhone = urlParams.get('inviterPhone'); + const inviterProjectName = urlParams.get('inviterProjectName'); // 添加邀请者信息 if (inviter) { @@ -960,6 +961,9 @@ if (inviterPhone) { urlEncodedData.append('inviterPhone', inviterPhone); } + if (inviterProjectName) { + urlEncodedData.append('inviterProjectName', inviterProjectName); + } // 发送数据到服务器 fetch('/submit', { diff --git a/invite.html b/invite.html index 44fde5d..a71f077 100644 --- a/invite.html +++ b/invite.html @@ -218,19 +218,21 @@ const userInfo = localStorage.getItem('userInfo'); let inviterName = ''; let inviterPhone = ''; + let inviterProjectName = ''; if (userInfo) { try { const user = JSON.parse(userInfo); inviterName = user.name || user.userName; inviterPhone = user.phoneNumber || ''; + inviterProjectName = user.projectName || ''; } catch (error) { console.error('解析用户信息失败:', error); } } // 构建邀请URL,包含会话ID和邀请者信息 - const inviteUrl = `http://8.137.125.67:3008/certificate.html?sessionId=${encodeURIComponent(sessionId)}&inviter=${encodeURIComponent(inviterName)}&inviterPhone=${encodeURIComponent(inviterPhone)}`; + const inviteUrl = `http://8.137.125.67:3008/certificate.html?sessionId=${encodeURIComponent(sessionId)}&inviter=${encodeURIComponent(inviterName)}&inviterPhone=${encodeURIComponent(inviterPhone)}&inviterProjectName=${encodeURIComponent(inviterProjectName)}`; // 使用Google Charts API生成二维码 const qrCodeUrl = `https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=${encodeURIComponent(inviteUrl)}`; diff --git a/login.html b/login.html index 03631e9..25bad25 100644 --- a/login.html +++ b/login.html @@ -134,6 +134,10 @@ +
+ + +
@@ -163,10 +167,11 @@ const userName = document.getElementById('userName').value.trim(); const password = document.getElementById('password').value; + const projectName = document.getElementById('projectName').value.trim(); // 验证输入 - if (!userName || !password) { - showError('请输入用户名和密码'); + if (!userName || !password || !projectName) { + showError('请输入用户名、密码和职位名称'); return; } @@ -178,7 +183,8 @@ }, body: new URLSearchParams({ userName: userName, - password: password + password: password, + projectName: projectName }) }) .then(response => response.json()) diff --git a/server.js b/server.js index 81a023e..d92b9f4 100644 --- a/server.js +++ b/server.js @@ -114,10 +114,10 @@ const server = http.createServer(async (req, res) => { database: 'userlogin' }); - // 验证用户名和密码 + // 验证用户名、密码和职位名称 const [loginRows] = await userloginPool.execute( - 'SELECT * FROM login WHERE userName = ? AND password = ?', - [userName, password] + 'SELECT * FROM login WHERE userName = ? AND password = ? AND projectName = ?', + [userName, password, formData.get('projectName')] ); if (loginRows.length === 0) { @@ -220,10 +220,10 @@ const server = http.createServer(async (req, res) => { // 从数据库获取对应会话的最新合格证信息 let query, params; if (sessionId) { - query = 'SELECT company as subjectName, phoneNumber as contact, productName, grossWeight as weight, commitBasis as basis, origin, DATE_FORMAT(issueDate, "%Y-%m-%d") as date, signature, qrCodeUrl, inviter, inviter_phone as inviterPhone FROM certificate WHERE sessionId = ? ORDER BY id DESC LIMIT 1'; + query = 'SELECT company as subjectName, phoneNumber as contact, productName, grossWeight as weight, commitBasis as basis, origin, DATE_FORMAT(issueDate, "%Y-%m-%d") as date, signature, qrCodeUrl, inviter, inviter_phone as inviterPhone, projectName as inviterProjectName FROM certificate WHERE sessionId = ? ORDER BY id DESC LIMIT 1'; params = [sessionId]; } else { - query = 'SELECT company as subjectName, phoneNumber as contact, productName, grossWeight as weight, commitBasis as basis, origin, DATE_FORMAT(issueDate, "%Y-%m-%d") as date, signature, qrCodeUrl, inviter, inviter_phone as inviterPhone FROM certificate WHERE sessionId IS NULL ORDER BY id DESC LIMIT 1'; + query = 'SELECT company as subjectName, phoneNumber as contact, productName, grossWeight as weight, commitBasis as basis, origin, DATE_FORMAT(issueDate, "%Y-%m-%d") as date, signature, qrCodeUrl, inviter, inviter_phone as inviterPhone, projectName as inviterProjectName FROM certificate WHERE sessionId IS NULL ORDER BY id DESC LIMIT 1'; params = []; } @@ -281,7 +281,8 @@ const server = http.createServer(async (req, res) => { signature: formData.get('signature'), sessionId: sessionId, inviter: formData.get('inviter'), - inviterPhone: formData.get('inviterPhone') + inviterPhone: formData.get('inviterPhone'), + inviterProjectName: formData.get('inviterProjectName') }; console.log('接收到的表单数据:', { @@ -295,7 +296,8 @@ const server = http.createServer(async (req, res) => { hasSignature: !!certificate.signature, sessionId: sessionId, inviter: certificate.inviter, - inviterPhone: certificate.inviterPhone + inviterPhone: certificate.inviterPhone, + inviterProjectName: certificate.inviterProjectName }); // 处理手写签名,上传到OSS @@ -354,8 +356,8 @@ const server = http.createServer(async (req, res) => { // 插入数据到数据库 await pool.execute( - 'INSERT INTO certificate (company, phoneNumber, productName, grossWeight, commitBasis, origin, issueDate, signature, sessionId, qrCodeUrl, inviter, inviter_phone) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', - [certificate.subjectName, certificate.contact, certificate.productName, certificate.weight, certificate.basis, certificate.origin, certificate.date, signatureUrl, certificate.sessionId, qrCodeUrl, certificate.inviter, certificate.inviterPhone] + 'INSERT INTO certificate (company, phoneNumber, productName, grossWeight, commitBasis, origin, issueDate, signature, sessionId, qrCodeUrl, inviter, inviter_phone, projectName) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', + [certificate.subjectName, certificate.contact, certificate.productName, certificate.weight, certificate.basis, certificate.origin, certificate.date, signatureUrl, certificate.sessionId, qrCodeUrl, certificate.inviter, certificate.inviterPhone, certificate.inviterProjectName] ); console.log('数据插入数据库成功'); @@ -367,6 +369,7 @@ const server = http.createServer(async (req, res) => { qrCodeUrl: qrCodeUrl, inviter: certificate.inviter, inviterPhone: certificate.inviterPhone, + inviterProjectName: certificate.inviterProjectName, // 格式化日期为YYYY-MM-DD格式 date: certificate.date.toISOString().split('T')[0] };