Compare commits

...

18 Commits

Author SHA1 Message Date
5180dfaf60 添加redis缓存刷新 2025-11-12 14:50:21 +08:00
guanj
6a1a7eb218 添加已发短信查询接口 2025-11-12 14:35:16 +08:00
guanj
80ed66a2b0 修改责任计算参数问题 2025-11-10 11:34:24 +08:00
stt
7d86bbb6c2 添加调取stationMap的方法 2025-11-07 16:19:15 +08:00
guanj
2631f43623 修改页面样式 2025-11-07 14:58:50 +08:00
stt
b396686b61 无锡大屏添加变电站名称绑定 2025-11-04 14:06:39 +08:00
stt
1a0a42c5a5 导出报表,时分秒可选 2025-10-30 10:24:34 +08:00
guanj
980d5a22b3 修改现场返回问题 2025-10-30 10:08:30 +08:00
guanj
0ffc0cd01e Merge branch 'master' of http://192.168.1.22:3000/Web/bigscreenWeb 2025-10-27 15:38:01 +08:00
guanj
079263ed38 修改 接线图第一次加载问题 2025-10-27 15:37:54 +08:00
stt
859d890434 地图的时候不展示表格 2025-10-27 15:08:43 +08:00
guanj
1c365c0585 提交地图文件 2025-10-27 14:13:43 +08:00
guanj
7769c8db01 Merge branch 'master' of http://192.168.1.22:3000/Web/bigscreenWeb 2025-10-27 14:09:58 +08:00
guanj
c244b5b137 修改地图切换接线图逻辑 2025-10-27 14:09:47 +08:00
stt
cff1867dae 添加z-index 2025-10-27 13:55:41 +08:00
stt
d712f683b3 闪烁点颜色改变 2025-10-27 13:34:34 +08:00
guanj
98b9bbce0d Merge branch 'master' of http://192.168.1.22:3000/Web/bigscreenWeb 2025-10-27 13:21:46 +08:00
guanj
da63aa8abe 添加地图 2025-10-27 13:21:31 +08:00
97 changed files with 20684 additions and 248 deletions

2
.gitignore vendored
View File

@@ -11,6 +11,8 @@ node_modules
dist dist
offline offline
# tiles
# tiles1
dist-ssr dist-ssr
*.local *.local
# Editor directories and files # Editor directories and files

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 899 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 983 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 B

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
_jsload2&&_jsload2('clayer', 'z.extend(nb.prototype,{cl:{},Bj:[],Pu:"",jq:"",MG:"",dl:s,Jg:s,Ig:s,Hg:[],LG:0,pz:u(),lz:u(),Ku:u(),Sd:function(){this.UG()},na:function(a,b){Mc.prototype.na.call(this,a,b);this.cl={};this.Bj=[];this.B=a;this.UG()},zt:ca(q),remove:function(){Mc.prototype.remove.call(this);this.fU()},UG:function(){var a=this,b=a.B;b&&(this.pz=function(b){a.yT(b)},this.lz=function(b){a.XS(b)},this.Ku=function(b){a.WS(b)},b.addEventListener("mousemove",this.pz),b.addEventListener("onhotspotover",this.lz),b.addEventListener("onhotspotout", this.Ku),b.addEventListener("onzoomstart",this.Ku))},fU:function(){var a=this.B;a&&(a.removeEventListener("mousemove",this.pz),a.removeEventListener("onhotspotover",this.lz),a.removeEventListener("onhotspotout",this.Ku))},yT:function(a){var b=this,c=b.B,e=c.oa();if(c.fa()<this.gc||c.Sb())b.xB();else if(a=e.wm().kh(a.point),e=e.$c(),a=new Q(Math.floor(a.x*Math.pow(2,c.fa()-18)),Math.floor(a.y*Math.pow(2,c.fa()-18))),e=new Q(Math.floor(a.x/e),Math.floor(a.y/e)),this.jq=c=e.x+"_"+e.y+"_"+c.fa(),this.cl[c]){if(this.Pu!= c){b.xB();b.TG(this.cl[c]);this.Pu=c;for(var e=-1,a=0,f=this.Bj.length;a<f;a++)if(c==this.Bj[a]){e=a;break}0<=e&&(this.Bj.splice(e,e),this.Bj.push(c))}}else if(this.MG!=c){this.MG=c;e=Wc[parseInt(Math.random()*Wc.length)];a=b.ub;c=e+"/data?grids="+c+"&q="+a.Wm+"&tags="+a.pu+"&filter="+a.filter+"&sortby="+a.Vy+"&ak="+a.Vl+"&page_size="+a.ON+"&age="+a.Gw;b.Cf?c+="&geotable_id="+b.Cf:b.Rn&&(c+="&databox_id="+b.Rn);var g=(1E5*Math.random()).toFixed(0);!B._rd&&(B._rd={});B._rd["_cbk"+g]=function(a){b.PS(a); delete B._rd["_cbk"+g]};oa(c+("&callback=BMap._rd._cbk"+g))}},PS:function(a){var b=this.B,c=a.content;if(!(a.status!=this.LG||!c||1>c.length)){for(var a=[],e=c[0].data,b=b.oa().wm(),f=0,g=e.length;f<g;f++){var i=e[f][2].replace(nb.tU,"").split(","),i=b.nh(new J(i[0],i[1]));a.push({pt:i,userdata:{name:e[f][0]||"name",size:e[f][4]?e[f][4].split("|"):[10,13],uid:e[f][1]||"",BO:e[f][3]||"sid1"}})}c=c[0].grid.join("_");this.cl[c]=a;this.Bj.push(c);30<this.Bj.length&&(c=this.Bj.shift(),delete this.cl[c], delete c);this.Pu!=this.jq&&(this.xB(),this.cl[this.jq]&&(this.TG(this.cl[this.jq]),this.Pu=this.jq))}},TG:function(a){for(var b=this.B,c=0,e=a.length;c<e;c++){var f=a[c].userdata.size,g=f[0]/2,f=f[1]/2,g=new ib(a[c].pt,{offsets:[f,g,f,g],userData:a[c].userdata});b.Cw(g,this.ub.Fk)}},xB:function(){this.B.dm(this.ub.Fk)},XS:function(a){if(a.spots&&!(1>a.spots.length||a.spots[0].tag!=this.ub.Fk)){this.Hg=a.spots;var b=this,a=this.Hg[0].getUserData().size[0],c="",e=b.B,f="",g=b.ub.eZ;0<this.Hg.length&& (c=this.Hg[0].getUserData().name);if(this.Jg)this.Jg.sa(this.Hg[0].ga()),this.Ig.dd(c),this.Ig.Ze(new O(a,0)),this.Jg.show(),c?this.Ig.show():this.Ig.U();else{var i=this.Hg[0].getUserData().size,f=this.Hg[0].getUserData().BO,k=this.Cf||this.Rn;this.dl=new qc(G.qa+"blank.gif",new O(i[0],i[1]),{anchor:new O(i[0]/2+1,i[1]/2+1)});this.GS(k,f,function(){b.Jg&&b.Jg.Rb(b.dl)});this.Jg=new U(this.Hg[0].ga(),{icon:this.dl,enableMassClear:t});e.Ga(this.Jg);this.Ig=new uc(c,{offset:new O(a,0)});this.Ig.Md({backgroundColor:g.backgroundColor, borderColor:g.borderColor});this.Jg.dn(this.Ig);c?this.Ig.show():this.Ig.U();this.Jg.addEventListener("onclick",function(){if(!(b.Hg.length<1)&&b.Hg[0].getUserData().uid){var a=b.ub,c=a.BY;if(b.Cf)c=a.CY;a=c+b.Hg[0].getUserData().uid+"?scope=2&ak="+a.Vl;b.Cf&&(a=a+("&geotable_id="+b.Cf));var e=(Math.random()*1E5).toFixed(0);!B._rd&&(B._rd={});B._rd["_cbk"+e]=function(a){b.FS(a);delete B._rd["_cbk"+e]};oa(a+("&callback=BMap._rd._cbk"+e))}})}}},FS:function(a){var b=a.content;this.Cf&&(b=a.contents[0]); if(a&&a.status==this.LG&&b){var a={poiId:b.uid||"",databoxId:b.databox_id||"",title:this.Cf?b.title:b.name,address:this.Cf?b.address:b.addr,phoneNumber:b.tel||"",postcode:b.zip||"",provinceCode:1*b.province_id||-1,province:b.province||"",cityCode:1*b.city_id||-1,city:b.city||"",districtCode:1*b.district_id||-1,district:b.district||"",point:this.Cf?new J(b.location[0],b.location[1]):new J(b.longitude,b.latitude),tags:b.tag&&b.tag.replace(nb.wU,"").split(nb.uU),typeId:1*b.cla||-1,extendedData:b.ext|| {}},c=new z.lang.Ju("onhotspotclick");c.customPoi=a;c.content=b;this.dispatchEvent(c)}},WS:function(){this.Jg&&this.Jg.U();this.Ig&&this.Ig.U()},GS:function(a,b,c){var e=this,f=Xc+"?method=getstyle&databox="+a+"&sid="+b,g=(1E5*Math.random()).toFixed(0);if(!e.dl||!(e.dl.databoxid==a&&e.dl.sid==b))!B._rd&&(B._rd={}),B._rd["_cbk"+g]=function(a){var b="";0==a.status&&(b="data:image/png;base64,"+a.content.sid1);0<b.length&&(e.dl.mO(b),c&&c(a));delete B._rd["_cbk"+g]},oa(f+("&callback=BMap._rd._cbk"+g))}}); ');

View File

@@ -0,0 +1 @@
_jsload2&&_jsload2('common', 'z.cookie=z.cookie||{};z.cookie.oI=function(a){return RegExp(\'^[^\\\\x00-\\\\x20\\\\x7f\\\\(\\\\)<>@,;:\\\\\\\\\\\\"\\\\[\\\\]\\\\?=\\\\{\\\\}\\\\/\\\\u0080-\\\\uffff]+$\').test(a)};z.cookie.cY=function(a){return z.cookie.oI(a)&&(a=RegExp("(^| )"+a+"=([^;]*)(;|$)").exec(document.cookie))?a[2]||s:s};z.cookie.get=function(a){a=z.cookie.cY(a);return"string"==typeof a?a=decodeURIComponent(a):s}; z.cookie.vO=function(a,b,c){if(z.cookie.oI(a)){var c=c||{},e=c.qx;"number"==typeof c.qx&&(e=new Date,e.setTime(e.getTime()+c.qx));document.cookie=a+"="+b+(c.path?"; path="+c.path:"")+(e?"; expires="+e.toGMTString():"")+(c.domain?"; domain="+c.domain:"")+(c.i5?"; secure":"")}};z.cookie.set=function(a,b,c){z.cookie.vO(a,encodeURIComponent(b),c)};z.cookie.remove=function(a,b){b=b||{};b.qx=new Date(0);z.cookie.vO(a,"",b)};z.xt=function(a){return/\\d{11}/.test(a)};z.TY=function(a){return/\\d{4}/.test(a)}; z.is=function(){function a(a){a=a.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,function(a,b,c,e){return b+b+c+c+e+e});return(a=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(a))?"rgb("+parseInt(a[1],16)+","+parseInt(a[2],16)+","+parseInt(a[3],16)+")":s}var b={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887", cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3", deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4","indianred ":"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6", lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee", mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6", purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"}, c={hex:/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,rgb:/rgb\\(\\s*(\\d|\\d\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\s*,\\s*(\\d|\\d\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\s*,\\s*(\\d|\\d\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\s*\\)/,rgba:/rgba\\(\\s*(\\d|\\d\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\s*,\\s*(\\d|\\d\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\s*,\\s*(\\d|\\d\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\s*,\\s*(0|1|0\\.[1-9])\\s*\\)/};return{cK:function(a){if(c.hex.test(a))return a;if(c.rgb.test(a))return a=a.match(c.rgb),"#"+("0"+parseInt(a[1],10).toString(16)).slice(-2)+("0"+parseInt(a[2],10).toString(16)).slice(-2)+ ("0"+parseInt(a[3],10).toString(16)).slice(-2);if(b[a])return b[a]},S3:a,x2:function(a){return c.hex.test(a)?a:b[a]?b[a]:"#000"},AC:function(e,f){f===l&&(f=1);if(c.rgba.test(e))return e;"undefined"!=typeof b[e.toLowerCase()]&&(e=b[e.toLowerCase()]);c.hex.test(e)&&(e=a(e));c.rgb.test(e)?(e=e.replace(/rgb/g,"rgba"),e=e.replace(/\\)/,","+f+")")):e="rgba(0,0,0,1)";return e}}}(); ');

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
_jsload2&&_jsload2('convertor', 'z.extend(lc.prototype,{qQ:function(){for(var a=0,b=this.Pa.length;a<b;a++){var c=this.Pa[a];this[c.method].apply(this,c.arguments)}delete this.Pa},translate:function(a,b,c,e){b=b||1;c=c||5;if(10<a.length)e&&e({status:25});else{var f=B.Wc+"geoconv/v1/?coords=";z.Fb(a,function(a){f+=a.lng+","+a.lat+";"});f=f.replace(/;$/gi,"");f=f+"&from="+b+"&to="+c+"&ak="+qa;oa(f,function(a){if(0===a.status){var b=[];z.Fb(a.result,function(a){b.push(new B.Point(a.x,a.y))});delete a.result;a.points=b}e&&e(a)})}}}); ');

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
_jsload2&&_jsload2('coordtransutils', 'z.extend(eb,{AV:function(a,b,c){var e=S.Eb(a),a=b.fc,e=kc.ZD(b.Ub||"bj",e),e=new J(e.x,e.y),f=b.fa(),f=b.oa().dc(f),b=b.cb(),b=new Q(Math.round((e.lng-a.lng)/f+b.width/2),Math.round((a.lat-e.lat)/f+b.height/2));c&&c(b)},zV:function(a,b,c){var e=b.fa(),e=b.oa().dc(e),f=b.cb(),g=b.fc,b=b.Ub,a=new J(g.lng+e*(a.x-f.width/2),g.lat-e*(a.y-f.height/2)),a=kc.XD(b||"bj",a),a=new J(a.lng,a.lat),a=S.Tb(a);c&&c(a)}}); ');

View File

