#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include #include #include #include #include #include #include #include "AttendanceRecord.h" #include "NetworkApiManager.h" class MappingConfigDialog; /** * @brief 对话框位置限制过滤器 * 限制对话框只能在父窗口范围内移动 */ class DialogPositionFilter : public QObject { Q_OBJECT public: explicit DialogPositionFilter(QWidget *parent = nullptr) : QObject(parent) {} protected: bool eventFilter(QObject *obj, QEvent *event) override; }; /** * @brief 考勤记录管理端主窗口(网络版) * * 功能: * - 通过HTTP API从服务器获取数据 * - 显示考勤记录表格 * - 自动刷新数据(30秒) * - 按学号、姓名、日期筛选 * - 统计信息显示 * - 服务器配置管理 */ class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: // 数据操作 void loadAttendanceData(); // 从服务器加载考勤数据 void refreshData(); // 刷新数据 void filterData(); // 筛选数据 void exportToExcel(); // 导出为CSV void exportSelectedRecords(); // 导出选中的记录 void clearFilter(); // 清除筛选条件 void deleteSelectedRecord(); // 删除选中的记录 void deleteSelectedRecords(); // 批量删除选中的记录 void toggleSelectAll(); // 全选/取消全选 void unselectAll(); // 取消选中 // 管理功能 void onClearAllRecords(); // 清空所有签到记录(调用API) void onOpenSettings(); // 打开时间段设置 void onOpenMappingConfig(); // 打开映射配置 void onOpenFaceManage(); // 打开人脸管理 void onShowStatistics(); // 显示统计报表 void onAbout(); // 关于对话框 // 网络响应处理 void onRecordsFetched(const QVector &records); void onStatisticsFetched(int total, int today, const QString &serverTime); void onRecordsCleared(bool success); void onRecordDeleted(bool success); // 新增:删除记录响应 void onNetworkError(const QString &error); void onMappingConfigFetched(const QMap &studentNameMap, const QMap &classNameMap); void onMappingConfigUploaded(bool success); private: void setupUI(); // 设置UI界面 void setupMenuBar(); // 设置菜单栏 void setupConnections(); // 设置信号槽连接 void updateTable(const QVector &records); // 更新表格 void updateStatistics(int total, int today); // 更新统计信息 void showConnectionStatus(bool connected); // 显示连接状态 // UI组件 QTableWidget *m_tableWidget; QPushButton *m_refreshButton; QPushButton *m_exportButton; QPushButton *m_exportSelectedButton; // 导出选中 QPushButton *m_deleteSelectedButton; // 删除选中 QPushButton *m_clearFilterButton; QPushButton *m_settingsButton; QPushButton *m_statsButton; QPushButton *m_clearRecordsButton; QCheckBox *m_selectAllCheckBox; // 全选复选框 QPushButton *m_unselectAllButton; // 取消选中按钮 QLabel *m_totalLabel; QLabel *m_todayLabel; QLabel *m_statusLabel; QLabel *m_connectionLabel; QLabel *m_selectedCountLabel; // 显示选中数量 QComboBox *m_classFilterCombo; // 班级筛选下拉框 QComboBox *m_studentFilterCombo; QLineEdit *m_nameFilterEdit; QComboBox *m_dateFilterCombo; QDateEdit *m_specificDateEdit; // 特定日期选择器 QCheckBox *m_enableSpecificDateCheckBox; // 启用特定日期筛选 // 数据 QVector m_allRecords; // 所有记录 QVector m_filteredRecords; // 筛选后的记录 QSet m_selectedRecordKeys; // 保存选中记录的唯一键(timestamp+studentId) QMap m_studentNameMap; // 学号 -> 真实姓名 映射 QMap m_classNameMap; // 班级编号 -> 班级名称 映射 // 辅助函数 QString getMappedStudentName(const QString &studentId, const QString &originalName) const; QString getMappedClassName(const QString &classId) const; void loadMappingConfigFromSettings(); void saveMappingConfigToSettings(); // 网络 NetworkApiManager *m_apiManager; // 网络API管理器 QTimer *m_autoRefreshTimer; // 自动刷新定时器 }; #endif // MAINWINDOW_H