This commit is contained in:
SunWuyuan
2025-03-09 14:59:35 +08:00
parent 08e95a3efc
commit 96c4ab81d9
7 changed files with 271 additions and 74 deletions
+107
View File
@@ -1,4 +1,21 @@
import axios from 'axios';
import { openDB } from 'idb';
const DB_NAME = 'HomeworkDB';
const DB_VERSION = 1;
const initDB = async () => {
return openDB(DB_NAME, DB_VERSION, {
upgrade(db) {
if (!db.objectStoreNames.contains('homework')) {
db.createObjectStore('homework');
}
if (!db.objectStoreNames.contains('config')) {
db.createObjectStore('config');
}
},
});
};
const formatResponse = (data, message = null) => ({
success: true,
@@ -157,6 +174,96 @@ const providers = {
);
}
}
},
indexedDB: {
async loadData(key, date) {
try {
const classNumber = key.split('/').pop();
if (!classNumber) {
return formatError('请先设置班号', 'CONFIG_ERROR');
}
const db = await initDB();
const storageKey = `homework_${classNumber}_${date}`;
const data = await db.get('homework', storageKey);
if (!data) {
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(data));
} catch (error) {
return formatError('读取IndexedDB数据失败:' + error);
}
},
async saveData(key, data, date) {
try {
const classNumber = key.split('/').pop();
if (!classNumber) {
return formatError('请先设置班号', 'CONFIG_ERROR');
}
const db = await initDB();
const storageKey = `homework_${classNumber}_${date}`;
// 将数据序列化为字符串存储
await db.put('homework', JSON.stringify(data), storageKey);
return formatResponse(null, '保存成功');
} catch (error) {
return formatError('保存IndexedDB数据失败:' + error);
}
},
async loadConfig(key) {
try {
const classNumber = key.split('/').pop();
if (!classNumber) {
return formatError('请先设置班号', 'CONFIG_ERROR');
}
const db = await initDB();
const storageKey = `config_${classNumber}`;
const config = await db.get('config', storageKey);
if (!config) {
return formatResponse({
studentList: [],
displayOptions: {}
});
}
// 从字符串解析配置
return formatResponse(JSON.parse(config));
} catch (error) {
return formatError('读取IndexedDB配置失败:' + error);
}
},
async saveConfig(key, config) {
try {
const classNumber = key.split('/').pop();
if (!classNumber) {
return formatError('请先设置班号', 'CONFIG_ERROR');
}
const db = await initDB();
const storageKey = `config_${classNumber}`;
// 将配置序列化为字符串存储
await db.put('config', JSON.stringify(config), storageKey);
return formatResponse(null, '保存成功');
} catch (error) {
return formatError('保存IndexedDB配置失败:' + error);
}
}
}
};