chore: 支持背景音乐设置

This commit is contained in:
2025-12-15 17:44:10 +08:00
parent 4a829b7dfc
commit 5fad2f97f8
8 changed files with 890 additions and 707 deletions

View File

@@ -102,25 +102,15 @@ const getDefaultConfig = () => ({
}
}
},
// ========== 音乐配置默认值和displayConfig同级 ==========
music: {
enabled: false,
filePath: ''
},
battleEndTime: {
date: new Date().toISOString().split('T')[0],
time: '00:00:00'
},
drumConfig: {
showDrum: false, // 控制战鼓的显示,默认不显示
sound: {
volume: 1.0,
enabled: false, // 控制声音播放,默认不播放
soundSrc: '' // 战鼓声音来源文件路径
},
animation: {
enabled: false
},
pattern: {
strongBeats: [1],
totalBeats: 4
}
},
backgroundConfig: {
useBackgroundImage: true,
backgroundImage: '/battle-background.jpg', // 默认战旗背景图片
@@ -332,26 +322,6 @@ export const saveBattleEndTime = async (endTime) => {
return await writeConfig(config);
};
/**
* 获取战鼓配置
* @returns {Object} 战鼓配置
*/
export const getDrumConfig = async () => {
const config = await readConfig();
return config.drumConfig || getDefaultConfig().drumConfig;
};
/**
* 保存战鼓配置
* @param {Object} drumConfig 战鼓配置
* @returns {boolean} 是否保存成功
*/
export const saveDrumConfig = async (drumConfig) => {
const config = await readConfig();
config.drumConfig = drumConfig;
return await writeConfig(config);
};
/**
* 获取背景配置
* @returns {Object} 背景配置
@@ -370,4 +340,97 @@ export const saveBackgroundConfig = async (backgroundConfig) => {
const config = await readConfig();
config.backgroundConfig = backgroundConfig;
return await writeConfig(config);
};
/**
* 获取音乐配置
* @returns {Object} 音乐配置
*/
export const getMusicConfig = async () => {
const config = await readConfig();
return config.music || getDefaultConfig().music;
};
/**
* 保存音乐配置
* @param {Object} musicConfig 音乐配置
* @returns {boolean} 是否保存成功
*/
export const saveMusicConfig = async (musicConfig) => {
const config = await readConfig();
config.music = musicConfig;
return await writeConfig(config);
};
/**
* 上传音乐
* @param {File} file 音乐文件
* @returns {Object} 上传结果 { success: boolean, filePath?: string, filename?: string, originalName?: string, size?: number, error?: string }
*/
export const uploadMusic = async (file) => {
try {
const formData = new FormData();
formData.append('music', file);
const response = await fetch('/api/music', {
method: 'POST',
body: formData
});
const result = await response.json();
if (response.ok) {
return result;
} else {
throw new Error(result.error || '音乐上传失败');
}
} catch (error) {
console.error('上传音乐失败:', error);
return { success: false, error: error.message };
}
};
/**
* 删除音乐
* @param {string} filename 文件名
* @returns {Object} 删除结果 { success: boolean, error?: string }
*/
export const deleteMusic = async (filename) => {
try {
const response = await fetch(`/api/music/${filename}`, {
method: 'DELETE'
});
const result = await response.json();
if (response.ok) {
return result;
} else {
throw new Error(result.error || '音乐删除失败');
}
} catch (error) {
console.error('删除音乐失败:', error);
return { success: false, error: error.message };
}
};
/**
* 获取音乐文件列表
* @returns {Object} 列表结果 { success: boolean, files?: Array, error?: string }
*/
export const getMusicList = async () => {
try {
const response = await fetch('/api/music');
const result = await response.json();
if (response.ok) {
return result;
} else {
throw new Error(result.error || '获取音乐列表失败');
}
} catch (error) {
console.error('获取音乐列表失败:', error);
return { success: false, error: error.message };
}
};