Commit Graph

116 Commits

Author SHA1 Message Date
augushong
1ef0a4eabd fix(phone-image): 修復F2審查發現的代碼質量問題
- 移除captureDomPages中冗餘的console.log/error雙寫(統一用PhoneImageLogPanel)
- 修復phone-image:save-config監聽器中無效的三元表達式(L829)
2026-05-19 00:51:49 +08:00
augushong
7bb066b704 feat(phone-image): codeFontScale UI控件+集成
- HTML新增代碼字號下拉選擇控件(0.5x-2.0x+自定義輸入)
- currentConfig初始化恢復codeFontScale
- change事件更新config+applyFontScale+debouncedSaveConfig
- 所有saveConfig/saveImages調用包含codeFontScale
2026-05-19 00:43:29 +08:00
augushong
94039d026e feat(phone-image): 對齊持久化+防抖自動保存
- saveImages新增mergedConfig合併pageAlignments
- 新增debouncedSaveConfig(): 300ms防抖自動保存
- 對齊change handler調用refreshDomPage+debouncedSaveConfig
- 重置按鈕逐頁刷新DOM+防抖保存
- HTML新增phone-image:save-config事件監聽器
- currentConfig初始化正確同步pageAlignments
2026-05-19 00:30:29 +08:00
augushong
bfeb1811be feat(phone-image): DOM分页預覽CSS+HTML基礎結構和數據模型 2026-05-18 23:32:40 +08:00
augushong
0782399709 fix(typesetting): 修复SnapDOM全局
- SnapDOM v2.12.0 IIFE构建非真正IIFE,function $/let .$
- 加载snapdom.js前保存jQuery的
- 加载后立即恢复jQuery的$
- 集成测试通过: 21页排版正常,纯图片页有brand header+页码
- Console零JS错误,排版耗时约2秒
2026-05-17 14:07:59 +08:00
augushong
665a9cc9e5 refactor(typesetting): 替换html2canvas为SnapDOM v2.12.0 - 解决渲染不一致问题
- 新增 public/static/lib/snapdom/snapdom.js (IIFE构建)
- phone_image.html script引用从html2canvas改为snapdom
- phone-image.js 3处截图调用全部替换为snapdom.toCanvas()
  - capturePageViaHtml2Canvas (分页截图)
  - 长图生成 (scale:2)
  - 导出单页 (scale:2)
