index.tsx 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. import { defineComponent, onMounted, reactive } from 'vue';
  2. import styles from './index.module.less';
  3. import {
  4. NButton,
  5. NImage,
  6. NInput,
  7. NModal,
  8. NScrollbar,
  9. NSelect,
  10. NSpace,
  11. useDialog,
  12. useMessage
  13. } from 'naive-ui';
  14. import AddTeaching, {
  15. BOOK_DATA
  16. } from '/src/views/natural-resources/model/add-teaching';
  17. import { lessonCoursewarePage, lessonCoursewareRemove } from '../../../api';
  18. import iconUploadBg from '../images/icon-upload-bg.svg';
  19. export default defineComponent({
  20. name: 'select-lessonware',
  21. emits: ['close', 'confirm'],
  22. setup(props, { emit }) {
  23. const dialog = useDialog();
  24. const message = useMessage();
  25. const forms = reactive({
  26. currentGradeNum: null,
  27. bookType: null,
  28. list: [] as any[],
  29. teachingStatus: false,
  30. selectItem: {} as any
  31. });
  32. const getLessonCourseware = async () => {
  33. try {
  34. const { data } = await lessonCoursewarePage({
  35. page: 1,
  36. rows: 99,
  37. type: 'COURSEWARE',
  38. enableFlag: 1
  39. });
  40. console.log(data.rows, 'data');
  41. forms.list = data.rows;
  42. } catch {
  43. //
  44. }
  45. };
  46. // 删除教材
  47. const onDelete = async (item: any) => {
  48. dialog.warning({
  49. title: '提示',
  50. content: '是否删除该教材?',
  51. positiveText: '确定',
  52. negativeText: '取消',
  53. onPositiveClick: async () => {
  54. try {
  55. await lessonCoursewareRemove({ id: item.id });
  56. message.success('删除成功');
  57. } catch {
  58. //
  59. }
  60. }
  61. });
  62. };
  63. const onDetail = (item: any) => {
  64. emit('confirm', item);
  65. emit('close');
  66. };
  67. onMounted(() => {
  68. getLessonCourseware();
  69. });
  70. return () => (
  71. <div class={styles.selectLessonware}>
  72. <div class={styles.attendClassSearch}>
  73. <NInput placeholder="请输入班级名称" clearable>
  74. {{
  75. prefix: () => <span class="icon-search-input"></span>
  76. }}
  77. </NInput>
  78. <NSelect
  79. placeholder="版本"
  80. clearable
  81. options={[
  82. {
  83. label: '一年级',
  84. value: '1'
  85. },
  86. {
  87. label: '二年级',
  88. value: '2'
  89. }
  90. ]}
  91. />
  92. <NSelect
  93. placeholder="请选择年级"
  94. options={BOOK_DATA.grades}
  95. v-model:value={forms.currentGradeNum}
  96. clearable
  97. filterable
  98. />
  99. <NSelect
  100. placeholder="请选择册别"
  101. options={BOOK_DATA.bookTypes}
  102. v-model:value={forms.bookType}
  103. clearable
  104. />
  105. </div>
  106. <NScrollbar class={styles.classList}>
  107. <div class={styles.content}>
  108. <NSpace size={[50, 40]}>
  109. <div
  110. class={styles.item}
  111. key={`item--1`}
  112. onClick={() => {
  113. forms.selectItem = {};
  114. forms.teachingStatus = true;
  115. }}>
  116. <div class={styles.cover}>
  117. <div class={styles.itemImg}>
  118. <div class={styles.itemBg}></div>
  119. <NImage
  120. objectFit="cover"
  121. src={iconUploadBg}
  122. lazy
  123. previewDisabled={true}
  124. onLoad={e => {
  125. (e.target as any).dataset.loaded = 'true';
  126. }}
  127. />
  128. </div>
  129. </div>
  130. </div>
  131. {forms.list.map((item: any, index: number) => {
  132. return (
  133. <div
  134. class={styles.item}
  135. key={`item-${index}`}
  136. onClick={() => onDetail(item)}>
  137. <div class={styles.cover}>
  138. <div class={styles.itemImg}>
  139. <div class={styles.itemBg}></div>
  140. <NImage
  141. objectFit="cover"
  142. src={item.coverImg}
  143. lazy
  144. previewDisabled={true}
  145. onLoad={e => {
  146. (e.target as any).dataset.loaded = 'true';
  147. }}
  148. />
  149. {item.customFlag && (
  150. <>
  151. <div class={styles.iconCustom}></div>
  152. <div class={styles.editContainer}>
  153. <div class={styles.editBtnGroup}>
  154. <NButton
  155. size="small"
  156. class={styles.delBtn}
  157. color="#EA4132"
  158. onClick={(e: MouseEvent) => {
  159. e.stopPropagation();
  160. onDelete(item);
  161. }}>
  162. 删除
  163. </NButton>
  164. <NButton
  165. size="small"
  166. class={styles.editBtn}
  167. color="#FFFFFF"
  168. onClick={(e: MouseEvent) => {
  169. e.stopPropagation();
  170. forms.selectItem = item;
  171. forms.teachingStatus = true;
  172. }}>
  173. 编辑
  174. </NButton>
  175. </div>
  176. </div>
  177. </>
  178. )}
  179. </div>
  180. </div>
  181. <div class={styles.itemName}>{item.name}</div>
  182. </div>
  183. );
  184. })}
  185. </NSpace>
  186. </div>
  187. </NScrollbar>
  188. {/* 添加自定义教材 */}
  189. <NModal
  190. v-model:show={forms.teachingStatus}
  191. preset="card"
  192. showIcon={false}
  193. class={['modalTitle background', styles.teachingModal]}
  194. title={'自定义教材'}
  195. blockScroll={false}>
  196. <AddTeaching
  197. item={forms.selectItem}
  198. onClose={() => (forms.teachingStatus = false)}
  199. onConfirm={() => {
  200. getLessonCourseware();
  201. forms.selectItem = {};
  202. }}
  203. />
  204. </NModal>
  205. </div>
  206. );
  207. }
  208. });