|
@@ -1,202 +1,182 @@
|
|
|
-import { defineComponent, onMounted, ref } from 'vue';
|
|
|
-import styles from './index.module.less';
|
|
|
-import {
|
|
|
- NButton,
|
|
|
- NScrollbar,
|
|
|
- NSpace,
|
|
|
- NTabPane,
|
|
|
- NTabs,
|
|
|
- useMessage
|
|
|
-} from 'naive-ui';
|
|
|
-import { useCatchStore } from '/src/store/modules/catchData';
|
|
|
-import iconSelect from '../../images/icon-select.png';
|
|
|
-import { usePrepareStore } from '/src/store/modules/prepareLessons';
|
|
|
-import { PageEnum } from '/src/enums/pageEnum';
|
|
|
-
|
|
|
-export default defineComponent({
|
|
|
- name: 'subject-sync',
|
|
|
- props: {
|
|
|
- subjectId: {
|
|
|
- type: [String, Number],
|
|
|
- default: ''
|
|
|
- }
|
|
|
- },
|
|
|
- emits: ['close', 'confirm'],
|
|
|
- setup(props, { emit }) {
|
|
|
- const catchStore = useCatchStore();
|
|
|
- const prepareStore = usePrepareStore();
|
|
|
- const tabId = ref('' as any);
|
|
|
- const message = useMessage();
|
|
|
- const selectSubjectIds = ref([] as any);
|
|
|
- const subjectList = ref([] as any);
|
|
|
-
|
|
|
- const subjectImgs = {
|
|
|
- Panpipes: 'https://oss.dayaedu.com/ktqy/17103860536976fd4a751.png',
|
|
|
- // Ocarina: 'https://oss.dayaedu.com/ktqy/171038605369851874b22.png',
|
|
|
- Ocarina: 'https://oss.dayaedu.com/ktqy/17143623857205dba41a5.png',
|
|
|
- Whistling: 'https://oss.dayaedu.com/ktqy/1714362351692fcf8c0b8.png',
|
|
|
- Woodwind: 'https://oss.dayaedu.com/ktqy/17103860536966826c50d.png',
|
|
|
- 'Tenor Recorder':
|
|
|
- 'https://oss.dayaedu.com/ktqy/17103860536950592e357.png',
|
|
|
- Nai: 'https://oss.dayaedu.com/ktqy/1710386053697af4aa985.png',
|
|
|
- 'Baroque Recorder':
|
|
|
- 'https://oss.dayaedu.com/ktqy/1710386053698031e847a.png'
|
|
|
- } as any;
|
|
|
- /*
|
|
|
- https://oss.dayaedu.com/ktqy/17103860536950592e357.png
|
|
|
- https://oss.dayaedu.com/ktqy/17103860536966826c50d.png
|
|
|
- https://oss.dayaedu.com/ktqy/1710386053697af4aa985.png
|
|
|
- https://oss.dayaedu.com/ktqy/17103860536976fd4a751.png
|
|
|
- https://oss.dayaedu.com/ktqy/171038605369851874b22.png
|
|
|
- https://oss.dayaedu.com/ktqy/1710386053698031e847a.png
|
|
|
- */
|
|
|
- const onSubmit = () => {
|
|
|
- if (selectSubjectIds.value.length <= 0) {
|
|
|
- message.error('至少选择一个声部进行同步');
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- const subjectCode: any[] = [];
|
|
|
- // subjectList.value.forEach((subject: any) => {
|
|
|
- // if (selectSubjectIds.value.includes(subject.id)) {
|
|
|
- // subjectCode.push({
|
|
|
- // materialId: subject.id,
|
|
|
- // coverImg: subjectImgs[subject.code] || subjectImgs.Panpipes,
|
|
|
- // dataJson: null,
|
|
|
- // title: subject.name,
|
|
|
- // isCollect: false,
|
|
|
- // isSelected: false,
|
|
|
- // content: subject.code
|
|
|
- // });
|
|
|
- // }
|
|
|
- // });
|
|
|
- selectSubjectIds.value.forEach((id: any) => {
|
|
|
- const item = subjectList.value.find(
|
|
|
- (subject: any) => subject.id === id
|
|
|
- );
|
|
|
- console.log(item, 'item');
|
|
|
- if (item) {
|
|
|
- subjectCode.push({
|
|
|
- materialId: item.id,
|
|
|
- coverImg: subjectImgs[item.code] || subjectImgs.Panpipes,
|
|
|
- dataJson: null,
|
|
|
- title: item.name,
|
|
|
- isCollect: false,
|
|
|
- isSelected: false,
|
|
|
- content: item.code
|
|
|
- });
|
|
|
- }
|
|
|
- });
|
|
|
- emit('confirm', { subjectIds: selectSubjectIds.value, subjectCode });
|
|
|
- };
|
|
|
-
|
|
|
- const formatSubjectList = () => {
|
|
|
- const subjects = catchStore.getEnableSubjects;
|
|
|
- const temp: any = [];
|
|
|
- subjects.forEach((subject: any) => {
|
|
|
- if (tabId.value === '' && subject.instruments) {
|
|
|
- temp.push(...subject.instruments);
|
|
|
- } else if (
|
|
|
- tabId.value &&
|
|
|
- subject.instruments &&
|
|
|
- Number(tabId.value) === subject.id
|
|
|
- ) {
|
|
|
- temp.push(...subject.instruments);
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- subjectList.value = temp;
|
|
|
- };
|
|
|
- onMounted(async () => {
|
|
|
- // 获取教材分类列表
|
|
|
- // await catchStore.getMusicInstrument();
|
|
|
- // subjectList.value = catchStore.getMusicInstruments;
|
|
|
- await catchStore.getSubjects();
|
|
|
-
|
|
|
- formatSubjectList();
|
|
|
- // const teachingSubjectList = prepareStore.getSubjectList; // 教材自带声部;
|
|
|
- // const tempSubjectList: any = [];
|
|
|
- // baseAllSubjectList.forEach((subject: any) => {
|
|
|
- // const index = teachingSubjectList.findIndex(
|
|
|
- // (t: any) => t.id == subject.id
|
|
|
- // );
|
|
|
- // if (index != -1) {
|
|
|
- // tempSubjectList.push(subject);
|
|
|
- // }
|
|
|
- // });
|
|
|
-
|
|
|
- // subjectList.value = tempSubjectList;
|
|
|
- if (props.subjectId) {
|
|
|
- selectSubjectIds.value = [Number(props.subjectId)];
|
|
|
- }
|
|
|
- });
|
|
|
- return () => (
|
|
|
- <div class={styles.subjectSync}>
|
|
|
- {/* <div class={styles.tips}>
|
|
|
- 请选择当前课件可使用的乐器
|
|
|
- <span>(勾选后则对应乐器下的课件内容将被当前课件内容全部替换)</span>
|
|
|
- </div> */}
|
|
|
-
|
|
|
- <NTabs
|
|
|
- defaultValue=""
|
|
|
- paneClass={styles.paneTitle}
|
|
|
- justifyContent="start"
|
|
|
- paneWrapperClass={styles.paneWrapperContainer}
|
|
|
- value={tabId.value}
|
|
|
- onUpdate:value={(val: any) => {
|
|
|
- tabId.value = val;
|
|
|
- formatSubjectList();
|
|
|
- }}>
|
|
|
- {[{ name: '全部声部', id: '' }, ...catchStore.getEnableSubjects].map(
|
|
|
- (item: any) => (
|
|
|
- <NTabPane
|
|
|
- name={`${item.id}`}
|
|
|
- tab={item.name}
|
|
|
- displayDirective="if"></NTabPane>
|
|
|
- )
|
|
|
- )}
|
|
|
- </NTabs>
|
|
|
- <NScrollbar style={{ maxHeight: '50vh', minHeight: '50vh' }}>
|
|
|
- <div class={styles.subjectList}>
|
|
|
- {subjectList.value.map((subject: any) => (
|
|
|
- <div
|
|
|
- class={[
|
|
|
- styles.subjectItem,
|
|
|
- selectSubjectIds.value.includes(subject.id)
|
|
|
- ? styles.subjectSelect
|
|
|
- : ''
|
|
|
- ]}
|
|
|
- onClick={() => {
|
|
|
- if (selectSubjectIds.value.includes(subject.id)) {
|
|
|
- const index = selectSubjectIds.value.indexOf(subject.id);
|
|
|
- selectSubjectIds.value.splice(index, 1);
|
|
|
- } else {
|
|
|
- selectSubjectIds.value.push(subject.id);
|
|
|
- }
|
|
|
- }}>
|
|
|
- <div class={styles.imgSection}>
|
|
|
- <img src={subject.img} />
|
|
|
-
|
|
|
- {selectSubjectIds.value.includes(subject.id) && (
|
|
|
- <img src={iconSelect} class={styles.iconSelect} />
|
|
|
- )}
|
|
|
- </div>
|
|
|
-
|
|
|
- <p class={styles.subjectName}>{subject.name}</p>
|
|
|
- </div>
|
|
|
- ))}
|
|
|
- </div>
|
|
|
- </NScrollbar>
|
|
|
-
|
|
|
- <NSpace class={styles.btnGroupModal} justify="center">
|
|
|
- <NButton round onClick={() => emit('close')}>
|
|
|
- 取消
|
|
|
- </NButton>
|
|
|
- <NButton round type="primary" onClick={onSubmit}>
|
|
|
- 确定
|
|
|
- </NButton>
|
|
|
- </NSpace>
|
|
|
- </div>
|
|
|
- );
|
|
|
- }
|
|
|
-});
|
|
|
+import { defineComponent, onMounted, ref } from 'vue';
|
|
|
+import styles from './index.module.less';
|
|
|
+import {
|
|
|
+ NButton,
|
|
|
+ NScrollbar,
|
|
|
+ NSpace,
|
|
|
+ NTabPane,
|
|
|
+ NTabs,
|
|
|
+ useMessage
|
|
|
+} from 'naive-ui';
|
|
|
+import { useCatchStore } from '/src/store/modules/catchData';
|
|
|
+import iconSelect from '../../images/icon-select.png';
|
|
|
+import { usePrepareStore } from '/src/store/modules/prepareLessons';
|
|
|
+import { PageEnum } from '/src/enums/pageEnum';
|
|
|
+
|
|
|
+export default defineComponent({
|
|
|
+ name: 'subject-sync',
|
|
|
+ props: {
|
|
|
+ subjectId: {
|
|
|
+ type: [String, Number],
|
|
|
+ default: ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ emits: ['close', 'confirm'],
|
|
|
+ setup(props, { emit }) {
|
|
|
+ const catchStore = useCatchStore();
|
|
|
+ const prepareStore = usePrepareStore();
|
|
|
+ const tabId = ref('' as any);
|
|
|
+ const message = useMessage();
|
|
|
+ const selectSubjectIds = ref([] as any);
|
|
|
+ const subjectList = ref([] as any);
|
|
|
+
|
|
|
+ const subjectImgs = {
|
|
|
+ Panpipes: 'https://oss.dayaedu.com/ktqy/17103860536976fd4a751.png',
|
|
|
+ // Ocarina: 'https://oss.dayaedu.com/ktqy/171038605369851874b22.png',
|
|
|
+
|
|
|
+ Ocarina: 'https://oss.dayaedu.com/ktqy/17143623857205dba41a5.png',
|
|
|
+ 'Alto Ocarina': 'https://oss.dayaedu.com/ktqy/17143623857205dba41a5.png',
|
|
|
+
|
|
|
+ Whistling: 'https://oss.dayaedu.com/ktqy/1714362351692fcf8c0b8.png',
|
|
|
+ 'Soprano Ocarina':
|
|
|
+ 'https://oss.dayaedu.com/ktqy/1714362351692fcf8c0b8.png',
|
|
|
+
|
|
|
+ Woodwind: 'https://oss.dayaedu.com/ktqy/17103860536966826c50d.png',
|
|
|
+ Hulusi: 'https://oss.dayaedu.com/ktqy/17103860536966826c50d.png',
|
|
|
+
|
|
|
+ 'Tenor Recorder':
|
|
|
+ 'https://oss.dayaedu.com/ktqy/17103860536950592e357.png',
|
|
|
+ 'German Recorder':
|
|
|
+ 'https://oss.dayaedu.com/ktqy/17103860536950592e357.png',
|
|
|
+
|
|
|
+ Nai: 'https://oss.dayaedu.com/ktqy/1710386053697af4aa985.png',
|
|
|
+ Melodica: 'https://oss.dayaedu.com/ktqy/1710386053697af4aa985.png',
|
|
|
+
|
|
|
+ 'Baroque Recorder':
|
|
|
+ 'https://oss.dayaedu.com/ktqy/1710386053698031e847a.png'
|
|
|
+ } as any;
|
|
|
+ const onSubmit = () => {
|
|
|
+ if (selectSubjectIds.value.length <= 0) {
|
|
|
+ message.error('至少选择一个声部进行同步');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ const subjectCode: any[] = [];
|
|
|
+ selectSubjectIds.value.forEach((id: any) => {
|
|
|
+ const item = subjectList.value.find(
|
|
|
+ (subject: any) => subject.id === id
|
|
|
+ );
|
|
|
+ console.log(item, 'item', item.code);
|
|
|
+
|
|
|
+ if (item) {
|
|
|
+ const tempCode = item.code ? item.code.split(',')[0] : '';
|
|
|
+ subjectCode.push({
|
|
|
+ materialId: item.id,
|
|
|
+ coverImg: subjectImgs[tempCode] || subjectImgs.Panpipes,
|
|
|
+ dataJson: null,
|
|
|
+ title: item.name,
|
|
|
+ isCollect: false,
|
|
|
+ isSelected: false,
|
|
|
+ content: item.code
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ emit('confirm', { subjectIds: selectSubjectIds.value, subjectCode });
|
|
|
+ };
|
|
|
+
|
|
|
+ const formatSubjectList = () => {
|
|
|
+ const subjects = catchStore.getEnableSubjects;
|
|
|
+ const temp: any = [];
|
|
|
+ subjects.forEach((subject: any) => {
|
|
|
+ if (tabId.value === '' && subject.instruments) {
|
|
|
+ temp.push(...subject.instruments);
|
|
|
+ } else if (
|
|
|
+ tabId.value &&
|
|
|
+ subject.instruments &&
|
|
|
+ Number(tabId.value) === subject.id
|
|
|
+ ) {
|
|
|
+ temp.push(...subject.instruments);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ subjectList.value = temp;
|
|
|
+ };
|
|
|
+ onMounted(async () => {
|
|
|
+ // 获取教材分类列表
|
|
|
+ await catchStore.getSubjects();
|
|
|
+
|
|
|
+ formatSubjectList();
|
|
|
+ if (props.subjectId) {
|
|
|
+ selectSubjectIds.value = [Number(props.subjectId)];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return () => (
|
|
|
+ <div class={styles.subjectSync}>
|
|
|
+ {/* <div class={styles.tips}>
|
|
|
+ 请选择当前课件可使用的乐器
|
|
|
+ <span>(勾选后则对应乐器下的课件内容将被当前课件内容全部替换)</span>
|
|
|
+ </div> */}
|
|
|
+
|
|
|
+ <NTabs
|
|
|
+ defaultValue=""
|
|
|
+ paneClass={styles.paneTitle}
|
|
|
+ justifyContent="start"
|
|
|
+ paneWrapperClass={styles.paneWrapperContainer}
|
|
|
+ value={tabId.value}
|
|
|
+ onUpdate:value={(val: any) => {
|
|
|
+ tabId.value = val;
|
|
|
+ formatSubjectList();
|
|
|
+ }}>
|
|
|
+ {[{ name: '全部声部', id: '' }, ...catchStore.getEnableSubjects].map(
|
|
|
+ (item: any) => (
|
|
|
+ <NTabPane
|
|
|
+ name={`${item.id}`}
|
|
|
+ tab={item.name}
|
|
|
+ displayDirective="if"></NTabPane>
|
|
|
+ )
|
|
|
+ )}
|
|
|
+ </NTabs>
|
|
|
+ <NScrollbar style={{ maxHeight: '50vh', minHeight: '50vh' }}>
|
|
|
+ <div class={styles.subjectList}>
|
|
|
+ {subjectList.value.map((subject: any) => (
|
|
|
+ <div
|
|
|
+ class={[
|
|
|
+ styles.subjectItem,
|
|
|
+ selectSubjectIds.value.includes(subject.id)
|
|
|
+ ? styles.subjectSelect
|
|
|
+ : ''
|
|
|
+ ]}
|
|
|
+ onClick={() => {
|
|
|
+ if (selectSubjectIds.value.includes(subject.id)) {
|
|
|
+ const index = selectSubjectIds.value.indexOf(subject.id);
|
|
|
+ selectSubjectIds.value.splice(index, 1);
|
|
|
+ } else {
|
|
|
+ selectSubjectIds.value.push(subject.id);
|
|
|
+ }
|
|
|
+ }}>
|
|
|
+ <div class={styles.imgSection}>
|
|
|
+ <img src={subject.img} />
|
|
|
+
|
|
|
+ {selectSubjectIds.value.includes(subject.id) && (
|
|
|
+ <img src={iconSelect} class={styles.iconSelect} />
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <p class={styles.subjectName}>{subject.name}</p>
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
+ </div>
|
|
|
+ </NScrollbar>
|
|
|
+
|
|
|
+ <NSpace class={styles.btnGroupModal} justify="center">
|
|
|
+ <NButton round onClick={() => emit('close')}>
|
|
|
+ 取消
|
|
|
+ </NButton>
|
|
|
+ <NButton round type="primary" onClick={onSubmit}>
|
|
|
+ 确定
|
|
|
+ </NButton>
|
|
|
+ </NSpace>
|
|
|
+ </div>
|
|
|
+ );
|
|
|
+ }
|
|
|
+});
|