import { useDayjs } from "@/composables/useDayjs"; import type { FileUploadDestination, Lesson } from "@/types/api/lesson"; export const extractLessonStage = (lesson: Lesson) => { const stages = { script_upload: !!lesson?.script_upload_time, script_confirm: !!lesson?.script_confirm_time, video_capture: !!lesson?.video_capture_time, post_production: !!lesson?.video_confirm_time, step: 0, }; stages.step = Object.values(stages).filter((v) => v).length; return stages; }; export const calcLessonProgress = (lesson: Lesson, total: number = 4) => { const progress = extractLessonStage(lesson); return Math.floor((progress.step / total) * 100); }; export const getLessonSteps = (lesson: Lesson, simplify: boolean = false) => { const dayjs = useDayjs(); const dateFormat = "YYYY-MM-DD HH:mm:ss"; const progress = extractLessonStage(lesson); return [ { title: progress.script_upload ? "脚本提交" : undefined, description: progress.script_upload ? simplify ? "已完成" : `已于 ${dayjs(lesson.script_upload_time * 1000).format( dateFormat )} 完成上传` : "脚本文件提交", }, { title: progress.script_confirm ? "脚本确认" : undefined, description: progress.script_confirm ? simplify ? "已完成" : `已于 ${dayjs(lesson.script_confirm_time * 1000).format( dateFormat )} 确认` : "脚本文件确认", }, { title: progress.video_capture ? "视频拍摄" : undefined, description: progress.video_capture ? simplify ? "已完成" : `已于 ${dayjs(lesson.video_capture_time * 1000).format( dateFormat )} 完成上传` : "视频拍摄提交", }, { title: progress.post_production ? "后期制作" : undefined, description: progress.post_production ? simplify ? "已完成" : `已于 ${dayjs(lesson.video_confirm_time * 1000).format( dateFormat )} 完成上传` : "视频后期制作", }, ]; }; export const getScriptFile = (lesson: Lesson) => { const scriptFile = lesson.script_file ? lesson.script_file.split("|") : []; return { way: scriptFile[0] || null, reupload: scriptFile[1] || null, }; }; export const parseCombinedFileString = ( lesson: Lesson, key: keyof Pick ): { method: FileUploadDestination; uploaded: Boolean; } => { const combined = lesson[key] ? JSON.parse(lesson[key]) : { method: null, uploaded: false, }; return combined; };