miniMap.vue 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <template>
  2. <teleport v-show="show" v-if="ifShow" :to="refMiniMap">
  3. <span class="button-switch" @click.stop="toggleMap">
  4. <i
  5. class="iconfont ui-kankan-icon icon tip-h-center tip-v-bottom icon-show_map_collect iconzm-show_map_collect"
  6. />
  7. </span>
  8. <div v-if="showDollhouse" class="change" @click="changeMode">
  9. <i
  10. class="iconfont ui-kankan-icon icon tip-h-center tip-v-bottom icon-show_3d_normal iconzm-show_3d_normal"
  11. />
  12. <span> 3D模型</span>
  13. </div>
  14. </teleport>
  15. </template>
  16. <script lang="ts">
  17. import { defineComponent, onMounted, watchEffect, ref } from "vue";
  18. import { propTypes } from "/@/utils/propTypes";
  19. const refMiniMap = ref<Nullable<string>>(null);
  20. const ifShow = ref(false);
  21. const isCollapse = ref(false);
  22. export default defineComponent({
  23. name: "minMap",
  24. props: {
  25. show: propTypes.bool.def(true),
  26. showDollhouse: propTypes.bool.def(false),
  27. to: {
  28. type: String as PropType<Nullable<string>>,
  29. default: null,
  30. },
  31. },
  32. emits: ["changeMode", "toggleMap"],
  33. setup(props, { emit }) {
  34. onMounted(() => {
  35. watchEffect(() => {
  36. if (props.to?.length) {
  37. ifShow.value = true;
  38. refMiniMap.value = props.to;
  39. }
  40. });
  41. });
  42. const toggleMap = () => {
  43. isCollapse.value = !isCollapse.value;
  44. emit("toggleMap", isCollapse.value);
  45. let $minmap = document.querySelector("[xui_min_map]");
  46. if ($minmap) {
  47. if (!isCollapse.value) {
  48. $minmap.classList.remove("collapse");
  49. } else {
  50. $minmap.classList.add("collapse");
  51. }
  52. }
  53. };
  54. const changeMode = () => {
  55. emit("changeMode", "dollhouse");
  56. };
  57. return {
  58. toggleMap,
  59. changeMode,
  60. refMiniMap,
  61. ifShow,
  62. };
  63. },
  64. });
  65. </script>