Compare commits

...

12 Commits

Author SHA1 Message Date
秦子超 99d9008627 合并 2025-06-11 11:31:37 +08:00
秦子超 8e75910321 修改水库切换 2025-06-11 11:29:32 +08:00
李神峰 c4f7e31f30 merge: 解决冲突 2025-06-11 11:15:43 +08:00
李神峰 6218cd032b feat(): 水库防汛调度开发 2025-06-11 11:10:37 +08:00
秦子超 8fafed3199 合并代码 2025-06-11 11:08:39 +08:00
秦子超 475f551507 修改水库切换逻辑 2025-06-11 11:08:10 +08:00
李神峰 4508e5d59c merge: 合并冲突 2025-06-10 13:55:27 +08:00
李神峰 75c5ba9690 feat():修改水库 2025-06-10 13:53:14 +08:00
秦子超 b379a58cc8 修改数据 2025-06-10 13:52:31 +08:00
秦子超 69e11dad51 合并 2025-06-09 16:27:41 +08:00
秦子超 3fabf984a6 :wq
Merge branch 'master' of http://10.0.41.100:3000/lishenfeng/mcfxkh-Web
2025-06-09 16:26:02 +08:00
李神峰 0be79dd7c3 feat(): 水厂报警列表开发 2025-06-09 16:24:57 +08:00
58 changed files with 5146 additions and 1925 deletions

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1749537394241" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2581" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M0 511.936008a511.936008 511.936008 0 1 0 511.936008-511.936008 511.936008 511.936008 0 0 0-511.936008 511.936008z" fill="#00B4FF" p-id="2582"></path><path d="M511.936008 475.204599h426.647469c0-219.850919-191.054518-398.132633-426.647469-398.132633S85.160555 255.353681 85.160555 475.204599z" fill="#FFFFFF" p-id="2583"></path></svg>

After

Width:  |  Height:  |  Size: 667 B

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="20px" height="20px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -51 -179 )">
<path d="M 20 10 C 20 4.47715250169207 15.5228474983079 0 10 0 C 4.47715250169207 0 0 4.47715250169207 0 10 C 0 15.5228474983079 4.47715250169207 20 10 20 C 15.5228474983079 20 20 15.5228474983079 20 10 Z M 1.4285 10 C 1.4285 5.26609126682536 5.26609126682536 1.4285 10 1.4285 L 10 10 L 1.4285 10 Z " fill-rule="nonzero" fill="#00b4ff" stroke="none" transform="matrix(1 0 0 1 51 179 )" />
</g>
</svg>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
public/assets/loushun.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 107 KiB

File diff suppressed because it is too large Load Diff

View File

@ -16,13 +16,13 @@
"sfz": null,
"sfq": null,
"type": "sh",
"tm": "2025-06-08T03:00:00.000Z",
"rz": 77.24,
"trend": 0,
"tm": "2025-06-06T22:00:00.000Z",
"rz": 76.99,
"trend": 1,
"state": 1,
"warning": 0,
"maxRz": 77.35,
"maxDate": "2025-06-07T16:05:00.000Z",
"maxRz": 76.99,
"maxDate": "2025-06-05T17:25:00.000Z",
"warndes": null
},
{
@ -42,13 +42,13 @@
"sfz": null,
"sfq": null,
"type": "sh",
"tm": "2025-06-08T03:05:00.000Z",
"rz": 55.66,
"tm": "2025-06-06T22:15:00.000Z",
"rz": 55.67,
"trend": 0,
"state": 1,
"warning": 0,
"maxRz": 55.67,
"maxDate": "2025-06-07T19:30:00.000Z",
"maxDate": "2025-06-06T02:05:00.000Z",
"warndes": null
},
{
@ -68,13 +68,13 @@
"sfz": null,
"sfq": null,
"type": "sh",
"tm": "2025-06-08T03:00:00.000Z",
"tm": "2025-06-06T22:00:00.000Z",
"rz": 27.57,
"trend": 0,
"state": 1,
"warning": 0,
"maxRz": 27.57,
"maxDate": "2025-06-07T22:35:00.000Z",
"maxDate": "2025-06-05T17:50:00.000Z",
"warndes": null
},
{
@ -94,13 +94,13 @@
"sfz": null,
"sfq": null,
"type": "sh",
"tm": "2025-06-08T03:00:00.000Z",
"rz": 21.87,
"trend": 1,
"tm": "2025-06-06T22:00:00.000Z",
"rz": 21.84,
"trend": -1,
"state": 1,
"warning": 0,
"maxRz": 21.94,
"maxDate": "2025-06-07T16:00:00.000Z",
"maxRz": 21.9,
"maxDate": "2025-06-06T04:30:00.000Z",
"warndes": null
},
{
@ -120,13 +120,13 @@
"sfz": null,
"sfq": null,
"type": "sh",
"tm": "2025-06-08T03:00:00.000Z",
"tm": "2025-06-06T22:15:00.000Z",
"rz": 112.71,
"trend": 0,
"state": 1,
"warning": 0,
"maxRz": 112.71,
"maxDate": "2025-06-08T00:10:00.000Z",
"maxDate": "2025-06-06T14:05:00.000Z",
"warndes": null
},
{
@ -140,8 +140,8 @@
"elev": null,
"hasRz": true,
"type": "sw",
"tm": "2025-06-08T03:00:00.000Z",
"rz": 52.85,
"tm": "2025-06-06T22:00:00.000Z",
"rz": 52.44,
"state": 1
},
{
@ -155,8 +155,8 @@
"elev": null,
"hasRz": true,
"type": "sw",
"tm": "2025-06-08T03:00:00.000Z",
"rz": 51.432,
"tm": "2025-06-06T22:00:00.000Z",
"rz": 51.387,
"state": 1
},
{
@ -170,7 +170,7 @@
"elev": null,
"hasRz": true,
"type": "sw",
"tm": "2025-06-08T03:00:00.000Z",
"tm": "2025-06-06T22:00:00.000Z",
"rz": 73.37,
"state": 1
},
@ -185,8 +185,8 @@
"elev": null,
"hasRz": true,
"type": "sw",
"tm": "2025-06-08T03:00:00.000Z",
"rz": 61.98,
"tm": "2025-06-06T22:00:00.000Z",
"rz": 61.59,
"state": 1
},
{
@ -200,8 +200,8 @@
"elev": null,
"hasRz": true,
"type": "sw",
"tm": "2025-06-08T03:00:00.000Z",
"rz": 134.21,
"tm": "2025-06-06T21:00:00.000Z",
"rz": 133.89,
"state": 1
},
{
@ -215,7 +215,7 @@
"elev": null,
"hasRz": true,
"type": "sw",
"tm": "2025-06-08T03:00:00.000Z",
"tm": "2025-06-06T22:00:00.000Z",
"rz": 43.6,
"state": 1
}

View File

