常见问题

一般问题

什么是 Seatmap.pro?

Seatmap.pro 是创建、管理和渲染交互式场地座位图的企业平台。Editor 用于可视化设计,Booking Renderer SDK(npm 包 @seatmap.pro/renderer)通过 WebGL 提供选座,Booking API v2 用于实时可用性和销售集成。平台仅是可视化层,不存储您的价格、销售数据或支付信息,票务系统始终是唯一事实来源。

支持哪些类型的场地?

支持各种规模和配置的音乐厅、体育场、剧院、竞技场、会议中心、体育场地,以及任何编号或通用入场空间。Editor 处理编号座位、通用入场区(GA)、桌子、站立区和混合布局,也可导入已有 SVG 平面图并在上面添加座位。

可以处理多少座位?

Booking Renderer 使用 WebGL 加速,在现代浏览器中可用 60fps 渲染超过 10,000 个座位。Editor 可创建数万座位的座位图。超过 30,000 座的大型场地会自动在单座位和区域总览等细节级别间切换,保持流畅。

渲染器支持哪些框架?

SDK 不依赖特定框架,支持 React、Vue、Angular、Svelte 和原生 JavaScript。使用 npm install @seatmap.pro/renderer 安装,挂载到任意 HTML 容器。示例见 Renderer 入门指南。

集成

如何与票务系统集成?

分四步:在 Editor 设计座位图,通过 Booking API v2 创建并关联活动,为座位或区域分配价格,再使用 TypeScript SDK 将 Renderer 嵌入售票页面。加载活动时,Renderer 从 API 读取座位可用性和价格,锁定与销售也通过 Booking API 完成。详见集成指南及为什么 API 集成对票务平台至关重要。

什么是 Booking API v2?

它是管理活动、定价和座位预订生命周期的 REST API,支持创建活动、分配价格、锁定、确认销售和解锁。云端基础 URL 为 https://booking.seatmap.pro/api/private/v2.0/,完整参考见 API v2 文档。

可以将 Editor 嵌入应用吗?

可以使用 iframe 嵌入,控制可见工具和模式,传入凭据实现 SSO 自动登录,并通过 postMessage 通信。参阅 iframe API 和 iframe 通信。

定价

有哪些套餐?

提供 Cloud(SaaS,每月 100 欧元起,每年最多 170,000 座)、On-Premise(自托管,每年 20,000 欧元或 60,000 欧元永久许可证,不限座位)和 Custom(企业定制集成)。不按座位或预订次数收费。参阅首页套餐区域。

有免费试用吗?

通过演示申请表联系我们,安排个性化演示并讨论试用方式。我们提供引导式入门,帮助您使用自己的场地数据评估平台。

部署

可以部署到自己的服务器吗?

可以。本地部署套餐提供 Docker 镜像和 Helm chart,可在自己的 Kubernetes 基础设施中部署,完整控制数据驻留、网络隔离及配置。参阅本地部署指南、Helm chart 文档,以及 SaaS、本地部署与托管式本地部署比较。

本地部署需要什么系统条件?

需要 Kubernetes 1.24+、Helm 3、PostgreSQL 14+ 和 Redis 7+。平台由 Editor Service(Java 21、Spring Boot)、Booking Service(Java 21、Spring Boot)、Converter Service(Node.js 22)和前端应用组成。生产负载推荐至少 4 核 CPU 和 8 GB 内存。

安全

如何保障数据安全?

Seatmap.pro 仅提供可视化,不处理支付,也不在服务器存储交易数据或价格信息。您的票务系统是业务关键数据的唯一事实来源。Renderer 与 Booking API 通过 HTTPS 通信并强制 HSTS。本地部署让您完整控制数据驻留和网络策略。

是否符合 GDPR?

平台采用与 GDPR 一致的数据实践,只收集最少个人数据,即 Editor 用户账户。云端数据托管于欧盟数据中心,本地部署数据全部保留在您的基础设施。详见隐私政策。

Editor

无法添加用户

一个邮箱只能属于一个 Editor 账户。若新用户邮箱已在本组织或其他组织对应账户,Editor 会提示账户已存在,不创建新账户。