- API映射: html2canvas(elem,{scale,useCORS,width,height,logging}) -> snapdom.toCanvas(elem,{scale,backgroundColor})
- 返回值兼容: Promise<Canvas> 下游toDataURL不受影响
- 保留html2canvas目录不删除(output.html仍引用)
2026-05-17 13:25:58 +08:00
augushong
bf32bce922 feat(typesetting): 页面品牌标识 - 数据链路+渲染函数+分页修正
- Post.php: phoneImage()传递siteName/siteLogo到模板
- phone_image.html: postData增加siteName/siteLogo字段
- phone-image.js: 新增generateBrandHeader()+preloadBrandLogo()
- phone-image.js: 3个页面生成函数调用品牌头部
- phone-image.js: contentAreaHeight扣减BRAND_HEADER_HEIGHT(36px)
- logo预转base64规避html2canvas CORS,过滤默认头像
2026-05-17 11:12:56 +08:00
augushong
ee9e2acca2 refactor(typesetting): Wave2 - 表格字号移位+画布header+对齐下拉+移除历史UI
- T3: 表格字号从设置弹框移到渲染预览header工具栏
- T4: 画布预览区添加header bar和重置对齐按钮
- T5: 对齐按钮改为select下拉,change仅CSS操作不重渲染
- T6: 移除历史记录UI(按钮/菜单/处理函数/URL变量)
- CSS: alignment-toggle样式替换为alignment-select样式
2026-05-17 00:30:25 +08:00
augushong
aa067ad202 refactor(typesetting): Wave1 - UPSERT改造 + 移除历史记录后端接口
- PhoneImage.php: saveConfigOnly/createOutput改为find-then-update-or-create
- Post.php: 移除6个历史记录方法(postOutputList/getOutputListJson等)
- 删除post_output/index.html模板
2026-05-17 00:22:04 +08:00
augushong
3ea3a6dbe3 feat(typesetting): Wave 2 - 流式渲染、表格字号独立控制、作者声明
- 缩略图改为流式渲染,截图一页即显示一页
- 新增tableFontScale独立控制表格字号,含后端持久化
- 内容页顶部添加作者声明(文/作者名),空值隐藏
2026-05-16 00:35:03 +08:00
augushong
2b9bfb179f feat(typesetting): Wave 1 - 对齐修复+底部对齐、封面页字号豁免、字号UI改造
- 修复对齐按钮缺少click handler的缺陷,新增事件委托
- 三态对齐切换: 居顶(↑) -> 居中(↕) -> 居底(↓)
- 封面页和尾页通过CSS变量重置不受全局fontScale影响
- 字号控制从slider改为dropdown+自定义输入,预设0.5/0.8/1.0/1.2/1.5/2.0
2026-05-16 00:23:36 +08:00
augushong
b8c05e0329 fix(phoneimage): 修复字号缩放不生效于画布渲染和段落文字,缩小表格行间距
- CSS: 在 #render-preview 和 #render-staging 上重新声明中间变量
  (--pi-font-size-base 等),使其在本地用 --pi-font-scale 重新计算,
  解决 CSS 自定义属性在 :root 预计算后子元素继承固定值的问题
- CSS: #render-preview 的 font-size 从 var(--pi-font-size-base) 改为
  直接 calc(14px * var(--pi-font-scale, 1)),确保段落文字响应缩放
- JS: doCapturePages() 在 ensureStaging() 后调用 applyFontScale(),
  确保首次创建 staging 时 --pi-font-scale 被正确设置
- CSS: th/td padding 从 8px 10px 缩小为 4px 10px,减少表格行间距
- HTML: body 布局改为 flex-column 防止页面级滚动
2026-05-15 23:38:39 +08:00
augushong
f18091b931 feat(phoneimage): 接入保存/配置/历史操作日志并移除layer.load遮罩 2026-05-15 22:19:39 +08:00
augushong
a1dbfbc97d feat(phoneimage): 接入渲染管线逐页进度日志 2026-05-15 22:09:46 +08:00
augushong
07dcc964f4 feat(phoneimage): 添加日志面板UI和右栏布局重构 2026-05-15 22:00:43 +08:00
augushong
6fc164fe90 fix(phone-image): 修复字号倍数影响编辑器+刷新后丢失
- CSS变量 --pi-font-scale 仅在渲染容器上设置,不再全局污染
- Slider松手后立即保存配置,确保fontScale持久化
2026-05-15 20:44:16 +08:00
augushong
5a81385448 feat(phone-image): 添加字号倍数控制功能
- CSS: 新增 --pi-font-scale 变量,全量 font-size 支持 calc 缩放
- JS: config.fontScale 影响分页计算,applyFontScale() 同步CSS变量
- HTML: 渲染预览区 Slider 控件(0.5x~2.0x),拖动即时预览,松手完整渲染
- 后端: PhoneImage.php 新增 fontScale 配置字段和校验
- 所有保存路径(autoSave/save/generate)包含 fontScale 持久化
2026-05-15 00:50:57 +08:00
augushong
8ad90a28c0 fix(admin/post/view): correct the thumb item index offset
修正分页图片缩略项的data-index索引偏移,使其从0开始正确对应分页下标
2026-05-14 23:32:54 +08:00
augushong
10879a8037 feat(output_view): 导出页面重构 - 长图卡片化展示、缩略图增大、预览优化、纯图片页原图保存
- output_view.html: 长图改为固定高度卡片(70px),Blob URL查看,缩略图minmax(280px,1fr),
  竖图预览优先填充视口高度,下载功能完整保留
