diff --git a/src/main/java/com/yunhai/svchall/service/impl/ServiceItemService.java b/src/main/java/com/yunhai/svchall/service/impl/ServiceItemService.java
index 95e7291..ff62ddd 100644
--- a/src/main/java/com/yunhai/svchall/service/impl/ServiceItemService.java
+++ b/src/main/java/com/yunhai/svchall/service/impl/ServiceItemService.java
@@ -146,7 +146,12 @@ public class ServiceItemService {
public SvcItemEditVo adminGet(BoaUser user, String siteCode, Integer id) {
SiteInfo site = siteGuard.requireSiteManager(user, siteCode);
- return SvcItemEditVo.of(requireItem(site, id));
+ ServiceItem item = requireItem(site, id);
+ SvcItemEditVo vo = SvcItemEditVo.of(item);
+ // 封面出参绝对化(与他端列表/详情口径一致),否则管理端编辑页
拿相对路径 404,看着像"封面没保存上";
+ // 保存侧 toRelativeIfLocal 会再相对化,往返幂等
+ vo.setCoverImage(FileUtil.absolutizePlain(item.getCoverImage()));
+ return vo;
}
/** 保存:itemCode 唯一/字典键归属/部门快照/applyUrl 白名单/表单与流程绑定校验;指南附件全量重绑 */
@@ -801,13 +806,13 @@ public class ServiceItemService {
return StringUtils.hasText(value) ? value : null;
}
- /** 封面:本应用上传的相对路径原样入库;外部完整 URL 截取 /upload/ 相对段(与附件同口径) */
+ /** 封面:本应用上传的相对路径原样入库;外部完整 URL 截取 /upload/ 相对段(与附件同口径);折叠历史叠加段自愈 */
private static String toRelativeIfLocal(String coverImage) {
if (!StringUtils.hasText(coverImage)) {
return null;
}
int idx = coverImage.indexOf("/upload/");
- return idx >= 0 ? coverImage.substring(idx) : coverImage;
+ return idx >= 0 ? FileUtil.squashDuplicateUploadSeg(coverImage.substring(idx)) : coverImage;
}
private static Map countMap(List