Преглед на файлове

AI: 更新考勤系统和API

D8D AI преди 1 година
родител
ревизия
522d9eeff6
променени са 2 файла, в които са добавени 62 реда и са изтрити 112 реда
  1. 52 102
      src/api/deviceApi.js
  2. 10 10
      src/components/AttendanceSystem.jsx

+ 52 - 102
src/api/deviceApi.js

@@ -2,139 +2,89 @@ import axios from 'axios';
 
 const API_BASE_URL = 'http://your-device-api-url.com'; // 替换为实际的设备 API URL
 
-// 模拟数据存储
-let mockData = [
-  {
-    personId: '1',
-    name: '张三',
-    gender: '男',
-    age: 30,
-    birthDate: '1994-01-01',
-    maritalStatus: '已婚',
-    isBaptized: true,
-    baptismDate: '2010-05-15',
-    contact: '13800138000',
-    photo: null,
-    servicePosition: ['主日学老师', '敬拜团成员']
+const instance = axios.create({
+  baseURL: API_BASE_URL,
+  timeout: 10000,
+  headers: {
+    'Content-Type': 'application/json',
   },
-  {
-    personId: '2',
-    name: '李四',
-    gender: '女',
-    age: 25,
-    birthDate: '1999-03-15',
-    maritalStatus: '未婚',
-    isBaptized: false,
-    baptismDate: null,
-    contact: '13900139000',
-    photo: null,
-    servicePosition: ['接待员']
-  }
-];
-
-// 模拟考勤记录
-let mockAttendanceRecords = [
-  { personId: '1', name: '张三', timestamp: '2024-10-22T09:00:00Z', facePhoto: 'https://example.com/face1.jpg' },
-  { personId: '2', name: '李四', timestamp: '2024-10-22T09:15:00Z', facePhoto: 'https://example.com/face2.jpg' },
-  { personId: '1', name: '张三', timestamp: '2024-10-23T08:55:00Z', facePhoto: 'https://example.com/face3.jpg' },
-  { personId: '2', name: '李四', timestamp: '2024-10-23T09:05:00Z', facePhoto: 'https://example.com/face4.jpg' },
-];
+});
 
 export const deviceApi = {
-  getAllPersons: async () => {
+  // ... 保留之前的其他方法 ...
+
+  // 获取设备信息
+  getDeviceInfo: async () => {
     try {
-      console.log('调用 getAllPersons API');
-      return new Promise((resolve) => {
-        setTimeout(() => {
-          console.log('模拟 API 返回数据');
-          resolve([...mockData]);
-        }, 1000);
+      const response = await instance.get('/device/info');
+      return response.data;
+    } catch (error) {
+      console.error('获取设备信息失败', error);
+      throw error;
+    }
+  },
+
+  // 获取考勤记录
+  getAttendanceRecords: async (startTime, endTime) => {
+    try {
+      const response = await instance.post('/device/searchPersonPassRecords', {
+        startTime,
+        endTime,
       });
+      return response.data;
     } catch (error) {
-      console.error('获取所有会友信息失败:', error);
+      console.error('获取考勤记录失败', error);
       throw error;
     }
   },
 
+  // 下发人员信息
   addPerson: async (personInfo) => {
     try {
-      console.log('添加会友:', personInfo);
-      return new Promise((resolve) => {
-        setTimeout(() => {
-          const newPerson = {
-            ...personInfo,
-            personId: (mockData.length + 1).toString(),
-            photo: personInfo.photo ? URL.createObjectURL(personInfo.photo) : null
-          };
-          mockData.push(newPerson);
-          resolve(newPerson);
-        }, 500);
-      });
+      const response = await instance.post('/person/add', personInfo);
+      return response.data;
     } catch (error) {
-      console.error('添加会友失败:', error);
+      console.error('下发人员信息失败', error);
       throw error;
     }
   },
 
+  // 更新人员信息
   updatePerson: async (personId, personInfo) => {
     try {
-      console.log('更新会友:', personId, personInfo);
-      return new Promise((resolve) => {
-        setTimeout(() => {
-          const index = mockData.findIndex(p => p.personId === personId);
-          if (index !== -1) {
-            mockData[index] = { 
-              ...personInfo, 
-              personId,
-              photo: personInfo.photo ? URL.createObjectURL(personInfo.photo) : mockData[index].photo
-            };
-            resolve(mockData[index]);
-          } else {
-            throw new Error('未找到指定会友');
-          }
-        }, 500);
+      const response = await instance.post('/person/update', {
+        ...personInfo,
+        personId,
       });
+      return response.data;
     } catch (error) {
-      console.error('更新会友失败:', error);
+      console.error('更新人员信息失败', error);
       throw error;
     }
   },
 
+  // 删除人员信息
   deletePerson: async (personId) => {
     try {
-      console.log('删除会友:', personId);
-      return new Promise((resolve) => {
-        setTimeout(() => {
-          mockData = mockData.filter(p => p.personId !== personId);
-          resolve({ success: true });
-        }, 500);
-      });
+      const response = await instance.post('/person/delete', { personId });
+      return response.data;
     } catch (error) {
-      console.error('删除会友失败:', error);
+      console.error('删除人员信息失败', error);
       throw error;
     }
   },
 
-  getDeviceInfo: async () => {
-    return new Promise((resolve) => {
-      setTimeout(() => {
-        resolve({
-          deviceId: 'DEVICE001',
-          deviceName: '教会主门考勤机'
-        });
-      }, 500);
-    });
-  },
-
-  getAttendanceRecords: async (startDate, endDate) => {
-    return new Promise((resolve) => {
-      setTimeout(() => {
-        const filteredRecords = mockAttendanceRecords.filter(record => {
-          const recordDate = new Date(record.timestamp);
-          return recordDate >= new Date(startDate) && recordDate <= new Date(endDate);
-        });
-        resolve(filteredRecords);
-      }, 1000);
-    });
+  // 获取人员列表
+  getAllPersons: async () => {
+    try {
+      const response = await instance.post('/person/list', {
+        pageNo: 1,
+        pageSize: 1000, // 假设最大支持1000人,可以根据实际情况调整
+      });
+      return response.data.list;
+    } catch (error) {
+      console.error('获取人员列表失败', error);
+      throw error;
+    }
   },
 };

+ 10 - 10
src/components/AttendanceSystem.jsx

@@ -30,8 +30,8 @@ const AttendanceSystem = () => {
     setLoading(true);
     try {
       const [startDate, endDate] = dateRange;
-      const records = await deviceApi.getAttendanceRecords(startDate.toISOString(), endDate.toISOString());
-      setAttendanceRecords(records);
+      const records = await deviceApi.getAttendanceRecords(startDate.format('YYYY-MM-DD HH:mm:ss'), endDate.format('YYYY-MM-DD HH:mm:ss'));
+      setAttendanceRecords(records.list || []);
     } catch (error) {
       console.error('获取考勤记录失败', error);
     } finally {
@@ -51,20 +51,20 @@ const AttendanceSystem = () => {
     },
     {
       title: '姓名',
-      dataIndex: 'name',
-      key: 'name',
+      dataIndex: 'personName',
+      key: 'personName',
     },
     {
       title: '主日签到时间',
-      dataIndex: 'timestamp',
-      key: 'timestamp',
+      dataIndex: 'passTime',
+      key: 'passTime',
       render: (text) => moment(text).format('YYYY-MM-DD HH:mm:ss'),
     },
     {
       title: '人脸识别照片',
-      dataIndex: 'facePhoto',
-      key: 'facePhoto',
-      render: (photo) => photo ? <Image src={photo} width={50} /> : '无照片',
+      dataIndex: 'faceImageBase64',
+      key: 'faceImageBase64',
+      render: (photo) => photo ? <Image src={`data:image/jpeg;base64,${photo}`} width={50} /> : '无照片',
     },
   ];
 
@@ -87,7 +87,7 @@ const AttendanceSystem = () => {
           <Table
             dataSource={attendanceRecords}
             columns={columns}
-            rowKey={(record) => `${record.personId}-${record.timestamp}`}
+            rowKey={(record) => `${record.personId}-${record.passTime}`}
           />
         </Card>
       </Spin>