search-group-resources.tsx 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. import { defineComponent, onMounted, reactive, ref } from 'vue';
  2. import styles from './index.module.less';
  3. import { NButton, NForm, NFormItem, NSpace } from 'naive-ui';
  4. import iconUpload from '../../images/icon-upload.png';
  5. import iconEdit from '../../images/icon-edit.png';
  6. import iconSelectAll from '../../images/icon-selectall.png';
  7. import iconSelectAllDefault from '../../images/icon-selectall-default.png';
  8. import iconPen from '../../images/icon-pen.png';
  9. import iconDelete from '../../images/icon-delete.png';
  10. import TheSearch from '/src/components/TheSearch';
  11. import { resourceTypeArray } from '/src/utils/searchArray';
  12. import { useCatchStore } from '/src/store/modules/catchData';
  13. export default defineComponent({
  14. name: 'search-group',
  15. emits: ['search', 'upload', 'edit', 'selectAll', 'delete', 'update'],
  16. setup(props, { emit }) {
  17. const resourceList = ref([] as any[]);
  18. const catchStore = useCatchStore();
  19. const forms = reactive({
  20. type: 'MUSIC', //
  21. name: '',
  22. bookVersionId: null,
  23. subjectId: null
  24. });
  25. const state = reactive({
  26. isEdit: false, // 是否编辑
  27. isSelectAll: false
  28. });
  29. const onSearch = () => {
  30. emit('search', forms);
  31. };
  32. onMounted(async () => {
  33. resourceList.value = [
  34. // {
  35. // label: '全部',
  36. // value: ''
  37. // }
  38. ];
  39. resourceTypeArray.forEach((item: any) => {
  40. // if (item.value !== 'MUSIC') {
  41. resourceList.value.push(item);
  42. // }
  43. });
  44. // 获取声部列表
  45. await catchStore.getSubjects();
  46. });
  47. return () => (
  48. <div class={styles.searchGroup}>
  49. <div class={styles.searchCatatory}>
  50. <NSpace size="small" class={styles.btnType}>
  51. {resourceList.value.map((item: any) => (
  52. <NButton
  53. type={forms.type === item.value ? 'primary' : 'default'}
  54. secondary={forms.type === item.value ? false : true}
  55. round
  56. size="small"
  57. focusable={false}
  58. onClick={() => {
  59. forms.type = item.value;
  60. onSearch();
  61. }}>
  62. {item.label}
  63. </NButton>
  64. ))}
  65. </NSpace>
  66. <NSpace size="small" class={styles.btnGroup}>
  67. {state.isEdit ? (
  68. <>
  69. <NButton
  70. type="primary"
  71. class={styles.addTrain}
  72. focusable={false}
  73. strong
  74. onClick={() => {
  75. state.isSelectAll = !state.isSelectAll;
  76. emit('selectAll', state.isSelectAll);
  77. }}>
  78. <img
  79. src={
  80. state.isSelectAll ? iconSelectAll : iconSelectAllDefault
  81. }
  82. class={styles.iconSelectAll}
  83. />
  84. 全选
  85. </NButton>
  86. <NButton
  87. type="error"
  88. class={[styles.addTrain, styles.error]}
  89. focusable={false}
  90. strong
  91. onClick={() => emit('delete')}>
  92. <img src={iconDelete} class={styles.iconDelete} />
  93. 删除
  94. </NButton>
  95. <NButton
  96. type="primary"
  97. class={styles.addTrain}
  98. focusable={false}
  99. strong
  100. onClick={() => emit('update')}>
  101. <img src={iconPen} class={styles.iconPen} />
  102. 修改
  103. </NButton>
  104. <NButton
  105. type="primary"
  106. class={styles.addTrain}
  107. focusable={false}
  108. strong
  109. onClick={() => {
  110. state.isEdit = false;
  111. state.isSelectAll = false;
  112. emit('edit', state.isEdit);
  113. }}>
  114. 完成编辑
  115. </NButton>
  116. </>
  117. ) : (
  118. <>
  119. <NButton
  120. type="primary"
  121. class={styles.addTrain}
  122. focusable={false}
  123. {...{ id: 'myResources-0' }}
  124. strong
  125. onClick={() => emit('upload')}>
  126. <img src={iconUpload} class={styles.iconUpload} />
  127. 上传资源
  128. </NButton>
  129. <NButton
  130. type="primary"
  131. class={styles.addTrain}
  132. focusable={false}
  133. strong
  134. onClick={() => {
  135. state.isEdit = true;
  136. emit('edit', state.isEdit);
  137. }}>
  138. <img src={iconEdit} class={styles.iconEdit} />
  139. 编辑资源
  140. </NButton>
  141. </>
  142. )}
  143. </NSpace>
  144. </div>
  145. <NForm labelAlign="left" labelPlacement="left">
  146. <NFormItem label="乐器:">
  147. <NSpace class={styles.spaceSection}>
  148. {catchStore.getSubjectAllList.map((subject: any) => (
  149. <NButton
  150. secondary={forms.subjectId === subject.id}
  151. quaternary={forms.subjectId !== subject.id}
  152. strong
  153. focusable={false}
  154. type={forms.subjectId === subject.id ? 'primary' : 'default'}
  155. onClick={() => {
  156. forms.subjectId = subject.id;
  157. onSearch();
  158. }}>
  159. {subject.name}
  160. </NButton>
  161. ))}
  162. </NSpace>
  163. </NFormItem>
  164. <TheSearch
  165. class={styles.inputSearch}
  166. round
  167. onSearch={(val: string) => {
  168. forms.name = val;
  169. onSearch();
  170. }}
  171. />
  172. </NForm>
  173. </div>
  174. );
  175. }
  176. });