This commit is contained in:
SunWuyuan
2025-03-08 21:51:00 +08:00
parent ec46f6aca2
commit 10b7f3784f
13 changed files with 2450 additions and 1288 deletions
+177
View File
@@ -0,0 +1,177 @@
import axios from 'axios';
const formatResponse = (data, message = null) => ({
success: true,
data,
message
});
const formatError = (message, code = 'UNKNOWN_ERROR') => ({
success: false,
error: { code, message }
});
const providers = {
localStorage: {
async loadData(key, date) {
try {
// 检查是否设置了班号
const classNumber = key.split('/').pop();
if (!classNumber) {
return formatError('请先设置班号', 'CONFIG_ERROR');
}
// 使用班号作为本地存储的前缀
const storageKey = `homework_${classNumber}_${date}`;
const rawData = localStorage.getItem(storageKey);
if (!rawData) {
// 如果是今天的数据且没有找到,返回空结构而不是null
const today = new Date().toISOString().split('T')[0];
if (date === today) {
return formatResponse({
homework: {},
attendance: { absent: [], late: [] }
});
}
return formatError('数据不存在', 'NOT_FOUND');
}
return formatResponse(JSON.parse(rawData));
} catch (error) {
return formatError('读取本地数据失败');
}
},
async saveData(key, data, date) {
try {
// 检查是否设置了班号
const classNumber = key.split('/').pop();
if (!classNumber) {
return formatError('请先设置班号', 'CONFIG_ERROR');
}
// 使用班号作为本地存储的前缀
const storageKey = `homework_${classNumber}_${date}`;
localStorage.setItem(storageKey, JSON.stringify(data));
return formatResponse(null, '保存成功');
} catch (error) {
return formatError('保存本地数据失败');
}
},
async loadConfig(key) {
try {
const classNumber = key.split('/').pop();
if (!classNumber) {
return formatError('请先设置班号', 'CONFIG_ERROR');
}
const storageKey = `config_${classNumber}`;
const rawData = localStorage.getItem(storageKey);
if (!rawData) {
return formatResponse({
studentList: [],
displayOptions: {}
});
}
return formatResponse(JSON.parse(rawData));
} catch (error) {
return formatError('读取本地配置失败');
}
},
async saveConfig(key, config) {
try {
const classNumber = key.split('/').pop();
if (!classNumber) {
return formatError('请先设置班号', 'CONFIG_ERROR');
}
const storageKey = `config_${classNumber}`;
localStorage.setItem(storageKey, JSON.stringify(config));
return formatResponse(null, '保存成功');
} catch (error) {
return formatError('保存本地配置失败');
}
}
},
server: {
async loadData(key, date) {
try {
const res = await axios.get(`${key}/homework?date=${date}`);
if (res.data?.status === false) {
return formatError(res.data.msg || '获取数据失败', 'SERVER_ERROR');
}
return formatResponse(res.data);
} catch (error) {
return formatError(
error.response?.data?.message || '服务器连接失败',
'NETWORK_ERROR'
);
}
},
async saveData(key, data) {
try {
await axios.post(`${key}/homework`, data);
return formatResponse(null, '保存成功');
} catch (error) {
return formatError(
error.response?.data?.message || '保存失败',
'SAVE_ERROR'
);
}
},
async loadConfig(key) {
try {
const res = await axios.get(`${key}/config`);
if (res.data?.status === false) {
return formatError(res.data.msg || '获取配置失败', 'SERVER_ERROR');
}
return formatResponse(res.data);
} catch (error) {
return formatError(
error.response?.data?.message || '服务器连接失败',
'NETWORK_ERROR'
);
}
},
async saveConfig(key, config) {
try {
const res = await axios.post(`${key}/config`, config);
if (res.data?.status === false) {
return formatError(res.data.msg || '保存失败', 'SAVE_ERROR');
}
return formatResponse(null, '保存成功');
} catch (error) {
return formatError(
error.response?.data?.message || '保存失败',
'SAVE_ERROR'
);
}
}
}
};
export default {
loadData: (provider, key, date) => providers[provider]?.loadData(key, date),
saveData: (provider, key, data, date) => providers[provider]?.saveData(key, data, date),
loadConfig: (provider, key) => providers[provider]?.loadConfig(key),
saveConfig: (provider, key, config) => providers[provider]?.saveConfig(key, config)
};
export const ErrorCodes = {
NOT_FOUND: '数据不存在',
NETWORK_ERROR: '网络连接失败',
SERVER_ERROR: '服务器错误',
SAVE_ERROR: '保存失败',
CONFIG_ERROR: '配置错误',
UNKNOWN_ERROR: '未知错误'
};