本项目是一个 东华大学「网上服务大厅」门户的视觉与布局复刻(非校方官方产品),使用 React + TypeScript + Vite 实现。页面包含通知公告、日历、应用收藏、推荐服务等模块,并内置 「校园助手」 对话能力:通过 SiliconFlow 的 OpenAI 兼容接口调用大模型,结合前端工具调用与模拟数据,演示教室/会议室/运动场、图书馆、食堂人流、心理咨询、学院官网跳转等场景的交互原型。
- 本项目与东华大学官方无关,仅供学习、演示与二次开发参考。
- 通知、日历、任务、场地与人流等 均为前端静态或模拟数据,不代表真实教务或后勤状态。
- 学院外链部分使用历史
http链接,在严格安全策略或混合内容场景下可能受限;跳转后的一切行为由目标站点负责。 - 助手回复由大模型与前端规则共同生成,不构成校方承诺或办事依据;正式业务请以学校官方系统为准。
| 模块 | 说明 |
|---|---|
| 顶部与横幅 | Header、Hero,贴近门户整体风格 |
| 左侧栏 | UserProfile 用户信息卡片、Tasks 待办、CalendarWidget 日历(mock) |
| 右侧主区 | NoticeBoard 通知(数据见 constants.ts)、AppFavorites 应用收藏、RecommendedServices 推荐服务网格 |
| 校园助手 | AgentModal:需配置 SiliconFlow API Key;支持校区选择、function calling 驱动的富组件(教室/会议/运动场等视图) |
推荐服务网格中点击某项会将名称作为意图传入助手;应用收藏中的「校园助手」入口可打开对话窗口。
为避免“功能在但触发不稳定”或“预约状态不一致”等问题,已补充完整功能说明文档:
文档包含:
- 场景路由规则(提示词 + 本地兜底)
- 用户偏好可视化与可编辑(Memory Drawer)
- 预约成功后整卡灰置与自动折叠机制
- 单次发送出现双卡片的根因与修复策略
- 手工验收建议
- 运行时框架:React 18、TypeScript
- 构建工具:Vite 6
- 样式:Tailwind CSS v3 通过 PostCSS 构建(
tailwind.config.js、index.css),主题色dhu.red/dhu.bg在配置中扩展 - 图标:
lucide-react - 大模型网关:SiliconFlow
POST /v1/chat/completions,流式stream: true;首选模型MODEL_NAME_PREFERRED(默认Pro/Qwen/Qwen2.5-7B-Instruct),失败时自动回退MODEL_NAME_FALLBACK(deepseek-ai/DeepSeek-V3)。见components/agent/constants.ts
├── App.tsx
├── index.tsx
├── index.css # Tailwind 入口与全局样式
├── index.html # HTML 壳(无 CDN)
├── tailwind.config.js / postcss.config.js
├── public/ # 静态资源(如顶栏 Logo `图片1.png`、横幅图,需自行放入)
├── calendarConfig.ts # 日程「今天」默认跟随系统日期;可选 VITE_SCHEDULE_ANCHOR_DATE 固定演示
├── constants.ts / types.ts / metadata.json
└── components/
├── AgentModal.tsx # re-export → agent/AgentModal
├── agent/ # 校园助手子模块(类型、常量、学院数据、场地生成器、富视图、主弹窗逻辑)
├── Header.tsx / Hero.tsx / …
└── …
- Node.js 18.x 或更高(建议使用当前 LTS)
npm install
npm run dev浏览器访问终端中提示的本地地址(通常为 http://localhost:5173)。
生产构建与预览:
npm run build
npm run preview- 在 SiliconFlow 注册并创建 API Key。
- 方式 A(应用内):打开「校园助手」,在首次提示的配置界面粘贴 Key 并保存。密钥会写入浏览器
localStorage,键名为siliconflow_api_key。 - 方式 B(开发环境变量,可选):复制
.env.example为.env.local,填写VITE_SILICONFLOW_API_KEY。优先级:若浏览器localStorage中已有siliconflow_api_key,则 始终优先使用本地存储(便于在应用内覆盖开发环境变量);仅当本地未保存过 Key 时,才使用VITE_SILICONFLOW_API_KEY。在设置面板中「重置」会清除localStorage;若仍存在VITE_SILICONFLOW_API_KEY,则回退到该环境变量;否则需重新在界面中配置。
安全说明:
- 切勿将真实 API Key 提交到 Git 仓库。
.gitignore已忽略*.local等常见本地环境文件。 - 以
VITE_开头的变量会进入 前端构建产物,任何访问站点的人都可能看到。该方式仅适合 个人本地开发 或完全受控环境;面向公网的部署应通过 后端代理 调用 SiliconFlow,避免在浏览器中暴露密钥。
- 接口地址与模型:
components/agent/constants.ts中API_URL、MODEL_NAME_PREFERRED、MODEL_NAME_FALLBACK,可按 SiliconFlow 控制台实际模型 id 调整。 - 日历「今天」:默认使用本机系统日期;若需固定某一天做演示,在
.env.local设置VITE_SCHEDULE_ANCHOR_DATE=YYYY-MM-DD(见.env.example)。
- 助手依赖前端直连 SiliconFlow,密钥与对话仍受浏览器环境与模型输出波动影响;生产环境建议后端代理。
- 多轮对话中对历史 bot 消息会附带
[已展示:类型] 标题形式的摘要以辅助模型理解,但无法等价还原完整富交互状态。 - 本项目以演示交互为主,场地/人流/排班均为模拟数据,不代表真实可预约资源。
若原仓库已有 License,以仓库根目录许可证文件为准。欢迎在本项目基础上迭代,但请保留对官方门户与第三方服务的合理说明,避免误导用户。