feat: 文章编辑体验升级——编辑器图片上传、作者附件区、作者编辑按钮、表单模板统一 #6

Merged
kevin merged 4 commits from dsh/go_blog:feat/article-upload-ui into main 2026-08-28 20:04:47 +08:00
Contributor

变更概述

围绕文章新建/编辑页的写作体验做一组改进(不依赖 #5 的 files 表重构,业务接口不变)。

1) 编辑器图片上传(84756e0)

管理员与作者两套新建/编辑页的 EasyMDE image 按钮改为本地上传:选择本地图片 → 走既有附件接口(session_token/article_id)→ 在正文光标处插入 ![](url);非图片给出提示。templates/layouts/base.html 新增共享 blogUploadImage 助手;i18n 新增两个 key(中英)。

2) 普通用户附件区(5c55a76)

作者新建/编辑页补齐与管理端一致的附件区:上传按钮 + 已上传列表,支持一键加入正文(图片 ![]()/其他 []())、图片一键设为封面、删除。附件区标记抽为共享 partial(templates/partials/article_attachments.html),逻辑抽为共享 static/js/article-attachments.js(接口 URL/编辑器/i18n 文案由页面注入)。顺带修复管理页表单提交引用未声明 articleID 导致保存静默失败的作用域 bug。

3) 作者可编辑自己的文章(523de28)

文章详情页的编辑按钮从「仅管理员」放开为:管理员(/admin/articles/:id/edit)或登录用户且为文章作者(/my/articles/:id/edit);他人与匿名不可见。my 编辑页/API 本身有 author_id 所有权约束。新增 TestArticleDetailEditButton 四场景断言。

4) 文章表单模板二合一(81e3b32)

admin/article_create.html + my_article_form.html(约 360 行)收敛为单一 templates/partials/article_form.html(~230 行),按 .FormIsMy 分支渲染两工作区差异(标签/置顶/草稿发布双按钮 vs 状态下拉/保存取消;/api/admin/articles vs /api/my/articles)。入口路由不变。新增 TestArticleFormTemplateVariants 断言两变体渲染差异。

验证

  • go build ./... / go vet ./... / go test ./... 全部通过(含新增两个测试)
  • 模板内嵌 JS 与共享 JS 均通过 node --check
  • 该组功能已在本机部署验证(footer 版本号、模板渲染、附件上传/删除端到端)
## 变更概述 围绕文章新建/编辑页的写作体验做一组改进(不依赖 #5 的 files 表重构,业务接口不变)。 ### 1) 编辑器图片上传(84756e0) 管理员与作者两套新建/编辑页的 EasyMDE **image 按钮改为本地上传**:选择本地图片 → 走既有附件接口(`session_token`/`article_id`)→ 在正文光标处插入 `![](url)`;非图片给出提示。`templates/layouts/base.html` 新增共享 `blogUploadImage` 助手;i18n 新增两个 key(中英)。 ### 2) 普通用户附件区(5c55a76) 作者新建/编辑页补齐与管理端一致的附件区:上传按钮 + 已上传列表,支持**一键加入正文**(图片 `![]()`/其他 `[]()`)、**图片一键设为封面**、删除。附件区标记抽为共享 partial(`templates/partials/article_attachments.html`),逻辑抽为共享 `static/js/article-attachments.js`(接口 URL/编辑器/i18n 文案由页面注入)。顺带修复管理页表单提交引用未声明 `articleID` 导致保存静默失败的作用域 bug。 ### 3) 作者可编辑自己的文章(523de28) 文章详情页的编辑按钮从「仅管理员」放开为:**管理员**(/admin/articles/:id/edit)或**登录用户且为文章作者**(/my/articles/:id/edit);他人与匿名不可见。my 编辑页/API 本身有 `author_id` 所有权约束。新增 `TestArticleDetailEditButton` 四场景断言。 ### 4) 文章表单模板二合一(81e3b32) `admin/article_create.html` + `my_article_form.html`(约 360 行)收敛为单一 `templates/partials/article_form.html`(~230 行),按 `.FormIsMy` 分支渲染两工作区差异(标签/置顶/草稿发布双按钮 vs 状态下拉/保存取消;`/api/admin/articles` vs `/api/my/articles`)。入口路由不变。新增 `TestArticleFormTemplateVariants` 断言两变体渲染差异。 ## 验证 - `go build ./...` / `go vet ./...` / `go test ./...` 全部通过(含新增两个测试) - 模板内嵌 JS 与共享 JS 均通过 `node --check` - 该组功能已在本机部署验证(footer 版本号、模板渲染、附件上传/删除端到端)
dsh added 4 commits 2026-08-28 20:03:37 +08:00
- 两套页面(admin + 普通用户)EasyMDE 的 image 按钮改为“上传图片”:
  选择本地图片 → 走既有附件接口(files 表 type=attachments,新建页
  session_token / 编辑页 article_id)→ 在正文光标处插入 ![](url)
- templates/layouts/base.html:新增共享 window.blogUploadImage 上传助手
- templates/user/my_article_form.html:新建页 session_token 输入框加 id
  (编辑器上传需要读取);补齐原本缺失的上传能力
- i18n:新增 article_image_upload / article_image_not_image(中英)
- 服务端依既有上传策略校验(扩展名/MIME/魔数/大小),客户端限 image/*
- 新增共享部分模板 templates/partials/article_attachments.html
  (附件区标记:文件名/大小/操作列 + 上传按钮)
- 新增共享 static/js/article-attachments.js:上传(multipart→files 表
  type=attachments)、编辑页回填、插入正文、图片一键设封面、删除;
  uploadURL/listURL/editor/i18n 文案均由页面注入
- 管理员页改用共享 partial+JS(行为不变);同时修复既有 bug:
  表单提交闭包引用未声明的 articleID(作用域错误导致保存静默失败)
- 普通用户页加入附件区,走 /api/my/articles/attachments(新建页
  session_token / 编辑页 article_id),支持一键设封面/插入正文
- renderArticleDetail 计算 CanEdit/EditURL:管理员(/admin/articles/:id/edit)
  或登录用户且为文章作者(/my/articles/:id/edit)可见
- templates/pages/article.html 改用 .CanEdit/.EditURL 渲染
- my 编辑页/接口本身有 author_id 所有权约束,暴露链接无越权风险
- 新增 TestArticleDetailEditButton:作者/管理员可见、他人/匿名不可见
- 新增 templates/partials/article_form.html(define article_form):
  按 .FormIsMy 分支渲染——管理员变体(标签/置顶勾选/草稿发布双按钮/
  /api/admin/articles)与作者变体(状态下拉/保存取消//api/my/articles)
- renderArticleForm / renderMyArticleForm 均渲染 article_form,各自
  设置 FormIsMy=false/true;JS 统一(API_BASE/redirectBase/editor/
  错误提示均单份)
- 删除 templates/admin/article_create.html 与
  templates/user/my_article_form.html(约 360 行 → 一份 ~230 行)
- 新增 TestArticleFormTemplateVariants 断言两个变体渲染差异;
  测试环境注册两个工作区的新建页路由
dsh force-pushed feat/article-upload-ui from 81e3b325e2 to d78ed8e2fe 2026-08-28 20:03:37 +08:00 Compare
kevin merged commit 73412e51b4 into main 2026-08-28 20:04:47 +08:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kevin/go_blog#6