@ -1,6 +1,6 @@
{
"tm2": "08日11时",
"tm1": "07日11时",
"tm2": "07日6时",
"tm1": "06日6时",
"drpInfo": {
"stCount": {
"total": 379,
@ -12,85 +12,85 @@
},
"h1": {
"drpStCount": {
"total": 75,
"sh": 15,
"sw": 22,
"sk": 5,
"total": 98,
"sh": 34,
"sw": 25,
"sk": 6,
"qx": 33
},
"max": {
"value": 7.5,
"stnm": "芭茅河水库",
"stcd": "61612580",
"type": "sk"
"value": 50.2,
"stnm": "福田河",
"stcd": "Q9111",
"type": "qx"
},
"cntDrp10": 75,
"cntDrp25": 0,
"cntDrp50": 0,
"cntDrp100": 0,
"cntDrp10": 41,
"cntDrp25": 37,
"cntDrp50": 18,
"cntDrp100": 2,
"cntDrp250": 0,
"cntDrpg250": 0
},
"h3": {
"drpStCount": {
"total": 91,
"sh": 31,
"sw": 22,
"sk": 5,
"total": 99,
"sh": 35,
"sw": 25,
"sk": 6,
"qx": 33
},
"max": {
"value": 14.3,
"stnm": "下白米",
"stcd": "Q9123",
"value": 50.3,
"stnm": "福田河",
"stcd": "Q9111",
"type": "qx"
},
"cntDrp10": 83,
"cntDrp25": 8,
"cntDrp50": 0,
"cntDrp100": 0,
"cntDrp10": 38,
"cntDrp25": 35,
"cntDrp50": 21,
"cntDrp100": 5,
"cntDrp250": 0,
"cntDrpg250": 0
},
"h6": {
"drpStCount": {
"total": 94,
"sh": 31,
"sw": 23,
"total": 99,
"sh": 35,
"sw": 25,
"sk": 6,
"qx": 34
"qx": 33
},
"max": {
"value": 22.7,
"stnm": "下白米",
"stcd": "Q9123",
"value": 50.3,
"stnm": "福田河",
"stcd": "Q9111",
"type": "qx"
},
"cntDrp10": 63,
"cntDrp25": 31,
"cntDrp50": 0,
"cntDrp100": 0,
"cntDrp10": 38,
"cntDrp25": 35,
"cntDrp50": 21,
"cntDrp100": 5,
"cntDrp250": 0,
"cntDrpg250": 0
},
"h24": {
"drpStCount": {
"total": 100,
"sh": 34,
"sw": 26,
"total": 99,
"sh": 35,
"sw": 25,
"sk": 6,
"qx": 34
"qx": 33
},
"max": {
"value": 45.2,
"stnm": "下白米",
"stcd": "Q9123",
"value": 50.3,
"stnm": "福田河",
"stcd": "Q9111",
"type": "qx"
},
"cntDrp10": 23,
"cntDrp25": 52,
"cntDrp50": 25,
"cntDrp100": 0,
"cntDrp10": 38,
"cntDrp25": 35,
"cntDrp50": 21,
"cntDrp100": 5,
"cntDrp250": 0,
"cntDrpg250": 0
}
@ -104,34 +104,130 @@
"aRzSk": [],
"drpSk": [
{
"stcd": "61614200",
"stcd": "61612700",
"type": "sk",
"hasRz": true,
"stnm": "浮桥河水库",
"adcd": "421181100000",
"stnm": "碧绿河水库",
"adcd": "421181109000",
"wscd": null,
"importancy": 0,
"lgtd": 114.875,
"lttd": 31.166667,
"lgtd": 115.214444,
"lttd": 31.299722,
"elev": 0,
"damel": 71.33,
"dsflz": 68.04,
"fsltdz": 64.89,
"ddz": 51.78,
"zcxsw": 64.89,
"drpTm": "2025-06-08T03:00:00.000Z",
"today": 13,
"h1": 1,
"h3": 8.5,
"h6": 16,
"h12": 19,
"h24": 26.5,
"h48": 70,
"damel": 142.9,
"dsflz": 139.08,
"fsltdz": 137,
"ddz": 105,
"zcxsw": 137,
"drpTm": "2025-06-06T22:00:00.000Z",
"today": 50,
"h1": 38,
"h3": 50,
"h6": 50,
"h12": 50,
"h24": 50,
"h48": 50,
"drpState": 1,
"rz": 60.78,
"w": 164.6,
"a_fsltdz": -4.109999999999999,
"rzTm": "2025-06-08T03:00:00.000Z",
"rz": 120,
"w": 13.55,
"a_fsltdz": -17,
"rzTm": "2025-06-06T00:00:00.000Z",
"rzWarning": 0,
"rzState": 2
},
{
"stcd": "61612560",
"type": "sk",
"hasRz": true,
"stnm": "大河铺水库",
"adcd": "421181112000",
"wscd": null,
"importancy": 0,
"lgtd": 114.941111,
"lttd": 31.464444,
"elev": 0,
"damel": 162.21,
"dsflz": 160.08,
"fsltdz": 159,
"ddz": 142.5,
"zcxsw": 159,
"drpTm": "2025-06-06T22:00:00.000Z",
"today": 50,
"h1": 50,
"h3": 50,
"h6": 50,
"h12": 50,
"h24": 50,
"h48": 50,
"drpState": 1,
"rz": 144.5,
"w": 1.66,
"a_fsltdz": -14.5,
"rzTm": "2025-06-06T00:00:00.000Z",
"rzWarning": 0,
"rzState": 2
},
{
"stcd": "61612610",
"type": "sk",
"hasRz": true,
"stnm": "三河口水库",
"adcd": "421181109000",
"wscd": null,
"importancy": 0,
"lgtd": 115.166667,
"lttd": 31.333333,
"elev": 0,
"damel": 156.8,
"dsflz": 154.99,
"fsltdz": 149,
"ddz": 124,
"zcxsw": 149,
"drpTm": "2025-06-06T22:00:00.000Z",
"today": 43.5,
"h1": 32,
"h3": 43.5,
"h6": 43.5,
"h12": 43.5,
"h24": 43.5,
"h48": 43.5,
"drpState": 1,
"rz": 141.56,
"w": 78.3,
"a_fsltdz": -7.439999999999998,
"rzTm": "2025-06-06T22:00:00.000Z",
"rzWarning": 0,
"rzState": 1
},
{
"stcd": "61612580",
"type": "sk",
"hasRz": true,
"stnm": "芭茅河水库",
"adcd": "421181110000",
"wscd": null,
"importancy": 0,
"lgtd": 115.101389,
"lttd": 31.307778,
"elev": 0,
"damel": 127.8,
"dsflz": 125.57,
"fsltdz": 122.44,
"ddz": 106.94,
"zcxsw": 122.44,
"drpTm": "2025-06-06T22:00:00.000Z",
"today": 18,
"h1": 18,
"h3": 18,
"h6": 18,
"h12": 18,
"h24": 18,
"h48": 18,
"drpState": 1,
"rz": 117.78,
"w": 6.215,
"a_fsltdz": -4.659999999999997,
"rzTm": "2025-06-06T22:00:00.000Z",
"rzWarning": 0,
"rzState": 1
},
@ -151,90 +247,158 @@
"fsltdz": 93,
"ddz": 78.02,
"zcxsw": 93,
"drpTm": "2025-06-08T03:00:00.000Z",
"today": 13,
"h1": 2.5,
"h3": 10.5,
"h6": 14,
"h12": 15.5,
"h24": 22,
"h48": 74.5,
"drpTm": "2025-06-06T22:00:00.000Z",
"today": 15,
"h1": 15,
"h3": 15,
"h6": 15,
"h12": 15,
"h24": 15,
"h48": 15,
"drpState": 1,
"rz": 85.27,
"w": 54.6,
"a_fsltdz": -7.730000000000004,
"rzTm": "2025-06-08T03:00:00.000Z",
"rz": 84.67,
"w": 50.9,
"a_fsltdz": -8.329999999999998,
"rzTm": "2025-06-06T22:00:00.000Z",
"rzWarning": 0,
"rzState": 1
},
}
],
"warnDrpSt": [
{
"stcd": "61612700",
"type": "sk",
"hasRz": true,
"stnm": "碧绿河水库",
"adcd": "421181109000",
"stcd": "61615110",
"stnm": "杨梅河(木子店)",
"adcd": "421181000000000",
"wscd": null,
"importancy": 0,
"lgtd": 115.214444,
"lttd": 31.299722,
"elev": 0,
"damel": 142.9,
"dsflz": 139.08,
"fsltdz": 137,
"ddz": 105,
"zcxsw": 137,
"drpTm": "2025-06-08T03:00:00.000Z",
"today": 8.5,
"h1": 6,
"h3": 7.5,
"h6": 9,
"h12": 10.5,
"h24": 18,
"h48": 106.5,
"drpState": 1,
"rz": 121,
"w": 14.7,
"a_fsltdz": -16,
"rzTm": "2025-06-08T00:00:00.000Z",
"rzWarning": 0,
"rzState": 2
"lgtd": 115.339667,
"lttd": 31.1595,
"elev": null,
"hasRz": true,
"type": "sh",
"today": 46,
"h1": 44,
"h3": 46,
"h6": 46,
"h12": 46,
"h24": 46,
"h48": 46,
"tm": "2025-06-06T22:25:00.000Z",
"state": 1,
"warning": 0
},
{
"stcd": "61612580",
"type": "sk",
"hasRz": true,
"stnm": "芭茅河水库",
"adcd": "421181110000",
"stcd": "61641700",
"stnm": "前畈(三河口)",
"adcd": "421181000000000",
"wscd": null,
"importancy": 0,
"lgtd": 115.101389,
"lttd": 31.307778,
"elev": 0,
"damel": 127.8,
"dsflz": 125.57,
"fsltdz": 122.44,
"ddz": 106.94,
"zcxsw": 122.44,
"drpTm": "2025-06-08T03:00:00.000Z",
"today": 9,
"h1": 7.5,
"h3": 8,
"h6": 9.5,
"h12": 11.5,
"h24": 17.5,
"h48": 65.5,
"drpState": 1,
"rz": 117.75,
"w": 6.191,
"a_fsltdz": -4.689999999999998,
"rzTm": "2025-06-08T03:00:00.000Z",
"rzWarning": 0,
"rzState": 1
"lgtd": 115.2267,
"lttd": 31.3925,
"elev": null,
"hasRz": false,
"type": "sh",
"today": 32,
"h1": 32,
"h3": 32,
"h6": 32,
"h12": 32,
"h24": 32,
"h48": 32,
"tm": "2025-06-06T22:25:00.000Z",
"state": 1,
"warning": 0
},
{
"stcd": "61641750",
"stnm": "金盘地(三河口)",
"adcd": "421181000000000",
"wscd": null,
"importancy": 0,
"lgtd": 115.2188,
"lttd": 31.2545,
"elev": null,
"hasRz": false,
"type": "sh",
"today": 46.5,
"h1": 36.5,
"h3": 46.5,
"h6": 46.5,
"h12": 46.5,
"h24": 46.5,
"h48": 46.5,
"tm": "2025-06-06T22:25:00.000Z",
"state": 1,
"warning": 0
},
{
"stcd": "61641850",
"stnm": "饶家畈(三河口)",
"adcd": "421181000000000",
"wscd": null,
"importancy": 0,
"lgtd": 115.318333,
"lttd": 31.293611,
"elev": null,
"hasRz": false,
"type": "sh",
"today": 44.5,
"h1": 43,
"h3": 44.5,
"h6": 44.5,
"h12": 44.5,
"h24": 44.5,
"h48": 44.5,
"tm": "2025-06-06T22:25:00.000Z",
"state": 1,
"warning": 0
},
{
"stcd": "61641900",
"stnm": "周家河(三河口)",
"adcd": "421181000000000",
"wscd": null,
"importancy": 0,
"lgtd": 115.164166666,
"lttd": 31.32916667,
"elev": null,
"hasRz": false,
"type": "sh",
"today": 51.5,
"h1": 44.5,
"h3": 51.5,
"h6": 51.5,
"h12": 51.5,
"h24": 51.5,
"h48": 51.5,
"tm": "2025-06-06T22:15:00.000Z",
"state": 1,
"warning": 0
},
{
"stcd": "61642040",
"stnm": "月形塘(龟山)",
"adcd": "421181000000000",
"wscd": null,
"importancy": 0,
"lgtd": 115.2875,
"lttd": 31.2292,
"elev": null,
"hasRz": false,
"type": "sh",
"today": 50.5,
"h1": 49,
"h3": 50.5,
"h6": 50.5,
"h12": 50.5,
"h24": 50.5,
"h48": 50.5,
"tm": "2025-06-06T22:25:00.000Z",
"state": 0,
"warning": 1
},
{
"stcd": "61612610",
"type": "sk",
"hasRz": true,
"stnm": "三河口水库",
"adcd": "421181109000",
"wscd": null,
@ -242,29 +406,196 @@
"lgtd": 115.166667,
"lttd": 31.333333,
"elev": 0,
"damel": 156.8,
"dsflz": 154.99,
"fsltdz": 149,
"ddz": 124,
"zcxsw": 149,
"drpTm": "2025-06-08T03:00:00.000Z",
"today": 5,
"h1": 3.5,
"h3": 4.5,
"h6": 5.5,
"h12": 7.5,
"h24": 13,
"h48": 96.5,
"drpState": 1,
"rz": 141.98,
"w": 80.5,
"a_fsltdz": -7.02000000000001,
"rzTm": "2025-06-08T03:00:00.000Z",
"rzWarning": 0,
"rzState": 1
"hasRz": true,
"type": "sk",
"tm": "2025-06-06T22:00:00.000Z",
"today": 43.5,
"h1": 32,
"h3": 43.5,
"h6": 43.5,
"h12": 43.5,
"h24": 43.5,
"h48": 43.5,
"state": 1,
"warning": 0
},
{
"stcd": "61612700",
"stnm": "碧绿河水库",
"adcd": "421181109000",
"wscd": null,
"importancy": 0,
"lgtd": 115.214444,
"lttd": 31.299722,
"elev": 0,
"hasRz": true,
"type": "sk",
"tm": "2025-06-06T22:00:00.000Z",
"today": 50,
"h1": 38,
"h3": 50,
"h6": 50,
"h12": 50,
"h24": 50,
"h48": 50,
"state": 1,
"warning": 0
},
{
"stcd": "61612560",
"stnm": "大河铺水库",
"adcd": "421181112000",
"wscd": null,
"importancy": 0,
"lgtd": 114.941111,
"lttd": 31.464444,
"elev": 0,
"hasRz": true,
"type": "sk",
"tm": "2025-06-06T22:00:00.000Z",
"today": 50,
"h1": 50,
"h3": 50,
"h6": 50,
"h12": 50,
"h24": 50,
"h48": 50,
"state": 1,
"warning": 0
},
{
"stcd": "61641600",
"stnm": "张广河",
"adcd": null,
"wscd": null,
"importancy": 0,
"lgtd": 115.316887,
"lttd": 31.352877,
"elev": null,
"hasRz": false,
"type": "sw",
"today": 31,
"h1": 30.5,
"h3": 31,
"h6": 31,
"h12": 31,
"h24": 31,
"h48": 31,
"tm": "2025-06-06T22:00:00.000Z",
"state": 1,
"warning": 0
},
{
"stcd": "61643200",
"stnm": "西张店",
"adcd": null,
"wscd": null,
"importancy": 0,
"lgtd": 114.876389,
"lttd": 31.441389,
"elev": null,
"hasRz": false,
"type": "sw",
"today": 41.5,
"h1": 41.5,
"h3": 41.5,
"h6": 41.5,
"h12": 41.5,
"h24": 41.5,
"h48": 41.5,
"tm": "2025-06-06T22:00:00.000Z",
"state": 1,
"warning": 0
},
{
"stcd": "Q0142",
"stnm": "武麻高速K717+850",
"adcd": null,
"wscd": null,
"importancy": 0,
"lgtd": 115.1917,
"lttd": 31.2036,
"elev": null,
"hasRz": false,
"type": "qx",
"today": 36.6,
"h1": 36.6,
"h3": 36.6,
"h6": 36.6,
"h12": 36.6,
"h24": 36.6,
"h48": 36.6,
"tm": "2025-06-06T22:00:00.000Z",
"state": 1,
"warning": 0
},
{
"stcd": "Q9107",
"stnm": "三河口",
"adcd": null,
"wscd": null,
"importancy": 0,
"lgtd": 115.2414,
"lttd": 31.3308,
"elev": null,
"hasRz": false,
"type": "qx",
"today": 45,
"h1": 34.4,
"h3": 45,
"h6": 45,
"h12": 45,
"h24": 45,
"h48": 45,
"tm": "2025-06-06T22:00:00.000Z",
"state": 1,
"warning": 0
},
{
"stcd": "Q9111",
"stnm": "福田河",
"adcd": null,
"wscd": null,
"importancy": 0,
"lgtd": 115.0944,
"lttd": 31.4747,
"elev": null,
"hasRz": false,
"type": "qx",
"today": 50.3,
"h1": 50.2,
"h3": 50.2,
"h6": 50.2,
"h12": 50.2,
"h24": 50.3,
"h48": 50.3,
"tm": "2025-06-06T22:00:00.000Z",
"state": 1,
"warning": 0
},
{
"stcd": "Q9127",
"stnm": "方家山",
"adcd": null,
"wscd": null,
"importancy": 0,
"lgtd": 115.1656,
"lttd": 31.195,
"elev": null,
"hasRz": false,
"type": "qx",
"today": 35.5,
"h1": 35.5,
"h3": 35.5,
"h6": 35.5,
"h12": 35.5,
"h24": 35.5,
"h48": 35.5,
"tm": "2025-06-06T22:00:00.000Z",
"state": 1,
"warning": 0
}
],
"warnDrpSt": [],
"crucialRz": [
{
"stcd": "61615300",
@ -277,8 +608,8 @@
"elev": null,
"hasRz": true,
"type": "sw",
"tm": "2025-06-08T03:00:00.000Z",
"rz": 134.21,
"tm": "2025-06-06T21:00:00.000Z",
"rz": 133.89,
"state": 1
}
]

File diff suppressed because it is too large Load Diff

View File

@ -337,9 +337,9 @@
},
"白蚁监测": {
"width": 20,
"height": 32,
"height": 30,
"x": 74,
"y": 290,
"y": 286,
"pixelRatio": 0.5,
"visible": true
},

View File

@ -24,23 +24,9 @@ export const DrpRealPromise = new CachePromise(
() => fetch(`${process.env.PUBLIC_URL}/data3/drpReal.json`)
.then((response) => response.json())
// .then(data=>{
// const cs = []
// const list = data.map((item)=>{
// const obj = {...item}
// const num = item.lgtd.toString()||'0.000';
// const num2 = Number(num.slice(num.length-1,num.length))
// obj.h1 = item.h1+num2
// obj.h3 = item.h3+num2*1.2
// obj.h6 = item.h6+num2*1.5
// obj.h12 = item.h12+num2*1.6
// obj.h24 = item.h24+num2*1.8
// obj.h48 = item.h48+num2*1.9
// return obj
// })
// debugger
// return list
// })
.then(data => {
return data.filter(o=>o.state===1)
})
.catch(() => null),
5000
);
@ -70,27 +56,31 @@ export const SkRealPromise = new CachePromise(
() => fetch(`${process.env.PUBLIC_URL}/data3/skReal.json`)
.then((response) => response.json())
// .then(data=>data.map(o=>{
// return {...o,layer:'RealSkLayer',layerPop:'RealSkPop'}
// }))
.then(data => {
return data.map(o => ({ ...o, aRz: parseFloat((o.rz - o.fsltdz).toFixed(2)) }))
})
.then(data=>{
const list = data.map((item)=>{
const obj = {...item}
const num = item.lgtd.toString()||'0.000';
const num2 = Number(num.slice(num.length-1,num.length))
obj.h1 = item.h1+num2
obj.h3 = item.h3+num2*1.2
obj.h6 = item.h6+num2*1.5
obj.h12 = item.h12+num2*1.6
obj.h24 = item.h24+num2*1.8
obj.h48 = item.h48+num2*1.9
if(obj.w<=0.5){
// c.push(obj)
}
return obj
})
return list
})
// .then(data=>{
// const list = data.map((item)=>{
// const obj = {...item}
// const num = item.lgtd.toString()||'0.000';
// const num2 = Number(num.slice(num.length-1,num.length))
// obj.h1 = item.h1+num2
// obj.h3 = item.h3+num2*1.2
// obj.h6 = item.h6+num2*1.5
// obj.h12 = item.h12+num2*1.6
// obj.h24 = item.h24+num2*1.8
// obj.h48 = item.h48+num2*1.9
// if(obj.w<=0.5){
// // c.push(obj)
// }
// return obj
// })
// return list
// })
// .then(data=>data.filter(o=>o.rzState===1))
.catch(() => null),
5000
);

View File