- phone-image.js: renderPureImageToCanvas()使用naturalWidth/naturalHeight保持原图分辨率,
  新增长图生成和保存功能
- Post.php: 新增outputView()方法提供导出页面渲染数据
- PhoneImage.php: 图片数据改为DB存储,新增saveLongImage()方法
- phone_image.html: 添加导出页面入口按钮
- 新增数据库迁移: post_output_file表添加image_data字段
2026-05-14 23:22:19 +08:00
augushong
29dbc7ca55 feat(phoneimage): 三列布局重构 - 添加渲染预览区并改造渲染管线
- 增加中间渲染预览列(540px),三列布局:编辑器 | 预览 | 缩略图
- CSS作用域迁移:排版样式从#editor-text-area迁移到#render-preview
- 编辑器恢复干净默认样式,消除表格/图片间隙和溢出问题
- 新增syncPreview()实时同步编辑器内容到预览区(300ms防抖)
- captureEditorBlocks()改为从预览区DOM测高,不再克隆编辑器DOM
- render()改为从预览区读取已预处理HTML,所见即所得
2026-05-12 23:12:48 +08:00
augushong
b6f2e9ef09 fix(phone-image): 移除不存在的layui dropdown依赖,改用纯JS下拉菜单
layui 2.x没有内置dropdown模块,导致整个页面JS回调不执行。
- layui.use依赖从['form','layer','dropdown']改为['form','layer']
- 用纯jQuery实现toggle下拉菜单替代dropdown.render()
- 添加more-dropdown-menu CSS hover样式
2026-05-11 23:20:20 +08:00
augushong
f6fc53940c feat(phone-image): Wave2 CSS样式+自动保存+历史加载
- T4: 新增编辑器区/操作栏/弹框CSS样式(390行),覆盖两栏布局、
  wangeditor编辑区排版、divider分页标记、设置弹框、右侧预览区
- T5: onChange自动保存(2.6s防抖),保存状态指示器(waiting/saving/saved/error)
- T6: loadFromHistory改用editor.setHtml()+updateConfig()替换旧init
- 修复: doAutoSave删除无效递归调用
2026-05-11 22:55:24 +08:00
augushong
1f8128385f refactor(phone-image): wangeditor 排版引擎核心重构
- 两栏布局:取消左侧工具栏,中间改为wangeditor v5编辑器
- 顶部操作栏:设置/保存/生成并保存+更多下拉(历史/重新生成/下载/长图)
- 设置弹框:尺寸选择+水印输入,删除全局字号滑块
- wangeditor完整工具栏+divider分割线标记分页
- 删除旧渲染管线:renderContentFlow/insertPageBreak/removePageBreak/convertFlowBlocksToImages/measureBlockHeights
- 新增captureEditorBlocks:从编辑器DOM测高+按分割线分组+实际高度分页
- 新增exportLongImage:从wangeditor DOM截长图
- getContentHtml改为从wangeditor实例读取
2026-05-11 22:45:38 +08:00
augushong
e9d839ae8a docs(phone-image): 产出排版功能架构文档
fix(phone-image): 修复分页标记丢失bug,消除双数据源问题

- 新增 getContentHtml() 和 updateConfig() 引擎API
- 保存逻辑改用引擎内部 content_html,不再从DOM读取
- doRender 改用 updateConfig,配置变更不重置内容
- loadFromHistory 改用 init+render 全量初始化
- PHP/JS 配置字段对齐(移除template/font,新增pageAlignments)
2026-05-11 21:17:37 +08:00
augushong
ba543040fa fix(phone-image): concurrent render silence rendering error
T3 fix: silence err===rendering in catch block to avoid
showing meaningless rendering failed message to users
2026-05-07 22:16:41 +08:00
augushong
90b4b1d5f2 refactor(phone-image): 清理死代码、修复历史记录和媒体标签安全移除
T8: 删除estimateImageHeight/estimateTableHeight/showGeneratedThumbnails/switchSize/
    getConfig/getPages/renderContentFlow等未使用函数,exportLongImage添加render锁检查
