123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- import { defineComponent, onMounted, reactive } from 'vue';
- import styles from './index.module.less';
- import {
- NButton,
- NImage,
- NInput,
- NModal,
- NScrollbar,
- NSelect,
- NSpace,
- NSpin,
- useDialog,
- useMessage
- } from 'naive-ui';
- import AddTeaching, {
- BOOK_DATA
- } from '/src/views/natural-resources/model/add-teaching';
- import {
- lessonCoursewarePage,
- lessonCoursewareRemove,
- bookVersionPage
- } from '../../../api';
- import iconUploadBg from '../images/icon-upload-bg.svg';
- import { useCatchStore } from '/src/store/modules/catchData';
- import { useThrottleFn } from '@vueuse/core';
- export default defineComponent({
- name: 'select-lessonware',
- emits: ['close', 'confirm'],
- setup(props, { emit }) {
- const catchStore = useCatchStore();
- const dialog = useDialog();
- const message = useMessage();
- const forms = reactive({
- loading: false,
- list: [] as any[],
- teachingStatus: false,
- musicTagList: [] as any[],
- selectItem: {} as any,
- bookVersionId: null,
- keyword: null,
- currentGradeNum: null,
- removeVisiable: false,
- removeRow: {} as any
- // bookType: null
- });
- const getLessonCourseware = async () => {
- forms.loading = true;
- try {
- const { data } = await lessonCoursewarePage({
- page: 1,
- rows: 99,
- type: 'COURSEWARE',
- enableFlag: 1,
- bookVersionId: forms.bookVersionId,
- keyword: forms.keyword,
- currentGradeNum: forms.currentGradeNum
- // bookType: forms.bookType
- });
- forms.list = data.rows;
- } catch {
- //
- }
- forms.loading = false;
- };
- // 删除教材
- const onDelete = async (item: any) => {
- try {
- await lessonCoursewareRemove({ id: forms.removeRow.id });
- message.success('删除成功');
- getLessonCourseware();
- forms.removeVisiable = false;
- } catch (e) {
- console.log(e);
- }
- };
- const throttledFn = useThrottleFn(() => getLessonCourseware(), 500);
- const onDetail = (item: any) => {
- emit('confirm', item);
- emit('close');
- };
- onMounted(async () => {
- // 获取教材分类列表
- try {
- const { data } = await bookVersionPage({
- page: 1,
- rows: 99,
- type: 'COURSEWARE'
- });
- const temp = data.rows || [];
- temp.forEach((item: any) => {
- forms.musicTagList.push({
- id: item.id,
- name: item.name
- });
- });
- } catch {
- //
- }
- getLessonCourseware();
- });
- return () => (
- <div class={styles.selectLessonware}>
- <div class={styles.attendClassSearch}>
- <NInput
- placeholder="请输入教材名称"
- clearable
- v-model:value={forms.keyword}
- onKeyup={(e: KeyboardEvent) => {
- if (e.code === 'Enter') {
- throttledFn();
- }
- }}
- onClear={() => throttledFn()}>
- {{
- prefix: () => (
- <span
- class="icon-search-input"
- onClick={() => throttledFn()}></span>
- )
- }}
- </NInput>
- <NSelect
- placeholder="全部版本"
- clearable
- options={[{ id: null, name: '全部版本' }, ...forms.musicTagList]}
- labelField="name"
- valueField="id"
- v-model:value={forms.bookVersionId}
- onUpdate:value={() => throttledFn()}
- />
- <NSelect
- placeholder="全部年级"
- options={
- [{ label: '全部年级', value: null }, ...BOOK_DATA.grades] as any
- }
- v-model:value={forms.currentGradeNum}
- clearable
- filterable
- onUpdate:value={() => throttledFn()}
- />
- {/* <NSelect
- placeholder="全部册别"
- options={
- [
- { label: '全部册别', value: null },
- ...BOOK_DATA.bookTypes
- ] as any
- }
- v-model:value={forms.bookType}
- clearable
- onUpdate:value={() => throttledFn()}
- /> */}
- </div>
- <NScrollbar class={styles.classList}>
- <NSpin show={forms.loading} class={styles.content}>
- <NSpace size={[50, 40]}>
- <div
- class={styles.item}
- key={`item--1`}
- onClick={() => {
- forms.selectItem = {};
- forms.teachingStatus = true;
- }}>
- <div class={styles.cover}>
- <div class={styles.itemImg}>
- <div class={styles.itemBg}></div>
- <NImage
- objectFit="cover"
- src={iconUploadBg}
- lazy
- previewDisabled={true}
- onLoad={e => {
- (e.target as any).dataset.loaded = 'true';
- }}
- />
- </div>
- </div>
- </div>
- {forms.list.map((item: any, index: number) => {
- return (
- <div
- class={styles.item}
- key={`item-${index}`}
- onClick={() => onDetail(item)}>
- <div class={styles.cover}>
- <div class={styles.itemImg}>
- <div class={styles.itemBg}></div>
- <NImage
- objectFit="cover"
- src={item.coverImg}
- lazy
- previewDisabled={true}
- onLoad={e => {
- (e.target as any).dataset.loaded = 'true';
- }}
- />
- {item.customFlag && (
- <>
- <div class={styles.iconCustom}></div>
- <div class={styles.editContainer}>
- <div class={styles.editBtnGroup}>
- <NButton
- size="small"
- class={styles.delBtn}
- color="#EA4132"
- onClick={(e: MouseEvent) => {
- e.stopPropagation();
- // onDelete(item);
- forms.removeVisiable = true;
- forms.removeRow = item;
- }}>
- 删除
- </NButton>
- <NButton
- size="small"
- class={styles.editBtn}
- color="#FFFFFF"
- onClick={(e: MouseEvent) => {
- e.stopPropagation();
- forms.selectItem = item;
- forms.teachingStatus = true;
- }}>
- 编辑
- </NButton>
- </div>
- </div>
- </>
- )}
- </div>
- </div>
- <div class={styles.itemName}>{item.name}</div>
- </div>
- );
- })}
- </NSpace>
- </NSpin>
- </NScrollbar>
- {/* 添加自定义教材 */}
- <NModal
- v-model:show={forms.teachingStatus}
- preset="card"
- showIcon={false}
- class={['modalTitle background', styles.teachingModal]}
- title={'自定义教材'}
- blockScroll={false}>
- <AddTeaching
- item={forms.selectItem}
- onClose={() => (forms.teachingStatus = false)}
- onConfirm={() => {
- getLessonCourseware();
- forms.selectItem = {};
- }}
- />
- </NModal>
- <NModal
- v-model:show={forms.removeVisiable}
- preset="card"
- class={['modalTitle', styles.removeVisiable]}
- title={'删除教材'}>
- <div class={styles.studentRemove}>
- <p>是否删除该教材</p>
- <NSpace class={styles.btnGroup} justify="center">
- <NButton round type="primary" onClick={onDelete}>
- 确定
- </NButton>
- <NButton round onClick={() => (forms.removeVisiable = false)}>
- 取消
- </NButton>
- </NSpace>
- </div>
- </NModal>
- </div>
- );
- }
- });
|