欢迎回来
点下方图标进入对应模块
👋
欢迎!第一次使用
按这三步开始:① 添加客户 → ② 给客户建项目 → ③ 解锁后签注册码
客户总数
合作伙伴
项目总数
进行中 · 已交付
有效注册码
即将到期(30 天内)
📋 注册码 张 · 🖥 服务器 台
回款率(CNY)
已收 / 合同
⚠ 服务器到期警示
收款总览
单位 CNY · 年 · 第 季度
今年项目总数
个新签合同
今年合同总金额
CNY 累计签约
今年已收款
占合同
本季度已收款
第 季度累计
本月已收款
本月累计到账
客户回款排行
按"待收金额"降序,前 10 名
💰
还没有合同金额
给项目填上"合同金额"后,这里会显示每个客户的"已收 / 待收"对比
最近签发的注册码
查看全部 →
📭
还没签过码
先添加客户 + 项目,然后点上方"签发新注册码"
客户 项目 类型 到期 状态
📥 导出 CSV
📋
签发时间 客户 / 项目 类型 到期 状态 注册码(前 16 位)
1
选客户
2
选项目
3
选类型
4
填到期
✓
完成
💡
"客户"是付钱给你的甲方公司。每个客户有一个唯一编号(1-16777215),编号会嵌进所有签给他的注册码里。下拉框按"添加时间倒序"——最新加的排最前面。
还没有客户。
⚠
系统里还没有客户。请先 去添加一个客户,再回来签码。
💡
项目是客户名下的具体产品(如"国博新加坡馆")。短码必须选项目(用项目 ID 派生 HMAC 密钥);长码可以不选。下拉同样按时间倒序。
系统中共 个项目;当前选中客户 名下 个
不关联项目 仅长码可签
▾ 显示其它客户 / 未关联的项目( 个,一般用不到)
▴ 收起,只看当前客户名下的项目
系统里还没有任何项目。
该客户名下还没有项目。 没有匹配的项目。
⚠
客户与项目不一致
所选项目原本属于客户"", 但你选的客户是""。 请确认这是有意为之,否则签出来的码可能用错。
该项目已签发记录: 加载中… 最新的在最上面
0 条记录 —— 这个项目还没有签发过注册码,这将是第一张。
(注意:以前签码时如果选了"不关联项目",不会统计在这里;不确定的话去左侧「注册码」列表页搜客户名)
💡
4 种类型按"长度 + 硬件绑定"组合。不知道选哪个 → 短码中级(37 字符 + 硬件绑定,覆盖 90% 展厅场景)。
🕘
该项目上次签的是 (绑机), 该码已作废 · 历史共 条
⚠
当前选了短码,必须返回上一步选一个项目,否则无法签发
🕘
该项目上次:, 该码已作废
在这一天的 23:59:59 之前有效。续费时改这里再发新码。
让客户在 Unity/TD 启动时显示这串字符 → 复制粘贴给你。换机器就失效。
💡
测试模式:在你的 Windows 电脑(Win10 / Win11)上获取 UUID 和 MAC,粘贴到下面,自动算出 13 字符硬件码。 客户实机部署不要用这个——客户那边用 Unity/TD 验证器自动获取。
① 获取主板 UUID(管理员 PowerShell)
(Get-CimInstance Win32_ComputerSystemProduct).UUID
② 获取主网卡 MAC 地址(同一 PowerShell 窗口)
(Get-NetAdapter | Where-Object {$_.MacAddress -and -not $_.Virtual -and $_.InterfaceDescription -notmatch 'Bluetooth'} | Sort-Object MacAddress | Select-Object -First 1).MacAddress
本机硬件码(13 字符)
算法:SHA256("nsstar.v1|MB={uuid}|MAC={mac}") 取前 8 字节 → Crockford Base32 → 13 字符。 与 Unity/TD 验证器一致,纯本地浏览器计算,不上传服务器。
这里写给你自己看,不会出现在注册码里。客户看不到。
即将签发:
客户
项目
类型
到期
✅
签发成功!注册码已自动复制到剪贴板。也可以扫描下方二维码导入手机。
注册码
扫码识别
下一步
  • • 把注册码 / 微信文本发给客户
  • • 关联记录已写到列表,需要时可以来"作废"
  • • 如果是新项目,别忘了给技术员发"集成包"
签发新码:客户/项目清空,从头来过 · 再签一张:保留当前客户和项目,只填新到期日
⚠️
客户列表加载失败
👥
编号 名称 联系人 项目 码 合同 / 已收
⚠️
项目列表加载失败
📁
共 个项目
# 项目 ID 名称 客户 状态 合同金额(已收 / 未收) 服务器到期
🖥
还没有有服务器的项目
在项目编辑页勾选"含服务器"+ 填到期日,这里就会出现
共 台服务器,按到期日升序排列
# 项目 / 客户 项目 ID 到期日 剩余
💰
还没有收款记录
客户每打一笔款记一条,方便对账
日期 客户 / 项目 金额 状态 备注
签发解锁状态
解锁后才能签发新注册码。锁定后已发出的码不受影响。
公钥指纹:(这串发给技术员用来比对)
ECDSA 密钥管理(长码用)
最多 5 把。新签的长码用"激活"那把签;客户端嵌入下面所有公钥(含退役),都能验证。
⚠
解锁签发后才能管理密钥
💡
怎么用?
  • 新建:怀疑当前私钥泄漏 → 新建一把(不立即激活)→ 备好新建集成包给技术员 → 客户端 Build 嵌入"全部公钥"后再激活新密钥
  • 激活:之后签的新长码用这把。短码不受影响(短码靠 master HMAC,与 ECDSA 无关)
  • 退役:从此不签新码;但客户端验旧码仍 OK(公钥仍在嵌入列表里)
  • 删除:彻底从 vault.json 清掉。删了之后,原来这把私钥签的码再也无法验证
邮件提醒
服务器每天定时扫描即将到期的注册码 / 服务器,给配置好的收件人发邮件。
关于
• 当前用户:
• 数据库:本地 SQLite,所有数据都在 data/nsstar.db
• 私钥:data/keys/vault.json,PBKDF2 + AES-GCM 加密