kun-galgame-vue/src/components/setting-panel/KUNGalgameSettingPanel.vue

257 lines
5.3 KiB
Vue
Raw Normal View History

2023-05-14 16:30:24 +00:00
<!-- 设置面板组件展示整个论坛的设置面板 -->
2023-05-13 06:05:05 +00:00
<script setup lang="ts">
2023-05-25 18:30:13 +00:00
// 引入 vue 函数
import { watch } from 'vue'
2023-05-14 16:30:24 +00:00
// 引入图标字体
2023-05-13 06:05:05 +00:00
import { Icon } from '@iconify/vue'
2023-05-14 16:30:24 +00:00
// 引入看板娘组件
2023-05-13 06:05:05 +00:00
import Loli from './components/Loli.vue'
2023-05-14 16:30:24 +00:00
// 引入背景设置组件
2023-05-13 06:05:05 +00:00
import Background from './components/Background.vue'
2023-05-14 07:16:28 +00:00
// 导入设置面板 store
import { useKUNGalgameSettingsStore } from '@/store/modules/settings'
2023-05-14 07:16:28 +00:00
import { storeToRefs } from 'pinia'
2023-05-25 18:30:13 +00:00
// 导入 i18n
import { useI18n } from 'vue-i18n'
/*
* 网站的语言设置
*/
const { locale } = useI18n({ useScope: 'global' })
// 监听语言变化并将语言设置保存到localStorage
watch(locale, (newVal) => {
localStorage.setItem('KUNGalgame-locale', newVal)
})
const changeLanguage = () => {
2023-05-26 09:07:35 +00:00
locale.value = locale.value
2023-05-25 18:30:13 +00:00
}
2023-05-16 19:22:28 +00:00
2023-05-22 15:42:21 +00:00
/*
2023-05-26 09:07:35 +00:00
* 主页宽度设置
2023-05-22 15:42:21 +00:00
*/
2023-05-26 09:07:35 +00:00
2023-05-19 18:23:25 +00:00
// 使用设置面板的 store
const settingsStore = useKUNGalgameSettingsStore()
const { showKUNGalgamePanel, showKUNGalgameMainPageWidth } =
storeToRefs(settingsStore)
2023-05-26 09:07:35 +00:00
2023-05-27 10:52:54 +00:00
/* 恢复所有设置为默认 */
const handleRecover = () => {}
2023-05-26 09:07:35 +00:00
/*
* 设置面板显示切换
*/
2023-05-19 18:23:25 +00:00
2023-05-26 09:07:35 +00:00
// 关闭设置面板
2023-05-14 07:16:28 +00:00
const handleClose = () => {
showKUNGalgamePanel.value = false
2023-05-14 07:16:28 +00:00
}
2023-05-13 06:05:05 +00:00
</script>
<template>
2023-05-14 16:30:24 +00:00
<!-- 根元素 -->
2023-05-13 06:05:05 +00:00
<div class="root">
<div class="container">
<div class="title">
<span>{{ $t('header.settings.name') }}</span>
2023-05-19 18:23:25 +00:00
<span><Icon class="settings-icon" icon="uiw:setting-o" /></span>
2023-05-13 06:05:05 +00:00
</div>
<div class="mode">
2023-05-14 16:30:24 +00:00
<!-- 白天 / 黑夜模式切换 -->
<span>{{ $t('header.settings.mode') }}</span>
2023-05-13 06:05:05 +00:00
<div class="mode-container">
<li>
<Icon
class="sun"
icon="line-md:moon-filled-alt-to-sunny-filled-loop-transition"
/>
</li>
<li>
<Icon
class="moon"
icon="line-md:sunny-outline-to-moon-loop-transition"
2023-05-14 17:47:25 +00:00
/>
2023-05-13 06:05:05 +00:00
</li>
</div>
</div>
2023-05-20 16:16:15 +00:00
<div class="set-lang">
<span>{{ $t('header.settings.language') }}</span>
2023-05-26 09:07:35 +00:00
<select class="select" v-model="locale" @change="changeLanguage">
2023-05-20 16:16:15 +00:00
<option value="en">English</option>
<option value="zh">中文</option>
</select>
2023-05-20 15:17:46 +00:00
</div>
2023-05-13 06:05:05 +00:00
<div>
2023-05-14 16:30:24 +00:00
<!-- 设置主页的宽度 -->
2023-05-20 16:16:15 +00:00
<div class="width-container">
<span>{{ $t('header.settings.width') }}</span>
<span>{{ showKUNGalgameMainPageWidth }}%</span>
2023-05-20 16:16:15 +00:00
</div>
2023-05-13 06:05:05 +00:00
<div class="page-width">
2023-05-27 02:39:57 +00:00
<span>50%</span
2023-05-26 09:07:35 +00:00
><input
class="main"
2023-05-27 02:39:57 +00:00
min="50"
2023-05-26 09:07:35 +00:00
max="90"
step="0.1"
type="range"
v-model="showKUNGalgameMainPageWidth"
2023-05-26 09:07:35 +00:00
/><span>90%</span>
2023-05-13 06:05:05 +00:00
</div>
</div>
<!-- 背景设置组件 -->
<Background />
2023-05-20 15:17:46 +00:00
<div>
2023-05-27 10:52:54 +00:00
<button class="reset" @click="handleRecover">
{{ $t('header.settings.recover') }}
</button>
</div>
2023-05-13 06:05:05 +00:00
</div>
2023-05-20 14:59:41 +00:00
2023-05-13 06:05:05 +00:00
<!-- 看板娘组件 -->
2023-05-20 14:59:41 +00:00
<Loli class="loli" />
2023-05-13 10:56:56 +00:00
<!-- 关闭面板 -->
2023-05-20 14:59:41 +00:00
<div class="close">
2023-05-25 13:43:42 +00:00
<Icon @click="handleClose" icon="line-md:close" />
2023-05-17 15:56:47 +00:00
</div>
2023-05-13 06:05:05 +00:00
</div>
</template>
2023-05-25 07:55:30 +00:00
<style lang="scss" scoped>
2023-05-13 06:05:05 +00:00
/* 根容器 */
.root {
top: 65px;
right: 0;
2023-05-14 17:47:25 +00:00
position: absolute;
2023-05-25 07:55:30 +00:00
background-color: $kungalgame-trans-white-5;
2023-05-13 06:05:05 +00:00
backdrop-filter: blur(5px);
2023-05-25 07:55:30 +00:00
box-shadow: $shadow;
2023-05-13 06:05:05 +00:00
border-radius: 10px;
z-index: 1007;
display: flex;
}
.container {
position: relative;
margin: 20px;
font-size: 17px;
}
.title {
font-size: 23px;
display: flex;
justify-content: space-between;
align-items: center;
2023-05-19 18:23:25 +00:00
span {
display: flex;
align-items: center;
}
2023-05-13 06:05:05 +00:00
}
2023-05-20 16:16:15 +00:00
// 使设置按钮保持旋转
2023-05-13 06:05:05 +00:00
.settings-icon {
animation: settings 3s linear infinite;
}
@keyframes settings {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.mode {
margin: 20px 0;
display: flex;
align-items: center;
justify-content: space-between;
}
.mode-container {
font-size: 25px;
width: 60%;
display: flex;
justify-content: space-around;
2023-05-14 07:16:28 +00:00
li {
cursor: pointer;
}
2023-05-13 06:05:05 +00:00
li:nth-child(1) {
2023-05-25 07:55:30 +00:00
color: $kungalgame-red-4;
2023-05-13 06:05:05 +00:00
}
li:nth-child(2) {
2023-05-25 07:55:30 +00:00
color: $kungalgame-blue-4;
2023-05-13 06:05:05 +00:00
}
}
2023-05-20 16:16:15 +00:00
// 语言设置
.set-lang {
display: flex;
justify-content: space-between;
}
// 语言的选择框
.select {
width: 100px;
font-size: 16px;
2023-05-25 07:55:30 +00:00
border: 1px solid $kungalgame-blue-4;
background-color: $kungalgame-trans-white-9;
2023-05-20 16:16:15 +00:00
option {
2023-05-25 07:55:30 +00:00
background-color: $kungalgame-trans-white-9;
2023-05-20 16:16:15 +00:00
}
}
2023-05-13 06:05:05 +00:00
.page-width {
font-size: 15px;
display: flex;
span {
margin-top: 15px;
}
}
/* 主页页面宽度滑动条 */
.main {
width: 100%;
height: 10px;
margin: 20px 0;
}
/* 固定看板娘 */
2023-05-20 16:16:15 +00:00
.set-lang {
2023-05-20 15:17:46 +00:00
margin-bottom: 20px;
2023-05-20 16:16:15 +00:00
}
.width-container {
2023-05-13 06:05:05 +00:00
display: flex;
justify-content: space-between;
}
.reset {
font-size: 15px;
cursor: pointer;
margin-top: 20px;
2023-05-25 07:55:30 +00:00
border: 1px solid $kungalgame-red-4;
background-color: $kungalgame-trans-red-1;
2023-05-13 06:05:05 +00:00
width: 100%;
height: 30px;
&:hover {
2023-05-25 07:55:30 +00:00
background-color: $kungalgame-red-3;
color: $kungalgame-white;
2023-05-13 06:05:05 +00:00
}
}
2023-05-13 10:56:56 +00:00
.close {
font-size: 25px;
2023-05-17 15:56:47 +00:00
width: 270px;
2023-05-13 10:56:56 +00:00
display: flex;
justify-content: end;
margin: 20px;
cursor: pointer;
}
@media (max-width: 700px) {
.loli {
display: none;
}
.root {
width: 300px;
transition: 0.3s;
}
}
@media (max-height: 600px) {
.root {
right: -600px;
transition: 0.5s;
}
}
2023-05-13 06:05:05 +00:00
</style>