提交 55d41116 authored 作者: 王鹏飞's avatar 王鹏飞

feat: 案例授权新增其他资料

上级 31b99a78
...@@ -24,6 +24,7 @@ const caseFileTypeMap: Record<CaseFileSelectionType, string> = { ...@@ -24,6 +24,7 @@ const caseFileTypeMap: Record<CaseFileSelectionType, string> = {
book: '3', book: '3',
video: '4', video: '4',
dataset: '5', dataset: '5',
other: '6',
} }
const caseFileSectionConfig: Array<{ const caseFileSectionConfig: Array<{
...@@ -36,10 +37,11 @@ const caseFileSectionConfig: Array<{ ...@@ -36,10 +37,11 @@ const caseFileSectionConfig: Array<{
{ key: 'book', title: '案例指导书', emptyText: '暂无案例指导书' }, { key: 'book', title: '案例指导书', emptyText: '暂无案例指导书' },
{ key: 'video', title: '案例操作视频', emptyText: '暂无案例操作视频' }, { key: 'video', title: '案例操作视频', emptyText: '暂无案例操作视频' },
{ key: 'dataset', title: '案例数据集', emptyText: '暂无案例数据集' }, { key: 'dataset', title: '案例数据集', emptyText: '暂无案例数据集' },
{ key: 'other', title: '其他资料', emptyText: '暂无其他资料' },
] ]
const experimentSupportedTypes = new Set<CaseFileSelectionType>(['case', 'book', 'video']) const experimentSupportedTypes = new Set<CaseFileSelectionType>(['case', 'book', 'video'])
const resourceSupportedTypes = new Set<CaseFileSelectionType>(['ppt', 'book', 'video', 'dataset']) const resourceSupportedTypes = new Set<CaseFileSelectionType>(['ppt', 'book', 'video', 'dataset', 'other'])
function createEmptySelections(): Record<CaseFileSelectionType, string[]> { function createEmptySelections(): Record<CaseFileSelectionType, string[]> {
return { return {
...@@ -48,6 +50,7 @@ function createEmptySelections(): Record<CaseFileSelectionType, string[]> { ...@@ -48,6 +50,7 @@ function createEmptySelections(): Record<CaseFileSelectionType, string[]> {
book: [], book: [],
video: [], video: [],
dataset: [], dataset: [],
other: [],
} }
} }
...@@ -56,9 +59,11 @@ function getMimeType(fileName: string) { ...@@ -56,9 +59,11 @@ function getMimeType(fileName: string) {
const mimeMap: Record<string, string> = { const mimeMap: Record<string, string> = {
doc: 'application/msword', doc: 'application/msword',
docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
html: 'text/html',
pdf: 'application/pdf', pdf: 'application/pdf',
ppt: 'application/vnd.ms-powerpoint', ppt: 'application/vnd.ms-powerpoint',
pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation', pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
txt: 'text/plain',
xls: 'application/vnd.ms-excel', xls: 'application/vnd.ms-excel',
xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
csv: 'text/csv', csv: 'text/csv',
...@@ -75,6 +80,10 @@ function getFileNameWithoutExt(fileName: string) { ...@@ -75,6 +80,10 @@ function getFileNameWithoutExt(fileName: string) {
return fileName.replace(/\.[^.]+$/, '') return fileName.replace(/\.[^.]+$/, '')
} }
function getAuthorizedName(caseName: string, fileName: string) {
return `${caseName}-${getFileNameWithoutExt(fileName)}`
}
function getFilesByType(files: CaseLibraryItem['files'], type: string) { function getFilesByType(files: CaseLibraryItem['files'], type: string) {
return files.filter((file) => file.type === type) return files.filter((file) => file.type === type)
} }
...@@ -158,6 +167,7 @@ export function useCaseAuthorization() { ...@@ -158,6 +167,7 @@ export function useCaseAuthorization() {
book: getFilesByType(files, caseFileTypeMap.book), book: getFilesByType(files, caseFileTypeMap.book),
video: getFilesByType(files, caseFileTypeMap.video), video: getFilesByType(files, caseFileTypeMap.video),
dataset: getFilesByType(files, caseFileTypeMap.dataset), dataset: getFilesByType(files, caseFileTypeMap.dataset),
other: getFilesByType(files, caseFileTypeMap.other),
} }
}) })
...@@ -342,7 +352,8 @@ export function useCaseAuthorization() { ...@@ -342,7 +352,8 @@ export function useCaseAuthorization() {
try { try {
for (let index = 0; index < actionableItems.length; index += 1) { for (let index = 0; index < actionableItems.length; index += 1) {
const item = actionableItems[index] const item = actionableItems[index]
const { type, file, authorizeToExperiment, authorizeToResource } = item const { row, type, file, authorizeToExperiment, authorizeToResource } = item
const authorizedName = getAuthorizedName(row.name, file.name)
setStepProgress(index, actionableItems.length, 0.05, `准备处理 ${index + 1}/${actionableItems.length}${file.name}`) setStepProgress(index, actionableItems.length, 0.05, `准备处理 ${index + 1}/${actionableItems.length}${file.name}`)
if (type === 'video') { if (type === 'video') {
...@@ -352,7 +363,7 @@ export function useCaseAuthorization() { ...@@ -352,7 +363,7 @@ export function useCaseAuthorization() {
setStepProgress(index, actionableItems.length, 0.98, `正在创建实验操作视频:${file.name}`) setStepProgress(index, actionableItems.length, 0.98, `正在创建实验操作视频:${file.name}`)
await createVideo({ await createVideo({
experiment_id: selectedExperiment.value, experiment_id: selectedExperiment.value,
name: getFileNameWithoutExt(file.name), name: authorizedName,
source_id: sourceId, source_id: sourceId,
status: '1', status: '1',
}) })
...@@ -362,7 +373,7 @@ export function useCaseAuthorization() { ...@@ -362,7 +373,7 @@ export function useCaseAuthorization() {
if (authorizeToResource) { if (authorizeToResource) {
setStepProgress(index, actionableItems.length, 0.98, `正在创建统一资源视频:${file.name}`) setStepProgress(index, actionableItems.length, 0.98, `正在创建统一资源视频:${file.name}`)
await createResourceVideo({ await createResourceVideo({
name: getFileNameWithoutExt(file.name), name: authorizedName,
source: '2', source: '2',
classification: resourceClassification.value, classification: resourceClassification.value,
knowledge_points: '', knowledge_points: '',
...@@ -382,7 +393,7 @@ export function useCaseAuthorization() { ...@@ -382,7 +393,7 @@ export function useCaseAuthorization() {
setStepProgress(index, actionableItems.length, 0.95, `正在创建实验案例原文:${file.name}`) setStepProgress(index, actionableItems.length, 0.95, `正在创建实验案例原文:${file.name}`)
await createCase({ await createCase({
experiment_id: selectedExperiment.value, experiment_id: selectedExperiment.value,
name: getFileNameWithoutExt(file.name), name: authorizedName,
type: getMimeType(file.name), type: getMimeType(file.name),
url: uploadedFile.url, url: uploadedFile.url,
size: (uploadedFile.file.size / 1024 / 1024).toString(), size: (uploadedFile.file.size / 1024 / 1024).toString(),
...@@ -394,7 +405,7 @@ export function useCaseAuthorization() { ...@@ -394,7 +405,7 @@ export function useCaseAuthorization() {
if (type === 'ppt' && authorizeToResource) { if (type === 'ppt' && authorizeToResource) {
setStepProgress(index, actionableItems.length, 0.95, `正在创建统一资源课件:${file.name}`) setStepProgress(index, actionableItems.length, 0.95, `正在创建统一资源课件:${file.name}`)
await createResourceCourseware({ await createResourceCourseware({
name: getFileNameWithoutExt(file.name), name: authorizedName,
source: '2', source: '2',
classification: resourceClassification.value, classification: resourceClassification.value,
knowledge_points: '', knowledge_points: '',
...@@ -410,7 +421,7 @@ export function useCaseAuthorization() { ...@@ -410,7 +421,7 @@ export function useCaseAuthorization() {
setStepProgress(index, actionableItems.length, 0.95, `正在创建实验案例指导书:${file.name}`) setStepProgress(index, actionableItems.length, 0.95, `正在创建实验案例指导书:${file.name}`)
await createBook({ await createBook({
experiment_id: selectedExperiment.value, experiment_id: selectedExperiment.value,
name: getFileNameWithoutExt(file.name), name: authorizedName,
type: getMimeType(file.name), type: getMimeType(file.name),
url: uploadedFile.url, url: uploadedFile.url,
size: (uploadedFile.file.size / 1024 / 1024).toString(), size: (uploadedFile.file.size / 1024 / 1024).toString(),
...@@ -422,7 +433,7 @@ export function useCaseAuthorization() { ...@@ -422,7 +433,7 @@ export function useCaseAuthorization() {
if (authorizeToResource) { if (authorizeToResource) {
setStepProgress(index, actionableItems.length, 0.97, `正在创建统一资源教案:${file.name}`) setStepProgress(index, actionableItems.length, 0.97, `正在创建统一资源教案:${file.name}`)
await createResourceLessonPlan({ await createResourceLessonPlan({
name: getFileNameWithoutExt(file.name), name: authorizedName,
source: '2', source: '2',
classification: resourceClassification.value, classification: resourceClassification.value,
knowledge_points: '', knowledge_points: '',
...@@ -434,10 +445,10 @@ export function useCaseAuthorization() { ...@@ -434,10 +445,10 @@ export function useCaseAuthorization() {
} }
} }
if (type === 'dataset' && authorizeToResource) { if ((type === 'dataset' || type === 'other') && authorizeToResource) {
setStepProgress(index, actionableItems.length, 0.95, `正在创建统一资源其他资料:${file.name}`) setStepProgress(index, actionableItems.length, 0.95, `正在创建统一资源其他资料:${file.name}`)
await createResourceOther({ await createResourceOther({
name: getFileNameWithoutExt(file.name), name: authorizedName,
source: '2', source: '2',
classification: resourceClassification.value, classification: resourceClassification.value,
knowledge_points: '', knowledge_points: '',
......
...@@ -19,7 +19,7 @@ export interface CaseLibraryItem { ...@@ -19,7 +19,7 @@ export interface CaseLibraryItem {
updated_at: string updated_at: string
} }
export type CaseFileSelectionType = 'case' | 'ppt' | 'book' | 'video' | 'dataset' export type CaseFileSelectionType = 'case' | 'ppt' | 'book' | 'video' | 'dataset' | 'other'
export type AuthorizePlatform = 'resource' | 'experiment' export type AuthorizePlatform = 'resource' | 'experiment'
......
...@@ -92,6 +92,7 @@ const { ...@@ -92,6 +92,7 @@ const {
<div>3、案例PPT -> 统一资源平台:课件</div> <div>3、案例PPT -> 统一资源平台:课件</div>
<div>4、案例操作视频 -> 统一资源平台:视频;实操平台:实验操作视频</div> <div>4、案例操作视频 -> 统一资源平台:视频;实操平台:实验操作视频</div>
<div>5、案例数据集 -> 统一资源平台:其他资料</div> <div>5、案例数据集 -> 统一资源平台:其他资料</div>
<div>6、其他资料 -> 统一资源平台:其他资料</div>
</div> </div>
</el-alert> </el-alert>
...@@ -244,10 +245,13 @@ const { ...@@ -244,10 +245,13 @@ const {
} }
.case-card__desc { .case-card__desc {
min-height: 44px;
font-size: 14px; font-size: 14px;
line-height: 1.6; line-height: 1.6;
color: var(--el-text-color-regular); color: var(--el-text-color-regular);
display: -webkit-box;
overflow: hidden;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
} }
.case-card__meta { .case-card__meta {
...@@ -269,6 +273,8 @@ const { ...@@ -269,6 +273,8 @@ const {
background: var(--el-fill-color-light); background: var(--el-fill-color-light);
border-radius: 8px; border-radius: 8px;
min-height: 180px; min-height: 180px;
max-height: 360px;
overflow-y: auto;
} }
.case-auth-section--disabled { .case-auth-section--disabled {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论