系统概述
了解 TSS Portal 的定位与技术架构
快速入门
3分钟快速上手,从登录到创建内容
管理后台
14 个管理模块完整操作指南
内置工具
11个实用工具完整使用说明
部署与更新
deploy.sh 一键同步到生产服务器
常见问题
FAQ 与故障排查指南
系统概述
什么是 TSS Portal
TSS Portal 是面向团队内部使用的轻量级工作门户系统,基于 Node.js + Express + SQLite 实现,前端使用 Vue 3 直接渲染,无需构建步骤。
系统将「常用链接、工具入口、项目信息」集中在一个统一入口,通过 Google 账号登录,管理员可按用户分配可见内容,普通用户拥有独立工作台管理个人内容。
技术架构
| 层级 | 技术选型 |
|---|---|
| 后端 | Node.js + Express.js |
| 数据库 | better-sqlite3 (SQLite) |
| 前端渲染 | Vue 3 (CDN 方式,无需构建) |
| 认证 | Google Identity Services + JWT(7天有效期) |
| 部署 | Docker + docker-compose,通过 deploy.sh 一键同步 |
| UI 图标 | Lucide Icons |
角色说明
快速入门
访问地址
| 页面 | 地址 | 说明 |
|---|---|---|
| 🔐 登录页 | /login.html | 用户登录入口 |
| 🏠 门户首页 | / | 主页面(登录后默认跳转) |
| ⚙️ 管理后台 | /admin.html | 管理员功能,仅管理员可访问 |
| 👤 用户工作台 | /my.html | 个人设置与内容管理 |
| 📖 使用指南 | /USER_GUIDE.html | 本文档 |
本地启动服务
cd TSS_PORTAL
cp .env.example .env # 配置环境变量
npm install
npm start
服务启动后,访问 http://localhost:3000 即可使用。
user@company.com。登录与认证
登录方式
点击登录页上的 Google 登录按钮,使用 企业邮箱完成 OAuth 认证。
- 需要管理员提前将您的邮箱添加到用户白名单
- 首次登录后自动同步头像和用户名
点击登录页底部的「开发者入口」,输入已注册邮箱和访问码即可进入。
认证流程
用户点击登录 → Google OAuth 验证
→ 后端验证 id_token → 签发 JWT
→ 存入 localStorage(有效期 7 天)
→ 自动跳转首页
退出登录
点击右上角头像 → 选择「退出登录」,清除本地 JWT 令牌并跳转登录页。
Google 公钥证书自动维护 v2.7 新增
服务器部署在阿里云无法访问 googleapis.com,Google 验签用的公钥(每 1-2 周轮换一次)由管理员浏览器代为拉取后推送到服务器。普通用户登录无任何感知。
- 管理员每次打开
/admin.html时自动触发一次刷新(静默执行,无需操作) - 「Google 配置」tab 底部的「Google 公钥证书」卡片可手动点击「立即刷新」
- 登录路径带 5 秒超时 + 宽容缓存策略,即使 Google 临时不可达也不会 hang 死整个登录请求
POST /api/auth/inject-google-certs 救急通道(BYPASS_SECRET 保护,绕过登录直接注入公钥),详见 README.md。门户首页
首页三大区域
每个区域的标题、排序和可见性均可在「布局配置」中调整(管理员全局配置,用户个人配置)。
常用链接(v2.4 改造:分类卡片 + Popover)
- 顶部 cat-tab 胶囊按钮「全部 / 分类 A / 分类 B / ...」
- 选「全部」:显示分类卡片网格,每张卡显示分类名 + 链接数量徽章
- 选具体分类:直接平铺该分类下所有链接
- 未分类的链接自动聚合到末尾的「其他」虚拟卡
- 图标由系统根据名称和描述自动分配(去重),无需手动选择
- 智能定位(视口边缘自动调整方向,不溢出)
- 列出该分类下所有链接(含个人链接,带「我的」徽章)
- 点 ESC / 点外部 / 滚动页面 → Popover 自动关闭
- 底部「+ 添加链接到此分类」→ 跳到管理页并预选当前分类
常用工具
- 顶部胶囊按钮按工具分类过滤(PPT 制作 / 数据分析 / 邮件处理 / ...)
- 工具卡显示状态指示灯(在线 / 离线 / 检测中)
- 受权限和个人隐藏设置控制(在「我的工作台 → 工具设置」管理)
项目信息(v2.5 改造)
- 顶部 cat-tab 过滤栏(绿色风格)
- 「全部」显示项目分类卡片,点击弹 Popover 概览
- 选具体分类 tab → 平铺显示该分类下项目(保留绿色边框风格)
- 「+ 添加项目到此分类」→ 跳管理页预选分类
主题切换
主题偏好保存在本地,刷新后生效。管理员可在「管理后台 → 外观设置」设置全局默认主题。
管理后台
/admin.html管理模块一览(13 个)
| 模块 | 功能说明 |
|---|---|
| 链接管理 | CRUD、拖拽排序、公开范围切换、首页展示开关;批量添加(v2.4)支持 TSV/CSV 粘贴 |
| 工具管理 | CRUD、URL/颜色/分类、状态检测、按需启动、公开范围与内容分配 |
| 项目管理 | HTML 文件上传 + URL 标识映射;卡片颜色;分类下拉(v2.5);表格分类列 |
| 链接分类 | CRUD + 拖拽排序;删除前检查关联链接 |
| 工具分类 | CRUD + 拖拽排序;含图标 |
| 项目分类 v2.5 新增 | 项目分类 CRUD + 拖拽排序,与链接分类相同模式(含用户私有分类支持) |
| 布局配置 | 首页区域标题、显隐、顺序;上下/三栏布局切换 |
| LLM 配置 | 支持 MiniMax / GLM / Kimi / Doubao / DeepSeek(V4 Flash/Pro),工具 AI 配置可独立选 use_provider 和 system prompt |
| 外观设置 / Google 配置 | 全局主题、Google Client ID / Secret、Google 公钥证书自动维护(v2.7 新增) |
| 用户管理 | 预注册(白名单);角色与启用状态;内容分配(链接/工具/项目) |
| 权限设置 | 4 个全局开关:用户自定义链接 / 项目 / 修改布局 / 修改外观 |
| Bug 反馈 | 查看用户提交的 Bug 报告(含截图);标记已读 / 关闭 / 回复 |
| SSO 证书监控 v2.6 新增 | 管理 SSO 证书信息、配置 Google Sheets 同步、设置到期通知邮箱 |
批量添加链接(v2.4)
- 顶部默认分类 + 默认公开范围(每行可单独覆盖)
- 表格逐行填写:标题 / URL / 描述 / 分类 / 公开范围
- 支持粘贴 TSV/CSV:从 Excel / Notion / Google Sheets 直接复制粘贴整张表
- 分隔符自动识别(含制表符 → TSV,否则 CSV)
- 第一行如含「标题/title」「url/链接」字样会被识别为表头并跳过
- 行级修改自动脱离默认值(边框变色提示)
- 提交时图标自动分配,事务原子性(要么全部成功要么全部回滚)
项目分类(v2.5)
- 侧边栏「项目分类」入口,同链接分类操作模式
- 项目编辑 Modal 增加「分类」下拉
- 项目管理表格增加「分类」列
- 支持用户私有项目分类(在「我的工作台」管理)
- 删除分类时该分类下项目自动归到「其他」(ON DELETE SET NULL)
LLM 配置说明
LLM 配置分为两层:
- 全局提供商凭证:在「LLM 配置」Tab 中设置 MiniMax 或 GLM 的 API Key、API URL、模型名称等
- 工具级配置:为「日报周报心得」「日语润色」等 AI 工具单独选择使用哪个提供商,并可自定义系统提示词
当 LLM 未启用、无 API Key 或余额不足时,系统自动回退到本地模板,不影响使用。
用户工作台
/my.html| Tab | 功能 | 备注 |
|---|---|---|
| 我的链接 | 查看管理员分配的链接(只读);创建和管理个人私有链接 | 需要管理员开启「允许用户创建个人链接」 |
| 我的项目 | 查看管理员分配的项目(只读);上传个人 HTML 项目文件 | 需要管理员开启「允许用户上传项目」 |
| 工具设置 | 勾选/取消要在首页显示的工具;拖拽排序个人工具顺序 | 隐藏后仍可通过直接访问 URL 使用 |
| 分类管理 | 管理个人链接的自定义分类 | 仅在「允许用户创建个人链接」开启时显示 |
| 布局配置 | 自定义首页各区域的显示顺序和标题;可一键重置为管理员默认配置 | 仅在「允许用户修改布局」开启时显示 |
内置工具集(9 个)
权限体系
角色权限矩阵
| 功能 | 管理员 | 普通用户 |
|---|---|---|
| 访问门户首页 | ✓ | ✓ |
| 使用内置工具 | ✓ | ✓ |
| 访问用户工作台 | ✓ | ✓ |
| 提交 Bug 反馈 | ✗ | ✓ |
| 创建个人链接 | ✓ | 取决于权限设置 |
| 上传个人项目 | ✓ | 取决于权限设置 |
| 自定义布局 | ✓ | 取决于权限设置 |
| 访问管理后台 | ✓ | ✗ |
| 管理用户账号 | ✓ | ✗ |
| 配置 LLM 凭证 | ✓ | ✗ |
内容可见性规则
- 公开(all):所有登录用户均可看到
- 仅分配(assigned):只有在
user_content_access表中被授权的用户才能看到 - 个人(private):仅创建者自己可见(user_id 关联)
授权自动清理(v2.4 新增)
当管理员把某条内容的 visibility 从 assigned 改为 all 时,系统会自动删除该内容在 user_content_access 中的所有授权记录。
为什么? 防止以后切回 assigned 时旧授权意外恢复(曾发生过:原本只授权给 A 用户,后改成全员公开,再后来又改回限定状态,结果 A 用户依然能看,造成困惑)。
静态资源访问控制(v2.5 新增)
之前 /projects/<slug> 和 /tools/<dir>/* 是纯静态资源,知道 URL 即可访问。现已加入服务端鉴权:
- 未登录访问 → 自动 redirect 到
/login.html(HTTP 302) - 登录但无权限 → 返回 403 友好提示页(含「返回首页」按钮)
- 资源文件(.css/.js/图片等)放行(性能优化,安全边界在 HTML 入口)
- 认证机制:JWT 同时存 localStorage(API 调用)+ httpOnly Cookie(HTML 入口校验)
部署与更新
bash deploy.sh 进行同步,以确保数据库安全和版本一致性。部署流程
npm start 本地验证功能。bash deploy.sh# 部署命令(在 TSS_PORTAL 目录中执行)
bash deploy.sh
deploy.sh 智能行为
| 场景 | 行为 |
|---|---|
| 无文件变更 | 自动跳过,不执行任何操作 |
| SSH / rsync 失败 | 立即报错并打印具体错误位置(包括行号 + 命令) |
| 数据库结构变更(init.js 修改) | 自动备份服务器数据库到 [备份目录] 后再部署 |
| Docker 构建失败 | 自动回滚数据库到备份版本 |
| 健康检查失败 | 输出警告和手动检查命令,保留 DB 备份 |
| 部署成功 | 输出服务地址,记录到 deploy.log |
从生产同步数据到本地(pull-data.sh)
把生产数据库 + 项目 HTML + 工具数据拉到本地:
bash pull-data.sh
自带安全机制:
- Schema 安全预检:本地
init.js比服务器新(说明你有未发布修改)会要求输入yes确认 - 本地服务停止检测:检查 3000 端口占用,让你停服防 DB 损坏
- WAL checkpoint:确保
[容器名称].db-wal落入主库(防数据丢失) - 本地 DB 备份:拷贝到
data/.backup-TIMESTAMP/,可随时回滚 - 同步 3 个 SQLite 文件(.db / .db-wal / .db-shm)
不会同步到服务器的内容
node_modules/— 服务器独立安装data/— 数据库文件(保留服务器生产数据).env— 环境变量(各环境独立配置).git/、.claude/、deploy.log— 本地专用design/、*.command、*.md文档文件
生产服务器信息
| 项目 | 值 |
|---|---|
| 服务器地址 | [服务器地址] |
| 服务端口 | 3000 |
| 远端目录 | [项目目录] |
| DB 备份目录 | [备份目录] |
| 容器名称 | [容器名称] |
常见问题
登录相关
需要管理员先将您的邮箱添加到用户白名单(管理后台 → 用户管理 → 新增用户)。
检查网络是否能访问 Google 服务。如在境内网络中可尝试开启代理,或使用开发者入口备用登录方式。如仍不行,请联系管理员检查 Google Client ID 配置。
请联系管理员在「用户管理」中重新启用账号。
内容显示相关
- 该内容设置为「仅分配」且您不在分配列表中 → 联系管理员添加
- 该内容设置为「仅自己可见」且不是您创建的 → 正常
- 您在「工作台 → 工具设置」中隐藏了该工具 → 取消隐藏即可
这些功能受管理员的「权限设置」控制。若被关闭,对应 Tab 会自动隐藏。请联系管理员开启。
工具使用相关
- 检查管理后台 LLM 配置是否已填写正确的 API Key
- 确认选择的提供商(MiniMax/GLM)账户余额充足
- 如 LLM 不可用,系统会自动回退到本地模板输出
需要管理员在「邮件配置」中填写正确的 Gmail OAuth Client ID,并确保已在 Google Cloud Console 中添加对应域名的授权来源。
确认服务器上 Playwright 浏览器依赖已正确安装。如是首次部署,可 SSH 进入服务器运行 docker exec [容器名称] npx playwright install chromium。
部署相关
- 确认本地与服务器之间 SSH 免密登录已配置
- 查看
deploy.log获取详细错误信息 - 手动检查:
ssh root@[服务器地址] 'docker logs [容器名称] --tail 30'
deploy.sh 会在 DB 变更时自动备份。如需手动回滚,SSH 进入服务器,在 [备份目录] 找到对应备份文件,按提示执行恢复命令。
