- Expanded CourseResourceType to include "resource" and "temp". - Renamed ICourseResource to IResource and updated its properties for consistency. - Introduced ICreateResource type for resource creation. - Modified ICourseSection and ICourseChapter interfaces to use the new IResource type and updated property names for camelCase. - Implemented uploadFile function in file API for handling file uploads. - Created ResourceUploader component for uploading resources with validation and feedback. - Developed Card component for displaying course class details and managing student enrollment. - Added AlertDialog components for consistent alert dialog UI. - Enhanced table components for better data presentation and management. - Implemented preview page for displaying various resource types based on file extension.
37 lines
846 B
TypeScript
37 lines
846 B
TypeScript
import type { IResponse } from ".";
|
|
|
|
const putFile = (file: File, url: string): Promise<string> => {
|
|
return new Promise((resolve, reject) => {
|
|
$fetch(url, {
|
|
method: "PUT",
|
|
body: file,
|
|
headers: {
|
|
"Content-Type": file.type,
|
|
},
|
|
})
|
|
.then(() => {
|
|
resolve(url.split("?")[0]);
|
|
})
|
|
.catch(() => {
|
|
reject(new Error("File upload failed"));
|
|
});
|
|
});
|
|
};
|
|
|
|
export const uploadFile = async (file: File, type: "resource" | "temp") => {
|
|
const signedUrl = await http<IResponse<{ data: string }>>(
|
|
`/common/oss/getSignUrl`,
|
|
{
|
|
method: "POST",
|
|
query: {
|
|
fileName: encodeURI(file.name),
|
|
fileType: type,
|
|
fileSize: file.size,
|
|
fileMime: file.type,
|
|
},
|
|
}
|
|
);
|
|
const url = signedUrl.data;
|
|
return await putFile(file, url);
|
|
};
|