Skip to content
QianFuvPublic

About

扫码查看与预约会议室:Go + Wails v3,支持网页、Windows 和 Android

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

77 Commits

Folders and files

Repository files navigation

Roomark

Roomark

Roomark 是一个给小团队用的会议室预约应用。每间会议室门口贴一张二维码,扫码就能看到房间现在有没有人用、今天还有哪些空档,并直接预约。

  • 免账号:管理员维护一份名单,每人用一个 6 位数字口令确认身份;不在名单里的人可以自己加名字。
  • 有空就能约:没有审批、签到和爽约处罚。时段冲突时,会推荐当天附近的空档和之后几天的同一时间。
  • 多端:同一套代码构建出服务端(同时提供网页)、Windows 桌面端和 Android 应用。

功能

模块 内容
会议室概况 当前状态(空闲 / 谁在用、几点结束)、下一场预约、今天的时间线、本周会议热力图、公告
马上使用 一键占用 30 / 60 / 90 / 120 分钟;进行中可以续时或提前结束
预约 免滚动的日期和时间选择器,必填用途,实时检查冲突;冲突时给出推荐时段
重复预约 每周或隔周、可多选星期;提交前逐次预览,冲突的那几次可以跳过或改到推荐时段
日历 手机三日视图,宽屏周视图,左右滑动翻页
我的预约 即将开始和已结束的预约,重复预约合并显示;个人 iCal 订阅
房间码 每间会议室有一个固定的 6 位房间码,印在二维码海报上,桌面端可以手动输入绑定
管理后台 房间与预约规则、名单(导入、重置口令、管理员)、全部预约(代人预约、不可预约时段)、公告、二维码海报导出(PNG / PDF)
统计 使用时长、利用率与趋势、时段热力图、使用习惯、需求缺口(冲突与推荐采纳率)、取消情况、人员排行,支持 CSV 导出

界面只有简体中文,时区固定为 Asia/Shanghai。支持浅色和深色主题,按屏宽分为手机(< 768 px)、窄屏(768–1279 px)、宽屏(≥ 1280 px)三档布局。

架构

            ┌───────────────────────────────┐
 浏览器 ───▶│ 服务端(Wails server 模式)    │
 桌面端 ───▶│  /       网页前端              │
 Android ──▶│  /api    业务 HTTP API(huma) │
            │  /ical   iCal 订阅             │
            │  SQLite(唯一的数据存储)       │
            └───────────────────────────────┘
  • 所有业务逻辑都在服务端的 HTTP API 里。桌面端和 Android 只是外壳,和浏览器一样通过 HTTP 调用服务端,不在本地保存业务数据。
  • Wails 绑定只用于宿主能力:平台信息、服务器地址设置、保存文件、扫码、托盘和开机自启。
层 技术
后端 Go 1.26、Wails v3、huma v2(OpenAPI 3.1)、sqlc、goose、SQLite(modernc,纯 Go)
前端 React 19 + React Compiler、TypeScript、Vite+、StyleX、Base UI / Animate UI、TanStack Router / Query / Form / Table、Zod、Motion、Temporal polyfill
测试 Go test、Vitest 浏览器模式、MSW、Playwright + axe

快速开始

环境

  • Go 1.26+
  • Node.js 与 pnpm
  • Wails v3 CLI(wails3)
  • 构建 Android 需要 JDK 21 和 Android SDK(设置 JAVA_HOME、ANDROID_HOME)

本地运行服务端

cd apps/roomark
cd frontend && pnpm install && cd ..
ROOMARK_ADMIN_NAME=管理员 ROOMARK_ADMIN_PASSCODE=123456 \
ROOMARK_PUBLIC_URL=http://localhost:8080 WAILS_SERVER_PORT=8080 \
  wails3 task run:server

打开 http://localhost:8080/admin ,用上面的管理员姓名和口令登录,新建房间并导出二维码。

构建与打包

以下命令都在 apps/roomark 目录下运行,产物输出到 apps/roomark/bin/。

目标 命令 产物
服务端(含网页) wails3 task build:server bin/roomark-server(Windows 为 .exe)
服务端 Docker 镜像 wails3 task build:docker 本地镜像 roomark-server:latest,容器内端口 8080
Windows 便携版 wails3 task package bin/roomark-client_<版本>_windows_amd64.zip
Windows 安装包(可选) wails3 task package FORMAT=nsis NSIS 安装程序
Android wails3 task android:package bin/roomark-client_<版本>_android_arm64.apk

Windows 便携版解压即用,所有数据(服务器地址、网页存储)都放在程序同目录的 data 文件夹,不写入系统目录。桌面端和 Android 首次启动时填写服务器地址,也可以在构建时通过 -X main.defaultServerURL=https://... 预置。

每个版本的服务端程序、Windows 便携版、Android 安装包和 Docker 镜像(ghcr.io/qianfuv/roomark-server:v<版本> 和 latest)都由 CI 构建并发布在 Releases。服务端压缩包名为 roomark-server_<版本>_linux_amd64.tar.gz 和 roomark-server_<版本>_windows_amd64.zip;每个压缩包里只有一个同名顶层目录,包含程序和 LICENSE。Release 另附 SHA256SUMS 校验文件。

部署细节见 docs/deployment.md,开发和测试见 docs/development.md。

文档

文档 内容
docs/spec.md 产品规则、数据模型、HTTP API、前端页面与宿主服务
docs/deployment.md 服务端配置、Docker、反向代理、客户端分发
docs/development.md 目录结构、开发命令、代码生成、测试与检查、CI 与发布
docs/design/visual-system.md 字体、字号角色、间距、图标和弹窗规则
docs/design/t3-soft.json T3 Soft 配色(深色为 colors,浅色为 variants.light)
apps/roomark/api/openapi.json 由后端导出的 OpenAPI 3.1 接口描述

许可证

本项目以 MIT 许可证 发布。

apps/roomark/frontend/assets/ 中随附的 JetBrainsLxgwNerdMono 字体(JetBrains Mono + 霞鹜文楷 Mono 合并字体)使用 SIL Open Font License 1.1,见 OFL.txt。

About

扫码查看与预约会议室:Go + Wails v3,支持网页、Windows 和 Android

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages