mirror of
https://github.com/LifeArchiveProject/WeChatDataAnalysis.git
synced 2026-02-19 22:30:49 +08:00
improvement(wrapped-ui): 移除 VHS 主题并优化 DOS/CRT 视觉效果
- 主题系统收敛为 Modern/Game Boy/DOS(快捷键改为 F1-F3) - 删除 VHS 切换器与相关样式(卡片/控件/年份选择/图表等) - DOS 主题统一使用像素字体,减弱发光强度并细化扫描线/闪烁参数 - DOS 闪烁光标改由 WrappedCRTOverlay 渲染,避免全局样式副作用 - 移除热力图 vhs 配色分支
This commit is contained in:
@@ -1,34 +1,7 @@
|
||||
<template>
|
||||
<div class="year-selector" :class="selectorClass">
|
||||
<!-- Modern 风格:下拉菜单 -->
|
||||
<div v-if="theme === 'off'" class="year-modern">
|
||||
<div class="relative inline-flex items-center">
|
||||
<select
|
||||
class="appearance-none bg-transparent pr-5 pl-0 py-0.5 rounded-md wrapped-label text-xs text-[#00000066] text-right focus:outline-none focus-visible:ring-2 focus-visible:ring-[#07C160]/30 hover:bg-[#000000]/5 transition disabled:opacity-70 disabled:cursor-default"
|
||||
:disabled="years.length <= 1"
|
||||
:value="String(modelValue)"
|
||||
@change="onSelectChange"
|
||||
>
|
||||
<option v-for="y in years" :key="y" :value="String(y)">{{ y }}年</option>
|
||||
</select>
|
||||
<svg
|
||||
v-if="years.length > 1"
|
||||
class="pointer-events-none absolute right-1 w-3 h-3 text-[#00000066]"
|
||||
viewBox="0 0 20 20"
|
||||
fill="currentColor"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M5.23 7.21a.75.75 0 0 1 1.06.02L10 10.94l3.71-3.71a.75.75 0 1 1 1.06 1.06l-4.24 4.24a.75.75 0 0 1-1.06 0L5.21 8.29a.75.75 0 0 1 .02-1.08z"
|
||||
clip-rule="evenodd"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Game Boy 风格 -->
|
||||
<div v-else-if="theme === 'gameboy'" class="year-gameboy">
|
||||
<div v-if="theme === 'gameboy'" class="year-gameboy">
|
||||
<div class="gameboy-year-box">
|
||||
<button
|
||||
class="gameboy-arrow"
|
||||
@@ -65,27 +38,31 @@
|
||||
>[+]</button>
|
||||
</div>
|
||||
|
||||
<!-- VHS 风格 -->
|
||||
<div v-else-if="theme === 'vhs'" class="year-vhs">
|
||||
<button
|
||||
class="vhs-transport-btn"
|
||||
:disabled="!canGoPrev"
|
||||
@click="prevYear"
|
||||
aria-label="Previous year"
|
||||
>
|
||||
<span class="vhs-icon">◀◀</span>
|
||||
</button>
|
||||
<div class="vhs-led-display">
|
||||
<span class="vhs-led-digit">{{ modelValue }}</span>
|
||||
<!-- Modern 风格:下拉菜单(默认) -->
|
||||
<div v-else class="year-modern">
|
||||
<div class="relative inline-flex items-center">
|
||||
<select
|
||||
class="appearance-none bg-transparent pr-5 pl-0 py-0.5 rounded-md wrapped-label text-xs text-[#00000066] text-right focus:outline-none focus-visible:ring-2 focus-visible:ring-[#07C160]/30 hover:bg-[#000000]/5 transition disabled:opacity-70 disabled:cursor-default"
|
||||
:disabled="years.length <= 1"
|
||||
:value="String(modelValue)"
|
||||
@change="onSelectChange"
|
||||
>
|
||||
<option v-for="y in years" :key="y" :value="String(y)">{{ y }}年</option>
|
||||
</select>
|
||||
<svg
|
||||
v-if="years.length > 1"
|
||||
class="pointer-events-none absolute right-1 w-3 h-3 text-[#00000066]"
|
||||
viewBox="0 0 20 20"
|
||||
fill="currentColor"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M5.23 7.21a.75.75 0 0 1 1.06.02L10 10.94l3.71-3.71a.75.75 0 1 1 1.06 1.06l-4.24 4.24a.75.75 0 0 1-1.06 0L5.21 8.29a.75.75 0 0 1 .02-1.08z"
|
||||
clip-rule="evenodd"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<button
|
||||
class="vhs-transport-btn"
|
||||
:disabled="!canGoNext"
|
||||
@click="nextYear"
|
||||
aria-label="Next year"
|
||||
>
|
||||
<span class="vhs-icon">▶▶</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -263,72 +240,4 @@ onBeforeUnmount(() => {
|
||||
min-width: 50px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* ========== VHS 风格 ========== */
|
||||
.year-vhs {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
padding: 6px 10px;
|
||||
background: linear-gradient(180deg, #2a2a3e 0%, #1a1a2e 100%);
|
||||
border-radius: 4px;
|
||||
border: 1px solid #3a3a5e;
|
||||
}
|
||||
|
||||
.vhs-transport-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 28px;
|
||||
height: 22px;
|
||||
background: linear-gradient(180deg, #4a4a5e 0%, #2a2a3e 50%, #3a3a4e 100%);
|
||||
border: 1px solid #5a5a7e;
|
||||
border-radius: 3px;
|
||||
color: #cccccc;
|
||||
font-size: 8px;
|
||||
cursor: pointer;
|
||||
box-shadow:
|
||||
0 2px 0 #1a1a2e,
|
||||
inset 0 1px 0 rgba(255,255,255,0.2);
|
||||
transition: all 0.05s;
|
||||
}
|
||||
|
||||
.vhs-transport-btn:hover:not(:disabled) {
|
||||
background: linear-gradient(180deg, #5a5a6e 0%, #3a3a4e 50%, #4a4a5e 100%);
|
||||
}
|
||||
|
||||
.vhs-transport-btn:active:not(:disabled) {
|
||||
transform: translateY(2px);
|
||||
box-shadow:
|
||||
0 0 0 #1a1a2e,
|
||||
inset 0 1px 2px rgba(0,0,0,0.3);
|
||||
}
|
||||
|
||||
.vhs-transport-btn:disabled {
|
||||
opacity: 0.3;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.vhs-icon {
|
||||
letter-spacing: -2px;
|
||||
}
|
||||
|
||||
.vhs-led-display {
|
||||
background: #0a0a0a;
|
||||
border: 1px solid #3a3a3a;
|
||||
padding: 4px 10px;
|
||||
border-radius: 2px;
|
||||
box-shadow: inset 0 1px 3px rgba(0,0,0,0.5);
|
||||
}
|
||||
|
||||
.vhs-led-digit {
|
||||
font-family: 'Courier New', monospace;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
color: #ff3333;
|
||||
text-shadow:
|
||||
0 0 4px #ff3333,
|
||||
0 0 8px #ff3333;
|
||||
letter-spacing: 2px;
|
||||
}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user