Sakurasan
|
4bb2ff4145
|
多用户与角色:owner / admin / reader 三级,用户管理页 + 密码上库
- users 表加 password_hash 列;后台账号(owner+admin)密码 bcrypt 存行内,
首次登录把 env / settings 引导凭据自迁移成行哈希
- 会话 token 从用户名改为携带用户 ID,角色与停用状态每请求查库,
改角色 / 停用账号即时生效(存量会话立即 401)
- 登录:先查 users 表,再走 settings 哈希 / env 引导链;
admin/admin 开发模式在任何账号设过密码后失效
- 权限:系统设置、用户管理仅 owner;内容管理 admin+owner;
admin 后台新增 用户 页(创建 / 重置密码 / 停用 / 删除),
设置页「登录与存储」tab 对管理员隐藏
- 账户页加修改密码表单(旧密码校验,OAuth/Passkey 首设免旧密码);
评论区管理员身份跟随各自账号,不再统一挂站主名下
- 修复:providers 为 nil 时账户页白屏(Go nil slice 序列化成 null)
|
2026-10-01 22:35:37 +08:00 |
|
Sakurasan
|
e5dee4daf1
|
vivid 手机端顶栏下滑自动隐藏:滚过 80px 向下滑收起、向上滑或回页首即回现,2px 抖动过滤,抽屉打开期间强制可见
|
2026-10-01 17:32:54 +08:00 |
|
Sakurasan
|
00e85bf667
|
vivid 时间线加操作行(回复/赞/查看),长文文字边距对齐短文 8px
- 卡片/纸条本体保持整块链接,操作行是链接外的兄弟节点(<a> 里不嵌交互元素)
- 回复 → 文章页 #comments 锚点;查看 → 文章页;赞是本机赞
(无登录体系,状态存 localStorage,后续要做全局计数再加表和端点)
- Phosphor 图标:对话气泡 / 心形 / 眼睛,按下有缩放反馈,liked 态 accent 高亮
- .card .body 横向边距 26px→8px,与纸条文字同一条竖线
|
2026-10-01 17:28:24 +08:00 |
|
Sakurasan
|
17b1143183
|
vivid 短文纸条上下内边距归零
|
2026-10-01 17:15:17 +08:00 |
|
Sakurasan
|
d3ec39f27b
|
vivid 短文文字缩进 12px→8px
|
2026-10-01 17:12:51 +08:00 |
|
Sakurasan
|
8315af0f0c
|
vivid 短文:文字类内容缩进 12px(字不贴边线),图片网格全宽贴边并跟随纸条圆角裁切,外链卡片内缩 12px
|
2026-10-01 17:10:47 +08:00 |
|
Sakurasan
|
251de21d5b
|
a.note 内边距删掉:短文正文与 12px 页边线齐平,淡底块紧贴内容
|
2026-10-01 17:05:57 +08:00 |
|
Sakurasan
|
c81d56e4fb
|
vivid 短文清掉多余边距:纸条内边距对齐 12px、meta 上方 16px→10px,手机端时间线条目间隔 18px→14px
|
2026-10-01 17:01:56 +08:00 |
|
Sakurasan
|
a780da5c3a
|
vivid 短文标记去线改淡底块:背景不占布局宽度,正文与卡片左缘对齐,区分信号 = accent 淡底 + SHORT 徽标
|
2026-10-01 16:59:09 +08:00 |
|
Sakurasan
|
2fea889515
|
vivid 手机端全站统一离边框 12px:hero/wrap/page-head/foot/showcase 对齐正文列与评论区(原 20/28px 混用),顶栏品牌左缘同步对齐,页脚底部留白收到 56px
|
2026-10-01 16:51:10 +08:00 |
|
Sakurasan
|
5cd0e63ae6
|
vivid 短文纸条贴边:左线 3px→2px,去掉 12px 左外边距、内边距 18/24→14/16,左侧总占位从近 60px 收到 38px
|
2026-10-01 16:45:33 +08:00 |
|
Sakurasan
|
75548bf07f
|
抽屉菜单打磨:面板收窄到 min(66vw,250px),字重 800→500 配 Phosphor 图标,当前项改淡色胶囊高亮(引入 @phosphor-icons/vue 按需引入)
|
2026-10-01 16:36:39 +08:00 |
|
Sakurasan
|
b407547db9
|
抽屉菜单去掉英文脚注:为多语言留路,栏目只保留本地化名称
|
2026-10-01 16:14:15 +08:00 |
|
Sakurasan
|
f618bc48f5
|
vivid 手机端导航改抽屉:顶部玻璃条(品牌+汉堡)+ 右侧滑入面板,大字栏目带 mono 英文脚注与当前项短杠,Esc/scrim/路由变更自动收起
|
2026-10-01 15:55:45 +08:00 |
|
Sakurasan
|
d3fe454cbe
|
vivid 手机端标签栏挪回顶部:与桌面顶栏同构(全宽毛玻璃 + 发丝线),body 顶部让位 63px,QuickShort FAB 回落底部
|
2026-10-01 15:44:49 +08:00 |
|
Sakurasan
|
8fb15861fe
|
vivid 手机端导航重做:底部玻璃标签栏一次直达,替掉 dock + 汉堡 + 上拉菜单
- 五栏目平铺常驻拇指区,当前项分段高亮(与首页工具条分段控件同语言),
44px 触达高度 + :active 缩放反馈,safe-area 适配保留
- 去掉菜单里的 01-05 编号、逐行分隔线与站点描述,导航只做导航
- 明暗切换:手机端挪到页脚 foot-nav 末尾的 ◐(≤720px 显示),
桌面仍走顶栏主题键;QuickShort 的 FAB 底部给标签栏让位
|
2026-10-01 15:22:00 +08:00 |
|
Sakurasan
|
2bd38551a4
|
总览长标题撑破屏幕修复:dash-cols 的 grid 子项加 min-width:0,面板可收缩后标题 ellipsis 才生效(375 视口 docW 4181→375)
|
2026-10-01 14:58:31 +08:00 |
|
Sakurasan
|
3eaf2c6042
|
手机端后台主题切换收进顶栏:浮动按钮压总览图表右下角,顶栏 34px 胶囊与 ☰/退出同排;后台路由不再挂全局浮动按钮
|
2026-10-01 14:46:05 +08:00 |
|
Sakurasan
|
f72d1107e0
|
后台设置页手机端:tab 列表收成可换行胶囊横排,去掉 sticky(单列布局里会粘住盖住下方面板)
|
2026-10-01 12:40:05 +08:00 |
|
Sakurasan
|
e68400b389
|
系统设置迁入后台:站点地址 / OAuth 凭据 / R2 存储 / 管理员账号,保存即生效无需重启
- 生效规则统一为「后台填了用后台的,没填回落环境变量」,老部署不改 env 照常跑
- config.Resolver:短缓存解析有效配置,存储后端按配置签名热重建;后台保存主动失效
- 秘密项(client secret / bot token / R2 密钥 / 管理员密码)接口永不回显明文,
只报「是否已配置、来自哪里」;留空保存 = 保持现值
- 管理员密码 bcrypt 入库,DB 哈希优先、显式设置的 env 密码作解锁后路;
后台改过密码后 admin/admin 开发模式立即失效
- 设置页新增「登录与存储」标签,基础信息加站点地址;秘密项带来源提示
- 监听地址 / 数据库 / 目录 / ONE_SECRET / Passkey 仍留环境变量(启动期依赖)
|
2026-10-01 12:14:10 +08:00 |
|
Sakurasan
|
bf3ce934dd
|
后台管理手机端适配:侧栏收成 ☰ 抽屉,列表/总览响应式单列,编辑器贴边与工具栏收紧,修 iOS 聚焦缩放
|
2026-10-01 00:15:33 +08:00 |
|
Sakurasan
|
92654dec9f
|
带图短文桌面端左右分栏:文字 2/5、图 3/5,图不再全宽铺开吃高度;窄屏维持堆叠
|
2026-09-30 22:55:42 +08:00 |
|
Sakurasan
|
a4e182aeb4
|
短文配图网格改 2:1 定高:宽列下 1:1 格子顶掉一整屏,行 minmax(0,1fr) 防图片自然高撑爆
|
2026-09-30 22:37:39 +08:00 |
|
Sakurasan
|
cc01650d0d
|
vivid 品牌位做减法:头像外圈光环与绿色在线点都去掉
|
2026-09-30 22:37:39 +08:00 |
|
Sakurasan
|
942bad6158
|
yohaku 手机端打磨:dock 去圆标只留站名,压掉 iOS 顶部弹性露底(100dvh)
|
2026-09-30 21:06:43 +08:00 |
|
Sakurasan
|
1b3eb870da
|
文件删除前查引用:被文章/项目/站主头像用着就先挡住
- store.FileReferences(key) 反查谁在用这个文件:文章(封面 + content_md +
content_html)、项目封面、settings.owner_avatar_key。匹配的键是 files.key 本身
而不是完整 URL——本地 /uploads/{key}、R2 {publicBase}/{key}、缩略图
/uploads/thumb/{key} 三种形态都以 key 结尾,换存储端后正文里的老链接照样查得到。
草稿也算:现在没发布,删了将来发出来就是裂的。
- 按需 LIKE 现扫,不维护计数表:写入口有编辑器、外链转存、短文、项目、头像好几处,
计数一旦漂移就再也信不过;删文件是低频操作,扫全表几十毫秒换一个永远正确的答案。
- 新端点 GET /api/admin/files/{id}/refs;DELETE 默认对在用文件返回 409(消息带引用数
和前三个位置名),明确带 force=1 才真删。守卫放在动 blob 之前——存储端一删就没法回头。
- 后台删除弹层先把引用清单摊出来(文章《标题》(草稿)、站主头像),仍然要删才带 force。
引用查询失败就按无引用走:真被引用时后端会 409,不会静默删掉在用文件。
顺手把另一个 agent 工具的本地草稿目录(.zcode/、.zcodeignore)加进 .gitignore。
|
2026-09-30 02:03:14 +08:00 |
|
Sakurasan
|
f1e639e0ba
|
账户中心:站主资料可编辑 + 身份绑定 + passkey 登录
后台新增 /admin/account 一页,四块:公开资料、密码、第三方账号、Passkey。
- schema:users 加 role(默认 reader),新表 user_identities、passkeys。
user_identities 上双 UNIQUE —— (provider, extern_uid) 防一个外部账号顶两个身份,
(user_id, provider) 防一站主绑两个同平台号,绑错也劫持不了。
extern_uid 存平台稳定 ID,不存用户名(用户名可改)。
- 头像存 files 里的 key 而非 URL,换存储/CDN 不失效;单 key SetSetting 写入,
避开 UpdateSettings 的整表替换会把它抹掉。站主名/简介从设置页挪到账户页,
一个字段只留一个编辑入口。
- OAuth 绑定要求先有后台会话(绑定动作本身是提权路径);已绑的站主身份登录后
直接发 one_session,读者身份仍发 one_reader。
- passkey 走 go-webauthn v0.15.0(最后一条吃 go 1.24 的版本线),可发现凭据登录。
必须显式设 ONE_WEBAUTHN_ORIGINS 才启用,不配就安静关掉。
签名计数只记克隆警告、不硬拦 —— 云同步 passkey 的计数本就不单调。
- 密码故意留在 ONE_ADMIN_PASSWORD,不做哈希入库:这是「解绑一切、删光 passkey
也还能进门」的保底,比 env 明文更值得守。memos 那个 SSO 建号随机密码无重置
入口的坑,从设计上绕开。
已知限制:会话仍是有状态无关的 HMAC cookie,删 passkey / 解绑不会让已发出的
7 天后台会话失效 —— 要修得加一张吊销表。
|
2026-09-30 01:08:55 +08:00 |
|
Sakurasan
|
7e302c51a6
|
新站标「一横」:墨圆 + 一道白横,接进两套 UI 与图标
立意:既是字母 O 也是汉字「一」,对应站名 ONE / 一个博客。
- favicon.svg 重画:横杠用 fill-rule=evenodd 挖成真洞而不是叠一块纸色矩形,
所以纸感 / 墨色暗端 / 后台卡片任何底色都直接透过去,不必为皮肤各出一版;
SVG 内带 prefers-color-scheme,标签页深浅自动翻色
- 补 favicon-16/32.png(不认 SVG 的老浏览器)与 apple-touch-icon.png 180
(iOS 不支持 SVG 且会把透明压成黑底,故铺纸色实底)。PNG 由临时 Go 程序
按 8x8 子采样光栅化生成,生成器未入库,产物是资产
- LogoMark.vue 内联 SVG 组件:颜色跟 currentColor,尺寸由外层给
- 接入 6 处:classic 桌面左栏品牌位(原来是个排版字符 ○)、移动顶栏 brand、
时间线头像位、详情页头像位、快发盒头像位;vivid 顶栏与底部 dock 品牌标记
(右下角绿色在线点保留,它是「有人在写」的信号,不属于被替换的部分)
- 顺带清理:三处只为算首字母的死代码(initial 与只服务于它的 userName)、
vivid 里一条被同特指度靠后规则完全覆盖的 .av 死规则;标记 wrapper 统一加
flex:none,否则站名一长会被压成椭圆
|
2026-09-29 21:04:55 +08:00 |
|
Sakurasan
|
e6e4bdc71c
|
修两套 UI 的横向溢出 + vivid 页脚把源码入口从社交排里分出来
溢出(两处,同一类成因):
- vivid 时间线:短文正文用的是 .note .body 而不是 .prose,所以 c6eb0bb 给
.prose 加的 overflow-wrap:anywhere 没覆盖到它,正文里的裸链接把列撑到 552px
(视口 516)。补上 anywhere 而非 break-word——要参与 min-content 计算才压得住
- classic 时间线:.shell 的页边距在 640px 断点从 20px 收到 12px,而 .row-feed 的
负出血要到 520px 才跟着收到 -12px,521~640 这段出血比父容器内边距多 4px,
整页横向溢出。把出血断点对齐到 640px(桌面视觉不动)
- LinkCard 的 .lc-site 同样补 anywhere:主机名是最典型的不可断行长 token
vivid 页脚:源码仓库入口原先被 concat 进社交数组,和站主的 GitHub/X 排成同一行,
看起来像「又一个社交账号」。改成社交排只放账号(同 classic RightRail 的过滤),
源码图标与版权单独成 .foot-meta 压在页脚最底;样式写在 .foot a 之后,靠同特指度
的后者压掉页脚链接默认的强调色
|
2026-09-29 12:01:11 +08:00 |
|
Sakurasan
|
baf14897aa
|
注释同步:皮肤精简后 data-theme 说明改为 paper/ink
|
2026-09-29 02:55:47 +08:00 |
|
Sakurasan
|
8ff9878e91
|
精简 classic 皮肤:去掉鼠尾草/玫瑰,亮端固定纸感;重新设计墨色暗板——底色更深更中性(褪黄褐)、次级文字降金相改暖灰、鎏金强调提亮提纯,层次靠三档灰阶;后台暗色 token 同步;设置页皮肤选择器改为固定展示
|
2026-09-29 02:45:44 +08:00 |
|
Sakurasan
|
1a43199ca0
|
重写手机图片预览(不参考旧实现):
- 真凶补刀:lightbox.js 状态模块里一直有 body.style.overflow='hidden'——上次撤销只撤了组件没撤它,撑屏从未消失。现在彻底移除,注释写明绝不可再碰 body inline overflow(会覆盖 overflow-x: clip)
- 滚动封锁改由遮罩自身 @wheel/@touchmove.prevent 拦截:事件不落页面,背景滚不动、滚动位置保留
- 图片尺寸全走百分比(遮罩即视口),不再引入 vw/vh/dvh
- touch-action:none 手势归遮罩:滑动翻页(位移阈值判定)、屏蔽双击缩放/长按菜单/下拉刷新
- 手机断点:箭头贴边缩小、关闭钮/页码走 safe-area、图片全宽无圆角
- Transition 加 :duration 兜底,防 transitionend 不触发时透明遮罩残留吃点击
|
2026-09-29 02:27:42 +08:00 |
|
Sakurasan
|
84f88cb473
|
撤销 ce07f4a(lightbox 手机适配 + 正文图预览委托):真机上反复出问题(撑屏/缩放错乱),全部回退到原有简单预览;仅保留 lb-open 隐藏吸顶栏的亮带修复
|
2026-09-29 02:07:06 +08:00 |
|
Sakurasan
|
c6eb0bbe5b
|
修真机首页缩成一团:.prose 补 overflow-wrap:anywhere——时间线正文里的裸 URL 不可断行把布局撑到 557px,手机浏览器缩放适配溢出宽度后整页缩小、右侧留出被裁剪的空白区
|
2026-09-29 01:53:24 +08:00 |
|
Sakurasan
|
165f87d086
|
修复真机撑屏:锁滚动只改 overflowY——整个 overflow 改 hidden 会覆盖样式表的 overflow-x: clip,横向从裁剪变可滚动容器,整页能被拖宽
|
2026-09-29 01:48:42 +08:00 |
|
Sakurasan
|
2674bea223
|
真机修复:lightbox 打开时隐藏吸顶顶栏——backdrop-filter 元素的合成层在真机上会盖住 z-index 更高的遮罩(顶部出现未遮罩亮带);顺带全屏观感更干净
|
2026-09-29 01:38:24 +08:00 |
|
Sakurasan
|
ce07f4a347
|
图片预览手机适配 + 正文图统一接入 lightbox
- lightbox:打开锁背景滚动(手机上背景不再跟着滑)、手机滑动左右翻页、
dvh 跟随全面屏可视高度、关闭钮/角标走 safe-area、图片全宽无圆角
- 全局 capture 委托:时间线/详情页 v-html 正文里的图统一可点开预览,
capture+stop 压住整卡跳转;thumbifyHtml 把原图地址留在 data-fullsrc,
预览用原图而非 480w 缩略图;链接卡缩略图不劫持(点击仍是打开链接)
|
2026-09-29 01:29:19 +08:00 |
|
Sakurasan
|
c2d5e9db89
|
主题功能同步:vivid 页脚补社交按钮排(含源码入口,居中);classic 文章页补右栏目录(滚动高亮)与顶部阅读进度条——快发盒经核实两套 UI 均已存在,无需补
|
2026-09-29 01:23:29 +08:00 |
|
Sakurasan
|
3eb0aab788
|
页脚:社交按钮提到第一排居中显示(链接行/版权行依次在下)
|
2026-09-29 01:07:19 +08:00 |
|
Sakurasan
|
f7669badf2
|
长文自动摘要与自动封面:未填时从正文派生——摘要剥语法取开头 110 字(标题行/代码块/图链接剔除),封面取正文第一张图;更新只在「新旧都空」时补,站主主动清空的保得住;保存响应回写编辑器可见
|
2026-09-29 01:05:46 +08:00 |
|
Sakurasan
|
6e6196d68b
|
工具栏补表格插入:插入组新增表格按钮,光标处铺 2×2 模板(表头/分隔/两行内容)
|
2026-09-29 00:56:34 +08:00 |
|
Sakurasan
|
23771f0661
|
文章排版四件套(参考 xLog):盘古之白 + 表格圆角斑马纹 + 代码块封顶与复制按钮 + 标题悬停锚点
- PanguHTML:CJK 与拉丁/数字间补空格,标签原样保留、code/pre 内文本不动;详情/时间线短文/RSS 描述三个出口生效(带单测)
- 表格改圆角容器 + tbody 斑马纹 + 纵向大留白(classic/vivid 双主题)
- pre max-height 30.5em 封顶内部滚动;enhanceProse 注入悬停复制按钮(App 全局委托),按下有 2px 物理感
- 带 id 的 h2-h4 悬停浮现 # 锚点,点击跳转
- 中文字体栈此前已配(PingFang SC 等),无需改动
|
2026-09-29 00:53:50 +08:00 |
|
Sakurasan
|
44a24736aa
|
md 工具栏命令配快捷键:⌘B 加粗 / ⌘I 斜体 / ⌘E 行内代码 / ⌘K 链接(CodeMirror keymap),tooltip 自动带出(Mod 在 Mac 显示 ⌘)
|
2026-09-29 00:36:22 +08:00 |
|
Sakurasan
|
55d898cd42
|
编辑器工具栏改 xLog 风格:SVG 线性图标按钮(加粗/斜体/删除线/代码/标题/引用/列表/任务/分隔线/链接/图片/日期),32px 圆角、悬停出底框,替代文本 chip
|
2026-09-29 00:25:18 +08:00 |
|
Sakurasan
|
ab96426489
|
编辑器手动保存(按钮/⌘S/发布/转草稿)弹 toast 回音——「已保存/已发布 · 时间」;创建成功与空内容校验同样有提示;自动保存保持静默
|
2026-09-28 23:57:38 +08:00 |
|
Sakurasan
|
c84a383e5c
|
后台统一状态提示:共享 toast 模块(ToastStack 挂后台布局与登录页),登录成功/失败、文章/标签/作品/文件/评论/设置操作全部有反馈,替换掉原生 alert;编辑器局部 toast 并入共享实现
|
2026-09-28 23:52:16 +08:00 |
|
Sakurasan
|
f7a2e83727
|
编辑器三件套(参考 xLog):CodeMirror 源码模式 + 外链图片一键转存 + 上传进度/前置校验
- md 页签从裸 textarea 升级 CodeMirror 6:markdown 语法高亮、行内历史,粘贴/拖图直传;
markdown 仍是唯一真相源,转存/切换用 syncCM 全量灌回,工具栏选区辅助改为面向 CM
- POST /api/admin/files/import:外链抓取复用 linkmeta SSRF 防护拨号与跳转限制,
二进制传输放宽 30s;类型按内容嗅探反查白名单,与手动上传共用去重/落盘(persistFile 抽取共享)
- 上传走 XHR 进度回调 + 编辑器 toast 栈:类型/大小前置校验(与后端白名单一致)、逐文件进度
- persistFile 去重路径补 URL 解析——此前命中去重返回的行没有 URL,转存替换会把正文图链清空(已修复受损数据)
- hub nil 安全(测试环境未装配时不 panic)
|
2026-09-28 23:42:24 +08:00 |
|
Sakurasan
|
b93fe9847c
|
长文图片缩放:编辑器拖拽把手的比例在文章页生效(alt 数字还原为宽度并居中)+ 把手默认半透明提高可发现性
|
2026-09-28 23:05:08 +08:00 |
|
Sakurasan
|
a74299d716
|
侧栏「最近更新」:短文显示正文摘录(贴链接的回退到卡片标题、纯图显示占位)+ 配图短文带 34px 缩略图
|
2026-09-28 22:39:06 +08:00 |
|
Sakurasan
|
da0333e09c
|
标签只属于长文:短文落库强制清空标签,编辑器切到短文隐藏并清空标签栏,存量短文标签关联已清理
|
2026-09-28 22:30:02 +08:00 |
|