Skip to content
Snippets Groups Projects
index.php 19.7 KiB
Newer Older
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
<?php
// index.php
session_start();
include('db.php'); // 数据库连接

$username = $_SESSION['username'];

// 获取用户角色
$role_query = "SELECT role FROM users WHERE username='$username'";
$role_result = mysqli_query($conn, $role_query);
$user_role = mysqli_fetch_assoc($role_result)['role'];

// 获取设备列表
$equipment_query = "SELECT * FROM equipment ORDER BY id ASC";
$equipment_result = mysqli_query($conn, $equipment_query);
$equipment_list = [];
while ($row = mysqli_fetch_assoc($equipment_result)) {
    $equipment_list[] = $row;
}

// 获取用户列表
$user_query = "SELECT * FROM users ORDER BY id ASC";
$user_result = mysqli_query($conn, $user_query);
$user_list = [];
while ($row = mysqli_fetch_assoc($user_result)) {
    $user_list[] = $row;
}

// 处理日期和视图类型
$view_type = isset($_GET['view']) ? $_GET['view'] : 'day'; // 'day' 或 'week'
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
date_default_timezone_set("Asia/Shanghai");
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
$date = isset($_GET['date']) ? $_GET['date'] : date('Y-m-d');

// 计算周的开始和结束日期
$week_start = date('Y-m-d', strtotime('monday this week', strtotime($date)));
$week_end = date('Y-m-d', strtotime('sunday this week', strtotime($date)));

// 获取预约数据
$bookings = [];

if ($view_type == 'day') {
    $start_time = date('Y-m-d 08:00:00', strtotime($date));
    $end_time = date('Y-m-d 21:00:00', strtotime($date));
} else {
    $start_time = date('Y-m-d 00:00:00', strtotime($week_start));
    $end_time = date('Y-m-d 23:59:59', strtotime($week_end));
}

$booking_query = "SELECT bookings.*, users.username AS user_name, equipment.name AS equipment_name, bookings.title FROM bookings
                  JOIN equipment ON bookings.equipment_id = equipment.id
                  JOIN users ON bookings.user_id = users.id
                  WHERE bookings.start_time >= '$start_time' AND bookings.end_time <= '$end_time' AND bookings.status='active'";
$booking_result = mysqli_query($conn, $booking_query);

while ($row = mysqli_fetch_assoc($booking_result)) {
    $bookings[] = $row;
}

?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>探测器微加工实验室设备预约系统</title>
    <!-- 引入Bootstrap CSS和FullCalendar库 -->
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.3/css/bootstrap.min.css" rel="stylesheet">
    <style>
        /* 自定义样式 */
        .login-form {
            display: flex;
            align-items: center;
            justify-content: center;
            margin: 10px;
        }
        .login-form input {
            margin: 20px;
        }
        .calendar-container {
            width: 90%;
            overflow-x: auto;
            margin: 0 auto;
        }
        .calendar-table {
            width: 100%;
            border-collapse: collapse;
            margin: 0 auto;
        }
        .calendar-table th, .calendar-table td {
            border: 1px solid #dee2e6;
            text-align: center;
            padding: 5px;
            min-width: 60px;
        }
        .booking {
            background-color: #007bff;
            color: #fff;
        }
        .divider {
            border-top: 2px solid #dee2e6;
            margin: 10px;
        }
        .approved {
            background-color: #007bff; /* 深绿色背景,表示已批准 */
            color: #ffffff; /* 白色字体,确保与深绿色对比清楚 */
            font-weight: bold; /* 粗体字体 */
            border: 1px solid #218838; /* 边框颜色稍深 */
        }
        .pending {
            background-color: #ffc107; /* 深黄色背景,表示未批准 */
            color: #000000; /* 黑色字体,确保与黄色对比清楚 */
            font-weight: bold; /* 粗体字体 */
            border: 1px solid #e0a800; /* 边框颜色稍深 */
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
            cursor: pointer; /* 鼠标悬停时显示手型,表示可以点击 */
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
        }
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed

xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
    </style>
