School Panda 智能课程表

โรงเรียนสอนภาษาจีนแพนด้า · 五月课程表

📅 课程表
📋 列表
🔍 空位
📱 家长回应
👩‍🏫 老师
⚙️ 设置
☁️ 云同步
🤖 AI助手

🖨️ 打印课程表

星期时间学生课程老师教室类型状态操作

🔍 新学生空位查找

⚠️ 时间冲突检查

📱 家长回应

已毕业/停课的学生不会出现在列表里。

👩‍🏫 老师管理

🏫 教室列表 (可自由添加删除)

添加课程时教室栏会显示这里的选项,也可以直接输入新名称。

📚 课程类型 (可自由添加删除)

添加课程时类型栏会显示这里的选项,也可以直接输入新类型。

🗑️ 数据管理

☁️ 云同步状态

状态未配置
上次同步
本地修改
云端修改
设备 ID

⚙️ 同步配置

Worker URL:https://spring-disk-2255.schoolpanda-520.workers.dev
Sync Key:schoolpanda8888sync

贝贝老师那边填一样的配置,两边自动同步。

🔧 Worker 更新代码

把下面代码贴到 Cloudflare Workers 编辑器,点 Deploy。

// ================================================================ // School Panda 统一云同步 Worker // 同时支持:课时系统 + 课程表系统 // 绑定 KV: SP_KV,环境变量: SYNC_KEY // // 数据 key: // 课时系统 → school_panda_data (原有,不变) // 课程表 → school_panda_timetable_data (新增) // ================================================================ const ALLOWED_KEYS = ["school_panda_data", "school_panda_timetable_data"]; export default { async fetch(request, env) { const cors = { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, POST, OPTIONS", "Access-Control-Allow-Headers": "Content-Type, X-Sync-Key, X-Device-Id, X-Data-Key", "Access-Control-Max-Age": "86400", }; if (request.method === "OPTIONS") { return new Response(null, { headers: cors }); } // 密钥验证 const key = request.headers.get("X-Sync-Key"); if (!key || key !== env.SYNC_KEY) { return new Response(JSON.stringify({ error: "unauthorized" }), { status: 401, headers: { ...cors, "Content-Type": "application/json" }, }); } // 读取 dataKey(由客户端指定,默认兼容课时系统) const url = new URL(request.url); const dataKey = request.headers.get("X-Data-Key") || url.searchParams.get("dataKey") || "school_panda_data"; // 安全白名单,防止乱写 KV if (!ALLOWED_KEYS.includes(dataKey)) { return new Response(JSON.stringify({ error: "invalid dataKey" }), { status: 400, headers: { ...cors, "Content-Type": "application/json" }, }); } try { if (request.method === "GET") { const stored = await env.SP_KV.get(dataKey, "json"); return new Response(JSON.stringify(stored || { data: null, modified: 0 }), { headers: { ...cors, "Content-Type": "application/json" }, }); } if (request.method === "POST") { const body = await request.json(); if (!body || !body.data) { return new Response(JSON.stringify({ error: "invalid body" }), { status: 400, headers: { ...cors, "Content-Type": "application/json" }, }); } const payload = { data: body.data, modified: body.modified || Date.now(), device: body.device || "unknown", updatedAt: Date.now(), }; await env.SP_KV.put(dataKey, JSON.stringify(payload)); return new Response(JSON.stringify({ ok: true, modified: payload.modified }), { headers: { ...cors, "Content-Type": "application/json" }, }); } return new Response(JSON.stringify({ error: "method not allowed" }), { status: 405, headers: { ...cors, "Content-Type": "application/json" }, }); } catch (e) { return new Response(JSON.stringify({ error: e.message }), { status: 500, headers: { ...cors, "Content-Type": "application/json" }, }); } }, };
🔑 School Panda AI Key 未配置
🎤 语音 / 自然语言录入
点麦克风说话,或直接打字描述,AI自动解析录入。可以一次说完所有信息:
小明,星期三下午3点到6点,汉字基础二,赵老师,一对一,二楼大教室,罗永中学,家长叫王爸爸,LINE是@wang123
💬 问AI助手
点上方快捷按钮,或直接输入问题