@@ -0,0 +1 @@
_jsload2&&_jsload2('copyrightctrl', 'z.extend($b.prototype,{zf:function(){this.B&&this.He(this.B)},initialize:function(a){Vb.prototype.initialize.call(this,a);this.Aa();this.uo();this.ba(a);return this.C},ba:function(a){var b=this;a.addEventListener("load",function(){b.uo()});a.addEventListener("moveend",function(){b.uo()});a.addEventListener("zoomend",function(){b.uo()});a.addEventListener("maptypechange",function(){b.C&&(b.C.style.color=b.B.oa().zm())})},Aa:function(){Vb.prototype.Aa.call(this);z.D.Ua(this.C,"BMap_cpyCtrl");var a= this.C.style;a.cursor="default";a.whiteSpace="nowrap";a.MozUserSelect="none";a.color=this.B.oa().zm();a.background="none";a.font="11px/15px "+G.fontFamily;Vb.prototype.Nr.call(this)},uo:function(){if(this.B&&this.C&&0!=this.cc.length)for(var a=0,b=this.cc.length;a<b;a++){this.B.fa();var c=this.B.xb({x:0,y:0}),e=this.B.xb({x:this.B.width,y:this.B.height}),c=new fb(c,e);if(this.cc[a].bounds&&c.ot(this.cc[a].bounds)==s){if(this.C)for(e=0;e<this.C.children.length;e++)if(this.C.children[e].getAttribute("_cid")== this.cc[a].id&&"none"!=this.C.children[e].style.display){this.C.children[e].style.display="none";return}}else if(this.C){for(var c=t,e=0,f=this.C.children.length;e<f;e++)if(this.C.children[e].getAttribute("_cid")==this.cc[a].id){c=q;this.C.children[e].style.display="inline";this.C.children[e].innerHTML!=this.cc[a].content&&(this.C.children[e].innerHTML=this.cc[a].content);break}c||this.Uq(this.cc[a])}}},Bw:function(a){if(a&&Wa(a.id)&&!isNaN(a.id)){var b={bounds:s,content:""},c;for(c in a)b[c]=a[c]; if(a=this.pm(a.id))for(var e in b)a[e]=b[e];else this.cc.push(b);this.uo()}},pm:function(a){for(var b=0,c=this.cc.length;b<c;b++)if(this.cc[b].id==a)return this.cc[b]},PD:w("cc"),qF:function(a){for(var b,c=0,e=this.cc.length;c<e;c++)this.cc[c].id==a&&(b=this.cc.splice(c,1),c--,e=this.cc.length);(a=this.Jd(a))&&a.parentNode&&a.parentNode.removeChild(a);this.uo();return b},Uq:function(a){this.C&&(this.C.innerHTML+="<span _cid=\'"+a.id+"\'>"+a.content+"</span>")},Jd:function(a){var b=Vb.prototype.Jd.call(this); if(Hb(a)){if(b)for(var c=0,e=b.children.length;c<e;c++)if(b.children[c].getAttribute("_cid")==a)return b.children[c]}else return b}});T(wf,{addCopyright:wf.Bw,removeCopyright:wf.qF,getCopyright:wf.pm,getCopyrightCollection:wf.PD}); ');

View File

@@ -0,0 +1 @@
_jsload2&&_jsload2('draw', 'function Ag(){}var Bg=Ag.prototype;Bg.IF=u();Bg.Ao=function(){aa("addLine\\u63a5\\u53e3\\u6ca1\\u6709\\u5b9e\\u73b0")};Bg.setAttribute=function(){aa("setAttribute\\u63a5\\u53e3\\u6ca1\\u6709\\u5b9e\\u73b0")};Bg.ke=function(){aa("setPath\\u63a5\\u53e3\\u6ca1\\u6709\\u5b9e\\u73b0")};Bg.ip=w("Mb");B.jz=Ag; ');

View File

@@ -0,0 +1 @@
_jsload2&&_jsload2('drawbycanvas', 'function Gg(a){this.B=a;this.NQ={strokeweight:"lineWidth",strokecolor:"strokeStyle",fillcolor:"fillStyle",strokeopacity:"globalAlpha",fillopacity:"globalAlpha"};this.Mb="canvas"}Gg.prototype=new B.jz;var Hg=Gg.prototype;Hg.Ao=function(){if(!this.canvas||this.canvas&&!zb(this.canvas)){var a=this.canvas=L("canvas");this.B.Tf().Et.appendChild(a);a.style.position="absolute";a=a.getContext("2d");a.lineCap="round";a.lineJoin="round";a.save();this.zU(this.canvas)}return this.canvas}; Hg.ke=function(a,b,c){if(a&&0!==b[0].length){var e=a.getContext("2d");this.sa(a);var f=parseInt(a.style.top),g=parseInt(a.style.left);e.beginPath();z.mc.Fb(b,function(a){if(0!==a.length){e.moveTo(a[0].x-g,a[0].y-f);for(var b=1,c=a.length;b<c;b++)e.lineTo(a[b].x-g,a[b].y-f)}});this.FR(a,c);"dashed"===c.strokeStyle&&this.HR(e,b,g,f,c)}}; Hg.HR=function(a,b,c,e,f){var g=this;a.beginPath();z.mc.Fb(b,function(b){if(0!==b.length){for(var k=[],m=0,n=b.length;m<n;m++)k.push({x:b[m].x-c,y:b[m].y-e});a.strokeStyle=f.strokeColor||"#3a6bdb";g.GR(a,k,{lineWidth:f.rc||5,interval:2*f.rc||10,lineLength:2*f.rc||10,strokeStyle:g.JS(a.strokeStyle,f.td)})}})}; Hg.GR=function(a,b,c){for(var c=c||{},e=c.Wx||10,f=c.lineWidth||5,g=c.m4||10,c=c.strokeStyle||"#3a6bdb",i=b.length-1,k=0,m=g+e,n=0,o=0;o<i;o++)var p=b[o].x,v=b[o].y,x=b[o+1].x,y=b[o+1].y,n=n+Math.sqrt((x-p)*(x-p)+(y-v)*(y-v));if(n<g)a.strokeStyle=c,a.lineWidth=f,a.lineJoin="round",a.lineCap="round",a.beginPath(),a.moveTo(b[0].x,b[0].y),a.lineTo(b[i].x,b[i].y),a.stroke();else for(n=0;n<i;n++){var p=b[n].x,v=b[n].y,x=b[n+1].x,y=b[n+1].y,o=Math.sqrt((x-p)*(x-p)+(y-v)*(y-v))+k+g,A=m-Math.abs(k);if(k<= m){var E=parseInt(o/m),C=e*(x-p)/o,F=e*(y-v)/o;xMove=g*(x-p)/o;yMove=g*(y-v)/o;startX=p+A*(x-p)/o;startY=v+A*(y-v)/o;tailX=p+(g-Math.abs(k))*(x-p)/o;tailY=v+(g-Math.abs(k))*(y-v)/o;a.beginPath();a.strokeStyle=c;a.lineJoin="round";a.lineCap="round";a.lineWidth=f;D?a.moveTo(D,I):a.moveTo(p,v);0>=k&&a.lineTo(p,v);a.lineTo(tailX,tailY);a.moveTo(startX,startY);D=0;for(I=2*E;D<I;D++)if(D%2)startX+=C,startY+=F,a.moveTo(startX,startY);else{startX+=xMove;startY+=yMove;if(0>(x-startX)*xMove)break;a.lineTo(startX, startY)}a.stroke()}var k=parseInt(o-m*E)-g,D=x-Math.abs(k)*(x-p)/o,I=y-Math.abs(k)*(y-v)/o;n===i-1&&0<k&&(a.beginPath(),a.strokeStyle=c,p=x-k*(x-p)/o,leftY=y-k*(y-v)/o,k<=g?(a.moveTo(p,leftY),a.lineTo(x,y)):(a.moveTo(p,leftY),a.moveTo(p+xMove,leftY+yMove)),a.stroke())}}; Hg.JS=function(a,b){if(4===a.length)var c=parseInt(a.substr(1,1)+a.substr(1,1),16),e=parseInt(a.substr(2,1)+a.substr(2,1),16),f=parseInt(a.substr(3,1)+a.substr(3,1),16);else c=parseInt(a.substr(1,2),16),e=parseInt(a.substr(3,2),16),f=parseInt(a.substr(5,2),16);return c="rgba("+c+","+e+","+f+","+b+")"};Hg.setAttribute=function(a,b,c){if(a){var e=a.getContext("2d"),f=this.Wq(b);try{e[f]=c}catch(g){}a.setAttribute("_"+b,c||"");e.save()}};Hg.Wq=function(a){return this.NQ[a]||a}; Hg.zU=function(a){var b=this.B,c=b.K.lx,e=b.width+2*c,f=b.height+2*c,g=-b.offsetX-c,b=-b.offsetY-c,c=a.getContext("2d"),i={strokeStyle:c.strokeStyle,fillStyle:c.fillStyle,globalAlpha:c.globalAlpha,lineWidth:c.lineWidth,lineCap:"round",lineJoin:"round"};a.setAttribute("width",e);a.setAttribute("height",f);for(var k in i)c[k]=i[k];c.save();a=a.style;a.top=b+"px";a.left=g+"px"};Hg.XQ=function(a){a.clearRect(0,0,9999,9999)}; Hg.FR=function(a,b){var c=a.getContext("2d");c.globalAlpha=a.getAttribute("_fillopacity");0!==c.globalAlpha&&a.getAttribute("_fillcolor")&&c.fill();c.globalAlpha=a.getAttribute("_strokeopacity");0!==c.globalAlpha&&(a.getAttribute("_strokecolor")&&"dashed"!==b.strokeStyle)&&c.stroke()};Hg.sa=function(a){var b=this.B,c=b.K.lx,e=-b.offsetX-c,a=a.style;a.top=-b.offsetY-c+"px";a.left=e+"px"};B.zP=Gg; ');

View File

@@ -0,0 +1 @@
_jsload2&&_jsload2('drawbysvg', 'function Cg(a){this.B=a;this.NG="http://www.w3.org/2000/svg";this.TU={strokeweight:"stroke-width",strokecolor:"stroke",fillcolor:"fill",strokeopacity:"stroke-opacity",fillopacity:"fill-opacity",strokestyle:"stroke-dasharray"};this.hf=this.Zz();this.Mb="svg"}Cg.prototype=new B.jz;var Dg=Cg.prototype; Dg.Zz=function(){var a=this.hf=L("svg",{},this.NG);a.setAttribute("version","1.1");a.setAttribute("type","system");a.style.position="absolute";this.IF();this.B.Tf().Et.appendChild(a);z.M(a,H()?"touchstart":"mousedown",Cb);return a}; Dg.IF=function(){if(this.hf){var a=this.hf,b=this.B,c=b.K.lx,e=b.width+2*c,f=b.height+2*c,g=-b.offsetX-c,b=-b.offsetY-c;this.setAttribute(a,"x",e+"px");this.setAttribute(a,"y",f+"px");this.setAttribute(a,"viewBox",g+" "+b+" "+e+" "+f);a=a.style;a.top=b+"px";a.left=g+"px";a.width=e+"px";a.height=f+"px"}};Dg.H3=w("hf");Dg.setAttribute=function(a,b,c,e){if(a)return"strokestyle"==b&&(c="solid"==c?0:2*e),a.setAttributeNS(s,this.Wq(b),c||"none"),a};Dg.Wq=function(a){return this.TU[a]||a}; Dg.Ao=function(){var a=L("path",{},this.NG);this.setAttribute(a,"stroke-linejoin","round");this.setAttribute(a,"stroke-linecap","round");this.setAttribute(a,"fill-rule","evenodd");this.hf.appendChild(a);return a};Dg.ke=function(a,b){var c=this.tA(b)||"M -9999,-9999";this.setAttribute(a,"d",c)};Dg.tA=function(a){if(0==a.length)return"";var b=[];z.mc.Fb(a,function(a){if(!(2>a.length)){b.push("M "+a[0].x+" "+a[0].y+" L");for(var e=1,f=a.length;e<f;e++)b.push(a[e].x),b.push(a[e].y)}});return b.join(" ")}; B.ZP=Cg; ');

View File

@@ -0,0 +1 @@
_jsload2&&_jsload2('drawbyvml', 'function Eg(a){this.B=a;this.dV={strokeweight:"weight",strokecolor:"color",fillcolor:"color",strokeopacity:"opacity",fillopacity:"opacity",strokestyle:"dashstyle"};this.Mb="vml"}Eg.zK={orange:"#ffa500"};Eg.prototype=new B.jz;var Fg=Eg.prototype; Fg.setAttribute=function(a,b,c){a&&(0==b.indexOf("stroke")?a=a.getElementsByTagName("stroke")[0]:0==b.indexOf("fill")&&(a=a.getElementsByTagName("fill")[0]),0<b.indexOf("color")&&(c?(a.on=q,Eg.zK[c]&&(c=Eg.zK[c])):a.on=t),"strokestyle"==b&&(c="solid"==c?"solid":"4 2 1 2"),"strokeweight"==b&&(c+="px"),a[this.Wq(b)]=c||"")};Fg.Wq=function(a){return this.dV[a]||a};Fg.Ao=function(){return Ab(this.B.Tf().Et,\'<v:shape style="behavior:url(#default#VML);z-index:1;width:1px;height:1px;position:absolute;left:0;top:0;"coordsize="1,1" coordorigin="0,0" filled="t" fillcolor="white"><v:stroke style="behavior:url(#default#VML);" endcap="round" oned="true" /><v:fill style="behavior:url(#default#VML)" /></v:shape>\')}; Fg.ke=function(a,b){this.setAttribute(a,"path",this.tA(b));6==z.ca.ia&&(a.style.display="none",a.style.display="")};Fg.tA=function(a){if(0==a.length)return"";var b=[];z.mc.Fb(a,function(a){if(!(2>a.length)){b.push("m "+a[0].x+" "+a[0].y+" l");for(var e=1,f=a.length;e<f;e++)b.push(a[e].x),b.push(a[e].y);b.push("e")}});return b.join(" ")||" "};B.bQ=Eg; ');

View File

