index.tsx 2.7 KB

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