record.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import axios from './instance'
  2. import { RECORD_LIST, DELETE_RECORD, UPDATE_RECORD, MERGE_RECORD, RECORD_STATUS, UPLOAD_HEADS } from './constant'
  3. import { params } from '@/env'
  4. import { jsonToForm } from '@/utils'
  5. export enum RecordStatus {
  6. UN = -2,
  7. ERR = -1,
  8. RUN = 0,
  9. SUCCESS = 1
  10. }
  11. export interface Record {
  12. id: string
  13. cover: string
  14. title: string
  15. url: string | null
  16. sort: number
  17. status: RecordStatus
  18. }
  19. interface ServiceRecord {
  20. videoFolderId: number,
  21. videoFolderName: string,
  22. videoFolderCover: string,
  23. videoMergeUrl: string | null,
  24. sort: number,
  25. uploadStatus: RecordStatus
  26. }
  27. const toLocal = (serviceRecord: ServiceRecord) : Record => ({
  28. id: serviceRecord.videoFolderId.toString(),
  29. cover: serviceRecord.videoFolderCover,
  30. title: serviceRecord.videoFolderName,
  31. url: serviceRecord.videoMergeUrl,
  32. sort: serviceRecord.sort,
  33. status: serviceRecord.uploadStatus || RecordStatus.RUN
  34. })
  35. const toService = (record: Record, isUpdate = true): PartialProps<ServiceRecord, 'videoFolderId'> => ({
  36. ...(isUpdate ? { videoFolderId: Number(record.id) } : {}),
  37. videoFolderName: record.title,
  38. videoFolderCover: record.cover,
  39. videoMergeUrl: record.url,
  40. sort: record.sort,
  41. uploadStatus: record.status
  42. })
  43. export type Records = Record[]
  44. export const fetchRecords = async () => {
  45. const data = await axios.get<ServiceRecord[]>(RECORD_LIST, { params: { fusionId: params.caseId } })
  46. return data.map(toLocal)
  47. }
  48. export const fetchRecordStatus = async (recordId: Record['id']) => {
  49. const step = await axios.get<number>(RECORD_STATUS, { params: { folderId: Number(recordId) } })
  50. if (step >= 100) {
  51. return RecordStatus.SUCCESS
  52. } else if (step < 0) {
  53. return RecordStatus.ERR
  54. } else {
  55. return RecordStatus.RUN
  56. }
  57. }
  58. export const postAddRecord = async (record: Record, files: File[]) => {
  59. const serviceRecord = await postMegerRecord(files)
  60. return toLocal(serviceRecord)
  61. }
  62. export const postUpdateRecord = async (record: Record) => {
  63. const serviceRecord = toService(record)
  64. await axios.post(UPDATE_RECORD, serviceRecord)
  65. }
  66. export const postMegerRecord = (files: File[], recordId?: Record['id']) => {
  67. return axios<ServiceRecord>({
  68. method: 'POST',
  69. url: MERGE_RECORD,
  70. headers: { ...UPLOAD_HEADS },
  71. data: jsonToForm({
  72. ...(recordId ? { folderId: recordId && Number(recordId) } : {}),
  73. fusionId: params.caseId,
  74. files
  75. })
  76. })
  77. }
  78. export const postDeleteRecord = async (id: Record['id']) => {
  79. await axios.post(DELETE_RECORD, { videoFolderId: Number(id) })
  80. }