index.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <script setup lang="ts">
  2. import { ref } from "vue";
  3. import intro from "intro.js";
  4. import "intro.js/minified/introjs.min.css";
  5. type GuideStep = {
  6. element: HTMLElement;
  7. title: string;
  8. intro: string;
  9. position: "left" | "right" | "top" | "bottom";
  10. };
  11. defineOptions({
  12. name: "Guide"
  13. });
  14. const GUIDE_STEPS = [
  15. {
  16. element: document.querySelector(".sidebar-logo-container"),
  17. title: "项目名称和Logo",
  18. intro: "您可以在这里设置项目名称和Logo",
  19. position: "left"
  20. },
  21. {
  22. element: document.querySelector("#header-search"),
  23. title: "搜索菜单",
  24. intro: "您可以在这里搜索想要查看的菜单",
  25. position: "left"
  26. },
  27. {
  28. element: document.querySelector("#header-translation"),
  29. title: "国际化",
  30. intro: "您可以在这里进行语言切换",
  31. position: "left"
  32. },
  33. {
  34. element: document.querySelector("#full-screen"),
  35. title: "全屏",
  36. intro: "您可以在这里进行全屏切换",
  37. position: "left"
  38. },
  39. {
  40. element: document.querySelector("#header-notice"),
  41. title: "消息通知",
  42. intro: "您可以在这里查看管理员发送的消息",
  43. position: "left"
  44. },
  45. {
  46. element: document.querySelector(".set-icon"),
  47. title: "系统配置",
  48. intro: "您可以在这里查看系统配置",
  49. position: "left"
  50. },
  51. {
  52. element: document.querySelector(".tags-view"),
  53. title: "多标签页",
  54. intro: "这里是您访问过的页面的历史",
  55. position: "bottom"
  56. }
  57. ] as Partial<GuideStep>[];
  58. const tourOpen = ref(false);
  59. const onGuide = () => {
  60. intro()
  61. .setOptions({
  62. steps: GUIDE_STEPS
  63. })
  64. .start();
  65. };
  66. const onTour = () => {
  67. tourOpen.value = true;
  68. };
  69. </script>
  70. <template>
  71. <el-card shadow="never">
  72. <template #header>
  73. <div class="card-header">
  74. <span class="font-medium">
  75. 引导页常用于引导式介绍项目的基本功能或亮点
  76. </span>
  77. </div>
  78. <el-link
  79. class="mt-2"
  80. href="https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/guide/index.vue"
  81. target="_blank"
  82. >
  83. 代码位置 src/views/guide/index.vue
  84. </el-link>
  85. </template>
  86. <el-button @click="onGuide"> 打开引导页 (intro.js) </el-button>
  87. <el-button @click="onTour"> 打开引导页 (el-tour) </el-button>
  88. <el-tour v-model="tourOpen">
  89. <el-tour-step
  90. v-for="step in GUIDE_STEPS"
  91. :key="step.title"
  92. :target="() => step.element"
  93. :title="step.title"
  94. :description="step.intro"
  95. :placement="step.position"
  96. />
  97. </el-tour>
  98. </el-card>
  99. </template>