index.tsx 2.2 KB

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