Files
web-Iot/tmp_analyze2_output.txt
2026-08-14 09:02:52 +08:00

3359 lines
378 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

=== t() referenced keys missing in ZH (1070) ===
aiAnalysis.abnormalString
aiAnalysis.algoCount
aiAnalysis.algorithmList
aiAnalysis.analysisId
aiAnalysis.area
aiAnalysis.areaLoitering
aiAnalysis.areaLoiteringDesc
aiAnalysis.areaLoiteringTimeline
aiAnalysis.arrayMask
aiAnalysis.asyncTask
aiAnalysis.blockNumber
aiAnalysis.cancelled
aiAnalysis.centerTitle
aiAnalysis.clickHotspotHint
aiAnalysis.default
aiAnalysis.detect
aiAnalysis.detectAndSeg
aiAnalysis.detectDesc
aiAnalysis.detectModel
aiAnalysis.detectModelRegistry
aiAnalysis.detectTaskName
aiAnalysis.detectWorkspace
aiAnalysis.detectWorkspaceDesc
aiAnalysis.dragFile
aiAnalysis.fireSmokeDesc
aiAnalysis.fireSmokeDetection
aiAnalysis.getModelsFailed
aiAnalysis.healthCheck
aiAnalysis.historyAnalysis
aiAnalysis.historyRecords
aiAnalysis.hotspot
aiAnalysis.hotspotCount
aiAnalysis.hotspotPanelList
aiAnalysis.hotspotRecognition
aiAnalysis.image
aiAnalysis.inferencePreset
aiAnalysis.inputPreview
aiAnalysis.inputType
aiAnalysis.integratedCount
aiAnalysis.modelCount
aiAnalysis.motionDetection
aiAnalysis.motionDetectionDesc
aiAnalysis.motionDetectionTimeline
aiAnalysis.noHistory
aiAnalysis.noResult
aiAnalysis.objectDetection
aiAnalysis.onlineServices
aiAnalysis.originalPixels
aiAnalysis.overlayPixels
aiAnalysis.pageDebugRecords
aiAnalysis.panelArea
aiAnalysis.panelGeojson
aiAnalysis.panelLabel
aiAnalysis.perimeterClimbTimeline
aiAnalysis.perimeterIntrusion
aiAnalysis.perimeterIntrusionDesc
aiAnalysis.perimeterIntrusionTimeline
aiAnalysis.perimeterIntrusionType
aiAnalysis.personnelIntrusion
aiAnalysis.personnelIntrusionDesc
aiAnalysis.personnelIntrusionTimeline
aiAnalysis.pointDetails
aiAnalysis.processing
aiAnalysis.quality
aiAnalysis.readServerHistory
aiAnalysis.recommendedCleanBlock
aiAnalysis.refreshModels
aiAnalysis.resultDisplay
aiAnalysis.resultImageVideo
aiAnalysis.resultJson
aiAnalysis.resultViewHint
aiAnalysis.segWorkspace
aiAnalysis.segWorkspaceDesc
aiAnalysis.segment
aiAnalysis.segmentationDesc
aiAnalysis.segmentationTaskName
aiAnalysis.selectHotspotPanel
aiAnalysis.serverDemo
aiAnalysis.showResultAfterTask
aiAnalysis.submitDetectTask
aiAnalysis.submitTaskFailed
aiAnalysis.submitThermalAnalysis
aiAnalysis.supportedFormats
aiAnalysis.syncAnalysis
aiAnalysis.taskExecutionError
aiAnalysis.taskSuccess
aiAnalysis.thermalAnalysisComplete
aiAnalysis.thermalAnalysisFailed
aiAnalysis.thermalFileLabel
aiAnalysis.thermalInteractiveView
aiAnalysis.thermalSegmentation
aiAnalysis.uploadFirst
aiAnalysis.uploadThermal
aiAnalysis.uploadThermalFirst
aiAnalysis.videoAbnormalEvent
aiAnalysis.videoIntelligentAnalysis
aiAnalysis.waitingSegmentation
alerts.addAlertSubscription
alerts.addRule
alerts.addSubscription
alerts.alarmContent
alerts.alarmNo
alerts.alarmTitle
alerts.alertDescription
alerts.alertDetail
alerts.alertLevelDistribution
alerts.alertStatusStatistics
alerts.alertTypeProportion
alerts.allDevices
alerts.allLevels
alerts.appPush
alerts.compareSymbol
alerts.confirmCreateOrder
alerts.confirmHandle
alerts.contactHandler
alerts.content
alerts.criticalAlert
alerts.deviceBattery
alerts.deviceSensor
alerts.dingTalk
alerts.editAlertSubscription
alerts.editRule
alerts.email
alerts.exportFileName
alerts.generalAlert
alerts.handleFail
alerts.handleOperation
alerts.handleSuccess
alerts.importantAlert
alerts.infoAlert
alerts.level
alerts.mockBatteryLow
alerts.mockDeviceBattery
alerts.mockDeviceCamera
alerts.mockDeviceSensor
alerts.mockRuleBattery
alerts.mockRuleTemp
alerts.mockSubAdmin
alerts.mockSubDevice
alerts.mockSubOps
alerts.mockTempExceed
alerts.mockVideoSignalLost
alerts.modifyAlert
alerts.monitorProperty
alerts.newOrder
alerts.noAlarmToCreateOrder
alerts.notifyChannel
alerts.notifySubscription
alerts.occurTime
alerts.orderCreateFail
alerts.orderCreated
alerts.orderFromAlarm
alerts.planStartTime
alerts.pleaseInputAlarmContent
alerts.pleaseInputAlarmTitle
alerts.pleaseInputHandleRemark
alerts.pleaseInputSubscriptionName
alerts.pleaseSelectAlertLevel
alerts.pleaseSelectAlertType
alerts.pleaseSelectChannel
alerts.pleaseSelectHandleResult
alerts.pleaseSelectHandleStatus
alerts.pleaseSelectPlanStartTime
alerts.processing
alerts.recommendedAction
alerts.relatedModel
alerts.reportValue
alerts.rootCause
alerts.ruleConfig
alerts.ruleName
alerts.ruleNamePlaceholder
alerts.searchDeviceContent
alerts.searchSubscription
alerts.sevenDayTrend
alerts.sms
alerts.sourceDevice
alerts.subscriptionName
alerts.subtitle
alerts.threshold
alerts.thresholdPlaceholder
alerts.todayClosed
alerts.todayCriticalAlerts
alerts.todayPending
alerts.todayTotalAlerts
alerts.trendDown
alerts.trendNoChange
alerts.trendUp
alerts.trendZero
alerts.triggerCondition
alerts.yesterdayValue
common.apiCallFail
common.confirmDeleteRecord
common.deleteIrreversible
common.detail
common.deviceId
common.enabled
common.loadDetailFailed
common.loadFailed
common.modify
common.operationFailed
common.pleaseInputDeviceId
common.quantity
common.requestError
common.settings
common.storeValue
common.submitFail
common.timeRange
common.working
devices.abMode
devices.activatedTime
devices.aiAction1
devices.aiAction2
devices.aiAction3
devices.aiAdvice1
devices.aiAdvice2
devices.aiAdvice3
devices.aiAnalysisTitle
devices.aiOptimizeGain
devices.aiOptimizePath
devices.aiSuggestionColon
devices.airportCode
devices.airportSn
devices.airportSnLabel
devices.aliasApiError
devices.aliasHint
devices.aliasModifiedSuccess
devices.aliasModifyFail
devices.aliasNotEmpty
devices.aliasRobotOnly
devices.allDrones
devices.allLevels
devices.allOnline
devices.allTypes
devices.allWaypointsCleared
devices.apiErrorCheck
devices.apiRequestError
devices.apiRequestException
devices.autoFetch
devices.autoResumeFromBreakpoint
devices.backView
devices.batteryCapacity
devices.batteryWithPercent
devices.batteryWithValue
devices.blockUnit
devices.boardTaskFetchFail
devices.boundDrone
devices.bowMode
devices.canWorkNormally
devices.cancelReturnHome
devices.chargePoint
devices.checkRouteFail
devices.cleaningPath
devices.clearMarks
devices.clearPlannedRoute
devices.clearRoute
devices.clickPlayHint
devices.colNo
devices.commGood
devices.commStatus
devices.commandFailed
devices.commandIssued
devices.commandSendFail
devices.commandSent
devices.communicating
devices.communicationNormal
devices.communicationStatus
devices.complete
devices.completePathFirst
devices.completedTimeColon
devices.completionRate
devices.componentRiskZone
devices.confirmCreate
devices.confirmDeleteContent
devices.confirmDeleteOk
devices.confirmDeleteTitle
devices.connectionFailed
devices.controlLogTitle
devices.controlRequestContent
devices.countUnit
devices.coverClosed
devices.coverOpen
devices.coverageEquipment
devices.coverageValue
devices.createSuccess
devices.createTaskException
devices.createTaskFail
devices.createTaskSuccess
devices.createWaylineTask
devices.createWaylineTaskTitle
devices.cumWorkArea
devices.cumWorkMileage
devices.cumWorkTime
devices.currentWayline
devices.currentWaypointLabel
devices.deleteFailNetwork
devices.deleteFailRetry
devices.detailBtn
devices.deviceAliasLabel
devices.deviceColHeader
devices.deviceControlPanel
devices.deviceData
devices.deviceInfoError
devices.deviceList
devices.deviceOnlineRate
devices.deviceParamSetting
devices.deviceSn
devices.deviceSnColon
devices.deviceSnLabel
devices.deviceTaskList
devices.deviceTypeColon
devices.dgpsDiff
devices.dispatchableCount
devices.droneAirport
devices.droneAirspace
devices.droneFallbackName
devices.dronePort
devices.dronePortA01
devices.dronePosition
devices.droneStatus
devices.droneVideo
devices.droneWayline
devices.droneWaylineTask
devices.editRobotInfoTitle
devices.emergencyStopBtn
devices.emergencyStopTriggered
devices.endLabel
devices.envFlightConditions
devices.envWindSpeed
devices.equipmentColon
devices.equipmentControl
devices.equipmentName
devices.equipmentOverview
devices.equipmentScheduleList
devices.equipmentSituationMap
devices.execTimePoint
devices.executeDeviceColon
devices.executeNow
devices.executeWayline
devices.executeWaylineTask
devices.executingTasks
devices.fenceAbnormal
devices.fetchDetailError
devices.fetchDetailException
devices.fetchParamFail
devices.fetchWaylineFailed
devices.fetchWaylineListFailed
devices.fillRequiredFields
devices.firmwareVersion
devices.fixed
devices.fixed2
devices.fixedEnv
devices.flightAltitude
devices.flightWindSpeed
devices.frontView
devices.ganttViewTitle
devices.generateTask
devices.gnssQuality
devices.gpsMode
devices.gpsModeDesc
devices.gpsPlanning
devices.gpsSingle
devices.gpsTaskIssued
devices.gpsUnit
devices.gpsWaypointPlan
devices.groupOf
devices.hangar
devices.hasRain
devices.headingAngle
devices.horizontalSpeed
devices.hotspotSuspect
devices.inDock
devices.inProgressDesc
devices.indoor
devices.inputCustomAlias
devices.inputPlotName
devices.inputTimestamp
devices.inputWaylineName
devices.inspectRobotRbt
devices.inspectRoute
devices.inspectionMachine
devices.inspectionRoute
devices.irLens
devices.issueTask
devices.issueTaskFirst
devices.landingDockSn
devices.landingDockSnLabel
devices.leftView
devices.leftWheelDrive
devices.legendTitle
devices.levelHigh
devices.levelLow
devices.levelMid
devices.locationFail
devices.logCommand
devices.logDesc1
devices.logDesc2
devices.logDesc3
devices.logDesc4
devices.logDesc5
devices.logDesc6
devices.logEvent
devices.logLevelLowBattery
devices.loginInfoExpired
devices.lostControlAction
devices.lostControlActionLabel
devices.markPoint
devices.markedPointsCount
devices.minBattery
devices.minBatteryLabel
devices.minExecBatteryLabel
devices.minThreePoints
devices.modeAuto
devices.modeDebugLocal
devices.modeDebugRemote
devices.modeLabel
devices.modeManual
devices.modeUpgrading
devices.modeWorking
devices.monthDays
devices.mowRobotGr
devices.mowRoute
devices.mowingRobot
devices.networkErrorRetry
devices.nightFlightLimit
devices.noData
devices.noDetail
devices.noDeviceSelected
devices.noDroneSelected
devices.noFlyZone
devices.noPermission
devices.noSavedRoutes
devices.noTaskDetail
devices.noVideo
devices.noVideoSignal
devices.noVideoStream
devices.noWaylineData
devices.noWaylineTask
devices.noWaypoints
devices.noWaypointsToSave
devices.normalRunning
devices.notFixed
devices.notFixed2
devices.notFixedEnv
devices.obstacleAvoidSwitch
devices.obstacleDetected
devices.obstacleForbiddenZone
devices.onStandby
devices.oneClickCoordinated
devices.oneClickSchedule
devices.onlineDevices
devices.onlineRate
devices.operationApiError
devices.operationApiException
devices.operationFail
devices.optimize
devices.optionalEmpty
devices.otherWebControlling
devices.outDock
devices.outdoor
devices.panorama
devices.paramArmChannel
devices.paramBatteryType
devices.paramChassisChannel
devices.paramChipUid
devices.paramChipUidSign
devices.paramDelFlag
devices.paramDriveType
devices.paramDualRtk
devices.paramFanChannel
devices.paramFanPolarity
devices.paramFirmwareVersion
devices.paramForwardSpeedLimit
devices.paramFuelPumpChannel
devices.paramGearRatio
devices.paramKnifeChannel
devices.paramKnifeMotorMode
devices.paramKnifePolarity
devices.paramKnifeWidth
devices.paramLeftBackwardGain
devices.paramLeftForwardGain
devices.paramLeftMotorReverse
devices.paramLiftChannel
devices.paramLiftProtectTime
devices.paramRelayBoard
devices.paramRemoteConfig
devices.paramRemoteType
devices.paramRightBackwardGain
devices.paramRightForwardGain
devices.paramRightMotorReverse
devices.paramRobotHeight
devices.paramRobotLength
devices.paramRobotWidth
devices.paramRunSpeed
devices.paramSaveException
devices.paramSaveFail
devices.paramSaveSuccess
devices.paramSwapChannel
devices.paramThrottleChannel
devices.paramThrottlePolarity
devices.paramTurnSpeedLimit
devices.paramTyreSize
devices.paramUse4G
devices.paramViewEditTitle
devices.paramWalkMotorMode
devices.paramWifiName
devices.paramWifiPassword
devices.pathPlanDone
devices.pathPlanFailRetry
devices.pathPlanning
devices.pauseTask
devices.pendingApprovalTasks
devices.pendingExec
devices.permissionObtained
devices.permissionRequestTitle
devices.permissionRequesting
devices.planeNoLocalRoute
devices.pleaseLoginFirst
devices.pleaseSelectWayline
devices.plotNameLabel
devices.pointMarked
devices.positionInStation
devices.precipStatus
devices.productType
devices.rainNo
devices.rainYes
devices.rainfall
devices.realtimeMonitorList
devices.realtimePicture
devices.realtimePowerData
devices.realtimeSpeed
devices.realtimeVideoMonitor
devices.rechargeBtn
devices.rechargeCommandSent
devices.remoteControl
devices.remoteControlAndSituation
devices.repeatDaily
devices.repeatInterval
devices.repeatMode
devices.repeatModeLabel
devices.repeatMonthlyByDate
devices.repeatMonthlyByWeek
devices.repeatNone
devices.repeatTypeLabel
devices.repeatWeekly
devices.requestControlPermission
devices.requestFail
devices.resumeAuto
devices.resumeBreakpoint
devices.resumeFromBreakpointLabel
devices.resumeManual
devices.resumeTask
devices.returnCommandSent
devices.returnHomeAltitude
devices.returnHomeAltitudeColon
devices.returnHomeAltitudeLabel
devices.returnHomeMode
devices.returnHomeModeLabel
devices.rightView
devices.rightWheelDrive
devices.robotExecutingCount
devices.robotInTaskCount
devices.robotLocalRoutes
devices.robotPath
devices.robotPosition
devices.robotStatus
devices.robotTaskData
devices.robotWorkStatus
devices.routeDeletedSuccess
devices.routeLoaded
devices.routeLoadedWithName
devices.routeNoPathPoints
devices.routeSavedLocal
devices.rtBattery
devices.rtHeadingAngle
devices.rtHeadingStatus
devices.rtInitialized
devices.rtLeftMotor
devices.rtLeftSpeed
devices.rtLeftTemp
devices.rtMainTemp
devices.rtMode
devices.rtPitchAngle
devices.rtPositioning
devices.rtRightMotor
devices.rtRightSpeed
devices.rtRightTemp
devices.rtSatellites
devices.rtVoltage
devices.rthMode
devices.rthOptimal
devices.rthPreset
devices.rtkCount
devices.rtkEnvLabel
devices.rtkFixed2
devices.rtkFloat
devices.rtkHighPrecision
devices.rtkModeDesc
devices.rtkStatus
devices.safeRthBattery
devices.satelliteCount
devices.savePathTitle
devices.savePlan
devices.saving
devices.searchDeviceName
devices.searchWaylinePlaceholder
devices.selectDevice
devices.selectDrone
devices.selectExecuteDroneFirst
devices.selectNoDrone
devices.selectStartTimePlaceholder
devices.selectTaskFirst
devices.selectTaskStartTime
devices.selectWayline
devices.selectedWaylineColon
devices.signalSatellite
devices.situationMap
devices.smartAssign
devices.standbyCount
devices.startBtn
devices.startLabel
devices.startTimeColon
devices.stationCameraNotFound
devices.stationStatus
devices.stationTopology
devices.stationVideo
devices.statusExecFailed
devices.statusExecSuccess
devices.statusPendingApproval
devices.statusPreparing
devices.statusRestored
devices.statusStartFailed
devices.statusSuggestExec
devices.statusTerminated
devices.statusTimeout
devices.statusUpdateSuccess
devices.statusWaitExec
devices.statusWaitingStart
devices.stopVideoBtn
devices.suggestAction
devices.suggestTime
devices.suitability
devices.suitable
devices.suitableExec
devices.suitableExec2
devices.supplyChargePoint
devices.supportsGpsPlan
devices.supportsRemoteGpsPlan
devices.suspendTask
devices.switchDroneLensFail
devices.switchManual
devices.switchStationCameraFail
devices.taskCancelException
devices.taskCancelFail
devices.taskCanceledSuccess
devices.taskCompletedMsg
devices.taskCompletionRate
devices.taskContinuous
devices.taskEndTimeLabel
devices.taskEnded
devices.taskExecSuccess
devices.taskExecuteException
devices.taskExecuteFail
devices.taskExecuteSuccess
devices.taskExecutedSuccess
devices.taskIdLabel
devices.taskImmediate
devices.taskListFetchFail
devices.taskListRefreshFail
devices.taskOrchestrationAI
devices.taskPauseException
devices.taskPauseFail
devices.taskPaused
devices.taskPaused2
devices.taskPausedSuccess
devices.taskRecurring
devices.taskRestored2
devices.taskResumeException
devices.taskResumeFail
devices.taskResumed
devices.taskResumedSuccess
devices.taskReturnedHome
devices.taskReturnedHome2
devices.taskStandby2
devices.taskStartFailure
devices.taskStartTimeLabel
devices.taskStarted
devices.taskStarted2
devices.taskStatusUpdateSuccess
devices.taskStopped
devices.taskSuspended
devices.taskSuspended2
devices.taskTerminated
devices.taskTimed
devices.taskTimedOut
devices.taskTimelineTitle
devices.taskTimeout
devices.taskTypeLabel
devices.taskWaitingStart
devices.taskWaylineTypeLabel
devices.timelineStatusComplete
devices.timelineStatusReady
devices.timelineStatusReturn
devices.timelineStatusStart
devices.tlFinishInspection
devices.tlReturnSupply
devices.tlStandbyReady
devices.tlStartCleaning
devices.tlStartInspection
devices.tlStartMowing
devices.todayTaskExecute
devices.todayWaylinePlan
devices.totalCount
devices.trendFlat
devices.trendYesterday
devices.typeAIRecheck
devices.typeArrayMow
devices.typeComponentClean
devices.typeDroneHotspot
devices.typeFenceInspect
devices.typeHotspotInspect
devices.typeRecheck
devices.unitGe
devices.unitJia
devices.unitTai
devices.unitTiao
devices.unknownDevice
devices.unknownDrone
devices.unknownObject
devices.unknownPlatform
devices.unknownTime
devices.verticalSpeed
devices.videoAndConfig
devices.videoConfigured
devices.videoLinkConfigured
devices.videoStopped
devices.viewBack
devices.viewFront
devices.viewLeft
devices.viewMore
devices.viewMoreLogs
devices.viewRight
devices.viewTop
devices.washDrone
devices.washDroneUav
devices.waylineDetail
devices.waylineEditPlan
devices.waylineExecFail
devices.waylineFallback
devices.waylineLabel
devices.waylineList
devices.waylineListFetchFail
devices.waylineName
devices.waylineParamsTitle
devices.waylinePrecision
devices.waylinePrecisionLabel
devices.waylineTaskCreated
devices.waylineUuidLabel
devices.waypoint
devices.waypointDeleted
devices.waypointList
devices.waypointsAdded
devices.waypointsCount
devices.weatherAdvice1
devices.weatherAdvice2
devices.weatherStation
devices.weatherWindowTitle
devices.weedHighZone
devices.weekFri
devices.weekMon
devices.weekNo
devices.weekSat
devices.weekSun
devices.weekThu
devices.weekTue
devices.weekWed
devices.weekday
devices.weekdayExec
devices.whichWeek
devices.wideLens
devices.windSpeed
devices.workMode
devices.workTaskBoard
devices.working
devices.workingCurrent
devices.zoomLens
home.ambientTemperature
home.current
home.currentIrradiance
home.frequency
home.gridConnected
home.gridConnection
home.gridVoltage
home.inverterPowerCompare
home.phaseA
home.powerCurve
home.ratedPower
home.realtimePower
home.stringCurrentHeatmap
home.today
home.todayAccumulated
home.totalPower
login.and
profile.basicInfo
profile.changePassword
profile.confirmPasswordPlaceholder
profile.confirmPasswordRequired
profile.emailInvalid
profile.emailPlaceholder
profile.newPasswordPlaceholder
profile.oldPasswordPlaceholder
profile.passwordLengthError
profile.phoneInvalid
profile.remarkPlaceholder
profile.requestFailed
report.aiAnalysisReport
report.aiAnalysisStatistics
report.aiDiagnosisDaily
report.alarmCount
report.alertClosureRate
report.alertClosureWeekly
report.alertWeekly
report.autoGeneratedReports
report.averageIrradiance
report.cleaningEffectReport
report.cleaningEffectReportDesc
report.cleaningOptimizationReport
report.cleaningRevenueImprovement
report.closureRate
report.criticalAlertCount
report.deviceHealthReport
report.deviceHealthReportDesc
report.dispatchChannels
report.email
report.estimatedAdditionalGeneration
report.exportExcel
report.exportPdf
report.generateTime
report.generated
report.generating
report.generation
report.generationDeviation
report.generationMeteorology
report.generationRecords
report.generator
report.inspectionRobotReport
report.inspectionRobotReportDesc
report.monthOverMonthUp
report.monthlyAccumulated
report.monthlyAccumulatedGeneration
report.monthlyGeneration
report.monthlyOperationAnalysis
report.monthlyOperationReport
report.monthlyOperationReportDesc
report.monthlyTotalOrders
report.operationReport
report.operationSummary
report.overview
report.prAverage
report.predictedGeneration
report.reportCycle
report.reportDirectory
report.reportName
report.reportType
report.roleDeviceOm
report.roleOmManager
report.roleOmSupervisor
report.roleStationEngineer
report.sendPlan
report.stationMonthly
report.stationMonthlyReportFile
report.subscribers
report.subscriptionDispatch
report.systemAuto
report.systemNotification
report.templateCenter
report.theoreticalGeneration
report.unitIrradiancePerDay
report.unitItem
report.unitReport
report.weeklyAutoSend
report.weeklyOperationSummary
report.workOrderAlertClosure
report.workOrderCompletionRate
roles.addSuccess
roles.confirmDeleteRole
roles.editRole
roles.editSuccess
roles.manageMembers
roles.menuPermissionConfig
roles.orgAdmin
roles.permissionKey
roles.roleKeyPlaceholder
roles.roleNamePlaceholder
roles.rolePermission
roles.roleSortLabel
roles.superAdmin
router.realtimeMonitorCenter
router.realtimeMonitorDesc
systemSetting.account
systemSetting.batchDeleteRolesTitle
systemSetting.batchDeleteSuccess
systemSetting.batchDeleteUsersTitle
systemSetting.belongingOrg
systemSetting.belongingSite
systemSetting.chooseRole
systemSetting.confirmDeleteSelectedRoles
systemSetting.confirmDeleteSelectedUsers
systemSetting.confirmDeleteUser
systemSetting.deviceOperatePermLabel
systemSetting.devicePerm
systemSetting.editPasswordPlaceholder
systemSetting.editRole
systemSetting.has
systemSetting.hasPerm
systemSetting.levelLabel
systemSetting.nicknameShort
systemSetting.noPerm
systemSetting.none
systemSetting.permissionLabel
systemSetting.phoneShort
systemSetting.pleaseInputRoleLevel
systemSetting.pleaseSelectOrg
systemSetting.pleaseSelectRoles
systemSetting.pleaseSelectSite
systemSetting.pleaseSelectUsers
systemSetting.resetFail
systemSetting.roleLevel
systemSetting.totalCount
systemSetting.userAndRole
users.languagePlaceholder
users.notAssigned
users.rolePlaceholder
users.siteId
video.activeVideoStreams
video.aiVisualTracking
video.allRecordings
video.allStatuses
video.allTypes
video.cameraDeviceList
video.cameraName
video.capacity
video.currentDutyDevice
video.customLayout
video.domeCamera
video.eventTimeline
video.fileDetails
video.fullScreenWall
video.labelCargo
video.labelDetail
video.labelFrontDrive
video.labelLeft
video.labelLeftWing
video.labelMainFront
video.labelMainProbe
video.labelPanorama
video.labelRear
video.labelRearMount
video.labelRight
video.labelRightWing
video.lastEventTime
video.liveLabel
video.mainView
video.offlineCameras
video.offlineRateTrend
video.onlineCameras
video.onlineRateTrend
video.onlineSearch
video.perimeterAlerts
video.positionArray1
video.positionArrayWest
video.positionEnergyStorage
video.positionEquipmentArea
video.positionInverterRoom
video.positionPerimeterNorth
video.positionPerimeterSouth
video.positionStationGate
video.positionStorageBattery
video.positionWeatherStation
video.ptzServoControl
video.recentAlertSnapshots
video.recording
video.recordingStatus
video.refreshSignal
video.searchCameraPlaceholder
video.sourceDevice
video.startEndTime
video.storageUsage
video.storageUsageTrend
video.systemIntegratedCommand
video.timeSpan
video.todayAlertEvents
video.todayRecordings
video.triggerRemoteRepellent
video.twoWayIntercom
video.unitDevice
video.unitIncident
video.videoMonitorCenter
video.videoReplayCenter
video.videoStreamChannels
video.viewMore
video.vsYesterdayPercent
workOrder.aiSuggestedOrders
workOrder.alarmNo
workOrder.alarmTitle
workOrder.autoGeneratedToday
workOrder.avgHandleTime
workOrder.batchDeleteFail
workOrder.batchDeleteSuccess
workOrder.batchExecute
workOrder.completeFail
workOrder.completeSuccess
workOrder.completedOrders
workOrder.confirmBatchDelete
workOrder.detail
workOrder.dispatchFail
workOrder.dispatchRequestError
workOrder.dispatchSuccess
workOrder.executeFail
workOrder.executeSuccess
workOrder.fixed
workOrder.generateOrder
workOrder.getDetailFailed
workOrder.getListFailed
workOrder.handledCompleted
workOrder.highPriority
workOrder.hourUnit
workOrder.invalidOrder
workOrder.issueClosed
workOrder.keyword
workOrder.list
workOrder.modifyFail
workOrder.modifySuccess
workOrder.monthlyTotal
workOrder.nearItems
workOrder.newOrders
workOrder.noActionNeeded
workOrder.noScheduledOrders
workOrder.noTitle
workOrder.onTimeRate
workOrder.orderNo
workOrder.orderUnit
workOrder.overview
workOrder.pendingDispatch
workOrder.pendingOrders
workOrder.planStartTime
workOrder.pleaseInputHandleRemark
workOrder.pleaseInputOrderNoOrTitle
workOrder.pleaseInputResult
workOrder.pleaseInputTaskDesc
workOrder.pleaseSelectExecuteDevice
workOrder.pleaseSelectOneOrder
workOrder.pleaseSelectOrder
workOrder.pleaseSelectOrderToDelete
workOrder.pleaseSelectPerson
workOrder.pleaseSelectResult
workOrder.runningOrders
workOrder.scheduleCalendarView
workOrder.scheduledOrderList
workOrder.selectedOrders
workOrder.statusDistribution
workOrder.suspendFail
workOrder.suspendSuccess
workOrder.taskManagement
workOrder.timeRange
workOrder.todayNewOrders
workOrder.todaySuffix
workOrder.totalCount
workOrder.totalWithCount
workOrder.vsLastWeek
workOrder.vsYesterday
=== t() referenced keys missing in EN (1071) ===
aiAnalysis.abnormalString
aiAnalysis.algoCount
aiAnalysis.algorithmList
aiAnalysis.analysisId
aiAnalysis.area
aiAnalysis.areaLoitering
aiAnalysis.areaLoiteringDesc
aiAnalysis.areaLoiteringTimeline
aiAnalysis.arrayMask
aiAnalysis.asyncTask
aiAnalysis.blockNumber
aiAnalysis.cancelled
aiAnalysis.centerTitle
aiAnalysis.clickHotspotHint
aiAnalysis.default
aiAnalysis.detect
aiAnalysis.detectAndSeg
aiAnalysis.detectDesc
aiAnalysis.detectModel
aiAnalysis.detectModelRegistry
aiAnalysis.detectTaskName
aiAnalysis.detectWorkspace
aiAnalysis.detectWorkspaceDesc
aiAnalysis.dragFile
aiAnalysis.fireSmokeDesc
aiAnalysis.fireSmokeDetection
aiAnalysis.getModelsFailed
aiAnalysis.healthCheck
aiAnalysis.historyAnalysis
aiAnalysis.historyRecords
aiAnalysis.hotspot
aiAnalysis.hotspotCount
aiAnalysis.hotspotPanelList
aiAnalysis.hotspotRecognition
aiAnalysis.image
aiAnalysis.inferencePreset
aiAnalysis.inputPreview
aiAnalysis.inputType
aiAnalysis.integratedCount
aiAnalysis.modelCount
aiAnalysis.motionDetection
aiAnalysis.motionDetectionDesc
aiAnalysis.motionDetectionTimeline
aiAnalysis.noHistory
aiAnalysis.noResult
aiAnalysis.objectDetection
aiAnalysis.onlineServices
aiAnalysis.originalPixels
aiAnalysis.overlayPixels
aiAnalysis.pageDebugRecords
aiAnalysis.panelArea
aiAnalysis.panelGeojson
aiAnalysis.panelLabel
aiAnalysis.perimeterClimbTimeline
aiAnalysis.perimeterIntrusion
aiAnalysis.perimeterIntrusionDesc
aiAnalysis.perimeterIntrusionTimeline
aiAnalysis.perimeterIntrusionType
aiAnalysis.personnelIntrusion
aiAnalysis.personnelIntrusionDesc
aiAnalysis.personnelIntrusionTimeline
aiAnalysis.pointDetails
aiAnalysis.processing
aiAnalysis.quality
aiAnalysis.readServerHistory
aiAnalysis.recommendedCleanBlock
aiAnalysis.refreshModels
aiAnalysis.resultDisplay
aiAnalysis.resultImageVideo
aiAnalysis.resultJson
aiAnalysis.resultViewHint
aiAnalysis.segWorkspace
aiAnalysis.segWorkspaceDesc
aiAnalysis.segment
aiAnalysis.segmentationDesc
aiAnalysis.segmentationTaskName
aiAnalysis.selectHotspotPanel
aiAnalysis.serverDemo
aiAnalysis.showResultAfterTask
aiAnalysis.submitDetectTask
aiAnalysis.submitTaskFailed
aiAnalysis.submitThermalAnalysis
aiAnalysis.supportedFormats
aiAnalysis.syncAnalysis
aiAnalysis.taskExecutionError
aiAnalysis.taskSuccess
aiAnalysis.thermalAnalysisComplete
aiAnalysis.thermalAnalysisFailed
aiAnalysis.thermalFileLabel
aiAnalysis.thermalInteractiveView
aiAnalysis.thermalSegmentation
aiAnalysis.uploadFirst
aiAnalysis.uploadThermal
aiAnalysis.uploadThermalFirst
aiAnalysis.videoAbnormalEvent
aiAnalysis.videoIntelligentAnalysis
aiAnalysis.waitingSegmentation
alerts.addAlertSubscription
alerts.addRule
alerts.addSubscription
alerts.alarmContent
alerts.alarmNo
alerts.alarmTitle
alerts.alertDescription
alerts.alertDetail
alerts.alertLevelDistribution
alerts.alertStatusStatistics
alerts.alertTypeProportion
alerts.allDevices
alerts.allLevels
alerts.appPush
alerts.compareSymbol
alerts.confirmCreateOrder
alerts.confirmHandle
alerts.contactHandler
alerts.content
alerts.criticalAlert
alerts.deviceBattery
alerts.deviceSensor
alerts.dingTalk
alerts.editAlertSubscription
alerts.editRule
alerts.email
alerts.exportFileName
alerts.generalAlert
alerts.handleFail
alerts.handleOperation
alerts.handleSuccess
alerts.importantAlert
alerts.infoAlert
alerts.level
alerts.mockBatteryLow
alerts.mockDeviceBattery
alerts.mockDeviceCamera
alerts.mockDeviceSensor
alerts.mockRuleBattery
alerts.mockRuleTemp
alerts.mockSubAdmin
alerts.mockSubDevice
alerts.mockSubOps
alerts.mockTempExceed
alerts.mockVideoSignalLost
alerts.modifyAlert
alerts.monitorProperty
alerts.newOrder
alerts.noAlarmToCreateOrder
alerts.notifyChannel
alerts.notifySubscription
alerts.occurTime
alerts.orderCreateFail
alerts.orderCreated
alerts.orderFromAlarm
alerts.planStartTime
alerts.pleaseInputAlarmContent
alerts.pleaseInputAlarmTitle
alerts.pleaseInputHandleRemark
alerts.pleaseInputSubscriptionName
alerts.pleaseSelectAlertLevel
alerts.pleaseSelectAlertType
alerts.pleaseSelectChannel
alerts.pleaseSelectHandleResult
alerts.pleaseSelectHandleStatus
alerts.pleaseSelectPlanStartTime
alerts.processing
alerts.recommendedAction
alerts.relatedModel
alerts.reportValue
alerts.rootCause
alerts.ruleConfig
alerts.ruleName
alerts.ruleNamePlaceholder
alerts.searchDeviceContent
alerts.searchSubscription
alerts.sevenDayTrend
alerts.sms
alerts.sourceDevice
alerts.subscriptionName
alerts.subtitle
alerts.threshold
alerts.thresholdPlaceholder
alerts.todayClosed
alerts.todayCriticalAlerts
alerts.todayPending
alerts.todayTotalAlerts
alerts.trendDown
alerts.trendNoChange
alerts.trendUp
alerts.trendZero
alerts.triggerCondition
alerts.yesterdayValue
common.apiCallFail
common.confirmDeleteRecord
common.deleteIrreversible
common.detail
common.deviceId
common.enabled
common.loadDetailFailed
common.loadFailed
common.modify
common.operationFailed
common.pleaseInputDeviceId
common.quantity
common.requestError
common.settings
common.storeValue
common.submitFail
common.timeRange
common.working
devices.abMode
devices.activatedTime
devices.aiAction1
devices.aiAction2
devices.aiAction3
devices.aiAdvice1
devices.aiAdvice2
devices.aiAdvice3
devices.aiAnalysisTitle
devices.aiOptimizeGain
devices.aiOptimizePath
devices.aiSuggestionColon
devices.airportCode
devices.airportSn
devices.airportSnLabel
devices.aliasApiError
devices.aliasHint
devices.aliasModifiedSuccess
devices.aliasModifyFail
devices.aliasNotEmpty
devices.aliasRobotOnly
devices.allDrones
devices.allLevels
devices.allOnline
devices.allTypes
devices.allWaypointsCleared
devices.apiErrorCheck
devices.apiRequestError
devices.apiRequestException
devices.autoFetch
devices.autoResumeFromBreakpoint
devices.backView
devices.batteryCapacity
devices.batteryWithPercent
devices.batteryWithValue
devices.blockUnit
devices.boardTaskFetchFail
devices.boundDrone
devices.bowMode
devices.canWorkNormally
devices.cancelReturnHome
devices.chargePoint
devices.checkRouteFail
devices.cleaningPath
devices.clearMarks
devices.clearPlannedRoute
devices.clearRoute
devices.clickPlayHint
devices.colNo
devices.commGood
devices.commStatus
devices.commandFailed
devices.commandIssued
devices.commandSendFail
devices.commandSent
devices.communicating
devices.communicationNormal
devices.communicationStatus
devices.complete
devices.completePathFirst
devices.completedTimeColon
devices.completionRate
devices.componentRiskZone
devices.confirmCreate
devices.confirmDeleteContent
devices.confirmDeleteOk
devices.confirmDeleteTitle
devices.connectionFailed
devices.controlLogTitle
devices.controlRequestContent
devices.countUnit
devices.coverClosed
devices.coverOpen
devices.coverageEquipment
devices.coverageValue
devices.createSuccess
devices.createTaskException
devices.createTaskFail
devices.createTaskSuccess
devices.createWaylineTask
devices.createWaylineTaskTitle
devices.cumWorkArea
devices.cumWorkMileage
devices.cumWorkTime
devices.currentWayline
devices.currentWaypointLabel
devices.deleteFailNetwork
devices.deleteFailRetry
devices.detailBtn
devices.deviceAliasLabel
devices.deviceColHeader
devices.deviceControlPanel
devices.deviceData
devices.deviceInfoError
devices.deviceList
devices.deviceOnlineRate
devices.deviceParamSetting
devices.deviceSn
devices.deviceSnColon
devices.deviceSnLabel
devices.deviceTaskList
devices.deviceTypeColon
devices.dgpsDiff
devices.dispatchableCount
devices.droneAirport
devices.droneAirspace
devices.droneFallbackName
devices.dronePort
devices.dronePortA01
devices.dronePosition
devices.droneStatus
devices.droneVideo
devices.droneWayline
devices.droneWaylineTask
devices.editRobotInfoTitle
devices.emergencyStopBtn
devices.emergencyStopTriggered
devices.endLabel
devices.envFlightConditions
devices.envWindSpeed
devices.equipmentColon
devices.equipmentControl
devices.equipmentName
devices.equipmentOverview
devices.equipmentScheduleList
devices.equipmentSituationMap
devices.execTimePoint
devices.executeDeviceColon
devices.executeNow
devices.executeWayline
devices.executeWaylineTask
devices.executingTasks
devices.fenceAbnormal
devices.fetchDetailError
devices.fetchDetailException
devices.fetchParamFail
devices.fetchWaylineFailed
devices.fetchWaylineListFailed
devices.fillRequiredFields
devices.firmwareVersion
devices.fixed
devices.fixed2
devices.fixedEnv
devices.flightAltitude
devices.flightWindSpeed
devices.frontView
devices.ganttViewTitle
devices.generateTask
devices.gnssQuality
devices.gpsMode
devices.gpsModeDesc
devices.gpsPlanning
devices.gpsSingle
devices.gpsTaskIssued
devices.gpsUnit
devices.gpsWaypointPlan
devices.groupOf
devices.hangar
devices.hasRain
devices.headingAngle
devices.horizontalSpeed
devices.hotspotSuspect
devices.inDock
devices.inProgressDesc
devices.indoor
devices.inputCustomAlias
devices.inputPlotName
devices.inputTimestamp
devices.inputWaylineName
devices.inspectRobotRbt
devices.inspectRoute
devices.inspectionMachine
devices.inspectionRoute
devices.irLens
devices.issueTask
devices.issueTaskFirst
devices.landingDockSn
devices.landingDockSnLabel
devices.leftView
devices.leftWheelDrive
devices.legendTitle
devices.levelHigh
devices.levelLow
devices.levelMid
devices.locationFail
devices.logCommand
devices.logDesc1
devices.logDesc2
devices.logDesc3
devices.logDesc4
devices.logDesc5
devices.logDesc6
devices.logEvent
devices.logLevelLowBattery
devices.loginInfoExpired
devices.lostControlAction
devices.lostControlActionLabel
devices.markPoint
devices.markedPointsCount
devices.minBattery
devices.minBatteryLabel
devices.minExecBatteryLabel
devices.minThreePoints
devices.modeAuto
devices.modeDebugLocal
devices.modeDebugRemote
devices.modeLabel
devices.modeManual
devices.modeUpgrading
devices.modeWorking
devices.monthDays
devices.mowRobotGr
devices.mowRoute
devices.mowingRobot
devices.networkErrorRetry
devices.nightFlightLimit
devices.noData
devices.noDetail
devices.noDeviceSelected
devices.noDroneSelected
devices.noFlyZone
devices.noPermission
devices.noSavedRoutes
devices.noTaskDetail
devices.noVideo
devices.noVideoSignal
devices.noVideoStream
devices.noWaylineData
devices.noWaylineTask
devices.noWaypoints
devices.noWaypointsToSave
devices.normalRunning
devices.notFixed
devices.notFixed2
devices.notFixedEnv
devices.obstacleAvoidSwitch
devices.obstacleDetected
devices.obstacleForbiddenZone
devices.onStandby
devices.oneClickCoordinated
devices.oneClickSchedule
devices.onlineDevices
devices.onlineRate
devices.operationApiError
devices.operationApiException
devices.operationFail
devices.optimize
devices.optionalEmpty
devices.otherWebControlling
devices.outDock
devices.outdoor
devices.panorama
devices.paramArmChannel
devices.paramBatteryType
devices.paramChassisChannel
devices.paramChipUid
devices.paramChipUidSign
devices.paramDelFlag
devices.paramDriveType
devices.paramDualRtk
devices.paramFanChannel
devices.paramFanPolarity
devices.paramFirmwareVersion
devices.paramForwardSpeedLimit
devices.paramFuelPumpChannel
devices.paramGearRatio
devices.paramKnifeChannel
devices.paramKnifeMotorMode
devices.paramKnifePolarity
devices.paramKnifeWidth
devices.paramLeftBackwardGain
devices.paramLeftForwardGain
devices.paramLeftMotorReverse
devices.paramLiftChannel
devices.paramLiftProtectTime
devices.paramRelayBoard
devices.paramRemoteConfig
devices.paramRemoteType
devices.paramRightBackwardGain
devices.paramRightForwardGain
devices.paramRightMotorReverse
devices.paramRobotHeight
devices.paramRobotLength
devices.paramRobotWidth
devices.paramRunSpeed
devices.paramSaveException
devices.paramSaveFail
devices.paramSaveSuccess
devices.paramSwapChannel
devices.paramThrottleChannel
devices.paramThrottlePolarity
devices.paramTurnSpeedLimit
devices.paramTyreSize
devices.paramUse4G
devices.paramViewEditTitle
devices.paramWalkMotorMode
devices.paramWifiName
devices.paramWifiPassword
devices.pathPlanDone
devices.pathPlanFailRetry
devices.pathPlanning
devices.pauseTask
devices.pendingApprovalTasks
devices.pendingExec
devices.permissionObtained
devices.permissionRequestTitle
devices.permissionRequesting
devices.planeNoLocalRoute
devices.pleaseLoginFirst
devices.pleaseSelectWayline
devices.plotNameLabel
devices.pointMarked
devices.positionInStation
devices.precipStatus
devices.productType
devices.rainNo
devices.rainYes
devices.rainfall
devices.realtimeMonitorList
devices.realtimePicture
devices.realtimePowerData
devices.realtimeSpeed
devices.realtimeVideoMonitor
devices.rechargeBtn
devices.rechargeCommandSent
devices.remoteControl
devices.remoteControlAndSituation
devices.repeatDaily
devices.repeatInterval
devices.repeatMode
devices.repeatModeLabel
devices.repeatMonthlyByDate
devices.repeatMonthlyByWeek
devices.repeatNone
devices.repeatTypeLabel
devices.repeatWeekly
devices.requestControlPermission
devices.requestFail
devices.resumeAuto
devices.resumeBreakpoint
devices.resumeFromBreakpointLabel
devices.resumeManual
devices.resumeTask
devices.returnCommandSent
devices.returnHomeAltitude
devices.returnHomeAltitudeColon
devices.returnHomeAltitudeLabel
devices.returnHomeMode
devices.returnHomeModeLabel
devices.rightView
devices.rightWheelDrive
devices.robotExecutingCount
devices.robotInTaskCount
devices.robotLocalRoutes
devices.robotPath
devices.robotPosition
devices.robotStatus
devices.robotTaskData
devices.robotWorkStatus
devices.routeDeletedSuccess
devices.routeLoaded
devices.routeLoadedWithName
devices.routeNoPathPoints
devices.routeSavedLocal
devices.rtBattery
devices.rtHeadingAngle
devices.rtHeadingStatus
devices.rtInitialized
devices.rtLeftMotor
devices.rtLeftSpeed
devices.rtLeftTemp
devices.rtMainTemp
devices.rtMode
devices.rtPitchAngle
devices.rtPositioning
devices.rtRightMotor
devices.rtRightSpeed
devices.rtRightTemp
devices.rtSatellites
devices.rtVoltage
devices.rthMode
devices.rthOptimal
devices.rthPreset
devices.rtkCount
devices.rtkEnvLabel
devices.rtkFixed2
devices.rtkFloat
devices.rtkHighPrecision
devices.rtkModeDesc
devices.rtkStatus
devices.safeRthBattery
devices.satelliteCount
devices.savePathTitle
devices.savePlan
devices.saving
devices.searchDeviceName
devices.searchWaylinePlaceholder
devices.selectDevice
devices.selectDrone
devices.selectExecuteDroneFirst
devices.selectNoDrone
devices.selectStartTimePlaceholder
devices.selectTaskFirst
devices.selectTaskStartTime
devices.selectWayline
devices.selectedWaylineColon
devices.signalSatellite
devices.situationMap
devices.smartAssign
devices.standbyCount
devices.startBtn
devices.startLabel
devices.startTimeColon
devices.stationCameraNotFound
devices.stationStatus
devices.stationTopology
devices.stationVideo
devices.statusExecFailed
devices.statusExecSuccess
devices.statusPendingApproval
devices.statusPreparing
devices.statusRestored
devices.statusStartFailed
devices.statusSuggestExec
devices.statusTerminated
devices.statusTimeout
devices.statusUpdateSuccess
devices.statusWaitExec
devices.statusWaitingStart
devices.stopVideoBtn
devices.suggestAction
devices.suggestTime
devices.suitability
devices.suitable
devices.suitableExec
devices.suitableExec2
devices.supplyChargePoint
devices.supportsGpsPlan
devices.supportsRemoteGpsPlan
devices.suspendTask
devices.switchDroneLensFail
devices.switchManual
devices.switchStationCameraFail
devices.taskCancelException
devices.taskCancelFail
devices.taskCanceledSuccess
devices.taskCompletedMsg
devices.taskCompletionRate
devices.taskContinuous
devices.taskEndTimeLabel
devices.taskEnded
devices.taskExecSuccess
devices.taskExecuteException
devices.taskExecuteFail
devices.taskExecuteSuccess
devices.taskExecutedSuccess
devices.taskIdLabel
devices.taskImmediate
devices.taskListFetchFail
devices.taskListRefreshFail
devices.taskOrchestrationAI
devices.taskPauseException
devices.taskPauseFail
devices.taskPaused
devices.taskPaused2
devices.taskPausedSuccess
devices.taskRecurring
devices.taskRestored2
devices.taskResumeException
devices.taskResumeFail
devices.taskResumed
devices.taskResumedSuccess
devices.taskReturnedHome
devices.taskReturnedHome2
devices.taskStandby2
devices.taskStartFailure
devices.taskStartTimeLabel
devices.taskStarted
devices.taskStarted2
devices.taskStatusUpdateSuccess
devices.taskStopped
devices.taskSuspended
devices.taskSuspended2
devices.taskTerminated
devices.taskTimed
devices.taskTimedOut
devices.taskTimelineTitle
devices.taskTimeout
devices.taskTypeLabel
devices.taskWaitingStart
devices.taskWaylineTypeLabel
devices.timelineStatusComplete
devices.timelineStatusReady
devices.timelineStatusReturn
devices.timelineStatusStart
devices.tlFinishInspection
devices.tlReturnSupply
devices.tlStandbyReady
devices.tlStartCleaning
devices.tlStartInspection
devices.tlStartMowing
devices.todayTaskExecute
devices.todayWaylinePlan
devices.totalCount
devices.trendFlat
devices.trendYesterday
devices.typeAIRecheck
devices.typeArrayMow
devices.typeComponentClean
devices.typeDroneHotspot
devices.typeFenceInspect
devices.typeHotspotInspect
devices.typeRecheck
devices.unitGe
devices.unitJia
devices.unitTai
devices.unitTiao
devices.unknownDevice
devices.unknownDrone
devices.unknownObject
devices.unknownPlatform
devices.unknownTime
devices.verticalSpeed
devices.videoAndConfig
devices.videoConfigured
devices.videoLinkConfigured
devices.videoStopped
devices.viewBack
devices.viewFront
devices.viewLeft
devices.viewMore
devices.viewMoreLogs
devices.viewRight
devices.viewTop
devices.washDrone
devices.washDroneUav
devices.waylineDetail
devices.waylineEditPlan
devices.waylineExecFail
devices.waylineFallback
devices.waylineLabel
devices.waylineList
devices.waylineListFetchFail
devices.waylineName
devices.waylineParamsTitle
devices.waylinePrecision
devices.waylinePrecisionLabel
devices.waylineTaskCreated
devices.waylineUuidLabel
devices.waypoint
devices.waypointDeleted
devices.waypointList
devices.waypointsAdded
devices.waypointsCount
devices.weatherAdvice1
devices.weatherAdvice2
devices.weatherStation
devices.weatherWindowTitle
devices.weedHighZone
devices.weekFri
devices.weekMon
devices.weekNo
devices.weekSat
devices.weekSun
devices.weekThu
devices.weekTue
devices.weekWed
devices.weekday
devices.weekdayExec
devices.whichWeek
devices.wideLens
devices.windSpeed
devices.workMode
devices.workTaskBoard
devices.working
devices.workingCurrent
devices.zoomLens
home.ambientTemperature
home.current
home.currentIrradiance
home.frequency
home.gridConnected
home.gridConnection
home.gridVoltage
home.inverterPowerCompare
home.phaseA
home.powerCurve
home.ratedPower
home.realtimePower
home.stringCurrentHeatmap
home.today
home.todayAccumulated
home.totalPower
home.underMaintenance
login.and
profile.basicInfo
profile.changePassword
profile.confirmPasswordPlaceholder
profile.confirmPasswordRequired
profile.emailInvalid
profile.emailPlaceholder
profile.newPasswordPlaceholder
profile.oldPasswordPlaceholder
profile.passwordLengthError
profile.phoneInvalid
profile.remarkPlaceholder
profile.requestFailed
report.aiAnalysisReport
report.aiAnalysisStatistics
report.aiDiagnosisDaily
report.alarmCount
report.alertClosureRate
report.alertClosureWeekly
report.alertWeekly
report.autoGeneratedReports
report.averageIrradiance
report.cleaningEffectReport
report.cleaningEffectReportDesc
report.cleaningOptimizationReport
report.cleaningRevenueImprovement
report.closureRate
report.criticalAlertCount
report.deviceHealthReport
report.deviceHealthReportDesc
report.dispatchChannels
report.email
report.estimatedAdditionalGeneration
report.exportExcel
report.exportPdf
report.generateTime
report.generated
report.generating
report.generation
report.generationDeviation
report.generationMeteorology
report.generationRecords
report.generator
report.inspectionRobotReport
report.inspectionRobotReportDesc
report.monthOverMonthUp
report.monthlyAccumulated
report.monthlyAccumulatedGeneration
report.monthlyGeneration
report.monthlyOperationAnalysis
report.monthlyOperationReport
report.monthlyOperationReportDesc
report.monthlyTotalOrders
report.operationReport
report.operationSummary
report.overview
report.prAverage
report.predictedGeneration
report.reportCycle
report.reportDirectory
report.reportName
report.reportType
report.roleDeviceOm
report.roleOmManager
report.roleOmSupervisor
report.roleStationEngineer
report.sendPlan
report.stationMonthly
report.stationMonthlyReportFile
report.subscribers
report.subscriptionDispatch
report.systemAuto
report.systemNotification
report.templateCenter
report.theoreticalGeneration
report.unitIrradiancePerDay
report.unitItem
report.unitReport
report.weeklyAutoSend
report.weeklyOperationSummary
report.workOrderAlertClosure
report.workOrderCompletionRate
roles.addSuccess
roles.confirmDeleteRole
roles.editRole
roles.editSuccess
roles.manageMembers
roles.menuPermissionConfig
roles.orgAdmin
roles.permissionKey
roles.roleKeyPlaceholder
roles.roleNamePlaceholder
roles.rolePermission
roles.roleSortLabel
roles.superAdmin
router.realtimeMonitorCenter
router.realtimeMonitorDesc
systemSetting.account
systemSetting.batchDeleteRolesTitle
systemSetting.batchDeleteSuccess
systemSetting.batchDeleteUsersTitle
systemSetting.belongingOrg
systemSetting.belongingSite
systemSetting.chooseRole
systemSetting.confirmDeleteSelectedRoles
systemSetting.confirmDeleteSelectedUsers
systemSetting.confirmDeleteUser
systemSetting.deviceOperatePermLabel
systemSetting.devicePerm
systemSetting.editPasswordPlaceholder
systemSetting.editRole
systemSetting.has
systemSetting.hasPerm
systemSetting.levelLabel
systemSetting.nicknameShort
systemSetting.noPerm
systemSetting.none
systemSetting.permissionLabel
systemSetting.phoneShort
systemSetting.pleaseInputRoleLevel
systemSetting.pleaseSelectOrg
systemSetting.pleaseSelectRoles
systemSetting.pleaseSelectSite
systemSetting.pleaseSelectUsers
systemSetting.resetFail
systemSetting.roleLevel
systemSetting.totalCount
systemSetting.userAndRole
users.languagePlaceholder
users.notAssigned
users.rolePlaceholder
users.siteId
video.activeVideoStreams
video.aiVisualTracking
video.allRecordings
video.allStatuses
video.allTypes
video.cameraDeviceList
video.cameraName
video.capacity
video.currentDutyDevice
video.customLayout
video.domeCamera
video.eventTimeline
video.fileDetails
video.fullScreenWall
video.labelCargo
video.labelDetail
video.labelFrontDrive
video.labelLeft
video.labelLeftWing
video.labelMainFront
video.labelMainProbe
video.labelPanorama
video.labelRear
video.labelRearMount
video.labelRight
video.labelRightWing
video.lastEventTime
video.liveLabel
video.mainView
video.offlineCameras
video.offlineRateTrend
video.onlineCameras
video.onlineRateTrend
video.onlineSearch
video.perimeterAlerts
video.positionArray1
video.positionArrayWest
video.positionEnergyStorage
video.positionEquipmentArea
video.positionInverterRoom
video.positionPerimeterNorth
video.positionPerimeterSouth
video.positionStationGate
video.positionStorageBattery
video.positionWeatherStation
video.ptzServoControl
video.recentAlertSnapshots
video.recording
video.recordingStatus
video.refreshSignal
video.searchCameraPlaceholder
video.sourceDevice
video.startEndTime
video.storageUsage
video.storageUsageTrend
video.systemIntegratedCommand
video.timeSpan
video.todayAlertEvents
video.todayRecordings
video.triggerRemoteRepellent
video.twoWayIntercom
video.unitDevice
video.unitIncident
video.videoMonitorCenter
video.videoReplayCenter
video.videoStreamChannels
video.viewMore
video.vsYesterdayPercent
workOrder.aiSuggestedOrders
workOrder.alarmNo
workOrder.alarmTitle
workOrder.autoGeneratedToday
workOrder.avgHandleTime
workOrder.batchDeleteFail
workOrder.batchDeleteSuccess
workOrder.batchExecute
workOrder.completeFail
workOrder.completeSuccess
workOrder.completedOrders
workOrder.confirmBatchDelete
workOrder.detail
workOrder.dispatchFail
workOrder.dispatchRequestError
workOrder.dispatchSuccess
workOrder.executeFail
workOrder.executeSuccess
workOrder.fixed
workOrder.generateOrder
workOrder.getDetailFailed
workOrder.getListFailed
workOrder.handledCompleted
workOrder.highPriority
workOrder.hourUnit
workOrder.invalidOrder
workOrder.issueClosed
workOrder.keyword
workOrder.list
workOrder.modifyFail
workOrder.modifySuccess
workOrder.monthlyTotal
workOrder.nearItems
workOrder.newOrders
workOrder.noActionNeeded
workOrder.noScheduledOrders
workOrder.noTitle
workOrder.onTimeRate
workOrder.orderNo
workOrder.orderUnit
workOrder.overview
workOrder.pendingDispatch
workOrder.pendingOrders
workOrder.planStartTime
workOrder.pleaseInputHandleRemark
workOrder.pleaseInputOrderNoOrTitle
workOrder.pleaseInputResult
workOrder.pleaseInputTaskDesc
workOrder.pleaseSelectExecuteDevice
workOrder.pleaseSelectOneOrder
workOrder.pleaseSelectOrder
workOrder.pleaseSelectOrderToDelete
workOrder.pleaseSelectPerson
workOrder.pleaseSelectResult
workOrder.runningOrders
workOrder.scheduleCalendarView
workOrder.scheduledOrderList
workOrder.selectedOrders
workOrder.statusDistribution
workOrder.suspendFail
workOrder.suspendSuccess
workOrder.taskManagement
workOrder.timeRange
workOrder.todayNewOrders
workOrder.todaySuffix
workOrder.totalCount
workOrder.totalWithCount
workOrder.vsLastWeek
workOrder.vsYesterday
Total referenced keys: 1587
=== USER-FACING hardcoded CJK lines (1288) ===
src\api\api.ts:207 | responseType: 'arraybuffer' // 馃憟 鍙渶瑕佸姞杩欎竴琛岋紒
src\api\device.ts:92 | data: data, // 涓婁紶鏂囦欢蹇呴』鐢?data锛屼笉鑳界敤 params
src\api\device.ts:94 | 'Content-Type': 'multipart/form-data' // 涓婁紶鏂囦欢蹇呭姞锛?src\api\device.ts:418 | url: '/iot/workRecord/add', // 淇涓烘纭殑娣诲姞鎺ュ彛
src\api\reportDownloader.ts:15 | [key: string]: string; // 閫傞厤鍓茶崏(妞嶈楂樺害)銆佹竻娲?鐏版崯鐜?鐨勪笉鍚屽瓧娈?src\api\reportDownloader.ts:240 | <!-- 鏍稿績鎸囨爣 -->
src\api\reportDownloader.ts:254 | <!-- 鏈€浣充綔涓氱獥鍙?-->
src\api\reportDownloader.ts:264 | <!-- 浠诲姟鍒楄〃 -->
src\api\reportDownloader.ts:281 | if (task[key] === '楂?) className = 'priority-high';
src\api\reportDownloader.ts:282 | else if (task[key] === '涓?) className = 'priority-medium';
src\api\reportDownloader.ts:295 | <!-- 绠楁硶鎵ц娴佺▼ -->
src\api\request.ts:8 | const message = utils.message; // 浣跨敤鍏ㄥ眬 message
src\components\AgoraRtc.tsx:61 | await destroy(); // 鍏堟竻鐞嗕笂涓€娆?src\components\AgoraRtc.tsx:96 | message.error("瑙嗛杩炴帴澶辫触");
src\components\alerts\AlarmOverview.tsx:263 | fetchList(); // 鍒锋柊鍒楄〃
src\components\alerts\AlarmOverview.tsx:264 | fetchStat(); // 鍒锋柊缁熻
src\components\alerts\AlarmOverview.tsx:338 | case 1: color = 'orange'; break; // 寰呭鐞?src\components\alerts\AlarmOverview.tsx:339 | case 2: color = 'green'; break; // 宸插叧闂?src\components\alerts\AlarmOverview.tsx:478 | sourceType: 7, // 鏉ユ簮 7=鍛婅
src\components\alerts\AlarmOverview.tsx:479 | orderType: 5, // 绫诲瀷 5=杩愮淮
src\components\alerts\AlarmOverview.tsx:480 | priorityLevel: currentAlarm.alarmLevel === 'ERROR' ? 1 : 2, // 淇锛氱瓑绾ф槸瀛楃涓诧紝涓嶆槸鏁板瓧1
src\components\alerts\AlarmOverview.tsx:495 | orderStatus: 1, // 1-寰呭鐞?src\components\alerts\AlarmOverview.tsx:694 | const trimVal = e.target.value.trim(); // 鍙竻闄ら灏剧┖鏍?src\components\alerts\AlarmOverview.tsx:728 | fetchChartAllAlarm(); // 鏂板锛氬埛鏂板浘琛ㄥ叏閲忓憡璀?src\components\alerts\AlarmOverview.tsx:731 | fetchList(); // 鍒锋柊鍒楄〃
src\components\alerts\AlarmOverview.tsx:732 | fetchStat(); // 鍒锋柊缁熻
src\components\alerts\AlarmOverview.tsx:733 | fetchChartAllAlarm(); // 鏂板锛氬埛鏂板浘琛ㄥ叏閲忓憡璀?src\components\alerts\AlarmSubscription.tsx:16 | { id: 1, name: i18n.t('alerts.mockSubOps'), deviceType: 'all', level: 'all', channels: ['鐭俊'] },
src\components\alerts\AlarmSubscription.tsx:17 | { id: 2, name: i18n.t('alerts.mockSubAdmin'), deviceType: 'sensor', level: 'error', channels: ['鐭俊', '閭欢'] },
src\components\alerts\AlarmSubscription.tsx:18 | { id: 3, name: i18n.t('alerts.mockSubDevice'), deviceType: 'camera', level: 'warn', channels: ['APP鎺ㄩ€?] },
src\components\alerts\AlarmSubscription.tsx:31 | '鐭俊': t('alerts.sms'),
src\components\alerts\AlarmSubscription.tsx:32 | '閭欢': t('alerts.email'),
src\components\alerts\AlarmSubscription.tsx:33 | 'APP鎺ㄩ€?: t('alerts.appPush'),
src\components\alerts\AlarmSubscription.tsx:167 | <Option value="鐭俊">{t('alerts.sms')}</Option>
src\components\alerts\AlarmSubscription.tsx:168 | <Option value="閭欢">{t('alerts.email')}</Option>
src\components\alerts\AlarmSubscription.tsx:169 | <Option value="APP鎺ㄩ€?>{t('alerts.appPush')}</Option>
src\components\devices\DeviceControl.tsx:87 | const [selectedRoute, setSelectedRoute] = useState(null); // 鉁?鏂板
src\components\devices\DeviceControl.tsx:90 | const [isConnecting, setIsConnecting] = useState(false); // 杩炴帴涓姸鎬?src\components\devices\DeviceControl.tsx:126 | const [isModalOpen, setIsModalOpen] = useState(false);//鏉冮檺璇锋眰鐨勫脊绐?src\components\devices\DeviceControl.tsx:127 | const [hasControlRight, setHasContronRight] = useState(false);//鏄惁鏈夋帶鍒舵潈闄?src\components\devices\DeviceControl.tsx:336 | case 'AUTH'://杩炴帴澶辫触 閲嶆柊杩炴帴
src\components\devices\DeviceControl.tsx:343 | case 'switchResult'://杩炴帴澶辫触 閲嶆柊杩炴帴
src\components\devices\DeviceControl.tsx:354 | case 'switchPermission'://杩炴帴澶辫触 閲嶆柊杩炴帴
src\components\devices\DeviceControl.tsx:359 | return; // 杩欓噷鐨剅eturn浼氱粓姝㈡暣涓猦andleMessage鍑芥暟鐨勬墽琛?src\components\devices\DeviceControl.tsx:369 | case 'detectionReport'://杩炴帴澶辫触 閲嶆柊杩炴帴
src\components\devices\DeviceControl.tsx:503 | setWsDeviceInfo([]);//娓呯┖璁惧淇℃伅
src\components\devices\DeviceControl.tsx:634 | }, 8000); // 8绉掑悗鍙颁繚娲?src\components\devices\DeviceControl.tsx:761 | setPoints([]); // 馃敟 鍏抽敭锛氭竻绌轰笂涓€涓澶囩殑杞ㄨ抗
src\components\devices\DeviceControl.tsx:945 | setWaylineList(_list || []); // 鍙杔ist鏁扮粍
src\components\devices\DeviceControl.tsx:1000 | setSelectedRoute(route); // 鉁?鍔犱笂杩欏彞
src\components\devices\DeviceControl.tsx:1040 | wsRef.current.readyState !== WebSocket.OPEN || // 2. 杩炴帴鏄惁鎵撳紑
src\components\devices\DeviceControl.tsx:1041 | !controlRef.current) { // 3. 鏄惁鏈夋帶鍒舵潈闄?src\components\devices\DeviceControl.tsx:1052 | type: "remoteControl", // 娑堟伅绫诲瀷
src\components\devices\DeviceControl.tsx:1053 | remoteData: data, // 鍘熷鎵嬫焺鏁版嵁
src\components\devices\DeviceControl.tsx:1054 | token: token, // 璁よ瘉浠ょ墝
src\components\devices\DeviceControl.tsx:1086 | setSelectedRoute(work); // 鉁?鍔犱笂杩欏彞
src\components\devices\DeviceControl.tsx:1342 | {selectedDevice?.name}锝滃疄鏃惰棰?src\components\devices\DeviceControl.tsx:1369 | <p className="text-xs text-[#9ca3af] mb-1">浠诲姟鎬佸娍</p>
src\components\devices\DeviceControl.tsx:1395 | <MapPin className="w-3 h-3 text-[#9ca3af]" />鍖哄煙: {device?.area}
src\components\devices\DeviceControl.tsx:1487 | <p className="text-xs text-[#9ca3af] mb-1.5">褰撳墠浣嶇疆</p>
src\components\devices\DeviceControl.tsx:1497 | <p className="text-xs text-[#9ca3af] mb-1.5">褰撳墠妯″紡</p>
src\components\devices\DeviceControl.tsx:1498 | <p className="text-sm font-bold text-white">{selectedDevice?.type === 'plane' ? '鏃犱汉鏈哄緟鍛? : selectedDevice?.type === 'mower' ? '鍓茶崏寰呭懡' : '寰呭懡'}</p>
src\components\devices\DeviceControl.tsx:1501 | <p className="text-xs text-[#9ca3af] mb-1.5">鐢甸噺/鑸悜</p>
src\components\devices\DeviceControl.tsx:1509 | <span className="text-xs text-[#9ca3af]">鍚敤閬ユ帶</span>
src\components\devices\DeviceControl.tsx:1539 | <p className="text-xs text-[#9ca3af] mb-1.5">TCP閾捐矾</p>
src\components\devices\DeviceControl.tsx:1543 | <p className="text-xs text-[#9ca3af] mb-1.5">閬ユ帶鎺ョ</p>
src\components\devices\DeviceControl.tsx:1547 | <p className="text-xs text-[#9ca3af] mb-1.5">瑙勫垝鎬佸娍</p>
src\components\devices\DeviceControl.tsx:1841 | <Send className="w-4 h-4" /> 涓嬪彂浠诲姟
src\components\devices\DeviceControl.tsx:1845 | {taskRunning ? t('video.pause') : "鎵ц"}
src\components\devices\DeviceControl.tsx:1848 | <Square className="w-4 h-4" /> 鍋滄
src\components\devices\deviceController.js:20 | this.currentDevice = null; // 淇濆瓨褰撳墠璁惧
src\components\devices\deviceController.js:32 | this.keepAliveInterval = null; // 鍚庡彴淇濇椿瀹氭椂鍣?src\components\devices\deviceController.js:178 | this.messageApi.warning('鍏朵粬绔鍦ㄦ帶鍒?);
src\components\devices\deviceController.js:187 | this.messageApi.error('鏉冮檺鏍¢獙澶辫触');
src\components\devices\deviceController.js:210 | this.messageApi.warning('鏃犳帶鍒舵潈闄?);
src\components\devices\deviceController.js:219 | content: '璇锋眰鎺у埗涓?..',
src\components\devices\deviceController.js:231 | this.messageApi.error('鎺у埗璇锋眰瓒呮椂');
src\components\devices\deviceController.js:283 | this.messageApi.error({ key: 'control', content: msg.message || '鎺у埗澶辫触' });
src\components\devices\deviceController.js:288 | this.messageApi.success({ key: 'control', content: '鎺у埗鎴愬姛' });
src\components\devices\deviceController.js:313 | title: '鏉冮檺璇锋眰',
src\components\devices\deviceController.js:314 | content: `${msg.platform} 璇锋眰鎺у埗璁惧`,
src\components\devices\deviceController.js:325 | const types = { 0: t('constants.locationUnknown'), 1: '浜?, 2: '杞﹁締', 3: '鍥存爮', 4: '鍧戞礊', 5: '鑽変笡' };
src\components\devices\deviceController.js:328 | content: `妫€娴嬪埌 ${types[type] ?? '鏈煡鐗?}锛岃窛绂?${distance}m`,
src\components\devices\DeviceOverviewPage.tsx:232 | return true; // 榛樿閮界畻
src\components\devices\DeviceOverviewPage.tsx:277 | }, [selectedDevice]); // 鍙湁鍒囪澶囨墠鍙?鈫?瑙嗛涓嶉棯
src\components\devices\DeviceOverviewPage.tsx:458 | const activeMowers = devices?.filter(d => d.feStatus == 1).length || 0; // 浣滀笟涓姸鎬佹暟閲?src\components\devices\DeviceStatusPage.tsx:73 | const [persistentDroneData, setPersistentDroneData] = useState(null); // 鎸佷箙鍖栨棤浜烘満鏁版嵁
src\components\devices\DeviceStatusPage.tsx:74 | const [persistentHostData, setPersistentHostData] = useState(null); // 鎸佷箙鍖栨満鍦烘暟鎹?src\components\devices\DeviceStatusPage.tsx:78 | const [arrivedPoint, setArrivedPoint] = useState(null);//瀹屾垚鐐?src\components\devices\DeviceStatusPage.tsx:101 | const [queryTimeRange, setQueryTimeRange] = useState([]); // 鏃堕棿鑼冨洿
src\components\devices\DeviceStatusPage.tsx:102 | const [startTimestamp, setStartTimestamp] = useState(''); // 寮€濮嬫椂闂存埑
src\components\devices\DeviceStatusPage.tsx:103 | const [endTimestamp, setEndTimestamp] = useState(''); // 缁撴潫鏃堕棿鎴?src\components\devices\DeviceStatusPage.tsx:118 | const [markedPoints, setMarkedPoints] = useState([]); // 鏍囪鐨勭偣
src\components\devices\DeviceStatusPage.tsx:119 | const [completeFlag, setCompleteFlag] = useState(false); // 鏄惁瀹屾垚璺緞瑙勫垝
src\components\devices\DeviceStatusPage.tsx:120 | const [savePath, setSavePath] = useState(null); // 淇濆瓨鐨勮矾寰勬暟鎹?src\components\devices\DeviceStatusPage.tsx:121 | const [isSaveModalVisible, setIsSaveModalVisible] = useState(false); // 淇濆瓨妯℃€佹鍙鎬?src\components\devices\DeviceStatusPage.tsx:122 | const [plotName, setPlotName] = useState(''); // 鍦板潡鍚嶇О
src\components\devices\DeviceStatusPage.tsx:123 | const [isSaving, setIsSaving] = useState(false); // 鏄惁姝e湪淇濆瓨
src\components\devices\DeviceStatusPage.tsx:124 | const mapRef = useRef(null); // 鍦板浘 ref
src\components\devices\DeviceStatusPage.tsx:128 | const urlSn = queryParams.get('sn'); // 鎷垮埌璺敱涓婄殑sn
src\components\devices\DeviceStatusPage.tsx:596 | ...currentDroneData, // 鎸佷箙鍖栨暟鎹渶鍚庤鐩栵紝纭繚浼樺厛鏄剧ず
src\components\devices\DeviceStatusPage.tsx:708 | path: path, // 瀛樺偍杩斿洖鐨勮矾寰勭粨鏋?src\components\devices\DeviceStatusPage.tsx:736 | path: positionPoints, // 瀛樺偍杩斿洖鐨勮矾寰勭粨鏋?src\components\devices\DroneVideoPlayer.tsx:47 | const [selectedCamera, setSelectedCamera] = useState<'indoor' | 'outdoor'>('outdoor'); // 榛樿閫夋嫨瀹ゅ
src\components\devices\DroneVideoPlayer.tsx:48 | const [selectedLens, setSelectedLens] = useState<'wide' | 'zoom' | 'ir'>(''); // 榛樿閫夋嫨骞胯
src\components\devices\DroneVideoPlayer.tsx:65 | const cameraIndex = device?.gateway_camera_list[0]?.camera_index || ""; // 鐩墠鍏堥粯璁ょ敤绗竴涓憚鍍忓ご
src\components\devices\DroneVideoPlayer.tsx:198 | hasLoadedRef.current.drone = false; // 閲嶇疆鍙︿竴杈圭殑鍔犺浇鐘舵€?src\components\devices\DroneVideoPlayer.tsx:205 | hasLoadedRef.current.station = false; // 閲嶇疆鍙︿竴杈圭殑鍔犺浇鐘舵€?src\components\devices\DroneVideoPlayer.tsx:253 | minWidth: dualVideo ? '300px' : 'auto' // 纭繚鍦ㄥ弻瑙嗛妯″紡涓嬫湁鏈€灏忓搴?src\components\devices\mowerAllView.jsx:10 | gap: 8, // 涓夊垪涔嬮棿闂磋窛
src\components\devices\mowerAllView.jsx:41 | <div style={{ position: 'absolute', top: 4, left: 8, color: '#fff', fontSize: 12, background: '#0006', padding: '2px 6px', borderRadius: 4 }}>宸﹁</div>
src\components\devices\mowerAllView.jsx:69 | <div style={{ position: 'absolute', top: 4, left: 8, color: '#fff', fontSize: 12, background: '#0006', padding: '2px 6px', borderRadius: 4 }}>鍓嶈</div>
src\components\devices\mowerAllView.jsx:88 | <div style={{ position: 'absolute', top: 4, left: 8, color: '#fff', fontSize: 12, background: '#0006', padding: '2px 6px', borderRadius: 4 }}>鍚庤</div>
src\components\devices\mowerAllView.jsx:118 | <div style={{ position: 'absolute', top: 4, left: 8, color: '#fff', fontSize: 12, background: '#0006', padding: '2px 6px', borderRadius: 4 }}>鍙宠</div>
src\components\devices\RobotTaskPage.tsx:63 | const [execute, setExecute] = useState(false); // 鏄惁鎵ц浠诲姟
src\components\devices\RobotTaskPage.tsx:65 | const [arrivedPoint, setArrivedPoint] = useState(null);//瀹屾垚鐐?src\components\devices\RobotTaskPage.tsx:90 | const [runningPoolTask, setRunningPoolTask] = useState(null);//姝e湪鎵ц鐨勪换鍔?src\components\devices\RobotTaskPage.tsx:95 | const [showVideo, setShowVideo] = useState(false); // 鎺у埗瑙嗛缁勪欢鏄剧ず
src\components\devices\RobotTaskPage.tsx:102 | const [activeTab, setActiveTab] = useState('pool'); // 'task' for 浠诲姟鍒楄〃, 'pool' for 浠诲姟姹? 'history' for 鍘嗗彶浠诲姟
src\components\devices\RobotTaskPage.tsx:134 | dateRange: null, // 鏃堕棿鑼冨洿
src\components\devices\RobotTaskPage.tsx:135 | taskStatus: null, // 浠诲姟鐘舵€?src\components\devices\RobotTaskPage.tsx:136 | robot: null // 鏈哄櫒浜鸿澶?src\components\devices\RobotTaskPage.tsx:142 | setShowVideo(false); // 浠诲姟瀹屾垚鍏抽棴瑙嗛
src\components\devices\RobotTaskPage.tsx:238 | setClearNavLine(v => v + 1); // 娓呯┖鍦板浘杞ㄨ抗
src\components\devices\RobotTaskPage.tsx:267 | setClearNavLine(v => v + 1); // 娓呯┖鍦板浘杞ㄨ抗
src\components\devices\RobotTaskPage.tsx:295 | setRunningPoolTask(runningTask); // 璁剧疆褰撳墠浠诲姟
src\components\devices\RobotTaskPage.tsx:298 | setClearNavLine(v => v + 1); // 娓呯┖鍦板浘杞ㄨ抗
src\components\devices\RobotTaskPage.tsx:401 | let method = '';//0寮撳瓙 2 鍥炲瓙
src\components\devices\RobotTaskPage.tsx:462 | setClearNavLine(v => v + 1); // 娓呯┖鍦板浘杞ㄨ抗
src\components\devices\RobotTaskPage.tsx:570 | setShowVideo(true); // 杩炴帴鎴愬姛鍚庤嚜鍔ㄦ墦寮€瑙嗛
src\components\devices\RobotTaskPage.tsx:905 | width: 100, // 鍔犲涓€鐐?src\components\devices\RobotTaskPage.tsx:966 | const status = record.taskStaus; // 鍘熷鐘舵€佸€?src\components\devices\RobotTaskPage.tsx:1125 | minWidth: 0, // flex 瀛愬厓绱犳敹缂╁厹搴曪紝瓒呴暱鏃跺厑璁稿帇缂╂崲琛?src\components\devices\RobotTaskPage.tsx:1137 | <Space size={4} wrap> {/* Space寮€鍚嚜鍔ㄦ崲琛岋紝灏忓睆鎸夐挳鑷姩鎶樿 */}
src\components\devices\RobotTaskPage.tsx:1142 | <Button size="small" icon={<NodeIndexOutlined />} style={{ borderRadius: 4 }}>浼樺寲</Button>
src\components\devices\RobotTaskPage.tsx:1171 | left: 10, // 閬垮紑宸︿晶鍥句緥闈㈡澘锛岄槻姝㈤噸鍙?src\components\devices\RobotTaskPage.tsx:1179 | maxWidth: 360, // 闄愬埗鏈€澶у搴︼紝涓嶄細鏃犻檺鎷夐暱
src\components\devices\WayLinePage.tsx:56 | const [persistentDroneData, setPersistentDroneData] = useState(null); // 鎸佷箙鍖栨棤浜烘満鏁版嵁
src\components\devices\WayLinePage.tsx:57 | const [persistentHostData, setPersistentHostData] = useState(null); // 鎸佷箙鍖栨満鍦烘暟鎹?src\components\devices\WayLinePage.tsx:307 | const [waylineList, setWaylineList] = useState([]); // 鑸嚎鍒楄〃
src\components\devices\WayLinePage.tsx:553 | setWaylineDrone(planedevices[0]); // 鑸嚎鍒楄〃榛樿閫変腑绗竴涓?src\components\devices\WayLinePage.tsx:678 | sn: waylineDrone.gateway_sn, // 鉁?浣跨敤鑸嚎鍒楄〃鏃犱汉鏈?src\components\devices\XboxController.tsx:48 | onGamepadUpdate(state); // 鉁?鍙湁杩欓噷鎵嶅彂
src\components\devices\XboxController.tsx:75 | }, []); // 鉁?绌轰緷璧?src\components\devices\XboxController.tsx:80 | navigator.getGamepads(); // 馃敟 寮哄埗瑙﹀彂涓€娆?src\components\devices\XboxController.tsx:82 | }, [/* 椤甸潰鍒囨崲渚濊禆 */]);
src\components\devices\XboxController.tsx:138 | '鏈繛鎺ヨ澶?
src\components\devices\XboxController.tsx:140 | '鍏朵粬 Web 绔凡杩炴帴'
src\components\devices\XboxController.tsx:142 | '璇锋眰鎺у埗涓?..'
src\components\devices\XboxController.tsx:144 | '鎺у埗涓?
src\components\devices\XboxController.tsx:146 | '鐐瑰嚮鑾峰彇鎺у埗鏉冮檺'
src\components\Draggable.tsx:26 | handle=".drag-header" // 浠呮爣棰樻爮鍙嫋鎷斤紝鍐呭鍖轰笉瑙﹀彂鎷栨嫿
src\components\Draggable.tsx:32 | 'border-[8px] border-slate-200 top-[8px] right-[8px] w-[800px] h-[580px] ' // 鏁翠綋8px澶栬竟妗?src\components\LanguageSwitcher.tsx:16 | 涓枃
src\components\LanguageSwitcher.tsx:42 | {currentLng === 'zh' ? '涓枃' : 'EN'}
src\components\Map.jsx:39 | const planLineRef = useRef(null); // points 瑙勫垝鑸嚎
src\components\Map.jsx:40 | const navLineRef = useRef(null); // 瀹屾垚鐐瑰疄鏃惰建杩?src\components\Map.jsx:41 | const markedPointsRef = useRef([]); // 鏍囪鐐瑰疄浣?src\components\Map.jsx:50 | const followCarEntityRef = useRef(null); // 璺熼殢灏忚溅鐨勫疄渚?src\components\Map.jsx:64 | const realtimeCartesianRef = useRef([]); // 鐩存帴瀛?Cartesian3锛堟€ц兘鏈€楂橈級
src\components\Map.jsx:199 | viewer.scene.requestRender(); // 寮哄埗鍒锋柊锛?src\components\Map.jsx:649 | pitch: window.Cesium.Math.toRadians(-90), // 鍨傜洿淇
src\components\Map.jsx:770 | viewer.scene.requestRenderMode = true; // 馃憟 鍔犺繖涓紙鍙湪闇€瑕佹椂娓叉煋锛?src\components\Map.jsx:1182 | device?.type === "plane" ? planeImg : // 椋炴満
src\components\Map.jsx:1183 | device?.type === "drone" ? planeImg : // 鏃犱汉鏈?src\components\Map.jsx:1184 | device?.type === "mower" ? carImg : // 鍓茶崏
src\components\Map.jsx:1185 | device?.type === "robot" ? droneInspectImg : // 宸℃
src\components\Map.jsx:1186 | carImg; // 榛樿杞?src\components\recharts.jsx:209 | { month: '1鏈?, uv: 400, pv: 240, amt: 240 },
src\components\recharts.jsx:210 | { month: '2鏈?, uv: 300, pv: 456, amt: 300 },
src\components\recharts.jsx:211 | { month: '3鏈?, uv: 500, pv: 139, amt: 200 },
src\components\recharts.jsx:212 | { month: '4鏈?, uv: 278, pv: 390, amt: 278 },
src\components\recharts.jsx:213 | { month: '5鏈?, uv: 189, pv: 480, amt: 189 },
src\components\recharts.jsx:233 | name: '璁块棶閲?,
src\components\recharts.jsx:239 | name: '娴忚閲?,
src\components\recharts.jsx:245 | name: '鎴愪氦閲?,
src\components\recharts.jsx:260 | name: '璁块棶閲?,
src\components\recharts.jsx:265 | name: '娴忚閲?,
src\components\SystemSetting\AlarmSettingsManagement.tsx:28 | getErrorListAllApi, // 閿欒缂栫爜涓嬫媺鏁版嵁婧?src\components\SystemSetting\AlarmSettingsManagement.tsx:29 | getWorkOrderModelListApi // 宸ュ崟妯″瀷涓嬫媺鏁版嵁婧?src\components\SystemSetting\AlarmSettingsManagement.tsx:69 | utils.message.error('鑾峰彇鍛婅妯″瀷鍒楄〃澶辫触');
src\components\SystemSetting\AlarmSettingsManagement.tsx:137 | title: '纭鍒犻櫎',
src\components\SystemSetting\AlarmSettingsManagement.tsx:138 | content: '鎮ㄧ‘瀹氳鍒犻櫎杩欐潯鍛婅妯″瀷鍚楋紵',
src\components\SystemSetting\AlarmSettingsManagement.tsx:158 | message.warning('璇峰厛鍕鹃€夎鍒犻櫎鐨勬暟鎹?);
src\components\SystemSetting\AlarmSettingsManagement.tsx:162 | title: '鎵归噺鍒犻櫎纭',
src\components\SystemSetting\AlarmSettingsManagement.tsx:163 | content: `鎮ㄧ‘瀹氳鍒犻櫎閫変腑鐨?${selectedRowKeys.length} 鏉″憡璀︽ā鍨嬪悧锛熷垹闄ゅ悗涓嶅彲鎭㈠锛乣,
src\components\SystemSetting\AlarmSettingsManagement.tsx:171 | message.success('鎵归噺鍒犻櫎鎴愬姛');
src\components\SystemSetting\AlarmSettingsManagement.tsx:175 | message.error('鎵归噺鍒犻櫎澶辫触');
src\components\SystemSetting\AlarmSettingsManagement.tsx:197 | message.success(editingItem ? '鏇存柊鎴愬姛' : t('common.addSuccess'));
src\components\SystemSetting\AlarmSettingsManagement.tsx:209 | { title: '閿欒缂栫爜', dataIndex: 'errorCode', key: 'errorCode' },
src\components\SystemSetting\AlarmSettingsManagement.tsx:211 | title: '閿欒鏉ユ簮',
src\components\SystemSetting\AlarmSettingsManagement.tsx:217 | title: '鍏宠仈宸ュ崟妯″瀷',
src\components\SystemSetting\AlarmSettingsManagement.tsx:226 | title: '鑷姩鐢熸垚宸ュ崟',
src\components\SystemSetting\AlarmSettingsManagement.tsx:229 | render: (val: boolean) => val ? '鏄? : '鍚?
src\components\SystemSetting\AlarmSettingsManagement.tsx:253 | <Button type="primary" icon={<PlusOutlined />} onClick={handleAdd}>鏂板鍛婅妯″瀷</Button>
src\components\SystemSetting\AlarmSettingsManagement.tsx:261 | 鎵归噺鍒犻櫎{selectedRowKeys.length ? `(${selectedRowKeys.length})` : ''}
src\components\SystemSetting\AlarmSettingsManagement.tsx:275 | title={editingItem ? '缂栬緫鍛婅妯″瀷' : '鏂板鍛婅妯″瀷'}
src\components\SystemSetting\AlarmSettingsManagement.tsx:284 | label="閿欒缂栫爜"
src\components\SystemSetting\AlarmSettingsManagement.tsx:286 | rules={[{ required: true, message: '璇烽€夋嫨閿欒缂栫爜' }]}
src\components\SystemSetting\AlarmSettingsManagement.tsx:288 | <Select placeholder="璇烽€夋嫨閿欒缂栫爜" options={errorCodeOptions} allowClear />
src\components\SystemSetting\AlarmSettingsManagement.tsx:293 | label="鍏宠仈宸ュ崟妯″瀷"
src\components\SystemSetting\AlarmSettingsManagement.tsx:295 | rules={[{ required: true, message: '璇烽€夋嫨宸ュ崟妯″瀷' }]}
src\components\SystemSetting\AlarmSettingsManagement.tsx:297 | <Select placeholder="璇烽€夋嫨宸ュ崟妯″瀷" options={modelOptions} allowClear />
src\components\SystemSetting\AlarmSettingsManagement.tsx:301 | label="閿欒鏉ユ簮"
src\components\SystemSetting\AlarmSettingsManagement.tsx:303 | rules={[{ required: true, message: '璇烽€夋嫨閿欒鏉ユ簮' }]}
src\components\SystemSetting\AlarmSettingsManagement.tsx:305 | <Select placeholder="璇烽€夋嫨閿欒鏉ユ簮" options={errorSourceOptions} allowClear />
src\components\SystemSetting\AlarmSettingsManagement.tsx:311 | label="鑷姩鐢熸垚宸ュ崟"
src\components\SystemSetting\AllDeviceManagement.tsx:24 | { id: 1, code: 'CAM-01', name: '鎽勫儚澶?CAM-01', type: 'CAMERA', online: 'ONLINE', status: 'NORMAL' },
src\components\SystemSetting\AllDeviceManagement.tsx:25 | { id: 2, code: 'CAM-02', name: '鎽勫儚澶?CAM-02', type: 'CAMERA', online: 'OFFLINE', status: 'FAULT' },
src\components\SystemSetting\AllDeviceManagement.tsx:26 | { id: 3, code: 'CAM-03', name: '鎽勫儚澶?CAM-03', type: 'CAMERA', online: 'ONLINE', status: 'NORMAL' },
src\components\SystemSetting\AllDeviceManagement.tsx:27 | { id: 4, code: 'CLEAN-01', name: '娓呮礂鏈哄櫒浜?CLEAN-01', type: 'CLEANING_DEVICE', online: 'ONLINE', status: 'IDLE' },
src\components\SystemSetting\AllDeviceManagement.tsx:28 | { id: 5, code: 'CMB-A01', name: '姹囨祦绠?CMB-A01', type: 'COMBINER_BOX', online: 'ONLINE', status: 'WARNING' },
src\components\SystemSetting\AllDeviceManagement.tsx:29 | { id: 6, code: 'CMB-A02', name: '姹囨祦绠?CMB-A02', type: 'COMBINER_BOX', online: 'ONLINE', status: 'NORMAL' },
src\components\SystemSetting\AllDeviceManagement.tsx:30 | { id: 7, code: 'INV-A01', name: '閫嗗彉鍣?INV-A01', type: 'INVERTER', online: 'ONLINE', status: 'NORMAL' },
src\components\SystemSetting\AllDeviceManagement.tsx:31 | { id: 8, code: 'INV-A02', name: '閫嗗彉鍣?INV-A02', type: 'INVERTER', online: 'ONLINE', status: 'WARNING' },
src\components\SystemSetting\AllDeviceManagement.tsx:32 | { id: 9, code: 'INV-B01', name: '閫嗗彉鍣?INV-B01', type: 'INVERTER', online: 'ONLINE', status: 'NORMAL' },
src\components\SystemSetting\AllDeviceManagement.tsx:33 | { id: 10, code: 'METER-01', name: '鐢佃〃 METER-01', type: 'METER', online: 'ONLINE', status: 'NORMAL' },
src\components\SystemSetting\AllDeviceManagement.tsx:34 | { id: 11, code: 'ROBOT-01', name: '杩愮淮鏈哄櫒浜?ROBOT-01', type: 'ROBOT', online: 'ONLINE', status: 'IDLE' },
src\components\SystemSetting\AllDeviceManagement.tsx:35 | { id: 12, code: 'DRONE-01', name: '鏃犱汉鏈?DRONE-01', type: 'DRONE', online: 'OFFLINE', status: 'FAULT' },
src\components\SystemSetting\AllDeviceManagement.tsx:36 | { id: 13, code: 'WEATHER-01', name: '姘旇薄绔?WEATHER-01', type: 'WEATHER_STATION', online: 'ONLINE', status: 'NORMAL' },
src\components\SystemSetting\AllDeviceManagement.tsx:47 | { title: '璁惧缂栫爜', dataIndex: 'code', key: 'code' },
src\components\SystemSetting\AllDeviceManagement.tsx:57 | title: '杩愯', dataIndex: 'status', key: 'status',
src\components\SystemSetting\AllDeviceManagement.tsx:104 | title: '缂栬緫璁惧',
src\components\SystemSetting\AllDeviceManagement.tsx:105 | content: `缂栬緫璁惧锛?{record.name}`,
src\components\SystemSetting\AllDeviceManagement.tsx:111 | title: '纭鍒犻櫎',
src\components\SystemSetting\AllDeviceManagement.tsx:112 | content: `纭畾瑕佸垹闄よ澶?${record.name} 鍚楋紵`,
src\components\SystemSetting\AllDeviceManagement.tsx:124 | <Input placeholder="璇疯緭鍏ヨ澶囧悕绉? style={{ width: 220 }} />
src\components\SystemSetting\AllDeviceManagement.tsx:147 | showTotal: (total) => `鍏?${total} 鏉,
src\components\SystemSetting\BasicSettings.tsx:75 | message.success('璁剧疆宸蹭繚瀛?);
src\components\SystemSetting\BasicSettings.tsx:81 | title: '褰撳墠鐗堟湰',
src\components\SystemSetting\BasicSettings.tsx:83 | tag: '鏈€鏂扮増',
src\components\SystemSetting\BasicSettings.tsx:97 | title: '鍛婅閫氶亾',
src\components\SystemSetting\BasicSettings.tsx:105 | title: '鏁版嵁澶囦唤鐘舵€?,
src\components\SystemSetting\BasicSettings.tsx:113 | title: '鏈€杩戞洿鏂?,
src\components\SystemSetting\BasicSettings.tsx:123 | title: '瓒呯骇绠$悊鍛?,
src\components\SystemSetting\BasicSettings.tsx:126 | tags: ['鍏ㄩ儴鏉冮檺', '绯荤粺绠$悊'],
src\components\SystemSetting\BasicSettings.tsx:132 | title: '杩愮淮宸ョ▼甯?,
src\components\SystemSetting\BasicSettings.tsx:135 | tags: [t('router.devices'), '宸ュ崟绠$悊'],
src\components\SystemSetting\BasicSettings.tsx:141 | title: '宸℃涓荤',
src\components\SystemSetting\BasicSettings.tsx:144 | tags: ['宸℃绠$悊', '鍛婅澶勭悊'],
src\components\SystemSetting\BasicSettings.tsx:150 | title: '鏁版嵁鍒嗘瀽甯?,
src\components\SystemSetting\BasicSettings.tsx:153 | tags: ['鏁版嵁鍒嗘瀽', '鎶ヨ〃鏌ョ湅'],
src\components\SystemSetting\BasicSettings.tsx:164 | { name: '姘旇薄绔?, count: '1/1', status: t('roles.normal') },
src\components\SystemSetting\BasicSettings.tsx:168 | { name: 'API鎺ュ彛', count: t('roles.normal'), status: t('roles.normal') },
src\components\SystemSetting\BasicSettings.tsx:207 | title={<Space><SettingOutlined style={{ color: '#1677ff' }} /><b>鍩虹閰嶇疆</b></Space>}
src\components\SystemSetting\BasicSettings.tsx:220 | <Form.Item label="榛樿鐢电珯" name="defaultSite" style={{ marginBottom: 12 }}>
src\components\SystemSetting\BasicSettings.tsx:242 | <Form.Item label="棣栭〉榛樿椤甸潰" name="defaultPage" style={{ marginBottom: 12 }}>
src\components\SystemSetting\BasicSettings.tsx:249 | <Form.Item label="鏁版嵁鍒锋柊棰戠巼" name="refreshRate" style={{ marginBottom: 12 }}>
src\components\SystemSetting\BasicSettings.tsx:251 | <Select.Option value="5min">5 鍒嗛挓</Select.Option>
src\components\SystemSetting\BasicSettings.tsx:256 | <Form.Item label="鍦板浘鏈嶅姟" name="mapService" style={{ marginBottom: 12 }}>
src\components\SystemSetting\BasicSettings.tsx:258 | <Select.Option value="gaode">楂樺痉鍦板浘</Select.Option>
src\components\SystemSetting\BasicSettings.tsx:265 | <span style={{ fontSize: fontSmall }}>宸ュ崟鑷姩缂栧彿</span>
src\components\SystemSetting\BasicSettings.tsx:269 | <span style={{ fontSize: fontSmall }}>AI寤鸿鑷姩鐢熸垚</span>
src\components\SystemSetting\BasicSettings.tsx:273 | <span style={{ fontSize: fontSmall }}>绉诲姩绔悓姝?/span>
src\components\SystemSetting\BasicSettings.tsx:280 | <Button type="primary" size="small" onClick={handleSave} style={{ width: 100, borderRadius: 6 }}>淇濆瓨璁剧疆</Button>
src\components\SystemSetting\BasicSettings.tsx:281 | <Button size="small" style={{ marginLeft: 8, borderRadius: 6 }}>鎭㈠榛樿</Button>
src\components\SystemSetting\BasicSettings.tsx:288 | title={<Space><BellOutlined style={{ color: '#1677ff' }} /><b>閫氱煡涓庡憡璀︾瓥鐣?/b></Space>}
src\components\SystemSetting\BasicSettings.tsx:295 | { label: '鐭俊', icon: <Smartphone size={16} />, color: '#52c41a', status: '宸插惎鐢? },
src\components\SystemSetting\BasicSettings.tsx:296 | { label: '閭欢', icon: <Mail size={16} />, color: '#1677ff', status: '宸插惎鐢? },
src\components\SystemSetting\BasicSettings.tsx:297 | { label: 'Telegram', icon: <Send size={16} />, color: '#13c2c2', status: '宸插惎鐢? },
src\components\SystemSetting\BasicSettings.tsx:298 | { label: '绯荤粺閫氱煡', icon: <BellOutlined style={{ fontSize: 16 }} />, color: '#fa8c16', status: '宸插惎鐢? },
src\components\SystemSetting\BasicSettings.tsx:315 | <Col xs={24} sm={12} md={8}><Space size={8}><span style={{ fontSize: fontSmall }}>涓ラ噸鍛婅绔嬪嵆閫氱煡</span><Switch size="small" defaultChecked /></Space></Col>
src\components\SystemSetting\BasicSettings.tsx:316 | <Col xs={24} sm={12} md={8}><Space size={8}><span style={{ fontSize: fontSmall }}>鍙戠數涓嬮檷瓒呰繃 15%</span><Switch size="small" defaultChecked /></Space></Col>
src\components\SystemSetting\BasicSettings.tsx:317 | <Col xs={24} sm={12} md={8}><Space size={8}><span style={{ fontSize: fontSmall }}>閫氫俊涓柇閫氱煡</span><Switch size="small" defaultChecked /></Space></Col>
src\components\SystemSetting\BasicSettings.tsx:318 | <Col xs={24} sm={12} md={8}><Space size={8}><span style={{ fontSize: fontSmall }}>姣忔棩姹囨€绘帹閫?/span><Switch size="small" defaultChecked /></Space></Col>
src\components\SystemSetting\BasicSettings.tsx:321 | <span style={{ fontSize: fontSmall }}>澶滈棿鍏嶆墦鎵?/span>
src\components\SystemSetting\BasicSettings.tsx:331 | title={<Space><Users size={16} style={{ color: '#1677ff' }} /><b>鐢ㄦ埛涓庢潈闄愰瑙?/b></Space>}
src\components\SystemSetting\BasicSettings.tsx:343 | pagination={{ size: 'small', total: 4, pageSize: 4, showTotal: (total) => `鍏?${total} 鏉 }}
src\components\SystemSetting\BasicSettings.tsx:345 | { title: '鐢ㄦ埛鍚?, dataIndex: 'name', key: 'name', fixed: 'left', width: 80 },
src\components\SystemSetting\BasicSettings.tsx:353 | '瓒呯骇绠$悊鍛?: { color: '#1677ff', bg: '#e6f4ff' },
src\components\SystemSetting\BasicSettings.tsx:354 | '杩愮淮宸ョ▼甯?: { color: '#52c41a', bg: '#f6ffed' },
src\components\SystemSetting\BasicSettings.tsx:355 | '宸℃涓荤': { color: '#fa8c16', bg: '#fff7e6' },
src\components\SystemSetting\BasicSettings.tsx:356 | '鏁版嵁鍒嗘瀽甯?: { color: '#722ed1', bg: '#f9f0ff' },
src\components\SystemSetting\BasicSettings.tsx:383 | 鏌ョ湅
src\components\SystemSetting\BasicSettings.tsx:388 | { name: '寮犺繍缁?, role: '瓒呯骇绠$悊鍛?, phone: '138****0001', email: 'zhangyw@pvsmart.com', status: t('devices.online') },
src\components\SystemSetting\BasicSettings.tsx:389 | { name: '鏉庡伐绋嬪笀', role: '杩愮淮宸ョ▼甯?, phone: '139****0002', email: 'li.gongcheng@pvsmart.com', status: t('devices.online') },
src\components\SystemSetting\BasicSettings.tsx:390 | { name: '鐜嬬彮闀?, role: '宸℃涓荤', phone: '137****0003', email: 'wang.banzhang@pvsmart.com', status: t('devices.online') },
src\components\SystemSetting\BasicSettings.tsx:391 | { name: '璧靛垎鏋愬笀', role: '鏁版嵁鍒嗘瀽甯?, phone: '136****0004', email: 'zhao.fx@pvsmart.com', status: t('devices.online') },
src\components\SystemSetting\BasicSettings.tsx:401 | title={<Space><Users size={16} style={{ color: '#1677ff' }} /><b>瑙掕壊鏉冮檺姒傝</b></Space>}
src\components\SystemSetting\BasicSettings.tsx:416 | 鐢ㄦ埛 {role.users} | 鏉冮檺 {role.perms}
src\components\SystemSetting\BasicSettings.tsx:431 | title={<Space><ApiOutlined style={{ color: '#1677ff' }} /><b>璁惧鎺ュ叆鐘舵€?/b></Space>}
src\components\SystemSetting\BasicSettings.tsx:432 | extra={<Button type="link" size="small" style={{ fontSize: 11, padding: 0 }}>璇︽儏 <RightOutlined style={{ fontSize: 9 }} /></Button>}
src\components\SystemSetting\BasicSettings.tsx:471 | { x: 160, y: 80, icon: <Wind size={10} />, label: '姘旇薄绔? },
src\components\SystemSetting\BasicSettings.tsx:474 | { x: 40, y: 80, icon: <Zap size={10} />, label: '鎺ュ彛' },
src\components\SystemSetting\BasicSettings.tsx:498 | { label: '鏁版嵁淇濈暀', value: '3 骞?, icon: <DatabaseOutlined style={{ color: '#1677ff' }} /> },
src\components\SystemSetting\BasicSettings.tsx:499 | { label: '鐧诲綍瀹¤', value: '宸插紑鍚?, icon: <CheckCircleOutlined style={{ color: '#52c41a' }} />, color: '#52c41a' },
src\components\SystemSetting\BasicSettings.tsx:500 | { label: '鑷姩澶囦唤', value: '02:00', icon: <RefreshCw size={12} color="#1677ff" /> },
src\components\SystemSetting\BasicSettings.tsx:501 | { label: 'API 瀵嗛挜', value: t('roles.normal'), icon: <Key size={12} color="#52c41a" />, color: '#52c41a' },
src\components\SystemSetting\BasicSettings.tsx:502 | { label: '鏈€杩戝浠?, value: '2025-05-24 02:00', icon: <CalendarOutlined style={{ color: '#1677ff' }} /> },
src\components\SystemSetting\BasicSettings.tsx:503 | { label: 'SSL 璇佷功', value: '鏈夋晥鏈熻嚦 2026-12-31', icon: <SafetyCertificateOutlined style={{ color: '#fa8c16' }} /> },
src\components\SystemSetting\BasicSettings.tsx:504 | { label: '鍙屽洜绱犺璇?, value: '宸插紑鍚?, icon: <Lock size={12} color="#52c41a" />, color: '#52c41a' },
src\components\SystemSetting\BasicSettings.tsx:522 | extra={<Button type="link" size="small" danger style={{ fontSize: 10, padding: 0 }}>绠$悊鏉冮檺</Button>}
src\components\SystemSetting\BasicSettings.tsx:529 | { label: '娓呯悊缂撳瓨', icon: <DeleteOutlined />, color: '#1677ff' },
src\components\SystemSetting\BasicSettings.tsx:530 | { label: '閲嶅惎鏈嶅姟', icon: <RefreshCw size={16} />, color: '#1677ff' },
src\components\SystemSetting\BasicSettings.tsx:531 | { label: '澶囦唤涓嬭浇', icon: <DownloadOutlined />, color: '#1677ff' },
src\components\SystemSetting\BasicSettings.tsx:532 | { label: '鏃ュ織瀵煎嚭', icon: <FileTextOutlined />, color: '#1677ff' },
src\components\SystemSetting\CameraManagement.tsx:35 | name: '涓滈棬鍏ュ彛鎽勫儚澶?,
src\components\SystemSetting\CameraManagement.tsx:39 | location: '鍥尯涓滈棬',
src\components\SystemSetting\CameraManagement.tsx:40 | type: '楂樻竻鐞冩満',
src\components\SystemSetting\CameraManagement.tsx:41 | manufacturer: '娴峰悍濞佽',
src\components\SystemSetting\CameraManagement.tsx:49 | name: '瑗块棬鍏ュ彛鎽勫儚澶?,
src\components\SystemSetting\CameraManagement.tsx:53 | location: '鍥尯瑗块棬',
src\components\SystemSetting\CameraManagement.tsx:54 | type: '楂樻竻鏋満',
src\components\SystemSetting\CameraManagement.tsx:55 | manufacturer: '澶у崕',
src\components\SystemSetting\CameraManagement.tsx:63 | name: '鍋滆溅鍦烘憚鍍忓ご',
src\components\SystemSetting\CameraManagement.tsx:67 | location: '鍦颁笅鍋滆溅鍦築1',
src\components\SystemSetting\CameraManagement.tsx:68 | type: '楂樻竻鐞冩満',
src\components\SystemSetting\CameraManagement.tsx:69 | manufacturer: '娴峰悍濞佽',
src\components\SystemSetting\CameraManagement.tsx:77 | name: '鍔炲叕妤煎ぇ鍫傛憚鍍忓ご',
src\components\SystemSetting\CameraManagement.tsx:81 | location: '鍔炲叕妤?灞傚ぇ鍫?,
src\components\SystemSetting\CameraManagement.tsx:82 | type: '鍗婄悆鎽勫儚鏈?,
src\components\SystemSetting\CameraManagement.tsx:83 | manufacturer: '瀹囪',
src\components\SystemSetting\CameraManagement.tsx:91 | name: '浠撳簱鐩戞帶鎽勫儚澶?,
src\components\SystemSetting\CameraManagement.tsx:95 | location: '鐗╂枡浠撳簱',
src\components\SystemSetting\CameraManagement.tsx:96 | type: '楂樻竻鏋満',
src\components\SystemSetting\CameraManagement.tsx:97 | manufacturer: '娴峰悍濞佽',
src\components\SystemSetting\CameraManagement.tsx:115 | { title: '璁惧缂栫爜', dataIndex: 'code', key: 'code', width: 120 },
src\components\SystemSetting\CameraManagement.tsx:118 | { title: '鎽勫儚澶寸被鍨?, dataIndex: 'type', key: 'type', width: 120 },
src\components\SystemSetting\CameraManagement.tsx:119 | { title: '鍝佺墝', dataIndex: 'manufacturer', key: 'manufacturer', width: 120 },
src\components\SystemSetting\CameraManagement.tsx:120 | { title: '鍒嗚鲸鐜?, dataIndex: 'resolution', key: 'resolution', width: 100 },
src\components\SystemSetting\CameraManagement.tsx:131 | title: '浜戝彴', dataIndex: 'ptz', key: 'ptz', width: 80,
src\components\SystemSetting\CameraManagement.tsx:132 | render: (ptz) => ptz ? <Tag color="blue">鏀寔</Tag> : <Tag color="default">涓嶆敮鎸?/Tag>
src\components\SystemSetting\CameraManagement.tsx:135 | title: '澶滆', dataIndex: 'nightVision', key: 'nightVision', width: 80,
src\components\SystemSetting\CameraManagement.tsx:136 | render: (nv) => nv ? <Tag color="green">鏀寔</Tag> : <Tag color="default">涓嶆敮鎸?/Tag>
src\components\SystemSetting\CameraManagement.tsx:164 | <Button type="link" icon={<VideoCameraOutlined />} onClick={() => handleView(record)}>棰勮</Button>
src\components\SystemSetting\CameraManagement.tsx:205 | title: `${record.name} - 瑙嗛棰勮`,
src\components\SystemSetting\CameraManagement.tsx:220 | <span>瑙嗛棰勮鍗犱綅 - {record.name}</span>
src\components\SystemSetting\CameraManagement.tsx:236 | title: '纭鍒犻櫎',
src\components\SystemSetting\CameraManagement.tsx:237 | content: `纭畾瑕佸垹闄ゆ憚鍍忓ご ${record.name} 鍚楋紵`,
src\components\SystemSetting\CameraManagement.tsx:264 | <div style={{ color: '#86909C', fontSize: 12 }}>鎽勫儚澶存€绘暟</div>
src\components\SystemSetting\CameraManagement.tsx:312 | <div style={{ color: '#86909C', fontSize: 12 }}>绂荤嚎/鏁呴殰</div>
src\components\SystemSetting\CameraManagement.tsx:338 | <Input placeholder="璇疯緭鍏ュ悕绉?缂栫爜/IP" style={{ width: 240 }} prefix={<SearchOutlined />} />
src\components\SystemSetting\CameraManagement.tsx:341 | <Select placeholder="鐘舵€佺瓫閫? style={{ width: 140 }} allowClear>
src\components\SystemSetting\CameraManagement.tsx:354 | <Button type="primary" icon={<PlusOutlined />} onClick={handleAdd}>鏂板鎽勫儚澶?/Button>
src\components\SystemSetting\CameraManagement.tsx:369 | showTotal: (total) => `鍏?${total} 鏉,
src\components\SystemSetting\CameraManagement.tsx:375 | title={currentCamera ? '缂栬緫鎽勫儚澶? : '鏂板鎽勫儚澶?}
src\components\SystemSetting\CameraManagement.tsx:387 | <Form.Item label="璁惧缂栫爜" name="code" rules={[{ required: true, message: '璇疯緭鍏ヨ澶囩紪鐮? }]}>
src\components\SystemSetting\CameraManagement.tsx:388 | <Input placeholder="璇疯緭鍏ヨ澶囩紪鐮? />
src\components\SystemSetting\CameraManagement.tsx:392 | <Form.Item label={t('devices.deviceName')} name="name" rules={[{ required: true, message: '璇疯緭鍏ヨ澶囧悕绉? }]}>
src\components\SystemSetting\CameraManagement.tsx:393 | <Input placeholder="璇疯緭鍏ヨ澶囧悕绉? />
src\components\SystemSetting\CameraManagement.tsx:397 | <Form.Item label={t('systemSetting.ipAddress')} name="ip" rules={[{ required: true, message: '璇疯緭鍏P鍦板潃' }]}>
src\components\SystemSetting\CameraManagement.tsx:398 | <Input placeholder="渚嬪: 192.168.1.100" />
src\components\SystemSetting\CameraManagement.tsx:402 | <Form.Item label="鎽勫儚澶寸被鍨? name="type" rules={[{ required: true }]}>
src\components\SystemSetting\CameraManagement.tsx:403 | <Select placeholder="璇烽€夋嫨绫诲瀷">
src\components\SystemSetting\CameraManagement.tsx:404 | <Select.Option value="楂樻竻鐞冩満">楂樻竻鐞冩満</Select.Option>
src\components\SystemSetting\CameraManagement.tsx:405 | <Select.Option value="楂樻竻鏋満">楂樻竻鏋満</Select.Option>
src\components\SystemSetting\CameraManagement.tsx:406 | <Select.Option value="鍗婄悆鎽勫儚鏈?>鍗婄悆鎽勫儚鏈?/Select.Option>
src\components\SystemSetting\CameraManagement.tsx:407 | <Select.Option value="鍏ㄦ櫙鎽勫儚鏈?>鍏ㄦ櫙鎽勫儚鏈?/Select.Option>
src\components\SystemSetting\CameraManagement.tsx:412 | <Form.Item label="鍝佺墝" name="manufacturer">
src\components\SystemSetting\CameraManagement.tsx:413 | <Select placeholder="璇烽€夋嫨鍝佺墝">
src\components\SystemSetting\CameraManagement.tsx:414 | <Select.Option value="娴峰悍濞佽">娴峰悍濞佽</Select.Option>
src\components\SystemSetting\CameraManagement.tsx:415 | <Select.Option value="澶у崕">澶у崕</Select.Option>
src\components\SystemSetting\CameraManagement.tsx:416 | <Select.Option value="瀹囪">瀹囪</Select.Option>
src\components\SystemSetting\CameraManagement.tsx:422 | <Form.Item label="鍒嗚鲸鐜? name="resolution">
src\components\SystemSetting\CameraManagement.tsx:423 | <Select placeholder="璇烽€夋嫨鍒嗚鲸鐜?>
src\components\SystemSetting\CameraManagement.tsx:432 | <Form.Item label="瀹夎浣嶇疆" name="location">
src\components\SystemSetting\CameraManagement.tsx:433 | <Input placeholder="璇疯緭鍏ュ畨瑁呬綅缃? prefix={<EnvironmentOutlined />} />
src\components\SystemSetting\CameraManagement.tsx:437 | <Form.Item label="浜戝彴鎺у埗" name="ptz" valuePropName="checked">
src\components\SystemSetting\CameraManagement.tsx:442 | <Form.Item label="澶滆鍔熻兘" name="nightVision" valuePropName="checked">
src\components\SystemSetting\DeviceAccessPage.tsx:36 | const [deviceList, setDeviceList] = useState([]); // 馃憟 鏇挎崲杩欒
src\components\SystemSetting\DeviceAccessPage.tsx:76 | { id: 2, code: 'record_status', name: '褰曞儚鐘舵€?, type: 'string', rw: 'r', isAlarm: false, unit: '', required: true, defaultValue: null },
src\components\SystemSetting\DeviceAccessPage.tsx:78 | events: [{ id: 1, code: 'alarm_perimeter', name: '鍛ㄧ晫鍏ヤ镜鍛婅' }],
src\components\SystemSetting\DeviceAccessPage.tsx:84 | { id: 2, code: 'humi', name: '婀垮害', type: 'float', rw: 'r', isAlarm: true, unit: '%', required: true, defaultValue: null },
src\components\SystemSetting\DeviceAccessPage.tsx:86 | events: [{ id: 1, code: 'temp_over', name: '瓒呮俯鍛婅' }],
src\components\SystemSetting\DeviceAccessPage.tsx:92 | { id: 2, code: 'voltage', name: '鐢靛帇', type: 'float', rw: 'r', isAlarm: true, unit: 'V', required: true, defaultValue: null },
src\components\SystemSetting\DeviceAccessPage.tsx:94 | events: [{ id: 1, code: 'low_power', name: '浣庣數閲忓憡璀? }],
src\components\SystemSetting\DeviceAccessPage.tsx:162 | fetchModelPageList(); // 銆愪紭鍖栥€戝垹闄ゅ悗鍒锋柊
src\components\SystemSetting\DeviceAccessPage.tsx:164 | messageApi.error('鍒犻櫎澶辫触锛? + res.msg);
src\components\SystemSetting\DeviceAccessPage.tsx:173 | fetchProductPageList(); // 銆愪紭鍖栥€戝垹闄ゅ悗鍒锋柊
src\components\SystemSetting\DeviceAccessPage.tsx:175 | messageApi.error('鍒犻櫎澶辫触锛? + res.msg);
src\components\SystemSetting\DeviceAccessPage.tsx:226 | actionConfig = record.thingsModels[modelId].actions || {}; // 馃憟 琛屼负閰嶇疆鍥炴樉
src\components\SystemSetting\DeviceAccessPage.tsx:284 | id: editData?.id, // 缂栬緫鎵嶆湁
src\components\SystemSetting\DeviceAccessPage.tsx:285 | deviceName: values.name, // 璁惧鍚嶇О
src\components\SystemSetting\DeviceAccessPage.tsx:288 | modelId: values.modelId || 10, // 榛樿缁欎竴涓?src\components\SystemSetting\DeviceAccessPage.tsx:294 | remark: values.remark || '闃靛垪鍖虹洃鎺ц澶?,
src\components\SystemSetting\DeviceAccessPage.tsx:301 | res = await updateIotDevice(submitData); // 缂栬緫
src\components\SystemSetting\DeviceAccessPage.tsx:303 | res = await addIotDevice(submitData); // 鏂板
src\components\SystemSetting\DeviceAccessPage.tsx:307 | messageApi.success(editData ? '缂栬緫璁惧鎴愬姛' : '鏂板璁惧鎴愬姛');
src\components\SystemSetting\DeviceAccessPage.tsx:310 | messageApi.error(res.msg || '鎿嶄綔澶辫触');
src\components\SystemSetting\DeviceAccessPage.tsx:358 | messageApi.success(editData ? '浜у搧缂栬緫鎴愬姛' : '浜у搧鏂板鎴愬姛');
src\components\SystemSetting\DeviceAccessPage.tsx:446 | { title: t('devices.deviceName'), dataIndex: 'deviceName' }, // 馃憟 鏀规垚 deviceName
src\components\SystemSetting\DeviceAccessPage.tsx:448 | { title: '浜у搧ID', dataIndex: 'productId' },
src\components\SystemSetting\DeviceAccessPage.tsx:449 | { title: '妯″瀷ID', dataIndex: 'modelId' },
src\components\SystemSetting\DeviceAccessPage.tsx:451 | { title: '绔彛', dataIndex: 'port' },
src\components\SystemSetting\DeviceAccessPage.tsx:452 | { title: '璐﹀彿', dataIndex: 'username' },
src\components\SystemSetting\DeviceAccessPage.tsx:464 | 缂栬緫
src\components\SystemSetting\DeviceAccessPage.tsx:471 | { title: '妯″瀷鍚嶇О', dataIndex: 'name' },
src\components\SystemSetting\DeviceAccessPage.tsx:472 | { title: '杩炴帴鍗忚', dataIndex: 'connectType' },
src\components\SystemSetting\DeviceAccessPage.tsx:474 | title: '灞炴€у垪琛?, width: 300, render: (record) => {
src\components\SystemSetting\DeviceAccessPage.tsx:476 | if (list.length === 0) return <span style={{ color: '#999' }}>鏃犲睘鎬?/span>;
src\components\SystemSetting\DeviceAccessPage.tsx:481 | title: '鎸囦护鍒楄〃', width: 300, render: (record) => {
src\components\SystemSetting\DeviceAccessPage.tsx:483 | if (list.length === 0) return <span style={{ color: '#999' }}>鏃犳寚浠?/span>;
src\components\SystemSetting\DeviceAccessPage.tsx:491 | <Popconfirm title="纭畾瑕佸垹闄よ鐗╂ā鍨嬪悧锛? onConfirm={() => handleDeleteModel(r.id)} okText={t('common.ok')} cancelText={t('common.cancel')}>
src\components\SystemSetting\DeviceAccessPage.tsx:507 | <TabPane tab={<span><ProductOutlined />浜у搧绠$悊</span>} key="product" />
src\components\SystemSetting\DeviceAccessPage.tsx:508 | <TabPane tab={<span><AppstoreOutlined />鐗╂ā鍨嬬鐞?/span>} key="model" />
src\components\SystemSetting\DeviceAccessPage.tsx:512 | {activeTab === 'device' && <Card><Space className="mb-3"><Button type="primary" icon={<PlusOutlined />} onClick={() => openModal('device')}>鏂板璁惧</Button></Space>
src\components\SystemSetting\DeviceAccessPage.tsx:529 | <Form.Item name="code" label="浜у搧缂栫爜">
src\components\SystemSetting\DeviceAccessPage.tsx:530 | <Input placeholder="璇疯緭鍏ョ紪鐮? allowClear />
src\components\SystemSetting\DeviceAccessPage.tsx:532 | <Form.Item name="name" label="浜у搧鍚嶇О">
src\components\SystemSetting\DeviceAccessPage.tsx:533 | <Input placeholder="璇疯緭鍏ュ悕绉? allowClear />
src\components\SystemSetting\DeviceAccessPage.tsx:535 | <Form.Item name="manufacturer" label="鐢熶骇鍘傚">
src\components\SystemSetting\DeviceAccessPage.tsx:536 | <Input placeholder="璇疯緭鍏ュ巶瀹? allowClear />
src\components\SystemSetting\DeviceAccessPage.tsx:539 | <Form.Item name="protocolCode" label="鍗忚缂栫爜">
src\components\SystemSetting\DeviceAccessPage.tsx:540 | <Select placeholder="璇烽€夋嫨鍗忚" allowClear style={{ width: 140 }}>
src\components\SystemSetting\DeviceAccessPage.tsx:546 | <Form.Item name="transport" label="浼犺緭鏂瑰紡">
src\components\SystemSetting\DeviceAccessPage.tsx:547 | <Select placeholder="浼犺緭鏂瑰紡" allowClear style={{ width: 120 }}>
src\components\SystemSetting\DeviceAccessPage.tsx:555 | <Option value={0}>绂佺敤</Option>
src\components\SystemSetting\DeviceAccessPage.tsx:564 | 鏂板浜у搧
src\components\SystemSetting\DeviceAccessPage.tsx:572 | { title: '浜у搧缂栫爜', dataIndex: 'code', width: 120 },
src\components\SystemSetting\DeviceAccessPage.tsx:573 | { title: '浜у搧鍚嶇О', dataIndex: 'name', width: 160 },
src\components\SystemSetting\DeviceAccessPage.tsx:574 | { title: '鐢熶骇鍘傚', dataIndex: 'manufacturer', width: 130 },
src\components\SystemSetting\DeviceAccessPage.tsx:575 | { title: '鍗忚', dataIndex: 'protocolCode', width: 100 },
src\components\SystemSetting\DeviceAccessPage.tsx:576 | { title: '浼犺緭鏂瑰紡', dataIndex: 'transport', width: 100 },
src\components\SystemSetting\DeviceAccessPage.tsx:577 | { title: '涓婃姤Topic', dataIndex: 'uploadTopic', ellipsis: true },
src\components\SystemSetting\DeviceAccessPage.tsx:578 | { title: '璁㈤槄Topic', dataIndex: 'subscribeTopic', ellipsis: true },
src\components\SystemSetting\DeviceAccessPage.tsx:583 | render: (s) => <Tag color={s === 1 ? 'green' : 'red'}>{s === 1 ? t('common.enable') : '绂佺敤'}</Tag>
src\components\SystemSetting\DeviceAccessPage.tsx:589 | <Button type="text" icon={<SwapOutlined />} onClick={() => openMappingModal()}>瀛楁鏄犲皠</Button>
src\components\SystemSetting\DeviceAccessPage.tsx:591 | title="纭畾瑕佸垹闄よ浜у搧鍚楋紵"
src\components\SystemSetting\DeviceAccessPage.tsx:608 | showTotal: (total) => `鍏?${total} 鏉
src\components\SystemSetting\DeviceAccessPage.tsx:621 | <Form.Item name="name" label="妯″瀷鍚嶇О">
src\components\SystemSetting\DeviceAccessPage.tsx:624 | <Form.Item name="connectType" label="杩炴帴鍗忚">
src\components\SystemSetting\DeviceAccessPage.tsx:625 | <Select placeholder="鍗忚" allowClear style={{ width: 160 }}>
src\components\SystemSetting\DeviceAccessPage.tsx:636 | <Button type="primary" icon={<PlusOutlined />} onClick={() => openModal('model')}>鏂板鐗╂ā鍨?/Button>
src\components\SystemSetting\DeviceAccessPage.tsx:646 | title={modalType === 'device' ? '璁惧閰嶇疆' : modalType === 'product' ? '浜у搧閰嶇疆' : '鐗╂ā鍨嬮厤缃?}>
src\components\SystemSetting\DeviceAccessPage.tsx:653 | rules={[{ required: true, message: '璇疯緭鍏ヨ澶囧悕绉? }]}
src\components\SystemSetting\DeviceAccessPage.tsx:655 | <Input placeholder="璇疯緭鍏ヨ澶囧悕绉? />
src\components\SystemSetting\DeviceAccessPage.tsx:659 | label="璁惧SN"
src\components\SystemSetting\DeviceAccessPage.tsx:661 | rules={[{ required: true, message: '璇疯緭鍏ヨ澶嘢N' }]}
src\components\SystemSetting\DeviceAccessPage.tsx:663 | <Input placeholder="璇疯緭鍏ヨ澶嘢N" />
src\components\SystemSetting\DeviceAccessPage.tsx:667 | label="鍏宠仈浜у搧"
src\components\SystemSetting\DeviceAccessPage.tsx:669 | rules={[{ required: true, message: '璇烽€夋嫨鍏宠仈浜у搧' }]}
src\components\SystemSetting\DeviceAccessPage.tsx:672 | placeholder="璇烽€夋嫨鍏宠仈浜у搧"
src\components\SystemSetting\DeviceAccessPage.tsx:711 | <Form.Item label="IP 鍦板潃" name="ip">
src\components\SystemSetting\DeviceAccessPage.tsx:712 | <Input placeholder="渚嬪锛?92.168.1.65" />
src\components\SystemSetting\DeviceAccessPage.tsx:714 | <Form.Item label="绔彛" name="port">
src\components\SystemSetting\DeviceAccessPage.tsx:715 | <InputNumber className="w-full" placeholder="榛樿 80" />
src\components\SystemSetting\DeviceAccessPage.tsx:717 | <Form.Item label="鐧诲綍璐﹀彿" name="username">
src\components\SystemSetting\DeviceAccessPage.tsx:718 | <Input placeholder="璁惧鐧诲綍璐﹀彿" />
src\components\SystemSetting\DeviceAccessPage.tsx:720 | <Form.Item label="鐧诲綍瀵嗙爜" name="password">
src\components\SystemSetting\DeviceAccessPage.tsx:721 | <Input.Password placeholder="璁惧鐧诲綍瀵嗙爜" />
src\components\SystemSetting\DeviceAccessPage.tsx:728 | <Form.Item label="RTSP 鍦板潃" name="rtspUrl">
src\components\SystemSetting\DeviceAccessPage.tsx:736 | <Form.Item label="MQTT 鏈嶅姟鍦板潃" name="mqttServer">
src\components\SystemSetting\DeviceAccessPage.tsx:739 | <Form.Item label="MQTT 绔彛" name="mqttPort">
src\components\SystemSetting\DeviceAccessPage.tsx:743 | <Input placeholder="瀹㈡埛绔敮涓€鏍囪瘑" />
src\components\SystemSetting\DeviceAccessPage.tsx:745 | <Form.Item label="MQTT 鐢ㄦ埛鍚? name="mqttUsername">
src\components\SystemSetting\DeviceAccessPage.tsx:746 | <Input placeholder="MQTT 璐﹀彿锛堥€夊~锛? />
src\components\SystemSetting\DeviceAccessPage.tsx:748 | <Form.Item label="MQTT 瀵嗙爜" name="mqttPassword">
src\components\SystemSetting\DeviceAccessPage.tsx:749 | <Input.Password placeholder="MQTT 瀵嗙爜锛堥€夊~锛? />
src\components\SystemSetting\DeviceAccessPage.tsx:755 | <Divider>鍛婅闃堝€奸厤缃?/Divider>
src\components\SystemSetting\DeviceAccessPage.tsx:761 | label={`${item.name} 涓婇檺`}
src\components\SystemSetting\DeviceAccessPage.tsx:765 | <InputNumber className="w-full" placeholder="涓婇檺鍊? />
src\components\SystemSetting\DeviceAccessPage.tsx:768 | label={`${item.name} 涓嬮檺`}
src\components\SystemSetting\DeviceAccessPage.tsx:772 | <InputNumber className="w-full" placeholder="涓嬮檺鍊? />
src\components\SystemSetting\DeviceAccessPage.tsx:777 | <Empty description="褰撳墠鐗╂ā鍨嬫湭璁剧疆鍛婅灞炴€э紝鏃犳硶閰嶇疆闃堝€? />
src\components\SystemSetting\DeviceAccessPage.tsx:785 | <Form.Item label="浜у搧缂栧彿" name="code" rules={[{ required: true }]}>
src\components\SystemSetting\DeviceAccessPage.tsx:788 | <Form.Item label="浜у搧鍚嶇О" name="name" rules={[{ required: true }]}>
src\components\SystemSetting\DeviceAccessPage.tsx:789 | <Input placeholder="鏅鸿兘缃戝叧" />
src\components\SystemSetting\DeviceAccessPage.tsx:791 | <Form.Item label="鍘傚晢" name="manufacturer">
src\components\SystemSetting\DeviceAccessPage.tsx:792 | <Input placeholder="杩堟绉戞妧" />
src\components\SystemSetting\DeviceAccessPage.tsx:798 | <Form.Item label="浼犺緭绫诲瀷" name="transport">
src\components\SystemSetting\DeviceAccessPage.tsx:799 | <Select placeholder="浼犺緭鏂瑰紡">
src\components\SystemSetting\DeviceAccessPage.tsx:808 | <Option value={0}>绂佺敤</Option>
src\components\SystemSetting\DeviceAccessPage.tsx:813 | <Divider>缁戝畾鐗╂ā鍨?/Divider>
src\components\SystemSetting\DeviceAccessPage.tsx:814 | <Form.Item label="缁戝畾鐗╂ā鍨? name="modelId">
src\components\SystemSetting\DeviceAccessPage.tsx:816 | placeholder="璇烽€夋嫨瑕佺粦瀹氱殑鐗╂ā鍨?
src\components\SystemSetting\DeviceAccessPage.tsx:869 | <Divider>鍗忚鑷姩閰嶇疆椤?/Divider>
src\components\SystemSetting\DeviceAccessPage.tsx:871 | <Form.Item label="涓婃姤Topic" name="uploadTopic">
src\components\SystemSetting\DeviceAccessPage.tsx:874 | <Form.Item label="璁㈤槄Topic" name="subscribeTopic">
src\components\SystemSetting\DeviceAccessPage.tsx:882 | <Divider>鐗╂ā鍨嬪睘鎬ч厤缃?/Divider>
src\components\SystemSetting\DeviceAccessPage.tsx:890 | <Form.Item label="鏈€灏忓€? name={['limitConfig', item.propertyKey, 'min']} style={{ flex: 1 }}>
src\components\SystemSetting\DeviceAccessPage.tsx:891 | <InputNumber style={{ width: '100%' }} placeholder="鏈€灏忓€? />
src\components\SystemSetting\DeviceAccessPage.tsx:893 | <Form.Item label="鏈€澶у€? name={['limitConfig', item.propertyKey, 'max']} style={{ flex: 1 }}>
src\components\SystemSetting\DeviceAccessPage.tsx:894 | <InputNumber style={{ width: '100%' }} placeholder="鏈€澶у€? />
src\components\SystemSetting\DeviceAccessPage.tsx:901 | 璇烽€夋嫨鐗╂ā鍨嬩互鏄剧ず灞炴€?src\components\SystemSetting\DeviceAccessPage.tsx:907 | <Divider>鐗╂ā鍨嬭涓猴紙鎸囦护锛夐厤缃?/Divider>
src\components\SystemSetting\DeviceAccessPage.tsx:918 | label={`${paramKey} 榛樿鍊糮}
src\components\SystemSetting\DeviceAccessPage.tsx:922 | <Input style={{ width: '100%' }} placeholder="榛樿鍊? />
src\components\SystemSetting\DeviceAccessPage.tsx:945 | 璇ョ墿妯″瀷鏆傛棤鎸囦护
src\components\SystemSetting\DeviceAccessPage.tsx:957 | <Form.Item label="妯″瀷鍚嶇О" name="name" rules={[{ required: true }]}><Input /></Form.Item>
src\components\SystemSetting\DeviceAccessPage.tsx:960 | <Form.Item label="杩炴帴鍗忚" name="connectType" initialValue="MQTT">
src\components\SystemSetting\DeviceAccessPage.tsx:970 | <Divider>灞炴€?/Divider>
src\components\SystemSetting\DeviceAccessPage.tsx:973 | { title: '缂栫爜', dataIndex: 'code' },
src\components\SystemSetting\DeviceAccessPage.tsx:976 | { title: '鍗曚綅', dataIndex: 'unit' },
src\components\SystemSetting\DeviceAccessPage.tsx:977 | { title: '榛樿鍊?, dataIndex: 'defaultValue' },
src\components\SystemSetting\DeviceAccessPage.tsx:989 | <Divider>鎸囦护</Divider>
src\components\SystemSetting\DeviceAccessPage.tsx:996 | { title: '鎸囦护缂栫爜', dataIndex: 'actionId' },
src\components\SystemSetting\DeviceAccessPage.tsx:997 | { title: '鎸囦护鍚嶇О', dataIndex: 'actionName' },
src\components\SystemSetting\DeviceAccessPage.tsx:998 | { title: '鍙傛暟', render: r => Object.keys(r.params || []).join(',') || '鏃? },
src\components\SystemSetting\DeviceAccessPage.tsx:1034 | <Modal open={itemModal} width={580} zIndex={1001} destroyOnClose onCancel={() => setItemModal(false)} onOk={saveItem} title="閰嶇疆灞炴€?>
src\components\SystemSetting\DeviceAccessPage.tsx:1037 | <Form.Item label="灞炴€х紪鐮? name="code" rules={[{ required: true }]}><Input placeholder="濡?temp" /></Form.Item>
src\components\SystemSetting\DeviceAccessPage.tsx:1038 | <Form.Item label="灞炴€у悕绉? name="name" rules={[{ required: true }]}><Input placeholder="濡?娓╁害" /></Form.Item>
src\components\SystemSetting\DeviceAccessPage.tsx:1046 | <Form.Item label="鍗曚綅" name="unit"><Input placeholder="鈩冦€?銆乂" /></Form.Item>
src\components\SystemSetting\DeviceAccessPage.tsx:1047 | <Form.Item label="榛樿鍊? name="defaultValue"><Input /></Form.Item>
src\components\SystemSetting\DeviceAccessPage.tsx:1048 | <Form.Item label="鍛婅鍙傛暟" name="isAlarm" valuePropName="checked"><Switch /></Form.Item>
src\components\SystemSetting\DeviceAccessPage.tsx:1053 | <Modal title="閰嶇疆鎸囦护" open={actionModal} zIndex={1002} onCancel={() => setActionModal(false)}
src\components\SystemSetting\DeviceAccessPage.tsx:1069 | <Input placeholder="鎸囦护缂栫爜" value={currentAction?.actionId} onChange={e => setCurrentAction({ ...currentAction, actionId: e.target.value })} style={{ flex: 1 }} />
src\components\SystemSetting\DeviceAccessPage.tsx:1070 | <Input placeholder="鎸囦护鍚嶇О" value={currentAction?.actionName} onChange={e => setCurrentAction({ ...currentAction, actionName: e.target.value })} style={{ flex: 1 }} />
src\components\SystemSetting\DeviceAccessPage.tsx:1072 | <Divider>鎸囦护鍙傛暟</Divider>
src\components\SystemSetting\DeviceAccessPage.tsx:1074 | <Input placeholder="鍙傛暟鍚? value={paramList[0]?.paramKey || ''} onChange={e => setParamList([{ ...paramList[0], paramKey: e.target.value }])} />
src\components\SystemSetting\DeviceAccessPage.tsx:1081 | <Input placeholder="榛樿鍊? value={paramList[0]?.defaultValue || ''} onChange={e => setParamList([{ ...paramList[0], defaultValue: e.target.value }])} />
src\components\SystemSetting\DeviceAccessPage.tsx:1082 | <Input placeholder="鏋氫妇(,鍒嗛殧)" value={(paramList[0]?.enum || []).join(',')} onChange={e => setParamList([{ ...paramList[0], enum: e.target.value.split(',').map(s => s.trim()) }])} />
src\components\SystemSetting\DeviceAccessPage.tsx:1087 | <Modal open={mappingModal} width={600} zIndex={1002} destroyOnClose onCancel={() => setMappingModal(false)} onOk={saveMapping} title="瀛楁鏄犲皠">
src\components\SystemSetting\DeviceAccessPage.tsx:1090 | <Form.Item label="鏍囧噯瀛楁" name="standardCode" rules={[{ required: true }]}>
src\components\SystemSetting\DeviceAccessPage.tsx:1093 | <Form.Item label="鍘傚晢鍘熷瀛楁" name="sourceField" rules={[{ required: true }]}><Input /></Form.Item>
src\components\SystemSetting\DeviceAccessPage.tsx:1094 | <Form.Item label="杞崲瑙勫垯" name="convertRule"><Input /></Form.Item>
src\components\SystemSetting\DeviceManagement.tsx:92 | { key: 'drone', label: '鏃犱汉鏈虹鐞? },
src\components\SystemSetting\DeviceManagement.tsx:93 | { key: 'smart', label: '鏅鸿兘瑁呭' },
src\components\SystemSetting\DeviceManagement.tsx:94 | { key: 'camera', label: '鎽勫儚澶寸鐞? },
src\components\SystemSetting\DeviceManagement.tsx:95 | { key: 'serialGenerate', label: '鏈哄櫒浜虹敓鎴? },
src\components\SystemSetting\DroneManagement.tsx:91 | utils.message.error('鑾峰彇鏃犱汉鏈哄垪琛ㄥけ璐?);
src\components\SystemSetting\DroneManagement.tsx:146 | return utils.message.warning('璇峰厛鍦ㄥ垪琛ㄤ腑閫変腑闇€瑕佺粦瀹氱殑鏃犱汉鏈?);
src\components\SystemSetting\DroneManagement.tsx:213 | utils.message.success('缁戝畾鎴愬姛');
src\components\SystemSetting\DroneManagement.tsx:220 | utils.message.error(res.msg || '缁戝畾澶辫触');
src\components\SystemSetting\DroneManagement.tsx:223 | utils.message.error('鎿嶄綔寮傚父');
src\components\SystemSetting\DroneManagement.tsx:232 | return utils.message.warning('鏈€夋嫨鏈夋晥璁惧锛屾棤娉曡В缁?);
src\components\SystemSetting\DroneManagement.tsx:234 | const typeText = { 1: '浜哄憳', 2: '鍦虹珯', 3: '缁勭粐' }[type];
src\components\SystemSetting\DroneManagement.tsx:236 | title: '纭瑙g粦',
src\components\SystemSetting\DroneManagement.tsx:237 | content: `纭畾瑕佷负閫変腑鐨勬棤浜烘満娓呴櫎${typeText}缁戝畾鍚楋紵`,
src\components\SystemSetting\DroneManagement.tsx:244 | utils.message.success('瑙g粦鎴愬姛');
src\components\SystemSetting\DroneManagement.tsx:249 | utils.message.error(res.msg || '瑙g粦澶辫触');
src\components\SystemSetting\DroneManagement.tsx:252 | utils.message.error('鎿嶄綔寮傚父');
src\components\SystemSetting\DroneManagement.tsx:261 | { title: '鏈哄満SN', width: 150, dataIndex: 'gateway_sn', key: 'gsn' },
src\components\SystemSetting\DroneManagement.tsx:263 | title: '鎵€灞炵粍缁?, width: 150, key: 'orgName',
src\components\SystemSetting\DroneManagement.tsx:266 | return org ? (org.orgName || org.name) : <Text type="secondary">鏈粦瀹?/Text>;
src\components\SystemSetting\DroneManagement.tsx:270 | title: '鎵€灞炲満绔?, width: 150, key: 'siteName',
src\components\SystemSetting\DroneManagement.tsx:273 | return site ? (site.siteName || site.name) : <Text type="secondary">鏈粦瀹?/Text>;
src\components\SystemSetting\DroneManagement.tsx:280 | return user ? (user.nickName || user.userName) : <Text type="secondary">鏈粦瀹?/Text>;
src\components\SystemSetting\DroneManagement.tsx:291 | <Tooltip title="浜哄憳瑙g粦">
src\components\SystemSetting\DroneManagement.tsx:292 | <Button size="small" icon={<DisconnectOutlined />} onClick={() => handleUnbind([record.gateway_sn], 1)}>鐢ㄦ埛</Button>
src\components\SystemSetting\DroneManagement.tsx:294 | <Tooltip title="鍦虹珯瑙g粦">
src\components\SystemSetting\DroneManagement.tsx:295 | <Button size="small" icon={<DisconnectOutlined />} onClick={() => handleUnbind([record.gateway_sn], 2)}>鍦虹珯</Button>
src\components\SystemSetting\DroneManagement.tsx:297 | <Tooltip title="缁勭粐瑙g粦">
src\components\SystemSetting\DroneManagement.tsx:298 | <Button size="small" icon={<DisconnectOutlined />} onClick={() => handleUnbind([record.gateway_sn], 3)}>缁勭粐</Button>
src\components\SystemSetting\DroneManagement.tsx:324 | placeholder="鏈哄満SN"
src\components\SystemSetting\DroneManagement.tsx:341 | <Button type="primary" icon={<LinkOutlined />} onClick={openBindModal}>缁戝畾鏃犱汉鏈?/Button>
src\components\SystemSetting\DroneManagement.tsx:342 | <Button disabled={selectedDroneKeys.length === 0} onClick={() => handleUnbind(selectedDroneKeys, 1)}>鎵归噺瑙g粦(鐢ㄦ埛)</Button>
src\components\SystemSetting\DroneManagement.tsx:343 | <Button disabled={selectedDroneKeys.length === 0} onClick={() => handleUnbind(selectedDroneKeys, 2)}>鎵归噺瑙g粦(鍦虹珯)</Button>
src\components\SystemSetting\DroneManagement.tsx:344 | <Button disabled={selectedDroneKeys.length === 0} onClick={() => handleUnbind(selectedDroneKeys, 3)}>鎵归噺瑙g粦(缁?</Button>
src\components\SystemSetting\DroneManagement.tsx:359 | showTotal: t => `鍏?${t} 鏉,
src\components\SystemSetting\DroneManagement.tsx:372 | <span style={{ fontWeight: 600 }}>缁戝畾鏃犱汉鏈?/span>
src\components\SystemSetting\DroneManagement.tsx:388 | <Form.Item label={<>宸查€夋棤浜烘満锛坽selectedDroneKeys.length}鍙帮級SN</>} name="sns" rules={[{ required: true, message: '璇疯緭鍏?SN' }]}>
src\components\SystemSetting\DroneManagement.tsx:389 | <Input.TextArea placeholder="渚嬪: SN001, SN002" rows={2} disabled style={{ resize: 'none', background: '#fafafa' }} />
src\components\SystemSetting\DroneManagement.tsx:394 | <span>鎵€灞炵粍缁?/span>
src\components\SystemSetting\DroneManagement.tsx:397 | name="orgId" rules={[{ required: true, message: '璇烽€夋嫨缁勭粐' }]}
src\components\SystemSetting\DroneManagement.tsx:400 | placeholder="璇烽€夋嫨缁勭粐"
src\components\SystemSetting\DroneManagement.tsx:418 | <span>鎵€灞炲満绔?/span>
src\components\SystemSetting\DroneManagement.tsx:421 | name="siteId" rules={[{ required: !siteFieldDisabled, message: '璇烽€夋嫨鍦虹珯' }]}
src\components\SystemSetting\DroneManagement.tsx:424 | placeholder="璇峰厛閫夋嫨缁勭粐"
src\components\SystemSetting\DroneManagement.tsx:439 | <Form.Item label={t('systemSetting.leader')} name="userId" rules={[{ required: true, message: '璇烽€夋嫨璐熻矗浜? }]}>
src\components\SystemSetting\DroneManagement.tsx:441 | placeholder="璇峰厛閫夋嫨鍦虹珯鍚庨€夋嫨璐熻矗浜?
src\components\SystemSetting\FlvPlayer.tsx:45 | setError('褰撳墠娴忚鍣ㄤ笉鏀寔 FLV MSE鎾斁锛岃涓嬭浇鏂囦欢鏌ョ湅');
src\components\SystemSetting\FlvPlayer.tsx:58 | stashInitialSize: 4 * 1024 * 1024, // 4MB 閫傞厤4K
src\components\SystemSetting\FlvPlayer.tsx:59 | lazyLoad: true, // 鉁呭叧閿細澶ф枃浠剁偣鎾笉鑳絝alse锛屽惁鍒欎竴娆℃€у叏閮ㄤ笅杞界珛鍒诲叧闂璏SE
src\components\SystemSetting\FlvPlayer.tsx:81 | setError('瑙嗛缂栫爜涓嶅彈娴忚鍣∕SE鏀寔锛岃涓嬭浇鏂囦欢鏈湴鎾斁');
src\components\SystemSetting\FlvPlayer.tsx:85 | setError('濯掍綋婧愪笉鏀寔');
src\components\SystemSetting\FlvPlayer.tsx:109 | let msg = 'FLV鎾斁寮傚父锛屽缓璁笅杞芥枃浠舵湰鍦版挱鏀?;
src\components\SystemSetting\FlvPlayer.tsx:111 | msg = '缃戠粶閿欒锛岃妫€鏌ヨ棰戝湴鍧€';
src\components\SystemSetting\FlvPlayer.tsx:113 | msg = '濯掍綋瑙g爜閿欒锛岃FLV鏂囦欢鍙兘涓嶅吋瀹规祻瑙堝櫒MSE';
src\components\SystemSetting\FlvPlayer.tsx:123 | setError('鍔犺浇瓒呮椂锛屾祻瑙堝櫒MSE瑙f瀽澶辫触锛岃涓嬭浇鏂囦欢鏈湴鎾斁');
src\components\SystemSetting\FlvPlayer.tsx:133 | setError('鎾斁鍣ㄥ垵濮嬪寲澶辫触锛岃閲嶈瘯');
src\components\SystemSetting\FlvPlayer.tsx:147 | setError('瑙嗛鍔犺浇澶辫触锛岃妫€鏌ュ湴鍧€鎴栦笅杞?);
src\components\SystemSetting\FlvPlayer.tsx:189 | <Alert message="鎾斁澶辫触" description={error} type="error" showIcon style={{ marginBottom: 16 }} />
src\components\SystemSetting\FlvPlayer.tsx:191 | <Button icon={<ReloadOutlined />} onClick={handleRetry}>閲嶈瘯</Button>
src\components\SystemSetting\FlvPlayer.tsx:193 | 涓嬭浇瑙嗛
src\components\SystemSetting\FlvPlayer.tsx:209 | 鐐瑰嚮鎵嬪姩鎾斁瑙嗛
src\components\SystemSetting\FlvPlayer.tsx:225 | {isFlv(fileName) && <span>馃挕 FLV 浣跨敤 flv.js(MSE)瑙g爜锛岄儴鍒嗙壒娈婄紪鐮丗LV娴忚鍣ㄦ棤娉曟覆鏌擄紝寤鸿涓嬭浇鏈湴鎾斁</span>}
src\components\SystemSetting\FlvPlayer.tsx:226 | {!isFlv(fileName) && <span>馃挕 闈濬LV浣跨敤娴忚鍣ㄥ師鐢熸挱鏀?/span>}
src\components\SystemSetting\LogManagement.tsx:27 | { id: 1, time: '2026-08-10 13:02:11', level: 'info', source: '绯荤粺', operator: '绯荤粺', message: '鏈哄櫒浜烘櫤鎱ф湇鍔$郴缁?Alpha 涓夋湇鍔★紙鎺ュ叆/鐘舵€?鍛戒护锛夊惎鍔ㄥ畬鎴? },
src\components\SystemSetting\LogManagement.tsx:28 | { id: 2, time: '2026-08-10 12:58:40', level: 'action', source: '鍛戒护鏈嶅姟', operator: '寮犺繍缁?, message: '鍚?ROBOT-001 涓嬪彂绉诲姩鍛戒护锛坰eq=d6b5d545锛夛紝鎵ц缁撴灉锛氭垚鍔? },
src\components\SystemSetting\LogManagement.tsx:29 | { id: 3, time: '2026-08-10 12:51:22', level: 'action', source: t('router.users'), operator: '寮犺繍缁?, message: '鏂板杩愮淮宸ョ▼甯堣处鍙枫€屾潕宸ャ€嶏紝瑙掕壊锛氳繍缁村伐绋嬪笀' },
src\components\SystemSetting\LogManagement.tsx:30 | { id: 4, time: '2026-08-10 12:40:05', level: 'warning', source: t('systemSetting.deviceAccess'), operator: '绯荤粺', message: 'DRONE-001 蹇冭烦瓒呮椂锛?60s锛夛紝宸茶嚜鍔ㄧ疆涓虹绾? },
src\components\SystemSetting\LogManagement.tsx:31 | { id: 5, time: '2026-08-10 12:33:18', level: 'error', source: '鍛戒护鏈嶅姟', operator: '绯荤粺', message: 'ROBOT-002 鎵ц銆岃嚜涓诲贰妫€銆嶈秴鏃讹紝宸茶嚜鍔ㄩ噸璇?1 娆″悗浠嶅け璐? },
src\components\SystemSetting\LogManagement.tsx:32 | { id: 6, time: '2026-08-10 12:20:09', level: 'action', source: t('router.systemSetting'), operator: '寮犺繍缁?, message: '淇敼绯荤粺鍚嶇О涓庢暟鎹埛鏂伴鐜囷紙5min 鈫?1min锛? },
src\components\SystemSetting\LogManagement.tsx:33 | { id: 7, time: '2026-08-10 11:55:44', level: 'info', source: '鐘舵€佹湇鍔?, operator: '绯荤粺', message: '璁惧 ROBOT-001 涓婃姤鐘舵€侊細鐢甸噺 85%锛屾ā寮?patrol' },
src\components\SystemSetting\LogManagement.tsx:34 | { id: 8, time: '2026-08-10 11:30:02', level: 'warning', source: t('router.alerts'), operator: '绯荤粺', message: '閫嗗彉鍣?INV-03 杈撳嚭鍔熺巼杈冩槰鏃ヤ笅闄?16%锛岃Е鍙戦璀? },
src\components\SystemSetting\LogManagement.tsx:35 | { id: 9, time: '2026-08-10 10:48:37', level: 'action', source: t('router.videoManage'), operator: '鐜嬬彮闀?, message: '璋冩暣 CAM-04 鐑垚鍍忛€氶亾鐮佺巼鍙傛暟' },
src\components\SystemSetting\LogManagement.tsx:36 | { id: 10, time: '2026-08-10 10:12:15', level: 'info', source: '绯荤粺', operator: '绯荤粺', message: '姣忔棩鑷姩澶囦唤瀹屾垚锛屽浠芥枃浠讹細backup-20260810-0200.tar' },
src\components\SystemSetting\LogManagement.tsx:37 | { id: 11, time: '2026-08-10 09:40:50', level: 'error', source: t('systemSetting.deviceAccess'), operator: '绯荤粺', message: '鏈煡璁惧灏濊瘯娉ㄥ唽锛坰ecret 鏍¢獙澶辫触锛夛紝宸叉嫆缁濓紝鏉ユ簮 IP锛?0.0.12.45' },
src\components\SystemSetting\LogManagement.tsx:38 | { id: 12, time: '2026-08-10 09:05:23', level: 'action', source: t('router.roles'), operator: '寮犺繍缁?, message: '涓恒€屾暟鎹垎鏋愬笀銆嶈鑹叉巿鏉冦€屾姤琛ㄤ腑蹇?瀵煎嚭銆嶆潈闄? },
src\components\SystemSetting\LogManagement.tsx:63 | message.success('鏃ュ織宸插埛鏂?);
src\components\SystemSetting\LogManagement.tsx:74 | const header = '鏃堕棿,绾у埆,鏉ユ簮,鎿嶄綔浜?娑堟伅\n';
src\components\SystemSetting\LogManagement.tsx:80 | a.download = `绯荤粺鏃ュ織_${dayjs().format('YYYYMMDD_HHmmss')}.csv`;
src\components\SystemSetting\LogManagement.tsx:83 | message.success(`宸插鍑?${filtered.length} 鏉℃棩蹇梎);
src\components\SystemSetting\LogManagement.tsx:89 | title: '绾у埆', dataIndex: 'level', key: 'level', width: 80,
src\components\SystemSetting\LogManagement.tsx:97 | { title: '娑堟伅', dataIndex: 'message', key: 'message', ellipsis: true },
src\components\SystemSetting\LogManagement.tsx:104 | <Text type="secondary" style={{ fontSize: 12 }}>绯荤粺杩愯銆佽澶囨帶鍒朵笌绠$悊鍛樻搷浣滄祦姘达紝浠呰秴绾х鐞嗗憳鍙煡鐪?/Text>
src\components\SystemSetting\LogManagement.tsx:115 | { value: 'all', label: '鍏ㄩ儴绾у埆' },
src\components\SystemSetting\LogManagement.tsx:125 | size="small" allowClear placeholder="鎼滅储娑堟伅 / 鎿嶄綔浜?/ 鏉ユ簮"
src\components\SystemSetting\LogManagement.tsx:152 | pagination={{ size: 'small', pageSize: 10, showTotal: (t) => `鍏?${t} 鏉 }}
src\components\SystemSetting\MenuList.tsx:70 | messageApi.error('鑿滃崟鍔犺浇澶辫触');
src\components\SystemSetting\MenuList.tsx:171 | 鏂板瀛愯彍鍗?src\components\SystemSetting\MenuList.tsx:201 | }}>鏂板鑿滃崟</Button>
src\components\SystemSetting\MenuList.tsx:208 | pagination={false} // 鍏抽棴鍒嗛〉
src\components\SystemSetting\MenuList.tsx:217 | title={editMenu ? '缂栬緫鑿滃崟' : '鏂板鑿滃崟'}
src\components\SystemSetting\MenuList.tsx:226 | <Select placeholder="鏃狅紙涓€绾ц彍鍗曪級">
src\components\SystemSetting\MenuList.tsx:227 | <Option value={0}>鏃狅紙涓€绾ц彍鍗曪級</Option>
src\components\SystemSetting\MenuList.tsx:235 | <Input placeholder="璇疯緭鍏ヨ彍鍗曞悕绉? />
src\components\SystemSetting\MenuList.tsx:244 | <Form.Item label="鏄剧ず鎺掑簭" name="orderNum">
src\components\SystemSetting\MenuList.tsx:245 | <InputNumber min={0} style={{ width: '100%' }} placeholder="鏁板瓧瓒婂皬瓒婇潬鍓? />
src\components\SystemSetting\MenuList.tsx:252 | title="閫夋嫨鑿滃崟鍥炬爣"
src\components\SystemSetting\OnlineUser.tsx:18 | dept: '鐮斿彂閮ㄩ棬',
src\components\SystemSetting\OnlineUser.tsx:20 | location: '鍐呯綉IP',
src\components\SystemSetting\OnlineUser.tsx:29 | dept: '鐮斿彂閮ㄩ棬',
src\components\SystemSetting\OnlineUser.tsx:31 | location: '鍐呯綉IP',
src\components\SystemSetting\OnlineUser.tsx:40 | const [activeTab, setActiveTab] = useState('onlineUser'); // 榛樿閫変腑鍦ㄧ嚎鐢ㄦ埛
src\components\SystemSetting\OnlineUser.tsx:54 | message.success('鎼滅储瀹屾垚');
src\components\SystemSetting\OnlineUser.tsx:62 | message.info('宸查噸缃悳绱㈡潯浠?);
src\components\SystemSetting\OnlineUser.tsx:67 | message.info(`宸插悜浼氳瘽 ${record.sessionId} 鍙戦€佸己閫€鎸囦护`);
src\components\SystemSetting\OnlineUser.tsx:72 | { title: '搴忓彿', dataIndex: 'id', width: 60 },
src\components\SystemSetting\OnlineUser.tsx:73 | { title: '浼氳瘽缂栧彿', dataIndex: 'sessionId', ellipsis: true },
src\components\SystemSetting\OnlineUser.tsx:74 | { title: '鐧诲綍鍚嶇О', dataIndex: 'loginName' },
src\components\SystemSetting\OnlineUser.tsx:75 | { title: '鎵€灞為儴闂?, dataIndex: 'dept' },
src\components\SystemSetting\OnlineUser.tsx:76 | { title: '涓绘満', dataIndex: 'host' },
src\components\SystemSetting\OnlineUser.tsx:77 | { title: '鐧诲綍鍦扮偣', dataIndex: 'location' },
src\components\SystemSetting\OnlineUser.tsx:78 | { title: '鎿嶄綔绯荤粺', dataIndex: 'os' },
src\components\SystemSetting\OnlineUser.tsx:79 | { title: '娴忚鍣?, dataIndex: 'browser' },
src\components\SystemSetting\OnlineUser.tsx:80 | { title: '鐧诲綍鏃堕棿', dataIndex: 'loginTime' },
src\components\SystemSetting\OnlineUser.tsx:85 | 寮洪€€
src\components\SystemSetting\OnlineUser.tsx:94 | <Typography.Title level={4} style={{ margin: 0, fontSize: 'clamp(14px, 1.2vw, 18px)' }}>绯荤粺鐩戞帶</Typography.Title>
src\components\SystemSetting\OnlineUser.tsx:103 | <TabPane tab="鍏朵粬鐩戞帶" key="other" />
src\components\SystemSetting\OnlineUser.tsx:112 | <span>鐧诲綍鍦板潃</span>
src\components\SystemSetting\OnlineUser.tsx:114 | placeholder="璇疯緭鍏ョ櫥褰曞湴鍧€"
src\components\SystemSetting\OnlineUser.tsx:123 | placeholder="璇疯緭鍏ョ敤鎴峰悕绉?
src\components\SystemSetting\OnlineUser.tsx:130 | 鎼滅储
src\components\SystemSetting\OnlineUser.tsx:133 | 閲嶇疆
src\components\SystemSetting\OnlineUser.tsx:147 | showTotal: (total) => `鍏?${total} 鏉,
src\components\SystemSetting\OnlineUser.tsx:158 | <h2>鍏朵粬鐩戞帶鍐呭</h2>
src\components\SystemSetting\OnlineUser.tsx:159 | <p>杩欓噷鍙互鏀炬湇鍔$姸鎬併€丆PU鐩戞帶銆佸唴瀛樼洃鎺с€佹帴鍙g洃鎺х瓑鍐呭</p>
src\components\SystemSetting\Organization.tsx:144 | <Popconfirm title="纭畾鍒犻櫎璇ョ粍缁囷紵" onConfirm={() => handleDelete(r.id)}>
src\components\SystemSetting\Organization.tsx:162 | 鏂板缁勭粐
src\components\SystemSetting\Organization.tsx:176 | showTotal: (total) => `鍏?${total} 鏉
src\components\SystemSetting\Organization.tsx:185 | title={editRecord ? '缂栬緫缁勭粐' : '鏂板缁勭粐'}
src\components\SystemSetting\Organization.tsx:194 | <Input placeholder="璇疯緭鍏ョ粍缁囧悕绉? />
src\components\SystemSetting\Organization.tsx:198 | <Input placeholder="璇疯緭鍏ョ粍缁囩紪鐮? />
src\components\SystemSetting\Organization.tsx:201 | <Form.Item name="manager" label={t('systemSetting.leader')} rules={[{ required: true, message: '璇疯緭鍏ヨ礋璐d汉' }]}>
src\components\SystemSetting\Organization.tsx:202 | <Input placeholder="璇疯緭鍏ヨ礋璐d汉" />
src\components\SystemSetting\Organization.tsx:205 | <Form.Item name="phone" label={t('systemSetting.contact')} rules={[{ required: true, message: '璇疯緭鍏ヨ仈绯荤數璇? }]}>
src\components\SystemSetting\Organization.tsx:206 | <Input placeholder="璇疯緭鍏ヨ仈绯荤數璇? />
src\components\SystemSetting\Organization.tsx:210 | <Input placeholder="璇疯緭鍏ラ偖绠? />
src\components\SystemSetting\Organization.tsx:213 | <Form.Item name="address" label="鍦板潃">
src\components\SystemSetting\Organization.tsx:214 | <Input placeholder="璇疯緭鍏ュ湴鍧€" />
src\components\SystemSetting\Organization.tsx:218 | <Input.TextArea rows={3} placeholder="璇疯緭鍏ュ娉? />
src\components\SystemSetting\Organization.tsx:224 | <Option value={0}>绂佺敤</Option>
src\components\SystemSetting\SerialNumGenerate.jsx:150 | message.warning('璇烽€夋嫨瑕佸垹闄ょ殑鏁版嵁');
src\components\SystemSetting\SerialNumGenerate.jsx:155 | messageApi.success('鎵归噺鍒犻櫎鎴愬姛');
src\components\SystemSetting\SerialNumGenerate.jsx:158 | messageApi.error('鎵归噺鍒犻櫎澶辫触');
src\components\SystemSetting\SerialNumGenerate.jsx:235 | if (!qrUrl) return messageApi.warning('璇峰厛鐢熸垚');
src\components\SystemSetting\SerialNumGenerate.jsx:244 | if (!serialNumber) return messageApi.warning('璇峰厛鐢熸垚');
src\components\SystemSetting\SerialNumGenerate.jsx:271 | messageApi.error('淇濆瓨澶辫触锛? + res?.msg);
src\components\SystemSetting\SerialNumGenerate.jsx:296 | messageApi.warning('鏈煡璇㈠埌鏁版嵁');
src\components\SystemSetting\SerialNumGenerate.jsx:299 | messageApi.error('鏌ヨ澶辫触');
src\components\SystemSetting\SerialNumGenerate.jsx:329 | title: '搴忓彿',
src\components\SystemSetting\SerialNumGenerate.jsx:334 | { title: '搴忓垪鍙?, width: 380, dataIndex: 'serialNumber', key: 'sn', ellipsis: true },
src\components\SystemSetting\SerialNumGenerate.jsx:336 | title: '鍨嬪彿',
src\components\SystemSetting\SerialNumGenerate.jsx:345 | title: '閰嶇疆',
src\components\SystemSetting\SerialNumGenerate.jsx:363 | title: '鍥藉',
src\components\SystemSetting\SerialNumGenerate.jsx:368 | title: '鐪佷唤',
src\components\SystemSetting\SerialNumGenerate.jsx:373 | title: '浜岀淮鐮?,
src\components\SystemSetting\SerialNumGenerate.jsx:391 | 鍒犻櫎
src\components\SystemSetting\SerialNumGenerate.jsx:411 | title="鏈哄櫒浜轰簩缁寸爜绠$悊"
src\components\SystemSetting\SerialNumGenerate.jsx:415 | <Button onClick={() => setManageVisible(true)}>鏁版嵁绠$悊</Button>
src\components\SystemSetting\SerialNumGenerate.jsx:416 | <Popconfirm title="纭畾鍒犻櫎閫変腑椤癸紵" onConfirm={handleBatchDelete}>
src\components\SystemSetting\SerialNumGenerate.jsx:425 | <Form.Item name="serialNumber" label="搴忓垪鍙?>
src\components\SystemSetting\SerialNumGenerate.jsx:426 | <Input placeholder="璇疯緭鍏ュ簭鍒楀彿" allowClear style={{ width: '100%', minWidth: 260, maxWidth: 420 }} />
src\components\SystemSetting\SerialNumGenerate.jsx:453 | title="鐢熸垚鏈哄櫒浜轰簩缁寸爜"
src\components\SystemSetting\SerialNumGenerate.jsx:469 | <Form.Item name="model" label="鍨嬪彿" rules={[{ required: true }]}>
src\components\SystemSetting\SerialNumGenerate.jsx:470 | <Select placeholder="閫夋嫨鍨嬪彿" showSearch>
src\components\SystemSetting\SerialNumGenerate.jsx:474 | <Form.Item name="config" label="閰嶇疆" rules={[{ required: true }]}>
src\components\SystemSetting\SerialNumGenerate.jsx:475 | <Select placeholder="閫夋嫨閰嶇疆" showSearch>
src\components\SystemSetting\SerialNumGenerate.jsx:480 | <Select placeholder="閫夋嫨绫诲瀷" showSearch>
src\components\SystemSetting\SerialNumGenerate.jsx:484 | <Form.Item name="country" label="鍥藉">
src\components\SystemSetting\SerialNumGenerate.jsx:485 | <Select placeholder="閫夋嫨鍥藉" showSearch allowClear onChange={handleCountryChange}>
src\components\SystemSetting\SerialNumGenerate.jsx:489 | <Form.Item name="province" label="鐪佷唤">
src\components\SystemSetting\SerialNumGenerate.jsx:490 | <Select placeholder="璇峰厛閫夋嫨鍥藉" showSearch allowClear disabled={provinces.length === 0}>
src\components\SystemSetting\SerialNumGenerate.jsx:495 | <Button type="primary" onClick={generateQRCode} block>鐢熸垚搴忓垪鍙?& 浜岀淮鐮?/Button>
src\components\SystemSetting\SerialNumGenerate.jsx:504 | <Text strong>搴忓垪鍙凤細{serialNumber}</Text>
src\components\SystemSetting\SerialNumGenerate.jsx:510 | <div style={{ color: '#999', padding: '60px 0' }}>璇峰厛鐢熸垚浜岀淮鐮?/div>
src\components\SystemSetting\SerialNumGenerate.jsx:522 | <Modal open={viewModal} title="浜岀淮鐮佽鎯? onCancel={() => setViewModal(false)} footer={null} width={400}>
src\components\SystemSetting\SerialNumGenerate.jsx:526 | <div style={{ marginTop: 16 }}>搴忓垪鍙凤細{viewRecord.serialNumber}</div>
src\components\SystemSetting\SerialNumGenerate.jsx:532 | <Modal open={manageVisible} title="鏁版嵁绠$悊" width="90%" style={{ maxWidth: 900 }} onCancel={() => setManageVisible(false)} footer={<Button onClick={() => setManageVisible(false)}>{t('common.close')}</Button>} destroyOnClose
src\components\SystemSetting\SerialNumGenerate.jsx:533 | <DictManager title="鏈哄櫒浜虹被鍨? data={types} fields={[{ name: 'displayName', label: '绫诲瀷鍚嶇О', required: true }, { name: 'storeValue', label: '瀛樺偍鍊?, required: true }, { name: 'remark', label: t('roles.remark') }]} onAdd={handleA
src\components\SystemSetting\SerialNumGenerate.jsx:534 | <DictManager title="鏈哄櫒浜哄瀷鍙? data={models} fields={[{ name: 'displayName', label: '鍨嬪彿鍚嶇О', required: true }, { name: 'storeValue', label: '瀛樺偍鍊?, required: true }]} onAdd={handleAddModel} onUpdate={handleUpdateModel} onDelet
src\components\SystemSetting\SerialNumGenerate.jsx:535 | <DictManager title="閰嶇疆" data={configs} fields={[{ name: 'displayName', label: '閰嶇疆鍚嶇О', required: true }, { name: 'storeValue', label: '瀛樺偍鍊?, required: true }]} onAdd={handleAddConfig} onUpdate={handleUpdateConfig} onDelet
src\components\SystemSetting\SmartDeviceManagement.tsx:105 | utils.message.error('鑾峰彇鏅鸿兘瑁呭鍒楄〃澶辫触');
src\components\SystemSetting\SmartDeviceManagement.tsx:175 | utils.message.success('瑁呭缂栬緫鎴愬姛');
src\components\SystemSetting\SmartDeviceManagement.tsx:200 | utils.message.error('鏃犳潈闄?);
src\components\SystemSetting\SmartDeviceManagement.tsx:214 | utils.message.success('淇濆瓨鍙傛暟鎴愬姛');
src\components\SystemSetting\SmartDeviceManagement.tsx:217 | utils.message.error(res.msg || '鎺堟潈澶辫触');
src\components\SystemSetting\SmartDeviceManagement.tsx:220 | utils.message.error('鎿嶄綔寮傚父');
src\components\SystemSetting\SmartDeviceManagement.tsx:226 | return utils.message.warning('璇峰厛鍦ㄥ垪琛ㄤ腑閫変腑闇€瑕佺粦瀹氱殑鏅鸿兘瑁呭');
src\components\SystemSetting\SmartDeviceManagement.tsx:274 | utils.message.success('缁戝畾鎴愬姛');
src\components\SystemSetting\SmartDeviceManagement.tsx:280 | utils.message.error('缁戝畾澶辫触');
src\components\SystemSetting\SmartDeviceManagement.tsx:283 | utils.message.error('鎿嶄綔寮傚父');
src\components\SystemSetting\SmartDeviceManagement.tsx:290 | return utils.message.warning('鏈€夋嫨鏈夋晥璁惧锛屾棤娉曡В缁?);
src\components\SystemSetting\SmartDeviceManagement.tsx:292 | const typeText = { 1: '浜哄憳', 2: '鍦虹珯', 3: '缁勭粐' }[type as number];
src\components\SystemSetting\SmartDeviceManagement.tsx:294 | title: '纭瑙g粦',
src\components\SystemSetting\SmartDeviceManagement.tsx:295 | content: `纭畾瑕佷负閫変腑鐨勬櫤鑳借澶囨竻闄?{typeText}缁戝畾鍚楋紵`,
src\components\SystemSetting\SmartDeviceManagement.tsx:302 | utils.message.success('瑙g粦鎴愬姛');
src\components\SystemSetting\SmartDeviceManagement.tsx:307 | utils.message.error(res.msg || '瑙g粦澶辫触');
src\components\SystemSetting\SmartDeviceManagement.tsx:310 | utils.message.error('鎿嶄綔寮傚父');
src\components\SystemSetting\SmartDeviceManagement.tsx:318 | { title: '璁惧鐮?, width: 280, dataIndex: 'serialNumber', key: 'sn' },
src\components\SystemSetting\SmartDeviceManagement.tsx:320 | title: '鎵€灞炵粍缁?, width: 150, key: 'orgName',
src\components\SystemSetting\SmartDeviceManagement.tsx:323 | return org ? (org.orgName || org.name) : <Text type="secondary">鏈粦瀹?/Text>;
src\components\SystemSetting\SmartDeviceManagement.tsx:327 | title: '鎵€灞炲満绔?, width: 150, key: 'siteName',
src\components\SystemSetting\SmartDeviceManagement.tsx:330 | return site ? (site.siteName || site.name) : <Text type="secondary">鏈粦瀹?/Text>;
src\components\SystemSetting\SmartDeviceManagement.tsx:337 | return user ? (user.nickName || user.userName) : <Text type="secondary">鏈粦瀹?/Text>;
src\components\SystemSetting\SmartDeviceManagement.tsx:345 | <Tooltip title="娓呴櫎浜哄憳缁戝畾">
src\components\SystemSetting\SmartDeviceManagement.tsx:346 | <Button size="small" icon={<DisconnectOutlined />} onClick={() => handleUnbindSmart([record.serialNumber], 1)}>鐢ㄦ埛</Button>
src\components\SystemSetting\SmartDeviceManagement.tsx:348 | <Tooltip title="娓呴櫎鍦虹珯缁戝畾">
src\components\SystemSetting\SmartDeviceManagement.tsx:349 | <Button size="small" icon={<DisconnectOutlined />} onClick={() => handleUnbindSmart([record.serialNumber], 2)}>鍦虹珯</Button>
src\components\SystemSetting\SmartDeviceManagement.tsx:351 | <Tooltip title="娓呴櫎缁勭粐缁戝畾">
src\components\SystemSetting\SmartDeviceManagement.tsx:352 | <Button size="small" icon={<DisconnectOutlined />} onClick={() => handleUnbindSmart([record.serialNumber], 3)}>缁勭粐</Button>
src\components\SystemSetting\SmartDeviceManagement.tsx:354 | <Button size="small" icon={<EditOutlined />} onClick={() => openParamModal(record)}>鍙傛暟</Button>
src\components\SystemSetting\SmartDeviceManagement.tsx:355 | {userInfo?.userId == 1 && <Button size="small" icon={<EditOutlined />} onClick={() => openParamModal1(record)}>鎺堟潈</Button>}
src\components\SystemSetting\SmartDeviceManagement.tsx:381 | placeholder="璁惧鐮?
src\components\SystemSetting\SmartDeviceManagement.tsx:388 | <Button type="primary" icon={<LinkOutlined />} onClick={openBindSmartModal}>缁戝畾瑁呭</Button>
src\components\SystemSetting\SmartDeviceManagement.tsx:389 | <Button disabled={selectedSmartKeys.length === 0} onClick={() => handleUnbindSmart(selectedSmartKeys, 1)}>鎵归噺瑙g粦(鐢ㄦ埛)</Button>
src\components\SystemSetting\SmartDeviceManagement.tsx:390 | <Button disabled={selectedSmartKeys.length === 0} onClick={() => handleUnbindSmart(selectedSmartKeys, 2)}>鎵归噺瑙g粦(鍦虹珯)</Button>
src\components\SystemSetting\SmartDeviceManagement.tsx:391 | <Button disabled={selectedSmartKeys.length === 0} onClick={() => handleUnbindSmart(selectedSmartKeys, 3)}>鎵归噺瑙g粦(缁勭粐)</Button>
src\components\SystemSetting\SmartDeviceManagement.tsx:407 | showTotal: (t) => `鍏?${t} 鏉,
src\components\SystemSetting\SmartDeviceManagement.tsx:420 | <span style={{ fontWeight: 600 }}>缁戝畾鏅鸿兘瑁呭</span>
src\components\SystemSetting\SmartDeviceManagement.tsx:436 | <Form.Item label={<>宸查€夋櫤鑳借澶囷紙{selectedSmartKeys.length}鍙帮級ID</>} name="deviceIds" rules={[{ required: true, message: '璇烽€夋嫨瑁呭' }]}>
src\components\SystemSetting\SmartDeviceManagement.tsx:437 | <Input.TextArea placeholder="渚嬪: ID001, ID002" rows={2} disabled style={{ resize: 'none', background: '#fafafa' }} />
src\components\SystemSetting\SmartDeviceManagement.tsx:442 | <span>鎵€灞炵粍缁?/span>
src\components\SystemSetting\SmartDeviceManagement.tsx:445 | name="orgId" rules={[{ required: true, message: '璇烽€夋嫨缁勭粐' }]}
src\components\SystemSetting\SmartDeviceManagement.tsx:448 | placeholder="璇烽€夋嫨缁勭粐"
src\components\SystemSetting\SmartDeviceManagement.tsx:466 | <span>鎵€灞炲満绔?/span>
src\components\SystemSetting\SmartDeviceManagement.tsx:469 | name="siteId" rules={[{ required: !siteFieldDisabled, message: '璇烽€夋嫨鍦虹珯' }]}
src\components\SystemSetting\SmartDeviceManagement.tsx:472 | placeholder="璇峰厛閫夋嫨缁勭粐"
src\components\SystemSetting\SmartDeviceManagement.tsx:487 | <Form.Item label={t('systemSetting.leader')} name="userId" rules={[{ required: true, message: '璇烽€夋嫨璐熻矗浜? }]}>
src\components\SystemSetting\SmartDeviceManagement.tsx:489 | placeholder="璇峰厛閫夋嫨鍦虹珯鍚庨€夋嫨璐熻矗浜?
src\components\SystemSetting\SmartDeviceManagement.tsx:506 | title="缂栬緫鏅鸿兘瑁呭淇℃伅"
src\components\SystemSetting\SmartDeviceManagement.tsx:517 | <Form.Item label={t('devices.deviceName')} name="deviceAlias" rules={[{ required: true, message: '璇峰~鍐欒澶囧悕绉? }]}>
src\components\SystemSetting\SmartDeviceManagement.tsx:518 | <Input placeholder="璇疯緭鍏ヨ澶囧悕绉? />
src\components\SystemSetting\SmartDeviceManagement.tsx:520 | <Form.Item label="璁惧搴忓垪鍙? name="serialNumber" rules={[{ required: true, message: '璇峰~鍐欒澶囩爜' }]}>
src\components\SystemSetting\SmartDeviceManagement.tsx:521 | <Input placeholder="璇疯緭鍏ヨ澶囧簭鍒楀彿" />
src\components\SystemSetting\SmartDeviceManagement.tsx:523 | <Form.Item label={t('devices.onlineStatus')} name="onlineStatus" rules={[{ required: true, message: '璇烽€夋嫨鍦ㄧ嚎鐘舵€? }]}>
src\components\SystemSetting\SmartDeviceManagement.tsx:524 | <Select placeholder="閫夋嫨鍦ㄧ嚎鐘舵€?>
src\components\SystemSetting\SmartDeviceManagement.tsx:542 | <span style={{ fontWeight: 600 }}>璁惧鎺堟潈</span>
src\components\SystemSetting\SmartDeviceManagement.tsx:572 | <span>璁剧疆璁惧鎿嶄綔鎺堟潈锛屾巿鏉冨埌鏈熷悗璁惧灏嗗け鍘诲搴旀搷浣滄潈闄?/span>
src\components\SystemSetting\SmartDeviceManagement.tsx:576 | label={<span style={{ fontWeight: 500 }}>鎺堟潈鏃堕棿(min)</span>}
src\components\SystemSetting\SmartDeviceManagement.tsx:579 | { required: true, message: '璇疯緭鍏ユ巿鏉冨墿浣欐椂闂? },
src\components\SystemSetting\SmartDeviceManagement.tsx:580 | { type: 'number', min: 0, message: '鎺堟潈鏃堕棿涓嶈兘灏忎簬0' }
src\components\SystemSetting\SmartDeviceManagement.tsx:586 | placeholder="璇疯緭鍏ユ巿鏉冨墿浣欐椂闂?
src\components\SystemSetting\SmartDeviceManagement.tsx:592 | <Button type="primary" htmlType="submit" style={{ borderRadius: 8, padding: '4px 24px' }}>淇濆瓨鎺堟潈</Button>
src\components\SystemSetting\StationManage.tsx:250 | title: '鎵€灞炵粍缁?,
src\components\SystemSetting\StationManage.tsx:257 | { title: '鍦板潃', dataIndex: 'address' },
src\components\SystemSetting\StationManage.tsx:264 | <Button icon={<BgColorsOutlined />} onClick={() => handleOpenArea(record)}>鍒嗗尯璁剧疆</Button>
src\components\SystemSetting\StationManage.tsx:265 | <Button onClick={() => handleOpenMap(record)}>杈圭晫缁樺埗</Button>
src\components\SystemSetting\StationManage.tsx:286 | placeholder="璇烽€夋嫨缁勭粐绛涢€?
src\components\SystemSetting\StationManage.tsx:300 | 鏂板鍦虹珯
src\components\SystemSetting\StationManage.tsx:314 | showTotal: (total) => `鍏?${total} 鏉
src\components\SystemSetting\StationManage.tsx:324 | title={editRecord ? '缂栬緫鍦虹珯' : '鏂板鍦虹珯'}
src\components\SystemSetting\StationManage.tsx:339 | <Form.Item name="orgId" label="鎵€灞炵粍缁? rules={[{ required: true }]}>
src\components\SystemSetting\StationManage.tsx:340 | <Select placeholder="璇烽€夋嫨鎵€灞炵粍缁? allowClear>
src\components\SystemSetting\StationManage.tsx:364 | <Form.Item name="address" label="璇︾粏鍦板潃">
src\components\SystemSetting\StationManage.tsx:365 | <Input placeholder="鍦板潃" />
src\components\SystemSetting\StationManage.tsx:368 | <Divider orientation="left">娑堟伅鎺ㄩ€侀厤缃?/Divider>
src\components\SystemSetting\StationManage.tsx:372 | <Form.Item name="dingTalkPush" label="閽夐拤鍛婅鎺ㄩ€? valuePropName="checked">
src\components\SystemSetting\StationManage.tsx:373 | <Switch checkedChildren="寮€鍚? unCheckedChildren={t('common.close')} />
src\components\SystemSetting\StationManage.tsx:377 | <Form.Item name="dingTalkOrderPush" label="閽夐拤宸ュ崟鎺ㄩ€? valuePropName="checked">
src\components\SystemSetting\StationManage.tsx:378 | <Switch checkedChildren="寮€鍚? unCheckedChildren={t('common.close')} />
src\components\SystemSetting\StationManage.tsx:382 | <Form.Item name="emailPush" label="閭欢鎺ㄩ€? valuePropName="checked">
src\components\SystemSetting\StationManage.tsx:383 | <Switch checkedChildren="寮€鍚? unCheckedChildren={t('common.close')} />
src\components\SystemSetting\StationManage.tsx:387 | <Form.Item name="alertPush" label="鍛婅寮圭獥鎺ㄩ€? valuePropName="checked">
src\components\SystemSetting\StationManage.tsx:388 | <Switch checkedChildren="寮€鍚? unCheckedChildren={t('common.close')} />
src\components\SystemSetting\StationManage.tsx:399 | label="閽夐拤鏈哄櫒浜篢oken"
src\components\SystemSetting\StationManage.tsx:401 | { required: true, message: '寮€鍚拤閽夋帹閫佹椂蹇呴』濉啓Token' }
src\components\SystemSetting\StationManage.tsx:404 | <Input placeholder="璇疯緭鍏ラ拤閽夋満鍣ㄤ汉Webhook Token" />
src\components\SystemSetting\StationManage.tsx:410 | label="閽夐拤鍔犲瘑瀵嗛挜"
src\components\SystemSetting\StationManage.tsx:412 | { required: true, message: '寮€鍚拤閽夋帹閫佹椂蹇呴』濉啓鍔犲瘑瀵嗛挜' }
src\components\SystemSetting\StationManage.tsx:415 | <Input placeholder="閽夐拤鏈哄櫒浜哄姞绛惧瘑閽? />
src\components\SystemSetting\StationManage.tsx:433 | title={`銆?{currentStation?.siteName}銆戝垎鍖鸿缃甡}
src\components\SystemSetting\StationManage.tsx:442 | <Form.Item name="regionName" label="鍒嗗尯鍚嶇О" rules={[{ required: true }]}>
src\components\SystemSetting\StationManage.tsx:447 | <Form.Item name="regionCode" label="鍒嗗尯缂栫爜" rules={[{ required: true }]}>
src\components\SystemSetting\StationManage.tsx:454 | <Form.Item name="type" label="鍒嗗尯绫诲瀷">
src\components\SystemSetting\StationManage.tsx:455 | <Select><Option value="娓呮壂鍖?>娓呮壂鍖?/Option><Option value="宸℃鍖?>宸℃鍖?/Option></Select>
src\components\SystemSetting\StationManage.tsx:465 | <Button type="primary" onClick={handleSaveRegion}>淇濆瓨鍒嗗尯</Button>
src\components\SystemSetting\StationManage.tsx:474 | { title: '鍒嗗尯鍚嶇О', dataIndex: 'regionName' },
src\components\SystemSetting\StationManage.tsx:475 | { title: '缂栫爜', dataIndex: 'regionCode' },
src\components\SystemSetting\StationManage.tsx:495 | title={`銆?{currentStation?.siteName}銆戣竟鐣岀粯鍒禶}
src\components\SystemSetting\StationManage.tsx:502 | 鍦板浘鍖哄煙缁樺埗锛堝彲鑷鎺ュ叆楂樺痉/鐧惧害鍦板浘锛?src\components\SystemSetting\StationManage.tsx:504 | <Button type="primary">寮€濮嬬粯鍒?/Button>
src\components\SystemSetting\StationManage.tsx:505 | <Button>淇濆瓨杈圭晫</Button>
src\components\SystemSetting\SystemMaintain.tsx:38 | <TabPane tab={<span><ExclamationCircleOutlined />閿欒绠$悊</span>} key="error" />
src\components\SystemSetting\SystemMaintain.tsx:39 | <TabPane tab={<span><AlertOutlined />鍛婅妯″瀷绠$悊</span>} key="alarm" />
src\components\SystemSetting\SystemMaintain.tsx:40 | <TabPane tab={<span><FormOutlined />宸ュ崟妯″瀷绠$悊</span>} key="workOrder" />
src\components\SystemSetting\UserPage.tsx:552 | showTotal={(t) => `鍏?${t} 鏉}
src\components\SystemSetting\VideoManagement.tsx:72 | message.warning(data.error || '璇诲彇閫氶亾澶辫触');
src\components\SystemSetting\VideoManagement.tsx:76 | message.error('鏃犳硶杩炴帴瑙嗛鏈嶅姟');
src\components\SystemSetting\VideoManagement.tsx:138 | if (data.code !== 200) message.warning(data.error || '璇诲彇鏂囦欢澶辫触');
src\components\SystemSetting\VideoManagement.tsx:139 | } catch { setFiles([]); message.error('璇诲彇鏂囦欢澶辫触'); }
src\components\SystemSetting\VideoManagement.tsx:147 | message.warning('璇峰厛閫夋嫨瀹屾暣鐨勬椂闂磋矾寰?);
src\components\SystemSetting\VideoManagement.tsx:158 | { title: '澶у皬', dataIndex: 'sizeFormatted', key: 'sizeFormatted', width: 120 },
src\components\SystemSetting\VideoManagement.tsx:186 | 褰曞儚閫氶亾涓庡洖鏀剧鐞?路 鍏?{channels.length} 涓€氶亾
src\components\SystemSetting\VideoManagement.tsx:193 | <Text style={{ fontSize: 12, color: '#666' }}>閫氶亾</Text>
src\components\SystemSetting\VideoManagement.tsx:195 | size="small" style={{ width: '100%' }} placeholder="閫夋嫨璁惧閫氶亾"
src\components\SystemSetting\VideoManagement.tsx:203 | <Text style={{ fontSize: 12, color: '#666' }}>骞?/Text>
src\components\SystemSetting\VideoManagement.tsx:205 | size="small" style={{ width: '100%' }} placeholder="骞?
src\components\SystemSetting\VideoManagement.tsx:211 | <Text style={{ fontSize: 12, color: '#666' }}>鏈?/Text>
src\components\SystemSetting\VideoManagement.tsx:213 | size="small" style={{ width: '100%' }} placeholder="鏈?
src\components\SystemSetting\VideoManagement.tsx:219 | <Text style={{ fontSize: 12, color: '#666' }}>鏃?/Text>
src\components\SystemSetting\VideoManagement.tsx:221 | size="small" style={{ width: '100%' }} placeholder="鏃?
src\components\SystemSetting\VideoManagement.tsx:234 | <Empty description="璇峰厛閫夋嫨瑙嗛閫氶亾" style={{ padding: 40 }} />
src\components\SystemSetting\VideoManagement.tsx:236 | <Empty description="璇烽€夋嫨 骞?/ 鏈?/ 鏃?鍔犺浇褰曞儚" image={Empty.PRESENTED_IMAGE_SIMPLE} style={{ padding: 40 }} />
src\components\SystemSetting\VideoManagement.tsx:238 | <Empty description="璇ユ棩鏆傛棤褰曞儚鏂囦欢" style={{ padding: 40 }} />
src\components\SystemSetting\VideoManagement.tsx:242 | pagination={{ size: 'small', pageSize: 10, showTotal: (t) => `鍏?${t} 涓枃浠禶 }}
src\components\SystemSetting\VideoManagement.tsx:249 | title={`棰勮: ${preview?.fileName || ''}`}
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:164 | utils.message.error('鑾峰彇宸ュ崟妯″瀷鍒楄〃澶辫触');
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:214 | title: '纭鍒犻櫎',
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:215 | content: '鎮ㄧ‘瀹氳鍒犻櫎杩欐潯宸ュ崟妯″瀷鍚楋紵',
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:235 | message.warning('璇峰厛鍕鹃€夎鍒犻櫎鐨勬暟鎹?);
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:239 | title: '鎵归噺鍒犻櫎纭',
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:240 | content: `鎮ㄧ‘瀹氳鍒犻櫎閫変腑鐨?${selectedRowKeys.length} 鏉″伐鍗曟ā鍨嬪悧锛熷垹闄ゅ悗涓嶅彲鎭㈠锛乣,
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:248 | message.success('鎵归噺鍒犻櫎鎴愬姛');
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:252 | message.error('鎵归噺鍒犻櫎澶辫触');
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:277 | message.success(editingItem ? '鏇存柊鎴愬姛' : t('common.addSuccess'));
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:301 | { title: '宸ュ崟鍚嶇О', dataIndex: 'orderName', key: 'orderName' },
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:309 | title: '閿欒绛夌骇',
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:314 | const text = { 1: '杞诲井', 2: t('constants.general'), 3: t('constants.critical') }[val] || val;
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:319 | title: '璁惧',
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:329 | title: '璺緞/鑸嚎',
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:342 | title: '鑷姩鐢熸垚浠诲姟',
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:345 | render: (val: boolean) => val ? '鏄? : '鍚?
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:369 | <Button type="primary" icon={<PlusOutlined />} onClick={handleAdd}>鏂板宸ュ崟妯″瀷</Button>
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:377 | 鎵归噺鍒犻櫎{selectedRowKeys.length ? `(${selectedRowKeys.length})` : ''}
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:391 | title={editingItem ? '缂栬緫宸ュ崟妯″瀷' : '鏂板宸ュ崟妯″瀷'}
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:398 | <Form.Item label="宸ュ崟鍚嶇О" name="orderName" rules={[{ required: true, message: '璇疯緭鍏ュ伐鍗曞悕绉? }]}>
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:399 | <Input placeholder="璇疯緭鍏ュ伐鍗曞悕绉? />
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:404 | <Form.Item label="閿欒绛夌骇" name="errorLevel" rules={[{ required: true, message: '璇烽€夋嫨閿欒绛夌骇' }]}>
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:405 | <Select placeholder="璇烽€夋嫨閿欒绛夌骇" options={errorLevelOptions} />
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:407 | <Form.Item label="璁惧" name="deviceId" rules={[{ required: true, message: '璇烽€夋嫨璁惧' }]}>
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:409 | placeholder="璇烽€夋嫨璁惧"
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:418 | <Form.Item label="棰勮璺緞" name="routeId" rules={[{ required: true, message: '璇烽€夋嫨棰勮璺緞' }]}>
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:419 | <Select placeholder="璇烽€夋嫨棰勮璺緞" options={routeOptions} />
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:424 | <Form.Item label="鏃犱汉鏈鸿埅绾? name="waylineId" rules={[{ required: true, message: '璇烽€夋嫨鏃犱汉鏈鸿埅绾? }]}>
src\components\SystemSetting\WorkOrderSettingsManagement.tsx:425 | <Select placeholder="璇烽€夋嫨鏃犱汉鏈鸿埅绾? options={waylineOptions} />
src\components\useWebRTCStream.tsx:81 | }, [deviceId, url]); // 馃敟 蹇呴』鍔?url
src\components\VideoCanvas.tsx:42 | if (title.includes('鍓?) || title.includes('front')) {
src\components\VideoCanvas.tsx:60 | if (title.includes('鍚?) || title.includes('back')) {
src\components\VideoCanvas.tsx:76 | if (title.includes('宸?) || title.includes('left')) {
src\components\VideoCanvas.tsx:86 | if (title.includes('鍙?) || title.includes('right')) {
src\components\VideoPlayer.tsx:28 | const viewTitles = ['鍓嶈鍥?, '鍚庤鍥?, '宸﹁鍥?, '鍙宠鍥?];
src\components\VideoPlayer.tsx:32 | return <Empty description="瑙嗛婧愯繛鎺ュけ璐? />;
src\components\Weather\WeatherSunny.jsx:5 | const angle = i * 30; // 姣忔牴 30掳
src\lib\TracePoint\circQueue.js:40 | this.capacity = capacity; /* 闃熷垪瀹归噺 (鏈€澶氬瓨鍌ㄩ」鐩暟) */
src\lib\TracePoint\circQueue.js:41 | this.buffer = new Array(capacity); /* 闃熷垪瀛樺偍鍖猴紝浣跨敤鏁扮粍瀛樹换鎰忓璞?*/
src\lib\TracePoint\circQueue.js:42 | this.head = 0; /* 闃熷ご绱㈠紩 */
src\lib\TracePoint\circQueue.js:43 | this.tail = 0; /* 闃熷熬绱㈠紩 */
src\lib\TracePoint\circQueue.js:44 | this.isFull = false; /* 闃熸弧鏍囧織 */
src\lib\TracePoint\circQueue.js:46 | this.deepCopy = options.deepCopy ?? true; /* 鏄惁鍚敤娣辨嫹璐?(榛樿鍚敤) */
src\lib\TracePoint\circQueue.js:47 | this.maxMemoryBytes = options.maxMemoryBytes ?? Infinity; /* 闃熷垪鏈€澶у唴瀛橀檺鍒?(鍗曚綅锛氬瓧鑺? */
src\lib\TracePoint\circQueue.js:48 | this.currentMemoryBytes = 0; /* 褰撳墠宸蹭娇鐢ㄥ唴瀛樺ぇ灏?(鍗曚綅锛氬瓧鑺? */
src\lib\TracePoint\circQueue.js:68 | return Buffer.byteLength(JSON.stringify(obj), 'utf8'); /* Node.js 涓敤浜庤绠楀瓧鑺傞暱搴?*/
src\lib\TracePoint\circQueue.js:72 | return 0; /* 鑻ュ璞′笉鍙簭鍒楀寲锛岃繑鍥?0 (閬垮厤鍑洪敊) */
src\lib\TracePoint\circQueue.js:85 | const itemSize = this._estimateSize(item); /* 浼扮畻椤圭洰鍐呭瓨澶у皬 */
src\lib\TracePoint\circQueue.js:88 | return false; /* 鑻ラ槦婊℃垨瓒呰繃鍐呭瓨闄愬埗鍒欏叆闃熷け璐?*/
src\lib\TracePoint\circQueue.js:91 | const clone = this._deepClone(item); /* 娣辨嫹璐濆叆闃熸暟鎹?(閬垮厤澶栭儴淇敼褰卞搷闃熷垪) */
src\lib\TracePoint\circQueue.js:92 | this.buffer[this.tail] = clone; /* 瀛樺叆闃熷熬 */
src\lib\TracePoint\circQueue.js:93 | this.tail = (this.tail + 1) % this.capacity; /* 鐜舰澧為暱 tail */
src\lib\TracePoint\circQueue.js:94 | this.currentMemoryBytes += itemSize; /* 澧炲姞褰撳墠鍐呭瓨浣跨敤 */
src\lib\TracePoint\circQueue.js:96 | if (this.tail === this.head) this.isFull = true; /* 鑻ュ熬杩藉ご锛岃〃绀洪槦婊?*/
src\lib\TracePoint\circQueue.js:103 | if (this.isEmpty()) return null; /* 闃熺┖杩斿洖 null */
src\lib\TracePoint\circQueue.js:105 | const item = this.buffer[this.head]; /* 璇诲彇闃熷ご椤圭洰 */
src\lib\TracePoint\circQueue.js:106 | this.currentMemoryBytes -= this._estimateSize(item); /* 鏇存柊鍐呭瓨浣跨敤 */
src\lib\TracePoint\circQueue.js:107 | this.head = (this.head + 1) % this.capacity; /* 鐜舰澧為暱 head */
src\lib\TracePoint\circQueue.js:108 | this.isFull = false; /* 鍑洪槦蹇呯劧闃熶笉婊?*/
src\lib\TracePoint\circQueue.js:109 | return this._deepClone(item); /* 杩斿洖娣辨嫹璐濓紝淇濇姢闃熷垪鍐呴儴鏁版嵁 */
src\lib\TracePoint\circQueue.js:117 | if (this.isEmpty()) return false; /* 闃熺┖鍒欎笉鑳界户缁涪寮?*/
src\lib\TracePoint\circQueue.js:121 | this.currentMemoryBytes -= this._estimateSize(item); /* 鍑忓幓鍐呭瓨澶у皬 */
src\lib\TracePoint\circQueue.js:122 | this.tail = (this.tail - 1 + this.capacity) % this.capacity; /* tail 鍥為€€ */
src\lib\TracePoint\circQueue.js:148 | if (Date.now() - start >= timeoutMs) return false; /* 瓒呮椂閫€鍑?*/
src\lib\TracePoint\circQueue.js:149 | await new Promise(resolve => setTimeout(resolve, 1)); /* 寮傛杞, 鑷棆鍔?sleep 鎸傝捣 1ms */
src\lib\TracePoint\circQueue.js:166 | if (item !== null) return item; /* 鎴愬姛鍙栧嚭鍒欒繑鍥?*/
src\lib\TracePoint\circQueue.js:167 | if (Date.now() - start >= timeoutMs) return null; /* 瓒呮椂閫€鍑?*/
src\lib\TracePoint\circQueue.js:168 | await new Promise(resolve => setTimeout(resolve, 1)); /* 寮傛杞, 鑷棆鍔?sleep 鎸傝捣 1ms */
src\lib\TracePoint\circQueue.js:180 | result.push(this._deepClone(this.buffer[i])); /* 澶嶅埗姣忎釜鍏冪礌 */
src\lib\TracePoint\circQueue.js:181 | i = (i + 1) % this.capacity; /* 绉诲姩鍒颁笅涓€涓厓绱?*/
src\lib\TracePoint\tracePoint.js:66 | #queue; /* 寰幆闃熷垪, 鐢ㄤ簬瀛樻斁绛夊緟澶勭悊鐨勭偣 */
src\lib\TracePoint\tracePoint.js:67 | #tracePoint; /* 杞ㄨ抗鐐规暟缁? 瀛樻斁宸插畬鎴愮偣 + 褰撳墠鐐?*/
src\lib\TracePoint\tracePoint.js:68 | #completePointIndex; /* 瀹屾垚鐐圭储寮? 鎸囧悜褰撳墠鐐逛箣鍓嶇殑鏈€鍚庝竴涓鎻掑叆鐨勫畬鎴愮偣鐨勪綅缃?*/
src\lib\TracePoint\tracePoint.js:69 | #lock; /* 閿? 鐢ㄤ簬闃叉澶氱嚎绋嬪悓鏃舵洿鏂?*/
src\lib\TracePoint\tracePoint.js:70 | #mode; /* 妯″紡绠$悊鍣?*/
src\lib\TracePoint\tracePoint.js:89 | maxMemoryBytes: 1024 * 1024, /* 1MB 闄愬埗 */
src\lib\TracePoint\tracePoint.js:93 | this.#tracePoint = []; /* 瀛樻斁杞ㄨ抗, 宸插畬鎴愮偣 + 褰撳墠鐐?*/
src\lib\TracePoint\tracePoint.js:94 | this.#completePointIndex = 0; /* 瀹屾垚鐐圭储寮?*/
src\lib\TracePoint\tracePoint.js:95 | this.#lock = new TryLock(); /* 閿? 鐢ㄤ簬闃叉澶氱嚎绋嬪悓鏃舵洿鏂?*/
src\lib\TracePoint\tracePoint.js:96 | this.#mode = TPMode.LOCATION; /* 榛樿涓哄畾浣嶆ā寮?*/
src\lib\TracePoint\tracePoint.js:104 | this.#queue.clear(); /* 娓呯┖闃熷垪 */
src\lib\TracePoint\tracePoint.js:105 | this.#tracePoint = []; /* 娓呯┖杞ㄨ抗鐐规暟缁?*/
src\lib\TracePoint\tracePoint.js:106 | this.#completePointIndex = 0; /* 閲嶇疆瀹屾垚鐐圭储寮?*/
src\lib\TracePoint\tracePoint.js:107 | this.#mode = TPMode.LOCATION; /* 閲嶇疆涓哄畾浣嶆ā寮?*/
src\lib\TracePoint\tracePoint.js:108 | this.#lock.release(); /* 閲婃斁閿?*/
src\lib\TracePoint\tracePoint.js:150 | const trace = this.#tracePoint.slice(); /* 娣辨嫹璐? 閬垮厤澶栭儴淇敼瀵艰嚧鍐呴儴鍑洪敊 */
src\lib\TracePoint\tracePoint.js:151 | this.#lock.release(); /* 瑙i攣 */
src\lib\TracePoint\tracePoint.js:156 | return null; /* 閿佸畾涓? 杩斿洖绌?*/
src\lib\TracePoint\tracePoint.js:187 | this.#tracePoint[0] = point; /* JS 鏀寔鑷姩鎵╁睍鏁扮粍 */
src\lib\TracePoint\tracePoint.js:190 | this.#lock.release(); /* 瑙i攣 */
src\lib\TracePoint\tracePoint.js:229 | this.#lock.release(); /* 鏃犺鎴愬姛澶辫触閮借В閿? 閬垮厤鏃犳硶浣跨敤 */
src\lib\TracePoint\tracePoint.js:274 | this.capacity = capacity; /* 闃熷垪瀹归噺 (鏈€澶氬瓨鍌ㄩ」鐩暟) */
src\lib\TracePoint\tracePoint.js:275 | this.buffer = new Array(capacity); /* 闃熷垪瀛樺偍鍖猴紝浣跨敤鏁扮粍瀛樹换鎰忓璞?*/
src\lib\TracePoint\tracePoint.js:276 | this.head = 0; /* 闃熷ご绱㈠紩 */
src\lib\TracePoint\tracePoint.js:277 | this.tail = 0; /* 闃熷熬绱㈠紩 */
src\lib\TracePoint\tracePoint.js:278 | this.isFull = false; /* 闃熸弧鏍囧織 */
src\lib\TracePoint\tracePoint.js:280 | this.deepCopy = options.deepCopy ?? true; /* 鏄惁鍚敤娣辨嫹璐?(榛樿鍚敤) */
src\lib\TracePoint\tracePoint.js:281 | this.maxMemoryBytes = options.maxMemoryBytes ?? Infinity; /* 闃熷垪鏈€澶у唴瀛橀檺鍒?(鍗曚綅锛氬瓧鑺? */
src\lib\TracePoint\tracePoint.js:282 | this.currentMemoryBytes = 0; /* 褰撳墠宸蹭娇鐢ㄥ唴瀛樺ぇ灏?(鍗曚綅锛氬瓧鑺? */
src\lib\TracePoint\tracePoint.js:307 | return 0; /* 鑻ュ璞′笉鍙簭鍒楀寲锛岃繑鍥?0 (閬垮厤鍑洪敊) */
src\lib\TracePoint\tracePoint.js:318 | const itemSize = this._estimateSize(item); /* 浼扮畻椤圭洰鍐呭瓨澶у皬 */
src\lib\TracePoint\tracePoint.js:320 | return false; /* 鑻ラ槦婊℃垨瓒呰繃鍐呭瓨闄愬埗鍒欏叆闃熷け璐?*/
src\lib\TracePoint\tracePoint.js:323 | const clone = this._deepClone(item); /* 娣辨嫹璐濆叆闃熸暟鎹?(閬垮厤澶栭儴淇敼褰卞搷闃熷垪) */
src\lib\TracePoint\tracePoint.js:324 | this.buffer[this.tail] = clone; /* 瀛樺叆闃熷熬 */
src\lib\TracePoint\tracePoint.js:325 | this.tail = (this.tail + 1) % this.capacity; /* 鐜舰澧為暱 tail */
src\lib\TracePoint\tracePoint.js:326 | this.currentMemoryBytes += itemSize; /* 澧炲姞褰撳墠鍐呭瓨浣跨敤 */
src\lib\TracePoint\tracePoint.js:328 | if (this.tail === this.head) this.isFull = true; /* 鑻ュ熬杩藉ご锛岃〃绀洪槦婊?*/
src\lib\TracePoint\tracePoint.js:334 | if (this.isEmpty()) return null; /* 闃熺┖杩斿洖 null */
src\lib\TracePoint\tracePoint.js:336 | const item = this.buffer[this.head]; /* 璇诲彇闃熷ご椤圭洰 */
src\lib\TracePoint\tracePoint.js:337 | this.currentMemoryBytes -= this._estimateSize(item); /* 鏇存柊鍐呭瓨浣跨敤 */
src\lib\TracePoint\tracePoint.js:338 | this.head = (this.head + 1) % this.capacity; /* 鐜舰澧為暱 head */
src\lib\TracePoint\tracePoint.js:339 | this.isFull = false; /* 鍑洪槦蹇呯劧闃熶笉婊?*/
src\lib\TracePoint\tracePoint.js:340 | return this._deepClone(item); /* 杩斿洖娣辨嫹璐濓紝淇濇姢闃熷垪鍐呴儴鏁版嵁 */
src\lib\TracePoint\tracePoint.js:346 | if (this.isEmpty()) return false; /* 闃熺┖鍒欎笉鑳界户缁涪寮?*/
src\lib\TracePoint\tracePoint.js:350 | this.currentMemoryBytes -= this._estimateSize(item); /* 鍑忓幓鍐呭瓨澶у皬 */
src\lib\TracePoint\tracePoint.js:351 | this.tail = (this.tail - 1 + this.capacity) % this.capacity; /* tail 鍥為€€ */
src\lib\TracePoint\tracePoint.js:374 | if (Date.now() - start >= timeoutMs) return false; /* 瓒呮椂閫€鍑?*/
src\lib\TracePoint\tracePoint.js:375 | await new Promise(resolve => setTimeout(resolve, 1)); /* 寮傛杞, 鑷棆鍔?sleep 鎸傝捣 1ms */
src\lib\TracePoint\tracePoint.js:390 | if (item !== null) return item; /* 鎴愬姛鍙栧嚭鍒欒繑鍥?*/
src\lib\TracePoint\tracePoint.js:391 | if (Date.now() - start >= timeoutMs) return null; /* 瓒呮椂閫€鍑?*/
src\lib\TracePoint\tracePoint.js:392 | await new Promise(resolve => setTimeout(resolve, 1)); /* 寮傛杞, 鑷棆鍔?sleep 鎸傝捣 1ms */
src\lib\TracePoint\tracePoint.js:402 | result.push(this._deepClone(this.buffer[i])); /* 澶嶅埗姣忎釜鍏冪礌 */
src\lib\TracePoint\tracePoint.js:403 | i = (i + 1) % this.capacity; /* 绉诲姩鍒颁笅涓€涓厓绱?*/
src\lib\utils.ts:48 | 4: { get text() { return i18n.t('constants.locationRTKFixed') }, color: '#52c41a' }, // 鏈€浼?src\lib\utils.ts:109 | city: "鑻忓窞",
src\lib\utils.ts:135 | throw new Error(`澶╂皵鎺ュ彛璋冪敤澶辫触锛?{error.message}`);
src\lib\utils.ts:147 | if (!weatherText) return "cloudy"; // 鍏滃簳
src\lib\utils.ts:152 | if (text.includes("鏅?)) {
src\lib\utils.ts:158 | text.includes("闆?) ||
src\lib\utils.ts:159 | text.includes("闆?) ||
src\lib\utils.ts:160 | text.includes("鏆撮洦")
src\lib\utils.ts:166 | if (text.includes("浜?) || text.includes("闃?)) {
src\lib\utils.ts:189 | .filter(col => col.title && col.dataIndex) // 鍙彇鏈夋爣棰?鏈夊瓧娈电殑鍒?src\lib\utils.ts:200 | return String(val).replace(/"/g, '""'); // 杞箟CSV寮曞彿
src\lib\utils.ts:347 | ERROR: '#FF4D4F', // 閿欒 绾?src\lib\utils.ts:348 | WARNING: '#FA8C16', // 璀﹀憡 姗?src\lib\utils.ts:349 | INFO: '#1890FF', // 淇℃伅 钃?src\pages\Agri.jsx:5024 | <Empty description={<span style={{ color: '#fff' }}>璇蜂笂浼犵儹鎴愬儚鏂囦欢</span>} image={Empty.PRESENTED_IMAGE_SIMPLE} />
src\pages\AIAnalysis.tsx:21 | { key: '1', measure: '澶勭悊鐑枒缁勪欢', priority: '楂?, expectedGain: '+2.15%', confidence: '92%' },
src\pages\AIAnalysis.tsx:22 | { key: '2', measure: '鎺掓煡寮傚父缁勪覆', priority: '楂?, expectedGain: '+1.85%', confidence: '90%' },
src\pages\AIAnalysis.tsx:23 | { key: '3', measure: '娓呮礂鍙楅伄鎸″尯鍩?, priority: '涓?, expectedGain: '+0.45%', confidence: '78%' },
src\pages\AIAnalysis.tsx:24 | { key: '4', measure: '璺熻釜琛板噺杈冨ぇ缁勪欢', priority: '涓?, expectedGain: '+0.35%', confidence: '86%' },
src\pages\AIAnalysis.tsx:25 | { key: '5', measure: '鎸佺画鐩戞帶閫嗗彉鍣ㄦ晥鐜?, priority: '浣?, expectedGain: '+0.10%', confidence: '93%' },
src\pages\AIAnalysis.tsx:29 | { name: '鏂归樀 A-05', temp: '71.5鈩?, id: 'A05', status: 'serious' },
src\pages\AIAnalysis.tsx:30 | { name: '鏂归樀 A-12', temp: '68.3鈩?, id: 'A12', status: 'warning' },
src\pages\AIAnalysis.tsx:31 | { name: '鏂归樀 B-03', temp: '64.8鈩?, id: 'B03', status: 'warning' },
src\pages\AIAnalysis.tsx:32 | { name: '鏂归樀 C-07', temp: '67.2鈩?, id: 'C07', status: 'warning' },
src\pages\AIAnalysis.tsx:144 | else if (status === '杞诲井') color = '#1677ff';
src\pages\AIAnalysis.tsx:152 | if (impact === '楂?) color = '#ff4d4f';
src\pages\AIAnalysis.tsx:153 | else if (impact === '涓?) color = '#fa8c16';
src\pages\AIAnalysis.tsx:154 | else if (impact === '浣?) color = '#52c41a';
src\pages\AIAnalysis.tsx:161 | if (priority === '楂?) color = '#ff4d4f';
src\pages\AIAnalysis.tsx:162 | else if (priority === '涓?) color = '#fa8c16';
src\pages\AIAnalysis.tsx:163 | else if (priority === '浣?) color = '#52c41a';
src\pages\AIAnalysis.tsx:195 | AI 鏅鸿兘璇婃柇涓庡垎鏋愪腑蹇?src\pages\AIAnalysis.tsx:198 | <Button icon={<ReloadOutlined />}>鍒锋柊鏁版嵁</Button>
src\pages\AIAnalysis.tsx:199 | <Button type="primary">瀵煎嚭鎶ュ憡</Button>
src\pages\AIAnalysis.tsx:206 | { title: 'PR鍊?(鎬ц兘姣?', value: '82.6%', trend: '杈冩槰鏃?-1.3%', icon: <RiseOutlined />, color: '#00B42A', bg: '#E8FFEA', trendColor: '#F53F3F', direction: 'down' },
src\pages\AIAnalysis.tsx:207 | { title: '鍙戠數鍋忓樊鐜?, value: '-4.35%', trend: '杈冩槰鏃?-1.02%', icon: <FallOutlined />, color: '#F53F3F', bg: '#FFF1F0', trendColor: '#F53F3F', direction: 'down' },
src\pages\AIAnalysis.tsx:208 | { title: '寮傚父缁勪覆鏁伴噺', value: '8', trend: '杈冩槰鏃?+2 鈫?, icon: <AppstoreOutlined />, color: '#1D2129', bg: '#F5F7FA', trendColor: '#F53F3F', direction: 'up' },
src\pages\AIAnalysis.tsx:209 | { title: '鐑枒鐤戜技鏁伴噺', value: '36', trend: '杈冩槰鏃?+5 鈫?, icon: <BellOutlined />, color: '#F53F3F', bg: '#FFF1F0', trendColor: '#F53F3F', direction: 'up' },
src\pages\AIAnalysis.tsx:210 | { title: '鐢电珯鍋ュ悍搴﹁瘎鍒?, value: '86.3', unit: '鍒?, trend: '杈冩槰鏃?-1.7', icon: <CheckCircleOutlined />, color: '#00B42A', bg: '#E8FFEA', trendColor: '#F53F3F', direction: 'down' },
src\pages\AIAnalysis.tsx:211 | { title: '棰勬祴鍙戠數閲?, value: '4,821', unit: t('home.kWh'), trend: '杈冩槰鏃?+2.6% 鈫?, icon: <ThunderboltOutlined />, color: '#165DFF', bg: '#E8F3FF', trendColor: '#00B42A', direction: 'up' },
src\pages\AIAnalysis.tsx:248 | title={<span style={{ fontSize: 15, fontWeight: 700, color: '#1D2129' }}>鏃犱汉鏈虹儹鎴愬儚宸℃鍒嗘瀽<InfoCircleOutlined style={{ marginLeft: 6, color: '#86909C', fontSize: 13 }} /></span>}
src\pages\AIAnalysis.tsx:249 | extra={<Text type="secondary" style={{ fontSize: 12 }}>宸℃锛?025-05-20 09:30 <CalendarOutlined style={{ marginLeft: 4 }} /></Text>}
src\pages\AIAnalysis.tsx:266 | {item.status === 'serious' ? '楂樺嵄' : '娉ㄦ剰'}
src\pages\AIAnalysis.tsx:276 | <span style={{ display: 'flex', alignItems: 'center', color: '#1D2129' }}><AimOutlined style={{ color: '#F53F3F', marginRight: 6 }} />鐑枒鐤戜技鐐?/span>
src\pages\AIAnalysis.tsx:277 | <span style={{ display: 'flex', alignItems: 'center', color: '#1D2129' }}><div style={{ width: 14, height: 10, border: '1.5px dashed #F53F3F', borderRadius: 2, marginRight: 6 }}></div>楂樻俯鍖哄煙</span>
src\pages\AIAnalysis.tsx:280 | <span style={{ fontSize: 12, color: '#86909C' }}>娓╁害鍒嗗竷: 25鈩?~ 85鈩?/span>
src\pages\AIAnalysis.tsx:288 | title={<span style={{ fontSize: 15, fontWeight: 700, color: '#1D2129' }}>缁勪覆瀹炴椂鐘舵€佸畾浣嶅浘<InfoCircleOutlined style={{ marginLeft: 6, color: '#86909C', fontSize: 13 }} /></span>}
src\pages\AIAnalysis.tsx:290 | <span>鎬荤粍涓? <b style={{ color: '#1D2129' }}>160</b></span>
src\pages\AIAnalysis.tsx:291 | <span>寮傚父: <b style={{ color: '#F53F3F' }}>8</b></span>
src\pages\AIAnalysis.tsx:308 | <div style={{ fontSize: 11, color: '#86909C', display: 'flex', alignItems: 'center', fontWeight: 600 }}>{row}鎺?/div>
src\pages\AIAnalysis.tsx:310 | let color = '#E8F3FF'; // 姝e父
src\pages\AIAnalysis.tsx:312 | let tooltip = `缁勪覆 ${row}-${col + 1}: 姝e父`;
src\pages\AIAnalysis.tsx:315 | if (row === 'B' && col === 3) { color = '#F53F3F'; icon = <div style={{ width: 6, height: 6, background: '#fff', borderRadius: '50%' }} />; tooltip = `缁勪覆 ${row}-${col + 1}: 涓ラ噸寮傚父 (鐑枒)`; }
src\pages\AIAnalysis.tsx:316 | if (row === 'B' && col === 17) { color = '#F53F3F'; icon = <div style={{ width: 6, height: 6, background: '#fff', borderRadius: '50%' }} />; tooltip = `缁勪覆 ${row}-${col + 1}: 涓ラ噸寮傚父 (鏂矾)`; }
src\pages\AIAnalysis.tsx:317 | if (row === 'C' && col === 15) { color = '#FF7D00'; icon = <div style={{ width: 6, height: 6, background: '#fff', borderRadius: '50%' }} />; tooltip = `缁勪覆 ${row}-${col + 1}: 寮傚父 (鍔熺巼鍋忓樊)`; }
src\pages\AIAnalysis.tsx:318 | if (row === 'E' && col === 4) { color = '#FF7D00'; icon = <div style={{ width: 6, height: 6, background: '#fff', borderRadius: '50%' }} />; tooltip = `缁勪覆 ${row}-${col + 1}: 寮傚父 (閬尅)`; }
src\pages\AIAnalysis.tsx:319 | if (row === 'F' && col === 11) { color = '#F7BA1E'; icon = <div style={{ width: 6, height: 6, background: '#fff', borderRadius: '50%' }} />; tooltip = `缁勪覆 ${row}-${col + 1}: 杞诲井寮傚父`; }
src\pages\AIAnalysis.tsx:320 | if (row === 'G' && col === 1) { color = '#F7BA1E'; icon = <div style={{ width: 6, height: 6, background: '#fff', borderRadius: '50%' }} />; tooltip = `缁勪覆 ${row}-${col + 1}: 杞诲井寮傚父`; }
src\pages\AIAnalysis.tsx:321 | if (row === 'H' && col === 10) { color = '#86909C'; tooltip = `缁勪覆 ${row}-${col + 1}: 绂荤嚎`; }
src\pages\AIAnalysis.tsx:338 | { color: '#E8F3FF', label: '杩愯姝e父' },
src\pages\AIAnalysis.tsx:339 | { color: '#F7BA1E', label: '杞诲井寮傚父' },
src\pages\AIAnalysis.tsx:340 | { color: '#FF7D00', label: '鍔熺巼寮傚父' },
src\pages\AIAnalysis.tsx:341 | { color: '#F53F3F', label: '涓ラ噸鏁呴殰' },
src\pages\AIAnalysis.tsx:342 | { color: '#86909C', label: '璁惧绂荤嚎' },
src\pages\AIAnalysis.tsx:354 | <WarningOutlined style={{ marginRight: 8, color: '#F53F3F' }} />寮傚父绫诲瀷鍒嗗竷
src\pages\AIAnalysis.tsx:358 | { label: '涓ラ噸鏁呴殰', value: 2, color: '#F53F3F', percent: '25%' },
src\pages\AIAnalysis.tsx:359 | { label: '鍔熺巼寮傚父', value: 4, color: '#FF7D00', percent: '50%' },
src\pages\AIAnalysis.tsx:360 | { label: '杞诲井寮傚父', value: 2, color: '#F7BA1E', percent: '25%' },
src\pages\AIAnalysis.tsx:361 | { label: '绂荤嚎缁勪覆', value: 0, color: '#86909C', percent: '0%' },
src\pages\AIAnalysis.tsx:375 | <Button block type="dashed" size="small" style={{ fontSize: 12 }}>鏌ョ湅璇︾粏瀹氫綅琛?/Button>
src\pages\AIAnalysis.tsx:387 | title={<span style={{ fontSize: 15, fontWeight: 700, color: '#1D2129' }}>缁勪欢琛板噺瓒嬪娍鍒嗘瀽<InfoCircleOutlined style={{ marginLeft: 6, color: '#86909C', fontSize: 13 }} /></span>}
src\pages\AIAnalysis.tsx:393 | <span>琛板噺鐜囪秼鍔?(%)</span>
src\pages\AIAnalysis.tsx:394 | <span style={{ color: '#F53F3F', fontWeight: 600 }}>褰撳墠鍧囧€? -5.32%</span>
src\pages\AIAnalysis.tsx:407 | name: '骞冲潎琛板噺鐜?,
src\pages\AIAnalysis.tsx:413 | name: '鏈€浣崇粍浠?,
src\pages\AIAnalysis.tsx:419 | name: '鏈€宸粍浠?,
src\pages\AIAnalysis.tsx:427 | <span style={{ color: '#1D2129', fontWeight: 600 }}>琛板噺棰勮:</span>
src\pages\AIAnalysis.tsx:428 | <span style={{ marginLeft: 4 }}>12鍧楃粍浠惰“鍑忚秴鏍? 寤鸿鎺掓煡銆?/span>
src\pages\AIAnalysis.tsx:436 | title={<span style={{ fontSize: 15, fontWeight: 700, color: '#1D2129' }}>瀹炴椂鍙戠數琛ㄧ幇娣卞害鍒嗘瀽<InfoCircleOutlined style={{ marginLeft: 6, color: '#86909C', fontSize: 13 }} /></span>}
src\pages\AIAnalysis.tsx:443 | <div style={{ fontSize: 12, color: '#86909C', marginBottom: 16 }}>鍙戠數閲忓姣斿垎鏋?(kWh)</div>
src\pages\AIAnalysis.tsx:455 | name: '瀹為檯鍙戠數',
src\pages\AIAnalysis.tsx:461 | name: '棰勬祴鍙戠數',
src\pages\AIAnalysis.tsx:467 | name: '鐞嗚鍙戠數',
src\pages\AIAnalysis.tsx:475 | { label: '褰撴棩瀹為檯鍙戠數', value: '4,752', unit: t('home.kWh'), color: '#165DFF' },
src\pages\AIAnalysis.tsx:476 | { label: '褰撴棩棰勬祴鍙戠數', value: '4,960', unit: t('home.kWh'), color: '#00B42A' },
src\pages\AIAnalysis.tsx:477 | { label: '鍙戠數鍋忓樊鐜?, value: '-4.35%', unit: '', color: '#F53F3F' },
src\pages\AIAnalysis.tsx:478 | { label: '瀹炴椂 PR 鍊?, value: '82.6%', unit: '', color: '#1D2129' },
src\pages\AIAnalysis.tsx:499 | <span style={{ fontSize: 14, fontWeight: 700, color: '#1D2129' }}>AI 璇婃柇鎬荤粨</span>
src\pages\AIAnalysis.tsx:500 | <span style={{ fontSize: 12, color: '#86909C' }}>鏇存柊鏃堕棿: 2025-05-20 09:45</span>
src\pages\AIAnalysis.tsx:504 | { title: '璇婃柇椤?, dataIndex: 'diagnosis', width: 78 },
src\pages\AIAnalysis.tsx:507 | { title: '褰卞搷', dataIndex: 'impact', render: renderImpactTag, width: 52 },
src\pages\AIAnalysis.tsx:508 | { title: '璇︽儏', dataIndex: 'detail', ellipsis: true },
src\pages\AIAnalysis.tsx:511 | { key: '1', diagnosis: t('aiAnalysis.hotspotDetection'), status: t('home.abnormal'), confidence: '92%', impact: '楂?, detail: '妫€娴嬪埌 36 澶勭儹鏂戠枒浼肩偣' },
src\pages\AIAnalysis.tsx:512 | { key: '2', diagnosis: '缁勪覆澶遍厤', status: t('home.abnormal'), confidence: '90%', impact: '楂?, detail: '8 涓茬粍涓插瓨鍦ㄥ紓甯? },
src\pages\AIAnalysis.tsx:513 | { key: '3', diagnosis: '閬尅椋庨櫓', status: '杞诲井', confidence: '78%', impact: '涓?, detail: '灞€閮ㄩ伄鎸″奖鍝?2% 鍙戠數閲? },
src\pages\AIAnalysis.tsx:514 | { key: '4', diagnosis: '缁勪欢琛板噺', status: t('home.abnormal'), confidence: '86%', impact: '涓?, detail: '骞冲潎琛板噺鐜?-5.32%' },
src\pages\AIAnalysis.tsx:515 | { key: '5', diagnosis: '閫嗗彉鍣ㄥ紓甯?, status: t('roles.normal'), confidence: '93%', impact: '浣?, detail: '鎵€鏈夐€嗗彉鍣ㄨ繍琛屾甯? },
src\pages\AIAnalysis.tsx:528 | AI 寤鸿涓庡缃?src\pages\AIAnalysis.tsx:532 | { title: '寤鸿鎺柦', dataIndex: 'measure', ellipsis: true },
src\pages\AIAnalysis.tsx:534 | { title: '鏀剁泭', dataIndex: 'gain', render: g => <span style={{ color: '#00B42A', fontWeight: 600 }}>{g}</span>, width: 68 },
src\pages\AIAnalysis.tsx:546 | {record.isView ? '璇︽儏' : t('workOrder.dispatch')}
src\pages\AIAnalysis.tsx:552 | { key: '1', measure: '澶勭悊鐑枒缁勪欢', priority: '楂?, gain: '+2.15%', confidence: '92%', isView: false },
src\pages\AIAnalysis.tsx:553 | { key: '2', measure: '鎺掓煡寮傚父缁勪覆', priority: '楂?, gain: '+1.85%', confidence: '90%', isView: false },
src\pages\AIAnalysis.tsx:554 | { key: '3', measure: '娓呮礂鍙楅伄鎸″尯鍩?, priority: '涓?, gain: '+0.45%', confidence: '78%', isView: false },
src\pages\AIAnalysis.tsx:555 | { key: '4', measure: '璺熻釜琛板噺缁勪欢', priority: '涓?, gain: '+0.35%', confidence: '86%', isView: false },
src\pages\AIAnalysis.tsx:556 | { key: '5', measure: '鐩戞帶閫嗗彉鍣ㄦ晥鐜?, priority: '浣?, gain: '+0.10%', confidence: '93%', isView: true },
src\pages\AIAnalysis.tsx:570 | title={<span style={{ fontSize: 15, fontWeight: 700, color: '#1D2129' }}>鍏ㄦ爤鏁版嵁铻嶅悎鏉ユ簮</span>}
src\pages\AIAnalysis.tsx:577 | { title: '鏃犱汉鏈鸿浇鑽风儹鎴愬儚', time: '2025-05-20 09:30', icon: <ScanOutlined />, status: '鍚屾涓? },
src\pages\AIAnalysis.tsx:578 | { title: 'SCADA 瀹炴椂閬ユ祴鏁版嵁', time: '2025-05-20 09:45:12', icon: <DatabaseOutlined />, status: t('roles.normal') },
src\pages\AIAnalysis.tsx:579 | { title: '浜戠姘旇薄鍒嗘瀽绔?, time: '2025-05-20 09:45:00', icon: <CloudOutlined />, status: t('roles.normal') },
src\pages\AIAnalysis.tsx:580 | { title: '鐢电珯杩愮淮璧勪骇搴?, time: '鏈€杩戞洿鏂? 2025-05-18', icon: <RestOutlined />, status: t('roles.normal') },
src\pages\AIAnalysis.tsx:589 | <div style={{ fontSize: 12, color: '#86909C', marginTop: 4, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>鏁版嵁鐐? {source.time}</div>
src\pages\AIAnalysis.tsx:592 | 鐘舵€? {source.status}
src\pages\CleanOptimization.tsx:41 | { id: '璁″垝 01', priority: '楂?, area: '鍖哄潡 15, 01', boost: '4,250 kWh', weather: '88%' },
src\pages\CleanOptimization.tsx:42 | { id: '璁″垝 02', priority: '楂?, area: '鍖哄潡 02, 11', boost: '3,180 kWh', weather: '85%' },
src\pages\CleanOptimization.tsx:43 | { id: '璁″垝 03', priority: '涓?, area: '鍖哄潡 05, 12', boost: '2,210 kWh', weather: '80%' },
src\pages\CleanOptimization.tsx:44 | { id: '璁″垝 04', priority: '涓?, area: '鍖哄潡 07, 03', boost: '1,620 kWh', weather: '78%' },
src\pages\CleanOptimization.tsx:45 | { id: '璁″垝 05', priority: '浣?, area: '鍖哄潡 17, 13', boost: '1,210 kWh', weather: '82%' },
src\pages\CleanOptimization.tsx:49 | { area: '鍖哄潡 15', priority: '楂?, duration: '4.0 h', handler: '鏉庡伐', planTime: '2025-05-26 - 05-27', status: '寰呭垱寤? },
src\pages\CleanOptimization.tsx:50 | { area: '鍖哄潡 01', priority: '楂?, duration: '3.5 h', handler: '鏉庡伐', planTime: '2025-05-26 - 05-27', status: '寰呭垱寤? },
src\pages\CleanOptimization.tsx:51 | { area: '鍖哄潡 02', priority: '楂?, duration: '2.8 h', handler: '鐜嬪伐', planTime: '2025-05-28 - 05-29', status: '寰呭垱寤? },
src\pages\CleanOptimization.tsx:52 | { area: '鍖哄潡 11', priority: '楂?, duration: '2.6 h', handler: '鐜嬪伐', planTime: '2025-05-28 - 05-29', status: '寰呭垱寤? },
src\pages\CleanOptimization.tsx:53 | { area: '鍖哄潡 05', priority: '涓?, duration: '2.2 h', handler: '璧靛伐', planTime: '2025-05-29 - 05-30', status: '寰呭垱寤? },
src\pages\CleanOptimization.tsx:70 | { date: 'D-7', value: 800, type: '娓呮礂鍓嶅彂鐢甸噺' },
src\pages\CleanOptimization.tsx:71 | { date: 'D-7', value: 1200, type: '娓呮礂鍚庡彂鐢甸噺' },
src\pages\CleanOptimization.tsx:72 | { date: 'D-6', value: 850, type: '娓呮礂鍓嶅彂鐢甸噺' },
src\pages\CleanOptimization.tsx:73 | { date: 'D-6', value: 1250, type: '娓呮礂鍚庡彂鐢甸噺' },
src\pages\CleanOptimization.tsx:74 | { date: 'D-5', value: 900, type: '娓呮礂鍓嶅彂鐢甸噺' },
src\pages\CleanOptimization.tsx:75 | { date: 'D-5', value: 1300, type: '娓呮礂鍚庡彂鐢甸噺' },
src\pages\CleanOptimization.tsx:76 | { date: 'D-4', value: 880, type: '娓呮礂鍓嶅彂鐢甸噺' },
src\pages\CleanOptimization.tsx:77 | { date: 'D-4', value: 1280, type: '娓呮礂鍚庡彂鐢甸噺' },
src\pages\CleanOptimization.tsx:78 | { date: 'D-3', value: 920, type: '娓呮礂鍓嶅彂鐢甸噺' },
src\pages\CleanOptimization.tsx:79 | { date: 'D-3', value: 1320, type: '娓呮礂鍚庡彂鐢甸噺' },
src\pages\CleanOptimization.tsx:80 | { date: 'D-2', value: 950, type: '娓呮礂鍓嶅彂鐢甸噺' },
src\pages\CleanOptimization.tsx:81 | { date: 'D-2', value: 1350, type: '娓呮礂鍚庡彂鐢甸噺' },
src\pages\CleanOptimization.tsx:82 | { date: 'D-1', value: 980, type: '娓呮礂鍓嶅彂鐢甸噺' },
src\pages\CleanOptimization.tsx:83 | { date: 'D-1', value: 1380, type: '娓呮礂鍚庡彂鐢甸噺' },
src\pages\CleanOptimization.tsx:117 | { name: '鐏板皹绉疮', value: 6120, color: '#165DFF' },
src\pages\CleanOptimization.tsx:118 | { name: '楦熺勃閬尅', value: 1480, color: '#F53F3F' },
src\pages\CleanOptimization.tsx:119 | { name: '娌欏皹娌夌Н', value: 1120, color: '#F7BA1E' },
src\pages\CleanOptimization.tsx:125 | '楂?: { color: '#ff4d4f', bg: '#fff1f0' },
src\pages\CleanOptimization.tsx:126 | '涓?: { color: '#faad14', bg: '#fff7e6' },
src\pages\CleanOptimization.tsx:127 | '浣?: { color: '#52c41a', bg: '#f6ffed' },
src\pages\CleanOptimization.tsx:169 | title: '姹℃煋鎸囨暟',
src\pages\CleanOptimization.tsx:172 | tag: '涓瓑',
src\pages\CleanOptimization.tsx:174 | trend: '杈冩槰鏃?鈻?5.3',
src\pages\CleanOptimization.tsx:181 | title: '寤鸿娓呮礂鍖哄潡鏁?,
src\pages\CleanOptimization.tsx:184 | trend: '鍗犳瘮 40%',
src\pages\CleanOptimization.tsx:190 | title: '棰勮鍙戠數鎻愬崌',
src\pages\CleanOptimization.tsx:193 | trend: '鍗犲綋鍓嶆棩鍙戠數閲?14.2%',
src\pages\CleanOptimization.tsx:199 | title: '棰勮鏀剁泭鎻愬崌',
src\pages\CleanOptimization.tsx:202 | trend: '鎸夌數浠?0.568 鍏?kWh 璁$畻',
src\pages\CleanOptimization.tsx:208 | title: '涓婃娓呮礂鏃堕棿',
src\pages\CleanOptimization.tsx:211 | trend: '璺濅粖 12 澶?,
src\pages\CleanOptimization.tsx:217 | title: '娓呮礂鎴愭湰棰勪及',
src\pages\CleanOptimization.tsx:220 | trend: '棰勮鍗曟娓呮礂鎬绘垚鏈?,
src\pages\CleanOptimization.tsx:283 | <Typography.Title level={4} style={{ margin: 0, fontSize: 'clamp(18px, 1.5vw, 24px)', }}>娓呮礂浼樺寲绠$悊</Typography.Title>
src\pages\CleanOptimization.tsx:287 | <Text type="secondary" style={{ fontSize: 12 }}><ReloadOutlined /> 鏇存柊鏃堕棿锛?025-05-24 09:30</Text>
src\pages\CleanOptimization.tsx:288 | <Button icon={<ReloadOutlined />}>鍒锋柊鏁版嵁</Button>
src\pages\CleanOptimization.tsx:290 | <Option value="7d">鏈€杩?7 澶?/Option>
src\pages\CleanOptimization.tsx:291 | <Option value="30d">鏈€杩?30 澶?/Option>
src\pages\CleanOptimization.tsx:293 | <Button type="primary" icon={<DownloadOutlined />}>瀵煎嚭鎶ュ憡</Button>
src\pages\CleanOptimization.tsx:300 | <Card title={<span style={{ fontSize: 14, fontWeight: 700 }}>姹℃煋瓒嬪娍鍒嗘瀽</span>} bordered={false} style={cardStyle} bodyStyle={{ padding: 16 }}>
src\pages\CleanOptimization.tsx:302 | <span>姹℃煋鎸囨暟</span>
src\pages\CleanOptimization.tsx:304 | <span style={{ display: 'flex', alignItems: 'center' }}><div style={{ width: 8, height: 8, background: '#165DFF', marginRight: 4 }}></div>姹℃煋鎸囨暟</span>
src\pages\CleanOptimization.tsx:305 | <span style={{ display: 'flex', alignItems: 'center' }}><div style={{ width: 8, height: 2, borderBottom: '1px dashed #F53F3F', marginRight: 4 }}></div>闃堝€?/span>
src\pages\CleanOptimization.tsx:316 | name: '姹℃煋鎸囨暟',
src\pages\CleanOptimization.tsx:322 | name: '闃堝€?,
src\pages\CleanOptimization.tsx:331 | <Card title={<span style={{ fontSize: 14, fontWeight: 700 }}>鍙戠數鎹熷け鏋勬垚 <Text type="secondary" style={{ fontWeight: 400, fontSize: 12 }}>(杩?7 澶?</Text></span>} bordered={false} style={cardStyle} bodyStyle={{ padding: 16 }}>
src\pages\CleanOptimization.tsx:341 | <div style={{ fontSize: 10, color: '#86909C' }}>鎬绘崯澶辩數閲?/div>
src\pages\CleanOptimization.tsx:348 | <Card title={<span style={{ fontSize: 14, fontWeight: 700 }}>娓呮礂鍓嶅悗瀵规瘮鍒嗘瀽 <Text type="secondary" style={{ fontWeight: 400, fontSize: 12 }}>(杩戜竴娆?</Text></span>} bordered={false} style={cardStyle} bodyStyle={{ padding: 16 }}>
src\pages\CleanOptimization.tsx:357 | name: '娓呮礂鍓嶅彂鐢甸噺(kWh)',
src\pages\CleanOptimization.tsx:362 | name: '娓呮礂鍚庡彂鐢甸噺(kWh)',
src\pages\CleanOptimization.tsx:369 | <Card title={<span style={{ fontSize: 14, fontWeight: 700 }}>娓呮礂鏀剁泭娣卞害娴嬬畻</span>} bordered={false} style={cardStyle} bodyStyle={{ padding: 16 }}>
src\pages\CleanOptimization.tsx:372 | <div style={{ fontSize: 11, color: '#86909C', marginBottom: 4 }}>棰勮鍙戠數鎻愬崌</div>
src\pages\CleanOptimization.tsx:376 | <div style={{ fontSize: 11, color: '#86909C', marginBottom: 4 }}>鐢典环 (鍚◣)</div>
src\pages\CleanOptimization.tsx:377 | <div style={{ fontSize: 15, fontWeight: 800 }}>0.568 <span style={{ fontSize: 11, fontWeight: 400 }}>鍏?kWh</span></div>
src\pages\CleanOptimization.tsx:380 | <div style={{ fontSize: 11, color: '#86909C', marginBottom: 4 }}>棰勮鍑€鏀剁泭</div>
src\pages\CleanOptimization.tsx:381 | <div style={{ fontSize: 15, fontWeight: 800, color: '#00B42A' }}>7,286 <span style={{ fontSize: 11, fontWeight: 400 }}>鍏?/span></div>
src\pages\CleanOptimization.tsx:384 | <div style={{ fontSize: 11, color: '#86909C', marginBottom: 4 }}>ROI (鎶曡祫鍥炴姤)</div>
src\pages\CleanOptimization.tsx:390 | <span style={{ fontSize: 12, color: '#86909C' }}>鍥炴敹鍛ㄦ湡</span>
src\pages\CleanOptimization.tsx:391 | <span style={{ fontSize: 18, fontWeight: 800 }}>0.44 <Text style={{ fontSize: 12 }}>澶?/Text></span>
src\pages\CleanOptimization.tsx:399 | title={<span style={{ fontSize: 15, fontWeight: 700 }}>鐢电珯姹℃煋鍒嗗竷涓庡缓璁竻娲楀尯鍧楀垎甯冨浘</span>}
src\pages\CleanOptimization.tsx:406 | <span style={{ color: '#86909C' }}>姹℃煋绛夌骇:</span>
src\pages\CleanOptimization.tsx:407 | <Badge color="#F53F3F" text="浼樺厛娓呮礂 (>75)" />
src\pages\CleanOptimization.tsx:408 | <Badge color="#FF7D00" text="杈冮珮 (50-75)" />
src\pages\CleanOptimization.tsx:409 | <Badge color="#F7BA1E" text="涓瓑 (25-50)" />
src\pages\CleanOptimization.tsx:410 | <Badge color="#D1FF6B" text="杈冧綆 (10-25)" />
src\pages\CleanOptimization.tsx:411 | <Badge color="#00B42A" text="娓呮磥 (<10)" />
src\pages\CleanOptimization.tsx:438 | <div style={{ fontSize: 9, opacity: 0.9 }}>鍖哄潡 {block.id}</div>
src\pages\CleanOptimization.tsx:455 | title={<span style={{ fontSize: 15, fontWeight: 700 }}>娓呮礂宸ュ崟鏅鸿兘棰勮</span>}
src\pages\CleanOptimization.tsx:456 | extra={<Button type="link" size="small">鏌ョ湅鏇村 <ChevronRight size={14} /></Button>}
src\pages\CleanOptimization.tsx:463 | { title: '鍖哄潡', dataIndex: 'area', key: 'area' },
src\pages\CleanOptimization.tsx:465 | { title: '棰勮宸ユ椂', dataIndex: 'duration', key: 'duration' },
src\pages\CleanOptimization.tsx:467 | { title: '璁″垝鏃堕棿', dataIndex: 'planTime', key: 'planTime' },
src\pages\CleanOptimization.tsx:469 | { title: t('roles.actions'), key: 'action', render: () => <Button type="primary" size="small" style={{ borderRadius: 4 }}>鍒涘缓宸ュ崟</Button> },
src\pages\CleanOptimization.tsx:481 | <Card title={<span style={{ fontSize: 14, fontWeight: 700 }}>鏅鸿兘娓呮礂绛栫暐寤鸿</span>} bordered={false} style={cardStyle} bodyStyle={{ padding: 0 }}>
src\pages\CleanOptimization.tsx:483 | <Text type="secondary" style={{ fontSize: 11 }}>绠楁硶妯″瀷锛氬鍥犲瓙鍔犳潈缁煎悎浼樺寲妯″瀷 (v2.0)</Text>
src\pages\CleanOptimization.tsx:487 | { title: '鎺ㄨ崘璁″垝', dataIndex: 'id', key: 'id', width: 85 },
src\pages\CleanOptimization.tsx:488 | { title: t('workOrder.priority'), dataIndex: 'priority', key: 'priority', render: (p) => <span style={{ color: p === '楂? ? '#F53F3F' : '#F7BA1E', fontWeight: 600 }}>{p}</span>, width: 65 },
src\pages\CleanOptimization.tsx:489 | { title: '寤鸿鍖哄潡', dataIndex: 'area', key: 'area' },
src\pages\CleanOptimization.tsx:490 | { title: '棰勮鎻愬崌', dataIndex: 'boost', key: 'boost', render: (b) => <span style={{ color: '#00B42A', fontWeight: 600 }}>{b}</span> },
src\pages\CleanOptimization.tsx:491 | { title: '澶╂皵閫傚疁搴?, dataIndex: 'weather', key: 'weather', render: (w) => <Space size={4}>{w} <SunOutlined style={{ color: '#F7BA1E' }} /></Space> },
src\pages\CleanOptimization.tsx:500 | <Card title={<span style={{ fontSize: 14, fontWeight: 700 }}>娓呮礂鎶€鏈柟妗堟帹鑽?/span>} bordered={false} style={cardStyle} bodyStyle={{ padding: 16 }}>
src\pages\CleanOptimization.tsx:506 | <Text strong style={{ fontSize: 13, color: '#391085' }}>鏅鸿兘鏈哄櫒浜烘柟妗?/Text>
src\pages\CleanOptimization.tsx:508 | <div style={{ fontSize: 11, color: '#531DAB', marginBottom: 12, lineHeight: 1.5 }}>鍏ㄨ嚜鍔ㄦ竻娲楋紝閫傚悎澶ч潰绉钩鏁村尯鍧楋紝鏁堢巼鏋侀珮銆?/div>
src\pages\CleanOptimization.tsx:510 | <span style={{ color: '#8c8c8c' }}>棰勮鐢ㄦ按:</span>
src\pages\CleanOptimization.tsx:511 | <Text strong>18 鍚?/Text>
src\pages\CleanOptimization.tsx:519 | <Text strong style={{ fontSize: 13, color: '#003A8C' }}>浜哄伐绮剧粏鍖栨柟妗?/Text>
src\pages\CleanOptimization.tsx:521 | <div style={{ fontSize: 11, color: '#0050B3', marginBottom: 12, lineHeight: 1.5 }}>鐏垫椿澶勭悊閬尅鍙婁弗閲嶆薄鍨㈠尯鍩燂紝閫傚悎澶嶆潅鍦板舰銆?/div>
src\pages\CleanOptimization.tsx:523 | <span style={{ color: '#8c8c8c' }}>棰勮鐢ㄦ按:</span>
src\pages\CleanOptimization.tsx:524 | <Text strong>32 鍚?/Text>
src\pages\CleanOptimization.tsx:531 | <Card title={<span style={{ fontSize: 14, fontWeight: 700 }}>澶╂皵涓庤祫婧愮幆澧冨弬鑰?<Text type="secondary" style={{ fontSize: 12, fontWeight: 400 }}>(璁″垝 01)</Text></span>} bordered={false} style={cardStyle} bodyStyle={{ padding: 16 }
src\pages\CleanOptimization.tsx:535 | <div style={{ fontSize: 11, color: '#86909C' }}>05-26 (鍛ㄤ竴)</div>
src\pages\CleanOptimization.tsx:537 | <div style={{ fontSize: 12, fontWeight: 700 }}>澶氫簯 18~28鈩?/div>
src\pages\CleanOptimization.tsx:542 | <div style={{ fontSize: 11, color: '#86909C' }}>05-27 (鍛ㄤ簩)</div>
src\pages\CleanOptimization.tsx:544 | <div style={{ fontSize: 12, fontWeight: 700 }}>鏅?19~30鈩?/div>
src\pages\CleanOptimization.tsx:550 | <Wind size={14} style={{ color: '#86909C' }} /><span style={{ fontSize: 11 }}>椋庨€? <b style={{ color: '#00B42A' }}>2.1m/s (閫傚疁)</b></span>
src\pages\CleanOptimization.tsx:553 | <CloudRain size={14} style={{ color: '#86909C' }} /><span style={{ fontSize: 11 }}>闄嶆按: <b style={{ color: '#86909C' }}>10% (浣?</b></span>
src\pages\CleanOptimization.tsx:556 | <Droplets size={14} style={{ color: '#165DFF' }} /><span style={{ fontSize: 11 }}>姘存簮: <b style={{ color: '#165DFF' }}>鍏呰冻 (50t)</b></span>
src\pages\CleanOptimization.tsx:563 | <Card title={<span style={{ fontSize: 14, fontWeight: 700 }}>娓呮礂浣滀笟褰卞搷缁煎悎璇勪及</span>} bordered={false} style={cardStyle} bodyStyle={{ padding: 16 }}>
src\pages\CleanOptimization.tsx:566 | { icon: <Droplets size={18} color="#165DFF" />, bg: '#E8F3FF', label: '棰勮鐢ㄦ按閲?, value: '18 鍚?, sub: '鑺傛按 30% (鏈哄櫒浜?', subColor: '#00B42A' },
src\pages\CleanOptimization.tsx:567 | { icon: <Calendar size={18} color="#165DFF" />, bg: '#E8F3FF', label: '棰勮鎬昏€楁椂', value: '12 灏忔椂', sub: '骞惰浣滀笟 2 缁?, subColor: '#86909C' },
src\pages\CleanOptimization.tsx:568 | { icon: <Leaf size={18} color="#00B42A" />, bg: '#E8FFEA', label: '纰冲噺鎺掕础鐚?, value: '6.85 鍚?, sub: 'CO鈧?鍑忔帓閲?, subColor: '#86909C' },
src\pages\CleanOptimization.tsx:569 | { icon: <ShieldCheck size={18} color="#F7BA1E" />, bg: '#FFF7E8', label: '浣滀笟椋庨櫓璇勪及', value: t('aiAnalysis.lowRisk'), valueColor: '#00B42A', sub: '瀹夊叏鍙帶', subColor: '#86909C' },
src\pages\CleanOptimization.tsx:586 | 浠ヤ笂鍐崇瓥寤鸿鍩轰簬鍘嗗彶鏁版嵁銆佸疄鏃舵皵璞″強鍙戠數鎹熷け妯″瀷缁煎悎璁$畻銆傚疄闄呮墽琛屾晥鏋滃彲鑳藉彈澶╂皵楠ゅ彉銆佺幇鍦虹獊鍙戦殰纰嶇瓑涓嶇‘瀹氬洜绱犲奖鍝嶃€?src\pages\Home.tsx:48 | province: "姹熻嫃鐪?,
src\pages\Home.tsx:49 | city: "鍗楅€氬競",
src\pages\Home.tsx:50 | district: "宕囧窛鍖?,
src\pages\Home.tsx:52 | weather: "鏅?,
src\pages\Home.tsx:55 | wind_direction: "瑗垮崡椋?,
src\pages\Home.tsx:56 | wind_power: "2绾?,
src\pages\Home.tsx:91 | { name: t('home.combinerBox'), count: "2/2", status: "寮傚父 1" },
src\pages\Home.tsx:92 | { name: t('home.inverter'), count: "3/3", status: "寮傚父 1" },
src\pages\Home.tsx:93 | { name: "鐢佃〃", count: "1/1", status: t('roles.normal') },
src\pages\Home.tsx:98 | { name: "鍗囧帇绔欏畨闃插贰妫€浠诲姟", device: "UAV-01", status: "鑽夌", time: "04-29T...", person: "寮犺繍缁? },
src\pages\Home.tsx:99 | { name: "B鍖烘竻娲椾换鍔?, device: "CLEAN-01", status: "寰呮墽琛?, time: "04-29T...", person: "寮犺繍缁? },
src\pages\Home.tsx:100 | { name: "A鍖哄贰妫€浠诲姟", device: "ROBOT-01", status: "宸叉淳鍙?, time: "04-29T...", person: "寮犺繍缁? }
src\pages\Home.tsx:104 | { type: "AI鍒嗘瀽", content: "AI鍙戠幇閫嗗彉鍣ㄦ俯搴︿笌缁勪覆鐢垫祦瀛樺湪杞诲井寮傚父锛屽缓璁紭鍏堝鏍窤鍖鸿澶囥€?, desc: "鍙戠幇2澶勭粍浠跺瓨鍦ㄥ紓甯哥儹鏂? },
src\pages\Home.tsx:105 | { type: t('constants.critical'), content: "INV-A02鏁g儹妫€淇缓璁細寤鸿妫€鏌NV-A02鏁g儹椋庢墖銆侀閬撳拰杩愯璐熻浇锛屾寔缁珮娓╂椂杞淮淇伐鍗曘€?, desc: "3涓粍涓插瓨鍦ㄥ彂鐢靛紓甯? },
src\pages\Home.tsx:106 | { type: t('constants.critical'), content: "A05闃靛垪鐑枒澶勭疆寤鸿锛氬缓璁幇鍦哄鏍窹V-A05-018鑷砅V-A05-020缁勪欢鎺ョ嚎鍜屾梺璺簩鏋佺鐘舵€侊紝蹇呰鏃舵洿鎹㈠紓甯哥粍浠躲€?, desc: "鏁翠綋鍙戠數鍋忓樊-2.8%" }
src\pages\Home.tsx:147 | { name: '杩涜涓?, value: 35, color: '#52c41a' },
src\pages\Home.tsx:148 | { name: '寰呭紑濮?, value: 20, color: '#faad14' },
src\pages\Home.tsx:168 | id: '', // 涓婚敭ID锛堟柊澧炰负绌猴級
src\pages\Home.tsx:169 | orderNo: '', // 宸ュ崟缂栧彿锛堝悗绔敓鎴愶級
src\pages\Home.tsx:170 | orderTitle: '鍏変紡缁勪欢娓呮礂宸ュ崟', // 宸ュ崟鏍囬
src\pages\Home.tsx:171 | sourceType: 3, // 鏉ユ簮 3=娓呮礂
src\pages\Home.tsx:172 | orderType: 3, // 绫诲瀷 3=娓呮礂
src\pages\Home.tsx:173 | priorityLevel: 2, // 浼樺厛绾?2=涓?src\pages\Home.tsx:175 | deviceName: currentStation.siteName || '鐢电珯',
src\pages\Home.tsx:176 | deviceType: 1, // 璁惧绫诲瀷锛氱數绔?src\pages\Home.tsx:189 | orderStatus: 1, // 鐘舵€?1=寰呭鐞?src\pages\Home.tsx:192 | taskDescription: '鏍规嵁鐢电珯娓呮磥搴﹀缓璁繘琛岀粍浠舵竻娲楋紝鎻愬崌鍙戠數鏁堢巼',
src\pages\Home.tsx:193 | aiSuggestion: '绯荤粺鑷姩鐢熸垚娓呮礂寤鸿锛岄璁℃彁鍗囧彂鐢甸噺2.6%',
src\pages\Home.tsx:194 | requiredEquipment: '娓呮礂璁惧銆佹按鏋€佹姽甯?,
src\pages\Home.tsx:195 | estimatedImpact: '2.6', // 褰卞搷鍙戠數閲?%) 鏁板瓧
src\pages\Home.tsx:203 | messageApi.success('鉁?娓呮礂宸ュ崟鐢熸垚鎴愬姛');
src\pages\Home.tsx:205 | messageApi.error(res.msg || '鉂?宸ュ崟鐢熸垚澶辫触');
src\pages\Home.tsx:208 | messageApi.error('鉂?宸ュ崟鐢熸垚鎺ュ彛璋冪敤澶辫触');
src\pages\Home.tsx:225 | messageApi.error('鍔犺浇澶辫触');
src\pages\Home.tsx:244 | { title: t('home.todayGeneration'), value: '4,752', unit: t('home.kWh'), sub: '鏃ョ洰鏍?5,000 kWh', color: '#00B42A', bg: '#E8FFEA', icon: <ThunderboltOutlined /> },
src\pages\Home.tsx:245 | { title: t('home.currentPower'), value: '812.6', unit: 'kW', sub: '瑁呮満瀹归噺 1,000 kWp', color: '#165DFF', bg: '#E8F3FF', icon: <DashboardOutlined /> },
src\pages\Home.tsx:246 | { title: 'Performance Ratio', value: '82.6%', unit: '', sub: '鏄ㄦ棩 81.3% 鈫?.3%', color: '#00B42A', bg: '#E8FFEA', icon: <BarChartOutlined /> },
src\pages\Home.tsx:247 | { title: t('home.systemAvailability'), value: '99.35%', unit: '', sub: '鏄ㄦ棩 99.12% 鈫?.23%', color: '#165DFF', bg: '#E8F3FF', icon: <RiseOutlined /> },
src\pages\Home.tsx:248 | { title: t('home.alertCount'), value: alarmList.length, unit: '', sub: `鏈鐞?${alarmList.filter(item => item.handleStatus == 1).length} / 宸插叧闂?${alarmList.filter(item => item.handleStatus == 2).length}`, color: '#F53F3F',
src\pages\Home.tsx:286 | <div style={{ fontSize: 11, color: '#666', marginBottom: 8 }}>浠婃棩鍙戠數鍔熺巼瓒嬪娍 (kW)</div>
src\pages\Home.tsx:322 | series={[{ key: 'efficiency', name: '鏁堢巼', color: '#165DFF' }]}
src\pages\Home.tsx:325 | <Card title={<span style={{ fontWeight: 800 }}>{t('home.maintenanceProgress')}</span>} extra={<Button type="link" size="small">鏇村 &gt;</Button>} bordered={false} style={cardStyle} bodyStyle={{ padding: '12px' }}>
src\pages\Home.tsx:337 | <div style={{ fontSize: 12, color: '#999' }}>鎬讳换鍔?/div>
src\pages\Home.tsx:374 | title="澶栭儴绯荤粺"
src\pages\Home.tsx:384 | <Card title={<span style={{ fontWeight: 800 }}>{t('home.recentInspection')}</span>} extra={<Button type="link" size="small">鏇村 &gt;</Button>} bordered={false} style={{ ...cardStyle, height: "100%" }} bodyStyle={{ padding
src\pages\Home.tsx:390 | { title: '宸℃绫诲瀷', dataIndex: 'name', key: 'name', ellipsis: true },
src\pages\Home.tsx:391 | { title: '宸℃鏃堕棿', dataIndex: 'time', key: 'time' },
src\pages\Home.tsx:392 | { title: '宸℃浜哄憳', dataIndex: 'person', key: 'person', render: (t) => t.substring(0, 10) },
src\pages\Home.tsx:393 | { title: t('roles.status'), dataIndex: 'status', key: 'status', render: () => <span style={{ color: '#52c41a', fontSize: 12 }}>鈼?宸插畬鎴?/span> },
src\pages\Home.tsx:407 | <div style={{ fontSize: 16, fontWeight: 600, color: '#1D2129' }}>鐑偣妫€娴?/div>
src\pages\Home.tsx:408 | <div style={{ fontSize: 14, color: '#4E5969', marginTop: 4 }}>鍙戠幇 <span style={{ color: '#165DFF', fontWeight: 600 }}>2</span> 澶勭粍浠跺瓨鍦ㄥ紓甯哥儹鏂?/div>
src\pages\Home.tsx:419 | <div style={{ fontSize: 16, fontWeight: 600, color: '#1D2129' }}>缁勪覆寮傚父</div>
src\pages\Home.tsx:420 | <div style={{ fontSize: 14, color: '#4E5969', marginTop: 4 }}><span style={{ color: '#165DFF', fontWeight: 600 }}>3</span> 涓粍涓插瓨鍦ㄥ彂鐢靛紓甯?/div>
src\pages\Home.tsx:431 | <div style={{ fontSize: 16, fontWeight: 600, color: '#1D2129' }}>鍙戠數鍋忓樊鍒嗘瀽</div>
src\pages\Home.tsx:432 | <div style={{ fontSize: 14, color: '#4E5969', marginTop: 4 }}>鏁翠綋鍙戠數鍋忓樊 <span style={{ color: '#165DFF', fontWeight: 600 }}>-2.8%</span></div>
src\pages\Home.tsx:447 | <Card title={<span style={{ fontWeight: 800 }}>{t('alerts.realtimeAlert')}</span>} extra={<Button type="link" size="small" onClick={() => navigate('/alerts/all')}>鏇村 &gt;</Button>} bordered={false} style={cardStyle} body
src\pages\Home.tsx:449 | <span style={{ flex: 3 }}>鍛婅鍐呭</span>
src\pages\Home.tsx:450 | <span style={{ flex: 1, textAlign: 'center' }}>绾у埆</span>
src\pages\Home.tsx:451 | <span style={{ flex: 1.5, textAlign: 'right' }}>鍙戠敓鏃堕棿</span>
src\pages\Home.tsx:471 | <Card title={<span style={{ fontWeight: 800 }}>{t('home.deviceOnlineStatus')}</span>} extra={<Button type="link" size="small">鏇村 &gt;</Button>} bordered={false} style={cardStyle} bodyStyle={{ padding: '12px' }}>
src\pages\Home.tsx:474 | { name: '缁勪欢闃靛垪', count: '320/320', icon: <AppstoreOutlined /> },
src\pages\Home.tsx:477 | { name: '姘旇薄绔?, count: '1/1', icon: <CloudOutlined /> },
src\pages\Home.tsx:479 | { name: '鐜浼犳劅鍣?, count: '8/8', icon: <ExperimentOutlined /> },
src\pages\Home.tsx:496 | <Card title={<span style={{ fontWeight: 800 }}>{t('home.weatherInfo')}</span>} extra={<Button type="link" size="small">璇︾粏 &gt;</Button>} bordered={false} style={cardStyle} bodyStyle={{ padding: '12px' }}>
src\pages\Home.tsx:506 | <div>婀垮害 {weatherdata.humidity}%</div>
src\pages\Home.tsx:516 | <Card title={<span style={{ fontWeight: 800 }}>{t('clean.cleaningSuggestion')}</span>} extra={<Button type="link" size="small">鏇村 &gt;</Button>} bordered={false} style={cardStyle} bodyStyle={{ padding: '12px' }}>
src\pages\Home.tsx:521 | { name: '娓呮磥搴?, value: 85, color: '#00B42A' },
src\pages\Home.tsx:534 | <div style={{ fontSize: 12, color: '#666', marginBottom: 4 }}>寤鸿娓呮礂鏃堕棿: <span style={{ color: '#165DFF' }}>3澶╁唴</span></div>
src\pages\Home.tsx:535 | <div style={{ fontSize: 12, color: '#666', marginBottom: 4 }}>棰勮鎻愬崌鍙戠數閲? <span style={{ color: '#00B42A' }}>2.6 %</span></div>
src\pages\Home.tsx:536 | <div style={{ fontSize: 12, color: '#666' }}>棰勮鎻愬崌鐢甸噺: <span style={{ color: '#00B42A' }}>120 kWh/澶?/span></div>
src\pages\Home.tsx:545 | 鐢熸垚娓呮礂宸ュ崟
src\pages\Profile.tsx:49 | const message = utils.message; // 浣跨敤鍏ㄥ眬 message
src\pages\Profile.tsx:155 | height: '100%', // 馃敟 楂樺害 100%
src\pages\Profile.tsx:160 | <div style={{ padding: '20px 0', flex: 1 }}> {/* 馃敟 鑷姩濉厖楂樺害 */}
src\pages\Profile.tsx:228 | height: '100%', // 馃敟 楂樺害 100%
src\pages\RealTimeMonitor.tsx:139 | title="澶栭儴绯荤粺"
src\pages\ReportCenter.tsx:160 | { name: t('report.stationMonthly'), time: '2025-05-31 08:15', operator: '寮犺繍缁?, type: t('report.generationReport'), status: t('report.generated') },
src\pages\ReportCenter.tsx:163 | { name: t('report.operationSummary'), time: '2025-05-31 09:00', operator: '鏉庡伐绋嬪笀', type: t('report.operationReport'), status: t('report.generated') },
src\pages\ReportCenter.tsx:164 | { name: t('report.cleaningEffectReport'), time: '2025-05-28 10:20', operator: '鐜嬭繍缁?, type: t('report.operationReport'), status: t('report.generated') },
src\pages\ReportCenter.tsx:490 | { name: '寮犺繍缁?, role: t('report.roleOmSupervisor'), img: 'https://img.icons8.com/fluency/48/user-male-circle.png' },
src\pages\ReportCenter.tsx:491 | { name: '鏉庡伐绋嬪笀', role: t('report.roleStationEngineer'), img: 'https://img.icons8.com/fluency/48/user-male-circle.png' },
src\pages\ReportCenter.tsx:492 | { name: '鐜嬭繍缁?, role: t('report.roleDeviceOm'), img: 'https://img.icons8.com/fluency/48/user-male-circle.png' },
src\pages\ReportCenter.tsx:493 | { name: '闄堢粡鐞?, role: t('report.roleOmManager'), img: 'https://img.icons8.com/fluency/48/user-male-circle.png' },
src\pages\SystemSetting.tsx:67 | <Text type="secondary" style={{ fontSize: '12px' }}>鍛婅瑙勫垯閰嶇疆銆佺敤鎴疯鑹层€侀€氱煡绠$悊涓庣郴缁熷弬鏁拌缃?/Text>
src\pages\Users.tsx:87 | roleIds: roleIds, // 鍥炲~澶氶€夎鑹?src\pages\Users.tsx:111 | roleIds: values.roleIds || [], // 鐩存帴鎻愪氦鏁扮粍
src\pages\Video.tsx:45 | case '瀹夐槻鍨?:
src\pages\Video.tsx:51 | case '杩愯緭鍨?:
src\pages\Video.tsx:57 | case '宸℃鍨?:
src\pages\WorkOrder.tsx:70 | const [selectedRowKeys, setSelectedRowKeys] = useState<string[]>([]); // 鎵归噺閫変腑
src\pages\WorkOrder.tsx:78 | todayAdd: 0, // 浠婃棩鏂板宸ュ崟
src\pages\WorkOrder.tsx:79 | pending: 0, // 寰呭鐞嗘€绘暟
src\pages\WorkOrder.tsx:80 | pendingHigh: 0, // 寰呭鐞嗛珮浼樺厛绾?src\pages\WorkOrder.tsx:81 | running: 0, // 鎵ц涓?src\pages\WorkOrder.tsx:82 | finishedMonth: 0, // 鏈湀宸插畬鎴?src\pages\WorkOrder.tsx:83 | finishRate: '0', // 鎸夋椂瀹屾垚鐜?src\pages\WorkOrder.tsx:84 | avgHandleHour: 0, // 骞冲潎澶勭悊鏃堕暱
src\pages\WorkOrder.tsx:85 | aiCreate: 0, // AI鑷姩鐢熸垚宸ュ崟
src\pages\WorkOrder.tsx:86 | todayAddDiff: '', // 浠婃棩鏂板瀵规瘮鏄ㄦ棩
src\pages\WorkOrder.tsx:87 | avgDiff: '' // 骞冲潎鏃堕暱瀵规瘮涓婂懆
src\pages\WorkOrder.tsx:93 | const isShowDispatch = userInfo?.roleId !== 26; //鏅€氱敤鎴?src\pages\WorkOrder.tsx:233 | assigneeId: values.assignUserId, // 閫変腑浜哄憳ID
src\pages\WorkOrder.tsx:320 | todayAddDiff: '+3', // 濡傞渶鐪熷疄鏄ㄦ棩瀵规瘮锛屽崟鐙姹傛槰鏃ョ粺璁℃帴鍙?src\pages\WorkOrder.tsx:590 | handleResult: '宸插鐞嗗畬鎴?,
src\pages\WorkOrder.tsx:612 | orderStatus: 3, // 宸插畬鎴?src\pages\WorkOrder.tsx:675 | const levelText = levelNum2Text[currentDetail?.priorityLevel]; //鏁板瓧杞瓧绗︿覆
src\pages\WorkOrder.tsx:742 | setSelectedRowKeys([]); // 娓呯┖閫変腑
src\pages\WorkOrder.tsx:787 | setSelectedRowKeys([]); // 娓呯┖閫変腑
src\pages\WorkOrder.tsx:788 | getWorkOrderList(); // 鍒锋柊鍒楄〃
src\pages\WorkOrder.tsx:797 | fetchWeekAlarmData(); // 鏂板鍔犺浇7澶╁憡璀?src\pages\WorkOrder.tsx:1602 | <Option value={1}>ERROR(楂?</Option><Option value={2}>WARNING</Option><Option value={3}>INFO</Option>
src\pages\WorkOrder.tsx:1627 | <FormItem name="id" label="宸ュ崟ID" hidden>
src\pages\WorkOrder.tsx:1672 | <FormItem name="orderIds" label="宸ュ崟ID" hidden><Input /></FormItem>
src\pages\WorkOrder.tsx:1700 | placeholder="璇烽€夋嫨璁惧"
src\pages\WorkOrder.tsx:1711 | { label: <span>devices.robot</span>, options: devices.map(item => ({ value: item.device_sn || item.serialNumber, label: item.deviceAlias || item.deviceName || '鏈煡璁惧' })) },
src\pages\WorkOrder.tsx:1712 | { label: <span>constants.uav</span>, options: planedevices.map(item => ({ value: item.device_sn, label: item.drone_callsign || item.callsign || '鏈煡璁惧' })) },
src\pages\WorkOrder.tsx:1763 | placeholder="璇烽€夋嫨鎵ц寮€濮嬫椂闂?
src\pages\WorkOrder.tsx:1781 | <Option value="宸插鐞嗗畬鎴?>{t('workOrder.handledCompleted')}</Option><Option value="宸蹭慨澶?>{t('workOrder.fixed')}</Option><Option value="鏃犻渶澶勭悊">{t('workOrder.noActionNeeded')}</Option><Option value="闂宸查棴鐜?>{t('workOrder.issueClo
src\router\index.tsx:248 | { path: 'notice', element: <Suspense fallback={<PageFallback />}><div style={{ padding: 20 }}><h2>閫氱煡绛栫暐椤甸潰</h2></div></Suspense> },
src\router\index.tsx:250 | { path: 'dataSafety', element: <Suspense fallback={<PageFallback />}><div style={{ padding: 20 }}><h2>鏁版嵁涓庡畨鍏ㄩ〉闈?/h2></div></Suspense> },
src\router\index.tsx:327 | <p className="text-lg font-medium">妯″潡寮€鍙戜腑</p>
src\store\index.ts:6 | import stationReducer from './stationSlice'; // 馃憟 鍔犺繖涓?src\store\index.ts:11 | station: stationReducer, // 馃憟 鍔犺繖涓?src\store\stationSlice.ts:14 | currentStation: loadStationFromStorage(), // 褰撳墠閫変腑鍦虹珯锛堝畬鏁村璞★級
src\store\stationSlice.ts:15 | stationId: loadStationFromStorage()?.id || null, // 鏂逛究鐩存帴鐢?id
src\store\userSlice.ts:18 | localStorage.setItem('userInfo', JSON.stringify(res)); // 馃憟 淇濆瓨鐢ㄦ埛淇℃伅
src\store\userSlice.ts:53 | userInfo: loadUserFromStorage(), // 馃憟 鍒锋柊鑷姩鎭㈠
src\types\index.ts:72 | tenantCode?: string; // 澶氱鎴风櫥褰曟椂浼犲叆
src\types\index.ts:79 | expiresIn?: number; // token 杩囨湡鏃堕棿锛堢锛?src\types\index.ts:107 | menuType?: 0 | 1 | 2; // 0=鐩綍 1=鑿滃崟 2=鎸夐挳
src\types\index.ts:108 | perms?: string; // 鎸夐挳鏉冮檺鏍囪瘑