getCourseListData($campus_id, $include_all); $classes = $this->getClassListData($campus_id, $include_all); $coaches = $this->getCoachListData($campus_id, $include_all); $venues = $this->getVenueListData($campus_id, $include_all); return [ 'code' => 1, 'data' => [ 'courses' => $courses, 'classes' => $classes, 'coaches' => $coaches, 'venues' => $venues, 'campus_info' => [ 'campus_id' => $campus_id, 'include_all' => $include_all ] ] ]; } catch (\Exception $e) { return [ 'code' => 0, 'msg' => '获取选项列表失败:' . $e->getMessage() ]; } } /** * 获取课程列表 * @param array $data * @return array */ public function getCourseList(array $data) { try { $campus_id = $data['campus_id'] ?? 0; $include_all = $data['include_all'] ?? false; $courses = $this->getCourseListData($campus_id, $include_all, $data); return [ 'code' => 1, 'data' => $courses ]; } catch (\Exception $e) { return [ 'code' => 0, 'msg' => '获取课程列表失败:' . $e->getMessage() ]; } } /** * 获取班级列表 * @param array $data * @return array */ public function getClassList(array $data) { try { $campus_id = $data['campus_id'] ?? 0; $include_all = $data['include_all'] ?? false; $classes = $this->getClassListData($campus_id, $include_all, $data); return [ 'code' => 1, 'data' => $classes ]; } catch (\Exception $e) { return [ 'code' => 0, 'msg' => '获取班级列表失败:' . $e->getMessage() ]; } } /** * 获取教练列表 * @param array $data * @return array */ public function getCoachList(array $data) { try { $campus_id = $data['campus_id'] ?? 0; $include_all = $data['include_all'] ?? false; $coaches = $this->getCoachListData($campus_id, $include_all, $data); return [ 'code' => 1, 'data' => $coaches ]; } catch (\Exception $e) { return [ 'code' => 0, 'msg' => '获取教练列表失败:' . $e->getMessage() ]; } } /** * 获取场地列表 * @param array $data * @return array */ public function getVenueList(array $data) { try { $campus_id = $data['campus_id'] ?? 0; $include_all = $data['include_all'] ?? false; $venues = $this->getVenueListData($campus_id, $include_all, $data); return [ 'code' => 1, 'data' => $venues ]; } catch (\Exception $e) { return [ 'code' => 0, 'msg' => '获取场地列表失败:' . $e->getMessage() ]; } } /** * 获取课程数据 * @param int $campus_id * @param bool $include_all * @param array $filters * @return array */ private function getCourseListData(int $campus_id, bool $include_all, array $filters = []) { $query = Course::where('deleted_at', 0) ->where('status', $filters['status'] ?? 1) ->field('id,course_name,course_type,duration,session_count,price,status'); // 如果有关键词搜索 if (!empty($filters['keyword'])) { $query->where('course_name', 'like', '%' . $filters['keyword'] . '%'); } // 如果有课程类型筛选 if (!empty($filters['course_type'])) { $query->where('course_type', $filters['course_type']); } // TODO: 课程表暂时没有campus_id字段,后续需要添加 // 课程通常是全局的,不按校区过滤,但可以通过其他关联表来实现校区过滤 $courses = $query->order('id desc')->select()->toArray(); return $courses; } /** * 获取班级数据 * @param int $campus_id * @param bool $include_all * @param array $filters * @return array */ private function getClassListData(int $campus_id, bool $include_all, array $filters = []) { $query = SchoolClass::where('deleted_at', 0) ->where('status', $filters['status'] ?? 1) ->field('id,campus_id,campus_name,class_name,head_coach,age_group,class_type,assistant_coach,status,sort_order'); // 校区过滤:如果当前登录人有校区且不是获取全部数据,则只获取该校区的数据 if (!$include_all && $campus_id > 0) { $query->where('campus_id', $campus_id); } // 如果有关键词搜索 if (!empty($filters['keyword'])) { $query->where('class_name', 'like', '%' . $filters['keyword'] . '%'); } // 如果有班级类型筛选 if (!empty($filters['class_type'])) { $query->where('class_type', $filters['class_type']); } $classes = $query->order('sort_order asc, id desc')->select()->toArray(); return $classes; } /** * 获取教练数据 * @param int $campus_id * @param bool $include_all * @param array $filters * @return array */ private function getCoachListData(int $campus_id, bool $include_all, array $filters = []) { // 通过角色关联表获取教练 $query = SchoolPersonnel::alias('p') ->where('p.deleted_at', 0) ->where('p.status', $filters['status'] ?? 1) ->field('p.id,p.name,p.head_img,p.gender,p.phone,p.email,p.account_type,p.status'); // 校区过滤:通过角色关联表过滤 if (!$include_all && $campus_id > 0) { $query->join('school_campus_person_role r', 'p.id = r.person_id') ->where('r.campus_id', $campus_id) ->where('r.deleted_at', 0); } // 获取教练类型的人员(teacher类型的人员可以作为教练) $query->where('p.account_type', 'like', '%teacher%'); // 如果有关键词搜索 if (!empty($filters['keyword'])) { $query->where('p.name', 'like', '%' . $filters['keyword'] . '%'); } $coaches = $query->order('p.id desc')->select()->toArray(); return $coaches; } /** * 获取场地数据 * @param int $campus_id * @param bool $include_all * @param array $filters * @return array */ private function getVenueListData(int $campus_id, bool $include_all, array $filters = []) { $query = SchoolVenue::where('deleted_at', 0) ->where('availability_status', $filters['availability_status'] ?? 1) ->field('id,campus_id,venue_name,capacity,availability_status,time_range_type,time_range_start,time_range_end'); // 校区过滤:如果当前登录人有校区且不是获取全部数据,则只获取该校区的数据 if (!$include_all && $campus_id > 0) { $query->where('campus_id', $campus_id); } // 如果有关键词搜索 if (!empty($filters['keyword'])) { $query->where('venue_name', 'like', '%' . $filters['keyword'] . '%'); } $venues = $query->order('id desc')->select()->toArray(); return $venues; } }