import { computed, defineComponent, nextTick, onMounted, reactive, ref } from 'vue'; import styles from './index.module.less'; import { NButton, NForm, NFormItem, NImage, NInput, NScrollbar, NSelect, NSpace, NSwitch, useMessage } from 'naive-ui'; import UploadFile from './upload-file'; import { useCatchStore } from '/src/store/modules/catchData'; import iconImage from '@common/images/icon-image.png'; import iconVideo from '@common/images/icon-video.png'; import iconAudio from '@common/images/icon-audio.png'; import iconMusic from '@common/images/icon-music.png'; import iconPPT from '@common/images/icon-ppt.png'; import iconUploadDelete from '../../../images/btn-remove.png'; import { materialSave, materialUpdateAll } from '../../../api'; import { NaturalTypeEnum } from '@/enums/pageEnum'; import { scrollToErrorForm } from '/src/utils'; // 判断链接后辍 export const formatUrlType = (url: string) => { if (!url) return ''; if (url?.indexOf('.mp3') > -1) { return NaturalTypeEnum.SONG; } else if (url?.indexOf('.mp4') > -1) { return NaturalTypeEnum.VIDEO; } else if (url?.indexOf('.ppt') > -1) { return NaturalTypeEnum.PPT; } else { return NaturalTypeEnum.IMG; } }; export default defineComponent({ name: 'upload-modal', props: { list: { type: Array, default: () => [] }, editStatus: { type: Boolean, default: true } }, emits: ['close', 'confirm'], setup(props, { emit }) { const catchStore = useCatchStore(); const formRef = ref(); const message = useMessage(); const uploadRef = ref(); const uploadList = ref([] as any); const uploadForms = reactive({ list: [] as any[], uploading: false, uploadUrl: '', name: '', subjectIds: [] as any }); // 判断类型 const formatType = (type: string) => { let typeImg = iconImage; switch (type) { case 'IMG': typeImg = iconImage; break; case 'VIDEO': typeImg = iconVideo; break; case 'SONG': typeImg = iconAudio; break; case 'MUSIC': typeImg = iconMusic; break; case 'PPT': typeImg = iconPPT; break; } return typeImg; }; const onSubmit = async () => { // formRef.value?.validate(async (err: any) => { if (err) { nextTick(scrollToErrorForm); return; } uploadForms.uploading = true; try { const body: any[] = []; uploadForms.list.forEach(item => { body.push({ subjectIds: item.subjectIds.join(','), openFlag: item.openFlag, coverImg: item.coverImg, name: item.name, type: item.type, enableFlag: 1, content: item.content, id: item.id || null }); }); if (isUpdate.value) { await materialUpdateAll(body); } else { await materialSave(body); } uploadForms.list = []; message.success('保存成功'); emit('close', true); emit('confirm'); } catch { // } uploadForms.uploading = false; }); }; const handleRemove = (index: number) => { uploadForms.list.splice(index, 1); }; const isUpdate = computed(() => (props.list.length > 0 ? true : false)); onMounted(async () => { const list = props.list || []; const temps: any[] = []; list.forEach((item: any) => { temps.push({ subjectIds: item.subjectId ? item.subjectId .split(',') .map((subjectId: any) => Number(subjectId)) : [], openFlag: item.openFlag, coverImg: item.coverImg, name: item.title, type: item.type, sourceFrom: item.sourceFrom, enableFlag: item.enableFlag, content: item.content, id: item.id }); }); uploadForms.list = temps || []; console.log(temps, 'uploadForms'); await catchStore.getSubjects(); }); // 全选 const chioseAll = (item: any, list: any) => { item.subjectIds = list.map((item: any) => { return item.id; }) as any; }; return () => (
{uploadForms.list.map((item: any, index: number) => (
{/* 编辑时不能删除 */} {!isUpdate.value && ( handleRemove(index)} /> )}
是否公开:
( <> chioseAll(item, catchStore.getSubjectList) }> 全选 ) }} />
))} {/* {!isUpdate.value && (
{ console.log(val, 'val'); uploadList.value.push({ subjectIds: uploadForms.subjectIds || [], openFlag: true, coverImg: val.coverImg, name: uploadForms.name || '', type: formatUrlType(val.content), enableFlag: 1, content: val.content }); // uploadForms.list.push({ // subjectIds: uploadForms.subjectIds || [], // openFlag: true, // coverImg: val.coverImg, // name: uploadForms.name || '', // type: formatUrlType(val.content), // enableFlag: 1, // content: val.content // }); const timer = setTimeout(() => { uploadForms.list.push(...uploadList.value); uploadList.value = []; uploadForms.uploadUrl = ''; uploadForms.name = ''; uploadForms.subjectIds = []; uploadRef.value.handleClearFile(); }, 1000); }} /> ( <> chioseAll( uploadForms, catchStore.getSubjectList ) }> 全选 ) }} />
)} */}
emit('close')}> {props.editStatus ? '取消' : '上一步'} 确定
); } });