fix: 适配校验页两个 bug

1. buildSnapshot 改用 selectRecentBySiteId(按updated_at取最新配置),不再依赖 is_latest
   修复:编辑脚本后保存预览版,buildSnapshot 读到旧脚本导致快照生成失败,发布按钮不出现
2. approveConfig 版本号排序改为 CAST(version AS UNSIGNED) 数值排序
   修复:version 是 VARCHAR,字母序导致 '9' > '10',版本号永远过不了 10
This commit is contained in:
mediabot-pt
2026-07-07 23:33:45 +08:00
parent 6e881daeb9
commit 886e2fba70
3 changed files with 8 additions and 4 deletions

View File

@@ -18,6 +18,10 @@ public interface SiteConfigMapper extends BaseMapper<SiteConfig> {
@Select("SELECT * FROM site_configs WHERE site_id = #{siteId} AND is_latest = 1 AND deleted = 0 LIMIT 1")
SiteConfig selectLatestBySiteId(@Param("siteId") String siteId);
/** 取最后更新的配置(用于快照构建,不受 is_latest 限制) */
@Select("SELECT * FROM site_configs WHERE site_id = #{siteId} AND deleted = 0 ORDER BY updated_at DESC LIMIT 1")
SiteConfig selectRecentBySiteId(@Param("siteId") String siteId);
@Select("SELECT * FROM site_configs WHERE site_id = #{siteId} AND status = 'approved' AND deleted = 0 ORDER BY created_at DESC")
List<SiteConfig> selectApprovedBySiteId(@Param("siteId") String siteId);

View File

@@ -61,8 +61,8 @@ public class SiteSnapshotServiceImpl implements SiteSnapshotService {
var site = siteMapper.selectBySiteId(siteId);
String siteType = site != null && site.getSiteType() != null ? site.getSiteType().getValue() : null;
// 1. 脚本
SiteConfig latest = siteConfigMapper.selectLatestBySiteId(siteId);
// 1. 脚本(取最后更新的配置,不受 is_latest 限制,确保未审批的脚本也能入快照)
SiteConfig latest = siteConfigMapper.selectRecentBySiteId(siteId);
if (latest != null && latest.getScriptStoragePath() != null && !latest.getScriptStoragePath().isBlank()) {
try {
String script = storageService.read(latest.getScriptStoragePath());