|
@@ -12,44 +12,28 @@ import {
|
|
|
NButton,
|
|
|
NModal,
|
|
|
NScrollbar,
|
|
|
- NSelect,
|
|
|
NSpace,
|
|
|
NSpin,
|
|
|
useMessage,
|
|
|
- useDialog,
|
|
|
- NSwitch,
|
|
|
NInput,
|
|
|
NTooltip,
|
|
|
- NImage,
|
|
|
- NIcon,
|
|
|
NForm,
|
|
|
NFormItem
|
|
|
} from 'naive-ui';
|
|
|
import CardType from '/src/components/card-type';
|
|
|
-// import AttendClass from '/src/views/prepare-lessons/model/attend-class';
|
|
|
import { usePrepareStore } from '/src/store/modules/prepareLessons';
|
|
|
-// import { useCatchStore } from '/src/store/modules/catchData';
|
|
|
-// import TheEmpty from '/src/components/TheEmpty';
|
|
|
import {
|
|
|
api_teacherChapterLessonCoursewareAdd,
|
|
|
api_teacherChapterLessonCoursewareUpdate,
|
|
|
api_teacherChapterLessonCoursewareDetail,
|
|
|
api_materialDetail
|
|
|
- // courseScheduleStart,
|
|
|
- // queryCourseware,
|
|
|
- // saveCourseware
|
|
|
} from '../../../api';
|
|
|
import Draggable from 'vuedraggable';
|
|
|
import iconDelete from '../../../images/icon-delete-default.png';
|
|
|
import iconAddMusic from '../../../images/icon-add-music.png';
|
|
|
-// import { onBeforeRouteUpdate, useRoute, useRouter } from 'vue-router';
|
|
|
-// import deepClone from '/src/helpers/deep-clone';
|
|
|
import CardPreview from '/src/components/card-preview';
|
|
|
import PreviewWindow from '/src/views/preview-window';
|
|
|
-// import { state } from '/src/state';
|
|
|
-// import SubjectSync from '../../../model/subject-sync';
|
|
|
import { eventGlobal } from '/src/utils';
|
|
|
-// import iconTips from '../../../images/icon-tips.png';
|
|
|
import TheMessageDialog from '/src/components/TheMessageDialog';
|
|
|
import AddItemModel from '../../../model/add-item-model';
|
|
|
import AddOtherSource from '../../../model/add-other-source';
|
|
@@ -67,13 +51,9 @@ export default defineComponent({
|
|
|
},
|
|
|
emits: ['change'],
|
|
|
setup(props, { emit }) {
|
|
|
- // const catchStore = useCatchStore();
|
|
|
const userStore = useUserStore();
|
|
|
|
|
|
const prepareStore = usePrepareStore();
|
|
|
- // const route = useRoute();
|
|
|
- // const router = useRouter();
|
|
|
- // const dialog = useDialog();
|
|
|
const message = useMessage();
|
|
|
|
|
|
const forms = reactive({
|
|
@@ -114,7 +94,7 @@ export default defineComponent({
|
|
|
messageOperation: {
|
|
|
visiable: false,
|
|
|
loading: false, // 是否显示加载
|
|
|
- type: 'delete' as 'delete' | 'addItem' | 'save' | 'pageLive',
|
|
|
+ type: 'delete' as 'delete' | 'addItem' | 'save' | 'pageLive' | 'checkInstrument',
|
|
|
contentDirection: 'center' as 'left' | 'center' | 'right',
|
|
|
title: '删除知识点',
|
|
|
content: '请确认是否删除该知识点,删除知识点后将同步删除知识点下的资源',
|
|
@@ -168,6 +148,8 @@ export default defineComponent({
|
|
|
type: sub.type,
|
|
|
title: sub.bizInfo.name,
|
|
|
dataJson: sub.dataJson,
|
|
|
+ instrumentIds: sub.instrumentIds, // 素材编号
|
|
|
+ isError: checkCurrentIsInstrument(sub.instruments), // 是否异常 当前素材是否在选中的乐器里面
|
|
|
// isCollect: !!sub.favoriteFlag,
|
|
|
isSelected: sub.source === 'PLATFORM' ? true : false,
|
|
|
audioPlayTypeArray: sub.audioPlayTypes
|
|
@@ -209,6 +191,21 @@ export default defineComponent({
|
|
|
forms.loadingStatus = false;
|
|
|
};
|
|
|
|
|
|
+ /** 检测当前素材是否包含所选声部 */
|
|
|
+ const checkCurrentIsInstrument = (instruments: string) => {
|
|
|
+ // 当前素材是否在选中的乐器里面
|
|
|
+ let isError = false
|
|
|
+ if(forms.subjects.length <= 0) {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ forms.subjects.forEach((item: any) => {
|
|
|
+ if(!instruments?.includes(item)) {
|
|
|
+ isError = true
|
|
|
+ }
|
|
|
+ })
|
|
|
+ return isError
|
|
|
+ }
|
|
|
+
|
|
|
// 删除
|
|
|
const onDelete = (j: number, index: number) => {
|
|
|
const coursewareItem = forms.coursewareList[index];
|
|
@@ -271,7 +268,7 @@ export default defineComponent({
|
|
|
} else if (type === 'addItem') {
|
|
|
forms.coursewareList.push({ name: '', list: [] });
|
|
|
addCoursewareItem(forms.addCoursewareItem);
|
|
|
- } else if (type === 'save' || type === 'pageLive') {
|
|
|
+ } else if (type === 'save' || type === 'pageLive' || type === "checkInstrument") {
|
|
|
if (forms.messageOperation.loading) return;
|
|
|
if (!forms.name) {
|
|
|
message.error('请输入课件标题');
|
|
@@ -308,6 +305,9 @@ export default defineComponent({
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ // 检测是否有异常资源
|
|
|
+ if(checkInstrumentIdsSubmit() && type !== 'checkInstrument') return
|
|
|
+
|
|
|
forms.messageOperation.loading = true;
|
|
|
const resultStatus = await onSaveCourseWare();
|
|
|
forms.messageOperation.loading = false;
|
|
@@ -318,15 +318,7 @@ export default defineComponent({
|
|
|
) {
|
|
|
forms.messageCallBack();
|
|
|
}
|
|
|
- emit('change', {
|
|
|
- status: false,
|
|
|
- addParam: {
|
|
|
- isAdd: !props.groupItem.id ? true : false,
|
|
|
- name: forms.name,
|
|
|
- id: forms.createId
|
|
|
- }
|
|
|
- });
|
|
|
- eventGlobal.emit('teacher-slideshow', false);
|
|
|
+ onCancelSave()
|
|
|
}
|
|
|
}
|
|
|
forms.messageOperation.visiable = false;
|
|
@@ -456,6 +448,50 @@ export default defineComponent({
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+ /** 取消保存时处理 */
|
|
|
+ const onCancelSave = () => {
|
|
|
+ emit('change', {
|
|
|
+ status: false,
|
|
|
+ addParam: {
|
|
|
+ isAdd: false,
|
|
|
+ name: forms.name,
|
|
|
+ id: forms.createId
|
|
|
+ }
|
|
|
+ });
|
|
|
+ eventGlobal.emit('teacher-slideshow', false);
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 提交数据前做拦截提示 */
|
|
|
+ const checkInstrumentIdsSubmit = () => {
|
|
|
+ let status = false
|
|
|
+
|
|
|
+ // 修改声部后重新检测状态
|
|
|
+ forms.coursewareList.forEach((item: any) => {
|
|
|
+ const childList = item.list || []
|
|
|
+ childList.forEach((child: any) => {
|
|
|
+ if(child.isError) {
|
|
|
+ status = true
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ if(status) {
|
|
|
+ forms.messageOperation = {
|
|
|
+ visiable: true,
|
|
|
+ type: 'checkInstrument',
|
|
|
+ loading: false,
|
|
|
+ contentDirection: 'center',
|
|
|
+ title: '提示',
|
|
|
+ content: '课件中含有不符合课件乐器的资源,是否继续保存?',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ confirmButtonText: '保存',
|
|
|
+ index: 0
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ return status
|
|
|
+ }
|
|
|
+
|
|
|
// 提交
|
|
|
const onSubmit = async () => {
|
|
|
try {
|
|
@@ -490,22 +526,18 @@ export default defineComponent({
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ // 检测是否有异常资源
|
|
|
+ if(checkInstrumentIdsSubmit()) return
|
|
|
+
|
|
|
if (forms.openFlag && !userStore.getReadCoursewareOpenAgreement) {
|
|
|
showModalMask.value = true;
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
const resultStatus = await onSaveCourseWare();
|
|
|
|
|
|
if (resultStatus) {
|
|
|
- emit('change', {
|
|
|
- status: false,
|
|
|
- addParam: {
|
|
|
- isAdd: !props.groupItem.id ? true : false,
|
|
|
- name: forms.name,
|
|
|
- id: forms.createId
|
|
|
- }
|
|
|
- });
|
|
|
- eventGlobal.emit('teacher-slideshow', false);
|
|
|
+ onCancelSave()
|
|
|
}
|
|
|
} catch {
|
|
|
//
|
|
@@ -567,6 +599,12 @@ export default defineComponent({
|
|
|
};
|
|
|
|
|
|
const addItem = (item: any, point?: any) => {
|
|
|
+ if(forms.subjects.length <= 0) {
|
|
|
+ message.error('请先选择乐器')
|
|
|
+ eventGlobal.emit('checkCoursewareForm', 'subject')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ item.isError = checkCurrentIsInstrument(item.instrumentIds) // 是否异常
|
|
|
if (forms.coursewareList.length <= 0) {
|
|
|
// 添加到临时对象
|
|
|
forms.addCoursewareItem = item;
|
|
@@ -603,16 +641,7 @@ export default defineComponent({
|
|
|
if (objA === objB && baseA === baseB) {
|
|
|
if (typeof event == 'function') {
|
|
|
event();
|
|
|
-
|
|
|
- emit('change', {
|
|
|
- status: false,
|
|
|
- addParam: {
|
|
|
- isAdd: false,
|
|
|
- name: forms.name,
|
|
|
- id: forms.createId
|
|
|
- }
|
|
|
- });
|
|
|
- eventGlobal.emit('teacher-slideshow', false);
|
|
|
+ onCancelSave()
|
|
|
}
|
|
|
} else {
|
|
|
forms.messageCallBack = event;
|
|
@@ -648,16 +677,7 @@ export default defineComponent({
|
|
|
const baseB = JSON.stringify(forms.baseInfo);
|
|
|
|
|
|
if (objA === objB && baseA === baseB) {
|
|
|
- emit('change', {
|
|
|
- status: false,
|
|
|
- addParam: {
|
|
|
- isAdd: false,
|
|
|
- name: forms.name,
|
|
|
- id: forms.createId
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- eventGlobal.emit('teacher-slideshow', false);
|
|
|
+ onCancelSave()
|
|
|
} else {
|
|
|
forms.messageOperation = {
|
|
|
visiable: true,
|
|
@@ -683,6 +703,19 @@ export default defineComponent({
|
|
|
onSubmit();
|
|
|
};
|
|
|
|
|
|
+ // 声部变化时
|
|
|
+ const onCourseWareSubjectChange = (subjects: any) => {
|
|
|
+ forms.subjects = subjects
|
|
|
+
|
|
|
+ // 修改声部后重新检测状态
|
|
|
+ forms.coursewareList.forEach((item: any) => {
|
|
|
+ const childList = item.list || []
|
|
|
+ childList.forEach((child: any) => {
|
|
|
+ child.isError = checkCurrentIsInstrument(child.instrumentIds)
|
|
|
+ })
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
onMounted(async () => {
|
|
|
// 修改时重置默认数据
|
|
|
if (props.groupItem?.id) {
|
|
@@ -695,6 +728,9 @@ export default defineComponent({
|
|
|
eventGlobal.on('onPrepareAddItem', addItem);
|
|
|
eventGlobal.on('pageBeforeLeave', onPageBeforeLeave);
|
|
|
|
|
|
+ // 选择乐器改变时
|
|
|
+ eventGlobal.on('coursewareSubjectChange', onCourseWareSubjectChange)
|
|
|
+
|
|
|
// 取消
|
|
|
eventGlobal.on('coursewareClosed', onCancelCourseware);
|
|
|
// 保存
|
|
@@ -704,6 +740,7 @@ export default defineComponent({
|
|
|
onUnmounted(() => {
|
|
|
eventGlobal.off('onPrepareAddItem', addItem);
|
|
|
eventGlobal.off('pageBeforeLeave', onPageBeforeLeave);
|
|
|
+ eventGlobal.off('coursewareSubjectChange', onCourseWareSubjectChange)
|
|
|
eventGlobal.off('coursewareClosed', onCancelCourseware);
|
|
|
eventGlobal.off('coursewareSave', onSubmitCourseware);
|
|
|
});
|
|
@@ -734,51 +771,8 @@ export default defineComponent({
|
|
|
{forms.coursewareList.map((item: any, index: number) => (
|
|
|
<div
|
|
|
class={[styles.listItems, 'row-group']}
|
|
|
- // onDragenter={(e: any) => {
|
|
|
- // e.preventDefault();
|
|
|
- // }}
|
|
|
- // onDragover={(e: any) => {
|
|
|
- // e.preventDefault();
|
|
|
- // }}
|
|
|
- // onDrop={(e: any) => {
|
|
|
- // let dropItem = e.dataTransfer.getData('text');
|
|
|
- // dropItem =
|
|
|
- // dropItem && e.dataTransfer.effectAllowed === 'all'
|
|
|
- // ? JSON.parse(dropItem)
|
|
|
- // : {};
|
|
|
- // // 判断是否有数据
|
|
|
- // if (dropItem.id) {
|
|
|
- // // 获取拖拽的目标元素
|
|
|
- // eventGlobal.emit(
|
|
|
- // 'onPrepareAddItem',
|
|
|
- // {
|
|
|
- // materialId: dropItem.id,
|
|
|
- // coverImg: dropItem.coverImg,
|
|
|
- // type: dropItem.type,
|
|
|
- // title: dropItem.title,
|
|
|
- // refFlag: dropItem.refFlag,
|
|
|
- // isCollect: dropItem.isCollect,
|
|
|
- // isSelected: dropItem.isSelected,
|
|
|
- // content: dropItem.content,
|
|
|
- // removeFlag: false,
|
|
|
- // index,
|
|
|
- // addType: 'drag'
|
|
|
- // },
|
|
|
- // {
|
|
|
- // x: e.clientX,
|
|
|
- // y: e.clientY
|
|
|
- // }
|
|
|
- // );
|
|
|
- // }
|
|
|
- // }}
|
|
|
>
|
|
|
<div class={styles.knowledgePoint}>
|
|
|
- {/* <div class={styles.btnItem}>
|
|
|
- <span class={styles.btnTitle}>
|
|
|
- <span>*</span>知识点名称:
|
|
|
- </span>
|
|
|
-
|
|
|
- </div> */}
|
|
|
<NFormItem
|
|
|
class={styles.btnItem}
|
|
|
label="知识点名称"
|
|
@@ -847,27 +841,19 @@ export default defineComponent({
|
|
|
// @ts-ignore
|
|
|
group="description"
|
|
|
scroll={true}
|
|
|
- // scrollSensitivity={120}
|
|
|
- // forceAutoScrollFallback={true}
|
|
|
animation={200}
|
|
|
- // onChange={(evt: any) => {
|
|
|
- // const added = evt.added;
|
|
|
- // // 是否为添加
|
|
|
- // if (!added || (added && !added.element)) {
|
|
|
- // return;
|
|
|
- // }
|
|
|
-
|
|
|
- // if (added.element.sourceForm !== 'resource-item') {
|
|
|
- // return;
|
|
|
- // }
|
|
|
- // // console.log(forms.coursewareList, 'courseware');
|
|
|
- // }}
|
|
|
onAdd={(evt: any) => {
|
|
|
// console.log(
|
|
|
const list = forms.coursewareList[index].list;
|
|
|
const dropItem = list[evt.newDraggableIndex];
|
|
|
- console.log(dropItem, 'dropItem');
|
|
|
if (dropItem.sourceForm === 'resource-item') {
|
|
|
+ if(forms.subjects.length <= 0) {
|
|
|
+ list.splice(evt.newDraggableIndex, 1)
|
|
|
+ message.error('请先选择乐器')
|
|
|
+ eventGlobal.emit('checkCoursewareForm', 'subject')
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
addDragCoursewareItem(
|
|
|
{
|
|
|
materialId: dropItem.id,
|
|
@@ -877,6 +863,7 @@ export default defineComponent({
|
|
|
refFlag: dropItem.refFlag,
|
|
|
isCollect: dropItem.isCollect,
|
|
|
isSelected: dropItem.isSelected,
|
|
|
+ isError: checkCurrentIsInstrument(dropItem.instrumentIds), // 是否异常
|
|
|
content: dropItem.content,
|
|
|
audioPlayTypeArray: dropItem.audioPlayTypeArray,
|
|
|
removeFlag: false,
|
|
@@ -927,6 +914,7 @@ export default defineComponent({
|
|
|
<div class={styles.itemWrapBox}>
|
|
|
<CardType
|
|
|
class={[styles.itemContent]}
|
|
|
+ isError={item.isError}
|
|
|
isShowCollect={false}
|
|
|
offShelf={item.removeFlag ? true : false}
|
|
|
// onOffShelf={() => onRemove(item)}
|
|
@@ -975,29 +963,6 @@ export default defineComponent({
|
|
|
)
|
|
|
}}
|
|
|
</Draggable>
|
|
|
- {/* )}
|
|
|
- {item.list <= 0 && (
|
|
|
- <div class={styles.list}>
|
|
|
- <div class={styles.itemWrap}>
|
|
|
- <div class={styles.itemWrapBox}>
|
|
|
- <div
|
|
|
- class={[
|
|
|
- styles.itemContent,
|
|
|
- styles.addMusicItem,
|
|
|
- 'handle'
|
|
|
- ]}
|
|
|
- onClick={() => {
|
|
|
- forms.addOtherSource = true;
|
|
|
- forms.addOtherIndex = index;
|
|
|
- }}>
|
|
|
- <img src={iconAddMusic} />
|
|
|
-
|
|
|
- <p class={styles.addMusicName}>添加资源</p>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- )} */}
|
|
|
</div>
|
|
|
))}
|
|
|
|
|
@@ -1083,15 +1048,7 @@ export default defineComponent({
|
|
|
forms.messageOperation.type === 'save' ||
|
|
|
forms.messageOperation.type === 'pageLive'
|
|
|
) {
|
|
|
- emit('change', {
|
|
|
- status: false,
|
|
|
- addParam: {
|
|
|
- isAdd: false,
|
|
|
- name: forms.name,
|
|
|
- id: forms.createId
|
|
|
- }
|
|
|
- });
|
|
|
- eventGlobal.emit('teacher-slideshow', false);
|
|
|
+ onCancelSave()
|
|
|
if (
|
|
|
forms.messageOperation.type === 'pageLive' &&
|
|
|
typeof forms.messageCallBack === 'function'
|
|
@@ -1149,16 +1106,7 @@ export default defineComponent({
|
|
|
try {
|
|
|
const resultStatus = await onSaveCourseWare();
|
|
|
if (resultStatus) {
|
|
|
- userStore.setReadCoursewareOpenAgreement(true);
|
|
|
- emit('change', {
|
|
|
- status: false,
|
|
|
- addParam: {
|
|
|
- isAdd: !props.groupItem.id ? true : false,
|
|
|
- name: forms.name,
|
|
|
- id: forms.createId
|
|
|
- }
|
|
|
- });
|
|
|
- eventGlobal.emit('teacher-slideshow', false);
|
|
|
+ onCancelSave()
|
|
|
}
|
|
|
} catch {
|
|
|
//
|