API mission

This commit is contained in:
2026-06-13 13:35:00 +07:00
parent 6f6d925fdd
commit 1a8bddb037
23 changed files with 1930 additions and 23 deletions

View File

@@ -35,6 +35,10 @@
<span class="navDot"></span>
Missions
</a>
<a class="navItem" href="#" data-page="integrations">
<span class="navDot"></span>
Tích hợp
</a>
</nav>
<div class="sidebarFooter">
@@ -587,6 +591,79 @@
</div>
</div>
<div class="page" id="pageIntegrations" data-page-content="integrations" hidden>
<div class="integrationsPage">
<section class="card">
<div class="cardHeader">
<div>
<div class="cardTitle">Modbus trigger</div>
<div class="cardSub">System → Triggers — coil 10012000 gắn mission_id. Thiết bị remote bật coil (Modbus TCP :5502) → mission vào queue.</div>
</div>
<button id="integrationAddTriggerBtn" type="button" class="btn primary">Thêm trigger</button>
</div>
<div class="cardBody">
<div id="integrationTriggerEmpty" class="mutedNote">Chưa có trigger Modbus.</div>
<div id="integrationTriggerList" class="missionList"></div>
<div class="integrationCoilSection">
<div class="integrationSectionLabel">Coil đã gán (bấm để mô phỏng rising edge)</div>
<div id="integrationCoilGrid" class="integrationCoilGrid"></div>
</div>
</div>
</section>
<section class="card">
<div class="cardHeader">
<div>
<div class="cardTitle">REST API — MiR v2.0.0</div>
<div class="cardSub">Hệ thống bên ngoài POST mission vào queue qua REST.</div>
</div>
</div>
<div class="cardBody integrationApiBody">
<div class="row rowWide">
<label>Base URL</label>
<div id="integrationApiBaseUrl" class="mono integrationCode"></div>
</div>
<div class="integrationApiBlock">
<div class="integrationSectionLabel">POST /mission_queue</div>
<pre class="integrationPre">curl -X POST "<span class="integrationCurlHost">http://localhost:8080</span>/api/v2.0.0/mission_queue" \
-H "Content-Type: application/json" \
-d '{"mission_id":"&lt;mission_id&gt;","priority":0,"robot_id":"default"}'</pre>
</div>
<div class="integrationApiBlock">
<div class="integrationSectionLabel">GET /mission_queue · GET /missions · GET /status</div>
<pre class="integrationPre">GET /api/v2.0.0/mission_queue
GET /api/v2.0.0/missions
GET /api/v2.0.0/status</pre>
</div>
<div class="row rowWide integrationTestRow">
<label for="integrationRestMission">Thử nhanh</label>
<div class="integrationTestActions">
<select id="integrationRestMission"></select>
<button id="integrationRestTestBtn" type="button" class="btn subtle">POST queue</button>
</div>
</div>
</div>
</section>
<section class="card">
<div class="cardHeader">
<div>
<div class="cardTitle">MiRFleet — Lên lịch mission</div>
<div class="cardSub">Ưu tiên, gán robot, chạy ASAP hoặc theo thời gian.</div>
</div>
<div class="integrationHeaderActions">
<button id="integrationRefreshBtn" type="button" class="btn subtle">Tải lại</button>
<button id="integrationAddScheduleBtn" type="button" class="btn primary">Thêm lịch</button>
</div>
</div>
<div class="cardBody">
<div id="integrationScheduleEmpty" class="mutedNote">Chưa có lịch fleet.</div>
<div id="integrationScheduleList" class="missionList"></div>
</div>
</section>
</div>
</div>
<div id="configSplitter" class="splitter" role="separator" aria-orientation="vertical" tabindex="0"></div>
<div class="contentRight" id="contentRight">
@@ -773,8 +850,78 @@
</form>
</dialog>
<dialog id="integrationAddTriggerDialog" class="missionDialog">
<form id="integrationAddTriggerForm" method="dialog" class="missionDialogForm">
<div class="missionDialogHeader">
<h3>Modbus trigger</h3>
<button type="button" class="iconBtn missionDialogClose" data-close-dialog="integrationAddTriggerDialog" aria-label="Đóng">×</button>
</div>
<div class="missionDialogBody">
<div class="row rowWide">
<label for="integrationTriggerName">Tên trigger</label>
<input id="integrationTriggerName" type="text" required placeholder="VD: PLC line 1 start" />
</div>
<div class="row rowWide">
<label for="integrationTriggerCoil">Coil ID</label>
<input id="integrationTriggerCoil" type="number" min="1001" max="2000" value="1001" required />
</div>
<div class="row rowWide">
<label for="integrationTriggerMission">Mission</label>
<select id="integrationTriggerMission" required></select>
</div>
</div>
<div class="missionDialogFooter">
<button type="button" class="btn subtle" data-close-dialog="integrationAddTriggerDialog">Hủy</button>
<button type="submit" class="btn primary">Thêm</button>
</div>
</form>
</dialog>
<dialog id="integrationAddScheduleDialog" class="missionDialog">
<form id="integrationAddScheduleForm" method="dialog" class="missionDialogForm">
<div class="missionDialogHeader">
<h3>Lịch MiRFleet</h3>
<button type="button" class="iconBtn missionDialogClose" data-close-dialog="integrationAddScheduleDialog" aria-label="Đóng">×</button>
</div>
<div class="missionDialogBody">
<div class="row rowWide">
<label for="integrationScheduleName">Tên lịch</label>
<input id="integrationScheduleName" type="text" required placeholder="VD: Ca sáng — đi dock" />
</div>
<div class="row rowWide">
<label for="integrationScheduleMission">Mission</label>
<select id="integrationScheduleMission" required></select>
</div>
<div class="row rowWide">
<label for="integrationScheduleRobot">Robot</label>
<select id="integrationScheduleRobot"></select>
</div>
<div class="row rowWide">
<label for="integrationSchedulePriority">Ưu tiên</label>
<input id="integrationSchedulePriority" type="number" value="0" />
</div>
<div class="row rowWide">
<label for="integrationScheduleMode">Chế độ</label>
<select id="integrationScheduleMode">
<option value="asap">ASAP — vào queue ngay</option>
<option value="scheduled">Scheduled — theo thời gian</option>
</select>
</div>
<div class="row rowWide" id="integrationScheduleStartAtRow" hidden>
<label for="integrationScheduleStartAt">Thời gian bắt đầu</label>
<input id="integrationScheduleStartAt" type="datetime-local" />
</div>
</div>
<div class="missionDialogFooter">
<button type="button" class="btn subtle" data-close-dialog="integrationAddScheduleDialog">Hủy</button>
<button type="submit" class="btn primary">Thêm</button>
</div>
</form>
</dialog>
<script src="/missions.js"></script>
<script src="/dashboard.js"></script>
<script src="/integrations.js"></script>
<script src="/app.js"></script>
</body>
</html>