style(ui): 优化更新弹窗样式并替换应用图标资源

1.  将About页面的图标资源从svg替换为png格式
2.  重构更新弹窗布局,调整弹窗尺寸与滚动区域
3.  调整进度条与底部操作区的排版,优化按钮尺寸
4.  删除冗余的样式代码与废弃的svg图标文件
This commit is contained in:
Yuhang Wu 2026-08-25 14:39:09 +08:00
parent d5cbd1e55c
commit eb65b0d63d
4 changed files with 26 additions and 142 deletions

View File

@ -1,115 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024">
<defs>
<!-- Soft ambient glow behind the book -->
<radialGradient id="ambient" cx="50%" cy="50%" r="50%">
<stop offset="0%" stop-color="#FFFFFF" stop-opacity="0.08"/>
<stop offset="70%" stop-color="#FFFFFF" stop-opacity="0.03"/>
<stop offset="100%" stop-color="#FFFFFF" stop-opacity="0"/>
</radialGradient>
<!-- Matte paper sheen for the open pages -->
<linearGradient id="pageL" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="#FDFDFD"/>
<stop offset="55%" stop-color="#FFFFFF"/>
<stop offset="100%" stop-color="#ECEDF0"/>
</linearGradient>
<linearGradient id="pageR" x1="100%" y1="0%" x2="0%" y2="0%">
<stop offset="0%" stop-color="#FDFDFD"/>
<stop offset="55%" stop-color="#FFFFFF"/>
<stop offset="100%" stop-color="#ECEDF0"/>
</linearGradient>
<!-- Purple ghost mark -->
<linearGradient id="ghost" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#667EEA" stop-opacity="0.55"/>
<stop offset="100%" stop-color="#667EEA" stop-opacity="0.35"/>
</linearGradient>
<!-- Soft edge light around the book -->
<filter id="softglow" x="-40%" y="-40%" width="180%" height="180%">
<feGaussianBlur stdDeviation="14" result="blur"/>
</filter>
<filter id="shadow" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="26" result="blur"/>
</filter>
<!-- Clip to rounded square -->
<clipPath id="tile">
<rect x="0" y="0" width="1024" height="1024" rx="224"/>
</clipPath>
</defs>
<!-- Pure black tile -->
<g clip-path="url(#tile)">
<rect x="0" y="0" width="1024" height="1024" fill="#000000"/>
<rect x="0" y="0" width="1024" height="1024" fill="url(#ambient)"/>
<!-- Floor shadow -->
<ellipse cx="512" cy="760" rx="300" ry="56" fill="#000000" opacity="0.9" filter="url(#shadow)"/>
<!-- ==== OPEN BOOK (centered ~70%) ==== -->
<g>
<!-- Book spine shadow -->
<rect x="500" y="330" width="24" height="330" fill="#000000" opacity="0.06" filter="url(#softglow)"/>
<!-- Left cover / back board -->
<path d="M512 340 C 400 312, 292 320, 232 348 L 232 672 C 292 644, 400 636, 512 664 Z"
fill="#EFEFF2" filter="url(#softglow)"/>
<!-- Right cover / back board -->
<path d="M512 340 C 624 312, 732 320, 792 348 L 792 672 C 732 644, 624 636, 512 664 Z"
fill="#EFEFF2" filter="url(#softglow)"/>
<!-- Left page (curled up, reading posture) -->
<path d="M512 322 C 408 298, 304 306, 246 334
L 246 654 C 304 626, 408 618, 512 650 Z"
fill="url(#pageL)"/>
<!-- Left page top edge curl highlight -->
<path d="M512 322 C 408 298, 304 306, 246 334"
fill="none" stroke="#FFFFFF" stroke-width="6" stroke-linecap="round" opacity="0.9"/>
<!-- Right page (curled up, reading posture) -->
<path d="M512 322 C 616 298, 720 306, 778 334
L 778 654 C 720 626, 616 618, 512 650 Z"
fill="url(#pageR)"/>
<!-- Right page top edge curl highlight -->
<path d="M512 322 C 616 298, 720 306, 778 334"
fill="none" stroke="#FFFFFF" stroke-width="6" stroke-linecap="round" opacity="0.9"/>
<!-- Center crease -->
<path d="M512 322 L 512 650"
fill="none" stroke="#DCDDE0" stroke-width="4" opacity="0.7"/>
<!-- Page rim light (soft glow at edges) -->
<path d="M246 334 L 246 654" stroke="#FFFFFF" stroke-width="2" opacity="0.8"/>
<path d="M778 334 L 778 654" stroke="#FFFFFF" stroke-width="2" opacity="0.8"/>
</g>
<!-- ==== GHOST MARK (translucent purple) ==== -->
<g opacity="0.92">
<!-- Ghost body -->
<path d="M512 400
C 552 400, 580 428, 580 468
L 580 540
C 580 548, 574 554, 566 554
C 558 554, 552 548, 552 540
L 552 546
C 552 554, 546 560, 538 560
C 530 560, 524 554, 524 546
L 524 554
C 524 562, 518 568, 510 568
C 502 568, 496 562, 496 554
L 496 540
C 444 540, 444 462, 466 426
C 484 402, 500 400, 512 400 Z"
fill="url(#ghost)" filter="url(#softglow)"/>
<!-- Ghost eyes -->
<ellipse cx="486" cy="452" rx="9" ry="12" fill="#667EEA" opacity="0.6"/>
<ellipse cx="538" cy="452" rx="9" ry="12" fill="#667EEA" opacity="0.6"/>
</g>
<!-- Edge light wrap (elegant rim) -->
<path d="M512 322 C 408 298, 304 306, 246 334"
fill="none" stroke="#FFFFFF" stroke-width="1.5" opacity="0.35" filter="url(#softglow)"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 MiB