@@ -0,0 +1 @@
_jsload2&&_jsload2('geoctrl', 'z.extend(Zb.prototype,{initialize:function(a){var b=this;Vb.prototype.initialize.call(b,a);b.Aa();b.pr={"default":B.ka+"images/geolocation-control/mobile/default-40x40.png",loading:B.ka+"images/geolocation-control/mobile/loading-40x40.gif",success:B.ka+"images/geolocation-control/mobile/success-40x40.png",fail:B.ka+"images/geolocation-control/mobile/fail-40x40.png"};b.ij=b.C.children[0];b.FD=b.ij.children[0];b.Xo=b.FD.children[0];b.DD=b.ij.children[1];b.vL=b.DD.children[0].children[0];var c;b.B.addEventListener("moveend", function(){if(c){var a=b.B.Ka();a.lng===c.lng&&a.lat===c.lat?b.Lr(b.pr.success):(b.Lr(b.pr["default"]),b.VQ())}});z.M(b.Xo,"click",function(){b.Lr(b.pr.loading);(new Geolocation({timeout:1E4})).getCurrentPosition(function(e){b.Lr(b.pr.success);if(e.address&&b.j.O_){var f="";e.address.city?f+=e.address.city:e.address.province&&(f+=e.address.province);e.address.district&&(f+=e.address.district);e.address.street&&(f+=e.address.street);e.address.street_number&&(f+=e.address.street_number);b.xU(f)}var f= new J(e.longitude,e.latitude),g=new U(f,{icon:b.j.bN?b.j.bN:new qc(B.ka+"images/geolocation-control/point/position-icon-14x14.png",new O(14,14))});c=f;b.GD=f;a.Ga(g);a.Fd(f,15);e.address&&(b.ds={province:e.address.province||"",city:e.address.city||"",district:e.address.district||"",street:e.address.street||"",streetNumber:e.address.street_number||""},Ra(7001,{longitude:e.longitude,latitude:e.latitude,accuracy:e.accuracy}));e=new P("locationSuccess");e.point=b.GD;e.addressComponent=b.ds;b.dispatchEvent(e)}, function(a){b.Lr(b.pr.fail);var c=new P("locationError");c.code=a.errorCode;c.message=a.uk;b.dispatchEvent(c)})});return b.C},location:function(){var a=this;a.I0.push({});(new Geolocation({timeout:1E4})).getCurrentPosition(function(b){a.GD=new J(b.longitude,b.latitude);b.address&&(a.ds={province:b.address.province||"",city:b.address.city||"",district:b.address.district||"",street:b.address.street||"",streetNumber:b.address.street_number||""});b=new P("locationSuccess");b.point=a.GD;b.addressComponent= a.ds;a.dispatchEvent(b)},function(b){var c=new P("locationError");c.code=b.errorCode;c.message=b.uk;a.dispatchEvent(c)})},xX:function(){return this.ds?this.ds:s},sQ:function(){this.B?this.He(this.B):this.map&&this.He(this.map)},Aa:function(){Vb.prototype.Aa.call(this);this.C.style.cssText="height: 32px;";this.C.innerHTML=this.Vq()},Vq:function(){return[\'<div class="BMap_geolocationContainer" style="height: 32px; margin: 0px; box-sizing: border-box; border: 1px solid #d9d7d5; border-radius: 3px; -webkit-box-shadow: 1px 1px 1px rgba(0,0,0,.2); overflow: hidden;">\', \'<div class="BMap_geolocationIconBackground" style="float: left; width: 32px; height: 32px; background-image: url(\\\'\'+B.ka+"images/geolocation-control/mobile/gradient-bg-1x64.png\'); background-size: 1px 32px; background-repeat: repeat-x;\\">",\'<div class="BMap_geolocationIcon" style="width: 32px; height: 32px; cursor: pointer; background-image: url(\\\'\'+B.ka+"images/geolocation-control/mobile/default-40x40.png\'); background-size: 20px 20px; background-repeat: no-repeat; background-position: center center;\\"></div>", "</div>",\'<div class="BMap_geolocationAddress" style="display: none; float: left; min-width: 50px; padding-left: 10px; padding-right: 10px; border-left: 1px solid #d9d7d5; background-image: url(\'+B.ka+\'images/geolocation-control/mobile/gradient-bg-1x64.png); background-size: 1px 32px; background-repeat: repeat-x;">\',\'<div style="height: 32px; display: table-cell; vertical-align: middle;"><div class="BMap_geolocationAddressText" style="font-size: 12px; color: #666666; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; display: block; min-width: 50px; max-width: 200px;"></div></div></div></div>\'].join("")}, Lr:function(a){this.Xo.style.backgroundImage="url(\'"+a+"\')"},xU:function(a){this.DD.style.display="block";this.vL.textContent=a},VQ:function(){this.vL.textContent="";this.DD.style.display="none"}});Zb.prototype.location=Zb.prototype.location;Zb.prototype.getAddressComponent=Zb.prototype.xX; ');

View File

@@ -0,0 +1 @@
_jsload2&&_jsload2('groundoverlay', 'z.extend(vc.prototype,{ib:function(){if(this.map){this.V||this.Ej();var a=this.map.fa();if(a<this.z.Bs||a>this.z.As)this.U();else{var b=this.z.bb.Ve(),c=this.z.bb.Rf(),a=this.map.Xe(b).x,e=this.map.Xe(c).y,c=this.map.Xe(c).x,b=this.map.Xe(b).y;this.V.style.left=a+"px";this.V.style.top=e+"px";this.V.style.width=c-a+"px";this.V.style.height=b-e+"px";this.show()}}},draw:function(){this.ib()},Ej:function(){if(!this.V){this.V=document.createElement("div");var a=this.V.style;a.cssText="position: absolute; -moz-user-select: none; overflow: hidden;"; a.zIndex=mc.Ck(this.z.bb.Ve().lat);this.z.opacity&&(a.opacity=this.z.opacity,a.filter="alpha(opacity="+100*parseInt(this.z.opacity,10)+")");this.Og=document.createElement("img");this.Og.style.width="100%";this.z.X_&&(this.Og.style.height="100%");this.V.appendChild(this.Og);var b=this;this.Og.onload=function(){b.P1=b.Og.naturalWidth||b.Og.width;b.O1=b.Og.naturalHeight||b.Og.height};this.z.Gm&&(this.Og.src=this.z.Gm);this.map.Tf().KE.appendChild(this.V);b=this;z.M(this.V,"click",function(a){b.dispatchEvent(new P("click"), a)});z.M(this.V,"dblclick",function(a){b.dispatchEvent(new P("dblclick"),a)})}},s_:function(a){this.z.bb=a;this.map&&this.ib();this.V.style.zIndex=mc.Ck(this.z.bb.Ve().lat)},ve:function(){return this.z.bb},HF:function(a){this.z.opacity=a;this.V.style.opacity=a;this.V.style.filter="alpha(opacity="+100*parseInt(a,10)+")"},XX:function(){return this.z.opacity},x_:function(a){this.z.Gm=a;this.Og&&(this.Og.src=a)},KX:function(){return this.z.Gm},p5:function(a){this.z.Bs=a},r3:function(){return this.z.Bs}, o5:function(a){this.z.As=a},q3:function(){return this.z.As}});vc.prototype.setBounds=vc.prototype.s_;vc.prototype.getBounds=vc.prototype.ve;vc.prototype.setOpacity=vc.prototype.HF;vc.prototype.getOpacity=vc.prototype.XX;vc.prototype.setImageURL=vc.prototype.x_;vc.prototype.getImageURL=vc.prototype.KX;vc.prototype.setDispalyOnMinLevel=vc.prototype.n5;vc.prototype.setDispalyOnMaxLevel=vc.prototype.m5; ');

View File

@@ -0,0 +1 @@
_jsload2&&_jsload2('hotspot', 'B.Ye(function(a){function b(a){var b=this.R;b.Qe=[];if(this.Jh)for(var c in this.Jh)if(!(0==c.indexOf("vector_")&&!this.Sb()||0==c.indexOf("tile_")&&this.Sb())){var i=this.Jh[c],k;for(k in i){var m=i[k];if(!(m.Lh>this.fa()||m.Hf<this.fa())){var n=this.$b(m.ga());n.x<this.width&&n.y<this.height&&a.offsetX<n.x+m.Jv[1]&&(a.offsetX>n.x-m.Jv[3]&&a.offsetY>n.y-m.Jv[0]&&a.offsetY<n.y+m.Jv[2])&&b.Qe.push(m)}}}}function c(){a.R.XK&&0<a.R.Qe.length?(a.platform.style.cursor="pointer",a.R.XK=t):(a.R.Qe=[],a.platform.style.cursor= a.K.Vb)}a.R.ju=new uc("",{za:new O(15,-3),Wp:{border:"1px solid #aaa",background:"#fffec2",whiteSpace:"nowrap",font:"12px "+G.fontFamily,mozBoxShadow:"1px 2px 6px #666",webkitBoxShadow:"1px 2px 6px #666",boxShadow:"1px 2px 6px #666",padding:"2px 4px"}});a.addEventListener("mousemove",function(c){if(!(c.fb&&!(c.fb instanceof oc)||c.zb)){var f=this.R,g=f.Qe.slice(0);b.call(this,c);for(var i=f.Qe.slice(0),k=0;k<g.length;k++)for(var m=0;m<i.length;m++)g[k]===i[m]&&(g.splice(k,1),k--,i.splice(m,1),m--); if(0<g.length){var n=new P("onhotspotout");n.spots=g.slice(0);this.dispatchEvent(n)}if(0==f.Qe.length&&!f.$x)this.platform.style.cursor!=this.K.Vb&&(this.platform.style.cursor=this.K.Vb),f.Up&&(clearTimeout(f.Up),f.Up=s),f.QF=setTimeout(function(){f.ju.U()},400);else if(0<i.length&&(this.platform.style.cursor="pointer",n=new P("onhotspotover"),n.spots=i.slice(0),this.dispatchEvent(n),f.Up&&(clearTimeout(f.Up),f.Up=s),f.QF&&(clearTimeout(f.QF),f.QF=s),n.spots[0].eE()))f.Up=setTimeout(function(){f.ju.dd(n.spots[0].eE()); f.ju.sa(c.point);f.ju.show();a.Ga(f.ju)},400)}});a.addEventListener("clickex",function(a){var c=this.R;a.overlay||(0==c.Qe.length&&b.call(this,a),0<c.Qe.length&&(a=new P("onhotspotclick"),a.spots=c.Qe.slice(0),a.spots.sort(function(a,b){return a.ga().lat-b.ga().lat}),this.dispatchEvent(a),c.Qe.length=0))});a.addEventListener("load",c);a.addEventListener("moveend",c);a.addEventListener("zoomend",c);a.addEventListener("dragend",function(){this.R.XK=q})}); ');

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
_jsload2&&_jsload2('markeranimation', 'Ic[1]={options:{duration:400},Cm:[{Zb:0,translate:[0,-500],jc:"ease-in"},{Zb:0.5,translate:[0,0],jc:"ease-out"},{Zb:0.75,translate:[0,-20],jc:"ease-in"},{Zb:1,translate:[0,0],jc:"ease-out"}],du:[{Zb:0,translate:[375,-375],jc:"ease-in"},{Zb:0.5,translate:[0,0],jc:"ease-out"},{Zb:0.75,translate:[15,-15],jc:"ease-in"},{Zb:1,translate:[0,0],jc:"ease-out"}]}; Ic[2]={options:{duration:700,loop:vb},Cm:[{Zb:0,translate:[0,0],jc:"ease-out"},{Zb:0.5,translate:[0,-20],jc:"ease-in"},{Zb:1,translate:[0,0],jc:"ease-out"}],du:[{Zb:0,translate:[0,0],jc:"ease-out"},{Zb:0.5,translate:[15,-15],jc:"ease-in"},{Zb:1,translate:[0,0],jc:"ease-out"}]};Ic[3]={options:{duration:200,fP:q},Cm:[{Zb:0,translate:[0,0],jc:"ease-in"},{Zb:1,translate:[0,-20],jc:"ease-out"}],du:[{Zb:0,translate:[0,0],jc:"ease-in"},{Zb:1,translate:[15,-15],jc:"ease-out"}]}; Ic[4]={options:{duration:500,fP:q},Cm:[{Zb:0,translate:[0,-20],jc:"ease-in"},{Zb:0.5,translate:[0,0],jc:"ease-out"},{Zb:0.75,translate:[0,-10],jc:"ease-in"},{Zb:1,translate:[0,-0.0],jc:"ease-out"}],du:[{Zb:0,translate:[15,-15],jc:"ease-in"},{Zb:0.5,translate:[0,0],jc:"ease-out"},{Zb:0.75,translate:[8,-8],jc:"ease-in"},{Zb:1,translate:[0,0],jc:"ease-out"}]}; ');

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
_jsload2&&_jsload2('vmlcontext', 'var hg=10,ig=hg/2; function jg(a){this.li=[[1,0,0],[0,1,0],[0,0,1]];this.cN=[];this.TJ=[];this.qk=[];this.lineWidth=1;this.miterLimit=1*hg;this.canvas=a;var b=L("div");b.style.width=a.clientWidth+"px";b.style.height=a.clientHeight+"px";b.style.position="absolute";a.appendChild(b);this.fL=b;this.TM=this.Iw=this.Hw=1;document.styleSheets.canvas_style||(a=document.createStyleSheet(),a.owningElement.id="canvas_style",a.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\\\:shape,g_vml_\\\\:fill,g_vml_\\\\:stroke{behavior:url(#default#VML)}")} function kg(a,b){for(var c=[[1,0,0],[0,1,0],[0,0,1]],e=0;3>e;e++)for(var f=0;3>f;f++){for(var g=0,i=0;3>i;i++)g+=a[e][i]*b[i][f];c[e][f]=g}return c}var lg=jg.prototype;lg.clearRect=function(){this.fL.innerHTML=""};lg.beginPath=function(){this.qk=[]};lg.moveTo=function(a,b){var c=this.fi(a,b);this.qk.push({type:"moveTo",x:c.x,y:c.y});this.rs=c.x;this.ss=c.y};lg.lineTo=function(a,b){var c=this.fi(a,b);this.qk.push({type:"lineTo",x:c.x,y:c.y});this.rs=c.x;this.ss=c.y}; lg.bezierCurveTo=function(a,b,c,e,f,g){mg(this,this.fi(a,b),this.fi(c,e),this.fi(f,g))};function mg(a,b,c,e){a.qk.push({type:"bezierCurveTo",oW:b.x,pW:b.y,qW:c.x,rW:c.y,x:e.x,y:e.y});a.rs=e.x;a.ss=e.y}lg.quadraticCurveTo=function(a,b,c,e){a=this.fi(a,b);c=this.fi(c,e);e={x:this.rs+2/3*(a.x-this.rs),y:this.ss+2/3*(a.y-this.ss)};mg(this,e,{x:e.x+(c.x-this.rs)/3,y:e.y+(c.y-this.ss)/3},c)}; lg.arc=function(a,b,c,e,f,g){var c=c*hg,i=a+Math.cos(e)*c-ig,k=b+Math.sin(e)*c-ig,e=a+Math.cos(f)*c-ig,f=b+Math.sin(f)*c-ig;i==e&&!g&&(i+=0.125);a=this.fi(a,b);i=this.fi(i,k);e=this.fi(e,f);this.qk.push({type:g?"at":"wa",x:a.x,y:a.y,wa:c,X0:i.x,Z0:i.y,W0:e.x,Y0:e.y})};lg.rect=function(a,b,c,e){this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+e);this.lineTo(a,b+e);this.closePath()}; lg.stroke=function(a){var b=[],c=a?this.fillStyle:this.strokeStyle,e=c.color,c=c.alpha;b.push("<g_vml_:shape",\' filled="\',!!a,\'"\',\' style="position:absolute;width:\',10,"px;height:",10,\'px;"\',\' coordorigin="0 0" coordsize="\',10*hg," ",10*hg,\'"\',\' stroked="\',!a,\'"\',\' path="\');for(var f=s,g=s,i=s,k=s,m=0;m<this.qk.length;m++){var n=this.qk[m];switch(n.type){case "moveTo":b.push(" m ",Math.round(n.x),",",Math.round(n.y));break;case "lineTo":b.push(" l ",Math.round(n.x),",",Math.round(n.y));break;case "close":b.push(" x "); n=s;break;case "bezierCurveTo":b.push(" c ",Math.round(n.oW),",",Math.round(n.pW),",",Math.round(n.qW),",",Math.round(n.rW),",",Math.round(n.x),",",Math.round(n.y));break;case "at":case "wa":b.push(" ",n.type," ",Math.round(n.x-this.Hw*n.wa),",",Math.round(n.y-this.Iw*n.wa)," ",Math.round(n.x+this.Hw*n.wa),",",Math.round(n.y+this.Iw*n.wa)," ",Math.round(n.X0),",",Math.round(n.Z0)," ",Math.round(n.W0),",",Math.round(n.Y0))}if(n){if(f==s||n.x<f)f=n.x;if(i==s||n.x>i)i=n.x;if(g==s||n.y<g)g=n.y;if(k== s||n.y>k)k=n.y}}b.push(\' ">\');a?b.push(\'<g_vml_:fill color="\',e,\'" opacity="\',c,\'" />\'):(a=this.TM*this.lineWidth,1>a&&(c*=a),b.push("<g_vml_:stroke",\' opacity="\',c,\'"\',\' joinstyle="\',this.lineJoin,\'"\',\' miterlimit="\',this.miterLimit,\'"\',\' endcap="\',"square",\'"\',\' weight="\',a,\'px"\',\' color="\',e,\'" />\'));b.push("</g_vml_:shape>");this.fL.insertAdjacentHTML("beforeEnd",b.join(""))};lg.fill=function(){this.stroke(q)};lg.closePath=function(){this.qk.push({type:"close"})}; lg.fi=function(a,b){var c=this.li;return{x:hg*(a*c[0][0]+b*c[1][0]+c[2][0])-ig,y:hg*(a*c[0][1]+b*c[1][1]+c[2][1])-ig}};lg.save=function(){var a={};copyState(this,a);this.TJ.push(a);this.cN.push(this.li);this.li=kg(createMatrixIdentity(),this.li)};lg.restore=function(){copyState(this.TJ.pop(),this);this.li=this.cN.pop()}; function ng(a,b,c){var e;a:{for(e=0;3>e;e++)for(var f=0;2>f;f++)if(!isFinite(b[e][f])||isNaN(b[e][f])){e=t;break a}e=q}e&&(a.li=b,c&&(a.TM=Math.sqrt(Math.abs(b[0][0]*b[1][1]-b[0][1]*b[1][0]))))}lg.translate=function(a,b){ng(this,kg([[1,0,0],[0,1,0],[a,b,1]],this.li),t)};lg.rotate=function(a){var b=Math.cos(a),a=Math.sin(a);ng(this,kg([[b,a,0],[-a,b,0],[0,0,1]],this.li),t)};lg.scale=function(a,b){this.Hw*=a;this.Iw*=b;ng(this,kg([[a,0,0],[0,b,0],[0,0,1]],this.li),q)}; lg.transform=function(a,b,c,e,f,g){ng(this,kg([[a,b,0],[c,e,0],[f,g,1]],this.li),q)};lg.setTransform=function(a,b,c,e,f,g){ng(this,[[a,b,0],[c,e,0],[f,g,1]],q)};B.aQ=jg; ');

