123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- 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>
- );
- }
- });
|