123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- import { defineComponent, nextTick, onMounted, reactive } from 'vue';
- import styles from './index.module.less';
- import {
- NButton,
- NImage,
- NInput,
- NModal,
- NScrollbar,
- NSpace,
- NSpin,
- useMessage
- } from 'naive-ui';
- import add from '@/views/studentList/images/add.png';
- import WorkSection from '/src/views/prepare-lessons/model/work-section';
- import {
- lessonPreTrainingV2Page,
- lessonPreTrainingV2Save
- } from '/src/views/prepare-lessons/api';
- import { storeToRefs } from 'pinia';
- import { useUserStore } from '/src/store/modules/users';
- import AssignHomework from '/src/views/prepare-lessons/components/lesson-main/train/assign-homework';
- import Train from '/src/views/prepare-lessons/components/lesson-main/train';
- import ResourceMain from '/src/views/prepare-lessons/components/resource-main';
- import dayjs from 'dayjs';
- import { useResizeObserver } from '@vueuse/core';
- import TheEmpty from '/src/components/TheEmpty';
- export default defineComponent({
- name: 'class-work',
- props: {
- /** 章节编号 */
- detailId: {
- type: String,
- default: ''
- },
- /** 声部编号 */
- subjectId: {
- type: String,
- default: ''
- },
- /** 班级编号 */
- classGroupId: {
- type: String,
- default: ''
- },
- /** 上课编号 */
- courseScheduleId: {
- type: String,
- default: ''
- },
- activeName: {
- type: String,
- default: ''
- }
- },
- emits: ['close'],
- setup(props, { emit }) {
- const users = useUserStore();
- const { info } = storeToRefs(users);
- const message = useMessage();
- const forms = reactive({
- loadingStatus: false,
- tableList: [] as any,
- editTitleVisiable: false,
- selectItem: {} as any,
- editTitle: '',
- assignHomeworkStatus: false,
- editBtnLoading: false,
- workVisiable: false
- });
- const getList = async () => {
- forms.loadingStatus = true;
- try {
- // 判断是否有选择对应的课件 或声部
- if (!props.detailId) return (forms.loadingStatus = false);
- const { data } = await lessonPreTrainingV2Page({
- page: 1,
- coursewareKnowledgeDetailId: props.detailId
- });
- const result = data.rows || [];
- const tempList: any = [];
- result.forEach((item: any) => {
- const { lessonPreTrainingDetails, ...ies } = item;
- const tList: any = {
- ...ies,
- pTitle: '',
- eTitle: '',
- teacherAvatar: info.value?.avatar,
- teacherName: info.value?.nickname,
- lessonPreTrainingDetails
- };
- lessonPreTrainingDetails.forEach((child: any) => {
- if (child.trainingType === 'PRACTICE' && child.musicName) {
- tList.pTitle += tList.pTitle
- ? '、《' + child.musicName + '》'
- : '练习曲目《' + child.musicName + '》';
- }
- if (child.trainingType === 'EVALUATION' && child.musicName) {
- tList.eTitle += tList.eTitle
- ? '、《' + child.musicName + '》'
- : '评测曲目《' + child.musicName + '》';
- }
- });
- tempList.push(tList);
- });
- forms.tableList = tempList;
- } catch {
- //
- }
- forms.loadingStatus = false;
- };
- /** 修改标题 */
- const onEditTitleSubmit = async () => {
- if (!forms.editTitle) {
- message.error('请输入作业标题');
- return;
- }
- forms.editBtnLoading = true;
- try {
- await lessonPreTrainingV2Save({
- id: forms.selectItem.id,
- title: forms.editTitle
- });
- message.success('修改成功');
- forms.editTitleVisiable = false;
- forms.tableList.forEach((item: any) => {
- if (item.id === forms.selectItem.id) {
- item.title = forms.editTitle;
- }
- });
- } catch {
- //
- }
- forms.editBtnLoading = false;
- };
- const getModalHeight = () => {
- useResizeObserver(
- document.querySelector('#model-homework-height') as HTMLElement,
- (entries: any) => {
- const entry = entries[0];
- const { height } = entry.contentRect;
- document.documentElement.style.setProperty(
- '--window-page-lesson-height',
- height + 'px'
- );
- }
- );
- };
- onMounted(() => {
- getList();
- });
- return () => (
- <div class={styles.classWork}>
- <div class={styles.btnGroup}>
- <NSpace>
- <NButton
- type="primary"
- class={styles.addPreset}
- onClick={() => {
- // 设置右侧栏状态
- forms.workVisiable = true;
- forms.selectItem = {};
- nextTick(() => {
- getModalHeight();
- });
- }}
- v-slots={{
- icon: () => (
- <>
- <NImage
- class={styles.addBtnIcon}
- previewDisabled
- src={add}></NImage>
- </>
- )
- }}>
- 添加作业
- </NButton>
- </NSpace>
- </div>
- <NScrollbar style={{ height: '60vh' }} class={[styles.listContainer]}>
- <NSpin show={forms.loadingStatus}>
- <div
- class={[
- styles.listSection,
- !forms.loadingStatus &&
- forms.tableList.length <= 0 &&
- styles.listSectionEmpty
- ]}
- style={{ minHeight: '55vh' }}>
- <NSpace vertical>
- {forms.tableList.map((item: any) => (
- <WorkSection
- hideDelete
- item={item}
- onEditTitle={() => {
- forms.selectItem = item;
- forms.editTitle = item.title;
- forms.editTitleVisiable = true;
- }}
- onEdit={() => {
- forms.workVisiable = true;
- forms.selectItem = item;
- nextTick(() => {
- getModalHeight();
- });
- }}
- onConfirm={() => {
- if (
- !item.lessonPreTrainingDetails ||
- item.lessonPreTrainingDetails.length <= 0
- ) {
- message.error('作业预设不能为空');
- return;
- }
- forms.assignHomeworkStatus = true;
- forms.selectItem = item;
- }}
- />
- ))}
- </NSpace>
- {!forms.loadingStatus && forms.tableList.length <= 0 && (
- <TheEmpty description="暂无作业" />
- )}
- </div>
- </NSpin>
- </NScrollbar>
- <NModal
- v-model:show={forms.editTitleVisiable}
- preset="card"
- class={['modalTitle', styles.removeVisiable1]}
- title={'作业重命名'}>
- <div class={styles.studentRemove}>
- <NInput
- placeholder="请输入作业标题"
- v-model:value={forms.editTitle}
- maxlength={100}
- onKeyup={(e: any) => {
- if (e.code === 'ArrowLeft' || e.code === 'ArrowRight') {
- e.stopPropagation();
- }
- }}
- />
- <NSpace class={styles.btnGroupModal} justify="center">
- <NButton round onClick={() => (forms.editTitleVisiable = false)}>
- 取消
- </NButton>
- <NButton
- round
- type="primary"
- onClick={onEditTitleSubmit}
- loading={forms.editBtnLoading}>
- 确定
- </NButton>
- </NSpace>
- </div>
- </NModal>
- {/* 添加自定义教材 */}
- <NModal
- v-model:show={forms.assignHomeworkStatus}
- preset="card"
- showIcon={false}
- class={['modalTitle background', styles.assignHomework]}
- title={'布置作业'}
- blockScroll={false}>
- <AssignHomework
- classGroupId={props.classGroupId}
- courseScheduleId={props.courseScheduleId}
- item={forms.selectItem}
- trainList={[]}
- onClose={() => (forms.assignHomeworkStatus = false)}
- />
- </NModal>
- <NModal
- v-model:show={forms.workVisiable}
- preset="card"
- class={['modalTitle background', styles.workVisiable]}
- title={'作业详情'}>
- <div id="model-homework-height" class={styles.workContainer}>
- <div class={styles.workTrain}>
- <Train
- coursewareKnowledgeDetailId={props.detailId}
- classGroupId={props.classGroupId}
- courseScheduleId={props.courseScheduleId}
- lessonPreTraining={{
- title:
- (props.activeName || dayjs().format('YYYY年MM月DD日')) +
- '-课后作业',
- id: forms.selectItem.id
- }}
- // cardType={'homeworkRecord'}
- onChange={(val: any) => {
- forms.workVisiable = val.status;
- getList();
- }}
- />
- </div>
- <div class={styles.resourceMain}>
- <ResourceMain cardType="homerowk-record" />
- </div>
- </div>
- </NModal>
- </div>
- );
- }
- });
|