diff --git a/src/components/MessageLog.vue b/src/components/MessageLog.vue index 8712866..1b8d61a 100644 --- a/src/components/MessageLog.vue +++ b/src/components/MessageLog.vue @@ -2,9 +2,7 @@ 消息记录 - + @@ -21,14 +19,7 @@ {{ new Date(msg.timestamp).toLocaleTimeString() }} - + diff --git a/src/components/settings/cards/DataProviderSettingsCard.vue b/src/components/settings/cards/DataProviderSettingsCard.vue new file mode 100644 index 0000000..61c3bc6 --- /dev/null +++ b/src/components/settings/cards/DataProviderSettingsCard.vue @@ -0,0 +1,215 @@ + + + diff --git a/src/pages/guide.vue b/src/pages/guide.vue new file mode 100644 index 0000000..e69de29 diff --git a/src/pages/index.vue b/src/pages/index.vue index 434c019..b09fa58 100644 --- a/src/pages/index.vue +++ b/src/pages/index.vue @@ -627,6 +627,7 @@ export default { if (response.error.code === "NOT_FOUND") { this.state.showNoDataMessage = true; this.state.noDataMessage = response.error.message; + // 确保数据结构完整 this.state.boardData = { homework: {}, attendance: { absent: [], late: [], exclude: [] }, @@ -635,12 +636,25 @@ export default { throw new Error(response.error.message); } } else { - this.state.boardData = response.data; + // 确保数据结构完整 + this.state.boardData = { + homework: response.data.homework || {}, + attendance: { + absent: response.data.attendance?.absent || [], + late: response.data.attendance?.late || [], + exclude: response.data.attendance?.exclude || [], + }, + }; this.state.synced = true; this.state.showNoDataMessage = false; this.$message.success("下载成功", "数据已更新"); } } catch (error) { + // 发生错误时也要确保数据结构完整 + this.state.boardData = { + homework: {}, + attendance: { absent: [], late: [], exclude: [] }, + }; this.$message.error("下载失败", error.message); } finally { this.loading.download = false; diff --git a/src/pages/settings.vue b/src/pages/settings.vue index d12a8c6..e7e9526 100644 --- a/src/pages/settings.vue +++ b/src/pages/settings.vue @@ -15,26 +15,32 @@ - + - + - + + + + + @@ -139,6 +145,7 @@ import ServerSettingsCard from '@/components/settings/cards/ServerSettingsCard.v import EditSettingsCard from '@/components/settings/cards/EditSettingsCard.vue'; import RefreshSettingsCard from '@/components/settings/cards/RefreshSettingsCard.vue'; import DisplaySettingsCard from '@/components/settings/cards/DisplaySettingsCard.vue'; +import DataProviderSettingsCard from '@/components/settings/cards/DataProviderSettingsCard.vue'; import { getSetting, setSetting, @@ -162,7 +169,8 @@ export default { MessageLog, SettingsCard, StudentListCard, - AboutCard + AboutCard, + DataProviderSettingsCard }, setup() { const { mobile } = useDisplay();