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¿¥Ij@¢"],["@@ ¡@V^RqBbAnTXeRz¤L«³I"],["@@ÆEEkWqë @"],["@@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ģcJe"],["@@U`Ts¿mÂ"],["@@oºƋÄdeVDJj£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|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧˏf°ÐTªqs{S¯r æÝlNd®²Ğ džiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|ǰ N«úmH¯âDùyŜŲIÄuШD¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu {Z}Ö@U´ ʚLg®¯Oı°Ãw ^VbÉsmA ê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅna@³@ďyýIĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃͶSj®AyÂhðk`«P˵EFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅaVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MðoťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@c̬¢aĦtRıÒ¾ùƀ^juųœKUFyƝ īÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥ÍpDž¡KąÅkĝęěhq}HyÃ]¹ǧ£ Í÷¿qáµ§g¤o^á¾ZE¤i`ij{nOl»WÝĔįhgF[¿¡ßkOüš_ūiDZàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ã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":["@@ÞĩÒSra}ÁyWix±Üe´lèßÓǏokćiµVZģ¡coTS˹ĪmnÕńehZg{gtwªpXaĚThȑp{¶Eh®RćƑP¿£Pmc¸mQÝWďȥoÅîɡųAďä³aÏJ½¥PGąSM EÅruµéYÓŌ_dĒCoȵ]¯_²ÕjāK~©ÅØ^ÔkïçămÏk]±cݯÑÃmQÍ~_apm ~ç¡qu{JÅŧ·Ls}EyÁÆcI{¤IiCfUcƌÃp§]ě«vD@¡SÀµMÅwuYY¡DbÑc¡h×]nkoQdaMç~eDÛtT©±@¥ù@É¡ZcW|WqOJmĩl«ħşvOÓ«IqăV¥D[mI~Ó¢cehiÍ]Ɠ~ĥqX·eƷn±}v[ěďŕ]_œ`¹§ÕōIo©bs^}Ét±ū«³p£ÿ·Wµ|¡¥ăFÏs×¥ŅxÊdÒ{ºvĴÎêÌɊ²¶ü¨|ÞƸµȲLLúÉƎ¤ϊęĔV`_bªS^|dzY|dz¥pZbÆ£¶ÒK}tĦÔņƠPYznÍvX¶Ěn ĠÔzý¦ª÷ÑĸÙUȌ¸dòÜJð´ìúNM¬XZ´¤ŊǸ_tldI{¦ƀðĠȤ¥NehXnYGR° Ƭ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":[["@@¯PqFB |S³C|kñHdiÄ¥sʼnÅ PóÑÑE^ÅPpy_YtShQ·aHwsOnʼnÃs©iqjUSiº]ïW«gW¡ARë¥_sgÁnUI«m ]jvV¼euhwqAaW_µj »çjioQR¹ēÃßt@r³[ÛlćË^ÍÉáGOUÛOB±XkŹ£k|e]olkVͼÕqtaÏõjgÁ£§U^RLËnX°ÇBz^~wfvypV ¯ƫĉ˭ȫƗŷɿÿĿƑ˃ĝÿÃǃßËőó©ǐȍŒĖ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¥FTÕ¿Jû]|mvāÎYua^WoÀa·ząÒot×¶CLƗi¯¤mƎHNJ¤îìɾŊìTdåwsRÖgĒųúÍġäÕ}Q¶¿A[¡{d×uQAMxVvMOmăl«ct[wº_ÇÊjb£ĦS_éQZ_lwgOiýe`YYLq§IÁdz£ÙË[ÕªuƏ³ÍTs·bÁĽäė[b[ŗfãcn¥îC¿÷µ[ŏÀQōĉm¿Á^£mJVmL[{Ï_£F¥Ö{ŹA} ×Wu©ÅaųijƳhB{·TQqÙIķËZđ©Yc|M¡ LeVUóK_QWk_ĥ¿ãZ»X\\ĴuUèlG®ěłTĠğDŃOrÍdÆÍz]± ŭ©Å]ÅÐ}UË¥©TċïxgckfWgi\\ÏĒ¥HkµEë{»ÏetcG±ahUiñiWsɁ·cCÕk]wȑ|ća}w VaĚá G°ùnM¬¯{ÈÐÆA¥ÄêJxÙ¢hP¢ÛºµwWOóFÁz^ÀŗÎú´§¢T¤ǻƺSėǵhÝÅQgvBHouʝl_o¿Ga{ïq{¥|ſĿHĂ÷aĝÇqZñiñC³ª »E`¨åXēÕqÉû[l}ç@čƘóO¿¡FUsAʽīccocÇS}£IS~ălkĩXçmĈ ŀÐoÐdxÒuL^T{r@¢ÍĝKén£kQyÅõËXŷƏL§~}kq»IHėDžjĝ»ÑÞoå°qTt|r©ÏS¯·eŨĕx«È[eM¿yupN~¹ÏyN£{©għWí»Í¾səšDž_ÃĀɗ±ąijĉʍŌŷSÉA±åǥɋ@ë£R©ąP©}ĹªƏj¹erLDĝ·{i«ƫC£µsKC GS|úþXgp{ÁX¿ć{ƱȏñZáĔyoÁhA}ŅĆfdʼn_¹Y°ėǩÑ¡H¯¶oMQqð¡Ë|Ñ`ƭŁX½·óÛxğįÅcQs«tȋDžFù^it«Č¯[hAi©á¥ÇĚ×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ľýľώȪƺɂļxZĈ}ÌʼnŪĺœĭFЛĽ̅ȣͽÒŵìƩÇϋÿȮǡŏçƑůĕ~ǼȳÐUfdIxÿ\\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~´°ÎFCU¼pĀēƄN¦¾O¶łKĊOjĚj´ĜYp{¦SĚÍ\\TתV÷Ší¨ÅDK°ßtŇĔK¨ǵÂcḷ̌ĚǣȄĽFlġUĵŇȣFʉɁMğįʏƶɷØŭOǽ«ƽū¹Ʊő̝Ȩ§ȞʘĖiɜɶʦ}¨֪ࠜ̀ƇǬ¹ǨE˦ĥªÔêFxúQEr´Wrh¤Ɛ \\talĈDJÜ|[Pll̚¸ƎGú´P¬W¦^¦H]prRn|or¾wLVnÇIujkmon£cX^Bh`¥V¦U¤¸}xRj[^xN[~ªxQ[`ªHÆÂExx^wN¶Ê|¨ìMrdYpoRzNyÀDs~bcfÌ`L¾n|¾T°c¨È¢ar¤`[|òDŞĔöxElÖdHÀI`Ď\\Àì~ÆR¼tf¦^¢ķ¶eÐÚMptgjɡČÅ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£ʺoqNwğc`uetOj×°KJ±qÆġmĚŗos¬ qehqsuH{¸kH¡ ÊRǪÇƌbȆ¢´äÜ¢NìÉʖ¦â©Ġu¦öČ^â£ĂhĖMÈÄw\\fŦ°W ¢¾luŸDw\\̀ʉÌÛ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@@sa"],["@@MnNm"],["@@dc"],["@@eÀC@b"],["@@f XwkbrÄ`qg"],["@@^jtWQ"],["@@~ Y]c"],["@@G`ĔN^_¿ZÃM"],["@@iX¶BY"],["@@YZ"],["@@L_{Epf"],["@@^WqCT\\"],["@@\\[§t|¤_"],["@@m`n_"],["@@Ïxnj{q_×^Giip"],["@@@é^BntaÊU]x ¯ÄPIJ°hʙK³VÕ@Y~|EvĹsǦL^pòŸÒG Ël]xxÄ_fT¤Ď¤cPC¨¸TVjbgH²sdÎdHt`B²¬GJję¶[ÐhjeXdlwhðSȦªVÊÏÆZÆŶ®²^ÎyÅÎcPqńĚDMħĜŁHkçvV[ij¼WYÀäĦ`XlR`ôLUVfK¢{NZdĒªYĸÌÚJRr¸SA|ƴgŴĴÆbvªØX~źB|¦ÕE¤Ð`\\|KUnnI]¤ÀÂĊnŎR®Ő¿¶\\ÀøíDm¦ÎbŨabaĘ\\ľã¸atÎSƐ´©v\\ÖÚÌǴ¤Â¨JKrZ_ZfjþhPkx`YRIjJcVf~sCN¤ EhæmsHy¨SðÑÌ\\\\ĐRZk°IS§fqŒßýáĞÙÉÖ[^¯ǤŲê´\\¦¬ĆPM¯£»uïpùzExanµyoluqe¦W^£ÊL}ñrkqWňûPUP¡ôJoo·U}£[·¨@XĸDXmÛݺGUCÁª½{íĂ^cjk¶Ã[q¤LÉö³cux«zZf²BWÇ®Yß½ve±ÃCý£W{Ú^q^sÑ·¨ÍOt¹·C¥GDrí@wÕKţëV·i}xËÍ÷i©ĝɝǡ]{c±OW³Ya±_ç©HĕoƫŇqr³Lys[ñ³¯OSďOMisZ±ÅFC¥Pq{Ã[Pg}\\¿ghćO k^ģÁFıĉĥMoEqqZûěʼn³F¦oĵhÕP{¯~TÍlªNßYÐ{Ps{ÃVUeĎwk±ʼnVÓ½ŽJãÇÇ»Jm°dhcÀffdF~ĀeĖd`sx² ®EżĀdQÂd^~ăÔH¦\\LKpĄVez¤NP ǹÓRÆąJSha[¦´ÂghwmBШźhI|VV|p] ¼èNä¶ÜBÖ¼L`¼bØæKVpoúNZÞÒKxpw|ÊEMnzEQIZZNBčÚFÜçmĩWĪñtÞĵÇñZ«uD±|Əlij¥ãn·±PmÍada 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ä³PClFbbÍzwBGĭZÅi»lYċ²SgkÇ£^Sqd¯R ©é£¯S\\cZ¹iűƏCuƍÓXoR}M^o£ R}oªUF uuXHlEÅÏ©¤ÛmTþ¤D²ÄufàÀXXȱAeyYw¬dvõ´KÊ£\\rµÄlidā]|DÂVH¹Þ®ÜWnCķ W§@\\¸~¤Vp¸póIO¢VOŇürXql~òÉK]¤¥Xrfkvzpm¶bwyFoúv𼤠N°ąO¥«³[éǡű_°Õ\\ÚÊĝþâőàerR¨JYlďQ[ ÏYëЧTGztnß¡gFkMāGÁ¤ia Éȹ`\\xs¬dĆkNnuNUuP@vRY¾\\¢ GªóĄ~RãÖÎĢùđŴÕhQxtcæëSɽʼníëlj£ƍG£nj°KƘµDsØÑpyƸ®¿bXp]vbÍZuĂ{n^IüÀSÖ¦EvRÎûh@â[ƏÈô~FNr¯ôçR±HÑlĢ^¤¢OðævxsŒ]ÞÁTĠs¶¿âÆGW¾ìA¦·TѬè¥ÏÐJ¨¼ÒÖ¼ƦɄxÊ~StD@Ă¼Ŵ¡jlºWvÐzƦZвCH AxiukdGgetqmcÛ£Ozy¥cE}| ¾cZ k¿uŐã[oxGikfeäT@ SUwpiÚFM©£è^Ú`@v¶eňf heP¶täOlÃUgÞzŸU`l}ÔÆUvØ_Ō¬Öi^ĉi§²ÃB~¡ĈÚEgc|DC_Ȧm²rBx¼MÔ¦ŮdĨÃâYxƘDVÇĺĿg¿cwÅ\\¹¥Yĭl¤OvLjM_a W`zļMž·\\swqÝSAqŚij¯°kRē°wx^ĐkǂÒ\\]nrĂ}²ĊŲÒøãh·M{yMzysěnĒġV·°G³¼XÀ¤¹i´o¤ŃÈ`ÌDzÄUĞd\\iÖmÈBĤÜɲDEh LG¾ƀľ{WaYÍÈĢĘÔRîĐj}ÇccjoUb½{h§Ǿ{KƖµÎ÷GĀÖŠåưÎslyiē«`å§H¥Ae^§GK}iã\\c]v©ģZmÃ|[M}ģTɟĵÂÂ`ÀçmFK¥ÚíÁbX³ÌQÒHof{]ept·GŋĜYünĎųVY^ydõkÅZW«WUa~U·SbwGçǑiW^qFuNĝ·EwUtW·Ýďæ©PuqEzwAVXRãQ`©GMehccďÏd©ÑW_ÏYƅ» é\\ɹ~ǙG³mØ©BšuT§Ĥ½¢Ã_ýL¡ýqT^rme\\PpZZbyuybQefµ]UhĿDCmûvaÙNSkCwncć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¾pVidd~ÈiíďÓQġėÇZÎXb½|ſÃH½KFgɱCģÛÇAnjÕc[VĝDZÃËÇ_ £ń³pj£º¿»WH´¯U¸đĢmtĜyzzNN|g¸÷äűѱĉā~mq^[ǁÑďlw]¯xQĔ¯l°řĴrBÞTxr[tޏĻN_yX`biNKu P£kZĮ¦[ºxÆÀdhĹŀUÈƗCwáZħÄŭcÓ¥»NAw±qȥnD`{ChdÙFć}¢A±Äj¨]ĊÕjŋ«×`VuÓÅ~_kŷVÝyhVkÄãPsOµfgeŇ µf@u_Ù ÙcªNªÙEojVxT@ãSefjlwH\\pŏäÀvlY½d{F~¦dyz¤PÜndsrhfHcvlwjF£G±DÏƥYyÏu¹XikĿ¦ÏqƗǀOŜ¨LI|FRĂn sª|C˜zxAè¥bfudTrFWÁ¹Am|ĔĕsķÆF´N}ć UÕ@Áijſmuçuð^ÊýowFzØÎĕNőǏȎôªÌŒDŽàĀÄ˄ĞŀƒʀĀƘŸˮȬƬĊ°Uzouxe]} AyÈW¯ÌmKQ]Īºif¸ÄX|sZt|½ÚUÎ lk^p{f¤lºlÆW A²PVÜPHÊâ]ÎĈÌÜk´\\@qàsĔÄQºpRij¼èi`¶bXrBgxfv»uUi^v~J¬mVp´£´VWrnP½ì¢BX¬hðX¹^TjVriªjtŊÄmtPGx¸bgRsT`ZozÆO]ÒFôÒOÆŊvÅpcGêsx´DR{AEOr°x|íb³Wm~DVjºéNNËܲɶGxŷCSt}]ûōSmtuÇÃĕNāg»íT«u}ç½BĵÞʣ¥ëÊ¡MÛ³ãȅ¡ƋaǩÈÉQG¢·lG|tvgrrf«ptęŘnÅĢrI²¯LiØsPf_vĠdxM prʹL¤¤eËÀđKïÙVY§]Ióáĥ]ķK¥j|pŇ\\kzţ¦šnņäÔVĂîά|vW®l¤èØrxm¶ă~lÄƯĄ̈́öȄEÔ¤ØQĄĄ»ƢjȦOǺ¨ìSŖÆƬyQv`cwZSÌ®ü±DŽ]ŀç¬B¬©ńzƺŷɄeeOĨSfm Ċƀ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²ŕƀBQ£Ď}L¹Îk@©ĈuǰųǨÚ§ƈnTËÇéƟÊcfčŤ^XmHĊĕË«W·ċëx³ǔķÐċJāwİ_ĸȀ^ôWr°oú¬Ħ ŨK~ȰCĐ´Ƕ£fNÎèâw¢XnŮeÂÆĶ¾¾xäLĴĘlļO¤ÒĨA¢Êɚ¨®ØCÔ ŬGƠƦYĜĘÜƬDJg_ͥœ@čŅĻA¶¯@wÎqC½Ĉ»NăëKďÍQÙƫ[«ÃígßÔÇOÝáWñuZ¯ĥŕā¡ÑķJu¤E 寰WKɱ_d_}}vyõu¬ï¹ÓU±½@gÏ¿rýDg Cdµ°MFYxw¿CG£Rƛ½Õ{]L§{qqą¿BÇƻğëܭNJË|c²}Fµ}ÙRsÓpg±QNqǫŋRwŕnéÑÉK«SeYR ŋ@{¤SJ}D Ûǖ֍]gr¡µŷ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`ZRu¥É\\]~°Y`µÓ^phÁbnÀşúòaĬºTÖŒbe¦¦{¸ZâćNp©Hr|^mjhSEb\\afv`sz^lkljÄtg¤D¾X¿À|ĐiZȀåB·î}GL¢õcßjayBFµÏC^ĭcÙt¿sğH]j{s©HM¢QnDÀ©DaÜÞ·jgàiDbPufjDk`dPOîhw¡ĥ¥GP²ĐobºrYî¶aHŢ´ ]´rılw³r_{£DB_Ûdåuk|Ũ¯F Cºyr{XFye³Þċ¿ÂkĭB¿MvÛpm`rÚã@ƹhågËÖƿxnlč¶Åì½Ot¾dJlVJĂǀŞqvnO^JZż·Q}êÍÅmµÒ]ƍ¦Dq}¬R^èĂ´ŀĻĊIÔtIJyQŐĠMNtR®òLhĚs©»}OÓGZz¶A\\jĨFäOĤHYJvÞHNiÜaĎÉnFQlNM¤B´ĄNöɂtpŬdfå qm¿QûùŞÚb¤uŃJŴu»¹ĄlȖħŴw̌ŵ²ǹǠ͛hĭłƕrçü±Yxcitğ®jű¢KOķCoy`å®VTa_Ā]ŐÝɞï²ʯÊ^]afYǸÃĆēĪȣJđ͍ôƋÄÄÍīçÛɈǥ£ÛmY`ó£Z«§°Ó³QafusNıDž_k}¢m[ÝóDµ¡RLčiXyÅNïă¡¸iĔÏNÌŕoēdōîåŤûHcs}~Ûwbù¹£¦ÓCtOPrE^Òogĉ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"],["@@sfbU"],["@@qP\\xz[ck"],["@@R¢FX}°[s_"],["@@Cb\\}"],["@@e|v\\la{u"],["@@v~u}"],["@@QxÂF¯}"],["@@¹nvÞs¯o"],["@@rSkUEj"],["@@biZP"],["@@p[}INf"],["@@À¿"],["@@¹dnb "],["@@rSBnR"],["@@g~h}"],["@@FlEk"],["@@OdPc"],["@@v[u\\"],["@@FjâL~wyoo~sµL\\"],["@@¬e¹aN"],["@@\\nÔ¡q]L³ë\\ÿ®QÖ"],["@@ÊA©[¬"],["@@Kxv"],["@@@hlIk]"],["@@pW{o||j"],["@@Md|_mC"],["@@¢ X£ÏylD¼XtH"],["@@hlÜ[LykAvyfw^E¤"],["@@fp¤MusR"],["@@®_ma~LÁ¬Z"],["@@iMxZ"],["@@ZcYd"],["@@Z~dOSo|A¿qZv"],["@@@`EN¡v"],["@@|TY{"],["@@@n@m"],["@@XWkCT\\"],["@@ºwZRkĕWO¢"],["@@X®±Grƪ\\ÔáXq{"],["@@ůTG°ĄLHm°UC"],["@@¤aÜx~}dtüGæţŎíĔcŖpMËÐj碷ðĄÆMzjWKĎ¢Q¶À_ê_Bıi«pZgf¤Nrq]§ĂN®«H±yƳí¾×ŸīàLłčŴǝĂíÀBŖÕªÁŖHŗʼnåqûõi¨hÜ·ñt»¹ýv_[«¸mYL¯Qª mĉÅdMgÇjcº«ę¬K´B«Âącoċ\\xKd¡gěŧ«®á[~ıxu·ÅKsËÉc¢Ù\\ĭƛëbf¹ģSĜkáƉÔĈZB{aMµfzʼnfåÂŧįƋǝÊĕġć£g³neą»@¦S®\\ßðChiqªĭiAuAµ_W¥ƣO\\lċĢttC¨£t`PZäuXßBsĻyekOđġĵHuXBµ]×\\°®¬F¢¾pµ¼kŘó¬Wät¸|@L¨¸µrºù³Ù~§WIZW®±Ð¨ÒÉx`²pĜrOògtÁZ}þÙ]¡FKwsPlU[}¦Rvn`hq¬\\nQ´ĘRWb_ rtČFIÖkĦPJ¶ÖÀÖJĈĄTĚòC ²@Pú Øz©PCÈÚDZhŖl¬â~nm¨f©iļ«mntuÖZÜÄjL®EÌFª²iÊxبIÈhhst"],["@@o\\VzRZ}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`|´qxIJkq^³³GšµbíZ ¹qpa±ď OH¦Ħx¢gPícOl_iCveaOjCh߸iÝbÛªCC¿mRV§¢A|t^iĠGÀtÚsd]ĮÐDE¶zAb àiödK¡~H¸íæAǿYj{ď¿À½W®£ChÃsikkly]_teu[bFaTign{]GqªoĈMYá|·¥f¥őaSÕėNµñĞ«Im_m¿Âa]uĜp Z_§{Cäg¤°r[_YjÆOdý[I[á·¥Q_nùgL¾mvˊBÜÆ¶ĊJhpc¹O]iŠ]¥ jtsggJǧw×jÉ©±EFËKiÛÃÕYv sm¬njĻª§emná}k«ŕgđ²ÙDÇ¤í¡ªOy×Où±@DñSęćăÕIÕ¿IµĥOjNÕËT¡¿tNæŇàåyķrĕq§ÄĩsWÆßF¶X®¿mw RIÞfßoG³¾©uyHį{Ɓħ¯AFnuP ÍÔzVdàôº^Ðæd´oG¤{S¬ćxã}ŧ×Kǥĩ«ÕOEзÖdÖsƘѨ[Û^Xr¢¼§xvÄÆµ`K§ tÒ´Cvlo¸fzŨð¾NY´ı~ÉĔē ßúLÃÃ_ÈÏ|]ÂÏFlg`ben¾¢pUh~ƴ˶_r sĄ~cƈ]|r c~`¼{À{ȒiJjz`îÀT¥Û³ ]u}f ïQl{skloNdjäËzDvčoQďHI¦rbtHĔ~BmlRV_ħTLnñH±DL¼Lªl§Ťa¸ĚlK²\\RòvDcÎJbt[¤D@®hh~kt°ǾzÖ@¾ªdbYhüóZ ň¶vHrľ\\ÊJuxAT|dmÀO[ÃÔG·ĚąĐlŪÚpSJ¨ĸLvÞcPæķŨ®mÐálwKhï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"],["@@@vPGsQ"],["@@sBzddW]Q"],["@@S¨Q{"],["@@NVucW"],["@@qptBAq"],["@@¸[mu"],["@@Q\\pD]_"],["@@jSwUadpF"],["@@eXª~"],["@@AjvFso"],["@@fT_Çí\\v|ba¦jZÆy°"],["@@IjJi"],["@@wJIx«¼AoNe{M"],["@@K±¡ÓČäeZ"],["@@k¡¹Eh~c®wBkUplÀ¡I~Māe£bN¨gZý¡a±Öcp©PhI¢Qq ÇGj|¥U g[Ky¬ŏv@OptÉEF\\@ åA¬V{XģĐBy cpě ¼³Ăp·¤¥ohqqÚ¡ŅLs^á§qlÀhH¨MCe»åÇGD¥zPO£čÙkJA¼ßėuĕeûÒiÁŧSW¥Qûŗ½ùěcݧSùĩąSWó«íęACµeRåǃRCÒÇZÍ¢ź±^dlstjD¸ZpuÔâÃH¾oLUêÃÔjjēò´ĄWƛ ^Ñ¥Ħ@ÇòmOw¡õyJyD}¢ďÑÈġfZda©º²z£NjD°Ötj¶¬ZSÎ~¾c°¶ÐmxO¸¢Pl´SL|¥AȪĖMņIJg®áIJČĒü` QF¬h|ĂJ@zµ |ê³È ¸UÖŬŬÀEttĸr]ðM¤ĶIJHtÏ AĬkvsq^aÎbvdfÊòSD´Z^xPsĂrvƞŀjJd×ŘÉ ®AΦĤdxĆqAZRÀMźnĊ»İÐZ YXæJyĊ²·¶q§·K@·{sXãô«lŗ¶»o½E¡«¢±¨Y®Ø¶^AvWĶ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£Tc ĹGµ¶Hm@_©k¾xĨôȉðX«½đCIbćqK³ÁÄš¬OAwã»aLʼnËĥW[ÂGIÂNxij¤D¢îĎÎB§°_JGs¥E@ ¤uć PåcuMuw¢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êvHĢûXD® QgÄWiØPÞìºr¤džNĠ¢lĄtZoCƞÔºCxrpĠV®Ê{f_Y`_eq®Aot`@oDXfkp¨|s¬\\DÄSfè©Hn¬ ^DhÆyøJhØxĢĀLÊƠPżċĄwȠ̦G®ǒĤäTŠÆ~Ħw«|TF¡nc³Ïå¹]ĉđxe{ÎÓvOEm°BƂĨİ|Gvz½ª´HàpeJÝQxnÀWEµàXÅĪt¨ÃĖrÄwÀFÎ|ňÓMå¼ibµ¯»åDT±m[r«_gmQu~¥V\\OkxtL E¢Ú^~ýêPóqoě±_Êw§ÑªåƗā¼mĉŹ¿NQ YBąrwģcÍ¥BŗÊcØiIƝĿuqtāwO]³YCñTeÉcaubÍ]trluī BÐGsĵıN£ï^ķqss¿FūūVÕ·´Ç{éĈýÿOER_đûIċâJhŅıNȩĕB ¦K{Tk³¡OP·wnµÏd¯}½TÍ«YiµÕsC¯iM¤¦¯P|ÿUHvhe¥oFTuõ\\OSsMòđƇiaºćXĊĵà·çhƃ÷Ç{ígu^đgm[×zkKN¶Õ»lčÓ{XSÆv©_ÈëJbVkĔVÀ¤P¾ºÈMÖxlò~ªÚàGĂ¢B±ÌKyáV¼Ã~ `gsÙfIƋlę¹e|~udjuTlXµ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"],["@@TGy"],["@@K¬U"],["@@WdXc"],["@@PtOs"],["@@LnXhc"],["@@ppVu]Or"],["@@cdzAUa"],["@@udRhnCI"],["@@oIpR"],["@@Ľč{fzƤîKÎMĮ]ZF½Y]â£ph¶¨râøÀÎǨ¤^ºÄGz~grĚĜlĞÆLĆdž¢Îo¦cvKbgr°WhmZp L]LºcUÆnżĤÌĒbAnrOA´ȊcÀbƦUØrĆUÜøĬƞEzVL®öØBkŖÝĐ˹ŧ̄±ÀbÎÉnb²ĦhņBĖįĦåXćì@L¯´ywƕCéõė ƿ¸lµ¾Z|ZWyFY¨Mf~C¿`à_RÇzwƌfQnny´INoƬèôº|sTJULîVjǎ¾ĒØDz²XPn±ŴPè¸ŔLƔÜƺ_TüÃĤBBċÈöA´faM¨{«M`¶d¡ôÖ°mȰBÔjj´PM|c^d¤u¤Û´ä«ƢfPk¶Môl]Lb}su^ke{lC MrDÇ]NÑFsmoõľHyGă{{çrnÓEƕZGª¹Fj¢ïW uøCǷë¡ąuhÛ¡^KxC`C\\bÅxì²ĝÝ¿_NīCȽĿåB¥¢·IŖÕy\\¹kxãČ×GDyäÁçFQ¡KtŵƋ]CgÏAùSedcÚźuYfyMmhUWpSyGwMPqŀÁ¼zK¶GY§Ë@´śÇµƕBm@IogZ¯uTMx}CVKï{éƵP_K«pÛÙqċtkkù]gTğwoɁsMõ³ăAN£MRkmEÊčÛbMjÝGu IZGPģãħE[iµBEuDPÔ~ª¼ęt]ûG§¡QMsğNPŏįzs£Ug{đJĿļā³]ç«Qr~¥CƎÑ^n¶ÆéÎR~ݏYI] PumŝrƿIā[xedzL¯v¯s¬ÁY ~} ťuŁgƋpÝĄ_ņī¶ÏSR´ÁP~¿Cyċßdwk´SsX|t`Ä ÈðAªìÎT°¦Dda^lĎDĶÚY°`ĪŴǒàŠv\\ebZHŖ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¶@«ŕŕQGYfa[şußǩđš_X³ijÕčC]kbc¥CS¯ëÍB©÷³Si_}mYTt³xlàcČzÀD}ÂOQ³ÐTĨ¯ƗòËŖ[hłŦv~}ÂZ«¤lPÇ£ªÝŴÅR§ØnhctâknÏľŹUÓÝdKuķI§oTũÙďkęĆH¸Ó\\Ä¿PcnS{wBIvÉĽ[GqµuŇôYgûZca©@½Õǽys¯}lgg@C\\£asIdÍuCQñ[L±ęk·ţb¨©kK»KC²òGKmĨS`UQnk}AGēsqaJ¥ĐGRĎpCuÌy ã iMcplk|tRkðev~^´¦ÜSí¿_iyjI|ȑ|¿_»d}q^{Ƈdă}tqµ`Ƴĕg}V¡om½faÇo³TTj¥tĠRyK{ùÓjuµ{t}uËRivGçJFjµÍyqÎàQÂFewixGw½Yŷpµú³XU½ġyłåkÚwZX·l¢Á¢KzOÎÎjc¼htoDHr |J½}JZ_¯iPq{tę½ĕ¦Zpĵø«kQ Ť]MÛfaQpě±ǽ¾]uFu÷nčįADp}AjmcEÇaª³o³ÆÍSƇĈÙDIzËčľ^KLiÞñ[aA²zzÌ÷D|[íijgfÕÞd®|`Ć~oĠƑô³ŊD×°¯CsøÀ«ìUMhTº¨¸ǡîSÔDruÂÇZÖEvPZW~ØÐtĄE¢¦Ðy¸bô´oŬ¬²Ês~]®tªapŎJ¨Öº_Ŕ`Ŗ^Đ\\Ĝu~m²Ƹ¸fWĦrƔ}Î^gjdfÔ¡J}\\n C¦þWxªJRÔŠu¬ĨĨmFdM{\\d\\YÊ¢ú@@¦ª²SÜsC}fNècbpRmlØ^gd¢aÒ¢CZZxvƶN¿¢T@uC¬^ĊðÄn|lGlRjsp¢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":[["@@AB"],["@@lskt"],["@@¾«}{ra®pîÃ\\{øCËyyB±b\\òÝjKL ]ĎĽÌJyÚCƈćÎT´Å´pb©ÈdFin~BCo°BĎÃømv®E^vǾ½Ĝ²RobÜeN^ĺ£R¬lĶ÷YoĖ¥Ě¾|sOr°jY`~I¾®I{GqpCgyl{£ÍÍyPL¡¡¸kWxYlÙæŁĢz¾V´W¶ùŸo¾ZHxjwfxGNÁ³Xéæl¶EièIH ujÌQ~v|sv¶Ôi|ú¢FhQsğ¦SiŠBgÐE^ÁÐ{čnOÂÈUÎóĔÊēIJ}Z³½Mŧïeyp·uk³DsѨL¶_Åuèw»¡WqÜ]\\Ò§tƗcÕ¸ÕFÏǝĉăxŻČƟOKÉġÿ×wg÷IÅzCg]m«ªGeçÃTC«[t§{loWeC@ps_Bprf_``Z|ei¡oċMqow¹DƝÓDYpûsYkıǃ}s¥ç³[§cY§HK«Qy]¢wwö¸ïx¼ņ¾Xv®ÇÀµRĠÐHM±cÏdƒǍũȅȷ±DSyúĝ£ŤĀàtÖÿï[îb\\}pĭÉI±Ñy ¿³x¯No|¹HÏÛmjúË~TuęjCöAwě¬Rđl¯ ÑbŇTĿ_[IčĄʿnM¦ğ\\É[T·k¹©oĕ@A¾wya¥Y\\¥Âaz¯ãÁ¡k¥ne£ÛwE©Êō¶˓uoj_U¡cF¹[WvP©whuÕyBF`RqJUw\\i¡{jEPïÿ½fć QÑÀQ{°fLÔ~wXgītêݾĺHd³fJd]HJ² EoU¥HhwQsƐ»Xmg±çve]DmÍPoCc¾_hhøYrŊU¶eD°Č_N~øĹĚ·`z]Äþp¼ äÌQv\\rCé¾TnkžŐÚÜa¼ÝƆ̶Ûo d ĔňТJqPb ¾|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ʧĘDvČ_Àæ~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":[["@@nFTs"],["@@ßÅÆá½ÔXrCO ËRïÿĩTooQyÓ[ŅBE¬ÎÓXaį§Ã¸G °ITxpúxÚij¥Ï̾edÄ©ĸG àGhM¤Â_U}Ċ}¢pczfþg¤ÇòAVM"],["@@©KA·³CQ±Á«³BUƑ¹AtćOwD]JiØSm¯b£ylX HËѱH«C^õľAŧ¤É¥ïyuǙuA¢^{ÌC´¦ŷJ£^[ª¿ĕ~Ƈ N skóā¹¿ï]ă~÷O§@Vm¡Qđ¦¢Ĥ{ºjÔª¥nf´~Õo×ÛąMąıuZmZcÒ 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È£ýhedy¡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_EzAN¦zLU`cªxOTu RLÄ¢dVi`p˔vŎµªÉF~Ød¢ºgİàw¸Áb[¦Zb¦z½xBĖ@ªpºlS¸Ö\\Ĕ[N¥ˀmĎăJ\\ŀ` ňSÚĖÁĐiOĜ«BxDõĚivSÌ}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ŽƥóRoOV~]{g\\êYƪ¦kÝbiċƵGZ»Ěõ ó·³vŝ£ø@pyö_ëIkѵbcѧ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":[["@@QdAua"],["@@lxDLo"],["@@sbhNLo"],["@@Ă ā"],["@@WltO[["],["@@Kr]S"],["@@eI]y"],["@@I|Mym"],["@@Û³LS¼Y"],["@@nvºBëui©`¾"],["@@zdÛJw®"],["@@° ¯"],["@@a yAª¸ËJIxØ@ĀHAmÃV¡ofuo"],["@@sŗÃÔėAƁZÄ ~°ČPäh"],["@@¶ÝÌvmĞhıQ"],["@@HdSjĒ¢D}war u«ZqadYM"],["@@el\\LqqU"],["@@~rMo\\"],["@@f^C"],["@@øPªoj÷ÍÝħXČx°Q¨ıXNv"],["@@gÇƳo[~tly"],["@@EÆC¿"],["@@OP"],["@@wđógĝ[³¡VÙæÅöM̳¹pÁaËýý©D©ÜJŹƕģGą¤{Ùū ÇO²«BƱéAÒĥ¡«BhlmtÃPµyU¯ucd·w_bŝcīímGO|KPȏŹãŝIŕŭŕ@Óoo¿ē±ß} ŭIJWÈCőâUâǙIğʼn©IijE× Á³AówXJþ±ÌÜÓĨ£L]ĈÙƺZǾĆĖMĸĤfÎĵlŨnÈĐtFFĤêk¶^k°f¶g}®Faf`vXŲxl¦ÔÁ²¬Ð¦pqÊ̲iXØRDÎ}Ä@ZĠsx®AR~®ETtĄZƈfŠŠHâÒÐAµ\\S¸^wĖkRzalŜ|E¨ÈNĀňZTpBh£\\ĎƀuXĖtKL¶G|»ĺEļĞ~ÜĢÛĊrOÙîvd]n¬VÊĜ°RÖpMƂªFbwEÀ©\\ ¤]ŸI®¥D³|Ë]CöAŤ¦ æ´¥¸Lv¼¢ĽBaôF~®²GÌÒEYzk¤°ahlVÕI^CxĈPsBƒºV¸@¾ªR²ĨN]´_eavSivc}p}Đ¼ƌkJÚe th_¸ ºx±ò_xN˲@ă¡ßH©Ùñ}wkNÕ¹ÇO½¿£ĕ]ly_WìIǪ`uTÅxYĒÖ¼kÖµMjJÚwn\\hĒv]îh|ÈƄøèg¸Ķß ĉĈWb¹ƀdéĘNTtP[öSvrCZaGubo´ŖÒÇĐ~¡zCI özx¢PnÈñ @ĥÒ¦]ƞV}³ăĔñiiÄÓVépKG½ÄÓávYoC·sitiaÀ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ñĤaYt¿¤VSñK¸¤nM¼JE±½¸ñoÜCƆæĪ^ĚQÖ¦^f´QüÜÊz¯lzUĺš@ìp¶n]sxtx¶@~ÒĂJb©gk{°~c°`Ô¬rV\\la¼¤ôá`¯¹LCÆbxEræOv[H[~|aB£ÖsºdAĐzNÂðsÞÆ Ĥªbab`ho¡³F«èVlo¤ÔRzpp®SĪº¨ÖºN ijd`a¦¤F³ºDÎńĀìCĜº¦Ċ~nS|gźvZkCÆj°zVÈÁƔ]LÊFZg čPkini«qÇczÍY®¬Ů»qR×ō©DÕ§ƙǃŵTÉĩ±ıdÑnYYIJvNĆĆØÜ Öp}e³¦m©iÓ|¹ħņ|ª¦QF¢Â¬ʖovg¿em^ucà÷gÕuíÙćĝ}FϼĹ{µHKsLSđƃrč¤[AgoSŇYMÿ§Ç{FśbkylQxĕ]T·¶[B ÑÏGáşşƇe ăYSsFQ}BwtYğÃ@~ CÍQ ×Wj˱rÉ¥oÏ ±«ÓÂ¥kwWűmcih³K~µh¯e]lµélEģEďsmÇŧē`ãògK_ÛsUʝćğ¶höO¤Ǜn³c`¡y¦CezYwa[ďĵűMę§]XÎ_íÛ]éÛUćİÕBƣ± dy¹T^dûÅÑŦ·PĻþÙ`K¦ ¢ÍeĥR¿³£[~äu¼dltW¸oRM¢ď\\z}Æzdvň{ÎXF¶°Â_ÒÂÏL©ÖTmu¼ãlīkiqéfA·Êµ\\őDc¥ÝFyÔćcűH_hLÜêĺШc}rn`½Ì@¸¶ªVLhŒ\\Ţĺk~Ġið°|gtTĭĸ^xvKVGréAébUuMJVÃO¡ qĂXËSģãlýà_juYÛÒBG^éÖ¶§EGÅzěƯ¤EkN[kdåucé¬dnYpAyČ{`]þ¯TbÜÈ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ðĀÒRZdž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¤JJJyJÈ`Ohߦ¡uËhIyCjmÿw ZG TiSsOB²fNmsPa{M{õE^Hj}gYpaeu¯oáwHjÁ½M¡pMuåmni{fk\\oÎqCwEZ¼KĝAy{m÷LwO×SimRI¯rKõBS«sFe]fµ¢óY_ÆPRcue°Cbo×bd£ŌIHgtrnyPt¦foaXďxlBowz_{ÊéWiêEGhܸºuFĈIxf®Y½ĀǙ]¤EyF²ċw¸¿@g¢§RGv»áW`ÃĵJwi]t¥wO½a[×]`ÃiüL¦LabbTÀåc}ÍhÆh®BHî|îºÉk¤Sy£ia©taį·Ɖ`ō¥UhO ĝLk}©Fos´JmµlŁu ønÑJWΪYÀïAetTŅÓGË«bo{ıwodƟ½OġܵxàNÖ¾P²§HKv¾]|BÆåoZ`¡Ø`ÀmºĠ~ÌЧnÇ ¿¤]wğ@srğu~Io[é±¹ ¿ſđÓ@qg¹zƱřaí°KtǤV»Ã[ĩǭƑ^ÇÓ@áťsZÏÅĭƋěpwDóÖáŻneQËq·GCœýS]x·ýq³OÕ¶Qzßti{řáÍÇWŝŭñzÇWpç¿JXĩè½cFÂLiVjx}\\NŇĖ¥GeJA¼ÄHfÈu~¸Æ«dE³ÉMA|bÒ ćhG¬CMõƤąAvüVéŀ_V̳ĐwQj´·ZeÈÁ¨X´Æ¡Qu·»ÕZ³ġqDoy`L¬gdp°şp¦ėìÅĮZ°Iähzĵf²å ĚÑKpIN|Ñ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ÕĢyFVvwxBèĻĒ©ĈtCĢɽŠȣ¦āæ·HĽîôNÔ~^¤Ɗu^s¼{TA¼ø°¢İªDè¾Ň¶ÝJ®Z´ğ~Sn|ªWÚ©òzPOȸbð¢|øĞŒQìÛÐ@ĞǎRS¤Á§d i´ezÝúØã]HqkIþËQǦÃsǤ[E¬ÉŪÍxXƒ·ÖƁİlƞ¹ª¹|XÊwnÆƄmÀêErĒtD®ċæcQE®³^ĭ¥©l}äQtoŖÜqÆkµªÔĻĴ¡@Ċ°B²Èw^^RsºT£ڿQPJvÄz^Đ¹Æ¯fLà´GC²dtĀRt¼¤ĦOðğfÔðDŨŁĞƘïPÈ®âbMüÀXZ ¸£@Å»»QÉ]dsÖ×_Í_ÌêŮ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°´ATeVamdUĐwʄvĮÕ\\uÆŗ¨Yp¹àZÂmWh{á}WØǍÉüwga§áCNęÎ[ĀÕĪgÖɪXøx¬½Ů¦¦[NÎLÜUÖ´òrÙŠxR^JkijnDX{U~ET{ļº¦PZcjF²Ė@pg¨B{u¨ŦyhoÚD®¯¢ WòàFΤ¨GDäz¦kŮPġqË¥À]eâÚ´ªKxīPÖ|æ[xäJÞĥsNÖ½I¬nĨY´®ÐƐmDŝuäđđEb ee_v¡}ìęNJē}qÉåT¯µRs¡M@}ůaa¯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Ñ£IsNgßHHªķÃh_¹¡ĝħń¦uÙùgS¯JH|sÝÅtÁïyMDč»eÕtA¤{b\\}G®u\\åPFqwÅaD K°ºâ_£ùbµmÁÛĹM[q|hlaªāI}ѵ@swtwm^oµD鼊yVky°ÉûÛR ³e¥]RÕěħ[ƅåÛDpJiVÂF²I »mN·£LbÒYbWsÀbpkiTZĄă¶Hq` ĥ_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|`ź¦ÂÈdrcÈbe¸`I¼čTF´¼Óýȃr¹ÍJ©k_șl³´_pĐ`oÒh¶pa^ÓĔ}D»^Xy`d[Kv JPhèhCrĂĚÂ^Êƌ wZLĠ£ÁbrzOIlMMĪŐžËr×ÎeŦtw|¢mKjSǘňĂStÎŦEtqFT¾E쬬ôxÌO¢ K³ŀºäYPVgŎ¦Ŋm޼VZwVlz¤ £Tl®ctĽÚó{GAÇge~Îd¿æaSba¥KKûj®_Ä^\\ؾbP®¦x^sxjĶI_Ä Xâ¼Hu¨Qh¡À@Ëô}±GNìĎlT¸ `V~R°tbÕĊ`¸úÛtÏFDu[MfqGH·¥yAztMFe|R_GkChZeÚ°tov`xbDnÐ{E}ZèxNEÞREn[Pv@{~rĆAB§EO¿|UZ~ìUf¨J²ĂÝÆsªB`s¶fvö¦Õ~dÔq¨¸º»uù[[§´sb¤¢zþF¢Æ ÀhÂW\\ıËIÝo±ĭŠ£þÊs}¡R]ěDg´VG¢j±®èºÃmpU[Á뺰rÜbNu¸}º¼`niºÔXĄ¤¼ÔdaµÁ_à ftQQgR·Ǔ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½}ÑRHYīĺûsÍniEoã½Ya²ė{c¬ĝgĂsAØÅwďõzFjw}«Dx¿}Uũlê@HÅF¨ÇoJ´Ónũuą¡Ã¢pÒÅØ TF²xa²ËXcÊlHîAßËŁkŻƑŷÉ©hWæß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¯ŪĽncÚbw\\zlvWªâ ¦gmĿBĹ£¢ƹřbĥkǫßeeZkÙIKueT»sVesbaĕ ¶®dNĄÄpªy¼³BE®lGŭCǶwêżĔÂepÍÀQƞpC¼ŲÈAÎô¶RäQ^Øu¬°_Èôc´¹ò¨P΢hlϦ´ĦÆ´sâÇŲPnÊD^¯°Upv}®BP̪jǬxSöwlfòªvqĸ|`HviļndĜĆhňem·FyÞqóSᝳX_ĞçêtryvL¤§z¦c¦¥jnŞklD¤øz½ĜàĂŧMÅ|áƆàÊcðÂFÜáŢ¥\\\\ºİøÒÐJĴîD¦zK²ǏÎEh~CDhMn^ÌöÄ©ČZÀaüfɭyœpį´ěFűk]Ôě¢qlÅĆÙa¶~ÄqêljN¬¼HÊNQ´ê¼VظE^ŃÒyM{JLoÒęæe±Ķygã¯JYÆĭĘëo¥Šo¯hcK«z_prC´ĢÖY¼ v¸¢RÅW³Â§fǸYi³xR´ďUË`êĿUûuĆBƣöNDH«ĈgÑaB{ÊNF´¬c·Åv}eÇÃGB»If¦HňĕM ~[iwjUÁKE¾dĪçWIèÀoÈXòyŞŮÈXâÎŚj|àsRyµÖPr´þ ¸^wþTDŔHr¸RÌmfżÕâCôoxĜƌÆĮÐYtâŦÔ@]ÈǮƒ\\μģUsȯLbîƲŚºyhr@ĒÔƀÀ²º\\êpJ}ĠvqtĠ@^xÀ£È¨mËÏğ}n¹_¿¢×Y_æpÅA^{½Lu¨GO±Õ½ßM¶wÁĢÛPƢ¼pcIJx|ap̬HÐŊSfsðBZ¿©XÏÒKk÷Eû¿S rEFsÕūkóVǥʼniTL¡n{uxţÏhôŝ¬ğōNNJkyPaqÂğ¤K®YxÉƋÁ]āęDqçgOgILu\\_gz]W¼~CÔē]bµogpÑ_oď`´³Țkl`IªºÎȄqÔþ»E³ĎSJ»_f·adÇqÇc¥Á_Źw{L^ɱćxU£µ÷xgĉp»ĆqNē`rĘzaĵĚ¡K½ÊBzyäKXqiWPÏɸ½řÍcÊG|µƕƣGË÷k°_^ý|_zċBZocmø¯hhcæ\\lMFlư£ĜÆyHF¨µêÕ]HA àÓ^it `þßäkĤÎT~Wlÿ¨ÔPzUCNVv [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ÍçWVi]ë©Ä÷àyƛhÚU°adcQ~Mx¥cc¡ÙaSyFÖkuRýq¿ÔµQĽ³aG{¿FµëªéĜÿª@¬·K·àariĕĀ«V»ŶĴūgèLǴŇƶaftèBŚ£^âǐÝ®M¦ÁǞÿ¬LhJ¾óƾƺcxwf]Y ´¦|QLn°adĊ \\¨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ÀgVjzlhǶfOfdªB]pjTOtĊn¤}®¦Č¥d¢¼»ddY¼t¢eȤJ¤}Ǿ¡°§¤AÐlc@ĝsªćļđAçwxUuzEÖġ~AN¹ÄÅȀݦ¿ģŁéì±H ãd«g[ؼēÀcīľġ¬cJµ ÐʥVȝ¸ßS¹ý±ğkƁ¼ą^ɛ¤Ûÿb[}¬ōõÃ]ËNm®g@Bg}ÍF±ǐyL¥íCIijÏ÷Ñį[¹¦[âšEÛïÁÉdƅß{âNÆāŨß¾ě÷yC£k´ÓH@¹TZ¥¢į·ÌAЧ®Zc v½Z¹|ÅWZqgW|ieZÅYVÓqdqbc²R@c¥Rã»Geeƃī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ŘvgÌsN@îá¾ó@ÙwU±ÉT廣TđWxq¹Zobs[ׯ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ÚÅTSijYo|Ç[ǾµMW¢ĭiÕØ¿@Mh pÕ]jéò¿OƇĆƇpêĉâlØwěsǩĵ¸c bU¹ř¨WavquSMzeo_^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~ź¤PnMĪÖB£kné§żćĆKǰ¼L¶èâz¨u¦¥LDĘz¬ýÎmĘd¾ßFzhg²Fy¦ĝ¤ċņbÎ@yĄæm°NĮZRÖíJ²öLĸÒ¨Y®ƌÐVàtt_ÚÂyĠz]ŢhzĎ{ÂĢXc|ÐqfO¢¤ögÌHNPKŖUú´xx[xvĐCûĀìÖT¬¸^}Ìsòd´_KgžLĴ ÀBon|H@Êx¦BpŰŌ¿fµƌA¾zLjRx¶FkĄźRzŀ~¶[´HnªVƞuĒȨƎcƽÌm¸ÁÈM¦x͊ëÀxdžBú^´W£dkɾĬpw˂ØɦļĬIŚÊnŔa¸~J°îlɌxĤÊÈðhÌ®gT´øàCÀ^ªerrƘd¢İP|Ė ŸWªĦ^¶´ÂLaT±ü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ž¬stRÆdĠİwܸôW¾ƮłÒ_{Ìû¼jº¹¢GǪÒ¯ĘZ`ºŊecņą~BÂgzpâēòYǠȰÌTΨÂW|fcă§uF@N¢XLRMº[ğȣſï|¥Jkc`sʼnǷY¹W@µ÷K ãï³ÛIcñ·VȋÚÒķø©þ¥yÓğęmWµÎumZyOŅƟĥÓ~sÑL¤µaÅ Y¦ocyZ{y c]{Ta©`U_Ěē£ωÊƍKùK¶ȱÝƷ§{û»ÅÁȹÍéuij|¹cÑdìUYOuFÕÈYvÁCqÓTǢí§·S¹NgV¬ë÷Á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Ňîŵœè[É@ƉĄEtƇϳħZ«mJ ×¾MtÝĦ£IwÄå\\Õ{OwĬ©LÙ³ÙgBƕŀrÌĢŭO¥lãyC§HÍ£ßEñX¡°ÙCgpťzb`wIvA|§hoĕ@E±iYd¥OϹS|}F@¾oAO²{tfÜ¢FǂÒW²°BĤh^Wx{@¬F¸¡ķn£P|ªĴ@^ĠĈæbÔc¶lYi ^MicϰÂ[ävï¶gv@ÀĬ·lJ¸sn|¼u~a]ÆÈtŌºJpþ£KKf~¦UbyäIĺãnÔ¿^ŵMThĠܤko¼Ŏìąǜh`[tRd²IJ_XPrɲlXiL§à¹H°Ȧqº®QCbAŌJ¸ĕÚ³ĺ§ `d¨YjiZvRĺ±öVKkjGȊÄePĞZmļKÀ[`ösìhïÎoĬdtKÞ{¬èÒÒBÔpIJÇĬJŊ¦±J«Y§@·pHµàåVKepWftsAÅqC·¬ko«pHÆuK@oHĆÛķhxenS³àǍ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¦ÅÄÜdwAb×ĠąJ¤DüègĺqBqj°lI¡ĨÒ¤úSHbjÎB°aZ¢KJO[|A£Dx}NìHUnrk kp¼Y kMJn[aGáÚÏ[½rc}aQxOgsPMnUsncZ sKúvAtÞġ£®ĀYKdnFw¢JE°Latf`¼h¬we|Æbj}GA·~W`¢MC¤tL©IJ°qdfObÞĬ¹ttu`^ZúE`[@Æsîz®¡CƳƜG²R¢RmfwĸgÜą G@pzJM½mhVy¸uÈÔO±¨{LfæU¶ßGĂq\\ª¬²I¥IʼnÈīoıÓÑAçÑ|«LÝcspīðÍg të_õ\\ĉñLYnĝgRǡÁiHLlõUĹ²uQjYi§Z_c¨´ĹĖÙ·ŋI aBDR¹ȥr¯GºßK¨jWkɱOqWij\\aQ\\sg_ĆǛōëp»£lğÛgSŶN®À]ÓämĹãJaz¥V}Le¤Lýo¹IsŋÅÇ^bz ³tmEÁ´a¹cčecÇNĊãÁ\\č¯dNj]jZµkÓdaćå]ğij@ ©O{¤ĸm¢E·®«|@Xwg]A챝XǁÑdzªcwQÚŝñ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ĪğPs{ò²Vw¹t³ŜË[Ñ}X\\gsF£sPAgěp×ëfYHāďÖqēŭOÏëdLü\\it^c®Rʺ¶¢H°mrY£B¹čIoľu¶uI]vģSQ{UŻÅ}QÂ|̰ƅ¤ĩŪU ęĄÌZÒ\\v²PĔ»ƢNHĂyAmƂwVm`]ÈbH`Ì¢²ILvĜH®¤Dlt_¢JJÄämèÔDëþgºƫaʎÌrêYi~ ÎݤNpÀA¾Ĕ¼b ð÷®üszMzÖĖQdȨýv§Tè|ªHþa¸|Ð ƒwKĢx¦ivr^ÿ ¸l öæfƟĴ·PJv}n\\h¹¶v·À|\\ƁĚN´ĜçèÁz]ġ¤²¨QÒŨTIlªťØ}¼˗ƦvÄùØE«FïËIqōTvāÜŏíÛßÛVj³âwGăÂíNOPìyV³ʼnĖýZso§HÑiYw[ß\\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ÓƻėojqYhĹT©oūĶ£]ďxĩǑMĝq`B´ƃ˺Чç~²ņj@¥@đ´ί}ĥtPńǾV¬ufÓÉCtÓ̻ ¹£G³]ƖƾŎĪŪĘ̖¨ʈĢƂlɘ۪üºňUðǜȢƢż̌ȦǼĤŊɲĖÂKq´ï¦ºĒDzņɾªǀÞĈĂD½ĄĎÌŗĞrôñnN¼â¾ʄľԆ|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ǚ\\đ¾JwÀďksãAfÕ¦L}waoZD½Ml«]eÒÅaɲáo½FõÛ]ĻÒ¡wYR£¢rvÓ®y®LFLzĈô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ĺSZgrpiƼĘÔ¨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\\ZjÒ¨GtpþYŊĕ´zUOëPîMĄÁxH´áiÜUàîÜŐĂÛSuŎrJð̬EFÁú×uÃÎkrĒ{V}İ«O_ÌËĬ©ÓŧSRѱ§Ģ£^ÂyèçěM³Ƃę{[¸¿u ºµ[gt£¸OƤĿéYõ·kĀq]juw¥DĩƍõÇPéĽG©ã¤G uȧþRcÕĕNyyû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ĻĖHAëáa OÇðñęNw œľ·LmI±íĠĩPÉ×®ÿscB³±JKßĊ«` ađ»·QAmOVţéÿ¤¹SQt]]Çx±¯A@ĉij¢Óļ©l¶ÅÛrŕspãRk~¦ª]Į´FRådČsCqđéFn¿ÅƃmÉx{W©ºƝºįkÕƂƑ¸wWūЩÈF£\\tÈ¥ÄRÈýÌJ lGr^×äùyÞ³fjc¨£ÂZ|ǓMĝÏ@ëÜőRĝ÷¡{aïȷPu°ËXÙ{©TmĠ}Y³ÞIňµç½©C¡į÷¯B»|St»]vųs»}MÓ ÿʪƟǭA¡fs»PY¼c¡»¦cċ¥£~msĉPSi^o©AecPeǵkgyUi¿h}aHĉ^|á´¡HØûÅ«ĉ®]m¡qĉ¶³ÈyôōLÁstB®wn±ă¥HSòė£Së@לÊăxÇN©©T±ª£IJ¡fb®Þbb_Ą¥xu¥B{łĝ³«`dƐt¤ťiñÍUuºí`£^tƃIJc·ÛLO½sç¥Ts{ă\\_»kϱq©čiìĉ|ÍI¥ć¥]ª§D{ŝŖÉR_sÿc³ĪōƿΧp[ĉc¯bKmR¥{³Ze^wx¹dƽŽôIg §Mĕ ƹĴ¿ǣÜÍ]Ý]snåA{eƭ`ǻŊĿ\\ijŬűYÂÿ¬jĖqßb¸L«¸©@ěĀ©ê¶ìÀEH|´bRľÓ¶rÀQþvl®ÕETzÜdb hw¤{LRdcb¯ÙVgƜßzÃôì®^jUèXÎ|UäÌ»rK\\ªN¼pZCüVY¤ɃRi^rPŇTÖ}|br°qňb̰ªiƶGQ¾²x¦PmlŜ[Ĥ¡Ξ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ðļATUvdTGº̼Ô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_bsKF¯¡IxmELcÿZ¤ĢÝsuBLùtYdmVtNmtOPhRw~bd ¾qÐ\\âÙH\\bImlNZ»loqlVmGā§~QCw¤{A\\PKNY¯bFkC¥sks_Ã\\ă«¢ħkJi¯rrAhĹûç£CUĕĊ_ÔBixÅÙĄnªÑaM~ħpOu¥sîeQ¥¤^dkKwlL~{L~hw^ófćKyEKzuÔ¡qQ¤xZÑ¢^ļöܾEp±âbÊÑÆ^fk¬ NC¾YpxbK~¥eÖäBlt¿Đx½I[ĒǙWf»Ĭ}d§dµùEuj¨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ģ¢\\śnkOw¥±T»ƷFɯàĩÞáB¹Æ ÑUwŕĽw[mG½Èå~Æ÷QyěCFmĭZīŵVÁƿQƛûXS²b½KϽĉS©ŷXĕ{ĕK·¥Ɨcqq©f¿]ßDõU³hgËÇïģÉɋwk¯í}I·œbmÉřīJɥĻˁ×xoɹīlc ¤³Xù]DžA¿w͉ì¥wÇN·ÂËnƾƍdǧđ®ƝvUm©³G\\}µĿQyŹlăµEwLJQ½yƋBe¶ŋÀůo¥AÉw@{Gpm¿AijŽKLh³`ñcËtW±»ÕSëüÿďDu\\wwwù³VLŕOMËGh£õP¡erÏd{ġWÁ č|yšg^ğyÁzÙs`s|ÉåªÇ}m¢Ń¨`x¥ù^}Ì¥H«YªƅAйn~ź¯f¤áÀzgÇDIÔ´AňĀÒ¶ûEYospõD[{ù°]uJqU|Soċxţ[õÔĥkŋÞŭZ˺óYËüċrw ÞkrťË¿XGÉbřaDü·Ē÷Aê[ÄäI®BÕĐÞ_¢āĠpÛÄȉĖġDKwbmÄNôfƫVÉvidzHQµâFùœ³¦{YGd¢ĚÜO {Ö¦ÞÍÀP^bƾl[vt×ĈÍE˨¡Đ~´î¸ùÎhuè`¸HÕŔVºwĠââWò@{ÙNÝ´ə²ȕn{¿¥{l÷eé^eďXj©î\\ªÑòÜìc\\üqÕ[Č¡xoÂċªbØø|¶ȴZdÆÂońéG\\¼C°ÌÆn´nxÊOĨŪƴĸ¢¸òTxÊǪMīĞÖŲÃɎOvʦƢ~FRěò¿ġ~åŊúN¸qĘ[Ĕ¶ÂćnÒPĒÜvúĀÊbÖ{Äî¸~Ŕünp¤ÂH¾ĄYÒ©ÊfºmÔĘcDoĬMŬS¤s²ʘÚžȂVŦ èW°ªB|IJXŔþÈJĦÆæFĚêYĂªĂ]øªŖNÞüAfɨJ¯ÎrDDĤ`mz\\§~D¬{vJ«lµĂb¤pŌŰNĄ¨ĊXW|ų ¿¾ɄĦƐMTòP÷fØĶK¢ȝ˔Sô¹òEð`Ɩ½ǒÂň×äı§ĤƝ§C~¡hlåǺŦŞkâ~}FøàIJaĞfƠ¥Ŕd®U¸źXv¢aƆúŪtŠųƠjdƺƺÅìnrh\\ĺ¯äɝĦ]èpĄ¦´LƞĬ´ƤǬ˼Ēɸ¤rºǼ²¨zÌPðŀbþ¹ļD¢¹\\ĜÑŚ¶ZƄ³àjĨoâȴLÊȮĐĚăÀêZǚŐ¤qȂ\\L¢ŌİfÆs|zºeªÙæ§{Ā´ƐÚ¬¨Ĵà²łhʺKÞºÖTiƢ¾ªì°`öø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ŧoaFLgQN_dV@Zom_ć\\ßc±x¯oœRcfe £o§ËgToÛJíĔóu |wP¤XnO¢ÉŦ¯rNÄā¤zâŖÈRpŢZÚ{GrFt¦Òx§ø¹RóäV¤XdżâºWbwڍUd®bêņ¾jnŎGŃŶnzÚSeîĜZczî¾i]ÍQaúÍÔiþĩȨWĢü|Ėu[qb[swP@ÅğP¿{\\¥A¨ÏѨj¯X\\¯MKpA³[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 ¶F̬O_ïlÁgz±AXeµÄĵ{¶]gitgIj·¥îakS¨ÐƎk}ĕ{gBqGf{¿aU^fIư³õ{YıëNĿk©ïËZŏR§òoY×Ógc ĥs¡bġ«@dekąI[nlPqCnp{ō³°`{PNdƗqSÄĻNNâyj]äÒD ĬH°Æ]~¡HO¾X}ÐxgpgWrDGpù^LrzWxZ^¨´T\\|~@IzbĤjeĊªz£®ĔvěLmV¾Ô_È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ƸÁxc"],["@@©ª"],["@@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´òKLÈüD|s`ŋć]Ã`đMûƱ½~Y°ħ`ƏíW½eI½{aOIrÏ¡ĕŇapµÜƅġ^ÖÛbÙŽŏml½SêqDu[RãË»ÿw`»y¸_ĺę}÷`M¯ċfCVµqʼn÷Zgg`d½pDOÎCn^uf²ènh¼WtƏxRGg¦ pVFI±G^Ic´ecGĹÞ½sëĬhxW}KÓeXsbkF¦LØgTkïƵNï¶}Gyw\\oñ¡nmĈzj@Óc£»Wă¹Ój_m»¹·~MvÛaq»ê\\ÂoVnÓØÍ²«bq¿efE Ĝ^Q~ Évýş¤²ĮpEİ}zcĺL½¿gÅ¡ýE¡ya£³t\\¨\\vú»¼§·Ñr_oÒý¥u_n»_At©Þűā§IVeëY}{VPÀFA¨ąB}q@|Ou\\FmQFÝ Mwå}]|FmÏCawu_p¯sfÙgY DHl`{QEfNysB¦zG¸rHeN\\CvEsÐùÜ_·ÖĉsaQ¯}_UxÃđqNH¬Äd^ÝŰR¬ã°wećJE·vÝ·HgéFXjÉê`|ypxkAwWĐpb¥eOsmzwqChóUQl¥F^lafanòsrEvfQdÁUVfÎvÜ^eftET¬ôA\\¢sJnQTjPØxøK|nBzĞ»LY FDxÓvr[ehľvN¢o¾NiÂxGpâ¬zbfZo~hGi]öF||NbtOMn eA±tPTLjpYQ|SHYĀxinzDJÌg¢và¥Pg_ÇzIIII£®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"],["@@mn"],["@@EpFo"],["@@ea¢pl¸Eõ¹hj[]ÔCÎ@lj¡uBX ´AI¹ [yDU]W`çwZkmc MpÅv}IoJlcafŃK°ä¬XJmÐ đhI®æÔtSHnEÒrÈc"],["@@rMUwAS®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