Repository navigation
增加后台控制面板 - #642
Open
fengyiqianhun wants to merge 1 commit into
Open
增加后台控制面板#642fengyiqianhun wants to merge 1 commit into
fengyiqianhun wants to merge 1 commit into
Conversation
There was a problem hiding this comment.
Sorry @fengyiqianhun, your pull request is larger than the review limit of 150,000 diff characters
✅ Deploy Preview for demo-firefly ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Firefly 管理后台 · 更改记录
📌 变更概述
本次开发为 Firefly 主题新增了一个与站点完全解耦的图形化管理后台(Node + Hono + 原生 ESM 前端),实现了:
admin/admin.config.ts修改(网页无改密入口),带会话签名、登录防爆破与 CSRF 防护;updated,Markdown 实时预览,封面图可从媒体库选择;src/config/全部 26 个配置模块,支持保存与一键恢复默认;同时打通了「后台图形化配置」与「站点源码配置」的桥接:后台只写
src/config/user-config.json覆盖层,24 个配置模块在导出前经mergeUserConfig()做形状守卫深合并,与手写配置互不冲突、可随时恢复默认、模板升级不受影响。🆕 新增文件
1. 后台应用
admin/(新增整个目录)admin/admin.config.tsadmin/README.mdadmin/tsconfig.jsonpnpm admin:check)admin/env.d.tsimport.meta.env类型声明(后台以 Node 运行并静态导入站点配置模块)服务端
admin/server/index.ts/vendor/marked.js+/schemas/:namelib/auth.tsadmin/.secret密钥持久化lib/config-manifest.tslib/user-config.tscomputeOverlay、形状守卫合并mergeOverlaylib/schemas.tslib/paths.tslib/fs.tsmodules/auth.tsmodules/dashboard.tsmodules/posts.tsmodules/configs.tsmodules/media.tsmodules/site.tspnpm build、SSE 实时构建日志前端
admin/ui/(无构建步骤的原生 ESM)index.html/favicon.svgcss/admin.cssjs/api.jsjs/router.jsjs/app.jsjs/components/ui.jsjs/components/schema-form.jsx-if条件显示)js/components/markdown.jsjs/views/login/dashboard/posts/post-edit/settings/media/siteSchema 与脚本
admin/schemas/、admin/scripts/schemas/post.schema.jsonschemas/fragments/*.schema.jsonsiteprofilenavbarsidebarbackgroundWallpaperannouncementgallerysponsorfriendsfriendsPagebooknavbooknavPagedynamiccoverImagecommentmusicPlayersakuralive2dWidgetspineModeldisplaySettingsanalyticsexpressiveCodemermaidplantumlfontlicensescripts/hash-password.mjspnpm admin:hash-password -- 密码)scripts/check-schemas.tsscripts/e2e-test.mjs2. 覆盖层机制
src/config/src/config/user-config.tsmergeUserConfig():形状守卫深合并(对象递归 / 数组整体替换 / 类型不匹配忽略 / 未知字段忽略,支持数组根分区)src/config/user-config.json"//"说明键)✏️ 修改文件
src/config/(24 个配置模块,均做最小化包装)所有配置模块统一改为「默认值 + 合并导出」模式,站点行为完全不变:
siteConfig.tssiteprofileConfig.tsprofilecommentConfig.tscommentannouncementConfig.tsannouncementsidebarConfig.tssidebarnavBarConfig.tsnavbargetDynamicNavBarConfig()供后台读取生成后的默认值backgroundWallpaper.tsbackgroundWallpapermusicConfig.tsmusicPlayereffectsConfig.tssakurapioConfig.tslive2dWidget/spineModelbooknavConfig.tsbooknav/booknavPagegalleryConfig.tsgallerysponsorConfig.tssponsorfriendsConfig.tsfriends/friendsPageanalyticsConfig.tsanalyticsdisplaySettingsConfig.tsdisplaySettingsresolveDisplaySettingsConfig之前,保留环境变量/总开关语义;额外导出原始默认值dynamicConfig.tsdynamiccoverImageConfig.tscoverImageexpressiveCodeConfig.tsexpressiveCodemermaidConfig.tsmermaidplantumlConfig.tsplantumlfontConfig.tsfontfontsList为代码层定义,不参与表单编辑licenseConfig.tslicense工程文件
package.jsonadmin/admin:check/admin:hash-password;新增依赖hono、@hono/node-server、ajv;新增 devDependency@types/nodepnpm-lock.yamlpnpm-workspace.yamlminimumReleaseAgeExclude(hono).gitignore.pnpm-store/、admin/.secret、admin/trash/README.md🐛 修复的问题(含开发过程中发现并修复)
.field > label特异性高于.switch,把开关的inline-flex覆盖成block,轨道旋钮压住文字.field > label:not(.switch);并在 E2E 中加入计算样式回归断言(修复前display=block, weight=600→ 修复后inline-flex, track=36px, weight=400)friends、书签booknav)的覆盖层被mergeUserConfig直接忽略admin/scripts/check-schemas.ts双向交叉校验(Schema 路径 ↔ 真实默认值),全部 26 模块校验通过(14 条提示均为类型中合法的可选字段)🧪 验证结果
pnpm check(astro check)pnpm type-checkpnpm build(完整生产构建:LQIP → VNDB → Astro → 裁剪 → 字体 → Pagefind)pnpm admin:checknpx tsx admin/scripts/check-schemas.tsnode admin/scripts/e2e-test.mjs(headless Chrome)updated/ 媒体上传与路径穿越防护 / SSE 构建日志🚀 快速使用
admin/admin.config.ts的adminAuth(唯一入口,网页不可改);pnpm admin:check(类型检查)、pnpm admin:hash-password -- <密码>(生成哈希)、npx tsx admin/scripts/check-schemas.ts(Schema 校验)、node admin/scripts/e2e-test.mjs(浏览器回归测试);