92 lines
5.0 KiB
HTML
92 lines
5.0 KiB
HTML
|
|
<!DOCTYPE html>
|
||
|
|
<html lang="zh-CN">
|
||
|
|
<head>
|
||
|
|
<meta charset="UTF-8">
|
||
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
|
<title>系统集成接口 - 智能排产系统</title>
|
||
|
|
<link rel="stylesheet" href="../css/common.css">
|
||
|
|
</head>
|
||
|
|
<body>
|
||
|
|
<div id="app">
|
||
|
|
<header class="header" id="header"></header>
|
||
|
|
<div class="body">
|
||
|
|
<aside class="sidebar" id="sidebar"></aside>
|
||
|
|
<main class="main">
|
||
|
|
<h1 class="page-title">系统集成接口</h1>
|
||
|
|
<div class="tabs">
|
||
|
|
<div class="tab active" onclick="switchTab(this,'mes')">聚制云 MES</div>
|
||
|
|
<div class="tab" onclick="switchTab(this,'erp')">外部 ERP/OMS</div>
|
||
|
|
<div class="tab" onclick="switchTab(this,'wms')">WMS 仓储</div>
|
||
|
|
<div class="tab" onclick="switchTab(this,'eam')">EAM/IoT 设备</div>
|
||
|
|
</div>
|
||
|
|
<div class="card">
|
||
|
|
<div class="card-header flex justify-between"><span id="ifTitle">聚制云 MES 接口</span><button class="btn btn-sm btn-primary" onclick="testConnection()">测试连接</button></div>
|
||
|
|
<div class="card-body table-wrap">
|
||
|
|
<table id="ifTable"><thead><tr><th>接口编号</th><th>接口名称</th><th>方向</th><th>路径/说明</th><th>状态</th></tr></thead><tbody></tbody></table>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</main>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<script src="../js/data.js"></script>
|
||
|
|
<script src="../js/common.js"></script>
|
||
|
|
<script>
|
||
|
|
initPage('system-interfaces');
|
||
|
|
let tab = 'mes';
|
||
|
|
const dataMap = {
|
||
|
|
mes: {
|
||
|
|
title: '聚制云 MES 接口',
|
||
|
|
rows: [
|
||
|
|
{ code: 'MES-01', name: '查询工厂模型', dir: '← 查询', path: 'GET /api/mes/v1/factory-model/{factory_id}', status: 'NORMAL' },
|
||
|
|
{ code: 'MES-02', name: '查询工艺路线', dir: '← 查询', path: 'GET /api/mes/v1/routing/{product_id}', status: 'NORMAL' },
|
||
|
|
{ code: 'MES-03', name: '查询 BOM', dir: '← 查询', path: 'GET /api/mes/v1/bom/{product_id}', status: 'NORMAL' },
|
||
|
|
{ code: 'MES-10', name: '推送生产订单', dir: '→ 推送', path: 'POST /api/mes/v1/production-orders/batch', status: 'NORMAL' },
|
||
|
|
{ code: 'MES-11', name: '推送工单', dir: '→ 推送', path: 'POST /api/mes/v1/work-orders/batch', status: 'NORMAL' },
|
||
|
|
{ code: 'MES-13', name: '接收执行反馈', dir: '← 回调', path: 'POST /api/aps/v1/execution-feedback', status: 'NORMAL' }
|
||
|
|
]
|
||
|
|
},
|
||
|
|
erp: {
|
||
|
|
title: '外部 ERP/OMS 接口',
|
||
|
|
rows: [
|
||
|
|
{ code: 'EXT-01', name: '创建销售订单', dir: 'POST', path: '/api/v1/sales-orders', status: 'NORMAL' },
|
||
|
|
{ code: 'EXT-05', name: '触发排产', dir: 'POST', path: '/api/v1/scheduling/run', status: 'NORMAL' },
|
||
|
|
{ code: 'EXT-06', name: '查询排产结果', dir: 'GET', path: '/api/v1/scheduling/results/{job_id}', status: 'NORMAL' },
|
||
|
|
{ code: 'EXT-09', name: '工单执行反馈', dir: 'POST', path: '/api/v1/work-orders/{id}/feedback', status: 'NORMAL' },
|
||
|
|
{ code: 'EXT-11', name: 'Webhook 注册', dir: 'POST', path: '/api/v1/webhooks', status: 'NORMAL' }
|
||
|
|
]
|
||
|
|
},
|
||
|
|
wms: {
|
||
|
|
title: 'WMS 仓储接口',
|
||
|
|
rows: [
|
||
|
|
{ code: 'WMS-01', name: '查询库存', dir: '← 查询', path: 'GET /api/wms/v1/inventory/{material_id}', status: 'NORMAL' },
|
||
|
|
{ code: 'WMS-02', name: '查询在途', dir: '← 查询', path: 'GET /api/wms/v1/in-transit/{material_id}', status: 'NORMAL' },
|
||
|
|
{ code: 'WMS-03', name: '齐套检查', dir: '← 查询', path: 'POST /api/wms/v1/kitting-check', status: 'NORMAL' },
|
||
|
|
{ code: 'WMS-04', name: '备料指令', dir: '→ 推送', path: 'POST /api/wms/v1/picking-orders', status: 'NORMAL' }
|
||
|
|
]
|
||
|
|
},
|
||
|
|
eam: {
|
||
|
|
title: 'EAM/IoT 设备接口',
|
||
|
|
rows: [
|
||
|
|
{ code: 'EAM-01', name: '查询设备台账', dir: '← 查询', path: 'GET /api/eam/v1/equipment', status: 'NORMAL' },
|
||
|
|
{ code: 'EAM-02', name: '查询维保计划', dir: '← 查询', path: 'GET /api/eam/v1/maintenance', status: 'NORMAL' },
|
||
|
|
{ code: 'IoT-01', name: '查询设备状态', dir: '← 查询', path: 'GET /api/iot/v1/equipment/{id}/status', status: 'NORMAL' },
|
||
|
|
{ code: 'IoT-02', name: '设备状态变更订阅', dir: '← 监听', path: 'WebSocket /ws/v1/equipment', status: 'NORMAL' }
|
||
|
|
]
|
||
|
|
}
|
||
|
|
};
|
||
|
|
function switchTab(el, key) { $$('.tab').forEach(t => t.classList.remove('active')); el.classList.add('active'); tab = key; render(); }
|
||
|
|
function render() {
|
||
|
|
const d = dataMap[tab];
|
||
|
|
document.getElementById('ifTitle').textContent = d.title;
|
||
|
|
document.querySelector('#ifTable tbody').innerHTML = d.rows.map(r => `
|
||
|
|
<tr><td>${r.code}</td><td>${r.name}</td><td>${r.dir}</td><td class="text-muted">${r.path}</td><td>${r.status === 'NORMAL' ? '<span class="badge badge-success">正常</span>' : '<span class="badge badge-danger">异常</span>'}</td></tr>
|
||
|
|
`).join('');
|
||
|
|
}
|
||
|
|
function testConnection() {
|
||
|
|
showToast('连接测试', `${dataMap[tab].title} 连接正常`, 'success');
|
||
|
|
}
|
||
|
|
render();
|
||
|
|
</script>
|
||
|
|
</body>
|
||
|
|
</html>
|