|  | @@ -0,0 +1,236 @@
 | 
	
		
			
				|  |  | +import { defineComponent, onMounted, reactive, ref } from 'vue';
 | 
	
		
			
				|  |  | +import styles from './index.module.less';
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  NBreadcrumb,
 | 
	
		
			
				|  |  | +  NBreadcrumbItem,
 | 
	
		
			
				|  |  | +  // NScrollbar,
 | 
	
		
			
				|  |  | +  NSlider,
 | 
	
		
			
				|  |  | +  NSpace,
 | 
	
		
			
				|  |  | +  NSpin
 | 
	
		
			
				|  |  | +} from 'naive-ui';
 | 
	
		
			
				|  |  | +import icon_back from '../../xiaoku-music/images/icon_back.png';
 | 
	
		
			
				|  |  | +// import icon_default from '../../xiaoku-music/images/icon_default.png';
 | 
	
		
			
				|  |  | +// import icon_separator from '../../xiaoku-music/images/icon_separator.png';
 | 
	
		
			
				|  |  | +import iconT from '../images/icon-t.png';
 | 
	
		
			
				|  |  | +import iconAddT from '../images/icon-add-t.png';
 | 
	
		
			
				|  |  | +import iconPlusT from '../images/icon-plus-t.png';
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  api_lessonCoursewareDetail_listKnowledge,
 | 
	
		
			
				|  |  | +  api_lessonCoursewareKnowledgeDetail
 | 
	
		
			
				|  |  | +} from '../api';
 | 
	
		
			
				|  |  | +import TheEmpty from '/src/components/TheEmpty';
 | 
	
		
			
				|  |  | +import { useRouter } from 'vue-router';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export default defineComponent({
 | 
	
		
			
				|  |  | +  name: 'cotnent-knowledge',
 | 
	
		
			
				|  |  | +  setup() {
 | 
	
		
			
				|  |  | +    const router = useRouter();
 | 
	
		
			
				|  |  | +    const show = ref(false);
 | 
	
		
			
				|  |  | +    const content = ref(false);
 | 
	
		
			
				|  |  | +    const musicContentRef = ref();
 | 
	
		
			
				|  |  | +    const state = reactive({
 | 
	
		
			
				|  |  | +      fontSize: 18,
 | 
	
		
			
				|  |  | +      tableList: [] as any,
 | 
	
		
			
				|  |  | +      selectKey: null,
 | 
	
		
			
				|  |  | +      details: {} as any
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const getDetails = async () => {
 | 
	
		
			
				|  |  | +      show.value = true;
 | 
	
		
			
				|  |  | +      content.value = true;
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        const { data } = await api_lessonCoursewareDetail_listKnowledge({
 | 
	
		
			
				|  |  | +          type: 'COURSEWARE'
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        state.tableList = data || [];
 | 
	
		
			
				|  |  | +        if (state.tableList.length) {
 | 
	
		
			
				|  |  | +          const item =
 | 
	
		
			
				|  |  | +            state.tableList[0].lessonCoursewareDetailKnowledgeDetailList;
 | 
	
		
			
				|  |  | +          state.tableList[0].selected = true;
 | 
	
		
			
				|  |  | +          if (item && item.length) {
 | 
	
		
			
				|  |  | +            const child = item[0];
 | 
	
		
			
				|  |  | +            state.selectKey = child.id;
 | 
	
		
			
				|  |  | +            await getDetail();
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      } catch {
 | 
	
		
			
				|  |  | +        //
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      content.value = false;
 | 
	
		
			
				|  |  | +      show.value = false;
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const getDetail = async () => {
 | 
	
		
			
				|  |  | +      content.value = true;
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        const { data } = await api_lessonCoursewareKnowledgeDetail({
 | 
	
		
			
				|  |  | +          id: state.selectKey
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        state.details = data;
 | 
	
		
			
				|  |  | +      } catch {
 | 
	
		
			
				|  |  | +        //
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      content.value = false;
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    onMounted(() => {
 | 
	
		
			
				|  |  | +      getDetails();
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    return () => (
 | 
	
		
			
				|  |  | +      <div class={styles.container}>
 | 
	
		
			
				|  |  | +        <NSpace align="center" wrapItem={false} size={16}>
 | 
	
		
			
				|  |  | +          <img
 | 
	
		
			
				|  |  | +            style={{ cursor: 'pointer' }}
 | 
	
		
			
				|  |  | +            src={icon_back}
 | 
	
		
			
				|  |  | +            class={styles.iconBack}
 | 
	
		
			
				|  |  | +            onClick={() => {
 | 
	
		
			
				|  |  | +              //
 | 
	
		
			
				|  |  | +              router.push('/');
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  | +          />
 | 
	
		
			
				|  |  | +          <NBreadcrumb separator="">
 | 
	
		
			
				|  |  | +            <NBreadcrumbItem
 | 
	
		
			
				|  |  | +              onClick={() => {
 | 
	
		
			
				|  |  | +                //
 | 
	
		
			
				|  |  | +              }}>
 | 
	
		
			
				|  |  | +              乐理知识
 | 
	
		
			
				|  |  | +            </NBreadcrumbItem>
 | 
	
		
			
				|  |  | +          </NBreadcrumb>
 | 
	
		
			
				|  |  | +        </NSpace>
 | 
	
		
			
				|  |  | +        <div class={[styles.wrap]}>
 | 
	
		
			
				|  |  | +          <div class={styles.content}>
 | 
	
		
			
				|  |  | +            <div class={styles.contentWrap}>
 | 
	
		
			
				|  |  | +              <div class={styles.directoryList}>
 | 
	
		
			
				|  |  | +                <div
 | 
	
		
			
				|  |  | +                  class={[
 | 
	
		
			
				|  |  | +                    styles.scrollBar,
 | 
	
		
			
				|  |  | +                    !show.value && state.tableList.length <= 0
 | 
	
		
			
				|  |  | +                      ? styles.empty
 | 
	
		
			
				|  |  | +                      : ''
 | 
	
		
			
				|  |  | +                  ]}
 | 
	
		
			
				|  |  | +                  style={{ minHeight: '100%' }}>
 | 
	
		
			
				|  |  | +                  <NSpin show={show.value}>
 | 
	
		
			
				|  |  | +                    <div class={[styles.listSection]}>
 | 
	
		
			
				|  |  | +                      {state.tableList.map((item: any, index: number) => (
 | 
	
		
			
				|  |  | +                        <div class={styles.treeParent} key={'parent' + index}>
 | 
	
		
			
				|  |  | +                          <div
 | 
	
		
			
				|  |  | +                            class={[styles.treeItem, styles.parentItem]}
 | 
	
		
			
				|  |  | +                            onClick={() => {
 | 
	
		
			
				|  |  | +                              state.tableList.forEach((child: any) => {
 | 
	
		
			
				|  |  | +                                if (item.id !== child.id) {
 | 
	
		
			
				|  |  | +                                  child.selected = false;
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                              });
 | 
	
		
			
				|  |  | +                              item.selected = item.selected ? false : true;
 | 
	
		
			
				|  |  | +                            }}>
 | 
	
		
			
				|  |  | +                            {item.lessonCoursewareDetailKnowledgeDetailList &&
 | 
	
		
			
				|  |  | +                              item.lessonCoursewareDetailKnowledgeDetailList
 | 
	
		
			
				|  |  | +                                .length > 0 && (
 | 
	
		
			
				|  |  | +                                <span
 | 
	
		
			
				|  |  | +                                  class={[
 | 
	
		
			
				|  |  | +                                    styles.arrow,
 | 
	
		
			
				|  |  | +                                    item.selected ? styles.arrowSelect : ''
 | 
	
		
			
				|  |  | +                                  ]}></span>
 | 
	
		
			
				|  |  | +                              )}
 | 
	
		
			
				|  |  | +                            <p
 | 
	
		
			
				|  |  | +                              class={[
 | 
	
		
			
				|  |  | +                                styles.title,
 | 
	
		
			
				|  |  | +                                item.selected ? styles.titleSelect : ''
 | 
	
		
			
				|  |  | +                              ]}>
 | 
	
		
			
				|  |  | +                              <span
 | 
	
		
			
				|  |  | +                                class={[
 | 
	
		
			
				|  |  | +                                  styles.dir,
 | 
	
		
			
				|  |  | +                                  item.selected ? styles.dirSelect : ''
 | 
	
		
			
				|  |  | +                                ]}></span>
 | 
	
		
			
				|  |  | +                              {item.name}
 | 
	
		
			
				|  |  | +                            </p>
 | 
	
		
			
				|  |  | +                          </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                          {item.selected &&
 | 
	
		
			
				|  |  | +                            item.lessonCoursewareDetailKnowledgeDetailList &&
 | 
	
		
			
				|  |  | +                            item.lessonCoursewareDetailKnowledgeDetailList.map(
 | 
	
		
			
				|  |  | +                              (child: any, j: number) => (
 | 
	
		
			
				|  |  | +                                <div
 | 
	
		
			
				|  |  | +                                  key={'child' + j}
 | 
	
		
			
				|  |  | +                                  class={[
 | 
	
		
			
				|  |  | +                                    styles.treeItem,
 | 
	
		
			
				|  |  | +                                    styles.childItem,
 | 
	
		
			
				|  |  | +                                    styles.animation,
 | 
	
		
			
				|  |  | +                                    state.selectKey === child.id
 | 
	
		
			
				|  |  | +                                      ? styles.childSelect
 | 
	
		
			
				|  |  | +                                      : ''
 | 
	
		
			
				|  |  | +                                  ]}
 | 
	
		
			
				|  |  | +                                  onClick={() => {
 | 
	
		
			
				|  |  | +                                    if (state.selectKey === child.id) return;
 | 
	
		
			
				|  |  | +                                    state.selectKey = child.id;
 | 
	
		
			
				|  |  | +                                    getDetail();
 | 
	
		
			
				|  |  | +                                    musicContentRef.value.$el.scrollTo(0, 0);
 | 
	
		
			
				|  |  | +                                  }}>
 | 
	
		
			
				|  |  | +                                  <span class={styles.childArrow}></span>
 | 
	
		
			
				|  |  | +                                  <p class={styles.title}>{child.name}</p>
 | 
	
		
			
				|  |  | +                                </div>
 | 
	
		
			
				|  |  | +                              )
 | 
	
		
			
				|  |  | +                            )}
 | 
	
		
			
				|  |  | +                        </div>
 | 
	
		
			
				|  |  | +                      ))}
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                  </NSpin>
 | 
	
		
			
				|  |  | +                  {!show.value && state.tableList.length <= 0 && (
 | 
	
		
			
				|  |  | +                    <TheEmpty style={{ height: '100%' }} />
 | 
	
		
			
				|  |  | +                  )}
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              <div class={styles.musicStaff}>
 | 
	
		
			
				|  |  | +                <NSpin
 | 
	
		
			
				|  |  | +                  show={content.value}
 | 
	
		
			
				|  |  | +                  ref={musicContentRef}
 | 
	
		
			
				|  |  | +                  class={
 | 
	
		
			
				|  |  | +                    !content.value && !state.details?.desc ? styles.empty : ''
 | 
	
		
			
				|  |  | +                  }>
 | 
	
		
			
				|  |  | +                  {state.details?.desc ? (
 | 
	
		
			
				|  |  | +                    <div
 | 
	
		
			
				|  |  | +                      class={styles.musicContent}
 | 
	
		
			
				|  |  | +                      v-html={state.details?.desc}
 | 
	
		
			
				|  |  | +                      style={{ fontSize: state.fontSize + 'px' }}></div>
 | 
	
		
			
				|  |  | +                  ) : (
 | 
	
		
			
				|  |  | +                    ''
 | 
	
		
			
				|  |  | +                  )}
 | 
	
		
			
				|  |  | +                  {!content.value && !state.details?.desc && <TheEmpty />}
 | 
	
		
			
				|  |  | +                </NSpin>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              <div class={styles.changeSizeSection}>
 | 
	
		
			
				|  |  | +                <img src={iconT} class={styles.iconT} />
 | 
	
		
			
				|  |  | +                <img
 | 
	
		
			
				|  |  | +                  src={iconAddT}
 | 
	
		
			
				|  |  | +                  class={styles.iconAddT}
 | 
	
		
			
				|  |  | +                  onClick={() => {
 | 
	
		
			
				|  |  | +                    if (state.fontSize >= 32) return;
 | 
	
		
			
				|  |  | +                    state.fontSize += 1;
 | 
	
		
			
				|  |  | +                  }}
 | 
	
		
			
				|  |  | +                />
 | 
	
		
			
				|  |  | +                <NSlider
 | 
	
		
			
				|  |  | +                  v-model:value={state.fontSize}
 | 
	
		
			
				|  |  | +                  vertical
 | 
	
		
			
				|  |  | +                  min={12}
 | 
	
		
			
				|  |  | +                  max={32}
 | 
	
		
			
				|  |  | +                />
 | 
	
		
			
				|  |  | +                <img
 | 
	
		
			
				|  |  | +                  src={iconPlusT}
 | 
	
		
			
				|  |  | +                  class={styles.iconPlusT}
 | 
	
		
			
				|  |  | +                  onClick={() => {
 | 
	
		
			
				|  |  | +                    if (state.fontSize <= 12) return;
 | 
	
		
			
				|  |  | +                    state.fontSize -= 1;
 | 
	
		
			
				|  |  | +                  }}
 | 
	
		
			
				|  |  | +                />
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +});
 |