You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.5 KiB
58 lines
1.5 KiB
<template> |
|
<Tooltip :infos="[t('backpack')]" width="8rem"> |
|
<img class="menu-img" :src="menu_icons.backpack" @click="showMenu"> |
|
</Tooltip> |
|
|
|
<Dialog :title="t('backpack')" v-model="show" top="4rem" left='8%' @close="state.curMenu = null"> |
|
<Player /> |
|
<Grid @openEquipMenu="openEquipMenu" /> |
|
</Dialog> |
|
|
|
<EquipMenu ref="equipMenu" @closePack="show = false" /> |
|
|
|
</template> |
|
|
|
<script lang="ts" setup> |
|
import { useStore } from "vuex"; |
|
import { computed, onBeforeUnmount, onMounted, ref } from "vue"; |
|
import { useI18n } from "vue3-i18n"; |
|
import { Tooltip, Dialog } from "@/components" |
|
import { menu_icons } from "@/config"; |
|
import Grid from './grid.vue'; |
|
import EquipMenu from './equip-menu.vue'; |
|
import Player from './player.vue'; |
|
|
|
|
|
const { t } = useI18n(); |
|
const { state, commit, dispatch } = useStore(); |
|
|
|
const emit = defineEmits(['openMenu']) |
|
const show = computed(() => { |
|
return state.curMenu == 'backpack'; |
|
}); |
|
const equipMenu = ref(); |
|
|
|
const openEquipMenu = (idx, event) => { |
|
event.preventDefault(); |
|
commit('close_equip_tip'); |
|
equipMenu.value?.open(idx, event) |
|
} |
|
|
|
const showMenu = () => { |
|
state.curMenu = show.value ? null : 'backpack'; |
|
} |
|
const keydown = (e) => { |
|
if (e.keyCode == 66 && !e.ctrlKey) { |
|
showMenu(); |
|
} |
|
} |
|
|
|
onMounted(() => { |
|
showMenu(); |
|
document.addEventListener('keydown', keydown); |
|
}); |
|
onBeforeUnmount(() => { |
|
document.removeEventListener('keydown', keydown); |
|
}) |
|
</script> |
|
<style lang="scss" scoped></style> |