Commit dcacef75 authored by miaojiale's avatar miaojiale

Merge branch 'dev_Miaojiale' into dev

parents 5e7c0a12 f9bca93c
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
"core-js": "^3.6.5", "core-js": "^3.6.5",
"crypto-js": "^4.0.0", "crypto-js": "^4.0.0",
"dayjs": "^1.8.28", "dayjs": "^1.8.28",
"echarts": "^5.1.2", "echarts": "4.8.0",
"element-ui": "^2.15.2", "element-ui": "^2.15.2",
"js-cookie": "^2.2.1", "js-cookie": "^2.2.1",
"jsbarcode": "^3.11.5", "jsbarcode": "^3.11.5",
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
"lodash": "^4.17.15", "lodash": "^4.17.15",
"monaco-editor": "^0.23.0", "monaco-editor": "^0.23.0",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pdfjs-dist": "2.5.207",
"qrcodejs2": "^0.0.2", "qrcodejs2": "^0.0.2",
"qs": "^6.9.4", "qs": "^6.9.4",
"screenfull": "^5.0.2", "screenfull": "^5.0.2",
......
...@@ -43,6 +43,15 @@ export function addPatient(data = {}, type = "") { ...@@ -43,6 +43,15 @@ export function addPatient(data = {}, type = "") {
}) })
} }
// 随访录入
export function addFollowPatient(data = {}, type = "") {
return request({
url: `/disease-data/data/patient/follow/${type}`,
method: "post",
data,
})
}
// 删除草稿 // 删除草稿
export function deletePatient(data) { export function deletePatient(data) {
return request({ return request({
......
import request from "@/utils/request"
/* 质控报表 */
// 审核员列表
export function checkerQuality(params = {}) {
return request({
url: "/disease-data/data/report/checker/quality",
method: "get",
params,
})
}
// 管理员列表
export function adminQuality(params = {}) {
return request({
url: "/disease-data/data/report/admin/quality",
method: "get",
params,
})
}
...@@ -53,11 +53,11 @@ export function saveSysCheckNote(data = {}) { ...@@ -53,11 +53,11 @@ export function saveSysCheckNote(data = {}) {
}) })
} }
// //修改筛查病例审核意见 //修改筛查病例审核意见
// export function putFollowCheckAdvice(data = {}) { export function putScreeningCheckAdvice(data = {}) {
// return request({ return request({
// url: "/disease-data/dataCheck/follow/check/advice", url: "/disease-data/dataCheck/screening/check/advice",
// method: "put", method: "put",
// data, data,
// }) })
// } }
...@@ -175,3 +175,27 @@ export function getLogPage(params = {}) { ...@@ -175,3 +175,27 @@ export function getLogPage(params = {}) {
params, params,
}) })
} }
// 用户管理启用禁用
export function baseEnable(params = {}) {
return request({
url: "/cloud-upms/user/base/enable",
method: "get",
params,
})
}
// 获取消息列表
export function getMessage(params = {}) {
return request({
url: "/disease-data/sys/message/list",
method: "get",
params,
})
}
// 获取驳回修改消息
export function getRefuteMessage(params) {
return request({
url: `/disease-data/sys/message/remind/${params}`,
method: "get",
params,
})
}
{"type":"FeatureCollection","features":[{"type":"Feature","id":"710000","properties":{"id":"710000","cp":[121.509062,24.044332],"name":"台湾","childNum":6},"geometry":{"type":"MultiPolygon","coordinates":[["@@°Ü¯Û"],["@@ƛĴÕƊÉɼģºðʀ\\ƎsÆNŌÔĚäœnÜƤɊĂǀĆĴžĤNJŨxĚĮǂƺòƌ‚–âÔ®ĮXŦţƸZûЋƕƑGđ¨ĭMó·ęcëƝɉlÝƯֹÅŃ^Ó·śŃNjƏďíåɛGɉ™¿@ăƑŽ¥ĘWǬÏĶŁâ"],["@@\\p|WoYG¿¥I†j@¢"],["@@…¡‰@ˆV^RqˆBbAŒnTXeRz¤Lž«³I"],["@@ÆEE—„kWqë @œ"],["@@fced"],["@@„¯ɜÄèaì¯ØǓIġĽ"],["@@çûĖ롖hòř "]],"encodeOffsets":[[[122886,24033]],[[123335,22980]],[[122375,24193]],[[122518,24117]],[[124427,22618]],[[124862,26043]],[[126259,26318]],[[127671,26683]]]}},{"type":"Feature","id":"130000","properties":{"id":"130000","cp":[114.502461,38.045474],"name":"河北","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@o~†Z]‚ªr‰ºc_ħ²G¼s`jΟnüsœłNX_“M`ǽÓnUK…Ĝēs¤­©yrý§uģŒc†JŠ›e"],["@@U`Ts¿m‚"],["@@oºƋÄd–eVŽDJj£€J|Ådz•Ft~žKŨ¸IÆv|”‡¢r}膎onb˜}`RÎÄn°ÒdÞ²„^®’lnÐèĄlðӜ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcœŋ`–ZÔ’¶êqvFƚ†N®ĆTH®¦O’¾ŠIbÐã´BĐɢŴÆíȦp–ĐÞXR€·nndOž¤’OÀĈƒ­Qg˜µFo|gȒęSWb©osx|hYh•gŃfmÖĩnº€T̒Sp›¢dYĤ¶UĈjl’ǐpäìë|³kÛfw²Xjz~ÂqbTŠÑ„ěŨ@|oM‡’zv¢ZrÃVw¬ŧˏfŒ°ÐT€ªqŽs{Sž¯r æÝlNd®²Ğ džiGʂJ™¼lr}~K¨ŸƐÌWö€™ÆŠzRš¤lêmĞL΄’@¡|q]SvK€ÑcwpÏρ†ĿćènĪWlĄkT}ˆJ”¤~ƒÈT„d„™pddʾĬŠ”ŽBVt„EÀ¢ôPĎƗè@~‚k–ü\\rÊĔÖæW_§¼F˜†´©òDòj’ˆYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkv‚GpuARhÞÆǶgƊTǼƹS£¨¡ù³ŘÍ]¿Ây™ôEP xX¶¹܇O¡“gÚ¡IwÃ鑦ÅB‡Ï|ǰ…N«úmH¯‹âŸDùŽyŜžŲIÄuШDž•¸dɂ‡‚FŸƒ•›Oh‡đ©OŸ›iÃ`ww^ƒÌkŸ‘ÑH«ƇǤŗĺtFu…{Z}Ö@U‡´…ʚLg®¯Oı°ÃwŸ ^˜—€VbÉs‡ˆmA…ê]]w„§›RRl£‡ȭµu¯b{ÍDěïÿȧŽuT£ġƒěŗƃĝ“Q¨fV†Ƌ•ƅn­a@‘³@šď„yýIĹÊKšŭfċŰóŒxV@tˆƯŒJ”]eƒR¾fe|rHA˜|h~Ėƍl§ÏŠlTíb ØoˆÅbbx³^zÃ͚¶Sj®A”yÂhðk`š«P€”ˈµEF†Û¬Y¨Ļrõqi¼‰Wi°§’б´°^[ˆÀ|ĠO@ÆxO\\tŽa\\tĕtû{ġŒȧXýĪÓjùÎRb›š^ΛfK[ݏděYfíÙTyŽuUSyŌŏů@Oi½’éŅ­aVcř§ax¹XŻác‡žWU£ôãºQ¨÷Ñws¥qEH‰Ù|‰›šYQoŕÇyáĂ£MðoťÊ‰P¡mšWO¡€v†{ôvîēÜISpÌhp¨ ‘j†deŔQÖj˜X³à™Ĉ[n`Yp@Už–cM`’RKhŒEbœ”pŞlNut®Etq‚nsÁŠgA‹iú‹oH‡qCX‡”hfgu“~ϋWP½¢G^}¯ÅīGCŸÑ^ãziMáļMTÃƘrMc|O_ž¯Ŏ´|‡morDkO\\mĆJfl@c̬¢aĦtRıҙ¾ùƀ^juųœK­ƒUFy™—Ɲ…›īÛ÷ąV×qƥV¿aȉd³B›qPBm›aËđŻģm“Å®Vйd^K‡KoŸnYg“¯Xhqa”Ldu¥•ÍpDž¡KąÅƒkĝęěhq‡}HyÓ]¹ǧ£…Í÷¿qáµ§š™g‘¤o^á¾ZE‡¤i`ij{n•ƒOl»ŸWÝĔįhg›F[¿¡—ßkOüš_‰€ū‹i„DZàUtėGylƒ}ŒÓM}€jpEC~¡FtoQi‘šHkk{Ãmï‚"]],"encodeOffsets":[[[119712,40641]],[[121616,39981]],[[116462,37237]]]}},{"type":"Feature","id":"140000","properties":{"id":"140000","cp":[111.849248,36.857014],"name":"山西","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@Þĩ҃S‰ra}Á€yWix±Üe´lè“ßÓǏok‘ćiµVZģ¡coœ‘TS˹ĪmnÕńe–hZg{gtwªpXaĚThȑp{¶Eh—®RćƑP¿£‘Pmc¸mQÝW•ďȥoÅîɡųAďä³aωJ‘½¥PG­ąSM­™…EÅruµé€‘Yӎ•Ō_d›ĒCo­Èµ]¯_²ÕjāŽK~©ÅØ^ԛkïçămϑk]­±ƒcݯÑÃmQÍ~_a—pm…~ç¡q“ˆu{JÅŧ·Ls}–EyÁÆcI{¤IiCfUc•ƌÃp§]웫vD@¡SÀ‘µM‚ÅwuŽYY‡¡DbÑc¡hƒ×]nkoQdaMç~eD•ÛtT‰©±@¥ù@É¡‰ZcW|WqOJmĩl«ħşvOÓ«IqăV—¥ŸD[mI~Ó¢cehiÍ]Ɠ~ĥqXŠ·eƷœn±“}v•[ěďŽŕ]_‘œ•`‰¹ƒ§ÕōI™o©b­s^}Ét±ū«³p£ÿ·Wµ|¡¥ăFÏs׌¥ŅxŸÊdÒ{ºvĴÎêÌɊ²¶€ü¨|ÞƸµȲ‘LLúÉƎ¤ϊęĔV`„_bª‹S^|ŸdŠzY|dz¥p†ZbÆ£¶ÒK}tĦÔņƠ‚PYzn€ÍvX¶Ěn ĠÔ„zý¦ª˜÷žÑĸَUȌ¸‚dòÜJð´’ìúNM¬ŒXZ´‘¤ŊǸ_tldIš{¦ƀðĠȤ¥NehXnYG‚‡R° ƬDj¬¸|CĞ„Kq‚ºfƐiĺ©ª~ĆOQª ¤@ìǦɌ²æBŒÊ”TœŸ˜ʂōĖ’šĴŞ–ȀœÆÿȄlŤĒö„t”νî¼ĨXhŒ‘˜|ªM¤Ðz"],"encodeOffsets":[[116874,41716]]}},{"type":"Feature","id":"150000","properties":{"id":"150000","cp":[111.670801,41.818311],"name":"内蒙古","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@¯PqƒFB…‰|S•³C|kñ•H‹d‘iÄ¥sˆʼnő…PóÑÑE^‘ÅPpy_YtS™hQ·aHwsOnʼnÚs©iqj›‰€USiº]ïWš‰«gW¡A–Rë¥_ŽsgÁnUI«m‰…„‹]j‡vV¼euhwqA„aW˜ƒ_µj…»çjioQR¹ēÃßt@r³[ÛlćË^ÍÉáG“›OUۗOB±•XŸkŇ¹£k|e]ol™ŸkVͼÕqtaÏõjgÁ£§U^Œ”RLˆËnX°Ç’Bz†^~wfvˆypV ¯„ƫĉ˭ȫƗŷɿÿĿƑ˃ĝÿÃǃßËőó©ǐȍŒĖM×ÍEyx‹þp]Évïè‘vƀnÂĴÖ@‚‰†V~Ĉv¦wĖt—ējyÄDXÄxGQuv_›i¦aBçw‘˛wD™©{ŸtāmQ€{EJ§KPśƘƿ¥@‰sCT•É}ɃwˆƇy±ŸgÑ“}T[÷kÐ禫…SÒ¥¸ëBX½‰HáŵÀğtSÝÂa[ƣ°¯¦P]£ġ“–“Òk®G²„èQ°óMq}EŠóƐÇ\\ƒ‡@áügQ͋u¥Fƒ“T՛¿Jû‡]|mvāÎYua^WoÀa·­ząÒot×¶CLƗi¯¤mƎHNJ¤îìɾŊìTdåwsRÖgĒųúÍġäÕ}Q¶—ˆ¿A•†‹[¡Œ{d×uQAƒ›M•xV‹vMOmăl«ct[wº_šÇʊŽŸjb£ĦS_é“QZ“_lwgOiýe`YYLq§IÁˆdz£ÙË[ÕªuƏ³ÍT—s·bÁĽäė[›b[ˆŗfãcn¥îC¿÷µ[ŏÀQ­ōšĉm¿Á^£mJVm‡—L[{Ï_£›F¥Ö{ŹA}…×Wu©ÅaųijƳhB{·TQqÙIķˑZđ©Yc|M¡…L•eVUóK_QWk’_ĥ‘¿ãZ•»X\\ĴuUƒè‡lG®ěłTĠğDєOrÍd‚ÆÍz]‹±…ŭ©ŸÅ’]ŒÅÐ}UË¥©Tċ™ïxgckfWgi\\ÏĒ¥HkµE˜ë{»ÏetcG±ahUiñiWsɁˆ·c–C‚Õk]wȑ|ća}w…VaĚ᠞ŒG°ùnM¬¯†{ÈˆÐÆA’¥ÄêJxÙ¢”hP¢Ûˆº€µwWOŸóFŽšÁz^ÀŗÎú´§¢T¤ǻƺSė‰ǵhÝÅQgvBHouʝl_o¿Ga{ïq{¥|ſĿHĂ÷aĝÇq‡Z‘ñiñC³ª—…»E`¨åXēÕqÉû[l•}ç@čƘóO¿¡ƒFUsA‰“ʽīccšocƒ‚ƒÇS}„“£‡IS~ălkĩXçmĈ…ŀЂoÐdxÒuL^T{r@¢‘žÍƒĝKén£kQ™‰yšÅõËXŷƏL§~}kqš»IHėDžjĝŸ»ÑÞoŸå°qTt|r©ÏS‹¯·eŨĕx«È[eMˆ¿yuˆ‘pN~¹ÏyN£{©’—g‹ħWí»Í¾s“əšDž_ÃĀɗ±ą™ijĉʍŌŷ—S›É“A‹±åǥɋ@럣R©ąP©}ĹªƏj¹erƒLDĝ·{i«ƫC£µsKCš…GS|úþX”gp›{ÁX¿Ÿć{ƱȏñZáĔyoÁhA™}ŅĆfdʼn„_¹„Y°ėǩÑ¡H¯¶oMQqð¡Ë™|‘Ñ`ƭŁX½·óۓxğįÅcQ‡ˆ“ƒs«tȋDžF“Ÿù^i‘t«Č¯[›hAi©á¥ÇĚ×l|¹y¯YȵƓ‹ñǙµï‚ċ™Ļ|Dœ™üȭ¶¡˜›oŽäÕG\\ďT¿Òõr¯œŸLguÏYęRƩšɷŌO\\İТæ^Ŋ IJȶȆbÜGŽĝ¬¿ĚVĎgª^íu½jÿĕęjık@Ľƒ]ėl¥Ë‡ĭûÁ„ƒėéV©±ćn©­ȇžÍq¯½•YÃÔʼn“ÉNѝÅÝy¹NqáʅDǡËñ­ƁYÅy̱os§ȋµʽǘǏƬɱà‘ưN¢ƔÊuľýľώȪƺɂļžxœZĈ}ÌʼnŪ˜ĺœŽĭFЛĽ̅ȣͽÒŵìƩÇϋÿȮǡŏçƑůĕ~Ǎ›¼ȳÐUf†dIxÿ\\G ˆzâɏÙOº·pqy£†@ŒŠqþ@Ǟ˽IBäƣzsÂZ†ÁàĻdñ°ŕzéØűzșCìDȐĴĺf®ŽÀľưø@ɜÖÞKĊŇƄ§‚͑těï͡VAġÑÑ»d³öǍÝXĉĕÖ{þĉu¸ËʅğU̎éhɹƆ̗̮ȘNJ֥ड़ࡰţાíϲäʮW¬®ҌeרūȠkɬɻ̼ãüfƠSצɩςåȈHϚÎKdzͲOðÏȆƘ¼CϚǚ࢚˼ФԂ¤ƌžĞ̪Qʤ´¼mȠJˀŸƲÀɠmǐnǔĎȆÞǠN~€ʢĜ‚¶ƌĆĘźʆȬ˪ĚǏĞGȖƴƀj`ĢçĶāàŃºē̃ĖćšYŒÀŎüôQÐÂŎŞdžŞêƖš˜oˆDĤÕºÑǘÛˤ³̀gńƘĔÀ^žªƂ`ªt¾äƚêĦĀ¼Ð€Ĕǎ¨Ȕ»͠^ˮÊȦƤøxRrŜH¤¸ÂxDĝŒ|ø˂˜ƮÐ¬ɚwɲFjĔ²Äw°dždÀɞ_ĸdîàŎjʜêTĞªŌ‡ŜWÈ|tqĢUB~´°ÎFC•ŽU¼pĀēƄN¦¾O¶ŠłKĊOj“Ě”j´ĜYp˜{¦„ˆSĚÍ\\Tš×ªV–÷Ší¨ÅDK°ßtŇĔKš¨ǵÂcḷ̌ĚǣȄĽF‡lġUĵœŇ‹ȣFʉɁƒMğįʏƶɷØŭOǽ«ƽū¹Ʊő̝Ȩ§ȞʘĖiɜɶʦ}¨֪ࠜ̀ƇǬ¹ǨE˦ĥªÔêFŽxúQ„Er´W„rh¤Ɛ \\talĈDJ˜Ü|[Pll̚¸ƎGú´Pž¬W¦†^¦–H]prR“n|or¾wLVnÇIujkmon£cX^Bh`¥V”„¦U¤¸}€xRj–[^xN[~ªŠxQ„‚[`ªHÆÂExx^wšN¶Ê˜|¨ì†˜€MrœdYp‚oRzNy˜ÀDs~€bcfÌ`L–¾n‹|¾T‚°c¨È¢a‚r¤–`[|òDŞĔöxElÖdH„ÀI`„Ď\\Àì~ƎR¼tf•¦^¢ķ¶e”ÐÚMŒptgj–„ɡČÅyġLû™ŇV®ŠÄÈƀ†Ď°P|ªVV†ªj–¬ĚÒêp¬–E|ŬÂc|ÀtƐK fˆ{ĘFǜƌXƲąo½Ę‘\\¥–o}›Ûu£ç­kX‘{uĩ«āíÓUŅßŢq€Ť¥lyň[€oi{¦‹L‡ń‡ðFȪȖ”ĒL„¿Ì‹ˆfŒ£K£ʺ™oqNŸƒwğc`ue—tOj×°KJ±qƒÆġm‰Ěŗos¬…qehqsuœƒH{¸kH¡Š…ÊRǪÇƌbȆ¢´ä܍¢NìÉʖ¦â©Ġu¦öČ^â£Ăh–šĖMÈÄw‚\\fŦ°W ¢¾luŸD„wŠ\\̀ʉÌÛM…Ā[bӞEn}¶Vc…ê“sƒ"]],"encodeOffsets":[[[129102,52189]]]}},{"type":"Feature","id":"210000","properties":{"id":"210000","cp":[123.429096,41.796767],"name":"辽宁","childNum":16},"geometry":{"type":"MultiPolygon","coordinates":[["@@L–Ž@@s™a"],["@@MnNm"],["@@d‚c"],["@@eÀ‚C@b‚“‰"],["@@f‡…Xwkbr–Ä`qg"],["@@^jtW‘Q"],["@@~ Y]c"],["@@G`ĔN^_¿Z‚ÃM"],["@@iX¶B‹Y"],["@@„YƒZ"],["@@L_{Epf"],["@@^WqCT\\"],["@@\\[“‹§t|”¤_"],["@@m`n_"],["@@Ïxnj{q_×^Giip"],["@@@œé^B†‡ntˆaÊU—˜Ÿ]x ¯ÄPIJ­°h€ʙK³†VˆÕ@Y~†|EvĹsDŽ¦­L^p²ŸÒG ’Ël]„xxÄ_˜fT¤Ď¤cŽœP„–C¨¸TVjbgH²sdÎdHt`Bˆ—²¬GJję¶[ÐhjeXdlwhšðSȦªVÊπ‹Æ‘Z˜ÆŶ®²†^ŒÎyÅÎcPqń“ĚDMħĜŁH­ˆk„çvV[ij¼W–‚YÀäĦ’‘`XlžR`žôLUVžfK–¢†{NZdĒª’YĸÌÚJRr¸SA|ƴgŴĴÆbvªØX~†źBŽ|¦ÕœEž¤Ð`\\|Kˆ˜UnnI]¤ÀÂĊnŎ™R®Ő¿¶\\ÀøíDm¦ÎbŨab‰œaĘ\\ľã‚¸a˜tÎSƐ´©v\\ÖÚÌǴ¤Â‡¨JKr€Z_Z€fjþhPkx€`Y”’RIŒjJcVf~sCN¤ ˆE‚œhæm‰–sHy¨SðÑÌ\\\\ŸĐRZk°IS§fqŒßýáЍÙÉÖ[^¯ǤŲ„ê´\\¦¬ĆPM¯£Ÿˆ»uïpùzEx€žanµyoluqe¦W^£ÊL}ñrkqWňûP™‰UP¡ôJŠoo·ŒU}£Œ„[·¨@XŒĸŸ“‹‹DXm­Ûݏº‡›GU‹CÁª½{íĂ^cj‡k“¶Ã[q¤“LÉö³cux«zZfƒ²BWÇ®Yß½ve±ÃC•ý£W{Ú^’q^sÑ·¨‹ÍOt“¹·C¥‡GD›rí@wÕKţ݋˜Ÿ«V·i}xËÍ÷‘i©ĝ‡ɝǡ]ƒˆ{c™±OW‹³Ya±Ÿ‰_穂Hžĕoƫ€Ňqƒr³‰Lys[„ñ³¯OS–ďOMisZ†±ÅFC¥Pq{‚Ã[Pg}\\—¿ghćO…•k^ģÁFıĉĥM­oEqqZûěʼn³F‘¦oĵ—hŸÕP{¯~TÍlª‰N‰ßY“Ð{Ps{ÃVU™™eĎwk±ʼnVÓ½ŽJãÇÇ»Jm°dhcÀff‘dF~ˆ€ĀeĖ€d`sx² šƒ®EżĀdQ‹Âd^~ăÔHˆ¦\\›LKpĄVez¤NP ǹӗR™ÆąJSh­a[¦´Âghwm€BÐ¨źhI|žVVŽ—Ž|p] Â¼èNä¶ÜBÖ¼“L`‚¼bØæŒKV”ŸpoœúNZÞÒKxpw|ÊEMnzEQšŽIZ”ŽZ‡NBˆčÚFÜçmĩ‚WĪñt‘ÞĵÇñZ«uD‚±|Əlij¥ãn·±PmÍa‰–da‡ CL‡Ǒkùó¡³Ï«QaċϑOÃ¥ÕđQȥċƭy‹³ÃA"]],"encodeOffsets":[[[123686,41445]],[[126019,40435]],[[124393,40128]],[[126117,39963]],[[125322,40140]],[[126686,40700]],[[126041,40374]],[[125584,40168]],[[125453,40165]],[[125362,40214]],[[125280,40291]],[[125774,39997]],[[125976,40496]],[[125822,39993]],[[125509,40217]],[[122731,40949]]]}},{"type":"Feature","id":"220000","properties":{"id":"220000","cp":[125.3245,43.886841],"name":"吉林","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@‘p䔳PClƒFbbÍzš€wBG’ĭ€Z„Åi“»ƒlY­ċ²SgŽkÇ£—^S‰“qd¯•‹R…©éŽ£¯S†\\cZ¹iűƏCuƍÓX‡oR}“M^o•£…R}oªU­F…uuXHlEŕ‡€Ï©¤ÛmTŽþ¤D–²ÄufàÀ­XXȱAe„yYw¬dvõ´KÊ£”\\rµÄl”iˆdā]|DÂVŒœH¹ˆÞ®ÜWnŒC”Œķ W‹§@\\¸‹ƒ~¤‹Vp¸‰póIO¢ŠVOšŇürXql~òÉK]¤¥Xrfkvzpm¶bwyFoúvð‡¼¤ N°ąO¥«³[ƒéǡű_°Õ\\ÚÊĝŽþâőàerR¨­JYlďQ[ ÏYëЧTGz•tnŠß¡gFkMŸāGÁ¤ia É‰™È¹`\\xs€¬dĆkNnuNUŠ–užP@‚vRY¾•–\\¢…ŒGªóĄ~RãÖÎĢù‚đŴÕhQŽxtcæëSɽʼníëlj£ƍG£nj°KƘµDsØÑpyƸ®¿bXp‚]vbÍZuĂ{nˆ^IüœÀSք”¦EŒvRÎûh@℈[‚Əȉô~FNr¯ôçR±ƒ­HÑl•’Ģ–^¤¢‚OðŸŒævxsŒ]ÞÁTĠs¶¿âƊGW¾ìA¦·TѬ†è¥€ÏÐJ¨¼ÒÖ¼ƒƦɄxÊ~S–tD@ŠĂ¼Ŵ¡jlºWžvЉˆzƦZЎ²CH— „Axiukd‹ŒGgetqmcžÛ£Ozy¥cE}|…¾cZ…k‚‰¿uŐã[oxGikfeäT@…šSUwpiÚFM©’£è^ڟ‚`@v¶eň†f h˜eP¶žt“äOlÔUgƒÞzŸU`lœ}ÔÆUvØ_Ō¬Öi^ĉi§²ÃŠB~¡Ĉ™ÚEgc|DC_Ȧm²rBx¼MÔ¦ŮdĨÃâYx‘ƘDVÇĺĿg¿cwÅ\\¹˜¥Yĭlœ¤žOv†šLjM_a W`zļMž·\\swqÝSA‡š—q‰Śij¯Š‘°kŠRē°wx^Đkǂғ„œž“œŽ„‹\\]˜nrĂ}²ĊŲÒøãh·M{yMzysěnĒġV·°“G³¼XÀ““™¤¹i´o¤ŃšŸÈ`̃DzÄUĞd\\i֚ŒˆmÈBĤÜɲDEh LG¾ƀľ{WaŒYÍȏĢĘÔRîĐj‹}Ǟ“ccj‡oUb½š{“h§Ǿ{K‹ƖµÎ÷žGĀÖŠåưÎs­l›•yiē«‹`姝H¥Ae^§„GK}iã\\c]v©ģZ“mÃ|“[M}ģTɟĵ‘Â`À–çm‰‘FK¥ÚíÁbXš³ÌQґHof{‰]e€pt·GŋĜYünĎųVY^’˜ydõkÅZW„«WUa~U·Sb•wGçǑ‚“iW^q‹F‚“›uNĝ—·Ew„‹UtW·Ýďæ©PuqEzwAV•—XR‰ãQ`­©GŒM‡ehc›c”ďϝd‡©ÑW_ϗYƅŒ»…é\\ƒɹ~ǙG³mØ©BšuT§Ĥ½¢Ã_ý‘L¡‘ýŸqT^rme™\\Pp•ZZbƒyŸ’uybQ—efµ]UhĿDCmûvašÙNSkCwn‰cćfv~…Y‹„ÇG"],"encodeOffsets":[[130196,42528]]}},{"type":"Feature","id":"230000","properties":{"id":"230000","cp":[128.642464,46.756967],"name":"黑龙江","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@UƒµNÿ¥īè灋•HÍøƕ¶LŒǽ|g¨|”™Ža¾pViˆdd”~ÈiŒíďÓQġėǐZ΋ŽXb½|ſÃH½ŸKFgɱCģÛÇA‡n™‹jÕc[VĝDZÃ˄Ç_™ £ń³pŽj£º”š¿”»WH´¯”U¸đĢmžtĜyzzNN|g¸÷äűѱĉā~mq^—Œ[ƒ”››”ƒǁÑďlw]¯xQĔ‰¯l‰’€°řĴrŠ™˜BˆÞTxr[tޏĻN_yŸX`biN™Ku…P›£k‚ZĮ—¦[ºxÆÀdhŽĹŀUÈƗCw’áZħÄŭcÓ¥»NAw±qȥnD`{ChdÙFćš}¢‰A±Äj¨]ĊÕjŋ«×`VuÓś~_kŷVÝyh„“VkÄãPs”Oµ—fŸge‚Ň…µf@u_Ù ÙcŸªNªÙEojVx™T@†ãSefjlwH\\pŏäÀvŠŽlY†½d{†F~¦dyz¤PÜndsrhf‹HcŒvlwjFœ£G˜±DύƥY‡yϊu¹XikĿ¦ÏqƗǀOŜ¨LI|FRĂn sª|Cš˜zxAè¥bœfudTrFWÁ¹Am|˜ĔĕsķÆF‡´Nš‰}ć…UŠÕ@Áijſmužç’uð^ÊýowŒFzØÎĕNőžǏȎôªÌŒDŽàĀÄ˄ĞŀƒʀĀƘŸˮȬƬĊ°ƒUŸzou‡xe]}Ž…AyȑW¯ÌmK‡“Q]‹Īºif¸ÄX|sZt|½ÚUΠlkš^p{f¤lˆºlÆW –€A²˜PVܜPH”Êâ]ÎĈÌÜk´\\@qàsĔÄQºpRij¼èi†`¶—„bXƒrBgxfv»ŽuUiˆŒ^v~”J¬mVp´£Œ´VWrnP½ì¢BX‚¬h™ŠðX¹^TjVœŠriªj™tŊÄm€tPGx¸bgRšŽsT`ZozÆO]’ÒFô҆Oƒ‡ŊŒvŞ”p’cGŒêŠsx´DR–Œ{A†„EOr°Œ•žx|íœbˆ³Wm~DVjºéNN†Ëܲɶ­GƒxŷCStŸ}]ûō•SmtuÇÃĕN•™āg»šíT«u}ç½BĵÞʣ¥ëÊ¡Mێ³ãȅ¡ƋaǩÈÉQ‰†G¢·lG|›„tvgrrf«†ptęŘnŠÅĢr„I²¯LiØsPf˜_vĠd„xM prʹšL¤‹¤‡eˌƒÀđK“žïÙVY§]I‡óáĥ]ķ†Kˆ¥Œj|pŇ\\kzţ¦šnņäÔVĂîά|vW’®l¤èØr‚˜•xm¶ă~lÄƯĄ̈́öȄEÔ¤ØQĄ–Ą»ƢjȦOǺ¨ìSŖÆƬy”Qœv`–cwƒZSÌ®ü±DŽ]ŀç¬B¬©ńzƺŷɄeeOĨS’Œfm Ċ‚ƀP̎ēz©Ċ‚ÄÕÊmgŸÇsJ¥ƔˆŊśæ’΁Ñqv¿íUOµª‰ÂnĦÁ_½ä@ê텣P}Ġ[@gġ}g“ɊדûÏWXá¢užƻÌsNͽƎÁ§č՛AēeL³àydl›¦ĘVçŁpśdžĽĺſʃQíÜçÛġԏsĕ¬—Ǹ¯YßċġHµ ¡eå`ļƒrĉŘóƢFì“ĎWøxÊk†”ƈdƬv|–I|·©NqńRŀƒ¤é”eŊœŀ›ˆàŀU²ŕƀB‚Q£Ď}L¹Îk@©ĈuǰųǨ”Ú§ƈnTËÇéƟÊcfčŤ^Xm‡—HĊĕË«W·ċëx³ǔķÐċJā‚wİ_ĸ˜Ȁ^ôWr­°oú¬Ħ…ŨK~”ȰCĐ´Ƕ£’fNÎèâw¢XnŮeÂÆĶŽ¾¾xäLĴĘlļO¤ÒĨA¢Êɚ¨®‚ØCÔ ŬGƠ”ƦYĜ‡ĘÜƬDJ—g_ͥœ@čŅĻA“¶¯@wÎqC½Ĉ»NŸăëK™ďÍQ“Ùƫ[«Ãí•gßÔÇOÝáW‘ñuZ“¯ĥ€Ÿŕā¡ÑķJu¤E Ÿå¯°WKɱ_d_}}vyŸõu¬ï¹ÓU±½@gÏ¿rýD‰†g…Cd‰µ—°MFYxw¿CG£‹Rƛ½Õ{]L§{qqąš¿BÇƻğëšܭNJË|c²}Fµ}›ÙRsÓpg±ŠQNqǫŋRwŕnéÑÉKŸ†«SeYR…ŋ‹@{¤SJ}šD Ûǖ֍Ÿ]gr¡µŷjqWÛham³~S«“„›Þ]"]],"encodeOffsets":[[[134456,44547]]]}},{"type":"Feature","id":"320000","properties":{"id":"320000","cp":[119.767413,33.041544],"name":"江苏","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@cþÅPiŠ`ZŸRu¥É\\]~°ŽY`µ†Óƒ^phÁbnÀşúŽòa–ĬºTÖŒb‚˜e¦¦€{¸ZâćNpŒ©žHr|^ˆmjhŠSEb\\afv`sz^lkŽlj‹Ätg‹¤D˜­¾Xš¿À’|ДiZ„ȀåB·î}GL¢õcßjaŸyBFµÏC^ĭ•cÙt¿sğH]j{s©HM¢ƒQnDÀ©DaÜތ·jgàiDbPufjDk`dPOîƒhw¡ĥ‡¥šG˜ŸP²ĐobºrY†„î¶aHŢ´ ]´‚rılw³r_{£DB_Ûdåuk|ˆŨ¯F Cºyr{XFy™e³Þċ‡¿Â™kĭB¿„MvÛpm`rÚã”@ƹhågËÖƿxnlč¶Åì½Ot¾dJlŠVJʜǀœŞqvnOŠ^ŸJ”Z‘ż·Q}ê͎ÅmµÒ]Žƍ¦Dq}¬R^èĂ´ŀĻĊIԒtžIJyQŐĠMNtœR®òLh‰›Ěs©»œ}OӌGZz¶A\\jĨFˆäOĤ˜HYš†JvÞHNiÜaϚɖnFQlšNM¤ˆB´ĄNöɂtp–Ŭdf先‹qm¿QûŠùއÚb¤uŃJŴu»¹Ą•lȖħŴw̌ŵ²ǹǠ͛hĭłƕrçü±Y™xci‡tğ®jű¢KOķ•Coy`å®VTa­_Ā]ŐÝɞï²ʯÊ^]afYǸÃĆēĪȣJđ͍ôƋĝÄ͎ī‰çÛɈǥ£­ÛmY`ó£Z«§°Ó³QafusNıDž_k}¢m[ÝóDµ—¡RLčiXy‡ÅNïă¡¸iĔϑNÌŕoēdōîåŤûHcs}~Ûwbù¹£¦ÓCt‹OPrƒE^ÒoŠg™ĉIµžÛÅʹK…¤½phMŠü`o怆ŀ"],"encodeOffsets":[[121740,32276]]}},{"type":"Feature","id":"330000","properties":{"id":"330000","cp":[120.153576,29.287459],"name":"浙江","childNum":45},"geometry":{"type":"MultiPolygon","coordinates":[["@@E^dQ]K"],["@@jX^j‡"],["@@sfŠbU‡"],["@@qP\\xz[ck"],["@@‘Rƒ¢‚FX}°[s_"],["@@Cbœ\\—}"],["@@e|v\\la{u"],["@@v~u}"],["@@QxÂF¯}"],["@@¹nŒvÞs¯o"],["@@rSkUEj"],["@@bi­ZŒP"],["@@p[}INf"],["@@À¿€"],["@@¹dnbŒ…"],["@@rSŸBnR"],["@@g~h}"],["@@FlEk"],["@@OdPc"],["@@v[u\\"],["@@FjâL~wyoo~›sµL–\\"],["@@¬e¹aNˆ"],["@@\\nÔ¡q]L³ë\\ÿ®ŒQ֎"],["@@ÊA­©[¬"],["@@KxŒv­"],["@@@hlIk]"],["@@pW{o||j"],["@@Md|_mC"],["@@¢…X£ÏylD¼XˆtH"],["@@hlÜ[LykAvyfw^Ež›¤"],["@@fp¤Mus“R"],["@@®_ma~•LÁ¬šZ"],["@@iM„xZ"],["@@ZcYd"],["@@Z~dOSo|A¿qZv"],["@@@`”EN¡v"],["@@|–TY{"],["@@@n@m"],["@@XWkCT\\"],["@@ºwšZRkĕWO¢"],["@@™X®±Grƪ\\ÔáXq{‹"],["@@ůTG°ĄLHm°UC‹"],["@@¤Ž€aÜx~}dtüGæţŎíĔcŖpMËВj碷ðĄÆMzˆjWKĎ¢Q¶˜À_꒔_Bı€i«pZ€gf€¤Nrq]§ĂN®«H±‡yƳí¾×ŸīàLłčŴǝĂíÀBŖÕªˆŠÁŖHŗʼnåqûõi¨hÜ·ƒñt»¹ýv_[«¸m‰YL¯‰Qª…mĉÅdMˆ•gÇjcº«•ęœ¬­K­´ƒB«Âącoċ\\xKd¡gěŧ«®á’[~ıxu·Å”KsËɏc¢Ù\\ĭƛëbf¹­ģSƒĜkáƉÔ­ĈZB{ŠaM‘µ‰fzʼnfåÂŧįƋǝÊĕġć£g³ne­ą»@­¦S®‚\\ßðCšh™iqªĭiAu‡A­µ”_W¥ƣO\\lċĢttC¨£t`ˆ™PZäuXßBs‡Ļyek€OđġĵHuXBšµ]׌‡­­\\›°®¬F¢¾pµ¼kŘó¬Wät’¸|@ž•L¨¸µr“ºù³Ù~§WI‹ŸZWŽ®’±Ð¨ÒÉx€`‰²pĜ•rOògtÁZ}þÙ]„’¡ŒŸFK‚wsPlU[}¦Rvn`hq¬\\”nQ´ĘRWb”‚_ rtČFI֊kŠŠĦPJ¶ÖÀÖJĈĄTĚòžC ²@Pú…Øzœ©PœCÈÚœĒ±„hŖ‡l¬â~nm¨f©–iļ«m‡nt–u†ÖZÜÄj“ŠLŽ®E̜Fª²iÊxبžIÈhhst"],["@@o\\V’zRZ}y"],["@@†@°¡mۛGĕ¨§Ianá[ýƤjfæ‡ØL–•äGr™"]],"encodeOffsets":[[[125592,31553]],[[125785,31436]],[[125729,31431]],[[125513,31380]],[[125223,30438]],[[125115,30114]],[[124815,29155]],[[124419,28746]],[[124095,28635]],[[124005,28609]],[[125000,30713]],[[125111,30698]],[[125078,30682]],[[125150,30684]],[[124014,28103]],[[125008,31331]],[[125411,31468]],[[125329,31479]],[[125626,30916]],[[125417,30956]],[[125254,30976]],[[125199,30997]],[[125095,31058]],[[125083,30915]],[[124885,31015]],[[125218,30798]],[[124867,30838]],[[124755,30788]],[[124802,30809]],[[125267,30657]],[[125218,30578]],[[125200,30562]],[[124968,30474]],[[125167,30396]],[[124955,29879]],[[124714,29781]],[[124762,29462]],[[124325,28754]],[[123990,28459]],[[125366,31477]],[[125115,30363]],[[125369,31139]],[[122495,31878]],[[125329,30690]],[[125192,30787]]]}},{"type":"Feature","id":"340000","properties":{"id":"340000","cp":[117.283042,31.26119],"name":"安徽","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@^iuLX^"],["@@‚e©Ehl"],["@@°ZÆëϵmkǀwÌÕæhºgBĝâqÙĊz›ÖgņtÀÁÊÆá’hEz|WzqD¹€Ÿ°E‡ŧl{ævÜcA`¤C`|´qžxIJkq^³³ŸGšµbƒíZ…¹qpa±ď OH—¦™Ħˆx¢„gPícOl_iCveaOjCh߸i݋bÛªCC¿€m„RV§¢A|t^iĠGÀtÚs–d]ĮÐDE¶zAb àiödK¡~H¸íæAžǿYƒ“j{ď¿‘™À½W—®£ChŒÃsiŒkkly]_teu[bFa‰Tig‡n{]Gqªo‹ĈMYá|·¥f¥—őaSÕė™NµñĞ«ImŒ_m¿Âa]uĜp …Z_§{Cƒäg¤°r[_Yj‰ÆOdý“[ŽI[á·¥“Q_n‡ùgL¾mv™ˊBÜÆ¶ĊJhšp“c¹˜O]iŠ]œ¥ jtsggJǧw×jÉ©±›EFˍ­‰Ki”ÛÃÕYv…s•ˆm¬njĻª•§emná}k«ŕˆƒgđ²Ù›DǤ›í¡ªOy›†×Où±@DŸñSęćăÕIÕ¿IµĥO‰‰jNÕËT¡¿tNæŇàåyķrĕq§ÄĩsWÆßŽF¶žX®¿‰mŒ™w…RIޓfßoG‘³¾©uyH‘į{Ɓħ¯AFnuP…ÍÔzšŒV—dàôº^Ðæd´€‡oG¤{S‰¬ćxã}›ŧ×Kǥĩ«žÕOEзÖdÖsƘѨ[’Û^Xr¢¼˜§xvěƵ`K”§ tÒ´Cvlo¸fzŨð¾NY´ı~ÉĔē…ßúLÃϖ_ÈÏ|]ÂÏFl”g`bšežž€n¾¢pU‚h~ƴ˶_‚r sĄ~cž”ƈ]|r c~`¼{À{ȒiJjz`îÀT¥Û³…]’u}›f…ïQl{skl“oNdŸjŸäËzDvčoQŠďHI¦rb“tHĔ~BmlRš—V_„ħTLnñH±’DžœL‘¼L˜ªl§Ťa¸ŒĚlK²€\\RòvDcÎJbt[¤€D@®hh~kt°ǾzÖ@¾ªdb„YhüóZ ň¶vHrľ\\ʗJuxAT|dmÀO„‹[ÃԋG·ĚąĐlŪÚpSJ¨ĸˆLvÞcPæķŨŽ®mАˆálŸwKhïgA¢ųƩޖ¤OȜm’°ŒK´"]],"encodeOffsets":[[[121722,32278]],[[119475,30423]],[[119168,35472]]]}},{"type":"Feature","id":"350000","properties":{"id":"350000","cp":[118.306239,26.075302],"name":"福建","childNum":18},"geometry":{"type":"MultiPolygon","coordinates":[["@@“zht´‡]"],["@@aj^~ĆG—©O"],["@@ed¨„C}}i"],["@@@vˆPGsQ"],["@@‰sBz‚ddW]Q"],["@@SލQ“{"],["@@NŽVucW"],["@@qptBAq"],["@@‰’¸[mu"],["@@Q\\pD]_"],["@@jSwUadpF"],["@@eXª~ƒ•"],["@@AjvFso"],["@@fT–›_Çí\\Ÿ™—v|ba¦jZÆy€°"],["@@IjJi"],["@@wJI€ˆxš«¼AoNe{M­"],["@@K‰±¡Óˆ”ČäeZ"],["@@k¡¹Eh~c®wBk‹UplÀ¡I•~Māe£bN¨gZý¡a±Öcp©PhžI”Ÿ¢Qq…ÇGj‹|¥U™ g[Ky¬ŏ–v@OpˆtÉEŸF„\\@ åA¬ˆV{Xģ‰ĐBy…cpě…¼³Ăp·¤ƒ¥o“hqqÚ¡ŅLsƒ^ᗞ§qlŸÀhH¨MCe»åÇGD¥zPO£čÙkJA¼ß–ėu›ĕeûҍiÁŧSW¥˜QŠûŗ½ùěcݧSùĩąSWó«íęACµ›eR—åǃRCÒÇZÍ¢‹ź±^dlsŒtjD¸•‚ZpužÔâÒH¾oLUêÃÔjjēò´ĄW‚ƛ…^Ñ¥‹ĦŸ@Çò–ŠmŒƒOw¡õyJ†yD}¢ďÑÈġfŠZd–a©º²z£šN–ƒjD°Ötj¶¬ZSÎ~¾c°¶Ðm˜x‚O¸¢Pl´žSL|¥žA†ȪĖM’ņIJg®áIJČĒü` ŽQF‡¬h|ÓJ@zµ |ê³È ¸UÖŬŬÀEttĸr‚]€˜ðŽM¤ĶIJHtÏ A’†žĬkvsq‡^aÎbvŒd–™fÊòSD€´Z^’xPsÞrv‹ƞŀ˜jJd×ŘÉ ®A–ΦĤd€xĆqAŒ†ZR”ÀMźŒnĊ»ŒİÐZ— YX–æJŠyĊ²ˆ·¶q§·–K@·{s‘Xãô«lŗ¶»o½E¡­«¢±¨Yˆ®Ø‹¶^A™vWĶGĒĢžPlzfˆļŽtàAvWYãšO_‡¤sD§ssČġ[kƤPX¦Ž`¶“ž®ˆBBvĪjv©šjx[L¥àï[F…¼ÍË»ğV`«•Ip™}ccÅĥZE‹ãoP…´B@ŠD—¸m±“z«Ƴ—¿å³BRضˆœWlâþäą`“]Z£Tc— ĹGµ¶H™m@_©—kŒ‰¾xĨ‡ôȉðX«½đCIbćqK³Á‹Äš¬OAwã»aLʼn‡ËĥW[“ÂGI—ÂNxij¤D¢ŽîĎÎB§°_JœGsƒ¥E@…¤uć…P‘å†cuMuw¢BI¿‡]zG¹guĮck\\_"]],"encodeOffsets":[[[123250,27563]],[[122541,27268]],[[123020,27189]],[[122916,27125]],[[122887,26845]],[[122808,26762]],[[122568,25912]],[[122778,26197]],[[122515,26757]],[[122816,26587]],[[123388,27005]],[[122450,26243]],[[122578,25962]],[[121255,25103]],[[120987,24903]],[[122339,25802]],[[121042,25093]],[[122439,26024]]]}},{"type":"Feature","id":"360000","properties":{"id":"360000","cp":[115.592151,27.676493],"name":"江西","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ĢĨƐgÂMD~ņªe^\\^§„ý©j׍cZ†Ø¨zdÒa¶ˆlҍJŒìõ`oz÷@¤u޸´†ôęöY¼‰HČƶajlÞƩ¥éZ[”|h}^U Œ ¥p„ĄžƦO lt¸Æ €Q\\€ŠaÆ|CnÂOjt­ĚĤd’ÈŒF`’¶„@Ð딠¦ōҞ¨Sêv†HĢûXD®…QgėWiØPÞìºr¤dž€NĠ¢l–•ĄtZoœCƞÔºCxrpĠV®Ê{f_Y`_ƒeq’’®Aot`@o‚DXfkp¨|Šs¬\\D‘ÄSfè©Hn¬…^DhÆyøJh“ØxĢĀLʈ„ƠPżċĄwȠ̦G®ǒĤäTŠÆ~ĦwŠ«|TF¡Šn€c³Ïå¹]ĉđxe{ÎӐ†vOEm°BƂĨİ|G’vz½ª´€H’àp”eJ݆Qšxn‹ÀŠW­žEµàXÅĪt¨ÃĖrÄwÀFÎ|ňÓMå¼ibµ¯»åDT±m[“r«_gŽmQu~¥V\\OkxtL E¢‹ƒ‘Ú^~ýê‹Pó–qo슱_Êw§ÑªåƗ⼋mĉŹ‹¿NQ“…YB‹ąrwģcÍ¥B•Ÿ­ŗÊcØiI—žƝĿuŒqtāwO]‘³YCñTeɕš‹caub͈]trlu€ī…B‘ПGsĵıN£ï—^ķqss¿FūūV՟·´Ç{éĈý‰ÿ›OEˆR_ŸđûIċâJh­ŅıN‘ȩĕB…¦K{Tk³¡OP·wn—µÏd¯}½TÍ«YiµÕsC¯„iM•¤™­•¦¯P|ÿUHv“he¥oFTu‰õ\\ŽOSs‹MòđƇiaºćXŸĊĵà·çhƃ÷ǜ{‘ígu^›đg’m[×zkKN‘¶Õ»lčÓ{XSƉv©_ÈëJbVk„ĔVÀ¤P¾ºÈMÖxlò~ªÚàGĂ¢B„±’ÌŒK˜y’áV‡¼Ã~­…`g›ŸsÙfI›Ƌlę¹e|–~udjˆuTlXµf`¿JdŠ[\\˜„L‚‘²"],"encodeOffsets":[[116689,26234]]}},{"type":"Feature","id":"370000","properties":{"id":"370000","cp":[118.000923,36.275807],"name":"山东","childNum":13},"geometry":{"type":"MultiPolygon","coordinates":[["@@Xjd]{K"],["@@itbFHy"],["@@HlGk"],["@@T‚ŒGŸy"],["@@K¬˜•‹U"],["@@WdXc"],["@@PtOs"],["@@•LnXhc"],["@@ppVƒu]Or"],["@@cdzAUa"],["@@udRhnCI‡"],["@@ˆoIƒpR„"],["@@Ľč{fzƤî’Kš–ÎMĮ]†—ZFˆ½Y]â£ph’™š¶¨râøÀ†ÎǨ¤^ºÄ”Gzˆ~grĚĜlĞÆ„LĆdž¢Îo¦–cv“Kb€gr°Wh”mZp ˆL]LºcU‰Æ­n”żĤÌǜbAnrOAœ´žȊcÀbƦUØrĆUÜøœĬƞ†š˜Ez„VL®öØBkŖÝĐ˹ŧ̄±ÀbÎɜnb²ĦhņBĖ›žįĦåXćì@L¯´ywƕCéõė ƿ¸‘lµ¾Z|†ZWyFYŸ¨Mf~C¿`€à_RÇzwƌfQnny´INoƬˆèôº|sT„JUš›‚L„îVj„ǎ¾Ē؍‚Dz²XPn±ŴPè¸ŔLƔÜƺ_T‘üÃĤBBċȉöA´fa„˜M¨{«M`‡¶d¡ô‰Ö°šmȰBÔjjŒ´PM|”c^d¤u•ƒ¤Û´Œä«ƢfPk¶Môlˆ]Lb„}su^ke{lC‘…M•rDŠÇ­]NÑFsmoõľH‰yGă{{çrnÓE‰‹ƕZGª¹Fj¢ïW…uøCǷ돡ąuhÛ¡^Kx•C`C\\bÅxì²ĝÝ¿_N‰īCȽĿåB¥¢·IŖÕy\\‡¹kx‡Ã£Č×GDyÕ¤ÁçFQ¡„KtŵƋ]CgÏAùSed‡cÚź—ŠuYfƒyMmhUWpSyGwMPqŀ—›Á¼zK›¶†G•­Y§Ëƒ@–´śÇµƕBmœ@Io‚g——Z¯u‹TMx}C‘‰VK‚ï{éƵP—™_K«™pÛÙqċtkkù]gŽ‹Tğwo•ɁsMõ³ă‡AN£™MRkmEʕč™ÛbMjÝGu…IZ™—GPģ‡ãħE[iµBEuŸDPԛ~ª¼ętŠœ]ŒûG§€¡QMsğNPŏįzs£Ug{đJĿļā³]ç«Qr~¥CƎÑ^n¶ÆéÎR~ݏY’I“] P‰umŝrƿ›‰›Iā‹[x‰edz‹L‘¯v¯s¬ÁY…~}…ťuٌg›ƋpÝĄ_ņī¶ÏSR´ÁP~ž¿Cyžċßdwk´Ss•X|t‰`Ä Èð€AªìÎT°¦Dd–€a^lĎDĶÚY°Ž`ĪŴǒˆ”àŠv\\ebŒZH„ŖR¬ŢƱùęO•ÑM­³FۃWp[ƒ"]],"encodeOffsets":[[[123806,39303]],[[123821,39266]],[[123742,39256]],[[123702,39203]],[[123649,39066]],[[123847,38933]],[[123580,38839]],[[123894,37288]],[[123043,36624]],[[123344,38676]],[[123522,38857]],[[123628,38858]],[[118260,36742]]]}},{"type":"Feature","id":"410000","properties":{"id":"410000","cp":[113.665412,33.757975],"name":"河南","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@•ýL™ùµP³swIÓxcŢĞð†´E®žÚPt†ĴXØx¶˜@«ŕŕQGƒ‹Yfa[şu“ßǩ™đš_X³ijÕčC]kbc•¥CS¯ëÍB©÷‹–³­Siˆ_}m˜YTtž³xlàcȂzÀD}ÂOQ³ÐTĨ¯†ƗòËŖ[hœł‹Ŧv~††}ÂZž«¤lPǕ£ªÝŴÅR§ØnhcŒtâk‡nύ­ľŹUÓÝdKuķ‡I§oTũÙďkęĆH¸ÓŒ\\ăŒ¿PcnS{wBIvɘĽ[GqµuŸŇôYgûƒZcaŽ©@½Õǽys¯}lgg@­C\\£as€IdÍuCQñ[L±ęk·‹ţb¨©kK—’»›KC²‘òGKmĨS`ƒ˜UQ™nk}AGē”sqaJ¥ĐGR‰ĎpCuÌy ã iMc”plk|tRk†ðœev~^‘´†¦ÜŽSí¿_iyjI|ȑ|¿_»d}qŸ^{“Ƈdă}Ÿtqµ`Ƴĕg}V¡om½fa™Ço³TTj¥„tĠ—Ry”K{ùÓjuµ{t}uËR‘iŸvGŠçJFjµŠÍyqΘàQÂFewixGw½Yŷpµú³XU›½ġy™łå‰kÚwZXˆ·l„¢Á¢K”zO„Λ΀jc¼htoDHr…|­J“½}JZ_¯iPq{tę½ĕ¦Zpĵø«kQ…Ťƒ]MÛfaQpě±ǽ¾]u­Fu‹÷nƒ™čįADp}AjmcEǒaª³o³ÆÍSƇĈÙDIzˑ赟^ˆKLœ—i—Þñ€[œƒaA²zz‰Ì÷Dœ|[šíijgf‚ÕÞd®|`ƒĆ~„oĠƑô³Ŋ‘D×°¯CsŠøÀ«ì‰UMhTº¨¸ǡîS–Ô„DruÂÇZ•ÖEŽ’vPZ„žW”~؋ÐtĄE¢¦Ðy¸bŠô´oŬ¬Ž²Ês~€€]®tªašpŎJ¨Öº„_ŠŔ–`’Ŗ^Ѝ\\Ĝu–”~m²Ƹ›¸fW‰ĦrƔ}Î^gjdfÔ¡J}\\n C˜¦þWxªJRÔŠu¬ĨĨmF†dM{\\d\\ŠYÊ¢ú@@¦ª²SŠÜsC–}fNècbpRmlØ^g„d¢aÒ¢CZˆZxvÆ¶N¿’¢T@€uCœ¬^ĊðÄn|žlGl’™Rjsp¢ED}€Fio~ÔNŽ‹„~zkĘHVsDzßjƒŬŒŠŢ`Pûàl¢˜\\ÀœEhŽİgÞē X¼Pk–„|m"],"encodeOffsets":[[118256,37017]]}},{"type":"Feature","id":"420000","properties":{"id":"420000","cp":[113.298572,30.684355],"name":"湖北","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@AB‚"],["@@lskt"],["@@¾«}{ra®pîÃ\\™›{øCŠËyyB±„b\\›ò˜Ý˜jK›‡L ]ĎĽÌ’JyÚCƈćÎT´Å´pb©È‘dFin~BCo°BĎĚømvŒ®E^vǾ½Ĝ²Ro‚bÜeNŽ„^ĺ£R†¬lĶ÷YoĖ¥Ě¾|sOr°jY`~I”¾®I†{GqpCgyl{‡£œÍƒÍyPL“¡ƒ¡¸kW‡xYlÙæŠšŁĢzœ¾žV´W¶ùŸo¾ZHxjwfx„GNÁ•³Xéæl¶‰EièIH‰ u’jÌQ~v|sv¶Ôi|ú¢Fh˜Qsğ¦ƒSiŠBg™ÐE^ÁÐ{–čnOÂȞUÎóĔ†ÊēIJ}Z³½Mŧïeyp·uk³DsѨŸL“¶_œÅuèw»—€¡WqÜ]\\‘Ò§tƗcÕ¸ÕFÏǝĉăxŻČƟO‡ƒKÉġÿ×wg”÷IÅzCg†]m«ªGeçÃTC’«[‰t§{loWeC@ps_Bp‘­r‘„f_``Z|ei¡—oċMqow€¹DƝӛDYpûs•–‹Ykıǃ}s¥ç³[§ŸcYЧHK„«Qy‰]¢“wwö€¸ïx¼ņ¾Xv®ÇÀµRĠЋžHMž±cÏd„ƒǍũȅȷ±DSyúĝ£ŤĀàtÖÿï[îb\\}pĭÉI±Ñy…¿³x¯N‰o‰|¹H™ÏÛm‹júË~Tš•u˜ęjCöAwě¬R’đl¯ Ñb­‰ŇT†Ŀ_[Œ‘IčĄʿnM¦ğ\\É[T·™k¹œ©oĕ@A¾w•ya¥Y\\¥Âaz¯ãÁ¡k¥ne£Ûw†E©Êō¶˓uoj_Uƒ¡cF¹­[Wv“P©w—huÕyBF“ƒ`R‹qJUw\\i¡{jŸŸEPïÿ½fć…QÑÀQ{ž‚°‡fLԁ~wXg—ītêݾ–ĺ‘Hdˆ³fJd]‹HJ²…E€ƒoU¥†HhwQsƐ»Xmg±çve›]Dm͂PˆoCc¾‹_h”–høYrŊU¶eD°Č_N~øĹĚ·`z’]Äþp¼…äÌQŒv\\rCŒé¾TnkžŐڀÜa‡“¼ÝƆ̶Ûo…d…ĔňТJq’Pb ¾|JŒ¾fXŠƐîĨ_Z¯À}úƲ‹N_ĒĊ^„‘ĈaŐyp»CÇĕKŠšñL³ŠġMŒ²wrIÒŭxjb[œžn«øœ˜—æˆàƒ ^²­h¯Ú€ŐªÞ¸€Y²ĒVø}Ā^İ™´‚LŠÚm„¥ÀJÞ{JVŒųÞŃx×sxxƈē ģMř–ÚðòIf–Ċ“Œ\\Ʈ±ŒdʧĘD†vČ_Àæ~DŒċ´A®µ†¨ØLV¦êHÒ¤"]],"encodeOffsets":[[[113712,34000]],[[115612,30507]],[[113649,34054]]]}},{"type":"Feature","id":"430000","properties":{"id":"430000","cp":[111.782279,28.09409],"name":"湖南","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@—n„FTs"],["@@ßÅÆá‰½ÔXr—†CO™“…ËR‘ïÿĩ­TooQyšÓ[‹ŅBE¬–ÎÓXa„į§Ã¸G °ITxp‰úxÚij¥Ïš–̾ŠedžÄ©ĸG…œàGh‚€M¤–Â_U}Ċ}¢pczfŠþg¤€”ÇòAV‘‹M"],["@@©K—ƒA·³CQ±Á«³BUŠƑ¹AŠtćOw™D]ŒJiØSm¯b£‘ylƒ›X…HËѱH•«–‘C^õľA–Å§¤É¥„ïyuǙuA¢^{ÌC´­¦ŷJ£^[†“ª¿‡ĕ~•Ƈ…•N… skóā‡¹¿€ï]ă~÷O§­@—Vm¡‹Qđ¦¢Ĥ{ºjԏŽŒª¥nf´•~ÕoŸž×Ûą‹MąıuZœmZcÒ IJβSÊDŽŶ¨ƚƒ’CÖŎªQؼrŭŽ­«}NÏürʬŒmjr€@ĘrTW ­SsdHzƓ^ÇÂyUi¯DÅYlŹu{hTœ}mĉ–¹¥ě‰Dÿë©ıÓ[Oº£ž“¥ót€ł¹MՄžƪƒ`Pš…Di–ÛUоÅ‌ìˆU’ñB“È£ýhe‰dy¡oċ€`pfmjP~‚kZa…ZsÐd°wj§ƒ@€Ĵ®w~^‚kÀÅKvNmX\\¨a“”сqvíó¿F„¤¡@ũÑVw}S@j}¾«pĂr–ªg àÀ²NJ¶¶Dô…K‚|^ª†Ž°LX¾ŴäPᜣEXd›”^¶›IJÞܓ~‘u¸ǔ˜Ž›MRhsR…e†`ÄofIÔ\\Ø  i”ćymnú¨cj ¢»–GČìƊÿШXeĈ¾Oð Fi ¢|[jVxrIQŒ„_E”zAN¦zLU`œcªx”OTu RLÄ¢dV„i`p˔vŎµªÉžF~ƒØ€d¢ºgİàw¸Áb[¦Zb¦–z½xBĖ@ªpº›šlS¸Ö\\Ĕ[N¥ˀmĎă’J\\‹ŀ`€…ňSڊĖÁĐiO“Ĝ«BxDõĚiv—ž–S™Ì}iùŒžÜnšÐºGŠ{Šp°M´w†ÀÒzJ²ò¨ oTçüöoÛÿñŽőФ‚ùTz²CȆȸǎۃƑÐc°dPÎŸğ˶[Ƚu¯½WM¡­Éž“’B·rížnZŸÒ `‡¨GA¾\\pē˜XhÆRC­üWGġu…T靧Ŏѝ©ò³I±³}_‘‹EÃħg®ęisÁPDmÅ{‰b[Rşs·€kPŸŽƥƒóRo”O‹ŸVŸ~]{g\\“êYƪ¦kÝbiċƵŠGZ»Ěõ…ó·³vŝž£ø@pyö_‹ëŽIkѵ‡bcѧy…×dY؎ªiþž¨ƒ[]f]Ņ©C}ÁN‡»hĻħƏ’ĩ"]],"encodeOffsets":[[[115640,30489]],[[112543,27312]],[[116690,26230]]]}},{"type":"Feature","id":"440000","properties":{"id":"440000","cp":[113.280637,23.125178],"name":"广东","childNum":24},"geometry":{"type":"MultiPolygon","coordinates":[["@@QdˆAua"],["@@ƒlxDLo"],["@@sbhNLo"],["@@Ă āŸ"],["@@WltO[["],["@@Krœ]S"],["@@e„„I]y"],["@@I|„Mym"],["@@ƒÛ³LSŒž¼Y"],["@@nvºB–ëui©`¾"],["@@zdšÛ›Jw®"],["@@†°…¯"],["@@a yAª¸ËJIx،@€ĀHAmßV¡o•fu•o"],["@@šs‰ŗÃÔėAƁ›ZšÄ ~°ČP‚‹äh"],["@@‹¶Ý’Ì‚vmĞh­ı‡Q"],["@@HœŠdSjĒ¢D}war…“u«ZqadYM"],["@@elŒ\\LqqU"],["@@~rMo\\"],["@@f„^ƒC"],["@@øPªoj÷ÍÝħXČx”°Q¨ıXNv"],["@@gÇƳˆŽˆ”oˆŠˆ[~tly"],["@@E–ÆC¿‘"],["@@OŽP"],["@@w‹†đóg‰™ĝ—[³‹¡VÙæÅöM̳¹pÁaËýý©D©Ü“JŹƕģGą¤{Ùū…ǘO²«BƱéA—Ò‰ĥ‡¡«BhlmtÃPµyU¯uc“d·w_bŝcīímGOŽ|KP’ȏ‡ŹãŝIŕŭŕ@Óoo¿ē‹±ß}Ž…ŭ‚ŸIJWÈCőâUâǙI›ğʼn©I›ijEׅÁ”³Aó›wXJþ±ÌŒÜӔĨ£L]ĈÙƺZǾĆĖMĸĤfŒÎĵl•ŨnȈ‘ĐtF”Š–FĤ–‚êk¶œ^k°f¶gŠŽœ}®Fa˜f`vXŲxl˜„¦–ÔÁ²¬ÐŸ¦pqÊ̲ˆi€XŸØRDÎ}†Ä@ZĠ’s„x®AR~®ETtĄZ†–ƈfŠŠHâÒÐA†µ\\S¸„^wĖkRzŠalŽŜ|E¨ÈNĀňZTŒ’pBh£\\ŒĎƀuXĖtKL–¶G|Ž»ĺEļĞ~ÜĢÛĊrˆO˜Ùîvd]nˆ¬VœÊĜ°R֟pM††–‚ƂªFbwžEÀˆ˜©Œž\\…¤]ŸI®¥D³|ˎ]CöAŤ¦…æ’´¥¸Lv¼€•¢ĽBaô–F~—š®²GÌҐEY„„œzk¤’°ahlV՞I^‹šCxĈPŽsB‰ƒºV‰¸@¾ªR²ĨN]´_eavSi‡vc•}p}Đ¼ƌkJœÚe thœ†_¸ ºx±ò_xN›Ë‹²‘@ƒă¡ßH©Ùñ}wkNÕ¹ÇO½¿£ĕ]ly_WìIžÇª`ŠuTÅxYĒÖ¼k֞’µ‚MžjJÚwn\\h‘œĒv]îh|’È›Ƅøègž¸Ķß ĉĈWb¹ƀdéƌNTtP[ŠöSvrCZžžaGuœbo´ŖÒÇА~¡zCI…özx¢„Pn‹•‰Èñ @ŒĥÒ¦†]ƞŠV}³ăĔñiiÄÓVépKG½Ä‘ÓávYo–C·sit‹iaÀy„ŧΡÈYDÑům}‰ý|m[węõĉZÅxUO}÷N¹³ĉo_qtă“qwµŁYلǝŕ¹tïÛUïmRCº…ˆĭ|µ›ÕÊK™½R‘ē ó]‘–GªęAx–»HO£|ām‡¡diď×YïYWªʼnOeÚtĐ«zđ¹T…ā‡úE™á²\\‹ķÍ}jYàÙÆſ¿Çdğ·ùTßÇţʄ¡XgWÀLJğ·¿ÃˆOj YÇ÷Qě‹i"]],"encodeOffsets":[[[117381,22988]],[[116552,22934]],[[116790,22617]],[[116973,22545]],[[116444,22536]],[[116931,22515]],[[116496,22490]],[[116453,22449]],[[113301,21439]],[[118726,21604]],[[118709,21486]],[[113210,20816]],[[115482,22082]],[[113171,21585]],[[113199,21590]],[[115232,22102]],[[115739,22373]],[[115134,22184]],[[113056,21175]],[[119573,21271]],[[119957,24020]],[[115859,22356]],[[116561,22649]],[[116285,22746]]]}},{"type":"Feature","id":"450000","properties":{"id":"450000","cp":[108.320004,22.82402],"name":"广西","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@H– TQ§•A"],["@@ĨʪƒLƒƊDÎĹĐCǦė¸zÚGn£¾›rªŀÜt¬@֛ڈSx~øOŒ˜ŶÐÂæȠ\\„ÈÜObĖw^oބLf¬°bI lTØB̈F£Ć¹gñĤaY“t¿¤VSñœK¸¤nM†¼‚JE±„½¸šŠño‹ÜCƆæĪ^ŠĚQÖ¦^‡ˆˆf´Q†üÜʝz¯šlzUĺš@쇀p¶n]sxtx¶@„~ÒĂJb©gk‚{°‚~c°`ԙ¬rV\\“la¼¤ôá`¯¹LC†ÆbŒxEræO‚v[H­˜„[~|aB£ÖsºdAĐzNÂðsŽÞƔ…Ĥªbƒ–ab`ho¡³F«èVloޤ™ÔRzpp®SŽĪº¨ÖƒºN…ij„d`’a”¦¤F³ºDÎńĀìŠCžĜº¦Ċ•~nS›|gźvZkCÆj°zVÈÁƔ]LÊFZg…čP­kini«‹qǀcz͔Y®¬Ů»qR×ō©DՄ‘§ƙǃŵTÉĩ±ŸıdÑnYY›IJvNĆÌØÜ Öp–}e³¦m‹©iÓ|¹Ÿħņ›|ª¦QF¢Â¬ʖovg¿em‡^ucà÷gՎuŒíÙćĝ}FϼĹ{µHK•sLSđƃr‹č¤[Ag‘oS‹ŇYMÿ§Ç{Fśbky‰lQxĕƒ]T·¶[B…ÑÏGáşşƇe€…•ăYSs­FQ}­Bƒw‘tYğÃ@~…C̀Q ×W‡j˱rÉ¥oÏ ±«ÓÂ¥•ƒ€k—ŽwWűŒmcih³K›~‰µh¯e]lµ›él•E쉕E“ďs‡’mǖŧē`ãògK_ÛsUʝ“ćğ¶hŒöŒO¤Ǜn³Žc‘`¡y‹¦C‘ez€YŠwa™–‘[ďĵűMę§]X˜Î_‚훘Û]é’ÛUćİÕBƣ±…dƒy¹T^džûÅÑŦ·‡PĻþÙ`K€¦˜…¢ÍeœĥR¿Œ³£[~Œäu¼dl‰t‚†W¸oRM¢ď\\zœ}Æzdvň–{ÎXF¶°Â_„ÒÂÏL©Ö•TmuŸ¼ãl‰›īkiqéfA„·Êµ\\őDc¥ÝF“y›Ôć˜c€űH_hL܋êĺШc}rn`½„Ì@¸¶ªVLŒŠhŒ‹\\•Ţĺk~ŽĠið°|gŒtTĭĸ^x‘vK˜VGréAé‘bUu›MJ‰VÃO¡…qĂXËS‰ģãlýàŸ_ju‡YÛÒB†œG^˜é֊¶§ŽƒEG”ÅzěƒƯ¤Ek‡N[kdåucé¬dnYpAyČ{`]þ¯T’bÜÈk‚¡Ġ•vŒàh„ÂƄ¢Jî¶²"]],"encodeOffsets":[[[111707,21520]],[[107619,25527]]]}},{"type":"Feature","id":"460000","properties":{"id":"460000","cp":[109.83119,19.031971],"name":"海南","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@š¦Ŝil¢”XƦ‘ƞò–ïè§ŞCêɕrŧůÇąĻõ™·ĉ³œ̅kÇm@ċȧƒŧĥ‰Ľʉ­ƅſ“ȓÒ˦ŝE}ºƑ[ÍĜȋ gÎfǐÏĤ¨êƺ\\Ɔ¸ĠĎvʄȀœÐ¾jNðĀÒRŒšZdž™zÐŘΰH¨Ƣb²_Ġ "],"encodeOffsets":[[112750,20508]]}},{"type":"Feature","id":"510000","properties":{"id":"510000","cp":[104.065735,30.659462],"name":"四川","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@LqKr"],["@@Š[ĻéV£ž_ţġñpG •réÏ·~ąSfy×͂·ºſƽiÍıƣıĻmHH}siaX@iǰÁÃ×t«ƒ­Tƒ¤J–JJŒyJ•ÈŠ`Ohߦ¡uËhIyCjmÿw…ZG……Ti‹SˆsO‰žB²ŸfNmsPaˆ{M{ŠõE‘^Hj}gYpaeuž¯‘oáwHjÁ½M¡pM“–uå‡mni{fk”\\oƒÎqCw†EZ¼K›ĝŠƒAy{m÷L‡wO×SimRI¯rK™õBS«sFe‡]fµ¢óY_ÆPRcue°Cbo׌bd£ŌIHgtrnyPt¦foaXďx›lBowz‹_{ÊéWiêE„GhܸºuFĈIxf®Ž•Y½ĀǙ]¤EyŸF²ċ’w¸¿@g¢§RGv»–áŸW`ÃĵJwi]t¥wO­½a[׈]`Ãi­üL€¦LabbTÀå’c}Íh™Æhˆ‹®BH€î|Ék­¤S†y£„ia©taį·Ɖ`ō¥Uh“O…ƒĝLk}©Fos‰´›Jm„µlŁu—…ø–nÑJWΪ–YÀïAetTžŅ‚ӍG™Ë«bo‰{ıwodƟ½ƒžOġܑµxàNÖ¾P²§HKv¾–]|•B‡ÆåoZ`¡Ø`ÀmºĠ~ÌЧnDž¿¤]wğ@sƒ‰rğu‰~‘Io”[é±¹ ¿žſđӉ@q‹gˆ¹zƱřaí°KtǤV»Ã[ĩǭƑ^ÇÓ@ỗs›Zϕ‹œÅĭ€Ƌ•ěpwDóÖሯneQˌq·•GCœýS]xŸ·ý‹q³•O՜Œ¶Qzßti{ř‰áÍÇWŝŭñzÇW‹pç¿JŒ™‚Xœĩè½cŒF–ÂLiVjx}\\N†ŇĖ¥Ge–“JA¼ÄHfÈu~¸Æ«dE³ÉMA|b˜Ò…˜ćhG¬CM‚õŠ„ƤąAvƒüV€éŀ‰_V̳ĐwQj´·ZeÈÁ¨X´Æ¡Qu·»Ÿ“˜ÕZ³ġqDo‰y`L¬gdp°şŠp¦ėìÅĮZްIä”h‚‘ˆzŠĵœf²å ›ĚрKp‹IN|‹„Ñz]ń……·FU×é»R³™MƒÉ»GM«€ki€™ér™}Ã`¹ăÞmȝnÁîRǀ³ĜoİzŔwǶVÚ£À]ɜ»ĆlƂ²Ġ…þTº·àUȞÏʦ¶†I’«dĽĢdĬ¿–»Ĕ׊h\\c¬†ä²GêëĤł¥ÀǿżÃÆMº}BÕĢyFVvw–ˆxBèĻĒ©Ĉ“tCĢɽŠȣ¦āæ·HĽî“ôNԓ~^¤Ɗœu„œ^s¼{TA¼ø°¢İªDè¾Ň¶ÝJ‘®Z´ğ~Sn|ªWÚ©òzPOȸ‚bð¢|‹øĞŠŒœŒQìÛÐ@Ğ™ǎRS¤Á§d…i“´ezÝúØã]Hq„kIŸþËQǦÃsǤ[E¬ÉŪÍxXƒ·ÖƁİlƞ¹ª¹|XÊwn‘ÆƄmÀêErĒtD®ċæcQƒ”E®³^ĭ¥©l}äQto˜ŖÜqƎkµ–„ªÔĻĴ¡@Ċ°B²Èw^^RsºT£ڿœQP‘JvÄz„^Đ¹Æ¯fLà´GC²‘dt˜­ĀRt¼¤ĦOðğfÔðDŨŁĞƘïžPȆ®âbMüÀXZ ¸£@Ś›»»QÉ­™]d“sÖ×_͖_ÌêŮPrĔĐÕGĂeZÜîĘqBhtO ¤tE[h|Y‹Ô‚ZśÎs´xº±UŒ’ñˆt|O’ĩĠºNbgþŠJy^dÂY Į„]Řz¦gC‚³€R`Šz’¢AjŒ¸CL„¤RÆ»@­Ŏk\\Ç´£YW}z@Z}‰Ã¶“oû¶]´^N‡Ò}èN‚ª–P˜Íy¹`S°´†ATe€VamdUĐwʄvĮÕ\\ƒu‹Æŗ¨Yp¹àZÂm™Wh{á„}WØǍ•Éüw™ga§áCNęÎ[ĀÕĪgÖɪX˜øx¬½Ů¦¦[€—„NΆL€ÜUÖ´òrÙŠxR^–†J˜k„ijnDX{Uƒ~ET{ļº¦PZc”jF²Ė@Žp˜g€ˆ¨“B{ƒu¨ŦyhoÚD®¯¢˜ WòàFΤ¨GDäz¦kŮPœġq˚¥À]€Ÿ˜eŽâÚ´ªKxī„Pˆ—Ö|æ[xäJÞĥ‚s’NÖ½ž€I†¬nĨY´®Ð—ƐŠ€mD™ŝuäđđEb…e’e_™v¡}ìęNJē}q”É埁T¯µRs¡M@}ůa†a­¯wvƉåZwž\\Z{åû^›"]],"encodeOffsets":[[[108815,30935]],[[110617,31811]]]}},{"type":"Feature","id":"520000","properties":{"id":"520000","cp":[106.713478,26.578343],"name":"贵州","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@†G\\†lY£‘in"],["@@q‚|ˆ‚mc¯tχVSÎ"],["@@hÑ£Is‡NgßH†›HªķÃh_¹ƒ¡ĝħń¦uيùŽgS¯JHŸ|sÝÅtÁïyMDč»eÕtA¤{b\\}—ƒG®u\\åPFq‹wÅaD…žK°ºâ_£ùbµ”mÁ‹ÛœĹM[q|hlaªāI}тƒµ@swtwm^oµˆD鼊yV™ky°ÉžûÛR…³‚‡eˆ‡¥]RՋěħ[ƅåÛDpŒ”J„iV™™‰ÂF²I…»mN·£›LbÒYb—WsÀbŽ™pki™TZĄă¶HŒq`……ĥ_JŸ¯ae«ƒKpÝx]aĕÛPƒÇȟ[ÁåŵÏő—÷Pw}‡TœÙ@Õs«ĿÛq©½œm¤ÙH·yǥĘĉBµĨÕnđ]K„©„œá‹ŸG纍§Õßg‡ǗĦTèƤƺ{¶ÉHÎd¾ŚÊ·OÐjXWrãLyzÉAL¾ę¢bĶėy_qMĔąro¼hĊžw¶øV¤w”²Ĉ]ʚKx|`ź¦ÂÈdr„cȁbe¸›`I¼čTF´¼Óýȃr¹ÍJ©k_șl³´_pН`oÒh޶pa‚^ÓĔ}D»^Xyœ`d˜[Kv…JPhèhCrĂĚÂ^Êƌ wˆZL­Ġ£šÁbrzOIl’MM”ĪŐžËr×ÎeŦŽtw|Œ¢mKjSǘňĂStÎŦEtqFT†¾†E쬬ôxÌO¢Ÿ KгŀºäY†„”PVgŎ¦Ŋm޼VZwVlŒ„z¤…ž£Tl®ctĽÚó{G­A‡ŒÇgeš~Αd¿æaSba¥KKûj®_ć^\\ؾbP®¦x^sxjĶI_Ä X‚⼕Hu¨Qh¡À@Ëô}ޱžGNìĎlT¸ˆ…`V~R°tbÕĊ`¸úÛtπFDu€[ƒMfqGH·¥yA‰ztMFe|R‚_Gk†ChZeÚ°to˜v`x‹b„ŒDnÐ{E}šZ˜è€x—†NEފREn˜[Pv@{~rĆAB§‚EO¿|UZ~ì„Uf¨J²ĂÝÆ€‚sª–B`„s¶œfvö¦ŠÕ~dÔq¨¸º»uù[[§´sb¤¢zþFœ¢Æ…Àhˆ™ÂˆW\\ıŽËI݊o±ĭŠ£þˆÊs}¡R]ŒěƒD‚g´VG¢‚j±®è†ºÃmpU[Á›‘Œëº°r›ÜbNu¸}Žº¼‡`ni”ºÔXĄ¤¼Ôdaµ€Á_À…†ftQQgœR—‘·Ǔ’v”}Ýלĵ]µœ“Wc¤F²›OĩųãW½¯K‚©…]€{†LóµCIµ±Mß¿hŸ•©āq¬o‚½ž~@i~TUxŪÒ¢@ƒ£ÀEîôruń‚”“‚b[§nWuMÆLl¿]x}ij­€½"]],"encodeOffsets":[[[112158,27383]],[[112105,27474]],[[112095,27476]]]}},{"type":"Feature","id":"530000","properties":{"id":"530000","cp":[101.512251,24.740609],"name":"云南","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@[„ùx½}ÑRH‘YīĺûsÍn‘iEoã½Ya²ė{c¬ĝg•ĂsA•ØÅwď‚õzFjw}—«Dx¿}UũlŸê™@•HÅ­F‰¨ÇoJ´Ónũuą¡Ã¢pÒŌ“Ø TF²‚xa²ËX€‚cʋlHîAßËŁkŻƑŷÉ©h™W­æßU‡“Ës¡¦}•teèÆ¶StǀÇ}Fd£j‹ĈZĆÆ‹¤T‚č\\Dƒ}O÷š£Uˆ§~ŃG™‚åŃDĝ¸œTsd¶¶Bªš¤u¢ŌĎo~t¾ÍŶÒtD¦Ú„iôö‰€z›ØX²ghįh½Û±¯€ÿm·zR¦Ɵ`ªŊÃh¢rOԍ´£Ym¼èêf¯ŪĽn„†cÚbŒw\\zlvWžªâˆ ¦g–mĿBş£¢ƹřbĥkǫßeeZkÙIKueT»sVesb‘aĕ  ¶®dNœĄÄpªyސ¼—„³BE˜®l‡ŽGœŭCœǶwêżĔÂe„pÍÀQƞpC„–¼ŲÈ­AÎô¶R„ä’Q^Øu¬°š_Èôc´¹ò¨P΢hlϦ´Ħ“Æ´sâDŽŲPnÊD^¯°’Upv†}®BP̪–jǬx–Söwlfòªv€qĸ|`H€­viļ€ndĜ­Ćhň•‚em·FyށqóžSᝑ³X_ĞçêtryvL¤§z„¦c¦¥jnŞk˜ˆlD¤øz½ĜàžĂŧMÅ|áƆàÊcðÂF܎‚áŢ¥\\\\º™İøÒÐJĴ‡„îD¦zK²ǏÎEh~’CD­hMn^ÌöÄ©ČZÀžaü„fɭyœpį´ěFűk]Ôě¢qlÅĆÙa¶~Äqššê€ljN¬¼H„ÊšNQ´ê¼VظE††^ŃÒyŒƒM{ŒJLoÒœęæŸe±Ķ›y‰’‡gã“¯JYÆĭĘëo¥Š‰o¯hcK«z_pŠrC´ĢÖY”—¼ v¸¢RŽÅW³Â§fǸYi³xR´ďUˊ`êĿU„û€uĆBƒƣö‰N€DH«Ĉg†——Ñ‚aB{ÊNF´¬c·Åv}eÇÃGB»”If•¦HňĕM…~[iwjUÁKE•Ž‹¾dĪçW›šI‹èÀŒoÈXòyŞŮÈXâÎŚŠj|àsRy‹µÖ›–Pr´þŒ ¸^wþTDŔ–Hr¸‹žRÌmf‡żÕâCôox–ĜƌÆĮŒ›Ð–œY˜tâŦÔ@]ÈǮƒ\\μģUsȯLbîƲŚºyh‡rŒŠ@ĒԝƀŸÀ²º\\êp“’JŠ}ĠvŠqt„Ġ@^xÀ£È†¨mËÏğ}n¹_¿¢×Y_æpˆÅ–A^{½•Lu¨GO±Õ½ßM¶w’ÁĢۂP‚›Ƣ¼pcIJxŠ|ap̬HšÐŒŊSfsðBZ¿©“XÏÒK•k†÷Eû¿‰S…rEFsÕūk”óVǥʼniTL‚¡n{‹uxţÏh™ôŝ¬ğōN“‘NJkyPaq™Âğ¤K®‡YŸxÉƋÁ]āęDqçgOg†ILu—\\_gz—]W¼ž~CÔē]bµogpў_oď`´³Țkl`IªºÎȄqÔþž»E³ĎSJ»œ_f·‚adÇqƒÇc¥Á_Źw{™L^ɱćx“U£µ÷xgĉp»ĆqNē`rĘzaĵĚ¡K½ÊBzyäKXqiWPÏɸ½řÍcÊG|µƕƣG˛÷Ÿk°_^ý|_zċBZocmø¯hhcæ\\lˆMFlư£Ĝ„ÆyH“„F¨‰µêÕ]—›HA…àӄ^it `þßäkŠĤÎT~Wlÿ¨„ÔPzUC–NVv [jâôDôď[}ž‰z¿–msSh‹¯{jïğl}šĹ[–őŒ‰gK‹©U·µË@¾ƒm_~q¡f¹…ÅË^»‘f³ø}Q•„¡Ö˳gͱ^ǁ…\\ëÃA_—¿bW›Ï[¶ƛ鏝£F{īZgm@|kHǭƁć¦UĔťƒ×ë}ǝƒeďºȡȘÏíBə£āĘPªij¶“ʼnÿ‡y©n‰ď£G¹¡I›Š±LÉĺÑdĉ܇W¥˜‰}g˜Á†{aqÃ¥aŠıęÏZ—ï`"],"encodeOffsets":[[104636,22969]]}},{"type":"Feature","id":"540000","properties":{"id":"540000","cp":[89.132212,30.860361],"name":"西藏","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@hžľxŽŖ‰xƒÒVކºÅâAĪÝȆµę¯Ňa±r_w~uSÕň‘qOj]ɄQ…£Z……UDûoY’»©M[‹L¼qãË{V͕çWViŽ]ë©Ä÷àyƛh›ÚU°ŒŒa”d„cQƒ~Mx¥™cc¡ÙaSyF—ցk­ŒuRýq¿Ôµ•QĽ³aG{¿FµëªéĜÿª@¬·–K‰·àariĕĀ«V»Ŷ™Ĵū˜gèLǴŇƶaf‹tŒèBŚ£^Šâ†ǐÝ®–šM¦ÁǞÿ¬LhŸŽJ¾óƾƺcxw‹f]Y…´ƒ¦|œQLn°aœdĊ…œ\\¨o’œǀÍŎœ´ĩĀd`tÊQŞŕ|‚¨C^©œĈ¦„¦ÎJĊ{ŽëĎjª²rЉšl`¼Ą[t|¦St辉PŒÜK¸€d˜Ƅı]s¤—î_v¹ÎVòŦj˜£Əsc—¬_Ğ´|٘¦Avަw`ăaÝaa­¢e¤ı²©ªSªšÈMĄwžÉØŔì@T‘¤—Ę™\\õª@”þo´­xA s”ÂtŎKzó´ÇĊµ¢rž^nĊ­Æ¬×üGž¢‚³ {âĊ]š™G‚~bÀgVjzlhǶf€žOšfdЉªB]pj„•TO–tĊ‚n¤}®¦ƒČ¥d¢¼»ddš”Y¼Žt—¢eȤJ¤}Ǿ¡°§¤AГlc@ĝ”sªćļđAç‡wx•UuzEÖġ~AN¹ÄÅȀݦ¿ģŁéì±H…ãd«g[؉¼ēÀ•cīľġ¬cJ‘µ…ÐʥVȝ¸ßS¹†ý±ğkƁ¼ą^ɛ¤Ûÿ‰b[}¬ōõÃ]ËNm®g@•Bg}ÍF±ǐyL¥íCˆƒIij€Ï÷њį[¹¦[⚍EÛïÁÉdƅß{âNÆāŨߝ¾ě÷yC£‡k­´ÓH@¹†TZ¥¢įƒ·ÌAЧ®—Zc…v½ŸZ­¹|ŕWZqgW“|ieZÅYVӁqdq•bc²R@†c‡¥Rã»Ge†ŸeƃīQ•}J[ғK…¬Ə|o’ėjġĠÑN¡ð¯EBčnwôɍėªƒ²•CλŹġǝʅįĭạ̃ūȹ]ΓͧgšsgȽóϧµǛ†ęgſ¶ҍć`ĘąŌJޚä¤rÅň¥ÖÁUětęuůÞiĊÄÀ\\Æs¦ÓRb|Â^řÌkÄŷ¶½÷‡f±iMݑ›‰@ĥ°G¬ÃM¥n£Øą‚ğ¯ß”§aëbéüÑOčœk£{\\‘eµª×M‘šÉfm«Ƒ{Å׃Gŏǩãy³©WÑăû‚··‘Q—òı}¯ã‰I•éÕÂZ¨īès¶ZÈsŽæĔTŘvŽgÌsN@îá¾ó@‰˜ÙwU±ÉT廣TđŸWxq¹Zo‘b‹s[׌¯cĩv‡Œėŧ³BM|¹k‰ªħ—¥TzNYnݍßpęrñĠĉRS~½ŠěVVе‚õ‡«ŒM££µB•ĉ¥áºae~³AuĐh`Ü³ç@BۘïĿa©|z²Ý¼D”£à貋ŸƒIƒû›I ā€óK¥}rÝ_Á´éMaň¨€~ªSĈ½Ž½KÙóĿeƃÆBŽ·¬ën×W|Uº}LJrƳ˜lŒµ`bÔ`QˆˆÐÓ@s¬ñIŒÍ@ûws¡åQÑßÁ`ŋĴ{Ī“T•ÚÅTSij‚‹Yo|Ç[ǾµMW¢ĭiÕØ¿@˜šMh…pÕ]j†éò¿OƇĆƇp€êĉâlØw–ěsˆǩ‚ĵ¸c…bU¹ř¨WavquSMzeo_^gsÏ·¥Ó@~¯¿RiīB™Š\\”qTGªÇĜçPoŠÿfñòą¦óQīÈáP•œābß{ƒZŗĸIæÅ„hnszÁCËìñšÏ·ąĚÝUm®ó­L·ăU›Èíoù´Êj°ŁŤ_uµ^‘°Œìǖ@tĶĒ¡Æ‡M³Ģ«˜İĨÅ®ğ†RŽāð“ggheÆ¢z‚Ê©Ô\\°ÝĎz~ź¤Pn–MĪÖB£Ÿk™n鄧żćŠ˜ĆK„ǰ¼L¶è‰âz¨u¦¥LDĘz¬ýÎmĘd¾ß”Fz“hg²™Fy¦ĝ¤ċņbΛ@y‚Ąæm°NĮZRÖíŽJ²öLĸÒ¨Y®ƌÐV‰à˜tt_ڀÂyĠzž]Ţh€zĎ{†ĢX”ˆc|šÐqŽšfO¢¤ög‚ÌHNŽ„PKŖœŽ˜Uú´xx[xˆvĐCûŠìÖT¬¸^}Ìsòd´_އKgžLĴ…ÀBon|H@–Êx˜—¦BpŰˆŌ¿fµƌA¾zLjRxжF”œkĄźRzŀˆ~¶[”´Hnª–VƞuĒ­È¨ƎcƽÌm¸ÁÈM¦x͊ëÀxdžB’šú^´W†£–d„kɾĬpœw‚˂ØɦļĬIŚœÊ•n›Ŕa¸™~J°î”lɌxĤÊÈðhÌ®‚g˜T´øŽàCˆŽÀ^ªerrƘdž¢İP|Ė ŸWœªĦ^¶´ÂL„aT±üWƜ˜ǀRšŶUńšĖ[QhlLüA†‹Ü\\†qR›Ą©"],"encodeOffsets":[[90849,37210]]}},{"type":"Feature","id":"610000","properties":{"id":"610000","cp":[108.948024,34.263161],"name":"陕西","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@˜p¢—ȮµšûG™Ħ}Ħšðǚ¶òƄ€jɂz°{ºØkÈęâ¦jª‚Bg‚\\œċ°s¬Ž’]jžú ‚E”Ȍdž¬s„t‡”RˆÆdĠݎwܔ¸ôW¾ƮłÒ_{’Ìšû¼„jº¹¢GǪÒ¯ĘƒZ`ºŊƒecņąš~BÂgzpâēòYǠȰÌTΨÂWœ|fcŸă§uF—Œ@NŸ¢XLƒŠRMº[ğȣſï|¥J™kc`sʼnǷ’Y¹‹W@µ÷K…ãï³ÛIcñ·VȋڍÒķø©—þ¥ƒy‚ÓŸğęmWµÎumZyOŅƟĥÓ~sÑL¤µaŅY¦ocyZ{‰y c]{ŒTa©ƒ`U_Ěē£ωÊƍKù’K¶ȱÝƷ§{û»ÅÁȹÍéuij|¹cÑd‘ŠìUYƒŽO‘uF–ÕÈYvÁCqӃT•Ǣí§·S¹NgŠV¬ë÷Át‡°Dد’C´ʼnƒópģ}„ċcE˅FŸŸéGU¥×K…§­¶³B‹Č}C¿åċ`wġB·¤őcƭ²ő[Å^axwQO…ÿEËߌ•ĤNĔŸwƇˆÄŠńwĪ­Šo[„_KÓª³“ÙnK‰Çƒěœÿ]ď€ă_d©·©Ýŏ°Ù®g]±„Ÿ‡ß˜å›—¬÷m\\›iaǑkěX{¢|ZKlçhLt€Ňîŵ€œè[€É@ƉĄEœ‡tƇÏ˜³­ħZ«mJ…›×¾‘MtÝĦ£IwÄå\\Õ{‡˜ƒOwĬ©LÙ³ÙgBƕŀr̛ĢŭO¥lãyC§HÍ£ßEñŸX¡—­°ÙCgpťz‘ˆb`wI„vA|§”‡—hoĕ@E±“iYd¥OϹS|}F@¾oAO²{tfžÜ—¢Fǂ҈W²°BĤh^Wx{@„¬‚­F¸¡„ķn£P|ŸªĴ@^ĠĈæb–Ôc¶l˜Yi…–^Mi˜cϰÂ[ä€vï¶gv@À“Ĭ·lJ¸sn|¼u~a]’ÆÈtŌºJp’ƒþ£KKf~ЦUbyäIšĺãn‡Ô¿^­žŵMT–hĠܤko¼Ŏìąǜh`[tŒRd²IJ_œXPrɲ‰l‘‚XžiL§àƒ–¹ŽH˜°Ȧqº®QC—bA†„ŌJ¸ĕÚ³ĺ§ `d¨YjžiZvRĺ±öVKkjGȊĐePОZmļKÀ€‚[ŠŽ`ösìh†ïÎoĬdtKÞ{¬èÒÒBŒÔpIJÇĬJŊ¦±J«ˆY§‹@·pH€µàåVKe›pW†ftsAÅqC·¬ko«pHÆuK@oŸHĆۄķhx“e‘n›S³àǍrqƶRbzy€¸ËАl›¼EºpĤ¼Œx¼½~Ğ’”à@†ÚüdK^ˆmÌSj"],"encodeOffsets":[[110234,38774]]}},{"type":"Feature","id":"620000","properties":{"id":"620000","cp":[103.823557,36.058039],"name":"甘肃","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@VuUv"],["@@ũ‹EĠtt~nkh`Q‰¦ÅÄÜdw˜Ab×ĠąJˆ¤DüègĺqBqœj°lI¡ĨÒ¤úSHbš‡ŠjΑBаaZˆ¢KJŽ’O[|A£žDx}Nì•HUnrk„ kp€¼Y kMJn[aG‚áÚÏ[½rc†}aQxOgsPMnUs‡nc‹Z…ž–sKúvA›t„Þġ’£®ĀYKdnFwš¢JE°”Latf`¼h¬we|€Æ‡šbj}GA€·~WŽ”—`†¢MC¤tL©IJ°qdf”O‚“bÞĬ¹ttu`^ZúE`Œ[@„Æsîz®¡’C„ƳƜG²“R‘¢R’m”fŽwĸg܃‚ą G@pzJM½mŠhVy¸uÈÔO±¨{LfæU¶ßGĂq\\ª¬‡²I‚¥IʼnÈīoı‹ÓÑAçÑ|«LÝcspīðÍg…të_õ‰\\ĉñLYnĝg’ŸRǡÁiHLlõUĹ²uQjYi§Z_c¨Ÿ´ĹĖÙ·ŋI…ƒaBD˜­R¹ȥr—¯G•ºß„K¨jWk’ɱŠOq›Wij\\a­‹Q\\sg_ĆǛōëp»£lğۀgS•ŶN®À]ˆÓäm™ĹãJaz¥V}‰Le¤L„ýo‘¹IsŋÅÇ^‘Žbz…³tmEÁ´aйcčecÇN•ĊãÁ\\蝗dNj•]j†—ZµkÓda•ćå]ğij@ ©O{¤ĸm¢ƒE·®ƒ«|@Xwg]A챝‡XǁÑdzªc›wQÚŝñsÕ³ÛV_ýƒ˜¥\\ů¥©¾÷w—Ž©WÕÊĩhÿÖÁRo¸V¬âDb¨šhûx–Ê×nj~Zâƒg|šXÁnßYoº§ZÅŘvŒ[„ĭÖʃuďxcVbnUSf…B¯³_Tzº—ΕO©çMÑ~Mˆ³]µ^püµ”ŠÄY~y@X~¤Z³€[Èōl@®Å¼£QKƒ·Di‹¡By‘ÿ‰Q_´D¥hŗyƒ^ŸĭÁZ]cIzý‰ah¹MĪğP‘s{ò‡‹‘²Vw¹t³Ŝˁ[ŽÑ}X\\gsFŸ£sPAgěp×ëfYHāďÖqēŭOÏë“dLü•\\iŒ”t^c®šRʺ¶—¢H°mˆ‘rYŸ£BŸ¹čIoľu¶uI]vģSQ{ƒUŻ”Å}QÂ|̋°ƅ¤ĩŪU ęĄžÌZҞ\\v˜²PĔ»ƢNHƒĂyAmƂwVmž`”]ȏb•”H`‰Ì¢²ILvĜ—H®¤Dlt_„¢JJÄämèÔDëþgºƫ™”aʎÌrêYi~ ÎݤNpÀA¾Ĕ¼b…ð÷’Žˆ‡®‚”üs”zMzÖĖQdȨý†v§Tè|ªH’þa¸|šÐ ƒwKĢx¦ivr^ÿ ¸l öæfƟĴ·PJv}n\\h¹¶v†·À|\\ƁĚN´Ĝ€çèÁz]ġ¤²¨QÒŨTIl‡ªťØ}¼˗ƦvÄùØE‹’«Fï˛Iq”ōŒTvāÜŏ‚íÛߜÛV—j³âwGăÂíNOŠˆŠPìyV³ʼnĖýZso§HіiYw[߆\\X¦¥c]ÔƩÜ·«j‡ÐqvÁ¦m^ċ±R™¦΋ƈťĚgÀ»IïĨʗƮްƝ˜ĻþÍAƉſ±tÍEÕÞāNU͗¡\\ſčåÒʻĘm ƭÌŹöʥ’ëQ¤µ­ÇcƕªoIýˆ‰Iɐ_mkl³ă‰Ɠ¦j—¡Yz•Ňi–}Msßõ–īʋ —}ƒÁVmŸ_[n}eı­Uĥ¼‘ª•I{ΧDӜƻėoj‘qYhĹT©oūĶ£]ďxĩ‹ǑMĝ‰q`B´ƃ˺Ч—ç~™²ņj@”¥@đ´ί}ĥtPńǾV¬ufӃÉC‹tÓ̻‰…¹£G³€]ƖƾŎĪŪĘ̖¨ʈĢƂlɘ۪üºňUðǜȢƢż̌ȦǼ‚ĤŊɲĖ­Kq´ï¦—ºĒDzņɾªǀÞĈĂD†½ĄĎÌŗĞrôñnŽœN¼â¾ʄľԆ|DŽŽ֦ज़ȗlj̘̭ɺƅêgV̍ʆĠ·ÌĊv|ýĖÕWĊǎÞ´õ¼cÒÒBĢ͢UĜð͒s¨ňƃLĉÕÝ@ɛƯ÷¿Ľ­ĹeȏijëCȚDŲyê×Ŗyò¯ļcÂßY…tÁƤyAã˾J@ǝrý‹‰@¤…rz¸oP¹ɐÚyᐇHŸĀ[Jw…cVeȴϜ»ÈŽĖ}ƒŰŐèȭǢόĀƪÈŶë;Ñ̆ȤМľĮEŔ—ĹŊũ~ËUă{ŸĻƹɁύȩþĽvĽƓÉ@ē„ĽɲßǐƫʾǗĒpäWÐxnsÀ^ƆwW©¦cÅ¡Ji§vúF¶Ž¨c~c¼īŒeXǚ‹\\đ¾JŽwÀďksãA‹fÕ¦L}wa‚o”Z’‹D½†Ml«]eÒÅaɲáo½FõÛ]ĻÒ¡wYR£¢rvÓ®y®LF‹LzĈ„ôe]gx}•|KK}xklL]c¦£fRtív¦†PĤoH{tK"]],"encodeOffsets":[[[108619,36299]],[[108589,36341]]]}},{"type":"Feature","id":"630000","properties":{"id":"630000","cp":[96.778916,35.623178],"name":"青海","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@InJm"],["@@CƒÆ½OŃĦsΰ~dz¦@@“Ņiš±è}ؘƄ˹A³r_ĞŠǒNΌĐw¤^ŬĵªpĺSZg’rpiƼĘԛ¨C|͖J’©Ħ»®VIJ~f\\m `Un„˜~ʌŸ•ĬàöNt•~ňjy–¢Zi˜Ɣ¥ĄŠk´nl`JʇŠJþ©pdƖ®È£¶ìRʦ‘źõƮËnŸʼėæÑƀĎ[‚˜¢VÎĂMÖÝÎF²sƊƀÎBļýƞ—¯ʘƭðħ¼Jh¿ŦęΌƇš¥²Q]Č¥nuÂÏriˆ¸¬ƪÛ^Ó¦d€¥[Wà…x\\ZŽjҕ¨GtpþYŊĕ´€zUO뇉P‰îMĄÁxH´á˜iÜUà›îÜՁĂÛSuŎ‹r“œJð̬EŒ‘FÁú×uÃÎkr“Ē{V}İ«O_ÌËĬ©ŽÓŧSRѱ§Ģ£^ÂyèçěM³Ƃę{[¸¿u…ºµ[gt£¸OƤĿéYŸõ·kŸq]juw¥Dĩƍ€õÇPéĽG‘ž©ã‡¤G…uȧþRcÕĕNy“yût“ˆ­‡ø‘†ï»a½ē¿BMoᣟÍj}éZËqbʍš“Ƭh¹ìÿÓAçãnIáI`ƒks£CG­ě˜Uy×Cy•…’Ÿ@¶ʡÊBnāzG„ơMē¼±O÷õJËĚăVŸĪũƆ£Œ¯{ËL½Ìzż“„VR|ĠTbuvJvµhĻĖH”Aëáa…­OÇðñęNw‡…œľ·L›mI±íĠĩPÉ×®ÿs—’cB³±JKßĊ«`…ađ»·QAmO’‘Vţéÿ¤¹SQt]]Çx€±¯A@ĉij¢Ó祖•ƒl¶ÅÛr—ŕspãRk~¦ª]Į­´“FR„åd­ČsCqđéFn¿Åƃm’Éx{W©ºƝºįkÕƂƑ¸wWūЩÈFž£\\tÈ¥ÄRÈýÌJ ƒlGr^×äùyÞ³fj”c†€¨£ÂZ|ǓMĝšÏ@ëÜőR‹›ĝ‰Œ÷¡{aïȷPu°ËXÙ{©TmĠ}Y³’­ÞIňµç½©C¡į÷¯B»|St»›]vƒųƒs»”}MÓ ÿʪƟǭA¡fs˜»PY¼c¡»¦c„ċ­¥£~msĉP•–Siƒ^o©A‰Šec‚™PeǵŽkg‚yUi¿h}aH™šĉ^|ᴟ¡HØûÅ«ĉ®]m€¡qĉ¶³ÈyôōLÁst“BŸ®wn±ă¥HSò뚣˜S’ë@לÊăxÇN©™©T±ª£IJ¡fb®ÞbŽb_Ą¥xu¥B—ž{łĝ³«`d˜Ɛt—¤ťiñžÍUuºí`£˜^tƃIJc—·ÛLO‹½Šsç¥Ts{ă\\_»™kϊ±q©čiìĉ|ÍIƒ¥ć¥›€]ª§D{ŝŖÉR_sÿc³Īō›ƿΑ›§p›[ĉ†›c¯bKm›R¥{³„Z†e^ŽŒwx¹dƽŽôIg §Mĕ ƹĴ¿—ǣÜ̓]‹Ý–]snåA{‹eŒƭ`ǻŊĿ\\ijŬű”YÂÿ¬jĖqŽßbЏ•L«¸©@ěĀ©ê¶ìÀEH|´bRľž–Ó¶rÀQþ‹vl®Õ‚E˜TzÜdb ˜hw¤{LR„ƒd“c‹b¯‹ÙVgœ‚ƜßzÃô쮍^jUèXΖ|UäÌ»rKŽ\\ŒªN‘¼pZCü†VY††¤ɃRi^rPҒTÖ}|br°qňb̰ªiƶGQ¾²„x¦PœmlŜ‘[Ĥ¡ΞsĦŸÔÏâ\\ªÚŒU\\f…¢N²§x|¤§„xĔsZPòʛ²SÐqF`ª„VƒÞŜĶƨVZŒÌL`ˆ¢dŐIqr\\oäõ–F礻Ŷ×h¹]Clـ\\¦ďÌį¬řtTӺƙgQÇÓHţĒ”´ÃbEÄlbʔC”|CˆŮˆk„Ʈ[ʼ¬ňœ´KŮÈΰÌζƶlð”ļA†TUvdTŠG†º̼ŠÔ€ŒsÊDԄveOg"]],"encodeOffsets":[[[105308,37219]],[[95370,40081]]]}},{"type":"Feature","id":"640000","properties":{"id":"640000","cp":[106.278179,37.26637],"name":"宁夏","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@KëÀęĞ«OęȿȕŸı]ʼn¡åįÕÔ«Ǵõƪ™ĚQÐZhv K°›öqÀѐS[ÃÖHƖčË‡nL]ûc…Ùß@‚“ĝ‘¾}w»»‹oģF¹œ»kÌÏ·{zPƒ§B­¢íyÅt@ƒ@áš]Yv_ssģ¼i߁”ĻL¾ġsKD£¡N_…“˜X¸}B~Haiˆ™Åf{«x»ge_bs“KF¯¡Ix™mELcÿZ¤­Ģ‘ƒÝœsuBLù•t†ŒYdˆmVtNmtOPhRw~bd…¾qÐ\\âÙH\\bImlNZŸ»loƒŸqlVm–Gā§~QCw¤™{A\\‘PKŸNY‡¯bF‡kC¥’sk‹Šs_Ã\\ă«¢ħkJi¯r›rAhĹûç£CU‡ĕĊ_ԗBixÅُĄnªÑaM~ħpOu¥sîeQ¥¤^dkKwlL~{L~–hw^‚ófćƒKyEŒ­K­zuÔ¡qQ¤xZÑ¢^ļöܾEpž±âbÊÑÆ^fk¬…NC¾‘Œ“YpxbK~¥Že֎ŒäBlt¿Đx½I[ĒǙŒWž‹f»Ĭ}d§dµùEuj¨‚IÆ¢¥dXªƅx¿]mtÏwßR͌X¢͎vÆzƂZò®ǢÌʆCrâºMÞzžÆMҔÊÓŊZľ–r°Î®Ȉmª²ĈUªĚøºˆĮ¦ÌĘk„^FłĬhĚiĀ˾iİbjÕ"],["@@mfwěwMrŢªv@G‰"]],"encodeOffsets":[[[109366,40242]],[[108600,36303]]]}},{"type":"Feature","id":"650000","properties":{"id":"650000","cp":[85.617733,40.792818],"name":"新疆","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@QØĔ²X¨”~ǘBºjʐߨvK”ƔX¨vĊOžÃƒ·¢i@~c—‡ĝe_«”Eš“}QxgɪëÏÃ@sÅyXoŖ{ô«ŸuX…ê•Îf`œC‚¹ÂÿÐGĮÕĞXŪōŸMźÈƺQèĽôe|¿ƸJR¤ĘEjcUóº¯Ĩ_ŘÁMª÷Ð¥Oéȇ¿ÖğǤǷÂF҇zÉx[]­Ĥĝ‰œ¦EP}ûƥé¿İƷTėƫœŕƅ™ƱB»Đ±’ēO…¦E–•}‘`cȺrĦáŖuҞª«IJ‡πdƺÏØZƴwʄ¤ĖGЙǂZ̓èH¶}ÚZצʥĪï|ÇĦMŔ»İĝLj‹ì¥Βœba­¯¥ǕǚkĆŵĦɑĺƯxūД̵nơʃĽá½M»›òmqóŘĝč˾ăC…ćāƿÝɽ©DZŅ¹đ¥˜³ðLrÁ®ɱĕģʼnǻ̋ȥơŻǛȡVï¹Ň۩ûkɗġƁ§ʇė̕ĩũƽō^ƕŠUv£ƁQï“Ƶkŏ½ΉÃŭdzLқʻ«ƭ\\lƒ‡ŭD‡“{ʓDkaFÃÄa“³ŤđÔGRÈƚhSӹŚsİ«ĐË[¥ÚDkº^Øg¼ŵ¸£EÍö•€ůʼnT¡c_‡ËKY‹ƧUśĵ„݃U_©rETÏʜ±OñtYw獃{£¨uM³x½şL©Ùá[ÓÐĥ Νtģ¢\\‚ś’nkO›w¥±ƒT»ƷFɯàĩÞáB¹Æ…ÑUw„੍žĽw[“mG½Èå~‡Æ÷QyŠěCFmĭZī—ŵVÁ™ƿQƛ—ûXS²‰b½KϽĉS›©ŷXĕŸ{ŽĕK·¥Ɨcqq©f¿]‡ßDõU³h—­gËÇïģÉɋw“k¯í}I·šœbmœÉ–ř›īJɥĻˁ×xo›ɹī‡l•c…¤³Xù]‘™DžA¿w͉ì¥wÇN·ÂËnƾƍdǧđ®Ɲv•Um©³G\\“}µĿ‡QyŹl㓛µEw‰LJQ½yƋBe¶ŋÀů‡ož¥A—˜Éw@•{Gpm¿Aij†ŽKLhˆ³`ñcËtW‚±»ÕS‰ëüÿďD‡u\\wwwù³—V›LŕƒOMËGh£õP¡™er™Ïd{“‡ġWÁ…č|yšg^ğyÁzÙs`—s|ÉåªÇ}m¢Ń¨`x¥’ù^•}ƒÌ¥H«‰Yªƅ”Aйn~Ꝛf¤áÀz„gŠÇDIԝ´AňĀ҄¶ûEYospõD[{ù°]u›Jq•U•|Soċxţ[õÔĥkŋÞŭZ˺óYËüċrw €ÞkrťË¿XGÉbřaDü·Ē÷Aê[Ää€I®BÕИÞ_¢āĠpŠÛÄȉĖġDKwbm‡ÄNô‡ŠfœƫVÉvi†dz—H‘‹QµâFšù­Âœ³¦{YGžƒd¢ĚÜO „€{Ö¦ÞÍÀPŒ^b–ƾŠlŽ[„vt×ĈÍE˨¡Đ~´î¸ùÎh€uè`¸ŸHÕŔVºwĠââWò‡@{œÙNÝ´ə²ȕn{¿¥{l—÷eé^e’ďˆXj©î\\ªÑò˜Üìc\\üqˆÕ[Č¡xoÂċªbØ­Œø|€¶ȴZdÆÂšońéŒGš\\”¼C°ÌƁn´nxšÊOĨ’ہƴĸ¢¸òTxÊǪMīИÖŲÃɎOvˆʦƢ~FއRěò—¿ġ~åŊœú‰Nšžš¸qŽ’Ę[Ĕ¶ÂćnÒPĒÜvúĀÊbÖ{Äî¸~Ŕünp¤ÂH¾œĄYÒ©ÊfºmԈĘcDoĬMŬ’˜S¤„s²‚”ʘچžȂVŦ –ŽèW°ªB|IJXŔþÈJĦÆæFĚêŠYĂªĂ]øªŖNÞüA€’fɨJ€˜¯ÎrDDšĤ€`€mz\\„§~D¬{vJÂ˜«lµĂb–¤p€ŌŰNĄ¨ĊXW|ų ¿¾ɄĦƐMT”‡òP˜÷fØĶK¢ȝ˔Sô¹òEð­”`Ɩ½ǒÂň×äı–§ĤƝ§C~¡‚hlå‚ǺŦŞkâ’~}ŽFøàIJaĞ‚fƠ¥Ž„Ŕdž˜®U¸ˆźXœv¢aƆúŪtŠųƠjd•ƺŠƺÅìnrh\\ĺ¯äɝĦ]èpĄ¦´LƞĬŠ´ƤǬ˼Ēɸ¤rºǼ²¨zÌPðŀbþ¹ļD¢¹œ\\ĜÑŚŸ¶ZƄ³àjĨoâŠȴLʉȮŒĐ­ĚăŽÀêZǚŐ¤qȂ\\L¢ŌİfÆs|zºeªÙæ§΢{Ā´ƐÚ¬¨Ĵà²łhʺKÞºÖTŠiƢ¾ªì°`öøu®Ê¾ãØ"],"encodeOffsets":[[88824,50096]]}},{"type":"Feature","id":"110000","properties":{"id":"110000","cp":[116.405285,39.904989],"name":"北京","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ĽOÁ›ûtŷmiÍt_H»Ĩ±d`й­{bw…Yr“³S]§§o¹€qGtm_Sŧ€“oa›‹FLg‘QN_•dV€@Zom_ć\\ߚc±x¯oœRcfe…£’o§ËgToÛJíĔóu…|wP¤™XnO¢ÉˆŦ¯rNÄā¤zâŖÈRpŢZŠœÚ{GŠrFt¦Òx§ø¹RóäV¤XdˆżâºWbwڍUd®bêņ¾‘jnŎGŃŶŠnzÚSeîĜZczî¾i]͜™QaúÍÔiþĩȨWĢ‹ü|Ėu[qb[swP@ÅğP¿{\\‡¥A¨Ï‘Ѩj¯ŠX\\¯œMK‘pA³[H…īu}}"],"encodeOffsets":[[120023,41045]]}},{"type":"Feature","id":"120000","properties":{"id":"120000","cp":[117.190182,39.125596],"name":"天津","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ŬgX§Ü«E…¶Ḟ“¬O_™ïlÁg“z±AXe™µÄĵ{¶]gitgšIj·›¥îakS€‰¨ÐƎk}ĕ{gB—qGf{¿a†U^fI“ư‹³õ{YƒıëNĿžk©ïËZŏ‘R§òoY×Ógc…ĥs¡bġ«@dekąI[nlPqCnp{ˆō³°`{PNdƗqSÄĻNNâyj]äžÒD ĬH°Æ]~¡HO¾ŒX}ÐxŒgp“gWˆrDGˆŒpù‚Š^L‚ˆrzWxˆZ^¨´T\\|~@I‰zƒ–bĤ‹œjeĊªz£®Ĕvě€L†mV¾Ô_ȔNW~zbĬvG†²ZmDM~”~"],"encodeOffsets":[[120237,41215]]}},{"type":"Feature","id":"310000","properties":{"id":"310000","cp":[121.472644,31.231706],"name":"上海","childNum":6},"geometry":{"type":"MultiPolygon","coordinates":[["@@ɧư¬EpƸÁxc‡"],["@@©„ªƒ"],["@@”MA‹‘š"],["@@Qp݁E§ÉC¾"],["@@bŝՕÕEȣÚƥêImɇǦèÜĠŒÚžÃƌÃ͎ó"],["@@ǜûȬɋŠŭ™×^‰sYŒɍDŋ‘ŽąñCG²«ªč@h–_p¯A{‡oloY€¬j@IJ`•gQڛhr|ǀ^MIJvtbe´R¯Ô¬¨YŽô¤r]ì†Ƭį"]],"encodeOffsets":[[[124702,32062]],[[124547,32200]],[[124808,31991]],[[124726,32110]],[[124903,32376]],[[124438,32149]]]}},{"type":"Feature","id":"500000","properties":{"id":"500000","cp":[107.304962,29.533155],"name":"重庆","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@vjG~nGŘŬĶȂƀƾ¹¸ØÎezĆT¸}êЖqHŸðqĖ䒊¥^CƒIj–²p…\\_ æüY|[YxƊæuž°xb®…Űb@~¢NQt°¶‚S栓Ê~rljĔëĚ¢~šuf`‘‚†fa‚ĔJåĊ„nÖ]„jƎćÊ@Š£¾a®£Ű{ŶĕF‹ègLk{Y|¡ĜWƔtƬJÑxq‹±ĢN´‰òK‰™–LÈüD|s`ŋ’ć]ƒÃ‰`đŒMûƱ½~Y°ħ`ƏíW‰½eI‹½{aŸ‘OIrÏ¡ĕŇa†p†µÜƅġ‘œ^ÖÛbÙŽŏml½S‹êqDu[R‹ãË»†ÿw`»y‘¸_ĺę}÷`M¯ċfCVµqʼn÷Z•gg“Œ`d½pDO‡ÎCnœ^uf²ènh¼WtƏxRGg¦…pV„†FI±ŽG^ŒIc´ec‡’G•ĹÞ½sëĬ„h˜xW‚}Kӈe­Xsbk”F¦›L‘ØgTkïƵNï¶}Gy“w\\oñ¡nmĈzjŸ•@™Óc£»Wă¹Ój“_m»ˆ¹·~MvÛaqœ»­‰êœ’\\ÂoVnŽÓØÍ™²«‹bq¿efE „€‹Ĝ^Qž~ Évý‡ş¤²Į‰pEİ}zcĺƒL‹½‡š¿gņ›¡ýE¡ya£³t\\¨\\vú»¼§·Ñr_oÒý¥u‚•_n»_ƒ•At©Þűā§IVeëƒY}{VPÀFA¨ąB}q@|Ou—\\Fm‰QF݅Mw˜å}]•€|FmϋCaƒwŒu_p—¯sfÙgY…DHl`{QEfNysBЦzG¸rHe‚„N\\CvEsÐùÜ_·ÖĉsaQ¯€}_U‡†xÃđŠq›NH¬•Äd^ÝŰR¬ã°wećJEž·vÝ·Hgƒ‚éFXjÉê`|yŒpxkAwœWĐpb¥eOsmzwqChóUQl¥F^laf‹anòsr›EvfQdÁUVf—ÎvÜ^efˆtET¬ôA\\œ¢sJŽnQTjP؈xøK|nBz‰„œĞ»LY‚…FDxӄvr“[ehľš•vN”¢o¾NiÂxGp⬐z›bfZo~hGi’]öF|‰|Nb‡tOMn eA±ŠtPT‡LjpYQ|†SH††YĀxinzDJ€Ìg¢và¥Pg‰_–ÇzII‹€II•„£®S¬„Øs쐣ŒN"],["@@ifjN@s"]],"encodeOffsets":[[[109628,30765]],[[111725,31320]]]}},{"type":"Feature","id":"810000","properties":{"id":"810000","cp":[114.173355,22.320048],"name":"香港","childNum":5},"geometry":{"type":"MultiPolygon","coordinates":[["@@AlBk"],["@@mŽn"],["@@EpFo"],["@@ea¢pl¸Eõ¹‡hj[ƒ]ÔCΖ@lj˜¡uBXŸ…•´‹AI¹…[‹yDUˆ]W`çwZkmc–…M›žp€Åv›}I‹oJlcaƒfёKްä¬XJmРđhI®æÔtSHn€Eˆ„ÒrÈc"],["@@rMUw‡AS®€e"]],"encodeOffsets":[[[117111,23002]],[[117072,22876]],[[117045,22887]],[[116975,23082]],[[116882,22747]]]}},{"type":"Feature","id":"820000","properties":{"id":"820000","cp":[113.54909,22.198951],"name":"澳门","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@kÊd°å§s"],"encodeOffsets":[[116279,22639]]}}],"UTF8Encoding":true}
\ No newline at end of file
...@@ -408,6 +408,7 @@ export default { ...@@ -408,6 +408,7 @@ export default {
} }
::v-deep .el-input-number .el-input__inner { ::v-deep .el-input-number .el-input__inner {
text-align: left;
padding: 0 2px !important; padding: 0 2px !important;
} }
::v-deep .el-input .el-input__inner { ::v-deep .el-input .el-input__inner {
......
...@@ -152,12 +152,12 @@ ...@@ -152,12 +152,12 @@
:disabled="item.disabled" :disabled="item.disabled"
:controls="item.controls ? true : false" :controls="item.controls ? true : false"
:controls-position="item.controlsPosition" :controls-position="item.controlsPosition"
:placeholder="item.placeholder" :placeholder="item.placeholder || '请输入'"
:step="item.step" :step="item.step"
:precision="item.precision" :precision="item.precision"
:min="item.minRows" :min="item.minRows"
:max="item.maxRows" :max="item.maxRows"
style="display: table-cell" style="display: table-cell; text-align: left"
@blur="handleBlur" @blur="handleBlur"
></el-input-number> ></el-input-number>
<span <span
...@@ -232,7 +232,7 @@ ...@@ -232,7 +232,7 @@
v-for="(opt, optIndex) in unionList" v-for="(opt, optIndex) in unionList"
:key="optIndex" :key="optIndex"
:label="opt.unionName" :label="opt.unionName"
:value="opt.unionNo" :value="opt.id"
></el-option> ></el-option>
</template> </template>
<template v-else> <template v-else>
...@@ -831,6 +831,13 @@ export default { ...@@ -831,6 +831,13 @@ export default {
message: "请选择" + targetItem.label, message: "请选择" + targetItem.label,
}, },
] ]
} else if (targetItem.type == "upload") {
targetItem.rules = [
{
required: true,
message: "请上传" + targetItem.label,
},
]
} else { } else {
targetItem.rules = [ targetItem.rules = [
{ {
...@@ -862,13 +869,24 @@ export default { ...@@ -862,13 +869,24 @@ export default {
if (filterArr.includes(targetItem.column[index].prop)) { if (filterArr.includes(targetItem.column[index].prop)) {
return return
} }
if (targetItem.column[index].type == "checkbox") { if (
targetItem.column[index].type == "checkbox" ||
targetItem.column[index].type == "date" ||
targetItem.column[index].type == "radio"
) {
targetItem.column[index].rules = [ targetItem.column[index].rules = [
{ {
required: true, required: true,
message: "请选择" + targetItem.column[index].label, message: "请选择" + targetItem.column[index].label,
}, },
] ]
} else if (targetItem.column[index].type == "upload") {
targetItem.rules = [
{
required: true,
message: "请上传" + targetItem.column[index].label,
},
]
} else { } else {
targetItem.column[index].rules = [ targetItem.column[index].rules = [
{ {
...@@ -975,7 +993,8 @@ export default { ...@@ -975,7 +993,8 @@ export default {
} }
::v-deep .el-input-number .el-input__inner { ::v-deep .el-input-number .el-input__inner {
padding: 0 2px !important; padding: 0 15px !important;
text-align: left;
} }
.el-radio { .el-radio {
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
{{ unionName }} {{ unionName }}
</span> </span>
<span v-else style="margin: 0 5px">{{ <span v-else style="margin: 0 5px">{{
String(form[item.prop]) | getItemText(item.dicData, item.type) form[item.prop] | getItemText(item.dicData, item.type)
}}</span> }}</span>
</span> </span>
<span v-if="item.append && !item.toothBit" class="append">{{ <span v-if="item.append && !item.toothBit" class="append">{{
...@@ -65,13 +65,22 @@ export default { ...@@ -65,13 +65,22 @@ export default {
}, },
filters: { filters: {
getItemText(val, list, type) { getItemText(val, list, type) {
if (!val) return "" // 单选改为字符串
if (["radio", "select", "checkbox", "cascader"].includes(type)) { if (["radio", "select", "cascader"].includes(type)) {
return formatDicList(list, String(val), type === "cascader" ? "/" : ",")
}
// 多选
if (["checkbox"].includes(type)) {
return formatDicList(list, val, type === "cascader" ? "/" : ",") return formatDicList(list, val, type === "cascader" ? "/" : ",")
} }
// 返回的数字修改字符串
if (typeof val === "number") {
return String(val)
}
if (Array.isArray(val) && type.includes("range")) { if (Array.isArray(val) && type.includes("range")) {
return val.join("-") return val.join("-")
} }
// if (!val) return ""
return val return val
}, },
}, },
...@@ -80,7 +89,7 @@ export default { ...@@ -80,7 +89,7 @@ export default {
if (v.length > 0 && this.form[this.item.prop]) { if (v.length > 0 && this.form[this.item.prop]) {
// console.log("获取到了医联体列表", this.form[this.item.prop]) // console.log("获取到了医联体列表", this.form[this.item.prop])
this.unionName = v.filter( this.unionName = v.filter(
(e) => e.unionNo == this.form[this.item.prop] (e) => e.id == this.form[this.item.prop]
)[0].unionName )[0].unionName
} }
}, },
......
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
v-show="g.display" v-show="g.display"
:key="gIndex" :key="gIndex"
:name="g.prop" :name="g.prop"
:disabled="!g.arrow" :disabled="true"
:class="g.prop == '1669858313508_15760' ? 'otherItemClass' : ''" :class="g.prop == '1669858313508_15760' ? 'otherItemClass' : ''"
> >
<template slot="title"> <template slot="title">
...@@ -493,4 +493,8 @@ export default { ...@@ -493,4 +493,8 @@ export default {
} }
} }
} }
::v-deep .el-collapse-item.is-disabled .el-collapse-item__header {
// color: #bbb;
cursor: default;
}
</style> </style>
...@@ -226,6 +226,15 @@ export default { ...@@ -226,6 +226,15 @@ export default {
form: {}, form: {},
} }
}, },
watch: {
formDefaults: {
handler(v) {
console.log(v)
this.initforms()
},
deep: true,
},
},
methods: { methods: {
// 表单赋值 // 表单赋值
initforms() { initforms() {
......
...@@ -100,7 +100,9 @@ ...@@ -100,7 +100,9 @@
" "
> >
<template v-for="(op, opIndex) in col2.operations"> <template v-for="(op, opIndex) in col2.operations">
<template v-if="!op.isHidden || !op.isHidden(scope.row)"> <template
v-if="!op.isHidden || !op.isHidden(scope.row)"
>
<el-button <el-button
:key="opIndex" :key="opIndex"
:disabled=" :disabled="
...@@ -118,11 +120,11 @@ ...@@ -118,11 +120,11 @@
@click="op.func(scope.row, scope.$index)" @click="op.func(scope.row, scope.$index)"
> >
{{ {{
op.formatter op.formatter
? op.formatter(scope.row).label ? op.formatter(scope.row).label
: op.label : op.label
? op.label ? op.label
: scope.row[col2.value] : scope.row[col2.value]
}} }}
</el-button> </el-button>
</template> </template>
...@@ -167,9 +169,7 @@ ...@@ -167,9 +169,7 @@
" "
/> />
<span v-else class="tableSpan"> <span v-else class="tableSpan">
{{ {{ scope.row[col2.value] }}
scope.row[col2.value]
}}
</span> </span>
</template> </template>
<template v-else> <template v-else>
...@@ -203,9 +203,7 @@ ...@@ -203,9 +203,7 @@
" "
/> />
<span v-else class="tableSpan"> <span v-else class="tableSpan">
{{ {{ scope.row[col2.value] }}
scope.row[col2.value]
}}
</span> </span>
</template> </template>
</template> </template>
...@@ -292,11 +290,8 @@ ...@@ -292,11 +290,8 @@
trigger="click" trigger="click"
> >
<el-button type="primary" :size="size"> <el-button type="primary" :size="size">
{{ op.title || "更多操作" {{ op.title || "更多操作" }}
}} <i class="el-icon-arrow-down el-icon--right"></i>
<i
class="el-icon-arrow-down el-icon--right"
></i>
</el-button> </el-button>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item <el-dropdown-item
...@@ -323,9 +318,9 @@ ...@@ -323,9 +318,9 @@
" "
> >
{{ {{
child.formatter child.formatter
? child.formatter(scope.row).label ? child.formatter(scope.row).label
: child.label : child.label
}} }}
</el-dropdown-item> </el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
...@@ -347,33 +342,40 @@ ...@@ -347,33 +342,40 @@
:inactive-value="op.inactiveValue" :inactive-value="op.inactiveValue"
></el-switch> ></el-switch>
</div> </div>
<!-- 操作文字按钮 --> <template v-else>
<el-button <template
v-else v-if="
:key="opIndex" op.formatter &&
:size="size" op.formatter(scope.row).type == 'none'
:disabled=" "
op.formatter ></template>
? op.formatter(scope.row).disabled <el-button
: false v-else
" :key="opIndex"
:style="op.style" :size="size"
:type=" :disabled="
op.formatter op.formatter
? op.formatter(scope.row).type ? op.formatter(scope.row).disabled
: op.type || '' : false
" "
:icon="op.icon" :style="op.style"
@click="op.isIndex ? op.func(scope.row, scope.$index,opIndex) :op.func(scope.row, scope.$index)" :type="
> op.formatter
{{ ? op.formatter(scope.row).type
op.formatter : op.type || ''
? op.formatter(scope.row).label "
: op.label :icon="op.icon"
? op.label @click="op.func(scope.row, scope.$index)"
: scope.row[column.value] >
}} {{
</el-button> op.formatter
? op.formatter(scope.row).label
: op.label
? op.label
: scope.row[column.value]
}}
</el-button>
</template>
</template> </template>
</template> </template>
</template> </template>
...@@ -383,7 +385,9 @@ ...@@ -383,7 +385,9 @@
? column.operations.formatter(scope.row) ? column.operations.formatter(scope.row)
: column.operations" : column.operations"
> >
<template v-if="!operate.isHidden || !operate.isHidden(scope.row)"> <template
v-if="!operate.isHidden || !operate.isHidden(scope.row)"
>
<el-tooltip <el-tooltip
v-if="operate.tips" v-if="operate.tips"
:key="operIndex + Date.parse(new Date())" :key="operIndex + Date.parse(new Date())"
...@@ -456,9 +460,7 @@ ...@@ -456,9 +460,7 @@
" "
/> />
<span v-else class="tableSpan"> <span v-else class="tableSpan">
{{ {{ scope.row[column.value] }}
scope.row[column.value]
}}
</span> </span>
</template> </template>
<template v-else> <template v-else>
...@@ -492,9 +494,7 @@ ...@@ -492,9 +494,7 @@
" "
/> />
<span v-else class="tableSpan"> <span v-else class="tableSpan">
{{ {{ scope.row[column.value] }}
scope.row[column.value]
}}
</span> </span>
</template> </template>
</template> </template>
...@@ -513,9 +513,7 @@ ...@@ -513,9 +513,7 @@
:size="column.size" :size="column.size"
></el-date-picker> ></el-date-picker>
<span v-else class="tableSpan"> <span v-else class="tableSpan">
{{ {{ scope.row[column.value] }}
scope.row[column.value]
}}
</span> </span>
</template> </template>
...@@ -566,7 +564,9 @@ ...@@ -566,7 +564,9 @@
</template> </template>
<template v-if="column.operType === 'checkbox'"> <template v-if="column.operType === 'checkbox'">
<el-checkbox v-model="scope.row[column.value]"></el-checkbox> <el-checkbox
v-model="scope.row[column.value]"
></el-checkbox>
</template> </template>
<!-- 模糊查询输入 --> <!-- 模糊查询输入 -->
...@@ -630,7 +630,8 @@ ...@@ -630,7 +630,8 @@
style="float: left" style="float: left"
type="primary" type="primary"
@click="column.func(scope.$index)" @click="column.func(scope.$index)"
>上传</el-button> >上传</el-button
>
<span <span
v-if="scope.row.imgUrl" v-if="scope.row.imgUrl"
style=" style="
...@@ -641,13 +642,15 @@ ...@@ -641,13 +642,15 @@
color: #409eff; color: #409eff;
" "
@click="column.enlargeFunc(scope.row.imgUrl)" @click="column.enlargeFunc(scope.row.imgUrl)"
>{{ scope.row.imgUrl }}</span> >{{ scope.row.imgUrl }}</span
>
<el-button <el-button
v-if="scope.row.imgUrl" v-if="scope.row.imgUrl"
style="float: left; margin-left: 5px" style="float: left; margin-left: 5px"
type="primary" type="primary"
@click="column.delFunc(scope.row, scope.$index)" @click="column.delFunc(scope.row, scope.$index)"
>删除</el-button> >删除</el-button
>
</template> </template>
<!-- 图片 --> <!-- 图片 -->
<template v-if="column.operType === 'img'"> <template v-if="column.operType === 'img'">
...@@ -665,16 +668,35 @@ ...@@ -665,16 +668,35 @@
<!-- 消息 --> <!-- 消息 -->
<template v-if="column.operType === 'txt'"> <template v-if="column.operType === 'txt'">
<div :style="column.style1">{{ scope.row[column.value1] }}</div> <div :style="column.style1">
<div :style="column.style2">{{ scope.row[column.value2] }}</div> {{ scope.row[column.value1] }}
</div>
<div :style="column.style2">
{{ scope.row[column.value2] }}
</div>
</template> </template>
<!-- html --> <!-- html -->
<template v-if="column.type === 'html'"> <template v-if="column.type === 'html'">
<div class="highlight" v-html="scope.row[column.value]"></div> <div
class="highlight"
v-html="scope.row[column.value]"
></div>
</template>
<template v-if="column.type === 'switch'">
<el-switch
v-model="scope.row[column.value]"
:active-value="1"
:inactive-value="0"
@change="column.func(scope.row, scope.$index)"
></el-switch>
</template> </template>
<!-- 展开列表 --> <!-- 展开列表 -->
<template v-if="column.tabType === 'expand'"> <template v-if="column.tabType === 'expand'">
<el-form label-position="right" class="demo-table-expand" label-width="130px"> <el-form
label-position="right"
class="demo-table-expand"
label-width="130px"
>
<template v-for="(expand, index) in column.expandColumns"> <template v-for="(expand, index) in column.expandColumns">
<el-form-item <el-form-item
v-if="!expand.hidden" v-if="!expand.hidden"
......
...@@ -38,20 +38,29 @@ ...@@ -38,20 +38,29 @@
</div> </div>
<el-popover <el-popover
placement="top-start" placement="top-start"
width="200" width="300"
trigger="click" :trigger="messageCount == 0 ? 'none' : 'hover'"
popper-class="message-pop" popper-class="message-pop"
> >
<div <div class="messageBox">
v-for="(item, index) in messageList" <div
:key="index" v-for="(item, index) in messageList"
class="message-box mb-24" :key="index"
> class="message-box mb-24"
<div class="top-box mb-12"> >
<span class="blue-dot mt-5 mr-8"></span> <div class="top-box mb-12">
<span class="top-text">{{ item.date }}</span> <span class="blue-dot mt-5 mr-8"></span>
<span class="top-text">{{ item.createTime }}</span>
</div>
<div
class="main-text ml-8"
style="cursor: pointer"
@click="goSearch(item.bizType)"
>
{{ item.content }}
</div>
</div> </div>
<div class="main-text ml-8">{{ item.message }}</div> <div v-show="loading" v-loading="loading" class="loading"></div>
</div> </div>
<template slot="reference"> <template slot="reference">
<el-badge :value="messageCount" :class-name="'badge'"> <el-badge :value="messageCount" :class-name="'badge'">
...@@ -72,24 +81,26 @@ ...@@ -72,24 +81,26 @@
<script> <script>
import { mapGetters } from "vuex" import { mapGetters } from "vuex"
import { getMessage } from "@/api/user"
import Message from "@/mixins/getMessage"
import { import {
Avatar, Avatar,
Breadcrumb, // Breadcrumb,
ErrorLog, ErrorLog,
FullScreenBar, // FullScreenBar,
ThemeBar, // ThemeBar,
} from "@/layouts/components" } from "@/layouts/components"
export default { export default {
name: "NavBar", name: "NavBar",
components: { components: {
Avatar, Avatar,
Breadcrumb, // Breadcrumb,
ErrorLog, ErrorLog,
FullScreenBar, // FullScreenBar,
ThemeBar, // ThemeBar,
}, },
mixins: [Message],
props: { props: {
curSelectedIndex: { curSelectedIndex: {
type: String, type: String,
...@@ -100,7 +111,6 @@ export default { ...@@ -100,7 +111,6 @@ export default {
return { return {
pulse: false, pulse: false,
isDot: true, isDot: true,
messageCount: 10,
screeningList: [ screeningList: [
{ {
title: "社区筛查", title: "社区筛查",
...@@ -124,16 +134,6 @@ export default { ...@@ -124,16 +134,6 @@ export default {
{ fontSize: "+", label: "A+" }, { fontSize: "+", label: "A+" },
], ],
fontSize: localStorage.getItem("fontSize") - 0 || 14, fontSize: localStorage.getItem("fontSize") - 0 || 14,
messageList: [
{
date: "2022-12-12",
message: "驳回修改病例【6条】",
},
{
date: "2022-12-12",
message: "驳回修改病例【6条】",
},
],
} }
}, },
computed: { computed: {
...@@ -143,11 +143,70 @@ export default { ...@@ -143,11 +143,70 @@ export default {
device: "settings/device", device: "settings/device",
routes: "routes/routes", routes: "routes/routes",
feedBackNumber: "user/feedBackNumber", feedBackNumber: "user/feedBackNumber",
getMessageFlag: "user/getMessageFlag",
}), }),
}, },
created() {}, watch: {
mounted() {}, curSelectedIndex(v) {
this.messageList = []
this.pageNum = 1
this.getMessage()
},
getMessageFlag(v) {
if (v) {
this.messageList = []
this.pageNum = 1
this.getMessage()
}
},
},
created() {
// this.getMessage()
},
mounted() {
document
.querySelector(".messageBox")
.addEventListener("scroll", this.scrolling)
},
methods: { methods: {
scrolling() {
let scrollHeight = document.querySelector(".messageBox").scrollHeight //实际高度
let scrollTop = document.querySelector(".messageBox").scrollTop //滚动高度
let height = document.querySelector(".messageBox").clientHeight //滚动高度
console.log(scrollHeight, scrollTop)
if (
scrollTop + height + 10 >= scrollHeight &&
this.messageList.length < this.messageCount &&
!this.loading
) {
this.pageNum++
this.loading = true
this.getMessage()
}
},
goSearch(val) {
if (val == "screen") {
this.$router.push("/screening/index?checkStatus=2")
}
},
getMessage() {
this.loading = true
getMessage({
pageSize: this.pageSize,
pageNum: this.pageNum,
patientFrom: this.curSelectedIndex,
}).then((res) => {
if (res.code == 1) {
this.$store.commit("user/setGetMessageFlag", false)
this.messageCount = res.data.total
this.messageList = [...this.messageList, ...res.data.records]
// console.log(res.data.total)
} else {
this.messageCount = 0
}
this.loading = false
})
},
handleCollapse() { handleCollapse() {
this.$store.dispatch("settings/changeCollapse") this.$store.dispatch("settings/changeCollapse")
}, },
...@@ -308,6 +367,19 @@ export default { ...@@ -308,6 +367,19 @@ export default {
} }
} }
} }
.messageBox {
padding: 40px 28px 12px;
height: 380px;
// background: pink;
overflow: auto;
.loading {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
}
// .el-popper { // .el-popper {
// ::v-deep .popper__arrow { // ::v-deep .popper__arrow {
// display: none; // display: none;
...@@ -316,7 +388,7 @@ export default { ...@@ -316,7 +388,7 @@ export default {
</style> </style>
<style lang="scss"> <style lang="scss">
.message-pop { .message-pop {
padding: 40px 28px 12px; padding: 0px !important;
z-index: 10; z-index: 10;
.popper__arrow::after { .popper__arrow::after {
......
...@@ -174,6 +174,35 @@ ...@@ -174,6 +174,35 @@
</div> </div>
</el-dialog> </el-dialog>
</el-dialog> </el-dialog>
<!-- 自动提醒 -->
<el-dialog
custom-class="autoDialog"
:title="''"
:visible.sync="autoFlag"
:close-on-click-modal="true"
:close-on-press-escape="false"
:show-close="true"
width="520px"
>
<div class="innerBody">
<div class="title">驳回修改提醒</div>
<div class="refuteList">
<div
v-for="(item, index) in autoDialogList"
:key="index"
class="rufuteItem"
>
<div class="title">{{ item.title }}病例数据驳回修改</div>
<div class="num">【{{ item.num }}条】</div>
<div class="btn">
<el-button type="warning" @click="goSearch(item.title)"
>去处理</el-button
>
</div>
</div>
</div>
</div>
</el-dialog>
</div> </div>
</template> </template>
...@@ -189,6 +218,7 @@ import { ...@@ -189,6 +218,7 @@ import {
import { mapGetters, mapActions } from "vuex" import { mapGetters, mapActions } from "vuex"
import { tokenName } from "@/config/settings" import { tokenName } from "@/config/settings"
import Media from "./mixin/Media" import Media from "./mixin/Media"
import { getRefuteMessage } from "@/api/user"
export default { export default {
name: "Layout", name: "Layout",
...@@ -204,6 +234,7 @@ export default { ...@@ -204,6 +234,7 @@ export default {
data() { data() {
return { return {
modalFlag: false, modalFlag: false,
autoFlag: false,
innerVisible: false, innerVisible: false,
screeningList: [ screeningList: [
{ {
...@@ -272,6 +303,7 @@ export default { ...@@ -272,6 +303,7 @@ export default {
], ],
}, },
], ],
autoDialogList: [],
} }
}, },
computed: { computed: {
...@@ -289,9 +321,17 @@ export default { ...@@ -289,9 +321,17 @@ export default {
} }
}, },
}, },
watch: {
curSelectedIndex(v) {
this.getRefuteMessage()
},
},
created() { created() {
this.selectedIndex = sessionStorage.getItem("selectedIndex") || "" this.selectedIndex = sessionStorage.getItem("selectedIndex") || ""
this.curSelectedIndex = String(this.selectedIndex) ? this.selectedIndex : "" this.curSelectedIndex = String(this.selectedIndex) ? this.selectedIndex : ""
if (this.curSelectedIndex) {
this.getRefuteMessage()
}
}, },
mounted() { mounted() {
if (!this.selectedIndex) { if (!this.selectedIndex) {
...@@ -304,7 +344,9 @@ export default { ...@@ -304,7 +344,9 @@ export default {
: "" : ""
} }
// console.log(this.curSelectedIndex) // console.log(this.curSelectedIndex)
if (this.curSelectedIndex) {
this.getRefuteMessage()
}
this.$nextTick(() => { this.$nextTick(() => {
window.addEventListener( window.addEventListener(
"storage", "storage",
...@@ -320,6 +362,37 @@ export default { ...@@ -320,6 +362,37 @@ export default {
...mapActions({ ...mapActions({
handleFoldSideBar: "settings/foldSideBar", handleFoldSideBar: "settings/foldSideBar",
}), }),
goSearch(title) {
if (title == "筛查") {
this.$router.push("/screening/index?checkStatus=2")
}
this.autoFlag = false
},
// 获取消息
getRefuteMessage() {
getRefuteMessage(this.curSelectedIndex)
.then((res) => {
if (res.code == 1) {
this.autoDialogList = []
if (res.data.筛查) {
this.autoDialogList.push({
title: "筛查",
num: res.data.筛查 || 0,
})
}
if (res.data.随访) {
this.autoDialogList.push({
title: "随访",
num: res.data.随访 || 0,
})
}
if (this.autoDialogList.length > 0) {
this.autoFlag = true
}
}
})
.catch()
},
setSelectedIndex() { setSelectedIndex() {
console.log(this.selectedIndex) console.log(this.selectedIndex)
this.curSelectedIndex = this.selectedIndex this.curSelectedIndex = this.selectedIndex
...@@ -475,6 +548,10 @@ export default { ...@@ -475,6 +548,10 @@ export default {
::v-deep .homeDialog .el-dialog__header { ::v-deep .homeDialog .el-dialog__header {
display: none; display: none;
} }
::v-deep .autoDialog .el-dialog__header {
// display: none;
padding: 0px;
}
.modalContent { .modalContent {
padding: 60px; padding: 60px;
.title { .title {
...@@ -604,6 +681,38 @@ export default { ...@@ -604,6 +681,38 @@ export default {
} }
} }
} }
.refuteList {
display: flex;
justify-content: space-around;
.rufuteItem {
width: 200px;
height: 148px;
border-radius: 4px;
border: 1px solid #dddddd;
display: flex;
flex-direction: column;
align-items: center;
.title {
font-size: 16px;
margin: 16px 0;
font-family: AlibabaPuHuiTiR;
color: #333333;
}
.num {
font-size: 16px;
font-family: AlibabaPuHuiTiM;
color: #4e68ff;
margin-bottom: 16px;
}
.btn {
.el-button {
width: 100px;
background: #ff7900;
border-radius: 5px;
}
}
}
}
} }
.submit { .submit {
margin-top: 60px; margin-top: 60px;
......
import { getMessage } from "@/api/user"
export default {
data() {
return {
messageCount: 0,
messageList: [],
loading: false,
pageNum: 1,
pageSize: 6,
}
},
methods: {
getMessage() {
this.loading = true
getMessage({
pageSize: this.pageSize,
pageNum: this.pageNum,
patientFrom: this.curSelectedIndex,
}).then((res) => {
if (res.code == 1) {
this.messageCount = res.data.total
this.messageList = [...this.messageList, ...res.data.records]
// console.log(res.data.total)
} else {
this.messageCount = 0
}
this.loading = false
})
},
},
}
...@@ -20,6 +20,7 @@ const state = { ...@@ -20,6 +20,7 @@ const state = {
menuList: [], menuList: [],
group: "", group: "",
feedBackNumber: 0, feedBackNumber: 0,
getMessageFlag: false,
} }
const getters = { const getters = {
accessToken: (state) => state.accessToken, accessToken: (state) => state.accessToken,
...@@ -28,8 +29,12 @@ const getters = { ...@@ -28,8 +29,12 @@ const getters = {
roles: (state) => state.roles, roles: (state) => state.roles,
menuList: (state) => state.menuList, menuList: (state) => state.menuList,
feedBackNumber: (state) => state.feedBackNumber, feedBackNumber: (state) => state.feedBackNumber,
getMessageFlag: (state) => state.getMessageFlag,
} }
const mutations = { const mutations = {
setGetMessageFlag(state, MessageFlag) {
state.getMessageFlag = MessageFlag
},
setAccessToken(state, accessToken) { setAccessToken(state, accessToken) {
state.accessToken = accessToken state.accessToken = accessToken
setAccessToken(accessToken) setAccessToken(accessToken)
......
import * as PDFJS from "pdfjs-dist/build/pdf"
export async function loadPDF({ el, fileSrc, scale }, call) {
PDFJS.GlobalWorkerOptions.workerSrc = require("./pdf.worker.entry.js")
let loadingTask = await PDFJS.getDocument({
url: fileSrc,
withCredentials: true, // 允许携带cookie
})
loadingTask.promise.then((pdf) => {
// 开始加载任务
document.getElementById("pdfEle").innerHTML = ""
const renderPage = (num) => {
let pdfCol = document.querySelector(el)
// 遍历每一页PDF
pdf.getPage(num).then(async (page) => {
let viewPort = page.getViewport({ scale: scale }) // 获取PDF尺寸
let div = document.createElement("div") // 用于存放canvas
div.id = `canvasBox_${num}`
div.className = "canvas-box"
div.style.position = "relative"
div.style.width = viewPort.width + "px"
div.style.margin = "0 auto"
let canvas = document.createElement("canvas") // 创建canvas
let context = canvas.getContext("2d")
// 将canvas的宽和高设置为与PDF视图一样大小
canvas.height = viewPort.height
canvas.width = viewPort.width
// setTimeout(() => {
// // 画页码
// context.font = "14px orbitron";
// context.fillStyle = "#333";
// context.save();
// context.beginPath();
// context.line = 2;
// context.textAlign = "center";
// context.textBaseline = "middle";
// // context.fillText(`${i}`, viewPort.width / 2, viewPort.height - 30);
// context.restore();
// context.closePath();
// }, 500);
let renderContext = {
canvasContext: context,
viewport: viewPort,
}
// 该函数返回一个当PDF页面成功渲染到界面上时解析的`promise`,我们可以使用成功回调来渲染文本图层。
await page.render(renderContext) // 初始化文本图层
canvas.className = "canvas"
canvas.id = `canvas_${num}`
call({
div: div,
pdfCol: pdfCol,
canvas: canvas,
context: context,
scale: scale,
index: num,
allPage: pdf.numPages,
})
div.appendChild(canvas) // 将canvas放进对应的div中
pdfCol.appendChild(div) // 将每一个div放到外面的大盒子中
num++
if (num <= pdf.numPages) {
// console.log(num, pdf.numPages);
renderPage(num)
}
})
}
renderPage(1)
})
}
/* Copyright 2020 Mozilla Foundation
*
* Licensed 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.
*/
(typeof window !== "undefined"
? window
: {}
).pdfjsWorker = require("./pdf.worker.js");
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -10,26 +10,48 @@ ...@@ -10,26 +10,48 @@
{{ item.name }} {{ item.name }}
</li> </li>
</ul> </ul>
<div v-if="!showText" class="right_list"> <div v-if="!showDetail" v-loading="listLoading" class="right_list">
<div class="list_title"> <div class="list_title">
{{ leftBar[activeBar].name }} {{ leftBar[activeBar].name }}
</div> </div>
<ul class="list"> <ul class="list" v-if="tableData.length > 0">
<li v-for="(item, index) in leftBar[activeBar].list" :key="index"> <li v-for="(item, index) in tableData" :key="index">
<div class="leftImg"> <div class="leftImg">
<img src="~@/assets/img/Home/shenghuo.png" alt="" /> <img
:src="
'https://ds.cixincloud.com/geca-api/disease-data/file/info/' +
item.imgPath[0].bucketName +
'/' +
item.imgPath[0].uuidName
"
alt=""
/>
</div> </div>
<div class="rightCon"> <div class="rightCon">
<div class="top"> <div class="top">
<div class="rc_title">{{ item.title }}</div> <div class="rc_title">{{ item.articleTitle }}</div>
<div class="rc_date">{{ item.time }}</div> <div class="rc_date">{{ item.createTime }}</div>
</div> </div>
<div class="bottom" @click="viewDetail(index)">查看</div> <div class="bottom" @click="viewDetail(index)">查看</div>
</div> </div>
</li> </li>
</ul> </ul>
<el-empty v-else description="暂无数据"></el-empty>
<div v-if="pageSize && total > 10" class="pagination-footer">
<!-- <span class="description">{{ description }}</span> -->
<el-pagination
background
:current-page="pageIndex"
:page-sizes="pageSizes"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
></el-pagination>
</div>
</div> </div>
<div v-if="showText" class="right_content"> <div v-if="showDetail" class="right_content">
<div class="breadcum"> <div class="breadcum">
<div <div
v-for="(item, index) in showTitle" v-for="(item, index) in showTitle"
...@@ -45,27 +67,17 @@ ...@@ -45,27 +67,17 @@
</div> </div>
</template> </template>
<script> <script>
import { articleList } from "@/api/operation-management"
import paginationMixin from "@/components/TabComponents/mixin"
export default { export default {
mixins: [paginationMixin],
data() { data() {
return { return {
activeBar: 0, activeBar: 0,
listLoading: false,
leftBar: [ leftBar: [
{ {
name: "筛查", name: "筛查",
list: [
{
id: 1,
title: "筛查数据的科学性",
text: "123",
time: "2022/06-30",
},
{
id: 2,
title: "筛查数据的科学性",
text: "1",
time: "2022/06-30",
},
],
}, },
{ {
name: "生活", name: "生活",
...@@ -79,6 +91,10 @@ export default { ...@@ -79,6 +91,10 @@ export default {
], ],
showText: "", showText: "",
showTitle: [], showTitle: [],
showDetail: false,
// 分页数据
total: 0,
tableData: [],
} }
}, },
mounted() { mounted() {
...@@ -86,21 +102,47 @@ export default { ...@@ -86,21 +102,47 @@ export default {
if (this.$route.query.tabIndex) { if (this.$route.query.tabIndex) {
this.activeBar = this.$route.query.tabIndex this.activeBar = this.$route.query.tabIndex
} }
this.getArticleList()
}, },
methods: { methods: {
// 获取健康科普
getArticleList() {
this.listLoading = true
let params = {
size: this.pageSize,
current: this.pageIndex,
moduleType: "4",
articleType: this.activeBar - 0 + 1,
}
articleList(params)
.then((res) => {
if (res.code == 1) {
this.tableData = [...res.data.records]
this.total = res.data.total - 0
this.listLoading = false
}
})
.catch((e) => {
this.listLoading = false
})
},
changeActive(i) { changeActive(i) {
this.activeBar = i this.activeBar = i
this.showDetail = false
this.showText = "" this.showText = ""
this.getArticleList()
}, },
viewDetail(i) { viewDetail(i) {
this.showText = this.leftBar[this.activeBar].list[i].text this.showDetail = true
this.showText = this.tableData[i].articleContent
this.showTitle[0] = this.leftBar[this.activeBar].name this.showTitle[0] = this.leftBar[this.activeBar].name
this.showTitle[1] = this.leftBar[this.activeBar].list[i].title this.showTitle[1] = this.tableData[i].articleTitle
console.log(this.showText) console.log(this.showText)
}, },
back(index) { back(index) {
if (index == 0) { if (index == 0) {
this.showText = "" this.showText = ""
this.showDetail = false
} }
}, },
}, },
...@@ -125,6 +167,9 @@ export default { ...@@ -125,6 +167,9 @@ export default {
justify-content: center; justify-content: center;
align-items: center; align-items: center;
cursor: pointer; cursor: pointer;
&:hover {
background: rgba(78, 104, 255, 0.04);
}
// background: rgba(78, 104, 255, 0.1); // background: rgba(78, 104, 255, 0.1);
} }
.activeBar { .activeBar {
...@@ -175,6 +220,7 @@ export default { ...@@ -175,6 +220,7 @@ export default {
font-family: Roboto-Regular, Roboto; font-family: Roboto-Regular, Roboto;
font-weight: 400; font-weight: 400;
color: #999999; color: #999999;
margin-top: 8px;
} }
.bottom { .bottom {
cursor: pointer; cursor: pointer;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<template>
<div id="map" ref="areaRankingAll"></div>
</template>
<script>
import * as echarts from "echarts"
import china from "./china.json"
import allCode from "./allCode.json"
export default {
data() {
return {
//线上请求JSON文件数据地址
// publicUrl: "https://geo.datav.aliyun.com/areas_v3/bound/",
//allCode 区域行政编码信息
allCode: allCode,
locate: [
{
name: "安徽",
value: [117.29, 32.0581, 50],
},
],
}
},
watch: {},
mounted() {
this.initChart() //初始化地图
},
methods: {
initEcharts(geoJson, name, chart) {
// console.log(JSON.stringify(geoJson))
let self = this
echarts.registerMap(name, geoJson)
let option = {
title: {
text: "", // 地图名称
},
tooltip: {
show: true,
formatter: function (params) {
if (params.value.length > 1) {
return params.name + "" + params.value[2] + ""
}
return `${params.name}${params.value ? params.value : 0}人`
},
textStyle: { fontSize: 14, fontFamily: "fzzz", color: "#fff" },
backgroundColor: "rgba(0,0,0,0.3)",
borderColor: "rgba(0,0,0,0.3)",
},
geo: {
show: true,
map: name,
roam: true,
zoom: 1.5,
center: [105, 34.0267395887],
label: {
emphasis: {
show: false,
},
},
itemStyle: {
normal: {
areaColor: "#EDEFFF",
borderColor: "#7597FA",
borderWidth: 1,
},
emphasis: {
areaColor: "#4E68FF", //悬浮背景
},
},
},
series: [
//小点
{
//文字和标志
name: "light",
type: "scatter",
coordinateSystem: "geo",
data: this.locate,
symbolSize: function (val) {
return val[2] / 8
},
label: {
normal: {
// formatter: "{b}",
formatter: "",
position: "right",
show: true,
},
emphasis: {
show: true,
},
},
itemStyle: {
normal: {
color: "#FFCF4E",
},
},
},
{
type: "map",
map: "china",
geoIndex: 0,
aspectScale: 0.75, //长宽比
showLegendSymbol: false, // 存在legend时显示
label: {
normal: {
show: false,
},
emphasis: {
show: false,
textStyle: {
color: "#fff",
},
},
},
roam: true,
itemStyle: {
normal: {
areaColor: "#031525",
borderColor: "#FFFFFF",
},
emphasis: {
areaColor: "#2B91B7",
},
},
animation: false,
data: [{ name: "安徽省", value: 50 }],
},
],
}
chart.setOption(option, true) //加个true解决下钻的视角偏移
chart.off("click")
},
//带头函数-初始化
initChart() {
let chart = echarts.init(this.$refs.areaRankingAll)
this.initEcharts(china, "中国", chart)
},
},
}
</script>
<style lang="scss" scoped></style>
<template>
<div>
<el-dialog
custom-class="pdfDialog"
:title="''"
:visible.sync="showPdf"
:close-on-click-modal="true"
:close-on-press-escape="false"
:show-close="true"
width="70%"
:destroy-on-close="true"
top="10vh"
>
<div class="innerBody">
<div class="title">{{ curPdf.articleTitle }}</div>
<div class="refuteList">
<!-- <pdf :src="pdfSrc"></pdf> -->
<pdf-view ref="pdfView" :pdf-src="pdfSrc"></pdf-view>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import PdfView from "../PdfView/index"
export default {
components: { PdfView },
props: {
curPdf: {
type: Object,
},
pdfSrc: String,
},
data() {
return {
showPdf: false,
}
},
watch: {
showPdf(v) {
if (v) {
setTimeout(() => {
this.$refs.pdfView.loadPDF()
}, 250)
}
},
},
}
</script>
<style lang="scss" scoped>
.innerBody {
padding: 0 60px 40px;
.title {
font-size: 24px;
font-family: AlibabaPuHuiTiM;
color: #333333;
text-align: center;
margin-bottom: 30px;
}
.refuteList {
height: 600px;
overflow: auto;
}
}
</style>
<style lang="scss">
.pdfDialog .el-dialog__header {
// display: none;
padding: 0px !important;
}
</style>
<template>
<div id="editor">
<div v-loading="loadingPdf" class="pdfEle_wrap">
<div id="pdfEle"></div>
</div>
<!-- 页码 -->
<div class="pdf-render-pager">
<div class="prev-next" @click="goPrevPdf">
<i class="el-icon-arrow-left"></i>
</div>
<input
v-model="curPage"
type="text"
title="输入页码后按enter即可跳至目标页"
style="border: 1px solid #ccc; position: relative; z-index: 9999"
@keyup.enter="handleChangePage"
/>
<div class="middle">/</div>
<div class="totalPage">{{ totalPage }}</div>
<div class="prev-next" @click="goNextPdf">
<i class="el-icon-arrow-right"></i>
</div>
</div>
</div>
</template>
<script>
import { loadPDF } from "@/utils/loadPdf.js"
export default {
props: {
pdfSrc: String,
},
data() {
return {
totalPage: 1,
curPage: 1,
loadingPdf: false,
canvasH: 0,
scrollEle: "", //元素画布
clickFlag: true, //左右跳转
timeout: null,
}
},
mounted() {},
methods: {
loadPDF() {
document.getElementById("pdfEle").innerHTML = ""
this.canvasH = 0 //高度初始化为0 以此控制分页不显示
this.curPage = 1 //页码重置为1
this.loadingPdf = true
if (process.env.NODE_ENV == "development") {
loadPDF(
// 特约讲师合作协议
{ el: "#pdfEle", fileSrc: "/ppt的pdf.pdf", scale: 1 },
this.callBackPdf
)
} else {
loadPDF(
{ el: "#pdfEle", fileSrc: this.pdfSrc, scale: 1 },
this.callBackPdf
)
}
},
// 加载完成的回调 分页加载
callBackPdf(item) {
const { index, allPage } = item
if (index !== allPage) {
return
}
// console.log(allPage);
this.totalPage = item.allPage
this.scrollEle = document.querySelector(".pdfEle_wrap")
// this.canvasH = item.canvas.height;
setTimeout(() => {
this.canvasH = item.div.offsetHeight
}, 100)
this.scrollEle.addEventListener("scroll", (e) => {
if (this.timeout != null) {
clearTimeout(this.timeout)
}
this.timeout = setTimeout(() => {
if (Math.floor(this.scrollEle.scrollTop / this.canvasH) == 0) {
this.curPage = 1
}
if (
Math.floor(this.scrollEle.scrollTop / this.canvasH) > 0 &&
Math.floor(this.scrollEle.scrollTop / this.canvasH) + 1 !=
this.curPage
) {
this.curPage =
Math.floor(this.scrollEle.scrollTop / this.canvasH) + 1
}
}, 100)
// this.curPage = Math.floor(this.scrollEle.scrollTop / this.canvasH) <= 0? 1: Math.floor(this.scrollEle.scrollTop / this.canvasH);
})
this.loadingPdf = false
},
goPrevPdf() {
// 限制一下多次点击
if (!this.clickFlag) {
return false
}
this.clickFlag = false
if (this.curPage > 1) {
// --this.curPage;
this.scrollPdfPage(parseInt(this.curPage) - 1)
--this.curPage
}
setTimeout(() => {
this.clickFlag = true
}, 500)
},
goNextPdf() {
// 限制一下多次点击
if (!this.clickFlag) {
return false
}
this.clickFlag = false
if (this.curPage < this.totalPage) {
// ++this.curPage;
this.scrollPdfPage(parseInt(this.curPage) + 1)
++this.curPage
}
setTimeout(() => {
this.clickFlag = true
}, 500)
},
handleChangePage(e) {
if (!/^\d+$/.test(e.target.value)) {
this.curPage = 1
} else {
// this.curPage = parseInt(e.target.value) > 0 ? parseInt(e.target.value) : 1;
if (parseInt(e.target.value) <= 0) {
this.curPage = 1
} else if (parseInt(e.target.value) > this.totalPage) {
this.curPage = this.totalPage
} else {
this.curPage = parseInt(e.target.value)
}
}
this.scrollPdfPage(this.curPage)
},
// pdf滚动
scrollPdfPage(page) {
console.log(this.scrollEle)
this.scrollEle.scrollTo({
top: this.canvasH * (page - 1),
behavior: "smooth",
})
},
},
}
</script>
<style lang="scss" scoped>
#editor {
height: 600px;
}
.pdf-render-pager {
width: 100%;
color: #333;
font-size: 12px;
height: 50px;
padding: 0 15px;
display: flex;
justify-content: center;
align-items: center;
position: absolute;
// box-shadow: 0 -1px 0px 0 rgba(149, 149, 149, 0.25);
bottom: 0px;
left: 0;
z-index: 9999;
input {
width: 26px;
border: none;
border-bottom: 1px solid #e4e4e4;
text-align: center;
font-size: 14px;
}
}
.pdfEle_wrap {
width: 100%;
height: 600px;
padding: 20px 0;
min-height: 50px;
overflow-y: scroll;
overflow-x: hidden;
// text-align:center;
position: relative;
transition: all 0.3s;
background: #e4e4e4;
#pdfEle {
height: 600px;
}
}
.prev-next {
cursor: pointer;
width: 20px;
height: 20px;
font-size: 18px;
display: flex;
justify-content: center;
align-items: center;
}
.middle {
margin: 0 8px;
}
</style>
...@@ -10,45 +10,64 @@ ...@@ -10,45 +10,64 @@
{{ item.name }} {{ item.name }}
</li> </li>
</ul> </ul>
<div class="right_list"> <div v-loading="listLoading" class="right_list">
<div class="list_title"> <div class="list_title">
{{ leftBar[activeBar].name }} {{ leftBar[activeBar].name }}
</div> </div>
<ul class="list"> <ul v-if="tableData.length > 0" class="list">
<li v-for="(item, index) in leftBar[activeBar].list" :key="index"> <li
v-for="(item, index) in tableData"
:key="index"
title="点击预览pdf"
@click="setPdf(item)"
>
<div class="left_text"> <div class="left_text">
<div class="circle"></div> <div class="circle"></div>
<div class="title">{{ item.title }}</div> <div class="title">{{ item.articleTitle }}</div>
</div> </div>
<div class="rig_date"> <div class="rig_date">
{{ item.time }} {{ item.createTime }}
</div> </div>
</li> </li>
</ul> </ul>
<el-empty v-else description="暂无数据"></el-empty>
<div v-if="pageSize && total > 10" class="pagination-footer">
<!-- <span class="description">{{ description }}</span> -->
<el-pagination
background
:current-page="pageIndex"
:page-sizes="pageSizes"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
></el-pagination>
</div>
</div> </div>
<!-- 弹窗 -->
<pdf-dialog
ref="pdfDialog"
:cur-pdf="curPdf"
:pdf-src="pdfSrc"
></pdf-dialog>
</div> </div>
</template> </template>
<script> <script>
import { articleList } from "@/api/operation-management"
import paginationMixin from "@/components/TabComponents/mixin"
import PdfDialog from "../PdfDialog/index.vue"
export default { export default {
components: { PdfDialog },
mixins: [paginationMixin],
data() { data() {
return { return {
activeBar: 0, activeBar: 0,
listLoading: false,
leftBar: [ leftBar: [
{ {
name: "筛查技术方案", name: "筛查技术方案",
list: [
{
title: "筛查数据的科学性",
text: "",
time: "2022/06-30",
},
{
title: "筛查数据的科学性",
text: "",
time: "2022/06-30",
},
],
}, },
{ {
name: "筛查指南", name: "筛查指南",
...@@ -60,19 +79,53 @@ export default { ...@@ -60,19 +79,53 @@ export default {
name: "项目进展与成果", name: "项目进展与成果",
}, },
], ],
tableData: [],
curPdf: { articleTitle: "测试pdf" },
pdfSrc: "",
} }
}, },
watch: {},
mounted() { mounted() {
if (this.$route.query.tabIndex) { if (this.$route.query.tabIndex) {
this.activeBar = this.$route.query.tabIndex this.activeBar = this.$route.query.tabIndex
} }
this.getArticleList()
}, },
methods: { methods: {
changeActive(i) { changeActive(i) {
this.activeBar = i this.activeBar = i
this.getArticleList()
// this.$router.replace("/scientificresearch") // this.$router.replace("/scientificresearch")
}, },
// 获取科学研究
getArticleList() {
this.listLoading = true
let params = {
size: this.pageSize,
current: this.pageIndex,
moduleType: "5",
articleType: this.activeBar - 0 + 1,
}
articleList(params)
.then((res) => {
if (res.code == 1) {
this.tableData = [...res.data.records]
this.total = res.data.total
this.listLoading = false
}
})
.catch((e) => {
this.listLoading = false
})
},
setPdf(item) {
this.$refs.pdfDialog.showPdf = true
this.curPdf = item
this.pdfSrc =
"https://ds.cixincloud.com/geca-api/disease-data/file/info/" +
item.filePath[0].bucketName +
"/" +
item.filePath[0].uuidName
},
}, },
} }
</script> </script>
...@@ -95,6 +148,9 @@ export default { ...@@ -95,6 +148,9 @@ export default {
justify-content: center; justify-content: center;
align-items: center; align-items: center;
cursor: pointer; cursor: pointer;
&:hover {
background: rgba(78, 104, 255, 0.04);
}
// background: rgba(78, 104, 255, 0.1); // background: rgba(78, 104, 255, 0.1);
} }
.activeBar { .activeBar {
...@@ -127,9 +183,16 @@ export default { ...@@ -127,9 +183,16 @@ export default {
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
cursor: pointer; cursor: pointer;
&:hover {
background: rgba(78, 104, 255, 0.04);
.left_text .title {
color: #4e68ff;
}
}
.left_text { .left_text {
display: flex; display: flex;
align-items: center; align-items: center;
.circle { .circle {
width: 6px; width: 6px;
height: 6px; height: 6px;
......
...@@ -14,7 +14,11 @@ ...@@ -14,7 +14,11 @@
:name="index + 1 + ''" :name="index + 1 + ''"
> >
<ul class="tabslist"> <ul class="tabslist">
<li v-for="(item, index) in noticeList" :key="index"> <li
v-for="(item, index) in noticeList"
:key="index"
@click="setPdf(item)"
>
<div class="left"> <div class="left">
<div class="circle"></div> <div class="circle"></div>
{{ item.articleTitle }} {{ item.articleTitle }}
...@@ -33,7 +37,8 @@ ...@@ -33,7 +37,8 @@
<div class="flex"> <div class="flex">
<div class="left box cenbox"> <div class="left box cenbox">
<div class="box_title text-center">联盟地图</div> <div class="box_title text-center">联盟地图</div>
<img class="map" src="~@/assets/img/Home/map.png" alt="" /> <!-- <img class="map" src="~@/assets/img/Home/map.png" alt="" /> -->
<Map></Map>
</div> </div>
<div class="right box tabbox" style="height: 458px"> <div class="right box tabbox" style="height: 458px">
<el-tabs v-model="exTab"> <el-tabs v-model="exTab">
...@@ -188,14 +193,25 @@ ...@@ -188,14 +193,25 @@
</el-popover> </el-popover>
</ul> </ul>
</div> </div>
<!-- 弹窗 -->
<pdf-dialog
ref="pdfDialog"
:cur-pdf="curPdf"
:pdf-src="pdfSrc"
></pdf-dialog>
</div> </div>
</template> </template>
<script> <script>
import { getRankTotal, getCurrentQuarter } from "@/api/Home" import { getRankTotal, getCurrentQuarter } from "@/api/Home"
import { articleList } from "@/api/operation-management" import { articleList } from "@/api/operation-management"
import Map from "./Map"
import PdfDialog from "./PdfDialog/index.vue"
export default { export default {
components: { Map, PdfDialog },
data() { data() {
return { return {
curPdf: {},
pdfSrc: "",
fixIndex: -1, fixIndex: -1,
// videoSrc: require("../../../public/aaa.mp4"), // videoSrc: require("../../../public/aaa.mp4"),
videoSrc: "", videoSrc: "",
...@@ -205,48 +221,7 @@ export default { ...@@ -205,48 +221,7 @@ export default {
title: "浙江省典型案例", title: "浙江省典型案例",
}, },
], ],
exampleList: [ exampleList: [],
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
],
tabList: [ tabList: [
{ {
title: "新闻会议", title: "新闻会议",
...@@ -258,48 +233,7 @@ export default { ...@@ -258,48 +233,7 @@ export default {
title: "学术动态", title: "学术动态",
}, },
], ],
noticeList: [ noticeList: [],
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
{
title: "典型案例小标题典型案例小标题",
date: "2022-09-26",
},
],
curTab: "1", curTab: "1",
listLoading: false, listLoading: false,
rangeList: [], // 上报排名 rangeList: [], // 上报排名
...@@ -369,6 +303,15 @@ export default { ...@@ -369,6 +303,15 @@ export default {
}) })
}, },
methods: { methods: {
setPdf(item) {
this.$refs.pdfDialog.showPdf = true
this.curPdf = item
this.pdfSrc =
"https://ds.cixincloud.com/geca-api/disease-data/file/info/" +
item.filePath[0].bucketName +
"/" +
item.filePath[0].uuidName
},
handleClick() { handleClick() {
this.getArticleList(this.curTab) this.getArticleList(this.curTab)
}, },
...@@ -508,7 +451,7 @@ export default { ...@@ -508,7 +451,7 @@ export default {
} }
.cenbox { .cenbox {
height: 458px; height: 458px;
.map { #map {
width: 100%; width: 100%;
height: 422px; height: 422px;
object-fit: contain; object-fit: contain;
......
...@@ -86,6 +86,11 @@ export default { ...@@ -86,6 +86,11 @@ export default {
patientId(v) { patientId(v) {
this.getCurrentFormByType() this.getCurrentFormByType()
}, },
noData(v) {
if (v) {
this.jsonList = []
}
},
}, },
created() {}, created() {},
mounted() {}, mounted() {},
......
...@@ -5,7 +5,9 @@ ...@@ -5,7 +5,9 @@
<div class="left"> <div class="left">
<span v-if="!isEmpty">当前审核</span> <span v-if="!isEmpty">当前审核</span>
<span v-if="!isEmpty" class="f-b" <span v-if="!isEmpty" class="f-b"
>{{ curUnion }}】【剩余{{ auditNum }}</span >{{ curUnion }}<span v-if="!editStatus"
>【剩余{{ auditNum }}</span
></span
> >
</div> </div>
<div class="right"> <div class="right">
...@@ -32,28 +34,42 @@ ...@@ -32,28 +34,42 @@
@click="showDialog(item.value)" @click="showDialog(item.value)"
>{{ item.text }}</el-button >{{ item.text }}</el-button
> >
<span v-if="editStatus" class="op">驳回修改建议:胃镜图片不合规</span> <span v-if="editStatus" class="op"
>{{
checkStatus == "2"
? "驳回修改建议 : "
: checkStatus == "4"
? "不合格原因 : "
: ""
}}
{{ checkStatus == "3" ? "" : checkNote }}</span
>
</div> </div>
</div> </div>
<div class="p-24 empty"></div> <div class="p-24 empty"></div>
<!-- 编辑提交前弹窗 -->
<public-dialog ref="editDialog" @onSubmit="onSubmit" @onCancel="onCancel"> <public-dialog ref="editDialog" @onSubmit="onSubmit" @onCancel="onCancel">
<!-- 修改审核结果 优先触发提示 --> <!-- 修改审核结果 优先触发提示 -->
<template v-if="!confirmStatus" slot="content"> <template v-if="!confirmStatus" slot="content">
<div class="title">温馨提示</div> <div class="title">温馨提示</div>
<div class="content"> <div class="content">
<div class="showTips"> <div class="showTips">
该病例已经审核【驳回修改】,需要改为{{ 该病例已经审核【{{
checkStatus == 2
? "驳回修改"
: checkStatus == 3
? "合格"
: checkStatus == 4
? "不合格"
: ""
}}】,需要改为{{
btnGroup[curBtn - 1] ? btnGroup[curBtn - 1].text : "" btnGroup[curBtn - 1] ? btnGroup[curBtn - 1].text : ""
}} }}
</div> </div>
</div> </div>
<div class="btn"> <div class="btn">
<el-button type="primary" :loading="loading" @click="onCancel" <el-button type="primary" @click="onCancel"></el-button>
></el-button <el-button type="primary" @click="editSubmit"></el-button>
>
<el-button type="primary" :loading="loading" @click="editSubmit"
></el-button
>
</div> </div>
</template> </template>
</public-dialog> </public-dialog>
...@@ -91,11 +107,12 @@ ...@@ -91,11 +107,12 @@
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<!-- 标签部分 -->
<div class="labelPlace"> <div class="labelPlace">
<div class="labelList"> <div class="labelList">
<template v-for="(item, index) in reasonList"> <template v-for="(item, index) in reasonList">
<div <div
v-if="item.note ? item.note.length < 8 : false" v-if="item.note ? item.note.length <= 8 : false"
:key="index" :key="index"
:class="[ :class="[
'listItem', 'listItem',
...@@ -106,12 +123,12 @@ ...@@ -106,12 +123,12 @@
<!-- selectedReason.includes(item) ? 'active' : '', --> <!-- selectedReason.includes(item) ? 'active' : '', -->
{{ item.note }} {{ item.note }}
</div> </div>
<template v-if="item.note ? item.note.length >= 8 : false"> <template v-if="item.note ? item.note.length > 8 : false">
<el-tooltip <el-tooltip
:key="index" :key="index"
class="item" class="item"
effect="dark" effect="dark"
:content="item" :content="item.note"
placement="top" placement="top"
> >
<div <div
...@@ -135,11 +152,16 @@ ...@@ -135,11 +152,16 @@
</div> </div>
</div> </div>
<div class="btn"> <div class="btn">
<el-button type="primary" :loading="loading" @click="onSubmit" <el-button type="primary" :loading="loading" @click="onSubmit">{{
>确认并进入下一列审核</el-button editStatus
> ? curBtn == 1
? "好的"
: "提交"
: "确认并进入下一例审核"
}}</el-button>
</div> </div>
</template> </template>
<!-- 标签的弹窗 -->
<template v-if="!confirmStatus && editLabelFlag" slot="content"> <template v-if="!confirmStatus && editLabelFlag" slot="content">
<div class="left-back" @click="editLabelFlag = false"> <div class="left-back" @click="editLabelFlag = false">
<i class="el-icon-back"></i> <i class="el-icon-back"></i>
...@@ -181,7 +203,7 @@ ...@@ -181,7 +203,7 @@
> >
</div> </div>
</template> </template>
<!-- 提交后结果 --> <!-- 提交后合格结果 -->
<template v-if="confirmStatus" slot="content"> <template v-if="confirmStatus" slot="content">
<div class="title">{{ btnGroup[curBtn - 1].text }}</div> <div class="title">{{ btnGroup[curBtn - 1].text }}</div>
<div class="content"> <div class="content">
...@@ -198,9 +220,13 @@ ...@@ -198,9 +220,13 @@
该病例审核{{ curBtn == 2 ? "不合格原因" : "驳回修改建议" }}提交成功! 该病例审核{{ curBtn == 2 ? "不合格原因" : "驳回修改建议" }}提交成功!
</div> </div>
<div class="btn"> <div class="btn">
<el-button type="primary" @click="nextExample" <el-button type="primary" :loading="loading" @click="nextExample">{{
>确认并进入下一列审核</el-button editStatus
> ? curBtn == 1
? "好的"
: "提交"
: "确认并进入下一例审核"
}}</el-button>
</div> </div>
</template> </template>
</public-dialog> </public-dialog>
...@@ -212,6 +238,7 @@ import screenReview from "./components/screenReview.vue" ...@@ -212,6 +238,7 @@ import screenReview from "./components/screenReview.vue"
import { import {
getScreeningUser, getScreeningUser,
putScreeningCheck, putScreeningCheck,
putScreeningCheckAdvice,
saveSysCheckNote, saveSysCheckNote,
getSysCheckNote, getSysCheckNote,
} from "@/api/screeningAudit" } from "@/api/screeningAudit"
...@@ -227,6 +254,8 @@ export default { ...@@ -227,6 +254,8 @@ export default {
reason: "", reason: "",
}, },
patientId: "", // 当前人的patientId patientId: "", // 当前人的patientId
checkNote: "",
checkStatus: "", // 传入的checkstatus
curUnion: "", // 当前医联体 curUnion: "", // 当前医联体
id: "", id: "",
rules: { rules: {
...@@ -260,11 +289,21 @@ export default { ...@@ -260,11 +289,21 @@ export default {
}, },
}, },
watch: {}, watch: {},
created() { created() {},
let id = this.$route.query.id
this.getUser(id)
},
mounted() { mounted() {
let unionId = this.$route.query.unionId
let patientId = this.$route.query.patientId
if (unionId && !patientId) {
this.editStatus = false
this.getUser(unionId)
} else if (patientId) {
this.editStatus = true
this.patientId = patientId
this.id = this.$route.query.id
this.checkNote = this.$route.query.checkNote
this.checkStatus = this.$route.query.checkStatus
this.curUnion = this.$route.query.unionName
}
// this.$refs.publicDialog.dialogVisible = true // this.$refs.publicDialog.dialogVisible = true
}, },
methods: { methods: {
...@@ -294,13 +333,43 @@ export default { ...@@ -294,13 +333,43 @@ export default {
checkNote: this.form.reason, checkNote: this.form.reason,
patientId: this.patientId, patientId: this.patientId,
} }
putScreeningCheck(params).then((res) => { putScreeningCheck(params)
if (res.code == 1 && res.data) { .then((res) => {
func() if (res.code == 1 && res.data) {
// this.confirmStatus = true func()
this.$refs.publicDialog.dialogVisible = true // this.confirmStatus = true
} this.$refs.publicDialog.dialogVisible = true
}) } else {
this.loading = false
}
})
.catch(() => {
this.loading = false
})
},
//! 修改审核结果
putScreeningCheckAdvice(checkStatus, func) {
let params = {
id: this.id,
checkStatus: checkStatus,
checkNote: this.form.reason,
patientId: this.patientId,
}
putScreeningCheckAdvice(params)
.then((res) => {
if (res.code == 1 && res.data) {
this.loading = false
this.checkStatus = checkStatus
this.checkNote = this.form.reason
func()
} else {
this.loading = false
this.$refs.publicDialog.dialogVisible = false
}
})
.catch(() => {
this.loading = false
})
}, },
// 设置理由 // 设置理由
setReason({ note }) { setReason({ note }) {
...@@ -324,6 +393,7 @@ export default { ...@@ -324,6 +393,7 @@ export default {
this.isEmpty = false this.isEmpty = false
} else { } else {
this.isEmpty = true this.isEmpty = true
this.$forceUpdate()
} }
}) })
.finally(() => { .finally(() => {
...@@ -332,37 +402,39 @@ export default { ...@@ -332,37 +402,39 @@ export default {
} }
}) })
}, },
//! checkStatus 合格-3 不合格-4 驳回修改-2 待审核-1 //! 合格提交 checkStatus 合格-3 不合格-4 驳回修改-2 待审核-1
showDialog(val) { showDialog(val) {
this.curBtn = val this.curBtn = val
if (val == 1) { if (this.editStatus) {
this.$confirm("确定要提交审核吗?", "警告", { //! 精准编辑
type: "warning", this.$refs.editDialog.dialogVisible = true
})
.then(() => {
if (!this.editStatus) {
if (this.curBtn == 1) {
// 走接口,保存合格
this.putScreeningCheck("3", () => {
this.confirmStatus = true
})
}
} else {
this.$refs.editDialog.dialogVisible = true
}
})
.catch(() => {})
} else { } else {
this.getSysCheckNote() //! 医联体的审核
if (!this.editStatus) { if (val == 1) {
this.$confirm("确定要提交审核吗?", "警告", {
type: "warning",
})
.then(() => {
if (!this.editStatus) {
if (this.curBtn == 1) {
// 走接口,保存合格
this.putScreeningCheck("3", () => {
this.confirmStatus = true
})
}
} else {
this.$refs.editDialog.dialogVisible = true
}
})
.catch(() => {})
} else {
this.getSysCheckNote()
if (this.curBtn == 2) { if (this.curBtn == 2) {
this.rules.reason[0].message = "请输入不合格原因" this.rules.reason[0].message = "请输入不合格原因"
} else { } else {
this.rules.reason[0].message = "请输入驳回修改建议" this.rules.reason[0].message = "请输入驳回修改建议"
} }
this.$refs.publicDialog.dialogVisible = true this.$refs.publicDialog.dialogVisible = true
} else {
this.$refs.editDialog.dialogVisible = true
} }
} }
}, },
...@@ -373,10 +445,18 @@ export default { ...@@ -373,10 +445,18 @@ export default {
if (this.curBtn != 1) { if (this.curBtn != 1) {
this.$refs.form.validate((valid) => { this.$refs.form.validate((valid) => {
if (valid) { if (valid) {
this.putScreeningCheck("4", () => { let status = this.curBtn == 2 ? "4" : this.curBtn == 3 ? "2" : ""
this.$message.success("提交审核成功") if (this.editStatus) {
this.nextExample() this.putScreeningCheckAdvice(status, () => {
}) this.$message.success("提交审核成功")
this.onCancel()
})
} else {
this.putScreeningCheck(status, () => {
this.$message.success("提交审核成功")
this.nextExample()
})
}
} else { } else {
console.log("error submit!!") console.log("error submit!!")
this.loading = false this.loading = false
...@@ -390,6 +470,7 @@ export default { ...@@ -390,6 +470,7 @@ export default {
onCancel() { onCancel() {
this.confirmStatus = false this.confirmStatus = false
this.editLabelFlag = false this.editLabelFlag = false
this.selectedReason = []
if (this.curBtn != 1) { if (this.curBtn != 1) {
this.form = { reason: "" } this.form = { reason: "" }
} }
...@@ -399,23 +480,41 @@ export default { ...@@ -399,23 +480,41 @@ export default {
this.$refs.form.clearValidate() this.$refs.form.clearValidate()
} }
}, },
// 修改提交
editSubmit() { editSubmit() {
// this.$refs.editDialog.dialogVisible = false // this.$refs.editDialog.dialogVisible = false
if (this.curBtn == 1) { if (this.curBtn == 1) {
// 走接口,保存合格 // 走接口,保存合格
this.confirmStatus = true if (this.editStatus) {
} else if (this.curBtn == 2) { // 走接口,保存合格
this.rules.reason[0].message = "请输入不合格原因" this.putScreeningCheckAdvice("3", () => {
this.confirmStatus = true
this.$refs.publicDialog.dialogVisible = true
this.selectedReason = []
})
}
} else { } else {
this.rules.reason[0].message = "请输入驳回修改建议" this.getSysCheckNote()
if (this.curBtn == 2) {
this.rules.reason[0].message = "请输入不合格原因"
} else {
this.rules.reason[0].message = "请输入驳回修改建议"
}
this.$refs.publicDialog.dialogVisible = true
} }
this.$refs.publicDialog.dialogVisible = true
}, },
nextExample() { nextExample() {
this.getUser(this.$route.query.id, () => { // !
this.$store.commit("user/setGetMessageFlag", true)
if (this.editStatus) {
this.loading = false this.loading = false
this.onCancel() this.onCancel()
}) } else {
this.getUser(this.$route.query.unionId, () => {
this.loading = false
this.onCancel()
})
}
}, },
deleteLabel(i) { deleteLabel(i) {
this.$confirm("确定要删除该标签吗?", "警告", { this.$confirm("确定要删除该标签吗?", "警告", {
...@@ -476,10 +575,13 @@ export default { ...@@ -476,10 +575,13 @@ export default {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.right { .right {
display: flex;
align-items: center;
.btn { .btn {
width: 80px; width: 80px;
height: 32px; height: 32px;
border-radius: 4px; border-radius: 4px;
margin-top: 0px;
} }
} }
} }
...@@ -521,7 +623,7 @@ export default { ...@@ -521,7 +623,7 @@ export default {
.btn { .btn {
margin-top: 20px; margin-top: 20px;
.el-button { .el-button {
// width: 100px; min-width: 100px;
border-radius: 5px; border-radius: 5px;
height: 32px; height: 32px;
} }
......
...@@ -64,21 +64,21 @@ export default { ...@@ -64,21 +64,21 @@ export default {
watch: { watch: {
auditStatus(val) { auditStatus(val) {
sessionStorage.setItem("audit-status", val) sessionStorage.setItem("audit-status", val)
switch (this.type) { // switch (this.type) {
case "1": // case "1":
this.handleSearch() // this.handleSearch()
break // break
} // }
console.log("status", val) console.log("status", val)
}, },
type(val) { type(val) {
console.log("type", val) console.log("type", val)
sessionStorage.setItem("audit-type", val) sessionStorage.setItem("audit-type", val)
switch (val) { // switch (val) {
case "1": // case "1":
this.handleSearch() // this.handleSearch()
break // break
} // }
}, },
}, },
computed: { computed: {
...@@ -160,7 +160,7 @@ export default { ...@@ -160,7 +160,7 @@ export default {
text = "合格" text = "合格"
} else if (row.checkStatus == 4) { } else if (row.checkStatus == 4) {
text = "不合格" text = "不合格"
} else if (row.checkStatus == 5) { } else if (row.checkStatus == 2) {
text = "驳回修改" text = "驳回修改"
} else if (row.checkStatus) { } else if (row.checkStatus) {
text = "--" text = "--"
...@@ -198,7 +198,8 @@ export default { ...@@ -198,7 +198,8 @@ export default {
this.auditStatus = sessionStorage.getItem("audit-status") || "0" this.auditStatus = sessionStorage.getItem("audit-status") || "0"
this.type = sessionStorage.getItem("audit-type") || "0" this.type = sessionStorage.getItem("audit-type") || "0"
} }
this.handleSearch() // this.handleSearch()
this.handleClick()
}, },
methods: { methods: {
handleClick() { handleClick() {
...@@ -220,12 +221,31 @@ export default { ...@@ -220,12 +221,31 @@ export default {
}, },
}) })
} else { } else {
this.$router.push({ switch (this.auditStatus) {
path: "/auditdetail", case "0":
query: { this.$router.push({
id: data["unionId"], path: "/auditdetail",
}, query: {
}) unionId: data["unionId"],
},
})
break
case "1":
this.$router.push({
path: "/auditdetail",
query: {
id: data["id"],
patientId: data["patientId"],
checkNote: data["checkNote"],
checkStatus: data["checkStatus"],
unionName: data["unionName"],
},
})
break
default:
break
}
} }
}, },
async handleSearch() { async handleSearch() {
......
...@@ -4,14 +4,19 @@ ...@@ -4,14 +4,19 @@
<div class="audit-detail_header p-24"> <div class="audit-detail_header p-24">
<div class="left"> <div class="left">
<span>当前审核</span> <span>当前审核</span>
<span class="f-b">{{ unionName }}】【剩余{{ mcCount }}</span> <span class="f-b"
>{{ medicalCombination }}】【剩余{{ mcCount }}</span
>
</div> </div>
<div class="right"> <div class="right">
<el-button class="btn" @click="$router.go(-1)">返回</el-button> <el-button class="btn" @click="$router.go(-1)">返回</el-button>
</div> </div>
</div> </div>
<div class="table-content p-24"> <div class="table-content p-24">
<follow-review :formDataList="formEdit" :tabActive="tabActive"></follow-review> <follow-review
:formDataList="formEdit"
:tabActive="tabActive"
></follow-review>
</div> </div>
<div class="choose-handle p-24"> <div class="choose-handle p-24">
<span v-if="!editStatus">请选择审核结果:</span> <span v-if="!editStatus">请选择审核结果:</span>
...@@ -22,8 +27,9 @@ ...@@ -22,8 +27,9 @@
type="primary" type="primary"
class="p-btn" class="p-btn"
size="medium" size="medium"
@click="showDialog(item.value, index)" @click="showDialog(item.value)"
>{{ item.text }}</el-button> >{{ item.text }}</el-button
>
<span v-if="editStatus" class="op">驳回修改建议:胃镜图片不合规</span> <span v-if="editStatus" class="op">驳回修改建议:胃镜图片不合规</span>
</div> </div>
</div> </div>
...@@ -34,21 +40,27 @@ ...@@ -34,21 +40,27 @@
<div class="content"> <div class="content">
<div class="showTips"> <div class="showTips">
该病例已经审核【驳回修改】,需要改为{{ 该病例已经审核【驳回修改】,需要改为{{
btnGroup[curBtn - 1] ? btnGroup[curBtn - 1].text : "" btnGroup[curBtn - 1] ? btnGroup[curBtn - 1].text : ""
}} }}
</div> </div>
</div> </div>
<div class="btn"> <div class="btn">
<el-button type="primary" :loading="loading" @click="onCancel"></el-button> <el-button type="primary" :loading="loading" @click="onCancel"
<el-button type="primary" :loading="loading" @click="editSubmit"></el-button> ></el-button
>
<el-button type="primary" :loading="loading" @click="editSubmit"
></el-button
>
</div> </div>
</template> </template>
</public-dialog> </public-dialog>
<public-dialog ref="publicDialog" @onCancel="onCancel"> <public-dialog ref="publicDialog" @onCancel="onCancel">
<!-- 审核结果回显 --> <!-- 审核结果回显 -->
<template v-if="!confirmStatus && !showNote" slot="content"> <template v-if="!confirmStatus" slot="content">
<div class="title">{{ btnGroup[curBtn - 1] ? btnGroup[curBtn - 1].text : "" }}</div> <div class="title">
<div class="content" ref="publicContent"> {{ btnGroup[curBtn - 1] ? btnGroup[curBtn - 1].text : "" }}
</div>
<div class="content">
<div v-if="curBtn != 1" class="noPass"> <div v-if="curBtn != 1" class="noPass">
<el-form <el-form
ref="form" ref="form"
...@@ -58,7 +70,10 @@ ...@@ -58,7 +70,10 @@
label-width="100px" label-width="100px"
class="demo-ruleForm" class="demo-ruleForm"
> >
<el-form-item :label="curBtn == 2 ? '不合格原因' : '驳回修改建议'" prop="reason"> <el-form-item
:label="curBtn == 2 ? '不合格原因' : '驳回修改建议'"
prop="reson"
>
<el-input <el-input
v-model="form.reason" v-model="form.reason"
type="textarea" type="textarea"
...@@ -84,56 +99,9 @@ ...@@ -84,56 +99,9 @@
</div> </div>
</div> </div>
<div class="btn"> <div class="btn">
<el-button type="primary" :loading="loading" @click="onCancel">确 定</el-button> <el-button type="primary" :loading="loading" @click="onSubmit"
</div> >确 定</el-button
</template> >
<!-- 标签操作 -->
<template slot="content" v-if="!confirmStatus && showNote">
<div class="left-back" @click="handleNoteDialog">
<i class="el-icon-back"></i>
</div>
<div class="title">编辑标签</div>
<div class="content note-dialog" v-if=" tagList.length>0" :style="{'min-height':minHeight}">
<el-row :key="index" v-for="(item, index) in tagList" class="mb-16">
<el-col :span="18">
<el-input
size="medium"
v-model="item.note"
class="tag-input"
:class="item.isSelect ? '' : 'unselect-tag'"
placeholder="请输入标签"
></el-input>
</el-col>
<el-col :span="3">
<span class="handle-text" style="color: #E02020;" @click="delTag(item,index)">删除</span>
</el-col>
<el-col :span="2">
<span
class="handle-text"
style="color: #4E68FF;"
v-if="index == tagList.length - 1"
@click="addTag"
>添加</span>
</el-col>
</el-row>
</div>
<div class="content" :style="{'min-height':minHeight}" v-else>
<el-row class="mb-16">
<el-col :span="18">
<el-input size="medium" v-model="newNote" class="tag-input" placeholder="请输入标签"></el-input>
</el-col>
<el-col :span="3">
<span class="handle-text" style="color: #E02020;" @click="delTag(item,index)">删除</span>
</el-col>
<el-col :span="2">
<span class="handle-text" style="color: #4E68FF;" @click="addTag">添加</span>
</el-col>
</el-row>
</div>
<div class="btn">
<el-button type="primary" :loading="auditLoading" @click="saveTag">
<span>保 存</span>
</el-button>
</div> </div>
</template> </template>
<!-- 提交后结果 --> <!-- 提交后结果 -->
...@@ -143,14 +111,24 @@ ...@@ -143,14 +111,24 @@
<div v-if="curBtn == 1" class="pass">该病例审核合格成功!</div> <div v-if="curBtn == 1" class="pass">该病例审核合格成功!</div>
<div v-if="curBtn != 1" class="noPass"> <div v-if="curBtn != 1" class="noPass">
<!-- 不合格和驳回 --> <!-- 不合格和驳回 -->
<div class="label">{{ curBtn == 2 ? "不合格原因" : "驳回修改建议" }}</div> <div class="label">
<div class="reason">{{ form.reason }}</div> {{ curBtn == 2 ? "不合格原因" : "驳回修改建议" }}
</div>
<div class="reson">{{ form.reson }}</div>
</div> </div>
</div> </div>
<div v-if="curBtn != 1" class="showTips">该病例审核{{ curBtn == 2 ? "不合格原因" : "驳回修改建议" }}提交成功!</div> <div v-if="curBtn != 1" class="showTips">
该病例审核{{ curBtn == 2 ? "不合格原因" : "驳回修改建议" }}提交成功!
</div>
<div class="btn"> <div class="btn">
<el-button type="primary" @click="nextExample" :loading="auditLoading"> <el-button
<span v-if="tabActive < this.formEdit.length - 1">确认并进入下一列审核</span> type="primary"
@click="nextExample"
:loading="auditLoading"
>
<span v-if="tabActive < this.formEdit.length - 1"
>确认并进入下一列审核</span
>
<span v-else>确 定</span> <span v-else>确 定</span>
</el-button> </el-button>
</div> </div>
...@@ -162,43 +140,22 @@ ...@@ -162,43 +140,22 @@
import publicDialog from "./components/publicDialog.vue" import publicDialog from "./components/publicDialog.vue"
import followReview from "./components/followReview.vue" import followReview from "./components/followReview.vue"
import { getFollowUnCheckDetail, putFollowCheck } from "@/api/followup" import { getFollowUnCheckDetail, putFollowCheck } from "@/api/followup"
import { getSysCheckNote,postSysCheckNote } from "@/api/note" import { getSysCheckNote, postSysCheckNote } from "@/api/note"
export default { export default {
components: { publicDialog, followReview }, components: { publicDialog, followReview },
data() { data() {
return { return {
medicalCombination: "无锡市人民医院医联体",
mcCount: 7, mcCount: 7,
editStatus: false, //进入的状态是第一次审核还是修改审核,false为第一次,true为修改 editStatus: false, //进入的状态是第一次审核还是修改审核,false为第一次,true为修改
tabActive: "0", //当前随访病例 formEdit: {
formEdit: [ name: "djksh",
{ contact_phone: "12345678",
patientId: "1623190906909835266", is_accept: "0",
id: "1623216842623492098", gas_exam: "15",
formRecordId: "1623216842522828802", G_17: "5",
age: "", }, //填报数据
name: "", form: {},
checkStatus: 1,
patientFrom: 1,
unionName: "合肥高新附院",
unionId: "2",
reportTime: "",
riskRank: "",
formId: "1598197066503389185",
is_accept: "0",
},
{
name: "djksh",
contact_phone: "12345678",
is_accept: "1",
gas_exam: "15",
G_17: "6",
},
], //填报数据
auditLoading: false,
tagLoading:false,
form: {
reason: "",
}, //审核表单
rules: { rules: {
reason: [{ required: true, message: "请填写", trigger: "blur" }], reason: [{ required: true, message: "请填写", trigger: "blur" }],
}, },
...@@ -238,9 +195,9 @@ export default { ...@@ -238,9 +195,9 @@ export default {
// note: "不合格原因", // note: "不合格原因",
// }, // },
], ],
newNote:'', newNote: "",
minHeight:'170px', minHeight: "170px",
showNote:false showNote: false,
} }
}, },
watch: { watch: {
...@@ -255,10 +212,7 @@ export default { ...@@ -255,10 +212,7 @@ export default {
}, },
computed: { computed: {
unionId() { unionId() {
return this.$route.query.unionId return this.$route.query.id
},
unionName() {
return this.$route.query.unionName || "--"
}, },
}, },
methods: { methods: {
...@@ -312,12 +266,11 @@ export default { ...@@ -312,12 +266,11 @@ export default {
console.log("tab激活", this.tabActive) console.log("tab激活", this.tabActive)
this.onCancel() this.onCancel()
}, },
//随访数据
async getDetail() { async getDetail() {
this.loading = true this.loading = true
let res = await getFollowUnCheckDetail(this.unionId) let res = await getFollowUnCheckDetail(this.unionId)
if (res.code == 1) { if (res.code == 1) {
// this.formEdit=res.data //调试注释 this.formEdit = res.data[0]
} }
this.loading = false this.loading = false
}, },
...@@ -342,37 +295,35 @@ export default { ...@@ -342,37 +295,35 @@ export default {
this.tagLoading = true this.tagLoading = true
let res = await getSysCheckNote() let res = await getSysCheckNote()
if (res.code == 1) { if (res.code == 1) {
this.tagList=res.data this.tagList = res.data
} }
this.tagLoading = false this.tagLoading = false
}, },
//选择标签 //选择标签
seleckTag(item, index) { seleckTag(item, index) {
this.tagList[index]["isSelect"] = true this.tagList[index]["isSelect"] = true
this.form.reason = this.form.reason + item.note + '' this.form.reason = this.form.reason + item.note + ""
this.$forceUpdate() this.$forceUpdate()
}, },
//标签保存 //标签保存
async saveTag(){ async saveTag() {
let params = this.tagList.map((e) => e.note) let params = this.tagList.map((e) => e.note)
let res = await postSysCheckNote(params) let res = await postSysCheckNote(params)
if (res.code == 1) { if (res.code == 1) {
this.$message.success("保存标签成功") this.$message.success("保存标签成功")
this.getSysCheckNote() this.getSysCheckNote()
// this.$refs.noteDialog.dialogVisible = false // this.$refs.noteDialog.dialogVisible = false
} }
}, },
//标签添加 //标签添加
addTag(){ addTag() {
this.tagList.push( this.tagList.push({
{ note: "",
note:'' })
}, this.$forceUpdate()
)
this.$forceUpdate();
}, },
//标签删除 //标签删除
delTag(item,index){ delTag(item, index) {
this.$confirm("确定要删除该标签吗?", "警告", { this.$confirm("确定要删除该标签吗?", "警告", {
type: "warning", type: "warning",
}) })
...@@ -382,26 +333,26 @@ export default { ...@@ -382,26 +333,26 @@ export default {
.catch(() => {}) .catch(() => {})
}, },
//标签对话框关闭 //标签对话框关闭
handleNoteDialog(i){ handleNoteDialog(i) {
this.showNote = false this.showNote = false
this.getSysCheckNote() this.getSysCheckNote()
}, },
// //标签保存对话框操作 // //标签保存对话框操作
// noteSave(){ // noteSave(){
// this.$refs.noteDialog.dialogVisible = false // this.$refs.noteDialog.dialogVisible = false
// this.getSysCheckNote() // this.getSysCheckNote()
// }, // },
// //添加、编辑标签 // //添加、编辑标签
// async handleTag(item){ // async handleTag(item){
// if(!item.note) return // if(!item.note) return
// else{ // else{
// let params = { // let params = {
// note:item.note // note:item.note
// } // }
// item.id ? params['id']=item.id : '' // item.id ? params['id']=item.id : ''
// let res = item.id ? await putSysCheckNote(params) : await postSysCheckNote(params) // let res = item.id ? await putSysCheckNote(params) : await postSysCheckNote(params)
// } // }
// } // }
}, },
} }
</script> </script>
...@@ -431,6 +382,7 @@ export default { ...@@ -431,6 +382,7 @@ export default {
justify-content: space-between; justify-content: space-between;
.right { .right {
.btn { .btn {
margin-top: 0px;
width: 80px; width: 80px;
height: 32px; height: 32px;
border-radius: 4px; border-radius: 4px;
......
...@@ -4,10 +4,8 @@ ...@@ -4,10 +4,8 @@
<ConfigForms <ConfigForms
form-type="2" form-type="2"
formClass="follow-form" formClass="follow-form"
:patient-id="patientId" :disabled="false"
:disabled="disabled" :patientId="patientId"
:tabDisabled="tabDisabled"
:operation="operation"
></ConfigForms> ></ConfigForms>
</div> </div>
</template> </template>
...@@ -20,42 +18,13 @@ export default { ...@@ -20,42 +18,13 @@ export default {
ConfigForms, ConfigForms,
}, },
data() { data() {
return { return { patientId: "" }
disabled:false,
tabDisabled:true,
operation:'',
patientId:this.$route.query.patientId,
model:''
}
},
watch:{
model(val){
switch(val){
case 'view':
this.disabled = true
this.tabDisabled = false
this.operation = 'edit'
break;
case 'edit':
this.disabled = false
this.tabDisabled = true
this.operation = 'edit'
break;
default:
this.disabled = false
this.tabDisabled = true
this.operation = ''
break;
}
}
}, },
created() { created() {
this.model = this.$route.query.model this.patientId = this.$route.query.patientId
}, },
methods: {}, methods: {},
} }
</script> </script>
<style lang="scss"> <style lang="scss"></style>
</style>
...@@ -2,7 +2,11 @@ ...@@ -2,7 +2,11 @@
<!-- 随访调查 --> <!-- 随访调查 -->
<div class="screeningSearch"> <div class="screeningSearch">
<div class="top"> <div class="top">
<form-components :forms="formList" :formEdit="formEdit" @handleSearch="onSearch"></form-components> <form-components
:forms="formList"
:formEdit="formEdit"
@handleSearch="onSearch"
></form-components>
</div> </div>
<div class="bot"> <div class="bot">
<el-table-self <el-table-self
...@@ -23,20 +27,18 @@ ...@@ -23,20 +27,18 @@
</template> </template>
<script> <script>
import FormComponents from "@/components/FormComponents" import FormComponents from "@/components/FormComponents"
import CustomsTable from "@/components/CustomsTable"
import paginationMixin from "@/components/TabComponents/mixin" import paginationMixin from "@/components/TabComponents/mixin"
import { getCurrentFormByType } from "@/api/coop-group.js" import { getCurrentFormByType } from "@/api/coop-group.js"
import { getFollowSurvey } from "@/api/followup" import { getFollowSurvey } from "@/api/followup"
import { getDictDetail } from "@/api/dict.js" import { mapGetters } from "vuex"
export default { export default {
components: { components: {
CustomsTable,
FormComponents, FormComponents,
}, },
mixins: [paginationMixin], mixins: [paginationMixin],
data() { data() {
return { return {
formId:"", //随访表单类型 formId: "", //随访表单类型
listLoading: false, listLoading: false,
keyword: "", keyword: "",
modifiedFlag: false, modifiedFlag: false,
...@@ -62,7 +64,10 @@ export default { ...@@ -62,7 +64,10 @@ export default {
minWidth: 80, minWidth: 80,
value: "sex", value: "sex",
formatter: (row) => { formatter: (row) => {
return this.$handle.formatDicList(this.dictMap["d-sex"], row.sex + "") return this.$handle.formatDicList(
this.dictMap["d-sex"],
row.sex + ""
)
}, },
}, },
{ {
...@@ -86,7 +91,7 @@ export default { ...@@ -86,7 +91,7 @@ export default {
minWidth: 180, minWidth: 180,
value: "screeningTime", value: "screeningTime",
formatter: (row) => { formatter: (row) => {
return row.createTime ? row.createTime : "--" return row.screeningTime ? row.screeningTime : "--"
}, },
}, },
{ {
...@@ -94,7 +99,10 @@ export default { ...@@ -94,7 +99,10 @@ export default {
minWidth: 120, minWidth: 120,
value: "riskRank", value: "riskRank",
formatter: (row) => { formatter: (row) => {
return this.$handle.formatDicList(this.dictMap["risk_level"],String(row.riskRank)) return this.$handle.formatDicList(
this.dictMap["risk_level"],
String(row.riskRank)
)
}, },
}, },
{ {
...@@ -110,15 +118,21 @@ export default { ...@@ -110,15 +118,21 @@ export default {
value: "followBatch", value: "followBatch",
minWidth: 120, minWidth: 120,
formatter: (row) => { formatter: (row) => {
return this.$handle.formatDicList(this.dictMap["follow_type"],String(row.followBatch)) return this.$handle.formatDicList(
this.dictMap["follow_type"],
String(row.followBatch)
)
}, },
}, },
{ {
label: "计划随访时间", label: "计划随访时间",
value: "nextFollowTime", value: "nextFollowTime",
formatter: (row) => { // formatter: (row) => {
return this.$handle.formatDicList(this.dictMap["next_follow_time"],String(row.nextFollowTime)) // return this.$handle.formatDicList(
}, // this.dictMap["next_follow_time"],
// String(row.nextFollowTime)
// )
// },
minWidth: 120, minWidth: 120,
}, },
{ {
...@@ -139,8 +153,7 @@ export default { ...@@ -139,8 +153,7 @@ export default {
], ],
}, },
], ],
tableData: [ tableData: [],
],
formList: [ formList: [
{ {
xs: 24, xs: 24,
...@@ -151,7 +164,7 @@ export default { ...@@ -151,7 +164,7 @@ export default {
type: "select", type: "select",
label: "计划随访时间", label: "计划随访时间",
prop: "nextFollowTime", prop: "nextFollowTime",
trans:'next_follow_time', trans: "next_follow_time",
placeholder: "请选择计划随访时间", placeholder: "请选择计划随访时间",
rules: [], rules: [],
opts: [{ label: "123", value: "1" }], opts: [{ label: "123", value: "1" }],
...@@ -201,10 +214,13 @@ export default { ...@@ -201,10 +214,13 @@ export default {
type: "select", type: "select",
label: "随访进度", label: "随访进度",
prop: "followBatch", prop: "followBatch",
trans:'follow_type', trans: "follow_type",
placeholder: "请选择随访进度", placeholder: "请选择随访进度",
rules: [], rules: [],
opts: [{ label: "123", value: "1" }], opts: [
{ label: "筛查", value: "0" },
{ label: "随访", value: "1" },
],
}, },
{ {
xs: 1, xs: 1,
...@@ -225,7 +241,7 @@ export default { ...@@ -225,7 +241,7 @@ export default {
marginLeft: "40px", marginLeft: "40px",
}, },
btnText: "查询", btnText: "查询",
func: this.onSearch func: this.onSearch,
}, },
// { // {
// btnType: "tobeModified", // btnType: "tobeModified",
...@@ -234,79 +250,74 @@ export default { ...@@ -234,79 +250,74 @@ export default {
], ],
}, },
], ],
formEdit:{} formEdit: {},
} }
}, },
watch: { computed: {
pageSize(val){ ...mapGetters({
sessionStorage.setItem('followResearch-pageSize',val) selectedIndex: "table/selectedIndex",
}, refreshFlag: "table/refreshFlag",
//当前页 }),
pageIndex(val){
sessionStorage.setItem('followResearch-pageIndex',val)
}
}, },
created(){ watch: {},
this.initSearchForm() created() {
// this.initColumn()
}, },
mounted() { mounted() {
this.formEdit = JSON.parse(sessionStorage.getItem('followResearch-form')) ? JSON.parse(sessionStorage.getItem('followResearch-form')) : {} this.handleSearch() //调试注释
this.pageSize = Number(sessionStorage.getItem('followResearch-pageSize')) || 10
this.pageIndex = Number(sessionStorage.getItem('followResearch-pageIndex')) || 1
this.getCurrentFormByType(2)
}, },
methods: { methods: {
changeModified() { changeModified() {
this.modifiedFlag = !this.modifiedFlag this.modifiedFlag = !this.modifiedFlag
}, },
setSelectedIndex(i) { changePage(v) {
console.log(this.selectedIndex) this.page[v.type] = v.value
this.selectedIndex = i console.log(this.page)
sessionStorage.setItem("homeSelectedIndex", this.selectedIndex) this.$refs.customTable.loading = false
},
rowOpration(data, i,label) {
console.log('跳转',data, i,label)
this.$router.push({path:"/followupentry",query:{patientId:data.patientId,formEdit:JSON.stringify(data)}})
}, },
onSearch(form) { onSearch(form) {
sessionStorage.setItem('followResearch-form',JSON.stringify(form)) sessionStorage.setItem("followResearch-form", JSON.stringify(form))
this.formEdit = form this.formEdit = form
this.handleSearch() this.handleSearch()
}, },
rowOpration(data, i) {
async handleSearch(){ console.log("跳转", data, i)
sessionStorage.setItem("formEdit", JSON.stringify(data))
this.$router.push({
path: `/followupentry?patientId=${data.patientId}`,
})
},
async handleSearch() {
this.listLoading = true this.listLoading = true
let params={ let params = {
pageSize:this.pageSize, pageSize: this.pageSize,
pageNum:this.pageIndex, pageNum: this.pageIndex,
formId:this.formId,
patientFrom:sessionStorage.getItem('selectedIndex') //筛查场景
} }
if(this.formEdit){ params.patientFrom = this.selectedIndex
params=Object.assign(this.formEdit,params) if (this.formEdit) {
params = Object.assign(this.formEdit, params)
} }
let res = await getFollowSurvey(params) let res = await getFollowSurvey(params)
if(res.code==1){ if (res.code == 1) {
//分页内容 //分页内容
const d = res.data const d = res.data
this.total= d.total this.total = d.total
this.tableData=d['records'] this.tableData = d["records"]
} }
this.listLoading = false this.listLoading = false
}, },
//查询表单枚举值字典 //查询表单枚举值字典
initSearchForm(){ initSearchForm() {
this.formList.forEach((item,index) => { this.formList.forEach((item, index) => {
if(item.trans){ if (item.trans) {
if(!item['opts']){ if (!item["opts"]) {
item['opts']=[] item["opts"] = []
} } else {
else{ item["opts"] = this.dictMap[item.trans]
item['opts']=this.dictMap[item.trans]
} }
} }
}) })
this.$forceUpdate(); this.$forceUpdate()
}, },
// async initDict(type,index){ // async initDict(type,index){
// let params={ // let params={
...@@ -340,14 +351,13 @@ export default { ...@@ -340,14 +351,13 @@ export default {
getCurrentFormByType(type) { getCurrentFormByType(type) {
getCurrentFormByType({ getCurrentFormByType({
type, type,
groupId: this.$store.state.user.group.groupId || '', groupId: this.$store.state.user.group.groupId || "",
}).then((res) => {
if (res.code === 1) {
this.formId = res.data[0].id
this.handleSearch()
}
}) })
.then((res) => {
if (res.code === 1) {
this.formId = res.data[0].id
this.handleSearch()
}
})
}, },
}, },
} }
......
...@@ -6,9 +6,9 @@ ...@@ -6,9 +6,9 @@
<span class="bold-font">总体情况</span> <span class="bold-font">总体情况</span>
</div> </div>
<el-row :gutter="20" class="data-box"> <el-row :gutter="20" class="data-box">
<el-col :span="6" v-for="(item,index) in totalList" :key="index"> <el-col v-for="(item, index) in totalList" :key="index" :span="6">
<div class="grid-content mb-12">{{item.label}}</div> <div class="grid-content mb-12">{{ item.label }}</div>
<h1>{{totalData[item.prop]}}</h1> <h1>{{ totalData[item.prop] }}</h1>
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
...@@ -19,21 +19,31 @@ ...@@ -19,21 +19,31 @@
</div> </div>
<div class="type-box"> <div class="type-box">
<span class="mr-10">选择统计周期:</span> <span class="mr-10">选择统计周期:</span>
<el-radio-group v-model="periodType"> <el-radio-group v-model="periodType" @input="handleClick">
<el-radio-button label="month">月度</el-radio-button> <el-radio-button label="month">月度</el-radio-button>
<el-radio-button label="season">季度</el-radio-button> <el-radio-button label="quarter">季度</el-radio-button>
<el-radio-button label="year">年度</el-radio-button> <el-radio-button label="year">年度</el-radio-button>
</el-radio-group> </el-radio-group>
</div> </div>
<div class="type-box"> <div class="type-box">
<span class="mr-10">选择统计年份:</span> <span class="mr-10">选择统计年份:</span>
<el-select v-model="yearBtn" placeholder="请选择"> <el-select v-model="yearBtn" placeholder="请选择" @change="change">
<el-option v-for="item in yearList" :value="item" :key="item" :label="item"></el-option> <el-option
v-for="item in yearList"
:key="item"
:value="item"
:label="item"
></el-option>
</el-select> </el-select>
</div> </div>
<el-table :data="tableData" border show-summary class="mt-20"> <el-table
:data="tableData"
border
:show-summary="showSummary"
class="mt-20"
>
<el-table-column <el-table-column
v-for="(item,index) in tableColumn" v-for="(item, index) in tableColumn"
:key="index" :key="index"
:prop="item.prop" :prop="item.prop"
:label="item.label" :label="item.label"
...@@ -44,114 +54,221 @@ ...@@ -44,114 +54,221 @@
</div> </div>
</template> </template>
<script> <script>
import { checkerQuality, adminQuality } from "@/api/qualitycontrol-report"
export default { export default {
data() { data() {
return { return {
totalList:[ curRole: "",
totalList: [
{ {
label:"累计审核病例数", label: "累计审核病例数",
prop:"account" prop: "checked",
}, },
{ {
label:"累计审核合格病例数", label: "累计审核合格病例数",
prop:"account" prop: "pass",
}, },
{ {
label:"累计审核驳回修改病例数", label: "累计审核驳回修改病例数",
prop:"account" prop: "back",
}, },
{ {
label:"累计审核不合格病例数", label: "累计审核不合格病例数",
prop:"account" prop: "unPass",
}, },
], ],
totalData:{ totalData: {},
account:1600 periodType: "month",
}, yearList: [],
periodType:"month", yearBtn: 0,
yearList: [2021], tableData: [],
yearBtn:2022, tableColumn: [],
tableData:[{ allData: [],
id: '12987122', month: [
name: '王小虎', { label: "1月", prop: "value1" },
season: '234', { label: "2月", prop: "value2" },
amount2: '3.2', { label: "3月", prop: "value3" },
amount3: 10 { label: "4月", prop: "value4" },
}, { { label: "5月", prop: "value5" },
id: '12987123', { label: "6月", prop: "value6" },
name: '王小虎', { label: "7月", prop: "value7" },
season: '165', { label: "8月", prop: "value8" },
amount2: '4.43', { label: "9月", prop: "value9" },
amount3: 12 { label: "10月", prop: "value10" },
}, { { label: "11月", prop: "value11" },
id: '12987124', { label: "12月", prop: "value12" },
name: '王小虎', ],
season: '324', quarter: [
amount2: '1.9', { label: "第1季度", prop: "value1" },
amount3: 9 { label: "第2季度", prop: "value2" },
}, { { label: "第3季度", prop: "value3" },
id: '12987125', { label: "第4季度", prop: "value4" },
name: '王小虎', ],
season: '621', year: [],
amount2: '2.2', showSummary: false,
amount3: 17
}, {
id: '12987126',
name: '王小虎',
season: '539',
amount2: '4.1',
amount3: 15
}]
} }
}, },
methods: { computed: {
getNow() { roles() {
const nowDate = new Date() return this.$store.state.user.roles
this.yearBtn = nowDate.getFullYear();
if(!this.yearList.find((item) => item == this.yearBtn)){
this.yearList.push(this.yearBtn)
this.yearList.sort((a, b) => {
return a - b
})
}
}, },
}, },
watch: {},
mounted() {}, mounted() {},
created() { created() {
this.getNow(); this.getNow()
if (this.roles.length > 0) {
let roleCodeArr = this.roles.map((e) => e.roleCode)
console.log(roleCodeArr)
if (roleCodeArr.includes("admin")) {
this.curRole = "admin"
} else if (roleCodeArr.includes("auditer")) {
this.curRole = "auditer"
}
}
this.getQuality()
}, },
watch: {}, methods: {
computed:{ change(val) {
tableColumn(){ console.log(val)
const listM=[ this.getQuality()
{ },
label:"月份", getNow() {
prop:"month" const nowDate = new Date()
}, this.yearBtn = nowDate.getFullYear()
{ for (let i = 2023; i <= this.yearBtn; i++) {
label:"审核病例数(例)", this.yearList.push(i)
prop:"count" }
}, },
] async getQuality() {
const listS=[ let res
{ // console.log(this.curRole)
label:"季度", switch (this.curRole) {
prop:"season" case "admin":
}, res = await adminQuality({ year: this.yearBtn })
{ let { overall } = res.data
label:"审核病例数(例)", this.allData = res.data
prop:"count" this.totalData = overall
}, this.showSummary = true
] this.handleClick()
if(this.periodType == 'month'){ break
return listM
} case "auditer":
if(this.periodType == 'season'){ res = await checkerQuality({ year: this.yearBtn })
return listS this.allData = res.data
this.totalData = res.data.overall
this.showSummary = false
this.handleClick()
break
default:
break
}
},
handleClick(val) {
let tableData
let headerData
if (this.curRole == "admin") {
switch (this.periodType) {
case "month":
tableData = this.allData.month
headerData = this.month
this.tableColumn = [
{
label: "审核员/月份",
prop: "name",
},
...this.month,
{
label: "合计",
prop: "sum",
},
]
break
case "quarter":
tableData = this.allData.quarter
headerData = this.quarter
this.tableColumn = [
{
label: "审核员/季度",
prop: "name",
},
...this.quarter,
{
label: "合计",
prop: "sum",
},
]
break
case "year":
tableData = this.allData.year
this.year = this.yearList.map((e, index) => {
let obj = {
label: e + "",
prop: "value" + (index + 1),
}
return obj
})
headerData = this.year
this.tableColumn = [
{
label: "审核员/年份",
prop: "name",
},
...this.year,
]
break
default:
break
} }
// //处理动态表头 //
this.tableData = []
tableData.forEach((e, index) => {
let data = {
name: e.name,
}
// 计算
for (let i = 0; i < headerData.length; i++) {
let value = headerData[i].label
let filterArr = e.list.filter((item) => item.value === value)
if (filterArr.length > 0) {
data[headerData[i].prop] = filterArr[0].checked
} else {
data[headerData[i].prop] = 0
}
}
// !计算右侧合计条数
let arr = e.list.map((listItem) => listItem.checked)
data.sum = eval(arr.join("+"))
// !计算底部合计
this.tableData.push(data)
})
} else if (this.curRole == "auditer") {
headerData = [
{
label:
this.periodType == "month"
? "月份"
: this.periodType == "quarter"
? "季度"
: this.periodType == "year"
? "年度"
: "",
prop: "value",
},
{ label: "审核病例数(例)", prop: "checked" },
]
this.tableColumn = headerData
this.tableData =
this.periodType == "month"
? this.allData.month
: this.periodType == "quarter"
? this.allData.quarter
: this.periodType == "year"
? this.allData.year
: []
} }
} },
},
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
<template> <template>
<div class="container" style="max-height: 89vh"> <div class="container" style="max-height: 89vh">
<div v-show="!isDetail"> <div v-show="!isDetail">
<div class="header">草稿箱</div> <div class="header">草稿箱{{ total }}条】</div>
<div class="content"> <div class="content">
<customs-table <el-table-self
ref="table" ref="table"
:table-data="tableData" :table-data="tableData"
:columns="columns" :columns="columns"
:header-class="'newHeader'"
:list-loading="listLoading" :list-loading="listLoading"
:current-page="pageIndex" :current-page="pageIndex"
:total-count="total" :total-count="total"
...@@ -36,7 +35,6 @@ ...@@ -36,7 +35,6 @@
</div> </div>
</template> </template>
<script> <script>
import CustomsTable from "@/components/CustomsTable"
import paginationMixin from "@/components/TabComponents/mixin" import paginationMixin from "@/components/TabComponents/mixin"
import ConfigForms from "./components/ConfigForms.vue" import ConfigForms from "./components/ConfigForms.vue"
import { mapGetters } from "vuex" import { mapGetters } from "vuex"
...@@ -45,7 +43,6 @@ export default { ...@@ -45,7 +43,6 @@ export default {
// 数据概览 // 数据概览
name: "", name: "",
components: { components: {
CustomsTable,
ConfigForms, ConfigForms,
}, },
mixins: [paginationMixin], mixins: [paginationMixin],
...@@ -57,51 +54,104 @@ export default { ...@@ -57,51 +54,104 @@ export default {
{ {
label: "医联体", label: "医联体",
minWidth: 120, minWidth: 120,
value: "unionId", value: "unionName",
formatter: (row) => {
return row.unionName ? row.unionName : "--"
},
}, },
{ {
label: "姓名", label: "姓名",
minWidth: 120, minWidth: 120,
formatter: (row) => {
return row.name ? row.name : "--"
},
value: "name", value: "name",
}, },
{ {
label: "性别", label: "性别",
minWidth: 120, minWidth: 80,
value: "sex", value: "sex",
formatter: (row) => {
return row.sex
? this.$handle.formatDicList(this.dictMap["d-sex"], row.sex + "")
: "--"
},
}, },
// {
{ // label: "身份证",
label: "身份证", // minWidth: 120,
minWidth: 120, // value: "idCard",
value: "idCard", // formatter: (row) => {
}, // return row.idCard ? row.idCard : "--"
// },
// },
{ {
label: "年龄", label: "年龄",
minWidth: 120, minWidth: 120,
value: "age", value: "age",
formatter: (row) => {
return row.age ? row.age : "--"
},
}, },
{ {
label: "筛查时间", label: "筛查时间",
minWidth: 120, minWidth: 180,
value: "screenTime", // sortable: "custom",
value: "createTime",
formatter: (row) => {
return row.createTime ? row.createTime : "--"
},
}, },
{ {
label: "风险评估结果", label: "风险评估结果",
minWidth: 120, minWidth: 120,
value: "result", value: "riskRank",
formatter: (row) => {
let riskRank = {
low: "低危",
medium: "中危",
high: "高危",
}
return row.riskRank ? riskRank[row.riskRank] : "--"
},
}, },
{ {
label: "上次随访时间", label: "是否内镜",
minWidth: 120, minWidth: 120,
value: "targetFieldCode", value: "isInnerCheck",
formatter: (row) => {
let arr = [
{ label: "", value: "0" },
{ label: "", value: "1" },
]
let label
if (String(row.isInnerCheck)) {
label = arr.filter((e) => e.value == row.isInnerCheck)[0].label
} else {
label = "--"
}
return label
},
}, },
{ {
label: "筛查审核状态", label: "筛查审核状态",
minWidth: 180, minWidth: 120,
value: "createTime", value: "checkStatus",
formatter: (row) => {
let arr = [
{ label: "待审核", value: "1" },
{ label: "驳回修改", value: "2" },
{ label: "合格", value: "3" },
{ label: "不合格", value: "4" },
]
let label
if (row.checkStatus) {
label = arr.filter((e) => e.value == row.checkStatus)[0].label
} else {
label = "--"
}
return label
},
}, },
{ {
label: "操作", label: "操作",
...@@ -172,9 +222,14 @@ export default { ...@@ -172,9 +222,14 @@ export default {
getPatientPage(data).then((res) => { getPatientPage(data).then((res) => {
this.listLoading = false this.listLoading = false
if (res.code === 1) { if (res.code === 1) {
const d = res.data if (res.data.records && res.data.records.length > 0) {
this.tableData = d.records || [] const d = res.data
this.total = Number(d.total) this.tableData = d.records || []
this.total = Number(d.total)
} else {
this.tableData = []
this.total = 0
}
} }
}) })
}, },
......
...@@ -8,12 +8,13 @@ ...@@ -8,12 +8,13 @@
> >
<div v-if="formTabs && formTabs.length > 0" style="position: relative"> <div v-if="formTabs && formTabs.length > 0" style="position: relative">
<el-button <el-button
v-if="formType == 1 ? !disabled ? true : false : true" v-if="formType == 1 ? (!disabled ? true : false) : true"
class="draftButton" class="draftButton"
:loading="loading" :loading="loading"
:disabled="!infoCompelete" :disabled="!infoCompelete"
@click="onSubmit(formType)" @click="onSubmit(formType)"
>{{ formType == 1 ? "临时保存" : "返回" }}</el-button> >{{ formType == 1 ? "临时保存" : "返回" }}</el-button
>
<el-tabs <el-tabs
v-model="activeName" v-model="activeName"
v-loading="fromLoading" v-loading="fromLoading"
...@@ -39,6 +40,7 @@ ...@@ -39,6 +40,7 @@
:patient-standby-id="patientStandbyId" :patient-standby-id="patientStandbyId"
:newform-record-id="newformRecordId" :newform-record-id="newformRecordId"
:form="form" :form="form"
:formType="formType"
:disabled="disabled" :disabled="disabled"
:operation="operation" :operation="operation"
:isDraft="isDraft" :isDraft="isDraft"
...@@ -46,6 +48,7 @@ ...@@ -46,6 +48,7 @@
contrast contrast
:form-initial="formInitial" :form-initial="formInitial"
:survival-flag="survivalFlag" :survival-flag="survivalFlag"
:followId="followId"
@setFormJson="setFormJson" @setFormJson="setFormJson"
@handleConfirm="handleConfirm" @handleConfirm="handleConfirm"
@onPrev="onPrev" @onPrev="onPrev"
...@@ -69,7 +72,9 @@ ...@@ -69,7 +72,9 @@
<div class="showTips">您可以在【草稿箱】页面找到该数据</div> <div class="showTips">您可以在【草稿箱】页面找到该数据</div>
</div> </div>
<div class="btn"> <div class="btn">
<el-button type="primary" :loading="loading" @click="continueSubmit">继续添加</el-button> <el-button type="primary" :loading="loading" @click="continueSubmit"
>继续添加</el-button
>
</div> </div>
</template> </template>
<!-- 保存提交 --> <!-- 保存提交 -->
...@@ -82,8 +87,16 @@ ...@@ -82,8 +87,16 @@
<div class="showTips">您可以在【筛查查询】页面查询到该数据</div> <div class="showTips">您可以在【筛查查询】页面查询到该数据</div>
</div> </div>
<div class="btn"> <div class="btn">
<el-button type="primary" :loading="loading" class="textBtn" @click="viewJump">查看</el-button> <el-button
<el-button type="primary" :loading="loading" @click="continueSubmit">继续添加</el-button> type="primary"
:loading="loading"
class="textBtn"
@click="viewJump"
>查看</el-button
>
<el-button type="primary" :loading="loading" @click="continueSubmit"
>继续添加</el-button
>
</div> </div>
</template> </template>
</public-dialog> </public-dialog>
...@@ -138,10 +151,12 @@ export default { ...@@ -138,10 +151,12 @@ export default {
watch: { watch: {
activeName(val) { activeName(val) {
if (!this.disabled) { if (!this.disabled) {
if (!["index0", "index1"].includes(val)) { if (this.$route.path != "/followupentry") {
this.infoCompelete = true if (!["index0", "index1"].includes(val)) {
} else { this.infoCompelete = true
this.infoCompelete = false } else {
this.infoCompelete = false
}
} }
} }
if (val == "index1") { if (val == "index1") {
...@@ -199,17 +214,28 @@ export default { ...@@ -199,17 +214,28 @@ export default {
}, },
}, },
created() { created() {
// 字典formType 1 筛查表单 // 字典formType 1 筛查表单 2随访表单
// console.log('回显2',this.formEdit)
this.getCurrentFormByType(this.formType) this.getCurrentFormByType(this.formType)
console.log('大表单',this.disabled,this.tabDisabled,this.patientId) console.log(this.$route.path)
this.infoCompelete = this.$route.path == "/followupentry" ? true : false
}, },
methods: { methods: {
handleConfirm(data, done, cb) { handleConfirm(data, done, cb) {
this.addPatient(data, done, cb) console.log("提交", this.formType)
this.$emit("addMethods", { if (this.formType == "2") {
activeName: this.activeName, this.addFollowPatient(data, done, cb)
form: data.data, this.$emit("addMethods", {
}) activeName: this.activeName,
form: data.data,
})
} else {
this.addPatient(data, done, cb)
this.$emit("addMethods", {
activeName: this.activeName,
form: data.data,
})
}
}, },
temporaryConfirm(data, done, cb) { temporaryConfirm(data, done, cb) {
this.addPatient(data, done, cb, () => { this.addPatient(data, done, cb, () => {
...@@ -233,7 +259,7 @@ export default { ...@@ -233,7 +259,7 @@ export default {
)[0] )[0]
formTab.temporarySave() formTab.temporarySave()
// console.log(formTab) // console.log(formTab)
} else if (type == 2) { } else if (type == 3) {
//提交 //提交
this.dialogType = "submit" this.dialogType = "submit"
this.$refs.showDialog.dialogVisible = true this.$refs.showDialog.dialogVisible = true
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<template v-if="!isEmpty"> <template v-if="!isEmpty">
<!-- 多次记录 --> <!-- 多次记录 -->
<el-row v-if="form.fillType === 1"> <el-row v-if="form.fillType === 1">
<tags-scroll-bar <!-- <tags-scroll-bar
v-if="repeatedlyList.length > 0" v-if="repeatedlyList.length > 0"
ref="tags" ref="tags"
:tags-list="repeatedlyList" :tags-list="repeatedlyList"
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
:disabled="disabled" :disabled="disabled"
@change="changeRepeate" @change="changeRepeate"
@add="handleAdd" @add="handleAdd"
></tags-scroll-bar> ></tags-scroll-bar> -->
</el-row> </el-row>
<el-row class="header"> <el-row class="header">
<!-- <template v-if="formData.percent.autoPercent"> <!-- <template v-if="formData.percent.autoPercent">
...@@ -95,6 +95,7 @@ export default { ...@@ -95,6 +95,7 @@ export default {
disabled: Boolean, disabled: Boolean,
contrast: Boolean, //同屏对照 contrast: Boolean, //同屏对照
form: Object, form: Object,
formType: String,
patientId: String, patientId: String,
patientStandbyId: String, patientStandbyId: String,
newformRecordId: String, newformRecordId: String,
...@@ -107,6 +108,7 @@ export default { ...@@ -107,6 +108,7 @@ export default {
type: String, type: String,
default: "", default: "",
}, },
followId: String,
}, },
provide() { provide() {
return { return {
...@@ -162,6 +164,70 @@ export default { ...@@ -162,6 +164,70 @@ export default {
return this.loading || this.formloading return this.loading || this.formloading
}, },
}, },
watch: {
formEdit(val) {
console.log("回显3", val)
},
formInitial: {
handler(v) {
if (v) {
this.$set(this.formData, "formEdit", { ...v })
console.log(this.formData.formEdit)
}
},
deep: true,
},
},
created() {
if (
this.formType == "2" &&
sessionStorage.getItem("formEdit") &&
this.activeName == "index0"
) {
let data = JSON.parse(sessionStorage.getItem("formEdit"))
for (const key in data) {
if (typeof data[key] == "number") {
data[key] = data[key] + ""
}
}
this.formData.formEdit = data
}
this.initForm() //! 随防筛查通用的设置form
if (this.getAll) {
// 监听patientId 获取页面所有数据
this.$watch(
"patientId",
() => {
this.initData()
},
{ immediate: true }
)
} else {
// 监听form.silent 获取当前tab页数据
if (this.formType != 2) {
this.$watch(
"form.silent",
() => {
this.initData()
},
{ immediate: true }
)
} else {
this.$nextTick(() => {
this.$refs.form && this.$refs.form.resetForm()
})
}
}
},
mounted() {
//! 设置新增判断
if (this.$route.path == "/screening/add") {
// this.handleAdd()
if (!this.formData.formRecordId) {
this.handleAdd()
}
}
},
methods: { methods: {
resetForm() { resetForm() {
this.$refs.form.resetForm(false) this.$refs.form.resetForm(false)
...@@ -227,6 +293,9 @@ export default { ...@@ -227,6 +293,9 @@ export default {
if (this.isDraft) { if (this.isDraft) {
params.statusMap.is_draft = this.isDraft params.statusMap.is_draft = this.isDraft
} }
if (this.$route.path == "/followupentry" && this.activeName != "index0") {
params.followId = this.followId
}
this.$emit("handleConfirm", params, done, (res) => { this.$emit("handleConfirm", params, done, (res) => {
// 多次填写的表单新增时,获取最新数据 // 多次填写的表单新增时,获取最新数据
if (this.form.fillType === 1 && !this.formData.formRecordId) { if (this.form.fillType === 1 && !this.formData.formRecordId) {
...@@ -381,55 +450,6 @@ export default { ...@@ -381,55 +450,6 @@ export default {
}) })
}, },
}, },
watch: {
formEdit(val) {
console.log("回显3", val)
this.formatString(val)
},
formInitial: {
handler(v) {
if (v) {
this.$set(this.formData, "formEdit", { ...v })
console.log('form-tab',this.formData.formEdit)
}
},
deep: true,
},
},
created() {
if (this.$route.query.formEdit) {
this.formatString(JSON.parse(this.$route.query.formEdit))
}
this.initForm()
if (this.getAll) {
// 监听patientId 获取页面所有数据
this.$watch(
"patientId",
() => {
this.initData()
},
{ immediate: true }
)
} else {
// 监听form.silent 获取当前tab页数据
this.$watch(
"form.silent",
() => {
this.initData()
},
{ immediate: true }
)
}
},
mounted() {
//! 设置新增判断
if (this.$route.path == "/screening/add") {
// this.handleAdd()
if (!this.formData.formRecordId) {
this.handleAdd()
}
}
},
} }
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
......
import { addPatient } from "@/api/patient.js" import { addPatient, addFollowPatient } from "@/api/patient.js"
import FormTab from "./FormTab" import FormTab from "./FormTab"
import { mapGetters } from "vuex" import { mapGetters } from "vuex"
...@@ -28,7 +28,7 @@ export default { ...@@ -28,7 +28,7 @@ export default {
let i = this.activeName.split("index")[1] - 0 let i = this.activeName.split("index")[1] - 0
i++ i++
if (i == 6) { if (i == 6) {
this.onSubmit(2) this.onSubmit(3)
return return
} else { } else {
this.activeName = "index" + i this.activeName = "index" + i
...@@ -86,6 +86,37 @@ export default { ...@@ -86,6 +86,37 @@ export default {
} }
}) })
}, },
async addFollowPatient(data, done, cb, ConfigFormsCallback) {
addFollowPatient(data, "")
.then((res) => {
// this.$message.success("操作成功")
if (res.data) {
this.isUpdated = true
this.patientStandbyId = res.data.patientId
this.followId = res.data.followId
this.newformRecordId = res.data.formRecordId
if (
cb &&
Object.prototype.toString.call(cb) === "[object Function]"
) {
cb(res)
}
}
})
.finally((e) => {
done()
console.log("走了", ConfigFormsCallback)
if (
ConfigFormsCallback &&
Object.prototype.toString.call(ConfigFormsCallback) ===
"[object Function]"
) {
ConfigFormsCallback()
} else {
this.nextTab()
}
})
},
// json存储 // json存储
setFormJson(formJson) { setFormJson(formJson) {
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
ref="form" ref="form"
:label-position="'right'" :label-position="'right'"
:forms="searchList" :forms="searchList"
:form-defaults="initForm"
:style="{ textAlign: 'left' }" :style="{ textAlign: 'left' }"
@handleSearch="handleFormSearch" @handleSearch="handleFormSearch"
/> />
...@@ -17,9 +18,9 @@ ...@@ -17,9 +18,9 @@
:total-count="total" :total-count="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
:page-size="pageSize" :page-size="pageSize"
:sort-change="sortChange"
@pageSizeChange="handleSizeChange" @pageSizeChange="handleSizeChange"
@currentPageChange="handleCurrentChange" @currentPageChange="handleCurrentChange"
:sortChange="sortChange"
/> />
</div> </div>
...@@ -31,8 +32,8 @@ ...@@ -31,8 +32,8 @@
form-type="1" form-type="1"
:patient-id="patientId" :patient-id="patientId"
:disabled="disabled" :disabled="disabled"
:tabDisabled="tabDisabled" :tab-disabled="tabDisabled"
:isDraft="'0'" :is-draft="'0'"
:operation="'edit'" :operation="'edit'"
></ConfigForms> ></ConfigForms>
</div> </div>
...@@ -46,8 +47,8 @@ import ConfigForms from "./components/ConfigForms.vue" ...@@ -46,8 +47,8 @@ import ConfigForms from "./components/ConfigForms.vue"
import { mapGetters } from "vuex" import { mapGetters } from "vuex"
export default { export default {
name: "ScreeningIndex", name: "ScreeningIndex",
mixins: [paginationMixin],
components: { ConfigForms }, components: { ConfigForms },
mixins: [paginationMixin],
data() { data() {
return { return {
isDetail: false, //! 控制详情显隐 isDetail: false, //! 控制详情显隐
...@@ -60,7 +61,7 @@ export default { ...@@ -60,7 +61,7 @@ export default {
{ {
type: "date", type: "date",
label: "筛查时间", label: "筛查时间",
prop: "createTime", prop: "createDate",
placeholder: "请选择时间", placeholder: "请选择时间",
valueFormat: "yyyy-MM-dd", valueFormat: "yyyy-MM-dd",
}, },
...@@ -80,9 +81,9 @@ export default { ...@@ -80,9 +81,9 @@ export default {
type: "select", type: "select",
prop: "riskRank", prop: "riskRank",
opts: [ opts: [
{ label: "低危", value: "c" }, { label: "低危", value: "low" },
{ label: "中危", value: "b" }, { label: "中危", value: "medium" },
{ label: "高危", value: "a" }, { label: "高危", value: "high" },
], ],
}, },
{ {
...@@ -131,14 +132,14 @@ export default { ...@@ -131,14 +132,14 @@ export default {
: "--" : "--"
}, },
}, },
{ // {
label: "身份证", // label: "身份证",
minWidth: 120, // minWidth: 120,
value: "idCard", // value: "idCard",
formatter: (row) => { // formatter: (row) => {
return row.idCard ? row.idCard : "--" // return row.idCard ? row.idCard : "--"
}, // },
}, // },
{ {
label: "年龄", label: "年龄",
minWidth: 120, minWidth: 120,
...@@ -216,9 +217,19 @@ export default { ...@@ -216,9 +217,19 @@ export default {
{ {
func: this.handleView, func: this.handleView,
formatter(row) { formatter(row) {
return { if (row.checkStatus != 2) {
label: "查看", return {
type: "text", label: "查看",
type: "text",
}
} else {
return {
label: "",
type: "none",
style: {
display: "none",
},
}
} }
}, },
}, },
...@@ -233,7 +244,7 @@ export default { ...@@ -233,7 +244,7 @@ export default {
} else { } else {
return { return {
label: "", label: "",
type: "text", type: "none",
style: { style: {
display: "none", display: "none",
}, },
...@@ -245,6 +256,7 @@ export default { ...@@ -245,6 +256,7 @@ export default {
}, },
], ],
searchForm: {}, searchForm: {},
initForm: {},
} }
}, },
methods: { methods: {
...@@ -313,21 +325,9 @@ export default { ...@@ -313,21 +325,9 @@ export default {
selectedIndex: "table/selectedIndex", selectedIndex: "table/selectedIndex",
refreshFlag: "table/refreshFlag", refreshFlag: "table/refreshFlag",
}), }),
}, initCheckStatus() {
created() { return this.$route.query.checkStatus
this.handleFormSearch() },
// if (this.$route.path == "/screening/index") {
// this.tabDisabled = false
// }
if (this.$route.query.patientId) {
let patientId = this.$route.query.patientId
// this.$nextTick(() => {
this.disabled = true
this.tabDisabled = false
this.patientId = patientId || null
this.isDetail = true
// })
}
}, },
watch: { watch: {
selectedIndex(v) { selectedIndex(v) {
...@@ -345,6 +345,42 @@ export default { ...@@ -345,6 +345,42 @@ export default {
}) })
} }
}, },
initCheckStatus(v) {
if (v) {
this.initForm = {
checkStatus: this.$route.query.checkStatus + "",
}
// console.log(this.searchForm)
this.handleSearch(this.initForm)
}
console.log("status" + v)
},
},
created() {
if (this.$route.query.checkStatus) {
this.initForm = {
checkStatus: this.$route.query.checkStatus + "",
}
this.handleSearch(this.initForm)
} else {
this.handleFormSearch()
}
// if (this.$route.path == "/screening/index") {
// this.tabDisabled = false
// }
if (this.$route.query.patientId) {
let patientId = this.$route.query.patientId
// this.$nextTick(() => {
this.disabled = true
this.tabDisabled = false
this.patientId = patientId || null
this.isDetail = true
// })
}
},
mounted() {
// console.log(this.$route.query.checkStatus)
}, },
} }
</script> </script>
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
/> />
</div> </div>
<el-dialog :visible.sync="addVisible" width="520px" :show-close="true"> <el-dialog :visible.sync="addVisible" width="520px" :show-close="true">
<div class="title">添加医联体</div> <div class="title">{{ title }}</div>
<el-form <el-form
ref="form" ref="form"
:model="form" :model="form"
...@@ -63,13 +63,13 @@ ...@@ -63,13 +63,13 @@
</span> </span>
</el-dialog> </el-dialog>
<!-- 删除提示框 --> <!-- 删除提示框 -->
<el-dialog title="提示" :visible.sync="deleteVisible" width="30%"> <!-- <el-dialog title="提示" :visible.sync="deleteVisible" width="30%">
<span>确定删除吗?</span> <span>确定删除吗?</span>
<span slot="footer" class="dialog-footers"> <span slot="footer" class="dialog-footers">
<el-button @click="deleteVisible = false">取 消</el-button> <el-button @click="deleteVisible = false">取 消</el-button>
<el-button type="primary" @click="confirmDelete">确 定</el-button> <el-button type="primary" @click="confirmDelete">确 定</el-button>
</span> </span>
</el-dialog> </el-dialog> -->
</div> </div>
</template> </template>
<script> <script>
...@@ -171,6 +171,7 @@ export default { ...@@ -171,6 +171,7 @@ export default {
], ],
form: {}, form: {},
deleteId: "", deleteId: "",
title: "添加医联体",
} }
}, },
watch: {}, watch: {},
...@@ -195,6 +196,7 @@ export default { ...@@ -195,6 +196,7 @@ export default {
}, },
// 添加医联体 // 添加医联体
addMedical() { addMedical() {
this.title = "添加医联体"
if (this.$refs["form"]) { if (this.$refs["form"]) {
this.clearForm() this.clearForm()
} }
...@@ -203,6 +205,7 @@ export default { ...@@ -203,6 +205,7 @@ export default {
}, },
// 编辑医联体 // 编辑医联体
editMedical(data) { editMedical(data) {
this.title = "编辑医联体"
console.log(data) console.log(data)
this.form = { ...data } this.form = { ...data }
this.addVisible = true this.addVisible = true
...@@ -236,8 +239,15 @@ export default { ...@@ -236,8 +239,15 @@ export default {
// 删除 // 删除
deleteFunc(data) { deleteFunc(data) {
console.log(data) console.log(data)
this.deleteVisible = true // this.deleteVisible = true
this.deleteId = data.id this.deleteId = data.id
this.$confirm("确定要删除吗?", "警告", {
type: "warning",
})
.then(() => {
this.confirmDelete()
})
.catch(() => {})
}, },
clearForm() { clearForm() {
this.form = {} this.form = {}
......
<template> <template>
<div id="medicalunion-management"> <div id="medicalunion-management">
<div class="top-btn"> <div class="top-btn">
<el-select v-model="selectType"> <el-select v-model="selectType" @change="getArticleList">
<el-option <el-option
v-for="item in selectList" v-for="item in selectList"
:key="item.value" :key="item.value"
...@@ -287,6 +287,7 @@ export default { ...@@ -287,6 +287,7 @@ export default {
size: this.pageSize, size: this.pageSize,
current: this.pageIndex, current: this.pageIndex,
moduleType: "5", moduleType: "5",
articleType: this.selectType - 0,
} }
articleList(params) articleList(params)
.then((res) => { .then((res) => {
......
...@@ -51,33 +51,33 @@ export default { ...@@ -51,33 +51,33 @@ export default {
id: null, id: null,
// 查询列表 // 查询列表
searchList: [ searchList: [
{ // {
label: "角色名", // label: "角色名",
type: "input", // type: "input",
prop: "roleName", // prop: "roleName",
placeholder: "请输入角色名", // placeholder: "请输入角色名",
}, // },
{ // {
label: "状态", // label: "状态",
type: "select", // type: "select",
prop: "status", // prop: "status",
opts: [ // opts: [
{ // {
label: "启用", // label: "启用",
value: 1, // value: 1,
}, // },
{ // {
label: "禁用", // label: "禁用",
value: 0, // value: 0,
}, // },
], // ],
}, // },
{ // {
type: "button", // type: "button",
value: "查询", // value: "查询",
icon: "el-icon-search", // icon: "el-icon-search",
}, // },
{ {
type: "button", type: "button",
color: "primary", color: "primary",
......
...@@ -11,6 +11,8 @@ ...@@ -11,6 +11,8 @@
ref="table" ref="table"
:table-data="tableData" :table-data="tableData"
:columns="columns" :columns="columns"
tab-type="index"
tab-label="序号"
:list-loading="listLoading" :list-loading="listLoading"
:current-page="pageIndex" :current-page="pageIndex"
:total-count="total" :total-count="total"
...@@ -57,6 +59,7 @@ import { ...@@ -57,6 +59,7 @@ import {
getUserInfo, getUserInfo,
setUserRole, setUserRole,
resetPassword, resetPassword,
baseEnable,
} from "@/api/user" } from "@/api/user"
import { getOrgList, getDepartPage } from "@/api/org" import { getOrgList, getDepartPage } from "@/api/org"
import { medicalunionList, baseUnion } from "@/api/medicalunion-management" import { medicalunionList, baseUnion } from "@/api/medicalunion-management"
...@@ -111,21 +114,27 @@ export default { ...@@ -111,21 +114,27 @@ export default {
// 查询列表 // 查询列表
searchList: [ searchList: [
{ {
label: "用户姓名", label: "选择角色",
type: "select",
opts: roleList,
prop: "roleId",
placeholder: "请选择角色",
},
{
label: "登录名",
type: "input", type: "input",
prop: "name", prop: "userName",
placeholder: "请输入用户姓", placeholder: "请输入登录",
}, },
{ {
type: "button", type: "button",
value: "查询", value: "搜索",
icon: "el-icon-search", // icon: "el-icon-search",
}, },
{ {
type: "button", type: "button",
color: "primary", color: "primary",
icon: "el-icon-plus", // icon: "el-icon-plus",
value: "添加", value: "添加",
func: this.handleAdd, func: this.handleAdd,
}, },
...@@ -133,60 +142,68 @@ export default { ...@@ -133,60 +142,68 @@ export default {
searchQuery: "", searchQuery: "",
columns: [ columns: [
{ {
label: "用户姓", label: "登录",
minWidth: 120, width: 140,
value: "name", value: "userName",
}, },
{ {
label: "性别", label: "角色",
value: "sex", value: "roles",
width: 80, minWidth: 180,
formatter: (row) => { formatter: (row) => {
return this.$handle.formatDicList( if (row.roles.length > 0) {
this.dictMap["d-sex"], let roleName = row.roles.map((e) => e.roleName)
String(row.sex) return roleName.join("")
) } else {
return "--"
}
}, },
}, },
{ {
label: "身份证号", label: "医联体名称",
value: "idCard", value: "unions",
minWidth: 180,
},
{
label: "手机",
minWidth: 120,
value: "phone",
},
{
label: "机构",
minWidth: 180, minWidth: 180,
value: "orgName", formatter: (row) => {
if (row.unions.length > 0) {
let unionName = row.unions.map((e) => e.unionName)
return unionName.join("")
} else {
return "--"
}
},
}, },
{ {
label: "科室", label: "医联体编号",
value: "unions",
minWidth: 180, minWidth: 180,
value: "deptName", formatter: (row) => {
if (row.unions.length > 0) {
let unionNo = row.unions.map((e) => e.unionNo)
return unionNo.join("")
} else {
return "--"
}
},
}, },
{ {
label: "登录账户名", label: "添加时间",
minWidth: 150, width: 140,
value: "userName", value: "createTime",
formatter: (row) => {
if (row.createTime) {
return row.createTime
} else {
return "--"
}
},
}, },
{ {
label: "邮箱", label: "状态",
minWidth: 180, width: 140,
value: "email", type: "switch",
value: "status",
func: this.openChage,
}, },
// {
// label: "状态",
// value: "status",
// width: 100,
// formatter(row) {
// return row.status === 1 ? '启用' : '禁用'
// }
// },
{ {
label: "操作", label: "操作",
width: 220, width: 220,
...@@ -250,6 +267,42 @@ export default { ...@@ -250,6 +267,42 @@ export default {
}, },
], ],
}, },
// {
// label: "登录名",
// minWidth: 120,
// value: "name",
// },
// {
// label: "性别",
// value: "sex",
// width: 80,
// formatter: (row) => {
// return this.$handle.formatDicList(
// this.dictMap["d-sex"],
// String(row.sex)
// )
// },
// },
// {
// label: "身份证号",
// value: "idCard",
// minWidth: 180,
// },
// {
// label: "手机",
// minWidth: 120,
// value: "phone",
// },
// {
// label: "机构",
// minWidth: 180,
// value: "orgName",
// },
// {
// label: "科室",
// minWidth: 180,
// value: "deptName",
// },
], ],
tableData: [], tableData: [],
cacheForm: {}, cacheForm: {},
...@@ -370,6 +423,7 @@ export default { ...@@ -370,6 +423,7 @@ export default {
multiple: true, multiple: true,
}, },
], ],
roleList: roleList,
consortiaList: [], consortiaList: [],
consortiaDataRole: [ consortiaDataRole: [
{ {
...@@ -403,6 +457,21 @@ export default { ...@@ -403,6 +457,21 @@ export default {
this.loadMore() this.loadMore()
}, },
methods: { methods: {
// 修改启用状态
// 启用状态
openChage(data, index) {
console.log(data, index)
let params = {
id: data.id,
status: data.status ? 1 : 0,
}
baseEnable(params).then((res) => {
if (res.code == 1) {
// this.$message.success("保存成功")
// this.handleSearch()
}
})
},
loadMore(current = 1) { loadMore(current = 1) {
let params = { let params = {
current: current, current: current,
...@@ -473,15 +542,11 @@ export default { ...@@ -473,15 +542,11 @@ export default {
}) })
}, },
handleReset(row) { handleReset(row) {
this.$confirm( this.$confirm(`【${row.name}】是否重置密码? 重置密码为:123456`, "提示", {
`【${row.name}】是否重置密码? 重置密码为123456!!`, confirmButtonText: "确定",
"提示", cancelButtonText: "取消",
{ type: "warning",
confirmButtonText: "确定", })
cancelButtonText: "取消",
type: "warning",
}
)
.then(() => { .then(() => {
resetPassword(row.id).then((res) => { resetPassword(row.id).then((res) => {
if (res.code === 1) { if (res.code === 1) {
...@@ -530,6 +595,20 @@ export default { ...@@ -530,6 +595,20 @@ export default {
handleConsortia({ id }) { handleConsortia({ id }) {
this.rowId = id this.rowId = id
this.$refs.consortiaRole.open() this.$refs.consortiaRole.open()
getUserInfo({ userId: id }).then((res) => {
if (res.code === 1) {
const consortiaList = []
res.data.unionList.map((item) => {
consortiaList.push(item.id)
})
this.consortiaList = [...consortiaList]
this.$refs.consortiaRole.initFields({
consortiaList: consortiaList,
})
}
})
}, },
handleRoleConfirm(form) { handleRoleConfirm(form) {
const data = { const data = {
...@@ -545,6 +624,7 @@ export default { ...@@ -545,6 +624,7 @@ export default {
setUserRole(data).then((res) => { setUserRole(data).then((res) => {
if (res.code === 1) { if (res.code === 1) {
this.$message.success(res.msg) this.$message.success(res.msg)
this.handleSearch()
this.$refs.role.close() this.$refs.role.close()
} }
}) })
......
...@@ -3916,13 +3916,12 @@ ecc-jsbn@~0.1.1: ...@@ -3916,13 +3916,12 @@ ecc-jsbn@~0.1.1:
jsbn "~0.1.0" jsbn "~0.1.0"
safer-buffer "^2.1.0" safer-buffer "^2.1.0"
echarts@^5.1.2: echarts@4.8.0:
version "5.1.2" version "4.8.0"
resolved "https://registry.yarnpkg.com/echarts/-/echarts-5.1.2.tgz#aa1ab0cef5b74fa2f7c620261a5f286893d30fd1" resolved "https://registry.npmmirror.com/echarts/-/echarts-4.8.0.tgz#b2c1cfb9229b13d368ee104fc8eea600b574d4c4"
integrity sha512-okUhO4sw22vwZp+rTPNjd/bvTdpug4K4sHNHyrV8NdAncIX9/AarlolFqtJCAYKGFYhUBNjIWu1EznFrSWTFxg== integrity sha512-YwShpug8fWngj/RlgxDaYrLBoD+LsZUArrusjNPHpAF+is+gGe38xx4W848AwWMGoi745t3OXM52JedNrv+F6g==
dependencies: dependencies:
tslib "2.0.3" zrender "4.3.1"
zrender "5.1.1"
ee-first@1.1.1: ee-first@1.1.1:
version "1.1.1" version "1.1.1"
...@@ -7978,6 +7977,11 @@ pbkdf2@^3.0.3: ...@@ -7978,6 +7977,11 @@ pbkdf2@^3.0.3:
safe-buffer "^5.0.1" safe-buffer "^5.0.1"
sha.js "^2.4.8" sha.js "^2.4.8"
pdfjs-dist@2.5.207:
version "2.5.207"
resolved "https://registry.npmmirror.com/pdfjs-dist/-/pdfjs-dist-2.5.207.tgz#b5e8c19627be64269cd3fb6df3eaaf45ddffe7b6"
integrity sha512-xGDUhnCYPfHy+unMXCLCJtlpZaaZ17Ew3WIL0tnSgKFUZXHAPD49GO9xScyszSsQMoutNDgRb+rfBXIaX/lJbw==
performance-now@^2.1.0: performance-now@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
...@@ -10381,11 +10385,6 @@ ts-pnp@^1.1.6: ...@@ -10381,11 +10385,6 @@ ts-pnp@^1.1.6:
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
tslib@2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c"
integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==
tslib@^1.9.0: tslib@^1.9.0:
version "1.14.1" version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
...@@ -11299,12 +11298,10 @@ zip-stream@^2.1.2: ...@@ -11299,12 +11298,10 @@ zip-stream@^2.1.2:
compress-commons "^2.1.1" compress-commons "^2.1.1"
readable-stream "^3.4.0" readable-stream "^3.4.0"
zrender@5.1.1: zrender@4.3.1:
version "5.1.1" version "4.3.1"
resolved "https://registry.yarnpkg.com/zrender/-/zrender-5.1.1.tgz#0515f4f8cc0f4742f02a6b8819550a6d13d64c5c" resolved "https://registry.npmmirror.com/zrender/-/zrender-4.3.1.tgz#baf8aa6dc8187a2f819692d7d5f9bedfa2b90fa3"
integrity sha512-oeWlmUZPQdS9f5hK4pV21tHPqA3wgQ7CkKkw7l0CCBgWlJ/FP+lRgLFtUBW6yam4JX8y9CdHJo1o587VVrbcoQ== integrity sha512-CeH2TpJeCdG0TAGYoPSAcFX2ogdug1K7LIn9UO/q9HWqQ54gWhrMAlDP9AwWYMUDhrPe4VeazQ4DW3msD96nUQ==
dependencies:
tslib "2.0.3"
zwitch@^1.0.0: zwitch@^1.0.0:
version "1.0.5" version "1.0.5"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment