index.tsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import { defineComponent, onMounted, ref } from 'vue';
  2. import styles from './index.module.less';
  3. import { NButton, NScrollbar, NSpace, NTabPane, NTabs } 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 tabId = ref('' as any);
  12. const selectSubjectId = ref(null as any);
  13. const subjectList = ref([] as any);
  14. const onSubmit = () => {
  15. const item = subjectList.value.find(
  16. (subject: any) => subject.id === selectSubjectId.value
  17. );
  18. if (item) {
  19. item.code = item.code ? item.code.split(',')[0] : '';
  20. }
  21. emit('confirm', item);
  22. };
  23. const formatSubjectList = () => {
  24. const subjects = catchStore.getEnableSubjects;
  25. const temp: any = [];
  26. subjects.forEach((subject: any) => {
  27. if (tabId.value === '' && subject.instruments) {
  28. temp.push(...subject.instruments);
  29. } else if (
  30. tabId.value &&
  31. subject.instruments &&
  32. Number(tabId.value) === subject.id
  33. ) {
  34. temp.push(...subject.instruments);
  35. }
  36. });
  37. subjectList.value = temp;
  38. };
  39. onMounted(async () => {
  40. // await catchStore.getSubjects();
  41. await catchStore.getSubjects();
  42. formatSubjectList();
  43. });
  44. return () => (
  45. <div class={styles.subjectSync}>
  46. <NTabs
  47. defaultValue=""
  48. paneClass={styles.paneTitle}
  49. justifyContent="start"
  50. paneWrapperClass={styles.paneWrapperContainer}
  51. value={tabId.value}
  52. onUpdate:value={(val: any) => {
  53. tabId.value = val;
  54. formatSubjectList();
  55. }}>
  56. {[{ name: '全部声部', id: '' }, ...catchStore.getEnableSubjects].map(
  57. (item: any) => (
  58. <NTabPane
  59. name={`${item.id}`}
  60. tab={item.name}
  61. displayDirective="if"></NTabPane>
  62. )
  63. )}
  64. </NTabs>
  65. <NScrollbar style={{ maxHeight: '50vh', minHeight: '50vh' }}>
  66. <div class={styles.subjectList}>
  67. {subjectList.value.map((subject: any) => (
  68. <div
  69. class={[
  70. styles.subjectItem,
  71. selectSubjectId.value === subject.id
  72. ? styles.subjectSelect
  73. : ''
  74. ]}
  75. onClick={() => {
  76. selectSubjectId.value = subject.id;
  77. }}>
  78. <div class={styles.imgSection}>
  79. <img src={subject.img} />
  80. {selectSubjectId.value === subject.id && (
  81. <img src={iconSelect} class={styles.iconSelect} />
  82. )}
  83. </div>
  84. <p class={styles.subjectName}>{subject.name}</p>
  85. </div>
  86. ))}
  87. </div>
  88. </NScrollbar>
  89. <NSpace class={styles.btnGroupModal} justify="center">
  90. <NButton round onClick={() => emit('close')}>
  91. 取消
  92. </NButton>
  93. <NButton round type="primary" onClick={onSubmit}>
  94. 确认选择
  95. </NButton>
  96. </NSpace>
  97. </div>
  98. );
  99. }
  100. });