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.1 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 } }) },
// 单地址状态(匹配 /address/{port}/status
{ url: /\/api\/admin\/simulator\/address\/\d+\/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\/\d+\/start$/, method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
{ url: /\/api\/admin\/simulator\/address\/\d+\/stop$/, method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
{ url: /\/api\/admin\/simulator\/address\/\d+\/event$/, method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
{ url: /\/api\/admin\/simulator\/address\/\d+\/interval$/, method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
{ url: /\/api\/admin\/simulator\/address\/\d+\/network$/, method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
{ url: /\/api\/admin\/simulator\/address\/\d+\/mode$/, method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
{ url: /\/api\/admin\/simulator\/address\/\d+\/add-device$/, method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
{ url: /\/api\/admin\/simulator\/address\/\d+\/remove-device$/, method: 'post', response: () => ({ code: 0, message: 'success', data: { ok: true } }) },
// 日志
{ url: /\/api\/admin\/simulator\/address\/\d+\/logs$/, method: 'get', response: () => ({ code: 0, message: 'success', data: mockLogs }) },
// 统计
{ url: /\/api\/admin\/simulator\/address\/\d+\/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\/\d+\/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\/\d+\/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\/\d+\/error-log$/, method: 'get', response: () => ({ code: 0, message: 'success', data: [] }) },
]
export default mocks