index.tsx 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import {
  2. TransitionGroup,
  3. computed,
  4. defineComponent,
  5. onMounted,
  6. reactive,
  7. ref
  8. } from 'vue';
  9. import styles from './index.module.less';
  10. import TheSearch from '@/components/TheSearch';
  11. import { NButton, NImage, NSpace } from 'naive-ui';
  12. import { useRouter } from 'vue-router';
  13. import mock from './mock.json';
  14. import { api_musicTagTree } from './api';
  15. export default defineComponent({
  16. name: 'XiaokuAi',
  17. setup() {
  18. const router = useRouter();
  19. const data = reactive({
  20. tags: [] as any[],
  21. tagIndex: 0,
  22. tagActive: {} as any,
  23. list: mock.list
  24. });
  25. const getTags = async () => {
  26. const res = await api_musicTagTree();
  27. if (Array.isArray(res?.data)) {
  28. data.tags = res.data;
  29. const list = renderTag(res.data);
  30. console.log(list);
  31. }
  32. };
  33. // 递归渲染标签
  34. const renderTag = (_data: any[]): any => {
  35. const item = {
  36. columnName: _data[0].columnName,
  37. list: _data.map((item: any) => {
  38. return {
  39. name: item.name,
  40. list: Array.isArray(item.children) ? renderTag(item.children) : []
  41. };
  42. })
  43. };
  44. return item;
  45. };
  46. onMounted(() => {
  47. getTags();
  48. });
  49. return () => (
  50. <div class={styles.container}>
  51. <div class={styles.tools}>
  52. <div class={styles.tagWrap}>
  53. <div class={styles.tags}>
  54. <NSpace size={[24, 12]}>
  55. <NButton quaternary disabled>
  56. {data.tags[0]?.columnName}
  57. </NButton>
  58. {data.tags.map((item: any, index: number) => {
  59. return (
  60. <>
  61. <NButton round secondary type={'default'}>
  62. {item.name}
  63. </NButton>
  64. </>
  65. );
  66. })}
  67. </NSpace>
  68. </div>
  69. </div>
  70. <TheSearch round />
  71. </div>
  72. {/* <div class={styles.content}>
  73. <NSpace size={[50, 40]}>
  74. {data.list.map((item, index) => {
  75. return (
  76. <div
  77. class={styles.item}
  78. key={`item-${index}`}
  79. onClick={() => router.push({ path: '/xiaoku-music' })}>
  80. <div class={styles.cover}>
  81. <div class={styles.itemImg}>
  82. <div class={styles.itemBg}></div>
  83. <NImage
  84. objectFit="cover"
  85. src={item.src}
  86. lazy
  87. previewDisabled={true}
  88. onLoad={e => {
  89. (e.target as any).dataset.loaded = 'true';
  90. }}
  91. />
  92. </div>
  93. </div>
  94. <div class={styles.itemName}>{item.name}</div>
  95. </div>
  96. );
  97. })}
  98. </NSpace>
  99. </div> */}
  100. </div>
  101. );
  102. }
  103. });