| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736 |
- /**
- * 摄像头种子数据脚本
- * 在浏览器控制台中运行此脚本,添加70条多样化的摄像头数据
- *
- * 使用方法:
- * 1. 登录到 http://localhost:3000 (或生产环境)
- * 2. 打开浏览器开发者工具 (F12)
- * 3. 复制此脚本内容到控制台运行
- */
- const API_BASE = window.location.origin.includes('localhost') ? 'https://tg-live-game.pwtk.cc/api' : '/api'
- // 从 cookie 获取 token
- function getToken() {
- const match = document.cookie.match(new RegExp('(^| )token=([^;]+)'))
- return match ? decodeURIComponent(match[2]) : null
- }
- // 发送 API 请求
- async function apiPost(path, data) {
- const token = getToken()
- if (!token) {
- throw new Error('未登录,请先登录系统')
- }
- const response = await fetch(`${API_BASE}${path}`, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- Authorization: `Bearer ${token}`
- },
- body: JSON.stringify(data)
- })
- return response.json()
- }
- // 品牌列表
- const brands = [
- 'Hikvision',
- 'Dahua',
- 'Axis',
- 'Sony',
- 'Bosch',
- 'Uniview',
- 'Hanwha',
- 'Pelco',
- 'Vivotek',
- 'Tiandy',
- 'Ezviz',
- 'Reolink',
- 'Amcrest',
- 'Lorex',
- 'Swann'
- ]
- // 机器ID列表 (模拟不同的部署位置)
- const machineIds = [
- 'FACTORY-A1',
- 'FACTORY-A2',
- 'FACTORY-B1',
- 'WAREHOUSE-01',
- 'WAREHOUSE-02',
- 'WAREHOUSE-03',
- 'OFFICE-HQ',
- 'OFFICE-BRANCH1',
- 'OFFICE-BRANCH2',
- 'RETAIL-STORE1',
- 'RETAIL-STORE2',
- 'PARKING-MAIN',
- 'PARKING-EAST',
- 'DATACENTER-01',
- 'DATACENTER-02'
- ]
- // 生成70条多样化摄像头数据
- const cameras = [
- // 工厂区域 (15台)
- {
- name: '生产线A-入口监控',
- ip: '192.168.1.101',
- brand: 'Hikvision',
- capability: 'ptz_enabled',
- machineId: 'FACTORY-A1',
- location: 'factory'
- },
- {
- name: '生产线A-装配区',
- ip: '192.168.1.102',
- brand: 'Dahua',
- capability: 'switch_only',
- machineId: 'FACTORY-A1',
- location: 'factory'
- },
- {
- name: '生产线A-质检站',
- ip: '192.168.1.103',
- brand: 'Axis',
- capability: 'ptz_enabled',
- machineId: 'FACTORY-A1',
- location: 'factory'
- },
- {
- name: '生产线A-包装区',
- ip: '192.168.1.104',
- brand: 'Hikvision',
- capability: 'switch_only',
- machineId: 'FACTORY-A1',
- location: 'factory'
- },
- {
- name: '生产线A-出货口',
- ip: '192.168.1.105',
- brand: 'Uniview',
- capability: 'ptz_enabled',
- machineId: 'FACTORY-A1',
- location: 'factory'
- },
- {
- name: '生产线B-原料区',
- ip: '192.168.1.111',
- brand: 'Dahua',
- capability: 'switch_only',
- machineId: 'FACTORY-A2',
- location: 'factory'
- },
- {
- name: '生产线B-加工中心',
- ip: '192.168.1.112',
- brand: 'Sony',
- capability: 'ptz_enabled',
- machineId: 'FACTORY-A2',
- location: 'factory'
- },
- {
- name: '生产线B-焊接车间',
- ip: '192.168.1.113',
- brand: 'Bosch',
- capability: 'switch_only',
- machineId: 'FACTORY-A2',
- location: 'factory'
- },
- {
- name: '生产线B-喷漆房',
- ip: '192.168.1.114',
- brand: 'Hanwha',
- capability: 'switch_only',
- machineId: 'FACTORY-A2',
- location: 'factory'
- },
- {
- name: '生产线B-成品检验',
- ip: '192.168.1.115',
- brand: 'Hikvision',
- capability: 'ptz_enabled',
- machineId: 'FACTORY-A2',
- location: 'factory'
- },
- {
- name: '厂房C-机械臂区',
- ip: '192.168.2.101',
- brand: 'Axis',
- capability: 'ptz_enabled',
- machineId: 'FACTORY-B1',
- location: 'factory'
- },
- {
- name: '厂房C-物料暂存',
- ip: '192.168.2.102',
- brand: 'Dahua',
- capability: 'switch_only',
- machineId: 'FACTORY-B1',
- location: 'factory'
- },
- {
- name: '厂房C-AGV通道',
- ip: '192.168.2.103',
- brand: 'Uniview',
- capability: 'switch_only',
- machineId: 'FACTORY-B1',
- location: 'factory'
- },
- {
- name: '厂房C-配电室',
- ip: '192.168.2.104',
- brand: 'Tiandy',
- capability: 'switch_only',
- machineId: 'FACTORY-B1',
- location: 'factory'
- },
- {
- name: '厂房C-消防通道',
- ip: '192.168.2.105',
- brand: 'Hikvision',
- capability: 'ptz_enabled',
- machineId: 'FACTORY-B1',
- location: 'factory'
- },
- // 仓库区域 (15台)
- {
- name: '仓库1-入库区',
- ip: '192.168.3.101',
- brand: 'Dahua',
- capability: 'ptz_enabled',
- machineId: 'WAREHOUSE-01',
- location: 'warehouse'
- },
- {
- name: '仓库1-货架A区',
- ip: '192.168.3.102',
- brand: 'Hikvision',
- capability: 'switch_only',
- machineId: 'WAREHOUSE-01',
- location: 'warehouse'
- },
- {
- name: '仓库1-货架B区',
- ip: '192.168.3.103',
- brand: 'Hikvision',
- capability: 'switch_only',
- machineId: 'WAREHOUSE-01',
- location: 'warehouse'
- },
- {
- name: '仓库1-叉车通道',
- ip: '192.168.3.104',
- brand: 'Axis',
- capability: 'ptz_enabled',
- machineId: 'WAREHOUSE-01',
- location: 'warehouse'
- },
- {
- name: '仓库1-出库区',
- ip: '192.168.3.105',
- brand: 'Uniview',
- capability: 'ptz_enabled',
- machineId: 'WAREHOUSE-01',
- location: 'warehouse'
- },
- {
- name: '仓库2-危化品区',
- ip: '192.168.3.111',
- brand: 'Bosch',
- capability: 'ptz_enabled',
- machineId: 'WAREHOUSE-02',
- location: 'warehouse'
- },
- {
- name: '仓库2-冷藏区',
- ip: '192.168.3.112',
- brand: 'Sony',
- capability: 'switch_only',
- machineId: 'WAREHOUSE-02',
- location: 'warehouse'
- },
- {
- name: '仓库2-高值品区',
- ip: '192.168.3.113',
- brand: 'Pelco',
- capability: 'ptz_enabled',
- machineId: 'WAREHOUSE-02',
- location: 'warehouse'
- },
- {
- name: '仓库2-分拣中心',
- ip: '192.168.3.114',
- brand: 'Dahua',
- capability: 'switch_only',
- machineId: 'WAREHOUSE-02',
- location: 'warehouse'
- },
- {
- name: '仓库2-打包区',
- ip: '192.168.3.115',
- brand: 'Vivotek',
- capability: 'switch_only',
- machineId: 'WAREHOUSE-02',
- location: 'warehouse'
- },
- {
- name: '仓库3-散货区',
- ip: '192.168.3.121',
- brand: 'Tiandy',
- capability: 'switch_only',
- machineId: 'WAREHOUSE-03',
- location: 'warehouse'
- },
- {
- name: '仓库3-托盘区',
- ip: '192.168.3.122',
- brand: 'Hikvision',
- capability: 'switch_only',
- machineId: 'WAREHOUSE-03',
- location: 'warehouse'
- },
- {
- name: '仓库3-装车月台',
- ip: '192.168.3.123',
- brand: 'Dahua',
- capability: 'ptz_enabled',
- machineId: 'WAREHOUSE-03',
- location: 'warehouse'
- },
- {
- name: '仓库3-验收区',
- ip: '192.168.3.124',
- brand: 'Ezviz',
- capability: 'switch_only',
- machineId: 'WAREHOUSE-03',
- location: 'warehouse'
- },
- {
- name: '仓库3-退货处理',
- ip: '192.168.3.125',
- brand: 'Reolink',
- capability: 'switch_only',
- machineId: 'WAREHOUSE-03',
- location: 'warehouse'
- },
- // 办公区域 (15台)
- {
- name: '总部大堂',
- ip: '192.168.10.101',
- brand: 'Axis',
- capability: 'ptz_enabled',
- machineId: 'OFFICE-HQ',
- location: 'office'
- },
- {
- name: '总部前台',
- ip: '192.168.10.102',
- brand: 'Sony',
- capability: 'switch_only',
- machineId: 'OFFICE-HQ',
- location: 'office'
- },
- {
- name: '总部会议室A',
- ip: '192.168.10.103',
- brand: 'Hikvision',
- capability: 'switch_only',
- machineId: 'OFFICE-HQ',
- location: 'office'
- },
- {
- name: '总部会议室B',
- ip: '192.168.10.104',
- brand: 'Dahua',
- capability: 'switch_only',
- machineId: 'OFFICE-HQ',
- location: 'office'
- },
- {
- name: '总部电梯厅',
- ip: '192.168.10.105',
- brand: 'Uniview',
- capability: 'switch_only',
- machineId: 'OFFICE-HQ',
- location: 'office'
- },
- {
- name: '分公司1-入口',
- ip: '192.168.11.101',
- brand: 'Hanwha',
- capability: 'ptz_enabled',
- machineId: 'OFFICE-BRANCH1',
- location: 'office'
- },
- {
- name: '分公司1-开放办公区',
- ip: '192.168.11.102',
- brand: 'Bosch',
- capability: 'switch_only',
- machineId: 'OFFICE-BRANCH1',
- location: 'office'
- },
- {
- name: '分公司1-茶水间',
- ip: '192.168.11.103',
- brand: 'Amcrest',
- capability: 'switch_only',
- machineId: 'OFFICE-BRANCH1',
- location: 'office'
- },
- {
- name: '分公司1-走廊',
- ip: '192.168.11.104',
- brand: 'Lorex',
- capability: 'switch_only',
- machineId: 'OFFICE-BRANCH1',
- location: 'office'
- },
- {
- name: '分公司1-档案室',
- ip: '192.168.11.105',
- brand: 'Swann',
- capability: 'switch_only',
- machineId: 'OFFICE-BRANCH1',
- location: 'office'
- },
- {
- name: '分公司2-大厅',
- ip: '192.168.12.101',
- brand: 'Hikvision',
- capability: 'ptz_enabled',
- machineId: 'OFFICE-BRANCH2',
- location: 'office'
- },
- {
- name: '分公司2-培训室',
- ip: '192.168.12.102',
- brand: 'Dahua',
- capability: 'switch_only',
- machineId: 'OFFICE-BRANCH2',
- location: 'office'
- },
- {
- name: '分公司2-财务室',
- ip: '192.168.12.103',
- brand: 'Axis',
- capability: 'switch_only',
- machineId: 'OFFICE-BRANCH2',
- location: 'office'
- },
- {
- name: '分公司2-服务器机房',
- ip: '192.168.12.104',
- brand: 'Pelco',
- capability: 'ptz_enabled',
- machineId: 'OFFICE-BRANCH2',
- location: 'office'
- },
- {
- name: '分公司2-楼梯间',
- ip: '192.168.12.105',
- brand: 'Vivotek',
- capability: 'switch_only',
- machineId: 'OFFICE-BRANCH2',
- location: 'office'
- },
- // 零售门店 (10台)
- {
- name: '门店1-收银台',
- ip: '192.168.20.101',
- brand: 'Hikvision',
- capability: 'ptz_enabled',
- machineId: 'RETAIL-STORE1',
- location: 'retail'
- },
- {
- name: '门店1-商品陈列区',
- ip: '192.168.20.102',
- brand: 'Dahua',
- capability: 'switch_only',
- machineId: 'RETAIL-STORE1',
- location: 'retail'
- },
- {
- name: '门店1-试衣间走廊',
- ip: '192.168.20.103',
- brand: 'Uniview',
- capability: 'switch_only',
- machineId: 'RETAIL-STORE1',
- location: 'retail'
- },
- {
- name: '门店1-库房入口',
- ip: '192.168.20.104',
- brand: 'Tiandy',
- capability: 'switch_only',
- machineId: 'RETAIL-STORE1',
- location: 'retail'
- },
- {
- name: '门店1-出入口',
- ip: '192.168.20.105',
- brand: 'Ezviz',
- capability: 'ptz_enabled',
- machineId: 'RETAIL-STORE1',
- location: 'retail'
- },
- {
- name: '门店2-主通道',
- ip: '192.168.21.101',
- brand: 'Reolink',
- capability: 'ptz_enabled',
- machineId: 'RETAIL-STORE2',
- location: 'retail'
- },
- {
- name: '门店2-生鲜区',
- ip: '192.168.21.102',
- brand: 'Amcrest',
- capability: 'switch_only',
- machineId: 'RETAIL-STORE2',
- location: 'retail'
- },
- {
- name: '门店2-酒水区',
- ip: '192.168.21.103',
- brand: 'Lorex',
- capability: 'switch_only',
- machineId: 'RETAIL-STORE2',
- location: 'retail'
- },
- {
- name: '门店2-自助结账',
- ip: '192.168.21.104',
- brand: 'Swann',
- capability: 'ptz_enabled',
- machineId: 'RETAIL-STORE2',
- location: 'retail'
- },
- {
- name: '门店2-员工通道',
- ip: '192.168.21.105',
- brand: 'Hikvision',
- capability: 'switch_only',
- machineId: 'RETAIL-STORE2',
- location: 'retail'
- },
- // 停车场 (8台)
- {
- name: '停车场A-入口闸机',
- ip: '192.168.30.101',
- brand: 'Dahua',
- capability: 'ptz_enabled',
- machineId: 'PARKING-MAIN',
- location: 'parking'
- },
- {
- name: '停车场A-出口闸机',
- ip: '192.168.30.102',
- brand: 'Hikvision',
- capability: 'ptz_enabled',
- machineId: 'PARKING-MAIN',
- location: 'parking'
- },
- {
- name: '停车场A-B1层',
- ip: '192.168.30.103',
- brand: 'Uniview',
- capability: 'switch_only',
- machineId: 'PARKING-MAIN',
- location: 'parking'
- },
- {
- name: '停车场A-B2层',
- ip: '192.168.30.104',
- brand: 'Axis',
- capability: 'switch_only',
- machineId: 'PARKING-MAIN',
- location: 'parking'
- },
- {
- name: '停车场B-车位引导',
- ip: '192.168.31.101',
- brand: 'Bosch',
- capability: 'ptz_enabled',
- machineId: 'PARKING-EAST',
- location: 'parking'
- },
- {
- name: '停车场B-充电桩区',
- ip: '192.168.31.102',
- brand: 'Sony',
- capability: 'switch_only',
- machineId: 'PARKING-EAST',
- location: 'parking'
- },
- {
- name: '停车场B-无障碍车位',
- ip: '192.168.31.103',
- brand: 'Hanwha',
- capability: 'switch_only',
- machineId: 'PARKING-EAST',
- location: 'parking'
- },
- {
- name: '停车场B-摩托车区',
- ip: '192.168.31.104',
- brand: 'Pelco',
- capability: 'switch_only',
- machineId: 'PARKING-EAST',
- location: 'parking'
- },
- // 数据中心 (7台)
- {
- name: '机房A-服务器机柜',
- ip: '10.0.1.101',
- brand: 'Axis',
- capability: 'ptz_enabled',
- machineId: 'DATACENTER-01',
- location: 'datacenter'
- },
- {
- name: '机房A-网络机柜',
- ip: '10.0.1.102',
- brand: 'Sony',
- capability: 'switch_only',
- machineId: 'DATACENTER-01',
- location: 'datacenter'
- },
- {
- name: '机房A-UPS室',
- ip: '10.0.1.103',
- brand: 'Bosch',
- capability: 'switch_only',
- machineId: 'DATACENTER-01',
- location: 'datacenter'
- },
- {
- name: '机房A-冷通道',
- ip: '10.0.1.104',
- brand: 'Hikvision',
- capability: 'switch_only',
- machineId: 'DATACENTER-01',
- location: 'datacenter'
- },
- {
- name: '机房B-热通道',
- ip: '10.0.2.101',
- brand: 'Dahua',
- capability: 'switch_only',
- machineId: 'DATACENTER-02',
- location: 'datacenter'
- },
- {
- name: '机房B-消防系统',
- ip: '10.0.2.102',
- brand: 'Pelco',
- capability: 'ptz_enabled',
- machineId: 'DATACENTER-02',
- location: 'datacenter'
- },
- {
- name: '机房B-门禁区',
- ip: '10.0.2.103',
- brand: 'Vivotek',
- capability: 'switch_only',
- machineId: 'DATACENTER-02',
- location: 'datacenter'
- }
- ]
- // 生成通道数据
- function generateChannels(cameraId, name, ip, capability) {
- const channels = []
- const channelCount =
- capability === 'ptz_enabled' ? Math.floor(Math.random() * 2) + 2 : Math.floor(Math.random() * 2) + 1
- const channelNames = {
- ptz_enabled: ['主画面', '全景视角', '细节特写', '广角监控'],
- switch_only: ['标清画面', '高清画面', '夜视模式']
- }
- const names = capability === 'ptz_enabled' ? channelNames.ptz_enabled : channelNames.switch_only
- for (let i = 0; i < channelCount; i++) {
- channels.push({
- channelId: `${cameraId}-ch${i + 1}`,
- name: names[i] || `通道${i + 1}`,
- rtspUrl: `rtsp://${ip}:554/stream${i + 1}`,
- defaultView: i === 0
- })
- }
- return channels
- }
- // 执行添加摄像头
- async function seedCameras() {
- console.log('开始添加摄像头数据...')
- console.log(`总计: ${cameras.length} 台摄像头`)
- let successCount = 0
- let failCount = 0
- const errors = []
- for (let i = 0; i < cameras.length; i++) {
- const cam = cameras[i]
- const cameraId = `CAM-${String(i + 1).padStart(3, '0')}`
- const cameraData = {
- cameraId: cameraId,
- name: cam.name,
- ip: cam.ip,
- port: 554,
- username: 'admin',
- password: 'admin123',
- brand: cam.brand,
- capability: cam.capability,
- machineId: cam.machineId,
- channels: generateChannels(cameraId, cam.name, cam.ip, cam.capability)
- }
- try {
- const result = await apiPost('/admin/cameras/add', cameraData)
- if (result.success) {
- successCount++
- console.log(`✅ [${i + 1}/${cameras.length}] ${cam.name} - 添加成功`)
- } else {
- failCount++
- errors.push({ camera: cam.name, error: result.errMessage || '未知错误' })
- console.log(`❌ [${i + 1}/${cameras.length}] ${cam.name} - 失败: ${result.errMessage}`)
- }
- } catch (err) {
- failCount++
- errors.push({ camera: cam.name, error: err.message })
- console.log(`❌ [${i + 1}/${cameras.length}] ${cam.name} - 异常: ${err.message}`)
- }
- // 添加小延迟避免请求过快
- await new Promise((resolve) => setTimeout(resolve, 100))
- }
- console.log('\n========== 添加完成 ==========')
- console.log(`✅ 成功: ${successCount} 台`)
- console.log(`❌ 失败: ${failCount} 台`)
- if (errors.length > 0) {
- console.log('\n失败详情:')
- errors.forEach((e) => console.log(` - ${e.camera}: ${e.error}`))
- }
- return { successCount, failCount, errors }
- }
- // 运行脚本
- seedCameras()
|