2023-05-14 16:30:24 +00:00
|
|
|
|
<!-- 设置面板组件,展示整个论坛的设置面板 -->
|
2023-05-13 06:05:05 +00:00
|
|
|
|
<script setup lang="ts">
|
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 { useSettingsPanelStore } from '@/store/modules/settings'
|
|
|
|
|
import { storeToRefs } from 'pinia'
|
2023-05-16 19:22:28 +00:00
|
|
|
|
// 导入看板娘 hook
|
|
|
|
|
import { useFixedLoli } from '@/hooks/useFixedLoli'
|
2023-05-14 07:16:28 +00:00
|
|
|
|
|
2023-05-16 17:14:14 +00:00
|
|
|
|
// 获取 localeStorage 中的看板娘信息
|
|
|
|
|
|
2023-05-14 16:30:24 +00:00
|
|
|
|
// 使用设置面板的 store
|
2023-05-14 07:16:28 +00:00
|
|
|
|
const settingsStore = useSettingsPanelStore()
|
2023-05-16 19:22:28 +00:00
|
|
|
|
|
|
|
|
|
// 使用全局固定看板娘的 hook
|
2023-05-17 05:41:58 +00:00
|
|
|
|
const {
|
|
|
|
|
kungalgameLoliStatus,
|
|
|
|
|
kungalgameLoliPositionX,
|
|
|
|
|
kungalgameLoliPositionY,
|
|
|
|
|
setLoli,
|
|
|
|
|
setLoliX,
|
|
|
|
|
setLoliY,
|
|
|
|
|
initLoli,
|
|
|
|
|
} = useFixedLoli()
|
2023-05-16 19:22:28 +00:00
|
|
|
|
|
|
|
|
|
// 初始化看板娘
|
|
|
|
|
initLoli()
|
|
|
|
|
|
|
|
|
|
let { showSettings } = storeToRefs(settingsStore)
|
2023-05-14 07:16:28 +00:00
|
|
|
|
const handleClose = () => {
|
|
|
|
|
showSettings.value = false
|
|
|
|
|
}
|
2023-05-14 16:30:24 +00:00
|
|
|
|
|
2023-05-16 19:22:28 +00:00
|
|
|
|
let checked = kungalgameLoliStatus.value === 'true'
|
|
|
|
|
|
2023-05-14 16:30:24 +00:00
|
|
|
|
// 用户点击固定看板娘
|
2023-05-14 18:14:02 +00:00
|
|
|
|
const handleClick = () => {
|
2023-05-17 05:41:58 +00:00
|
|
|
|
if (!checked) {
|
|
|
|
|
setLoli('true')
|
2023-05-16 19:22:28 +00:00
|
|
|
|
} else {
|
2023-05-17 05:41:58 +00:00
|
|
|
|
setLoli('false')
|
2023-05-16 19:22:28 +00:00
|
|
|
|
}
|
2023-05-14 18:14:02 +00:00
|
|
|
|
}
|
2023-05-17 05:41:58 +00:00
|
|
|
|
// 看板娘的位置数据
|
|
|
|
|
let loliPositionX = parseFloat(kungalgameLoliPositionX.value)
|
|
|
|
|
let loliPositionY = parseFloat(kungalgameLoliPositionY.value)
|
|
|
|
|
|
|
|
|
|
// 看板娘的位置样式
|
|
|
|
|
const loliPosition = {
|
|
|
|
|
left: `${loliPositionX}px`,
|
|
|
|
|
top: `${loliPositionY}px`,
|
|
|
|
|
}
|
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>设置面板</span><Icon class="settings-icon" icon="uiw:setting-o" />
|
|
|
|
|
</div>
|
|
|
|
|
<div class="mode">
|
2023-05-14 16:30:24 +00:00
|
|
|
|
<!-- 白天 / 黑夜模式切换 -->
|
2023-05-13 06:05:05 +00:00
|
|
|
|
<span>模式切换</span>
|
|
|
|
|
<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>
|
|
|
|
|
<div>
|
2023-05-14 16:30:24 +00:00
|
|
|
|
<!-- 设置主页的宽度 -->
|
2023-05-13 06:05:05 +00:00
|
|
|
|
<span>主页页面宽度设置</span>
|
|
|
|
|
<div class="page-width">
|
|
|
|
|
<span>61.8%</span><input class="main" type="range" value="0" /><span
|
|
|
|
|
>90%</span
|
|
|
|
|
>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- 背景设置组件 -->
|
|
|
|
|
<Background />
|
2023-05-14 16:30:24 +00:00
|
|
|
|
<div class="fix-loli">
|
2023-05-14 18:14:02 +00:00
|
|
|
|
<!-- 处理固定看板娘按钮点击事件,点击切换是否固定看板娘 -->
|
2023-05-16 19:22:28 +00:00
|
|
|
|
<span>是否固定看板娘</span>
|
|
|
|
|
<input
|
|
|
|
|
class="switch-input"
|
|
|
|
|
type="checkbox"
|
|
|
|
|
id="switch"
|
|
|
|
|
v-model="checked"
|
|
|
|
|
/><label class="switch-label" @click="handleClick" for="switch"></label>
|
2023-05-14 16:30:24 +00:00
|
|
|
|
</div>
|
2023-05-13 06:05:05 +00:00
|
|
|
|
<div><button class="reset">恢复所有设置为默认</button></div>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- 看板娘组件 -->
|
2023-05-14 18:14:02 +00:00
|
|
|
|
<!-- 此处使用 Teleport,如果固定看板娘,则将看板娘传送到根组件,传送的状态使用全局 store 中的 showFixedLoli -->
|
2023-05-16 19:22:28 +00:00
|
|
|
|
<Teleport to="body" :disabled="kungalgameLoliStatus === 'false'">
|
2023-05-17 05:41:58 +00:00
|
|
|
|
<Loli class="loli" :style="loliPosition" @get-position="getPosition" />
|
2023-05-14 16:30:24 +00:00
|
|
|
|
</Teleport>
|
2023-05-13 10:56:56 +00:00
|
|
|
|
<!-- 关闭面板 -->
|
|
|
|
|
<div class="close"><Icon @click="handleClose" icon="line-md:close" /></div>
|
2023-05-13 06:05:05 +00:00
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<style lang="less" scoped>
|
|
|
|
|
/* 根容器 */
|
|
|
|
|
.root {
|
|
|
|
|
width: 600px;
|
|
|
|
|
top: 65px;
|
|
|
|
|
right: 0;
|
2023-05-14 17:47:25 +00:00
|
|
|
|
position: absolute;
|
2023-05-13 06:05:05 +00:00
|
|
|
|
background-color: @kungalgame-trans-white-5;
|
|
|
|
|
backdrop-filter: blur(5px);
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
.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) {
|
|
|
|
|
color: @kungalgame-red-4;
|
|
|
|
|
}
|
|
|
|
|
li:nth-child(2) {
|
|
|
|
|
color: @kungalgame-blue-4;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.page-width {
|
|
|
|
|
font-size: 15px;
|
|
|
|
|
display: flex;
|
|
|
|
|
span {
|
|
|
|
|
margin-top: 15px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* 主页页面宽度滑动条 */
|
|
|
|
|
.main {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 10px;
|
|
|
|
|
margin: 20px 0;
|
|
|
|
|
}
|
|
|
|
|
/* 固定看板娘 */
|
|
|
|
|
.fix-loli {
|
|
|
|
|
margin-top: 50px;
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
}
|
2023-05-16 19:22:28 +00:00
|
|
|
|
.switch-input {
|
|
|
|
|
height: 0;
|
|
|
|
|
width: 0;
|
|
|
|
|
visibility: hidden;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.switch-label {
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
text-indent: -9999px;
|
|
|
|
|
width: 50px;
|
|
|
|
|
height: 27px;
|
|
|
|
|
background: @kungalgame-trans-blue-2;
|
|
|
|
|
display: block;
|
|
|
|
|
border-radius: 100px;
|
|
|
|
|
position: relative;
|
|
|
|
|
&:after {
|
|
|
|
|
content: '';
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 2px;
|
|
|
|
|
left: 2px;
|
|
|
|
|
width: 23px;
|
|
|
|
|
height: 23px;
|
|
|
|
|
background: @kungalgame-white;
|
|
|
|
|
border-radius: 15px;
|
|
|
|
|
transition: 0.3s;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.switch-input:checked + .switch-label {
|
|
|
|
|
background: @kungalgame-blue-4;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.switch-input:checked + .switch-label:after {
|
|
|
|
|
left: calc(100% - 2px);
|
|
|
|
|
transform: translateX(-100%);
|
|
|
|
|
}
|
2023-05-13 06:05:05 +00:00
|
|
|
|
.reset {
|
|
|
|
|
font-size: 15px;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
margin-top: 20px;
|
|
|
|
|
border: 1px solid @kungalgame-red-4;
|
|
|
|
|
background-color: @kungalgame-trans-red-1;
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 30px;
|
|
|
|
|
&:hover {
|
|
|
|
|
background-color: @kungalgame-red-3;
|
|
|
|
|
color: @kungalgame-white;
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-05-13 10:56:56 +00:00
|
|
|
|
.close {
|
|
|
|
|
font-size: 25px;
|
|
|
|
|
width: 100%;
|
|
|
|
|
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>
|