{"repo":"EnderWolf006/XBT","free":true,"listed":false,"github":"https://github.com/EnderWolf006/XBT","clone":"git clone https://github.com/EnderWolf006/XBT.git","description":"学不通 — 学习通代签到全栈应用，支持Web前端、Android客户端，提供Golang后端。","language":"TypeScript","stars":116,"topics":["flask","python","xuexitong","we-b","web","android"],"license":"GPL-3.0","category":"mobile-apps","readme_excerpt":"学不通 2.0 (XBT2.0) 一套面向学习通签到场景的三端协同系统： Web 管理端 + Go 后端 + Android 原生壳 --- 项目简介 学不通 2.0 是一个围绕课程签到管理与执行的工具型项目，核心能力包括： - 学习通账号登录与鉴权 - 课程同步与监控课程选择 - 签到活动聚合展示（按课程分组） - 多人代签与状态跟踪 - 多签到类型支持（普通 / 二维码 / 手势 / 位置 / 签到码） - 管理员白名单维护（单条添加、批量导入、删除） - 多账号本地切换 --- 核心特性 1) 三端协同架构 - Web ：主业务 UI，负责课程配置、活动查看、签到执行、白名单管理 - Server ：鉴权、课程与活动数据聚合、签到执行、权限控制 - Android ：WebView 容器 + 原生相机桥接，提升扫码体验与机型兼容性 2) 多类型签到统一流程 - 普通签到：直接执行 - 手势 / 签到码：输入 sign code 执行 - 位置签到：选择预设地点后提交经纬度与地点描述 - 二维码签到：扫码后自动解析 enc/c 并并发执行 3) 并发执行 + 重试机制 - 执行前先调用 /api/sign/check 过滤已签用户 - 对待签用户并发调用 /api/sign/execute - 内置失败重试与进度可视化，支持中断 4) 权限模型清晰 - permission = 1 ：普通用户 - permission = 2 ：管理员 - 管理端白名单接口仅管理员可访问 --- 技术栈 Web ( /Web ) - React 19 + TypeScript - Vite 8 - TailwindCSS 4 - Zustand（本地多账号状态管理） - Axios（统一请求/鉴权拦截） - Framer Motion（动效） - html5-qrcode（浏览器扫码） Server ( /Server ) - Go 1.25 - Gin - GORM - PostgreSQL - JWT 鉴权 - YAML 配置加载 Android ( /Android ) - Kotlin + Jetpack Compose - WebView 容器化 - CameraX + ML Kit（原生扫码） - JavaScript Bridge（原生相机与 Web 页面通信） --- 系统架构 --- 目录结构 --- 快速开始（本地开发） 0) 环境要求 - Node.js 20+ - Go 1.25+ - PostgreSQL 14+（项目脚本按 PostgreSQL 18+ 编写，低版本一般也可用） - Android Studio（如需构建移动端） 1) 初始化数据库 2) 启动后端 默认监听： http://localhost:3030 健康检查： 3) 启动前端 默认地址： http://localhost:5173 开发模式下，Vite 已将 /api 代理到 http://localhost:3030 。 4) 启动 Android（可选） Android 壳默认目标地址来自 Android/app/src/main/res/values/strings.xml 中的 target url 。 --- 配置说明 后端配置： Server/config.yaml 关键字段： - app env ：运行环境标识（ dev/development - Gin debug ， prod/production - Gin release ， test/","default_branch":null,"files":null,"tree":[],"storefront":"/r/EnderWolf006","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/EnderWolf006/XBT/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}