@ -148,7 +148,7 @@ const map = {
setView(id) {
let layerVisible = {};
const map = window.__mapref
if (id === 1 || id == 503) {
if (id === 1 || id == 503) {
layerVisible = {
RealDrpLayer: true,
RealHDLayer: true,
@ -171,8 +171,8 @@ const map = {
YuwaiLayer: false,
AdcdLayer: true,
WataLayer: false,
RealSkLayerQ2:true,
RealHDLayerQ2:true,
RealSkLayerQ2: true,
RealHDLayerQ2: true,
}
Object.keys(DCPJ_TYPES).forEach(key => {
layerVisible['Dcpj_' + key + 'Layer'] = false;
@ -187,8 +187,8 @@ const map = {
YuwaiLayer: false,
AdcdLayer: true,
WataLayer: false,
RealSkLayerQ2:true,
RealHDLayerQ2:true,
RealSkLayerQ2: true,
RealHDLayerQ2: true,
}
Object.keys(DCPJ_TYPES).forEach(key => {
layerVisible['Dcpj_' + key + 'Layer'] = false;
@ -228,7 +228,7 @@ const map = {
Object.keys(DCPJ_TYPES).forEach(key => {
layerVisible['Dcpj_' + key + 'Layer'] = false;
});
}else if (id === 5) {
} else if (id === 5) {
layerVisible = {
RealDrpLayer: true,
RealHDLayer: false,
@ -246,14 +246,16 @@ const map = {
RealDrpLayer: false,
RealHDLayer: false,
RealSkLayer: false,
RainDrpLayer:true,
ShuikuLayer:true,
RainDrpLayer: true,
ShuikuLayer: false,
BxSkLayer: true,
FzdxLayer: false,
WataLayer: false,
AdcdLayer: true,
RoadLayer: true,
RivlLayer: true,
RealHDLayerQ2: true,
RealSkLayerQ2: true
};
Object.keys(DCPJ_TYPES).forEach(key => {
layerVisible['Dcpj_' + key + 'Layer'] = false;
@ -314,11 +316,17 @@ const map = {
AdcdLayer: true,
RoadLayer: true,
RivlLayer: true,
BxjcLayer: true,
SyjcLayer: true,
SljcLayer: true,
ByjcLayer:true
BxjcLayer: false,
SyjcLayer: false,
SljcLayer: false,
ByjcLayer: false
};
dispatch.runtime.setCameraTarget({
center: [114.88069, 31.171967],
zoom: 12,
pitch: 60,
bearing: 0
});
Object.keys(DCPJ_TYPES).forEach(key => {
layerVisible['Dcpj_' + key + 'Layer'] = false;
});
@ -342,7 +350,7 @@ const map = {
layerVisible = {
RealDrpLayer: false,
RealHDLayer: false,
RealSkLayer: true,
RealSkLayer: false,
BxSkLayer: false,
FzdxLayer: true,
WataLayer: false,
@ -359,7 +367,7 @@ const map = {
RealHDLayer: false,
RealSkLayer: false,
BxSkLayer: false,
XunchaLayer:true,
XunchaLayer: true,
FzdxLayer: false,
WataLayer: false,
AdcdLayer: true,
@ -369,7 +377,7 @@ const map = {
Object.keys(DCPJ_TYPES).forEach(key => {
layerVisible['Dcpj_' + key + 'Layer'] = false;
});
} else if (id === 207) {
} else if (id === 200) {
layerVisible = {
RealDrpLayer: false,
RealHDLayer: false,
@ -395,8 +403,8 @@ const map = {
AdcdLayer: true,
RoadLayer: true,
RivlLayer: true,
ShuichangLayer:true,
ShuiyuandiLayer:false,
ShuichangLayer: true,
ShuiyuandiLayer: false,
};
Object.keys(DCPJ_TYPES).forEach(key => {
layerVisible['Dcpj_' + key + 'Layer'] = false;
@ -412,10 +420,10 @@ const map = {
AdcdLayer: true,
RoadLayer: true,
RivlLayer: true,
ShuichangLayer:true,
ShuichangLayer: true,
ShuichangQLayer: true,
ShuiyuandiQLayer:true,
ShuizhiLayer:true,
ShuiyuandiQLayer: true,
ShuizhiLayer: true,
ShuiyuandiLayer: true,
};
Object.keys(DCPJ_TYPES).forEach(key => {
@ -432,13 +440,13 @@ const map = {
AdcdLayer: true,
RoadLayer: true,
RivlLayer: true,
ShuichangLayer:true,
ShuichangLayer: true,
ShuichangQLayer: true,
};
Object.keys(DCPJ_TYPES).forEach(key => {
layerVisible['Dcpj_' + key + 'Layer'] = false;
});
} else if ( id === 303 || id === 306 || id === 305) {
} else if (id === 303 || id === 306 || id === 305) {
layerVisible = {
RealDrpLayer: false,
RealHDLayer: false,
@ -453,7 +461,7 @@ const map = {
Object.keys(DCPJ_TYPES).forEach(key => {
layerVisible['Dcpj_' + key + 'Layer'] = false;
});
}else if ( id === 307) {
} else if (id === 307) {
layerVisible = {
RealDrpLayer: false,
RealHDLayer: true,
@ -485,7 +493,7 @@ const map = {
Object.keys(DCPJ_TYPES).forEach(key => {
layerVisible['Dcpj_' + key + 'Layer'] = false;
});
}else if (id == 504) {
} else if (id == 504) {
layerVisible = {
RealDrpLayer: true,
TrsqLayer: true,
@ -495,7 +503,7 @@ const map = {
Object.keys(DCPJ_TYPES).forEach(key => {
layerVisible['Dcpj_' + key + 'Layer'] = false;
});
}else if (id == 505) {
} else if (id == 505) {
layerVisible = {
BzLayer: true,
SbLayer: true,
@ -507,7 +515,7 @@ const map = {
Object.keys(DCPJ_TYPES).forEach(key => {
layerVisible['Dcpj_' + key + 'Layer'] = false;
});
}else if (id == 506 || id == 507) {
} else if (id == 506 || id == 507) {
layerVisible = {
AdcdLayer: true,
RivlLayer: true,
@ -517,7 +525,7 @@ const map = {
layerVisible['Dcpj_' + key + 'Layer'] = true;
} else {
layerVisible['Dcpj_' + key + 'Layer'] = false;
}
});
}
@ -527,9 +535,9 @@ const map = {
dispatch.runtime.setFeaturePop(null);
if (id === 8){
if (id === 8) {
dispatch.rcview.showRealContour('h24')
}else{
} else {
dispatch.runtime.setLayerSetting({ contour: null, dem: undefined });
dispatch.runtime.setLayerSetting({ planeArea: null });
dispatch.map.setLayerVisible({ ContourLayer: false });
@ -562,14 +570,209 @@ const map = {
dispatch.runtime.setYyfa({})
}
if (id === 3) {
if (
id === 3
|| id === 203
|| id === 205
|| id === 206
) {
dispatch.map.setLayerSetting({ dom: true });
// map.setLayoutProperty('卫星图', 'visibility', 'visible');
} else {
dispatch.map.setLayerSetting({dom: false});
dispatch.map.setLayerSetting({ dom: false });
// map.setLayoutProperty('卫星图', 'visibility', 'none');
}
if (id == 203) {
const skdata = [
{
"stcd": "61614200",
"type": "sk",
"hasRz": true,
"stnm": "浮桥河水库",
"adcd": "421181100000",
"wscd": null,
"importancy": 0,
"lgtd": 114.875,
"lttd": 31.166667,
"elev": 0,
"damel": 71.33,
"dsflz": 68.04,
"fsltdz": 64.89,
"ddz": 51.78,
"zcxsw": 64.89,
"drpTm": "2025-06-03T02:00:00.000Z",
"today": 0,
"h1": 5,
"h3": 6,
"h6": 7.5,
"h12": 8,
"h24": 9,
"h48": 26,
"drpState": 1,
"rz": 60.71,
"w": 162.8,
"a_fsltdz": -4.18,
"rzTm": "2025-06-03T02:00:00.000Z",
"rzWarning": 0,
"rzState": 1,
"aRz": -4.18
},
{
"stcd": "61613010",
"type": "sk",
"hasRz": true,
"stnm": "明山水库",
"adcd": "421181103000",
"wscd": null,
"importancy": 0,
"lgtd": 115.066667,
"lttd": 31.016667,
"elev": 0,
"damel": 98.7,
"dsflz": 96.07,
"fsltdz": 93,
"ddz": 78.02,
"zcxsw": 93,
"drpTm": "2025-06-03T02:00:00.000Z",
"today": 0,
"h1": 7,
"h3": 8.4,
"h6": 10.5,
"h12": 11.200000000000001,
"h24": 12.6,
"h48": 25.799999999999997,
"drpState": 1,
"rz": 84.43,
"w": 49.5,
"a_fsltdz": -8.569999999999993,
"rzTm": "2025-06-03T02:00:00.000Z",
"rzWarning": 0,
"rzState": 1,
"aRz": -8.57
},
{
"stcd": "61612610",
"type": "sk",
"hasRz": true,
"stnm": "三河口水库",
"adcd": "421181109000",
"wscd": null,
"importancy": 0,
"lgtd": 115.166667,
"lttd": 31.333333,
"elev": 0,
"damel": 156.8,
"dsflz": 154.99,
"fsltdz": 149,
"ddz": 124,
"zcxsw": 149,
"drpTm": "2025-06-03T02:00:00.000Z",
"today": 0,
"h1": 7,
"h3": 8.4,
"h6": 10.5,
"h12": 11.200000000000001,
"h24": 12.6,
"h48": 25.799999999999997,
"drpState": 1,
"rz": 141.45,
"w": 77.8,
"a_fsltdz": -7.550000000000011,
"rzTm": "2025-06-03T01:00:00.000Z",
"rzWarning": 0,
"rzState": 1,
"aRz": -7.55
},
{
"stcd": "61612700",
"type": "sk",
"hasRz": true,
"stnm": "碧绿河水库",
"adcd": "421181109000",
"wscd": null,
"importancy": 0,
"lgtd": 115.214444,
"lttd": 31.299722,
"elev": 0,
"damel": 142.9,
"dsflz": 139.08,
"fsltdz": 137,
"ddz": 105,
"zcxsw": 137,
"drpTm": "2025-06-03T02:00:00.000Z",
"today": 0,
"h1": 4,
"h3": 4.8,
"h6": 6,
"h12": 6.4,
"h24": 7.2,
"h48": 22.6,
"drpState": 1,
"rz": 119.6,
"w": 13.15,
"a_fsltdz": -17.400000000000006,
"rzTm": "2025-06-03T00:00:00.000Z",
"rzWarning": 0,
"rzState": 2,
"aRz": -17.4
}
]
const layer = map.getLayer('关联站点')
if (layer) {
map.removeLayer('关联站点');
map.removeSource('关联站点');
}
map.addLayer({
'id': '关联站点',//+new Date().getTime(),
'type': 'symbol',
'source': {
'type': 'geojson',
'data': {
'type': 'FeatureCollection',
'features': [],
},
},
'layout': {
'icon-allow-overlap': true,
'text-allow-overlap': true,
'icon-image': '水库-离线',
'icon-size': [
'interpolate', ['linear'], ['zoom'],
10, 0.4,
14, 0.8,
],
'text-allow-overlap': true,
'text-size': [
'interpolate', ['linear'], ['zoom'],
10, 10,
14, 14,
],
'text-font': ['Roboto Black'],
'text-field': [
'step',
['zoom'],
'',
12, ['get', 'stnm']
],
'text-anchor': 'top',
'text-offset': [0, 1],
},
'paint': {
'text-color': '#fff'
},
'visibility': 'visible',
});
map.getSource('关联站点').setData(parseGeoJSON(skdata))
}
if(id!==200&&id!==203&&id!==205&&id!==206){
const layer = map.getLayer('临时水库tz')
if(layer){
map.removeLayer('临时水库tz');
map.removeSource('临时水库tz');
}
}
}
})
};

View File

@ -82,9 +82,8 @@ export default function calcLayout(view, rightStack, hidePanels) {
} else if (view === 203) {
left = [
{ key: '天气' },
{ key: '变形监测', style: { height: '20rem', flexGrow: 1 } },
{ key: '渗压监测', style: { height: '20rem', flexGrow: 1 } },
{ key: '渗流监测', style: { height: '20rem', flexGrow: 1 } },
{ key: '关联站点',style: { height: '15rem', flexGrow: 1 } },
{ key: '水库水量统计',style: { height: '22rem' } },
// { key: '安全监测', style: { height: '20rem', flexGrow: 1 } },
];
leftFullHeight = true;
@ -108,11 +107,12 @@ export default function calcLayout(view, rightStack, hidePanels) {
{ key: '巡查任务总览', style: { height: '40rem', flexGrow: 1 } },
];
leftFullHeight = true;
} else if (view === 207) {
} else if (view === 200) {
left = [
{ key: '天气' },
{ key: '水库总览', style: { height: '24rem', flexGrow: 1 } },
{ key: '水库列表', style: { height: '24rem', flexGrow: 1 } },
{ key: '水库总览', style: { height: '30rem', flexGrow: 1 } },
{ key: '超汛水库', style: { height: '16rem'} },
// { key: '水库列表', style: { height: '16rem'} },
];
} else if (view === 301) {
left = [
@ -320,12 +320,12 @@ export default function calcLayout(view, rightStack, hidePanels) {
{ key: '巡查问题看板', style: { height: '70%', flexGrow: 1 } },
{ key: '水库管护', style: { height: '10rem', flexGrow: 1 } },
];
} else if (view === 207) {
} else if (view === 200) {
right = [
{ key: '警报' },
{ key: '关联站点',style: { height: '15rem', flexGrow: 1 } },
{ key: '水库水量统计',style: { height: '22rem' } },
{ key: '洪水防御',style: { height: '18rem', flexGrow: 1 } },
// { key: '关联站点',style: { height: '15rem', flexGrow: 1 } },
// { key: '水库水量统计',style: { height: '22rem' } },
// { key: '洪水防御',style: { height: '18rem', flexGrow: 1 } },
];
rightFullHeight = true;
} else if (view === 301) {

View File

@ -56,7 +56,7 @@ function HDStDlg({ record, onClose }) {
<DpTabs value={value} indicatorColor="primary" onChange={(_, v) => setValue(v)}>
<DpTab label={record.res_nm+'-'+record.cd_nm} />
</DpTabs>
<button className={classes.addButton} onClick={()=>setVisible(true)}>三维展示</button>
{/* <button className={classes.addButton} onClick={()=>setVisible(true)}>三维展示</button> */}
<DpCloseButton onClick={onClose} />
</DpAppBar>
<div style={{ padding: '2rem', hminHeight: '50rem',maxHeight: '60rem' }}>

View File

@ -0,0 +1,114 @@
import { Grid, withStyles, TableCell } from '@material-ui/core';
import React,{useState} from 'react';
import useRequest from '../../../../utils/useRequest';
import { skInfo } from '../../../../models/_/search';
import { adnmCun, adnmZhen } from '../../../../models/_/adcd';
import { Person } from '@material-ui/icons';
import PanelBox from '../../components/PanelBox';
import { makeStyles } from '@material-ui/core/styles';
import Table from '@material-ui/core/Table';
import TableContainer from '@material-ui/core/TableContainer';
import TableBody from '@material-ui/core/TableBody';
import TableHead from '@material-ui/core/TableHead';
import TableRow from '@material-ui/core/TableRow';
// import DpTableCell from '../../../../layouts/mui/DpTableCell';
import DpTableRow from '../../../../layouts/mui/DpTableRow';
import { DatePicker } from 'antd';
import moment from 'moment';
import ReactECharts from 'echarts-for-react';
import ModalView from './view'
const { RangePicker } = DatePicker;
const useStyles = makeStyles({
tableContainer: {
background: '#182d42', // 设置表格容器的背景颜色
},
item: {
'& .MuiGrid-item': {
'& [class*="makeStyles-title"]': {
color: '#fff',
backgroundColor: '#104175',
},
},
},
});
const DpTableCell = withStyles({
head: {
backgroundColor: '#104175',
color: '#fff',
fontSize: '1rem',
padding: '0.5rem 0.3rem !important',
},
body: {
color: '#fff',
fontSize: '0.9rem',
padding: '0.7rem 0.3rem !important',
borderBottom: 'none',
position: "relative"
},
})(TableCell);
function SkInfo() {
const classes = useStyles();
const data = [
{
type: '爆管',
location: '龙池桥街道',
tm: '2025-06-06 15:38:00',
status:'已解除'
},
{
type: '压力异常',
location: '夫子河监测点',
tm: '2025-06-06 15:38:00',
status:'未解除'
},
{
type: '漏损',
location: '南湖街道',
tm: '2025-06-06 15:38:00',
status:'已解除'
}
];
const [visible, setVisible] = useState(false)
return (
<div style={{ display: 'flex' }}>
<TableContainer style={{ height: '49vh' }} className={classes.tableContainer}>
<Table size="small" stickyHeader>
<TableHead>
<TableRow style={{ padding: '30px 0' }}>
<DpTableCell align="center">序号</DpTableCell>
<DpTableCell align="center">报警类型</DpTableCell>
<DpTableCell align="center">所在位置</DpTableCell>
<DpTableCell align="center">报警时间</DpTableCell>
<DpTableCell align="center">状态</DpTableCell>
<DpTableCell align="center">处置情况</DpTableCell>
</TableRow>
</TableHead>
<TableBody>
{data.map((row,i) => (
<DpTableRow key={row.stcd}>
<DpTableCell align="center">
<div className="table-ellipsis cursor-pointer" onClick={() => { }}>{i+ 1}</div>
</DpTableCell>
<DpTableCell align="center">{row.type}</DpTableCell>
<DpTableCell align="center">{row.location}</DpTableCell>
<DpTableCell align="center">{row.tm}</DpTableCell>
<DpTableCell align="center">{row.status}</DpTableCell>
<DpTableCell align="center" onClick={() => setVisible(true)}>查看</DpTableCell>
</DpTableRow>
))}
</TableBody>
</Table>
</TableContainer>
<ModalView
open={visible}
onClose={() => setVisible(false)}
></ModalView>
</div>
)
}
export default SkInfo;

View File

@ -15,10 +15,14 @@ import SkPlan from '../../components/SkInfo/SkPlan';
import DpBackgroundDrop from '../../../../layouts/mui/DpBackdrop';
import DpCloseButton from '../../../../layouts/mui/DpCloseButton';
import ZrrPlan from './zrrPlan'
import Shuizhijc from './Shuizhijc'
import Shuizhijc from './loushun'
import Jianceflow from './jianceflow'
import Yxsj from './yxsj'
import Spjk from './spjk'
import Bjjl from './Bjjl'
import Jbxx from './jbxx'
import './index.less'
function SkDlg({ record, onClose }) {
@ -47,8 +51,8 @@ function SkDlg({ record, onClose }) {
<div style={{ padding: '2rem', height: '50rem' }}>
{value === 0 && <Jbxx record={record} />}
{value === 1 && <Yxsj record={record} />}
{value === 2 && <Jianceflow record={record} />}
{value === 3 && <Spjk record={record} />}
{value === 2 && <Bjjl record={record} />}
{value === 3 && <Shuizhijc record={record} />}
</div>
</DialogContent>

View File

@ -0,0 +1,221 @@
import { Grid, withStyles, TableCell } from '@material-ui/core';
import React from 'react';
import useRequest from '../../../../utils/useRequest';
import { skInfo } from '../../../../models/_/search';
import { adnmCun, adnmZhen } from '../../../../models/_/adcd';
import { Person } from '@material-ui/icons';
import PanelBox from '../../components/PanelBox';
import { makeStyles } from '@material-ui/core/styles';
import Table from '@material-ui/core/Table';
import TableContainer from '@material-ui/core/TableContainer';
import TableBody from '@material-ui/core/TableBody';
import TableHead from '@material-ui/core/TableHead';
import TableRow from '@material-ui/core/TableRow';
// import DpTableCell from '../../../../layouts/mui/DpTableCell';
import DpTableRow from '../../../../layouts/mui/DpTableRow';
import { DatePicker } from 'antd';
import moment from 'moment';
import ReactECharts from 'echarts-for-react';
const { RangePicker } = DatePicker;
const useStyles = makeStyles({
tableContainer: {
background: '#182d42', // 设置表格容器的背景颜色
},
item: {
'& .MuiGrid-item': {
'& [class*="makeStyles-title"]': {
color: '#fff',
backgroundColor: '#104175',
},
},
},
});
const DpTableCell = withStyles({
head: {
backgroundColor: '#104175',
color: '#fff',
fontSize: '1rem',
padding: '0.5rem 0.3rem !important',
},
body: {
color: '#fff',
fontSize: '0.9rem',
padding: '0.7rem 0.3rem !important',
borderBottom: 'none',
position: "relative"
},
})(TableCell);
function SkInfo() {
const classes = useStyles();
const data = [
{ time: '06-08 12:00', turbidity: 0.3, chlorine: 0.5, ph: 7.2 },
{ time: '06-08 11:00', turbidity: 0.2, chlorine: 0.4, ph: 7.1 },
{ time: '06-08 10:00', turbidity: 0.4, chlorine: 0.6, ph: 7.3 },
{ time: '06-08 09:00', turbidity: 0.3, chlorine: 0.5, ph: 7.2 },
{ time: '06-08 08:00', turbidity: 0.2, chlorine: 0.4, ph: 7.0 },
{ time: '06-08 07:00', turbidity: 0.4, chlorine: 0.5, ph: 7.4 },
{ time: '06-08 06:00', turbidity: 0.3, chlorine: 0.6, ph: 7.2 },
{ time: '06-08 05:00', turbidity: 0.2, chlorine: 0.5, ph: 7.1 },
{ time: '06-08 04:00', turbidity: 0.3, chlorine: 0.4, ph: 7.3 },
{ time: '06-08 03:00', turbidity: 0.4, chlorine: 0.5, ph: 7.2 },
{ time: '06-08 02:00', turbidity: 0.3, chlorine: 0.6, ph: 7.1 },
{ time: '06-08 01:00', turbidity: 0.2, chlorine: 0.5, ph: 7.3 },
{ time: '06-08 00:00', turbidity: 0.3, chlorine: 0.4, ph: 7.2 },
{ time: '06-07 23:00', turbidity: 0.4, chlorine: 0.5, ph: 7.1 },
{ time: '06-07 22:00', turbidity: 0.3, chlorine: 0.6, ph: 7.3 },
{ time: '06-07 21:00', turbidity: 0.2, chlorine: 0.5, ph: 7.2 },
{ time: '06-07 20:00', turbidity: 0.3, chlorine: 0.4, ph: 7.1 },
{ time: '06-07 19:00', turbidity: 0.4, chlorine: 0.5, ph: 7.3 },
{ time: '06-07 18:00', turbidity: 0.3, chlorine: 0.6, ph: 7.2 },
{ time: '06-07 17:00', turbidity: 0.2, chlorine: 0.5, ph: 7.1 },
{ time: '06-07 16:00', turbidity: 0.3, chlorine: 0.4, ph: 7.3 },
{ time: '06-07 15:00', turbidity: 0.4, chlorine: 0.5, ph: 7.2 },
{ time: '06-07 14:00', turbidity: 0.3, chlorine: 0.6, ph: 7.1 },
{ time: '06-07 13:00', turbidity: 0.2, chlorine: 0.5, ph: 7.3 },
{ time: '06-07 12:00', turbidity: 0.3, chlorine: 0.4, ph: 7.2 }
];
const option = {
tooltip: {
trigger: 'axis'
},
grid: {
top: '15%',
left: '3%',
right: '8%',
bottom: '3%',
containLabel: true
},
xAxis: {
type: 'category',
boundaryGap: false,
data: ['04-20', '04-21', '04-22', '04-23', '04-24', '04-25', '04-26'],
axisLine: {
lineStyle: {
color: '#fff'
}
},
axisLabel: {
color: '#fff'
}
},
yAxis: {
type: 'value',
name: '流量m³/h',
splitLine: {
lineStyle: {
type: 'dashed',
color: 'rgba(255,255,255,0.2)'
}
},
axisLine: {
lineStyle: {
color: '#fff'
}
},
axisLabel: {
color: '#fff'
}
},
series: [
{
name: '夜间流量',
type: 'line',
smooth: true,
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0,
color: 'rgba(0,255,255,0.3)'
}, {
offset: 1,
color: 'rgba(0,255,255,0)'
}]
}
},
lineStyle: {
color: '#00ffff'
},
data: [180, 205, 135, 150, 180, 120, 190],
markLine: {
silent: true,
lineStyle: {
color: '#ffd700',
type: 'dashed'
},
data: [{
yAxis: 180,
name: '安全流量上限'
}]
}
}
]
};
return (
<div style={{ display: 'flex' }}>
<div style={{ width: 600 }}>
<div className='toolbar' style={{ marginBottom: '10px' }}>
<div className='tm' style={{ position: "relative", zIndex: 999999, width: '60%' }}>
<RangePicker
width="50%"
className='time-picker'
style={{
flex: 1,
background: "transparent",
border: "none",
color: "#fff",
}}
allowClear
format="YYYY-MM-DD HH:mm"
showTime={{
format: 'HH:mm',
}}
value={[moment('2025-04-20 12:00:00'), moment('2025-04-26 12:00:00')]}
/>
</div>
<button className='search'>查询</button>
</div>
<TableContainer style={{ height: '49vh' }} className={classes.tableContainer}>
<Table size="small" stickyHeader>
<TableHead>
<TableRow style={{ padding: '30px 0' }}>
<DpTableCell align="center">序号</DpTableCell>
<DpTableCell align="center">漏水量</DpTableCell>
<DpTableCell align="center">供水量</DpTableCell>
<DpTableCell align="center">漏损率%</DpTableCell>
</TableRow>
</TableHead>
<TableBody>
{[].map((row,i) => (
<DpTableRow key={row.stcd}>
<DpTableCell align="center">
<div className="table-ellipsis cursor-pointer" onClick={() => { }}>{i+ 1}</div>
</DpTableCell>
<DpTableCell align="center">{row.turbidity}</DpTableCell>
<DpTableCell align="center">{row.chlorine}</DpTableCell>
<DpTableCell align="center">{row.ph}</DpTableCell>
</DpTableRow>
))}
</TableBody>
</Table>
</TableContainer>
</div>
<div style={{ height: '500px', width: '100%', flex: 1 }}>
<ReactECharts
option={option}
style={{ height: '100%' }}
opts={{ renderer: 'canvas' }}
/>
</div>
</div>
)
}
export default SkInfo;

View File

@ -0,0 +1,40 @@
import React from 'react';
import DpTab from '../../../../layouts/mui/DpTab';
import Dialog from '@material-ui/core/Dialog';
import DialogContent from '@material-ui/core/DialogContent';
import DpPaperComponent from '../../../../layouts/mui/DpPaperCompanent';
import DpTabs from '../../../../layouts/mui/DpTabs';
import DpAppBar from '../../../../layouts/mui/DpAppBar';
import DpBackgroundDrop from '../../../../layouts/mui/DpBackdrop';
import DpCloseButton from '../../../../layouts/mui/DpCloseButton';
function HDStDlg({ record, onClose,open }) {
const [value, setValue] = React.useState(0);
return (
<Dialog
open={open}
onClose={onClose}
maxWidth="xl"
style={{ borderRadius: 0 }}
PaperComponent={DpPaperComponent}
BackdropComponent={DpBackgroundDrop}
>
<div className="boxhead"></div>
<DialogContent style={{ padding: 0, width: '70rem', overflowX: 'hidden',height:'50rem' }}>
<DpAppBar position="sticky">
<DpTabs value={value} indicatorColor="primary" onChange={(_, v) => setValue(v)}>
<DpTab label="任务信息" />
</DpTabs>
<DpCloseButton onClick={onClose} />
</DpAppBar>
<div style={{padding:10}}>
<img src={`${process.env.PUBLIC_URL}/assets/loushun.png`} style={{width:'100%'}}></img>
</div>
</DialogContent>
<div className="boxfoot"></div>
</Dialog>
)
}
export default React.memo(HDStDlg);

View File

@ -45,8 +45,8 @@ function SkDlg({ record, onClose }) {
<DpCloseButton onClick={onClose} />
</DpAppBar>
<div style={{ padding: '2rem', height: '50rem' }}>
{value === 0 && <DrpSearch record={record} />}
{value === 1 && <RzSearch record={record} />}
{value === 0 && <DrpSearch record={{...record,tm:record.rzTm}} />}
{value === 1 && <RzSearch record={{...record,tm:record.rzTm}} />}
{value === 2 && <SkImgSearch record={record} />}
{value === 3 && <SkInfo record={record} />}
{value === 4 && <ZrrPlan />}

View File

@ -40,6 +40,7 @@ function HDStDlg({ record, onClose }) {
<TableHead>
<TableRow>
<DpTableCell align="center">序号</DpTableCell>
<DpTableCell align="center">水库名称</DpTableCell>
<DpTableCell align="center">预警时间</DpTableCell>
<DpTableCell align="center">测点编号</DpTableCell>
<DpTableCell align="center">预警级别</DpTableCell>
@ -53,6 +54,7 @@ function HDStDlg({ record, onClose }) {
<DpTableCell align="center">
<div className="table-ellipsis cursor-pointer" >1</div>
</DpTableCell>
<DpTableCell align="center">浮桥河水库</DpTableCell>
<DpTableCell align="center">2025-5-20 10:00:00</DpTableCell>
<DpTableCell align="center">GN1</DpTableCell>
<DpTableCell align="center">红色</DpTableCell>

View File

@ -204,7 +204,7 @@ function DrpChart({ record }) {
const classes = useStyles();
const tm = [moment().add(-24, 'hour'), moment()];
const resultTm = ['2025-06-07 10:00:00','2025-06-08 10:00:00']//normalizeSearchTmRange(tm, 'h');
const resultTm = [moment(record.tm).add(-1,'days').format('YYYY-MM-DD HH:00:00'),moment(record.tm).format('YYYY-MM-DD HH:00:00')]//normalizeSearchTmRange(tm, 'h');
useEffect(() => {
drpSearch(record.type, record.stcd, 'h', resultTm, record.countycode).then((data) => {
@ -378,9 +378,9 @@ function DrpChart({ record }) {
option={option}
style={{ height: '15rem', width: '30rem' }}
/>
<div className={classes.grid}>
{/* <Typography variant="subtitle2">上报时间: {record.tm ? moment(record.tm).format('YYYY-MM-DD HH:mm:ss') : '-'}</Typography> */}
{/* <div className={classes.realdrpgrid}>
<div className={classes.grid} >
<Typography variant="subtitle2" style={{color:"#ffffff"}}>上报时间: {record.tm ? moment(record.tm).format('YYYY-MM-DD HH:mm:ss') : '-'}</Typography>
<div className={classes.realdrpgrid}>
{
['h1', 'h3', 'h6', 'h12', 'h24'].map(key => (
<div key={key} className="item">
@ -389,7 +389,7 @@ function DrpChart({ record }) {
</div>
))
}
</div> */}
</div>
</div>
</>
)

View File

@ -9,9 +9,9 @@ function RealDrpTip({ record, dispatch }) {
const [type, setType] = useState('drp');
const changeView = () => {
setType(type === 'drp' ? 'rz' : 'drp');
}
// const changeView = () => {
// setType(type === 'drp' ? 'rz' : 'drp');
// }
const viewInfo = () => {
dispatch?.runtime.setInfoDlg({ layerId: 'RealDrpLayer', properties: record })
@ -26,7 +26,7 @@ function RealDrpTip({ record, dispatch }) {
<div className="extra cursor-pointer" onClick={viewInfo}>详细</div>
</div>
{type === 'drp' ? <DrpChart record={record} /> : null}
{type === 'rz' ? <HDChart record={record} /> : null}
{/* {type === 'rz' ? <HDChart record={record} /> : null} */}
<div className="boxfoot"></div>
</>
)

View File

@ -28,8 +28,8 @@ function HDChart({ record }) {
const [data, setData] = useState([]);
const tm = [moment().add(-24, 'hour'), moment()];
const resultTm = normalizeSearchTmRange(tm, 'h');
// const resultTm = normalizeSearchTmRange(tm, 'h');
const resultTm = [moment(record.tm).add(-1,'days').format('YYYY-MM-DD HH:00:00'),moment(record.tm).format('YYYY-MM-DD HH:00:00')]//normalizeSearchTmRange(tm, 'h');
useEffect(() => {
rzSearch(record.type, record.stcd, 'h', resultTm, record.countycode).then((data) => {
setData(data || []);
@ -196,25 +196,25 @@ function HDChart({ record }) {
style={{ height: '15rem', width: '30rem' }}
/>
<div className={classes.grid}>
<Typography variant="subtitle2">上报时间: {rtm ? moment(rtm).format('YYYY-MM-DD HH:mm:ss') : '-'}</Typography>
<div className={classes.realdrpgrid}>
<Typography variant="subtitle2" style={{color:'#ffffff'}}>上报时间: {rtm ? moment(rtm).format('YYYY-MM-DD HH:mm:ss') : '-'}</Typography>
{/* <div className={classes.realdrpgrid}>
<div className="item">
<Typography variant="caption">水位</Typography>
<Typography variant="h5">{renderHDRz(record)}</Typography>
<Typography variant="h5" style={{color:"#fff"}}>{renderHDRz(record)}</Typography>
</div>
<div className="item">
<div className="item" >
<Typography variant="caption">设防水位</Typography>
<Typography variant="h5">{record.sfz || '--'}</Typography>
<Typography variant="h5" style={{color:"#fff"}}>{record.sfz || '--'}</Typography>
</div>
<div className="item">
<Typography variant="caption">警戒水位</Typography>
<Typography variant="h5">{record.wrz || '--'}</Typography>
<Typography variant="h5" style={{color:"#fff"}}>{record.wrz || '--'}</Typography>
</div>
<div className="item">
<Typography variant="caption">保证水位</Typography>
<Typography variant="h5">{record.grz || '--'}</Typography>
<Typography variant="h5" style={{color:"#fff"}}>{record.grz || '--'}</Typography>
</div>
</div>
</div> */}
</div>
</>
)

View File

@ -126,12 +126,27 @@ export default function MapCtrl({ initParams, onLoad }) {
}
layer.featureClicked(props, dispatch);
}
if(feature.layer.id==='sk1111'||feature.layer.id==='sk2222'){
if(feature.layer.id==='sk1111'||feature.layer.id==='sk2222'||feature.layer.id==='临时水库tz'||feature.layer.id==='临时水库'){
const record = feature.properties
dispatch.runtime.setFeaturePop({ type: 'RealSkPop', properties: record, coordinates: [record.lgtd, record.lttd] });
if(feature.layer.id==='临时水库tz'){
dispatch.map.setView(203)
sessionStorage.setItem('lastCenter',JSON.stringify([record.lgtd, record.lttd]))
}
dispatch.runtime.setFeaturePop({ type: record.layerPop, properties: record, coordinates: [record.lgtd, record.lttd] });
}
if(feature.layer.id==='关联站点'){
if (feature.layer.id === '关联站点') {
const record = feature.properties
if (record.cd_nm == 'GN1') {
dispatch?.runtime.setInfoDlg({ layerId: 'BxjcLayer', properties: record })
}else if (record.cd_nm == 'UPD1') {
dispatch?.runtime.setInfoDlg({ layerId: 'SyjcLayer', properties: record })
}else if (record.cd_nm == 'WE1') {
dispatch?.runtime.setInfoDlg({ layerId: 'SljcLayer', properties: record })
}else if (record.cd_nm == '0EA5DE') {
dispatch?.runtime.setInfoDlg({ layerId: 'ByjcLayer', properties: record })
}else if (record.stnm == '浮桥河水库') {
dispatch?.runtime.setInfoDlg({ layerId: 'RealSkLayer', properties: record })
}
// dispatch.runtime.setFeaturePop({ type: 'RealSkPop', properties: record, coordinates: [record.lgtd, record.lttd] });
}
}

View File

@ -46,8 +46,8 @@ const ShapeStyle = {
const page1 = [
{
"res_cd": "42118140035",
"res_lon": 115.14137,
"res_lat": 31.55095,
"res_lon": 114.88089,
"res_lat": 31.171467,
"cd": "01",
"cd_nm": "GN1",
"stnm": "GN1",
@ -65,7 +65,7 @@ const page1 = [
"eng_scal": "小1型",
"danger_stat": "非病险水库",
"label": "2023高标准",
"res_nm": "大堰口水库",
"res_nm": "浮桥河水库",
"de_value": -11.5381,
"dn_value": -11.2248,
"du_value": 113.8833,

View File

@ -72,36 +72,44 @@ export default class ByjcLayer extends BaseLayer {
let data =
// await PicStPromise.get();
[
{
"res_cd": "42118140004",
"res_nm": "永丰水库",
{
"cd": "1",
"cd_nm": "UPD1",
"ch": "0+060",
"res_reg_cd": "42118140011-A4",
"res_cd": "42118140038",
"res_nm": "浮桥河水库",
"res_lon": 114.88299,
"res_lat": 31.172700,
"stnm": "UPD1",
"province_cd": "420000000000",
"province_nm": "湖北省",
stnm:'0FA5DE',
"province_nm": "湖北省",
"city_cd": "421100000000",
"city_nm": "黄冈市",
"county_cd": "421181000000",
"county_nm": "麻城市",
"town_cd": "421181003000",
"town_nm": "南湖办事处",
"rv_name": "举水",
"town_cd": "421181113000",
"town_nm": "乘马岗镇",
"bas_guid": "鄂东五河片区",
"res_lon": 115.05541,
"res_lat": 31.11106,
"res_reg_cd": "42118140042-A4",
"eng_scal": "小1型",
"eng_g": "IV",
"children": [
{
"res_cd": "42118140004",
"res_nm": "永丰水库",
"cd": 5821,
"cd_nm": "永丰水库",
"termite_status": "n",
"tm": "2025-05-21 09:18:28",
"is_main_cd": "y"
}
]
"danger_stat": "非病险水库",
"label": "2023高标准",
"value": 164.8742,
"diff_value": -0.0275,
"trend": -1,
"is_has_data": "y",
"diff_rz": -0.6958,
"stcd": "4239",
"diff_rz_cd": 5.0554,
"max_cd_value": -0.0225,
"rz": 165.57,
"dt": "2025-05-20",
"diff5_value": -0.0737,
"trend5": -1,
"diff10_value": -0.1204,
"trend10": -1,
"diff30_value": -0.0633,
"trend30": -1
},
{
"res_cd": "42118140015",

View File

@ -50,7 +50,11 @@ const Style = {
],
'icon-size': [
'interpolate', ['linear'], ['zoom'],
10, ['case', ['==', ['get', 'rzWarning'], 1], 0.6, 0.3],
10,
['case',
['!=', ['get', 'rzState'], 1], 0.4,
['==', ['get', 'rzWarning'], 1], 0.7,
0.7],
14, 0.7,
],
'text-size': [

View File

@ -71,16 +71,17 @@ export default class SljcLayer extends BaseLayer {
let data =
// await PicStPromise.get();
[{
[
{
"cd": "1",
"cd_nm": "WE",
"ch": "1",
'stnm':'WE',
"res_reg_cd": "42118140042-A4",
"res_cd": "42118140004",
"res_nm": "永丰水库",
"res_lon": 115.05541,
"res_lat": 31.11106,
"res_nm": "浮桥河水库",
"res_lon": 114.88429,
"res_lat": 31.172700,
"province_cd": "420000000000",
"province_nm": "湖北省",
"city_cd": "421100000000",

View File

@ -78,9 +78,9 @@ export default class SyjcLayer extends BaseLayer {
"ch": "0+060",
"res_reg_cd": "42118140011-A4",
"res_cd": "42118140038",
"res_lon": 115.01664,
"res_lat": 31.40681,
"res_nm": "蛤蟆岗水库",
"res_nm": "浮桥河水库",
"res_lon": 114.87929,
"res_lat": 31.171467,
"stnm": "UPD1",
"province_cd": "420000000000",
"province_nm": "湖北省",

View File

@ -112,6 +112,7 @@ import Ddcg from './panels/Ddcg'
import Fadb from './panels/Fadb'
import Sksltj from './panels/Sksltj'
import Hsfy from './panels/Hsfy'
import Cxsk from './panels/Cxsk'
@ -397,6 +398,8 @@ export default function PanelIndex({ name, style, ...params }) {
return <Sbyj style={style} />
} else if (name === '供水负荷曲线') {
return <Gsfhqx style={style} />
} else if (name === '超汛水库') {
return <Cxsk style={style} />
}

View File

@ -19,15 +19,16 @@ const VIEWS = [
{ id: 7, title: '调度', img: '/assets/menu/辅助决策.png' },
]
},
{ id: 200, title: '水库', img: '/assets/menu/水库专题.png',children:[
{ id: 207, title: '水库总览', img: '/assets/menu/水库管理.png' },
// { id: 201, title: '雨情监测', img: '/assets/menu/雨情监测.png' },
// { id: 202, title: '水情监测', img: '/assets/menu/水情监测.png' },
{ id: 203, title: '水库监测', img: '/assets/menu/安全监测.png' },
// { id: 204, title: '视频监视', img: '/assets/menu/视频监视.png' },
{ id: 205, title: '防汛调度', img: '/assets/menu/防汛调度.png' },
{ id: 206, title: '巡查维养', img: '/assets/menu/水库管理.png' },
] },
// { id: 200, title: '水库', img: '/assets/menu/水库专题.png',children:[
// { id: 207, title: '水库总览', img: '/assets/menu/水库管理.png' },
// // { id: 201, title: '雨情监测', img: '/assets/menu/雨情监测.png' },
// // { id: 202, title: '水情监测', img: '/assets/menu/水情监测.png' },
// { id: 203, title: '水库监测', img: '/assets/menu/安全监测.png' },
// // { id: 204, title: '视频监视', img: '/assets/menu/视频监视.png' },
// { id: 205, title: '防汛调度', img: '/assets/menu/防汛调度.png' },
// { id: 206, title: '巡查维养', img: '/assets/menu/水库管理.png' },
// ] },
{ id: 200, title: '水库', img: '/assets/menu/水库专题.png'},
{
id: 300, title: '水厂', img: '/assets/menu/水利设施.png', children: [
{ id: 301, title: '供水态势', img: '/assets/menu/降雨中心.png' },
@ -136,7 +137,7 @@ export default function ActionDock({ }) {
}
}
}}>
<div className={clsx('button', { active: view === o.id })}>
<div className={clsx('button', { active: o.id===200?(view===207||view===203||view===205||view===206||view===200):view === o.id })}>
<img width={32} height={32} src={o.img} />
</div>
</div>

View File

@ -188,8 +188,8 @@ function DrpSearch({ record }) {
"year": "2025"
}
]
const [stm, handleDateChange1] = useState(() => moment().add(-1, 'd'));
const [etm, handleDateChange2] = useState(() => moment());
const [stm, handleDateChange1] = useState(() => moment(record.tm).add(-1, 'd'));
const [etm, handleDateChange2] = useState(() => moment(record.tm));
const [data, setData] = useState([]);
const searchTm = useMemo(() => {

View File

@ -9,11 +9,12 @@ import ReactEcharts from 'echarts-for-react';
import moment from 'moment'
import rzOption from './rzOption';
import DpAlert from '../../../../layouts/mui/DpAlert';
import { backgroundColor } from 'echarts/lib/theme/dark';
function RzSearch({ record }) {
console.log('r', record);
const [selectedDate1, handleDateChange1] = useState(() => moment().add(-1, 'd'));
const [selectedDate2, handleDateChange2] = useState(() => moment());
const [selectedDate1, handleDateChange1] = useState(() => moment(record.tm).add(-1, 'd'));
const [selectedDate2, handleDateChange2] = useState(() => moment(record.tm));
const [data, setData] = useState([]);
const searchTm = useMemo(() => {
@ -64,7 +65,7 @@ function RzSearch({ record }) {
<DpAlert style={{ width: '100%' }} severity="error">{searchTm.error}</DpAlert>
</DpToolComponent>
) : (
<DpResultComponent>
<DpResultComponent >
<ReactEcharts
option={option}
style={{ height: '100%' }}

View File

@ -1,5 +1,6 @@
import echarts from 'echarts/lib/echarts';
import { hdyjColor } from '../../../../utils/renutils';
import { backgroundColor } from 'echarts/lib/theme/dark';
export default function rzOption({ data, skinfo }) {
const serialData = data.map(obj => [obj.tm, obj.rz || obj.z || 0]);
@ -19,14 +20,15 @@ export default function rzOption({ data, skinfo }) {
];
} else if (data[0]) {
const { sfz, wrz, grz } = data[0];
const recordWrz = wrz||skinfo.wrz;
markLine.data = [];
if (sfz) {
sorted.push(sfz)
markLine.data.push({ label: { formatter: '设防水位' }, yAxis: sfz, lineStyle: { color: hdyjColor[1] } });
}
if (wrz) {
sorted.push(wrz)
markLine.data.push({ label: { formatter: '警戒水位' }, yAxis: wrz, lineStyle: { color: hdyjColor[2] } });
if (recordWrz) {
sorted.push(recordWrz)
markLine.data.push({ label: { formatter: '警戒水位' + `(${recordWrz})` }, yAxis: recordWrz, lineStyle: { color: hdyjColor[2] } });
}
if (grz) {
sorted.push(grz)
@ -51,9 +53,9 @@ export default function rzOption({ data, skinfo }) {
}
},
grid: {
x: 24,
x: 25,
y: 24,
x2: 38,
x2: 100,
y2: 42,
borderWidth: 0
},

View File

@ -155,6 +155,36 @@ export default function Title() {
</div>
</div>:null
}
{
(view===203||view===205||view===206)?
<div style={{position:'absolute',left:'50%',top:'6rem',transform:'translate(-50%, 0px)',display:'flex'}}>
{
[
{name:'返回',key:200},
{name:'水库监测',key:203},
{name:'防汛调度',key:205},
{name:'巡查维养',key:206},
].map((item)=>
<>
<div style={{padding:'1rem',color:item.key===view?'#65dbfb':'#ffffff',cursor:'pointer',margin:"0 1rem"}} onClick={()=>{
dispatch.map.setView(item.key)
if(item.key===200){
const center = JSON.parse(sessionStorage.getItem('lastCenter'))
if(center){
dispatch.runtime.setCameraTarget({
center: center,
zoom: 15,
pitch: 50,
bearing: 0
});
}
}
}}>{item.name}</div>
</>
)
}
</div>:null
}
</div>
)
}

View File

@ -67,7 +67,7 @@ export default function OverallContent({ data, skAll }) {
24小时中共有<span className={classes.number}>1</span>
个站点雨量为<span className={classes.sttype}>大暴雨</span>
<span className={classes.number}>261mm</span>
共产生<span className={classes.number}>3</span>21<span className={classes.number}>1</span>
共产生<span className={classes.number}>3</span>21<span className={classes.number}>1</span><span className={classes.number}>1</span>
</div>
{/* <div>

View File

@ -14,12 +14,13 @@ import clsx from 'clsx';
import { renderDrp } from '../../../../utils/renutils';
const data1 = [
{
{
"res_cd": "42118140035",
"res_lon": 115.14137,
"res_lat": 31.55095,
"res_lon": 114.88089,
"res_lat": 31.171467,
"cd": "01",
"cd_nm": "GN1",
"cd_nm": "GN1",
"stnm": "GN1",
"res_reg_cd": "42118140006-A4",
"ch": "0+000",
"province_cd": "420000000000",
@ -34,50 +35,17 @@ const data1 = [
"eng_scal": "小1型",
"danger_stat": "非病险水库",
"label": "2023高标准",
"res_nm": "大堰口水库",
"de_value": -4.2885,
"dn_value": -13.5384,
"du_value": 132.4892,
"res_nm": "浮桥河水库",
"de_value": -11.5381,
"dn_value": -11.2248,
"du_value": 113.8833,
"de_trend": null,
"dn_trend": null,
"du_trend": null,
"max_de": 1.0981,
"max_dn": -2.3255,
"max_du": 132.4892,
"dt": "2025-05-20",
"is_has_data": "y"
},
{
"res_cd": "42118140035",
"res_lon": 115.14137,
"res_lat": 31.55095,
"cd": "03",
"cd_nm": "GN3",
"res_reg_cd": "42118140006-A4",
"ch": "0+000",
"province_cd": "420000000000",
"province_nm": "湖北省",
"city_cd": "421100000000",
"city_nm": "黄冈市",
"county_cd": "421181000000",
"county_nm": "麻城市",
"town_cd": "421181112000",
"town_nm": "福田河镇",
"bas_guid": "鄂东五河片区",
"eng_scal": "小1型",
"danger_stat": "非病险水库",
"label": "2023高标准",
"res_nm": "大堰口水库",
"de_value": -10.73,
"dn_value": -9.8975,
"du_value": 121.3495,
"de_trend": null,
"dn_trend": null,
"du_trend": null,
"max_de": 1.0981,
"max_dn": -2.3255,
"max_du": 132.4892,
"dt": "2025-05-20",
"max_de": 2.9303,
"max_dn": -2.1648,
"max_du": 113.8833,
"dt": "2025-05-25",
"is_has_data": "y"
},
{
@ -640,14 +608,16 @@ function DrpReal({ style }) {
<DpTableRow key={row.stcd}>
<DpTableCell component="th" scope="row">
<div className="table-ellipsis cursor-pointer" onClick={() => {
const { res_lon:lgtd, res_lat:lttd } = row;
if (lgtd && lttd) {
dispatch.runtime.setCameraTarget({
center: [lgtd, lttd],
zoom: 15,
pitch: 60,
bearing: 0
});
const { res_lon: lgtd, res_lat: lttd,res_nm:stnm } = row;
if (stnm == '浮桥河水库') {
if (lgtd && lttd) {
dispatch.runtime.setCameraTarget({
center: [lgtd, lttd],
zoom: 17,
pitch: 60,
bearing: 0
});
}
}
}}>{row.res_nm}</div>
</DpTableCell>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,218 @@
import React, { useEffect, useMemo, useState } from 'react';
import moment from 'moment';
import { Typography, Collapse,Table, TableContainer, TableBody,TableHead, TableRow, TableSortLabel } from '@material-ui/core';
import DpTableCell from '../../../../layouts/mui/DpTableCell';
import DpTableRow from '../../../../layouts/mui/DpTableRow';
import { useDispatch } from 'react-redux';
import { InfoPopNames } from '../../InfoPops';
import { MailOutline } from '@material-ui/icons';
import { parseGeoJSON } from "../../../../utils/tools";
import { skInfo } from '../../../../models/_/search';
import config from '../../../../config';
function Item({ data, viewInfo, sendMessage }) {
return (
<div className="item">
<div className={`header alertsk`}>
</div>
<div className="content">
<div className="main">
<div className="title cursor-pointer" onClick={() => viewInfo(data)}>{data.stnm}</div>
<div className="span"></div>
<div className="extra">+{(data.rz - data.fsltdz).toFixed(2)}</div>
</div>
<div className="desc">
<Typography variant="body2">
水库汛限水位<span className="bold">{data.fsltdz}</span>m
</Typography>
<Typography variant="body2">
实时监测水位<span className="bold">{data.rz}</span>m<span className="bold red">{(data.rz - data.fsltdz).toFixed(2)}</span>m
</Typography>
</div>
<div className="tail">
<span>{moment(data.rzTm).format('YYYY-MM-DD HH:mm')}</span>
<MailOutline className="action" onClick={() => sendMessage(data)} />
</div>
</div>
</div>
);
}
function ARzSk({data}) {
data = [{
"stcd": "716129061",
"type": "sk",
"hasRz": true,
"stnm": "仰天窝水库",
"adcd": "421181201000",
"wscd": null,
"importancy": 0,
"lgtd": 115.106667,
"lttd": 31.126389,
"elev": 0,
"damel": 325.08,
"dsflz": 324.18,
"fsltdz": 323.5,
"ddz": 319.5,
"zcxsw": 323.5,
"drpTm": "2025-04-11T05:00:00.000Z",
"today": 0,
"h1": 0,
"h3": 0,
"h6": 0,
"h12": 0,
"h24": 0,
"h48": 0,
"drpState": 2,
"rz": 325.16,
"w": 0.132,
"a_fsltdz": 4.660000000000025,
"rzTm": "2025-04-11T05:00:00.000Z",
"rzWarning": 1,
"rzState": 2,
"pic": [
{
"stcd": "716129061",
"tm": "2023-03-12T06:05:00.000Z",
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716129061/20230312140500.jpg"
},
{
"stcd": "716129061",
"tm": "2023-03-12T07:25:00.000Z",
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716129062/20230312152500.jpg"
}
],
"layer": "RealSkLayer",
"layerPop": "RealSkPop",
"aRz": 4.66,
"strarz": "4.66"
}];
useEffect(()=>{
return ()=>{
const map = window.__mapref;
const layer = map.getLayer('临时水库')
if(layer){
map.removeLayer('临时水库');
map.removeSource('临时水库');
}
}
},[])
const dispatch = useDispatch();
const flyTo = (record) => {
const { lgtd, lttd } = record;
if (lgtd && lttd) {
// dispatch.runtime.setFeaturePop({ type: InfoPopNames.RealSkPop, properties: record, coordinates: [lgtd, lttd] });
dispatch.runtime.setCameraTarget({
center: [lgtd, lttd+0.005],
zoom: 15,
pitch: config.poiPitch,
});
}
}
const sendMessage = (record) => {
skInfo(record).then(data => {
if (data) {
console.log(record, data);
const txt = `${record.stnm}${moment(record.rzTm).format('D日H时')}测得水位为${record.rz}米,超汛限水位(${record.fsltdz})${(record.rz - record.fsltdz).toFixed(2)}米,请做好核实防范工作。`;
dispatch.runtime.setInfoDlg({ layerId: 'SkSmtp', properties: { stnm: data.stnm, stcd: data.stcd, personels: data.personels, txt } })
}
})
}
const setSkLayer = (data=[])=>{
const map = window.__mapref;
const layer = map.getLayer('临时水库')
if(layer){
map.removeLayer('临时水库');
map.removeSource('临时水库');
}
if(data.length===0){return}
map.addLayer({
'id': '临时水库',//+new Date().getTime(),
'type': 'symbol',
'source': {
'type': 'geojson',
'data': {
'type': 'FeatureCollection',
'features': [],
},
},
'layout': {
// 'icon-allow-overlap': true,
// 'text-allow-overlap': true,
'icon-image': '水库-超汛限', // 从properties中动态读取icon字段
'icon-size': [
'interpolate', ['linear'], ['zoom'],
10, 0.8,
14, 0.8,
],
'text-size': [
'interpolate', ['linear'], ['zoom'],
5, 10,
14, 14,
],
'text-font': ['Roboto Black'],
'text-field': [
'step',
['zoom'],
'',
8, ['get', 'stnm']
],
'text-anchor': 'top',
'text-offset': [0, 1],
},
'paint': {
'text-color': '#fff'
},
'visibility': 'visible',
});
map.getSource('临时水库').setData(parseGeoJSON(data))
}
return (
// <div className="dppanel-shyj">
// {
// data.map(o => (
// <Item key={o.stcd} viewInfo={flyTo} sendMessage={sendMessage} data={o} />
// ))
// }
// </div>
<TableContainer style={{ height: '12.8rem' }}>
<Table size="small" stickyHeader>
<TableHead>
<TableRow>
<DpTableCell style={{ minWidth: '4rem' }} align="left">水库名称</DpTableCell>
<DpTableCell style={{ minWidth: '5rem' }} align="center">类型</DpTableCell>
<DpTableCell style={{ minWidth: '3rem' }} align="center">水位(m)</DpTableCell>
<DpTableCell style={{ minWidth: '6rem' }} align="center">监测时间</DpTableCell>
</TableRow>
</TableHead>
{
data.map((tableRow,index)=>
<TableBody>
<DpTableRow key={tableRow.stcd}>
<DpTableCell align="center" >
<div className="table-ellipsis cursor-pointer" onClick={()=>{
flyTo(tableRow)
setSkLayer([tableRow])
}}>
{tableRow.stnm}
</div>
</DpTableCell>
<DpTableCell align="center" >(2)</DpTableCell>
<DpTableCell align="center" >{tableRow.rz}</DpTableCell>
<DpTableCell align="center" >{moment(tableRow.tm).format('YYYY-MM-DD HH:mm:ss')}</DpTableCell>
</DpTableRow>
</TableBody>
)
}
</Table>
</TableContainer>
)
}
export default ARzSk;

View File

@ -0,0 +1,17 @@
import clsx from 'clsx';
import React from 'react';
import PanelBox from '../../components/PanelBox';
import ARzSk from './ARzSk';
export default function Warn({ style }) {
return (
<PanelBox
style={style}
title="超汛水库"
color="green"
>
<ARzSk />
</PanelBox>
)
}

View File

@ -204,7 +204,11 @@ export default function Overall({ style }) {
<Button
key={item.value}
className={classes.timeButton}
onClick={() => setTimeRange(item.value)}
onClick={() => {
if (item.value == '1h' || item.value == '3h') {
setTimeRange(item.value)
}
}}
variant={timeRange === item.value ? 'contained' : 'outlined'}
style={{ padding: '5px 10px' }}
>
@ -255,10 +259,10 @@ export default function Overall({ style }) {
{/* 展开的详细内容可以在这里添加 */}{
station.id == 'heavy' && drpData.map(item => (
<TableRow onClick={() =>flyTo(item)}>
<DpTableCell style={{ width: '25%' }}>{item.stnm}</DpTableCell>
<DpTableCell style={{ width: '20%' }}>{item.today}</DpTableCell>
<DpTableCell style={{ width: '25%' }}>阎家河镇</DpTableCell>
<DpTableCell style={{ width: '30%' }}>桃林河</DpTableCell>
<DpTableCell style={{ width: '53%' }}>{item.stnm}</DpTableCell>
<DpTableCell style={{ width: '10%' }}>{item.today}</DpTableCell>
<DpTableCell style={{ width: '20%' }}>阎家河镇</DpTableCell>
<DpTableCell style={{ width: '27%' }}>桃林河</DpTableCell>
</TableRow>
))
}

View File

@ -24,6 +24,7 @@ const DRP_COLORS = [
'rgb(136, 11, 29)',
]
const data1 = [
{
"stcd": "61612150",
@ -887,14 +888,16 @@ function DrpReal({ style }) {
}
}
},[skObj])
const [showDrp, setShowdDrp] = useState(0)
const [showHd, setShowdHd] = useState(0)
useEffect(()=>{
const map = window.__mapref;
if(map){
if(tab==='1'&&drpData){
if(tab==='1'&&drpData && showDrp){
setLayer(drpData,'drp')
}
if(tab==='2'&&hdData){
if(tab==='2'&&hdData && showHd){
setLayer(hdData,'hd')
}
if(tab==='3'&&data3){
@ -916,7 +919,7 @@ function DrpReal({ style }) {
}, 500);
}
},[drpData,hdData,skObj,tab])
},[drpData,hdData,skObj,tab,showDrp,showHd])
@ -940,7 +943,8 @@ function DrpReal({ style }) {
}
});
}
setDrpData(data)
const newData = [data[1],data[0]]
setDrpData(newData)
}
const getHd = async(skObj)=>{
@ -963,7 +967,8 @@ function DrpReal({ style }) {
}
});
}
setHdData(data)
const newData = [data[1],data[0]]
setHdData(newData)
}
const setLayer = (data=[],type)=>{
@ -1208,21 +1213,32 @@ function DrpReal({ style }) {
map.getSource('关联站点').setData(parseGeoJSON(data))
}
// useEffect(() => {
// setLayer(skdata,"sk")
// }, [])
useEffect(() => {
setShowdHd(0)
setShowdDrp(0)
}, [tab])
return (
<PanelBox
style={style}
title="关联站点"
title="水雨情监测"
color="green"
tabs={
<span className="button-group">
<span className={clsx({ active: tab==='1' })} onClick={() => {
setTab('1')
}}>雨量站</span>
<span className={clsx({ active: tab==='2' })} onClick={() => {
setTab('2')
}}>水位站</span>
<span className={clsx({ active: tab==='3' })} onClick={() => {
{/* <span className={clsx({ active: tab==='3' })} onClick={() => {
setTab('3')
}}>流量站</span>
<span className={clsx({ active: tab==='4' })} onClick={() => {
@ -1230,7 +1246,7 @@ function DrpReal({ style }) {
}}>图像站</span>
<span className={clsx({ active: tab==='5' })} onClick={() => {
setTab('5')
}}>视频站</span>
}}>视频站</span> */}
</span>
}
>
@ -1254,14 +1270,17 @@ function DrpReal({ style }) {
<DpTableCell component="th" scope="row">
<div className="table-ellipsis cursor-pointer" onClick={() => {
const { lgtd, lttd } = row;
if (lgtd && lttd) {
dispatch.runtime.setFeaturePop({ type: 'RealDrpPop', properties: row, coordinates: [row.lgtd, row.lttd] });
dispatch.runtime.setCameraTarget({
center: [lgtd, lttd],
zoom: 15,
pitch: 60,
bearing: 0
});
if (row.stnm == '浮桥河') {
setShowdDrp(1)
if (lgtd && lttd) {
dispatch.runtime.setFeaturePop({ type: 'RealDrpPop', properties: row, coordinates: [row.lgtd, row.lttd] });
dispatch.runtime.setCameraTarget({
center: [lgtd, lttd],
zoom: 15,
pitch: 60,
bearing: 0
});
}
}
}}>{row.stnm}</div>
</DpTableCell>
@ -1289,14 +1308,17 @@ function DrpReal({ style }) {
<DpTableCell component="th" scope="row">
<div className="table-ellipsis cursor-pointer" onClick={() => {
const { lgtd, lttd } = row;
if (lgtd && lttd) {
dispatch.runtime.setFeaturePop({ type: 'RealHDPop', properties: row, coordinates: [row.lgtd, row.lttd] });
dispatch.runtime.setCameraTarget({
center: [lgtd, lttd],
zoom: 15,
pitch: 60,
bearing: 0
});
if (row.stnm == '浮桥河') {
setShowdHd(1)
if (lgtd && lttd) {
dispatch.runtime.setFeaturePop({ type: 'RealHDPop', properties: row, coordinates: [row.lgtd, row.lttd] });
dispatch.runtime.setCameraTarget({
center: [lgtd, lttd],
zoom: 15,
pitch: 60,
bearing: 0
});
}
}
}}>{row.stnm}</div>
</DpTableCell>

View File

@ -1,5 +1,6 @@
import React, { useState } from 'react';
import React, { useState,useCallback} from 'react';
import { OverallPromise } from '../../../../models/_/real';
import { useDispatch, useSelector } from 'react-redux';
import useRequest from '../../../../utils/useRequest';
import PanelBox from '../../components/PanelBox';
import OverallContent from './OverallContent';
@ -22,7 +23,13 @@ import {
import AddIcon from '@material-ui/icons/Add';
import RemoveIcon from '@material-ui/icons/Remove';
import DpTableCell from '../../../../layouts/mui/DpTableCell';
import useRefresh from '../../../../utils/useRefresh';
import { hdyjUnclose } from '../../../../models/_/hdyj';
import moment from 'moment';
import { HDRealPromise } from '../../../../models/_/real';
import { InfoPopNames } from '../../InfoPops';
import { hdyjLatestClosed } from '../../../../models/_/hdyj';
import config from '../../../../config';
const useStyles = makeStyles((theme) => ({
root: {
color: '#fff',
@ -90,7 +97,24 @@ const useStyles = makeStyles((theme) => ({
}
}));
export default function Overall({ style }) {
const dispatch = useDispatch();
const t = useRefresh(60 * 1000);
const hdyj =[{
"stcd": "61612900",
"stnm": "阎家河",
"adcd": null,
"wscd": null,
"importancy": 0,
"lgtd": 115.128722,
"lttd": 31.207,
"elev": null,
"hasRz": true,
"type": "sw",
"tm": "2025-06-03T02:00:00.000Z",
"rz": 61.75,
"state": 1,
wrz:61.6
}]
const classes = useStyles();
const [types, setTypes] = useState({
mountain: true,
@ -109,8 +133,8 @@ export default function Overall({ style }) {
};
const stations = [
{ id: 'history', name: '超危险水位', count: 0, type: 'pink' },
{ id: '100year', name: '超警戒水位', count: 0, type: 'purple' },
{ id: 'history', name: '超危险水位', count: 0, type: 'pink',types:'wx' },
{ id: '100year', name: '超警戒水位', count: 1, type: 'purple',types:'jj' },
];
const toggleExpand = (id) => {
@ -119,6 +143,19 @@ export default function Overall({ style }) {
[id]: !prev[id]
}));
};
const flyTo = useCallback(async ({ stcd, source }) => {
const list = await HDRealPromise.get() || [];
const record = list.find(o => o.stcd === stcd) || {};
const { lgtd, lttd } = record;
if (lgtd && lttd) {
dispatch.runtime.setFeaturePop({ type: InfoPopNames.RealHDPop, properties: {...record,wrz:61.6}, coordinates: [lgtd, lttd] });
dispatch.runtime.setCameraTarget({
center: [lgtd, lttd],
zoom: 15,
pitch: config.poiPitch,
});
}
}, [dispatch]);
return (
<PanelBox
@ -175,13 +212,25 @@ export default function Overall({ style }) {
<DpTableCell colSpan={4} style={{ padding: 0 }}>
<Collapse in={expanded[station.id]} timeout="auto" unmountOnExit>
<Box className={`${classes.expandedRow} ${station.color}`}>
{/* 展开的详细内容可以在这里添加 */}
{/* <TableRow>
<DpTableCell style={{ width: '25%' }}>站名</DpTableCell>
<DpTableCell style={{ width: '20%' }}>水位(m)</DpTableCell>
<DpTableCell style={{ width: '25%' }}>所属政区</DpTableCell>
<DpTableCell style={{ width: '30%' }}>所属流域</DpTableCell>
</TableRow> */}
{
station.types == 'jj' ? hdyj.map(item => (
<TableRow onClick={() => flyTo(item)}>
<DpTableCell style={{ width: '40%' }}><div
className="table-ellipsis cursor-pointer"
>{item.stnm}</div></DpTableCell>
<DpTableCell style={{ width: '20%' }}><div
className="table-ellipsis cursor-pointer"
>{item.rz}</div></DpTableCell>
<DpTableCell style={{ width: '24%' }}><div
className="table-ellipsis cursor-pointer"
>{item.stnm}</div></DpTableCell>
<DpTableCell style={{ width: '20%' }}>{item.stnm}</DpTableCell>
</TableRow>
))
:
<Typography>暂无详细信息</Typography>
}
</Box>
</Collapse>
</DpTableCell>

View File

@ -100,28 +100,28 @@ export default function OverallContent({ data }) {
})
} else {
const obj = {
'Q9123':{
"stcd": "Q9123",
"stnm": "下白米",
'Q9111':{
"stcd": "Q9111",
"stnm": "福田河",
"adcd": null,
"wscd": null,
"importancy": 0,
"lgtd": 115.1217,
"lttd": 30.8992,
"lgtd": 115.0944,
"lttd": 31.4747,
"elev": null,
"hasRz": false,
"type": "qx",
"today": 17.8,
"h1": 7.2,
"h3": 14.3,
"h6": 22.7,
"h12": 24.2,
"h24": 45.2,
"h48": 123.5,
"tm": "2025-06-08T03:00:00.000Z",
"today": 50.3,
"h1": 50.2,
"h3": 50.2,
"h6": 50.2,
"h12": 50.2,
"h24": 50.3,
"h48": 50.3,
"tm": "2025-06-06T22:00:00.000Z",
"state": 1,
"warning": 0
},
},
}
_showRecord(obj[stcd], InfoPopNames.RealDrpPop)

View File

@ -105,13 +105,13 @@ export default function Overall({ style }) {
{
type: 'immediate',
label: '立即转移',
count: 3,
count: 0,
details: [] // 这里可以添加详细信息的数组
},
{
type: 'prepare',
label: '准备转移',
count: 0,
count: 3,
details: [] // 这里可以添加详细信息的数组
}
];
@ -278,10 +278,8 @@ export default function Overall({ style }) {
<DpTableCell colSpan={3} style={{ padding: 0 }}>
<Collapse in={expanded[row.type]} timeout="auto" unmountOnExit>
<Box className={classes.expandedContent}>
{/* 这里可以添加展开后显示的详细内容 */}
{/* <Typography>暂无详细信息</Typography> */}
{
row.type == 'immediate' ? zyData.map(item => (
row.type == 'prepare' ? zyData.map(item => (
<TableRow onClick={() => flyTo(item)}>
<DpTableCell style={{ width: '30%' }}><div
className="table-ellipsis cursor-pointer"

View File

@ -90,8 +90,8 @@ function SkReal({ style }) {
extra={
<>
<i style={{ marginRight: '0.5rem', color: skAutoRefresh ? '#00deff' : '#aaa' }} className="ionicons loop cursor-pointer" onClick={toggleAutoRefresh}></i>
<i style={{ marginRight: '0.5rem' }} className="ionicons image cursor-pointer" onClick={handleOpen}></i>
<i className="ionicons gear cursor-pointer" onClick={() => showSetting(true)}></i>
{/* <i style={{ marginRight: '0.5rem' }} className="ionicons image cursor-pointer" onClick={handleOpen}></i> */}
{/* <i className="ionicons gear cursor-pointer" onClick={() => showSetting(true)}></i> */}
</>
}
>
@ -100,16 +100,16 @@ function SkReal({ style }) {
<TableHead>
<TableRow>
<DpTableCell style={{ maxWidth: '30%' }} align="left">名称</DpTableCell>
<DpTableCell align="right">{appconsts.drpTtype[tableSkDrpField]}降雨</DpTableCell>
<DpTableCell align="right">水位</DpTableCell>
<DpTableCell align="right">超汛限</DpTableCell>
<DpTableCell style={{ minWidth: '6rem' }} align="right">{appconsts.drpTtype[tableSkDrpField]}降雨</DpTableCell>
<DpTableCell style={{ minWidth: '3rem' }} align="right">水位</DpTableCell>
<DpTableCell style={{ minWidth: '4rem' }} align="right">超汛限</DpTableCell>
</TableRow>
</TableHead>
<TableBody>
{sortedData.map((row) => (
{[...sortedData.filter(o=>o.rzState===1),...sortedData.filter(o=>o.rzState!==1)].map((row) => (
<DpTableRow key={row.stcd}>
<DpTableCell component="th" scope="row">
<div className="table-ellipsis cursor-pointer" onClick={() => flyTo(row)}>{row.stnm}</div>
<div className="table-ellipsis cursor-pointer" onClick={() => flyTo(row)}>{row.rzState===1?row.stnm:row.stnm+'(离线)'}</div>
</DpTableCell>
<DpTableCell align="right">{row['h24']}</DpTableCell>
<DpTableCell align="right">{row?.rz}</DpTableCell>

View File

@ -130,50 +130,52 @@ export default function Overall({ style }) {
}));
};
const skData = [{
"stcd": "716113701",
"type": "sk",
"hasRz": true,
"stnm": "永红水库",
"adcd": "421181105000",
"wscd": null,
"importancy": 0,
"lgtd": 115.120278,
"lttd": 31.183611,
"elev": 0,
"damel": 131.99,
"dsflz": 130.56,
"fsltdz": 129.9,
"ddz": 113.5,
"zcxsw": 129.9,
"drpTm": "2025-04-11T06:00:00.000Z",
"today": 0,
"h1": 0,
"h3": 0,
"h6": 0,
"h12": 0,
"h24": 0,
"h48": 0,
"drpState": 2,
"rz": 130.15,
"w": 0.444,
"a_fsltdz": -10.75,
"rzTm": "2025-04-11T06:00:00.000Z",
"rzWarning": 0,
"rzState": 2,
"pic": [
{
"stcd": "716113701",
"tm": "2023-11-16T11:19:00.000Z",
"url": "http://223.75.53.106:8891/skjgimages/2023/1116/716113701/20231116191900.jpg"
},
{
"stcd": "716113701",
"tm": "2023-11-16T09:05:00.000Z",
"url": "http://223.75.53.106:8891/skjgimages/2023/1116/716113702/20231116170500.jpg"
}
]
},]
const skData =[{
"stcd": "716129061",
"type": "sk",
"hasRz": true,
"stnm": "仰天窝水库",
"adcd": "421181201000",
"wscd": null,
"importancy": 0,
"lgtd": 115.106667,
"lttd": 31.126389,
"elev": 0,
"damel": 325.08,
"dsflz": 324.18,
"fsltdz": 323.5,
"ddz": 319.5,
"zcxsw": 323.5,
"drpTm": "2025-04-11T05:00:00.000Z",
"today": 0,
"h1": 0,
"h3": 0,
"h6": 0,
"h12": 0,
"h24": 0,
"h48": 0,
"drpState": 2,
"rz": 325.16,
"w": 0.132,
"a_fsltdz": 4.660000000000025,
"rzTm": "2025-04-11T05:00:00.000Z",
"rzWarning": 1,
"rzState": 2,
"pic": [
{
"stcd": "716129061",
"tm": "2023-03-12T06:05:00.000Z",
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716129061/20230312140500.jpg"
},
{
"stcd": "716129061",
"tm": "2023-03-12T07:25:00.000Z",
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716129062/20230312152500.jpg"
}
],
"aRz": 4.66,
"strarz": "4.66"
}];
const flyTo = () => {
const { lgtd, lttd } = skData[0];
if (lgtd && lttd) {
@ -247,11 +249,11 @@ export default function Overall({ style }) {
station.id == "cxx" && <TableRow onClick={() => flyTo()}>
<DpTableCell style={{ width: '20%' }}><div
className="table-ellipsis cursor-pointer"
>永红水库</div></DpTableCell>
<DpTableCell style={{ width: '20%' }}>130.15(0.25)</DpTableCell>
>仰天窝水库</div></DpTableCell>
<DpTableCell style={{ width: '20%' }}>325.16(1.66)</DpTableCell>
<DpTableCell style={{ width: '20%' }}><div
className="table-ellipsis cursor-pointer"
>阎家河</div></DpTableCell>
>龟山</div></DpTableCell>
<DpTableCell style={{ width: '20%' }}>阎家河</DpTableCell>
<DpTableCell style={{ width: '20%' }}><a
className="table-ellipsis cursor-pointer"

View File

@ -202,7 +202,7 @@ function DrpReal({ style }) {
return (
<PanelBox
style={style}
title="水量统计"
title="水资源利用"
color="green"
extra={
<>
@ -214,20 +214,20 @@ function DrpReal({ style }) {
// dispatch.map.setLayerVisible({'ByjcLayer':false});
setTab('生态')
}}>生态</span>
<span className={clsx({ active: tab==='灌溉' })} onClick={() => {
<span className={clsx({ active: tab==='灌溉发电' })} onClick={() => {
// dispatch.map.setLayerVisible({'BxjcLayer':false});
// dispatch.map.setLayerVisible({'SyjcLayer':true});
// dispatch.map.setLayerVisible({'SljcLayer':false});
// dispatch.map.setLayerVisible({'ByjcLayer':false});
setTab('灌溉')
}}>灌溉</span>
<span className={clsx({ active: tab==='发电' })} onClick={() => {
setTab('灌溉发电')
}}>灌溉发电</span>
{/* <span className={clsx({ active: tab==='' })} onClick={() => {
// dispatch.map.setLayerVisible({'BxjcLayer':false});
// dispatch.map.setLayerVisible({'SyjcLayer':false});
// dispatch.map.setLayerVisible({'SljcLayer':true});
// dispatch.map.setLayerVisible({'ByjcLayer':false});
setTab('发电')
}}>发电</span>
}}>发电</span> */}
<span className={clsx({ active: tab==='泄洪' })} onClick={() => {
// dispatch.map.setLayerVisible({'BxjcLayer':false});
// dispatch.map.setLayerVisible({'SyjcLayer':false});

View File

@ -0,0 +1,18 @@
function Page({ type,name,num1,num2,skType,setSkType }) {
return (
<div style={{width:'100%',display:'flex',fontSize:'0.9rem', color:'#ffffff',padding:'0.5rem 0.5rem 0.5rem 1rem',borderRadius:'5px',background:'#132a4b',alignItems:'center',marginBottom:'1px',cursor:'pointer'}} onClick={()=>{
setSkType(skType!==type?type:'')
}}>
<img src={`${process.env.PUBLIC_URL}/assets/icon/大型水库.svg`} width={15} height={15} alt=""/>
<div style={{flex:1,paddingLeft:'0.8rem',marginBottom:'-0.1rem'}}>{name}</div>
<div style={{marginBottom:'-0.1rem'}}>{num1}</div>
<div style={{margin:'0 1rem -0.1rem 1rem'}}>{num2}亿m³</div>
<img src={`${process.env.PUBLIC_URL}/assets/icon/${skType===type?'收起':'展开'}.png`} style={{cursor:'pointer'}} width={20} alt="" />
</div>
)
}
export default Page;

View File

@ -0,0 +1,32 @@
function Page({ style }) {
return (
<div style={{width:'100%',display:'flex'}}>
<div style={{width:'100%',display:'flex',alignItems:'flex-start',padding:'0.5rem 0',justifyContent:'space-around'}}>
<div style={{width:'24%',display:'flex',flexDirection:'column',alignItems:'center',border:'1px solid rgba(36, 136, 223, 0.4)',paddingTop:'0.2rem',background:'#132a4b'}}>
<img src={`${process.env.PUBLIC_URL}/assets/icon/大型水库.svg`} width={20} alt=""/>
<div style={{color:'#ffffff',fontSize:'0.8rem',marginTop:'0.1rem'}}>大型水库</div>
<div style={{color:'#ffffff',fontSize:'0.8rem',lineHeight:'1rem'}}><span style={{color:'#7dd188',fontSize:'1.2rem'}}>3</span> </div>
</div>
<div style={{width:'24%',display:'flex',flexDirection:'column',alignItems:'center',border:'1px solid rgba(36, 136, 223, 0.4)',paddingTop:'0.2rem',background:'#132a4b'}}>
<img src={`${process.env.PUBLIC_URL}/assets/icon/大型水库.svg`} width={20} alt=""/>
<div style={{color:'#ffffff',fontSize:'0.8rem',marginTop:'0.1rem'}}>中型水库</div>
<div style={{color:'#ffffff',fontSize:'0.8rem',lineHeight:'1rem'}}><span style={{color:'#7dd188',fontSize:'1.2rem'}}>3</span> </div>
</div>
<div style={{width:'24%',display:'flex',flexDirection:'column',alignItems:'center',border:'1px solid rgba(36, 136, 223, 0.4)',paddingTop:'0.2rem',background:'#132a4b'}}>
<img src={`${process.env.PUBLIC_URL}/assets/icon/大型水库.svg`} width={20} alt=""/>
<div style={{color:'#ffffff',fontSize:'0.8rem',marginTop:'0.1rem'}}>(1)型水库</div>
<div style={{color:'#ffffff',fontSize:'0.8rem',lineHeight:'1rem'}}><span style={{color:'#7dd188',fontSize:'1.2rem'}}>3</span> </div>
</div>
<div style={{width:'24%',display:'flex',flexDirection:'column',alignItems:'center',border:'1px solid rgba(36, 136, 223, 0.4)',paddingTop:'0.2rem',background:'#132a4b'}}>
<img src={`${process.env.PUBLIC_URL}/assets/icon/大型水库.svg`} width={20} alt=""/>
<div style={{color:'#ffffff',fontSize:'0.8rem',marginTop:'0.1rem'}}>(2)型水库</div>
<div style={{color:'#ffffff',fontSize:'0.8rem',lineHeight:'1rem'}}><span style={{color:'#7dd188',fontSize:'1.2rem'}}>3</span> </div>
</div>
</div>
</div>
)
}
export default Page;

View File

@ -1,13 +1,125 @@
import React, { useMemo, useState } from 'react';
import { Switch, FormControlLabel,InputLabel, Select, MenuItem,FormControl } from '@material-ui/core/index'
import React, { useEffect, useMemo, useState } from 'react';
import { Switch, Collapse,Table, TableContainer, TableBody,TableHead, TableRow, TableSortLabel } from '@material-ui/core/index'
import DpTableCell from '../../../../layouts/mui/DpTableCell';
import DpTableRow from '../../../../layouts/mui/DpTableRow';
import PanelBox from '../../components/PanelBox';
import AreaDrpChart from './chart';
import { parseGeoJSON } from "../../../../utils/tools";
import { SkRealPromise } from "../../../../models/_/real";
import { useDispatch, useSelector } from 'react-redux';
import CountPage from './countPage'
import CollapsePage from './collapsePage'
function DrpReal({ style }) {
const [dimension, setDimension] =useState('ft');
const [skData,setSkData] = useState([])
const [skType,setSkType] = useState('')
const [sort,setSort] = useState(true)
const dispatch = useDispatch();
const tableData = useMemo(()=>{
if(skType==='1'){
return (skData.filter(o=>o.w>10000)||[]).sort((a,b)=>sort?(b.w-a.w):(a.w-b.w))
}
if(skType==='2'){
return (skData.filter(o=>o.w>100 && o.w<=10000)||[]).sort((a,b)=>sort?(b.w-a.w):(a.w-b.w))
}
if(skType==='3'){
return (skData.filter(o=>o.w>0.375 && o.w<=100)||[]).sort((a,b)=>sort?(b.w-a.w):(a.w-b.w))
}
if(skType==='4'){
return (skData.filter(o=>o.w>=0 && o.w<=0.375)||[]).sort((a,b)=>sort?(b.w-a.w):(a.w-b.w))
}
return []
},[skData,skType,sort])
const skTypeObj = [
{type:'1',name:'大型水库',num1:3,num2:7.9316},//8.735
{type:'2',name:'中型水库',num1:7,num2:1.627},
{type:'3',name:'小(1)型水库',num1:43,num2:1.627},
{type:'4',name:'小(2)型水库',num1:207,num2:8.735},
]
useEffect(()=>{
getSkData()
// return ()=>{
// const map = window.__mapref;
// const layer = map.getLayer('临时水库tz')
// if(layer){
// map.removeLayer('临时水库tz');
// map.removeSource('临时水库tz');
// }
// }
},[])
const getSkData = async()=>{
const data = await SkRealPromise.get();
setSkData(data)
}
const flyTo = (row)=>{
const { lgtd, lttd } = row;
if (lgtd && lttd) {
// dispatch.runtime.setFeaturePop({ type: 'RealSkPop', properties: row, coordinates: [row.lgtd, row.lttd] });
dispatch.runtime.setCameraTarget({
center: [lgtd, lttd],
zoom: 15,
pitch: 50,
bearing: 0
});
}
}
const setSkLayer = (data=[])=>{
const map = window.__mapref;
const layer = map.getLayer('临时水库tz')
if(layer){
map.removeLayer('临时水库tz');
map.removeSource('临时水库tz');
}
if(data.length===0){return}
map.addLayer({
'id': '临时水库tz',//+new Date().getTime(),
'type': 'symbol',
'source': {
'type': 'geojson',
'data': {
'type': 'FeatureCollection',
'features': [],
},
},
'layout': {
// 'icon-allow-overlap': true,
// 'text-allow-overlap': true,
'icon-image': '水库', // 从properties中动态读取icon字段
'icon-size': [
'interpolate', ['linear'], ['zoom'],
10, 0.8,
14, 0.8,
],
'text-size': [
'interpolate', ['linear'], ['zoom'],
5, 10,
14, 14,
],
'text-font': ['Roboto Black'],
'text-field': [
'step',
['zoom'],
'',
8, ['get', 'stnm']
],
'text-anchor': 'top',
'text-offset': [0, 1],
},
'paint': {
'text-color': '#fff'
},
'visibility': 'visible',
});
map.getSource('临时水库tz').setData(parseGeoJSON(data))
}
return (
<PanelBox
@ -15,18 +127,54 @@ function DrpReal({ style }) {
title="水库总览"
color="green"
>
<div style={{width:'100%',height:"14rem",display:'flex',marginTop:'-15px'}}>
<div style={{margin:'10px auto',width:'70%'}}>
<AreaDrpChart data={[]} />
</div>
<div style={{width:'30%',display:'flex',flexDirection:'column',justifyContent:'center'}}>
<div style={{display:'flex',alignItems:'center',color:'#cdddf7',cursor:'pointer',marginTop:'35px'}}><div style={{width:'8px',height:'8px',borderRadius:'8px',background:'#6187e6',marginRight:'10px'}}></div></div>
<div style={{display:'flex',alignItems:'center',color:'#cdddf7',cursor:'pointer',marginTop:'10px'}}><div style={{width:'8px',height:'8px',borderRadius:'8px',background:'#77caa1',marginRight:'10px'}}></div></div>
<div style={{display:'flex',alignItems:'center',color:'#cdddf7',cursor:'pointer',marginTop:'10px'}}><div style={{width:'8px',height:'8px',borderRadius:'8px',background:'#5c6988',marginRight:'10px'}}></div>(1)</div>
<div style={{display:'flex',alignItems:'center',color:'#cdddf7',cursor:'pointer',marginTop:'10px'}}><div style={{width:'8px',height:'8px',borderRadius:'8px',background:'#e2b642',marginRight:'10px'}}></div>(2)</div>
</div>
</div>
<div style={{width:'100%',color:'#E0F6F7',padding:"0 15px"}}><div style={{width:'2rem',display:'inline-block'}}></div> 325 3 45490m³16900m³16926m³ 7 1.627亿m³1 44 2 271 11.56 亿m³</div>
<CountPage/>
{
skTypeObj.map((item)=>
(<>
<CollapsePage type={item.type} name={item.name} num1={item.num1} num2={item.num2} skType={skType} setSkType={setSkType}/>
<Collapse in={skType===item.type} timeout="auto" unmountOnExit>
<TableContainer style={{ height: '12.8rem' }}>
<Table size="small" stickyHeader>
<TableHead>
<TableRow>
<DpTableCell style={{ minWidth: '1rem' }} align="left">序号</DpTableCell>
<DpTableCell style={{ minWidth: '5rem' }} align="center">水库名称</DpTableCell>
<DpTableCell style={{ minWidth: '8rem' }} align="center">类型</DpTableCell>
<DpTableCell style={{ minWidth: '8rem' }} align="center">
<TableSortLabel
onClick={() => setSort(!sort)}
active={true}
direction={sort?'desc':'asc'}>
{'库容(万m³)'}
</TableSortLabel>
</DpTableCell>
</TableRow>
</TableHead>
{
tableData.map((tableRow,index)=>
<TableBody>
<DpTableRow key={tableRow.stcd}>
<DpTableCell align="center" >{index+1}</DpTableCell>
<DpTableCell align="center" >
<div className="table-ellipsis cursor-pointer" onClick={()=>{
flyTo(tableRow)
setSkLayer([tableRow])
}}>
{tableRow.stnm}
</div>
</DpTableCell>
<DpTableCell align="center" >{item.name}</DpTableCell>
<DpTableCell align="center" >{tableRow.w}</DpTableCell>
</DpTableRow>
</TableBody>
)
}
</Table>
</TableContainer>
</Collapse>
</>)
)
}
</PanelBox>
)
}

View File

@ -12,34 +12,35 @@ import DpTableCell from '../../../../layouts/mui/DpTableCell';
import DpTableRow from '../../../../layouts/mui/DpTableRow';
import clsx from 'clsx';
import { renderDrp } from '../../../../utils/renutils';
const data3 = [{
"cd": "1",
"cd_nm": "WE",
"ch": "1",
"res_reg_cd": "42118140042-A4",
"res_cd": "42118140004",
"res_nm": "永丰水库",
"res_lon": 115.05541,
"res_lat": 31.11106,
"province_cd": "420000000000",
"province_nm": "湖北省",
"city_cd": "421100000000",
"city_nm": "黄冈市",
"county_cd": "421181000000",
"county_nm": "麻城市",
"town_cd": "421181003000",
"town_nm": "南湖办事处",
"danger_stat": "非病险水库",
"bas_guid": "鄂东五河片区",
"label": "2023高标准",
"eng_scal": "小1型",
"value": 0.3,
"diff_value": -0.02,
"trend": -1,
"dt": "2025-05-20",
"is_has_data": "y",
"max_value": 0.3
}]
const data3 =[{
"cd": "1",
"cd_nm": "WE",
"ch": "1",
'stnm':'WE',
"res_reg_cd": "42118140042-A4",
"res_cd": "42118140004",
"res_nm": "浮桥河水库",
"res_lon": 114.88429,
"res_lat": 31.172700,
"province_cd": "420000000000",
"province_nm": "湖北省",
"city_cd": "421100000000",
"city_nm": "黄冈市",
"county_cd": "421181000000",
"county_nm": "麻城市",
"town_cd": "421181003000",
"town_nm": "南湖办事处",
"danger_stat": "非病险水库",
"bas_guid": "鄂东五河片区",
"label": "2023高标准",
"eng_scal": "小1型",
"value": 0.3,
"diff_value": -0.02,
"trend": -1,
"dt": "2025-05-20",
"is_has_data": "y",
"max_value": 0.3
}]
function DrpReal({ style }) {
@ -73,7 +74,7 @@ function DrpReal({ style }) {
if (lgtd && lttd) {
dispatch.runtime.setCameraTarget({
center: [lgtd- 0.0029, lttd],
zoom: 15,
zoom: 17,
pitch: 60,
bearing: 0
});

View File

@ -19,9 +19,9 @@ const data2 = [
"ch": "0+060",
"res_reg_cd": "42118140011-A4",
"res_cd": "42118140038",
"res_lon": 115.01664,
"res_lat": 31.40681,
"res_nm": "蛤蟆岗水库",
"res_lon": 114.87929,
"res_lat": 31.171467,
"res_nm": "浮桥河水库",
"province_cd": "420000000000",
"province_nm": "湖北省",
"city_cd": "421100000000",
@ -730,14 +730,16 @@ function DrpReal({ style }) {
<DpTableRow key={row.stcd}>
<DpTableCell component="th" scope="row">
<div className="table-ellipsis cursor-pointer" onClick={() => {
const { res_lon:lgtd, res_lat:lttd } = row;
if (lgtd && lttd) {
dispatch.runtime.setCameraTarget({
center: [lgtd + 0.0019, lttd],
zoom: 15,
pitch: 60,
bearing: 0
});
const { res_lon: lgtd, res_lat: lttd,res_nm:stnm } = row;
if (stnm == '浮桥河水库') {
if (lgtd && lttd) {
dispatch.runtime.setCameraTarget({
center: [lgtd+ 0.0019, lttd],
zoom: 17,
pitch: 60,
bearing: 0
});
}
}
}}>{row.res_nm}</div>
</DpTableCell>

View File

@ -88,7 +88,8 @@ function Hdyj({ data }) {
}, [dispatch]);
const showdata = hisdata?.length > 0 ? hisdata : (data || []);
console.log("showdata",showdata);
return (
<div className="dppanel-shyj">
{

View File

@ -0,0 +1,67 @@
import React, { useState, useEffect } from 'react';
import './index.less';
const WaterLevelAlert = () => {
const [position, setPosition] = useState(0);
const alerts = [
{
reservoir: '浮桥河水库',
time: '06月08日02时',
level: '65.01',
overLimit: '0.12',
},
{
reservoir: '浮桥河水库',
time: '06月08日02时',
level: '93.4',
overLimit: '0.40',
}
];
useEffect(() => {
const height = 24; // 每个项目的高度
const totalHeight = height * alerts.length;
let currentPosition = 0;
const animate = () => {
currentPosition += height;
if (currentPosition >= totalHeight) {
currentPosition = 0;
}
setPosition(currentPosition);
};
const timer = setInterval(animate, 3000);
return () => clearInterval(timer);
}, []);
// 复制一份数据用于无缝滚动
const displayAlerts = [...alerts, ...alerts];
return (
<div className="water-level-alert">
<div className="alert-container">
<div
className="alert-wrapper"
style={{
transform: `translateY(-${position}px)`,
transition: position === 0 ? 'none' : 'transform 0.5s ease-in-out'
}}
>
{displayAlerts.map((alert, index) => (
<div key={index} className="alert-item">
<span className="alert-text">
预计{alert.reservoir} {alert.time}水位将上涨至
{alert.level} m (超汛限水位{alert.overLimit}m)
请做好防范
</span>
</div>
))}
</div>
</div>
</div>
);
};
export default WaterLevelAlert;

View File

@ -0,0 +1,32 @@
.water-level-alert {
background: rgba(0, 32, 51, 0.9);
padding: 10px 20px;
border-radius: 4px;
border: 1px solid #0088cc;
.alert-container {
height: 24px;
overflow: hidden;
}
.alert-wrapper {
will-change: transform;
}
.alert-item {
height: 24px;
display: flex;
align-items: center;
}
.alert-text {
color: #ffffff;
font-size: 14px;
white-space: nowrap;
&::before {
content: '⚠️';
margin-right: 8px;
}
}
}

View File

@ -19,6 +19,7 @@ import { RadioGroup, Radio, Switch, FormControlLabel, InputLabel, Select, MenuIt
import { backgroundColor } from 'echarts/lib/theme/dark';
import { Description } from '@material-ui/icons';
import DescriptionItem from '../../components/DescrptionItem';
import WaterLevelAlert from './WaterLevelAlert'
export default function Warn({ style }) {
const dispatch = useDispatch();
const res = useSelector(s => s.runtime.yyObj)
@ -168,6 +169,10 @@ export default function Warn({ style }) {
<img src={`${process.env.PUBLIC_URL}/assets/sl.jpg`} alt="" style={{ width: 421}} />
</div> */}
</div>}
<div style={{ color: "#fff", position: 'absolute', top: 90, right: 600 }}>
<WaterLevelAlert />
</div>
</div>
</PanelBox>
)