feat: Add ReadOnlyTokenWarning component and implement student name management dialog

- Introduced ReadOnlyTokenWarning.vue to alert users when using a read-only token.
- Added StudentNameManager.vue for managing student names with a dialog interface.
- Implemented AlternativeCodeDialog.vue for entering alternative codes (functionality pending).
- Created DeviceAuthDialog.vue for device authentication using namespace and password.
- Developed FirstTimeGuide.vue to guide users through the initial setup of Classworks KV.
- Added TokenInputDialog.vue for manual input of KV authorization tokens.
- Updated settings.vue to include a button for opening Classworks KV.
- Enhanced error handling and user feedback across components.
This commit is contained in:
SunWuyuan
2025-11-01 19:31:41 +08:00
parent a2b0cc9e08
commit df3c8e5a12
12 changed files with 2003 additions and 154 deletions
@@ -102,15 +102,35 @@
刷新设备信息
</v-btn>
<v-btn color="primary" @click="reinitializeCloudStorage">
<v-btn color="error" variant="outlined" @click="showReinitDialog = true">
重新初始化云端存储
</v-btn>
</v-card-actions>
<!-- 重新初始化确认对话框 -->
<v-dialog v-model="showReinitDialog" max-width="500">
<v-card>
<v-card-title>确认重新初始化</v-card-title>
<v-card-text>
<v-alert type="warning" variant="tonal" class="mb-3">
<v-alert-title>警告</v-alert-title>
此操作将清除当前的云端存储配置(包括 Token),您需要重新进行授权。
</v-alert>
<p>您确定要重新初始化云端存储吗?</p>
</v-card-text>
<v-card-actions>
<v-spacer />
<v-btn variant="text" @click="showReinitDialog = false">取消</v-btn>
<v-btn color="error" @click="confirmReinitialize">确认</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</v-card>
</template>
<script>
import { kvServerProvider } from "@/utils/providers/kvServerProvider";
import { setSetting } from "@/utils/settings";
export default {
name: "CloudNamespaceInfoCard",
@@ -125,6 +145,7 @@ export default {
namespaceInfo: {},
loading: false,
hasNamespaceInfo: false,
showReinitDialog: false, // 确认对话框显示状态
};
},
watch: {
@@ -168,13 +189,16 @@ export default {
async reloadInfo() {
await this.fetchNamespaceInfo();
},
reinitializeCloudStorage() {
// 触发 KvInitialize 组件的重新初始化
try {
window.dispatchEvent(new CustomEvent("kvinit:open"));
} catch (e) {
console.error("重新初始化云端存储失败:", e);
}
confirmReinitialize() {
// 删除 token 配置(设置为空字符串以触发 shouldShowInit)
setSetting('server.kvToken', '');
setSetting('device.uuid', '');
// 关闭对话框
this.showReinitDialog = false;
// 返回主页(将触发 InitServiceChooser 组件显示)
this.$router.push('/');
},
},
};