fix: 修复音乐编辑时长丢失及日期格式问题

This commit is contained in:
ikmkj
2026-04-09 20:17:59 +08:00
parent aa1eabfeb7
commit 395c75d3fb
5 changed files with 23 additions and 3 deletions

View File

@@ -12,6 +12,7 @@ import java.time.format.DateTimeFormatter;
@JsonComponent @JsonComponent
public class JacksonConfig { public class JacksonConfig {
// 全局默认使用短格式(仅日期),避免影响管理后台等只需日期的场景
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
public static class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> { public static class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {

View File

@@ -74,6 +74,7 @@ public class SingerDTO {
* 收藏时间 * 收藏时间
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime collectTime; private LocalDateTime collectTime;
/** /**

View File

@@ -410,7 +410,10 @@ public class MusicServiceImpl implements MusicService {
// 更新音乐信息 // 更新音乐信息
music.setName(musicDTO.getName()); music.setName(musicDTO.getName());
music.setAlbum(musicDTO.getAlbum()); music.setAlbum(musicDTO.getAlbum());
// 仅当 DTO 中有值时才覆盖时长,避免编辑时被清空
if (musicDTO.getDuration() != null) {
music.setDuration(musicDTO.getDuration()); music.setDuration(musicDTO.getDuration());
}
// 更新音乐类型 // 更新音乐类型
if (musicDTO.getTypeIds() != null) { if (musicDTO.getTypeIds() != null) {

View File

@@ -270,7 +270,8 @@ const submitForm = async () => {
singer: form.value.singer, singer: form.value.singer,
album: form.value.album, album: form.value.album,
typeIds: form.value.types, typeIds: form.value.types,
lyric: form.value.lyric lyric: form.value.lyric,
duration: form.value.duration
}, },
form.value.file, form.value.file,
form.value.cover form.value.cover

View File

@@ -13,6 +13,20 @@ const collectMusicList = ref([])
// 加载状态 // 加载状态
const loading = ref(false) const loading = ref(false)
// 格式化日期时间兼容后端返回的多种格式ISO、yyyy-MM-dd HH:mm:ss、yyyy-MM-dd
const formatDate = (dateStr) => {
if (!dateStr) return ''
const date = new Date(dateStr)
// 检查是否为有效日期
if (isNaN(date.getTime())) return dateStr
return date.getFullYear() + '-' +
String(date.getMonth() + 1).padStart(2, '0') + '-' +
String(date.getDate()).padStart(2, '0') + ' ' +
String(date.getHours()).padStart(2, '0') + ':' +
String(date.getMinutes()).padStart(2, '0') + ':' +
String(date.getSeconds()).padStart(2, '0')
}
// 获取收藏的音乐列表 // 获取收藏的音乐列表
const fetchCollectMusic = async () => { const fetchCollectMusic = async () => {
loading.value = true loading.value = true
@@ -31,7 +45,7 @@ const fetchCollectMusic = async () => {
duration: item.duration || 0, duration: item.duration || 0,
cover: processImageUrl(item.cover), cover: processImageUrl(item.cover),
url: item.url, url: item.url,
collectTime: item.collectTime ? new Date(item.collectTime).toLocaleDateString() : '未知' collectTime: item.collectTime ? formatDate(item.collectTime) : '未知'
})) }))
} else { } else {
ElMessage.error(res.message || '获取收藏的音乐列表失败') ElMessage.error(res.message || '获取收藏的音乐列表失败')