瀏覽代碼

AI: 添加模拟后端API

D8D AI 1 年之前
父節點
當前提交
2a21f76e84
共有 3 個文件被更改,包括 141 次插入12 次删除
  1. 79 0
      index.html
  2. 4 12
      package.json
  3. 58 0
      server.js

+ 79 - 0
index.html

@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>会友信息考勤打卡系统</title>
+    <style>
+        body { font-family: Arial, sans-serif; line-height: 1.6; margin: 0; padding: 20px; }
+        h1 { color: #333; }
+        form { margin-bottom: 20px; }
+        input, button { margin: 5px 0; padding: 5px; }
+        ul { list-style-type: none; padding: 0; }
+        li { background: #f4f4f4; margin-bottom: 5px; padding: 10px; }
+    </style>
+</head>
+<body>
+    <h1>会友信息考勤打卡系统</h1>
+    
+    <form id="addMemberForm">
+        <input type="text" id="memberName" placeholder="输入会员姓名" required>
+        <button type="submit">添加会员</button>
+    </form>
+
+    <h2>会员列表</h2>
+    <ul id="memberList"></ul>
+
+    <script>
+        const API_URL = 'http://localhost:3000/api';
+
+        // 获取并显示所有会员
+        async function fetchMembers() {
+            const response = await fetch(`${API_URL}/members`);
+            const members = await response.json();
+            const memberList = document.getElementById('memberList');
+            memberList.innerHTML = members.map(member => `
+                <li>
+                    ${member.name} 
+                    <button onclick="recordAttendance(${member.id})">记录考勤</button>
+                    <button onclick="viewAttendance(${member.id})">查看考勤</button>
+                </li>
+            `).join('');
+        }
+
+        // 添加新会员
+        document.getElementById('addMemberForm').addEventListener('submit', async (e) => {
+            e.preventDefault();
+            const name = document.getElementById('memberName').value;
+            await fetch(`${API_URL}/members`, {
+                method: 'POST',
+                headers: { 'Content-Type': 'application/json' },
+                body: JSON.stringify({ name })
+            });
+            document.getElementById('memberName').value = '';
+            fetchMembers();
+        });
+
+        // 记录考勤
+        async function recordAttendance(memberId) {
+            const date = new Date().toISOString().split('T')[0];
+            await fetch(`${API_URL}/attendance`, {
+                method: 'POST',
+                headers: { 'Content-Type': 'application/json' },
+                body: JSON.stringify({ memberId, date })
+            });
+            alert('考勤已记录');
+        }
+
+        // 查看考勤记录
+        async function viewAttendance(memberId) {
+            const response = await fetch(`${API_URL}/attendance/${memberId}`);
+            const attendance = await response.json();
+            alert(`考勤记录:\n${attendance.join('\n')}`);
+        }
+
+        // 初始加载会员列表
+        fetchMembers();
+    </script>
+</body>
+</html>

+ 4 - 12
package.json

@@ -2,25 +2,17 @@
   "name": "member-attendance-system",
   "version": "1.0.0",
   "description": "会友信息考勤打卡系统",
-  "main": "server/index.js",
+  "main": "server.js",
   "scripts": {
-    "start": "node server/index.js",
-    "dev": "concurrently \"npm run server\" \"npm run client\"",
-    "server": "nodemon server/index.js",
-    "client": "cd client && npm start",
-    "install-all": "npm install && cd client && npm install"
+    "start": "node server.js",
+    "dev": "nodemon server.js"
   },
   "dependencies": {
     "express": "^4.17.1",
-    "mongoose": "^6.0.12",
     "cors": "^2.8.5",
-    "dotenv": "^10.0.0",
-    "exceljs": "^4.3.0",
-    "pdfkit": "^0.13.0",
-    "mqtt": "^4.3.7"
+    "body-parser": "^1.19.0"
   },
   "devDependencies": {
-    "concurrently": "^6.3.0",
     "nodemon": "^2.0.14"
   }
 }

+ 58 - 0
server.js

@@ -0,0 +1,58 @@
+const express = require('express');
+const cors = require('cors');
+const bodyParser = require('body-parser');
+
+const app = express();
+const PORT = process.env.PORT || 3000;
+
+app.use(cors());
+app.use(bodyParser.json());
+
+// 模拟数据
+let members = [
+  { id: 1, name: '张三', attendance: [] },
+  { id: 2, name: '李四', attendance: [] },
+];
+
+// 获取所有会员
+app.get('/api/members', (req, res) => {
+  res.json(members);
+});
+
+// 添加新会员
+app.post('/api/members', (req, res) => {
+  const newMember = {
+    id: members.length + 1,
+    name: req.body.name,
+    attendance: []
+  };
+  members.push(newMember);
+  res.status(201).json(newMember);
+});
+
+// 记录考勤
+app.post('/api/attendance', (req, res) => {
+  const { memberId, date } = req.body;
+  const member = members.find(m => m.id === memberId);
+  if (member) {
+    member.attendance.push(date);
+    res.json(member);
+  } else {
+    res.status(404).json({ message: '会员不存在' });
+  }
+});
+
+// 获取考勤记录
+app.get('/api/attendance/:memberId', (req, res) => {
+  const memberId = parseInt(req.params.memberId);
+  const member = members.find(m => m.id === memberId);
+  if (member) {
+    res.json(member.attendance);
+  } else {
+    res.status(404).json({ message: '会员不存在' });
+  }
+});
+
+app.listen(PORT, () => {
+  console.log(`Server is running on port ${PORT}`);
+});