index.tsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import { NDropdown } from "naive-ui";
  2. import { defineComponent } from "vue";
  3. import styles from "./index.module.less";
  4. import { getImage } from "../../images";
  5. import { DropdownMixedOption } from "naive-ui/es/dropdown/src/interface";
  6. /** 新建 | 保存 | 导入 | 上传 | 导出 | 打印 | 退出*/
  7. export type IFileBtnType =
  8. | "newMusic"
  9. | "save"
  10. | "xml"
  11. | "upload"
  12. | "png"
  13. | "wav"
  14. | "midi"
  15. | "print"
  16. | "down-xml"
  17. | "exit";
  18. export default defineComponent({
  19. name: "FileBtn",
  20. emits: ["select"],
  21. setup(props, { emit }) {
  22. const options: DropdownMixedOption[] = [
  23. {
  24. label: () => (
  25. <div class={styles.dropItem}>
  26. <img class={styles.dropIcon} src={getImage("icon_26_4.png")} />
  27. <span>新建曲谱</span>
  28. </div>
  29. ),
  30. key: "newMusic",
  31. },
  32. {
  33. label: () => (
  34. <div class={styles.dropItem}>
  35. <img class={styles.dropIcon} src={getImage("icon_26_0.png")} />
  36. <span>保存</span>
  37. </div>
  38. ),
  39. key: "save",
  40. },
  41. {
  42. label: () => (
  43. <div class={styles.dropItem}>
  44. <img class={styles.dropIcon} src={getImage("icon_26_0.png")} />
  45. <span>导入</span>
  46. </div>
  47. ),
  48. key: "import",
  49. // disabled: true,
  50. children: [
  51. {
  52. label: "XML",
  53. key: "xml",
  54. // disabled: true,
  55. },
  56. ],
  57. },
  58. {
  59. label: () => (
  60. <div class={styles.dropItem}>
  61. <img class={styles.dropIcon} src={getImage("icon_26_1.png")} />
  62. <span>上传到我的资源</span>
  63. </div>
  64. ),
  65. key: "upload",
  66. disabled: true,
  67. },
  68. {
  69. label: () => (
  70. <div class={styles.dropItem}>
  71. <img class={styles.dropIcon} src={getImage("icon_26_2.png")} />
  72. <span>导出</span>
  73. </div>
  74. ),
  75. key: "export",
  76. children: [
  77. {
  78. label: "XML",
  79. key: "down-xml",
  80. },
  81. {
  82. label: "PNG",
  83. key: "png",
  84. },
  85. {
  86. label: "WAV",
  87. key: "wav",
  88. },
  89. {
  90. label: "MIDI",
  91. key: "midi",
  92. },
  93. ],
  94. },
  95. {
  96. label: () => (
  97. <div class={styles.dropItem}>
  98. <img class={styles.dropIcon} src={getImage("icon_26_3.png")} />
  99. <span>打印</span>
  100. </div>
  101. ),
  102. key: "print",
  103. disabled: true,
  104. },
  105. ];
  106. return () => (
  107. <NDropdown
  108. class={styles.dropWrap}
  109. options={options}
  110. trigger="click"
  111. onSelect={(val) => {
  112. console.log("🚀 ~ val:", val);
  113. emit("select", val);
  114. }}
  115. >
  116. <div class={styles.btnImg}>
  117. <img class={styles.topBtnIcon} src={getImage("icon_0.png")} />
  118. </div>
  119. </NDropdown>
  120. );
  121. },
  122. });