fix(cms): 图库分组自由输入 + 前端筛选动态化;速通坞折叠防误触

用户实测三处:①照片分组写死 street/landscape 两选不能加——Sveltia select
无 creatable(文档核实),改 string 自由输入;前端筛选同步动态化(分组
从数据反向派生,[a-z0-9-] 命名的分组零配置自动出现筛选片),顺带排查全
后台其余 select:分轨/颜色/字体/来源均为语义契约(写死是安全设计)唯分
组该开放;②速通坞与编辑区抢点击(手机端尤甚)——改默认收起成一枚
26px 圆钮,点开才展开五入口,状态记忆+点外部收起;③翻译无按钮答疑:
英文版走构建链自动机翻(保存中文即出,无按钮是设计),仪表盘有覆盖数。
(同轮收编站长经 CMS 新增的图库照片 夜色金茂湾)

验证: pnpm astro build exit 0;config-check 通过;E2E 65/65(筛选断言适配动态 id);产物断言 f-g-landscape 数据派生

Spec: 2026-11-05_blog-5n-admin-deep-optimization

Co-authored-by: GLM-5.3
This commit is contained in:
wait4xandGLM-5.3 committed 2026-11-05 22:34:38 +08:00
1 parent 5d187e1240
commit ef2bd97267
4 files changed
+63 -25

No files matched your search

+43 -13
View File
@@ -9,23 +9,53 @@
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="manifest" href="./manifest.webmanifest" />
<style>
/* 速通坞(5n D1):日常要跳的五个入口常驻右上,不挡 Sveltia 主 UI(对话层 z 更高) */
#quick-dock{position:fixed;top:10px;right:12px;z-index:9000;display:flex;gap:4px;
font:12px/1 system-ui,sans-serif;opacity:.78;transition:opacity .2s}
#quick-dock:hover{opacity:1}
#quick-dock a{color:#5b6472;text-decoration:none;padding:4px 8px;border-radius:6px;background:rgba(127,131,140,.12)}
#quick-dock a:hover{color:#3454d1;background:rgba(52,84,209,.1)}
@media (max-width:720px){#quick-dock a:not(.qd-key){display:none}}
</style>
/* 速通坞(5n D1 + 用户实测防误触改版):默认收起成一枚小圆钮,
点开才展开五入口;开关状态存 localStorage(手机端默认必收起)。
收起态只有一个 26px 圆钮,不再与编辑区抢点击面。 */
#qd-toggle{position:fixed;top:10px;right:12px;z-index:9000;width:26px;height:26px;
border-radius:50%;border:1px solid rgba(127,131,140,.4);background:rgba(255,255,255,.85);
color:#5b6472;font:14px/1 system-ui,sans-serif;cursor:pointer;opacity:.6;transition:opacity .2s}
#qd-toggle:hover{opacity:1}
body[data-qd=open] #qd-toggle{background:rgba(52,84,209,.12);color:#3454d1;border-color:rgba(52,84,209,.4)}
#qd-links{position:fixed;top:44px;right:12px;z-index:9000;display:none;flex-direction:column;gap:4px;
font:12px/1 system-ui,sans-serif;padding:6px;border-radius:10px;background:rgba(255,255,255,.95);
box-shadow:0 2px 10px rgba(0,0,0,.12)}
body[data-qd=open] #qd-links{display:flex}
#qd-links a{color:#5b6472;text-decoration:none;padding:5px 10px;border-radius:6px;white-space:nowrap}
#qd-links a:hover{color:#3454d1;background:rgba(52,84,209,.08)}
</style>
</head>
<body>
<nav id="quick-dock" aria-label="快捷入口">
<a class="qd-key" href="https://wait4x.online/artalk/" target="_blank" rel="noopener">评论</a>
<a class="qd-key" href="./stats.html" target="_blank" rel="noopener">仪表盘</a>
<a href="https://git.wait4x.online/wait4x/blog" target="_blank" rel="noopener">仓库</a>
<a href="https://git.wait4x.online/wait4x/blog/src/branch/main/docs/%E5%90%8E%E5%8F%B0%E5%9B%9E%E6%BB%9A%E6%8C%87%E5%BC%95.md" target="_blank" rel="noopener">回滚</a>
<a href="https://git.wait4x.online/wait4x/blog/src/branch/main/docs/%E7%AE%A1%E7%90%86%E5%8F%B0.md" target="_blank" rel="noopener">手册</a>
<button id="qd-toggle" type="button" aria-expanded="false" title="快捷入口">≡</button>
<div id="qd-links">
<a href="https://wait4x.online/artalk/" target="_blank" rel="noopener">评论管理</a>
<a href="./stats.html" target="_blank" rel="noopener">内容仪表盘</a>
<a href="https://git.wait4x.online/wait4x/blog" target="_blank" rel="noopener">仓库</a>
<a href="https://git.wait4x.online/wait4x/blog/src/branch/main/docs/%E5%90%8E%E5%8F%B0%E5%9B%9E%E6%BB%9A%E6%8C%87%E5%BC%95.md" target="_blank" rel="noopener">回滚指引</a>
<a href="https://git.wait4x.online/wait4x/blog/src/branch/main/docs/%E7%AE%A1%E7%90%86%E5%8F%B0.md" target="_blank" rel="noopener">管理台手册</a>
</div>
</nav>
<script>
// 速通坞开合:默认收起(误触根除);记住用户选择;点外部自动收起
(function () {
var t = document.getElementById('qd-toggle');
var set = function (open) {
document.body.dataset.qd = open ? 'open' : 'closed';
t.setAttribute('aria-expanded', String(open));
try { localStorage.setItem('qd-open', open ? '1' : '0'); } catch (e) {}
};
var saved;
try { saved = localStorage.getItem('qd-open'); } catch (e) {}
set(saved === '1'); // 缺省收起
t.addEventListener('click', function () {
set(document.body.dataset.qd !== 'open');
});
document.addEventListener('click', function (e) {
if (document.body.dataset.qd === 'open' && !e.target.closest('#quick-dock')) set(false);
});
})();
</script>
<!-- pinned 本地 bundle(0.259.0,5n T1 升级):官方模板仅此一个 script,无 CSS link、无 type=module -->
<script src="./sveltia-cms.js"></script>
<!-- 艺术字体切片(unicode-range 按需取片):选择面板的示例字形用真实字体渲染 -->