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.
103 lines
2.5 KiB
103 lines
2.5 KiB
<template> |
|
|
|
<Tooltip :infos="[t('version.0')]" width="8rem"> |
|
<img class="menu-img" :src="menu_icons.extras" @click="showMenu"> |
|
</Tooltip> |
|
|
|
<Drawer v-model="showVersion" :width="state.mobile ? '100%' : '35%'"> |
|
<UpdateLog /> |
|
</Drawer> |
|
|
|
<Dialog :title="t('update.0')" v-model="showUpdate" top="5rem" :left="state.mobile ? '2rem' : '5rem'"> |
|
<div class="nitofy"> |
|
<div class="confirm">{{ t('update.1') }}</div> |
|
<div class="msg" v-if="message">{{ message }}</div> |
|
<div class="btns"> |
|
<button class="button" @click="refresh">{{ t('update.2') }}</button> |
|
<button class="button" @click="showUpdate = false">{{ t('update.3') }}</button> |
|
</div> |
|
</div> |
|
</Dialog> |
|
</template> |
|
|
|
<script lang="ts" setup> |
|
import { useStore } from "vuex"; |
|
import { onBeforeUnmount, onMounted, ref, computed } from "vue"; |
|
import { useI18n } from "vue3-i18n"; |
|
import { openWebSocket, registerHandler } from "@/tool/websocket"; |
|
import Dialog from "@/components/dialog.vue"; |
|
import { Tooltip, Drawer } from "@/components"; |
|
import { menu_icons } from "@/config"; |
|
import { uuid } from "@/tool"; |
|
import UpdateLog from "./update-log.vue"; |
|
|
|
const { t } = useI18n(); |
|
const { state, commit, dispatch } = useStore(); |
|
const showUpdate = ref(false); |
|
const showVersion = computed(() => { |
|
return state.curMenu == 'version'; |
|
}); |
|
const message = ref(''); |
|
|
|
let url = 'ws://' + window.location.host; |
|
if (process.env.VUE_APP_BASE_URL) { |
|
url = 'ws://' + process.env.VUE_APP_BASE_URL.substring(7); |
|
} |
|
url += '/websocket/' + uuid(); |
|
openWebSocket(url); |
|
|
|
const refresh = () => { |
|
dispatch('saveGame'); |
|
window.location.reload(); |
|
} |
|
|
|
const onUpdate = (msg) => { |
|
message.value = msg; |
|
showUpdate.value = true; |
|
} |
|
registerHandler('update', 'version', onUpdate) |
|
|
|
const showMenu = () => { |
|
state.curMenu = showVersion.value ? null : 'version'; |
|
} |
|
|
|
const keydown = (e) => { |
|
if (e.keyCode == 85 && !e.ctrlKey) { |
|
showMenu(); |
|
} |
|
} |
|
|
|
onMounted(() => { |
|
document.addEventListener('keydown', keydown); |
|
}); |
|
onBeforeUnmount(() => { |
|
document.removeEventListener('keydown', keydown); |
|
}) |
|
</script> |
|
<style lang="scss" scoped> |
|
.nitofy { |
|
width: 25rem; |
|
padding: 0.5rem; |
|
} |
|
|
|
.confirm { |
|
width: 100%; |
|
font-size: 1.2rem; |
|
text-align: start; |
|
} |
|
|
|
.msg { |
|
color: #d1cfcf; |
|
width: 100%; |
|
white-space: normal; |
|
word-break: break-all; |
|
overflow: hidden; |
|
padding: 1rem; |
|
} |
|
|
|
@media only screen and (max-width: 768px) { |
|
.nitofy { |
|
width: 23rem; |
|
} |
|
} |
|
</style> |