TSS Portal 使用指南
返回首页
使用指南 v2.6 · 2026-04-30

TSS Portal
使用指南

面向团队的轻量级工作门户系统,将常用链接、工具入口、项目信息集中在一个统一入口

1

系统概述

什么是 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

角色说明

管理员 — 完整管理权限,含后台配置
普通用户 — 使用工作台和工具
2

快速入门

访问地址

页面地址说明
🔐 登录页/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
3

登录与认证

登录方式

Google 账号登录(推荐)

点击登录页上的 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。
4

门户首页

首页三大区域

常用链接
常用工具
项目信息

每个区域的标题、排序和可见性均可在「布局配置」中调整(管理员全局配置,用户个人配置)。

常用链接(v2.4 改造:分类卡片 + Popover)

双视图模式
  • 顶部 cat-tab 胶囊按钮「全部 / 分类 A / 分类 B / ...」
  • 选「全部」:显示分类卡片网格,每张卡显示分类名 + 链接数量徽章
  • 选具体分类:直接平铺该分类下所有链接
  • 未分类的链接自动聚合到末尾的「其他」虚拟卡
  • 图标由系统根据名称和描述自动分配(去重),无需手动选择
点击分类卡 → Popover 浮层
  • 智能定位(视口边缘自动调整方向,不溢出)
  • 列出该分类下所有链接(含个人链接,带「我的」徽章)
  • 点 ESC / 点外部 / 滚动页面 → Popover 自动关闭
  • 底部「+ 添加链接到此分类」→ 跳到管理页并预选当前分类

常用工具

功能说明
  • 顶部胶囊按钮按工具分类过滤(PPT 制作 / 数据分析 / 邮件处理 / ...)
  • 工具卡显示状态指示灯(在线 / 离线 / 检测中)
  • 受权限和个人隐藏设置控制(在「我的工作台 → 工具设置」管理)

项目信息(v2.5 改造)

与链接相同的分类卡 + Popover 模式
  • 顶部 cat-tab 过滤栏(绿色风格)
  • 「全部」显示项目分类卡片,点击弹 Popover 概览
  • 选具体分类 tab → 平铺显示该分类下项目(保留绿色边框风格)
  • 「+ 添加项目到此分类」→ 跳管理页预选分类

主题切换

深色模式
浅色模式
跟随系统

主题偏好保存在本地,刷新后生效。管理员可在「管理后台 → 外观设置」设置全局默认主题。

5

管理后台

仅管理员角色可访问 | 地址:/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 或余额不足时,系统自动回退到本地模板,不影响使用。

6

用户工作台

所有登录用户可访问 | 地址:/my.html
Tab功能备注
我的链接 查看管理员分配的链接(只读);创建和管理个人私有链接 需要管理员开启「允许用户创建个人链接」
我的项目 查看管理员分配的项目(只读);上传个人 HTML 项目文件 需要管理员开启「允许用户上传项目」
工具设置 勾选/取消要在首页显示的工具;拖拽排序个人工具顺序 隐藏后仍可通过直接访问 URL 使用
分类管理 管理个人链接的自定义分类 仅在「允许用户创建个人链接」开启时显示
布局配置 自定义首页各区域的显示顺序和标题;可一键重置为管理员默认配置 仅在「允许用户修改布局」开启时显示
7

内置工具集(9 个)

8

权限体系

角色权限矩阵

功能管理员普通用户
访问门户首页
使用内置工具
访问用户工作台
提交 Bug 反馈
创建个人链接取决于权限设置
上传个人项目取决于权限设置
自定义布局取决于权限设置
访问管理后台
管理用户账号
配置 LLM 凭证

内容可见性规则

内容显示逻辑
  • 公开(all):所有登录用户均可看到
  • 仅分配(assigned):只有在 user_content_access 表中被授权的用户才能看到
  • 个人(private):仅创建者自己可见(user_id 关联)

授权自动清理(v2.4 新增)

防僵尸授权

当管理员把某条内容的 visibilityassigned 改为 all 时,系统会自动删除该内容在 user_content_access 中的所有授权记录。

