SN管理端新增 issue 办理签发命令:两条件硬校验并分别提示,isForce 固定为 0;管理端详情页加入办理签发按钮与确认文案

This commit is contained in:
ypsdf1
2026-09-30 12:11:49 +08:00
parent 51e418ac16
commit f033e71095
2 changed files with 23 additions and 4 deletions
+4 -2
View File
@@ -4209,6 +4209,7 @@ async function renderSnDetail(el, sn) {
'<button class="btn btn-red" onclick="snAdmCmd(\'cancel\', 0)">📋 代办注销</button>' + '<button class="btn btn-red" onclick="snAdmCmd(\'cancel\', 0)">📋 代办注销</button>' +
'<button class="btn btn-red" onclick="snAdmCmd(\'bind\')">🔒 永久绑定</button>' + '<button class="btn btn-red" onclick="snAdmCmd(\'bind\')">🔒 永久绑定</button>' +
'<button class="btn btn-yellow" onclick="snAdmCmd(\'report_check\')">🚩 报失核查</button>' + '<button class="btn btn-yellow" onclick="snAdmCmd(\'report_check\')">🚩 报失核查</button>' +
'<button class="btn btn-yellow" onclick="snAdmCmd(\'issue\')">🎫 办理签发</button>' +
'</div>' + '</div>' +
'<p style="color:var(--dim);font-size:12px;margin-top:8px">命令通过 web_sn_commands 下发,游戏服 10~30 秒内执行并回执。' + '<p style="color:var(--dim);font-size:12px;margin-top:8px">命令通过 web_sn_commands 下发,游戏服 10~30 秒内执行并回执。' +
'<br><b>强制注销</b>:豁免三条件门槛,直接执行且<b>不进入冷静期</b>;<b>强制补发</b>:豁免三条件门槛,按定义直接执行;' + '<br><b>强制注销</b>:豁免三条件门槛,直接执行且<b>不进入冷静期</b>;<b>强制补发</b>:豁免三条件门槛,按定义直接执行;' +
@@ -4288,7 +4289,7 @@ async function snAdmCmd(cmd, force) {
if (force === undefined || force === null) force = 1; if (force === undefined || force === null) force = 1;
const sn = snAdm.sn; const sn = snAdm.sn;
if (!sn) return; if (!sn) return;
const names = { locate: '定位', reissue: '强制补发', cancel: (force ? '强制注销' : '代办注销'), bind: '永久绑定', report_check: '报失核查' }; const names = { locate: '定位', reissue: '强制补发', cancel: (force ? '强制注销' : '代办注销'), bind: '永久绑定', report_check: '报失核查', issue: '办理签发' };
const warns = { const warns = {
locate: '立即查询该SN在游戏世界中的位置?', locate: '立即查询该SN在游戏世界中的位置?',
reissue: '强制补发 ' + sn + '?旧SN作废并签发新SN,玩家需在线。', reissue: '强制补发 ' + sn + '?旧SN作废并签发新SN,玩家需在线。',
@@ -4296,7 +4297,8 @@ async function snAdmCmd(cmd, force) {
? '强制注销 ' + sn + '?豁免三条件门槛,将销毁对应实物并直接注销,不进入1小时冷静期。' ? '强制注销 ' + sn + '?豁免三条件门槛,将销毁对应实物并直接注销,不进入1小时冷静期。'
: '代办注销 ' + sn + '?按三条件门槛校验(不在本人身上 / 不在本人领地箱子 / 脱离自身管控超12小时),未达标会被拒绝;成功后进入1小时冷静期。', : '代办注销 ' + sn + '?按三条件门槛校验(不在本人身上 / 不在本人领地箱子 / 脱离自身管控超12小时),未达标会被拒绝;成功后进入1小时冷静期。',
bind: '把 ' + sn + ' 永久绑定为非法物品?该SN不可恢复。', bind: '把 ' + sn + ' 永久绑定为非法物品?该SN不可恢复。',
report_check: '立即核查 ' + sn + ' 的当前位置并给出报失结论?' report_check: '立即核查 ' + sn + ' 的当前位置并给出报失结论?',
issue: '为 ' + sn + ' 办理签发新设备?前提:旧SN已注销解绑 且 注销冷静期已结束(1小时),未达标会分别提示是哪一条未通过。'
}; };
if (!await glassConfirm(warns[cmd] || ('确认对 ' + sn + ' 执行「' + names[cmd] + '」?'))) return; if (!await glassConfirm(warns[cmd] || ('确认对 ' + sn + ' 执行「' + names[cmd] + '」?'))) return;
try { try {
+19 -2
View File
@@ -1201,7 +1201,7 @@ function snAdminCmd() {
$cmd = trim(getParam('cmd', '')); $cmd = trim(getParam('cmd', ''));
$sn = trim(getParam('sn', '')); $sn = trim(getParam('sn', ''));
$reason = trim(getParam('reason', '')); $reason = trim(getParam('reason', ''));
$allowed = ['cancel', 'reissue', 'locate', 'bind', 'report_check']; $allowed = ['cancel', 'reissue', 'locate', 'bind', 'report_check', 'issue'];
if (!in_array($cmd, $allowed, true)) error('非法命令'); if (!in_array($cmd, $allowed, true)) error('非法命令');
if ($sn === '') error('缺少sn'); if ($sn === '') error('缺少sn');
@@ -1212,12 +1212,29 @@ function snAdminCmd() {
$row = $rr->fetchArray(SQLITE3_ASSOC); $row = $rr->fetchArray(SQLITE3_ASSOC);
if (!$row) error('SN不存在'); if (!$row) error('SN不存在');
// issue(办理签发):两条硬校验、分别提示哪条不达标(与玩家端最小化提示相反)。
// error() 直接 exit → 两条提示天然互斥。校验通过才入队,isForce 固定为 0(无豁免)。
if ($cmd === 'issue') {
$st = (string)$row['status'];
if (!in_array($st, array('cancelled', 'destroyed', 'reissued'), true)) {
error('旧SN尚未注销解绑,当前状态:' . snStatusCn($st)
. '。请先完成注销/销毁/补发后再办理');
}
$cdUntil = snCooldownLeft($db, (string)$row['owner']);
$nowTs = snNow();
if ($cdUntil > $nowTs) {
error('注销冷静期未结束,还剩 ' . ceil(($cdUntil - $nowTs) / 60) . ' 分钟');
}
}
// ★ is_force=1(默认,强制操作):Java 侧本次绕过冷静期 + 绕过三条件门槛 // ★ is_force=1(默认,强制操作):Java 侧本次绕过冷静期 + 绕过三条件门槛
// (强制注销 / 强制补发按定义豁免"脱离自身管控"三项)。 // (强制注销 / 强制补发按定义豁免"脱离自身管控"三项)。
// 代办操作传 force=0 → 照常按三条件校验,逐条判定见 SN 详情的 custody。 // 代办操作传 force=0 → 照常按三条件校验,逐条判定见 SN 详情的 custody。
$force = (int)getParam('force', 1) ? 1 : 0; $force = (int)getParam('force', 1) ? 1 : 0;
// issue 不受 $force 影响(校验是硬的、无豁免);cancel/reissue 等原有 force 语义不变。
$id = snEnqueueCmd($db, $cmd, $sn, $row['owner'], $row['item_type'], $id = snEnqueueCmd($db, $cmd, $sn, $row['owner'], $row['item_type'],
$reason !== '' ? $reason : '管理员操作', '', 0, $force); $reason !== '' ? $reason : ($cmd === 'issue' ? '管理员办理签发' : '管理员操作'),
'', 0, $cmd === 'issue' ? 0 : $force);
success(['id' => $id], '命令已下发,等待游戏服务器执行(10~30 秒)'); success(['id' => $id], '命令已下发,等待游戏服务器执行(10~30 秒)');
} }