T9: loadFromHistory恢复pageAlignments,font_size→fontSize命名统一(PHP+JS双向兼容),
    修复历史加载时fontSize显示值bug
T10: preprocessContent移除iframe/video/svg/embed/object标签,
    封面图添加onerror处理
2026-05-07 21:53:03 +08:00
augushong
9aacfab11d fix(phone-image): 修复XSS注入、正则兼容性、render锁稳定性和缓存清理
T1: XSS修复 - PHP模板注入改用json_encode,poster URL转义处理
T2: fontSize NaN修复 - parseInt统一处理,lookbehind正则替换为兼容方案
T3: render锁稳定性 - insertPageBreak/removePageBreak添加15次重试上限,
     fontsReady添加catch处理,_pending递归添加错误捕获
T4: 缓存清理 - init()清空缓存,render()超过3倍blocks数自动清理
2026-05-07 21:29:45 +08:00
augushong
2233b2b71a fix(phone-image): 修复代码块/表格转换DOM索引失效bug,增加重新生成按钮和中间栏表格样式
- convertCodeBlocks/convertTables: 改为每次重新find().first()替代缓存索引
- 修复replaceWith后jQuery集合中后续元素DOM引用失效的问题
- 新增'重新生成'按钮,强制重新渲染缩略图
- 新增中间栏content-flow-block表格CSS样式
2026-05-03 22:56:34 +08:00
augushong
168f0a9adc fix(phone-image): remove output-manage button and fix history date display 2026-05-03 22:06:57 +08:00
augushong
06d9d5d139 fix(post-list): redirect layout button directly to editor page 2026-05-03 21:23:11 +08:00
augushong
5f5dc180c9 feat(phone-image): add history popup with load config support 2026-05-03 21:22:00 +08:00
augushong
c51cd8beb5 feat(phone-image): add save button and state management 2026-05-03 21:16:00 +08:00
augushong
8aeda4c518 refactor(phone-image): JS engine renders thumbnails via html2canvas 2026-05-03 09:08:15 +08:00
augushong
3cc024409f refactor(phone-image): CSS and HTML for thumbnail preview container 2026-05-03 09:00:32 +08:00
augushong
9dce9854c8 fix(phone-image): T7 integration fixes
Fix 3 bugs found during Playwright integration testing:

1. Template syntax: {|json_encode|default='{}'} -> PHP native (curly braces parsed as TP6 tags)

2. jQuery event namespace mismatch: off('click.phoneImage') -> off('click') to match on('click')

3. Migration executed on server

All 6 Playwright test scenarios passed: layout, content flow, preview, alignment, font size, toolbar buttons
2026-05-02 09:54:59 +08:00
augushong
57187a9d1d refactor(phone-image): three-column layout with content flow and paginated preview
T6: Rewrite phone_image.html to three-column layout (toolbar 220px | content flow 540px | paginated preview flex:1)

- Remove: template buttons, font selector, AI section, preview button, page navigation

- Add: content-flow area, paginated-preview area, export long image button

- Update: postData with coverText, layoutContentHtml, savedConfig restore

- Debounced doRender (300ms), auto-render on page load
2026-05-02 09:30:20 +08:00
augushong
bcd00e32ea refactor(phone-image): Wave 2 - form, controller, JS engine, API updates
T3: Add cover_text textarea to post edit form

T4: Update Post controller - content copy + cover_text passing

T5: Refactor JS engine - remove old APIs, add forced breaks, page numbers, per-page alignment

