| 
					
				 | 
			
			
				@@ -1,467 +1,471 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  NButton, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  NCascader, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  NForm, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  NFormItem, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  NInput, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  NScrollbar, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  NSelect, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  NSpace, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  useMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} from 'naive-ui'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  TransitionGroup, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  defineComponent, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  onMounted, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  reactive, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  ref 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} from 'vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import styles from './index.module.less'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import UploadFile from '@/components/upload-file'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { nextTick } from 'vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { scrollToErrorForm } from '@/utils'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { api_lessonCoursewareSave } from '../../api'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import iconUpload from '../../images/icon-upload.png'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import iconUpload2 from '../../images/icon-upload2.png'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import iconAdd from '../../images/icon-add.png'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import iconMenu from '../../images/icon-menu.png'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import btnAdd from '../../images/btn-add.png'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import btnDelete from '../../images/btn-delete.png'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import btnUp from '../../images/btn-up.png'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import btnDown from '../../images/btn-down.png'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import btnRemove from '../../images/btn-remove.png'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { lessonCoursewareDetail } from '/src/views/prepare-lessons/api'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { useCatchStore } from '/src/store/modules/catchData'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-export const BOOK_DATA = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grades: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { label: '一年级', value: 1 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { label: '二年级', value: 2 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { label: '三年级', value: 3 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { label: '四年级', value: 4 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { label: '五年级', value: 5 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { label: '六年级', value: 6 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { label: '七年级', value: 7 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { label: '八年级', value: 8 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { label: '九年级', value: 9 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  bookTypes: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { label: '上册', value: 'LAST' }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { label: '下册', value: 'NEXT' } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-/** 添加单元 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const createLesson = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    key: 'item' + Date.now(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    name: '', // 单元名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    lessonTargetDesc: '', // 课时目标描述 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    knowledgeList: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        key: Date.now() + '' + 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        name: '' // 章节名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ] // 章节信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const initState = () => ({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  id: null, // 教材id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  name: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  currentGradeNum: null as any, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  instrumentIds: null as any, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // bookType: null, // 上下册 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  coverImg: '', // 封面 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  instruemntIds: [] as any, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  enableFlag: true, // 状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  type: 'COURSEWARE', // 教材类型:COURSEWARE,THEORY,可用值:COURSEWARE,THEORY 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  lessonList: [createLesson()] // 单元列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  name: 'addNatural', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  props: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    item: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      type: Object, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      default: () => ({}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  emits: ['close', 'confirm'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  setup(props, { emit }) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const catchStore = useCatchStore(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const message = useMessage(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const data = reactive({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      uploading: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      subjectList: [] as any 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const formRef = ref(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const form = reactive(initState()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const handleSave = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      formRef.value?.validate((err: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          nextTick(scrollToErrorForm); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        handleSubmit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const handleSubmit = async () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      data.uploading = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const { currentGradeNum, instrumentIds, ...more } = form; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        await api_lessonCoursewareSave({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          currentGradeNum: currentGradeNum.join(','), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          instrumentIds: instrumentIds.join(','), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          ...more 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Object.assign(form, initState()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        message.success(props.item.id ? '保存成功' : '添加成功'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        emit('close', true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        emit('confirm'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } catch { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      data.uploading = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    onMounted(async () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      await catchStore.getSubjects(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (props.item.id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const { data } = await lessonCoursewareDetail({ id: props.item.id }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        form.id = data.id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        form.name = data.name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        form.currentGradeNum = data.currentGradeNum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          ? data.currentGradeNum.split(',').map((item: any) => Number(item)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          : null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        form.instrumentIds = data.instrumentIds 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          ? data.instrumentIds.split(',').map((item: any) => item) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          : null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // form.bookType = data.bookType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        form.coverImg = data.coverImg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        form.lessonList = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const lessonList = data.lessonList || []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const tempLesson: any[] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        lessonList.forEach((item: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          const tmpItem: any = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            id: item.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            key: 'item' + Date.now() + '-' + Math.random() * 100, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            name: item.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            lessonTargetDesc: item.lessonTargetDesc, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            knowledgeList: [] as any 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          if (item.knowledgeList && item.knowledgeList.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            item.knowledgeList.forEach((knowledge: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              tmpItem.knowledgeList.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                id: knowledge.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                key: Date.now() + '-' + Math.random() * 100, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                name: knowledge.name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          tempLesson.push(tmpItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        form.lessonList = tempLesson; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      data.subjectList = catchStore.getEnableSingleAllSubjects( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        form.instrumentIds 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return () => ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      <div class={styles.container}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        <NScrollbar style={{ 'max-height': '65vh' }}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          <NForm 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ref={formRef} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            labelPlacement="left" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            labelWidth={120} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            model={form}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            <div class={styles.topForms}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              <NFormItem 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                path="coverImg" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rule={[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    required: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    message: '请上传教材封面', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    trigger: ['change'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ]}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                <UploadFile 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  cropper 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  // tips="建议尺寸:210*297, 文件大小: 5MB以内;" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  v-model:fileList={form.coverImg} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  showType="custom" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  size={2} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  accept=".jpg,jpeg,.png" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  options={{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    autoCropWidth: 210, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    autoCropHeight: 297, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    fixedBox: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  }}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  {{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    custom: () => ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      <div class={styles.uploadContent}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        <img src={iconUpload2} class={styles.iconUpload} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        <p>请上传教材封面</p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                </UploadFile> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              </NFormItem> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              <div class={styles.topFormInput}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                <NFormItem 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  style={{ minWidth: '360px' }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  path="name" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  rule={[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      required: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      message: '请输入教材名称', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      trigger: ['blur', 'change'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  ]}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  <NInput 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    placeholder="请输入教材名称" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    maxlength={25} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    v-model:value={form.name} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    clearable></NInput> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                </NFormItem> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                <NFormItem 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  path="currentGradeNum" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  rule={{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    required: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    message: '请选择年级', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    trigger: 'change', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    type: 'array' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  }}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  <NSelect 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    style={{ minWidth: '360px' }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    placeholder="请选择年级" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    options={BOOK_DATA.grades} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    v-model:value={form.currentGradeNum} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    clearable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    multiple 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    filterable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    maxTagCount={3} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                </NFormItem> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                <NFormItem 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  path="instrumentIds" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  style={{ width: '360px' }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  rule={{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    required: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    message: '请选择乐器', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    trigger: 'change', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    type: 'array' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  }}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  <NCascader 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    placeholder="请选择乐器" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    options={data.subjectList} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    v-model:value={form.instrumentIds} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    checkStrategy="child" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    showPath={false} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    childrenField="instruments" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    expandTrigger="hover" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    labelField="name" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    valueField="id" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    clearable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    filterable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    multiple 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    maxTagCount="responsive" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    style={{ width: '400px' }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                </NFormItem> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                {/* <NFormItem 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  path="bookType" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  style={{ width: '360px' }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  rule={{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    required: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    message: '请选择册别', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    trigger: 'change' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  }}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  <NSelect 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    placeholder="请选择册别" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    options={BOOK_DATA.bookTypes} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    v-model:value={form.bookType} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    clearable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                </NFormItem> */} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            <div class={styles.menuTitle}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              <img src={iconMenu} class={styles.iconMenu} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              目录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            <TransitionGroup name="list" tag="div"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              {form.lessonList.map((item, index) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  <NSpace 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    class={styles.lessonItem} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    wrap={false} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    wrapItem={false} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    align="start" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    key={item.key}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    <NFormItem 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      label="单元名称" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      labelPlacement="top" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      path={`lessonList[${index}].name`} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      rule={{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        required: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        message: '填写单元名称', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        trigger: ['blur', 'change'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      }}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      <NInput 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        placeholder="填写单元名称" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        maxlength={25} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        v-model:value={item.name} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        clearable></NInput> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    </NFormItem> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    <TransitionGroup name="list" tag="div"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      {item.knowledgeList.map((know, knowIndex) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        return ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                          <NFormItem 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            style={{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              '--n-label-height': knowIndex === 0 ? '26px' : '0' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            labelPlacement="top" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            label={knowIndex === 0 ? '章节名称' : ''} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            key={know.key} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            path={`lessonList[${index}].knowledgeList[${knowIndex}].name`} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            rule={{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              required: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              message: '填写章节名称', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              trigger: ['blur', 'change'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            }}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            <NSpace 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              wrap={false} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              class={styles.btnGroupAll} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              wrapItem={false}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              <NInput 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                maxlength={25} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                placeholder="填写章节名称" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                v-model:value={know.name} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                clearable></NInput> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              <NButton 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                quaternary 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                circle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                onClick={() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  item.knowledgeList.splice(knowIndex + 1, 0, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    name: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    key: Date.now() + '' + knowIndex 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                }}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                {{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  icon: () => ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    <img src={btnAdd} class={styles.btnImg} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              </NButton> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              <NButton 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                quaternary 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                circle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                disabled={item.knowledgeList.length < 2} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                onClick={() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  item.knowledgeList.splice(knowIndex, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                }}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                {{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  icon: () => ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    <img 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                      src={btnDelete} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                      class={styles.btnImg} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              </NButton> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              <NButton 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                quaternary 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                circle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                disabled={knowIndex === 0} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                onClick={() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  if (knowIndex === 0) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  const tmp = item.knowledgeList[knowIndex - 1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  item.knowledgeList[knowIndex - 1] = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    item.knowledgeList[knowIndex]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  item.knowledgeList[knowIndex] = tmp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                }}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                {{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  icon: () => ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    <img src={btnUp} class={styles.btnImg} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              </NButton> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              <NButton 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                quaternary 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                circle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                disabled={ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  knowIndex === item.knowledgeList.length - 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                onClick={() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  if ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    knowIndex === 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    item.knowledgeList.length - 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  const tmp = item.knowledgeList[knowIndex + 1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  item.knowledgeList[knowIndex + 1] = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    item.knowledgeList[knowIndex]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  item.knowledgeList[knowIndex] = tmp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                }}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                {{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  icon: () => ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    <img src={btnDown} class={styles.btnImg} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              </NButton> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            </NSpace> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                          </NFormItem> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      })} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    </TransitionGroup> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    <NButton 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      class={styles.closeBtn} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      secondary 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      circle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      size="small" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      disabled={form.lessonList.length < 2} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      onClick={() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        form.lessonList.splice(index, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      }}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      <img src={btnRemove} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    </NButton> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  </NSpace> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              })} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            </TransitionGroup> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            <div class={styles.line}></div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            <NButton 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              block 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              class={styles.addUnitBtn} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              ghost 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              color="#198CFE" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              onClick={() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                form.lessonList.push(createLesson()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              }}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              {{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                icon: () => <img src={iconAdd} />, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                default: () => '新增单元' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            </NButton> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          </NForm> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        </NScrollbar> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        <NSpace class={styles.btnGroup} justify="center"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          <NButton round onClick={() => emit('close')}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            取消 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          </NButton> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          <NButton 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            round 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            loading={data.uploading} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            type="primary" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            onClick={() => handleSave()}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            保存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          </NButton> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        </NSpace> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  NButton,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  NCascader,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  NForm,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  NFormItem,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  NInput,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  NScrollbar,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  NSelect,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  NSpace,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  useMessage
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} from 'naive-ui';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  TransitionGroup,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  defineComponent,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  onMounted,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  reactive,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ref
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} from 'vue';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import styles from './index.module.less';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import UploadFile from '@/components/upload-file';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { nextTick } from 'vue';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { scrollToErrorForm } from '@/utils';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { api_lessonCoursewareSave } from '../../api';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import iconUpload from '../../images/icon-upload.png';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import iconUpload2 from '../../images/icon-upload2.png';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import iconAdd from '../../images/icon-add.png';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import iconMenu from '../../images/icon-menu.png';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import btnAdd from '../../images/btn-add.png';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import btnDelete from '../../images/btn-delete.png';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import btnUp from '../../images/btn-up.png';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import btnDown from '../../images/btn-down.png';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import btnRemove from '../../images/btn-remove.png';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { lessonCoursewareDetail } from '/src/views/prepare-lessons/api';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { useCatchStore } from '/src/store/modules/catchData';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export const BOOK_DATA = {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grades: [
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { label: '一年级', value: 1 },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { label: '二年级', value: 2 },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { label: '三年级', value: 3 },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { label: '四年级', value: 4 },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { label: '五年级', value: 5 },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { label: '六年级', value: 6 },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { label: '七年级', value: 7 },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { label: '八年级', value: 8 },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { label: '九年级', value: 9 }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ],
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  bookTypes: [
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { label: '上册', value: 'LAST' },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { label: '下册', value: 'NEXT' }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ]
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+};
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 添加单元 */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const createLesson = () => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    key: 'item' + Date.now(),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    name: '', // 单元名称
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    lessonTargetDesc: '', // 课时目标描述
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    knowledgeList: [
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        key: Date.now() + '' + 0,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        name: '' // 章节名称
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ] // 章节信息
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  };
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+};
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const initState = () => ({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  id: null, // 教材id
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  name: '',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  currentGradeNum: null as any,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  instrumentIds: null as any,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // bookType: null, // 上下册
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  coverImg: '', // 封面
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  instruemntIds: [] as any,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  enableFlag: true, // 状态
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  type: 'COURSEWARE', // 教材类型:COURSEWARE,THEORY,可用值:COURSEWARE,THEORY
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  lessonList: [] as any // 单元列表
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+});
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export default defineComponent({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  name: 'addNatural',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  props: {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    item: {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      type: Object,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      default: () => ({})
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  emits: ['close', 'confirm'],
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  setup(props, { emit }) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const catchStore = useCatchStore();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const message = useMessage();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const data = reactive({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      uploading: false,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      subjectList: [] as any
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const formRef = ref();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const form = reactive(initState());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const handleSave = () => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      formRef.value?.validate((err: any) => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (err) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          nextTick(scrollToErrorForm);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          return;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        handleSubmit();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    };
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const handleSubmit = async () => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      data.uploading = true;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      try {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const { currentGradeNum, instrumentIds, ...more } = form;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        await api_lessonCoursewareSave({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          currentGradeNum: currentGradeNum.join(','),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          instrumentIds: instrumentIds.join(','),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ...more
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Object.assign(form, initState());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        message.success(props.item.id ? '保存成功' : '添加成功');
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        emit('close', true);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        emit('confirm');
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } catch {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      data.uploading = false;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    };
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    onMounted(async () => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (!props.item.id) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        form.lessonList = [createLesson()];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      await catchStore.getSubjects();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (props.item.id) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // form.lessonList = [];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const { data } = await lessonCoursewareDetail({ id: props.item.id });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        form.id = data.id;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        form.name = data.name;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        form.currentGradeNum = data.currentGradeNum
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ? data.currentGradeNum.split(',').map((item: any) => Number(item))
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          : null;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        form.instrumentIds = data.instrumentIds
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ? data.instrumentIds.split(',').map((item: any) => item)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          : null;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // form.bookType = data.bookType;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        form.coverImg = data.coverImg;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        form.lessonList = [];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const lessonList = data.lessonList || [];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const tempLesson: any[] = [];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        lessonList.forEach((item: any) => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const tmpItem: any = {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            id: item.id,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            key: 'item' + Date.now() + '-' + Math.random() * 100,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            name: item.name,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            lessonTargetDesc: item.lessonTargetDesc,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            knowledgeList: [] as any
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          };
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (item.knowledgeList && item.knowledgeList.length) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.knowledgeList.forEach((knowledge: any) => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              tmpItem.knowledgeList.push({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                id: knowledge.id,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                key: Date.now() + '-' + Math.random() * 100,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                name: knowledge.name
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          tempLesson.push(tmpItem);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        form.lessonList = tempLesson;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      data.subjectList = catchStore.getEnableSingleAllSubjects(
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        form.instrumentIds
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      );
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return () => (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <div class={styles.container}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <NScrollbar style={{ 'max-height': '65vh' }}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <NForm
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ref={formRef}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            labelPlacement="left"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            labelWidth={120}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            model={form}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <div class={styles.topForms}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <NFormItem
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                path="coverImg"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rule={[
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    required: true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    message: '请上传教材封面',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    trigger: ['change']
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ]}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <UploadFile
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  cropper
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  // tips="建议尺寸:210*297, 文件大小: 5MB以内;"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  v-model:fileList={form.coverImg}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  showType="custom"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  size={2}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  accept=".jpg,jpeg,.png"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  options={{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    autoCropWidth: 210,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    autoCropHeight: 297,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    fixedBox: true
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  }}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  {{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    custom: () => (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      <div class={styles.uploadContent}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        <img src={iconUpload2} class={styles.iconUpload} />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        <p>请上传教材封面</p>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    )
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  }}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </UploadFile>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </NFormItem>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <div class={styles.topFormInput}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <NFormItem
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  style={{ minWidth: '360px' }}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  path="name"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  rule={[
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      required: true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      message: '请输入教材名称',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      trigger: ['blur', 'change']
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  ]}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <NInput
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    placeholder="请输入教材名称"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    maxlength={25}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    v-model:value={form.name}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    clearable></NInput>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </NFormItem>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <NFormItem
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  path="currentGradeNum"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  rule={{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    required: true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    message: '请选择年级',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    trigger: 'change',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    type: 'array'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  }}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <NSelect
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    style={{ minWidth: '360px' }}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    placeholder="请选择年级"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    options={BOOK_DATA.grades}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    v-model:value={form.currentGradeNum}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    clearable
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    multiple
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    filterable
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    maxTagCount={3}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </NFormItem>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <NFormItem
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  path="instrumentIds"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  style={{ width: '360px' }}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  rule={{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    required: true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    message: '请选择乐器',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    trigger: 'change',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    type: 'array'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  }}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <NCascader
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    placeholder="请选择乐器"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    options={data.subjectList}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    v-model:value={form.instrumentIds}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    checkStrategy="child"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    showPath={false}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    childrenField="instruments"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    expandTrigger="hover"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    labelField="name"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    valueField="id"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    clearable
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    filterable
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    multiple
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    maxTagCount="responsive"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    style={{ width: '400px' }}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </NFormItem>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                {/* <NFormItem
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  path="bookType"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  style={{ width: '360px' }}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  rule={{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    required: true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    message: '请选择册别',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    trigger: 'change'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  }}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <NSelect
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    placeholder="请选择册别"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    options={BOOK_DATA.bookTypes}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    v-model:value={form.bookType}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    clearable
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </NFormItem> */}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <div class={styles.menuTitle}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <img src={iconMenu} class={styles.iconMenu} />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              目录
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <TransitionGroup name="list" tag="div">
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              {form.lessonList.map((item, index) => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <NSpace
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    class={styles.lessonItem}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    wrap={false}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    wrapItem={false}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    align="start"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    key={item.key}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    <NFormItem
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      label="单元名称"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      labelPlacement="top"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      path={`lessonList[${index}].name`}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      rule={{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        required: true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        message: '填写单元名称',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        trigger: ['blur', 'change']
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      }}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      <NInput
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        placeholder="填写单元名称"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        maxlength={25}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        v-model:value={item.name}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        clearable></NInput>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    </NFormItem>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    <TransitionGroup name="list" tag="div">
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      {item.knowledgeList.map((know, knowIndex) => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                          <NFormItem
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            style={{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              '--n-label-height': knowIndex === 0 ? '26px' : '0'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            }}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            labelPlacement="top"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            label={knowIndex === 0 ? '章节名称' : ''}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            key={know.key}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            path={`lessonList[${index}].knowledgeList[${knowIndex}].name`}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            rule={{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              required: true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              message: '填写章节名称',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              trigger: ['blur', 'change']
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            }}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            <NSpace
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              wrap={false}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              align="center"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              class={styles.btnGroupAll}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              wrapItem={false}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              <NInput
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                maxlength={25}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                placeholder="填写章节名称"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                v-model:value={know.name}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                clearable></NInput>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              <NButton
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                quaternary
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                circle
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                onClick={() => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  item.knowledgeList.splice(knowIndex + 1, 0, {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    name: '',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    key: Date.now() + '' + knowIndex
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                }}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                {{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  icon: () => (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    <img src={btnAdd} class={styles.btnImg} />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  )
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                }}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              </NButton>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              <NButton
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                quaternary
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                circle
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                disabled={item.knowledgeList.length < 2}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                onClick={() => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  item.knowledgeList.splice(knowIndex, 1);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                }}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                {{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  icon: () => (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    <img
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                      src={btnDelete}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                      class={styles.btnImg}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  )
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                }}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              </NButton>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              <NButton
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                quaternary
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                circle
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                disabled={knowIndex === 0}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                onClick={() => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  if (knowIndex === 0) return;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  const tmp = item.knowledgeList[knowIndex - 1];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  item.knowledgeList[knowIndex - 1] =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    item.knowledgeList[knowIndex];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  item.knowledgeList[knowIndex] = tmp;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                }}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                {{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  icon: () => (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    <img src={btnUp} class={styles.btnImg} />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  )
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                }}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              </NButton>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              <NButton
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                quaternary
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                circle
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                disabled={
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  knowIndex === item.knowledgeList.length - 1
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                onClick={() => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  if (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    knowIndex ===
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    item.knowledgeList.length - 1
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  )
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    return;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  const tmp = item.knowledgeList[knowIndex + 1];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  item.knowledgeList[knowIndex + 1] =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    item.knowledgeList[knowIndex];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  item.knowledgeList[knowIndex] = tmp;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                }}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                {{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  icon: () => (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    <img src={btnDown} class={styles.btnImg} />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  )
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                }}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              </NButton>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            </NSpace>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                          </NFormItem>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        );
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      })}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    </TransitionGroup>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    <NButton
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      class={styles.closeBtn}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      secondary
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      circle
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      size="small"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      disabled={form.lessonList.length < 2}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      onClick={() => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        form.lessonList.splice(index, 1);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      }}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      <img src={btnRemove} />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    </NButton>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  </NSpace>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                );
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              })}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </TransitionGroup>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <div class={styles.line}></div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <NButton
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              block
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              class={styles.addUnitBtn}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              ghost
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              color="#198CFE"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              onClick={() => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                form.lessonList.push(createLesson());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              {{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                icon: () => <img src={iconAdd} />,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                default: () => '新增单元'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </NButton>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </NForm>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </NScrollbar>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <NSpace class={styles.btnGroup} justify="center">
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <NButton round onClick={() => emit('close')}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            取消
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </NButton>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <NButton
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            round
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            loading={data.uploading}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            type="primary"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            onClick={() => handleSave()}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            保存
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </NButton>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </NSpace>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    );
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+});
 
			 |