search-group-resources.tsx 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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, expose }) {
  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. const resetStatus = () => {
  48. state.isSelectAll = false;
  49. };
  50. expose({
  51. resetStatus
  52. });
  53. return () => (
  54. <div class={styles.searchGroup}>
  55. <div class={styles.searchCatatory}>
  56. <NSpace size="small" class={styles.btnType}>
  57. {resourceList.value.map((item: any) => (
  58. <NButton
  59. type={forms.type === item.value ? 'primary' : 'default'}
  60. secondary={forms.type === item.value ? false : true}
  61. round
  62. size="small"
  63. focusable={false}
  64. onClick={() => {
  65. if (forms.type !== item.value) {
  66. state.isEdit = false;
  67. state.isSelectAll = false;
  68. emit('edit', state.isEdit);
  69. }
  70. forms.type = item.value;
  71. onSearch();
  72. }}>
  73. {item.label}
  74. </NButton>
  75. ))}
  76. </NSpace>
  77. <NSpace size="small" class={styles.btnGroup}>
  78. {state.isEdit ? (
  79. <>
  80. <NButton
  81. type="primary"
  82. class={styles.addTrain}
  83. focusable={false}
  84. strong
  85. onClick={() => {
  86. state.isSelectAll = !state.isSelectAll;
  87. emit('selectAll', state.isSelectAll);
  88. }}>
  89. <img
  90. src={
  91. state.isSelectAll ? iconSelectAll : iconSelectAllDefault
  92. }
  93. class={styles.iconSelectAll}
  94. />
  95. 全选
  96. </NButton>
  97. <NButton
  98. type="error"
  99. class={[styles.addTrain, styles.error]}
  100. focusable={false}
  101. strong
  102. onClick={() => emit('delete')}>
  103. <img src={iconDelete} class={styles.iconDelete} />
  104. 删除
  105. </NButton>
  106. {forms.type !== 'MUSIC' && (
  107. <NButton
  108. type="primary"
  109. class={styles.addTrain}
  110. focusable={false}
  111. strong
  112. onClick={() => emit('update')}>
  113. <img src={iconPen} class={styles.iconPen} />
  114. 修改
  115. </NButton>
  116. )}
  117. <NButton
  118. type="primary"
  119. class={styles.addTrain}
  120. focusable={false}
  121. strong
  122. onClick={() => {
  123. state.isEdit = false;
  124. state.isSelectAll = false;
  125. emit('edit', state.isEdit);
  126. }}>
  127. 完成编辑
  128. </NButton>
  129. <NButton
  130. type="error"
  131. class={[styles.addTrain, styles.error]}
  132. focusable={false}
  133. strong
  134. onClick={() => {
  135. state.isEdit = false;
  136. state.isSelectAll = false;
  137. emit('edit', state.isEdit);
  138. }}>
  139. {/* <img src={iconDelete} class={styles.iconDelete} /> */}
  140. 取消编辑
  141. </NButton>
  142. </>
  143. ) : (
  144. <>
  145. <NButton
  146. type="primary"
  147. class={styles.addTrain}
  148. focusable={false}
  149. {...{ id: 'myResources-0' }}
  150. strong
  151. onClick={() => emit('upload')}>
  152. <img src={iconUpload} class={styles.iconUpload} />
  153. 上传资源
  154. </NButton>
  155. <NButton
  156. type="primary"
  157. class={styles.addTrain}
  158. focusable={false}
  159. strong
  160. onClick={() => {
  161. state.isEdit = true;
  162. emit('edit', state.isEdit);
  163. }}>
  164. <img src={iconEdit} class={styles.iconEdit} />
  165. 编辑资源
  166. </NButton>
  167. </>
  168. )}
  169. </NSpace>
  170. </div>
  171. <NForm labelAlign="left" labelPlacement="left">
  172. <NFormItem label="乐器:">
  173. <NSpace class={styles.spaceSection}>
  174. {catchStore.getSubjectAllList.map((subject: any) => (
  175. <NButton
  176. secondary={forms.subjectId === subject.id}
  177. quaternary={forms.subjectId !== subject.id}
  178. strong
  179. focusable={false}
  180. type={forms.subjectId === subject.id ? 'primary' : 'default'}
  181. onClick={() => {
  182. if (forms.subjectId !== subject.id) {
  183. state.isEdit = false;
  184. state.isSelectAll = false;
  185. emit('edit', state.isEdit);
  186. }
  187. forms.subjectId = subject.id;
  188. onSearch();
  189. }}>
  190. {subject.name}
  191. </NButton>
  192. ))}
  193. </NSpace>
  194. </NFormItem>
  195. <TheSearch
  196. class={styles.inputSearch}
  197. round
  198. onSearch={(val: string) => {
  199. forms.name = val;
  200. onSearch();
  201. }}
  202. />
  203. </NForm>
  204. </div>
  205. );
  206. }
  207. });