menuDynamic.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <template>
  2. <div>
  3. <div class="mb-2">动态菜单</div>
  4. <div v-contextmenu:contextmenu class="wrapper">
  5. <code>右键点击此区域</code>
  6. </div>
  7. <v-contextmenu ref="contextmenu">
  8. <v-contextmenu-group title="操作">
  9. <v-contextmenu-item :hide-on-click="false" @click="extra.push('item')">
  10. 添加菜单
  11. </v-contextmenu-item>
  12. <v-contextmenu-item :hide-on-click="false" @click="extra.push('group')">
  13. 添加菜单组
  14. </v-contextmenu-item>
  15. <v-contextmenu-item
  16. :hide-on-click="false"
  17. @click="extra.push('submenu')"
  18. >
  19. 添加子菜单
  20. </v-contextmenu-item>
  21. <v-contextmenu-item :hide-on-click="false" @click="extra.pop()">
  22. 删除
  23. </v-contextmenu-item>
  24. </v-contextmenu-group>
  25. <template v-for="(item, index) of extra" :key="index">
  26. <v-contextmenu-divider />
  27. <v-contextmenu-group
  28. v-if="item === 'group'"
  29. :title="`菜单组 ${index + 1}`"
  30. >
  31. <v-contextmenu-item>菜单1</v-contextmenu-item>
  32. <v-contextmenu-item>菜单2</v-contextmenu-item>
  33. <v-contextmenu-item>菜单3</v-contextmenu-item>
  34. </v-contextmenu-group>
  35. <v-contextmenu-submenu
  36. v-else-if="item === 'submenu'"
  37. :title="`子菜单 ${index + 1}`"
  38. >
  39. <v-contextmenu-item>菜单1</v-contextmenu-item>
  40. <v-contextmenu-item>菜单2</v-contextmenu-item>
  41. <v-contextmenu-item>菜单3</v-contextmenu-item>
  42. </v-contextmenu-submenu>
  43. <v-contextmenu-item v-else>菜单 {{ index + 1 }}</v-contextmenu-item>
  44. </template>
  45. </v-contextmenu>
  46. </div>
  47. </template>
  48. <script lang="ts">
  49. import { defineComponent } from "vue";
  50. import {
  51. directive,
  52. Contextmenu,
  53. ContextmenuItem,
  54. ContextmenuDivider,
  55. ContextmenuSubmenu,
  56. ContextmenuGroup
  57. } from "v-contextmenu";
  58. export default defineComponent({
  59. name: "ExampleDynamic",
  60. components: {
  61. [Contextmenu.name]: Contextmenu,
  62. [ContextmenuItem.name]: ContextmenuItem,
  63. [ContextmenuDivider.name]: ContextmenuDivider,
  64. [ContextmenuSubmenu.name]: ContextmenuSubmenu,
  65. [ContextmenuGroup.name]: ContextmenuGroup
  66. },
  67. directives: {
  68. contextmenu: directive
  69. },
  70. data() {
  71. return {
  72. extra: []
  73. };
  74. },
  75. methods: {
  76. addItem(type = "item") {
  77. this.extra.push(type);
  78. },
  79. removeItem() {
  80. this.extra.pop();
  81. }
  82. }
  83. });
  84. </script>
  85. <style scoped>
  86. .wrapper {
  87. display: flex;
  88. align-items: center;
  89. justify-content: center;
  90. width: 300px;
  91. height: 200px;
  92. margin-bottom: 30px;
  93. background-color: rgb(90 167 164 / 20%);
  94. border: 3px dashed rgb(90 167 164 / 90%);
  95. border-radius: 8px;
  96. }
  97. </style>