index.tsx 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. import { defineComponent, reactive, ref } from 'vue';
  2. import styles from './index.module.less';
  3. import { NIcon, NSpin, NScrollbar } from 'naive-ui';
  4. export default defineComponent({
  5. name: 'directory-main',
  6. setup() {
  7. const show = ref(true);
  8. const forms = reactive({
  9. expandedKey: null, // 展开
  10. selectKey: 16 // 选的
  11. });
  12. const treeList = ref([
  13. {
  14. key: 1,
  15. label: '第1课 好朋友',
  16. selected: false,
  17. children: [
  18. {
  19. key: 10,
  20. label: '玩具兵进行曲'
  21. },
  22. {
  23. key: 11,
  24. label: '口哨与小狗'
  25. },
  26. {
  27. key: 12,
  28. label: ' 你的民在叫什么?'
  29. },
  30. {
  31. key: 13,
  32. label: '拉勾勾'
  33. },
  34. {
  35. key: 14,
  36. label: '唱歌姿势'
  37. }
  38. ]
  39. },
  40. {
  41. key: 2,
  42. label: '第2课 快乐的一天',
  43. selected: true,
  44. children: [
  45. {
  46. key: 15,
  47. label: '快乐的一天'
  48. },
  49. {
  50. key: 16,
  51. label: '其多列'
  52. },
  53. {
  54. key: 17,
  55. label: '跳绳'
  56. }
  57. ]
  58. },
  59. {
  60. key: 3,
  61. label: '第3课 祖国您好',
  62. selected: false,
  63. children: [
  64. {
  65. key: 18,
  66. label: '中华人民共和国国歌'
  67. },
  68. {
  69. key: 19,
  70. label: '颂祖国'
  71. },
  72. {
  73. key: 20,
  74. label: '国旗国旗真美丽'
  75. },
  76. {
  77. key: 21,
  78. label: '同唱一首歌'
  79. },
  80. {
  81. key: 22,
  82. label: '音的强弱'
  83. }
  84. ]
  85. },
  86. {
  87. key: 4,
  88. label: '第4课 可爱的动物',
  89. selected: false,
  90. children: [
  91. {
  92. key: 23,
  93. label: '快乐的小熊猫'
  94. },
  95. {
  96. key: 24,
  97. label: '袋鼠'
  98. },
  99. {
  100. key: 25,
  101. label: '动物说话'
  102. },
  103. {
  104. key: 26,
  105. label: '咏鹅'
  106. },
  107. {
  108. key: 27,
  109. label: '木鱼 碰钟'
  110. }
  111. ]
  112. },
  113. {
  114. key: 5,
  115. label: '第5课 爱劳动',
  116. selected: false,
  117. children: [
  118. {
  119. key: 28,
  120. label: '劳动最光荣'
  121. },
  122. {
  123. key: 29,
  124. label: '三个和尚'
  125. },
  126. {
  127. key: 30,
  128. label: '洗手绢'
  129. },
  130. {
  131. key: 31,
  132. label: '大家来劳动'
  133. }
  134. ]
  135. },
  136. {
  137. key: 6,
  138. label: '第6课 小精灵',
  139. selected: false,
  140. children: [
  141. {
  142. key: 32,
  143. label: '小青蛙'
  144. },
  145. {
  146. key: 33,
  147. label: '野蜂飞舞'
  148. },
  149. {
  150. key: 34,
  151. label: '小青蛙找家'
  152. },
  153. {
  154. key: 35,
  155. label: '小蜻蜓'
  156. },
  157. {
  158. key: 36,
  159. label: '响板'
  160. }
  161. ]
  162. },
  163. {
  164. key: 7,
  165. label: '游戏宫',
  166. selected: false,
  167. children: [
  168. {
  169. key: 37,
  170. label: '欢乐的游乐园'
  171. }
  172. ]
  173. },
  174. {
  175. key: 8,
  176. label: '第7课 小小音乐家',
  177. selected: false,
  178. children: [
  179. {
  180. key: 38,
  181. label: '号手与鼓手'
  182. },
  183. {
  184. key: 39,
  185. label: '会跳舞的洋娃娃'
  186. },
  187. {
  188. key: 40,
  189. label: '星光圆舞曲'
  190. },
  191. {
  192. key: 41,
  193. label: '法国号'
  194. },
  195. {
  196. key: 42,
  197. label: '快乐的小笛子'
  198. },
  199. {
  200. key: 43,
  201. label: '音的长短'
  202. }
  203. ]
  204. },
  205. {
  206. key: 9,
  207. label: '第8课 过新年',
  208. selected: false,
  209. children: [
  210. {
  211. key: 44,
  212. label: '小拜年'
  213. },
  214. {
  215. key: 45,
  216. label: '平安夜'
  217. },
  218. {
  219. key: 46,
  220. label: '龙咚锵'
  221. },
  222. {
  223. key: 47,
  224. label: '新年好'
  225. },
  226. {
  227. key: 48,
  228. label: '锣 鼓 镲'
  229. }
  230. ]
  231. },
  232. {
  233. key: -1,
  234. label: '欢乐谷',
  235. selected: false,
  236. children: [
  237. {
  238. key: 49,
  239. label: '小鼓响咚咚'
  240. },
  241. {
  242. key: 50,
  243. label: '我有一只小羊羔'
  244. },
  245. {
  246. key: 51,
  247. label: '大月亮'
  248. },
  249. {
  250. key: 52,
  251. label: '我的音乐表现'
  252. }
  253. ]
  254. }
  255. ]);
  256. setTimeout(() => {
  257. show.value = false;
  258. }, 100);
  259. return () => (
  260. <div class={styles.directoryList}>
  261. <div class={styles['select-directory']}>
  262. <span class={['cr-ellipsis']} title="人教版二年级上册(2013)">
  263. 人教版二年级上册(2013)
  264. </span>
  265. <NIcon class={styles.iconArrow}>
  266. <svg
  267. width="11px"
  268. height="15px"
  269. viewBox="0 0 11 15"
  270. version="1.1"
  271. xmlns="http://www.w3.org/2000/svg">
  272. <g
  273. stroke="none"
  274. stroke-width="1"
  275. fill="none"
  276. fill-rule="evenodd"
  277. opacity="0.699999988">
  278. <g
  279. transform="translate(-445.000000, -137.000000)"
  280. fill="#131415">
  281. <g transform="translate(152.000000, 120.000000)">
  282. <path
  283. d="M299.326227,20.2118001 L304.934089,28.4366632 C305.245211,28.8929759 305.127511,29.515105 304.671198,29.8262273 C304.505147,29.9394437 304.308836,30 304.107861,30 L292.892139,30 C292.339854,30 291.892139,29.5522847 291.892139,29 C291.892139,28.7990254 291.952695,28.6027139 292.065911,28.4366632 L297.673773,20.2118001 C297.984895,19.7554873 298.607024,19.6377872 299.063337,19.9489096 C299.16663,20.0193364 299.255801,20.1085074 299.326227,20.2118001 Z"
  284. id="三角形"
  285. transform="translate(298.500000, 24.500000) rotate(-270.000000) translate(-298.500000, -24.500000) "></path>
  286. </g>
  287. </g>
  288. </g>
  289. </svg>
  290. </NIcon>
  291. </div>
  292. <NScrollbar class={styles.scrollBar}>
  293. <NSpin show={show.value}>
  294. {treeList.value.map((item: any, index: number) => (
  295. <div class={styles.treeParent} key={'parent' + index}>
  296. <div
  297. class={[styles.treeItem, styles.parentItem]}
  298. onClick={() => {
  299. treeList.value.forEach((child: any) => {
  300. if (item.key !== child.key) {
  301. child.selected = false;
  302. }
  303. });
  304. item.selected = item.selected ? false : true;
  305. }}>
  306. {item.children && item.children.length > 0 && (
  307. <span
  308. class={[
  309. styles.arrow,
  310. item.selected ? styles.arrowSelect : ''
  311. ]}></span>
  312. )}
  313. <p
  314. class={[
  315. styles.title,
  316. item.selected ? styles.titleSelect : ''
  317. ]}>
  318. {item.label}
  319. </p>
  320. </div>
  321. {item.selected &&
  322. item.children &&
  323. item.children.map((child: any, j: number) => (
  324. <div
  325. key={'child' + j}
  326. class={[
  327. styles.treeItem,
  328. styles.childItem,
  329. styles.animation,
  330. forms.selectKey === child.key ? styles.childSelect : ''
  331. ]}
  332. onClick={() => {
  333. forms.selectKey = child.key;
  334. }}>
  335. <span class={styles.childArrow}></span>
  336. <p class={styles.title}>{child.label}</p>
  337. </div>
  338. ))}
  339. </div>
  340. ))}
  341. </NSpin>
  342. </NScrollbar>
  343. </div>
  344. );
  345. }
  346. });