1
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -29,6 +29,11 @@ const settingsDefinitions = {
|
||||
default: true,
|
||||
description: '是否启用动态排序以优化显示效果'
|
||||
},
|
||||
'display.showRandomButton': {
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
description: '是否显示随机按钮'
|
||||
},
|
||||
|
||||
// 服务器设置(合并了数据提供者设置)
|
||||
'server.domain': {
|
||||
@@ -46,7 +51,7 @@ const settingsDefinitions = {
|
||||
'server.provider': { // 新增项
|
||||
type: 'string',
|
||||
default: 'localStorage',
|
||||
validate: value => ['server', 'localStorage'].includes(value),
|
||||
validate: value => ['server', 'localStorage', 'indexedDB'].includes(value),
|
||||
description: '数据提供者,用于决定数据存储方式'
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user