Skip to content

Repository files navigation

东华网上服务大厅(前端复刻)与校园助手

本项目是一个 东华大学「网上服务大厅」门户的视觉与布局复刻(非校方官方产品),使用 React + TypeScript + Vite 实现。页面包含通知公告、日历、应用收藏、推荐服务等模块,并内置 「校园助手」 对话能力:通过 SiliconFlow 的 OpenAI 兼容接口调用大模型,结合前端工具调用与模拟数据,演示教室/会议室/运动场、图书馆、食堂人流、心理咨询、学院官网跳转等场景的交互原型。

免责声明

  • 本项目与东华大学官方无关,仅供学习、演示与二次开发参考。
  • 通知、日历、任务、场地与人流等 均为前端静态或模拟数据,不代表真实教务或后勤状态。
  • 学院外链部分使用历史 http 链接,在严格安全策略或混合内容场景下可能受限;跳转后的一切行为由目标站点负责。
  • 助手回复由大模型与前端规则共同生成,不构成校方承诺或办事依据;正式业务请以学校官方系统为准。

功能概览

模块 说明
顶部与横幅 HeaderHero,贴近门户整体风格
左侧栏 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.jsindex.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_FALLBACKdeepseek-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 配置

  1. SiliconFlow 注册并创建 API Key
  2. 方式 A(应用内):打开「校园助手」,在首次提示的配置界面粘贴 Key 并保存。密钥会写入浏览器 localStorage,键名为 siliconflow_api_key
  3. 方式 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.tsAPI_URLMODEL_NAME_PREFERREDMODEL_NAME_FALLBACK,可按 SiliconFlow 控制台实际模型 id 调整。
  • 日历「今天」:默认使用本机系统日期;若需固定某一天做演示,在 .env.local 设置 VITE_SCHEDULE_ANCHOR_DATE=YYYY-MM-DD(见 .env.example)。

已知限制(实现层面)

  • 助手依赖前端直连 SiliconFlow,密钥与对话仍受浏览器环境与模型输出波动影响;生产环境建议后端代理。
  • 多轮对话中对历史 bot 消息会附带 [已展示:类型] 标题 形式的摘要以辅助模型理解,但无法等价还原完整富交互状态。
  • 本项目以演示交互为主,场地/人流/排班均为模拟数据,不代表真实可预约资源。

许可证与贡献

若原仓库已有 License,以仓库根目录许可证文件为准。欢迎在本项目基础上迭代,但请保留对官方门户与第三方服务的合理说明,避免误导用户。

About

A web app for DHUers to book a reservation of places

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages