shiguang-bridge.d.ts 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. // shiguang-bridge.d.ts
  2. // 适配脚本全局类型声明,供 VSCode / JetBrains 识别 window.shiguangBridgePromise 与 window.shiguangBridge
  3. // 本文档不参与运行时,不会被浏览器加载
  4. /**
  5. * 异步交互 API,挂载于 window.shiguangBridgePromise。
  6. * 所有方法均返回 Promise,需配合 await 使用。
  7. */
  8. interface ShiguangBridgePromise {
  9. /**
  10. * 显示公告弹窗,等待用户确认。
  11. *
  12. * @param title 弹窗标题
  13. * @param content 弹窗内容
  14. * @param confirmText 确认按钮文本
  15. * @returns 确认返回 true,取消返回 false
  16. */
  17. showAlert(title: string, content: string, confirmText: string): Promise<boolean>;
  18. /**
  19. * 显示输入框弹窗,支持 JS 侧校验。
  20. *
  21. * @param title 弹窗标题
  22. * @param tip 输入框提示文本
  23. * @param defaultText 默认文本
  24. * @param validatorJsFunction 全局作用域中的验证函数名。
  25. * 返回 false 表示通过,返回字符串表示错误信息。
  26. * @returns 用户输入内容;取消返回 null
  27. */
  28. showPrompt(
  29. title: string,
  30. tip: string,
  31. defaultText: string,
  32. validatorJsFunction?: string
  33. ): Promise<string | null>;
  34. /**
  35. * 显示单选列表弹窗。
  36. *
  37. * @param title 弹窗标题
  38. * @param itemsJsonString 选项列表的 JSON 字符串,如 '["选项1","选项2"]'
  39. * @param defaultSelectedIndex 默认选中索引,-1 表示不选中
  40. * @returns 选中索引;取消返回 null
  41. */
  42. showSingleSelection(
  43. title: string,
  44. itemsJsonString: string,
  45. defaultSelectedIndex?: number
  46. ): Promise<number | null>;
  47. /**
  48. * 提交课程数据。
  49. *
  50. * 传入的 JSON 字符串每项字段:
  51. * - `name` 课程名
  52. * - `teacher` 老师
  53. * - `position` 地点
  54. * - `day` 星期 1~7
  55. * - `startSection` / `endSection` 起止节次,isCustomTime 为 false 时必填
  56. * - `weeks` 周次数组
  57. * - `isCustomTime` 是否自定义时间,默认 false
  58. * - `customStartTime` / `customEndTime` 自定义时间 HH:mm,isCustomTime 为 true 时必填
  59. * - `credit` 学分
  60. *
  61. * @param coursesJsonString 课程数组的 JSON 字符串
  62. * @returns 导入成功返回 true,失败抛出 Error
  63. */
  64. saveImportedCourses(coursesJsonString: string): Promise<true>;
  65. /**
  66. * 提交预设时间段数据。
  67. *
  68. * 传入的 JSON 字符串每项字段:
  69. * - `number` 节次编号,必须从 1 开始连续递增
  70. * - `startTime` / `endTime` 起止时间 HH:mm
  71. *
  72. * 时间段之间不允许重叠。
  73. *
  74. * 若本次导入包含组合作息方案,本方法必须先于 saveComboSchedule 调用且成功。
  75. *
  76. * @param timeSlotsJsonString 时间段数组的 JSON 字符串
  77. * @returns 导入成功返回 true,失败抛出 Error
  78. */
  79. savePresetTimeSlots(timeSlotsJsonString: string): Promise<true>;
  80. /**
  81. * 提交课表配置数据。
  82. *
  83. * 传入的 JSON 字符串字段:
  84. * - `semesterStartDate` 学期开始日期 YYYY-MM-DD,默认 null
  85. * - `semesterTotalWeeks` 总周数,默认 20
  86. * - `defaultClassDuration` 单节时长(分钟),默认 45
  87. * - `defaultBreakDuration` 课间休息(分钟),默认 10
  88. * - `firstDayOfWeek` 一周第一天,1=周一,7=周日,默认 1
  89. *
  90. * 只需提供想修改的字段。
  91. *
  92. * @param configJsonString 课表配置的 JSON 字符串
  93. * @returns 导入成功返回 true,失败抛出 Error
  94. */
  95. saveCourseConfig(configJsonString: string): Promise<true>;
  96. /**
  97. * 提交组合作息方案。
  98. *
  99. * 传入的 JSON 字符串字段:
  100. * - `name` 方案名,可选,为空时回退为当前课表名
  101. * - `publicSchedules` 公共作息模板数组
  102. *
  103. * 每个模板字段:
  104. * - `name` 作息名
  105. * - `startDate` / `endDate` 生效区间 YYYY-MM-DD
  106. * - `defaultClassDuration` / `defaultBreakDuration` 时长(分钟),默认 45 / 10
  107. * - `timeSlots` 节次时间点数组,可只提交差异节次,未提供的由基础时间段补齐
  108. *
  109. * 必须先成功调用 savePresetTimeSlots,否则会被直接拒绝。
  110. *
  111. * @param comboScheduleJsonString 组合作息方案的 JSON 字符串
  112. * @returns 导入成功返回 true,失败抛出 Error
  113. */
  114. saveComboSchedule(comboScheduleJsonString: string): Promise<true>;
  115. }
  116. /**
  117. * 同步辅助 API,挂载于 window.shiguangBridge。
  118. * 不阻塞 JS 流程,主要用于即时反馈或生命周期通知。
  119. */
  120. interface ShiguangBridge {
  121. /**
  122. * 在界面短暂显示一条提示信息。
  123. *
  124. * @param message 提示内容
  125. */
  126. showToast(message: string): void;
  127. /**
  128. * 通知任务完成,执行收尾。
  129. * 仅应在整个流程成功完成后调用。
  130. */
  131. notifyTaskCompletion(): void;
  132. }
  133. declare global {
  134. interface Window {
  135. /** 异步交互 API */
  136. shiguangBridgePromise: ShiguangBridgePromise;
  137. /** 同步辅助 API */
  138. shiguangBridge: ShiguangBridge;
  139. /** @deprecated 旧版兼容别名,请使用 shiguangBridgePromise */
  140. AndroidBridgePromise: ShiguangBridgePromise;
  141. /** @deprecated 旧版兼容别名,请使用 shiguangBridge */
  142. AndroidBridge: ShiguangBridge;
  143. }
  144. }
  145. export {};