diff --git a/packages/mobile/src/components/CardItem.vue b/packages/mobile/src/components/CardItem.vue index 1018ab6..9af6709 100644 --- a/packages/mobile/src/components/CardItem.vue +++ b/packages/mobile/src/components/CardItem.vue @@ -1,6 +1,6 @@ diff --git a/packages/mobile/src/views/DisasterManagement/WaterDisaster/WaterDisaster.vue b/packages/mobile/src/views/DisasterManagement/WaterDisaster/WaterDisaster.vue index 6baae9e..af641cc 100644 --- a/packages/mobile/src/views/DisasterManagement/WaterDisaster/WaterDisaster.vue +++ b/packages/mobile/src/views/DisasterManagement/WaterDisaster/WaterDisaster.vue @@ -295,9 +295,47 @@ const isVideoFile = (file) => { if (file.fileUrl && videoExtensions.test(file.fileUrl)) return true } +const parsePointValue = (point) => { + if (!point) { + return { longitude: null, latitude: null } + } + + if (Array.isArray(point) && point.length >= 2) { + return { + longitude: point[0] ?? null, + latitude: point[1] ?? null + } + } + + if (typeof point === 'string') { + try { + const parsed = JSON.parse(point) + if (Array.isArray(parsed) && parsed.length >= 2) { + return { + longitude: parsed[0] ?? null, + latitude: parsed[1] ?? null + } + } + } catch (_error) { + return { longitude: null, latitude: null } + } + } + + return { longitude: null, latitude: null } +} + const handleRouteNoChange = (item) => { - formData.value.event.startStakeNo = item.startStakeNo - formData.value.event.endStakeNo = item.endStakeNo + formData.routeNo = item.routeCode + formData.event.startStakeNo = item.startStakeNo + formData.event.endStakeNo = item.endStakeNo + + const startPoint = parsePointValue(item.startPoint) + const endPoint = parsePointValue(item.endPoint) + + formData.event.startStakeLongitude = startPoint.longitude + formData.event.startStakeLatitude = startPoint.latitude + formData.event.endStakeLongitude = endPoint.longitude + formData.event.endStakeLatitude = endPoint.latitude } /** @@ -404,7 +442,7 @@ const afterRead = async (options) => { if (res.code === '00000') { const name = file.name const url = res.data - const type = isImageFile({ fileUrl: url}) ? 1 : isVideoFile({ fileUrl: url}) ? 2 : 3 + const type = isImageFile({ fileUrl: url }) ? 1 : isVideoFile({ fileUrl: url }) ? 2 : 3 const fileData = { fileName: name, fileUrl: url, diff --git a/packages/mobile/src/views/WarningMessage/WarningMessage.vue b/packages/mobile/src/views/WarningMessage/WarningMessage.vue index a32a7ac..776b07a 100644 --- a/packages/mobile/src/views/WarningMessage/WarningMessage.vue +++ b/packages/mobile/src/views/WarningMessage/WarningMessage.vue @@ -1,93 +1,130 @@ \ No newline at end of file + diff --git a/packages/mobile/src/views/WarningMessage/WarningMessageDetail.vue b/packages/mobile/src/views/WarningMessage/WarningMessageDetail.vue index 12c0d22..9dadc16 100644 --- a/packages/mobile/src/views/WarningMessage/WarningMessageDetail.vue +++ b/packages/mobile/src/views/WarningMessage/WarningMessageDetail.vue @@ -1,95 +1,152 @@ diff --git a/packages/mobile/src/views/WarningMessage/mock.json b/packages/mobile/src/views/WarningMessage/mock.json new file mode 100644 index 0000000..8b0ff6c --- /dev/null +++ b/packages/mobile/src/views/WarningMessage/mock.json @@ -0,0 +1,62 @@ +[ + { + "id": 1, + "status": "unread", + "title": "潼南区气象台发布暴雨蓝色预警[Ⅳ级/一般]", + "onset": "2026/01/10 20:29", + "warningContent": "区气象台发布暴雨红色预警,按照相关要求,启动I级防御响应,并请及时关注地质、水文等风险提示信息,落实主动封闭管控/“关停撤转”措施。", + "workSuggestion": "立即启动防汛Ⅰ级应急响应,立即转移危险区,加强沿线桥梁、隧道及在建项目巡查。", + "affectedPoints": [ + { + "affectedCounty": "巫溪县", + "roadCode": "G242", + "type": "桥梁", + "station": "336.800-336.850" + }, + { + "affectedCounty": "万州区", + "roadCode": "G242", + "type": "隧道", + "station": "336.800-336.850" + } + ], + "affectedProjects": [ + { + "affectedCounty": "巫溪县", + "projectName": "G242灾害防治工程", + "siteName": "巫溪驻地", + "roadCode": "G242" + }, + { + "affectedCounty": "万州区", + "projectName": "G242改扩建工程", + "siteName": "万州驻地", + "roadCode": "G242" + } + ] + }, + { + "id": 2, + "status": "read", + "title": "潼南区气象台发布暴雨蓝色预警[Ⅳ级/一般]", + "onset": "2026/01/09 07:10", + "warningContent": "预计未来12小时局地将出现能见度小于500米的大雾天气,请注意行车安全并做好道路巡查。", + "workSuggestion": "加强重点路段值守,及时发布诱导信息,视情采取限速、分流等措施。", + "affectedPoints": [ + { + "affectedCounty": "涪陵区", + "roadCode": "S105", + "type": "高边坡", + "station": "K12+300-K13+100" + } + ], + "affectedProjects": [ + { + "affectedCounty": "涪陵区", + "projectName": "S105养护提升工程", + "siteName": "涪陵驻地", + "roadCode": "S105" + } + ] + } +] diff --git a/packages/screen/src/component/NumberInput/NumberInput.vue b/packages/screen/src/component/NumberInput/NumberInput.vue new file mode 100644 index 0000000..ad38a08 --- /dev/null +++ b/packages/screen/src/component/NumberInput/NumberInput.vue @@ -0,0 +1,71 @@ + + + diff --git a/packages/screen/src/utils/math.js b/packages/screen/src/utils/math.js new file mode 100644 index 0000000..885f71c --- /dev/null +++ b/packages/screen/src/utils/math.js @@ -0,0 +1,18 @@ +export const updateValueForNumber = (obj, key, value, precision = 2) => { + let normalizedValue = String(value ?? '').replace(/[^\d.]/g, '') + normalizedValue = normalizedValue.replace(/^\./, '') + + if (precision <= 0) { + obj[key] = normalizedValue.replace(/\./g, '') + return + } + + const firstDotIndex = normalizedValue.indexOf('.') + if (firstDotIndex !== -1) { + const integerPart = normalizedValue.slice(0, firstDotIndex) + const decimalPart = normalizedValue.slice(firstDotIndex + 1).replace(/\./g, '').slice(0, precision) + normalizedValue = decimalPart ? `${integerPart}.${decimalPart}` : `${integerPart}.` + } + + obj[key] = normalizedValue +} diff --git a/packages/screen/src/views/DisasterManagement/IceDisasterDetail/IceDisasterContinueReportPC.vue b/packages/screen/src/views/DisasterManagement/IceDisasterDetail/IceDisasterContinueReportPC.vue index 055f6ea..6fbdfdc 100644 --- a/packages/screen/src/views/DisasterManagement/IceDisasterDetail/IceDisasterContinueReportPC.vue +++ b/packages/screen/src/views/DisasterManagement/IceDisasterDetail/IceDisasterContinueReportPC.vue @@ -1,130 +1,88 @@ diff --git a/packages/screen/src/views/DisasterManagement/IceDisasterDetail/IceDisasterDetailPC.vue b/packages/screen/src/views/DisasterManagement/IceDisasterDetail/IceDisasterDetailPC.vue index 8764f6d..89f0fe5 100644 --- a/packages/screen/src/views/DisasterManagement/IceDisasterDetail/IceDisasterDetailPC.vue +++ b/packages/screen/src/views/DisasterManagement/IceDisasterDetail/IceDisasterDetailPC.vue @@ -1,6 +1,6 @@ +
+
+
+ {{ getReportTitle(index) }} + 时间:{{ formatValue(report.createTime) }} +
+
+
+
+
+ 处理措施: + {{ formatDisposalMeasures(report.disposalMeasures) }} +
+
+ 预计恢复时间: + {{ formatValue(report.expectRecoverTime) }} +
+
+ 实际恢复时间: + {{ formatValue(report.actualRecoverTime) }} +
+
+ 填报人: + {{ formatValue(report.reporterName || report.reportUserName || report.createByName) }} +
+
+ 联系电话: + {{ formatValue(report.reporterPhone || report.phone || report.reportPhone || report.contactPhone) }} +
+
+ {{item.materialName}}: + {{ getMaterialUsageText(item) }} +
+
+ 投入资金: + {{ formatUnitValue(report.inputFunds ?? report.material?.inputFunds ?? report.investedFunds, '万元') }} +
+
+ 投入人力: + {{ formatUnitValue(report.inputManpower ?? report.material?.inputManpower ?? report.investedManpower, '人次') }} +
+
+ 投入设备: + {{ formatUnitValue(report.inputEquipment ?? report.material?.inputEquipment ?? report.investedMachinery, '台') }} +
+
+ 有无车辆滞留: + {{ getHasStrandedVehiclesText(report) }} +
+
+ 滞留车辆: + {{ formatUnitValue(report.strandedVehicleCount ?? report.traffic?.strandedVehicleCount, '辆') }} +
+
+ 现场情况描述: + {{ formatValue(report.siteDescription) }} +
+
+
+ +
+
+
+
+
+ - + diff --git a/packages/screen/src/views/DisasterManagement/IceDisasterReport/IceDisasterReportPC.vue b/packages/screen/src/views/DisasterManagement/IceDisasterReport/IceDisasterReportPC.vue index d2b9fe0..65e34a6 100644 --- a/packages/screen/src/views/DisasterManagement/IceDisasterReport/IceDisasterReportPC.vue +++ b/packages/screen/src/views/DisasterManagement/IceDisasterReport/IceDisasterReportPC.vue @@ -1,6 +1,6 @@