View File

@ -1,31 +1,29 @@
<template>
<n-modal :show="showUpdateModal" preset="card" :title="modalTitle" :bordered="false" :closable="!busy"
:mask-closable="false" :close-on-esc="false" style="width: 430px" @close="cancelUpdate">
:mask-closable="false" :close-on-esc="false" content-scrollable :segmented="{ content: true, footer: true }"
:style="{ width: '60vw', height: '50vh' }" @close="cancelUpdate">
<template #header-extra>
<span v-if="updateInfo" class="update-current">当前 v{{ updateInfo.currentVersion }}</span>
</template>
<div class="update-body">
<n-scrollbar class="update-scroll">
<div v-if="renderedBody" class="markdown-body" v-html="renderedBody" />
<n-empty v-else description="暂无更新说明" />
</n-scrollbar>
</div>
<div v-if="downloading || installing" class="update-progress">
<n-progress type="line" :percentage="progress" :processing="downloading" indicator-placement="inside"
:height="18" />
<div class="progress-hint">{{ progressHint }}</div>
</div>
<div v-if="renderedBody" class="markdown-body" v-html="renderedBody" />
<n-empty v-else description="暂无更新说明" />
<template #footer>
<div class="update-footer">
<n-button quaternary :disabled="busy" @click="skipVersion">跳过此版本</n-button>
<div class="update-footer-right">
<n-button v-if="!busy" @click="cancelUpdate">取消</n-button>
<n-button type="primary" :loading="downloading" @click="startUpdate">
{{ installing ? "安装中..." : downloading ? "下载中..." : "立即更新" }}
</n-button>
<div v-if="downloading || installing" class="update-progress">
<n-progress type="line" :percentage="progress" :processing="downloading" indicator-placement="inside"
:height="18" />
<div class="progress-hint">{{ progressHint }}</div>
</div>
<div class="update-footer-actions">
<n-button quaternary size="small" :disabled="busy" @click="skipVersion">跳过此版本</n-button>
<div class="update-footer-right">
<n-button size="small" v-if="!busy" @click="cancelUpdate">取消</n-button>
<n-button size="small" type="primary" :loading="downloading" @click="startUpdate">
{{ installing ? "安装中..." : downloading ? "下载中..." : "立即更新" }}
</n-button>
</div>
</div>
</div>
</template>
@ -77,12 +75,6 @@ const progressHint = computed(() => {
color: var(--color-text-secondary);
}
.update-body {
.update-scroll {
height: 340px;
}
}
.markdown-body {
padding-right: 8px;
font-size: 13px;
@ -198,7 +190,7 @@ const progressHint = computed(() => {
}
.update-progress {
margin-top: 12px;
width: 100%;
}
.progress-hint {
@ -209,6 +201,13 @@ const progressHint = computed(() => {
}
.update-footer {
display: flex;
flex-direction: column;
gap: 12px;
width: 100%;
}
.update-footer-actions {
display: flex;
align-items: center;
justify-content: space-between;

View File

@ -76,7 +76,7 @@ import {
SyncOutlined,
ThunderboltOutlined,
} from "@vicons/antd"
import appIcon from "../../../app-icon.svg"
import appIcon from "../../../app-icon.png"
import { checkAndPrompt } from "@/utils/updater"
const message = useMessage()