chore: 基本服务器版本完成
This commit is contained in:
325
src/services/configService.js
Normal file
325
src/services/configService.js
Normal file
@@ -0,0 +1,325 @@
|
||||
// 配置文件API路径
|
||||
const CONFIG_API_URL = '/api/config';
|
||||
|
||||
/**
|
||||
* 读取配置文件
|
||||
* @returns {Object} 配置数据
|
||||
*/
|
||||
export const readConfig = async () => {
|
||||
try {
|
||||
const response = await fetch(CONFIG_API_URL);
|
||||
if (response.ok) {
|
||||
return await response.json();
|
||||
} else if (response.status === 404) {
|
||||
// 配置文件不存在,使用默认配置
|
||||
console.log('配置文件不存在,使用默认配置');
|
||||
return getDefaultConfig();
|
||||
}
|
||||
throw new Error(`获取配置失败: ${response.status}`);
|
||||
} catch (error) {
|
||||
console.error('读取配置失败:', error);
|
||||
return getDefaultConfig();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 写入配置文件
|
||||
* @param {Object} config 新的配置数据
|
||||
* @returns {boolean} 是否写入成功
|
||||
*/
|
||||
export const writeConfig = async (config) => {
|
||||
try {
|
||||
const response = await fetch(CONFIG_API_URL, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(config)
|
||||
});
|
||||
|
||||
if (response.ok) {
|
||||
const result = await response.json();
|
||||
return result.success;
|
||||
}
|
||||
|
||||
throw new Error(`保存配置失败: ${response.status}`);
|
||||
} catch (error) {
|
||||
console.error('写入配置失败:', error);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
// 同步版本的readConfig(用于向后兼容)
|
||||
export const getConfig = async () => {
|
||||
return await readConfig();
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取默认配置(用于兜底)
|
||||
* @returns {Object} 默认配置
|
||||
*/
|
||||
const getDefaultConfig = () => ({
|
||||
individualRankings: [],
|
||||
teamRankings: [],
|
||||
bonusRules: [],
|
||||
systemUsers: [],
|
||||
displayConfig: {
|
||||
individual: {
|
||||
showLevel: false,
|
||||
showDepartment: false,
|
||||
scoreColumn: {
|
||||
displayName: '分数',
|
||||
displayStyle: 'number'
|
||||
},
|
||||
columnWidths: {}
|
||||
},
|
||||
team: {
|
||||
showMemberCount: false,
|
||||
showLeader: false,
|
||||
totalScoreColumn: {
|
||||
displayName: '总分',
|
||||
displayStyle: 'number'
|
||||
},
|
||||
columnWidths: {}
|
||||
}
|
||||
},
|
||||
battleEndTime: {
|
||||
date: new Date().toISOString().split('T')[0],
|
||||
time: '23:59:59'
|
||||
},
|
||||
drumConfig: {
|
||||
sound: {
|
||||
volume: 1.0,
|
||||
enabled: false
|
||||
},
|
||||
animation: {
|
||||
enabled: false
|
||||
},
|
||||
pattern: {
|
||||
strongBeats: [1],
|
||||
totalBeats: 4
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 获取个人排名数据
|
||||
* @returns {Array} 个人排名数组
|
||||
*/
|
||||
export const getIndividualRankings = async () => {
|
||||
const config = await readConfig();
|
||||
return config.individualRankings || [];
|
||||
};
|
||||
|
||||
/**
|
||||
* 保存个人排名数据
|
||||
* @param {Array} rankings 个人排名数组
|
||||
* @returns {boolean} 是否保存成功
|
||||
*/
|
||||
export const saveIndividualRankings = async (rankings) => {
|
||||
const config = await readConfig();
|
||||
config.individualRankings = rankings;
|
||||
return await writeConfig(config);
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取战队排名数据
|
||||
* @returns {Array} 战队排名数组
|
||||
*/
|
||||
export const getTeamRankings = async () => {
|
||||
const config = await readConfig();
|
||||
return config.teamRankings || [];
|
||||
};
|
||||
|
||||
/**
|
||||
* 保存战队排名数据
|
||||
* @param {Array} rankings 战队排名数组
|
||||
* @returns {boolean} 是否保存成功
|
||||
*/
|
||||
export const saveTeamRankings = async (rankings) => {
|
||||
const config = await readConfig();
|
||||
config.teamRankings = rankings;
|
||||
return await writeConfig(config);
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取奖金规则
|
||||
* @returns {Array} 奖金规则数组
|
||||
*/
|
||||
export const getBonusRules = async () => {
|
||||
const config = await readConfig();
|
||||
return config.bonusRules || [];
|
||||
};
|
||||
|
||||
/**
|
||||
* 保存奖金规则
|
||||
* @param {Array} rules 奖金规则数组
|
||||
* @returns {boolean} 是否保存成功
|
||||
*/
|
||||
export const saveBonusRules = async (rules) => {
|
||||
const config = await readConfig();
|
||||
config.bonusRules = rules;
|
||||
return await writeConfig(config);
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取系统用户
|
||||
* @returns {Array} 系统用户数组
|
||||
*/
|
||||
export const getSystemUsers = async () => {
|
||||
const config = await readConfig();
|
||||
return config.systemUsers || [];
|
||||
};
|
||||
|
||||
/**
|
||||
* 保存系统用户
|
||||
* @param {Array} users 系统用户数组
|
||||
* @returns {boolean} 是否保存成功
|
||||
*/
|
||||
export const saveSystemUsers = async (users) => {
|
||||
const config = await readConfig();
|
||||
config.systemUsers = users;
|
||||
return await writeConfig(config);
|
||||
};
|
||||
|
||||
/**
|
||||
* 添加用户
|
||||
* @param {Object} user 用户信息
|
||||
* @returns {boolean} 是否添加成功
|
||||
*/
|
||||
export const addSystemUser = async (user) => {
|
||||
try {
|
||||
const users = await getSystemUsers();
|
||||
// 检查用户名是否已存在
|
||||
const existingUser = users.find(u => u.username === user.username);
|
||||
if (existingUser) {
|
||||
throw new Error('用户名已存在');
|
||||
}
|
||||
|
||||
users.push({
|
||||
id: Date.now(),
|
||||
...user
|
||||
});
|
||||
|
||||
return await saveSystemUsers(users);
|
||||
} catch (error) {
|
||||
console.error('添加用户失败:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除用户
|
||||
* @param {number} userId 用户ID
|
||||
* @returns {boolean} 是否删除成功
|
||||
*/
|
||||
export const deleteSystemUser = async (userId) => {
|
||||
try {
|
||||
let users = await getSystemUsers();
|
||||
// 确保至少保留一个管理员用户
|
||||
if (users.length <= 1) {
|
||||
throw new Error('系统至少需要保留一个管理员用户');
|
||||
}
|
||||
|
||||
users = users.filter(u => u.id !== userId);
|
||||
return await saveSystemUsers(users);
|
||||
} catch (error) {
|
||||
console.error('删除用户失败:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 更新用户信息
|
||||
* @param {number} userId 用户ID
|
||||
* @param {Object} updatedData 更新的数据
|
||||
* @returns {boolean} 是否更新成功
|
||||
*/
|
||||
export const updateSystemUser = async (userId, updatedData) => {
|
||||
try {
|
||||
const users = await getSystemUsers();
|
||||
const userIndex = users.findIndex(u => u.id === userId);
|
||||
|
||||
if (userIndex === -1) {
|
||||
throw new Error('用户不存在');
|
||||
}
|
||||
|
||||
// 如果要更新用户名,检查是否与其他用户冲突
|
||||
if (updatedData.username && updatedData.username !== users[userIndex].username) {
|
||||
const existingUser = users.find(u => u.id !== userId && u.username === updatedData.username);
|
||||
if (existingUser) {
|
||||
throw new Error('用户名已存在');
|
||||
}
|
||||
}
|
||||
|
||||
users[userIndex] = {
|
||||
...users[userIndex],
|
||||
...updatedData
|
||||
};
|
||||
|
||||
return await saveSystemUsers(users);
|
||||
} catch (error) {
|
||||
console.error('更新用户失败:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取显示配置
|
||||
* @returns {Object} 显示配置
|
||||
*/
|
||||
export const getDisplayConfig = async () => {
|
||||
const config = await readConfig();
|
||||
return config.displayConfig || {};
|
||||
};
|
||||
|
||||
/**
|
||||
* 保存显示配置
|
||||
* @param {Object} displayConfig 显示配置
|
||||
* @returns {boolean} 是否保存成功
|
||||
*/
|
||||
export const saveDisplayConfig = async (displayConfig) => {
|
||||
const config = await readConfig();
|
||||
config.displayConfig = displayConfig;
|
||||
return await writeConfig(config);
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取战斗结束时间
|
||||
* @returns {Object} 结束时间配置
|
||||
*/
|
||||
export const getBattleEndTime = async () => {
|
||||
const config = await readConfig();
|
||||
return config.battleEndTime || {};
|
||||
};
|
||||
|
||||
/**
|
||||
* 保存战斗结束时间
|
||||
* @param {Object} endTime 结束时间配置
|
||||
* @returns {boolean} 是否保存成功
|
||||
*/
|
||||
export const saveBattleEndTime = async (endTime) => {
|
||||
const config = await readConfig();
|
||||
config.battleEndTime = endTime;
|
||||
return await writeConfig(config);
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取战鼓配置
|
||||
* @returns {Object} 战鼓配置
|
||||
*/
|
||||
export const getDrumConfig = async () => {
|
||||
const config = await readConfig();
|
||||
return config.drumConfig || {};
|
||||
};
|
||||
|
||||
/**
|
||||
* 保存战鼓配置
|
||||
* @param {Object} drumConfig 战鼓配置
|
||||
* @returns {boolean} 是否保存成功
|
||||
*/
|
||||
export const saveDrumConfig = async (drumConfig) => {
|
||||
const config = await readConfig();
|
||||
config.drumConfig = drumConfig;
|
||||
return await writeConfig(config);
|
||||
};
|
||||
Reference in New Issue
Block a user