常见问题
一般问题
什么是 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 支持。
- 选择 Admin Admin → Admin Panel。
- 打开 Organizations 标签页并点击组织。
- 在 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 外时手动设置。