View File

@@ -90,6 +90,15 @@ export function msgHandle(data: object) {
data, data,
}); });
} }
//刷新redis缓存
export function refreshRedis() {
return service({
url: "/accept/refreshIdCache",
method: "get",
});
}
// 地图统计数量 // 地图统计数量
export function mapCount(data: object) { export function mapCount(data: object) {
return service({ return service({
@@ -303,3 +312,12 @@ export function exportLineData() {
responseType: "blob", responseType: "blob",
}); });
} }
// 无锡地图查询
export function stationMap(data: object) {
return service({
url: "/scale/stationMap",
method: "post",
data,
});
}

BIN
src/assets/bdz.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
src/assets/img/txzcwzj.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 916 B

View File

@@ -58,11 +58,13 @@ const emit = defineEmits(["timeChangeInfo"]);
interface Props { interface Props {
nextFlag?: boolean; nextFlag?: boolean;
theCurrentTime?: boolean; theCurrentTime?: boolean;
setWatch?: boolean;
} }
const props = withDefaults(defineProps<Props>(), { const props = withDefaults(defineProps<Props>(), {
nextFlag: false, nextFlag: false,
theCurrentTime: true, theCurrentTime: true,
setWatch: true,
}); });
const interval = ref(3); const interval = ref(3);
@@ -573,8 +575,10 @@ function formatDate(date: Date): string {
} }
watch(timeValue, async (newVal) => { watch(timeValue, async (newVal) => {
await store.dispatch("setTimeType", { type: interval, value: newVal }); if (props.setWatch) {
await emit("timeChangeInfo"); await store.dispatch("setTimeType", { type: interval, value: newVal });
await emit("timeChangeInfo");
}
}); });
defineExpose({ defineExpose({

View File

@@ -20,6 +20,7 @@ interface State {
eventDuration: number; eventDuration: number;
realData: []; //实时数据 realData: []; //实时数据
iframeLoad: boolean; iframeLoad: boolean;
showMap: boolean;
} }
// 初始状态 // 初始状态
@@ -37,13 +38,14 @@ const state: State = {
eventValue: 0.7, eventValue: 0.7,
eventDuration: 5, eventDuration: 5,
realData: [], //实时数据 realData: [], //实时数据
iframeLoad: false, iframeLoad: false,//无锡接线图是否加载完成
showMap: true,//无锡地图显示
}; };
// 定义Mutation类型 // 定义Mutation类型
enum Mutations { enum Mutations {
INCREMENT = "INCREMENT", INCREMENT = "INCREMENT",
IFRAMELOAD = "IFRAMELOAD", SET_STATE= "SET_STATE",
SET_TOKEN = "SET_TOKEN", SET_TOKEN = "SET_TOKEN",
SET_TIME = "SET-TIME", SET_TIME = "SET-TIME",
SET_CONFIG = "SET-CONFIG-TIME", SET_CONFIG = "SET-CONFIG-TIME",
@@ -55,8 +57,8 @@ export default createStore({
[Mutations.INCREMENT](state: State) { [Mutations.INCREMENT](state: State) {
state.count++; state.count++;
}, },
[Mutations.IFRAMELOAD](state: State, data: boolean) { [Mutations.SET_STATE](state: State, data: any) {
state.iframeLoad = data; state[data.key] = data.value;
}, },
[Mutations.SET_TOKEN](state: State, data: any) { [Mutations.SET_TOKEN](state: State, data: any) {
window.sessionStorage.setItem("token", data.token); window.sessionStorage.setItem("token", data.token);
@@ -103,8 +105,8 @@ export default createStore({
increment({ commit }) { increment({ commit }) {
commit(Mutations.INCREMENT); commit(Mutations.INCREMENT);
}, },
setIframeLoad({ commit }, data: any) { setStateKey({ commit }, data: any) {
commit(Mutations.IFRAMELOAD,data); commit(Mutations.SET_STATE,data);
}, },
setTimeType({ commit }, data: any) { setTimeType({ commit }, data: any) {
commit(Mutations.SET_TIME, data); commit(Mutations.SET_TIME, data);

View File

@@ -5,7 +5,7 @@ import store from "@/store/index";
const service = axios.create({ const service = axios.create({
baseURL: "/api", baseURL: "/api",
timeout: 60 * 1000, timeout: 60 * 1000 * 3,
headers: { "Content-Type": "application/json;charset=utf-8" }, headers: { "Content-Type": "application/json;charset=utf-8" },
}); });

View File

@@ -10,7 +10,7 @@ class HttpRequest {
getInsideConfig() { getInsideConfig() {
const config = { const config = {
baseURL: this.baseUrl, // 所有的请求地址前缀部分(没有后端请求不用写) baseURL: this.baseUrl, // 所有的请求地址前缀部分(没有后端请求不用写)
timeout: 80000, // 请求超时时间(毫秒) timeout: 60 * 1000 * 3, // 请求超时时间(毫秒)
}; };
return config; return config;
} }

View File

@@ -0,0 +1,460 @@
<template>
<div v-loading="loading" element-loading-background="#343849c7">
<div class="iconBox">
<div class="div">
<img src="@/assets/bdz.png" alt="" />
<span>变电站</span>
</div>
<!-- <div class="div">
<img src="@/assets/img/txzcwzj.png" alt="" />
<span>监测点</span>
</div> -->
</div>
<!-- <div class="bmSelect">
<el-select
v-model="value"
@change="setIcon"
placeholder="变电站筛选"
filterable
clearable
size="small"
style="width: 150px"
>
<el-option
v-for="item in siteList"
:key="item.stationName"
:label="item.stationName"
:value="item.stationName"
/>
</el-select>
</div> -->
<div>
<baidu-map
ref="mapRef"
class="bm-view"
:max-zoom="15"
:min-zoom="10"
:zoom="zoom"
@zoomend="syncCenterAndZoom"
@moveend="checkMapData"
@ready="handler"
:center="center"
:scroll-wheel-zoom="false"
:double-click-zoom="false"
>
<!-- 线-->
<!-- <div v-if="zoom > 13">
<bm-polyline
:path="path"
v-for="(path, index) in polyline"
:key="index"
></bm-polyline>
</div> -->
<!-- 变电站-->
<template>
<bm-marker
:position="path"
v-for="path in siteList"
:key="path.subId"
:icon="path.icon"
@click="pointClick(path)"
></bm-marker>
</template>
<!-- -->
<!-- <div maxZoom="12">
<bm-marker
:position="path"
v-for="path in areaLineInfo"
:key="path.lineId"
:icon="path.icon"
@click="pointClick(path)"
></bm-marker>
</div> -->
<bm-marker
:position="infoWindowPoint"
:icon="{ url: '1', size: { width: 0, height: 0 } }"
>
<bm-info-window
:show="infoWindowPoint.show"
@close="infoWindowPoint.show = false"
>
</bm-info-window>
</bm-marker>
</baidu-map>
</div>
</div>
</template>
<script setup lang="ts">
import { ref, reactive, nextTick, onMounted } from "vue";
import { stationMap } from "@/api/statistics/index";
import { useStore } from "vuex";
// import { BmlMarkerClusterer } from "vue-baidu-map-3x";
const emit = defineEmits(["pointClick"]);
const store = useStore();
const mapRef = ref<any>(null); // 地图容器的ref
const mapInstance: any = ref(null); // 百度地图实例
const BMapInstance: any = ref(null); // BMap对象
const loading = ref(false);
const dataList: any = ref([]);
const polyline = ref<any>([]);
const zoom = ref(11);
const areaLineInfo = ref<any>([]);
const siteList = ref<any>([]);
const infoWindowPoint = ref<any>({
lng: 0,
lat: 0,
show: false,
});
const center = ref({
lng: 120.124367,
lat: 31.555421,
});
const value = ref("");
const handler = async ({ BMap, map }: any) => {
if (!BMap.MarkerClusterer) {
// await import("/offline/libs/MarkerClusterer_min.js");
}
mapInstance.value = map;
BMapInstance.value = BMap;
// 监听地图容器的鼠标滚轮事件
const mapDom = mapRef.value.$el; // 获取地图DOM元素
mapDom.addEventListener("mousewheel", handleMapWheel, { passive: false });
};
// 点击变电站\监测点
const markerClick = (e: any) => {
zoom.value = 15;
infoWindowPoint.value = e;
// infoWindowPoint.value.show = true;
center.value.lng = 120.124367;
center.value.lat = 31.555421;
setTimeout(() => {
center.value.lng = e.lng;
center.value.lat = e.lat + 0.01;
}, 0);
};
// 点击监测点
const pointClick = (e: any) => {
emit("pointClick", e);
store.dispatch("setStateKey", { key: "showMap", value: false });
};
const init = () => {
loading.value = true;
siteList.value = [];
polyline.value = [];
dataList.value = [];
areaLineInfo.value = [];
stationMap({
deptId: store.state.deptId,
type: store.state.timeType,
startTime: store.state.timeValue[0],
endTime: store.state.timeValue[1],
}).then((res: any) => {
dataList.value = res.data;
// dataList.value = [
// {
// stationId: 156,
// stationName: "110kV北京电视台变",
// gdName: "检修分公司",
// longitude: 120.33,
// latitude: 31.52,
// lineCount: 1,
// eventCount: 1,
// lineEventDetails: [
// // {
// // gdName: "检修分公司",
// // pictureId: "5debb8bd0ce26527675eedffd74a3198",
// // pictureName: "无锡线上",
// // },
// {
// gdName: "检修分公司",
// pictureId: "35b1301833e3fdfc872b1a27a17c7245",
// pictureName: "无锡修改1011--工程部",
// },
// ],
// },
// ];
let data = dataList.value;
let r = 0.0035;
let list = data.filter((item: any) => item.lat != 0);
list.forEach((item: any) => {
// 变电站图标
item.icon = {
url: new URL("@/assets/bdz.png", import.meta.url).href,
size: {
width: 40,
height: 40,
},
};
// if (
// item.lineEventDetails?.length > 10 &&
// item.lineEventDetails?.length < 100
// ) {
// r = 0.0055;
// } else if (item.lineEventDetails.length >= 100) {
// r = 0.01055;
// }
// item.lng = item.longitude;
// item.lat = item.latitude;
// item.lineEventDetails.forEach((val: any, i: number) => {
// val.lng =
// item.longitude +
// r * Math.cos((2 * Math.PI * i) / item.lineEventDetails.length);
// val.lat =
// item.latitude +
// r * Math.sin((2 * Math.PI * i) / item.lineEventDetails.length);
// // 监测点图标
// val.icon = {
// url: new URL("@/assets/img/txzcwzj.png", import.meta.url).href,
// size: {
// width: 40,
// height: 40,
// },
// };
// polyline.value.push([
// {
// lng: item.lng,
// lat: item.lat,
// },
// {
// lng: val.lng,
// lat: val.lat,
// },
// ]);
// });
// areaLineInfo.value.push(...item.lineEventDetails);
});
siteList.value = list;
// zoom.value = 12;
setTimeout(() => {
loading.value = false;
}, 0);
});
};
const moveenFlag = ref(true);
const checkMapData = () => {
if (!mapInstance.value || !BMapInstance.value || !moveenFlag.value) return;
// 获取地图容器
const container = mapInstance.value.getContainer();
setTimeout(() => {
try {
// 1. 获取所有图片瓦片
const tiles = Array.from(container.querySelectorAll("img"));
// 2. 检查是否有离线地图瓦片
const hasOfflineTiles = tiles.some((tile: any) => {
// 确保tile是有效的DOM元素
if (!tile || !tile.src) return false;
// 检查是否是离线瓦片
return tile.src.includes("/plugin/offline/tiles/");
});
// 3. 如果没有离线瓦片,回到默认位置
if (!hasOfflineTiles) {
console.warn("当前区域无离线地图数据,将返回默认位置");
// 使用正确的BMap.Point创建方式
const point = new BMapInstance.value.Point(120.124367,31.555421);
// 平滑移动并设置合适缩放级别
mapInstance.value.panTo(point);
mapInstance.value.setZoom(11);
// zoom.value = 12;
}
} catch (error) {
console.error("地图检测出错:", error);
}
}, 1000); // 适当缩短延迟时间
};
// 处理地图滚轮缩放修正scale导致的坐标偏移
const handleMapWheel = (e: WheelEvent) => {
e.preventDefault();
if (!mapInstance.value || !BMapInstance.value) return;
// 1. 获取当前缩放比例假设你通过scale变量控制需替换为你的实际scale值
const scaleWidth: any = window.sessionStorage.getItem("scaleWidth"); // 你的水平缩放比例
const scaleHeight: any = window.sessionStorage.getItem("scaleheight"); // 你的垂直缩放比例
// 2. 获取地图容器的位置和尺寸原始DOM尺寸未被scale影响
const rect = mapRef.value.$el.getBoundingClientRect();
// 3. 计算鼠标在地图容器内的原始坐标(未修正)
const mouseXRaw = e.clientX - rect.left;
const mouseYRaw = e.clientY - rect.top;
// 4. 修正坐标除以缩放比例得到scale前的原始坐标地图实际识别的坐标
const mouseX = mouseXRaw / scaleWidth;
const mouseY = mouseYRaw / scaleHeight;
// 5. 将修正后的坐标转换为百度地图的经纬度
const point = new BMapInstance.value.Pixel(mouseX, mouseY);
const lngLat = mapInstance.value.pixelToPoint(point); // 像素坐标转经纬度
// 6. 执行缩放(滚轮向上放大,向下缩小)
const zoomDelta = e.deltaY < 0 ? 1 : -1; // 滚轮方向
const newZoom = mapInstance.value.getZoom() + zoomDelta;
if (newZoom < 10 || newZoom > 15) return; // 限制缩放范围(百度地图默认范围)
// 7. 缩放时保持鼠标指向的位置不变(核心:先缩放再移中心点)
mapInstance.value.setZoom(newZoom);
mapInstance.value.setCenter(lngLat); // 让鼠标指向的位置成为新中心
};
const syncCenterAndZoom = (e: any) => {
zoom.value = e.target.getZoom();
checkMapData();
};
//点击过滤位置
const setIcon = (e: string) => {
moveenFlag.value = false;
siteList.value.forEach((item: any) => {
if (item.stationName == e) {
center.value.lng = 120.124367;
center.value.lat = 31.555421;
setTimeout(() => {
center.value.lng = item.lng;
center.value.lat = item.lat + 0.01;
infoWindowPoint.value = item;
infoWindowPoint.value.show = true;
zoom.value = 15;
}, 0);
}
});
setTimeout(() => {
moveenFlag.value = true;
}, 1500);
};
onMounted(() => {
init();
});
defineExpose({
setIcon,
init
});
</script>
<style lang="scss" scoped>
@use "@/assets/scss/index.scss";
.flex {
display: flex;
justify-content: center;
align-items: center;
height: 600px;
}
.bm-view {
width: 100%;
height: 980px;
}
.iconBox {
position: absolute;
bottom: 10px;
left: 10px;
z-index: 1;
width: 110px;
height: 40px;
padding: 10px;
background: #ffffff10 !important;
border: 1px solid #ccc;
border-radius: 4px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
font-size: 12px;
.div {
display: flex;
margin-bottom: 5px;
img {
height: 20px;
margin-right: 5px;
}
}
}
:deep(.el-descriptions__title) {
color: #fff;
}
:deep(.el-descriptions__content) {
color: #fff;
// width: 100%;
}
:deep(.el-descriptions__body) {
color: #fff;
background-color: rgb(0 0 0 / 0%) !important;
}
:deep(.el-descriptions__label) {
color: #fff;
// display: inline-block;
width: 80px;
text-align: right; /* 右对齐 */
}
:deep(.BMap_pop .BMap_center) {
background-color: #343849c7;
}
.descriptionsBox {
max-height: 100px;
overflow-y: auto;
}
</style>
<style>
.BMap_cpyCtrl {
display: none;
}
.anchorBL {
display: none;
} /* 地图容器样式 */
.baidu-map-container {
/* 消除可能的缝隙 */
line-height: 0;
font-size: 0;
}
/* .BMap_pop div {
background-color: #343849c7 !important;
} */
.BMap_top,
.BMap_bottom {
background-color: #343849c7 !important;
}
/* .BMap_pop div:nth-child(1) {
background-color: #343849c7 !important;
} */
.BMap_pop > div:nth-child(1) > div,
.BMap_pop > div:nth-child(3) > div,
.BMap_pop > div:nth-child(5) > div,
.BMap_pop > div:nth-child(7) > div {
background-color: #343849c7 !important;
}
.BMap_pop > div:nth-child(8) > img {
display: none;
}
.BMap_pop > div:nth-child(8) {
/* 设置边框宽度和颜色,上边框为可见颜色,其他边框为透明 */
width: 0 !important;
height: 0 !important;
border-left: 20px solid transparent;
border-right: 20px solid transparent;
border-top: 20px solid #343849c7; /* 倒三角的颜色 */
transform: translateX(-26px) translateY(24px);
/* 可选:添加阴影增强视觉效果 */
/* box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); */
}
.bmSelect {
position: absolute;
right: 10px;
top: 10px;
z-index: 2000;
}
</style>

View File

@@ -494,8 +494,8 @@ const generateFn = async () => {
loading1.value = true; loading1.value = true;
await getDynamicData({ await getDynamicData({
lineId: dotList.value.id, lineId: dotList.value.id,
searchBeginTime: tabList.value[activeName.value].time[0], searchBeginTime: time.value[0],
searchEndTime: tabList.value[activeName.value].time[1], searchEndTime: time.value[1],
time: tabList.value[activeName.value].key, time: tabList.value[activeName.value].key,
type: form.type, type: form.type,
userDataId: form.loadDataId, userDataId: form.loadDataId,

View File

@@ -623,6 +623,7 @@ watch(flag, (newVal) => {
setTimeout(() => { setTimeout(() => {
if (flag.value == 0) { if (flag.value == 0) {
initHasEventList(); initHasEventList();
// flag 变化后重新绑定事件 // flag 变化后重新绑定事件
bindRankingClickEvent(); bindRankingClickEvent();
} }
@@ -635,6 +636,29 @@ watch(flag, (newVal) => {
} }
}, 100); }, 100);
}); });
watch(
() => store.state.showMap,
(newVal) => {
if (newVal) {
return;
}
setTimeout(() => {
if (flag.value == 0) {
initHasEventList();
// flag 变化后重新绑定事件
bindRankingClickEvent();
}
if (flag.value == 2) {
renderChart2();
initHasUpEventList();
}
if (flag.value == 1) {
callHarmOneImageApi(getFirstTableData.value, getTimes.value);
}
}, 100);
}
);
// 暂降记录个数 // 暂降记录个数
const initialData = () => { const initialData = () => {
@@ -688,11 +712,9 @@ const initialAggregation = () => {
tableData.splice(0, tableData.length); tableData.splice(0, tableData.length);
}); });
}; };
const interval = ref(null);
// 提取发送消息到iframe的公共方法 // 提取发送消息到iframe的公共方法
const sendMessageToIframe = (type: string, payload: any) => { const sendMessageToIframe = (type: string, payload: any) => {
// console.log(123,store.state.iframeLoad);
// window.parent.postMessage( // window.parent.postMessage(
// { // {
// type, // type,
@@ -701,6 +723,10 @@ const sendMessageToIframe = (type: string, payload: any) => {
// "*" // "*"
// ); // );
// 如果 iframe 已加载完成,直接发送消息 // 如果 iframe 已加载完成,直接发送消息
if (store.state.showMap) {
return;
}
if (store.state.iframeLoad) { if (store.state.iframeLoad) {
window.parent.postMessage( window.parent.postMessage(
{ {
@@ -711,9 +737,13 @@ const sendMessageToIframe = (type: string, payload: any) => {
); );
return; return;
} }
if (interval.value) {
clearInterval(interval.value);
interval.value = null;
}
// 如果未加载完成,每 1 秒尝试发送一次 // 如果未加载完成,每 1 秒尝试发送一次
const interval = setInterval(() => { interval.value = setInterval(() => {
console.log("等待 iframe 加载1 秒后重试..."); console.log("等待 iframe 加载1 秒后重试...");
if (store.state.iframeLoad) { if (store.state.iframeLoad) {
// 加载完成后发送消息并清除定时器 // 加载完成后发送消息并清除定时器
@@ -724,7 +754,7 @@ const sendMessageToIframe = (type: string, payload: any) => {
}, },
"*" // 建议替换为具体域名 "*" // 建议替换为具体域名
); );
clearInterval(interval); clearInterval(interval.value);
} }
}, 1000); }, 1000);
}; };
@@ -857,7 +887,7 @@ const analysisClick = (row: any) => {
const dataObject = { const dataObject = {
eventList: [...eventList.value], eventList: [...eventList.value],
color: "#1dd1a1", color: "#03de6d",
maxResponsibilityMonitorId: [...maxResponsibilityMonitorId.value], maxResponsibilityMonitorId: [...maxResponsibilityMonitorId.value],
maxColor: "#f9065b", maxColor: "#f9065b",
}; };
@@ -937,7 +967,7 @@ const initialResponsibilityList = () => {
// 根据实际字段进行拼接,示例: // 根据实际字段进行拼接,示例:
const content = `${item.lineName || ""}进行${ const content = `${item.lineName || ""}进行${
item.dataTimes || "" item.dataTimes || ""
}次谐波电压溯源,溯源对象:${item.userDataName || ""}`.trim(); }次谐波电压溯源,溯源对象:${item.userDataName || "系统测点"}`.trim();
return { return {
...item, ...item,
content: content, content: content,
@@ -1186,7 +1216,7 @@ const callHarmOneImageApi = (row: any, selectedTime: string) => {
const dataObject = { const dataObject = {
eventListAll: [JSON.parse(JSON.stringify(eventListAll.value))], eventListAll: [JSON.parse(JSON.stringify(eventListAll.value))],
eventList: [...eventList.value], eventList: [...eventList.value],
color: "#09ee06", color: "#cf552d",
maxResponsibilityMonitorId: [...maxResponsibilityMonitorId.value], maxResponsibilityMonitorId: [...maxResponsibilityMonitorId.value],
maxColor: "#c708fe", maxColor: "#c708fe",
backgroundPointId: [...backgroundPoint.value], backgroundPointId: [...backgroundPoint.value],
@@ -1267,7 +1297,7 @@ const handleChildClose = () => {
const init = () => { const init = () => {
initialData(); initialData();
initialAggregation(); initialAggregation();
initHasEventList(); // initHasEventList();
initialResponsibilityList(); initialResponsibilityList();
// getInfoListAmplify(); // getInfoListAmplify();
tableInfoAmplify(); tableInfoAmplify();

View File

@@ -20,6 +20,7 @@
v-model="form.userList" v-model="form.userList"
:data="dataTree" :data="dataTree"
multiple multiple
filterable filterable
show-checkbox show-checkbox
ref="treeRef" ref="treeRef"
@@ -46,6 +47,7 @@
v-model="form.index" v-model="form.index"
filterable filterable
multiple multiple
:multiple-limit="5" :multiple-limit="5"
collapse-tags collapse-tags
collapse-tags-tooltip collapse-tags-tooltip
@@ -395,7 +397,7 @@ const submit = () => {
showTabs.value = true; showTabs.value = true;
let list = JSON.parse(JSON.stringify(form.index)).sort((a, b) => a - b); let list = JSON.parse(JSON.stringify(form.index)).sort((a, b) => a - b);
tabList.value = []; tabList.value = [];
list.forEach((item: any) => { list.forEach((item: any) => {
tabList.value.push({ tabList.value.push({
label: item + "次谐波", label: item + "次谐波",
@@ -553,11 +555,13 @@ const generateFn = async () => {
return ElMessage.warning("请选择用采用户"); return ElMessage.warning("请选择用采用户");
} }
loading1.value = true; loading1.value = true;
console.log("🚀 ~ generateFn ~ dotList.value:", dotList.value.id, tabList.value);
await getDynamicData({ await getDynamicData({
userDataId: "123", userDataId: "123",
lineId: dotList.value.id, lineId: dotList.value.id,
searchBeginTime: tabList.value[activeName.value].time[0], searchBeginTime: time.value[0],
searchEndTime: tabList.value[activeName.value].time[1], searchEndTime: time.value[1],
time: tabList.value[activeName.value].key, time: tabList.value[activeName.value].key,
type: form.type, type: form.type,
userList: form.userList, userList: form.userList,

View File

@@ -1,6 +1,6 @@
<template> <template>
<!-- 项目管理弹框 --> <!-- 项目管理弹框 -->
<el-dialog v-model="dialogVisible" title="项目管理" width="1600px"> <el-dialog v-model="dialogVisible" title="项目管理" width="1600px" @close="handleDialogClose">
<!-- <el-card class="transparent-card"> --> <!-- <el-card class="transparent-card"> -->
<div style="display: flex; justify-content: space-between"> <div style="display: flex; justify-content: space-between">
<div> <div>
@@ -65,22 +65,9 @@
<Edit @click="editd(item)" /> <Edit @click="editd(item)" />
</el-icon> </el-icon>
</el-tooltip> </el-tooltip>
<!-- <el-tooltip
class="item"
effect="dark"
content="修改项目"
placement="top"
>
<Edit
style="margin-left: 5px; width: 16px"
class="xiaoshou color"
@click="editd(item)"
/> </el-tooltip
> -->
</span> </span>
<div style="display: flex; justify-content: end"> <div style="display: flex; justify-content: end">
<el-button <!-- <el-button
v-if="item.active == 0" v-if="item.active == 0"
class="color" class="color"
:icon="Compass" :icon="Compass"
@@ -95,7 +82,7 @@
style="padding: 3px 0; color: #82bd51" style="padding: 3px 0; color: #82bd51"
type="text" type="text"
>已激活</el-button >已激活</el-button
> > -->
<el-button <el-button
class="color" class="color"
:icon="Share" :icon="Share"
@@ -145,7 +132,7 @@
</div> </div>
</el-dialog> </el-dialog>
<!-- 新增弹框 --> <!-- 新增弹框 -->
<el-dialog v-model="innerVisible" :title="dialogTitle" width="500px"> <el-dialog v-model="innerVisible" :title="dialogTitle" width="500px" >
<el-form <el-form
ref="ruleFormRef" ref="ruleFormRef"
:model="ruleForm" :model="ruleForm"
@@ -163,17 +150,22 @@
placeholder="请输入项目名称" placeholder="请输入项目名称"
/> />
</el-form-item> </el-form-item>
<!-- <el-form-item label="工程项目" prop="projectIds"> <el-form-item label="变电站名称">
<el-select <el-select
v-model="ruleForm.projectIds" v-model="ruleForm.substionIds"
placeholder="请选择" placeholder="请选择"
:popper-append-to-body="false" multiple
popper-class="custom-select-dropdown" :teleported="false"
> >
<el-option label="Zone one111" value="shanghai" /> <el-option
<el-option label="Zone two" value="beijing" /> v-for="item in dataList"
:key="item.id"
:label="item.name"
:value="item.id"
:disabled="item.bindFlag == true && !setDisabled?.includes(item.id)"
/>
</el-select> </el-select>
</el-form-item> --> </el-form-item>
<el-form-item label="项目排序" prop="orderBy"> <el-form-item label="项目排序" prop="orderBy">
<el-input v-model="ruleForm.orderBy" placeholder="请输入" /> <el-input v-model="ruleForm.orderBy" placeholder="请输入" />
</el-form-item> </el-form-item>
@@ -218,11 +210,15 @@ import {
active, active,
getActive, getActive,
} from "@/api/manage_wx/index"; } from "@/api/manage_wx/index";
import { stationMap } from "@/api/statistics/index";
import { useStore } from "vuex";
const emit = defineEmits<{ const emit = defineEmits<{
(e: "project-change", project: { id: string; name: string }): void; (e: "project-change", project: { id: string; name: string }): void;
(e: "station-map-updated"): void;
}>(); }>();
const store = useStore();
const projectData = ref([]); const projectData = ref([]);
// 系统配置弹框 // 系统配置弹框
@@ -240,6 +236,10 @@ const firstForm = ref({
id: "", id: "",
}); });
const dataList = ref([]); //变电站
const setDisabled = ref([]);
const params = reactive({ const params = reactive({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
@@ -251,6 +251,7 @@ interface RuleForm {
projectIds: []; projectIds: [];
orderBy: string; orderBy: string;
remark: string; remark: string;
substionIds: [];
} }
const formSize = ref("default"); const formSize = ref("default");
@@ -260,17 +261,18 @@ const ruleForm = reactive<RuleForm>({
projectIds: [], projectIds: [],
orderBy: "100", orderBy: "100",
remark: "", remark: "",
substionIds: [],
}); });
const rules = reactive<FormRules<RuleForm>>({ const rules = reactive<FormRules<RuleForm>>({
name: [{ required: true, message: "请输入项目名称", trigger: "blur" }], name: [{ required: true, message: "请输入项目名称", trigger: "blur" }],
projectIds: [ // projectIds: [
{ // {
required: true, // required: true,
message: "请选择", // message: "请选择",
trigger: "change", // trigger: "change",
}, // },
], // ],
orderBy: [ orderBy: [
{ {
required: true, required: true,
@@ -280,6 +282,21 @@ const rules = reactive<FormRules<RuleForm>>({
], ],
}); });
const handleDialogClose = () => {
emit('station-map-updated');
};
const init = () => {
stationMap({
deptId: store.state.deptId,
type: store.state.timeType,
startTime: store.state.timeValue[0],
endTime: store.state.timeValue[1],
}).then((res: any) => {
dataList.value = res.data;
});
};
onMounted(() => { onMounted(() => {
fetachData(); fetachData();
}); });
@@ -334,6 +351,8 @@ const onReset = () => {
const onSubmitadd = () => { const onSubmitadd = () => {
innerVisible.value = true; innerVisible.value = true;
dialogTitle.value = "新增项目"; dialogTitle.value = "新增项目";
init();
setDisabled.value = [];
// Object.assign(ruleForm, {}); 不生效 // Object.assign(ruleForm, {}); 不生效
Object.assign(ruleForm, { Object.assign(ruleForm, {
//生效,但是一个个赋值,麻烦 //生效,但是一个个赋值,麻烦
@@ -342,6 +361,7 @@ const onSubmitadd = () => {
orderBy: "100", orderBy: "100",
projectIds: ["1dd1b076e104f15459ac401fc1b902c4"], projectIds: ["1dd1b076e104f15459ac401fc1b902c4"],
remark: "", remark: "",
substionIds: [],
}); });
//Object.keys(ruleForm).forEach((key) => delete ruleForm[key]); //生效,但是有默认值的,一进去会直接报校验 //Object.keys(ruleForm).forEach((key) => delete ruleForm[key]); //生效,但是有默认值的,一进去会直接报校验
}; };
@@ -352,6 +372,8 @@ const querdata = (e: any) => {};
const editd = (row: any) => { const editd = (row: any) => {
innerVisible.value = true; innerVisible.value = true;
dialogTitle.value = "修改项目"; dialogTitle.value = "修改项目";
init();
setDisabled.value = JSON.parse(JSON.stringify(row.substionIds));
// Object.assign(ruleForm, row); // Object.assign(ruleForm, row);
Object.assign(ruleForm, { Object.assign(ruleForm, {
id: row.id, id: row.id,
@@ -359,6 +381,7 @@ const editd = (row: any) => {
orderBy: row.orderBy, orderBy: row.orderBy,
projectIds: row.projectIds, projectIds: row.projectIds,
remark: row.remark, remark: row.remark,
substionIds: row.substionIds,
}); });
}; };
@@ -371,6 +394,8 @@ const submitForm = async (formEl: FormInstance | undefined) => {
} else { } else {
getEdit(); getEdit();
} }
init();
emit('station-map-updated');
console.log("submit!"); console.log("submit!");
} else { } else {
console.log("error submit!", fields); console.log("error submit!", fields);
@@ -410,6 +435,7 @@ const getEdit = async () => {
const resetForm = () => { const resetForm = () => {
innerVisible.value = false; innerVisible.value = false;
emit('station-map-updated')
}; };
const onTableSizeChange = (size: number) => { const onTableSizeChange = (size: number) => {

View File

@@ -6,7 +6,7 @@
type="primary" type="primary"
color="#223772" color="#223772"
@click="showDetailClick" @click="showDetailClick"
v-if="iframeLoaded" v-if="iframeLoaded && !store.state.showMap"
> >
<span v-if="props.currentFlag == 0">暂降溯源</span> <span v-if="props.currentFlag == 0">暂降溯源</span>
<span v-if="props.currentFlag == 1">谐波溯源</span> <span v-if="props.currentFlag == 1">谐波溯源</span>
@@ -422,7 +422,13 @@
align="center" align="center"
label="责任对象" label="责任对象"
show-overflow-tooltip show-overflow-tooltip
/> >
<template #default="scope">
<span>{{
scope.row.userDataName==null? '系统测点':scope.row.userDataName
}}</span>
</template>
</el-table-column>
<el-table-column <el-table-column
prop="updateTime" prop="updateTime"
align="center" align="center"

View File

@@ -1,35 +1,50 @@
<template> <template>
<div class="plan"> <div class="plan">
<!-- src=" http://192.168.1.128:3001/zutai/?id=44368e72a2e594d14ebaf317f0f6ad00&&name=decodeURI(APP测试项目)&&flag=true&&wxqr=true#/" --> <bdMap
<!-- <iframe v-show="store.state.showMap"
src="http://192.168.1.62:8088/zutai/?id=0944fe372e90daeefd040916a105ac8b&&name=测试组态编辑器&&preview=true#/preview"
width="100%" width="100%"
height="100%" height="100%"
frameborder="0" @pointClick="pointClick"
></iframe> --> ref="bdMapRef"
></bdMap>
<!-- 添加加载事件监听 --> <!-- 添加加载事件监听 -->
<iframe <iframe
v-if="!store.state.showMap"
:src="iframeSrc" :src="iframeSrc"
width="100%" width="100%"
height="100%" height="100%"
frameborder="0" frameborder="0"
scrolling="no" scrolling="no"
id="iframeLeft" id="iframeLeft"
:key="keyof"
@load="onIframeLoad" @load="onIframeLoad"
></iframe> ></iframe>
<el-button
v-if="!store.state.showMap"
class="backButton"
@click="backButton"
size="small"
:icon="Back"
>返回</el-button
>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, watch, onMounted, onUnmounted } from "vue"; import { ref, watch, onMounted, onUnmounted } from "vue";
import { getActive } from "@/api/manage_wx/index"; import { getActive } from "@/api/manage_wx/index";
import { Back } from "@element-plus/icons-vue";
import bdMap from "./bdMap.vue";
import { useStore } from "vuex"; import { useStore } from "vuex";
const store = useStore(); const store = useStore();
const props = defineProps<{ const props = defineProps<{
project: { id: string; name: string } | null; project: { id: string; name: string } | null;
}>(); }>();
const iframeSrc = ref(""); const bdMapRef = ref(null)
const iframeSrc = ref("");
const keyof = ref(0);
// 监听 props 变化 // 监听 props 变化
watch( watch(
() => props.project, () => props.project,
@@ -48,6 +63,11 @@ watch(
}, },
{ immediate: true, deep: true } { immediate: true, deep: true }
); );
// 点击监测点传入 接线图id
const pointClick = (row: any) => {
setUrl(row.configId, row.configName);
keyof.value += 1;
};
onMounted(() => { onMounted(() => {
// 监听来自 eventStatistics 组件的消息 // 监听来自 eventStatistics 组件的消息
@@ -55,23 +75,26 @@ onMounted(() => {
getActive({}).then((res: any) => { getActive({}).then((res: any) => {
if (res.code == "A0000") { if (res.code == "A0000") {
// window.location.origin // window.location.origin
iframeSrc.value = setUrl(res.data.id, res.data.name);
window.location.origin +
// "http://192.168.1.128:4001" +
`/zutai/?id=${res.data.id}&&name=${encodeURIComponent(
res.data.name
)}&&preview=true&&display=true&&graphicDisplay=wx#/preview`;
} }
}); });
// 子页面
const iframe = document.getElementById("iframeLeft");
// 监听 iframe 加载完成事件
iframe.addEventListener("load", function () {
// 通知父页面:我已加载完毕
store.dispatch("setIframeLoad", true);
});
}); });
const setUrl = (url: string, nam: string) => {
iframeSrc.value =
window.location.origin +
// "http://192.168.1.179:4001" +
`/zutai/?id=${url}&&name=${encodeURIComponent(
nam
)}&&preview=true&&display=true&&graphicDisplay=wx#/preview`;
// const iframe = document.getElementById("iframeLeft");
// if (iframe) {
// // 监听 iframe 加载完成事件
// iframe.addEventListener("load", function () {
// // 通知父页面:我已加载完毕
// store.dispatch("setStateKey", { key: "iframeLoad", value: true });
// });
// }
};
onUnmounted(() => { onUnmounted(() => {
// 清理事件监听器 // 清理事件监听器
@@ -80,6 +103,7 @@ onUnmounted(() => {
// iframe 加载完成回调 添加加载事件监听 // iframe 加载完成回调 添加加载事件监听
const onIframeLoad = () => { const onIframeLoad = () => {
store.dispatch("setStateKey", { key: "iframeLoad", value: true });
// console.log("iframe 加载完成"); // console.log("iframe 加载完成");
// 通知 securityDetail.vue 组件 iframe 已加载完成 // 通知 securityDetail.vue 组件 iframe 已加载完成
window.postMessage( window.postMessage(
@@ -117,6 +141,25 @@ const sendKeysToIframe = (keyList: string[]) => {
); // 在生产环境中应该指定具体的域名而不是 '*' ); // 在生产环境中应该指定具体的域名而不是 '*'
} }
}; };
// 返回地图
const backButton = () => {
store.dispatch("setStateKey", { key: "iframeLoad", value: false });
store.dispatch("setStateKey", { key: "showMap", value: true });
// window.removeEventListener("message", handleMessage);
};
// 监听 station-map-updated 事件并转发给 bdMap 组件
const handleStationMapUpdated = () => {
if (bdMapRef.value && typeof bdMapRef.value.init === 'function') {
bdMapRef.value.init()
}
}
// 暴露方法给父组件调用
defineExpose({
handleStationMapUpdated
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.plan { .plan {
@@ -124,4 +167,10 @@ const sendKeysToIframe = (keyList: string[]) => {
height: 990px; height: 990px;
padding: 5px; padding: 5px;
} }
.backButton {
position: absolute;
right: 10px;
top: 10px;
z-index: 1;
}
</style> </style>

View File

@@ -87,13 +87,14 @@
<Management <Management
ref="createRef" ref="createRef"
@project-change="onProjectChange" @project-change="onProjectChange"
@station-map-updated="handleStationMapUpdated"
></Management> ></Management>
</div> </div>
<div class="body-box"> <div class="body-box">
<!-- 第三行数据 --> <!-- 第三行数据 -->
<div class="content-box"> <div class="content-box">
<dv-border-box-10 :color="color[0]" style="position: relative"> <dv-border-box-10 :color="color[0]" style="position: relative">
<Plan :project="currentProject" /> <Plan :project="currentProject" ref="planRef"/>
<!-- flag 值传递给 SecurityDetail 组件 --> <!-- flag 值传递给 SecurityDetail 组件 -->
<!-- showDetail从SecurityDetail 组件传过来 --> <!-- showDetail从SecurityDetail 组件传过来 -->
<SecurityDetail <SecurityDetail
@@ -104,11 +105,11 @@
/> />
<IframeDia <IframeDia
:event-list="eventListData as []" :event-list="eventListData as []"
style="position: absolute; top: 0px; right: 0px; left: 0px" style="position: absolute; top: 0px; right: 0px; left: 0px;z-index: 10;"
/> />
<!-- 图元颜色提示框 --> <!-- 图元颜色提示框 -->
<div <div
v-if="!showDetail" v-if="!store.state.showMap && !showDetail"
style=" style="
position: absolute; position: absolute;
left: 0px; left: 0px;
@@ -124,42 +125,27 @@
<span class="iconfont blink-basic" style="color: #375db4" <span class="iconfont blink-basic" style="color: #375db4"
>&#xe67a;</span >&#xe67a;</span
> >
<!-- <img
src="@/assets/icon/传输设备 (3).png"
style="width: 20px; height: 20px"
class="blink-basic"
/> -->
<div style="margin-left: 10px; font-size: 12px"> <div style="margin-left: 10px; font-size: 12px">
暂降发生测点 暂降发生测点
</div> </div>
</div> </div>
<div style="display: flex" v-if="currentFlag == 1"> <div style="display: flex" v-if="currentFlag == 1">
<!-- <img <span class="iconfont blink-basic" style="color: #0936f4"
src="@/assets/icon/传输设备 (4).png"
style="width: 20px; height: 20px"
class="blink-basic"
/> -->
<span class="iconfont blink-basic" style="color:#0936f4"
>&#xe67a;</span >&#xe67a;</span
> >
<div style="margin-left: 10px; font-size: 12px">背景测点</div> <div style="margin-left: 10px; font-size: 12px">背景测点</div>
</div> </div>
<div style="display: flex"> <div style="display: flex">
<!-- <img
src="@/assets/icon/传输设备 (2).png"
style="width: 20px; height: 20px"
class="blink-basic"
/> -->
<span <span
v-if="currentFlag == 0" v-if="currentFlag == 0"
class="iconfont blink-basic" class="iconfont blink-basic"
style="color: #1dd1a1" style="color: #03de6d"
>&#xe67a;</span >&#xe67a;</span
> >
<span <span
v-if="currentFlag == 1" v-if="currentFlag == 1"
class="iconfont blink-basic" class="iconfont blink-basic"
style="color: #09ee06" style="color: #cf552d"
>&#xe67a;</span >&#xe67a;</span
> >
<span <span
@@ -175,11 +161,6 @@
</div> </div>
</div> </div>
<div style="display: flex" v-if="currentFlag != 2"> <div style="display: flex" v-if="currentFlag != 2">
<!-- <img
src="@/assets/icon/传输设备 (1).png"
style="width: 20px; height: 20px"
class="blink-basic"
/> -->
<span <span
v-if="currentFlag == 0" v-if="currentFlag == 0"
class="iconfont blink-basic" class="iconfont blink-basic"
@@ -243,6 +224,9 @@ import datePicker from "@/components/datePicker/index.vue";
import Management from "./components/manage/index.vue"; import Management from "./components/manage/index.vue";
import SecurityDetail from "./components/manage/securityDetail.vue"; import SecurityDetail from "./components/manage/securityDetail.vue";
import IframeDia from "./components/manage/iframeDia.vue"; import IframeDia from "./components/manage/iframeDia.vue";
import { useStore } from "vuex";
const store = useStore();
// 传给iframe页面的参数 // 传给iframe页面的参数
const currentProject = ref<{ id: string; name: string } | null>(null); const currentProject = ref<{ id: string; name: string } | null>(null);
@@ -252,6 +236,8 @@ const onProjectChange = (project: { id: string; name: string }) => {
currentProject.value = project; currentProject.value = project;
}; };
const planRef = ref() // 添加对 Plan 组件的引用
const smsQueriesRef = ref(); // 短信查询组件引用 const smsQueriesRef = ref(); // 短信查询组件引用
const smsConfigRef = ref(); // 短信查询组件引用 const smsConfigRef = ref(); // 短信查询组件引用
const sendRef = ref(); // 短信查询组件引用 const sendRef = ref(); // 短信查询组件引用
@@ -397,6 +383,14 @@ const createRef = ref();
const openDialog = () => { const openDialog = () => {
createRef.value.open(); createRef.value.open();
}; };
// 处理 Management 组件发出的 station-map-updated 事件
const handleStationMapUpdated = () => {
// 通过 Plan 组件转发给 bdMap
if (planRef.value && typeof planRef.value.handleStationMapUpdated === 'function') {
planRef.value.handleStationMapUpdated()
}
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@@ -113,7 +113,7 @@
v-for="(value, index) in infoWindowPoint.objName.split( v-for="(value, index) in infoWindowPoint.objName.split(
';' ';'
)" )"
style="white-space: nowrap" style="white-space: nowrap; font-size: 13px"
> >
{{ value }} {{ value }}
</div> </div>
@@ -198,8 +198,8 @@ const markerClick = (e: any) => {
zoom.value = 15; zoom.value = 15;
infoWindowPoint.value = e; infoWindowPoint.value = e;
infoWindowPoint.value.show = true; infoWindowPoint.value.show = true;
center.value.lng = 116.404367; center.value.lng = e.lng;
center.value.lat = 39.915421; center.value.lat = e.lat+ 0.01000001;;
setTimeout(() => { setTimeout(() => {
center.value.lng = e.lng; center.value.lng = e.lng;
@@ -285,41 +285,41 @@ const init = () => {
const moveenFlag = ref(true); const moveenFlag = ref(true);
const checkMapData = () => { const checkMapData = () => {
if (!mapInstance.value || !BMapInstance.value || !moveenFlag.value) return; // if (!mapInstance.value || !BMapInstance.value || !moveenFlag.value) return;
// 获取地图容器 // // 获取地图容器
const container = mapInstance.value.getContainer(); // const container = mapInstance.value.getContainer();
setTimeout(() => { // setTimeout(() => {
try { // try {
// 1. 获取所有图片瓦片 // // 1. 获取所有图片瓦片
const tiles = Array.from(container.querySelectorAll("img")); // const tiles = Array.from(container.querySelectorAll("img"));
// 2. 检查是否有离线地图瓦片 // // 2. 检查是否有离线地图瓦片
const hasOfflineTiles = tiles.some((tile: any) => { // const hasOfflineTiles = tiles.some((tile: any) => {
// 确保tile是有效的DOM元素 // // 确保tile是有效的DOM元素
if (!tile || !tile.src) return false; // if (!tile || !tile.src) return false;
// 检查是否是离线瓦片 // // 检查是否是离线瓦片
return tile.src.includes("/plugin/offline/tiles/"); // return tile.src.includes("/plugin/offline/tiles/");
}); // });
// 3. 如果没有离线瓦片,回到默认位置 // // 3. 如果没有离线瓦片,回到默认位置
if (!hasOfflineTiles) { // if (!hasOfflineTiles) {
console.warn("当前区域无离线地图数据,将返回默认位置"); // console.warn("当前区域无离线地图数据,将返回默认位置");
// 使用正确的BMap.Point创建方式 // // 使用正确的BMap.Point创建方式
const point = new BMapInstance.value.Point(116.404367, 39.915421); // const point = new BMapInstance.value.Point(116.404367, 39.915421);
// 平滑移动并设置合适缩放级别 // // 平滑移动并设置合适缩放级别
mapInstance.value.panTo(point); // mapInstance.value.panTo(point);
mapInstance.value.setZoom(12); // mapInstance.value.setZoom(12);
// zoom.value = 12; // // zoom.value = 12;
} // }
} catch (error) { // } catch (error) {/
console.error("地图检测出错:", error); // console.error("地图检测出错:", error);
} // }
}, 1000); // 适当缩短延迟时间 // }, 1000); // 适当缩短延迟时间
}; };
// 处理地图滚轮缩放修正scale导致的坐标偏移 // 处理地图滚轮缩放修正scale导致的坐标偏移

View File

@@ -1,25 +1,56 @@
<!--报表导出--> <!--报表导出-->
<template> <template>
<el-dialog :close-on-click-modal="false" draggable v-model="machineVisible" :title="title" width="500"> <el-dialog
:close-on-click-modal="false"
draggable
v-model="machineVisible"
:title="title"
width="500"
>
<div> <div>
<div class="smsConfig"> <div class="smsConfig">
<el-form :model="form" inline label-width="auto" class=" ml30 mt10"> <el-form :model="form" inline label-width="auto" class="ml30 mt10">
<el-form-item label="时间"> <el-form-item label="时间">
<el-date-picker v-model="timeValue" size="small" type="daterange" :disabled-date="isFutureDate" <el-date-picker
style="width: 250px; margin-right: 10px" unlink-panels :clearable="false" range-separator="" v-model="timeValue"
start-placeholder="开始日期" end-placeholder="结束日期" value-format="YYYY-MM-DD HH:mm:ss" /> size="small"
type="datetimerange"
:disabled-date="isFutureDate"
style="width: 250px; margin-right: 10px"
unlink-panels
:clearable="false"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD HH:mm:ss"
/>
</el-form-item> </el-form-item>
<el-form-item label="部门集合"> <el-form-item label="部门集合">
<el-select v-model="form.deptList" placeholder="请选择部门集合" style="width: 250px" size="small" multiple <el-select
collapse-tags collapse-tags-tooltip> v-model="form.deptList"
placeholder="请选择部门集合"
style="width: 250px"
size="small"
multiple
collapse-tags
collapse-tags-tooltip
>
<template #header> <template #header>
<el-checkbox v-model="checkAll" :indeterminate="indeterminate" @change="handleCheckAll"> <el-checkbox
v-model="checkAll"
:indeterminate="indeterminate"
@change="handleCheckAll"
>
全部 全部
</el-checkbox> </el-checkbox>
</template> </template>
<el-option v-for="item in deptLists" :key="item.deptsIndex" :label="item.deptsname" <el-option
:value="item.deptsIndex" /> v-for="item in deptLists"
:key="item.deptsIndex"
:label="item.deptsname"
:value="item.deptsIndex"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
@@ -32,7 +63,14 @@
</div> </div>
<template #footer> <template #footer>
<el-button :icon="Close" @click="setUp" size="small">取消</el-button> <el-button :icon="Close" @click="setUp" size="small">取消</el-button>
<el-button type="primary" :icon="Check" @click="save" size="small">确定</el-button> <el-button
type="primary"
:icon="Check"
@click="save"
size="small"
:loading="loading"
>确定</el-button
>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
@@ -41,17 +79,18 @@ import { ref, watch, inject, onMounted } from "vue";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { Check, Close } from "@element-plus/icons-vue"; import { Check, Close } from "@element-plus/icons-vue";
import { getDept, exportForms } from "@/api/statistics/index"; import { getDept, exportForms } from "@/api/statistics/index";
import type { CheckboxValueType } from 'element-plus' import type { CheckboxValueType } from "element-plus";
import { useStore } from "vuex"; import { useStore } from "vuex";
const store = useStore(); const store = useStore();
const machineVisible = ref(false); const machineVisible = ref(false);
const title = ref("报表导出"); const title = ref("报表导出");
const timeValue = ref([]); const timeValue = ref([]);
const deptLists = ref(); const deptLists = ref();
const loading = ref(false);
//form表单校验规则 //form表单校验规则
const emit = defineEmits(["flushed"]); const emit = defineEmits(["flushed"]);
const checkAll = ref(false) const checkAll = ref(false);
const indeterminate = ref(false) const indeterminate = ref(false);
const form = ref({ const form = ref({
searchBeginTime: "", searchBeginTime: "",
searchEndTime: "", searchEndTime: "",
@@ -88,28 +127,28 @@ const init = () => {
// } // }
// }) // })
watch( watch(
() => form.value.deptList, // 使用函数返回值的形式 () => form.value.deptList, // 使用函数返回值的形式
(val) => { (val) => {
if (val.length == 0) { if (val.length == 0) {
checkAll.value = false checkAll.value = false;
indeterminate.value = false indeterminate.value = false;
} else if (val.length == deptLists.value.length) { } else if (val.length == deptLists.value.length) {
checkAll.value = true checkAll.value = true;
indeterminate.value = false indeterminate.value = false;
} else { } else {
indeterminate.value = true indeterminate.value = true;
} }
}, },
{ deep: true } // 添加深度监听选项 { deep: true } // 添加深度监听选项
) );
const handleCheckAll = (val: CheckboxValueType) => { const handleCheckAll = (val: CheckboxValueType) => {
indeterminate.value = false indeterminate.value = false;
if (val) { if (val) {
form.value.deptList = deptLists.value.map((_) => _.deptsIndex) form.value.deptList = deptLists.value.map((_) => _.deptsIndex);
} else { } else {
form.value.deptList = [] form.value.deptList = [];
} }
} };
const save = () => { const save = () => {
if (!timeValue.value[0]) { if (!timeValue.value[0]) {
ElMessage.warning("请选择时间!"); ElMessage.warning("请选择时间!");
@@ -122,25 +161,29 @@ const save = () => {
(form.value.deptId = store.state.deptId), (form.value.deptId = store.state.deptId),
(form.value.searchBeginTime = timeValue.value[0]), (form.value.searchBeginTime = timeValue.value[0]),
(form.value.searchEndTime = timeValue.value[1] (form.value.searchEndTime = timeValue.value[1]);
? timeValue.value[1].split(" ")[0] + " 23:59:59"
: ""); exportForms(form.value)
exportForms(form.value).then((res: any) => { .then((res: any) => {
let blob = new Blob([res], { let blob = new Blob([res], {
type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=UTF-8", type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=UTF-8",
});
// createObjectURL(blob); //创建下载的链接
const url = window.URL.createObjectURL(blob);
const link = document.createElement("a"); // 创建a标签
link.href = url;
link.download = "导出报表.docx"; // 设置下载的文件名
document.body.appendChild(link);
link.click(); //执行下载
document.body.removeChild(link);
machineVisible.value = false;
loading.value = false;
})
.catch((err) => {
loading.value = false;
}); });
// createObjectURL(blob); //创建下载的链接
const url = window.URL.createObjectURL(blob);
const link = document.createElement("a"); // 创建a标签
link.href = url;
link.download = "导出报表.docx"; // 设置下载的文件名
document.body.appendChild(link);
link.click(); //执行下载
document.body.removeChild(link);
machineVisible.value = false;
});
}; };
const isFutureDate = (time: any) => { const isFutureDate = (time: any) => {

View File

@@ -1,10 +1,30 @@
<template> <template>
<!--短信查询--> <!--短信查询-->
<el-dialog :close-on-click-modal="false" draggable v-model="machineVisible" :title="title" width="1200px" :before-close="handleClose"> <el-dialog
:close-on-click-modal="false"
draggable
v-model="machineVisible"
:title="title"
width="1200px"
:before-close="handleClose"
>
<div class="formBox"> <div class="formBox">
<div class="formLeft"> <div class="formLeft">
<datePicker ref="datePickerRef" /> <datePicker
<span>发送结果 </span> :setWatch="false"
ref="datePickerRef"
style="width: 470px"
/>
<span>关键字搜索 </span>
<el-input
size="small"
v-model="searchValue"
placeholder="请输入关键字"
clearable
style="width: 130px"
></el-input>
<span class="ml20">发送结果 </span>
<el-select <el-select
size="small" size="small"
v-model="state" v-model="state"
@@ -32,7 +52,8 @@
</div> </div>
<div class="tableBox"> <div class="tableBox">
<el-table <el-table
:scrollbar-always-on="true" :data="tableData" :scrollbar-always-on="true"
:data="tableData"
height="500px" height="500px"
size="small" size="small"
stripe stripe
@@ -104,7 +125,7 @@ import { ElMessage } from "element-plus";
import datePicker from "@/components/datePicker/index.vue"; import datePicker from "@/components/datePicker/index.vue";
import { Search, Download } from "@element-plus/icons-vue"; import { Search, Download } from "@element-plus/icons-vue";
import table2excel from "js-table2excel"; import table2excel from "js-table2excel";
const emit= defineEmits(["close"]); const emit = defineEmits(["close"]);
const machineVisible = ref(false); const machineVisible = ref(false);
const title = ref("已发送短信查询"); const title = ref("已发送短信查询");
const datePickerRef = ref(); const datePickerRef = ref();
@@ -124,14 +145,15 @@ const inquire = () => {
searchBeginTime: datePickerRef.value.timeValue[0], searchBeginTime: datePickerRef.value.timeValue[0],
searchEndTime: datePickerRef.value.timeValue[1], searchEndTime: datePickerRef.value.timeValue[1],
sendResult: state.value, sendResult: state.value,
searchValue: searchValue.value,
}).then((res) => { }).then((res) => {
total.value = res.data.total; total.value = res.data.total;
tableData.value = res.data.records; tableData.value = res.data.records;
loading.value = false; loading.value = false;
}); });
}; };
const searchValue = ref("");
const open = (text: string, data?: any) => { const open = (text: string, data?: any) => {
machineVisible.value = true; machineVisible.value = true;
nextTick(() => { nextTick(() => {
inquire(); inquire();
@@ -183,6 +205,7 @@ const exportTable = () => {
searchBeginTime: datePickerRef.value.timeValue[0], searchBeginTime: datePickerRef.value.timeValue[0],
searchEndTime: datePickerRef.value.timeValue[1], searchEndTime: datePickerRef.value.timeValue[1],
sendResult: state.value, sendResult: state.value,
searchValue: searchValue.value,
}).then((res) => { }).then((res) => {
setTimeout(() => { setTimeout(() => {
table2excel( table2excel(
@@ -197,7 +220,7 @@ const exportTable = () => {
}; };
const handleClose = () => { const handleClose = () => {
emit("close", false); emit("close", false);
} };
defineExpose({ open }); defineExpose({ open });
</script> </script>

View File

@@ -1,8 +1,8 @@
<template> <template>
<div id="index" ref="appRef"> <div id="index" ref="appRef">
<div <div
class="bg" class="bg"
:class=" :class="
store.state.screenNotic == 1 store.state.screenNotic == 1
? pushFlag ? pushFlag
? bottomTextRef?.urgentList.length > 0 ? bottomTextRef?.urgentList.length > 0
@@ -23,53 +23,57 @@
> >
</div> </div>
<dv-decoration-10 class="dv-dec-10" :color="color[1]" /> <dv-decoration-10 class="dv-dec-10" :color="color[1]"/>
<div class="d-flex jc-center"> <div class="d-flex jc-center">
<dv-decoration-8 class="dv-dec-8" :color="color[2]" /> <dv-decoration-8 class="dv-dec-8" :color="color[2]"/>
<div class="title"> <div class="title">
<span class="title-text">{{ title }}</span> <span class="title-text">{{ title }}</span>
</div> </div>
<dv-decoration-8 <dv-decoration-8
class="dv-dec-8" class="dv-dec-8"
:reverse="true" :reverse="true"
:color="color[2]" :color="color[2]"
/> />
</div> </div>
<dv-decoration-10 class="dv-dec-10-s" :color="color[1]" /> <dv-decoration-10 class="dv-dec-10-s" :color="color[1]"/>
</div> </div>
<div class="d-flex secondLine"> <div class="d-flex secondLine">
<div class="react-right mr-1"> <div class="react-right mr-1">
<span class="text fw-b" style="display: flex"> <span class="text fw-b" style="display: flex">
<datePicker <datePicker
ref="datePickerRef" ref="datePickerRef"
@timeChangeInfo="timeChangeInfo" @timeChangeInfo="timeChangeInfo"
/> />
</span> </span>
</div> </div>
<el-dropdown placement="bottom"> <el-dropdown placement="bottom">
<el-icon :size="22" :color="color[1][0]" class="mt-0.5 mt5"> <el-icon :size="22" :color="color[1][0]" class="mt-0.5 mt5">
<Menu /> <Menu/>
</el-icon> </el-icon>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<!-- <el-dropdown-item @click="handleClick('1')"
>已发送短信查询</el-dropdown-item
>
<el-dropdown-item @click="handleClick('2')" <!-- <el-dropdown-item @click="handleClick('2')"
>模拟短信发送</el-dropdown-item >模拟短信发送</el-dropdown-item
> --> > -->
<el-dropdown-item @click="handleClick('3')" <el-dropdown-item @click="handleClick('3')">
>系统配置</el-dropdown-item 系统配置
> </el-dropdown-item>
<el-dropdown-item @click="handleClick('4')" <el-dropdown-item @click="handleClick('4')">
>报表导出</el-dropdown-item 报表导出
> </el-dropdown-item>
<el-dropdown-item @click="handleClick('5')" <el-dropdown-item @click="handleClick('5')">
>台账导出</el-dropdown-item 台账导出
> </el-dropdown-item>
<el-dropdown-item @click="handleClick('1')">
短信管理
</el-dropdown-item>
<el-dropdown-item @click="handleClick('6')">
缓存刷新
</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
@@ -79,33 +83,33 @@
<!-- 第三行数据 --> <!-- 第三行数据 -->
<div class="content-box"> <div class="content-box">
<dv-border-box-13 :color="color[0]"> <dv-border-box-13 :color="color[0]">
<eventStatistics ref="eventStatisticsRef" /> <eventStatistics ref="eventStatisticsRef"/>
</dv-border-box-13> </dv-border-box-13>
<dv-border-box-10 :color="color[0]"> <dv-border-box-10 :color="color[0]">
<Map ref="mapRef" /> <Map ref="mapRef"/>
<!-- <center-left /> --> <!-- <center-left /> -->
</dv-border-box-10> </dv-border-box-10>
<dv-border-box-13 :color="color[0]"> <dv-border-box-13 :color="color[0]">
<alarm ref="alarmRef" /> <alarm ref="alarmRef"/>
<!-- 紧急告警 --> <!-- 紧急告警 -->
<div <div
class="icon" class="icon"
v-if="!(bottomTextRef?.urgentList.length == 0)" v-if="!(bottomTextRef?.urgentList.length == 0)"
:color="color[0][1]" :color="color[0][1]"
:class=" :class="
bottomTextRef?.urgentList.length > 0 bottomTextRef?.urgentList.length > 0
? 'animate-flash-red' ? 'animate-flash-red'
: '' : ''
" "
@click="drawerClick" @click="drawerClick"
> >
<!-- <WarnTriangleFilled /> --> <!-- <WarnTriangleFilled /> -->
<span <span
class="iconfont icon-gaojing" class="iconfont icon-gaojing"
:style="{ :style="{
color: color:
bottomTextRef?.urgentList.length > 0 bottomTextRef?.urgentList.length > 0
? '#ff0000' ? '#ff0000'
@@ -113,12 +117,12 @@
}" }"
></span> ></span>
<span <span
class="count" class="count"
v-if="bottomTextRef?.urgentList.length > 0" v-if="bottomTextRef?.urgentList.length > 0"
>{{ >{{
bottomTextRef?.urgentList.length > 99 bottomTextRef?.urgentList.length > 99
? "99+" ? "99+"
: bottomTextRef?.urgentList.length : bottomTextRef?.urgentList.length
}}</span }}</span
> >
</div> </div>
@@ -128,18 +132,18 @@
<!-- 第四行数据 --> <!-- 第四行数据 -->
<div class="bototm-box"> <div class="bototm-box">
<dv-border-box-13 :color="color[0]"> <dv-border-box-13 :color="color[0]">
<endpointStatistics ref="endpointStatisticsRef" /> <endpointStatistics ref="endpointStatisticsRef"/>
<!-- <bottom-left /> --> <!-- <bottom-left /> -->
</dv-border-box-13> </dv-border-box-13>
<dv-border-box-13 :color="color[0]"> <dv-border-box-13 :color="color[0]">
<informationTable <informationTable
ref="informationTableRef" ref="informationTableRef"
@handleCurrentChange="handleCurrentChange" @handleCurrentChange="handleCurrentChange"
/> />
</dv-border-box-13> </dv-border-box-13>
<dv-border-box-13 :color="color[0]"> <dv-border-box-13 :color="color[0]">
<sendTrends ref="sendTrendsRef" /> <sendTrends ref="sendTrendsRef"/>
</dv-border-box-13> </dv-border-box-13>
</div> </div>
<!-- 底部 --> <!-- 底部 -->
@@ -147,22 +151,22 @@
</div> </div>
</div> </div>
<bottomText <bottomText
ref="bottomTextRef" ref="bottomTextRef"
@handleCurrentChange="handleCurrentChange" @handleCurrentChange="handleCurrentChange"
/> />
<!-- 已发短信查询 --> <!-- 已发短信查询 -->
<smsQueries <smsQueries
ref="smsQueriesRef" ref="smsQueriesRef"
v-if="smsQueriesFlag" v-if="smsQueriesFlag"
@close="smsQueriesFlag = false" @close="smsQueriesFlag = false"
/> />
<!-- 系统配置 --> <!-- 系统配置 -->
<Config ref="ConfigRef" @flushed="inquire" /> <Config ref="ConfigRef" @flushed="inquire"/>
<!-- 报表导出 --> <!-- 报表导出 -->
<ReportForms ref="reportForms" /> <ReportForms ref="reportForms"/>
</div> </div>
</template> </template>
@@ -178,11 +182,11 @@ import {
watch, watch,
} from "vue"; } from "vue";
import { formatTime, getDateRange, stopSpeak } from "@/utils/index"; //引入封装好的 import {formatTime, getDateRange, stopSpeak} from "@/utils/index"; //引入封装好的
import useDraw from "@/utils/useDraw"; // 引入封装好的屏幕适配方法 import useDraw from "@/utils/useDraw"; // 引入封装好的屏幕适配方法
import { WEEK, title, subtitle, moduleInfo, color } from "@/constant/index"; //引入封装的标题日期 import {WEEK, title, subtitle, moduleInfo, color} from "@/constant/index"; //引入封装的标题日期
import datePicker from "@/components/datePicker/index.vue"; import datePicker from "@/components/datePicker/index.vue";
import { Menu, BellFilled, WarnTriangleFilled } from "@element-plus/icons-vue"; import {Menu, BellFilled, WarnTriangleFilled} from "@element-plus/icons-vue";
//页面组件 //页面组件
import eventStatistics from "./components/eventStatistics.vue"; //统计事件 import eventStatistics from "./components/eventStatistics.vue"; //统计事件
import endpointStatistics from "./components/endpointStatistics.vue"; //终端在线统计 import endpointStatistics from "./components/endpointStatistics.vue"; //终端在线统计
@@ -193,10 +197,12 @@ import Map from "./components/bdMap.vue"; //地图
import smsQueries from "./components/smsQueries.vue"; // //短信查询 import smsQueries from "./components/smsQueries.vue"; // //短信查询
import bottomText from "./components/bottomText.vue"; //边框组件 import bottomText from "./components/bottomText.vue"; //边框组件
import socketClient from "@/utils/webSocketClient"; import socketClient from "@/utils/webSocketClient";
import { useStore } from "vuex"; import {useStore} from "vuex";
import Config from "./components/config.vue"; import Config from "./components/config.vue";
import ReportForms from "./components/reportForms.vue"; import ReportForms from "./components/reportForms.vue";
import { exportLineData } from "@/api/statistics/index"; import {exportLineData,refreshRedis} from "@/api/statistics/index";
import {ElMessage} from "element-plus";
const store = useStore(); const store = useStore();
const smsQueriesRef = ref(); // 短信查询组件引用 const smsQueriesRef = ref(); // 短信查询组件引用
const endpointStatisticsRef = ref(); // 终端在线统计组件引用 const endpointStatisticsRef = ref(); // 终端在线统计组件引用
@@ -225,7 +231,7 @@ const timeInfo: any = reactive({
const timeType = ref(3); const timeType = ref(3);
const reportForms = ref(); const reportForms = ref();
// 适配处理 // 适配处理
const { appRef, calcRate, windowDraw, unWindowDraw } = useDraw(); const {appRef, calcRate, windowDraw, unWindowDraw} = useDraw();
// 连接webSocket客户端 // 连接webSocket客户端
const init = () => { const init = () => {
if (!dataSocket.socketServe) { if (!dataSocket.socketServe) {
@@ -292,6 +298,10 @@ const handleClick = (type: string) => {
smsQueriesFlag.value = true; smsQueriesFlag.value = true;
setTimeout(() => { setTimeout(() => {
if (type === "1") {
smsQueriesRef.value.open("已发送短信查询");
}
if (type === "3") { if (type === "3") {
ConfigRef.value.open("系统配置"); ConfigRef.value.open("系统配置");
} }
@@ -312,6 +322,12 @@ const handleClick = (type: string) => {
document.body.removeChild(link); document.body.removeChild(link);
}); });
} }
if (type === "6") {
refreshRedis().then((res: any) => {
ElMessage.success("刷新缓存成功");
});
}
}, 100); }, 100);
}; };
@@ -342,13 +358,13 @@ const inquire = async () => {
}; };
watch( watch(
store.state, store.state,
(val) => { (val) => {
timeChangeInfo(); timeChangeInfo();
}, },
{ {
deep: true, deep: true,
} }
); );
</script> </script>