一个全随机的刷装备小游戏
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

<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>