import { FormInst, FormItemRule, FormRules, NButton, NCascader, NDrawer, NDrawerContent, NForm, NFormItem, NInput, NInputGroup, NRadio, NRadioGroup, NSelect, NSpace, NSpin, NSwitch, useMessage } from 'naive-ui' import { defineComponent, inject, onMounted, reactive, ref, watch } from 'vue' import { fetchMaterailDetail, materialSave, updateMaterailData } from '../api' import { materialType } from '../educationalData' import UploadFile from '@/components/upload-file' import { lessonType } from '@/views/knowledge-manage/knowledgeTypeData' import SelectMusicSheet from './selectMusicSheet' import Editor from '@/components/editor' export default defineComponent({ name: 'addMaterial', emits: ['handleSuccess', 'close'], props: ['item', 'isLook', 'categoryList'], setup(props, { emit }) { const message = useMessage() const loading = ref(false) const formRef = ref(null) const formContentRef = ref() const saveModel = reactive({ name: '', sn: '', //序号 materialCategoryId: null, //素材分类 // adviseStudyTimeSecond: null, type: materialType.视频, phaseGoals: null, checkItem: null, materialRefs: [] as any, content: '', // 视频、图片链接或者是曲目编号 courseTypeCode: [], // 课程类型 enableFlag: true //启用状态 }) onMounted(async () => { if (props?.item?.id) { loading.value = true const res: any = await fetchMaterailDetail(props.item.id) if (res?.code == 200) { Object.keys(saveModel).forEach((key: any) => { if (res?.data?.[key]) { if (key === 'adviseStudyTimeSecond') (saveModel as any)[key] = res.data[key] + '' else if (key === 'courseTypeCode') (saveModel as any)[key] = res.data[key]?.split(',') || [] else (saveModel as any)[key] = res.data[key] } if (key === 'enableFlag') (saveModel as any)[key] = res.data[key] }) if (saveModel.type === 'SONG') { musicOpentions.music = { name: res.data.contentDesc } } // else { // if (res.data.materialRefs && res.data.materialRefs.length > 0) { // res.data.materialRefs.forEach((row: any) => { // saveModel.materialRefs.push({ // resourceId: row.resourceId, // knowledgeType: row.knowledgeType, // resourceName: row.resourceName // }) // }) // } // } console.log('🚀 ~ saveModel', saveModel) } loading.value = false } }) function validateContent(rule: FormItemRule, value: string) { if (!value) { return saveModel.type === materialType.视频 ? new Error('请上传视频') : saveModel.type === materialType.图片 ? new Error('请上传图片') : new Error('请选择曲目') } return true } function validateAdviseStudyTimeSecond(rule: FormItemRule, value: string) { if (!value) { return new Error('请填写时间') } if (!/^\+?[1-9]\d*$/.test(value)) { return new Error('请填写正确的时间') } return true } function validateCourseTypeCode(rule: FormItemRule, value: []) { if (Array.isArray(value) && !value.length) { return new Error('请选择课程类型') } return true } const rules: FormRules = { name: [{ required: true, message: '请填写素材名称', trigger: ['blur', 'change'] }], sn: [{ required: true, message: '分段编号', trigger: ['blur', 'change'] }], materialCategoryId: [ { required: true, message: '请选择素材分类', trigger: ['blur', 'change'] } ], adviseStudyTimeSecond: [ { validator: validateAdviseStudyTimeSecond, trigger: ['change'] } ], content: [{ validator: validateContent, trigger: ['blur', 'change', 'input'] }], courseTypeCode: [ { validator: validateCourseTypeCode, message: '请选择课程类型', trigger: ['blur', 'change'] } ], phaseGoals: [{ required: true, message: '请填写阶段目标' , trigger: ['blur', 'change', 'input'] }], checkItem: [{ required: true, message: '请填写检查事项', trigger: ['blur', 'change', 'input'] }] } // const categoryList = inject('categoryList', { list: [] }).list || [] const submit = () => { formRef.value?.validate(async (err) => { if (!err) { const params: any = { ...saveModel, courseTypeCode: saveModel.courseTypeCode?.join(',') || '' } let res: any = null if (props?.item?.id) { params.id = props.item.id res = await updateMaterailData(params) } else { res = await materialSave(params) } if (res?.code == 200) { message.success('保存成功') emit('handleSuccess') } else { message.warning('保存失败') } } }) } // 改变素材类型 const changeType = () => { saveModel.content = '' musicOpentions.music = '' } // 添加曲谱 const musicOpentions = reactive({ show: false, music: '' as any, type: '' }) const hanldeSelectMusic = (musicItem: any) => { musicOpentions.music = musicItem saveModel.content = musicItem.id musicOpentions.show = false formContentRef.value?.restoreValidation() // console.log('🚀 ~ musicItem', musicItem) } return () => (
{/* '秒' }} /> */} { saveModel.courseTypeCode = val }} options={lessonType} /> changeType()}> 视频 图片 曲目 {saveModel.type === materialType.曲目 ? ( { musicOpentions.show = true musicOpentions.type = 'upload' }} > 选择曲谱 {musicOpentions.music && ( )} ) : ( { formContentRef.value?.restoreValidation() }} > )} {saveModel.type !== 'SONG' && ( { musicOpentions.show = true musicOpentions.type = 'correlation' }} > 选择曲谱 {saveModel.materialRefs.length > 0 && ( { saveModel.materialRefs = [] }} > 删除 )} )} {props.isLook ? ( '' ) : ( emit('close')}> 取消 保存 )} { console.log(musicOpentions.type, row) if (musicOpentions.type === 'upload') { hanldeSelectMusic(row) } else { saveModel.materialRefs = [ { resourceId: row.id, knowledgeType: 'MUSIC', resourceName: row.name } ] musicOpentions.show = false } }} />
) } })