index.vue 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <template>
  2. <PageWrapper title="右键菜单示例">
  3. <CollapseContainer title="Simple">
  4. <a-button type="primary" @contextmenu="handleContext"> Right Click on me </a-button>
  5. </CollapseContainer>
  6. <CollapseContainer title="Multiple" class="mt-4">
  7. <a-button type="primary" @contextmenu="handleMultipleContext"> Right Click on me </a-button>
  8. </CollapseContainer>
  9. </PageWrapper>
  10. </template>
  11. <script lang="ts">
  12. import { defineComponent } from 'vue';
  13. import { useContextMenu } from '/@/hooks/web/useContextMenu';
  14. import { CollapseContainer } from '/@/components/Container';
  15. import { useMessage } from '/@/hooks/web/useMessage';
  16. import { PageWrapper } from '/@/components/Page';
  17. export default defineComponent({
  18. components: { CollapseContainer, PageWrapper },
  19. setup() {
  20. const [createContextMenu] = useContextMenu();
  21. const { createMessage } = useMessage();
  22. function handleContext(e: MouseEvent) {
  23. createContextMenu({
  24. event: e,
  25. items: [
  26. {
  27. label: 'New',
  28. icon: 'bi:plus',
  29. handler: () => {
  30. createMessage.success('click new');
  31. },
  32. },
  33. {
  34. label: 'Open',
  35. icon: 'bx:bxs-folder-open',
  36. handler: () => {
  37. createMessage.success('click open');
  38. },
  39. },
  40. ],
  41. });
  42. }
  43. function handleMultipleContext(e: MouseEvent) {
  44. createContextMenu({
  45. event: e,
  46. items: [
  47. {
  48. label: 'New',
  49. icon: 'bi:plus',
  50. children: [
  51. {
  52. label: 'New1-1',
  53. icon: 'bi:plus',
  54. divider: true,
  55. children: [
  56. {
  57. label: 'New1-1-1',
  58. handler: () => {
  59. createMessage.success('click new');
  60. },
  61. },
  62. {
  63. label: 'New1-2-1',
  64. disabled: true,
  65. },
  66. ],
  67. },
  68. {
  69. label: 'New1-2',
  70. icon: 'bi:plus',
  71. },
  72. ],
  73. },
  74. ],
  75. });
  76. }
  77. return { handleContext, handleMultipleContext };
  78. },
  79. });
  80. </script>