|  | @@ -2,6 +2,7 @@ import { defineComponent, onMounted, reactive, ref, watch } from 'vue';
 | 
	
		
			
				|  |  |  import styles from './index.module.less';
 | 
	
		
			
				|  |  |  import {
 | 
	
		
			
				|  |  |    NButton,
 | 
	
		
			
				|  |  | +  NTooltip,
 | 
	
		
			
				|  |  |    NCarousel,
 | 
	
		
			
				|  |  |    NIcon,
 | 
	
		
			
				|  |  |    NImage,
 | 
	
	
		
			
				|  | @@ -11,6 +12,8 @@ import {
 | 
	
		
			
				|  |  |    NSelect,
 | 
	
		
			
				|  |  |    NSpace,
 | 
	
		
			
				|  |  |    NSpin,
 | 
	
		
			
				|  |  | +  NTabPane,
 | 
	
		
			
				|  |  | +  NTabs,
 | 
	
		
			
				|  |  |    useMessage
 | 
	
		
			
				|  |  |  } from 'naive-ui';
 | 
	
		
			
				|  |  |  import { usePrepareStore } from '/src/store/modules/prepareLessons';
 | 
	
	
		
			
				|  | @@ -34,6 +37,7 @@ import { useRoute, useRouter } from 'vue-router';
 | 
	
		
			
				|  |  |  import TheMessageDialog from '/src/components/TheMessageDialog';
 | 
	
		
			
				|  |  |  import { eventGlobal, fscreen } from '/src/utils';
 | 
	
		
			
				|  |  |  import PreviewWindow from '/src/views/preview-window';
 | 
	
		
			
				|  |  | +import Related from './related';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  export default defineComponent({
 | 
	
		
			
				|  |  |    name: 'courseware-presets',
 | 
	
	
		
			
				|  | @@ -49,6 +53,8 @@ export default defineComponent({
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      const forms = reactive({
 | 
	
		
			
				|  |  |        // 选取参数带的,后取缓存
 | 
	
		
			
				|  |  | +      leftWidth: '100%',
 | 
	
		
			
				|  |  | +      rightWidth: '0',
 | 
	
		
			
				|  |  |        messageLoading: false,
 | 
	
		
			
				|  |  |        subjectId: route.query.subjectId
 | 
	
		
			
				|  |  |          ? Number(route.query.subjectId)
 | 
	
	
		
			
				|  | @@ -63,6 +69,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        openLoading: false,
 | 
	
		
			
				|  |  |        showRelatedClass: false,
 | 
	
		
			
				|  |  |        tableList: [] as any,
 | 
	
		
			
				|  |  | +      openTableShow: true, // 是否显示
 | 
	
		
			
				|  |  |        openTableList: [] as any,
 | 
	
		
			
				|  |  |        selectItem: {} as any,
 | 
	
		
			
				|  |  |        editTitleVisiable: false,
 | 
	
	
		
			
				|  | @@ -149,20 +156,20 @@ export default defineComponent({
 | 
	
		
			
				|  |  |            });
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        forms.openTableList = chunkArray(tempList, 4);
 | 
	
		
			
				|  |  | +        forms.openTableList = tempList || [];
 | 
	
		
			
				|  |  |        } catch {
 | 
	
		
			
				|  |  |          //
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        forms.openLoading = false;
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    const chunkArray = (array: any, size: number) => {
 | 
	
		
			
				|  |  | -      const result = [];
 | 
	
		
			
				|  |  | -      for (let i = 0; i < array.length; i += size) {
 | 
	
		
			
				|  |  | -        result.push(array.slice(i, i + size));
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      return result;
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | +    // const chunkArray = (array: any, size: number) => {
 | 
	
		
			
				|  |  | +    //   const result = [];
 | 
	
		
			
				|  |  | +    //   for (let i = 0; i < array.length; i += size) {
 | 
	
		
			
				|  |  | +    //     result.push(array.slice(i, i + size));
 | 
	
		
			
				|  |  | +    //   }
 | 
	
		
			
				|  |  | +    //   return result;
 | 
	
		
			
				|  |  | +    // };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // 监听选择的key 左侧选择了其它的课
 | 
	
		
			
				|  |  |      watch(
 | 
	
	
		
			
				|  | @@ -248,6 +255,23 @@ export default defineComponent({
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      onMounted(async () => {
 | 
	
		
			
				|  |  | +      useResizeObserver(
 | 
	
		
			
				|  |  | +        document.querySelector('#presetsLeftRef') as HTMLElement,
 | 
	
		
			
				|  |  | +        (entries: any) => {
 | 
	
		
			
				|  |  | +          const entry = entries[0];
 | 
	
		
			
				|  |  | +          const { width } = entry.contentRect;
 | 
	
		
			
				|  |  | +          forms.leftWidth = width + 'px';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      );
 | 
	
		
			
				|  |  | +      useResizeObserver(
 | 
	
		
			
				|  |  | +        document.querySelector('#presetsRightRef') as HTMLElement,
 | 
	
		
			
				|  |  | +        (entries: any) => {
 | 
	
		
			
				|  |  | +          const entry = entries[0];
 | 
	
		
			
				|  |  | +          const { width } = entry.contentRect;
 | 
	
		
			
				|  |  | +          forms.rightWidth = width + 'px';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |        prepareStore.setClassGroupId(route.query.classGroupId as any);
 | 
	
		
			
				|  |  |        if (!prepareStore.getSubjectId) {
 | 
	
		
			
				|  |  |          // 获取教材分类列表
 | 
	
	
		
			
				|  | @@ -407,16 +431,73 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |      return () => (
 | 
	
		
			
				|  |  | -      <div class={styles.coursewarePresetsContainer}>
 | 
	
		
			
				|  |  | -        <NScrollbar class={styles.coursewarePresets}>
 | 
	
		
			
				|  |  | -          <div class={styles.title} id="coursewarePresets">
 | 
	
		
			
				|  |  | +      <div
 | 
	
		
			
				|  |  | +        class={[
 | 
	
		
			
				|  |  | +          styles.coursewarePresetsContainer,
 | 
	
		
			
				|  |  | +          forms.openTableShow && styles.rightLineShow
 | 
	
		
			
				|  |  | +        ]}>
 | 
	
		
			
				|  |  | +        <div
 | 
	
		
			
				|  |  | +          class={styles.presetsLeft}
 | 
	
		
			
				|  |  | +          id="presetsLeftRef"
 | 
	
		
			
				|  |  | +          style={{ width: `calc(${forms.leftWidth} - ${forms.rightWidth})` }}>
 | 
	
		
			
				|  |  | +          <NTabs
 | 
	
		
			
				|  |  | +            // ref={lessonMainRef}
 | 
	
		
			
				|  |  | +            defaultValue="subject"
 | 
	
		
			
				|  |  | +            paneClass={styles.paneTitle}
 | 
	
		
			
				|  |  | +            justifyContent="start"
 | 
	
		
			
				|  |  | +            paneWrapperClass={styles.paneWrapperContainer}
 | 
	
		
			
				|  |  | +            value={prepareStore.getSubjectId?.toString()}
 | 
	
		
			
				|  |  | +            onUpdate:value={val => {
 | 
	
		
			
				|  |  | +              prepareStore.setSubjectId(val);
 | 
	
		
			
				|  |  | +              // 保存
 | 
	
		
			
				|  |  | +              forms.subjectId = val;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              if (!val) {
 | 
	
		
			
				|  |  | +                sessionStorage.setItem(
 | 
	
		
			
				|  |  | +                  'prepareLessonCourseWareSubjectIsNull',
 | 
	
		
			
				|  |  | +                  val ? 'false' : 'true'
 | 
	
		
			
				|  |  | +                );
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  | +            v-slots={{
 | 
	
		
			
				|  |  | +              suffix: () => (
 | 
	
		
			
				|  |  | +                <NButton
 | 
	
		
			
				|  |  | +                  class={styles.addBtn}
 | 
	
		
			
				|  |  | +                  type="primary"
 | 
	
		
			
				|  |  | +                  bordered={false}
 | 
	
		
			
				|  |  | +                  onClick={() => {
 | 
	
		
			
				|  |  | +                    eventGlobal.emit('teacher-slideshow', true);
 | 
	
		
			
				|  |  | +                    emit('change', {
 | 
	
		
			
				|  |  | +                      status: true,
 | 
	
		
			
				|  |  | +                      type: 'create'
 | 
	
		
			
				|  |  | +                    });
 | 
	
		
			
				|  |  | +                  }}>
 | 
	
		
			
				|  |  | +                  <NImage
 | 
	
		
			
				|  |  | +                    class={styles.addBtnIcon}
 | 
	
		
			
				|  |  | +                    previewDisabled
 | 
	
		
			
				|  |  | +                    src={add}></NImage>
 | 
	
		
			
				|  |  | +                  创建课件
 | 
	
		
			
				|  |  | +                </NButton>
 | 
	
		
			
				|  |  | +              )
 | 
	
		
			
				|  |  | +            }}>
 | 
	
		
			
				|  |  | +            {[{ name: '全部声部', id: '' }, ...prepareStore.getSubjectList].map(
 | 
	
		
			
				|  |  | +              (item: any) => (
 | 
	
		
			
				|  |  | +                <NTabPane
 | 
	
		
			
				|  |  | +                  name={`${item.id}`}
 | 
	
		
			
				|  |  | +                  tab={item.name}
 | 
	
		
			
				|  |  | +                  displayDirective="if"></NTabPane>
 | 
	
		
			
				|  |  | +              )
 | 
	
		
			
				|  |  | +            )}
 | 
	
		
			
				|  |  | +          </NTabs>
 | 
	
		
			
				|  |  | +          <NScrollbar class={styles.coursewarePresets}>
 | 
	
		
			
				|  |  | +            {/* <div class={styles.title} id="coursewarePresets">
 | 
	
		
			
				|  |  |              <div class={styles.titleLeft}>
 | 
	
		
			
				|  |  |                <i class={[styles.icon, styles.iconWork]}></i>
 | 
	
		
			
				|  |  |                我的课件
 | 
	
		
			
				|  |  |              </div>
 | 
	
		
			
				|  |  | -          </div>
 | 
	
		
			
				|  |  | +          </div> */}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -          <NSpace>
 | 
	
		
			
				|  |  | +            {/* <NSpace>
 | 
	
		
			
				|  |  |              <NSelect
 | 
	
		
			
				|  |  |                placeholder="选择声部"
 | 
	
		
			
				|  |  |                class={styles.btnSubjectList}
 | 
	
	
		
			
				|  | @@ -435,72 +516,56 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                  if (!val) {
 | 
	
		
			
				|  |  |                    sessionStorage.setItem(
 | 
	
		
			
				|  |  |                      'prepareLessonCourseWareSubjectIsNull',
 | 
	
		
			
				|  |  | -                    val ? false : true
 | 
	
		
			
				|  |  | +                    val ? 'false' : 'true'
 | 
	
		
			
				|  |  |                    );
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |                }}
 | 
	
		
			
				|  |  |              />
 | 
	
		
			
				|  |  | -            <NButton
 | 
	
		
			
				|  |  | -              class={styles.addBtn}
 | 
	
		
			
				|  |  | -              type="primary"
 | 
	
		
			
				|  |  | -              onClick={() => {
 | 
	
		
			
				|  |  | -                eventGlobal.emit('teacher-slideshow', true);
 | 
	
		
			
				|  |  | -                emit('change', {
 | 
	
		
			
				|  |  | -                  status: true,
 | 
	
		
			
				|  |  | -                  type: 'create'
 | 
	
		
			
				|  |  | -                });
 | 
	
		
			
				|  |  | -              }}>
 | 
	
		
			
				|  |  | -              <NImage
 | 
	
		
			
				|  |  | -                class={styles.addBtnIcon}
 | 
	
		
			
				|  |  | -                previewDisabled
 | 
	
		
			
				|  |  | -                src={add}></NImage>
 | 
	
		
			
				|  |  | -              创建课件
 | 
	
		
			
				|  |  | -            </NButton>
 | 
	
		
			
				|  |  | -          </NSpace>
 | 
	
		
			
				|  |  | -          <div style={{ overflow: 'hidden' }}>
 | 
	
		
			
				|  |  | -            <NSpin show={forms.loading}>
 | 
	
		
			
				|  |  | -              <div class={styles.list}>
 | 
	
		
			
				|  |  | -                {forms.tableList.map((item: any) => (
 | 
	
		
			
				|  |  | -                  <div class={[styles.itemWrap, styles.itemBlock, 'row-nav']}>
 | 
	
		
			
				|  |  | -                    <div class={styles.itemWrapBox}>
 | 
	
		
			
				|  |  | -                      <CoursewareType
 | 
	
		
			
				|  |  | -                        operate
 | 
	
		
			
				|  |  | -                        isEditName
 | 
	
		
			
				|  |  | -                        item={item}
 | 
	
		
			
				|  |  | -                        onClick={() => onPreviewAttend(item.id)}
 | 
	
		
			
				|  |  | -                        onEditName={() => {
 | 
	
		
			
				|  |  | -                          forms.selectItem = item;
 | 
	
		
			
				|  |  | -                          forms.editTitle = item.name;
 | 
	
		
			
				|  |  | -                          forms.editTitleVisiable = true;
 | 
	
		
			
				|  |  | -                        }}
 | 
	
		
			
				|  |  | -                        onEdit={() => {
 | 
	
		
			
				|  |  | -                          //
 | 
	
		
			
				|  |  | -                          eventGlobal.emit('teacher-slideshow', true);
 | 
	
		
			
				|  |  | -                          emit('change', {
 | 
	
		
			
				|  |  | -                            status: true,
 | 
	
		
			
				|  |  | -                            type: 'update',
 | 
	
		
			
				|  |  | -                            groupItem: { id: item.id }
 | 
	
		
			
				|  |  | -                          });
 | 
	
		
			
				|  |  | -                        }}
 | 
	
		
			
				|  |  | -                        onStartClass={() =>
 | 
	
		
			
				|  |  | -                          onStartClass(item, forms.classGroupId)
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                        onDelete={() => {
 | 
	
		
			
				|  |  | -                          forms.selectItem = item;
 | 
	
		
			
				|  |  | -                          forms.preRemoveVisiable = true;
 | 
	
		
			
				|  |  | -                        }}
 | 
	
		
			
				|  |  | -                      />
 | 
	
		
			
				|  |  | +          </NSpace> */}
 | 
	
		
			
				|  |  | +            <div style={{ overflow: 'hidden' }}>
 | 
	
		
			
				|  |  | +              <NSpin show={forms.loading}>
 | 
	
		
			
				|  |  | +                <div class={styles.list}>
 | 
	
		
			
				|  |  | +                  {forms.tableList.map((item: any) => (
 | 
	
		
			
				|  |  | +                    <div class={[styles.itemWrap, styles.itemBlock, 'row-nav']}>
 | 
	
		
			
				|  |  | +                      <div class={styles.itemWrapBox}>
 | 
	
		
			
				|  |  | +                        <CoursewareType
 | 
	
		
			
				|  |  | +                          operate
 | 
	
		
			
				|  |  | +                          isEditName
 | 
	
		
			
				|  |  | +                          item={item}
 | 
	
		
			
				|  |  | +                          onClick={() => onPreviewAttend(item.id)}
 | 
	
		
			
				|  |  | +                          onEditName={() => {
 | 
	
		
			
				|  |  | +                            forms.selectItem = item;
 | 
	
		
			
				|  |  | +                            forms.editTitle = item.name;
 | 
	
		
			
				|  |  | +                            forms.editTitleVisiable = true;
 | 
	
		
			
				|  |  | +                          }}
 | 
	
		
			
				|  |  | +                          onEdit={() => {
 | 
	
		
			
				|  |  | +                            //
 | 
	
		
			
				|  |  | +                            eventGlobal.emit('teacher-slideshow', true);
 | 
	
		
			
				|  |  | +                            emit('change', {
 | 
	
		
			
				|  |  | +                              status: true,
 | 
	
		
			
				|  |  | +                              type: 'update',
 | 
	
		
			
				|  |  | +                              groupItem: { id: item.id }
 | 
	
		
			
				|  |  | +                            });
 | 
	
		
			
				|  |  | +                          }}
 | 
	
		
			
				|  |  | +                          onStartClass={() =>
 | 
	
		
			
				|  |  | +                            onStartClass(item, forms.classGroupId)
 | 
	
		
			
				|  |  | +                          }
 | 
	
		
			
				|  |  | +                          onDelete={() => {
 | 
	
		
			
				|  |  | +                            forms.selectItem = item;
 | 
	
		
			
				|  |  | +                            forms.preRemoveVisiable = true;
 | 
	
		
			
				|  |  | +                          }}
 | 
	
		
			
				|  |  | +                        />
 | 
	
		
			
				|  |  | +                      </div>
 | 
	
		
			
				|  |  |                      </div>
 | 
	
		
			
				|  |  | -                  </div>
 | 
	
		
			
				|  |  | -                ))}
 | 
	
		
			
				|  |  | -                {!forms.loading && forms.tableList.length <= 0 && (
 | 
	
		
			
				|  |  | -                  <TheEmpty class={styles.empty1} description="暂无课件" />
 | 
	
		
			
				|  |  | -                )}
 | 
	
		
			
				|  |  | -              </div>
 | 
	
		
			
				|  |  | -            </NSpin>
 | 
	
		
			
				|  |  | -          </div>
 | 
	
		
			
				|  |  | +                  ))}
 | 
	
		
			
				|  |  | +                  {!forms.loading && forms.tableList.length <= 0 && (
 | 
	
		
			
				|  |  | +                    <TheEmpty class={styles.empty1} description="暂无课件" />
 | 
	
		
			
				|  |  | +                  )}
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +              </NSpin>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -          {forms.openTableList.length > 0 && (
 | 
	
		
			
				|  |  | +            {/* {forms.openTableList.length > 0 && (
 | 
	
		
			
				|  |  |              <>
 | 
	
		
			
				|  |  |                <div class={[styles.title, styles.line]}>
 | 
	
		
			
				|  |  |                  <div class={styles.titleLeft}>
 | 
	
	
		
			
				|  | @@ -511,15 +576,6 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                        class={styles.more}
 | 
	
		
			
				|  |  |                        onClick={() => (forms.showRelatedClass = true)}>
 | 
	
		
			
				|  |  |                        查看更多
 | 
	
		
			
				|  |  | -                      {/* <NIcon size={15}>
 | 
	
		
			
				|  |  | -                        <svg
 | 
	
		
			
				|  |  | -                          xmlns="http://www.w3.org/2000/svg"
 | 
	
		
			
				|  |  | -                          viewBox="0 0 24 24">
 | 
	
		
			
				|  |  | -                          <path
 | 
	
		
			
				|  |  | -                            d="M8.59 16.59L13.17 12L8.59 7.41L10 6l6 6l-6 6l-1.41-1.41z"
 | 
	
		
			
				|  |  | -                            fill="currentColor"></path>
 | 
	
		
			
				|  |  | -                        </svg>
 | 
	
		
			
				|  |  | -                      </NIcon> */}
 | 
	
		
			
				|  |  |                        <i class={styles.iconP}></i>
 | 
	
		
			
				|  |  |                      </span>
 | 
	
		
			
				|  |  |                    )}
 | 
	
	
		
			
				|  | @@ -584,8 +640,31 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                  </NCarousel>
 | 
	
		
			
				|  |  |                </NSpin>
 | 
	
		
			
				|  |  |              </>
 | 
	
		
			
				|  |  | -          )}
 | 
	
		
			
				|  |  | -        </NScrollbar>
 | 
	
		
			
				|  |  | +          )} */}
 | 
	
		
			
				|  |  | +          </NScrollbar>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        {/* {forms.openTableList.length > 0 && ( */}
 | 
	
		
			
				|  |  | +        <div class={styles.presetsRight} id="presetsRightRef">
 | 
	
		
			
				|  |  | +          <NTooltip showArrow={false}>
 | 
	
		
			
				|  |  | +            {{
 | 
	
		
			
				|  |  | +              trigger: () => (
 | 
	
		
			
				|  |  | +                <i
 | 
	
		
			
				|  |  | +                  class={[
 | 
	
		
			
				|  |  | +                    styles.presetsArrar,
 | 
	
		
			
				|  |  | +                    !forms.openTableShow && styles.presetsArrarActive
 | 
	
		
			
				|  |  | +                  ]}
 | 
	
		
			
				|  |  | +                  onClick={() =>
 | 
	
		
			
				|  |  | +                    (forms.openTableShow = !forms.openTableShow)
 | 
	
		
			
				|  |  | +                  }></i>
 | 
	
		
			
				|  |  | +              ),
 | 
	
		
			
				|  |  | +              default: () => <div>{forms.openTableShow ? '收起' : '展开'}</div>
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  | +          </NTooltip>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          <Related />
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +        {/* )} */}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          <NModal
 | 
	
		
			
				|  |  |            v-model:show={forms.showRelatedClass}
 |