Files
SPlayer/src/views/Setting/general.vue
2024-05-24 11:01:42 +08:00

166 lines
4.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- 设置 - 常规 -->
<template>
<div class="set-type">
<n-h3 prefix="bar"> 常规 </n-h3>
<n-card class="set-item">
<div class="name">明暗模式</div>
<n-select
v-model:value="themeType"
:options="[
{
label: '浅色模式',
value: 'light',
},
{
label: '深色模式',
value: 'dark',
},
]"
class="set"
@update:value="themeAuto = false"
/>
</n-card>
<n-card class="set-item">
<div class="name">明暗模式是否跟随系统</div>
<n-switch
v-model:value="themeAuto"
:round="false"
@update:value="
(val) => {
if (val) themeType = osThemeRef;
}
"
/>
</n-card>
<n-card class="set-item">
<div class="name">
开启侧边栏
<n-text class="tip">将导航栏放于侧边显示可展开或收起</n-text>
</div>
<n-switch v-model:value="showSider" :round="false" />
</n-card>
<n-card class="set-item">
<div class="name">
侧边栏展示封面
<n-text class="tip">侧边栏歌单是否展示歌单封面</n-text>
</div>
<n-switch v-model:value="siderShowCover" :disabled="!showSider" :round="false" />
</n-card>
<n-card class="set-item">
<div class="name">显示搜索历史</div>
<n-switch v-model:value="showSearchHistory" :round="false" />
</n-card>
<n-card class="set-item">
<div class="name">
自动签到
<n-text class="tip">在每日首次开启软件时自动签到</n-text>
</div>
<n-switch v-model:value="autoSignIn" :round="false" />
</n-card>
<n-card class="set-item">
<div class="name">
<div class="dev">
全局动态取色
<n-tag :bordered="false" round size="small" type="warning">
开发中
<template #icon>
<n-icon>
<SvgIcon icon="code" />
</n-icon>
</template>
</n-tag>
</div>
<n-text class="tip">主题色是否跟随封面目前感觉不好看</n-text>
</div>
<n-switch
v-model:value="themeAutoCover"
:round="false"
:disabled="Object.keys(coverTheme)?.length === 0"
@update:value="themeAutoCoverChange"
/>
</n-card>
<n-card class="set-item">
<div class="name">
<div class="dev">
全局动态取色类别
<n-tag :bordered="false" round size="small" type="warning">
开发中
<template #icon>
<n-icon>
<SvgIcon icon="code" />
</n-icon>
</template>
</n-tag>
</div>
<n-text class="tip">将在下一首播放或刷新时生效不建议更改</n-text>
</div>
<n-select
v-model:value="themeAutoCoverType"
:disabled="!themeAutoCover"
:options="[
{
label: '中性',
value: 'neutral',
},
{
label: '中性变体',
value: 'neutralVariant',
},
{
label: '主要',
value: 'primary',
},
{
label: '次要',
value: 'secondary',
},
{
label: '次次要',
value: 'tertiary',
},
]"
class="set"
/>
</n-card>
<n-card class="set-item">
<div class="name">
隐藏 VIP 歌曲标签
<n-text class="tip">是否在歌曲列表中隐藏 VIP 歌曲标签</n-text>
</div>
<n-switch v-model:value="hiddenVipTags" :round="false" />
</n-card>
</div>
</template>
<script setup>
import { storeToRefs } from "pinia";
import { useOsTheme } from "naive-ui";
import { siteSettings, siteStatus } from "@/stores";
const status = siteStatus();
const settings = siteSettings();
const { coverTheme } = storeToRefs(status);
const {
themeType,
themeTypeName,
themeAuto,
themeAutoCover,
themeAutoCoverType,
showSider,
showSearchHistory,
autoSignIn,
siderShowCover,
hiddenVipTags,
} = storeToRefs(settings);
// 基础数据
const osThemeRef = useOsTheme();
// 封面自动跟随变化
const themeAutoCoverChange = (val) => {
if ($changeThemeColor !== "undefined" && Object.keys(coverTheme.value)?.length) {
$changeThemeColor(val ? coverTheme.value : themeTypeName.value, val);
}
};
</script>