diff --git a/config/router.config.ts b/config/router.config.ts index 377e129..f12a093 100644 --- a/config/router.config.ts +++ b/config/router.config.ts @@ -4,7 +4,7 @@ import home from './HomePage/router_home'; import juryRoom from './JuryRoom/router_menuJury.config'; import approvalForm from './router_approval_form'; import partyMemberTopic from './router_partyMemberTopic'; -import { elecBidEvaluation, monitorScreen } from './router_elecEvaluation'; +import { elecBidEvaluation, monitor, monitorScreen } from './router_elecEvaluation'; export default [ //========================================================================登陆 ...transfer,//跳转、登陆 @@ -14,6 +14,7 @@ export default [ ...partyMemberTopic, //电子评标室-监控大屏 ...monitorScreen, + ...monitor, { path: '/userformal', // component: '../layouts/UserLayout', diff --git a/config/router_elecEvaluation.ts b/config/router_elecEvaluation.ts index c511dd9..9f3ac01 100644 --- a/config/router_elecEvaluation.ts +++ b/config/router_elecEvaluation.ts @@ -19,6 +19,35 @@ export const monitorScreen = [ }, ] +export const monitor = [ + //监控 + { + path: '/ElecMonitor', + routes: [ + {//监控首页 + path: '/ElecMonitor/Home', + component: './ElecEvaluation/Monitor/Home', + }, + {//异常监控 + path: '/ElecMonitor/Exception', + component: './ElecEvaluation/Monitor/Exception', + }, + {//招标代理机构概况 + path: '/ElecMonitor/TenderAgent', + component: './ElecEvaluation/Monitor/TenderAgent', + }, + {//供应商概况 + path: '/ElecMonitor/Supplier', + component: './ElecEvaluation/Monitor/Supplier', + }, + {//今日开标 + path: '/ElecMonitor/OpenToday', + component: './ElecEvaluation/Monitor/OpenToday', + }, + ], + }, +] + export const elecBidEvaluation = [ { path: '/ElecEvaluation', diff --git a/src/assets/monitor/Frame-10116.png b/src/assets/monitor/Frame-10116.png new file mode 100644 index 0000000..2d815c4 Binary files /dev/null and b/src/assets/monitor/Frame-10116.png differ diff --git a/src/assets/monitor/Frame-10117.png b/src/assets/monitor/Frame-10117.png new file mode 100644 index 0000000..29f4976 Binary files /dev/null and b/src/assets/monitor/Frame-10117.png differ diff --git a/src/assets/monitor/Frame-10118.png b/src/assets/monitor/Frame-10118.png new file mode 100644 index 0000000..0b198ba Binary files /dev/null and b/src/assets/monitor/Frame-10118.png differ diff --git a/src/assets/monitor/Frame-10119.png b/src/assets/monitor/Frame-10119.png new file mode 100644 index 0000000..ed7716b Binary files /dev/null and b/src/assets/monitor/Frame-10119.png differ diff --git a/src/assets/monitor/Frame-10120.png b/src/assets/monitor/Frame-10120.png new file mode 100644 index 0000000..5b0cd48 Binary files /dev/null and b/src/assets/monitor/Frame-10120.png differ diff --git a/src/assets/monitor/Frame-10121.png b/src/assets/monitor/Frame-10121.png new file mode 100644 index 0000000..b82e37b Binary files /dev/null and b/src/assets/monitor/Frame-10121.png differ diff --git a/src/assets/monitor/background-3.jpg b/src/assets/monitor/background-3.jpg new file mode 100644 index 0000000..106ecdd Binary files /dev/null and b/src/assets/monitor/background-3.jpg differ diff --git a/src/assets/monitor/circle-3197.png b/src/assets/monitor/circle-3197.png new file mode 100644 index 0000000..a7339ab Binary files /dev/null and b/src/assets/monitor/circle-3197.png differ diff --git a/src/assets/monitor/circle-3198.png b/src/assets/monitor/circle-3198.png new file mode 100644 index 0000000..50f6704 Binary files /dev/null and b/src/assets/monitor/circle-3198.png differ diff --git a/src/assets/monitor/circle-3199.png b/src/assets/monitor/circle-3199.png new file mode 100644 index 0000000..4924380 Binary files /dev/null and b/src/assets/monitor/circle-3199.png differ diff --git a/src/assets/monitor/circle-3200.png b/src/assets/monitor/circle-3200.png new file mode 100644 index 0000000..0300209 Binary files /dev/null and b/src/assets/monitor/circle-3200.png differ diff --git a/src/assets/monitor/global-title-bg.png b/src/assets/monitor/global-title-bg.png new file mode 100644 index 0000000..31f2b4b Binary files /dev/null and b/src/assets/monitor/global-title-bg.png differ diff --git a/src/assets/monitor/left.png b/src/assets/monitor/left.png new file mode 100644 index 0000000..a4c5505 Binary files /dev/null and b/src/assets/monitor/left.png differ diff --git a/src/assets/monitor/right.png b/src/assets/monitor/right.png new file mode 100644 index 0000000..47593ea Binary files /dev/null and b/src/assets/monitor/right.png differ diff --git a/src/assets/monitor/vip-crown-1-fill.png b/src/assets/monitor/vip-crown-1-fill.png new file mode 100644 index 0000000..46344d4 Binary files /dev/null and b/src/assets/monitor/vip-crown-1-fill.png differ diff --git a/src/assets/monitor/vip-crown-2-fill.png b/src/assets/monitor/vip-crown-2-fill.png new file mode 100644 index 0000000..183dfe0 Binary files /dev/null and b/src/assets/monitor/vip-crown-2-fill.png differ diff --git a/src/assets/monitor/vip-crown-3-fill.png b/src/assets/monitor/vip-crown-3-fill.png new file mode 100644 index 0000000..f48c556 Binary files /dev/null and b/src/assets/monitor/vip-crown-3-fill.png differ diff --git a/src/pages/ElecEvaluation/Monitor/Exception/index.tsx b/src/pages/ElecEvaluation/Monitor/Exception/index.tsx new file mode 100644 index 0000000..ff237e6 --- /dev/null +++ b/src/pages/ElecEvaluation/Monitor/Exception/index.tsx @@ -0,0 +1,334 @@ +import { Col, Progress, Row, Table } from 'antd'; +import { debounce } from 'lodash'; +import React, { useEffect, useRef, useState } from 'react'; +import '../style.less' +import { onCell, onHeaderCell, OverviewItem, proviceEnum, ScreenLabel, ScreenTitle, ScrollTable } from '../Home'; +import Circle3199 from '@/assets/monitor/circle-3199.png'; +import { getDecryptDataAPI, getNoOpenAssessListAPI, getNoOpenListAPI, getNoOpenNumberAPI, getThreeDayNoEndAPI } from '../service'; + +const columns: any[] = [ + { + title: '序号', + align: 'center', + width: '10%', + onCell, + onHeaderCell, + render: (_: any, record: any, index: any) => index + 1, + }, + { + title: '省分', + dataIndex: 'provinceName', + key: 'provinceName', + width: '15%', + ellipsis: true, + onCell, + onHeaderCell, + // render: (_: any, record: any) => proviceEnum[record.provinceDictId], + }, + { + title: '项目名称', + dataIndex: 'projectName', + key: 'projectName', + ellipsis: true, + width: '20%', + onCell, + onHeaderCell, + }, + { + title: '预算金额', + dataIndex: 'budgetAmount', + key: 'budgetAmount', + width: '20%', + onCell, + onHeaderCell, + }, + { + title: '采购经理', + dataIndex: 'ownerContactName', + key: 'ownerContactName', + width: '15%', + onCell, + onHeaderCell, + }, + { + title: '查看', + width: '20%', + onCell, + onHeaderCell, + render: (_: any, record: any) => { + return ( + { }} style={{ color: "#fff" }}>查看 + ) + }, + }, +]; + +const columnsSecond: any[] = [ + { + title: '序号', + align: 'center', + width: '10%', + onCell, + onHeaderCell, + render: (_: any, record: any, index: any) => index + 1, + }, + { + title: '省分', + dataIndex: 'regionDictName', + key: 'regionDictName', + width: '15%', + ellipsis: true, + onCell, + onHeaderCell, + // render: (_: any, record: any) => proviceEnum[record.provinceDictId], + }, + { + title: '项目名称', + dataIndex: 'projectName', + key: 'projectName', + ellipsis: true, + width: '20%', + onCell, + onHeaderCell, + }, + { + title: '预算金额', + dataIndex: 'budgetAmount', + key: 'budgetAmount', + width: '20%', + onCell, + onHeaderCell, + }, + { + title: '采购经理', + dataIndex: 'ownerContactName', + key: 'ownerContactName', + width: '15%', + onCell, + onHeaderCell, + }, + { + title: '查看', + width: '20%', + onCell, + onHeaderCell, + render: (_: any, record: any) => { + return ( + { }} style={{ color: "#fff" }}>查看 + ) + }, + }, +]; +const dataSource = [ + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + people: "曹鹏", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + people: "曹鹏", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + people: "曹鹏", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + people: "曹鹏", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + people: "曹鹏", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "10:30", + vital: "1", + people: "曹鹏", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "10:30", + vital: "1", + people: "曹鹏", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "10:30", + vital: "1", + people: "曹鹏", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "10:30", + vital: "1", + people: "曹鹏", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + people: "曹鹏", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + people: "曹鹏", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + people: "曹鹏", + }, +] + +const MonitorException: React.FC<{}> = () => { + //超过1小时未开标数量 + const [noOpenNumberData, setNoOpenNumberData] = useState(""); + //开启评审后3日未结束评标-列表 + const [threeDayNoEndData, setThreeDayNoEndData] = useState([]); + //超过1小时未开标数量-列表 + const [noOpenListData, setNoOpenListData] = useState([]); + //开标后超过6小时未开启评审室-列表 + const [noOpenAssessListData, setNoOpenAssessListData] = useState(); + //异常监控-解密异常、mac地址相同及相关项目列表 + const [decryptData, setDecryptData] = useState(); + //超过1小时未开标数量 + const getNoOpenNumber = () => { + getNoOpenNumberAPI().then(res => { + if (res?.code == 200) { + setNoOpenNumberData(res?.data); + } + }) + } + //开启评审后3日未结束评标 + const getThreeDayNoEnd = () => { + getThreeDayNoEndAPI().then(res => { + if (res?.code == 200) { + setThreeDayNoEndData(res?.data); + } + }) + } + //开启评审后3日未结束评标 + const getNoOpenList = () => { + getNoOpenListAPI({ pageNo: 1, pageSize: 10 }).then(res => { + if (res?.code == 200) { + setNoOpenListData(res?.data); + } + }) + } + //开标后超过6小时未开启评审室-列表 + const getNoOpenAssessList = () => { + getNoOpenAssessListAPI({ pageNo: 1, pageSize: 10 }).then(res => { + if (res?.code == 200) { + setNoOpenAssessListData(res?.data); + } + }) + } + //异常监控-解密异常、mac地址相同及相关项目列表 + const getDecryptData = () => { + getDecryptDataAPI().then(res => { + if (res?.code == 200) { + setDecryptData(res?.data); + } + }) + } + useEffect(() => { + getNoOpenNumber(); + getThreeDayNoEnd(); + getNoOpenList(); + getNoOpenAssessList(); + getDecryptData(); + }, []) + return ( + +
+
+ + + + + + + +
+
+ + +
+ more} /> +
+ +
+ more} /> +
+ +
+
+ + +
+ more} /> +
+ +
+ more} /> +
+ +
+
+ + +
+ more} /> +
+ +
+ more} /> +
+ +
+
+ +
+
+ ); +}; + +export default MonitorException; diff --git a/src/pages/ElecEvaluation/Monitor/Home/china.js b/src/pages/ElecEvaluation/Monitor/Home/china.js new file mode 100644 index 0000000..12dabff --- /dev/null +++ b/src/pages/ElecEvaluation/Monitor/Home/china.js @@ -0,0 +1,46 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['exports', 'echarts'], factory); + } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') { + // CommonJS + factory(exports, require('echarts')); + } else { + // Browser globals + factory({}, root.echarts); + } +}(this, function (exports, echarts) { + var log = function (msg) { + if (typeof console !== 'undefined') { + console && console.error && console.error(msg); + } + } + if (!echarts) { + log('ECharts is not Loaded'); + return; + } + if (!echarts.registerMap) { + log('ECharts Map is not loaded') + return; + } + echarts.registerMap('china', {"type":"FeatureCollection","features":[{"type":"Feature","id":"710000","properties":{"id":"710000","cp":[121.509062,24.044332],"name":"台湾","childNum":6},"geometry":{"type":"MultiPolygon","coordinates":[["@@°Ü¯Û"],["@@ƛĴÕƊÉɼģºðʀ\\ƎsÆNŌÔĚäœnÜƤɊĂǀĆĴžĤNJŨxĚĮǂƺòƌ‚–âÔ®ĮXŦţƸZûЋƕƑGđ¨ĭMó·ęcëƝɉlÝƯֹÅŃ^Ó·śŃNjƏďíåɛGɉ™¿@ăƑŽ¥ĘWǬÏĶŁâ"],["@@\\p|WoYG¿¥I†j@¢"],["@@…¡‰@ˆV^RqˆBbAŒnTXeRz¤Lž«³I"],["@@ÆEE—„kWqë @œ"],["@@fced"],["@@„¯ɜÄèaì¯ØǓIġĽ"],["@@çûĖ롖hòř "]],"encodeOffsets":[[[122886,24033]],[[123335,22980]],[[122375,24193]],[[122518,24117]],[[124427,22618]],[[124862,26043]],[[126259,26318]],[[127671,26683]]]}},{"type":"Feature","id":"130000","properties":{"id":"130000","cp":[114.502461,38.045474],"name":"河北","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@o~†Z]‚ªr‰ºc_ħ²G¼s`jΟnüsœłNX_“M`ǽÓnUK…Ĝēs¤­©yrý§uģŒc†JŠ›e"],["@@U`Ts¿m‚"],["@@oºƋÄd–eVŽDJj£€J|Ådz•Ft~žKŨ¸IÆv|”‡¢r}膎onb˜}`RÎÄn°ÒdÞ²„^®’lnÐèĄlðӜ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcœŋ`–ZÔ’¶êqvFƚ†N®ĆTH®¦O’¾ŠIbÐã´BĐɢŴÆíȦp–ĐÞXR€·nndOž¤’OÀĈƒ­Qg˜µFo|gȒęSWb©osx|hYh•gŃfmÖĩnº€T̒Sp›¢dYĤ¶UĈjl’ǐpäìë|³kÛfw²Xjz~ÂqbTŠÑ„ěŨ@|oM‡’zv¢ZrÃVw¬ŧˏfŒ°ÐT€ªqŽs{Sž¯r æÝlNd®²Ğ džiGʂJ™¼lr}~K¨ŸƐÌWö€™ÆŠzRš¤lêmĞL΄’@¡|q]SvK€ÑcwpÏρ†ĿćènĪWlĄkT}ˆJ”¤~ƒÈT„d„™pddʾĬŠ”ŽBVt„EÀ¢ôPĎƗè@~‚k–ü\\rÊĔÖæW_§¼F˜†´©òDòj’ˆYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkv‚GpuARhÞÆǶgƊTǼƹS£¨¡ù³ŘÍ]¿Ây™ôEP xX¶¹܇O¡“gÚ¡IwÃ鑦ÅB‡Ï|ǰ…N«úmH¯‹âŸDùŽyŜžŲIÄuШDž•¸dɂ‡‚FŸƒ•›Oh‡đ©OŸ›iÃ`ww^ƒÌkŸ‘ÑH«ƇǤŗĺtFu…{Z}Ö@U‡´…ʚLg®¯Oı°ÃwŸ ^˜—€VbÉs‡ˆmA…ê]]w„§›RRl£‡ȭµu¯b{ÍDěïÿȧŽuT£ġƒěŗƃĝ“Q¨fV†Ƌ•ƅn­a@‘³@šď„yýIĹÊKšŭfċŰóŒxV@tˆƯŒJ”]eƒR¾fe|rHA˜|h~Ėƍl§ÏŠlTíb ØoˆÅbbx³^zÃ͚¶Sj®A”yÂhðk`š«P€”ˈµEF†Û¬Y¨Ļrõqi¼‰Wi°§’б´°^[ˆÀ|ĠO@ÆxO\\tŽa\\tĕtû{ġŒȧXýĪÓjùÎRb›š^ΛfK[ݏděYfíÙTyŽuUSyŌŏů@Oi½’éŅ­aVcř§ax¹XŻác‡žWU£ôãºQ¨÷Ñws¥qEH‰Ù|‰›šYQoŕÇyáĂ£MðoťÊ‰P¡mšWO¡€v†{ôvîēÜISpÌhp¨ ‘j†deŔQÖj˜X³à™Ĉ[n`Yp@Už–cM`’RKhŒEbœ”pŞlNut®Etq‚nsÁŠgA‹iú‹oH‡qCX‡”hfgu“~ϋWP½¢G^}¯ÅīGCŸÑ^ãziMáļMTÃƘrMc|O_ž¯Ŏ´|‡morDkO\\mĆJfl@c̬¢aĦtRıҙ¾ùƀ^juųœK­ƒUFy™—Ɲ…›īÛ÷ąV×qƥV¿aȉd³B›qPBm›aËđŻģm“Å®Vйd^K‡KoŸnYg“¯Xhqa”Ldu¥•ÍpDž¡KąÅƒkĝęěhq‡}HyÓ]¹ǧ£…Í÷¿qáµ§š™g‘¤o^á¾ZE‡¤i`ij{n•ƒOl»ŸWÝĔįhg›F[¿¡—ßkOüš_‰€ū‹i„DZàUtėGylƒ}ŒÓM}€jpEC~¡FtoQi‘šHkk{Ãmï‚"]],"encodeOffsets":[[[119712,40641]],[[121616,39981]],[[116462,37237]]]}},{"type":"Feature","id":"140000","properties":{"id":"140000","cp":[111.849248,36.857014],"name":"山西","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@Þĩ҃S‰ra}Á€yWix±Üe´lè“ßÓǏok‘ćiµVZģ¡coœ‘TS˹ĪmnÕńe–hZg{gtwªpXaĚThȑp{¶Eh—®RćƑP¿£‘Pmc¸mQÝW•ďȥoÅîɡųAďä³aωJ‘½¥PG­ąSM­™…EÅruµé€‘Yӎ•Ō_d›ĒCo­Èµ]¯_²ÕjāŽK~©ÅØ^ԛkïçămϑk]­±ƒcݯÑÃmQÍ~_a—pm…~ç¡q“ˆu{JÅŧ·Ls}–EyÁÆcI{¤IiCfUc•ƌÃp§]웫vD@¡SÀ‘µM‚ÅwuŽYY‡¡DbÑc¡hƒ×]nkoQdaMç~eD•ÛtT‰©±@¥ù@É¡‰ZcW|WqOJmĩl«ħşvOÓ«IqăV—¥ŸD[mI~Ó¢cehiÍ]Ɠ~ĥqXŠ·eƷœn±“}v•[ěďŽŕ]_‘œ•`‰¹ƒ§ÕōI™o©b­s^}Ét±ū«³p£ÿ·Wµ|¡¥ăFÏs׌¥ŅxŸÊdÒ{ºvĴÎêÌɊ²¶€ü¨|ÞƸµȲ‘LLúÉƎ¤ϊęĔV`„_bª‹S^|ŸdŠzY|dz¥p†ZbÆ£¶ÒK}tĦÔņƠ‚PYzn€ÍvX¶Ěn ĠÔ„zý¦ª˜÷žÑĸَUȌ¸‚dòÜJð´’ìúNM¬ŒXZ´‘¤ŊǸ_tldIš{¦ƀðĠȤ¥NehXnYG‚‡R° ƬDj¬¸|CĞ„Kq‚ºfƐiĺ©ª~ĆOQª ¤@ìǦɌ²æBŒÊ”TœŸ˜ʂōĖ’šĴŞ–ȀœÆÿȄlŤĒö„t”νî¼ĨXhŒ‘˜|ªM¤Ðz"],"encodeOffsets":[[116874,41716]]}},{"type":"Feature","id":"150000","properties":{"id":"150000","cp":[111.670801,41.818311],"name":"内蒙古","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@¯PqƒFB…‰|S•³C|kñ•H‹d‘iÄ¥sˆʼnő…PóÑÑE^‘ÅPpy_YtS™hQ·aHwsOnʼnÚs©iqj›‰€USiº]ïWš‰«gW¡A–Rë¥_ŽsgÁnUI«m‰…„‹]j‡vV¼euhwqA„aW˜ƒ_µj…»çjioQR¹ēÃßt@r³[ÛlćË^ÍÉáG“›OUۗOB±•XŸkŇ¹£k|e]ol™ŸkVͼÕqtaÏõjgÁ£§U^Œ”RLˆËnX°Ç’Bz†^~wfvˆypV ¯„ƫĉ˭ȫƗŷɿÿĿƑ˃ĝÿÃǃßËőó©ǐȍŒĖM×ÍEyx‹þp]Évïè‘vƀnÂĴÖ@‚‰†V~Ĉv¦wĖt—ējyÄDXÄxGQuv_›i¦aBçw‘˛wD™©{ŸtāmQ€{EJ§KPśƘƿ¥@‰sCT•É}ɃwˆƇy±ŸgÑ“}T[÷kÐ禫…SÒ¥¸ëBX½‰HáŵÀğtSÝÂa[ƣ°¯¦P]£ġ“–“Òk®G²„èQ°óMq}EŠóƐÇ\\ƒ‡@áügQ͋u¥Fƒ“T՛¿Jû‡]|mvāÎYua^WoÀa·­ząÒot×¶CLƗi¯¤mƎHNJ¤îìɾŊìTdåwsRÖgĒųúÍġäÕ}Q¶—ˆ¿A•†‹[¡Œ{d×uQAƒ›M•xV‹vMOmăl«ct[wº_šÇʊŽŸjb£ĦS_é“QZ“_lwgOiýe`YYLq§IÁˆdz£ÙË[ÕªuƏ³ÍT—s·bÁĽäė[›b[ˆŗfãcn¥îC¿÷µ[ŏÀQ­ōšĉm¿Á^£mJVm‡—L[{Ï_£›F¥Ö{ŹA}…×Wu©ÅaųijƳhB{·TQqÙIķˑZđ©Yc|M¡…L•eVUóK_QWk’_ĥ‘¿ãZ•»X\\ĴuUƒè‡lG®ěłTĠğDєOrÍd‚ÆÍz]‹±…ŭ©ŸÅ’]ŒÅÐ}UË¥©Tċ™ïxgckfWgi\\ÏĒ¥HkµE˜ë{»ÏetcG±ahUiñiWsɁˆ·c–C‚Õk]wȑ|ća}w…VaĚ᠞ŒG°ùnM¬¯†{ÈˆÐÆA’¥ÄêJxÙ¢”hP¢Ûˆº€µwWOŸóFŽšÁz^ÀŗÎú´§¢T¤ǻƺSė‰ǵhÝÅQgvBHouʝl_o¿Ga{ïq{¥|ſĿHĂ÷aĝÇq‡Z‘ñiñC³ª—…»E`¨åXēÕqÉû[l•}ç@čƘóO¿¡ƒFUsA‰“ʽīccšocƒ‚ƒÇS}„“£‡IS~ălkĩXçmĈ…ŀЂoÐdxÒuL^T{r@¢‘žÍƒĝKén£kQ™‰yšÅõËXŷƏL§~}kqš»IHėDžjĝŸ»ÑÞoŸå°qTt|r©ÏS‹¯·eŨĕx«È[eMˆ¿yuˆ‘pN~¹ÏyN£{©’—g‹ħWí»Í¾s“əšDž_ÃĀɗ±ą™ijĉʍŌŷ—S›É“A‹±åǥɋ@럣R©ąP©}ĹªƏj¹erƒLDĝ·{i«ƫC£µsKCš…GS|úþX”gp›{ÁX¿Ÿć{ƱȏñZáĔyoÁhA™}ŅĆfdʼn„_¹„Y°ėǩÑ¡H¯¶oMQqð¡Ë™|‘Ñ`ƭŁX½·óۓxğįÅcQ‡ˆ“ƒs«tȋDžF“Ÿù^i‘t«Č¯[›hAi©á¥ÇĚ×l|¹y¯YȵƓ‹ñǙµï‚ċ™Ļ|Dœ™üȭ¶¡˜›oŽäÕG\\ďT¿Òõr¯œŸLguÏYęRƩšɷŌO\\İТæ^Ŋ IJȶȆbÜGŽĝ¬¿ĚVĎgª^íu½jÿĕęjık@Ľƒ]ėl¥Ë‡ĭûÁ„ƒėéV©±ćn©­ȇžÍq¯½•YÃÔʼn“ÉNѝÅÝy¹NqáʅDǡËñ­ƁYÅy̱os§ȋµʽǘǏƬɱà‘ưN¢ƔÊuľýľώȪƺɂļžxœZĈ}ÌʼnŪ˜ĺœŽĭFЛĽ̅ȣͽÒŵìƩÇϋÿȮǡŏçƑůĕ~Ǎ›¼ȳÐUf†dIxÿ\\G ˆzâɏÙOº·pqy£†@ŒŠqþ@Ǟ˽IBäƣzsÂZ†ÁàĻdñ°ŕzéØűzșCìDȐĴĺf®ŽÀľưø@ɜÖÞKĊŇƄ§‚͑těï͡VAġÑÑ»d³öǍÝXĉĕÖ{þĉu¸ËʅğU̎éhɹƆ̗̮ȘNJ֥ड़ࡰţાíϲäʮW¬®ҌeרūȠkɬɻ̼ãüfƠSצɩςåȈHϚÎKdzͲOðÏȆƘ¼CϚǚ࢚˼ФԂ¤ƌžĞ̪Qʤ´¼mȠJˀŸƲÀɠmǐnǔĎȆÞǠN~€ʢĜ‚¶ƌĆĘźʆȬ˪ĚǏĞGȖƴƀj`ĢçĶāàŃºē̃ĖćšYŒÀŎüôQÐÂŎŞdžŞêƖš˜oˆDĤÕºÑǘÛˤ³̀gńƘĔÀ^žªƂ`ªt¾äƚêĦĀ¼Ð€Ĕǎ¨Ȕ»͠^ˮÊȦƤøxRrŜH¤¸ÂxDĝŒ|ø˂˜ƮÐ¬ɚwɲFjĔ²Äw°dždÀɞ_ĸdîàŎjʜêTĞªŌ‡ŜWÈ|tqĢUB~´°ÎFC•ŽU¼pĀēƄN¦¾O¶ŠłKĊOj“Ě”j´ĜYp˜{¦„ˆSĚÍ\\Tš×ªV–÷Ší¨ÅDK°ßtŇĔKš¨ǵÂcḷ̌ĚǣȄĽF‡lġUĵœŇ‹ȣFʉɁƒMğįʏƶɷØŭOǽ«ƽū¹Ʊő̝Ȩ§ȞʘĖiɜɶʦ}¨֪ࠜ̀ƇǬ¹ǨE˦ĥªÔêFŽxúQ„Er´W„rh¤Ɛ \\talĈDJ˜Ü|[Pll̚¸ƎGú´Pž¬W¦†^¦–H]prR“n|or¾wLVnÇIujkmon£cX^Bh`¥V”„¦U¤¸}€xRj–[^xN[~ªŠxQ„‚[`ªHÆÂExx^wšN¶Ê˜|¨ì†˜€MrœdYp‚oRzNy˜ÀDs~€bcfÌ`L–¾n‹|¾T‚°c¨È¢a‚r¤–`[|òDŞĔöxElÖdH„ÀI`„Ď\\Àì~ƎR¼tf•¦^¢ķ¶e”ÐÚMŒptgj–„ɡČÅyġLû™ŇV®ŠÄÈƀ†Ď°P|ªVV†ªj–¬ĚÒêp¬–E|ŬÂc|ÀtƐK fˆ{ĘFǜƌXƲąo½Ę‘\\¥–o}›Ûu£ç­kX‘{uĩ«āíÓUŅßŢq€Ť¥lyň[€oi{¦‹L‡ń‡ðFȪȖ”ĒL„¿Ì‹ˆfŒ£K£ʺ™oqNŸƒwğc`ue—tOj×°KJ±qƒÆġm‰Ěŗos¬…qehqsuœƒH{¸kH¡Š…ÊRǪÇƌbȆ¢´ä܍¢NìÉʖ¦â©Ġu¦öČ^â£Ăh–šĖMÈÄw‚\\fŦ°W ¢¾luŸD„wŠ\\̀ʉÌÛM…Ā[bӞEn}¶Vc…ê“sƒ"]],"encodeOffsets":[[[129102,52189]]]}},{"type":"Feature","id":"210000","properties":{"id":"210000","cp":[123.429096,41.796767],"name":"辽宁","childNum":16},"geometry":{"type":"MultiPolygon","coordinates":[["@@L–Ž@@s™a"],["@@MnNm"],["@@d‚c"],["@@eÀ‚C@b‚“‰"],["@@f‡…Xwkbr–Ä`qg"],["@@^jtW‘Q"],["@@~ Y]c"],["@@G`ĔN^_¿Z‚ÃM"],["@@iX¶B‹Y"],["@@„YƒZ"],["@@L_{Epf"],["@@^WqCT\\"],["@@\\[“‹§t|”¤_"],["@@m`n_"],["@@Ïxnj{q_×^Giip"],["@@@œé^B†‡ntˆaÊU—˜Ÿ]x ¯ÄPIJ­°h€ʙK³†VˆÕ@Y~†|EvĹsDŽ¦­L^p²ŸÒG ’Ël]„xxÄ_˜fT¤Ď¤cŽœP„–C¨¸TVjbgH²sdÎdHt`Bˆ—²¬GJję¶[ÐhjeXdlwhšðSȦªVÊπ‹Æ‘Z˜ÆŶ®²†^ŒÎyÅÎcPqń“ĚDMħĜŁH­ˆk„çvV[ij¼W–‚YÀäĦ’‘`XlžR`žôLUVžfK–¢†{NZdĒª’YĸÌÚJRr¸SA|ƴgŴĴÆbvªØX~†źBŽ|¦ÕœEž¤Ð`\\|Kˆ˜UnnI]¤ÀÂĊnŎ™R®Ő¿¶\\ÀøíDm¦ÎbŨab‰œaĘ\\ľã‚¸a˜tÎSƐ´©v\\ÖÚÌǴ¤Â‡¨JKr€Z_Z€fjþhPkx€`Y”’RIŒjJcVf~sCN¤ ˆE‚œhæm‰–sHy¨SðÑÌ\\\\ŸĐRZk°IS§fqŒßýáЍÙÉÖ[^¯ǤŲ„ê´\\¦¬ĆPM¯£Ÿˆ»uïpùzEx€žanµyoluqe¦W^£ÊL}ñrkqWňûP™‰UP¡ôJŠoo·ŒU}£Œ„[·¨@XŒĸŸ“‹‹DXm­Ûݏº‡›GU‹CÁª½{íĂ^cj‡k“¶Ã[q¤“LÉö³cux«zZfƒ²BWÇ®Yß½ve±ÃC•ý£W{Ú^’q^sÑ·¨‹ÍOt“¹·C¥‡GD›rí@wÕKţ݋˜Ÿ«V·i}xËÍ÷‘i©ĝ‡ɝǡ]ƒˆ{c™±OW‹³Ya±Ÿ‰_穂Hžĕoƫ€Ňqƒr³‰Lys[„ñ³¯OS–ďOMisZ†±ÅFC¥Pq{‚Ã[Pg}\\—¿ghćO…•k^ģÁFıĉĥM­oEqqZûěʼn³F‘¦oĵ—hŸÕP{¯~TÍlª‰N‰ßY“Ð{Ps{ÃVU™™eĎwk±ʼnVÓ½ŽJãÇÇ»Jm°dhcÀff‘dF~ˆ€ĀeĖ€d`sx² šƒ®EżĀdQ‹Âd^~ăÔHˆ¦\\›LKpĄVez¤NP ǹӗR™ÆąJSh­a[¦´Âghwm€BÐ¨źhI|žVVŽ—Ž|p] Â¼èNä¶ÜBÖ¼“L`‚¼bØæŒKV”ŸpoœúNZÞÒKxpw|ÊEMnzEQšŽIZ”ŽZ‡NBˆčÚFÜçmĩ‚WĪñt‘ÞĵÇñZ«uD‚±|Əlij¥ãn·±PmÍa‰–da‡ CL‡Ǒkùó¡³Ï«QaċϑOÃ¥ÕđQȥċƭy‹³ÃA"]],"encodeOffsets":[[[123686,41445]],[[126019,40435]],[[124393,40128]],[[126117,39963]],[[125322,40140]],[[126686,40700]],[[126041,40374]],[[125584,40168]],[[125453,40165]],[[125362,40214]],[[125280,40291]],[[125774,39997]],[[125976,40496]],[[125822,39993]],[[125509,40217]],[[122731,40949]]]}},{"type":"Feature","id":"220000","properties":{"id":"220000","cp":[125.3245,43.886841],"name":"吉林","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@‘p䔳PClƒFbbÍzš€wBG’ĭ€Z„Åi“»ƒlY­ċ²SgŽkÇ£—^S‰“qd¯•‹R…©éŽ£¯S†\\cZ¹iűƏCuƍÓX‡oR}“M^o•£…R}oªU­F…uuXHlEŕ‡€Ï©¤ÛmTŽþ¤D–²ÄufàÀ­XXȱAe„yYw¬dvõ´KÊ£”\\rµÄl”iˆdā]|DÂVŒœH¹ˆÞ®ÜWnŒC”Œķ W‹§@\\¸‹ƒ~¤‹Vp¸‰póIO¢ŠVOšŇürXql~òÉK]¤¥Xrfkvzpm¶bwyFoúvð‡¼¤ N°ąO¥«³[ƒéǡű_°Õ\\ÚÊĝŽþâőàerR¨­JYlďQ[ ÏYëЧTGz•tnŠß¡gFkMŸāGÁ¤ia É‰™È¹`\\xs€¬dĆkNnuNUŠ–užP@‚vRY¾•–\\¢…ŒGªóĄ~RãÖÎĢù‚đŴÕhQŽxtcæëSɽʼníëlj£ƍG£nj°KƘµDsØÑpyƸ®¿bXp‚]vbÍZuĂ{nˆ^IüœÀSք”¦EŒvRÎûh@℈[‚Əȉô~FNr¯ôçR±ƒ­HÑl•’Ģ–^¤¢‚OðŸŒævxsŒ]ÞÁTĠs¶¿âƊGW¾ìA¦·TѬ†è¥€ÏÐJ¨¼ÒÖ¼ƒƦɄxÊ~S–tD@ŠĂ¼Ŵ¡jlºWžvЉˆzƦZЎ²CH— „Axiukd‹ŒGgetqmcžÛ£Ozy¥cE}|…¾cZ…k‚‰¿uŐã[oxGikfeäT@…šSUwpiÚFM©’£è^ڟ‚`@v¶eň†f h˜eP¶žt“äOlÔUgƒÞzŸU`lœ}ÔÆUvØ_Ō¬Öi^ĉi§²ÃŠB~¡Ĉ™ÚEgc|DC_Ȧm²rBx¼MÔ¦ŮdĨÃâYx‘ƘDVÇĺĿg¿cwÅ\\¹˜¥Yĭlœ¤žOv†šLjM_a W`zļMž·\\swqÝSA‡š—q‰Śij¯Š‘°kŠRē°wx^Đkǂғ„œž“œŽ„‹\\]˜nrĂ}²ĊŲÒøãh·M{yMzysěnĒġV·°“G³¼XÀ““™¤¹i´o¤ŃšŸÈ`̃DzÄUĞd\\i֚ŒˆmÈBĤÜɲDEh LG¾ƀľ{WaŒYÍȏĢĘÔRîĐj‹}Ǟ“ccj‡oUb½š{“h§Ǿ{K‹ƖµÎ÷žGĀÖŠåưÎs­l›•yiē«‹`姝H¥Ae^§„GK}iã\\c]v©ģZ“mÃ|“[M}ģTɟĵ‘Â`À–çm‰‘FK¥ÚíÁbXš³ÌQґHof{‰]e€pt·GŋĜYünĎųVY^’˜ydõkÅZW„«WUa~U·Sb•wGçǑ‚“iW^q‹F‚“›uNĝ—·Ew„‹UtW·Ýďæ©PuqEzwAV•—XR‰ãQ`­©GŒM‡ehc›c”ďϝd‡©ÑW_ϗYƅŒ»…é\\ƒɹ~ǙG³mØ©BšuT§Ĥ½¢Ã_ý‘L¡‘ýŸqT^rme™\\Pp•ZZbƒyŸ’uybQ—efµ]UhĿDCmûvašÙNSkCwn‰cćfv~…Y‹„ÇG"],"encodeOffsets":[[130196,42528]]}},{"type":"Feature","id":"230000","properties":{"id":"230000","cp":[128.642464,46.756967],"name":"黑龙江","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@UƒµNÿ¥īè灋•HÍøƕ¶LŒǽ|g¨|”™Ža¾pViˆdd”~ÈiŒíďÓQġėǐZ΋ŽXb½|ſÃH½ŸKFgɱCģÛÇA‡n™‹jÕc[VĝDZÃ˄Ç_™ £ń³pŽj£º”š¿”»WH´¯”U¸đĢmžtĜyzzNN|g¸÷äűѱĉā~mq^—Œ[ƒ”››”ƒǁÑďlw]¯xQĔ‰¯l‰’€°řĴrŠ™˜BˆÞTxr[tޏĻN_yŸX`biN™Ku…P›£k‚ZĮ—¦[ºxÆÀdhŽĹŀUÈƗCw’áZħÄŭcÓ¥»NAw±qȥnD`{ChdÙFćš}¢‰A±Äj¨]ĊÕjŋ«×`VuÓś~_kŷVÝyh„“VkÄãPs”Oµ—fŸge‚Ň…µf@u_Ù ÙcŸªNªÙEojVx™T@†ãSefjlwH\\pŏäÀvŠŽlY†½d{†F~¦dyz¤PÜndsrhf‹HcŒvlwjFœ£G˜±DύƥY‡yϊu¹XikĿ¦ÏqƗǀOŜ¨LI|FRĂn sª|Cš˜zxAè¥bœfudTrFWÁ¹Am|˜ĔĕsķÆF‡´Nš‰}ć…UŠÕ@Áijſmužç’uð^ÊýowŒFzØÎĕNőžǏȎôªÌŒDŽàĀÄ˄ĞŀƒʀĀƘŸˮȬƬĊ°ƒUŸzou‡xe]}Ž…AyȑW¯ÌmK‡“Q]‹Īºif¸ÄX|sZt|½ÚUΠlkš^p{f¤lˆºlÆW –€A²˜PVܜPH”Êâ]ÎĈÌÜk´\\@qàsĔÄQºpRij¼èi†`¶—„bXƒrBgxfv»ŽuUiˆŒ^v~”J¬mVp´£Œ´VWrnP½ì¢BX‚¬h™ŠðX¹^TjVœŠriªj™tŊÄm€tPGx¸bgRšŽsT`ZozÆO]’ÒFô҆Oƒ‡ŊŒvŞ”p’cGŒêŠsx´DR–Œ{A†„EOr°Œ•žx|íœbˆ³Wm~DVjºéNN†Ëܲɶ­GƒxŷCStŸ}]ûō•SmtuÇÃĕN•™āg»šíT«u}ç½BĵÞʣ¥ëÊ¡Mێ³ãȅ¡ƋaǩÈÉQ‰†G¢·lG|›„tvgrrf«†ptęŘnŠÅĢr„I²¯LiØsPf˜_vĠd„xM prʹšL¤‹¤‡eˌƒÀđK“žïÙVY§]I‡óáĥ]ķ†Kˆ¥Œj|pŇ\\kzţ¦šnņäÔVĂîά|vW’®l¤èØr‚˜•xm¶ă~lÄƯĄ̈́öȄEÔ¤ØQĄ–Ą»ƢjȦOǺ¨ìSŖÆƬy”Qœv`–cwƒZSÌ®ü±DŽ]ŀç¬B¬©ńzƺŷɄeeOĨS’Œfm Ċ‚ƀP̎ēz©Ċ‚ÄÕÊmgŸÇsJ¥ƔˆŊśæ’΁Ñqv¿íUOµª‰ÂnĦÁ_½ä@ê텣P}Ġ[@gġ}g“ɊדûÏWXá¢užƻÌsNͽƎÁ§č՛AēeL³àydl›¦ĘVçŁpśdžĽĺſʃQíÜçÛġԏsĕ¬—Ǹ¯YßċġHµ ¡eå`ļƒrĉŘóƢFì“ĎWøxÊk†”ƈdƬv|–I|·©NqńRŀƒ¤é”eŊœŀ›ˆàŀU²ŕƀB‚Q£Ď}L¹Îk@©ĈuǰųǨ”Ú§ƈnTËÇéƟÊcfčŤ^Xm‡—HĊĕË«W·ċëx³ǔķÐċJā‚wİ_ĸ˜Ȁ^ôWr­°oú¬Ħ…ŨK~”ȰCĐ´Ƕ£’fNÎèâw¢XnŮeÂÆĶŽ¾¾xäLĴĘlļO¤ÒĨA¢Êɚ¨®‚ØCÔ ŬGƠ”ƦYĜ‡ĘÜƬDJ—g_ͥœ@čŅĻA“¶¯@wÎqC½Ĉ»NŸăëK™ďÍQ“Ùƫ[«Ãí•gßÔÇOÝáW‘ñuZ“¯ĥ€Ÿŕā¡ÑķJu¤E Ÿå¯°WKɱ_d_}}vyŸõu¬ï¹ÓU±½@gÏ¿rýD‰†g…Cd‰µ—°MFYxw¿CG£‹Rƛ½Õ{]L§{qqąš¿BÇƻğëšܭNJË|c²}Fµ}›ÙRsÓpg±ŠQNqǫŋRwŕnéÑÉKŸ†«SeYR…ŋ‹@{¤SJ}šD Ûǖ֍Ÿ]gr¡µŷjqWÛham³~S«“„›Þ]"]],"encodeOffsets":[[[134456,44547]]]}},{"type":"Feature","id":"320000","properties":{"id":"320000","cp":[119.767413,33.041544],"name":"江苏","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@cþÅPiŠ`ZŸRu¥É\\]~°ŽY`µ†Óƒ^phÁbnÀşúŽòa–ĬºTÖŒb‚˜e¦¦€{¸ZâćNpŒ©žHr|^ˆmjhŠSEb\\afv`sz^lkŽlj‹Ätg‹¤D˜­¾Xš¿À’|ДiZ„ȀåB·î}GL¢õcßjaŸyBFµÏC^ĭ•cÙt¿sğH]j{s©HM¢ƒQnDÀ©DaÜތ·jgàiDbPufjDk`dPOîƒhw¡ĥ‡¥šG˜ŸP²ĐobºrY†„î¶aHŢ´ ]´‚rılw³r_{£DB_Ûdåuk|ˆŨ¯F Cºyr{XFy™e³Þċ‡¿Â™kĭB¿„MvÛpm`rÚã”@ƹhågËÖƿxnlč¶Åì½Ot¾dJlŠVJʜǀœŞqvnOŠ^ŸJ”Z‘ż·Q}ê͎ÅmµÒ]Žƍ¦Dq}¬R^èĂ´ŀĻĊIԒtžIJyQŐĠMNtœR®òLh‰›Ěs©»œ}OӌGZz¶A\\jĨFˆäOĤ˜HYš†JvÞHNiÜaϚɖnFQlšNM¤ˆB´ĄNöɂtp–Ŭdf先‹qm¿QûŠùއÚb¤uŃJŴu»¹Ą•lȖħŴw̌ŵ²ǹǠ͛hĭłƕrçü±Y™xci‡tğ®jű¢KOķ•Coy`å®VTa­_Ā]ŐÝɞï²ʯÊ^]afYǸÃĆēĪȣJđ͍ôƋĝÄ͎ī‰çÛɈǥ£­ÛmY`ó£Z«§°Ó³QafusNıDž_k}¢m[ÝóDµ—¡RLčiXy‡ÅNïă¡¸iĔϑNÌŕoēdōîåŤûHcs}~Ûwbù¹£¦ÓCt‹OPrƒE^ÒoŠg™ĉIµžÛÅʹK…¤½phMŠü`o怆ŀ"],"encodeOffsets":[[121740,32276]]}},{"type":"Feature","id":"330000","properties":{"id":"330000","cp":[120.153576,29.287459],"name":"浙江","childNum":45},"geometry":{"type":"MultiPolygon","coordinates":[["@@E^dQ]K"],["@@jX^j‡"],["@@sfŠbU‡"],["@@qP\\xz[ck"],["@@‘Rƒ¢‚FX}°[s_"],["@@Cbœ\\—}"],["@@e|v\\la{u"],["@@v~u}"],["@@QxÂF¯}"],["@@¹nŒvÞs¯o"],["@@rSkUEj"],["@@bi­ZŒP"],["@@p[}INf"],["@@À¿€"],["@@¹dnbŒ…"],["@@rSŸBnR"],["@@g~h}"],["@@FlEk"],["@@OdPc"],["@@v[u\\"],["@@FjâL~wyoo~›sµL–\\"],["@@¬e¹aNˆ"],["@@\\nÔ¡q]L³ë\\ÿ®ŒQ֎"],["@@ÊA­©[¬"],["@@KxŒv­"],["@@@hlIk]"],["@@pW{o||j"],["@@Md|_mC"],["@@¢…X£ÏylD¼XˆtH"],["@@hlÜ[LykAvyfw^Ež›¤"],["@@fp¤Mus“R"],["@@®_ma~•LÁ¬šZ"],["@@iM„xZ"],["@@ZcYd"],["@@Z~dOSo|A¿qZv"],["@@@`”EN¡v"],["@@|–TY{"],["@@@n@m"],["@@XWkCT\\"],["@@ºwšZRkĕWO¢"],["@@™X®±Grƪ\\ÔáXq{‹"],["@@ůTG°ĄLHm°UC‹"],["@@¤Ž€aÜx~}dtüGæţŎíĔcŖpMËВj碷ðĄÆMzˆjWKĎ¢Q¶˜À_꒔_Bı€i«pZ€gf€¤Nrq]§ĂN®«H±‡yƳí¾×ŸīàLłčŴǝĂíÀBŖÕªˆŠÁŖHŗʼnåqûõi¨hÜ·ƒñt»¹ýv_[«¸m‰YL¯‰Qª…mĉÅdMˆ•gÇjcº«•ęœ¬­K­´ƒB«Âącoċ\\xKd¡gěŧ«®á’[~ıxu·Å”KsËɏc¢Ù\\ĭƛëbf¹­ģSƒĜkáƉÔ­ĈZB{ŠaM‘µ‰fzʼnfåÂŧįƋǝÊĕġć£g³ne­ą»@­¦S®‚\\ßðCšh™iqªĭiAu‡A­µ”_W¥ƣO\\lċĢttC¨£t`ˆ™PZäuXßBs‡Ļyek€OđġĵHuXBšµ]׌‡­­\\›°®¬F¢¾pµ¼kŘó¬Wät’¸|@ž•L¨¸µr“ºù³Ù~§WI‹ŸZWŽ®’±Ð¨ÒÉx€`‰²pĜ•rOògtÁZ}þÙ]„’¡ŒŸFK‚wsPlU[}¦Rvn`hq¬\\”nQ´ĘRWb”‚_ rtČFI֊kŠŠĦPJ¶ÖÀÖJĈĄTĚòžC ²@Pú…Øzœ©PœCÈÚœĒ±„hŖ‡l¬â~nm¨f©–iļ«m‡nt–u†ÖZÜÄj“ŠLŽ®E̜Fª²iÊxبžIÈhhst"],["@@o\\V’zRZ}y"],["@@†@°¡mۛGĕ¨§Ianá[ýƤjfæ‡ØL–•äGr™"]],"encodeOffsets":[[[125592,31553]],[[125785,31436]],[[125729,31431]],[[125513,31380]],[[125223,30438]],[[125115,30114]],[[124815,29155]],[[124419,28746]],[[124095,28635]],[[124005,28609]],[[125000,30713]],[[125111,30698]],[[125078,30682]],[[125150,30684]],[[124014,28103]],[[125008,31331]],[[125411,31468]],[[125329,31479]],[[125626,30916]],[[125417,30956]],[[125254,30976]],[[125199,30997]],[[125095,31058]],[[125083,30915]],[[124885,31015]],[[125218,30798]],[[124867,30838]],[[124755,30788]],[[124802,30809]],[[125267,30657]],[[125218,30578]],[[125200,30562]],[[124968,30474]],[[125167,30396]],[[124955,29879]],[[124714,29781]],[[124762,29462]],[[124325,28754]],[[123990,28459]],[[125366,31477]],[[125115,30363]],[[125369,31139]],[[122495,31878]],[[125329,30690]],[[125192,30787]]]}},{"type":"Feature","id":"340000","properties":{"id":"340000","cp":[117.283042,31.26119],"name":"安徽","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@^iuLX^"],["@@‚e©Ehl"],["@@°ZÆëϵmkǀwÌÕæhºgBĝâqÙĊz›ÖgņtÀÁÊÆá’hEz|WzqD¹€Ÿ°E‡ŧl{ævÜcA`¤C`|´qžxIJkq^³³ŸGšµbƒíZ…¹qpa±ď OH—¦™Ħˆx¢„gPícOl_iCveaOjCh߸i݋bÛªCC¿€m„RV§¢A|t^iĠGÀtÚs–d]ĮÐDE¶zAb àiödK¡~H¸íæAžǿYƒ“j{ď¿‘™À½W—®£ChŒÃsiŒkkly]_teu[bFa‰Tig‡n{]Gqªo‹ĈMYá|·¥f¥—őaSÕė™NµñĞ«ImŒ_m¿Âa]uĜp …Z_§{Cƒäg¤°r[_Yj‰ÆOdý“[ŽI[á·¥“Q_n‡ùgL¾mv™ˊBÜÆ¶ĊJhšp“c¹˜O]iŠ]œ¥ jtsggJǧw×jÉ©±›EFˍ­‰Ki”ÛÃÕYv…s•ˆm¬njĻª•§emná}k«ŕˆƒgđ²Ù›DǤ›í¡ªOy›†×Où±@DŸñSęćăÕIÕ¿IµĥO‰‰jNÕËT¡¿tNæŇàåyķrĕq§ÄĩsWÆßŽF¶žX®¿‰mŒ™w…RIޓfßoG‘³¾©uyH‘į{Ɓħ¯AFnuP…ÍÔzšŒV—dàôº^Ðæd´€‡oG¤{S‰¬ćxã}›ŧ×Kǥĩ«žÕOEзÖdÖsƘѨ[’Û^Xr¢¼˜§xvěƵ`K”§ tÒ´Cvlo¸fzŨð¾NY´ı~ÉĔē…ßúLÃϖ_ÈÏ|]ÂÏFl”g`bšežž€n¾¢pU‚h~ƴ˶_‚r sĄ~cž”ƈ]|r c~`¼{À{ȒiJjz`îÀT¥Û³…]’u}›f…ïQl{skl“oNdŸjŸäËzDvčoQŠďHI¦rb“tHĔ~BmlRš—V_„ħTLnñH±’DžœL‘¼L˜ªl§Ťa¸ŒĚlK²€\\RòvDcÎJbt[¤€D@®hh~kt°ǾzÖ@¾ªdb„YhüóZ ň¶vHrľ\\ʗJuxAT|dmÀO„‹[ÃԋG·ĚąĐlŪÚpSJ¨ĸˆLvÞcPæķŨŽ®mАˆálŸwKhïgA¢ųƩޖ¤OȜm’°ŒK´"]],"encodeOffsets":[[[121722,32278]],[[119475,30423]],[[119168,35472]]]}},{"type":"Feature","id":"350000","properties":{"id":"350000","cp":[118.306239,26.075302],"name":"福建","childNum":18},"geometry":{"type":"MultiPolygon","coordinates":[["@@“zht´‡]"],["@@aj^~ĆG—©O"],["@@ed¨„C}}i"],["@@@vˆPGsQ"],["@@‰sBz‚ddW]Q"],["@@SލQ“{"],["@@NŽVucW"],["@@qptBAq"],["@@‰’¸[mu"],["@@Q\\pD]_"],["@@jSwUadpF"],["@@eXª~ƒ•"],["@@AjvFso"],["@@fT–›_Çí\\Ÿ™—v|ba¦jZÆy€°"],["@@IjJi"],["@@wJI€ˆxš«¼AoNe{M­"],["@@K‰±¡Óˆ”ČäeZ"],["@@k¡¹Eh~c®wBk‹UplÀ¡I•~Māe£bN¨gZý¡a±Öcp©PhžI”Ÿ¢Qq…ÇGj‹|¥U™ g[Ky¬ŏ–v@OpˆtÉEŸF„\\@ åA¬ˆV{Xģ‰ĐBy…cpě…¼³Ăp·¤ƒ¥o“hqqÚ¡ŅLsƒ^ᗞ§qlŸÀhH¨MCe»åÇGD¥zPO£čÙkJA¼ß–ėu›ĕeûҍiÁŧSW¥˜QŠûŗ½ùěcݧSùĩąSWó«íęACµ›eR—åǃRCÒÇZÍ¢‹ź±^dlsŒtjD¸•‚ZpužÔâÒH¾oLUêÃÔjjēò´ĄW‚ƛ…^Ñ¥‹ĦŸ@Çò–ŠmŒƒOw¡õyJ†yD}¢ďÑÈġfŠZd–a©º²z£šN–ƒjD°Ötj¶¬ZSÎ~¾c°¶Ðm˜x‚O¸¢Pl´žSL|¥žA†ȪĖM’ņIJg®áIJČĒü` ŽQF‡¬h|ÓJ@zµ |ê³È ¸UÖŬŬÀEttĸr‚]€˜ðŽM¤ĶIJHtÏ A’†žĬkvsq‡^aÎbvŒd–™fÊòSD€´Z^’xPsÞrv‹ƞŀ˜jJd×ŘÉ ®A–ΦĤd€xĆqAŒ†ZR”ÀMźŒnĊ»ŒİÐZ— YX–æJŠyĊ²ˆ·¶q§·–K@·{s‘Xãô«lŗ¶»o½E¡­«¢±¨Yˆ®Ø‹¶^A™vWĶGĒĢžPlzfˆļŽtàAvWYãšO_‡¤sD§ssČġ[kƤPX¦Ž`¶“ž®ˆBBvĪjv©šjx[L¥àï[F…¼ÍË»ğV`«•Ip™}ccÅĥZE‹ãoP…´B@ŠD—¸m±“z«Ƴ—¿å³BRضˆœWlâþäą`“]Z£Tc— ĹGµ¶H™m@_©—kŒ‰¾xĨ‡ôȉðX«½đCIbćqK³Á‹Äš¬OAwã»aLʼn‡ËĥW[“ÂGI—ÂNxij¤D¢ŽîĎÎB§°_JœGsƒ¥E@…¤uć…P‘å†cuMuw¢BI¿‡]zG¹guĮck\\_"]],"encodeOffsets":[[[123250,27563]],[[122541,27268]],[[123020,27189]],[[122916,27125]],[[122887,26845]],[[122808,26762]],[[122568,25912]],[[122778,26197]],[[122515,26757]],[[122816,26587]],[[123388,27005]],[[122450,26243]],[[122578,25962]],[[121255,25103]],[[120987,24903]],[[122339,25802]],[[121042,25093]],[[122439,26024]]]}},{"type":"Feature","id":"360000","properties":{"id":"360000","cp":[115.592151,27.676493],"name":"江西","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ĢĨƐgÂMD~ņªe^\\^§„ý©j׍cZ†Ø¨zdÒa¶ˆlҍJŒìõ`oz÷@¤u޸´†ôęöY¼‰HČƶajlÞƩ¥éZ[”|h}^U Œ ¥p„ĄžƦO lt¸Æ €Q\\€ŠaÆ|CnÂOjt­ĚĤd’ÈŒF`’¶„@Ð딠¦ōҞ¨Sêv†HĢûXD®…QgėWiØPÞìºr¤dž€NĠ¢l–•ĄtZoœCƞÔºCxrpĠV®Ê{f_Y`_ƒeq’’®Aot`@o‚DXfkp¨|Šs¬\\D‘ÄSfè©Hn¬…^DhÆyøJh“ØxĢĀLʈ„ƠPżċĄwȠ̦G®ǒĤäTŠÆ~ĦwŠ«|TF¡Šn€c³Ïå¹]ĉđxe{ÎӐ†vOEm°BƂĨİ|G’vz½ª´€H’àp”eJ݆Qšxn‹ÀŠW­žEµàXÅĪt¨ÃĖrÄwÀFÎ|ňÓMå¼ibµ¯»åDT±m[“r«_gŽmQu~¥V\\OkxtL E¢‹ƒ‘Ú^~ýê‹Pó–qo슱_Êw§ÑªåƗ⼋mĉŹ‹¿NQ“…YB‹ąrwģcÍ¥B•Ÿ­ŗÊcØiI—žƝĿuŒqtāwO]‘³YCñTeɕš‹caub͈]trlu€ī…B‘ПGsĵıN£ï—^ķqss¿FūūV՟·´Ç{éĈý‰ÿ›OEˆR_ŸđûIċâJh­ŅıN‘ȩĕB…¦K{Tk³¡OP·wn—µÏd¯}½TÍ«YiµÕsC¯„iM•¤™­•¦¯P|ÿUHv“he¥oFTu‰õ\\ŽOSs‹MòđƇiaºćXŸĊĵà·çhƃ÷ǜ{‘ígu^›đg’m[×zkKN‘¶Õ»lčÓ{XSƉv©_ÈëJbVk„ĔVÀ¤P¾ºÈMÖxlò~ªÚàGĂ¢B„±’ÌŒK˜y’áV‡¼Ã~­…`g›ŸsÙfI›Ƌlę¹e|–~udjˆuTlXµf`¿JdŠ[\\˜„L‚‘²"],"encodeOffsets":[[116689,26234]]}},{"type":"Feature","id":"370000","properties":{"id":"370000","cp":[118.000923,36.275807],"name":"山东","childNum":13},"geometry":{"type":"MultiPolygon","coordinates":[["@@Xjd]{K"],["@@itbFHy"],["@@HlGk"],["@@T‚ŒGŸy"],["@@K¬˜•‹U"],["@@WdXc"],["@@PtOs"],["@@•LnXhc"],["@@ppVƒu]Or"],["@@cdzAUa"],["@@udRhnCI‡"],["@@ˆoIƒpR„"],["@@Ľč{fzƤî’Kš–ÎMĮ]†—ZFˆ½Y]â£ph’™š¶¨râøÀ†ÎǨ¤^ºÄ”Gzˆ~grĚĜlĞÆ„LĆdž¢Îo¦–cv“Kb€gr°Wh”mZp ˆL]LºcU‰Æ­n”żĤÌǜbAnrOAœ´žȊcÀbƦUØrĆUÜøœĬƞ†š˜Ez„VL®öØBkŖÝĐ˹ŧ̄±ÀbÎɜnb²ĦhņBĖ›žįĦåXćì@L¯´ywƕCéõė ƿ¸‘lµ¾Z|†ZWyFYŸ¨Mf~C¿`€à_RÇzwƌfQnny´INoƬˆèôº|sT„JUš›‚L„îVj„ǎ¾Ē؍‚Dz²XPn±ŴPè¸ŔLƔÜƺ_T‘üÃĤBBċȉöA´fa„˜M¨{«M`‡¶d¡ô‰Ö°šmȰBÔjjŒ´PM|”c^d¤u•ƒ¤Û´Œä«ƢfPk¶Môlˆ]Lb„}su^ke{lC‘…M•rDŠÇ­]NÑFsmoõľH‰yGă{{çrnÓE‰‹ƕZGª¹Fj¢ïW…uøCǷ돡ąuhÛ¡^Kx•C`C\\bÅxì²ĝÝ¿_N‰īCȽĿåB¥¢·IŖÕy\\‡¹kx‡Ã£Č×GDyÕ¤ÁçFQ¡„KtŵƋ]CgÏAùSed‡cÚź—ŠuYfƒyMmhUWpSyGwMPqŀ—›Á¼zK›¶†G•­Y§Ëƒ@–´śÇµƕBmœ@Io‚g——Z¯u‹TMx}C‘‰VK‚ï{éƵP—™_K«™pÛÙqċtkkù]gŽ‹Tğwo•ɁsMõ³ă‡AN£™MRkmEʕč™ÛbMjÝGu…IZ™—GPģ‡ãħE[iµBEuŸDPԛ~ª¼ętŠœ]ŒûG§€¡QMsğNPŏįzs£Ug{đJĿļā³]ç«Qr~¥CƎÑ^n¶ÆéÎR~ݏY’I“] P‰umŝrƿ›‰›Iā‹[x‰edz‹L‘¯v¯s¬ÁY…~}…ťuٌg›ƋpÝĄ_ņī¶ÏSR´ÁP~ž¿Cyžċßdwk´Ss•X|t‰`Ä Èð€AªìÎT°¦Dd–€a^lĎDĶÚY°Ž`ĪŴǒˆ”àŠv\\ebŒZH„ŖR¬ŢƱùęO•ÑM­³FۃWp[ƒ"]],"encodeOffsets":[[[123806,39303]],[[123821,39266]],[[123742,39256]],[[123702,39203]],[[123649,39066]],[[123847,38933]],[[123580,38839]],[[123894,37288]],[[123043,36624]],[[123344,38676]],[[123522,38857]],[[123628,38858]],[[118260,36742]]]}},{"type":"Feature","id":"410000","properties":{"id":"410000","cp":[113.665412,33.757975],"name":"河南","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@•ýL™ùµP³swIÓxcŢĞð†´E®žÚPt†ĴXØx¶˜@«ŕŕQGƒ‹Yfa[şu“ßǩ™đš_X³ijÕčC]kbc•¥CS¯ëÍB©÷‹–³­Siˆ_}m˜YTtž³xlàcȂzÀD}ÂOQ³ÐTĨ¯†ƗòËŖ[hœł‹Ŧv~††}ÂZž«¤lPǕ£ªÝŴÅR§ØnhcŒtâk‡nύ­ľŹUÓÝdKuķ‡I§oTũÙďkęĆH¸ÓŒ\\ăŒ¿PcnS{wBIvɘĽ[GqµuŸŇôYgûƒZcaŽ©@½Õǽys¯}lgg@­C\\£as€IdÍuCQñ[L±ęk·‹ţb¨©kK—’»›KC²‘òGKmĨS`ƒ˜UQ™nk}AGē”sqaJ¥ĐGR‰ĎpCuÌy ã iMc”plk|tRk†ðœev~^‘´†¦ÜŽSí¿_iyjI|ȑ|¿_»d}qŸ^{“Ƈdă}Ÿtqµ`Ƴĕg}V¡om½fa™Ço³TTj¥„tĠ—Ry”K{ùÓjuµ{t}uËR‘iŸvGŠçJFjµŠÍyqΘàQÂFewixGw½Yŷpµú³XU›½ġy™łå‰kÚwZXˆ·l„¢Á¢K”zO„Λ΀jc¼htoDHr…|­J“½}JZ_¯iPq{tę½ĕ¦Zpĵø«kQ…Ťƒ]MÛfaQpě±ǽ¾]u­Fu‹÷nƒ™čįADp}AjmcEǒaª³o³ÆÍSƇĈÙDIzˑ赟^ˆKLœ—i—Þñ€[œƒaA²zz‰Ì÷Dœ|[šíijgf‚ÕÞd®|`ƒĆ~„oĠƑô³Ŋ‘D×°¯CsŠøÀ«ì‰UMhTº¨¸ǡîS–Ô„DruÂÇZ•ÖEŽ’vPZ„žW”~؋ÐtĄE¢¦Ðy¸bŠô´oŬ¬Ž²Ês~€€]®tªašpŎJ¨Öº„_ŠŔ–`’Ŗ^Ѝ\\Ĝu–”~m²Ƹ›¸fW‰ĦrƔ}Î^gjdfÔ¡J}\\n C˜¦þWxªJRÔŠu¬ĨĨmF†dM{\\d\\ŠYÊ¢ú@@¦ª²SŠÜsC–}fNècbpRmlØ^g„d¢aÒ¢CZˆZxvÆ¶N¿’¢T@€uCœ¬^ĊðÄn|žlGl’™Rjsp¢ED}€Fio~ÔNŽ‹„~zkĘHVsDzßjƒŬŒŠŢ`Pûàl¢˜\\ÀœEhŽİgÞē X¼Pk–„|m"],"encodeOffsets":[[118256,37017]]}},{"type":"Feature","id":"420000","properties":{"id":"420000","cp":[113.298572,30.684355],"name":"湖北","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@AB‚"],["@@lskt"],["@@¾«}{ra®pîÃ\\™›{øCŠËyyB±„b\\›ò˜Ý˜jK›‡L ]ĎĽÌ’JyÚCƈćÎT´Å´pb©È‘dFin~BCo°BĎĚømvŒ®E^vǾ½Ĝ²Ro‚bÜeNŽ„^ĺ£R†¬lĶ÷YoĖ¥Ě¾|sOr°jY`~I”¾®I†{GqpCgyl{‡£œÍƒÍyPL“¡ƒ¡¸kW‡xYlÙæŠšŁĢzœ¾žV´W¶ùŸo¾ZHxjwfx„GNÁ•³Xéæl¶‰EièIH‰ u’jÌQ~v|sv¶Ôi|ú¢Fh˜Qsğ¦ƒSiŠBg™ÐE^ÁÐ{–čnOÂȞUÎóĔ†ÊēIJ}Z³½Mŧïeyp·uk³DsѨŸL“¶_œÅuèw»—€¡WqÜ]\\‘Ò§tƗcÕ¸ÕFÏǝĉăxŻČƟO‡ƒKÉġÿ×wg”÷IÅzCg†]m«ªGeçÃTC’«[‰t§{loWeC@ps_Bp‘­r‘„f_``Z|ei¡—oċMqow€¹DƝӛDYpûs•–‹Ykıǃ}s¥ç³[§ŸcYЧHK„«Qy‰]¢“wwö€¸ïx¼ņ¾Xv®ÇÀµRĠЋžHMž±cÏd„ƒǍũȅȷ±DSyúĝ£ŤĀàtÖÿï[îb\\}pĭÉI±Ñy…¿³x¯N‰o‰|¹H™ÏÛm‹júË~Tš•u˜ęjCöAwě¬R’đl¯ Ñb­‰ŇT†Ŀ_[Œ‘IčĄʿnM¦ğ\\É[T·™k¹œ©oĕ@A¾w•ya¥Y\\¥Âaz¯ãÁ¡k¥ne£Ûw†E©Êō¶˓uoj_Uƒ¡cF¹­[Wv“P©w—huÕyBF“ƒ`R‹qJUw\\i¡{jŸŸEPïÿ½fć…QÑÀQ{ž‚°‡fLԁ~wXg—ītêݾ–ĺ‘Hdˆ³fJd]‹HJ²…E€ƒoU¥†HhwQsƐ»Xmg±çve›]Dm͂PˆoCc¾‹_h”–høYrŊU¶eD°Č_N~øĹĚ·`z’]Äþp¼…äÌQŒv\\rCŒé¾TnkžŐڀÜa‡“¼ÝƆ̶Ûo…d…ĔňТJq’Pb ¾|JŒ¾fXŠƐîĨ_Z¯À}úƲ‹N_ĒĊ^„‘ĈaŐyp»CÇĕKŠšñL³ŠġMŒ²wrIÒŭxjb[œžn«øœ˜—æˆàƒ ^²­h¯Ú€ŐªÞ¸€Y²ĒVø}Ā^İ™´‚LŠÚm„¥ÀJÞ{JVŒųÞŃx×sxxƈē ģMř–ÚðòIf–Ċ“Œ\\Ʈ±ŒdʧĘD†vČ_Àæ~DŒċ´A®µ†¨ØLV¦êHÒ¤"]],"encodeOffsets":[[[113712,34000]],[[115612,30507]],[[113649,34054]]]}},{"type":"Feature","id":"430000","properties":{"id":"430000","cp":[111.782279,28.09409],"name":"湖南","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@—n„FTs"],["@@ßÅÆá‰½ÔXr—†CO™“…ËR‘ïÿĩ­TooQyšÓ[‹ŅBE¬–ÎÓXa„į§Ã¸G °ITxp‰úxÚij¥Ïš–̾ŠedžÄ©ĸG…œàGh‚€M¤–Â_U}Ċ}¢pczfŠþg¤€”ÇòAV‘‹M"],["@@©K—ƒA·³CQ±Á«³BUŠƑ¹AŠtćOw™D]ŒJiØSm¯b£‘ylƒ›X…HËѱH•«–‘C^õľA–Å§¤É¥„ïyuǙuA¢^{ÌC´­¦ŷJ£^[†“ª¿‡ĕ~•Ƈ…•N… skóā‡¹¿€ï]ă~÷O§­@—Vm¡‹Qđ¦¢Ĥ{ºjԏŽŒª¥nf´•~ÕoŸž×Ûą‹MąıuZœmZcÒ IJβSÊDŽŶ¨ƚƒ’CÖŎªQؼrŭŽ­«}NÏürʬŒmjr€@ĘrTW ­SsdHzƓ^ÇÂyUi¯DÅYlŹu{hTœ}mĉ–¹¥ě‰Dÿë©ıÓ[Oº£ž“¥ót€ł¹MՄžƪƒ`Pš…Di–ÛUоÅ‌ìˆU’ñB“È£ýhe‰dy¡oċ€`pfmjP~‚kZa…ZsÐd°wj§ƒ@€Ĵ®w~^‚kÀÅKvNmX\\¨a“”сqvíó¿F„¤¡@ũÑVw}S@j}¾«pĂr–ªg àÀ²NJ¶¶Dô…K‚|^ª†Ž°LX¾ŴäPᜣEXd›”^¶›IJÞܓ~‘u¸ǔ˜Ž›MRhsR…e†`ÄofIÔ\\Ø  i”ćymnú¨cj ¢»–GČìƊÿШXeĈ¾Oð Fi ¢|[jVxrIQŒ„_E”zAN¦zLU`œcªx”OTu RLÄ¢dV„i`p˔vŎµªÉžF~ƒØ€d¢ºgİàw¸Áb[¦Zb¦–z½xBĖ@ªpº›šlS¸Ö\\Ĕ[N¥ˀmĎă’J\\‹ŀ`€…ňSڊĖÁĐiO“Ĝ«BxDõĚiv—ž–S™Ì}iùŒžÜnšÐºGŠ{Šp°M´w†ÀÒzJ²ò¨ oTçüöoÛÿñŽőФ‚ùTz²CȆȸǎۃƑÐc°dPÎŸğ˶[Ƚu¯½WM¡­Éž“’B·rížnZŸÒ `‡¨GA¾\\pē˜XhÆRC­üWGġu…T靧Ŏѝ©ò³I±³}_‘‹EÃħg®ęisÁPDmÅ{‰b[Rşs·€kPŸŽƥƒóRo”O‹ŸVŸ~]{g\\“êYƪ¦kÝbiċƵŠGZ»Ěõ…ó·³vŝž£ø@pyö_‹ëŽIkѵ‡bcѧy…×dY؎ªiþž¨ƒ[]f]Ņ©C}ÁN‡»hĻħƏ’ĩ"]],"encodeOffsets":[[[115640,30489]],[[112543,27312]],[[116690,26230]]]}},{"type":"Feature","id":"440000","properties":{"id":"440000","cp":[113.280637,23.125178],"name":"广东","childNum":24},"geometry":{"type":"MultiPolygon","coordinates":[["@@QdˆAua"],["@@ƒlxDLo"],["@@sbhNLo"],["@@Ă āŸ"],["@@WltO[["],["@@Krœ]S"],["@@e„„I]y"],["@@I|„Mym"],["@@ƒÛ³LSŒž¼Y"],["@@nvºB–ëui©`¾"],["@@zdšÛ›Jw®"],["@@†°…¯"],["@@a yAª¸ËJIx،@€ĀHAmßV¡o•fu•o"],["@@šs‰ŗÃÔėAƁ›ZšÄ ~°ČP‚‹äh"],["@@‹¶Ý’Ì‚vmĞh­ı‡Q"],["@@HœŠdSjĒ¢D}war…“u«ZqadYM"],["@@elŒ\\LqqU"],["@@~rMo\\"],["@@f„^ƒC"],["@@øPªoj÷ÍÝħXČx”°Q¨ıXNv"],["@@gÇƳˆŽˆ”oˆŠˆ[~tly"],["@@E–ÆC¿‘"],["@@OŽP"],["@@w‹†đóg‰™ĝ—[³‹¡VÙæÅöM̳¹pÁaËýý©D©Ü“JŹƕģGą¤{Ùū…ǘO²«BƱéA—Ò‰ĥ‡¡«BhlmtÃPµyU¯uc“d·w_bŝcīímGOŽ|KP’ȏ‡ŹãŝIŕŭŕ@Óoo¿ē‹±ß}Ž…ŭ‚ŸIJWÈCőâUâǙI›ğʼn©I›ijEׅÁ”³Aó›wXJþ±ÌŒÜӔĨ£L]ĈÙƺZǾĆĖMĸĤfŒÎĵl•ŨnȈ‘ĐtF”Š–FĤ–‚êk¶œ^k°f¶gŠŽœ}®Fa˜f`vXŲxl˜„¦–ÔÁ²¬ÐŸ¦pqÊ̲ˆi€XŸØRDÎ}†Ä@ZĠ’s„x®AR~®ETtĄZ†–ƈfŠŠHâÒÐA†µ\\S¸„^wĖkRzŠalŽŜ|E¨ÈNĀňZTŒ’pBh£\\ŒĎƀuXĖtKL–¶G|Ž»ĺEļĞ~ÜĢÛĊrˆO˜Ùîvd]nˆ¬VœÊĜ°R֟pM††–‚ƂªFbwžEÀˆ˜©Œž\\…¤]ŸI®¥D³|ˎ]CöAŤ¦…æ’´¥¸Lv¼€•¢ĽBaô–F~—š®²GÌҐEY„„œzk¤’°ahlV՞I^‹šCxĈPŽsB‰ƒºV‰¸@¾ªR²ĨN]´_eavSi‡vc•}p}Đ¼ƌkJœÚe thœ†_¸ ºx±ò_xN›Ë‹²‘@ƒă¡ßH©Ùñ}wkNÕ¹ÇO½¿£ĕ]ly_WìIžÇª`ŠuTÅxYĒÖ¼k֞’µ‚MžjJÚwn\\h‘œĒv]îh|’È›Ƅøègž¸Ķß ĉĈWb¹ƀdéƌNTtP[ŠöSvrCZžžaGuœbo´ŖÒÇА~¡zCI…özx¢„Pn‹•‰Èñ @ŒĥÒ¦†]ƞŠV}³ăĔñiiÄÓVépKG½Ä‘ÓávYo–C·sit‹iaÀy„ŧΡÈYDÑům}‰ý|m[węõĉZÅxUO}÷N¹³ĉo_qtă“qwµŁYلǝŕ¹tïÛUïmRCº…ˆĭ|µ›ÕÊK™½R‘ē ó]‘–GªęAx–»HO£|ām‡¡diď×YïYWªʼnOeÚtĐ«zđ¹T…ā‡úE™á²\\‹ķÍ}jYàÙÆſ¿Çdğ·ùTßÇţʄ¡XgWÀLJğ·¿ÃˆOj YÇ÷Qě‹i"]],"encodeOffsets":[[[117381,22988]],[[116552,22934]],[[116790,22617]],[[116973,22545]],[[116444,22536]],[[116931,22515]],[[116496,22490]],[[116453,22449]],[[113301,21439]],[[118726,21604]],[[118709,21486]],[[113210,20816]],[[115482,22082]],[[113171,21585]],[[113199,21590]],[[115232,22102]],[[115739,22373]],[[115134,22184]],[[113056,21175]],[[119573,21271]],[[119957,24020]],[[115859,22356]],[[116561,22649]],[[116285,22746]]]}},{"type":"Feature","id":"450000","properties":{"id":"450000","cp":[108.320004,22.82402],"name":"广西","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@H– TQ§•A"],["@@ĨʪƒLƒƊDÎĹĐCǦė¸zÚGn£¾›rªŀÜt¬@֛ڈSx~øOŒ˜ŶÐÂæȠ\\„ÈÜObĖw^oބLf¬°bI lTØB̈F£Ć¹gñĤaY“t¿¤VSñœK¸¤nM†¼‚JE±„½¸šŠño‹ÜCƆæĪ^ŠĚQÖ¦^‡ˆˆf´Q†üÜʝz¯šlzUĺš@쇀p¶n]sxtx¶@„~ÒĂJb©gk‚{°‚~c°`ԙ¬rV\\“la¼¤ôá`¯¹LC†ÆbŒxEræO‚v[H­˜„[~|aB£ÖsºdAĐzNÂðsŽÞƔ…Ĥªbƒ–ab`ho¡³F«èVloޤ™ÔRzpp®SŽĪº¨ÖƒºN…ij„d`’a”¦¤F³ºDÎńĀìŠCžĜº¦Ċ•~nS›|gźvZkCÆj°zVÈÁƔ]LÊFZg…čP­kini«‹qǀcz͔Y®¬Ů»qR×ō©DՄ‘§ƙǃŵTÉĩ±ŸıdÑnYY›IJvNĆÌØÜ Öp–}e³¦m‹©iÓ|¹Ÿħņ›|ª¦QF¢Â¬ʖovg¿em‡^ucà÷gՎuŒíÙćĝ}FϼĹ{µHK•sLSđƃr‹č¤[Ag‘oS‹ŇYMÿ§Ç{Fśbky‰lQxĕƒ]T·¶[B…ÑÏGáşşƇe€…•ăYSs­FQ}­Bƒw‘tYğÃ@~…C̀Q ×W‡j˱rÉ¥oÏ ±«ÓÂ¥•ƒ€k—ŽwWűŒmcih³K›~‰µh¯e]lµ›él•E쉕E“ďs‡’mǖŧē`ãògK_ÛsUʝ“ćğ¶hŒöŒO¤Ǜn³Žc‘`¡y‹¦C‘ez€YŠwa™–‘[ďĵűMę§]X˜Î_‚훘Û]é’ÛUćİÕBƣ±…dƒy¹T^džûÅÑŦ·‡PĻþÙ`K€¦˜…¢ÍeœĥR¿Œ³£[~Œäu¼dl‰t‚†W¸oRM¢ď\\zœ}Æzdvň–{ÎXF¶°Â_„ÒÂÏL©Ö•TmuŸ¼ãl‰›īkiqéfA„·Êµ\\őDc¥ÝF“y›Ôć˜c€űH_hL܋êĺШc}rn`½„Ì@¸¶ªVLŒŠhŒ‹\\•Ţĺk~ŽĠið°|gŒtTĭĸ^x‘vK˜VGréAé‘bUu›MJ‰VÃO¡…qĂXËS‰ģãlýàŸ_ju‡YÛÒB†œG^˜é֊¶§ŽƒEG”ÅzěƒƯ¤Ek‡N[kdåucé¬dnYpAyČ{`]þ¯T’bÜÈk‚¡Ġ•vŒàh„ÂƄ¢Jî¶²"]],"encodeOffsets":[[[111707,21520]],[[107619,25527]]]}},{"type":"Feature","id":"460000","properties":{"id":"460000","cp":[109.83119,19.031971],"name":"海南","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@š¦Ŝil¢”XƦ‘ƞò–ïè§ŞCêɕrŧůÇąĻõ™·ĉ³œ̅kÇm@ċȧƒŧĥ‰Ľʉ­ƅſ“ȓÒ˦ŝE}ºƑ[ÍĜȋ gÎfǐÏĤ¨êƺ\\Ɔ¸ĠĎvʄȀœÐ¾jNðĀÒRŒšZdž™zÐŘΰH¨Ƣb²_Ġ "],"encodeOffsets":[[112750,20508]]}},{"type":"Feature","id":"510000","properties":{"id":"510000","cp":[104.065735,30.659462],"name":"四川","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@LqKr"],["@@Š[ĻéV£ž_ţġñpG •réÏ·~ąSfy×͂·ºſƽiÍıƣıĻmHH}siaX@iǰÁÃ×t«ƒ­Tƒ¤J–JJŒyJ•ÈŠ`Ohߦ¡uËhIyCjmÿw…ZG……Ti‹SˆsO‰žB²ŸfNmsPaˆ{M{ŠõE‘^Hj}gYpaeuž¯‘oáwHjÁ½M¡pM“–uå‡mni{fk”\\oƒÎqCw†EZ¼K›ĝŠƒAy{m÷L‡wO×SimRI¯rK™õBS«sFe‡]fµ¢óY_ÆPRcue°Cbo׌bd£ŌIHgtrnyPt¦foaXďx›lBowz‹_{ÊéWiêE„GhܸºuFĈIxf®Ž•Y½ĀǙ]¤EyŸF²ċ’w¸¿@g¢§RGv»–áŸW`ÃĵJwi]t¥wO­½a[׈]`Ãi­üL€¦LabbTÀå’c}Íh™Æhˆ‹®BH€î|Ék­¤S†y£„ia©taį·Ɖ`ō¥Uh“O…ƒĝLk}©Fos‰´›Jm„µlŁu—…ø–nÑJWΪ–YÀïAetTžŅ‚ӍG™Ë«bo‰{ıwodƟ½ƒžOġܑµxàNÖ¾P²§HKv¾–]|•B‡ÆåoZ`¡Ø`ÀmºĠ~ÌЧnDž¿¤]wğ@sƒ‰rğu‰~‘Io”[é±¹ ¿žſđӉ@q‹gˆ¹zƱřaí°KtǤV»Ã[ĩǭƑ^ÇÓ@ỗs›Zϕ‹œÅĭ€Ƌ•ěpwDóÖሯneQˌq·•GCœýS]xŸ·ý‹q³•O՜Œ¶Qzßti{ř‰áÍÇWŝŭñzÇW‹pç¿JŒ™‚Xœĩè½cŒF–ÂLiVjx}\\N†ŇĖ¥Ge–“JA¼ÄHfÈu~¸Æ«dE³ÉMA|b˜Ò…˜ćhG¬CM‚õŠ„ƤąAvƒüV€éŀ‰_V̳ĐwQj´·ZeÈÁ¨X´Æ¡Qu·»Ÿ“˜ÕZ³ġqDo‰y`L¬gdp°şŠp¦ėìÅĮZްIä”h‚‘ˆzŠĵœf²å ›ĚрKp‹IN|‹„Ñz]ń……·FU×é»R³™MƒÉ»GM«€ki€™ér™}Ã`¹ăÞmȝnÁîRǀ³ĜoİzŔwǶVÚ£À]ɜ»ĆlƂ²Ġ…þTº·àUȞÏʦ¶†I’«dĽĢdĬ¿–»Ĕ׊h\\c¬†ä²GêëĤł¥ÀǿżÃÆMº}BÕĢyFVvw–ˆxBèĻĒ©Ĉ“tCĢɽŠȣ¦āæ·HĽî“ôNԓ~^¤Ɗœu„œ^s¼{TA¼ø°¢İªDè¾Ň¶ÝJ‘®Z´ğ~Sn|ªWÚ©òzPOȸ‚bð¢|‹øĞŠŒœŒQìÛÐ@Ğ™ǎRS¤Á§d…i“´ezÝúØã]Hq„kIŸþËQǦÃsǤ[E¬ÉŪÍxXƒ·ÖƁİlƞ¹ª¹|XÊwn‘ÆƄmÀêErĒtD®ċæcQƒ”E®³^ĭ¥©l}äQto˜ŖÜqƎkµ–„ªÔĻĴ¡@Ċ°B²Èw^^RsºT£ڿœQP‘JvÄz„^Đ¹Æ¯fLà´GC²‘dt˜­ĀRt¼¤ĦOðğfÔðDŨŁĞƘïžPȆ®âbMüÀXZ ¸£@Ś›»»QÉ­™]d“sÖ×_͖_ÌêŮPrĔĐÕGĂeZÜîĘqBhtO ¤tE[h|Y‹Ô‚ZśÎs´xº±UŒ’ñˆt|O’ĩĠºNbgþŠJy^dÂY Į„]Řz¦gC‚³€R`Šz’¢AjŒ¸CL„¤RÆ»@­Ŏk\\Ç´£YW}z@Z}‰Ã¶“oû¶]´^N‡Ò}èN‚ª–P˜Íy¹`S°´†ATe€VamdUĐwʄvĮÕ\\ƒu‹Æŗ¨Yp¹àZÂm™Wh{á„}WØǍ•Éüw™ga§áCNęÎ[ĀÕĪgÖɪX˜øx¬½Ů¦¦[€—„NΆL€ÜUÖ´òrÙŠxR^–†J˜k„ijnDX{Uƒ~ET{ļº¦PZc”jF²Ė@Žp˜g€ˆ¨“B{ƒu¨ŦyhoÚD®¯¢˜ WòàFΤ¨GDäz¦kŮPœġq˚¥À]€Ÿ˜eŽâÚ´ªKxī„Pˆ—Ö|æ[xäJÞĥ‚s’NÖ½ž€I†¬nĨY´®Ð—ƐŠ€mD™ŝuäđđEb…e’e_™v¡}ìęNJē}q”É埁T¯µRs¡M@}ůa†a­¯wvƉåZwž\\Z{åû^›"]],"encodeOffsets":[[[108815,30935]],[[110617,31811]]]}},{"type":"Feature","id":"520000","properties":{"id":"520000","cp":[106.713478,26.578343],"name":"贵州","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@†G\\†lY£‘in"],["@@q‚|ˆ‚mc¯tχVSÎ"],["@@hÑ£Is‡NgßH†›HªķÃh_¹ƒ¡ĝħń¦uيùŽgS¯JHŸ|sÝÅtÁïyMDč»eÕtA¤{b\\}—ƒG®u\\åPFq‹wÅaD…žK°ºâ_£ùbµ”mÁ‹ÛœĹM[q|hlaªāI}тƒµ@swtwm^oµˆD鼊yV™ky°ÉžûÛR…³‚‡eˆ‡¥]RՋěħ[ƅåÛDpŒ”J„iV™™‰ÂF²I…»mN·£›LbÒYb—WsÀbŽ™pki™TZĄă¶HŒq`……ĥ_JŸ¯ae«ƒKpÝx]aĕÛPƒÇȟ[ÁåŵÏő—÷Pw}‡TœÙ@Õs«ĿÛq©½œm¤ÙH·yǥĘĉBµĨÕnđ]K„©„œá‹ŸG纍§Õßg‡ǗĦTèƤƺ{¶ÉHÎd¾ŚÊ·OÐjXWrãLyzÉAL¾ę¢bĶėy_qMĔąro¼hĊžw¶øV¤w”²Ĉ]ʚKx|`ź¦ÂÈdr„cȁbe¸›`I¼čTF´¼Óýȃr¹ÍJ©k_șl³´_pН`oÒh޶pa‚^ÓĔ}D»^Xyœ`d˜[Kv…JPhèhCrĂĚÂ^Êƌ wˆZL­Ġ£šÁbrzOIl’MM”ĪŐžËr×ÎeŦŽtw|Œ¢mKjSǘňĂStÎŦEtqFT†¾†E쬬ôxÌO¢Ÿ KгŀºäY†„”PVgŎ¦Ŋm޼VZwVlŒ„z¤…ž£Tl®ctĽÚó{G­A‡ŒÇgeš~Αd¿æaSba¥KKûj®_ć^\\ؾbP®¦x^sxjĶI_Ä X‚⼕Hu¨Qh¡À@Ëô}ޱžGNìĎlT¸ˆ…`V~R°tbÕĊ`¸úÛtπFDu€[ƒMfqGH·¥yA‰ztMFe|R‚_Gk†ChZeÚ°to˜v`x‹b„ŒDnÐ{E}šZ˜è€x—†NEފREn˜[Pv@{~rĆAB§‚EO¿|UZ~ì„Uf¨J²ĂÝÆ€‚sª–B`„s¶œfvö¦ŠÕ~dÔq¨¸º»uù[[§´sb¤¢zþFœ¢Æ…Àhˆ™ÂˆW\\ıŽËI݊o±ĭŠ£þˆÊs}¡R]ŒěƒD‚g´VG¢‚j±®è†ºÃmpU[Á›‘Œëº°r›ÜbNu¸}Žº¼‡`ni”ºÔXĄ¤¼Ôdaµ€Á_À…†ftQQgœR—‘·Ǔ’v”}Ýלĵ]µœ“Wc¤F²›OĩųãW½¯K‚©…]€{†LóµCIµ±Mß¿hŸ•©āq¬o‚½ž~@i~TUxŪÒ¢@ƒ£ÀEîôruń‚”“‚b[§nWuMÆLl¿]x}ij­€½"]],"encodeOffsets":[[[112158,27383]],[[112105,27474]],[[112095,27476]]]}},{"type":"Feature","id":"530000","properties":{"id":"530000","cp":[101.512251,24.740609],"name":"云南","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@[„ùx½}ÑRH‘YīĺûsÍn‘iEoã½Ya²ė{c¬ĝg•ĂsA•ØÅwď‚õzFjw}—«Dx¿}UũlŸê™@•HÅ­F‰¨ÇoJ´Ónũuą¡Ã¢pÒŌ“Ø TF²‚xa²ËX€‚cʋlHîAßËŁkŻƑŷÉ©h™W­æßU‡“Ës¡¦}•teèÆ¶StǀÇ}Fd£j‹ĈZĆÆ‹¤T‚č\\Dƒ}O÷š£Uˆ§~ŃG™‚åŃDĝ¸œTsd¶¶Bªš¤u¢ŌĎo~t¾ÍŶÒtD¦Ú„iôö‰€z›ØX²ghįh½Û±¯€ÿm·zR¦Ɵ`ªŊÃh¢rOԍ´£Ym¼èêf¯ŪĽn„†cÚbŒw\\zlvWžªâˆ ¦g–mĿBş£¢ƹřbĥkǫßeeZkÙIKueT»sVesb‘aĕ  ¶®dNœĄÄpªyސ¼—„³BE˜®l‡ŽGœŭCœǶwêżĔÂe„pÍÀQƞpC„–¼ŲÈ­AÎô¶R„ä’Q^Øu¬°š_Èôc´¹ò¨P΢hlϦ´Ħ“Æ´sâDŽŲPnÊD^¯°’Upv†}®BP̪–jǬx–Söwlfòªv€qĸ|`H€­viļ€ndĜ­Ćhň•‚em·FyށqóžSᝑ³X_ĞçêtryvL¤§z„¦c¦¥jnŞk˜ˆlD¤øz½ĜàžĂŧMÅ|áƆàÊcðÂF܎‚áŢ¥\\\\º™İøÒÐJĴ‡„îD¦zK²ǏÎEh~’CD­hMn^ÌöÄ©ČZÀžaü„fɭyœpį´ěFűk]Ôě¢qlÅĆÙa¶~Äqššê€ljN¬¼H„ÊšNQ´ê¼VظE††^ŃÒyŒƒM{ŒJLoÒœęæŸe±Ķ›y‰’‡gã“¯JYÆĭĘëo¥Š‰o¯hcK«z_pŠrC´ĢÖY”—¼ v¸¢RŽÅW³Â§fǸYi³xR´ďUˊ`êĿU„û€uĆBƒƣö‰N€DH«Ĉg†——Ñ‚aB{ÊNF´¬c·Åv}eÇÃGB»”If•¦HňĕM…~[iwjUÁKE•Ž‹¾dĪçW›šI‹èÀŒoÈXòyŞŮÈXâÎŚŠj|àsRy‹µÖ›–Pr´þŒ ¸^wþTDŔ–Hr¸‹žRÌmf‡żÕâCôox–ĜƌÆĮŒ›Ð–œY˜tâŦÔ@]ÈǮƒ\\μģUsȯLbîƲŚºyh‡rŒŠ@ĒԝƀŸÀ²º\\êp“’JŠ}ĠvŠqt„Ġ@^xÀ£È†¨mËÏğ}n¹_¿¢×Y_æpˆÅ–A^{½•Lu¨GO±Õ½ßM¶w’ÁĢۂP‚›Ƣ¼pcIJxŠ|ap̬HšÐŒŊSfsðBZ¿©“XÏÒK•k†÷Eû¿‰S…rEFsÕūk”óVǥʼniTL‚¡n{‹uxţÏh™ôŝ¬ğōN“‘NJkyPaq™Âğ¤K®‡YŸxÉƋÁ]āęDqçgOg†ILu—\\_gz—]W¼ž~CÔē]bµogpў_oď`´³Țkl`IªºÎȄqÔþž»E³ĎSJ»œ_f·‚adÇqƒÇc¥Á_Źw{™L^ɱćx“U£µ÷xgĉp»ĆqNē`rĘzaĵĚ¡K½ÊBzyäKXqiWPÏɸ½řÍcÊG|µƕƣG˛÷Ÿk°_^ý|_zċBZocmø¯hhcæ\\lˆMFlư£Ĝ„ÆyH“„F¨‰µêÕ]—›HA…àӄ^it `þßäkŠĤÎT~Wlÿ¨„ÔPzUC–NVv [jâôDôď[}ž‰z¿–msSh‹¯{jïğl}šĹ[–őŒ‰gK‹©U·µË@¾ƒm_~q¡f¹…ÅË^»‘f³ø}Q•„¡Ö˳gͱ^ǁ…\\ëÃA_—¿bW›Ï[¶ƛ鏝£F{īZgm@|kHǭƁć¦UĔťƒ×ë}ǝƒeďºȡȘÏíBə£āĘPªij¶“ʼnÿ‡y©n‰ď£G¹¡I›Š±LÉĺÑdĉ܇W¥˜‰}g˜Á†{aqÃ¥aŠıęÏZ—ï`"],"encodeOffsets":[[104636,22969]]}},{"type":"Feature","id":"540000","properties":{"id":"540000","cp":[89.132212,30.860361],"name":"西藏","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@hžľxŽŖ‰xƒÒVކºÅâAĪÝȆµę¯Ňa±r_w~uSÕň‘qOj]ɄQ…£Z……UDûoY’»©M[‹L¼qãË{V͕çWViŽ]ë©Ä÷àyƛh›ÚU°ŒŒa”d„cQƒ~Mx¥™cc¡ÙaSyF—ցk­ŒuRýq¿Ôµ•QĽ³aG{¿FµëªéĜÿª@¬·–K‰·àariĕĀ«V»Ŷ™Ĵū˜gèLǴŇƶaf‹tŒèBŚ£^Šâ†ǐÝ®–šM¦ÁǞÿ¬LhŸŽJ¾óƾƺcxw‹f]Y…´ƒ¦|œQLn°aœdĊ…œ\\¨o’œǀÍŎœ´ĩĀd`tÊQŞŕ|‚¨C^©œĈ¦„¦ÎJĊ{ŽëĎjª²rЉšl`¼Ą[t|¦St辉PŒÜK¸€d˜Ƅı]s¤—î_v¹ÎVòŦj˜£Əsc—¬_Ğ´|٘¦Avަw`ăaÝaa­¢e¤ı²©ªSªšÈMĄwžÉØŔì@T‘¤—Ę™\\õª@”þo´­xA s”ÂtŎKzó´ÇĊµ¢rž^nĊ­Æ¬×üGž¢‚³ {âĊ]š™G‚~bÀgVjzlhǶf€žOšfdЉªB]pj„•TO–tĊ‚n¤}®¦ƒČ¥d¢¼»ddš”Y¼Žt—¢eȤJ¤}Ǿ¡°§¤AГlc@ĝ”sªćļđAç‡wx•UuzEÖġ~AN¹ÄÅȀݦ¿ģŁéì±H…ãd«g[؉¼ēÀ•cīľġ¬cJ‘µ…ÐʥVȝ¸ßS¹†ý±ğkƁ¼ą^ɛ¤Ûÿ‰b[}¬ōõÃ]ËNm®g@•Bg}ÍF±ǐyL¥íCˆƒIij€Ï÷њį[¹¦[⚍EÛïÁÉdƅß{âNÆāŨߝ¾ě÷yC£‡k­´ÓH@¹†TZ¥¢įƒ·ÌAЧ®—Zc…v½ŸZ­¹|ŕWZqgW“|ieZÅYVӁqdq•bc²R@†c‡¥Rã»Ge†ŸeƃīQ•}J[ғK…¬Ə|o’ėjġĠÑN¡ð¯EBčnwôɍėªƒ²•CλŹġǝʅįĭạ̃ūȹ]ΓͧgšsgȽóϧµǛ†ęgſ¶ҍć`ĘąŌJޚä¤rÅň¥ÖÁUětęuůÞiĊÄÀ\\Æs¦ÓRb|Â^řÌkÄŷ¶½÷‡f±iMݑ›‰@ĥ°G¬ÃM¥n£Øą‚ğ¯ß”§aëbéüÑOčœk£{\\‘eµª×M‘šÉfm«Ƒ{Å׃Gŏǩãy³©WÑăû‚··‘Q—òı}¯ã‰I•éÕÂZ¨īès¶ZÈsŽæĔTŘvŽgÌsN@îá¾ó@‰˜ÙwU±ÉT廣TđŸWxq¹Zo‘b‹s[׌¯cĩv‡Œėŧ³BM|¹k‰ªħ—¥TzNYnݍßpęrñĠĉRS~½ŠěVVе‚õ‡«ŒM££µB•ĉ¥áºae~³AuĐh`Ü³ç@BۘïĿa©|z²Ý¼D”£à貋ŸƒIƒû›I ā€óK¥}rÝ_Á´éMaň¨€~ªSĈ½Ž½KÙóĿeƃÆBŽ·¬ën×W|Uº}LJrƳ˜lŒµ`bÔ`QˆˆÐÓ@s¬ñIŒÍ@ûws¡åQÑßÁ`ŋĴ{Ī“T•ÚÅTSij‚‹Yo|Ç[ǾµMW¢ĭiÕØ¿@˜šMh…pÕ]j†éò¿OƇĆƇp€êĉâlØw–ěsˆǩ‚ĵ¸c…bU¹ř¨WavquSMzeo_^gsÏ·¥Ó@~¯¿RiīB™Š\\”qTGªÇĜçPoŠÿfñòą¦óQīÈáP•œābß{ƒZŗĸIæÅ„hnszÁCËìñšÏ·ąĚÝUm®ó­L·ăU›Èíoù´Êj°ŁŤ_uµ^‘°Œìǖ@tĶĒ¡Æ‡M³Ģ«˜İĨÅ®ğ†RŽāð“ggheÆ¢z‚Ê©Ô\\°ÝĎz~ź¤Pn–MĪÖB£Ÿk™n鄧żćŠ˜ĆK„ǰ¼L¶è‰âz¨u¦¥LDĘz¬ýÎmĘd¾ß”Fz“hg²™Fy¦ĝ¤ċņbΛ@y‚Ąæm°NĮZRÖíŽJ²öLĸÒ¨Y®ƌÐV‰à˜tt_ڀÂyĠzž]Ţh€zĎ{†ĢX”ˆc|šÐqŽšfO¢¤ög‚ÌHNŽ„PKŖœŽ˜Uú´xx[xˆvĐCûŠìÖT¬¸^}Ìsòd´_އKgžLĴ…ÀBon|H@–Êx˜—¦BpŰˆŌ¿fµƌA¾zLjRxжF”œkĄźRzŀˆ~¶[”´Hnª–VƞuĒ­È¨ƎcƽÌm¸ÁÈM¦x͊ëÀxdžB’šú^´W†£–d„kɾĬpœw‚˂ØɦļĬIŚœÊ•n›Ŕa¸™~J°î”lɌxĤÊÈðhÌ®‚g˜T´øŽàCˆŽÀ^ªerrƘdž¢İP|Ė ŸWœªĦ^¶´ÂL„aT±üWƜ˜ǀRšŶUńšĖ[QhlLüA†‹Ü\\†qR›Ą©"],"encodeOffsets":[[90849,37210]]}},{"type":"Feature","id":"610000","properties":{"id":"610000","cp":[108.948024,34.263161],"name":"陕西","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@˜p¢—ȮµšûG™Ħ}Ħšðǚ¶òƄ€jɂz°{ºØkÈęâ¦jª‚Bg‚\\œċ°s¬Ž’]jžú ‚E”Ȍdž¬s„t‡”RˆÆdĠݎwܔ¸ôW¾ƮłÒ_{’Ìšû¼„jº¹¢GǪÒ¯ĘƒZ`ºŊƒecņąš~BÂgzpâēòYǠȰÌTΨÂWœ|fcŸă§uF—Œ@NŸ¢XLƒŠRMº[ğȣſï|¥J™kc`sʼnǷ’Y¹‹W@µ÷K…ãï³ÛIcñ·VȋڍÒķø©—þ¥ƒy‚ÓŸğęmWµÎumZyOŅƟĥÓ~sÑL¤µaŅY¦ocyZ{‰y c]{ŒTa©ƒ`U_Ěē£ωÊƍKù’K¶ȱÝƷ§{û»ÅÁȹÍéuij|¹cÑd‘ŠìUYƒŽO‘uF–ÕÈYvÁCqӃT•Ǣí§·S¹NgŠV¬ë÷Át‡°Dد’C´ʼnƒópģ}„ċcE˅FŸŸéGU¥×K…§­¶³B‹Č}C¿åċ`wġB·¤őcƭ²ő[Å^axwQO…ÿEËߌ•ĤNĔŸwƇˆÄŠńwĪ­Šo[„_KÓª³“ÙnK‰Çƒěœÿ]ď€ă_d©·©Ýŏ°Ù®g]±„Ÿ‡ß˜å›—¬÷m\\›iaǑkěX{¢|ZKlçhLt€Ňîŵ€œè[€É@ƉĄEœ‡tƇÏ˜³­ħZ«mJ…›×¾‘MtÝĦ£IwÄå\\Õ{‡˜ƒOwĬ©LÙ³ÙgBƕŀr̛ĢŭO¥lãyC§HÍ£ßEñŸX¡—­°ÙCgpťz‘ˆb`wI„vA|§”‡—hoĕ@E±“iYd¥OϹS|}F@¾oAO²{tfžÜ—¢Fǂ҈W²°BĤh^Wx{@„¬‚­F¸¡„ķn£P|ŸªĴ@^ĠĈæb–Ôc¶l˜Yi…–^Mi˜cϰÂ[ä€vï¶gv@À“Ĭ·lJ¸sn|¼u~a]’ÆÈtŌºJp’ƒþ£KKf~ЦUbyäIšĺãn‡Ô¿^­žŵMT–hĠܤko¼Ŏìąǜh`[tŒRd²IJ_œXPrɲ‰l‘‚XžiL§àƒ–¹ŽH˜°Ȧqº®QC—bA†„ŌJ¸ĕÚ³ĺ§ `d¨YjžiZvRĺ±öVKkjGȊĐePОZmļKÀ€‚[ŠŽ`ösìh†ïÎoĬdtKÞ{¬èÒÒBŒÔpIJÇĬJŊ¦±J«ˆY§‹@·pH€µàåVKe›pW†ftsAÅqC·¬ko«pHÆuK@oŸHĆۄķhx“e‘n›S³àǍrqƶRbzy€¸ËАl›¼EºpĤ¼Œx¼½~Ğ’”à@†ÚüdK^ˆmÌSj"],"encodeOffsets":[[110234,38774]]}},{"type":"Feature","id":"620000","properties":{"id":"620000","cp":[103.823557,36.058039],"name":"甘肃","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@VuUv"],["@@ũ‹EĠtt~nkh`Q‰¦ÅÄÜdw˜Ab×ĠąJˆ¤DüègĺqBqœj°lI¡ĨÒ¤úSHbš‡ŠjΑBаaZˆ¢KJŽ’O[|A£žDx}Nì•HUnrk„ kp€¼Y kMJn[aG‚áÚÏ[½rc†}aQxOgsPMnUs‡nc‹Z…ž–sKúvA›t„Þġ’£®ĀYKdnFwš¢JE°”Latf`¼h¬we|€Æ‡šbj}GA€·~WŽ”—`†¢MC¤tL©IJ°qdf”O‚“bÞĬ¹ttu`^ZúE`Œ[@„Æsîz®¡’C„ƳƜG²“R‘¢R’m”fŽwĸg܃‚ą G@pzJM½mŠhVy¸uÈÔO±¨{LfæU¶ßGĂq\\ª¬‡²I‚¥IʼnÈīoı‹ÓÑAçÑ|«LÝcspīðÍg…të_õ‰\\ĉñLYnĝg’ŸRǡÁiHLlõUĹ²uQjYi§Z_c¨Ÿ´ĹĖÙ·ŋI…ƒaBD˜­R¹ȥr—¯G•ºß„K¨jWk’ɱŠOq›Wij\\a­‹Q\\sg_ĆǛōëp»£lğۀgS•ŶN®À]ˆÓäm™ĹãJaz¥V}‰Le¤L„ýo‘¹IsŋÅÇ^‘Žbz…³tmEÁ´aйcčecÇN•ĊãÁ\\蝗dNj•]j†—ZµkÓda•ćå]ğij@ ©O{¤ĸm¢ƒE·®ƒ«|@Xwg]A챝‡XǁÑdzªc›wQÚŝñsÕ³ÛV_ýƒ˜¥\\ů¥©¾÷w—Ž©WÕÊĩhÿÖÁRo¸V¬âDb¨šhûx–Ê×nj~Zâƒg|šXÁnßYoº§ZÅŘvŒ[„ĭÖʃuďxcVbnUSf…B¯³_Tzº—ΕO©çMÑ~Mˆ³]µ^püµ”ŠÄY~y@X~¤Z³€[Èōl@®Å¼£QKƒ·Di‹¡By‘ÿ‰Q_´D¥hŗyƒ^ŸĭÁZ]cIzý‰ah¹MĪğP‘s{ò‡‹‘²Vw¹t³Ŝˁ[ŽÑ}X\\gsFŸ£sPAgěp×ëfYHāďÖqēŭOÏë“dLü•\\iŒ”t^c®šRʺ¶—¢H°mˆ‘rYŸ£BŸ¹čIoľu¶uI]vģSQ{ƒUŻ”Å}QÂ|̋°ƅ¤ĩŪU ęĄžÌZҞ\\v˜²PĔ»ƢNHƒĂyAmƂwVmž`”]ȏb•”H`‰Ì¢²ILvĜ—H®¤Dlt_„¢JJÄämèÔDëþgºƫ™”aʎÌrêYi~ ÎݤNpÀA¾Ĕ¼b…ð÷’Žˆ‡®‚”üs”zMzÖĖQdȨý†v§Tè|ªH’þa¸|šÐ ƒwKĢx¦ivr^ÿ ¸l öæfƟĴ·PJv}n\\h¹¶v†·À|\\ƁĚN´Ĝ€çèÁz]ġ¤²¨QÒŨTIl‡ªťØ}¼˗ƦvÄùØE‹’«Fï˛Iq”ōŒTvāÜŏ‚íÛߜÛV—j³âwGăÂíNOŠˆŠPìyV³ʼnĖýZso§HіiYw[߆\\X¦¥c]ÔƩÜ·«j‡ÐqvÁ¦m^ċ±R™¦΋ƈťĚgÀ»IïĨʗƮްƝ˜ĻþÍAƉſ±tÍEÕÞāNU͗¡\\ſčåÒʻĘm ƭÌŹöʥ’ëQ¤µ­ÇcƕªoIýˆ‰Iɐ_mkl³ă‰Ɠ¦j—¡Yz•Ňi–}Msßõ–īʋ —}ƒÁVmŸ_[n}eı­Uĥ¼‘ª•I{ΧDӜƻėoj‘qYhĹT©oūĶ£]ďxĩ‹ǑMĝ‰q`B´ƃ˺Ч—ç~™²ņj@”¥@đ´ί}ĥtPńǾV¬ufӃÉC‹tÓ̻‰…¹£G³€]ƖƾŎĪŪĘ̖¨ʈĢƂlɘ۪üºňUðǜȢƢż̌ȦǼ‚ĤŊɲĖ­Kq´ï¦—ºĒDzņɾªǀÞĈĂD†½ĄĎÌŗĞrôñnŽœN¼â¾ʄľԆ|DŽŽ֦ज़ȗlj̘̭ɺƅêgV̍ʆĠ·ÌĊv|ýĖÕWĊǎÞ´õ¼cÒÒBĢ͢UĜð͒s¨ňƃLĉÕÝ@ɛƯ÷¿Ľ­ĹeȏijëCȚDŲyê×Ŗyò¯ļcÂßY…tÁƤyAã˾J@ǝrý‹‰@¤…rz¸oP¹ɐÚyᐇHŸĀ[Jw…cVeȴϜ»ÈŽĖ}ƒŰŐèȭǢόĀƪÈŶë;Ñ̆ȤМľĮEŔ—ĹŊũ~ËUă{ŸĻƹɁύȩþĽvĽƓÉ@ē„ĽɲßǐƫʾǗĒpäWÐxnsÀ^ƆwW©¦cÅ¡Ji§vúF¶Ž¨c~c¼īŒeXǚ‹\\đ¾JŽwÀďksãA‹fÕ¦L}wa‚o”Z’‹D½†Ml«]eÒÅaɲáo½FõÛ]ĻÒ¡wYR£¢rvÓ®y®LF‹LzĈ„ôe]gx}•|KK}xklL]c¦£fRtív¦†PĤoH{tK"]],"encodeOffsets":[[[108619,36299]],[[108589,36341]]]}},{"type":"Feature","id":"630000","properties":{"id":"630000","cp":[96.778916,35.623178],"name":"青海","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@InJm"],["@@CƒÆ½OŃĦsΰ~dz¦@@“Ņiš±è}ؘƄ˹A³r_ĞŠǒNΌĐw¤^ŬĵªpĺSZg’rpiƼĘԛ¨C|͖J’©Ħ»®VIJ~f\\m `Un„˜~ʌŸ•ĬàöNt•~ňjy–¢Zi˜Ɣ¥ĄŠk´nl`JʇŠJþ©pdƖ®È£¶ìRʦ‘źõƮËnŸʼėæÑƀĎ[‚˜¢VÎĂMÖÝÎF²sƊƀÎBļýƞ—¯ʘƭðħ¼Jh¿ŦęΌƇš¥²Q]Č¥nuÂÏriˆ¸¬ƪÛ^Ó¦d€¥[Wà…x\\ZŽjҕ¨GtpþYŊĕ´€zUO뇉P‰îMĄÁxH´á˜iÜUà›îÜՁĂÛSuŎ‹r“œJð̬EŒ‘FÁú×uÃÎkr“Ē{V}İ«O_ÌËĬ©ŽÓŧSRѱ§Ģ£^ÂyèçěM³Ƃę{[¸¿u…ºµ[gt£¸OƤĿéYŸõ·kŸq]juw¥Dĩƍ€õÇPéĽG‘ž©ã‡¤G…uȧþRcÕĕNy“yût“ˆ­‡ø‘†ï»a½ē¿BMoᣟÍj}éZËqbʍš“Ƭh¹ìÿÓAçãnIáI`ƒks£CG­ě˜Uy×Cy•…’Ÿ@¶ʡÊBnāzG„ơMē¼±O÷õJËĚăVŸĪũƆ£Œ¯{ËL½Ìzż“„VR|ĠTbuvJvµhĻĖH”Aëáa…­OÇðñęNw‡…œľ·L›mI±íĠĩPÉ×®ÿs—’cB³±JKßĊ«`…ađ»·QAmO’‘Vţéÿ¤¹SQt]]Çx€±¯A@ĉij¢Ó祖•ƒl¶ÅÛr—ŕspãRk~¦ª]Į­´“FR„åd­ČsCqđéFn¿Åƃm’Éx{W©ºƝºįkÕƂƑ¸wWūЩÈFž£\\tÈ¥ÄRÈýÌJ ƒlGr^×äùyÞ³fj”c†€¨£ÂZ|ǓMĝšÏ@ëÜőR‹›ĝ‰Œ÷¡{aïȷPu°ËXÙ{©TmĠ}Y³’­ÞIňµç½©C¡į÷¯B»|St»›]vƒųƒs»”}MÓ ÿʪƟǭA¡fs˜»PY¼c¡»¦c„ċ­¥£~msĉP•–Siƒ^o©A‰Šec‚™PeǵŽkg‚yUi¿h}aH™šĉ^|ᴟ¡HØûÅ«ĉ®]m€¡qĉ¶³ÈyôōLÁst“BŸ®wn±ă¥HSò뚣˜S’ë@לÊăxÇN©™©T±ª£IJ¡fb®ÞbŽb_Ą¥xu¥B—ž{łĝ³«`d˜Ɛt—¤ťiñžÍUuºí`£˜^tƃIJc—·ÛLO‹½Šsç¥Ts{ă\\_»™kϊ±q©čiìĉ|ÍIƒ¥ć¥›€]ª§D{ŝŖÉR_sÿc³Īō›ƿΑ›§p›[ĉ†›c¯bKm›R¥{³„Z†e^ŽŒwx¹dƽŽôIg §Mĕ ƹĴ¿—ǣÜ̓]‹Ý–]snåA{‹eŒƭ`ǻŊĿ\\ijŬű”YÂÿ¬jĖqŽßbЏ•L«¸©@ěĀ©ê¶ìÀEH|´bRľž–Ó¶rÀQþ‹vl®Õ‚E˜TzÜdb ˜hw¤{LR„ƒd“c‹b¯‹ÙVgœ‚ƜßzÃô쮍^jUèXΖ|UäÌ»rKŽ\\ŒªN‘¼pZCü†VY††¤ɃRi^rPҒTÖ}|br°qňb̰ªiƶGQ¾²„x¦PœmlŜ‘[Ĥ¡ΞsĦŸÔÏâ\\ªÚŒU\\f…¢N²§x|¤§„xĔsZPòʛ²SÐqF`ª„VƒÞŜĶƨVZŒÌL`ˆ¢dŐIqr\\oäõ–F礻Ŷ×h¹]Clـ\\¦ďÌį¬řtTӺƙgQÇÓHţĒ”´ÃbEÄlbʔC”|CˆŮˆk„Ʈ[ʼ¬ňœ´KŮÈΰÌζƶlð”ļA†TUvdTŠG†º̼ŠÔ€ŒsÊDԄveOg"]],"encodeOffsets":[[[105308,37219]],[[95370,40081]]]}},{"type":"Feature","id":"640000","properties":{"id":"640000","cp":[106.278179,37.26637],"name":"宁夏","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@KëÀęĞ«OęȿȕŸı]ʼn¡åįÕÔ«Ǵõƪ™ĚQÐZhv K°›öqÀѐS[ÃÖHƖčË‡nL]ûc…Ùß@‚“ĝ‘¾}w»»‹oģF¹œ»kÌÏ·{zPƒ§B­¢íyÅt@ƒ@áš]Yv_ssģ¼i߁”ĻL¾ġsKD£¡N_…“˜X¸}B~Haiˆ™Åf{«x»ge_bs“KF¯¡Ix™mELcÿZ¤­Ģ‘ƒÝœsuBLù•t†ŒYdˆmVtNmtOPhRw~bd…¾qÐ\\âÙH\\bImlNZŸ»loƒŸqlVm–Gā§~QCw¤™{A\\‘PKŸNY‡¯bF‡kC¥’sk‹Šs_Ã\\ă«¢ħkJi¯r›rAhĹûç£CU‡ĕĊ_ԗBixÅُĄnªÑaM~ħpOu¥sîeQ¥¤^dkKwlL~{L~–hw^‚ófćƒKyEŒ­K­zuÔ¡qQ¤xZÑ¢^ļöܾEpž±âbÊÑÆ^fk¬…NC¾‘Œ“YpxbK~¥Že֎ŒäBlt¿Đx½I[ĒǙŒWž‹f»Ĭ}d§dµùEuj¨‚IÆ¢¥dXªƅx¿]mtÏwßR͌X¢͎vÆzƂZò®ǢÌʆCrâºMÞzžÆMҔÊÓŊZľ–r°Î®Ȉmª²ĈUªĚøºˆĮ¦ÌĘk„^FłĬhĚiĀ˾iİbjÕ"],["@@mfwěwMrŢªv@G‰"]],"encodeOffsets":[[[109366,40242]],[[108600,36303]]]}},{"type":"Feature","id":"650000","properties":{"id":"650000","cp":[85.617733,40.792818],"name":"新疆","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@QØĔ²X¨”~ǘBºjʐߨvK”ƔX¨vĊOžÃƒ·¢i@~c—‡ĝe_«”Eš“}QxgɪëÏÃ@sÅyXoŖ{ô«ŸuX…ê•Îf`œC‚¹ÂÿÐGĮÕĞXŪōŸMźÈƺQèĽôe|¿ƸJR¤ĘEjcUóº¯Ĩ_ŘÁMª÷Ð¥Oéȇ¿ÖğǤǷÂF҇zÉx[]­Ĥĝ‰œ¦EP}ûƥé¿İƷTėƫœŕƅ™ƱB»Đ±’ēO…¦E–•}‘`cȺrĦáŖuҞª«IJ‡πdƺÏØZƴwʄ¤ĖGЙǂZ̓èH¶}ÚZצʥĪï|ÇĦMŔ»İĝLj‹ì¥Βœba­¯¥ǕǚkĆŵĦɑĺƯxūД̵nơʃĽá½M»›òmqóŘĝč˾ăC…ćāƿÝɽ©DZŅ¹đ¥˜³ðLrÁ®ɱĕģʼnǻ̋ȥơŻǛȡVï¹Ň۩ûkɗġƁ§ʇė̕ĩũƽō^ƕŠUv£ƁQï“Ƶkŏ½ΉÃŭdzLқʻ«ƭ\\lƒ‡ŭD‡“{ʓDkaFÃÄa“³ŤđÔGRÈƚhSӹŚsİ«ĐË[¥ÚDkº^Øg¼ŵ¸£EÍö•€ůʼnT¡c_‡ËKY‹ƧUśĵ„݃U_©rETÏʜ±OñtYw獃{£¨uM³x½şL©Ùá[ÓÐĥ Νtģ¢\\‚ś’nkO›w¥±ƒT»ƷFɯàĩÞáB¹Æ…ÑUw„੍žĽw[“mG½Èå~‡Æ÷QyŠěCFmĭZī—ŵVÁ™ƿQƛ—ûXS²‰b½KϽĉS›©ŷXĕŸ{ŽĕK·¥Ɨcqq©f¿]‡ßDõU³h—­gËÇïģÉɋw“k¯í}I·šœbmœÉ–ř›īJɥĻˁ×xo›ɹī‡l•c…¤³Xù]‘™DžA¿w͉ì¥wÇN·ÂËnƾƍdǧđ®Ɲv•Um©³G\\“}µĿ‡QyŹl㓛µEw‰LJQ½yƋBe¶ŋÀů‡ož¥A—˜Éw@•{Gpm¿Aij†ŽKLhˆ³`ñcËtW‚±»ÕS‰ëüÿďD‡u\\wwwù³—V›LŕƒOMËGh£õP¡™er™Ïd{“‡ġWÁ…č|yšg^ğyÁzÙs`—s|ÉåªÇ}m¢Ń¨`x¥’ù^•}ƒÌ¥H«‰Yªƅ”Aйn~Ꝛf¤áÀz„gŠÇDIԝ´AňĀ҄¶ûEYospõD[{ù°]u›Jq•U•|Soċxţ[õÔĥkŋÞŭZ˺óYËüċrw €ÞkrťË¿XGÉbřaDü·Ē÷Aê[Ää€I®BÕИÞ_¢āĠpŠÛÄȉĖġDKwbm‡ÄNô‡ŠfœƫVÉvi†dz—H‘‹QµâFšù­Âœ³¦{YGžƒd¢ĚÜO „€{Ö¦ÞÍÀPŒ^b–ƾŠlŽ[„vt×ĈÍE˨¡Đ~´î¸ùÎh€uè`¸ŸHÕŔVºwĠââWò‡@{œÙNÝ´ə²ȕn{¿¥{l—÷eé^e’ďˆXj©î\\ªÑò˜Üìc\\üqˆÕ[Č¡xoÂċªbØ­Œø|€¶ȴZdÆÂšońéŒGš\\”¼C°ÌƁn´nxšÊOĨ’ہƴĸ¢¸òTxÊǪMīИÖŲÃɎOvˆʦƢ~FއRěò—¿ġ~åŊœú‰Nšžš¸qŽ’Ę[Ĕ¶ÂćnÒPĒÜvúĀÊbÖ{Äî¸~Ŕünp¤ÂH¾œĄYÒ©ÊfºmԈĘcDoĬMŬ’˜S¤„s²‚”ʘچžȂVŦ –ŽèW°ªB|IJXŔþÈJĦÆæFĚêŠYĂªĂ]øªŖNÞüA€’fɨJ€˜¯ÎrDDšĤ€`€mz\\„§~D¬{vJÂ˜«lµĂb–¤p€ŌŰNĄ¨ĊXW|ų ¿¾ɄĦƐMT”‡òP˜÷fØĶK¢ȝ˔Sô¹òEð­”`Ɩ½ǒÂň×äı–§ĤƝ§C~¡‚hlå‚ǺŦŞkâ’~}ŽFøàIJaĞ‚fƠ¥Ž„Ŕdž˜®U¸ˆźXœv¢aƆúŪtŠųƠjd•ƺŠƺÅìnrh\\ĺ¯äɝĦ]èpĄ¦´LƞĬŠ´ƤǬ˼Ēɸ¤rºǼ²¨zÌPðŀbþ¹ļD¢¹œ\\ĜÑŚŸ¶ZƄ³àjĨoâŠȴLʉȮŒĐ­ĚăŽÀêZǚŐ¤qȂ\\L¢ŌİfÆs|zºeªÙæ§΢{Ā´ƐÚ¬¨Ĵà²łhʺKÞºÖTŠiƢ¾ªì°`öøu®Ê¾ãØ"],"encodeOffsets":[[88824,50096]]}},{"type":"Feature","id":"110000","properties":{"id":"110000","cp":[116.405285,39.904989],"name":"北京","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ĽOÁ›ûtŷmiÍt_H»Ĩ±d`й­{bw…Yr“³S]§§o¹€qGtm_Sŧ€“oa›‹FLg‘QN_•dV€@Zom_ć\\ߚc±x¯oœRcfe…£’o§ËgToÛJíĔóu…|wP¤™XnO¢ÉˆŦ¯rNÄā¤zâŖÈRpŢZŠœÚ{GŠrFt¦Òx§ø¹RóäV¤XdˆżâºWbwڍUd®bêņ¾‘jnŎGŃŶŠnzÚSeîĜZczî¾i]͜™QaúÍÔiþĩȨWĢ‹ü|Ėu[qb[swP@ÅğP¿{\\‡¥A¨Ï‘Ѩj¯ŠX\\¯œMK‘pA³[H…īu}}"],"encodeOffsets":[[120023,41045]]}},{"type":"Feature","id":"120000","properties":{"id":"120000","cp":[117.190182,39.125596],"name":"天津","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ŬgX§Ü«E…¶Ḟ“¬O_™ïlÁg“z±AXe™µÄĵ{¶]gitgšIj·›¥îakS€‰¨ÐƎk}ĕ{gB—qGf{¿a†U^fI“ư‹³õ{YƒıëNĿžk©ïËZŏ‘R§òoY×Ógc…ĥs¡bġ«@dekąI[nlPqCnp{ˆō³°`{PNdƗqSÄĻNNâyj]äžÒD ĬH°Æ]~¡HO¾ŒX}ÐxŒgp“gWˆrDGˆŒpù‚Š^L‚ˆrzWxˆZ^¨´T\\|~@I‰zƒ–bĤ‹œjeĊªz£®Ĕvě€L†mV¾Ô_ȔNW~zbĬvG†²ZmDM~”~"],"encodeOffsets":[[120237,41215]]}},{"type":"Feature","id":"310000","properties":{"id":"310000","cp":[121.472644,31.231706],"name":"上海","childNum":6},"geometry":{"type":"MultiPolygon","coordinates":[["@@ɧư¬EpƸÁxc‡"],["@@©„ªƒ"],["@@”MA‹‘š"],["@@Qp݁E§ÉC¾"],["@@bŝՕÕEȣÚƥêImɇǦèÜĠŒÚžÃƌÃ͎ó"],["@@ǜûȬɋŠŭ™×^‰sYŒɍDŋ‘ŽąñCG²«ªč@h–_p¯A{‡oloY€¬j@IJ`•gQڛhr|ǀ^MIJvtbe´R¯Ô¬¨YŽô¤r]ì†Ƭį"]],"encodeOffsets":[[[124702,32062]],[[124547,32200]],[[124808,31991]],[[124726,32110]],[[124903,32376]],[[124438,32149]]]}},{"type":"Feature","id":"500000","properties":{"id":"500000","cp":[107.304962,29.533155],"name":"重庆","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@vjG~nGŘŬĶȂƀƾ¹¸ØÎezĆT¸}êЖqHŸðqĖ䒊¥^CƒIj–²p…\\_ æüY|[YxƊæuž°xb®…Űb@~¢NQt°¶‚S栓Ê~rljĔëĚ¢~šuf`‘‚†fa‚ĔJåĊ„nÖ]„jƎćÊ@Š£¾a®£Ű{ŶĕF‹ègLk{Y|¡ĜWƔtƬJÑxq‹±ĢN´‰òK‰™–LÈüD|s`ŋ’ć]ƒÃ‰`đŒMûƱ½~Y°ħ`ƏíW‰½eI‹½{aŸ‘OIrÏ¡ĕŇa†p†µÜƅġ‘œ^ÖÛbÙŽŏml½S‹êqDu[R‹ãË»†ÿw`»y‘¸_ĺę}÷`M¯ċfCVµqʼn÷Z•gg“Œ`d½pDO‡ÎCnœ^uf²ènh¼WtƏxRGg¦…pV„†FI±ŽG^ŒIc´ec‡’G•ĹÞ½sëĬ„h˜xW‚}Kӈe­Xsbk”F¦›L‘ØgTkïƵNï¶}Gy“w\\oñ¡nmĈzjŸ•@™Óc£»Wă¹Ój“_m»ˆ¹·~MvÛaqœ»­‰êœ’\\ÂoVnŽÓØÍ™²«‹bq¿efE „€‹Ĝ^Qž~ Évý‡ş¤²Į‰pEİ}zcĺƒL‹½‡š¿gņ›¡ýE¡ya£³t\\¨\\vú»¼§·Ñr_oÒý¥u‚•_n»_ƒ•At©Þűā§IVeëƒY}{VPÀFA¨ąB}q@|Ou—\\Fm‰QF݅Mw˜å}]•€|FmϋCaƒwŒu_p—¯sfÙgY…DHl`{QEfNysBЦzG¸rHe‚„N\\CvEsÐùÜ_·ÖĉsaQ¯€}_U‡†xÃđŠq›NH¬•Äd^ÝŰR¬ã°wećJEž·vÝ·Hgƒ‚éFXjÉê`|yŒpxkAwœWĐpb¥eOsmzwqChóUQl¥F^laf‹anòsr›EvfQdÁUVf—ÎvÜ^efˆtET¬ôA\\œ¢sJŽnQTjP؈xøK|nBz‰„œĞ»LY‚…FDxӄvr“[ehľš•vN”¢o¾NiÂxGp⬐z›bfZo~hGi’]öF|‰|Nb‡tOMn eA±ŠtPT‡LjpYQ|†SH††YĀxinzDJ€Ìg¢và¥Pg‰_–ÇzII‹€II•„£®S¬„Øs쐣ŒN"],["@@ifjN@s"]],"encodeOffsets":[[[109628,30765]],[[111725,31320]]]}},{"type":"Feature","id":"810000","properties":{"id":"810000","cp":[114.173355,22.320048],"name":"香港","childNum":5},"geometry":{"type":"MultiPolygon","coordinates":[["@@AlBk"],["@@mŽn"],["@@EpFo"],["@@ea¢pl¸Eõ¹‡hj[ƒ]ÔCΖ@lj˜¡uBXŸ…•´‹AI¹…[‹yDUˆ]W`çwZkmc–…M›žp€Åv›}I‹oJlcaƒfёKްä¬XJmРđhI®æÔtSHn€Eˆ„ÒrÈc"],["@@rMUw‡AS®€e"]],"encodeOffsets":[[[117111,23002]],[[117072,22876]],[[117045,22887]],[[116975,23082]],[[116882,22747]]]}},{"type":"Feature","id":"820000","properties":{"id":"820000","cp":[113.54909,22.198951],"name":"澳门","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@kÊd°å§s"],"encodeOffsets":[[116279,22639]]}}],"UTF8Encoding":true}); +})); diff --git a/src/pages/ElecEvaluation/Monitor/Home/index.tsx b/src/pages/ElecEvaluation/Monitor/Home/index.tsx new file mode 100644 index 0000000..1008172 --- /dev/null +++ b/src/pages/ElecEvaluation/Monitor/Home/index.tsx @@ -0,0 +1,1381 @@ +import { Col, Dropdown, Menu, Progress, Row, Space, Table } from 'antd'; +import { debounce } from 'lodash'; +import React, { useEffect, useMemo, useRef, useState } from 'react'; +import '../style.less' +import default_play from '@/assets/screen/default_play.png'; +import Frame10116 from '@/assets/monitor/Frame-10116.png'; +import Frame10117 from '@/assets/monitor/Frame-10117.png'; +import Frame10118 from '@/assets/monitor/Frame-10118.png'; +import Frame10119 from '@/assets/monitor/Frame-10119.png'; +import Frame10120 from '@/assets/monitor/Frame-10120.png'; +import Frame10121 from '@/assets/monitor/Frame-10121.png'; +import left from '@/assets/monitor/left.png'; +import right from '@/assets/monitor/right.png'; +import { CaretRightOutlined, DownOutlined } from '@ant-design/icons'; +import './china'; +import * as echarts from 'echarts'; +import { getActiveSupplierAPI, getAnnualAndTenderAgentAPI, getOpeningListAPI, getReviewDistributionAPI, getTodayOpeningAPI } from '../service'; +import moment from 'moment'; + +export const onCell = () => ({ className: "monitor-table-content" }); +export const onHeaderCell = () => ({ className: "monitor-table-header", }); +export const proviceEnum = { + "0011": "北京", + "0012": "天津", + "0013": "河北", + "0014": "山西", + "0015": "内蒙古", + "0021": "辽宁", + "0022": "吉林", + "0023": "黑龙江", + "0031": "上海", + "0032": "江苏", + "0033": "浙江", + "0034": "安徽", + "0035": "福建", + "0036": "江西", + "0037": "山东", + "0041": "河南", + "0042": "湖北", + "0043": "湖南", + "0044": "广东", + "0045": "广西", + "0046": "海南", + "0050": "重庆", + "0051": "四川", + "0052": "贵州", + "0053": "云南", + "0054": "西藏", + "0061": "陕西", + "0062": "甘肃", + "0063": "青海", + "0064": "宁夏", + "0065": "新疆", + "001000": "集团" +} +function dealWithData() { + let geoCoordMap = { + 长春: [125.35, 43.88, 20], + 沈阳: [123.38, 41.8, 19], + 集团: [116.26, 39.92, 18], + 北京: [116.46, 39.92, 17], + 哈尔滨: [126.63, 45.75, 16], + 石家庄: [114.48, 38.03, 15], + 天津: [117.2, 39.13, 14], + 重庆: [106.54, 29.59, 13], + 拉萨: [91.11, 29.97, 12], + 上海: [121.48, 31.22, 11], + 福州: [119.3, 26.08, 10], + 南宁: [108.33, 22.84, 10], + 广州: [113.23, 23.16, 10], + 太原: [112.53, 37.87, 10], + 昆明: [102.73, 25.04, 10], + 海口: [110.35, 20.02, 10], + 银川: [106.27, 38.47, 10], + 西宁: [101.74, 36.56, 10], + 呼和浩特: [111.65, 40.82, 10], + 成都: [104.06, 30.67, 10], + 西安: [108.95, 34.27, 10], + 南京: [118.78, 32.04, 10], + 贵阳: [106.71, 26.57, 10], + 乌鲁木齐: [87.68, 43.77, 10], + 杭州: [120.19, 30.26, 10], + 济南: [117, 36.65, 10], + 兰州: [103.73, 36.03, 10], + 郑州: [113.65, 34.76, 10], + 长沙: [113, 28.21, 10], + 合肥: [117.27, 31.86, 10], + 武汉: [114.31, 30.52, 10], + }; + let data = []; + for (let key in geoCoordMap) { + data.push({ name: key, value: geoCoordMap[key] }); + } + return data; +} + +const columns: any[] = [ + { + title: '序号', + width: '10%', + align: 'center', + onCell, + onHeaderCell, + render: (_: any, record: any, index: any) => index + 1, + }, + { + title: '省分', + dataIndex: 'province', + key: 'province', + width: '15%', + ellipsis: true, + onCell, + onHeaderCell, + render: (_: any, record: any) => proviceEnum[record.province], + }, + { + title: '项目名称', + dataIndex: 'projectName', + key: 'projectName', + ellipsis: true, + width: '20%', + onCell, + onHeaderCell, + }, + { + title: '预算金额', + dataIndex: 'bidSectContractPrice', + key: 'bidSectContractPrice', + width: '20%', + onCell, + onHeaderCell, + }, + { + title: '开标时间', + dataIndex: 'openTime', + key: 'openTime', + width: '15%', + onCell, + onHeaderCell, + }, + { + title: '是否重保', + dataIndex: 'isImportant', + key: 'isImportant', + width: '20%', + onCell, + onHeaderCell, + render: (_: any, record: any) => record.isImportant ? "是" : "否", + }, +]; + +const todayColumns: any[] = [ + { + title: '排序', + align: 'center', + onCell, + onHeaderCell, + render: (_: any, record: any, index: any) =>
{index + 1}
, + }, + { + title: '供应商', + dataIndex: 'companyName', + key: 'companyName', + width: '25%', + ellipsis: true, + onCell, + onHeaderCell, + }, + { + title: '中标数量', + dataIndex: 'selectCount', + key: 'selectCount', + ellipsis: true, + width: '20%', + onCell, + onHeaderCell, + }, + { + dataIndex: 'progress', + width: '23%', + onCell, + onHeaderCell, + render: (_: any, record: any, index: any) => + }, + { + title: '参加项目数量', + dataIndex: 'tenderCount', + key: 'tenderCount', + width: '22%', + onCell, + onHeaderCell, + }, +]; + +const tjColumns: any[] = [ + { + title: '排序', + align: 'center', + width: '10%', + onCell, + onHeaderCell, + render: (_: any, record: any, index: any) =>
{index + 1}
, + }, + { + title: '招标代理', + dataIndex: 'tender_agency_name', + key: 'tender_agency_name', + width: '25%', + ellipsis: true, + onCell, + onHeaderCell, + }, + { + title: '项目实施数', + dataIndex: 'num', + key: 'num', + ellipsis: true, + width: '20%', + onCell, + onHeaderCell, + }, + { + dataIndex: 'progress', + width: '25%', + onCell, + onHeaderCell, + render: (_: any, record: any, index: any) => + }, + { + title: '采购预算', + dataIndex: 'ys', + key: 'ys', + width: '20%', + onCell, + onHeaderCell, + }, +]; +const dataSource = [ + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "10:30", + vital: "1", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "10:30", + vital: "1", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "10:30", + vital: "1", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "10:30", + vital: "1", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + }, +] +const todayDataSource = [ + { + supplierName: "华为", + zbsl: "92", + progress: "80", + cjxmsl: "990", + zbdl: "公诚", + xmsss: "243", + cgys: "6,300" + }, + { + supplierName: "中兴", + zbsl: "83", + progress: "83", + cjxmsl: "680", + zbdl: "中招", + xmsss: "202", + cgys: "3,400" + }, + { + supplierName: "腾讯", + zbsl: "70", + progress: "70", + cjxmsl: "700", + zbdl: "国信", + xmsss: "198", + cgys: "3,800" + }, + { + supplierName: "华为", + zbsl: "92", + progress: "80", + cjxmsl: "990", + zbdl: "公诚", + xmsss: "243", + cgys: "6,300" + }, + { + supplierName: "中兴", + zbsl: "83", + progress: "83", + cjxmsl: "680", + zbdl: "中招", + xmsss: "202", + cgys: "3,400" + }, + { + supplierName: "腾讯", + zbsl: "70", + progress: "70", + cjxmsl: "700", + zbdl: "国信", + xmsss: "198", + cgys: "3,800" + }, + { + supplierName: "华为", + zbsl: "92", + progress: "80", + cjxmsl: "990", + zbdl: "公诚", + xmsss: "243", + cgys: "6,300" + }, + { + supplierName: "中兴", + zbsl: "83", + progress: "83", + cjxmsl: "680", + zbdl: "中招", + xmsss: "202", + cgys: "3,400" + }, + { + supplierName: "腾讯", + zbsl: "70", + progress: "70", + cjxmsl: "700", + zbdl: "国信", + xmsss: "198", + cgys: "3,800" + }, +] +//指标项 +export const MetricItems = (props: { title: string, number: string | number, unit: string, icon: string }) => { + return ( +
+ +
+ {props?.title}
+ {props?.number}{props?.unit} +
+
+ ) +} +//概览项 +export const OverviewItem = (props: { title: string, number: string | number, unit: string, icon: string }) => { + return ( +
+
+
{props?.title}
+ {props?.number}({props?.unit}) +
+ +
+ ) +} +//进度项 +export const ProgressItem = (props: { title: string, progress: number, leftTitle: string, leftNumber: string | number, rightTitle: string, rightNumber: string | number }) => { + const { title, progress, leftTitle, leftNumber, rightTitle, rightNumber } = props; + return ( +
+
+ {percent}%} width={60} /> +
{title}
+
+
+
+
{leftTitle}
+
{leftNumber}
+
+
+
{rightTitle}
+
{rightNumber}
+
+
+
+ ) +} +//下拉框封装 +export const SelectItem = (props: { onSelectChange: (value: string | number | null) => void, options: ({ label: string, value: string | number })[] }) => { + const { onSelectChange, options } = props; + const [selectedItem, setSelectItem] = useState("all"); + const menu = ( + + { setSelectItem("all"); onSelectChange(null); }}>全部 + {options?.map(item => ( + { setSelectItem(item.label); onSelectChange(item.value); }}>{item.label} + ))} + + ); + return ( + +
+ + + {selectedItem == "all" ? "全部" : selectedItem} + + + +
+
+ ) +} +//阶段卡片 +export const StageCard = (props: { percentage: string | number, total: string | number, firstTitle: string, secondTitle: string, thirdTitle: string, firstNumber: string | number, secondNumber: string | number, thirdNumber: string | number }) => { + const { percentage, total, firstTitle, secondTitle, thirdTitle, firstNumber, secondNumber, thirdNumber } = props; + return ( +
+
+ {/* 从这开始 */} +
+
+
+ + + + + + +
+ {/* 插槽内容 */} +
+ {percentage}% +
+
+
+
+
+ 标段总数 +
{total}
+
+
+
+
+ {firstTitle} + {firstNumber} +
+
+
+ {secondTitle} + {secondNumber} +
+
+
+ {thirdTitle} + {thirdNumber} +
+
+
+ ) +} +//滚动列表 +export const ScrollTable = (props: { dataSource: any[], columns: any[], rollTime?: number, rollNum?: number, ynum?: number }) => { + const { dataSource, columns, rollTime = 50, rollNum = 5, ynum = 300 } = props; + return ( +
+ { + return { + onClick: () => { }, + } + }} + /> + + ) +} +//统计列表 +export const StatisticTable = (props: { dataSource: any[], columns: any[], rollTime?: number, rollNum?: number, ynum?: number }) => { + const { dataSource, columns, rollTime = 50, rollNum = 5, ynum = 300 } = props; + return ( +
+
{ + return { + onClick: () => { }, + } + }} + /> + + ) +} +//标题 +export const ScreenLabel = (props: { title: string, extra?: JSX.Element | string }) => { + const { title, extra } = props; + return ( +
+
+
+
+ + {title} +
+
{extra}
+
+
+ ) +} + +//大标题和布局 +export const ScreenTitle = (props: { title: string, children: any }) => { + const { title, children } = props; + + //数据大屏自适应函数 + const handleScreenAuto = () => { + const designDraftHeight = 1080;//设计稿的高度 + //根据屏幕的变化适配的比例 + const scale = window.innerHeight / designDraftHeight; + //缩放比例 + (document.querySelector('#screen-main') as any).style.transform = `scale(${scale},${scale})`; + } + + //React的生命周期 如果你是vue可以放到mountd或created中 + useEffect(() => { + //初始化自适应 ----在刚显示的时候就开始适配一次 + handleScreenAuto(); + //绑定自适应函数 ---防止浏览器栏变化后不再适配 + window.addEventListener('resize', debounce(() => handleScreenAuto(), 500)); + //退出大屏后自适应消失 ---这是react的组件销毁生命周期,如果你是vue则写在deleted中。最好在退出大屏的时候接触自适应 + return () => { window.removeEventListener('resize', debounce(() => handleScreenAuto(), 500)) }; + }, []) + return ( +
+
+
+
+
+ {title} +
+
+ {children} +
+
+
+
+ {/*
+ +
+ + + */} + + ) +} + +/** + * echarts图表 + * @param props + * @returns + */ +export const GraphChart = (props: { type: string, chartData: any[], chartColor?: string, bgColor?: string }) => { + const { type, chartData, chartColor, bgColor } = props; + const random = Math.random().toString(); + useEffect(() => { + type EChartsOption = echarts.EChartsOption; + const chartDom = document.getElementById(random)!; + const myChart = echarts.init(chartDom); + let dataValue = dealWithData(); + let data1 = dataValue.splice(0, 3); + let index = 0; + const autoTooltip = () => { + const dataLength = data1.length; + setTimeout(() => { + myChart.dispatchAction({ + type: 'showTip', + seriesIndex: 2, + dataIndex: index, + position: (point: number[], params: any, dom: any, rect: any, size: { contentSize: number[] }) => { + return [point[0] + 20, point[1] - size.contentSize[1] + 45]; + }, + }); + index++; + if (index >= dataLength) { + index = 0; + } + autoTooltip(); + }, 10000); + } + const colors = ['#1B7EF2', '#29F1FA', '#1B7EF2']; + const categoryOption: EChartsOption = { + color: colors, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'cross' + } + }, + grid: { + right: '20%' + }, + legend: { + data: ['项目数量', '项目金额', '完成率'], + textStyle: { color: '#FFFFFF' }, + }, + xAxis: [ + { + type: 'category', + axisTick: { + alignWithLabel: true + }, + axisLabel: { color: '#FFFFFF' }, + // prettier-ignore + data: ['2022-8', '2022-9', '2022-10', '2022-11', '2022-12'], + } + ], + yAxis: [ + { + type: 'value', + name: '项目数量', + position: 'right', + alignTicks: true, + axisLine: { + show: true, + lineStyle: { + color: colors[0] + } + }, + axisLabel: { + formatter: '{value} 个' + } + }, + { + type: 'value', + name: '项目金额', + position: 'right', + alignTicks: true, + offset: 50, + axisLine: { + show: true, + lineStyle: { + color: colors[1] + } + }, + axisLabel: { + formatter: '{value} 亿元' + } + }, + { + type: 'value', + name: '完成率', + position: 'left', + alignTicks: true, + axisLine: { + show: true, + lineStyle: { + color: colors[2] + } + }, + axisLabel: { + formatter: '{value} %' + } + } + ], + series: [ + { + name: '项目数量', + type: 'bar', + tooltip: { + valueFormatter: function (value) { + return value + ' 个'; + } + }, + data: [ + 2.0, 4.9, 7.0, 23.2, 25.6 + ] + }, + { + name: '项目金额', + type: 'bar', + yAxisIndex: 1, + tooltip: { + valueFormatter: function (value) { + return value + ' 亿元'; + } + }, + data: [ + 2.6, 5.9, 9.0, 26.4, 28.7 + ] + }, + { + name: '完成率', + type: 'line', + smooth: true, + yAxisIndex: 2, + tooltip: { + valueFormatter: function (value) { + return value + ' %'; + } + }, + data: [2.0, 2.2, 3.3, 4.5, 6.3] + } + ] + }; + const pieOption: EChartsOption = { + legend: { + orient: 'vertical', + right: '3%', + top: 'middle', + textStyle: { color: '#fff' }, + icon: 'circle', + formatter: (name) => { + let total = 0; // 用于计算总数 + let target; // 遍历拿到数据 + for (let i = 0, chartLength = chartData.length; i < chartLength; i++) { + total += chartData[i].value; + if (chartData[i].name == name) { + target = chartData[i].value; + } + } + let v = total == 0 ? 0 : ((target / total) * 100).toFixed(0); + return `${name} ${target}个,占比${v}%`; + }, + }, + tooltip: { + trigger: 'item' + }, + series: [ + { + type: 'pie', + radius: ['40%', '70%'], + center: ['30%', '50%'], + avoidLabelOverlap: false, + label: { + show: false, + position: 'center' + }, + emphasis: { + label: { + show: true, + fontSize: '20px', + fontWeight: 'bold', + color: '#fff' + } + }, + labelLine: { + show: false + }, + data: chartData, + } + ] + }; + const mapOption: EChartsOption = { + tooltip: { + show: false + }, + geo: { + map: "china", + roam: false,// 一定要关闭拖拽 + zoom: 1.2, + label: { + show: false//不显示label + }, + emphasis: { + disabled: true,//关闭hover高亮 + }, + itemStyle: { + areaColor: "rgba(128,128,128,0)", + borderColor: "#29F0F9", + borderWidth: 1, //设置外层边框 + shadowBlur: 10, + shadowOffsetY: 10, + shadowOffsetX: 0, + shadowColor: "#0e6f7a" + } + }, + series: [ + { + type: "map", + map: "china", + roam: false, + zoom: 1.2, + showLegendSymbol: false, // 存在legend时显示 + label: { + show: false + }, + emphasis: { + disabled: true + }, + select: { + disabled: true + }, + itemStyle: { + areaColor: "rgba(128,128,128,0)", + borderColor: "#29F0F9", + borderWidth: 0.5 + } + }, + { + name: "", + type: "scatter", + coordinateSystem: "geo", + data: dataValue, + symbolSize: function (val) { + return Math.floor(val[2] / 1.2); + }, + symbol: "circle", + // symbolSize: 8, + tooltip: { + formatter(value) { + console.log("value", value) + // return value.data.name + "
" + "物流量:" + "22"; + return "
" + "物流量:" + "22"; + }, + show: true + }, + encode: { + value: 2 + }, + label: { + formatter: "{b}", + position: "right", + show: false + }, + itemStyle: { + color: "rgb(36,203,255)" + }, + emphasis: { + label: { + show: false + } + }, + select: { + disabled: true + }, + }, + { + name: "", + type: "effectScatter", + coordinateSystem: "geo", + data: data1, + symbolSize: 16, + // symbolSize: function (val) { + // return Math.floor(val[1] / 4); + // }, + tooltip: { + // formatter(value) { + // return value.data.name + "
" + "物流量:" + "22"; + // }, + show: true + }, + encode: { + value: 2 + }, + showEffectOn: "render", + rippleEffect: { + brushType: "stroke", + color: "rgb(36,203,255)", + period: 9, + scale: 5 + }, + label: { + formatter: "{b}", + position: "right", + show: true + }, + itemStyle: { + color: "rgb(36,203,255)", + shadowBlur: 2, + shadowColor: "#333" + }, + zlevel: 1 + } + ] + }; + const gaugeOption: EChartsOption = { + series: [ + { + type: 'gauge', + center: ['50%', '50%'], + radius: '70%', + itemStyle: { + color: chartColor + }, + progress: { + show: true, + width: 10 + }, + + pointer: { + show: false + }, + axisLine: { + lineStyle: { + width: 10, + color: [ + [1, bgColor as string] + ] + } + }, + axisTick: { + distance: -22, + splitNumber: 5, + length: 2, + lineStyle: { + width: 1, + color: chartColor + } + }, + splitLine: { + distance: -25, + length: 8, + lineStyle: { + width: 1, + color: chartColor + } + }, + axisLabel: { + show: false + }, + anchor: { + show: false + }, + title: { + show: false + }, + detail: { + valueAnimation: true, + width: '60%', + lineHeight: 40, + borderRadius: 8, + offsetCenter: [0, '-2%'], + fontSize: 20, + fontWeight: 'bolder', + formatter: '{value}%', + color: 'auto' + }, + data: chartData + }, + { + type: 'gauge', + center: ['50%', '50%'], + radius: '70%', + itemStyle: { + color: chartColor + }, + progress: { + show: false, + }, + + pointer: { + show: false + }, + axisLine: { + show: false + }, + axisTick: { + show: false + }, + splitLine: { + show: false + }, + axisLabel: { + show: false + }, + detail: { + show: false + }, + data: chartData + } + ] + } + const mapTwiceOption: EChartsOption = { + tooltip: { + show: false + }, + geo: { + map: "china", + roam: false,// 一定要关闭拖拽 + zoom: 1.2, + label: { + show: false//不显示label + }, + emphasis: { + disabled: true,//关闭hover高亮 + }, + itemStyle: { + areaColor: "rgba(128,128,128,0)", + borderColor: "#29F0F9", + borderWidth: 1, //设置外层边框 + shadowBlur: 10, + shadowOffsetY: 10, + shadowOffsetX: 0, + shadowColor: "#0e6f7a" + } + }, + series: [ + { + type: "map", + map: "china", + roam: false, + zoom: 1.2, + showLegendSymbol: false, // 存在legend时显示 + label: { + show: false + }, + emphasis: { + disabled: true + }, + select: { + disabled: true + }, + itemStyle: { + areaColor: "rgba(128,128,128,0)", + borderColor: "#29F0F9", + borderWidth: 0.5 + } + }, + { + name: "", + type: "scatter", + coordinateSystem: "geo", + data: dataValue, + symbolSize: function (val) { + return Math.floor(val[2] / 1.2); + }, + symbol: "circle", + // symbolSize: 8, + tooltip: { + // formatter(value) { + // return value.data.name + "
" + "物流量:" + "22"; + // }, + show: true + }, + encode: { + value: 2 + }, + label: { + formatter: "{b}", + position: "right", + show: false + }, + itemStyle: { + color: "rgb(36,203,255)" + }, + emphasis: { + label: { + show: false + } + }, + select: { + disabled: true + }, + }, + ] + }; + const data = []; + for (let i = 0; i < 10; ++i) { + data.push(Math.round(Math.random() * 200)); + } + const transverseBarOption: EChartsOption = { + xAxis: { + max: 'dataMax', + axisLabel: { color: '#FFFFFF' }, + splitLine: { + lineStyle: { + color: '#2c2d30', + type: 'dashed' + }, + } + }, + yAxis: { + type: 'category', + data: ['华为', '中兴', 'BYD', '云网', '阿里', '京东', '百度', '阿里', '京东', '百度'], + inverse: true, + axisLabel: { color: '#FFFFFF' }, + axisTick: { + show: false, + }, + }, + series: [ + { + realtimeSort: true, + type: 'bar', + barWidth: 30, + itemStyle: { + color: '#129bff', + }, + data: data, + label: { + show: true, + position: 'right', + color: '#fff' + } + } + ], + legend: { + show: true + }, + }; + const optionsMap = { + "pie": pieOption, + "map": mapOption, + "gauge": gaugeOption, + "mapTwice": mapTwiceOption, + "category": categoryOption, + "transverseBar": transverseBarOption, + } + const option: EChartsOption = optionsMap[type]; + myChart.setOption(option); + const resize = () => { + myChart && myChart.resize(); + }; + type == "map" && autoTooltip();//地图自动轮播tooltip + window.addEventListener("resize", debounce(() => resize(), 100)); + return () => { + window.removeEventListener("resize", debounce(() => resize(), 100)); + } + }, [chartData]) + return ( +
+ ) +} + +const MonitorHome: React.FC<{}> = () => { + //今日开标 + const [todayOpeningData, setTodayOpeningData] = useState(); + //地图数据 + const [reviewDistributionData, setReviewDistributionData] = useState([]); + //开标大厅资源 + const [openingList, setOpeningList] = useState([]); + //最上面三个指标和招标代理实施项目统计 + const [annualAndTenderAgentData, setAnnualAndTenderAgentData] = useState(); + //活跃供应商 + const [activeSupplierData, setActiveSupplierData] = useState([]); + const randomData = () => Math.round(Math.random() * 100); + const centerMapData = { "number": 3060, "list": [{ "provinceDictId": "0022", "provinceDictName": "吉林", "placeNumber": 6, "openingNumber": 30, "expertNumber": 60, "cumulativePlaceNumber": 95 }, { "provinceDictId": "0011", "provinceDictName": "北京", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": 86 }, { "provinceDictId": "0012", "provinceDictName": "天津", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": 77 }, { "provinceDictId": "0013", "provinceDictName": "河北", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0014", "provinceDictName": "山西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0015", "provinceDictName": "内蒙古", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0021", "provinceDictName": "辽宁", "placeNumber": 2, "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0023", "provinceDictName": "黑龙江", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0031", "provinceDictName": "上海", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0032", "provinceDictName": "江苏", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0033", "provinceDictName": "浙江", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0034", "provinceDictName": "安徽", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0035", "provinceDictName": "福建", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0036", "provinceDictName": "江西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0037", "provinceDictName": "山东", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0041", "provinceDictName": "河南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0042", "provinceDictName": "湖北", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0043", "provinceDictName": "湖南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0044", "provinceDictName": "广东", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0045", "provinceDictName": "广西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0046", "provinceDictName": "海南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0050", "provinceDictName": "重庆", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0051", "provinceDictName": "四川", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0052", "provinceDictName": "贵州", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0053", "provinceDictName": "云南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0054", "provinceDictName": "西藏", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0061", "provinceDictName": "陕西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0062", "provinceDictName": "甘肃", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0063", "provinceDictName": "青海", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0064", "provinceDictName": "宁夏", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0065", "provinceDictName": "新疆", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }] } + const mapChart = useMemo(() => { + return centerMapData?.list && + }, [centerMapData]) + //获取今日开标 + const getTodayOpening = () => { + getTodayOpeningAPI({ pageSize: 10, pageNo: 1 }).then(res => { + if (res?.code == 200) { + setTodayOpeningData(res?.data); + } + }) + } + //获取中间地图 + const getReviewDistribution = () => { + getReviewDistributionAPI().then(res => { + if (res?.code == 200) { + setReviewDistributionData(res?.data); + } + }) + } + //获取开标大厅资源 + const getOpeningList = () => { + getOpeningListAPI({ openDate: moment().format("YYYY-MM-DD") }).then(res => { + if (res?.code == 200) { + setOpeningList(res?.data); + } + }) + } + //上面前三个指标和招标代理实施项目统计 + const getAnnualAndTenderAgent = () => { + getAnnualAndTenderAgentAPI().then(res => { + if (res?.code == 200) { + setAnnualAndTenderAgentData(res?.data); + } + }) + } + //活跃供应商 + const getActiveSupplier = () => { + getActiveSupplierAPI().then(res => { + if (res?.code == 200) { + setActiveSupplierData(res?.data); + } + }) + } + useEffect(() => { + getTodayOpening(); + getReviewDistribution(); + getOpeningList(); + getAnnualAndTenderAgent(); + getActiveSupplier(); + }, []) + + return ( + +
+ {/* */} + +
+ + + + + + + + + +
+ 标段总数  {todayOpeningData?.sectionNumber}  已完成  {todayOpeningData?.complete}  完成率  {todayOpeningData?.rate}} /> +
+ +
+ +
+ +
+
+ + +
+
+ 今日评审分布 +
+
+ {mapChart} +
+ +
+ {/*
*/} + + {[1, 2, 3].map((item, index) => ( +
+ {/*
*/} +
+ +
{index == 0 ? "未开始" : index == 1 ? "评标中" : "已结束"}
+
+
+ 吉林省XXX项目 +
+ {/*
*/} + + + ))} + + {/* */} + + + + +
+ +
+
+
+
上午
+
MORNING
+
+ {openingList.slice(0, 2).map(item => ( +
+
+
{item.startTime}-{item.endTime}
+
{item.num}/{item.max}
+
+
+ ))} +
+
+
+
下午
+
AFTERNOON
+
+ {openingList.slice(2, 5).map(item => ( +
+
+
{item.startTime}-{item.endTime}
+
{item.num}/{item.max}
+
+
+ ))} +
+
+ +
+ +
+
+ + + + ); +}; + +export default MonitorHome; diff --git a/src/pages/ElecEvaluation/Monitor/OpenToday/index.tsx b/src/pages/ElecEvaluation/Monitor/OpenToday/index.tsx new file mode 100644 index 0000000..9cfdb53 --- /dev/null +++ b/src/pages/ElecEvaluation/Monitor/OpenToday/index.tsx @@ -0,0 +1,258 @@ +import { Col, Progress, Row, Table } from 'antd'; +import { debounce } from 'lodash'; +import React, { useEffect, useMemo, useRef, useState } from 'react'; +import '../style.less' +import { GraphChart, onCell, onHeaderCell, OverviewItem, ProgressItem, proviceEnum, ScreenLabel, ScreenTitle, ScrollTable, StageCard, StatisticTable } from '../Home'; +import Circle3197 from '@/assets/monitor/circle-3197.png'; +import Circle3198 from '@/assets/monitor/circle-3198.png'; +import Circle3199 from '@/assets/monitor/circle-3199.png'; +import Circle3200 from '@/assets/monitor/circle-3200.png'; +import { getDecryptSuccessRateTodayAPI, getTodayInfoAPI } from '../service'; + +const columns: any[] = [ + { + title: '省分', + dataIndex: 'provinceDictId', + key: 'provinceDictId', + width: '20%', + ellipsis: true, + onCell, + onHeaderCell, + render: (_: any, record: any) => proviceEnum[record.provinceDictId], + }, + { + title: '项目名称', + dataIndex: 'projectName', + key: 'projectName', + ellipsis: true, + width: '30%', + onCell, + onHeaderCell, + }, + { + title: '采购预算', + dataIndex: 'number', + key: 'number', + width: '30%', + onCell, + onHeaderCell, + }, + { + title: '开标时间', + dataIndex: 'time', + key: 'time', + width: '20%', + onCell, + onHeaderCell, + }, +]; +const reiColumns: any[] = [ + { + title: '省分', + dataIndex: 'provinceDictId', + key: 'provinceDictId', + width: '20%', + ellipsis: true, + onCell, + onHeaderCell, + render: (_: any, record: any) => proviceEnum[record.provinceDictId], + }, + { + title: '项目名称', + dataIndex: 'projectName', + key: 'projectName', + ellipsis: true, + width: '20%', + onCell, + onHeaderCell, + }, + { + title: '采购预算', + dataIndex: 'number', + key: 'number', + width: '20%', + onCell, + onHeaderCell, + }, + { + title: '开标时间', + dataIndex: 'time', + key: 'time', + width: '20%', + onCell, + onHeaderCell, + }, + { + title: '状态', + dataIndex: 'time', + key: 'time', + width: '20%', + onCell, + onHeaderCell, + }, +]; +const dataSource = [ + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "10:30", + vital: "1", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "10:30", + vital: "1", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "10:30", + vital: "1", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "10:30", + vital: "1", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + }, + { + provinceDictId: "0012", + projectName: "天津设备采购", + number: "320万", + time: "9:30", + vital: "0", + }, +] + +const OpenToday: React.FC<{}> = () => { + //今日开标-评标阶段,评标及时率 + const [todayInfoData, setTodayInfoData] = useState(); + //今日开标-解密成功率 + const [decryptSuccessRateTodayData, setDecryptSuccessRateTodayData] = useState(); + //今日开标-评标阶段,评标及时率 + const getTodayInfo = () => { + getTodayInfoAPI().then(res => { + if (res?.code == 200) { + setTodayInfoData(res?.data); + } + }) + } + //今日开标-解密成功率 + const getDecryptSuccessRateToday = () => { + getDecryptSuccessRateTodayAPI().then(res => { + if (res?.code == 200) { + setDecryptSuccessRateTodayData(res?.data); + } + }) + } + useEffect(() => { + getTodayInfo(); + getDecryptSuccessRateToday(); + }, []) + return ( + +
+ +
+
+ +
+ +
+
+ + +
+ + + +
+
+ + + +
+ + +
+ +
+ +
+
+ + + + + + +
+ +
+ +
+ +
+ +
+ + + + ); +}; + +export default OpenToday; diff --git a/src/pages/ElecEvaluation/Monitor/Supplier/index.tsx b/src/pages/ElecEvaluation/Monitor/Supplier/index.tsx new file mode 100644 index 0000000..4eb0a31 --- /dev/null +++ b/src/pages/ElecEvaluation/Monitor/Supplier/index.tsx @@ -0,0 +1,284 @@ +import { Col, Progress, Row, Table } from 'antd'; +import { debounce } from 'lodash'; +import React, { useEffect, useMemo, useRef, useState } from 'react'; +import '../style.less' +import { GraphChart, MetricItems, onCell, onHeaderCell, OverviewItem, proviceEnum, ScreenLabel, ScreenTitle, ScrollTable, SelectItem, StatisticTable } from '../Home'; +import Frame10116 from '@/assets/monitor/Frame-10116.png'; +import Frame10121 from '@/assets/monitor/Frame-10121.png'; +import { getActiveSupplierRankAPI, getProvinceActiveSupplierInfoAPI, getSupplierInfoAPI, getSupplierCountAPI } from '../service'; + +const columns: any[] = [ + { + title: '排序', + align: 'center', + width: '10%', + onCell, + onHeaderCell, + render: (_: any, record: any, index: any) =>
{index + 1}
, + }, + { + title: '供应商', + dataIndex: 'companyName', + key: 'companyName', + width: '25%', + ellipsis: true, + onCell, + onHeaderCell, + }, + { + title: '投标次数', + dataIndex: 'tenderCount', + key: 'tenderCount', + ellipsis: true, + width: '20%', + onCell, + onHeaderCell, + }, + { + dataIndex: 'progress', + width: '25%', + onCell, + onHeaderCell, + render: (_: any, record: any, index: any) => + }, + { + title: '中选次数', + dataIndex: 'selectCount', + key: 'selectCount', + width: '20%', + onCell, + onHeaderCell, + }, +]; +const dataSource = [ + { + id: '1', + supplier: "阿里", + tbcs: "78", + progress: "100", + zxcs: "90", + }, + { + id: '2', + supplier: "阿里", + tbcs: "78", + progress: "100", + zxcs: "90", + }, + { + id: '3', + supplier: "阿里", + tbcs: "78", + progress: "100", + zxcs: "90", + }, + { + id: '4', + supplier: "华为", + tbcs: "78", + progress: "70", + zxcs: "90", + }, + { + id: '5', + supplier: "华为", + tbcs: "78", + progress: "70", + zxcs: "90", + }, + { + id: '6', + supplier: "华为", + tbcs: "78", + progress: "70", + zxcs: "90", + }, + { + id: '7', + supplier: "百度", + tbcs: "78", + progress: "50", + zxcs: "90", + }, + { + id: '8', + supplier: "百度", + tbcs: "78", + progress: "50", + zxcs: "90", + }, + { + id: '9', + supplier: "百度", + tbcs: "78", + progress: "50", + zxcs: "90", + }, + { + id: '10', + supplier: "京东", + tbcs: "78", + progress: "30", + zxcs: "90", + }, + { + id: '11', + supplier: "京东", + tbcs: "78", + progress: "30", + zxcs: "90", + }, + { + id: '12', + supplier: "京东", + tbcs: "78", + progress: "30", + zxcs: "90", + }, + { + id: '10', + supplier: "中兴", + tbcs: "78", + progress: "30", + zxcs: "90", + }, + { + id: '11', + supplier: "中兴", + tbcs: "78", + progress: "30", + zxcs: "90", + }, + { + id: '12', + supplier: "中兴", + tbcs: "78", + progress: "30", + zxcs: "90", + }, + { + id: '10', + supplier: "中兴", + tbcs: "78", + progress: "30", + zxcs: "90", + }, + { + id: '11', + supplier: "中兴", + tbcs: "78", + progress: "30", + zxcs: "90", + }, + { + id: '12', + supplier: "中兴", + tbcs: "78", + progress: "30", + zxcs: "90", + }, +] + +const Supplier: React.FC<{}> = () => { + //上面六个指标 + const [supplierInfoData, setSupplierInfoData] = useState(); + //全国活跃供应商排名 + const [activeSupplierRankData, setActiveSupplierRankData] = useState([]); + //供应商概况-省份活跃供应商 + const [provinceActiveSupplierInfoData, setProvinceActiveSupplierInfoData] = useState(); + //活跃供应商 + const [supplierCount, setSupplierCount] = useState([]); + const transverseBarChart = useMemo(() => { + return true && + }, []) + const randomData = () => Math.round(Math.random() * 100); + const centerMapData = { "number": 3060, "list": [{ "provinceDictId": "0022", "provinceDictName": "吉林", "placeNumber": 6, "openingNumber": 30, "expertNumber": 60, "cumulativePlaceNumber": 95 }, { "provinceDictId": "0011", "provinceDictName": "北京", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": 86 }, { "provinceDictId": "0012", "provinceDictName": "天津", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": 77 }, { "provinceDictId": "0013", "provinceDictName": "河北", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0014", "provinceDictName": "山西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0015", "provinceDictName": "内蒙古", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0021", "provinceDictName": "辽宁", "placeNumber": 2, "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0023", "provinceDictName": "黑龙江", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0031", "provinceDictName": "上海", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0032", "provinceDictName": "江苏", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0033", "provinceDictName": "浙江", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0034", "provinceDictName": "安徽", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0035", "provinceDictName": "福建", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0036", "provinceDictName": "江西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0037", "provinceDictName": "山东", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0041", "provinceDictName": "河南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0042", "provinceDictName": "湖北", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0043", "provinceDictName": "湖南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0044", "provinceDictName": "广东", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0045", "provinceDictName": "广西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0046", "provinceDictName": "海南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0050", "provinceDictName": "重庆", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0051", "provinceDictName": "四川", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0052", "provinceDictName": "贵州", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0053", "provinceDictName": "云南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0054", "provinceDictName": "西藏", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0061", "provinceDictName": "陕西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0062", "provinceDictName": "甘肃", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0063", "provinceDictName": "青海", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0064", "provinceDictName": "宁夏", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0065", "provinceDictName": "新疆", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }] } + const mapChart = useMemo(() => { + return centerMapData?.list && + }, [centerMapData]) + + //上面六个指标 + const getSupplierInfo = () => { + getSupplierInfoAPI().then(res => { + if (res?.code == 200) { + setSupplierInfoData(res?.data); + } + }) + } + //全国活跃供应商排名 + const getActiveSupplierRank = () => { + getActiveSupplierRankAPI().then(res => { + if (res?.code == 200) { + setActiveSupplierRankData(res?.data); + } + }) + } + //供应商概况-省份活跃供应商 + const getProvinceActiveSupplierInfo = () => { + getProvinceActiveSupplierInfoAPI().then(res => { + if (res?.code == 200) { + setProvinceActiveSupplierInfoData(res?.data); + } + }) + } + //供应商概况-参与供应商 + const getSupplierCount = () => { + getSupplierCountAPI({ type: "year" }).then(res => { + if (res?.code == 200) { + setSupplierCount(res?.data); + } + }) + } + useEffect(() => { + getSupplierInfo(); + getActiveSupplierRank(); + getProvinceActiveSupplierInfo(); + getSupplierCount(); + }, []) + return ( + +
+
+ + + + + + +
+
+ +
+
+ +
+ 交易方式    { console.log(value) }} /> +
+
+ +
+
+ + +
+ 本年 | 本月    投标次数 | 中选次数 | 中选金额    辽宁} /> + +
+
+ {mapChart} +
+ + +
+ {transverseBarChart} +
+ + + + + + + ); +}; + +export default Supplier; diff --git a/src/pages/ElecEvaluation/Monitor/TenderAgent/index.tsx b/src/pages/ElecEvaluation/Monitor/TenderAgent/index.tsx new file mode 100644 index 0000000..61c2741 --- /dev/null +++ b/src/pages/ElecEvaluation/Monitor/TenderAgent/index.tsx @@ -0,0 +1,224 @@ +import { Col, Progress, Row, Table } from 'antd'; +import { debounce } from 'lodash'; +import React, { useEffect, useMemo, useRef, useState } from 'react'; +import '../style.less' +import { GraphChart, onCell, onHeaderCell, OverviewItem, proviceEnum, ScreenLabel, ScreenTitle, ScrollTable, StatisticTable, vitalEnum } from '../Home'; +import Circle3197 from '@/assets/monitor/circle-3197.png'; +import Circle3198 from '@/assets/monitor/circle-3198.png'; +import Circle3199 from '@/assets/monitor/circle-3199.png'; +import Circle3200 from '@/assets/monitor/circle-3200.png'; + +const columns: any[] = [ + { + title: '代理机构', + dataIndex: 'dljg', + key: 'dljg', + width: '20%', + ellipsis: true, + onCell, + onHeaderCell, + }, + { + title: '项目数量总计(个)', + dataIndex: 'xmslzj', + key: 'xmslzj', + width: '20%', + onCell, + onHeaderCell, + }, + { + title: '项目金额总计(亿元)', + dataIndex: 'xmjezj', + key: 'xmjezj', + width: '20%', + onCell, + onHeaderCell, + }, + { + title: '平均完成率(%)', + dataIndex: 'pjwcl', + key: 'pjwcl', + width: '20%', + onCell, + onHeaderCell, + }, + { + title: '平均满意度(%)', + dataIndex: 'pjmyd', + width: '20%', + onCell, + onHeaderCell, + }, +]; +const dataSource = [ + { + key: '1', + dljg: "河南省信息咨询设计研究有限公司", + xmslzj: "325", + xmjezj: "565566", + pjwcl: "20", + pjmyd: "60", + }, + { + key: '2', + dljg: "河南省信息咨询设计研究有限公司", + xmslzj: "325", + xmjezj: "565566", + pjwcl: "20", + pjmyd: "60", + }, + { + key: '3', + dljg: "河南省信息咨询设计研究有限公司", + xmslzj: "325", + xmjezj: "565566", + pjwcl: "20", + pjmyd: "60", + }, + { + key: '4', + dljg: "河南省信息咨询设计研究有限公司", + xmslzj: "325", + xmjezj: "565566", + pjwcl: "20", + pjmyd: "60", + }, + { + key: '5', + dljg: "河南省信息咨询设计研究有限公司", + xmslzj: "325", + xmjezj: "565566", + pjwcl: "20", + pjmyd: "60", + }, + { + key: '6', + dljg: "河南省信息咨询设计研究有限公司", + xmslzj: "325", + xmjezj: "565566", + pjwcl: "20", + pjmyd: "60", + }, + { + key: '7', + dljg: "河南省信息咨询设计研究有限公司", + xmslzj: "325", + xmjezj: "565566", + pjwcl: "20", + pjmyd: "60", + }, + { + key: '8', + dljg: "河南省信息咨询设计研究有限公司", + xmslzj: "325", + xmjezj: "565566", + pjwcl: "20", + pjmyd: "60", + }, + { + key: '9', + dljg: "河南省信息咨询设计研究有限公司", + xmslzj: "325", + xmjezj: "565566", + pjwcl: "20", + pjmyd: "60", + }, + { + key: '10', + dljg: "河南省信息咨询设计研究有限公司", + xmslzj: "325", + xmjezj: "565566", + pjwcl: "20", + pjmyd: "60", + }, + { + key: '11', + dljg: "河南省信息咨询设计研究有限公司", + xmslzj: "325", + xmjezj: "565566", + pjwcl: "20", + pjmyd: "60", + }, + { + key: '12', + dljg: "河南省信息咨询设计研究有限公司", + xmslzj: "325", + xmjezj: "565566", + pjwcl: "20", + pjmyd: "60", + }, +] + +const TenderAgent: React.FC<{}> = () => { + const randomData = () => Math.round(Math.random() * 100); + const gaugeChartData = [{ value: 20 }] + const gaugeGreenChart = useMemo(() => { + return gaugeChartData && + }, [gaugeChartData]) + const gaugeYellowChart = useMemo(() => { + return gaugeChartData && + }, [gaugeChartData]) + const gaugeBlueChart = useMemo(() => { + return gaugeChartData && + }, [gaugeChartData]) + const categoryChart = useMemo(() => { + return + }, []) + const centerMapData = { "number": 3060, "list": [{ "provinceDictId": "0022", "provinceDictName": "吉林", "placeNumber": 6, "openingNumber": 30, "expertNumber": 60, "cumulativePlaceNumber": 95 }, { "provinceDictId": "0011", "provinceDictName": "北京", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": 86 }, { "provinceDictId": "0012", "provinceDictName": "天津", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": 77 }, { "provinceDictId": "0013", "provinceDictName": "河北", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0014", "provinceDictName": "山西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0015", "provinceDictName": "内蒙古", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0021", "provinceDictName": "辽宁", "placeNumber": 2, "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0023", "provinceDictName": "黑龙江", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0031", "provinceDictName": "上海", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0032", "provinceDictName": "江苏", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0033", "provinceDictName": "浙江", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0034", "provinceDictName": "安徽", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0035", "provinceDictName": "福建", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0036", "provinceDictName": "江西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0037", "provinceDictName": "山东", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0041", "provinceDictName": "河南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0042", "provinceDictName": "湖北", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0043", "provinceDictName": "湖南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0044", "provinceDictName": "广东", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0045", "provinceDictName": "广西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0046", "provinceDictName": "海南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0050", "provinceDictName": "重庆", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0051", "provinceDictName": "四川", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0052", "provinceDictName": "贵州", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0053", "provinceDictName": "云南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0054", "provinceDictName": "西藏", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0061", "provinceDictName": "陕西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0062", "provinceDictName": "甘肃", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0063", "provinceDictName": "青海", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0064", "provinceDictName": "宁夏", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0065", "provinceDictName": "新疆", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }] } + const mapChart = useMemo(() => { + return centerMapData?.list && + }, [centerMapData]) + return ( + +
+ +
+ +
+ + + + +
+ +
+ +
+
+ {gaugeGreenChart} +
代理项目完成率
+
+
+ {gaugeYellowChart} +
代理项目满意度
+
+
+ {gaugeBlueChart} +
代理项目归档率
+
+
+ + + + +
+ +
+ {categoryChart} +
+
+ +
+ +
+ +
+ {mapChart} +
+ + + + ); +}; + +export default TenderAgent; diff --git a/src/pages/ElecEvaluation/Monitor/service.ts b/src/pages/ElecEvaluation/Monitor/service.ts new file mode 100644 index 0000000..6db1ec9 --- /dev/null +++ b/src/pages/ElecEvaluation/Monitor/service.ts @@ -0,0 +1,156 @@ +import request from '@/utils/request'; + +/** + * 首页-今日开标 + * @param data + */ +export async function getTodayOpeningAPI(data: any) { + return request('/api/biz-service-ebtp-statistics/opening/getTodayOpening', { + method: 'POST', + data: { ...data }, + }); +} +/** + * 首页-地图 + * @param data + */ +export async function getReviewDistributionAPI() { + return request('/api/biz-service-ebtp-statistics/opening/getProvincesList', { + method: 'GET', + }); +} + +/** + * 首页-开标大厅资源 + * @param data + */ +export async function getOpeningListAPI(data: any) { + return request('/api/biz-service-ebtp-statistics/opening/openList', { + method: 'POST', + data: { ...data }, + }); +} + +/** + * 首页-上面前三个指标和招标代理实施项目统计 + * @param data + */ +export async function getAnnualAndTenderAgentAPI() { + return request('/api/biz-service-ebtp-statistics/indexMonitor/getProjectData', { + method: 'GET', + }); +} + +/** + * 首页-活跃供应商 + * @param data + */ +export async function getActiveSupplierAPI() { + return request('/api/biz-service-ebtp-statistics/indexMonitor/indexQuerySupplier', { + method: 'GET', + }); +} + +/** + * 异常监控-超过1小时未开标数量 + */ +export async function getNoOpenNumberAPI() { + return request('/api/biz-service-ebtp-statistics/opening/noOpenNumber', { + method: 'POST', + }); +} + +/** + * 异常监控-开启评审后3日未结束评标 + */ +export async function getThreeDayNoEndAPI() { + return request('/api/biz-service-ebtp-statistics/api/evaluation/exception/threedaynoend', { + method: 'GET', + }); +} + +/** + * 异常监控-超过1小时未开标数量-列表 + * @param data + */ +export async function getNoOpenListAPI(data: any) { + return request('/api/biz-service-ebtp-statistics/opening/noOpenList', { + method: 'POST', + data: { ...data }, + }); +} + +/** + * 异常监控-开标后超过6小时未开启评审室-列表 + * @param data + */ +export async function getNoOpenAssessListAPI(data: any) { + return request('/api/biz-service-ebtp-statistics/opening/noOpenAssessList', { + method: 'POST', + data: { ...data }, + }); +} + +/** + * 异常监控-解密异常、mac地址相同及相关项目列表 + */ +export async function getDecryptDataAPI() { + return request('/api/biz-service-ebtp-statistics/exceptionMonitor/getDecryptData', { + method: 'GET', + }); +} + +/** + * 今日开标-评标阶段,评标及时率 + */ +export async function getTodayInfoAPI() { + return request('/api/biz-service-ebtp-statistics/api/evaluation/today/info', { + method: 'GET', + }); +} + +/** + * 今日开标-解密成功率 + */ +export async function getDecryptSuccessRateTodayAPI() { + return request('/api/biz-service-ebtp-statistics/exceptionMonitor/getDecryptSuccessRateToday', { + method: 'GET', + }); +} + +/** + * 供应商概况-上面六个指标 + */ +export async function getSupplierInfoAPI() { + return request('/api/biz-service-ebtp-statistics/v1/tenderMonitor/supplierInfo', { + method: 'GET', + }); +} + +/** + * 供应商概况-全国活跃供应商排名 + */ +export async function getActiveSupplierRankAPI() { + return request('/api/biz-service-ebtp-statistics/v1/tenderMonitor/activeSupplierRank', { + method: 'GET', + }); +} + +/** + * 供应商概况-省份活跃供应商 + */ +export async function getProvinceActiveSupplierInfoAPI() { + return request('/api/biz-service-ebtp-statistics/v1/tenderMonitor/provinceActiveSupplierInfo', { + method: 'GET', + }); +} + +/** + * 供应商概况-参与供应商 + */ +export async function getSupplierCountAPI(params: any) { + return request('/api/biz-service-ebtp-statistics/v1/tenderMonitor/supplierCount', { + method: 'GET', + params: { ...params } + }); +} \ No newline at end of file diff --git a/src/pages/ElecEvaluation/Monitor/style.less b/src/pages/ElecEvaluation/Monitor/style.less new file mode 100644 index 0000000..1ed403b --- /dev/null +++ b/src/pages/ElecEvaluation/Monitor/style.less @@ -0,0 +1,941 @@ +@import '~antd/lib/style/themes/default.less'; + +.flex-center { + display: flex; + justify-content: center; + align-items: center; +} + +.screen-global { + width: 100%; + height: 100%; + background: url("~@/assets/monitor/background-3.jpg") left top no-repeat; + background-size: cover; + // background-color: #0a0c11; + + .screen-wrapper { + height: 100vh; + width: calc(100vh * 16 / 9); + overflow: hidden; + margin: 0 auto; + position: relative; + z-index: 1; + + .screen-main { + display: inline-block; + width: 1920px; //设计稿的宽度 + height: 1080px; //设计稿的高度 + transform-origin: 0 0; + position: absolute; + background: rgb(0, 0, 0); + // left: 50%; + } + + } + + + .screen-bg-title { + position: absolute; + top: 38px; + z-index: 0; + + .screen-bg-img { + width: 100%; + height: 11px; + } + } +} + + +.monitor-main { + height: 100%; + // background-color: #0a0c11; + background: url("~@/assets/monitor/background-3.jpg") left top no-repeat; + background-size: cover; + + .monitor-title { + background: url("~@/assets/monitor/global-title-bg.png") left top no-repeat; + background-size: 100% 100%; + height: 114px; + width: 100%; + text-align: center; + + &>span { + font-size: 38px; + font-weight: bold; + line-height: 72px; + letter-spacing: 3.2px; + text-indent: 3.2px; + color: #FFFFFF; + } + } + + .monitor-flex { + width: 1860px; + // height: 100%; + margin: -24px auto 0; + + .top-main { + width: 100%; + margin-bottom: 40px; + + .monitor-top-main-flex { + margin-left: 80px; + margin-top: 20px; + } + + .monitor-top-space-flex { + margin-left: 0; + margin-top: 20px; + display: flex; + justify-content: space-between; + + .monitor-gauge { + width: 200px; + height: 100%; + text-align: center; + + &>div>span { + font-size: 18px; + font-weight: normal; + line-height: 31px; + letter-spacing: 0px; + color: #FFFFFF; + } + } + } + + .monitor-today-overview-width { + .line-overview-main { + padding: 18px 18px 12px 18px; + } + + .line-overview-content { + width: 132px; + } + } + + .monitor-top-space-top { + margin-top: 20px; + } + } + + .top-main-bottom { + margin-bottom: 20px; + } + + .screen-label-main { + height: 33.85px; + display: flex; + justify-content: flex-start; + + .left-rect-1 { + width: 4px; + height: 33.85px; + opacity: 1; + background: #1B7EF2; + } + + .right-rect-2 { + height: 33.85px; + background: #12304eb3; + margin-left: 2px; + opacity: 1; + width: calc(100% - 6px); + display: flex; + justify-content: space-between; + align-items: center; + + .right-rect-icon { + height: 6.5px; + opacity: 1; + color: #29F1FA; + position: relative; + top: -2px; + margin-left: 4px; + } + + .monitor-label { + font-size: 20px; + font-weight: normal; + line-height: 34px; + letter-spacing: 0px; + color: rgba(255, 255, 255, 0.87); + margin-left: 12px; + } + + .monitor-label-right { + font-size: 16px; + font-weight: normal; + line-height: 31px; + letter-spacing: 0px; + color: #29F1FA; + margin-right: 24px; + } + } + } + + .monitor-left-main { + margin-right: 16px; + + .active-supplier { + margin-top: 10px; + height: 390px; + } + + .scroll-table { + height: 320px; + margin-top: 20px; + margin-bottom: 20px; + } + + .monitor-supplier-select-label { + font-size: 14px; + font-weight: normal; + line-height: 31px; + letter-spacing: 0px; + color: #FFFFFF; + } + } + + .monitor-center-main { + margin: 0 8px; + + .review-distribution { + height: 540px; + // background-color: rgb(10, 36, 83); + background-clip: border-box; + margin-top: 20px; + margin-bottom: 20px; + filter: blur(0px); + } + + .review-distribution-title { + height: 33.85px; + + &>span { + font-size: 20px; + font-weight: normal; + line-height: 34px; + letter-spacing: 0px; + color: rgba(255, 255, 255, 0.87); + margin-left: 16px; + } + } + + .bid-evaluation { + height: 170px; + background-clip: border-box; + filter: blur(0px); + + .card-default-01 { + background-image: url('~@/assets/screen/default_pic01.jpg'); + background-repeat: no-repeat; + background-size: 100% 100%; + height: 120px; + margin-top: 20px; + position: relative; + .flex-center; + + &>img { + height: 50%; + } + + .card-text-orange { + font-family: "Microsoft Yahei", Arial, sans-serif; + font-size: 14px; + color: rgb(245, 166, 35); + font-weight: normal; + justify-content: center; + text-align: center; + position: absolute; + top: 2px; + left: 6px; + } + + .card-text-green { + .card-text-orange; + color: rgb(126, 211, 33); + } + + .card-text-purple { + .card-text-orange; + color: rgb(189, 16, 224); + } + } + + .evaluation-text { + font-size: 16px; + font-weight: normal; + line-height: 16px; + letter-spacing: 0px; + color: rgba(255, 255, 255, 0.87); + text-align: center; + margin-top: 12px; + } + } + } + + .monitor-right-main { + margin-left: 16px; + + .monitor-bid-opening { + background-clip: border-box; + filter: blur(0px); + margin-top: 20px; + margin-bottom: 20px; + + .bid-opening-top { + height: 155px; + background-color: #12304e66; + padding: 18px 16px; + display: flex; + justify-content: flex-start; + align-items: center; + + .bid-opening-text { + width: 70px; + text-align: center; + + &>div:first-child { + font-size: 18px; + font-weight: 500; + line-height: 32px; + letter-spacing: 0px; + color: #FFFFFF; + border-bottom: 1px solid rgba(255, 255, 255, 0.3); + } + + &>div:last-child { + font-size: 10px; + font-weight: normal; + line-height: 14px; + text-align: center; + letter-spacing: 0px; + color: rgba(255, 255, 255, 0.5); + margin-top: 4px; + } + } + + .bid-opening-card { + width: 152px; + height: 100%; + margin-left: 16px; + .flex-center; + + &>div>div:first-child { + font-size: 14px; + // font-weight: bold; + line-height: 22px; + letter-spacing: 0px; + text-align: center; + color: rgba(255, 255, 255, 0.6); + } + + &>div>div:last-child { + font-size: 20px; + font-weight: 500; + line-height: 20px; + text-align: center; + letter-spacing: 0px; + color: #FFFFFF; + } + } + + .bid-opening-card-first { + background: #1B7EF2; + } + + .bid-opening-card-second { + background: rgba(27, 126, 242, 0.6); + } + + .bid-opening-card-third { + background: rgba(27, 126, 242, 0.3); + } + } + + .bid-opening-end { + margin-top: 10px; + } + + } + + .tender-agent { + height: 390px; + margin-top: 10px; + } + } + + .monitor-exception-card { + margin-top: 20px; + margin-bottom: 20px; + } + + .monitor-tender-card { + margin-top: 20px; + } + + .monitor-supplier-card { + margin-top: 20px; + text-align: right; + } + + .monitor-category-style { + height: 350px; + } + + .monitor-tender-map { + margin-top: 20px; + height: 690px; + } + + .monitor-supplier-rank { + margin-top: 20px; + height: 760px; + } + } +} + +.line-box-main { + box-sizing: border-box; + display: flex; + + .card-icon { + height: 72px; + width: 72px; + z-index: 0; + } + + .line-box-content { + margin-left: 16px; + } + + .card-number { + font-size: 32px; + font-weight: bold; + line-height: 45px; + letter-spacing: 0px; + color: rgba(255, 255, 255, 0.87); + z-index: 0; + } + + .card-title { + font-size: 20px; + font-weight: normal; + line-height: 28px; + letter-spacing: 0px; + color: rgba(255, 255, 255, 0.64); + z-index: 0; + } + + .card-unit { + margin-left: 8px; + } +} + +.line-overview-main { + background: #00000A; + box-sizing: border-box; + border: 1px solid #1B7EF2; + box-shadow: inset 0px 0px 87px 0px rgba(1, 194, 255, 0.4); + padding: 20px 18px; + display: flex; + align-items: center; + + .line-overview-content { + width: 144px; + + .overview-title { + height: 42px; + + &>span { + font-size: 18px; + font-weight: normal; + line-height: 16px; + letter-spacing: 0px; + color: #FFFFFF; + } + } + + .overview-number { + font-size: 30px; + font-weight: normal; + line-height: 36px; + letter-spacing: 0px; + color: #29F1FA; + } + + .overview-unit { + font-size: 12px; + font-weight: normal; + line-height: 16px; + letter-spacing: 0px; + color: #29F1FA; + margin-left: 2px; + } + } + + + .overview-icon { + width: 65px; + height: 50px; + margin-left: 8px; + } +} + +.line-progress-main { + background: #00000A; + box-sizing: border-box; + border: 1px solid #1B7EF2; + box-shadow: inset 0px 0px 87px 0px rgba(1, 194, 255, 0.4); + padding: 12px 24px 8px 12px; + width: 243px; + + .line-progress-top { + display: flex; + justify-content: space-around; + align-items: center; + + .progress-title { + + &>span { + font-size: 18px; + font-weight: normal; + line-height: 16px; + letter-spacing: 0px; + color: #FFFFFF; + } + } + } + + .line-progress-bottom { + display: flex; + justify-content: space-around; + margin-top: 10px; + + .progress-bottom-title { + text-align: center; + + &>span { + font-size: 14px; + font-weight: normal; + line-height: 16px; + letter-spacing: 0px; + color: #1B7EF2; + } + } + + .progress-bottom-number { + text-align: center; + margin-top: 4px; + + &>span { + font-size: 20px; + font-weight: bold; + line-height: 16px; + letter-spacing: 0px; + color: #1B7EF2; + } + } + + .progress-bottom-right { + &>span { + color: #29F1FA; + } + } + } +} + +.monitor-scroll-table { + + .ant-table { + background: #081a3066 !important; + } + + .ant-table-container table>thead>tr:first-child th:first-child { + border-radius: 0; + } + + .ant-table-container table>thead>tr:first-child th:last-child { + border-radius: 0; + } + + .ant-table-tbody>tr.ant-table-row:hover>td { + background: #1b7ef266; + } + + .monitor-table-header { + background: #045da866; + color: #fff; + font-size: 18px; + font-weight: normal; + line-height: 28px; + letter-spacing: 0px; + border: 0; + padding: 12px 8px !important; + } + + .monitor-table-content { + .monitor-table-header; + font-size: 14px; + background: #081a3066; + border-bottom: 1px solid #2384DD; + cursor: pointer; + } + + ::-webkit-scrollbar { + display: none; + } + + .ant-table-cell-scrollbar { + display: none; + } + + .ant-table-tbody>tr.ant-table-placeholder:hover>td { + background: transparent; + } + + .ant-empty-description { + color: #FFFFFF; + } + + .ant-table-tbody>tr>td { + border-bottom: 0; + } +} + +.monitor-statistic-table { + + .ant-table { + background: transparent !important; + } + + .ant-table-container table>thead>tr:first-child th:first-child { + border-radius: 0; + } + + .ant-table-container table>thead>tr:first-child th:last-child { + border-radius: 0; + } + + .ant-table-tbody>tr.ant-table-row:hover>td { + background: #1b7ef2; + } + + .monitor-table-header { + background: transparent; + color: #fff; + font-size: 14px; + font-weight: normal; + line-height: 28px; + letter-spacing: 0px; + border: 0; + padding: 8px !important; + } + + .monitor-table-content { + .monitor-table-header; + background: transparent; + cursor: pointer; + } + + .ant-table-thead>tr>th { + background-color: transparent; + font-size: 16px; + font-weight: normal; + line-height: 28px; + letter-spacing: 0px; + padding: 8px !important; + border-bottom: 1px solid rgba(2, 86, 255, 0.6); + } + + ::-webkit-scrollbar { + display: none; + } + + .ant-table-cell-scrollbar { + display: none; + } + + .monitor-table-crown-1 { + height: 18px; + width: 18px; + background: url("~@/assets/monitor/vip-crown-1-fill.png") left top no-repeat; + line-height: 18px; + font-size: 12px; + color: #ffffff; + text-align: center; + display: inline-block + } + + .monitor-table-crown-2 { + .monitor-table-crown-1; + background: url("~@/assets/monitor/vip-crown-2-fill.png") left top no-repeat; + } + + .monitor-table-crown-3 { + .monitor-table-crown-1; + background: url("~@/assets/monitor/vip-crown-3-fill.png") left top no-repeat; + } + + .monitor-table-index { + color: #0256FF; + } + + .ant-table-tbody>tr.ant-table-placeholder:hover>td { + background: transparent; + } + + .ant-empty-description { + color: #FFFFFF; + } + + .ant-table-tbody>tr>td { + border-bottom: 0; + } +} + +.monitor-stage-card { + box-sizing: border-box; + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + padding: 18px 16px 16px 20px; + gap: 40px; + background: rgba(27, 126, 242, 0.12); + + .stage-left-img { + width: 179.18px; + height: 179.18px; + box-sizing: border-box; + padding: 10px; + + .box-wrap { + --front-color: #1b7ef2; + --back-color: #1b7ef2; + --outer-border-color: #1b7ef2; + --outer-border-width: 4px; + --outer-padding: 4px; + --inner-background: transparent; + --water-height: 50%; + --wave-display: none; + --border-radius: 50%; + width: 100%; + height: 100%; + border: var(--outer-border-width) solid var(--outer-border-color); + padding: var(--outer-padding); + box-sizing: border-box; + border-radius: var(--border-radius); + } + + .box { + position: relative; + width: 100%; + height: 100%; + box-sizing: border-box; + border-radius: var(--border-radius); + /** 解决增加圆角后超出部分不隐藏bug */ + z-index: 1; + overflow: hidden; + background-color: var(--inner-background); + } + + /* 波纹填充区域 */ + .fill-area { + position: absolute; + left: 0; + bottom: -123.33%; + width: 100%; + height: 100%; + transform: translateY(calc(0% - var(--water-height))); + background-color: var(--front-color); + } + + .waves { + position: absolute; + left: 0; + bottom: 100%; + width: 200%; + stroke: none; + /* 解决水球图中间有一条线问题 */ + box-shadow: 0 10px 4px 4px var(--front-color); + } + + .front-wave { + fill: var(--front-color); + transform: translate(-50%, 0); + animation: front-wave-move 3s linear infinite; + } + + .back-wave { + display: var(--wave-display); + fill: var(--back-color); + transform: translate(0, 0); + animation: back-wave-move 1.5s linear infinite; + } + + @keyframes front-wave-move { + 100% { + transform: translate(0, 0); + } + } + + @keyframes back-wave-move { + 100% { + transform: translate(-50%, 0); + } + } + + /* 插槽内容样式 */ + .slot-content { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + } + + .slot-font1 { + color: #fff; + font-size: 28px; + font-weight: bold; + position: relative; + left: 2px; + } + } + + .stage-middle-content { + text-align: center; + + &>span { + font-size: 20px; + font-weight: normal; + line-height: 22px; + letter-spacing: 0.8px; + color: #FFFFFF; + } + + &>div { + font-size: 36px; + font-weight: normal; + line-height: 50px; + letter-spacing: 0px; + color: #129BFF; + margin-top: 8px; + } + } + + .stage-right-content { + display: flex; + flex-direction: column; + justify-content: space-evenly; + align-items: flex-start; + height: 128px; + + .stage-text { + + .stage-pane { + display: inline-block; + width: 12px; + height: 12px; + opacity: 1; + } + + .stage-title { + font-size: 16px; + font-weight: normal; + line-height: 22px; + letter-spacing: 0.8px; + color: #FFFFFF; + margin-left: 8px; + } + + .stage-number { + font-size: 16px; + font-weight: normal; + line-height: 22px; + letter-spacing: 0.8px; + margin-left: 8px; + } + + .stage-pane-blue { + background: #1B7EF2; + } + + .stage-pane-green { + background: #29F0F9; + } + + .stage-pane-yellow { + background: #FFD502; + } + + .stage-number-blue { + color: #1B7EF2; + } + + .stage-number-green { + color: #29F0F9; + } + + .stage-number-yellow { + color: #FFD502; + } + } + } +} + +.monitor-select-dropdown { + .ant-dropdown-menu { + background-color: #081a30; + } + + .ant-dropdown-menu-item, + .ant-dropdown-menu-submenu-title { + color: #FFFFFF; + } + + .ant-dropdown-menu-item:hover, + .ant-dropdown-menu-submenu-title:hover { + background-color: #1b7ef2; + } +} + +.monitor-select-btn { + outline: none; + position: relative; + display: inline-block; + font-weight: 400; + white-space: nowrap; + text-align: center; + background-image: none; + background-color: transparent; + border: 1px solid transparent; + cursor: pointer; + transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + user-select: none; + touch-action: manipulation; + line-height: 1.5714285714285714; + height: 32px; + padding: 4px 15px; + border-radius: 6px; + + &>span { + font-size: 14px; + color: #FFFFFF; + } + + &:hover { + background-color: #12304e99; + + } + + &:active { + background-color: #12304ecc; + } +} \ No newline at end of file