</head>
<body>
    <!-- 标题栏 -->
    <div class="container-fluid bg-primary text-white text-center py-3">
        <h1>探测器微加工实验室设备预约系统</h1>
    </div>

    <!-- 登录部分 -->
    <div class="container">
        <?php if (!isset($_SESSION['username'])) { ?>
        <!-- 显示登录表单 -->
        <form method="POST" action="login.php" class="login-form">
            <input type="text" style='width:30%' class="form-control" name="username" placeholder="用户名" required>
            <input type="password" style='width:30%' class="form-control" name="password" placeholder="密码" required>
            <button type="submit" style='width:10%' class="btn btn-primary">登录</button>
            <a href="register.php" class="btn btn-link">注册新用户</a>
        </form>

        <?php } else { ?>
        <!-- 登录后显示用户界面 -->
        <!-- 导航栏 -->
        <nav class="navbar navbar-expand-lg navbar-light bg-light">
            <a class="navbar-brand" href="#">实验室设备预约系统</a>
            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav">
                <span class="navbar-toggler-icon"></span>
            </button>
            <!-- 导航栏内容 -->
            <div class="collapse navbar-collapse" id="navbarNav">
                <ul class="navbar-nav ml-auto">
                    <!-- 导航项 -->
                    <li class="nav-item active"><a class="nav-link" href="index.php">首页</a></li>
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                    <li class="nav-item"><a class="nav-link" href="equipment_list.php">预约设备</a></li>
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                    <li class="nav-item"><a class="nav-link" href="my_bookings.php">我的预约</a></li>
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                    <li class="nav-item"><a class="nav-link" href="contact_admin.php">联系管理员</a></li>
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                    <?php if ($user_role == 'admin' OR $user_role == 'superadmin') { ?>
                    <li class="nav-item"><a class="nav-link" href="admin.php">管理员页面</a></li>
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                    <li class="nav-item"><a class="nav-link" href="statistics.php">统计信息</a></li>
                    <?php } ?>
                    <?php if ($user_role == 'superadmin') { ?>
                    <li class="nav-item"><a class="nav-link" href="admin_admin.php">管理员权限</a></li>
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                    <?php } ?>
                    <li class="nav-item"><a class="nav-link" href="logout.php">登出</a></li>
                </ul>
            </div>
        </nav>
        
        <!-- 主体内容 -->
        <div class="container mt-4">
            <h2>欢迎,<?php echo htmlspecialchars($username); ?></h2>
            <div class="row">
                <!-- 设备状态模块 -->
                <div class="col-md-4">
                    <div class="card">
                        <div class="card-body">
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                            <h5 class="card-title"><i class="fas fa-tools"></i> 设备预约</h5>
                            <p class="card-text">预约和查看设备的状态。</p>
                            <a href="equipment_status.php" class="btn btn-info">预约设备</a>
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                        </div>
                    </div>
                </div>
                <!-- 我的预约模块 -->
                <div class="col-md-4">
                    <div class="card">
                        <div class="card-body">
                            <h5 class="card-title"><i class="fas fa-calendar-check"></i> 我的预约</h5>
                            <p class="card-text">查看和管理您的预约。</p>
                            <a href="my_bookings.php" class="btn btn-success">查看预约</a>
                        </div>
                    </div>
                </div>
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                <!-- 联系管理员模块 -->
                <div class="col-md-4">
                    <div class="card">
                        <div class="card-body">
                            <h5 class="card-title"><i class="fas fa-envelope"></i> 联系管理员</h5>
                            <p class="card-text">查看管理员信息并联系。</p>
                            <a href="contact_admin.php" class="btn btn-primary">联系管理员</a>
                        </div>
                    </div>
                </div>
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
            </div>
        
            <?php if ($user_role == 'admin' OR $user_role == 'superadmin') { ?>
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                <!-- 管理员功能 -->
                <h3 class="mt-5">管理员功能</h3>
                <div class="row">
                    <!-- 设备管理 -->
                    <div class="col-md-4">
                        <div class="card">
                            <div class="card-body">
                                <h5 class="card-title"><i class="fas fa-cogs"></i> 设备管理</h5>
                                <p class="card-text">管理实验室设备。</p>
                                <a href="admin.php" class="btn btn-warning">进入管理</a>
                            </div>
                        </div>
                    </div>

                    <div class="col-md-4">
                        <div class="card">
                            <div class="card-body">
                                <h5 class="card-title"><i class="fas fa-chart-bar"></i> 数据统计</h5>
                                <p class="card-text">查看设备和用户的预约统计信息。</p>
                                <a href="statistics.php" class="btn btn-warning">查看统计</a>
                            </div>
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                        </div>
                    </div>
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed

                    <?php if ($user_role == 'superadmin') { ?>
                    <div class="col-md-4">
                        <div class="card">
                            <div class="card-body">
                                <h5 class="card-title"><i class="fas fa-chart-bar"></i> 管理员权限</h5>
                                <p class="card-text">修改管理员所负责的设备。</p>
                                <a href="admin_admin.php" class="btn btn-warning">管理员权限</a>
                            </div>
                        </div>
                    </div>

                    <?php } ?>
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                </div>
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed

            <?php } ?>
        </div>
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed

        <?php } ?>
    </div>

    <!-- 显示日历 -->
    <div class="calendar-container mt-4">
        <div class="divider"></div>
        <h3>设备预约情况</h3>

        <div class="mb-3">
            <span class="badge approved">已批准预约</span>
            <span class="badge pending">待批准预约</span>
        </div>

        <div>
            <label for="dateInput">选择日期:</label>
            <!-- 使用 PHP 将 URL 传递的日期值填充到输入框 -->
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
            <input type="date" id="dateInput" class="form-control" style='width:20%' value="<?php echo $date; ?>">
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
        </div>

        <!-- 视图切换选项 -->
        <ul class="nav nav-tabs">
            <li class="nav-item">
                <a class="nav-link <?php echo $view_type == 'day' ? 'active' : ''; ?>" href="index.php?date=<?php echo $date; ?>&view=day">每日视图</a>
            </li>
            <li class="nav-item">
                <a class="nav-link <?php echo $view_type == 'week' ? 'active' : ''; ?>" href="index.php?date=<?php echo $date; ?>&view=week">每周视图</a>
            </li>
        </ul>

        <!-- 日历显示 -->
        <?php if ($view_type == 'day') { ?>
            <!-- 每日视图 -->
            <h4><?php echo date('Y年m月d日', strtotime($date)); ?> 设备预约情况</h4>
            <table class="calendar-table">
                <thead>
                    <tr>
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                        <th>开始时间</th>
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                        <?php
                        for ($hour = 8; $hour < 21; $hour++) {
                            for ($min = 0; $min < 60; $min += 30) {
                                $time_label = sprintf('%02d:%02d', $hour, $min);
                                echo "<th>$time_label</th>";
                            }
                        }
                        ?>
                    </tr>
                </thead>
                <tbody>
                    <?php foreach ($equipment_list as $equipment) { ?>
                    <tr>
                        <td><?php echo $equipment['name']; ?></td>
                        <?php
                        $time_slots = [];
                        for ($hour = 8; $hour < 21; $hour++) {
                            for ($minute = 0; $minute < 60; $minute += 30) {
                                $time_slots[] = sprintf('%02d:%02d:00', $hour, $minute);
                            }
                        }
                        
                        $skip_next_slots = 0;  // 用于标记是否需要跳过后续时间段的显示

                        foreach ($time_slots as $time) {
                            
                            // 如果还有需要跳过的时间段,继续跳过
                            if ($skip_next_slots > 0) {
                                $skip_next_slots--;
                                continue;
                            }

                            $start_time_slot = $date . ' ' . $time;
                            $is_booked = false;
                            $booking_duration = 0;  // 持续时间段数
                            $booked_info = ""; // 存储用户名和研究目的
                            $class = ""; // 存储样式类
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                            $booking_id = null; // 存储预约ID
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed

                            foreach ($bookings as $booking) {
                                if ($booking['equipment_id'] == $equipment['id'] &&
                                    $booking['start_time'] <= $start_time_slot &&
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                                    $booking['end_time'] > $start_time_slot &&
                                    $booking['status'] == 'active') {
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                                    $is_booked = true;
                                    $start_time_obj = strtotime($booking['start_time']);
                                    $end_time_obj = strtotime($booking['end_time']);
                                    // 计算预约的时长(按30分钟的间隔计算)
                                    $booking_duration = ceil(($end_time_obj - $start_time_obj) / (30 * 60));
                                    // 获取用户名和研究目的
                                    foreach ($user_list as $user) {
                                        if ($booking['user_id'] == $user['id']){
                                            $booked_info = $user['username'] . " : " . $booking['title'];
                                            break;
                                        }
                                    }

                                    // 设置样式类,已批准使用approved类,未批准使用pending类
                                    $class = ($booking['approved'] == 1) ? 'approved' : 'pending';
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                                    $booking_id = $booking['id'];
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                                    break;
                                }
                            }
                            if ($is_booked) {
                                // 在开始时间显示预约信息,跨越多个时间段
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                                if ($class == 'pending') {
                                    echo '<td class="booking ' . $class . '" colspan="' . $booking_duration . '"><a href="approval_detail.php?booking_id=' . $booking_id . '" style="color: inherit; text-decoration: none;">' . $booked_info . '</a></td>';
                                } else {
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                                    echo '<td class="booking ' . $class . '" colspan="' . $booking_duration . '"><a href="approval_detail.php?booking_id=' . $booking_id . '" style="color: inherit; text-decoration: none;">' . $booked_info . '</td>';
xiuql@ihep.ac.cn's avatar
xiuql@ihep.ac.cn committed
                                // 设置需要跳过的时间段数
                                $skip_next_slots = $booking_duration - 1;
                            } else {
                                echo '<td></td>';
                            }
                        }

                        ?>
                    </tr>
                    <?php } ?>
                </tbody>
            </table>
        <?php } else { ?>
            <!-- 每周视图 -->
            <h4><?php echo date('Y年m月d日', strtotime($week_start)); ?><?php echo date('Y年m月d日', strtotime($week_end)); ?> 设备预约情况</h4>
            <table class="calendar-table">
                <thead>
                    <tr>
                        <th>设备\日期</th>
                        <?php
                        for ($i = 0; $i < 7; $i++) {
                            $current_date = date('Y-m-d', strtotime("$week_start +$i days"));
                            $day_label = date('m月d日', strtotime($current_date));
                            switch ($i) {
                                case 0:
                                    echo "<th>星期一<Br />$day_label</th>";
                                    break;
                                case 1:
                                    echo "<th>星期二<Br />$day_label</th>";
                                    break;
                                case 2:
                                    echo "<th>星期三<Br />$day_label</th>";
                                    break;
                                case 3:
                                    echo "<th>星期四<Br />$day_label</th>";
                                    break;
                                case 4:
                                    echo "<th>星期五<Br />$day_label</th>";
                                    break;
                                case 5:
                                    echo "<th>星期六<Br />$day_label</th>";
                                    break;
                                case 6:
                                    echo "<th>星期日<Br />$day_label</th>";
                                    break;
                            }
                        }
                        ?>
                    </tr>
                </thead>
                <tbody>
                    <?php foreach ($equipment_list as $equipment) { ?>
                    <tr>
                        <td><?php echo $equipment['name']; ?></td>
                        <?php
                        for ($i = 0; $i < 7; $i++) {
                            $cell_date_start = date('Y-m-d 00:00:00', strtotime("$week_start +$i days"));
                            $cell_date_end = date('Y-m-d 23:59:59', strtotime("$week_start +$i days"));
                            $is_booked = false;
                            foreach ($bookings as $booking) {
                                if ($booking['equipment_id'] == $equipment['id'] &&
                                    $booking['start_time'] < $cell_date_end &&
                                    $booking['end_time'] > $cell_date_start) {
                                    $is_booked = true;
                                    break;
                                }
                            }
                            if ($is_booked) {
                                echo '<td class="booking">有预约</td>';
                            } else {
                                echo '<td></td>';
                            }
                        }
                        ?>
                    </tr>
                    <?php } ?>
                </tbody>
            </table>
        <?php } ?>
        <div class="divider"></div>
    </div>

<script>
document.getElementById('dateInput').addEventListener('change', function() {
    var selectedDate = this.value;
    var viewType = '<?php echo $view_type; ?>';
    // 刷新页面并带上所选日期和视图类型
    window.location.href = "index.php?date=" + selectedDate + "&view=" + viewType;
});

</script>

</body>
</html>