feat(admin): 所有后台页统一页头(标题+说明+刷新+主操作),新默认 logo 与站名字体

- 13 个后台页统一 page-head:左标题与一行说明,右侧刷新与主操作,刷新位置一致
- 渠道/并发/违禁词/订单/邀请日志/作品/首页内容/系统配置补齐或改写标题
- 违禁词与订单页改用统一 toolbar,订单筛选胶囊改下拉
- 站名字体改站酷快乐体(英文数字 5KB 子集 + 汉字按需加载)并加粗描边
- 默认 logo 重画:墨黑圆角方块 + 白色星芒 + 暖橙点,favicon 同步

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
2026-10-27 16:53:26 +08:00
co-authored by Devin
parent d49207b8f2
commit 98d1124f66
15 changed files with 143 additions and 89 deletions
+24 -19
View File
@@ -1,8 +1,7 @@
<script setup>
// Vivid mark: an open spectrum ring (lens/aperture) around a play triangle,
// with a shutter dot closing the gap — image + video in one glyph.
// Transparent background so it reads on both the dark and light shells.
// Colors follow the aurora palette (violet / pink / cyan).
// Default mark: an ink squircle holding a soft white sparkle (the "idea"),
// a small companion star and a warm dot — cute, and on-theme with the
// ink-black / warm-paper palette used across the site.
// Each instance gets unique gradient ids (useId) so multiple logos on one
// page don't share/clobber defs.
import { useId } from 'vue'
@@ -10,29 +9,35 @@ import { useId } from 'vue'
defineProps({ size: { type: [Number, String], default: 40 } })
const uid = useId()
const gRing = `vring-${uid}`
const gBg = `vbg-${uid}`
const gShine = `vshine-${uid}`
</script>
<template>
<svg :width="size" :height="size" viewBox="0 0 48 48" fill="none"
xmlns="http://www.w3.org/2000/svg" class="shrink-0">
<defs>
<linearGradient :id="gRing" x1="6" y1="6" x2="42" y2="42" gradientUnits="userSpaceOnUse">
<stop stop-color="#7c5cfc" />
<stop offset="0.5" stop-color="#e879f9" />
<stop offset="1" stop-color="#22d3ee" />
<linearGradient :id="gBg" x1="8" y1="4" x2="40" y2="44" gradientUnits="userSpaceOnUse">
<stop stop-color="#3f3f46" />
<stop offset="1" stop-color="#18181b" />
</linearGradient>
<linearGradient :id="gShine" x1="24" y1="3" x2="24" y2="24" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff" stop-opacity="0.14" />
<stop offset="0.9" stop-color="#fff" stop-opacity="0" />
</linearGradient>
</defs>
<g transform="translate(24 24)">
<!-- open ring: dash gap leaves room for the shutter dot -->
<circle r="17.5" fill="none" :stroke="`url(#${gRing})`" stroke-width="4.4"
stroke-linecap="round" stroke-dasharray="84 32" transform="rotate(-58)" />
<!-- play triangle = image + video -->
<path d="M-3 -6.5 L8.5 0 L-3 6.5 Z" fill="#7c5cfc" stroke="#111" stroke-width="1.4"
stroke-linejoin="round" />
<!-- shutter dot -->
<circle cx="13" cy="-13" r="4.2" fill="#22d3ee" stroke="#111" stroke-width="1.6" />
</g>
<!-- squircle tile -->
<rect x="2" y="2" width="44" height="44" rx="15" :fill="`url(#${gBg})`" />
<rect x="2" y="2" width="44" height="22" rx="15" :fill="`url(#${gShine})`" />
<!-- big sparkle -->
<path d="M22 11 Q23.4 22.6 35 24 Q23.4 25.4 22 37 Q20.6 25.4 9 24 Q20.6 22.6 22 11 Z"
fill="#fff" stroke="#fff" stroke-width="2.2" stroke-linejoin="round" />
<!-- small companion star -->
<path d="M35.5 9 Q36.2 13.8 41 14.5 Q36.2 15.2 35.5 20 Q34.8 15.2 30 14.5 Q34.8 13.8 35.5 9 Z"
fill="#fff" stroke="#fff" stroke-width="1.4" stroke-linejoin="round" opacity="0.92" />
<!-- warm dot -->
<circle cx="36" cy="36" r="2.6" fill="#fb923c" />
</svg>
</template>