diff --git a/certificate.html b/certificate.html
index c63a758..ec98c9f 100644
--- a/certificate.html
+++ b/certificate.html
@@ -948,6 +948,19 @@
const sessionId = getSessionId();
urlEncodedData.append('sessionId', sessionId);
+ // 从URL参数中获取邀请者信息
+ const urlParams = new URLSearchParams(window.location.search);
+ const inviter = urlParams.get('inviter');
+ const inviterPhone = urlParams.get('inviterPhone');
+
+ // 添加邀请者信息
+ if (inviter) {
+ urlEncodedData.append('inviter', inviter);
+ }
+ if (inviterPhone) {
+ urlEncodedData.append('inviterPhone', inviterPhone);
+ }
+
// 发送数据到服务器
fetch('/submit', {
method: 'POST',
diff --git a/invite.html b/invite.html
index ca99423..44fde5d 100644
--- a/invite.html
+++ b/invite.html
@@ -154,6 +154,14 @@
+
+
diff --git a/login.html b/login.html
new file mode 100644
index 0000000..03631e9
--- /dev/null
+++ b/login.html
@@ -0,0 +1,202 @@
+
+
+
+
+
+
登录
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/server.js b/server.js
index cf77833..81a023e 100644
--- a/server.js
+++ b/server.js
@@ -76,6 +76,138 @@ const server = http.createServer(async (req, res) => {
return;
}
+ // 登录接口
+ if (req.method === 'POST' && req.url === '/login') {
+ try {
+ let body = '';
+ req.on('data', chunk => {
+ body += chunk.toString();
+ });
+
+ req.on('end', async () => {
+ try {
+ // 解析表单数据
+ const formData = new URLSearchParams(body);
+ const userName = formData.get('userName');
+ const password = formData.get('password');
+
+ console.log('接收到的登录请求:', { userName });
+
+ // 验证输入
+ if (!userName || !password) {
+ res.writeHead(400, {
+ 'Content-Type': 'application/json',
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type'
+ });
+ res.end(JSON.stringify({
+ success: false,
+ error: '请输入用户名和密码'
+ }));
+ return;
+ }
+
+ // 连接到userlogin数据库
+ const userloginPool = mysql.createPool({
+ ...dbConfig,
+ database: 'userlogin'
+ });
+
+ // 验证用户名和密码
+ const [loginRows] = await userloginPool.execute(
+ 'SELECT * FROM login WHERE userName = ? AND password = ?',
+ [userName, password]
+ );
+
+ if (loginRows.length === 0) {
+ res.writeHead(401, {
+ 'Content-Type': 'application/json',
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type'
+ });
+ res.end(JSON.stringify({
+ success: false,
+ error: '用户名或密码错误'
+ }));
+ return;
+ }
+
+ const loginInfo = loginRows[0];
+ const managerId = loginInfo.managerId;
+
+ // 获取用户详细信息
+ const [personnelRows] = await userloginPool.execute(
+ 'SELECT * FROM personnel WHERE managerId = ?',
+ [managerId]
+ );
+
+ let userInfo = {
+ userName: loginInfo.userName,
+ projectName: loginInfo.projectName,
+ managerId: loginInfo.managerId
+ };
+
+ if (personnelRows.length > 0) {
+ const personnelInfo = personnelRows[0];
+ userInfo = {
+ ...userInfo,
+ name: personnelInfo.name,
+ phoneNumber: personnelInfo.phoneNumber,
+ managercompany: personnelInfo.managercompany,
+ managerdepartment: personnelInfo.managerdepartment,
+ organization: personnelInfo.organization,
+ alias: personnelInfo.alias
+ };
+ }
+
+ console.log('登录成功,用户信息:', userInfo);
+
+ // 返回成功响应
+ res.writeHead(200, {
+ 'Content-Type': 'application/json',
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type'
+ });
+ res.end(JSON.stringify({
+ success: true,
+ user: userInfo
+ }));
+
+ // 关闭临时连接池
+ await userloginPool.end();
+ } catch (error) {
+ console.error('处理登录请求失败:', error.message);
+ res.writeHead(500, {
+ 'Content-Type': 'application/json',
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type'
+ });
+ res.end(JSON.stringify({
+ success: false,
+ error: '登录失败,请重试'
+ }));
+ }
+ });
+ } catch (error) {
+ console.error('登录请求处理失败:', error.message);
+ res.writeHead(500, {
+ 'Content-Type': 'application/json',
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type'
+ });
+ res.end(JSON.stringify({
+ success: false,
+ error: '登录失败,请重试'
+ }));
+ }
+ return;
+ }
+
// 处理GET请求,获取最新的合格证信息
if (req.method === 'GET' && req.url.startsWith('/getLatestCertificate')) {
try {
@@ -88,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 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 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 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 FROM certificate WHERE sessionId IS NULL ORDER BY id DESC LIMIT 1';
params = [];
}
@@ -147,7 +279,9 @@ const server = http.createServer(async (req, res) => {
origin: formData.get('origin'),
date: now,
signature: formData.get('signature'),
- sessionId: sessionId
+ sessionId: sessionId,
+ inviter: formData.get('inviter'),
+ inviterPhone: formData.get('inviterPhone')
};
console.log('接收到的表单数据:', {
@@ -159,7 +293,9 @@ const server = http.createServer(async (req, res) => {
origin: certificate.origin,
date: certificate.date.toISOString(),
hasSignature: !!certificate.signature,
- sessionId: sessionId
+ sessionId: sessionId,
+ inviter: certificate.inviter,
+ inviterPhone: certificate.inviterPhone
});
// 处理手写签名,上传到OSS
@@ -218,8 +354,8 @@ const server = http.createServer(async (req, res) => {
// 插入数据到数据库
await pool.execute(
- 'INSERT INTO certificate (company, phoneNumber, productName, grossWeight, commitBasis, origin, issueDate, signature, sessionId, qrCodeUrl) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',
- [certificate.subjectName, certificate.contact, certificate.productName, certificate.weight, certificate.basis, certificate.origin, certificate.date, signatureUrl, certificate.sessionId, qrCodeUrl]
+ '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]
);
console.log('数据插入数据库成功');
@@ -229,6 +365,8 @@ const server = http.createServer(async (req, res) => {
...certificate,
signature: signatureUrl,
qrCodeUrl: qrCodeUrl,
+ inviter: certificate.inviter,
+ inviterPhone: certificate.inviterPhone,
// 格式化日期为YYYY-MM-DD格式
date: certificate.date.toISOString().split('T')[0]
};