This repository has been archived on 2026-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
skycurtain a77cd71888 feat(view): JSON 折叠交互——chevron、行尾摘要、滚动补偿与折叠全部
- json-text-view:投影层接线(可视窗口/spacer/行号反查/指针换算/边缘滚动八接入点);折叠事务带 scrollTop 补偿(锚点=视口顶部 model 行号,折叠视口上方块无跳变);选区端点写入前钳制,syncDomSelection 修正坐标混用隐患;props.json 变化重置折叠态;chevron(hover 显/已折叠常显)与行尾摘要 {…} N 行;非 JSON 响应折叠 UI 整体关闭(hasFolds 门控)
- endpoint-panel:meta 行「折叠全部/展开全部」(收 depth=1 顶层块,经 defineExpose 通道)
- 新增 6 个视图层测试(折叠渲染/chevron 交互/选区隔离/补偿无跳变/状态重置/非 JSON 降级)
- 附技术博客 docs/JSON预览器代码折叠技术博客.md
- 全量 89/89 四绿(test/type-check/lint/build)
2026-09-09 14:17:42 +08:00

new-api-key-bench

NewAPI sk-key 接口的「文档 + 调试」二合一前端工具(bench),替代 Postman 的专用调试台,服务 karpool 拼车项目的接口调试与换算验证。

技术栈

Vite + Vue 3 + TypeScript + TDesign + TanStack Query(vue-query)+ Pinia + VueUse + Vitest。运行时与包管理器为 Bun。

运行

网关地址只从环境变量 GATEWAY 读取(代码不写死默认值)。两种配置方式任选其一:

# 方式一:复制示例文件后填入真实地址(.env.local 已被 gitignore,不会提交)
cp new-api-key-bench/.env.example new-api-key-bench/.env.local
# 然后编辑 .env.local,把 GATEWAY 改成你的网关地址

# 方式二:shell 环境变量(PowerShell:$env:GATEWAY="https://…")
export GATEWAY=https://your-gateway.example.com

未配置时 bun run dev 会直接报错提示;build 无代理不受影响。

cd new-api-key-bench
bun install
bun run dev        # 默认 http://localhost:5173,接口经 dev server 代理转发到 GATEWAY
bun run test       # vitest(单元 + 组件 + 集成冒烟全量)
bun run lint       # oxlint + eslint
bun run build      # type-check + vite build(dist/)

使用

  1. 左侧选择接口(6 个,平铺不分组)→ 右侧开 tab
  2. tab 内展开「注意事项」看该接口的实证调研坑文档
  3. 填 sk-key(每 tab 独立、仅存内存、刷新即重置,不落盘;切换 tab 输入保留)
  4. 点「发送请求」→ 响应区显示元信息(状态/耗时/字符数)+ 虚拟滚动高亮 JSON
  5. 复制 / 下载 .json;非 2xx 响应体照常展示(调试 401/403 是刚需)

架构说明

  • CORS:页面请求打相对路径(/api、/v1),由 Vite dev server 代理转发到网关(vite.config.ts,网关地址从环境变量 GATEWAY 读取),网关未配跨域头也不受影响
  • 大响应性能:/api/log/token 1000 条日志(pretty-print 2~4MB、约两万行)由 json-text-view.vue 虚拟滚动渲染——DOM 恒定 ~40 行,语法高亮仅对可视区行执行
  • 请求语义:纯手动触发(TanStack Query enabled 门控 + refetch),staleTime: Infinity,切 tab 不自动重发;queryKey 为 ['endpoint', path, skKey],换 key 即新查询
  • tab 状态:Pinia(开/关/激活/拖拽重排 + 每 tab sk-key,Postman 语义);面板随 tab 切换卸载重建,sk-key 由 store 持有所以输入保留,响应数据由 Query 缓存兜底恢复;t-tabs 用官方 list prop 数据驱动(插槽 panel 在动态增删下与数据脱钩,是已踩过的坑)

已知边界

  • useClipboard 在非 https 环境(如 http://localhost)自动降级 execCommand
  • /v1/models/:model 单模型详情接口未纳入(数据源是硬编码静态表,与 /v1/models 不一致,无调试价值)

部署(开发机构建 + 服务器轻构建运行)

构建在开发机完成(四绿验证后的 dist 才是部署物),服务器只做镜像 COPY + 起容器, 不需要任何构建工具链。

# —— 开发机 ——
bun run build                        # 得到 dist/(此时已过 test/type-check/lint)
# SFTP 上传四个部署物到服务器同一目录:
#   dist/  Caddyfile  compose.yaml  Dockerfile
#   (.env 不上传,GATEWAY 在服务器上以 .env 或环境变量提供)

# —— 服务器(目录内需有 .env,内容为 GATEWAY=https://…)——
docker compose up -d --build         # 首次:拉 caddy 镜像 + COPY 产物起容器,秒级
# 浏览器打开 http://<服务器IP>:8080

# —— 常规更新(开发机)——
bun run build                        # 重新构建
# SFTP 覆盖 dist/
docker compose up -d --build         # 服务器上重新 COPY + 替换容器
  • Caddy 承担与 dev 代理相同的职责:静态文件 + /api、/v1 转发到 $GATEWAY + SPA fallback
  • 换网关:改服务器上的 .env 后 docker compose up -d --force-recreate(无需重新 build)
  • 暴露公网时把 Caddyfile 的 :80 改为域名,Caddy 自动签发 HTTPS 证书
  • compose.yaml(Compose 规范标准文件名)里 GATEWAY 为必填(未设置时启动即报错,不会带错误配置运行)

文档

  • 交互与技术决策:docs/bench交互设计文档.md
  • 施工计划与验收记录:docs/bench实施计划.md
  • 接口数据源:docs/NewAPI-sk-key接口文档.md
S
Description
No description provided
Readme
244 KiB
Languages
TypeScript 66.5%
Vue 32.6%
CSS 0.4%
HTML 0.3%
Dockerfile 0.2%