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