为什么? 防止以后切回 assigned 时旧授权意外恢复(曾发生过:原本只授权给 A 用户,后改成全员公开,再后来又改回限定状态,结果 A 用户依然能看,造成困惑)。

静态资源访问控制(v2.5 新增)

防绕过 URL 直访

之前 /projects/<slug>/tools/<dir>/* 是纯静态资源,知道 URL 即可访问。现已加入服务端鉴权:

  • 未登录访问 → 自动 redirect 到 /login.html(HTTP 302)
  • 登录但无权限 → 返回 403 友好提示页(含「返回首页」按钮)
  • 资源文件(.css/.js/图片等)放行(性能优化,安全边界在 HTML 入口)
  • 认证机制:JWT 同时存 localStorage(API 调用)+ httpOnly Cookie(HTML 入口校验)
9

部署与更新

重要提醒:修改代码后,禁止直接 SSH 上传文件到服务器。请始终通过 bash deploy.sh 进行同步,以确保数据库安全和版本一致性。

部署流程

1
在本地修改代码
正常编辑文件,建议先用 npm start 本地验证功能。
2
提交到 Git(可选但推荐)
将变更提交到本地 Git,便于追踪历史和回退。
3
执行部署脚本
在项目根目录运行:bash deploy.sh
4
等待自动完成
脚本自动完成:diff 检测 → DB 备份(如有 schema 变更)→ rsync 同步 → Docker 重建 → 健康检查。
# 部署命令(在 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)

不会同步到服务器的内容

rsync 排除项
  • node_modules/ — 服务器独立安装
  • data/ — 数据库文件(保留服务器生产数据)
  • .env — 环境变量(各环境独立配置)
  • .git/.claude/deploy.log — 本地专用
  • design/*.command*.md 文档文件

生产服务器信息

项目
服务器地址[服务器地址]
服务端口3000
远端目录[项目目录]
DB 备份目录[备份目录]
容器名称[容器名称]
10

常见问题

登录相关

Q: 登录失败,提示「用户未注册」

需要管理员先将您的邮箱添加到用户白名单(管理后台 → 用户管理 → 新增用户)。

Q: Google 登录按钮不显示

检查网络是否能访问 Google 服务。如在境内网络中可尝试开启代理,或使用开发者入口备用登录方式。如仍不行,请联系管理员检查 Google Client ID 配置。

Q: 账号被停用无法登录

请联系管理员在「用户管理」中重新启用账号。

内容显示相关

Q: 为什么看不到某些链接/工具/项目?
  • 该内容设置为「仅分配」且您不在分配列表中 → 联系管理员添加
  • 该内容设置为「仅自己可见」且不是您创建的 → 正常
  • 您在「工作台 → 工具设置」中隐藏了该工具 → 取消隐藏即可
Q: 工作台中「分类管理」和「布局配置」Tab 不见了

这些功能受管理员的「权限设置」控制。若被关闭,对应 Tab 会自动隐藏。请联系管理员开启。

工具使用相关

Q: 日报周报心得 AI 润色没有效果/报错
  • 检查管理后台 LLM 配置是否已填写正确的 API Key
  • 确认选择的提供商(MiniMax/GLM)账户余额充足
  • 如 LLM 不可用,系统会自动回退到本地模板输出
Q: 邮件发送工具授权失败

需要管理员在「邮件配置」中填写正确的 Gmail OAuth Client ID,并确保已在 Google Cloud Console 中添加对应域名的授权来源。

Q: HTML 转 PNG/PPT 渲染失败

确认服务器上 Playwright 浏览器依赖已正确安装。如是首次部署,可 SSH 进入服务器运行 docker exec [容器名称] npx playwright install chromium

部署相关

Q: deploy.sh 执行失败
  • 确认本地与服务器之间 SSH 免密登录已配置
  • 查看 deploy.log 获取详细错误信息
  • 手动检查:ssh root@[服务器地址] 'docker logs [容器名称] --tail 30'
Q: 部署后服务访问异常,如何回滚数据库

deploy.sh 会在 DB 变更时自动备份。如需手动回滚,SSH 进入服务器,在 [备份目录] 找到对应备份文件,按提示执行恢复命令。