You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
haoliang-net/frontend/mock/simulator.ts

140 lines
7.0 KiB
TypeScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import type { MockMethod, MockRequest } from './types'
// 模拟采集地址数据
const mockAddresses = [
{
dbId: 1,
name: 'FANUC-1号',
url: 'http://localhost:9001/',
machineCount: 32,
machines: Array.from({ length: 32 }, (_, i) => ({
id: i + 1,
deviceCode: `fanake_1.${i + 2}`,
name: `西-1.${i + 2}`
})),
isRunning: true,
runningPort: 9001
},
{
dbId: 2,
name: 'FANUC-2号',
url: 'http://localhost:9002/',
machineCount: 16,
machines: Array.from({ length: 16 }, (_, i) => ({
id: i + 33,
deviceCode: `fanake_2.${i + 1}`,
name: `东-2.${i + 1}`
})),
isRunning: false,
runningPort: 0
}
]
// 模拟状态汇总
const mockStatusList = [
{
dbAddressId: 1,
name: 'FANUC-1号模拟',
port: 9001,
isRunning: true,
totalDevices: 32,
onlineDevices: 28,
requestCount: 1560,
dataChangeInterval: 10,
totalParts: 128
}
]
// 模拟设备状态
const mockDevices = [
{ deviceCode: 'fanake_1.2', desc: '西-1.2', scenario: 'machining', isOnline: true, programName: 'O504', partCount: 14, runStatus: 3, operateMode: 10, spindleSpeedSet: 3000, spindleSpeedActual: 2980, feedSpeedSet: 500, feedSpeedActual: 490, spindleLoad: 65, machiningStatus: 'cutting', scenarioTick: 45, scenarioDuration: 120 },
{ deviceCode: 'fanake_1.3', desc: '西-1.3', scenario: 'idle', isOnline: true, programName: 'O1', partCount: 53, runStatus: 1, operateMode: 10, spindleSpeedSet: 0, spindleSpeedActual: 0, feedSpeedSet: 0, feedSpeedActual: 0, spindleLoad: 5, machiningStatus: 'idle', scenarioTick: 12, scenarioDuration: 60 },
{ deviceCode: 'fanake_1.4', desc: '西-1.4', scenario: 'offline', isOnline: false, programName: 'O200', partCount: 0, runStatus: 0, operateMode: 0, spindleSpeedSet: 0, spindleSpeedActual: 0, feedSpeedSet: 0, feedSpeedActual: 0, spindleLoad: 0, machiningStatus: 'offline', scenarioTick: 0, scenarioDuration: 0 }
]
// 模拟请求日志
const mockLogs = Array.from({ length: 10 }, (_, i) => ({
index: 10 - i,
timestamp: `${String(14 + Math.floor(i / 6)).padStart(2, '0')}:${String(30 - i * 2).padStart(2, '0')}:${String(15 + i).padStart(2, '0')}`,
deviceCount: 28 + Math.floor(Math.random() * 5),
keyData: `fanake_1.2(P=14,Prog=O504,Run=3) fanake_1.3(P=53,Prog=O1,Run=1)`,
duration: 12 + Math.floor(Math.random() * 20),
fullJson: `[{"device":"fanake_1.2","desc":"西-1.2","tags":[{"id":"Tag5","value":"O504"}]}]`
}))
const mocks: MockMethod[] = [
// 探测模拟器
{ url: '/api/admin/simulator/ping', method: 'get', response: () => ({ code: 0, message: 'success', data: { running: true } }) },
// 获取采集地址列表
{ url: '/api/admin/simulator/addresses', method: 'get', response: () => ({ code: 0, message: 'success', data: mockAddresses }) },
// 获取模拟状态汇总
{ url: '/api/admin/simulator/status', method: 'get', response: () => ({ code: 0, message: 'success', data: mockStatusList }) },
// 启动模拟
{ url: '/api/admin/simulator/start', method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true, port: 9001 } }) },
// 停止模拟
{ url: '/api/admin/simulator/stop', method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
// 全部启动
{ url: '/api/admin/simulator/start-all', method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
// 全部停止
{ url: '/api/admin/simulator/stop-all', method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
// 重新加载
{ url: '/api/admin/simulator/reload', method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true, count: 2 } }) },
// 单地址状态(参数化路由 :port 匹配动态端口)
{ url: '/api/admin/simulator/address/:port/status', method: 'get', response: () => ({
code: 0, message: 'success', data: {
name: 'FANUC-1号模拟', port: 9001, isRunning: true,
requestCount: 1560, successCount: 1540, failCount: 20,
totalDevices: 32, onlineDevices: 28, dataChangeInterval: 10,
scenarioMode: 'auto', networkError: 'normal',
startTime: '2026-05-06 10:00:00', uptime: '04:32:15',
devices: mockDevices
}
})},
// 单地址启动/停止/事件/设置POST类统返回ok
{ url: '/api/admin/simulator/address/:port/start', method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
{ url: '/api/admin/simulator/address/:port/stop', method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
{ url: '/api/admin/simulator/address/:port/event', method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
{ url: '/api/admin/simulator/address/:port/interval', method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
{ url: '/api/admin/simulator/address/:port/network', method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
{ url: '/api/admin/simulator/address/:port/mode', method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
{ url: '/api/admin/simulator/address/:port/add-device', method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
{ url: '/api/admin/simulator/address/:port/remove-device', method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
// 日志
{ url: '/api/admin/simulator/address/:port/logs', method: 'get', response: () => ({ code: 0, message: 'success', data: mockLogs }) },
// 统计
{ url: '/api/admin/simulator/address/:port/stats', method: 'get', response: () => ({
code: 0, message: 'success', data: {
totalDevices: 32, onlineDevices: 28, totalParts: 128,
partsByDevice: {
'fanake_1.2': { desc: '西-1.2', totalParts: 14, currentProgram: 'O504', currentPartCount: 14, programs: { 'O504': 14 } },
'fanake_1.3': { desc: '西-1.3', totalParts: 53, currentProgram: 'O1', currentPartCount: 53, programs: { 'O1': 53 } }
}
}
})},
// 事件历史
{ url: '/api/admin/simulator/address/:port/event-history', method: 'get', response: () => ({ code: 0, message: 'success', data: [
{ timestamp: '2026-05-06 14:30:00', deviceCode: 'fanake_1.2', eventType: 'change_program', oldProgram: 'O200', newProgram: 'O504', partCountBefore: 10, partCountAfter: 14, detail: '程序切换' },
{ timestamp: '2026-05-06 14:25:00', deviceCode: 'fanake_1.3', eventType: 'part_count_increase', oldProgram: 'O1', newProgram: 'O1', partCountBefore: 52, partCountAfter: 53, detail: '零件数+1' }
] })},
// 完整汇总
{ url: '/api/admin/simulator/address/:port/full-summary', method: 'get', response: () => ({ code: 0, message: 'success', data: { exportTime: '2026-05-06 14:35:00', addressName: 'FANUC-1号模拟', port: 9001, totalDevices: 32, onlineDevices: 28, totalParts: 128 } }) },
// 异常日志
{ url: '/api/admin/simulator/address/:port/error-log', method: 'get', response: () => ({ code: 0, message: 'success', data: [] }) },
]
export default mocks