当前位置:首页 > React

react实现考勤表

2026-01-27 10:26:07React

React 实现考勤表

数据结构设计

考勤表通常需要记录员工、日期和考勤状态。可以使用以下数据结构:

react实现考勤表

const attendanceData = [
  {
    id: 1,
    name: "张三",
    records: [
      { date: "2023-10-01", status: "present" },
      { date: "2023-10-02", status: "absent" }
    ]
  }
];

组件结构

创建三个主要组件:

react实现考勤表

  • AttendanceTable:主表格组件
  • EmployeeRow:处理单行员工数据
  • StatusCell:渲染单个考勤状态单元格
function AttendanceTable({ data }) {
  return (
    <table>
      <thead>
        <tr>
          <th>姓名</th>
          <th>日期1</th>
          <th>日期2</th>
        </tr>
      </thead>
      <tbody>
        {data.map(employee => (
          <EmployeeRow key={employee.id} employee={employee} />
        ))}
      </tbody>
    </table>
  );
}

状态管理

使用React状态管理考勤数据:

const [attendance, setAttendance] = useState(initialData);

const updateStatus = (employeeId, date, newStatus) => {
  setAttendance(prev => prev.map(emp => {
    if(emp.id === employeeId) {
      return {
        ...emp,
        records: emp.records.map(rec => 
          rec.date === date ? {...rec, status: newStatus} : rec
        )
      };
    }
    return emp;
  }));
};

可视化呈现

为不同状态添加样式:

.present { background-color: #a3e635; }
.absent { background-color: #f87171; }
.leave { background-color: #60a5fa; }

完整示例

function StatusCell({ status, onUpdate }) {
  const colors = {
    present: 'bg-green-300',
    absent: 'bg-red-300',
    leave: 'bg-blue-300'
  };

  return (
    <td 
      className={`p-2 ${colors[status]}`}
      onClick={onUpdate}
    >
      {status}
    </td>
  );
}

function AttendanceApp() {
  const [data, setData] = useState(attendanceData);

  const handleStatusChange = (employeeId, date) => {
    const statusOptions = ['present', 'absent', 'leave'];
    const employee = data.find(e => e.id === employeeId);
    const currentIndex = statusOptions.indexOf(
      employee.records.find(r => r.date === date).status
    );
    const nextStatus = statusOptions[(currentIndex + 1) % statusOptions.length];

    setData(prev => prev.map(emp => {
      if(emp.id === employeeId) {
        return {
          ...emp,
          records: emp.records.map(rec => 
            rec.date === date ? {...rec, status: nextStatus} : rec
          )
        };
      }
      return emp;
    }));
  };

  return (
    <div className="p-4">
      <AttendanceTable 
        data={data} 
        onStatusChange={handleStatusChange}
      />
    </div>
  );
}

扩展功能

  • 添加日期选择器动态生成表头
  • 实现数据持久化(localStorage或API)
  • 添加统计功能计算出勤率
  • 支持批量操作和导出功能

这个实现提供了基础考勤表功能,可根据实际需求进一步扩展和完善。

标签: 考勤表react
分享给朋友:

相关文章

如何改造react

如何改造react

改造 React 项目的关键方法 分析当前项目结构 通过评估现有组件、状态管理和依赖项,明确需要改进的部分。使用工具如 webpack-bundle-analyzer 识别性能瓶颈。 升级 Reac…

如何选购react

如何选购react

选购 React 相关产品或服务的建议 React 是一个用于构建用户界面的 JavaScript 库,广泛应用于前端开发。以下是选购 React 相关产品(如课程、书籍、工具、组件库等)的参考方法:…

react 如何跳转

react 如何跳转

使用 React Router 进行页面跳转 React 应用中通常使用 react-router-dom 库实现页面跳转。以下是几种常见的跳转方式: 安装依赖 npm install react…

react 如何遍历

react 如何遍历

遍历数组 在React中遍历数组通常使用map方法,它会返回一个新的数组。map是处理数组并渲染列表元素的首选方法。 const items = ['Apple', 'Banana', 'Cherr…

odyssey react 如何

odyssey react 如何

Odyssey React 是耐克推出的一款跑鞋系列,以其轻量化设计和React泡沫缓震技术著称。以下是关于该系列鞋款的主要特点和使用建议: 核心特点 React泡沫中底提供出色的能量回馈和缓震效果…

webstorm如何运行react

webstorm如何运行react

运行 React 项目的方法 在 WebStorm 中运行 React 项目需要确保项目已正确配置,并且依赖项已安装。以下是具体操作步骤: 确保项目依赖已安装 打开终端(Terminal),导航到项…