index.tsx 3.6 KB

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