index.ts 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. import { http } from '@/utils/http/axios';
  2. import type { QueryPageRequest, QueryPageResponse } from '@/types/basic-query';
  3. /**
  4. * 举一反三单条记录(与接口文档 DrawLessonsPageRes 一致)
  5. */
  6. export interface DrawLessonsItem {
  7. id: number;
  8. dangerId: number;
  9. problem: string;
  10. associationOneThree: string;
  11. associationOtObligationDeptIds: string;
  12. associationOtObligationDeptName: string;
  13. associationOtTimeLimit: string;
  14. planStartDate?: string;
  15. attachments?: string;
  16. statusId: number;
  17. statusName: string;
  18. issueCount?: number;
  19. feedbackCount?: number;
  20. feedbackRate?: number;
  21. creatorName?: string;
  22. createdAt: string;
  23. updatedAt: string;
  24. canEdit?: boolean;
  25. canDelete?: boolean;
  26. canNotify?: boolean;
  27. canSend?: boolean;
  28. canAudit?: boolean;
  29. canVoid?: boolean;
  30. canFeedback?: boolean;
  31. }
  32. /**
  33. * 分页查询 queryParam(与接口文档一致)
  34. */
  35. export interface DrawLessonsQueryParam {
  36. dangerId?: number;
  37. statusId?: number;
  38. obligationDeptId?: number;
  39. startTime?: string;
  40. endTime?: string;
  41. keyword?: string;
  42. /** 隐患问题(搜索) */
  43. problem?: string;
  44. }
  45. /**
  46. * 2.1 分页查询举一反三
  47. * POST /api/drawLessons/admin/queryPage
  48. */
  49. export function queryDrawLessonsAdminPage(
  50. query: QueryPageRequest<DrawLessonsQueryParam>,
  51. ) {
  52. return http.request<QueryPageResponse<DrawLessonsItem>>({
  53. url: '/drawLessons/admin/queryPage',
  54. method: 'post',
  55. data: query,
  56. });
  57. }
  58. /**
  59. * 2.2 查询举一反三详情
  60. * GET /api/drawLessons/admin/queryDetail?id=xxx
  61. */
  62. export function getDrawLessonsAdminDetail(id: number) {
  63. return http.request<DrawLessonsItem>({
  64. url: '/drawLessons/admin/queryDetail',
  65. method: 'get',
  66. params: { id },
  67. });
  68. }
  69. /**
  70. * 2.3 新增举一反三
  71. * POST /api/drawLessons/admin/save
  72. */
  73. export interface SaveDrawLessonsRequest {
  74. dangerId: number; // 隐患ID(选择隐患名称)
  75. associationOneThree: string; // 举一反三要求
  76. associationOtObligationDeptIds: string; // 举一反三责任部门ID列表,逗号分隔
  77. associationOtTimeLimit: string; // 举一反三时限
  78. planStartDate?: string; // 计划开始日期 yyyy-MM-dd
  79. /** 兼容:隐患问题名称,后端可能根据 dangerId 带出 */
  80. problem?: string;
  81. }
  82. export function saveDrawLessons(data: SaveDrawLessonsRequest) {
  83. return http.request({
  84. url: '/drawLessons/admin/save',
  85. method: 'post',
  86. data,
  87. });
  88. }
  89. /**
  90. * 2.4 修改举一反三
  91. * PUT /api/drawLessons/admin/update
  92. */
  93. export interface UpdateDrawLessonsRequest {
  94. id: number;
  95. associationOneThree?: string;
  96. associationOtObligationDeptIds?: string;
  97. associationOtTimeLimit?: string;
  98. planStartDate?: string;
  99. statusId?: number;
  100. statusName?: string;
  101. /** 兼容视图 spread 传参 */
  102. dangerId?: number;
  103. problem?: string;
  104. }
  105. export function updateDrawLessons(data: UpdateDrawLessonsRequest) {
  106. return http.request({
  107. url: '/drawLessons/admin/update',
  108. method: 'put',
  109. data,
  110. });
  111. }
  112. /**
  113. * 2.5 删除举一反三
  114. * DELETE /api/drawLessons/admin/delete?id=xxx
  115. */
  116. export function deleteDrawLessons(id: number) {
  117. return http.request({
  118. url: '/drawLessons/admin/delete',
  119. method: 'delete',
  120. params: { id },
  121. });
  122. }
  123. /**
  124. * 2.6 下发举一反三
  125. * POST /api/drawLessons/admin/issue
  126. */
  127. export interface IssueDrawLessonsRequest {
  128. associationOtId: number;
  129. dangerId?: number;
  130. associationOtObligationDeptId?: number;
  131. associationOtObligationDeptName?: string;
  132. associationOtObligationDeptIds?: string;
  133. associationOtObligationDeptUserId?: number;
  134. associationOtObligationDeptUserName?: string;
  135. associationOneThree?: string;
  136. associationOtTimeLimit?: string;
  137. attachments?: string;
  138. executGroupIds?: any; // 兼容批量下发传参
  139. /** 计划开始日期(下发弹窗) */
  140. planStartDate?: string;
  141. /** 计划结束时间(下发弹窗) */
  142. planEndTime?: string;
  143. }
  144. export function issueDrawLessons(data: IssueDrawLessonsRequest) {
  145. return http.request({
  146. url: '/drawLessons/admin/issue',
  147. method: 'post',
  148. data,
  149. });
  150. }
  151. /**
  152. * 2.7 反馈
  153. * POST /api/drawLessons/admin/feedback
  154. * id:下发记录 ID(举一反三下发表 id)
  155. * feedbackHasIssue:是否存在问题,1 是 / 0 否
  156. * feedbackResult:反馈结果/整改情况说明
  157. * feedbackTime:反馈时间(Date,传字符串如 YYYY-MM-DD HH:mm:ss)
  158. * attachments:反馈附件(JSON 或逗号分隔 URL,允许为空)
  159. */
  160. export interface DrawLessonsFeedbackRequest {
  161. /** 下发记录 ID(举一反三下发表 id) */
  162. id: number;
  163. /** 是否存在问题:1-是 0-否 */
  164. feedbackHasIssue: number;
  165. /** 反馈结果/整改情况说明 */
  166. feedbackResult?: string;
  167. /** 反馈时间 */
  168. feedbackTime?: string;
  169. /** 反馈附件(JSON 或逗号分隔 URL,允许为空) */
  170. attachments?: string;
  171. }
  172. export function submitDrawLessonsAdminFeedback(data: DrawLessonsFeedbackRequest) {
  173. return http.request({
  174. url: '/drawLessons/admin/feedback',
  175. method: 'post',
  176. data: {
  177. id: data.id,
  178. feedbackHasIssue: data.feedbackHasIssue,
  179. feedbackResult: data.feedbackResult,
  180. feedbackTime: data.feedbackTime,
  181. attachments: data.attachments ?? '',
  182. },
  183. });
  184. }
  185. /**
  186. * 2.8 审核/变更状态
  187. * PUT /api/drawLessons/admin/approve?id=xxx&statusId=xxx&statusName=xxx&reviewReason=xxx(不通过时)
  188. */
  189. export interface ApproveDrawLessonsRequest {
  190. id: number;
  191. statusId: number;
  192. statusName?: string;
  193. /** 不通过原因(审核不通过时必填) */
  194. reviewReason?: string;
  195. }
  196. export function approveDrawLessons(data: ApproveDrawLessonsRequest) {
  197. return http.request({
  198. url: '/drawLessons/admin/approve',
  199. method: 'put',
  200. params: {
  201. id: data.id,
  202. statusId: data.statusId,
  203. statusName: data.statusName,
  204. ...(data.reviewReason != null && data.reviewReason !== '' ? { reviewReason: data.reviewReason } : {}),
  205. },
  206. });
  207. }
  208. /**
  209. * 2.9 作废举一反三主记录
  210. * PUT /api/drawLessons/admin/void?id=xxx
  211. */
  212. export function voidDrawLessons(id: number) {
  213. return http.request({
  214. url: '/drawLessons/admin/void',
  215. method: 'put',
  216. params: { id },
  217. });
  218. }
  219. /**
  220. * 部门端:分页查询
  221. * POST /api/drawLessons/dept/queryPage
  222. */
  223. export function queryDrawLessonsDeptPage(
  224. query: QueryPageRequest<DrawLessonsQueryParam>,
  225. ) {
  226. return http.request<QueryPageResponse<DrawLessonsItem>>({
  227. url: '/drawLessons/dept/queryPage',
  228. method: 'post',
  229. data: query,
  230. });
  231. }
  232. /**
  233. * 部门端:详情
  234. * GET /api/drawLessons/dept/queryDetail?id=xxx
  235. */
  236. export function getDrawLessonsDeptDetail(id: number) {
  237. return http.request<DrawLessonsItem>({
  238. url: '/drawLessons/dept/queryDetail',
  239. method: 'get',
  240. params: { id },
  241. });
  242. }
  243. /**
  244. * 部门端:反馈(与 admin/feedback 参数一致,若后端统一则可用 submitDrawLessonsAdminFeedback)
  245. * POST /api/drawLessons/dept/feedback
  246. */
  247. export function submitDrawLessonsDeptFeedback(data: DrawLessonsFeedbackRequest) {
  248. return http.request({
  249. url: '/drawLessons/dept/feedback',
  250. method: 'post',
  251. data: {
  252. id: data.id,
  253. feedbackHasIssue: data.feedbackHasIssue,
  254. feedbackResult: data.feedbackResult,
  255. feedbackTime: data.feedbackTime,
  256. attachments: data.attachments ?? '',
  257. },
  258. });
  259. }
  260. /** 部门反馈请求(与 DrawLessonsFeedbackRequest 一致) */
  261. export type DeptFeedbackRequest = DrawLessonsFeedbackRequest;
  262. /**
  263. * 兼容旧调用:下发时按「主记录 id + 多个部门」封装,内部按文档拆成单条 issue 请求
  264. * 文档 2.6 为单条:associationOtId + 一个部门等;此处保留 id + deptIssues 入参
  265. */
  266. export interface DrawLessonsDeptIssue {
  267. associationOtObligationDeptId?: number;
  268. associationOtObligationDeptName?: string;
  269. associationOtObligationDeptUserId?: number;
  270. associationOtObligationDeptUserName?: string;
  271. associationOneThree?: string;
  272. associationOtTimeLimit?: string;
  273. }
  274. export function issueDrawLessonsBatch(data: {
  275. id: number;
  276. deptIssues: DrawLessonsDeptIssue[];
  277. }) {
  278. if (!data.deptIssues?.length) {
  279. return Promise.reject(new Error('请至少选择一个部门'));
  280. }
  281. const payloads: IssueDrawLessonsRequest[] = data.deptIssues.map((dept) => ({
  282. associationOtId: data.id,
  283. associationOtObligationDeptId: dept.associationOtObligationDeptId,
  284. associationOtObligationDeptName: dept.associationOtObligationDeptName,
  285. associationOtObligationDeptUserId: dept.associationOtObligationDeptUserId,
  286. associationOtObligationDeptUserName: dept.associationOtObligationDeptUserName,
  287. associationOneThree: dept.associationOneThree,
  288. associationOtTimeLimit: dept.associationOtTimeLimit,
  289. }));
  290. return Promise.all(payloads.map((p) => http.request({ url: '/drawLessons/admin/issue', method: 'post', data: p }))).then(
  291. () => ({}),
  292. );
  293. }