Files
AlgerMusicPlayer/src/renderer/layout/components/TitleBar.vue

122 lines
2.4 KiB
Vue
Raw Normal View History

2023-12-18 19:39:36 +08:00
<template>
2024-01-02 22:19:39 +08:00
<div id="title-bar" @mousedown="drag">
2023-12-18 19:39:36 +08:00
<div id="title">Alger Music</div>
<div id="buttons">
<button @click="minimize">
<i class="iconfont icon-minisize"></i>
</button>
<button @click="close">
<i class="iconfont icon-close"></i>
</button>
</div>
</div>
<n-modal
v-model:show="showCloseModal"
preset="dialog"
title="关闭应用"
:style="{ width: '400px' }"
:mask-closable="true"
>
<div class="close-dialog-content">
<p>请选择关闭方式</p>
<div class="remember-choice">
<n-checkbox v-model:checked="rememberChoice">记住我的选择</n-checkbox>
</div>
</div>
<template #action>
<div class="dialog-footer">
<n-button type="primary" @click="handleAction('minimize')">最小化到托盘</n-button>
<n-button @click="handleAction('close')">退出应用</n-button>
</div>
</template>
</n-modal>
2023-12-18 19:39:36 +08:00
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { useStore } from 'vuex';
2025-01-10 22:49:55 +08:00
import { isElectron } from '@/utils';
const store = useStore();
const showCloseModal = ref(false);
const rememberChoice = ref(false);
2023-12-18 19:39:36 +08:00
const minimize = () => {
if (!isElectron) {
return;
}
window.api.minimize();
};
2023-12-18 19:39:36 +08:00
const handleAction = (action: 'minimize' | 'close') => {
if (rememberChoice.value) {
store.commit('setSetData', {
...store.state.setData,
closeAction: action
});
}
2025-01-10 22:49:55 +08:00
if (action === 'minimize') {
window.api.miniTray();
} else {
window.api.close();
}
showCloseModal.value = false;
};
2023-12-18 19:39:36 +08:00
const close = () => {
if (!isElectron) {
return;
}
2025-01-10 22:49:55 +08:00
const { closeAction } = store.state.setData;
if (closeAction === 'minimize') {
window.api.miniTray();
return;
}
2025-01-10 22:49:55 +08:00
if (closeAction === 'close') {
window.api.close();
return;
}
showCloseModal.value = true;
};
2023-12-18 19:39:36 +08:00
const drag = (event: MouseEvent) => {
if (!isElectron) {
return;
}
window.api.dragStart(event as unknown as string);
};
2023-12-18 19:39:36 +08:00
</script>
<style scoped lang="scss">
#title-bar {
-webkit-app-region: drag;
@apply flex justify-between px-6 py-2 select-none relative;
@apply text-dark dark:text-white;
2023-12-18 19:39:36 +08:00
z-index: 9999999;
}
#buttons {
@apply flex gap-4;
-webkit-app-region: no-drag;
}
button {
@apply text-gray-600 dark:text-gray-400 hover:text-green-500;
2023-12-18 19:39:36 +08:00
}
.close-dialog-content {
@apply flex flex-col gap-4;
}
.dialog-footer {
@apply flex gap-4 justify-end;
}
2023-12-18 19:39:36 +08:00
</style>