T8: Add cover_text to API default_fields, apidoc (4 places), AGENTS.md
2026-05-02 09:16:05 +08:00
augushong
0e3a442ddd fix(API): 修复文章发布时 publish_time 自动填充逻辑
统一处理 publish_time 参数,空字符串按未传处理。在创建和更新文章时,当文章状态为发布且未提供 publish_time 时,自动填充当前时间。同时修复更新文章时,从草稿首次发布且原 publish_time 为 0 时自动填充时间的逻辑。
2026-05-01 20:57:20 +08:00
augushong
34fe255829 feat(phone-image): 增加翻页预览与无封面图排版样式
- 为手机截图生成器添加翻页功能,支持在生成前预览各页内容
- 增加无封面图时的排版样式,使用装饰线条和居中布局
- 改进图片处理逻辑,清除内联样式并展平嵌套包装元素
- 修复 models.dev 同步接口,支持 GET 请求获取缓存数据
- 优化网络请求,添加直连失败后的本地代理重试机制
2026-05-01 16:31:26 +08:00
augushong
83a2bd48a2 feat(post): 新增手机图片排版与AI智能排版功能
- 新增手机图片排版功能,支持小红书/抖音尺寸输出
- 新增AI智能排版顾问,支持内容分析与优化推荐
- 新增AI供应商管理,支持多渠道配置与同步
- 新增文章输出管理页面,支持图片预览与批量下载
- 新增字体文件与排版样式配置
2026-05-01 12:23:17 +08:00
augushong
b4558b55fb feat(admin): 为登录功能添加验证码开关配置
- 在环境变量中引入 `captcha_login` 配置项,用于控制登录时是否需要验证码
- 根据配置动态显示或隐藏登录页面的验证码输入框
- 后端登录验证逻辑根据配置决定是否校验验证码
2026-05-01 10:49:22 +08:00
augushong
d1300b8796 fix: 修复上传文件处理和粘贴图片URL替换的问题
- 修复 UploadFiles 中 $request->file() 可能返回 null 导致类型错误的问题,确保 $files 始终为数组
- 优化粘贴外部图片 URL 处理逻辑,使用正则匹配提取所有外部 URL 后统一延迟处理,避免替换错误
- 增加 URL 转义处理,防止特殊字符在正则替换时出错
2026-05-01 09:11:43 +08:00
augushong
aed4b285d8 feat: 添加Vditor编辑器支持并扩展文件上传功能
- 新增Vditor编辑器静态资源文件,包括图片、字体和样式文件
- 在文件上传控制器中添加vditorSave方法,支持Vditor编辑器文件上传
- 在文章创建页面添加编辑器类型选择(富文本/Markdown)
- 更新.gitignore文件,排除Playwright和QA截图目录
- 扩展UploadFiles类以支持Vditor编辑器的文件上传格式
2026-04-30 22:27:03 +08:00
augushong
0e8944bc7f docs: 为 category-api 和 apikey-article-api 添加项目笔记文件
- 添加 category-api 的 problems、decisions、learnings、issues 文档
- 添加 apikey-article-api 的 issues、decisions、learnings 文档
- 包含架构决策、问题记录和学习总结
2026-04-28 21:03:15 +08:00
augushong
dc116a1c77 feat(api): add article/attachment API endpoints, admin management, and API docs
- Articles API: list/detail/create/update/delete with source-based permission control
- Attachments API: upload/list/delete with source-based permission control
- ApiKeyInfo API: query current key permissions
- Admin ApiKey management: generate/regenerate/toggle/permission settings with layui UI
- Frontend API documentation page with complete interface reference
2026-04-27 00:38:57 +08:00
augushong
df6b22d35c feat: 导出时增加默认的代码类型 2025-11-09 13:07:27 +08:00
augushong
c17b69fcdf feat: 增加平台信息跳转 2025-10-05 14:28:46 +08:00
augushong
9a0bd9b2b0 feat: 优化三方平台加载 2025-10-04 10:51:10 +08:00
augushong
bfe89fcdef feat: 优化行内样式生成 2025-10-04 10:37:03 +08:00
augushong
23f6db5b48 feat: 导出增加分类显示 2025-06-27 12:52:47 +08:00