checkin.ts 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. // src/api/checkin.ts
  2. import { request } from '@/utils/request';
  3. // --- 类型定义 ---
  4. // 创建签到任务请求体
  5. interface CreateCheckinRequest {
  6. teacherId: string;
  7. courseId: string | number | null;
  8. classIds: string[];
  9. signType: 'NUMBER' | 'QR';
  10. signCode?: string;
  11. time?: number | null;
  12. }
  13. // 创建签到任务返回的单个任务项的接口
  14. interface CreateCheckinTaskItem {
  15. id: string | number;
  16. teacherId: string | number;
  17. courseId: string | number;
  18. classId: string | number;
  19. createTime: string;
  20. endTime: string | null;
  21. signType: 'NUMBER' | 'QR';
  22. status: 'NOT_START' | 'PROCESSING' | 'FINISHED' | 'CANCELLED' | string;
  23. totalNumber: number;
  24. signedNumber: number;
  25. signCode: string;
  26. classIds?: string;
  27. }
  28. export type CreateCheckinResponse = CreateCheckinTaskItem[];
  29. // 学生记录接口
  30. interface SignRecord {
  31. id: string | number;
  32. officialNumber: string;
  33. studentName: string;
  34. signTaskId: string | number;
  35. signInTime: string | null;
  36. signStatus: 'NOT_SIGNED' | 'SIGNED' | 'FINISHED' | string;
  37. }
  38. // 教师端获取签到状态的返回类型
  39. interface GetCheckinStatusResponse {
  40. totalNumber: number;
  41. signedNumber: number;
  42. createdTime: string;
  43. endTime: string | null;
  44. status: 'NOT_START' | 'PROCESSING' | 'FINISHED' | 'CANCELLED' | string;
  45. signCode: string;
  46. signType?: 'NUMBER' | 'QR';
  47. signRecords: SignRecord[];
  48. }
  49. // 获取某个班级签到任务详情的返回类型
  50. export type GetClassCheckinDetailsResponse = CreateCheckinTaskItem[];
  51. export type GetQrCodeResponse = string;
  52. // 结束签到参数
  53. interface EndCheckinParams {
  54. signTaskId: string | number;
  55. teacherId: string | number;
  56. }
  57. // 获取学生班级信息的返回类型
  58. interface StudentClass {
  59. classId: string | number;
  60. className: string;
  61. stuNumber: number;
  62. classTime: string;
  63. teacherId: string | number;
  64. }
  65. export type GetStudentClassesResponse = StudentClass[];
  66. // 获取教师所有签到任务响应
  67. export type GetAllTeacherCheckinTasksResponse = CreateCheckinTaskItem[];
  68. // 学生 - 获取活跃签到任务响应
  69. export type GetActiveCheckinResponse = SignRecord[];
  70. // 学生 - 提交签到请求体
  71. interface SubmitCheckinRequest {
  72. officialNumber: string | number;
  73. signTaskId: string | number;
  74. signCode: string;
  75. type: string; // 提交的签到类型 NUMBER/QR
  76. }
  77. // 【关键新增】教师 - 获取所有课程响应
  78. interface TeacherCourse {
  79. courseId: number;
  80. courseName: string;
  81. description: string;
  82. startTime: string;
  83. endTime: string;
  84. teacherPid: number;
  85. teacherNames: string[];
  86. // ... 其他字段
  87. }
  88. export type GetAllTeacherCoursesResponse = TeacherCourse[];
  89. // 【关键新增】获取课程下的所有班级响应
  90. interface CourseClass {
  91. classId: number;
  92. className: string;
  93. classTime: string;
  94. stuNumber: number;
  95. teacherId: number;
  96. // ... 其他字段
  97. }
  98. export type GetClassesByCourseIdResponse = CourseClass[];
  99. // --- API 接口封装 ---
  100. export const createCheckinApi = (data: CreateCheckinRequest): Promise<CreateCheckinResponse> => {
  101. return request<CreateCheckinResponse>({
  102. url: '/sign/create',
  103. method: 'POST',
  104. data
  105. });
  106. };
  107. export const getCheckinStatusApi = (signTaskId: string | number): Promise<GetCheckinStatusResponse> => {
  108. return request<GetCheckinStatusResponse>({
  109. url: `/sign/status/${signTaskId}`,
  110. method: 'GET'
  111. });
  112. };
  113. // 获取教师所有课程的API
  114. export const getAllTeacherCoursesApi = (teacherPid: string | number): Promise<GetAllTeacherCoursesResponse> => {
  115. return request<GetAllTeacherCoursesResponse>({
  116. url: `/course/all/teacher`,
  117. method: 'GET',
  118. params: { teacherPid }
  119. });
  120. };
  121. //获取课程下的所有班级的API
  122. export const getClassesByCourseIdApi = (courseId: string | number): Promise<GetClassesByCourseIdResponse> => {
  123. return request<GetClassesByCourseIdResponse>({
  124. url: `/class/course/${courseId}`,
  125. method: 'GET'
  126. });
  127. };
  128. export const endCheckinApi = (params: EndCheckinParams): Promise<void> => {
  129. return request<void>({
  130. url: '/sign/end',
  131. method: 'POST',
  132. params,
  133. data: {}
  134. });
  135. };
  136. // // 【关键新增】获取二维码内容的API
  137. // export const getQrCodeApi = (signTaskId: string | number, expire: number): Promise<GetQrCodeResponse> => {
  138. // return request<GetQrCodeResponse>({
  139. // url: `/sign/qr`,
  140. // method: 'GET',
  141. // params: { signTaskId, expire }
  142. // });
  143. // };
  144. export const getActiveCheckinApi = (params: { officialNumber: string | number }): Promise<GetActiveCheckinResponse> => {
  145. return request<GetActiveCheckinResponse>({
  146. url: '/sign/active',
  147. method: 'GET',
  148. params
  149. });
  150. };
  151. // 获取某个班级签到任务详情的API
  152. export const getClassCheckinDetailsApi = (classId: string | number): Promise<GetClassCheckinDetailsResponse> => {
  153. return request<GetClassCheckinDetailsResponse>({
  154. url: `/sign/class/${classId}`,
  155. method: 'GET'
  156. });
  157. };
  158. // 获取学生班级信息的API
  159. export const getClassByStudentApi = (officialNumber: string | number): Promise<GetStudentClassesResponse> => {
  160. return request<GetStudentClassesResponse>({
  161. url: `/class/student/${officialNumber}`,
  162. method: 'GET'
  163. });
  164. };
  165. //获取某个具体班级信息的API
  166. export const getClassByClassIdApi = (classId: string | number):Promise<StudentClass> =>{
  167. return request<StudentClass>({
  168. url:`/class/${classId}`,
  169. method: 'GET'
  170. });
  171. };
  172. export const submitCheckinApi = (data: SubmitCheckinRequest): Promise<void> => {
  173. return request<void>({
  174. url: '/sign/submit',
  175. method: 'POST',
  176. data
  177. });
  178. };
  179. // 获取教师所有签到任务的API
  180. export const getAllTeacherCheckinTasksApi = (teacherId: string | number): Promise<GetAllTeacherCheckinTasksResponse> => {
  181. return request<GetAllTeacherCheckinTasksResponse>({
  182. url: `/sign/all`,
  183. method: 'GET',
  184. params: { teacherId }
  185. });
  186. };
  187. // 获取学生个人签到状态
  188. export const getStudentStatusApi = (signTaskId: string | number, officialNumber: string | number): Promise<string> => {
  189. return request<string>({
  190. url: `/sign/status/student/${signTaskId}`,
  191. method: 'GET',
  192. params: { officialNumber }
  193. });
  194. };