index.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { defineComponent, onMounted, ref } from 'vue';
  2. import styles from './index.module.less';
  3. import { NButton, NScrollbar, NSpace } from 'naive-ui';
  4. import { useCatchStore } from '/src/store/modules/catchData';
  5. import iconSelect from '../../../prepare-lessons/images/icon-select.png';
  6. export default defineComponent({
  7. name: 'subject-sync',
  8. emits: ['close', 'confirm'],
  9. setup(props, { emit }) {
  10. const catchStore = useCatchStore();
  11. const selectSubjectId = ref(null as any);
  12. const subjectList = ref([] as any);
  13. const onSubmit = () => {
  14. const item = subjectList.value.find(
  15. (subject: any) => subject.id === selectSubjectId.value
  16. );
  17. emit('confirm', item);
  18. };
  19. onMounted(async () => {
  20. // await catchStore.getSubjects();
  21. await catchStore.getMusicInstrument();
  22. subjectList.value = catchStore.getMusicInstruments;
  23. if (subjectList.value.length > 0) {
  24. selectSubjectId.value = subjectList.value[0].id;
  25. }
  26. });
  27. return () => (
  28. <div class={styles.subjectSync}>
  29. {/* <div class={styles.tips}>
  30. 请选择当前课件可使用的乐器
  31. <span>(勾选后则对应乐器下的课件内容将被当前课件内容全部替换)</span>
  32. </div> */}
  33. <NScrollbar style={{ maxHeight: '60vh' }}>
  34. <div class={styles.subjectList}>
  35. {subjectList.value.map((subject: any) => (
  36. <div
  37. class={[
  38. styles.subjectItem,
  39. selectSubjectId.value === subject.id
  40. ? styles.subjectSelect
  41. : ''
  42. ]}
  43. onClick={() => {
  44. selectSubjectId.value = subject.id;
  45. }}>
  46. <div class={styles.imgSection}>
  47. <img src={subject.img} />
  48. {selectSubjectId.value === subject.id && (
  49. <img src={iconSelect} class={styles.iconSelect} />
  50. )}
  51. </div>
  52. <p class={styles.subjectName}>{subject.name}</p>
  53. </div>
  54. ))}
  55. </div>
  56. </NScrollbar>
  57. <NSpace class={styles.btnGroupModal} justify="center">
  58. <NButton round onClick={() => emit('close')}>
  59. 取消
  60. </NButton>
  61. <NButton round type="primary" onClick={onSubmit}>
  62. 确认选择
  63. </NButton>
  64. </NSpace>
  65. </div>
  66. );
  67. }
  68. });