租户管理员或全局管理员需通过 Admin Panel(管理面板) 授予访问。User Management(用户管理) 无法分配或启用账户,组织管理员需请求上述管理员处理。公司内无人具备相应角色时,请联系 Seatmap.pro 支持。

  1. 选择 Admin Admin → Admin Panel。
  2. 打开 Organizations 标签页并点击组织。
  3. 在 Users 标签页查找该用户:
    • 状态 Enabled:已有访问权限。
    • 状态 Disabled:点击 Enable。
    • 不在列表中:点击 Assign User,找到用户,再点击 Assign User。要设为组织管理员,在 Role 列修改角色。

租户管理员可分配同一租户组织中的账户,且只能启用仅属于当前组织的账户。来自其他租户、无组织的账户分配,或同时属于其他组织的账户启用,均需全局管理员。分配不会自动启用被禁用账户。

如何禁用 S3 支持?

不希望使用位图替代矢量图时,可设置 SEATMAP_STORAGE_TYPE=local 禁用 S3,参阅图片转换器存储配置。

如何设置价格颜色?

可在 Booking Renderer 和 Admin Renderer 中修改。

Booking Renderer

修改 settings->theme->priceColors。

基础用法:

const settings: IBookingRendererSettings = {
  theme: {
    priceColors: [
      ['#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#00FFFF', '#FF00FF'],
    ],
  },
};

可配置一个颜色数组。活动价格项多于颜色数量时,会循环使用颜色。

为避免不同价格使用相同颜色,建议提供尽可能长的颜色数组。

高级用法:

const settings: IBookingRendererSettings = {
  theme: {
    priceColors: [
      ['#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#00FFFF', '#FF00FF'],
      ['#FF0000', '#00FF00', '#0000FF', '#FF00FF', '#00FFFF'],
      ['#FF0000', '#00FF00', '#0000FF'],
      ['#FF0000', '#0000FF'],
      ['#0000FF'],
    ],
  },
};

渲染时通过 API 获取价格项数量,再选择对应颜色列表。例如返回 5 项价格,则选择包含 5 个颜色的数组:

根据价格项数量配置颜色数组
使用匹配价格数量的颜色数组渲染座位

找不到长度恰好匹配的数组时,回退到第一个数组;仍不够长则循环使用颜色。因此建议将最长数组放在首位。

Admin Renderer

可为不同座位设置不同颜色类别。调用 setSeatsCategory() 时传入座位列表(通常由管理员手动选择)、类别编号和新颜色:

renderer.setSeatsCategory(seats, 3, '#E50914');

此颜色不保存到数据库,仅供管理员使用。

也可按上述方式设置 settings->theme->colorCategories 的默认颜色。

如何禁止删除已锁定或已售座位?

可在租户或组织层禁止删除已分配价格且状态为 Locked 或 Sold 的座位。

Editor 中尝试删除这类座位时会显示警告,但仍可确认删除,请求以 forceDelete=true 发送。设置 prohibitDeleteSeats 后,删除请求会失败。

使用 POST /api/organization/config/,并附加 orgId 参数启用:

{
"prohibitDeleteSeats":"true/false"
}

仅具有 ROLE_SUPER_ADMIN 的用户可使用该端点。

通过 GET /api/organization/current 或登录方法读取后端信息。

iframe 打开 Editor 时如何隐藏菜单项?

在 iframe 地址添加 hidden 参数,指定无需显示的菜单项。例如隐藏 Pricing、Select、Label、Line 和 Polygon:
?hidden=pricing,select,label,line,polygon

可隐藏菜单项列表

  schema: 'mode.schema',
  underlay: 'mode.underlay',
  venueShape: 'mode.venueShape',
  pricingZones: 'mode.pricingZones',
  pricing: 'mode.pricing',
  section: 'mode.section',

  select: 'tool.select',
  seatRows: 'tool.seatRows',
  table: 'tool.table',

  shape: 'tool.shape',
  rect: 'tool.shape.rect',
  circle: 'tool.shape.circle',
  line: 'tool.shape.line',
  polygon: 'tool.shape.polygon',

  label: 'tool.label',
  selectSeats: 'tool.selectSeats',
  selectRows: 'tool.selectRows',
  addSeat: 'tool.addSeat',
  numberSeats: 'tool.numberSeats',
  selectSections: 'tool.selectSections',
  save: 'tool.save'

如何启用 Editor 预览?

设置以下参数:

services.preview.url:预览服务地址,默认 http://localhost:5000/。

services.preview.api-key:转换器要求的 bearer 共享密钥。Helm 自动生成并连接;仅在转换器运行于 chart 外时手动设置。

输入功能、设置、端点或 SDK 方法。